orlandocharles / cfdi
Librería para generar Comprobantes Fiscales para la versión 3.3
Installs: 337
Dependents: 0
Suggesters: 0
Security: 0
Stars: 49
Watchers: 8
Forks: 36
Open Issues: 1
Requires
- php: ^7.0
Requires (Dev)
- phpunit/phpunit: ^4.8|^5.0
This package is not auto-updated.
Last update: 2024-11-10 04:58:38 UTC
README
Instalación
Nota: el proyecto se encuentra en desarrollo.
Para instalar el paquete mediante Composer.
composer require orlandocharles/cfdi
Uso
CFDI
use Charles\CFDI\CFDI; $cer = file_get_contents('.../csd/AAA010101AAA.cer.pem'); $key = file_get_contents('.../csd/AAA010101AAA.key.pem'); $cfdi = new CFDI([ 'Serie' => 'A', 'Folio' => 'A0101', 'Fecha' => '2017-06-17T03:00:00', 'FormaPago' => '01', 'NoCertificado' => '00000000000000000000', 'CondicionesDePago' => '', 'Subtotal' => '', 'Descuento' => '0.00', 'Moneda' => 'MXN', 'TipoCambio' => '1.0', 'Total' => '', 'TipoDeComprobante' => 'I', 'MetodoPago' => 'PUE', 'LugarExpedicion' => '64000', ], $cer, $key);
CFDI Relacionado
En este nodo se debe expresar la información de los comprobantes fiscales relacionados con el que se ésta generando, se deben expresar tantos numeros de nodos de CfdiRelacionado, como comprobantes se requieran relacionar.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Relacionado; $cfdi = new CFDI([...]); $cfdi->add(new Relacionado([ 'UUID' => 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', ], [ 'TipoRelacion' => '01', ]));
<cfdi:CfdiRelacionados TipoRelacion="01"> <cfdi:CfdiRelacionado UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"/> </cfdi:CfdiRelacionados>
Emisor
En este nodo se debe expresar la información del contribuyente que emite el comprobante fiscal.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Emisor; $cfdi = new CFDI([...]); $cfdi->add(new Emisor([ 'Rfc' => 'XAXX010101000', 'Nombre' => 'Florería SA de CV', 'RegimenFiscal' => '601', ]));
<cfdi:Emisor Rfc="XAXX010101000" Nombre="Florería SA de CV" RegimenFiscal="601"/>
Receptor
En este nodo se debe expresar la información del contribuyente receptor del comprobante.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Receptor; $cfdi = new CFDI([...]); $cfdi->add(new Receptor([ 'Rfc' => 'XEXX010101000', 'Nombre' => 'Orlando Charles', 'ResidenciaFiscal' => 'USA', 'NumRegIdTrib' => '121585958', 'UsoCFDI' => 'G01', ]));
<cfdi:Receptor Rfc="XEXX010101000" Nombre="Orlando Charles" ResidenciaFiscal="USA" NumRegIdTrib="121585958" UsoCFDI="G01"/>
Concepto
En este nodo se debe expresar la información detallada de un bien o servicio descrito en el comprobante.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Concepto; $cfdi = new CFDI([...]); $cfdi->add(new Concepto([ 'ClaveProdServ' => '10317331', 'NoIdentificacion' => 'UT421511', 'Cantidad' => '24', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Arreglo de 24 tulipanes rosadas recién cortados', 'ValorUnitario' => '56.00', 'Importe' => '1344.00', 'Descuento' => '10.00', ])); $cfdi->add(new Concepto([ 'ClaveProdServ' => '10317352', 'NoIdentificacion' => 'UT421510', 'Cantidad' => '12', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Arreglo de 12 tulipanes rojos recién cortados', 'ValorUnitario' => '66.00', 'Importe' => '792.00', 'Descuento' => '5.00', ]));
<cfdi:Conceptos> <cfdi:Concepto ClaveProdServ="10317331" NoIdentificacion="UT421511" Cantidad="24" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Arreglo de 24 tulipanes rosadas recién cortados" ValorUnitario="56.00" Importe="1344.00" Descuento="10.00"/> <cfdi:Concepto ClaveProdServ="10317352" NoIdentificacion="UT421510" Cantidad="12" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Arreglo de 12 tulipanes rojos recién cortados" ValorUnitario="66.00" Importe="792.00" Descuento="5.00"/> </cfdi:Conceptos>
Impuestos
Retención
Retención en comprobante
En este nodo se debe expresar la información detallada de una retención de un impuesto específico.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Impuesto\Retencion; $cfdi->add(new Retencion([ 'Impuesto' => '002', 'Importe' => '35000', ]));
Retención en concepto
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Concepto; use Charles\CFDI\Node\Impuesto\Retencion; $cfdi = new CFDI([...]); $concepto = new Concepto([ 'ClaveProdServ' => '10317331', 'NoIdentificacion' => 'UT421511', 'Cantidad' => '24', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Arreglo de 24 tulipanes rosadas recién cortados', 'ValorUnitario' => '56.00', 'Importe' => '1344.00', 'Descuento' => '10.00', ]); $concepto->add(new Retencion([ ])); $cfdi->add($concepto);
Traslado
Traslado en comprobante
En este nodo se debe expresar la información detallada de un traslado de impuesto específico.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Impuesto\Traslado; $cfdi->add(new Traslado([ 'Impuesto' => '001', 'TipoFactor' => 'Tasa', 'TasaOCuota' => '0.160000', 'Importe' => '23000', ]));
Traslado en concepto
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Concepto; use Charles\CFDI\Node\Impuesto\Traslado; $cfdi = new CFDI([...]); $concepto = new Concepto([ 'ClaveProdServ' => '10317331', 'NoIdentificacion' => 'UT421511', 'Cantidad' => '24', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Arreglo de 24 tulipanes rosadas recién cortados', 'ValorUnitario' => '56.00', 'Importe' => '1344.00', 'Descuento' => '10.00', ]); $concepto->add(new Traslado([ ])); $cfdi->add($concepto);
Información Aduanera
En este nodo se debe expresar la información aduanera correspondiente a cada concepto cuando se trate de ventas de primera mano de mercancías importadas
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Concepto; use Charles\CFDI\Node\InformacionAduanera; $cfdi = new CFDI([...]); $concepto = new Concepto([ 'ClaveProdServ' => '10317331', 'NoIdentificacion' => 'UT421511', 'Cantidad' => '24', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Arreglo de 24 tulipanes rosadas recién cortados', 'ValorUnitario' => '56.00', 'Importe' => '1344.00', 'Descuento' => '10.00', ]); $concepto->add(new InformacionAduanera([ 'NumeroPedimento' => '00 00 0000 0000000', ])); $cfdi->add($concepto);
<cfdi:Conceptos> <cfdi:Concepto ClaveProdServ="10317331" NoIdentificacion="UT421511" Cantidad="24" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Arreglo de 24 tulipanes rosadas recién cortados" ValorUnitario="56.00" Importe="1344.00" Descuento="10.00"> <cfdi:InformacionAduanera NumeroPedimento="00 00 0000 0000000"/> </cfdi:Concepto> </cfdi:Conceptos>
Cuenta Predial
En este nodo se puede expresar el número de cuenta predial con el que fue registrado el inmueble en el sistema catastral de la entidad federativa de que trate, o bien para incorporar los datos de identificación del certificado de participación inmobiliaria no amortizable.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Concepto; use Charles\CFDI\Node\CuentaPredial; $cfdi = new CFDI([...]); $concepto = new Concepto([...]); $concepto->add(new CuentaPredial([ 'Numero' => '00000', ])); $cfdi->add($concepto);
Parte
En este nodo se pueden expresar las partes o componentes que integran la totalidad del concepto expresado en el comprobante fiscal digital por Internet.
use Charles\CFDI\CFDI; use Charles\CFDI\Node\Concepto; use Charles\CFDI\Node\Parte; $cfdi = new CFDI([...]); $concepto = new Concepto([ 'ClaveProdServ' => '27113201', 'NoIdentificacion' => 'UT421456', 'Cantidad' => '1', 'ClaveUnidad' => 'KT', 'Unidad' => 'Kit', 'Descripcion' => 'Kit de destornillador', 'ValorUnitario' => '217.30', 'Importe' => '217.30', 'Descuento' => '0.00', ]); $tornillo = new Parte([ 'ClaveProdServ' => '31161500', 'NoIdentificacion' => 'UT367898', 'Cantidad' => '34', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Tornillo', 'ValorUnitario' => '00.20', 'Importe' => '6.80', ]); $tornilloPerno = new Parte([ 'ClaveProdServ' => '31161501', 'NoIdentificacion' => 'UT367899', 'Cantidad' => '14', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Tornillo de Perno', 'ValorUnitario' => '00.75', 'Importe' => '10.50', ]); $destornillador = new Parte([ 'ClaveProdServ' => '27111701', 'NoIdentificacion' => 'UT367900', 'Cantidad' => '2', 'ClaveUnidad' => 'H87', 'Unidad' => 'Pieza', 'Descripcion' => 'Destornillador', 'ValorUnitario' => '100.00', 'Importe' => '200.00', ]); $concepto->add($tornillo); $concepto->add($tornilloPerno); $concepto->add($destornillador); $cfdi->add($concepto);
<cfdi:Conceptos> <cfdi:Concepto ClaveProdServ="27113201" NoIdentificacion="UT421456" Cantidad="1" ClaveUnidad="KT" Unidad="Kit" Descripcion="Kit de destornillador" ValorUnitario="217.30" Importe="217.30" Descuento="0.00"> <cfdi:Parte ClaveProdServ="31161500" NoIdentificacion="UT367898" Cantidad="34" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Tornillo" ValorUnitario="00.20" Importe="6.80"/> <cfdi:Parte ClaveProdServ="31161501" NoIdentificacion="UT367899" Cantidad="14" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Tornillo de Perno" ValorUnitario="00.75" Importe="10.50"/> <cfdi:Parte ClaveProdServ="27111701" NoIdentificacion="UT367900" Cantidad="2" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Destornillador" ValorUnitario="100.00" Importe="200.00"/> </cfdi:Concepto> </cfdi:Conceptos>
Licencia
Este paquete no pertenece a ninguna comañia ni entidad gubernamental y esta bajo la Licencia MIT, si quieres saber más al respecto puedes ver el archivo de Licencia que se encuentra en este mismo repositorio.
Donación
Este proyecto ayuda a que otros desarrolladores ahorren horas de trabajo.