Introduccion
Para realizar el timbrado de Factura o Nominas se deben contruir documentos XML que cumplan con las especificaciones del SAT.
El SAT proporciona los esquemas de Factura y Nomina en documentos xsd. Con estos tenemos la posibilidad de comprobar que el documento XML cumple con la estructura requerida.
Los esquemas que proporciona, entre otro, son:
- cfdv32.xsd. Para el timbrado de Factura. Se puede descargar desde: http://www.sat.gob.mx/cfd/3/cfdv32.xsd
- nomina11.xsd. Para el timbrado de Nomina. Para Nomina se requiere tambien el documento cfdv32.xsd. Se puede descargar desde: http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina11.xsd
XMLBeans
XMLBeans es una tecnologia de Apache para tener acceso a un XML en lenguaje de Java. Mediante está, usamos directamente objetos Beans con sus set y get para contruir un documento XML.
Pasos para contruir XML con las especificaciones del SAT
- Descargar la ultima versión de XMLBeans http://www.apache.org/dyn/closer.cgi/xmlbeans/binaries
- Descomprimirlo en una carpeta
- Pasarse a la carpeta bin
- Ejecutar el comando scomp para obtener los jar respectivos. Es necesario tener java instalado:
- Para Factura:
scomp -compiler javac cfdv3.xsd -out cfdv3.jar
Para obtener Código Fuente:
scomp -src cfdv3 -compiler javac cfdv3.xsd -out cfdv3.jar
- Para nomina:
scomp -compiler javac nomina11.xsd -out nomina11.jar
Para obtener Código Fuente:
scomp -src nomina -compiler javac nomina11.xsd -out nomina11.jar
- Para Factura:
- Con esto obtenemos los jar que podemos importar a nuestro proyecto para usar sus métodos.
Dentro del proyecto
Dentro del proyecto podemos empezar a contruir el XML .
Comprobante comprobante = null;
comprobante.setVersion("3.2");
comprobante.setFolio("674566");
comprobante.setSello("");
comprobante.setFormaDePago("PAGO EN UNA SOLA EXHIBICION");
comprobante.setNoCertificado("");
comprobante.setCertificado("");
comprobante.setSubTotal(BigDecimal.valueOf(700.01).setScale(2));
.
.
.
Otros ejemplos:
Crear emisor
Emisor emisor = comprobante.addNewEmisor();
emisor.setNombre("Juan Penas");
Crear ubicación del emisor
TUbicacionFiscal ubicacionFiscal = emisor.addNewDomicilioFiscal();
ubicacionFiscal.setCodigoPostal("1023454");
Imprimir
File f = new File(RutaDelXml);
XmlOptions xmlOptions = new XmlOptions();
xmlOptions.setCharacterEncoding("UTF-8");
xmlOptions.setSavePrettyPrint();
xmlOptions.setSavePrettyPrintIndent(4);
comprobante.xmlText(xmlOptions);
comprobante.save(f);
Referencias
Las reglas para construir el XML se pueden consultar en:
- Para Factura: http://www.sat.gob.mx/informacion_fiscal/normatividad/Documents/Anexo_20_2daRMF_22052015.doc.doc
- Para Nomina: http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Documents/Complementoscfdi/nomina11.pdf
La ultima versión tiene fecha de mayo del 2015.