Electronic Document Library. ¿Librería o biblioteca?

Hace algunos días hablando con AL González, un excelente desarrollador y muy buen colega, nos hizo ver el error que comúnmente cometemos al hacer la traducción de un vocablo inglés, en este caso la plática se centro en la incorrecta traducción de la palabra Library, la cual  tradujimos como librería.

Este caso es lo que se conoce como falso amigo: “Un falso amigo es una palabra de otros idiomas que se parece, en la escritura o en la pronunciación, a una palabra en la lengua materna del hablante, pero que tiene un significado diferente.”

Para mayor referencia pueden leer esto.

Ahora bien, la pregunta del millón es: ¿Cuál es la traducción correcta en este caso? y la respuesta es: Biblioteca.

Para nosotros fue una gran sorpresa cuando descubrimos  nuestro gran error y aunque sé que muchos de ustedes ya lo sabían, quisimos publicar este post por si alguien más estaba en el mismo error.

Ahora que ya lo sabemos, esperamos en un futuro no muy lejano estar haciendo las correcciones respectivas en el sitio, foro, blog y todo lo relacionado con el proyecto para que use la palabra correcta.

Hasta la próxima.

Liberación 2011.06.16

Es motivo de alegría para nosotros liberar esta nueva versión de la biblioteca en su versión de Delphi; ha sido mucho el trabajo y tiempo invertido para poder lograrlo, pero hemos podido alcanzar el objetivo y ahí está el resultado.

Esta versión trae la conexión con un PAC y los respectivos ejemplos de cómo lograrlo de forma rápida y sencilla.

El PAC con el que se integra es Facuraxion, el mismo con el que se integra la versión en C# y el cual ya varios usuarios están usando para timbrar.

Si tienen alguna duda o pregunta acerca de cómo pueden integrarse con él mismo, pueden enviarnos un correo a la cuenta de soporte y con gusto los estarémos apoyando.

Otro punto fue que eliminamos el soporte para Delphi XE, ya que se están presentando problemas con esa versión de Delphi, colmo recordarán dicha versión se estaba soportando en forma BETA, esperamos en una futura liberación incluirla.

De nuestra parte es todo, esperamos disfruten esta nueva versión.

Versión para C#

Versión para Delphi

Saludos

Web service del SAT

Si lo que estas buscando es referente al Webservice para la descarga del archivo XML de tus facturas del servidor del SAT, te invitamos a que conozcas acerca de este tema, dando clic en la siguiente liga:

Webservice para descargar XML del SAT

Uno de nuestros visitantes al blog nos  escribió esto:

“…referente al web service público que el SAT tiene, según mis investigaciones en los foros si lo tiene pero no hay mucha información al respecto, al parecer solos los PAC tiene esta información que el SAT les pasa como un Development Kit o algo así, si esto es cierto tienes planeado sacar un DLL para conectarse directo a los WS del SAT?”

Inicialmente queríamos responderle directamente, pero creo que es una mejor idea si lo creamos con un post, asi todos podrán ver la repsuesta.

Actualmente el SAT tiene 2 web service publicados para el tema del CFDI:

Recepción del CFDI.

  • Fue creado para que el PAC le envíe el CFDI una vez generado
  • Este envío debe realizarlo en un tiempo menos a 1 hora una vez ha sido generado el CFDI, si pasa dicho tiempo si es recibido, pero es recibido como extemporáneo.
  • Para consumir dicho web service es necesario contar un certificado expedido por el SAT y que le es entregado a cada PAC una vez que ha superado el proceso de certificación.
  • El envío de dichos archivo al SAT es una obligación del PAC al SAT; no es una ventaja que te ofrezcan, ni un beneficio, como muchos nos lo quieren vender, ya que ellos adquirieron esa obligación en el momento que se certificaron.

Recepción de la cancelación

  • Este web service fue creado por el SAT para la recepción de la notificación de cancelación de un CFDI.
  • En este caso no es una obligación por parte del PAC ofrecer dicho servicio, ya que existen diferentes mecanismos para llevarlo a cabo, uno de ellos es ingresar a la página del SAT y realizar la cancelación de forma manual.
  • Si un PAC nos ofrece este servicio a través de algún medio, entonces si nos está dando un valor agregado.
  • Para consumir dicho web service es necesario contar un certificado expedido por el SAT y que le es entregado a cada PAC una vez que ha superado el proceso de certificación.

Viendo todo lo anterior podríamos concluir:

  1. La existencia de dichos web service no es un mito ni una especulación, existen y están funcionando.
  2. Las únicas personas que tienen permitido consumirlo son los Proveedores Autorizados de Certificación o PAC, ya que los certificados para esto son creados exclusivamente para los ellos.
  3. El primero web service no tiene sentido para nosotros como desarrolladores, ya que es para que los PAC cumplan con sus obligaciones.
  4. El único web service que tiene sentido consumir desde es el de cancelación.

Como bien saben hemos integrado la librería con PAC, el cual tiene previsto en un futuro cercano ofrecer en su web service la posibilidad de cancelar los CFDI, en el momento que esté disponible integrare la cancelación para que de forma transparente y automática puedan realizado.

Como habrán podido notar, siempre hemos tratado de integrar en la librería todo lo que está disponible para el CFD y CFDI, y este caso no va a ser la excepción; así que si la autoridad llegase a liberar el web service de cancelación para que podamos consumirlo, tenlo por seguro que lo estaremos integrando en las 3 versiones de la librería : Dot Net (C#, VB.Net, etc), Delphi y la DLL.

Hasta la próxima.

Liberación 2011.04.27

Hace algunos días liberamos una versión de la librería, para C#, que incluía la integración con un PAC, esta integración es de forma trasparente; fueron varios los usuarios que se pusieron directamente en contacto con nosotros ya que no existía un ejemplo de cómo lograrlo; pues bien el día de hoy hemos agregado un ejemplo a la generación del CFDI en donde se demuestra cómo realizar la conexión con el PAC y como generar el CFDI con el timbre ya incluido.

Y ya saben, si tienen inquietudes, no duden en escribirnos en el foro.

El siguiente paso es implementar la misma funcionalidad pero en la versión de Delphi.

Que la disfruten.

Versión para C#

Versión para Delphi

Liberación 2011.04.23

Es un placer para nosotros darles a conocer esta nueva versión de la librería en donde se han realizado cambios muy importantes, como la conexión directa con un PAC, en esta oportunidad se ha implementado con la gente de Facturaxion; la funcionalidad generada hace que la obtención del timbre fiscal sea sencilla y sin ningún tipo de complicación.

De igual forma se ha liberado la generación del complemento Detallista, que era el único complemento que faltaba por implementar en la versión de C#, ya que en la versión de Delphi hace días ya estaba incluido.

En la versión de Delphi el cambio más importante ha sido el soporte para la versión de Delphi XE.

Como siempre, los invitamos a descargar la última versión y leer el historial de cambios ya que se realizaron bastantes cambios, mejoras y correcciones.

Versión para C#

Versión para Delphi

Archivo de folios

Como muy bien sabrán el SAT pública en su sitio FTP un archivo en donde está contenida la información de los folios autorizados; en dicho archivo podremos encontrar:

  • El RFC a quien se le autorizo
  • El numero de aprobación
  • E año de aprobación
  • La serie en caso de que hubiera solicitado folios para una serie en particular.
  • El rango de folios asignados.

Dicho archivo es utilizado por la librería para validar que el folio del CFD (versión 1.0 o 2.0) hubiera sido autorizado por el SAT.

Este archivo puede ser utilizado de 2 formas:

  • Directamente, esto es, se asigna el archivo a la librería y una vez que la validación es requerida se carga el archivo a memoria y se realiza el proceso de validación.
  • En una base de datos, para esto la librería ofrece clases que permiten leer el archivo y cargarlo a una base de datos; cuando la validación es requerid se dispara un evento al cual se pueden suscribir y realizar una búsqueda en la base de datos. Para este caso se incluye un ejemplo dentro del conjunto de ejemplos con lo que se libera la librería.

El día ayer tratamos de descargar la última versión del archivo y que sorpresa nos llevamos al ver que dicho archivo pesaba 2.06 GB, así es mis queridos lectores, inicialmente creíamos que era un error, así que decidimos descargarlo y que sorpresa nos llevamos al ver que el archivo era correcto.

Al pregunta del millón es ¿Por qué creció tanto dicho archivo?, realmente desconocemos el motivo, es algo extremadamente extraño, ya que la última vez que lo vimos, hace como 1 semana, estaba en 24 megas si no estamos mal.

El día de hoy hemos vuelto a revisar el archivo y su tamaño ya cambio, ahora esta de 1.1 GB.

Ahora tratamos de descargarlo usando el famosísimo FileZilla y resulta que la descarga siempre se corta a las 67 MB.

Vamos a tratar de verificar con la gente del SAT a ver qué está pasando, mientras, nuestra teoría de todo esto, es el SAT está haciendo algo mal al momento de generarlo, ya que no es lógico un crecimiento de esa magnitud de una semana a otra.

 

Caracteres especiales

El carácter apostrofe

Como todos saben existen ciertos caracteres que no se pueden representar directamente en XML , deben ser codificados; el SAT en el anexo 20 ha establecido como deben se codificados:

En particular se deberá tener cuidado de que aquellos casos especiales que se presenten en los valores especificados dentro de los atributos del archivo XML como aquellos que usan el carácter &, el carácter “, el carácter ‘, el carácter < y el carácter > que requieren del uso de secuencias de escape.

■       En el caso del & se deberá usar la secuencia &amp;

■       En el caso del “ se deberá usar la secuencia &quot;

■       En el caso del < se deberá usar la secuencia &lt;

■       En el caso del > se deberá usar la secuencia &gt;

■       En el caso del ‘ se deberá usar la secuencia &apos;

Ejemplos:

Para representar nombre=“Juan & José & “Niño”” se usará nombre=”Juan &amp; José &amp; &quot;Niño&quot;”

Actualmente la librería ya contempla la codificación de casi todos los caracteres, menos el carácter apostrofe, el cual es totalmente válido en XML, este carácter podría usarse directamente en el XML a diferencia de los otros (< > “ &).

Algunos de nuestros lectores se preguntan cómo trata la librería dicho carácter cuando está contenido en alguna parte del XML, y la respuesta es, depende de la versión:

  • En la versión de C# es representado como apostrofe ( ‘ )
  • En la versión de Delphi es representado como &amp;apos;

Lo curioso de todo esto es que un XML generado de cualquiera de las dos formas es reportado como válido por el validador del SAT.

Ya modificamos la librería para que el XML salga como lo solicita el SAT y dicho carácter ( ‘ ) sea codificado cumpliendo el anexo 20; esto saldrá en la siguiente versión, que esperamos que sea la versión 2011.03.19.

Personalmente no estamos de acuerdo con la codificación de dicho carácter por dos motivos:

  • Es totalmente válido usarlo directamente en el XML, el validador del SAT ni otros validadores que he usado reporta problemas con este aspecto.
  • Afecta los tiempos de generación del CFD, ya que incrementa algunas milésimas de segundo el proceso, no es algo importante, pero soy fanático del  performance.

Es por eso que hemos dejado activada la codificación por default, pero se puede desactivar, esto a través de un parámetro.

 

El carácter asterisco (*)

Hace algunos días un usuario nos reporto que un CFD generado usando la librería y que contenida el carácter en cuestión marca como inválido en el validador del SAT; nosotros  que siempre estamos pendientes de cada problema, decidimos hacer nuestras pruebas y efectivamente, el problema reportado existía.

Decidimos  resolver el problema, hicimos una revisión profunda al código de la librería, pero no encontramos nada, entonces decidímos validar el CFD con otros validadores www.admincfd.com.mx y lo curioso fue que dichos validadores nos reportaron que el CFD estaba bien; en ese momento empezamos a sospechar que el problema no estaba en la librería, ni en el XML generado, el problema estaba en el validador del SAT.

Al día siguiente hablamos con mi contacto en el SAT para saber si el tenia algún reporte sobre el problema, nos indicio que no, que el XML debería ser validado correctamente, nos pidió que le enviáramos un ejemplo y él lo iba a ver con la gente de tecnología, entonces decidimos resolver este enigma, preparamos unos ejemplos y decidímos probarlo en el SAT y capturar las imágenes para demostrar que nos estaba reportando el validador, que sorpresa nos llevamos que ahora el validador nos decía que el CFD que contenía ( * ) y que nos había reportado mal, hace un tiempo atrás, ahora estaba bien; pensando que nosotros estaba haciendo algo mal, le pedímos a otras 3 personas que validaran el XML y que sorpresa nos llevamos cuando ellos nos reportaron que a ellos también se los estaba dando como valido.

Para nosotros este caso muere ahí, pero nos quedan ciertas dudas acerca de la efectividad del validador del SAT ya que no es la primera vez que escuchamos este tipo de historias, que para ser honestos es la primera vez que nos pasa.

 

Liberación 2011.03.15

Es un gusto para nosotros liberar esta nueva versión que incluye cambios importantes, siendo el más relevante la capacidad de generar el código de barras bidimensional o CBB, el cual puede ser generado en diferentes formatos y sin necesidad de almacenarlo en el disco duro; el proceso de generación optimizado de tal forma que el mismo es generado en un tiempo de 14 milisegundos.

En esta liberación hemos eliminado la palabra BETA de la misma, ya que considero que la librería ha alcanzado un buen nivel de maduración y han sido corregidos los pocos errores que han reportado los usuarios.

Se hicieron algunas correcciones, mejoras y se agrego funcionalidad; para mayor información pueden leer el archivo de historial de cambios.

Versión para C#

Versión para Delphi

Campos vacios

Escribimos este post para aclarar, por lo que vemos han sido varios usuarios los que nos han reportado problemas con el manejo de los campos opcionales del CFD y cuando decimos CFD nos referimos al CFD y CFDI.

Cada atributo del CFD dentro de la librería, tiene diferentes métodos que permite ejecutar diferentes opciones y de las al parecer no son muy conocidas, y creemos que esto se debe más que nada a que hemos hecho poco eco sobre las mismas; así que trataremos de proporcionar una explicación sobre las mismas.

Como decía, todos los atributos, un ejemplo es Folio, Serie, RFC del emisor, etc tienen una serie de métodos que debemos usar si queremos generar correctamente el CFD.

Algunos de estos son:

  • Método Clear(): Permite limpiar un campo, si el atributo es de tipo numérico le asigna cero, si es de tipo fecha le asigna la fecha mínima soportado por Net y si es de tipo string asigna vacio, es importante notar que es vacio y no nulo.

La importancia de este método, que es no solo limpia el campo sino que además le indica a la librería que ese campo no lo debe de usar en la generación del CFD.

Nuestra recomendación es que usen dicho método cuando quieran que un atributo no sea tomado en cuenta en la generación del CFD.

  • Propiedad IsAssigned: Indica si el atributo tiene algún valor, aunque sea cero o vacio; es de solo lectura y se ve afectado cuando se asigna un valor al atributo o cuando se ejecuta el método Clear().
  • Método AsString(): Permite obtener le valor almacenado en el atributo como una cadena de texto, en el caso de los tipos de datos numérico y de tipo fecha el valor obtenido es como se almacena en el XML.
  • Método AsXML(): Permite obtener le valor almacenado en el atributo como una cadena de texto en el formato que es requerido por el SAT.
  • Método FillWithRandomData(): Llena el campo con un valor aleatorio, es mas de  uso interno.
  • Método SetData(): Es de uso interno y NUNCA debe ser utilizado.

Como conclusión, cuando quieran que un atributo no salga en el XML usen el método Clear().

Hasta la próxima.