Libreria java para generar el xml cfdi de una factura
Codigo fuente java que genera el xml cfd de una factura
La libreria en java puede crear el xml cfdi de:
- Facturas
- Complementos de pago
- Nominas
- Carta porte
- y mas.. solo hay que crear la clase modelo del complemento cfdi que se quiere crear
-La libreria java valida antes o despues el xml cfdi creado , para que lo envies a tu PAC de preferencia
-La libreria java te genera el xml cfdi en 3 formatos para que lo envies a tu PAC
- - Crea el archivo xml cfdi
- - Crea el string del xml cfdi (Algunos pac te lo piden asi, o para que lo almacenes en tu BD)
- - Crea el Base64 del xml cfdi (Algunos pac te lo piden el xml en Base 64, o para que lo almacenes en tu BD)
La libreria java esta estructurada en varias capas y módulos para una mayor organización, mantenibilidad y reutilización del código.
generar xml cfdi en java
Estructura de la libreria java
com.factura.cfdi.generador : Se almacenan las clases que generan el xml del cfdi de una factura
com.factura.cfdi.model: se almacenan todos los modelos o paquetes de las diferentes tipos de xml cfdi que puede crear (SE PUEDEN CREAR TODOS LOS MODELOS QUE SE NECESITEN)
com.factura.cfdi.sello: Aqui se almacena la clase que sella el xml cfdi
com.factura.cfdi.util : Aqui se pueden almacenar todas las utilerias que necesites, como validar el xml, etc.
EJEMPLO CREAR UN XML CFDI DE UNA FACTURA
publicclass EjemploFacturaCfdi40 {
public EjemploFacturaCfdi40() {}
publicvoid ejecutar(){
//CONFIGURACION DE EJECUCION
//CONFIGURA EL TIPO DE FACTURA (FACTURA, NOMINA, CARTA PORTA, COMPLEMENTO DE PAGO, ETC)
//CONFIGURA LA LICENCIA
//CONFIGURA SI MUESTRA LA INFORMACION DE EJUCUCION, EN DESARROLLO SE RECOMIENDA EN "SI", EN PRODUCCION SE RECOMIENDA EN "NO"
Configuracion configuracion = new Configuracion();
//configuracion.setLicencia("316ac9e0543522b89b0e32707fb42bb4");
configuracion.setInfoSistema("si");
configuracion.setComprobanteTipo("FACTURA");
//CONFIGURAR LA RUTA DONDE SE ALMACENARA EL XML CFDI QUE SE VA A CREAR
String so=System.getProperty("os.name");
if(so.contains("Linux"))
{
//rutadondesegenera el xmlselladoparaenviarloalpac (LINUX)
configuracion.setRutaXML("/home/carlos/Documentos/xml/");
}
if(so.contains("Windows"))
{
//rutadondesegenera el xmlselladoparaenviarloalpac (WINDOWS)
//configXML.setRutaXML("C:/proyectos_java/xml/");
configuracion.setRutaXML(System.getProperty("user.dir")+"\\src\\main\\resources\\timbrados\\");
}
//CONFIGURAR EL NOMBRE DEL ARCHIVO XML (Conlaextencionincluida)
configuracion.setArchivoXML("ejemplo_factura_cfdi40.xml");
//CONFIGURAR LA RUTA DONDE SE ALMACENAN LOS CERTIFICADOS CSD DE RFC EMISOR (AQUI SE USAN DE PRUEBAS PROPORCIONADOS POR EL SAT)
String KEY=System.getProperty("user.dir")+"\\src\\main\\resources\\certificados\\EKU9003173C9.key";
String CER=System.getProperty("user.dir")+"\\src\\main\\resources\\certificados\\EKU9003173C9.cer";
String CONTRASENA="12345678a";
configuracion.setCer(CER);
configuracion.setKey(KEY);
configuracion.setContresena(CONTRASENA);
//CONFIGURAR SI SE VALIDARA EL XML CREADO , ANTES O DESPUES DE CREARLO
configuracion.setValidar_pre("NO"); // VALIDAR LA INFORMACION INGRESADA ANTES DE CREAR EL ARCHIVO XML - TIEMPO DE EJECUCION 5 A 8 SEGUNDOS
configuracion.setValidar_pos("NO"); // VALIDAR LA INFORMACION INGRESADA DESPUES DE CREAR EL ARCHIVO XML - TIEMPO DE EJECUCION 5 A 8 SEGUNDOS
/*LLENAR EL XML COMPROBANTE CON LA INFORMACION DE LA VENTA DE TU BASE DE DATOS*/
Comprobante comprobante = new Comprobante();
comprobante.setSerie("A");
comprobante.setFolio("1");
/*FORMATO DE FECHA*/
String FORMATER = "yyyy-MM-dd'T'HH:mm:ss";
Date date = new Date();
XMLGregorianCalendar fechaComprobante = Utilerias.getFechaXMLGregorian(date, FORMATER);
comprobante.setFecha(fechaComprobante);
comprobante.setSubTotal(new BigDecimal(298.00).setScale(2, RoundingMode.HALF_UP));
comprobante.setTotal(new BigDecimal(345.68).setScale(2, RoundingMode.HALF_UP));
String moneda="MXN";
comprobante.setMoneda(Utilerias.getMonedaComprobante(moneda));
String tipocomprobante="I";
comprobante.setTipoDeComprobante(Utilerias.getTipoDeComprobante(tipocomprobante));
comprobante.setFormaPago("01");
String metododepago="PUE";
comprobante.setMetodoPago(Utilerias.getMetodoDePagoComprobante(metododepago));
//comprobante.setCondicionesDePago("CONDIDCIONES");
//comprobante.setDescuento(new BigDecimal(100.00));
comprobante.setTipoCambio(new BigDecimal(1.0).setScale(0, RoundingMode.HALF_UP));
comprobante.setLugarExpedicion("EEEEE");
comprobante.setExportacion("01");
/*CFDI RELACIONADO*/
//CfdiRelacionado cfdiRelacionado = new CfdiRelacionado();
//cfdiRelacionado.setUUID("A39DA66B-52CA-49E3-879B-5C05185B0EF7");
/*CFDI RELACIONADOS*/
//CfdiRelacionados cfdiRelacionados = new CfdiRelacionados();
//cfdiRelacionados.setTipoRelacion("01");
//cfdiRelacionados.getCfdiRelacionado().add(cfdiRelacionado);
//comprobante.setCfdiRelacionados(cfdiRelacionados);
/*EMISOR*/
Emisor emisor = new Emisor();
emisor.setRfc("EKU9003173C9");
emisor.setRegimenFiscal("601");
emisor.setNombre("ESCUELA KEMPER URGATE");
comprobante.setEmisor(emisor);
/*RECEPTOR*/
Receptor receptor = new Receptor();
receptor.setNombre("UNIVERSIDAD ROBOTICA ESPAÑOLA");
receptor.setRfc("URE180429TM6");
receptor.setDomicilioFiscalReceptor("86991");
receptor.setRegimenFiscalReceptor("601");
//receptor.setNumRegIdTrib("0000000000000");
//String pais="MEX";
//CPais paisComprobante = Utilerias.getPaisComprobante(pais);
//receptor.setResidenciaFiscal(paisComprobante);
String usoCFDI="G01";
receptor.setUsoCFDI(Utilerias.getUsoCFDiComprobante(usoCFDI));
comprobante.setReceptor(receptor);
/*CONCEPTOS*/
Conceptos conceptos = new Conceptos();
/*CONCEPTO*/
Concepto concepto1 = new Concepto();
concepto1.setClaveProdServ("01010101");
concepto1.setClaveUnidad("ACT");
concepto1.setNoIdentificacion("0001");
concepto1.setCantidad(new BigDecimal(1));
concepto1.setUnidad("NA");
concepto1.setDescripcion("Concepto 1");
concepto1.setValorUnitario(new BigDecimal(99.00).setScale(2, RoundingMode.HALF_UP));
concepto1.setImporte(new BigDecimal(99.00).setScale(2, RoundingMode.HALF_UP));
concepto1.setObjetoImp("02");
/*IMPUESTOS CONCEPTO*/
Impuestos impuestosConcepto1 = new Impuestos();
/*IMPUESTOS TRASLADOS*/
Traslados trasladosConcepto1 = new Traslados();
/*IMPUESTO TRASLADO*/
Traslado trasladoConcepto1 = new Traslado();
trasladoConcepto1.setBase(new BigDecimal(99.00).setScale(2, RoundingMode.HALF_UP));
trasladoConcepto1.setImporte(new BigDecimal(15.84).setScale(2, RoundingMode.HALF_UP));
trasladoConcepto1.setImpuesto("002");
trasladoConcepto1.setTasaOCuota(new BigDecimal(0.160000).setScale(6, RoundingMode.HALF_UP));
String tipoFactorTraslado1="Tasa";
trasladoConcepto1.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorTraslado1));
trasladosConcepto1.getTraslado().add(trasladoConcepto1);
impuestosConcepto1.setTraslados(trasladosConcepto1);
/*PREDAIL*/
//CuentaPredial predial = new CuentaPredial();
//predial.setNumero("23438222");
//concepto1.setCuentaPredial(predial);
concepto1.setImpuestos(impuestosConcepto1);
conceptos.getConcepto().add(concepto1);
//CONCEPTO 2
Concepto concepto2 = new Concepto();
concepto2.setClaveProdServ("01010101");
concepto2.setClaveUnidad("ACT");
concepto2.setNoIdentificacion("0001");
concepto2.setCantidad(new BigDecimal(1));
concepto2.setUnidad("NA");
concepto2.setDescripcion("Concepto 1");
concepto2.setValorUnitario(new BigDecimal(199.00).setScale(2, RoundingMode.HALF_UP));
concepto2.setImporte(new BigDecimal(199.00).setScale(2, RoundingMode.HALF_UP));
concepto2.setObjetoImp("02");
/*IMPUESTOS CONCEPTO*/
Impuestos impuestosConcepto2 = new Impuestos();
/*IMPUESTOS TRASLADOS*/
Traslados trasladosConcepto2 = new Traslados();
/*IMPUESTO TRASLADO*/
Traslado trasladoConcepto2 = new Traslado();
trasladoConcepto2.setBase(new BigDecimal(199.00).setScale(2, RoundingMode.HALF_UP));
trasladoConcepto2.setImporte(new BigDecimal(31.84).setScale(2, RoundingMode.HALF_UP));
trasladoConcepto2.setImpuesto("002");
trasladoConcepto2.setTasaOCuota(new BigDecimal(0.160000).setScale(6, RoundingMode.HALF_UP));
String tipoFactorTraslado2="Tasa";
trasladoConcepto2.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorTraslado2));
trasladosConcepto2.getTraslado().add(trasladoConcepto2);
impuestosConcepto2.setTraslados(trasladosConcepto2);
concepto2.setImpuestos(impuestosConcepto2);
conceptos.getConcepto().add(concepto2);
comprobante.setConceptos(conceptos);
/*IMPUESTOS COMPROBANTE*/
Comprobante.Impuestos impuestosComprobante = new Comprobante.Impuestos();
/*
//RETENCIONES COMPROBANTE
Comprobante.Impuestos.Retenciones retencionesComprobante = new Comprobante.Impuestos.Retenciones();
//RETENCION COMPROBANTE
Comprobante.Impuestos.Retenciones.Retencion retencionComprobante = new Comprobante.Impuestos.Retenciones.Retencion();
retencionComprobante.setImporte(new BigDecimal(100.00));
retencionComprobante.setImpuesto("002");
retencionesComprobante.getRetencion().add(retencionComprobante);
impuestosComprobante.setRetenciones(retencionesComprobante);
*/
/*TRASLADOS COMPROBANTE*/
Comprobante.Impuestos.Traslados trasladosComprobante = new Comprobante.Impuestos.Traslados();
/*TRASLADO COMPROBANTE*/
Comprobante.Impuestos.Traslados.Traslado trasladoComprobante = new Comprobante.Impuestos.Traslados.Traslado();
trasladoComprobante.setImpuesto("002");
String tipoFactorComprobante="Tasa";
trasladoComprobante.setBase(new BigDecimal(298).setScale(2, RoundingMode.HALF_UP));
trasladoComprobante.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorComprobante));
trasladoComprobante.setTasaOCuota(new BigDecimal(0.160000).setScale(6, RoundingMode.HALF_UP));
trasladoComprobante.setImporte(new BigDecimal(47.68).setScale(2, RoundingMode.HALF_UP));
trasladosComprobante.getTraslado().add(trasladoComprobante);
impuestosComprobante.setTraslados(trasladosComprobante);
//impuestosComprobante.setTotalImpuestosRetenidos(new BigDecimal(100));
impuestosComprobante.setTotalImpuestosTrasladados(new BigDecimal(47.68).setScale(2, RoundingMode.HALF_UP));
comprobante.setImpuestos(impuestosComprobante);
/*GENERAR XML*/
GeneraCFDi xml = new GeneraCFDi(comprobante, configuracion);
RespuestaGenerarXML res = xml.generarXMLCFDi();
System.out.println("Ruta xml generado: "+res.getRutaArchivoXML());
System.out.println("Archivo XML en string: "+res.getArchivoXMLtexto());
System.out.println("Archivo XML en Base64: "+res.getArchivoXMLBase64());
}
}
Ejemplo de respuesta al crear el xml cfdi en java, genera el archivo xml, el string del xml y el base64 de xml
ejemplo xml cfdi en java
Si deseas adquirir la libreria para tus proyectos , Contactanos al 871-2342344
Precio: $6000 mxn Incluye IVA
Incluye:
- Todo el codigo fuente
- Soporte y actualizaciones del SAT por un año
- al siguiente año el precio del soporte y actualizaciones del SAT seria $3000 , si tu lo deseas
En el siguiente video puedes ver un ejemplo donde se genera un xml cfdi con java