PHPackages                             contica/facturacion-electronica-cr - 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. contica/facturacion-electronica-cr

Abandoned → [contica/facturador-electronico-cr](/?search=contica%2Ffacturador-electronico-cr)Library

contica/facturacion-electronica-cr
==================================

Un facturador de código libre para integrar facturación electrónica en Costa Rica a un proyecto PHP

v4.0.1(2mo ago)2134026[2 issues](https://github.com/josiasmc/facturador-electronico-cr/issues)[2 PRs](https://github.com/josiasmc/facturador-electronico-cr/pulls)MITPHPPHP &gt;=8.3CI passing

Since Aug 4Pushed 3w ago8 watchersCompare

[ Source](https://github.com/josiasmc/facturador-electronico-cr)[ Packagist](https://packagist.org/packages/contica/facturacion-electronica-cr)[ Docs](https://github.com/josiasmc/facturador-electronico-cr)[ RSS](/packages/contica-facturacion-electronica-cr/feed)WikiDiscussions master Synced yesterday

READMEChangelog (10)Dependencies (16)Versions (86)Used By (0)

facturador-electronico-cr
=========================

[](#facturador-electronico-cr)

[![Latest Version on Packagist](https://camo.githubusercontent.com/f6d8de9e59d4e9fd1ff58691fad5901a3d450c2612b2ecc181ba910b1baa7d16/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636f6e746963612f66616374757261646f722d656c656374726f6e69636f2d63722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/contica/facturador-electronico-cr)[![Software License](https://camo.githubusercontent.com/55c0218c8f8009f06ad4ddae837ddd05301481fcf0dff8e0ed9dadda8780713e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![Total Downloads](https://camo.githubusercontent.com/d8987281d9cd27a486bca6a77d9b9d1a9430b73c29fbe4254792d54a14f0f16a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f636f6e746963612f66616374757261646f722d656c656374726f6e69636f2d63722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/contica/facturador-electronico-cr)

Este es un componente PHP que provee toda la funcionalidad para crear, enviar, y almacenar los comprobantes electrónicos requeridos por el Ministerio de Hacienda en Costa Rica.

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

[](#instalación)

Por medio de Composer

```
composer require contica/facturador-electronico-cr
```

Inicializar
-----------

[](#inicializar)

```
/**
 * Crear la conexión a la base de datos
 */
$db = new mysqli(
    'host',
    'usuario',
    'contraseña',
    'base_de_datos'
);

/**
 * Inicializar la base de datos
 * Tambien para ejecutar migraciones después de una actualización
 */
Storage::runMigrations($db);
```

Inicializar componente
----------------------

[](#inicializar-componente)

Si quiere encriptar los datos de conexión a Hacienda en la base de datos se puede crear una llave de encriptación usando el siguiente comando:

```
composer generateKey
```

o usando el método

```
FacturadorElectronico::crearLlaveSeguridad();
```

El valor que genera se debe guardar en un lugar seguro y suministrarlo al ajuste `crypto_key` en la lista de ajustes.

```
$ajustes = [
    'storage_path' => '', // ruta completa en donde guardar los comprobantes
    'crypto_key' => '',   // (opcional) Llave para encriptar datos de conexion
    'callback_url' => '',  // (opcional) URL donde se recibe el callback
    'storage_type' => 'local', // 'local' o 's3' para el tipo de almacenaje
    's3_client_options' => [ // ajustes opcionales si se usa almacenaje s3
        'credentials' => [
            'key'    => 'llave',
            'secret' => 'secreto'
        ],
        'endpoint' => 'https://us-east-1.linodeobjects.com', // (opcional)
        'region' => 'region', // por ej, us-east-1
        'version' => 'latest', // version
    ],
    's3_bucket_name' => 'nombre_de_bucket' // (opcional) nombre de balde en s3
];

/**
 * Esto crea el objeto que se usa para ejecturar todos los métodos disponibles
 */
$facturador = new FacturadorElectronico($db, $ajustes);
```

Registrar empresa emisora en el componente
------------------------------------------

[](#registrar-empresa-emisora-en-el-componente)

Para poder procesar los comprobantes de un emisor, primero hay que registrar el emisor. El siguiente método se usa para registrar un emisor nuevo al igual que actualizarlo.

```
$llave = file_get_contents('llave_criptografica.p12');
$datos_de_empresa = [
    'cedula'   => '909990999',
    'ambiente' => '1',         // 1 prod, 2 stag
    'usuario'  => 'usuario_mh',
    'contra'   => 'contraseña_mh',
    'pin'      => 'pin_llave',
    'llave_criptografica' => $llave
];
/**
 * Registrar empresa nueva
 *
 * El valor devuelto se tiene que usar para todas las
 * operaciones futuras sobre la empresa registrada
 */
$id_empresa = $facturador->guardarEmpresa($datos_de_empresa);

/**
 * Modificar los datos de la empresa
 *
 * En $datos_de_empresa solo es necesario incluir los datos
 * que se están modificando
 */
$facturador->guardarEmpresa($datos_de_empresa, $id_empresa);
```

Crear un comprobante electrónico
--------------------------------

[](#crear-un-comprobante-electrónico)

```
/**
 * Datos de ejemplo para factura electrónica
 *
 * La estructura del array debe cumplir con la estructura
 * establecida para los comprobantes electrónicos
 */
$comprobante = [
    'Clave' => '{$clave}', // Omitir nodo para que se genere automáticamente
    'NumeroConsecutivo' => '00100001010000000001',
    'FechaEmision' => date('c'),
    'Emisor' => [
        'Nombre' => 'Emisor',
        'Identificacion' => [
            'Tipo' => '01',
            'Numero' => '909990999'
        ],
        'Ubicacion' => [
            'Provincia' => '6',
            'Canton' => '01',
            'Distrito' => '01',
            'OtrasSenas' => 'direccion'
        ],
        'CorreoElectronico' => 'correo@gmail.com'
    ],
    'Receptor' => [
        'Nombre' => 'Receptor',
        'Identificacion' => [
            'Tipo' => '01',
            'Numero' => '909990999'
        ],
        'Ubicacion' => [
            'Provincia' => '6',
            'Canton' => '01',
            'Distrito' => '01',
            'OtrasSenas' => 'direccion'
        ],
        'CorreoElectronico' => 'correo@gmail.com'
    ],
    'CondicionVenta' => '01',
    'MedioPago' => ['01', '02'],
    'DetalleServicio' => [
        'LineaDetalle' => [
            [
                'NumeroLinea' => '1',
                'Codigo' => 'codigo CABYS',
                'CodigoComercial' => [
                    'Tipo' => '01',
                    'Codigo' => '00001'
                ],
                'Cantidad' => '1',
                'UnidadMedida' => 'Unid',
                'Detalle'  => 'Producto sin IVA',
                'PrecioUnitario' => '15000.00',
                'MontoTotal' => '15000.00',
                'Descuento' => [ // Incluir cuando hay descuento
                    'MontoDescuento' => '1000.00',
                    'NaturalezaDescuento' => '...'
                ],
                'Subtotal' => '14000.00',
                'MontoTotalLinea' => '14000.00'
            ],
            [
                'NumeroLinea' => '2',
                'Codigo' => 'codigo CABYS',
                'Codigo' => [
                    'Tipo' => '04',
                    'Codigo' => '00002'
                ],
                'Cantidad' => '2',
                'UnidadMedida' => 'Hr',
                'Detalle'  => 'Servicio con IVA',
                'PrecioUnitario' => '3000.00',
                'MontoTotal' => '6000.00',
                'Subtotal' => '6000.00',
                'Impuesto' => [
                    'Codigo' => '01',
                    'CodigoTarifa' => '08',
                    'Tarifa' => '13.00',
                    'Monto' => '780.00'
                ]
                'MontoTotalLinea' => '6780.00'
            ]
        ]
    ],
    'ResumenFactura' => [
        'TotalServGravados' => '6000.00',
        'TotalMercanciasExentas' => '15000.00',
        'TotalGravado' => '6000.00',
        'TotalExento' => '15000.00',
        'TotalVenta' => '21000.00',
        'TotalDescuentos' => '1000.00',
        'TotalVentaNeta' => '20000.00',
        'TotalImpuesto' => '780.00',
        'TotalComprobante' => '20780.00'
    ]
];

/**
 * Esta funcion devuelve la clave del comprobante
 * Necesario para futuras consultas
 */
$clave = $facturador->enviarComprobante(
    $comprobante,
    $id_empresa
);
```

El comprobante generado queda guardado en la cola de envío. Para enviarlo a Hacienda, se ejecuta el siguiente método:

```
$docs_enviados = $facturador->enviarCola();

/**
 * Contenido de ejemplo devuelto en $docs_enviados
 *
 * [
 *     [
 *         'clave' => 'clave...',
 *         'tipo' => 'E', // E para emision, R para recepcion
 *     ],
 *     [...]
 * ]
 *
 */
```

Consultar el estado
-------------------

[](#consultar-el-estado)

```
$estado = $facturador->consultarEstado(
    $clave,
    'E', // E para emision, R para recepcion
    $id_empresa
);

/**
 * Contenido de ejemplo devuelto en $estado
 *
 * [
 *     'clave' => 'clave...',
 *     'estado' => 1, // 1 pendiente, 2 enviado, 3 aceptado, 4 rechazado
 *     'mensaje' => 'Mensaje Hacienda',
 *     'xml' => 'Contenido del xml de respuesta si existe'
 * ]
 *
 */
```

Coger el xml de un comprobante
------------------------------

[](#coger-el-xml-de-un-comprobante)

Hay que especificar cuál tipo es el que uno quiere.

- 1: XML del comprobante
- 2: XML de respuesta para el tipo 1
- 3: XML del mensaje receptor para un comprobante recibido (recepciones)
- 4: XML de la respuesta para el tipo 3 (recepciones)

```
$xml = $facturador->cogerXml(
    $clave,
    'E', // E para emision, R para recepcion
    1,   // El tipo
    $id_empresa
);

/**
 * Convertir el xml a un array para poder procesar
 */
$xml_decodificado = Comprobante::analizarXML($xml);
```

Procesar callback de Hacienda
-----------------------------

[](#procesar-callback-de-hacienda)

Código para pasar el contenido del POST que hace Hacienda al facturador. Implementar el callback hace innecesario estar siempre consultando manualmente el estado.

```
$body = file_get_contents('php://input');

$estado = $facturador->procesarCallbackHacienda($body);

/**
 * El contenido de $estado es idéntico a Consultar Estado más arriba.
 */
```

Registro de cambios
-------------------

[](#registro-de-cambios)

Por favor vea el [CHANGELOG](CHANGELOG.md) para más información de lo que ha cambiado recientemente.

Pruebas
-------

[](#pruebas)

```
composer test
```

Seguridad
---------

[](#seguridad)

Si descubre problemas relacionados a la seguridad, por favor envíe un correo electrónico a .

Créditos
--------

[](#créditos)

- [Josias Martin](https://github.com/josiasmc)
- [Todos los contribuyentes](../../contributors)

Licencia
--------

[](#licencia)

Licencia MIT (MIT). Favor ver [LICENCIA](LICENSE.md) para más información.

###  Health Score

60

—

FairBetter than 99% of packages

Maintenance90

Actively maintained with recent releases

Popularity25

Limited adoption so far

Community17

Small or concentrated contributor base

Maturity93

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 96% 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

Every ~34 days

Recently: every ~44 days

Total

81

Last Release

63d ago

Major Versions

v1.3.05 → v2.02018-08-22

v2.4.2 → v3.02019-06-25

v3.7.3 → v4.0.02026-03-10

PHP version history (6 changes)v1.2.1PHP ~7.0

v3.0PHP ~7.1

v3.3.6PHP ~7.1 ~8.0

v3.3.8PHP &gt;=7.1

v3.5.1PHP &gt;=7.4

v4.0.0PHP &gt;=8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/9d730060e6d06a54a1538a9ee87b05321680c6ff25189c57e0278fc7529ab8a4?d=identicon)[josiasmc](/maintainers/josiasmc)

---

Top Contributors

[![josiasmc](https://avatars.githubusercontent.com/u/38670519?v=4)](https://github.com/josiasmc "josiasmc (24 commits)")[![ColdCR](https://avatars.githubusercontent.com/u/58675962?v=4)](https://github.com/ColdCR "ColdCR (1 commits)")

---

Tags

facturacion-electronicafacturacionCosta Rica

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/contica-facturacion-electronica-cr/health.svg)

```
[![Health](https://phpackages.com/badges/contica-facturacion-electronica-cr/health.svg)](https://phpackages.com/packages/contica-facturacion-electronica-cr)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.6k509.9M17.0k](/packages/laravel-framework)[contica/facturador-electronico-cr

Un facturador de código libre para integrar facturación electrónica en Costa Rica a un proyecto PHP

2128.8k](/packages/contica-facturador-electronico-cr)[magento/community-edition

Magento 2 (Open Source)

12.1k52.1k10](/packages/magento-community-edition)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[wheelpros/fitment-platform-api

Magento 2 (Open Source)

12.1k1.2k](/packages/wheelpros-fitment-platform-api)[laravel/vapor-cli

The Laravel Vapor CLI

31310.7M8](/packages/laravel-vapor-cli)

PHPackages © 2026

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