Full width home advertisement

Facturacion CFDi

CFDi en Java

Post Page Advertisement [Top]

CODIGO EJEMPLO PARA GENERAR UN XML DE NOMINA CFDI 4.0 EN JAVA
 
 public class EjemploNomina12 {

    public EjemploNomina12() {}
    
    public void ejecutar(){

        Configuracion configXML = new Configuracion();
        configXML.setLicencia("26f47f93f7a08083a7a53f3ac13bc98d"); //LICENCIA DEMO
        configXML.setInfoSistema("SI");
        configXML.setComprobanteTipo("NOMINA");
        
        String so=System.getProperty("os.name");
        if(so.contains("Linux"))
        {
            configXML.setRutaXML("/home/carlos/Documentos/xml/");
        }
        if(so.contains("Windows"))
        {
            configXML.setRutaXML("C:/proyectos_java/xml/");
        }
        configXML.setArchivoXML("ejemplo_nomina12.xml");

        //CETIFICADOS CSD DE PRUEBAS
        String KEY=System.getProperty("user.dir")+"/libcfdi40/pruebas/EKU9003173C9.key";
        String CER=System.getProperty("user.dir")+"/libcfdi40/pruebas/EKU9003173C9.cer";
        String CONTRASENA="12345678a";
        configXML.setCer(CER);
        configXML.setKey(KEY);
        configXML.setContresena(CONTRASENA);
        
        /*NODO COMPROBANTE*/
        Comprobante comprobante = new Comprobante();
        comprobante.setSerie("N");
        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(2026.80).setScale(2, RoundingMode.HALF_UP));
        comprobante.setTotal(new BigDecimal(1926.80).setScale(2, RoundingMode.HALF_UP));
        String moneda="MXN";
        comprobante.setMoneda(Utilerias.getMonedaComprobante(moneda));
        String tipocomprobante="N";
        comprobante.setTipoDeComprobante(Utilerias.getTipoDeComprobante(tipocomprobante));
        String metododepago="PUE";
        comprobante.setMetodoPago(Utilerias.getMetodoDePagoComprobante(metododepago));
        comprobante.setDescuento(new BigDecimal(100.00).setScale(2, RoundingMode.HALF_UP));
        comprobante.setTipoCambio(new BigDecimal(1).setScale(0, RoundingMode.HALF_UP));
        comprobante.setLugarExpedicion("20000");
        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("INGRID XODAR JIMENEZ");
        receptor.setRfc("XOJI740919U48");
        receptor.setDomicilioFiscalReceptor("88965");
        receptor.setRegimenFiscalReceptor("605");
        String usoCFDI="CN01";
        receptor.setUsoCFDI(Utilerias.getUsoCFDiComprobante(usoCFDI));
        comprobante.setReceptor(receptor);
        
        /*CONCEPTOS*/
        Conceptos conceptos = new Conceptos();
        /*CONCEPTO*/
        Concepto concepto = new Concepto();
        concepto.setClaveProdServ("84111505");
        concepto.setClaveUnidad("ACT");
        concepto.setCantidad(new BigDecimal(1));
        concepto.setDescripcion("Pago de nómina");
        concepto.setValorUnitario(new BigDecimal(2026.80).setScale(2, RoundingMode.HALF_UP));
        concepto.setImporte(new BigDecimal(2026.80).setScale(2, RoundingMode.HALF_UP));
        concepto.setObjetoImp("01");
        concepto.setDescuento(new BigDecimal(100.00).setScale(2, RoundingMode.HALF_UP));
        /*AGREGO EL NODO CONCEPTO AL NODO CONCEPTOS*/
        conceptos.getConcepto().add(concepto);
        concepto=null;
        /*AGREGO CONCEPTOS AL NODO COMPROBANTE*/
        comprobante.setConceptos(conceptos);
        
        /**
         * Complemento de nomina1.2
         *
         */
        Nomina nomina = new Nomina();
        nomina.setVersion("1.2");
        /* Manejo de fechas */
        String FORMATER_FECHAS = "yyyy-MM-dd";
        SimpleDateFormat sdf = new SimpleDateFormat(FORMATER_FECHAS);
        String fechaPago_ = "2016-10-31";
        String fechaInicialPago_ ="2016-10-16";
        String fechaFinalPago_="2016-10-31";
        try {
            Date dateFechaPagos = sdf.parse(fechaPago_);
            Date dateFechaInicialPago= sdf.parse(fechaInicialPago_);
            Date dateFechaFinalPago= sdf.parse(fechaFinalPago_);
            XMLGregorianCalendar fechaPago = Utilerias.getFechaXMLGregorian(dateFechaPagos, FORMATER_FECHAS);
            XMLGregorianCalendar fechaInicialPago = Utilerias.getFechaXMLGregorian(dateFechaInicialPago, FORMATER_FECHAS);
            XMLGregorianCalendar fechaFinalPago = Utilerias.getFechaXMLGregorian(dateFechaFinalPago, FORMATER_FECHAS);
            nomina.setFechaPago(fechaPago);
            nomina.setFechaInicialPago(fechaInicialPago);
            nomina.setFechaFinalPago(fechaFinalPago);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        nomina.setNumDiasPagados(new BigDecimal(15));
        String tipoNomina="O";
        nomina.setTipoNomina(Utilerias.getTipoNominaComprobante(tipoNomina));

        nomina.setTotalDeducciones(new BigDecimal(100.00).setScale(2, RoundingMode.HALF_UP));
        nomina.setTotalOtrosPagos(new BigDecimal(0.0).setScale(2, RoundingMode.HALF_UP));
        nomina.setTotalPercepciones(new BigDecimal(2026.80).setScale(2, RoundingMode.HALF_UP));
    
        Nomina.Emisor nominaEmisor = new Nomina.Emisor();
        nominaEmisor.setRegistroPatronal("5525665412");
        nomina.setEmisor(nominaEmisor);
        
        Nomina.Receptor nominaReceptor = new Nomina.Receptor();
        nominaReceptor.setCurp("MACM770427MTSRRR00");
        nominaReceptor.setTipoContrato("01");
        nominaReceptor.setTipoRegimen("02");
        nominaReceptor.setNumEmpleado("060");
        nominaReceptor.setPeriodicidadPago("04");
        String claveEntFed = "JAL";
        nominaReceptor.setClaveEntFed(Utilerias.getClaveEntFedNominaComprobante(claveEntFed));
        nominaReceptor.setNumSeguridadSocial("04078873454");
        nominaReceptor.setBanco("021");
        String fechaInicioRelacionLaboral_="2016-06-01";
        try {
            Date datefechaInicioRelacionLaboral = sdf.parse(fechaInicioRelacionLaboral_);
            XMLGregorianCalendar fechaInicioRelacionLaboral = Utilerias.getFechaXMLGregorian(datefechaInicioRelacionLaboral, FORMATER_FECHAS);
            nominaReceptor.setFechaInicioRelLaboral(fechaInicioRelacionLaboral);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        nominaReceptor.setAntigüedad("P21W");
        nominaReceptor.setPuesto("Desarrollador");
        nominaReceptor.setSalarioBaseCotApor(new BigDecimal(435.50).setScale(2, RoundingMode.HALF_UP));
        nominaReceptor.setSalarioDiarioIntegrado(new BigDecimal(435.50).setScale(2, RoundingMode.HALF_UP));
        nominaReceptor.setRiesgoPuesto("2");
        nomina.setReceptor(nominaReceptor);
        
        /*PERCEPCIONES NOMINA*/
        Percepciones percepciones = new Percepciones();
        for(int i = 1; i <=5; i++)
        {
            Percepcion percepcion = new Percepcion();
            percepcion.setTipoPercepcion("028");
            percepcion.setClave("028");
            percepcion.setConcepto("SUELDO");
            percepcion.setImporteExento(new BigDecimal(0.00).setScale(2, RoundingMode.HALF_UP));
            percepcion.setImporteGravado(new BigDecimal(405.36).setScale(2, RoundingMode.HALF_UP));
            percepciones.getPercepcion().add(percepcion);
            percepcion=null;
        }
        percepciones.setTotalExento(new BigDecimal(0.00).setScale(2, RoundingMode.HALF_UP));
        percepciones.setTotalGravado(new BigDecimal(2026.80).setScale(2, RoundingMode.HALF_UP));
        percepciones.setTotalSueldos(new BigDecimal(2026.80).setScale(2, RoundingMode.HALF_UP));
        nomina.setPercepciones(percepciones);
        
        Deducciones deducciones = new Deducciones();
        for(int j=1 ; j <=5 ; j++)
        {
            Deduccion deduccion = new Deduccion();
            deduccion.setTipoDeduccion("001");
            deduccion.setClave("001");
            deduccion.setConcepto("IMSS");
            deduccion.setImporte(new BigDecimal(20.00).setScale(2, RoundingMode.HALF_UP));
            
            deducciones.getDeduccion().add(deduccion);
            deduccion=null;
        }
        //deducciones.setTotalImpuestosRetenidos(new BigDecimal(0.00).setScale(2, RoundingMode.HALF_UP));
        deducciones.setTotalOtrasDeducciones(new BigDecimal(100.00).setScale(2, RoundingMode.HALF_UP));
        nomina.setDeducciones(deducciones);
        
        /* NODO OTROS PAGOS*/
        OtrosPagos otrosPagos = new OtrosPagos();
        for(int o=1 ; o <=5 ; o++)
        {
            OtroPago otroPago = new OtroPago();
            otroPago.setTipoOtroPago("002" );
            otroPago.setClave("002");
            otroPago.setConcepto("SUBSIDIO AL EMPLEO");
            otroPago.setImporte(new BigDecimal(0.00).setScale(2, RoundingMode.HALF_UP));
            
            SubsidioAlEmpleo subsidioAlEmpleo = new SubsidioAlEmpleo();
            subsidioAlEmpleo.setSubsidioCausado(new BigDecimal(0.00).setScale(2, RoundingMode.HALF_UP));
            otroPago.setSubsidioAlEmpleo(subsidioAlEmpleo);
            
            otrosPagos.getOtroPago().add(otroPago);
            subsidioAlEmpleo=null;
            otroPago=null;
        }
        nomina.setOtrosPagos(otrosPagos);
        
        Comprobante.Complemento complemento = new Comprobante.Complemento();
        complemento.getAny().add(nomina);
        //comprobante.getComplemento().add(complemento);     //AGREGAR COMPLEMENTO FORMA ANTERIOR
        comprobante.setComplemento(complemento); //AGREGAR COMPLEMENTO
        
        /*GENERAR XML*/
        CrearXmlCFDi40 xml = new CrearXmlCFDi40(comprobante, configXML);
        RespuestaGenerarXML res = xml.generarXMLCFDi40();
        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());
    }

}
 
 
 
 
 
XML CFDI DE NOMINA GENERADO
 
<cfdi:Comprobante Version="4.0" Serie="N" Folio="1" Fecha="2022-08-16T12:43:14" Sello="JBxFMQ+B8VEVT9wSmG7LIkLs5wtY8HwzzOHWCSfB6UvdGc16Q9Vn7u72FyMSaOZ1+0cj6DrZeqaBPt2c9QRHugiqfWSR/fggvVrlyRCZFrjWYbd1ZmjsuPODc5IOGUvj3rdjkhCMfMdzEvaoCjRYYPfoTyXGjIjQvVhFQpQkh3+XKALAg4dQNpTDGUYMAzbhEYKZIpcR5S9d1NBhTSFBqlJEzte0W4ffa6ay7FW1CTKAZP+XuVnT/yMZdGZaltqjbTZRkmslycoug/+qlXpkHIMqF5h3H3c+f/N3vyrxwayRaTeeWfgMdHK2sPOLECeB+7VOG9cbNWo3eAjUE58m3w==" NoCertificado="30001000000400002434" Certificado="MIIFuzCCA6OgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDI0MzQwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNjE3MTk0NDE0WhcNMjMwNjE3MTk0NDE0WjCB4jEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gWElRQjg5MTExNlFFNDEeMBwGA1UEBRMVIC8gWElRQjg5MTExNk1HUk1aUjA1MR4wHAYDVQQLExVFc2N1ZWxhIEtlbXBlciBVcmdhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCN0peKpgfOL75iYRv1fqq+oVYsLPVUR/GibYmGKc9InHFy5lYF6OTYjnIIvmkOdRobbGlCUxORX/tLsl8Ya9gm6Yo7hHnODRBIDup3GISFzB/96R9K/MzYQOcscMIoBDARaycnLvy7FlMvO7/rlVnsSARxZRO8Kz8Zkksj2zpeYpjZIya/369+oGqQk1cTRkHo59JvJ4Tfbk/3iIyf4H/Ini9nBe9cYWo0MnKob7DDt/vsdi5tA8mMtA953LapNyCZIDCRQQlUGNgDqY9/8F5mUvVgkcczsIgGdvf9vMQPSf3jjCiKj7j6ucxl1+FwJWmbvgNmiaUR/0q4m2rm78lFAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBCwUAA4ICAQBcpj1TjT4jiinIujIdAlFzE6kRwYJCnDG08zSp4kSnShjxADGEXH2chehKMV0FY7c4njA5eDGdA/G2OCTPvF5rpeCZP5Dw504RZkYDl2suRz+wa1sNBVpbnBJEK0fQcN3IftBwsgNFdFhUtCyw3lus1SSJbPxjLHS6FcZZ51YSeIfcNXOAuTqdimusaXq15GrSrCOkM6n2jfj2sMJYM2HXaXJ6rGTEgYmhYdwxWtil6RfZB+fGQ/H9I9WLnl4KTZUS6C9+NLHh4FPDhSk19fpS2S/56aqgFoGAkXAYt9Fy5ECaPcULIfJ1DEbsXKyRdCv3JY89+0MNkOdaDnsemS2o5Gl08zI4iYtt3L40gAZ60NPh31kVLnYNsmvfNxYyKp+AeJtDHyW9w7ftM0Hoi+BuRmcAQSKFV3pk8j51la+jrRBrAUv8blbRcQ5BiZUwJzHFEKIwTsRGoRyEx96sNnB03n6GTwjIGz92SmLdNl95r9rkvp+2m4S6q1lPuXaFg7DGBrXWC8iyqeWE2iobdwIIuXPTMVqQb12m1dAkJVRO5NdHnP/MpqOvOgLqoZBNHGyBg4Gqm4sCJHCxA1c8Elfa2RQTCk0tAzllL4vOnI1GHkGJn65xokGsaU4B4D36xh7eWrfj4/pgWHmtoDAYa8wzSwo2GVCZOs+mtEgOQB91/g==" SubTotal="2026.80" Descuento="100.00" Moneda="MXN" TipoCambio="1" Total="1926.80" TipoDeComprobante="N" Exportacion="01" MetodoPago="PUE" LugarExpedicion="20000" xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd">
<cfdi:Emisor Rfc="EKU9003173C9" Nombre="ESCUELA KEMPER URGATE" RegimenFiscal="601"/>
<cfdi:Receptor Rfc="XOJI740919U48" Nombre="INGRID XODAR JIMENEZ" DomicilioFiscalReceptor="88965" RegimenFiscalReceptor="605" UsoCFDI="CN01"/>
<cfdi:Conceptos>
<cfdi:Concepto ClaveProdServ="84111505" Cantidad="1" ClaveUnidad="ACT" Descripcion="Pago de nómina" ValorUnitario="2026.80" Importe="2026.80" Descuento="100.00" ObjetoImp="01"/>
</cfdi:Conceptos>
<cfdi:Complemento>
<nomina12:Nomina Version="1.2" TipoNomina="O" FechaPago="2016-10-31" FechaInicialPago="2016-10-16" FechaFinalPago="2016-10-31" NumDiasPagados="15" TotalPercepciones="2026.80" TotalDeducciones="100.00" TotalOtrosPagos="0.00">
<nomina12:Emisor RegistroPatronal="5525665412"/>
<nomina12:Receptor Curp="MACM770427MTSRRR00" NumSeguridadSocial="04078873454" FechaInicioRelLaboral="2016-06-01" Antigüedad="P21W" TipoContrato="01" TipoRegimen="02" NumEmpleado="060" Puesto="Desarrollador" RiesgoPuesto="2" PeriodicidadPago="04" Banco="021" SalarioBaseCotApor="435.50" SalarioDiarioIntegrado="435.50" ClaveEntFed="JAL"/>
<nomina12:Percepciones TotalSueldos="2026.80" TotalGravado="2026.80" TotalExento="0.00">
<nomina12:Percepcion TipoPercepcion="028" Clave="028" Concepto="SUELDO" ImporteGravado="405.36" ImporteExento="0.00"/>
<nomina12:Percepcion TipoPercepcion="028" Clave="028" Concepto="SUELDO" ImporteGravado="405.36" ImporteExento="0.00"/>
<nomina12:Percepcion TipoPercepcion="028" Clave="028" Concepto="SUELDO" ImporteGravado="405.36" ImporteExento="0.00"/>
<nomina12:Percepcion TipoPercepcion="028" Clave="028" Concepto="SUELDO" ImporteGravado="405.36" ImporteExento="0.00"/>
<nomina12:Percepcion TipoPercepcion="028" Clave="028" Concepto="SUELDO" ImporteGravado="405.36" ImporteExento="0.00"/>
</nomina12:Percepciones>
<nomina12:Deducciones TotalOtrasDeducciones="100.00">
<nomina12:Deduccion TipoDeduccion="001" Clave="001" Concepto="IMSS" Importe="20.00"/>
<nomina12:Deduccion TipoDeduccion="001" Clave="001" Concepto="IMSS" Importe="20.00"/>
<nomina12:Deduccion TipoDeduccion="001" Clave="001" Concepto="IMSS" Importe="20.00"/>
<nomina12:Deduccion TipoDeduccion="001" Clave="001" Concepto="IMSS" Importe="20.00"/>
<nomina12:Deduccion TipoDeduccion="001" Clave="001" Concepto="IMSS" Importe="20.00"/>
</nomina12:Deducciones>
<nomina12:OtrosPagos>
<nomina12:OtroPago TipoOtroPago="002" Clave="002" Concepto="SUBSIDIO AL EMPLEO" Importe="0.00">
<nomina12:SubsidioAlEmpleo SubsidioCausado="0.00"/>
</nomina12:OtroPago>
<nomina12:OtroPago TipoOtroPago="002" Clave="002" Concepto="SUBSIDIO AL EMPLEO" Importe="0.00">
<nomina12:SubsidioAlEmpleo SubsidioCausado="0.00"/>
</nomina12:OtroPago>
<nomina12:OtroPago TipoOtroPago="002" Clave="002" Concepto="SUBSIDIO AL EMPLEO" Importe="0.00">
<nomina12:SubsidioAlEmpleo SubsidioCausado="0.00"/>
</nomina12:OtroPago>
<nomina12:OtroPago TipoOtroPago="002" Clave="002" Concepto="SUBSIDIO AL EMPLEO" Importe="0.00">
<nomina12:SubsidioAlEmpleo SubsidioCausado="0.00"/>
</nomina12:OtroPago>
<nomina12:OtroPago TipoOtroPago="002" Clave="002" Concepto="SUBSIDIO AL EMPLEO" Importe="0.00">
<nomina12:SubsidioAlEmpleo SubsidioCausado="0.00"/>
</nomina12:OtroPago>
</nomina12:OtrosPagos>
</nomina12:Nomina>
<tfd:TimbreFiscalDigital xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd" Version="1.1" UUID="f4b5c29b-75ad-40c5-8c65-f8a6b6cd35e0" FechaTimbrado="2022-08-16T12:44:06" RfcProvCertif="SPR190613I52" SelloCFD="JBxFMQ+B8VEVT9wSmG7LIkLs5wtY8HwzzOHWCSfB6UvdGc16Q9Vn7u72FyMSaOZ1+0cj6DrZeqaBPt2c9QRHugiqfWSR/fggvVrlyRCZFrjWYbd1ZmjsuPODc5IOGUvj3rdjkhCMfMdzEvaoCjRYYPfoTyXGjIjQvVhFQpQkh3+XKALAg4dQNpTDGUYMAzbhEYKZIpcR5S9d1NBhTSFBqlJEzte0W4ffa6ay7FW1CTKAZP+XuVnT/yMZdGZaltqjbTZRkmslycoug/+qlXpkHIMqF5h3H3c+f/N3vyrxwayRaTeeWfgMdHK2sPOLECeB+7VOG9cbNWo3eAjUE58m3w==" NoCertificadoSAT="30001000000400002495" SelloSAT="icAaSAXIq7/BGcuxC6wuDTmCIYSj4BYlLhBCdjMbuD7iWwgf/bMrdNb7ymvHntb22iuGK8hfXcABk5ndhS9ci25lvvBrTj2qmBlzltYAs1NR94o6fvQdNxFGo6bqnC5nFGTstD3J6ybY73Rg7eVdf4KVmnRwUmMV0tozGfhNYWosfdINkv8eHhGyR/np8UWfI3aHImRwaDHszg8tjPKI5JgqOe0CCs5BKAxcMrczgpcJVZVa9O8uN9CAvXhvkPoUWHdTQKT4I7p2UbHe58dq2f/CAberhjtSng6gXoF6+9j/LinaYpwjhSdGhERQviHlzUUvOH8dWlmvDeukc49QRw=="/>
</cfdi:Complemento>
</cfdi:Comprobante>
 
 

Buscas una forma de implementar la factura electronica de manera facil

solo llenando una plantilla de texto con los datos de la factura

o llenando un arreglo de datos con los datos de la factura

tenemos una libreria para generar el xml cfdi de una factura electronica

visita nuestra pagina web

https://factura.cfdi.red/

No hay comentarios:

Publicar un comentario

Bottom Ad [Post Page]

| Designed by Colorlib