SkillAgentSearch skills...

Cfdi

Librería para generar Comprobantes Fiscales (CFDI) para la versión 3.3

Install / Use

/learn @orlandocharles/Cfdi
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Comprobante Fiscal Digital por Internet (CFDI v3.3)

Travis StyleCI License Donate

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

Related Skills

View on GitHub
GitHub Stars49
CategoryFinance
Updated1mo ago
Forks36

Languages

PHP

Security Score

95/100

Audited on Jan 27, 2026

No findings