La versión de su navegador no está debidamente actualizada. Le recomendamos actualizarla a la versión más reciente.

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

  1. - Crea el archivo xml cfdi
  2. - Crea el string del xml cfdi (Algunos pac te lo piden asi, o para que lo almacenes en tu BD)
  3. - 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 javagenerar 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 javaejemplo 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