---
title: "Biblioteca PHP"
description: "Biblioteca PHP"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-10-08"
last_update: "2026-10-08"
time_minutes: 1
draft: false
unlisted: false
url: "https://core.libredte.cl/docs/lib"
---

# Biblioteca PHP



---

## Introducción

Núcleo de LibreDTE en PHP

# Núcleo de LibreDTE en PHP

[![CI](https://github.com/libredte/libredte-lib-core/actions/workflows/ci.yml/badge.svg?branch=master&amp;event=push)](https://github.com/libredte/libredte-lib-core/actions/workflows/ci.yml?query=branch%3Amaster)
[![Licencia](https://poser.pugx.org/libredte/libredte-lib-core/license)](https://packagist.org/packages/libredte/libredte-lib-core)
[![Descargas totales](https://poser.pugx.org/libredte/libredte-lib-core/downloads)](https://packagist.org/packages/libredte/libredte-lib-core)
[![Descargas mensuales](https://poser.pugx.org/libredte/libredte-lib-core/d/monthly)](https://packagist.org/packages/libredte/libredte-lib-core)

Biblioteca escrita en PHP para la integración con el Servicio de
Impuestos Internos (SII) asociada a los Documentos Tributarios
Electrónicos (DTE). Se construyó originalmente para ser el núcleo de
la [Aplicación Web de LibreDTE Edición Comunidad](https://github.com/libredte/libredte-app-community),
y hoy es también la base del [Dispatcher](https://www.derafu.dev/docs/dispatcher), los
[Servicios Web (API)](https://www.derafu.dev/docs/api), la
[Imagen Docker (API)](https://www.derafu.dev/docs/docker-api), la
[Imagen Docker (Consola)](https://www.derafu.dev/docs/docker-console) y el
[Bridge Python](https://www.derafu.dev/docs/bridge-python).

Revisa [Instalación](https://www.derafu.dev/docs/lib/instalacion) para partir.

&gt; [!IMPORTANT] Importante
&gt;
&gt; Usar esta biblioteca la embebe dentro de tu propio proceso: tu
&gt; software se convierte en un trabajo derivado y queda sujeto a los
&gt; términos de la [licencia AGPL](https://www.derafu.dev/docs/lib/licencia). Si buscas
&gt; integrarte sin ese efecto, revisa los
&gt; [Servicios Web (API)](https://www.derafu.dev/docs/api), la
&gt; [Imagen Docker (API)](https://www.derafu.dev/docs/docker-api) o la
&gt; [Imagen Docker (Consola)](https://www.derafu.dev/docs/docker-console).




---

## Licencia

Términos y condiciones de uso

# Términos y condiciones de uso

Al utilizar este proyecto, total o parcialmente, automáticamente se acepta cumplir con los [términos y condiciones de uso](https://www.derafu.dev/legal) que rigen a LibreDTE. La [Licencia Pública General Affero de GNU (AGPL)](https://raw.githubusercontent.com/libredte/libredte-lib-core/master/COPYING) solo aplica para quienes respeten los términos y condiciones de uso. No existe una licencia comercial de la biblioteca PHP de LibreDTE, por lo cual no es posible usar el proyecto si no aceptas cumplir dichos términos y condiciones.

La versión resumida de los términos y condiciones de uso de LibreDTE que permiten utilizar el proyecto, son los siguientes:

1. Tienes la libertad de: usar, estudiar, distribuir y cambiar LibreDTE.
2. Si utilizas LibreDTE en tu software, el código fuente de dicho software deberá ser liberado de manera pública bajo licencia AGPL.
3. Si haces cambios a LibreDTE deberás liberar de manera pública el código fuente de dichos cambios bajo licencia AGPL.
4. Debes hacer referencia de manera pública en tu software al proyecto y autor original de LibreDTE, tanto si usas LibreDTE sin modificar o realizando cambios al código.

&gt; [!IMPORTANT] Importante
&gt;
&gt; Es obligación de quienes quieran usar el proyecto leer y aceptar por completo los [términos y condiciones de uso](https://www.derafu.dev/legal).




---

## Instalación

Instalación mediante composer

# Instalación

La forma recomendada de instalar la biblioteca PHP de LibreDTE es mediante composer:

```shell
composer require libredte/libredte-lib-core
```

## Requerimientos

- PHP 8.5.
- Extensiones de PHP:
   - curl.
   - json.
   - mbstring.
   - openssl.
   - soap.
   - xdebug (opcional, solo para *testing*).




---

## Ejemplo

Emite tu primer DTE con LibreDTE

# Ejemplo

El siguiente es un ejemplo básico de cómo generar el XML de un DTE usando la biblioteca PHP de LibreDTE.

```php
use Derafu\Certificate\Service\CertificateLoader;
use libredte\lib\Core\Application;

// Obtener la instancia de la aplicación de LibreDTE.
$app = Application::getInstance();

// Preparar datos del DTE.
$data = [ /* aquí los datos del DTE */ ];

// Cargar contenido del archivo CAF.
$caf = $app
    -&gt;getPackageRegistry()
    -&gt;getBillingPackage()
    -&gt;getIdentifierComponent()
    -&gt;getCafLoaderWorker()
    -&gt;load(file_get_contents($cafFile))
    -&gt;getCaf()
;

// Cargar el certificado digital.
$certificateLoader = new CertificateLoader();
$certificate = $certificateLoader-&gt;loadFromFile($certificateFile, $certificatePass);

// Crear DTE.
$document = $app
    -&gt;getPackageRegistry()
    -&gt;getBillingPackage()
    -&gt;getDocumentComponent()
    -&gt;bill($data, $caf, $certificate)
    -&gt;getDocument()
;

// Mostrar el XML del DTE generado.
echo $document-&gt;saveXml() , &quot;\n&quot;;
```

&gt; [!NOTE] Nota
&gt;
&gt; Revisa los [casos de uso](https://www.derafu.dev/docs/lib/casos-de-uso) para ejemplos detallados de cómo construir los datos del DTE según diferentes situaciones.




---

## DTE disponibles

Documentos tributarios disponibles

# Documentos tributarios electrónicos disponibles

Listado de documentos tributarios electrónicos (DTE) disponibles en LibreDTE.

| Código | Documento                           | Clase / *builder*           | Soporte oficial      |
|--------|-------------------------------------|-----------------------------|----------------------|
| 33     | Factura Afecta                      | `FacturaAfecta`             | Sí                   |
| 34     | Factura Exenta                      | `FacturaExenta`             | Sí                   |
| 39     | Boleta Afecta                       | `BoletaAfecta`              | Sí                   |
| 41     | Boleta Exenta                       | `BoletaExenta`              | Sí                   |
| 43     | Liquidación de Factura              | `LiquidacionFactura`        | No (próximamente)    |
| 46     | Factura de Compra                   | `FacturaCompra`             | Sí                   |
| 52     | Guía de Despacho                    | `GuiaDespacho`              | Sí                   |
| 56     | Nota de Débito                      | `NotaDebito`                | Sí                   |
| 61     | Nota de Crédito                     | `NotaCredito`               | Sí                   |
| 110    | Factura de Exportación              | `FacturaExportacion`        | Sí                   |
| 111    | Nota de Débito de Exportación       | `NotaDebitoExportacion`     | Sí                   |
| 112    | Nota de Crédito de Exportación      | `NotaCreditoExportacion`    | Sí                   |

&gt; [!WARNING] Advertencia
&gt;
&gt; El hecho de que un documento tributario electrónico (DTE) cuente con soporte oficial en LibreDTE significa que existe una implementación que permite generar y validar ese tipo de documento, cumpliendo con los requisitos mínimos para pasar las pruebas de la biblioteca en el entorno de certificación del SII. Sin embargo, esto no implica que estén cubiertos todos los escenarios o casos de uso posibles definidos por la normativa tributaria vigente.




---

## Casos de uso

Ejemplos de DTE en YAML

# Casos de uso

En el directorio `tests/fixtures/yaml/documentos_ok` se encuentran los casos de uso más comunes que se han visto en 10 años de historia de LibreDTE. Se recomienda mucho que el programador revise dichos ejemplos antes de intentar una integración.

Los casos de uso representan una situación específica que se puede dar al crear un DTE.

El listado de casos de uso por tipo de documento es:

1. [Factura Afecta (DTE 33)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/033_factura_afecta)
2. [Factura Exenta (DTE 34)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/034_factura_exenta)
3. [Boleta Afecta (DTE 39)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/039_boleta_afecta)
4. [Boleta Exenta (DTE 41)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/041_boleta_exenta)
5. [~Liquidación de Factura (DTE 43)~](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/043_liquidacion_factura)
6. [Factura de Compra (DTE 46)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/046_factura_compra)
7. [Guía de Despacho (DTE 52)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/052_guia_despacho)
8. [Nota de Débito (DTE 56)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/056_nota_debito)
9. [Nota de Crédito (DTE 61)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/061_nota_credito)
10. [Factura de Exportación (DTE 110)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/110_factura_exportacion)
11. [Nota de Débito de Exportación (DTE 111)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/111_nota_debito_exportacion)
12. [Nota de Crédito de Exportación (DTE 112)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/112_nota_credito_exportacion)

&gt; [!NOTE] Nota
&gt;
&gt; El caso de uso [Liquidación de Factura (DTE 43)](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok/043_liquidacion_factura) no está implementado en la biblioteca PHP de LibreDTE.




---

## Funcionalidades

Funcionalidades y características

# Funcionalidades y características

## Estructura general

El proyecto se organiza en **paquetes** (`Package`). Cada paquete agrupa **componentes** (`Component`) relacionados con un dominio. Cada componente expone su funcionalidad a través de **workers** (`Worker`), que son los servicios principales. Los workers pueden tener estrategias intercambiables para distintas variantes de una misma operación.

El núcleo de LibreDTE tiene solo el paquete **`Billing`**, con los siguientes componentes:

| Componente                   | Descripción                                                                                             |
|------------------------------|---------------------------------------------------------------------------------------------------------|
| `billing.trading_parties`    | Entidades participantes: emisor, receptor, contribuyente, mandatario.                                   |
| `billing.identifier`         | Autorización de folios (CAF).                                                                           |
| `billing.document`           | Ciclo de vida completo de los DTE: parseo, normalización, construcción, validación, renderizado, envío. |
| `billing.integration`        | Cliente para los servicios web del SII (API SOAP).                                                      |
| `billing.exchange`           | Intercambio de documentos entre partes vía email o SII.                                                 |
| `billing.book`               | Libros y registros tributarios.                                                                         |
| `billing.ownership_transfer` | Cesión electrónica (factoring/AEC).                                                                     |

## Servicios externos usados por LibreDTE Core

### XML (`derafu/xml`)

1. ✓ `XmlDocument`: extiende `DomDocument` con funcionalidades adicionales, incluyendo `query()`.
2. ✓ `XmlEncoder` y `XmlDecoder`: conversión entre arreglo PHP y string XML.
3. ✓ `XmlValidator`: validación de esquema XSD.

### Certificados digitales (`derafu/certificate`)

1. ✓ `Certificate`: representa un certificado digital con clave pública, privada y metadatos (RUN, nombre, período de validez).
2. ✓ `CertificateFaker`: genera certificados falsos para pruebas.

### Firma electrónica (`derafu/signature`)

1. ✓ `SignatureGenerator`, `SignatureValidator`, `XmlSignatureNode`: firma y validación XML DSIG estándar, pero preparada para lo que el SII requiere.

## Funcionalidades de LibreDTE Core

### Partes comerciales (`billing.trading_parties`)

1. ✓ `Contribuyente`, `Emisor`, `Receptor`, `Mandatario`, `PersonaNatural`: entidades que representan a los participantes de un DTE.
2. ✓ `ContribuyenteFactory`, `EmisorFactory`, `ReceptorFactory`, `MandatarioFactory`: fábricas para construir cada entidad.
3. ✓ `MandatarioManagerWorker`: gestión del ciclo de vida de mandatarios.
4. ✓ `AutorizacionDte`: representación de la autorización de un emisor para emitir DTE.

### Autorización de folios — CAF (`billing.identifier`)

1. ✓ `Caf`: representa un archivo CAF con clave pública, privada, tipo de documento, rango de folios y período de validez.
2. ✓ `CafFaker` y `CafFakerWorker`: generación de CAF falsos para pruebas.
3. ✓ `CafLoaderWorker`: carga de archivos CAF desde disco u otras fuentes.
4. ✓ `CafValidatorWorker`: validación de un CAF (vigencia, rango, firma).
5. ✓ `CafProviderWorker`: proveedor de CAF que combina carga y validación.
6. ✓ `CafBag`: colección de CAF para múltiples tipos de documento.

### Documentos tributarios — DTE (`billing.document`)

1. ✓ `TipoDocumento` y `TipoDocumentoFactory`: representa un tipo de DTE con sus atributos (código, nombre, categoría, operación, tag XML, etc.).
2. ✓ Entidades de documento (`FacturaAfecta`, `FacturaExenta`, `FacturaCompra`, `FacturaExportacion`, `BoletaAfecta`, `BoletaExenta`, `NotaCredito`, `NotaDebito`, `NotaCreditoExportacion`, `NotaDebitoExportacion`, `GuiaDespacho`, `LiquidacionFactura`): heredan de `AbstractDocument`.
3. ✓ `SobreEnvio`: representa el XML `EnvioDTE` o `EnvioBOLETA` con métodos para firmar y validar.
4. ✓ `ImpuestoAdicionalRetencion`: soporte para impuestos adicionales y retenciones (excepto combustibles).
5. ✓ `ParserWorker`: parseo de datos de entrada en formato JSON, XML, YAML y formulario HTML.
6. ✓ `NormalizerWorker`: normalización de datos por tipo de documento, con estrategias específicas para cada uno y traits de normalización (detalle, descuentos/recargos, IVA, exportación, transporte, boletas, impuestos adicionales).
7. ✓ `BuilderWorker`: construcción del XML del DTE (timbre, firma, validación de esquema), con estrategia por tipo de documento.
8. ✓ `SanitizerWorker`: sanitización de los datos del DTE por tipo de documento.
9. ✓ `ValidatorWorker`: validación de datos, esquema XSD y firma electrónica del DTE por tipo de documento.
10. ✓ `RendererWorker` con `EstandarRendererStrategy`: generación de PDF en formato estándar (hoja carta).
11. ✓ `LoaderWorker`: carga de un DTE desde XML.
12. ✓ `DispatcherWorker`: despacho de documentos al siguiente paso del proceso.
13. ✓ `BatchProcessorWorker`: procesamiento en lote de múltiples documentos.
14. ✓ `DocumentBagManagerWorker`: gestión del `DocumentBag` (contenedor de datos de un DTE en proceso).

### Intercambio de documentos (`billing.exchange`)

1. ✓ `SenderWorker`: envío de documentos con los siguientes handlers y estrategias:
   - ✓ `EmailSenderHandler` + `SmtpSenderStrategy`: envío por correo electrónico vía SMTP.
   - ✓ `SiiSenderHandler` + `DteSenderStrategy`: envío de DTE al SII.
   - ✓ `SiiSenderHandler` + `BoletaSenderStrategy`: envío de boletas al SII.
2. ✓ `ReceiverWorker`: recepción de documentos con:
   - ✓ `EmailReceiverHandler` + `ImapReceiverStrategy`: recepción de documentos desde correo electrónico vía IMAP.
3. ✓ `DocumentResponseWorker`: generación y validación de XML de respuesta al intercambio de DTE:
   - ✓ `buildEnvioRecibos()`: genera el XML `EnvioRecibos` con recibos de mercaderías (acción ERM). Cada `Recibo` se firma individualmente con ID `LibreDTE_T{tipo}F{folio}` y el `SetRecibos` se firma con ID `LibreDTE_SetDteRecibidos`.
   - ✓ `buildRespuestaEnvio()`: genera el XML `RespuestaDTE` con `RecepcionEnvio` (acuse del sobre) o `ResultadoDTE` (resultado comercial por DTE). Se firma con ID `LibreDTE_ResultadoEnvio`.
   - ✓ `validateSchema()`: valida el esquema XSD del documento, retorna `XmlDocumentInterface`.
   - ✓ `validateSignature()`: valida todas las firmas electrónicas, retorna `array&lt;SignatureValidationResultInterface&gt;`.

### Libros tributarios (`billing.book`)

1. ✓ `TipoLibro`, `TipoOperacion`: enumeraciones de tipos de libro y operación.
2. ✓ `LibroComprasVentas`, `LibroGuias`, `LibroBoletas`, `ResumenVentasDiarias`: entidades que heredan de `AbstractBook`.
3. ✓ `LoaderWorker` con estrategias `ArrayLoaderStrategy` por tipo de libro.
4. ✓ `BuilderWorker` con estrategias `BuilderStrategy` por tipo de libro.
5. ✓ `ValidatorWorker`: validación de esquema XSD (`validateSchema()`) y firma electrónica (`validateSignature()`).
6. ☐ `RendererWorker`: generación del PDF de los libros.
7. ✓ `BookBag`: contenedor de datos del libro en proceso.

### Cesión electrónica / Factoring (`billing.ownership_transfer`)

1. ✓ `AbstractOwnershipTransferDocument`: clase base para las entidades del AEC, con `getXml()`, `getId()`, `getSchema()` y `getSignatureNamespace()` (retorna `null` para usar namespace xmldsig estándar).
2. ✓ Entidades `DteCedido`, `Cesion`, `Aec`: heredan de `AbstractOwnershipTransferDocument`. Cada una corresponde a una capa de firma del AEC.
3. ✓ `AecBag`: contenedor de datos que acepta `DocumentInterface` (primera cesión) o `Aec` existente (re-cesión). El `seq` es auto-calculado si se omite.
4. ✓ `AecWorker`: generación y validación del Archivo Electrónico de Cesión (AEC):
   - ✓ `build()`: construye el AEC completo con tres capas de firma. Soporta primera cesión (desde un `DocumentInterface`) y re-cesión (desde un `Aec` existente, añadiendo una nueva `Cesion` al mismo `DTECedido`). El SII permite hasta 40 cesiones sobre el mismo DTE.
   - ✓ `validateSchema()`: valida el esquema XSD del AEC, retorna `XmlDocumentInterface`.
   - ✓ `validateSignature()`: valida todas las firmas del AEC (DTECedido, Cesion(es) y AEC), retorna `array&lt;SignatureValidationResultInterface&gt;`.

### Integración con SII (`billing.integration`)

1. ✓ `SiiDteWorker`: cliente para los servicios web del SII con las siguientes operaciones:
   - ✓ `authenticate()`: obtención del token de sesión.
   - ✓ `sendXmlDocument()`: envío de un XML al SII, retorna Track ID.
   - ✓ `checkXmlDocumentSentStatus()`: consulta del estado del envío sin detalles de errores.
   - ✓ `requestXmlDocumentSentStatusByEmail()`: solicita al SII el correo con estado del envío y detalles de errores.
   - ✓ `validateDocument()`: verifica que un DTE es legalmente válido (folio, total, etc.).
   - ✓ `validateDocumentSignature()`: verificación avanzada de la firma del DTE en el SII.
   - ✓ `consumeWebservice()`: consumo genérico de un servicio SOAP del SII.
2. ✓ `SiiRcvWorker`: cliente para el Registro de Compra y Venta (RCV) del SII con las siguientes operaciones:
   - ✓ `submitDocumentAcceptance()`: ingresa aceptación o reclamo de un DTE (acciones: ERM, ACD, RCD, RFP, RFT).
   - ✓ `listDocumentEvents()`: lista el historial de eventos de un DTE.
   - ✓ `checkDocumentAssignability()`: consulta si un DTE puede ser cedido (factoring/AEC).
   - ✓ `getDocumentSiiReceptionDate()`: consulta la fecha en que el SII recibió un DTE.
3. ✓ `SiiRtcWorker`: cliente para el Registro de Transferencias de Créditos (RTC) del SII:
   - ✓ `sendAec()`: envía un AEC al RTC. Recibe `SiiRequestInterface`, `XmlDocumentInterface` (el AEC), RUT del cedente y email de contacto. Retorna Track ID. Usa endpoint `cgi_rtc/RTC/RTCAnotEnvio.cgi` (distinto al de DTE).




---

## Contribuir

Cómo contribuir a LibreDTE

# Contribuir a LibreDTE

&gt; ![Avatar Esteban Delaf](https://gravatar.com/avatar/593daa4c87476e28d7716c451a707366?size=100)
&gt;
&gt; Si deseas contribuir a LibreDTE, te lo agradezco. Después de más de 10 años aportando al software libre en Chile, a veces se hace difícil tener todo el tiempo que quisiera para realizar mejoras a LibreDTE. Por lo que cualquier corrección de error, mejora o nueva funcionalidad que tengas en mente me comprometo a revisarla.
&gt;
&gt; [Esteban Delaf](https://esteban.delaf.cl), Autor de LibreDTE.

## Trabaja con una copia del repositorio

Si deseas contribuir con el proyecto, especialmente resolviendo alguna de las [incidencias abiertas](https://github.com/libredte/libredte-lib-core/issues), debes:

1. Hacer una copia mediante una bifurcación del [repositorio en GitHub](https://github.com/libredte/libredte-lib-core) y luego clonar dicho repositorio.

```shell
git clone https://github.com/TU_USUARIO/libredte-lib-core
cd libredte-lib-core
```

2. Crear una rama para los cambios.

```shell
git checkout -b nombre-branch-que-blabla
```

3. Programar tu código siguiendo los lineamientos descritos más abajo.

```php
declare(strict_types=1);

// Seguir el estándar PSR12 o, idealmente, PER Coding Style 3.0.
// Seguir los principios KISS, SRP, DRY, YAGNI y TDD.
// Ejecutar las validaciones y pruebas.
```

4. Guardar los cambios en tu repositorio local.

```shell
git commit -m &#039;Se agrega...&#039;
```

5. Subir los cambios a tu repositorio en Github.

```shell
git push origin nombre-branch-que-blabla
```

6. Crear una [solicitud en el repositorio de LibreDTE](https://github.com/LibreDTE/libredte-lib-core/pulls) para unir tu rama con la oficial de LibreDTE.

## Lineamientos de código

El código debe seguir los siguientes lineamientos:

1. Respetar al menos el estándar [PSR12](https://www.php-fig.org/psr/psr-12/). Idealmente seguir [PER Coding Style 3.0](https://www.php-fig.org/per/coding-style/).

2. Seguir los patrones y principios:

   - **KISS**: Mantén el código simple y directo. Evita complejidades innecesarias.
   - **SRP**: Cada clase y método debe tener una única responsabilidad.
   - **DRY**: Evita la duplicación de código. Si encuentras el mismo código en varios lugares, refactorízalo para que se utilice de manera centralizada.
   - **YAGNI**: No implementes funcionalidades que no sean necesarias en el presente. El código debe ser lo más minimalista posible, construyendo solo lo que realmente se necesita.
   - **TDD**: Escribe las pruebas antes del código. Esto ayuda a garantizar que el código haga lo que se supone que debe hacer.

3. Tener el 100% de cobertura en las pruebas.

4. Escribir la documentación correspondiente en el **código** utilizando PHPDoc, y que será validada por *phpstan* con al menos el nivel 5.

## Validación del código

Una vez tengas tu código debes ejecutar los siguientes comandos para validarlo:

```shell
# Revisión del estilo de código según estándar definido para la biblioteca.
php-cs-fixer fix -v --dry-run --diff --config=php-cs-fixer.php .

# Buscar errores potenciales en tu código sin ejecutar tests.
phpstan analyse --configuration=phpstan.neon --memory-limit=1G

# Pruebas unitarias, funcionales y de integración de toda la biblioteca.
XDEBUG_MODE=coverage vendor/bin/phpunit --configuration=phpunit.xml
```

&gt; [!IMPORTANT] Importante
&gt;
&gt; Si tu código no pasa las validaciones anteriores no será aceptado para ser unido al repositorio oficial.

## Organización de pruebas

Las pruebas se organizan en 3 tipos:

1. **Unitarias**: deben probar solo una clase. Estas pruebas no deben realizar conexiones al SII.

2. **Funcionales**: prueban una funcionalidad con múltiples clases. Estas pruebas no deben realizar conexiones al SII.

3. **Integración**: prueban una funcionalidad que requiere realizar conexión al SII.




---

## WSDL certificación

Nota sobre los WSDL de certificación

# Archivos WSDL del ambiente de certificación

Algunos WSDL del ambiente de certificación no funcionan tal cual los provee SII. Lo anterior ya que apuntan a un servidor llamado `nogal.sii.cl` el cual no es accesible desde Internet. Quizás es un servidor local del SII para desarrollo.

Por lo que se han modificado los WSDL para el ambiente de certificación del SII y usar el servidor `maullin.sii.cl` que es el correcto.

Estos WSDL se usarán automáticamente al solicitar el WSDL del ambiente de certificación a través de LibreDTE. Los WSDL para el ambiente de producción son directamente los proporcionados por SII.

## Referencias

- &lt;http://stackoverflow.com/a/28464354/3333009&gt;




---

## Legacy OpenSSL

Nota sobre el uso de OpenSSL 3

# Legacy OpenSSL

A partir de OpenSSL 3, ciertos algoritmos que anteriormente eran estándar han sido considerados inseguros o &quot;no compatibles&quot;, entre ellos la encriptación de certificados PKCS#12 con `40BitRC2` que es utilizada por los certificados digitales que se utilizan con el SII.

Para que se puedan utilizar los certificados digitales, se debe editar la configuración de OpenSSL en `/etc/ssl/openssl.cnf` para activar los proveedores *legacy*.

```ini
[default_conf]
openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1
```

## Revisar compatibilidad con OpenSSL 3

Ejecutar:

```shell
openssl pkcs12 -in certificadoDigital.pfx -info -nokeys -nocerts
```

**Nota**: la extensión puede ser `.pfx` o `.p12`.

Si en la respuesta está presente `PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC` indica que se está utilizando `40BitRC2` en el certificado digital para encriptarlo, lo cual es obsoleto e inseguro.

## Referencias

- &lt;https://wiki.openssl.org/index.php/OpenSSL_3.0#Providers&gt;
- &lt;https://stackoverflow.com/a/74416513&gt;
- &lt;https://stackoverflow.com/a/72600724&gt;




---

## PHPDoc

Documentación del código fuente







---
Última actualización el 08/10/2026

