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 &
■ En el caso del “ se deberá usar la secuencia "
■ En el caso del < se deberá usar la secuencia <
■ En el caso del > se deberá usar la secuencia >
■ En el caso del ‘ se deberá usar la secuencia '
Ejemplos:
Para representar nombre=“Juan & José & “Niño”” se usará nombre=”Juan & José & "Niño"”
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 &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.