Ir al contenido

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). :::

┌──────────┐ ┌─────────┐ ┌──────────┐ ┌──────────────┐ ┌─────────────┐ ┌──────────┐
│ IMAP │────►│ Email │────►│ PDF │────►│ RAW │────►│ Business │────►│ Output │
│ Gmail │ │ │ │ Parser │ │ (parquet) │ │ Orchestr. │ │ (XLS/GS) │
└──────────┘ └─────────┘ └──────────┘ └──────────────┘ └─────────────┘ └──────────┘

Descarga PDFs adjuntos filtrando por filename:Factura y filename:Nota de Credito. Módulo: imap_client.py.

Persiste metadata + body + attachments en parquet vía raw_store.py.

process_facturacion_from_raw.py + parse_pdf_facturas.py / parse_pdf_NCred.py extraen campos estructurados.

business_facturacion.py aplica reglas de consistencia y valida contra maestros. Clasificación de zona/área/supervisor vía classifiers.py.

excel_writer_facturacion.pySALIDAS/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.

  • Bug Columna AK: GSheets puede desplazar datos si no se especifica el inicio. Solución: Usar table_range="A1" en append_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