<commit_before><?php
    namespace Raalveco\Ciberfactura\Libraries;

    use Raalveco\Ciberfactura\Models\CfdiFactura;

    class CfdiGenerator{
        public $xml;
        public $cfdi;

        public function __construct(CfdiFactura $cfdi){
            $this->cfdi = $cfdi;

            //Comprobante
            $comprobante = new CfdiNodo("cfdi:Comprobante");
            $comprobante->agregarAtributo("xsi:schemaLocation", "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd");
            $comprobante->agregarAtributo("xsi:schemaLocation", "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd");
            $comprobante->agregarAtributo("xmlns:cfdi", "http://www.sat.gob.mx/cfd/3");
            $comprobante->agregarAtributo("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            $comprobante->agregarAtributo("version", "3.2");

            if($cfdi->serie){
                $comprobante->agregarAtributo("serie", $cfdi->serie);
            }
            
            if($cfdi->folio){
                $comprobante->agregarAtributo("folio", $cfdi->folio);
            }

            $comprobante->agregarAtributo("fecha", date("Y-m-d")."T".date("H:i:s"));

            $comprobante->agregarAtributo("formaDePago", "PAGO EN UNA SOLA EXHIBICION");
            $comprobante->agregarAtributo("total", number_format($cfdi->total,4,".",""));
            $comprobante->agregarAtributo("subTotal", number_format($cfdi->subTotal,4,".",""));

            if($cfdi->descuento > 0){
                $comprobante->agregarAtributo("descuento", number_format($cfdi->descuento,4,".",""));
                $comprobante->agregarAtributo("motivoDescuento", $cfdi->motivoDescuento ? $cfdi->motivoDescuento : "Descuento General");
            }

            $comprobante->agregarAtributo("LugarExpedicion", "MÉXICO");
            $comprobante->agregarAtributo("metodoDePago", $cfdi->metodoPago ? $cfdi->metodoPago : "NO IDENTIFICADO");
            $comprobante->agregarAtributo("tipoDeComprobante", $cfdi->tipoDeComprobante ? strtolower($cfdi->tipoDeComprobante) : "ingreso");

            if(isset($cfdi->numCtaPago) && $cfdi->numCtaPago){
                $comprobante->agregarAtributo("numCtaPago", $cfdi->numCtaPago ? substr($cfdi->numCtaPago,strlen($cfdi->numCtaPago) - 4) : "");
            }

            if(isset($cfdi->moneda) && $cfdi->moneda){
                $comprobante->agregarAtributo("moneda", $cfdi->moneda ? $cfdi->moneda : "");
            }

            if(isset($cfdi->tipoCambio) && $cfdi->tipoCambio && $cfdi->tipoCambio != 1){
                $comprobante->agregarAtributo("tipoCambio", $cfdi->tipoCambio ? number_format($cfdi->tipoCambio,2,".","") : "");
            }

            $cfdi_emisor = $cfdi->emisor();

            //Emisor
            $emisor = new CfdiNodo("cfdi:Emisor");
            $emisor->agregarAtributo("rfc", $cfdi_emisor->rfc);
            $emisor->agregarAtributo("nombre", $cfdi_emisor->nombre);
            $comprobante->agregarNodo($emisor);

            //Emisor - <NAME>
            $domicilioFiscal = new CfdiNodo("cfdi:DomicilioFiscal");
            $domicilioFiscal->agregarAtributo("calle", $cfdi_emisor->calle);
            $domicilioFiscal->agregarAtributo("noExterior", $cfdi_emisor->noExterior);
            if($cfdi_emisor->interior) $domicilioFiscal->agregarAtributo("noInterior", $cfdi_emisor->noInterior);
            $domicilioFiscal->agregarAtributo("colonia", $cfdi_emisor->colonia);
            $domicilioFiscal->agregarAtributo("municipio", $cfdi_emisor->municipio);
            $domicilioFiscal->agregarAtributo("estado", $cfdi_emisor->estado);
            $domicilioFiscal->agregarAtributo("pais", $cfdi_emisor->pais);
            $domicilioFiscal->agregarAtributo("codigoPostal", $cfdi_emisor->codigoPostal);
            $emisor->agregarNodo($domicilioFiscal);

            //Emisor - Expedido En
            //Si hay sucursales, sacar datos de la sucursal, sino salen del contribuyente
            $expedioEn = new CfdiNodo("cfdi:ExpedidoEn");
            $expedioEn->agregarAtributo("calle", $cfdi_emisor->calle);
            $expedioEn->agregarAtributo("noExterior", $cfdi_emisor->noExterior);
            if($cfdi_emisor->interior) $expedioEn->agregarAtributo("noInterior", $cfdi_emisor->noInterior);
            $expedioEn->agregarAtributo("colonia", $cfdi_emisor->colonia);
            $expedioEn->agregarAtributo("municipio", $cfdi_emisor->municipio);
            $expedioEn->agregarAtributo("estado", $cfdi_emisor->estado);
            $expedioEn->agregarAtributo("pais", $cfdi_emisor->pais);
            $expedioEn->agregarAtributo("codigoPostal", $cfdi_emisor->codigoPostal);
            $emisor->agregarNodo($expedioEn);

            //Emisor - Regimenes Fiscales
            $cfdi_regimenes = $cfdi->regimenes();
            if($cfdi_regimenes) foreach($cfdi_regimenes as $cfdi_regimen){
                $regimenFiscal = new CfdiNodo("cfdi:RegimenFiscal");
                $regimenFiscal->agregarAtributo("Regimen", $cfdi_regimen->regimen);
                $emisor->agregarNodo($regimenFiscal);
            }

            $cfdi_receptor = $cfdi->receptor();

            //Receptor
            $receptor = new CfdiNodo("cfdi:Receptor");
            $receptor->agregarAtributo("rfc", $cfdi_receptor->rfc);
            $receptor->agregarAtributo("nombre", $cfdi_receptor->nombre);
            $comprobante->agregarNodo($receptor);

            //Receptor - <NAME>
            $domicilio = new CfdiNodo("cfdi:Domicilio");
            $domicilio->agregarAtributo("calle", $cfdi_receptor->calle);
            $domicilio->agregarAtributo("noExterior", $cfdi_receptor->noExterior);
            if($cfdi_receptor->interior) $domicilio->agregarAtributo("noInterior", $cfdi_receptor->noInterior);
            $domicilio->agregarAtributo("colonia", $cfdi_receptor->colonia);
            $domicilio->agregarAtributo("municipio", $cfdi_receptor->municipio);
            $domicilio->agregarAtributo("estado", $cfdi_receptor->estado);
            $domicilio->agregarAtributo("pais", $cfdi_receptor->pais);
            $domicilio->agregarAtributo("codigoPostal", $cfdi_receptor->codigoPostal);
            $receptor->agregarNodo($domicilio);

            $cfdi_conceptos = $cfdi->conceptos();

            //Conceptos
            $conceptos = new CfdiNodo("cfdi:Conceptos");

            if($cfdi_conceptos) foreach($cfdi_conceptos as $cfdi_concepto){
                $concepto = new CfdiNodo("cfdi:Concepto");
                $concepto->agregarAtributo("cantidad", $cfdi_concepto->cantidad);
                $concepto->agregarAtributo("unidad", $cfdi_concepto->unidad);
                $concepto->agregarAtributo("descripcion", $cfdi_concepto->descripcion);
                $concepto->agregarAtributo("valorUnitario", number_format($cfdi_concepto->valorUnitario,4,".",""));
                $concepto->agregarAtributo("importe", number_format($cfdi_concepto->importe,4,".",""));
                $conceptos->agregarNodo($concepto);
            }

            $comprobante->agregarNodo($conceptos);<commit_msg>Descartando Campos no Obligatorios<commit_after><?php
    namespace Raalveco\Ciberfactura\Libraries;

    use Raalveco\Ciberfactura\Models\CfdiFactura;

    class CfdiGenerator{
        public $xml;
        public $cfdi;

        public function __construct(CfdiFactura $cfdi){
            $this->cfdi = $cfdi;

            //Comprobante
            $comprobante = new CfdiNodo("cfdi:Comprobante");
            $comprobante->agregarAtributo("xsi:schemaLocation", "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd");
            $comprobante->agregarAtributo("xsi:schemaLocation", "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd");
            $comprobante->agregarAtributo("xmlns:cfdi", "http://www.sat.gob.mx/cfd/3");
            $comprobante->agregarAtributo("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            $comprobante->agregarAtributo("version", "3.2");

            if($cfdi->serie){
                $comprobante->agregarAtributo("serie", $cfdi->serie);
            }
            
            if($cfdi->folio){
                $comprobante->agregarAtributo("folio", $cfdi->folio);
            }

            $comprobante->agregarAtributo("fecha", date("Y-m-d")."T".date("H:i:s"));

            $comprobante->agregarAtributo("formaDePago", "PAGO EN UNA SOLA EXHIBICION");
            $comprobante->agregarAtributo("total", number_format($cfdi->total,4,".",""));
            $comprobante->agregarAtributo("subTotal", number_format($cfdi->subTotal,4,".",""));

            if($cfdi->descuento > 0){
                $comprobante->agregarAtributo("descuento", number_format($cfdi->descuento,4,".",""));
                $comprobante->agregarAtributo("motivoDescuento", $cfdi->motivoDescuento ? $cfdi->motivoDescuento : "Descuento General");
            }

            $comprobante->agregarAtributo("LugarExpedicion", "MÉXICO");
            $comprobante->agregarAtributo("metodoDePago", $cfdi->metodoPago ? $cfdi->metodoPago : "NO IDENTIFICADO");
            $comprobante->agregarAtributo("tipoDeComprobante", $cfdi->tipoDeComprobante ? strtolower($cfdi->tipoDeComprobante) : "ingreso");

            if(isset($cfdi->numCtaPago) && $cfdi->numCtaPago){
                $comprobante->agregarAtributo("numCtaPago", $cfdi->numCtaPago ? substr($cfdi->numCtaPago,strlen($cfdi->numCtaPago) - 4) : "");
            }

            if(isset($cfdi->moneda) && $cfdi->moneda){
                $comprobante->agregarAtributo("moneda", $cfdi->moneda ? $cfdi->moneda : "");
            }

            if(isset($cfdi->tipoCambio) && $cfdi->tipoCambio && $cfdi->tipoCambio != 1){
                $comprobante->agregarAtributo("tipoCambio", $cfdi->tipoCambio ? number_format($cfdi->tipoCambio,2,".","") : "");
            }

            $cfdi_emisor = $cfdi->emisor();

            //Emisor
            $emisor = new CfdiNodo("cfdi:Emisor");
            $emisor->agregarAtributo("rfc", $cfdi_emisor->rfc);
            $emisor->agregarAtributo("nombre", $cfdi_emisor->nombre);
            $comprobante->agregarNodo($emisor);

            //Emisor - <NAME>
            $domicilioFiscal = new CfdiNodo("cfdi:DomicilioFiscal");
            $domicilioFiscal->agregarAtributo("calle", $cfdi_emisor->calle);
            $domicilioFiscal->agregarAtributo("noExterior", $cfdi_emisor->noExterior);
            if($cfdi_emisor->interior) $domicilioFiscal->agregarAtributo("noInterior", $cfdi_emisor->noInterior);
            $domicilioFiscal->agregarAtributo("colonia", $cfdi_emisor->colonia);
            $domicilioFiscal->agregarAtributo("municipio", $cfdi_emisor->municipio);
            $domicilioFiscal->agregarAtributo("estado", $cfdi_emisor->estado);
            $domicilioFiscal->agregarAtributo("pais", $cfdi_emisor->pais);
            $domicilioFiscal->agregarAtributo("codigoPostal", $cfdi_emisor->codigoPostal);
            $emisor->agregarNodo($domicilioFiscal);

            //Emisor - Expedido En
            //Si hay sucursales, sacar datos de la sucursal, sino salen del contribuyente
            $expedioEn = new CfdiNodo("cfdi:ExpedidoEn");
            $expedioEn->agregarAtributo("calle", $cfdi_emisor->calle);
            $expedioEn->agregarAtributo("noExterior", $cfdi_emisor->noExterior);
            if($cfdi_emisor->interior) $expedioEn->agregarAtributo("noInterior", $cfdi_emisor->noInterior);
            $expedioEn->agregarAtributo("colonia", $cfdi_emisor->colonia);
            $expedioEn->agregarAtributo("municipio", $cfdi_emisor->municipio);
            $expedioEn->agregarAtributo("estado", $cfdi_emisor->estado);
            $expedioEn->agregarAtributo("pais", $cfdi_emisor->pais);
            $expedioEn->agregarAtributo("codigoPostal", $cfdi_emisor->codigoPostal);
            $emisor->agregarNodo($expedioEn);

            //Emisor - Regimenes Fiscales
            $cfdi_regimenes = $cfdi->regimenes();
            if($cfdi_regimenes) foreach($cfdi_regimenes as $cfdi_regimen){
                $regimenFiscal = new CfdiNodo("cfdi:RegimenFiscal");
                $regimenFiscal->agregarAtributo("Regimen", $cfdi_regimen->regimen);
                $emisor->agregarNodo($regimenFiscal);
            }

            $cfdi_receptor = $cfdi->receptor();

            //Receptor
            $receptor = new CfdiNodo("cfdi:Receptor");
            $receptor->agregarAtributo("rfc", $cfdi_receptor->rfc);
            $receptor->agregarAtributo("nombre", $cfdi_receptor->nombre);
            $comprobante->agregarNodo($receptor);

            //Receptor - Domicilio Fiscal
            $domicilio = new CfdiNodo("cfdi:Domicilio");
            if($cfdi_receptor->calle) $domicilio->agregarAtributo("calle", $cfdi_receptor->calle);
            if($cfdi_receptor->exterior) $domicilio->agregarAtributo("noExterior", $cfdi_receptor->noExterior);
            if($cfdi_receptor->interior) $domicilio->agregarAtributo("noInterior", $cfdi_receptor->noInterior);

            if($cfdi_receptor->colonia) $domicilio->agregarAtributo("colonia", $cfdi_receptor->colonia);
            if($cfdi_receptor->municipio) $domicilio->agregarAtributo("municipio", $cfdi_receptor->municipio);
            if($cfdi_receptor->estado) $domicilio->agregarAtributo("estado", $cfdi_receptor->estado);
            if($cfdi_receptor->pais) $domicilio->agregarAtributo("pais", $cfdi_receptor->pais);
            if($cfdi_receptor->codigoPostal) $domicilio->agregarAtributo("codigoPostal", $cfdi_receptor->codigoPostal);
            $receptor->agregarNodo($domicilio);

            $cfdi_conceptos = $cfdi->conceptos();

            //Conceptos
            $conceptos = new CfdiNodo("cfdi:Conceptos");

            if($cfdi_conceptos) foreach($cfdi_conceptos as $cfdi_concepto){
                $concepto = new CfdiNodo("cfdi:Concepto");
                $concepto->agregarAtributo("cantidad", $cfdi_concepto->cantidad);
                $concepto->agregarAtributo("unidad", $cfdi_concepto->unidad);
                $concepto->agregarAtributo("descripcion", $cfdi_concepto->descripcion);
                $concepto->agregarAtributo("valorUnitario", number_format($cfdi_concepto->valorUnitario,4,".",""));
                $concepto->agregarAtributo("importe", number_format($cfdi_concepto->importe,4,".",""));
                $conceptos->agregarNodo($concepto);
            }

            $comprobante->agregarNodo($conceptos);
{'fraction_non_alphanumeric': 0.15833333333333333, 'fraction_numerical': 0.003443526170798898, 'mean_word_length': 2.92671714440238, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 277, 'https://': 0, 'lorem ipsum': 0, 'www.': 12, 'xml': 6}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3199449', 'n_tokens_mistral': 5607, 'n_tokens_neox': 5120, 'n_words': 476}