You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
API REST completa para emitir, firmar y gestionar comprobantes electrónicos ante el SRI Ecuador.
Facturas, Notas de Crédito/Débito, Retenciones y Guías de Remisión — en una sola integración.
¿Qué hace esta API?
Integra tu sistema (ERP, POS, e-commerce, SaaS) con el Servicio de Rentas Internas (SRI) de Ecuador mediante un único endpoint REST. Ella se encarga de todo el flujo complejo por ti:
Tu sistema → POST /sri/factura/emitir → Genera XML → Firma XAdES-BES
→ Envía al SRI (SOAP) → Obtiene autorización
→ Genera RIDE (PDF+QR) → Notifica via Webhook → Guarda en DB
Sin librerías adicionales. Sin entender SOAP. Sin XML a mano. Solo JSON.
La mayoría de soluciones de facturación electrónica para Ecuador son librerías PHP o Java que requieren integración manual con los Web Services SOAP del SRI. Esta API resuelve eso diferente:
Característica
Esta API
Otras soluciones
Lenguaje
TypeScript / NestJS
PHP, Java, Python
Tipo
API REST completa y desplegable
Librería que debes integrar
Multi-tenant
✅ Múltiples empresas en una instancia
❌
Autenticación JWT
✅ Con roles y refresh tokens
❌
Cola asíncrona
✅ BullMQ + Redis
❌
Webhooks
✅ Notificaciones automáticas
❌
RIDE (PDF)
✅ Plantillas Word/Excel + QR
❌
Firma XAdES-BES
✅ Integrada
Manual / externa
Docker
✅ Producción lista
Raramente
Swagger UI
✅ Incluido
❌
✨ Funcionalidades
Comprobantes Electrónicos SRI
🧾 Factura Electrónica — tipo 01
📋 Nota de Crédito — tipo 04
📋 Nota de Débito — tipo 05
🚚 Guía de Remisión — tipo 06
🏦 Comprobante de Retención — tipo 07
Firma y Seguridad
🔐 Firma XAdES-BES con certificado P12 — estándar oficial del SRI
🔑 Autenticación JWT con roles (SUPERADMIN, ADMIN, USER)
🔄 Rotación de Refresh Tokens — sesiones seguras
🛡️ Cifrado AES-256 para datos sensibles (passwords de certificados, tokens)
Integraciones y Automatización
⚡ Webhooks — notifica tu sistema automáticamente cuando el SRI autoriza o rechaza
📤 Cola BullMQ + Redis — emisión asíncrona con reintentos automáticos
🌐 Ambientes SRI — pruebas (celcer.sri.gob.ec) y producción (cel.sri.gob.ec) configurables por variable de entorno
Generación de Documentos
📄 RIDE en PDF — desde plantillas Word/Excel con Carbone.io
✍️ Firma digital de PDFs — con @signpdf y certificado P12
📷 Código QR embebido automáticamente en el RIDE
Multi-Tenant
🏢 Múltiples empresas (tenants) en una sola instancia de API
🏬 Sucursales y Puntos de Emisión por empresa
🔢 Secuenciales automáticos por punto de emisión y tipo de comprobante
Observabilidad
📊 Health Check en /status — PostgreSQL, Redis y filesystem
📝 Auditoría — log inmutable de todas las acciones sensibles
🔍 Swagger UI interactivo en /api con autorización JWT persistida
🚀 Inicio Rápido
Requisitos
Herramienta
Versión mínima
Node.js
22+
npm
10+
PostgreSQL
14+
Redis
7+
Docker (opcional)
24+
Instalación
# 1. Clonar el repositorio
git clone https://github.com/AngeloBarzolaVillamar/open-api-facturacion-sri.git
cd open-api-facturacion-sri
# 2. Instalar dependencias
npm install
# 3. Configurar variables de entorno
cp .env.example .env.development
# Edita .env.development con tu configuración (DB, Redis, JWT, etc.)# 4. Inicializar la base de datos
psql -U postgres -d tu_db -f database/init.sql
# 5. Iniciar en modo desarrollo
npm run start:dev
La API estará disponible en: http://localhost:3001
Documentación Swagger interactiva en: http://localhost:3001/api
Con Docker (recomendado para desarrollo)
cp .env.example .env.docker
# Edita .env.docker con tu configuración
docker compose up -d --build
POST /sri/factura/emitir
│
▼
Validación DTO ──▶ Firma XAdES-BES ──▶ Envío SOAP SRI
│ │
▼ ▼
Guarda en DB ¿Autorizado?
│ │ │
▼ SÍ NO
Encola BullMQ │ │
│ Genera RIDE Reintento
▼ (PDF + QR) automático
Procesador Redis │
│ Dispara Webhook
▼ a tu sistema
Webhook → Tu URL
🔌 API Endpoints
Documentación completa e interactiva en /api (Swagger UI).
Copia .env.example como punto de partida. Las variables marcadas con ✅ son obligatorias.
Servidor
Variable
Descripción
Ejemplo
PORT ✅
Puerto de la API
3001
PUBLIC_URL ✅
URL pública de la API
https://api.tudominio.com
NODE_ENV
Entorno de ejecución
production
Base de Datos (PostgreSQL)
Variable
Descripción
Ejemplo
DB_HOST ✅
Host de PostgreSQL
localhost
DB_PORT ✅
Puerto
5432
DB_NAME ✅
Nombre de la BD
db_sri
DB_USER ✅
Usuario
postgres
DB_PASSWORD ✅
Contraseña
tu-password
DB_POOL_MAX
Conexiones máximas
10
Redis (Cola y Caché)
Variable
Descripción
Default
REDIS_HOST ✅
Host de Redis
localhost
REDIS_PORT
Puerto
6379
REDIS_PASSWORD
Contraseña
(vacío)
CACHE_TTL_SECONDS
TTL del caché
300
Seguridad
Variable
Descripción
Ejemplo
JWT_SECRET ✅
Clave JWT (32+ chars)
super-secret-32chars!!
ENCRYPTION_KEY ✅
Clave AES-256 (32 chars)
encryption-key-32chars!!
ENCRYPTION_SALT ✅
Salt de cifrado
salt-value
SRI Ecuador
Variable
Descripción
Valores
SRI_ENVIRONMENT ✅
Ambiente del SRI
development / production
SRI_REQUEST_DELAY_MS
Rate limit hacia SRI
150
SRI_MAX_RETRIES
Reintentos por comprobante
3
RIDE / Carbone
Variable
Descripción
Ejemplo
CARBONE_API ✅
URL del servidor Carbone
http://carbone-server:3000
CARBONE_CONVERT_TO
Formato de salida
pdf
🐳 Docker
Desarrollo local
# Levantar API + Redis con hot-reload
docker compose up -d --build
# Ver logs
docker compose logs -f
# Detener
docker compose down
Producción (servidor)
# En tu servidor, crea la estructura
mkdir -p /opt/api-facturacion-sri
cd /opt/api-facturacion-sri
# Copia docker-compose.prod.yml y crea .env.docker# Luego descarga y levanta la imagen
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d
Ver DEPLOYMENT.md para la guía completa con Nginx y SSL.
👑 Autenticación y Roles
El sistema incluye seguridad JWT con tres niveles de acceso:
Rol
Permisos
SUPERADMIN
Acceso total. Crea tenants y usuarios.
ADMIN
Gestiona su tenant: emisores, comprobantes, webhooks.
USER
Emite comprobantes dentro de su tenant.
Credenciales iniciales
Al ejecutar database/init.sql se crea el superadmin:
⚠️Cambia la contraseña inmediatamente en producción usando PATCH /auth/change-password.
📁 Estructura del Proyecto
open-api-facturacion-sri/
├── src/
│ ├── common/
│ │ ├── cache/ # Módulo Redis Cache
│ │ ├── filters/ # Filtros globales de excepciones
│ │ ├── interceptors/ # Interceptor de auditoría
│ │ ├── queues/ # Configuración BullMQ
│ │ └── services/ # Encryption, Audit
│ ├── config/
│ │ └── configuration.ts # Configuración centralizada tipada
│ ├── database/ # Pool PostgreSQL
│ └── modules/
│ ├── auth/ # JWT, guards, estrategias
│ ├── certificate/ # Gestión de certificados P12
│ ├── document/ # Generación multi-formato
│ ├── emisores/ # Empresas emisoras
│ ├── image/ # Gestión de imágenes
│ ├── pdf/ # Generación de PDFs (Carbone)
│ ├── puntos-emision/ # Sucursales y puntos de emisión
│ ├── signature/ # Firma digital de PDFs
│ ├── sri/ # ⭐ Módulo principal SRI
│ │ ├── dto/ # Validación de todos los comprobantes
│ │ ├── services/ # Clave de acceso, XML, SOAP, XAdES
│ │ └── processors/ # Procesador BullMQ
│ ├── status/ # Health checks
│ ├── template/ # Plantillas Carbone
│ ├── tenants/ # Multi-tenancy
│ └── webhooks/ # Sistema de notificaciones
├── database/
│ └── init.sql # Esquema PostgreSQL inicial
├── Collection/
│ └── Api_Facturacion_Sri.json # Colección Postman lista para importar
├── docs/ # Documentación técnica por módulo
├── Dockerfile # Imagen multi-stage optimizada
├── docker-compose.yml # Desarrollo local
├── docker-compose.prod.yml # Despliegue en servidor
├── DEPLOYMENT.md # Guía de despliegue con Nginx
├── CHANGELOG.md # Historial de versiones y roadmap
└── CONTRIBUTING.md # Guía para contribuir
🛠️ Scripts Disponibles
Comando
Descripción
npm run start:dev
Desarrollo con hot-reload
npm run start:prod
Producción
npm run build
Compilar TypeScript
npm run lint
ESLint con auto-fix
npm run format
Prettier
npm run test
Tests unitarios
npm run test:cov
Tests con cobertura
npm run test:e2e
Tests end-to-end
npm run docker:up
Levantar con docker-compose
npm run docker:dev
Docker en modo desarrollo
npm run docker:push
Build y publicar a Docker Hub
npm run docker:logs
Ver logs del contenedor
📋 Changelog
Ver CHANGELOG.md para el historial completo y el roadmap de próximas versiones (Dashboard Web, reportes, 2FA, facturación masiva, métricas Prometheus).
🤝 Contribuciones
Las contribuciones son bienvenidas. Consulta la guía completa en CONTRIBUTING.md.
En resumen:
Haz un fork del repositorio.
Crea una rama descriptiva: git checkout -b feature/liquidacion-compra.
Hecho con ❤️ en Ecuador 🇪🇨 — Si este proyecto te ayuda, dale una ⭐ en GitHub
About
API REST open source NestJS para facturacion electronica Ecuador SRI. Facturas, NC, ND, Retenciones, Guias de Remision. Firma XAdES-BES, Multi-tenant, BullMQ, Docker.