Pipeline de Facturación
Flujo completo: Email → PDF → RAW → Business Logic → Output (Excel/Drive)
:::note F2.3 — Migrado al patrón Hexagonal (2026-05-28)
domains/facturacion/pipeline.py ahora usa IMAPConnector directo en vez del shim run_imap_ingest. El stage ingest delega a ingest_with_connector(self.imap_source, self.config, self.log). Único hook custom: extract_attachments=self._pdfs_to_attachments_meta (serializa PDFs con texto ya extraído); body_text_from/date_iso_from quedan en los defaults del connector. Los stages final() y publish() (GSheets) NO tocan IMAP y quedaron sin cambios. Ver Plan-Migracion-F2.2-F2.6 §F2.3 y ADR-Source-Connectors. Capability imap-connector sin delta (8 Reqs vigentes). Engram archive #1273, PR #48. Nota: 3 tests CLI de Notas de Crédito fallan pre-existentes (deuda de PR #42, no de F2.3).
:::
Overview
Sección titulada «Overview»┌──────────┐ ┌─────────┐ ┌──────────┐ ┌──────────────┐ ┌─────────────┐ ┌──────────┐│ IMAP │────►│ Email │────►│ PDF │────►│ RAW │────►│ Business │────►│ Output ││ Gmail │ │ │ │ Parser │ │ (parquet) │ │ Orchestr. │ │ (XLS/GS) │└──────────┘ └─────────┘ └──────────┘ └──────────────┘ └─────────────┘ └──────────┘1. Captura (IMAP Gmail)
Sección titulada «1. Captura (IMAP Gmail)»Descarga PDFs adjuntos filtrando por filename:Factura y filename:Nota de Credito. Módulo: imap_client.py.
2. Almacenamiento RAW
Sección titulada «2. Almacenamiento RAW»Persiste metadata + body + attachments en parquet vía raw_store.py.
3. Procesamiento (PDF → DataFrame)
Sección titulada «3. Procesamiento (PDF → DataFrame)»process_facturacion_from_raw.py + parse_pdf_facturas.py / parse_pdf_NCred.py extraen campos estructurados.
4. Lógica de Negocio
Sección titulada «4. Lógica de Negocio»business_facturacion.py aplica reglas de consistencia y valida contra maestros. Clasificación de zona/área/supervisor vía classifiers.py.
5. Salida (Excel / Google Sheets)
Sección titulada «5. Salida (Excel / Google Sheets)»excel_writer_facturacion.py → SALIDAS/Facturas_Mail_{ABV}.xlsx.
Actualización automática a Drive: Como parte del pipeline facturacion, el script ACTUALIZAR_FACTURAS_DRIVE.py se ejecuta automáticamente como post-step para hacer append a la hoja FACTURAS en GSheets.
Gotchas Técnicos / Bugs Conocidos
Sección titulada «Gotchas Técnicos / Bugs Conocidos»- Bug Columna AK: GSheets puede desplazar datos si no se especifica el inicio. Solución: Usar
table_range="A1"enappend_rows. - Discrepancia de Tildes: El DataFrame interno usa “Fecha Emision”, pero GSheets espera “Fecha Emisión”. Solución: Mapeo manual en el script de subida.
Tags: #facturacion #pipeline #imap #pdf #bug-fix