Un pipeline full-stack de automatización de CxP para eliminar el procesamiento manual de facturas en cumplimiento del CFDI (Comprobante Fiscal Digital por Internet), permitiendo extracción estructurada de datos de proveedores desde archivos multi-formato (XML, PDF, imágenes) y centralizando la gestión del ciclo de vida de facturas — reduciendo la latencia de procesamiento y el error humano para equipos de finanzas.
Arquitectura y Stack
Arquitectura multi-servicio contenedorizada orquestada vía Docker Compose.
React (TypeScript) + Nginx ↓API REST FastAPI ──→ CFDIExtractionService ↓PostgreSQL (ORM SQLAlchemy) ↓Docker Compose (dev y prod) + CI/CD GitHub Actions- Backend — FastAPI (Python 3.11) con manejo asíncrono de archivos vía
aiofiles - Base de datos — PostgreSQL (con respaldo SQLite para desarrollo) vía ORM SQLAlchemy 2.0
- Validación — Esquemas Pydantic v2 que validan la estructura fiscal completa del CFDI mexicano
- Frontend — SPA en React 19 + TypeScript servido a través de Nginx
- CI/CD — GitHub Actions (lint → test → escaneo de seguridad Trivy → build de Docker)
- Opcional — Capa de caché con Redis
Logros Técnicos Clave
Validación CFDI multicapa — Verifica presencia de RFC (emisor/receptor), campos fiscales obligatorios (uuid, folio, fecha_emision, total) y restricciones de tipo/tamaño de archivo, con valores de respaldo y respuestas HTTP de error estructuradas para evitar que registros corruptos lleguen a la base de datos.
Arquitectura limpia — Separación estricta entre Modelos (SQLAlchemy), Esquemas (Pydantic), Servicios (lógica de negocio) y rutas de API; inyección de dependencias vía el patrón Depends(get_db) de FastAPI; 32 pruebas con pytest (unitarias + integración, con soporte async vía pytest-asyncio).
Esquema CFDI validado con Pydantic — Modela la estructura completa del comprobante fiscal mexicano: EmisorSchema, ReceptorSchema, conceptos por línea ConceptoSchema con desglose de impuestos (traslados/retenciones) y sellos digitales — mapeado a una tabla auditable invoices con un ciclo de vida de cuatro estados (PENDING → PROCESSING → COMPLETED → FAILED).
Resiliencia de producción — Usuario Docker sin privilegios de root (appuser), health checks de contenedor (intervalo de 30s, 3 reintentos), aislamiento de entorno vía UV con gestión de secretos .env / .env.production.