Archivos XML de la FEL. Para inexpertos

Preámbulo

Durante la conferencia de @Blagmiro_Contreras sobre la FEL les comenté que pondría en un post un link a los archivos que uso para manejar los XML.

He decidido agrandarlo un poquito mas, tratando de explicar varios aspectos de la FEL y la forma en que se estructura en un archivo XML. Voy a mantener el tema cerrado, pero si alguien tiene una inquietud, yo no he logrado explicar con claridad algún tema, o desean que me extienda, por favor hacérmelo llegar por mensaje privado.

Lección 1. Conceptos Básicos

¿Para qué entender el XML?

La SAT le ha dado importancia mayor al XML. Es el que contiene los datos verdaderos que están guardados tanto en los servidores de ellos (SAT) como los de los certificadores.

La representación gráfica ya sea un archivo PDF o impresión en papel NO ES EL DOCUMENTO DE MAYOR RELEVANCIA.

En caso de diferencias entre el uno y el otro siempre tendrá validez que se envió y firmó en un archivo XML.

¿Qué es el formato XML?

EXtensible Markup Language. Lenguaje extensible de etiquetas para una traducción que se pueda entender razonablemente.

Es un meta-lenguaje (Lenguaje para definir lenguajes) desarrollado por el World Wide Web Consortium (W3C) que con su estructura rigurosa permite definir la gramática de diferentes lenguajes.

  • Lo pueden usar los químicos para definir un sistema universal para entender y transmitir la estructura de una molécula (lenguaje)
  • Lo pueden usar los informáticos para definir la estructura de un lenguaje de programación
  • Lo ha usado la SAT para definir la forma de una factura.

En resumen XML es un lenguaje para:

  1. Definir lenguajes
  2. Para formar acuerdos de intercambio de información entre sistemas (Protocolos de intercambio)

Todo lo que se pueda expresar de manera ordenada y estructurada, se puede definir con un XML.

Para mayores referencias históricas se puede consultar la Wikipedia https://es.wikipedia.org/wiki/Extensible_Markup_Language

¿Qué caracteriza un formato XML?

La principal característica es que tiene estructura y etiquetas que se abren y se cierran para crear bloques de información anidados llamados NODOS.

Se utilizan los símbolos < y > para encerrar las etiquetas y una / para indicar que la etiqueta es de cierre.

Ejemplo:

image

Como se podrá notar en el ejemplo anterior, el XML es verboso (lleno de palabras) pero puede ser claro para quien comprenda la estructura de lo que debe contener.

¿Qué lleva un archivo en formato XML?

Primera Línea Generalmente contiene datos sobre cómo se entiende el archivo. Esto obedece a que los sistemas informáticos necesitan ser orientados sobre la forma de trabajar o entender un documento.

Suele ser algo como

image

Y no voy a entrar en detalles de lo que significa. Para efectos revisar el contenido de una FEL no nos servirá.

Después de la Primera Línea ya vienen las etiquetas de definición de un NODO raíz que contiene otras etiquetas anidadas (Nodos)

En este caso el nodo de la raíz se llama GTDocumento y a su vez contiene dos nodos

  1. SAT
  2. Signature

image

La parte SAT contiene la información del documento y Signature tiene una firma criptográfica que permite validar que el nodo SAT no ha sido modificado. La firma criptográfica se crea con el archivo de firma .PFX que se asigna al contribuyente en el portal de la agencia virtual.

2 Me gusta

Lección 2. Herramientas

¿Cómo entender un XML de una factura?

Herramientas

Lo primero es darle un formato que sea legible. Como los documentos XML se transmiten a través de sistemas de comunicaciones, estos suelen “optimizarse” para reducir espacios innecesarios, lo cual los vuelve totalmente ilegibles para un humano.

Yo uso el programa gratuito XML Copy (http://xml-copy-editor.sourceforge.net/) para ayudarme cuando necesito comprender un archivo XML. Con una tecla [F11] se puede “embellecer” el documento para la lectura humana.

También uso otros como Notepad++ con plugin XML Tools, pero ese es mas de programadores y técnicos de computación.

Lección 3. No todo el contenido del XML de la FEL sirve.

Ignorar el nodo Signature

El ejemplo que mostré antes y vuelvo a usar ahora

image

Corresponde a una FEL.

El nodo raíz “se llama” GTDocumento y el mismo tiene dos nodos hijos

  1. El nodo SAT
  2. El nodo Signature o de fima (pronunciado ′sĭgnəchər)

Hay que ignorar el nodo Signature. Tiene miles de caracteres que no se pueden interpretar. Solo las computadoras y con acceso al archivo de la firma (.pfx) pueden determinar si la firma corresponde. No hay poder humano que permita hacerlo manualmente.

Ejemplo de un nodo Signature real que para un humano es solo una colección de caracteres sin sentido.

2 Me gusta

Lección 4. Profundizando en el nodo SAT

Nodo SAT. Estructura general

La imagen que muestro a continuación debería dar una clara idea de cómo se estructura la factura electrónica. He quitado caracteres adicionales que dificultan la enseñanza y he dejado la parte medular para mayor comprensión.

Ponga atención al nodo DatosGenerales porque vamos a discutirlo a continuación

La etiqueta DatosGenerales se cierra a si misma. La etiqueta es <DatosGenerales … />
Es lo mismo que escribir

image

Siempre y cuando entre las etiquetas <Datos Generales>" y </DatosGenerales> no haya ningún texto.

Esta etiqueta tiene algunos atributos que se expresan como pares atributo=valor. En este caso los atributos son CodigoMoneda con valor “GTQ”, FechaHoraEmision con valor "2019-10-14T11:53:06.000-06:00 y Tipo con valor “NCRE”

NOTA: Los atributos van dentro de la etiqueta como pares ordenados: atributo=valor. Los nodos van fuera de la etiqueta pero flanqueados (encerrados) por la etiqueta que abre y la que cierra.

El resto de nodos: Emisor, Receptor, Items, Totales, van escritos en ese orden.

Los otros dos nodos:

  • Complementos es obligatorio en algunos documentos, como el del ejemplo que corresponde a una nota de crédito.

  • Adenda son textos que NO forman parte de la información fiscal (datos de impuestos) del documento que a veces es necesario ponerlo para que salga impreso. Un ejemplo de Adenda sería alguna descripción necesaria para que sea procesado adecuadamente en la aduana de salida o de entrada al país de destino. Mas claro: un número de registro sanitario en el país de destino. Suele ponerse en el documento en papel y para ello se manda como adenda en el XML

Palabras para recordar: etiqueta, nodo, atributo

Pronunciación de Signature según https://en.wiktionary.org/wiki/signature: ′sĭgnəchər

3 Me gusta

@rtusher vengo leyendo detenidamente las lecciones y me surge la duda es HTML como está estructurada parte de la información, ya que veo muchas instrucciones muy comunes de como abrir o cerrar párrafos.
Muy interesante y gracias por la información.