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.

Liberación 2011.02.25 BETA

Es para nosotros un gusto anúnciales una nueva versión la librería, es la liberación mas grande que se ha realizado, esto debido a la gran cantidad de cambios realizado en las dos plataformas: Delphi y Dot Net.

Hemos liberado esta versión BETA, y aun que se han hecho una batería de pruebas bastante extensa es posible que aun existan errores, así que pedimos a todos ustedes la descarguen y verifiquen su funcionamiento.

Algunos se preguntaran que sigue, bueno esto son algunos de los cambios que verán en la próxima liberación

  1. Generación del código de barras dibimencional
  2. Soporte para adendas
  3. Validación del sello generado por el PAC
  4. Generación del complemento detallista, esto para la versión de Dot Net, ya que la de Delphi ya está funcionando.

Para cundo todo esto, podría ser la siguiente pregunta y creemos que la liberación la dividiremos en 2 partes, la primera sacando lo del código de barras y la segunda los puntos restantes, esto por la urgencia que se tiene de generar los códigos del CFDI.

Que disfruten la liberación y quedamos en espera de sus comentarios.

Versión para C#

Versión para Delphi

Acerca del CFDI

Hemos creado este post, para las personas que nos  han estado cuestionando acerca de la generación del CFDI con la librería y queremos contarles que no se preocupen, la generación de CFDI ya está incluida en la librería, solo que actualmente se encuentra en versión de BETA, la verdad es que hemos tenido que realizar bastantes cambios para poder soportar la generación de CFDI; ya se termino toda la codificación, ya se han hecho pruebas básicas del funcionamiento y al parecer todo está trabajando sin problemas.

Ahora bien, está en estado BETA porque preferimos realizar mas pruebas antes deliberar definitivamente, además de que los cambios realizados impactaron directamente lo que ya existía y existe la posibilidad de que se halla inyectado un error en el código que ya estaba trabajando.

En estos momentos tenemos un usuario, el cual me ha apoyado mucho, utilizando la librería y generando CFDI en un ambiente de pruebas y según me comenta todo esta trabajando a la perfección.

Si alguno le es prioritario tener dicha funcionalidad, le puedo liberar una versión para que comience a jugar con ella y vea como es el proceso de generación.

Además de lo anterior, queremos contarles que estamos trabajando en mas cosas:

  1. Generación de CFD y CFDI con complementos.
  2. Validación de CFD y CFDI con/sin complementos
  3. Validación del folio y del status del certificado usando una base de datos, con esto se evita cargar los archivos del SAT a memoria.

Finalmente nos gustaría poder agregar algo mas antes de liberar la librería y seria la generación del código de barras bidimensional; ya que es parte del CFDI y pensamos que es prioritario.

Tentativamente la fecha de liberación definitiva seria el viernes de la otra semana.

Quedamos en espera de sus comentarios.

 

Registro

Como podrán notar, hemos cerrado el proceso de registro de nuevos usuarios enel foro, esto debido a un problema que tenemos con dicho proceso, resulta que últimamente se han registrado muchos usuarios basura,  esto es, “usuarios” que realmente apuntan a sitios de pornografía o que se inscriben para luego promocionar viagara u otro tipo de productos.

Diariamente tenemos mas de 100 registros de este tipo de “usuarios”, inicialmente se implemento que para aceptar a un usuario debería primero ser aprobado, pero llevar a cabo dicho proceso nos esta quitando mucho tiempo, tiempo que debería usar para mejorar la librería.

Debido a lo anterior hemos decidido cerrar el proceso de registro. Se que muchos se dirán que es una medida drástica, pero créanme es necesaria ya que la perdida de tiempo es mucho.

Si alguno desea registrarse en el foro, les pediría que por favor se pusiera en contacto con nosotros para poderlos ayudar en dicha labor.

Si alguno de ustedes es experto en el tema y conoce una mejor solución, les agradecería se pusieran con contacto con nosotros.

Vamos a probar un tiempo con esta medida a ver como nos va,

Hasta la próxima…