Los XML de esta guía son los que el CI del SDK compara en cada cambio.
Facturas (01), boletas (03), notas de crédito (07) y notas de débito (08), con el SDK en PHP, JavaScript con WebAssembly y línea de comandos. Cada ejemplo es un caso de prueba del repositorio, leído a un commit fijo.
Estado de esta versión
- Fase 1 · comprobantes
- Factura (01), boleta (03), nota de crédito (07) y nota de débito (08). UBL 2.1, solo IGV.
- Fase 2 · resumen y baja
- Resumen diario (RC) y comunicación de baja (RA): contrato y vectores. Todavía no se construyen.
- Aceptación en la SUNAT
- Pendiente en la beta. Que el CI pruebe un XML no quiere decir que la SUNAT lo acepte. Lo que sí prueba el CI está en la sección siguiente.
- Paquetes
- PHP con Composer y npm, próximamente. Las instrucciones de instalación ya están escritas como serán.
- Fuente
- Repositorio Kembec/facturacion-electronica-sunat-sdk, en
59f651bde la rama principal. CI de ese commit: success.
Un ejemplo, de principio a fin
El caso Factura al contado con IGV entra como JSON, sale como XML sin firmar y termina con una firma. Los tres pasos son fragmentos reales del archivo que el repositorio prueba.
Entrada en JSON
{ "kind": "invoice", "ubl_version": "2.1", "operation_type": "0101", "document_type": "01", "series": "F001", "number": "1", "issue_date": "2026-10-15T10:30:00-05:00", "currency": "PEN", "payment_terms": { "type": "Contado" },XML sin firmar
<?xml version="1.0" encoding="utf-8"?><Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specificati…Firma
- DigestValue
+te61a2ub5MlTFf8tKTPNGWE…- SignatureValue
b+6tExP4TNECvr8XnYDwQVeex6cOAXbL…
Ver el caso completo, con el XML firmado y los enlaces al repositorio
Qué comprueba el CI en cada cambio
- test: las pruebas de Rust del workspace (
cargo test --workspace --locked), que leen los fixtures de comprobantes. - wasm: firma los 12 fixtures con el binding WebAssembly y compara
DigestValueySignatureValuecon los vectores. - php: PHPUnit contra el binario real, que compara el XML en C14N inclusiva con los vectores.
- No comprueba: que la SUNAT acepte el comprobante. Eso es la aceptación en la beta, y está pendiente.