ESTE ES EL PASO 1. Generar el XML
Es mas facil explicarlo con un ejemplo, aqui esta la base, TODAVIA NO SE considera una factura, le falta mucho, pero empezamos por esto:
Como pueden ver (con ojos de programador) ahi esta toda la informacion, emisor, receptor, lo que se esta facturando, fechas etc etc<?xml version="1.0" encoding="utf-8" ?>
- <Comprobante xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd" version="2.0" serie="POSA" folio="9654772" fecha="2010-06-01T13:20:14" noAprobacion="13130" anoAprobacion="2009" formaDePago="Pago en una sola exhibicion" subTotal="427.59" total="496.00" metodoDePago="Efectivo" tipoDeComprobante="ingreso">
- <Emisor rfc="ODM950324V2A" nombre="OFFICE DEPOT DE MEXICO S.A. DE C.V.">
<DomicilioFiscal calle="JUAN SALVADOR AGRAZ" noExterior="101" localidad="SANTA FE" municipio="CUAJIMALPA DE MORELOS" estado="DISTRITO FEDERAL" pais="MÉXICO" codigoPostal="05300" />
<ExpedidoEn calle="AV AMERICAS" noExterior="00000654" colonia="LADRON DE GUEVARA" municipio="GUADAL.SECTOR HIDALGO" estado="JALISCO" pais="MEXICO" codigoPostal="44670" />
</Emisor>
- <Receptor rfc="QCS931209G49" nombre="QUALITAS COMPANIA DE SEGUROS SAB DE CV">
<Domicilio calle="JOSE MA CASTORENA" noExterior="426" colonia="SAN JOSE DE LOS CEDROS" municipio="CUAJIMALPA" estado="MEXICO D.F." pais="MEX" codigoPostal="05200" />
</Receptor>
- <Conceptos>
<Concepto cantidad="1" unidad="12P" descripcion="CHEQUE POLIZA 1/2 OF 12 BLOCKS" valorUnitario="171.55" importe="171.55" />
<Concepto cantidad="1" unidad="P50" descripcion="PAPEL AUTOADHERIBLE CTA C/50" valorUnitario="85.34" importe="85.34" />
<Concepto cantidad="1" unidad="P50" descripcion="PAPEL AUTOADHERIBLE CTA C/50" valorUnitario="85.34" importe="85.34" />
<Concepto cantidad="1" unidad="P50" descripcion="PAPEL AUTOADHERIBLE CTA C/50" valorUnitario="85.34" importe="85.34" />
</Conceptos>
- <Impuestos totalImpuestosTrasladados="68.41">
- <Traslados>
<Traslado impuesto="IVA" tasa="16.00" importe="68.41" />
</Traslados>
</Impuestos>
</Comprobante>
Para explicar un poco tomemos el nodo "Emisor" (por cierto, el "emisor" es la empresa que esta facturando, "receptor" es el cliente)
<Emisor rfc="ODM950324V2A" nombre="OFFICE DEPOT DE MEXICO S.A. DE C.V.">
<DomicilioFiscal calle="JUAN SALVADOR AGRAZ" noExterior="101" localidad="SANTA FE" municipio="CUAJIMALPA DE MORELOS" estado="DISTRITO FEDERAL" pais="MÉXICO" codigoPostal="05300" />
<ExpedidoEn calle="AV AMERICAS" noExterior="00000654" colonia="LADRON DE GUEVARA" municipio="GUADAL.SECTOR HIDALGO" estado="JALISCO" pais="MEXICO" codigoPostal="44670" />
</Emisor>
Analicemos ..... El nodo empieza con su nombre y tiene dos atributos (vayan aprendiendo estos nombres..."nodo" y "atributo")
<Emisor rfc="ODM950324V2A" nombre="OFFICE DEPOT DE MEXICO S.A. DE C.V."> el nombre del nodo es "Emisor" y tiene el atributo "rfc" y el atributo "nombre"
ah! antes que se me olvide, el nombre del nodo y del atributo son sensibles a mayuscula/minuscula es decir TIENE que ser rfc con *minusculas*
Dentro de "Emisor" hay un nodo hijo llamado "DomicilioFiscal" con varios atributos como calle, noExterior (numero exterior) noInterior localidad etc etc,
<DomicilioFiscal calle="JUAN SALVADOR AGRAZ" noExterior="101" localidad="SANTA FE" municipio="CUAJIMALPA DE MORELOS" estado="DISTRITO FEDERAL" pais="MÉXICO" codigoPostal="05300" />
Tambien hay otro nodo hijo llamado "ExpedidoEn" que se usa solo en caso que el domicilio fiscal no sea el mismo que el domicilio donde se expide la factura, o en menos palabras, la direccion de la sucursal
Por ultimo se cierra ese nodo con </Emisor>
Ahora, toda la factura se encierra entre el nodo <Comprobante> y su correspondiente </Comprobante>
Se que esta pequeñisima explicacion deje mas dudas que las que resuelve, la idea es irse adentrando a los terminos como "nodo" "atributo", creo que esto tambien ayuda a poder "leer" un XML y tratar de entender que tipo de informacion esta ahi dentro.
Recuerden, TODOS los nombre de los nodos y atributos que debe llevar estan en el famoso Anexo 20, tambien ahi marca que atributos son obligatorios y cuales son opcionales
Y como programo eso? bueno, lo mas seguro es que tengan que conseguir alguna libreria, modulo o dll adecuado para cada lenguaje, si programan en Delphi, estan de suerte, tengo en venta unas rutinas que ya estan listas para usar, envienme un mensaje privado para darles mas informacion.