PHPackages                             christiancastrorios/cfdi - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. christiancastrorios/cfdi

ActiveLibrary[Payment Processing](/categories/payments)

christiancastrorios/cfdi
========================

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

1.0(7y ago)0199MITPHPPHP ^7.0

Since Feb 12Pushed 7y agoCompare

[ Source](https://github.com/chriscastro182/cfdi)[ Packagist](https://packagist.org/packages/christiancastrorios/cfdi)[ RSS](/packages/christiancastrorios-cfdi/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

**Information about the project**

This project was created by[Orlando Charles](https://github.com/orlandocharles)and some features like "Total Impuestos Traslados" by [Christian Castro](https://bitbucket.org/christiancastrorio).

*For more ingormation please check the License*
-----------------------------------------------

[](#for-more-ingormation-please-check-the-license)

Comprobante Fiscal Digital por Internet (CFDI v3.3)
===================================================

[](#comprobante-fiscal-digital-por-internet-cfdi-v33)

[![Travis](https://camo.githubusercontent.com/d6b7934149f90c6ee4561dd6a325346b3cdd4043cf49b02734c3bc5ba1eee4ab/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f6f726c616e646f636861726c65732f636664692e7376673f7374796c653d666c61742d737175617265)](https://travis-ci.org/orlandocharles/cfdi)[![StyleCI](https://camo.githubusercontent.com/2d023691e54d66476e6871f1b2d9ad21152a73bfb77e2a0c34e18ea3b4e09e5e/68747470733a2f2f7374796c6563692e696f2f7265706f732f39383230383732352f736869656c643f6272616e63683d6d6173746572)](https://styleci.io/repos/98208725)[![License](https://camo.githubusercontent.com/f956b4b75868e37cf318ba6b04b84d1c4ed7a7a7d7a6527c2dd180f6280ab70b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6f726c616e646f636861726c65732f636664692e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/orlandocharles/cfdi)[![Donate](https://camo.githubusercontent.com/812b87cdfbff1527ad8fa3846052cb8b12b84c0d2b822b0397c5a7fe2e6597a6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f6e6174652d50617950616c2d3362376262662e7376673f7374796c653d666c61742d737175617265)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=H2KAFWPGPMKHJ)

- [Instalación](#instalaci%C3%B3n)
- [Uso](#uso)
- [Licencia](#licencia)
- [Donación](#donaci%C3%B3n)

Instalación
-----------

[](#instalación)

> Nota: el proyecto se encuentra en desarrollo.

Para instalar el paquete mediante [Composer](https://getcomposer.org/).

```
composer require christiancastrorios/cfdi
```

Uso
---

[](#uso)

- [CFDI](#cfdi)
- [CFDI Relacionado](#cfdi-relacionado)
- [Emisor](#emisor)
- [Receptor](#receptor)
- [Concepto](#concepto)
- [Impuestos](#concepto)
    - [Traslado](#traslado)
        - [Traslado en comprobante](#traslado-en-comprobante)
        - [Traslado en concepto](#traslado-en-concepto)
    - [Retención](#retenci%C3%B3n)
        - [Retención en comprobante](#retenci%C3%B3n-en-comprobante)
        - [Retención en concepto](#retenci%C3%B3n-en-concepto)
- [Información Aduanera](#informaci%C3%B3n-aduanera)
- [Cuenta Predial](#cuenta-predial)
- [Parte](#parte)

### CFDI

[](#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

[](#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',
]));
```

```

```

### Emisor

[](#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',
]));
```

```

```

### Receptor

[](#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',
]));
```

```

```

### Concepto

[](#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',
]));
```

```

```

### Impuestos

[](#impuestos)

#### Retención

[](#retención)

##### Retención en comprobante

[](#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

[](#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)

##### Traslado en comprobante (nuevo)

[](#traslado-en-comprobante-nuevo)

En este nodo se debe expresar la información detallada de un traslado de impuesto específico solo en el total.

```
use Charles\CFDI\CFDI;
use Charles\CFDI\Node\Impuesto\TrasladoTotal;
use Charles\CFDI\Node\Impuesto\TotalImpuestosTraslado;

$impuesto = new TotalImpuestosTraslado([
     'TotalImpuestosTrasladados' => '420.64'
 ]);
$traslado = new TrasladoTotal([
      'Importe' => '420.64',
      'TasaOCuota' => '0.160000',
      'TipoFactor' => 'Tasa',
      'Impuesto' => '002'
]);
$impuesto->add($traslado);
$cfdi->add($impuesto);
```

##### Traslado en concepto

[](#traslado-en-concepto)

En este nodo la información puede prescindir de Base ya que es a nivel 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

[](#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);
```

```

```

### Cuenta Predial

[](#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

[](#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);
```

```

```

Licencia
--------

[](#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](LICENSE) que se encuentra en este mismo repositorio.

###  Health Score

25

—

LowBetter than 36% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2695d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b1d145f11d6863e53dc703df1977bac62ccd323bbc911f1a2a5a1cc3b22a5c9d?d=identicon)[christiancastrorios](/maintainers/christiancastrorios)

---

Top Contributors

[![chriscastro182](https://avatars.githubusercontent.com/u/25974335?v=4)](https://github.com/chriscastro182 "chriscastro182 (9 commits)")

---

Tags

invoicesatcfdimexico

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/christiancastrorios-cfdi/health.svg)

```
[![Health](https://phpackages.com/badges/christiancastrorios-cfdi/health.svg)](https://phpackages.com/packages/christiancastrorios-cfdi)
```

###  Alternatives

[laraveldaily/laravel-invoices

Missing invoices for Laravel

1.6k1.4M5](/packages/laraveldaily-laravel-invoices)[horstoeko/zugferd

A library for creating and reading european electronic invoices

4275.2M26](/packages/horstoeko-zugferd)[phpcfdi/cfditopdf

Create a generic PDF file from a CFDI 3.3 &amp; 4.0 (CLI included)

4148.9k5](/packages/phpcfdi-cfditopdf)[atgp/factur-x

PHP library to manage your Factur-X / ZUGFeRD 2.0 PDF invoices files

149883.7k4](/packages/atgp-factur-x)[num-num/ubl-invoice

A modern object-oriented PHP library to create and read valid UBL and EN 16931/Peppol BIS 3.0 files

136887.1k](/packages/num-num-ubl-invoice)[josemmo/einvoicing

Library for reading and creating European-compliant electronic invoices (EN 16931)

177331.0k3](/packages/josemmo-einvoicing)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
