[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80265":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":14,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":45,"readmeContent":46,"aiSummary":47,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":48,"discoverSource":49},80265,"open-api-facturacion-sri","AngeloBarzolaVillamar\u002Fopen-api-facturacion-sri","AngeloBarzolaVillamar","API REST open source NestJS para facturacion electronica Ecuador SRI. Facturas, NC, ND, Retenciones, Guias de Remision. Firma XAdES-BES, Multi-tenant, BullMQ, Docker.","https:\u002F\u002Fdeepwiki.com\u002FAngeloBarzolaVillamar\u002Fopen-api-facturacion-sri",null,"TypeScript",96,47,7,0,2,5,6,52.24,"MIT License",false,"main",true,[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"bullmq","comprobantes-electronicos","docker","ecuador","einvoicing","electronic-invoice","facturacion","facturacion-electronica","multitenant","nestjs","open-source","postgresql","redis","rest-api","sri","sri-ecuador","swagger","typescript","xades-bes","xml-digital-signature","2026-06-12 04:01:27","# API Facturación Electrónica SRI — Ecuador 🇪🇨\n\n> **API REST completa para emitir, firmar y gestionar comprobantes electrónicos ante el SRI Ecuador.**  \n> Facturas, Notas de Crédito\u002FDébito, Retenciones y Guías de Remisión — en una sola integración.\n\n[![NestJS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNestJS-11-E0234E?logo=nestjs&logoColor=white)](https:\u002F\u002Fnestjs.com\u002F)\n[![Node](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-22-339933?logo=node.js&logoColor=white)](https:\u002F\u002Fnodejs.org\u002F)\n[![TypeScript](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.7-3178C6?logo=typescript&logoColor=white)](https:\u002F\u002Fwww.typescriptlang.org\u002F)\n[![PostgreSQL](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPostgreSQL-14+-4169E1?logo=postgresql&logoColor=white)](https:\u002F\u002Fwww.postgresql.org\u002F)\n[![Redis](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRedis-7-DC382D?logo=redis&logoColor=white)](https:\u002F\u002Fredis.io\u002F)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-Ready-2496ED?logo=docker&logoColor=white)](https:\u002F\u002Fhub.docker.com\u002F)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-22c55e)](.\u002FLICENSE)\n[![Swagger](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocs-Swagger-85EA2D?logo=swagger&logoColor=black)](http:\u002F\u002Flocalhost:3001\u002Fapi)\n\n---\n\n## ¿Qué hace esta API?\n\nIntegra 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:\n\n```\nTu sistema  →  POST \u002Fsri\u002Ffactura\u002Femitir  →  Genera XML  →  Firma XAdES-BES\n            →  Envía al SRI (SOAP)       →  Obtiene autorización\n            →  Genera RIDE (PDF+QR)      →  Notifica via Webhook  →  Guarda en DB\n```\n\nSin librerías adicionales. Sin entender SOAP. Sin XML a mano. **Solo JSON.**\n\n---\n\n## 📋 Tabla de Contenidos\n\n- [Por qué esta API](#-por-qué-esta-api)\n- [Funcionalidades](#-funcionalidades)\n- [Inicio Rápido](#-inicio-rápido)\n- [Ejemplo Real](#-ejemplo-real)\n- [Arquitectura](#-arquitectura)\n- [API Endpoints](#-api-endpoints)\n- [Variables de Entorno](#%EF%B8%8F-variables-de-entorno)\n- [Docker](#-docker)\n- [Autenticación y Roles](#-autenticación-y-roles)\n- [Estructura del Proyecto](#-estructura-del-proyecto)\n- [Scripts Disponibles](#%EF%B8%8F-scripts-disponibles)\n- [Changelog](#-changelog)\n- [Contribuciones](#-contribuciones)\n- [Licencia](#-licencia)\n- [Contacto](#-contacto)\n\n---\n\n## 🎯 Por qué esta API\n\nLa 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:\n\n| Característica | Esta API | Otras soluciones |\n|---|---|---|\n| **Lenguaje** | TypeScript \u002F NestJS | PHP, Java, Python |\n| **Tipo** | API REST completa y desplegable | Librería que debes integrar |\n| **Multi-tenant** | ✅ Múltiples empresas en una instancia | ❌ |\n| **Autenticación JWT** | ✅ Con roles y refresh tokens | ❌ |\n| **Cola asíncrona** | ✅ BullMQ + Redis | ❌ |\n| **Webhooks** | ✅ Notificaciones automáticas | ❌ |\n| **RIDE (PDF)** | ✅ Plantillas Word\u002FExcel + QR | ❌ |\n| **Firma XAdES-BES** | ✅ Integrada | Manual \u002F externa |\n| **Docker** | ✅ Producción lista | Raramente |\n| **Swagger UI** | ✅ Incluido | ❌ |\n\n---\n\n## ✨ Funcionalidades\n\n### Comprobantes Electrónicos SRI\n- 🧾 **Factura Electrónica** — tipo `01`\n- 📋 **Nota de Crédito** — tipo `04`\n- 📋 **Nota de Débito** — tipo `05`\n- 🚚 **Guía de Remisión** — tipo `06`\n- 🏦 **Comprobante de Retención** — tipo `07`\n\n### Firma y Seguridad\n- 🔐 **Firma XAdES-BES** con certificado P12 — estándar oficial del SRI\n- 🔑 **Autenticación JWT** con roles (`SUPERADMIN`, `ADMIN`, `USER`)\n- 🔄 **Rotación de Refresh Tokens** — sesiones seguras\n- 🛡️ **Cifrado AES-256** para datos sensibles (passwords de certificados, tokens)\n\n### Integraciones y Automatización\n- ⚡ **Webhooks** — notifica tu sistema automáticamente cuando el SRI autoriza o rechaza\n- 📤 **Cola BullMQ + Redis** — emisión asíncrona con reintentos automáticos\n- 🌐 **Ambientes SRI** — pruebas (`celcer.sri.gob.ec`) y producción (`cel.sri.gob.ec`) configurables por variable de entorno\n\n### Generación de Documentos\n- 📄 **RIDE en PDF** — desde plantillas Word\u002FExcel con Carbone.io\n- ✍️ **Firma digital de PDFs** — con `@signpdf` y certificado P12\n- 📷 **Código QR** embebido automáticamente en el RIDE\n\n### Multi-Tenant\n- 🏢 **Múltiples empresas** (tenants) en una sola instancia de API\n- 🏬 **Sucursales y Puntos de Emisión** por empresa\n- 🔢 **Secuenciales automáticos** por punto de emisión y tipo de comprobante\n\n### Observabilidad\n- 📊 **Health Check** en `\u002Fstatus` — PostgreSQL, Redis y filesystem\n- 📝 **Auditoría** — log inmutable de todas las acciones sensibles\n- 🔍 **Swagger UI** interactivo en `\u002Fapi` con autorización JWT persistida\n\n---\n\n## 🚀 Inicio Rápido\n\n### Requisitos\n\n| Herramienta | Versión mínima |\n|---|---|\n| Node.js | 22+ |\n| npm | 10+ |\n| PostgreSQL | 14+ |\n| Redis | 7+ |\n| Docker *(opcional)* | 24+ |\n\n### Instalación\n\n```bash\n# 1. Clonar el repositorio\ngit clone https:\u002F\u002Fgithub.com\u002FAngeloBarzolaVillamar\u002Fopen-api-facturacion-sri.git\ncd open-api-facturacion-sri\n\n# 2. Instalar dependencias\nnpm install\n\n# 3. Configurar variables de entorno\ncp .env.example .env.development\n# Edita .env.development con tu configuración (DB, Redis, JWT, etc.)\n\n# 4. Inicializar la base de datos\npsql -U postgres -d tu_db -f database\u002Finit.sql\n\n# 5. Iniciar en modo desarrollo\nnpm run start:dev\n```\n\nLa API estará disponible en: `http:\u002F\u002Flocalhost:3001`  \nDocumentación Swagger interactiva en: `http:\u002F\u002Flocalhost:3001\u002Fapi`\n\n### Con Docker (recomendado para desarrollo)\n\n```bash\ncp .env.example .env.docker\n# Edita .env.docker con tu configuración\n\ndocker compose up -d --build\n```\n\n---\n\n## ⚡ Ejemplo Real\n\n### 1. Autenticarse\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fauth\u002Flogin \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"email\": \"superadmin@openapi-sri.com\", \"password\": \"Admin123!\"}'\n```\n\n```json\n{\n  \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  \"refreshToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n```\n\n### 2. Emitir una Factura Electrónica\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fsri\u002Ffactura\u002Femitir \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer \u003CTU_ACCESS_TOKEN>\" \\\n  -d '{\n    \"fechaEmision\": \"05\u002F05\u002F2026\",\n    \"emisor\": {\n      \"ruc\": \"0924383631001\",\n      \"razonSocial\": \"MI EMPRESA S.A.\",\n      \"nombreComercial\": \"MI EMPRESA\",\n      \"dirMatriz\": \"Guayaquil, Av. Principal 123\",\n      \"dirEstablecimiento\": \"Local 1, Guayaquil\",\n      \"establecimiento\": \"001\",\n      \"puntoEmision\": \"001\",\n      \"obligadoContabilidad\": \"SI\",\n      \"certificadoP12\": \"certificado.p12\",\n      \"claveP12\": \"mi-clave-p12\"\n    },\n    \"comprador\": {\n      \"tipoIdentificacion\": \"05\",\n      \"identificacion\": \"0926789017\",\n      \"razonSocial\": \"JUAN PEREZ\"\n    },\n    \"detalles\": [\n      {\n        \"codigoPrincipal\": \"PROD-001\",\n        \"descripcion\": \"Servicio de desarrollo de software\",\n        \"cantidad\": 1,\n        \"precioUnitario\": 1000.00,\n        \"descuento\": 0,\n        \"impuestos\": [\n          {\n            \"codigo\": \"2\",\n            \"codigoPorcentaje\": \"4\",\n            \"tarifa\": 15,\n            \"baseImponible\": 1000.00,\n            \"valor\": 150.00\n          }\n        ]\n      }\n    ],\n    \"pagos\": [{ \"formaPago\": \"01\", \"total\": 1150.00 }]\n  }'\n```\n\n### Respuesta exitosa del SRI\n\n```json\n{\n  \"success\": true,\n  \"claveAcceso\": \"0505202601092438363100110010010000000011234567891\",\n  \"estado\": \"AUTORIZADO\",\n  \"numeroAutorizacion\": \"0505202601092438363100110010010000000011234567891\",\n  \"fechaAutorizacion\": \"2026-05-05T14:30:00.000Z\",\n  \"mensajes\": []\n}\n```\n\n---\n\n## 🏛️ Arquitectura\n\n```\n                         ┌─────────────────────────────┐\n                         │       Tu Sistema (ERP\u002FPOS)   │\n                         └────────────┬────────────────┘\n                                      │ REST JSON\n                         ┌────────────▼────────────────┐\n                         │   API Facturación SRI        │\n                         │   NestJS + TypeScript        │\n                         │   ┌─────────────────────┐   │\n                         │   │  Módulos NestJS      │   │\n                         │   │  - \u002Fauth  (JWT)      │   │\n                         │   │  - \u002Fsri   (SRI)      │   │\n                         │   │  - \u002Fwebhooks         │   │\n                         │   │  - \u002Fpdf   (Carbone)  │   │\n                         │   │  - \u002Fsignature (P12)  │   │\n                         │   └──────────┬──────────┘   │\n                         └─────────────┼───────────────┘\n              ┌──────────┬─────────────┼──────────┬──────────┐\n              ▼          ▼             ▼          ▼          ▼\n        PostgreSQL     Redis        SRI SOAP   Carbone     Webhook\n         (datos)      (cola\u002F       (celcer\u002F    (PDFs)    (tu URL)\n                       caché)      cel.sri)\n```\n\n### Flujo de emisión asíncrona\n\n```\nPOST \u002Fsri\u002Ffactura\u002Femitir\n        │\n        ▼\n  Validación DTO ──▶ Firma XAdES-BES ──▶ Envío SOAP SRI\n        │                                      │\n        ▼                                      ▼\n  Guarda en DB                        ¿Autorizado?\n        │                              │         │\n        ▼                             SÍ         NO\n  Encola BullMQ                        │         │\n        │                         Genera RIDE  Reintento\n        ▼                         (PDF + QR)   automático\n  Procesador Redis                     │\n        │                         Dispara Webhook\n        ▼                         a tu sistema\n  Webhook → Tu URL\n```\n\n---\n\n## 🔌 API Endpoints\n\n*Documentación completa e interactiva en `\u002Fapi` (Swagger UI).*\n\n### Autenticación\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `POST` | `\u002Fauth\u002Flogin` | Iniciar sesión — retorna `accessToken` + `refreshToken` |\n| `POST` | `\u002Fauth\u002Frefresh` | Renovar tokens con rotación automática |\n| `POST` | `\u002Fauth\u002Fregister` | Crear usuario *(requiere rol SUPERADMIN)* |\n| `PATCH` | `\u002Fauth\u002Fchange-password` | Cambiar contraseña |\n\n### Comprobantes Electrónicos SRI\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `POST` | `\u002Fsri\u002Ffactura\u002Femitir` | Emitir Factura Electrónica |\n| `POST` | `\u002Fsri\u002Fnota-credito\u002Femitir` | Emitir Nota de Crédito |\n| `POST` | `\u002Fsri\u002Fnota-debito\u002Femitir` | Emitir Nota de Débito |\n| `POST` | `\u002Fsri\u002Fretencion\u002Femitir` | Emitir Comprobante de Retención |\n| `POST` | `\u002Fsri\u002Fguia-remision\u002Femitir` | Emitir Guía de Remisión |\n| `GET` | `\u002Fsri\u002Fcomprobantes` | Listar comprobantes *(paginado, filtrable)* |\n| `GET` | `\u002Fsri\u002Fcomprobantes\u002F:claveAcceso` | Detalle de un comprobante |\n| `GET` | `\u002Fsri\u002Fcomprobantes\u002F:claveAcceso\u002Fxml` | Descargar XML autorizado |\n| `GET` | `\u002Fsri\u002Fverificar\u002F:claveAcceso` | Consultar estado en SRI en tiempo real |\n| `POST` | `\u002Fsri\u002Fsincronizar` | Sincronizar comprobantes pendientes |\n| `POST` | `\u002Fsri\u002Fcomprobantes\u002F:clave\u002Freintentar` | Reintentar comprobante fallido |\n| `PATCH` | `\u002Fsri\u002Fcomprobantes\u002F:clave\u002Fanular` | Anular comprobante localmente |\n\n### Catálogos SRI\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `GET` | `\u002Fcatalogos\u002Fimpuestos` | Tarifas IVA vigentes (0%, 5%, 15%) |\n| `GET` | `\u002Fcatalogos\u002Fretenciones` | Códigos de retención Renta e IVA |\n| `GET` | `\u002Fcatalogos\u002Fformas-pago` | Formas de pago SRI |\n| `GET` | `\u002Fcatalogos\u002Ftipos-identificacion` | Tipos de identificación |\n| `GET` | `\u002Fcatalogos\u002Fdocumentos-sustento` | Documentos sustento |\n| `GET` | `\u002Fcatalogos\u002Fmotivos-traslado` | Motivos traslado (Guía de Remisión) |\n\n### Webhooks\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `GET` | `\u002Fwebhooks` | Listar webhooks del Tenant |\n| `POST` | `\u002Fwebhooks` | Registrar URL de notificación |\n| `GET` | `\u002Fwebhooks\u002Flogs` | Historial de notificaciones *(paginado)* |\n\n### Generación de RIDE (PDF)\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `POST` | `\u002Fgenerate-pdf\u002Fdownload\u002F:templateId` | Generar y descargar PDF |\n| `POST` | `\u002Fgenerate-pdf\u002Fsave\u002F:templateId` | Generar y guardar en servidor |\n| `POST` | `\u002Fgenerate-pdf\u002Fwith-images\u002Fdownload\u002F:templateId` | PDF con imágenes |\n| `GET` | `\u002Fgenerate-pdf\u002Flist\u002F:type` | Listar PDFs generados |\n\n### Firma Digital\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `POST` | `\u002Fsignature\u002Fsign-pdf\u002F:fileName` | Firmar PDF existente con P12 |\n| `POST` | `\u002Fsignature\u002Fgenerate-sign-pdf\u002F:templateId` | Generar y firmar en un paso |\n| `POST` | `\u002Fsignature\u002Fgenerate-sign-pdf\u002Fsave\u002F:templateId` | Generar, firmar y guardar |\n\n### Certificados P12\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `GET` | `\u002Fcertificates\u002Flist-certs` | Listar certificados cargados |\n| `POST` | `\u002Fcertificates\u002Fupload-cert` | Subir certificado P12 |\n| `DELETE` | `\u002Fcertificates\u002F:fileName` | Eliminar certificado |\n| `POST` | `\u002Fcertificates\u002Finfo\u002F:fileName` | Ver datos del certificado |\n| `POST` | `\u002Fcertificates\u002Fvalidate\u002F:fileName` | Verificar expiración |\n\n### Templates y Gestión\n\n| Método | Endpoint | Descripción |\n| ------ | -------- | ----------- |\n| `GET` | `\u002Ftemplates` | Listar plantillas RIDE |\n| `POST` | `\u002Ftemplates\u002Fupload` | Subir plantilla (.docx \u002F .xlsx) |\n| `DELETE` | `\u002Ftemplates\u002F:fileName` | Eliminar plantilla |\n| `GET` | `\u002Fimages\u002Flist` | Listar imágenes |\n| `POST` | `\u002Fimages\u002Fupload` | Subir imagen |\n| `GET` | `\u002Fstatus` | Health check del servidor |\n\n---\n\n## ⚙️ Variables de Entorno\n\nCopia `.env.example` como punto de partida. Las variables marcadas con ✅ son obligatorias.\n\n### Servidor\n\n| Variable | Descripción | Ejemplo |\n| -------- | ----------- | ------- |\n| `PORT` ✅ | Puerto de la API | `3001` |\n| `PUBLIC_URL` ✅ | URL pública de la API | `https:\u002F\u002Fapi.tudominio.com` |\n| `NODE_ENV` | Entorno de ejecución | `production` |\n\n### Base de Datos (PostgreSQL)\n\n| Variable | Descripción | Ejemplo |\n| -------- | ----------- | ------- |\n| `DB_HOST` ✅ | Host de PostgreSQL | `localhost` |\n| `DB_PORT` ✅ | Puerto | `5432` |\n| `DB_NAME` ✅ | Nombre de la BD | `db_sri` |\n| `DB_USER` ✅ | Usuario | `postgres` |\n| `DB_PASSWORD` ✅ | Contraseña | `tu-password` |\n| `DB_POOL_MAX` | Conexiones máximas | `10` |\n\n### Redis (Cola y Caché)\n\n| Variable | Descripción | Default |\n| -------- | ----------- | ------- |\n| `REDIS_HOST` ✅ | Host de Redis | `localhost` |\n| `REDIS_PORT` | Puerto | `6379` |\n| `REDIS_PASSWORD` | Contraseña | *(vacío)* |\n| `CACHE_TTL_SECONDS` | TTL del caché | `300` |\n\n### Seguridad\n\n| Variable | Descripción | Ejemplo |\n| -------- | ----------- | ------- |\n| `JWT_SECRET` ✅ | Clave JWT (32+ chars) | `super-secret-32chars!!` |\n| `ENCRYPTION_KEY` ✅ | Clave AES-256 (32 chars) | `encryption-key-32chars!!` |\n| `ENCRYPTION_SALT` ✅ | Salt de cifrado | `salt-value` |\n\n### SRI Ecuador\n\n| Variable | Descripción | Valores |\n| -------- | ----------- | ------- |\n| `SRI_ENVIRONMENT` ✅ | Ambiente del SRI | `development` \u002F `production` |\n| `SRI_REQUEST_DELAY_MS` | Rate limit hacia SRI | `150` |\n| `SRI_MAX_RETRIES` | Reintentos por comprobante | `3` |\n\n### RIDE \u002F Carbone\n\n| Variable | Descripción | Ejemplo |\n| -------- | ----------- | ------- |\n| `CARBONE_API` ✅ | URL del servidor Carbone | `http:\u002F\u002Fcarbone-server:3000` |\n| `CARBONE_CONVERT_TO` | Formato de salida | `pdf` |\n\n---\n\n## 🐳 Docker\n\n### Desarrollo local\n\n```bash\n# Levantar API + Redis con hot-reload\ndocker compose up -d --build\n\n# Ver logs\ndocker compose logs -f\n\n# Detener\ndocker compose down\n```\n\n### Producción (servidor)\n\n```bash\n# En tu servidor, crea la estructura\nmkdir -p \u002Fopt\u002Fapi-facturacion-sri\ncd \u002Fopt\u002Fapi-facturacion-sri\n\n# Copia docker-compose.prod.yml y crea .env.docker\n# Luego descarga y levanta la imagen\ndocker compose -f docker-compose.prod.yml pull\ndocker compose -f docker-compose.prod.yml up -d\n```\n\nVer [DEPLOYMENT.md](.\u002FDEPLOYMENT.md) para la guía completa con Nginx y SSL.\n\n---\n\n## 👑 Autenticación y Roles\n\nEl sistema incluye seguridad JWT con tres niveles de acceso:\n\n| Rol | Permisos |\n|-----|----------|\n| `SUPERADMIN` | Acceso total. Crea tenants y usuarios. |\n| `ADMIN` | Gestiona su tenant: emisores, comprobantes, webhooks. |\n| `USER` | Emite comprobantes dentro de su tenant. |\n\n### Credenciales iniciales\n\nAl ejecutar `database\u002Finit.sql` se crea el superadmin:\n\n```\nEmail:     superadmin@openapi-sri.com\nPassword:  Admin123!\n```\n\n> ⚠️ **Cambia la contraseña inmediatamente** en producción usando `PATCH \u002Fauth\u002Fchange-password`.\n\n---\n\n## 📁 Estructura del Proyecto\n\n```\nopen-api-facturacion-sri\u002F\n├── src\u002F\n│   ├── common\u002F\n│   │   ├── cache\u002F            # Módulo Redis Cache\n│   │   ├── filters\u002F          # Filtros globales de excepciones\n│   │   ├── interceptors\u002F     # Interceptor de auditoría\n│   │   ├── queues\u002F           # Configuración BullMQ\n│   │   └── services\u002F         # Encryption, Audit\n│   ├── config\u002F\n│   │   └── configuration.ts  # Configuración centralizada tipada\n│   ├── database\u002F             # Pool PostgreSQL\n│   └── modules\u002F\n│       ├── auth\u002F             # JWT, guards, estrategias\n│       ├── certificate\u002F      # Gestión de certificados P12\n│       ├── document\u002F         # Generación multi-formato\n│       ├── emisores\u002F         # Empresas emisoras\n│       ├── image\u002F            # Gestión de imágenes\n│       ├── pdf\u002F              # Generación de PDFs (Carbone)\n│       ├── puntos-emision\u002F   # Sucursales y puntos de emisión\n│       ├── signature\u002F        # Firma digital de PDFs\n│       ├── sri\u002F              # ⭐ Módulo principal SRI\n│       │   ├── dto\u002F          # Validación de todos los comprobantes\n│       │   ├── services\u002F     # Clave de acceso, XML, SOAP, XAdES\n│       │   └── processors\u002F   # Procesador BullMQ\n│       ├── status\u002F           # Health checks\n│       ├── template\u002F         # Plantillas Carbone\n│       ├── tenants\u002F          # Multi-tenancy\n│       └── webhooks\u002F         # Sistema de notificaciones\n├── database\u002F\n│   └── init.sql              # Esquema PostgreSQL inicial\n├── Collection\u002F\n│   └── Api_Facturacion_Sri.json  # Colección Postman lista para importar\n├── docs\u002F                     # Documentación técnica por módulo\n├── Dockerfile                # Imagen multi-stage optimizada\n├── docker-compose.yml        # Desarrollo local\n├── docker-compose.prod.yml   # Despliegue en servidor\n├── DEPLOYMENT.md             # Guía de despliegue con Nginx\n├── CHANGELOG.md              # Historial de versiones y roadmap\n└── CONTRIBUTING.md           # Guía para contribuir\n```\n\n---\n\n## 🛠️ Scripts Disponibles\n\n| Comando | Descripción |\n| ------- | ----------- |\n| `npm run start:dev` | Desarrollo con hot-reload |\n| `npm run start:prod` | Producción |\n| `npm run build` | Compilar TypeScript |\n| `npm run lint` | ESLint con auto-fix |\n| `npm run format` | Prettier |\n| `npm run test` | Tests unitarios |\n| `npm run test:cov` | Tests con cobertura |\n| `npm run test:e2e` | Tests end-to-end |\n| `npm run docker:up` | Levantar con docker-compose |\n| `npm run docker:dev` | Docker en modo desarrollo |\n| `npm run docker:push` | Build y publicar a Docker Hub |\n| `npm run docker:logs` | Ver logs del contenedor |\n\n---\n\n## 📋 Changelog\n\nVer [CHANGELOG.md](.\u002FCHANGELOG.md) para el historial completo y el **roadmap de próximas versiones** (Dashboard Web, reportes, 2FA, facturación masiva, métricas Prometheus).\n\n---\n\n## 🤝 Contribuciones\n\nLas contribuciones son bienvenidas. Consulta la guía completa en [CONTRIBUTING.md](.\u002FCONTRIBUTING.md).\n\nEn resumen:\n\n1. Haz un **fork** del repositorio.\n2. Crea una rama descriptiva: `git checkout -b feature\u002Fliquidacion-compra`.\n3. Haz commit siguiendo [Conventional Commits](https:\u002F\u002Fwww.conventionalcommits.org\u002Fes\u002F): `git commit -m 'feat(sri): ...'`.\n4. Sube tu rama y abre un **Pull Request** \u002F **Merge Request**.\n\n---\n\n## 📄 Licencia\n\nLicencia **MIT** — Open Source. Libre para usar, modificar y distribuir.  \nVer [LICENSE](.\u002FLICENSE) para más detalles.\n\n---\n\n## 📬 Contacto\n\n- **Autor:** Angelo Michelle Barzola Villamar\n- **Correo:** [angelobarzola05@gmail.com](mailto:angelobarzola05@gmail.com)\n- **GitHub:** [AngeloBarzolaVillamar\u002Fopen-api-facturacion-sri](https:\u002F\u002Fgithub.com\u002FAngeloBarzolaVillamar\u002Fopen-api-facturacion-sri)\n- **GitLab:** [angelosecu789\u002Fapi-facturacion-electronica-sri](https:\u002F\u002Fgitlab.com\u002Fangelosecu789\u002Fapi-facturacion-electronica-sri)\n- **Minka Gob Ec:** [angelo_barzola\u002Fapi-facturacion-electronica-sri](https:\u002F\u002Fminka.gob.ec\u002Fangelo_barzola\u002Fapi-facturacion-electronica-sri)\n\n---\n\n\u003Cp align=\"center\">\n  Hecho con ❤️ en Ecuador 🇪🇨 — Si este proyecto te ayuda, dale una ⭐ en GitHub\n\u003C\u002Fp>\n","该项目提供了一套完整的REST API，用于在厄瓜多尔SRI系统中处理电子发票、信用\u002F借项通知单、扣缴和运输指南等电子凭证。它基于NestJS框架构建，支持XAdES-BES签名标准、多租户架构，并集成了BullMQ作为异步任务队列管理器。此外，项目还具备Docker容器化部署能力，确保了良好的可移植性和扩展性。适用于需要与SRI进行电子发票交互的企业级应用开发场景，如ERP、POS或电子商务平台，能够简化复杂的XML生成及SOAP通信过程，通过简单的JSON接口即可完成所有操作。","2026-06-11 04:00:06","CREATED_QUERY"]