caja · sync · debateEl pipeline de clasificación de gastos de caja (3-tier: GastosTipificados → MovimientoDetalle+Conceptos → SIN CLASIFICAR) corre en JavaScript dentro del browser durante el sync.
Razón histórica: SheetJS parsea los 6 archivos Excel en el cliente, y el pipeline opera sobre esas estructuras antes de mandar al backend.
El parser parseMovDetalleMap leía la columna 6 (Tipo = letra A/B/C/P/E)
en vez de la columna 5 (Comprobante) para detectar comprobantes ME.
Impacto: desde el origen del módulo (~Mayo 2025) hasta v2.0.2 (Mayo 2026):
¿Por qué no se detectó? Porque no había tests automatizados sobre el pipeline. Como corre en cliente JS, es difícil cubrirlo con PHPUnit.
Mantener el pipeline en cliente JS por ahora, pero plantear su migración a backend como prioridad alta del roadmap (Fase 1).
caja_audit_log ya existe en backend.Upload Excel via SheetJS (sólo parseo bruto)
│
▼
POST save_raw.php (uploads crudos a caja_raw_*)
│
▼ async (cron 5 min o trigger)
PHP runs pipeline 3-tier on raw tables → caja_gastos
│
▼
PHPUnit tests cubren cada nivel del pipeline
⚠️ Cualquier bug del pipeline puede tardar años en detectarse. ⚠️ Archivos > 20 MB ya hacen lento al browser. ⚠️ El equipo debe revisar manualmente la salida después de cada sync.
Hasta que se migre:
caja_audit_log registra "GT: N | MD: N | SIN CLASIF: N" en cada batch.Esperada: Q3 2026 (Fase 1 del roadmap del análisis técnico).
Cuando se migre, este ADR se marcará como Superseded by ADR-XXXX.
caja/sync_bulk.php
— implementación actualcaja/version.php
— bug v2.0.2 fix