Semáforo: port fiel del Excel oficial a 7 etapas + reconciliación automática#15
Merged
Merged
Conversation
…omatica
Los resultados del semaforo de la app no coincidian con el Excel del equipo
SAC. Auditoria fila-a-fila sobre las 12,914 filas del corte 15/06/2026:
solo la etapa 1 (Atencion) coincidia; el resto divergia, A04 (Reprog) y A07
(Pago) de forma grave.
Causas raiz (motor anterior vs Excel actual):
- Contaba DIAS HABILES (excl. domingos+feriados) en etapas 1-5; el Excel usa
DIAS CALENDARIO en A01-A06 y solo habiles en A07 (Pago).
- Fusionaba Padron+Validacion en 1 alerta; el Excel las separa (7 etapas).
- Reprogramacion: usaba 3 fechas y otra logica; el Excel usa las 6 (Y..AD)
con regla de >7 dias sobre la ultima fecha de reprog.
- Excluidos -> NaN; el Excel distingue EXCLUIDO(-1) y CONFORME(0).
- Offsets fecha+1 que el Excel no aplica.
Fix:
- sem_engine.py reescrito como PORT FIEL de las formulas BK..BX del Excel:
7 etapas, dias calendario A01-A06, habiles A07, exclusiones por OBSERVACION
y DUPLIC RESULT, semaforo -1/0/1/2/3.
- semaforo_alertas.py: 7 etapas; get_pipeline_summary ahora cuenta cada etapa
de forma INDEPENDIENTE (igual que la hoja R1 del Excel), no por "peor etapa".
- Reconciliacion automatizada (doble):
* tools/reconciliar_semaforo.py: valida el archivo COMPLETO (12,914 filas)
fila-a-fila contra los semaforos cacheados del Excel -> 0 discrepancias.
* tests/test_reconciliacion_semaforo.py + fixture (341 filas que cubren
todos los colores en las 7 etapas): regresion permanente en CI.
- tools/generar_fixture_semaforo.py: regenera el fixture si cambia el Excel.
Verificado: 100% de match en las 7 etapas (90,398 clasificaciones) y el
resumen por etapa de la app reproduce R1 exactamente. 60 tests verdes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problema
Los resultados del semáforo de alertas de la app no coincidían con el Excel del equipo SAC (
Dashboard_SAC_25-26_..._SEMAFOROS.xlsx). Auditoría fila-a-fila sobre las 12,914 filas del corte 15/06/2026: solo la etapa 1 (Atención) coincidía; el resto divergía — A04 (Reprogramación) y A07 (Pago) de forma grave.Causas raíz (motor anterior vs Excel actual)
NaNfecha+1INT(fecha2)−INT(fecha1)directoSolución
sem_engine.pyreescrito como port fiel de las fórmulasBK..BXdel Excel: 7 etapas, días calendario A01-A06, hábiles A07, exclusiones por OBSERVACIÓN y DUPLIC RESULT, semáforo-1/0/1/2/3.semaforo_alertas.py: 7 etapas;get_pipeline_summaryahora cuenta cada etapa de forma independiente (igual que la hoja R1 del Excel), no por "peor etapa". UI y export actualizados.Reconciliación automatizada (doble — lo que pediste)
tools/reconciliar_semaforo.py— valida el archivo completo (12,914 filas) fila-a-fila contra los semáforos cacheados del Excel:tests/test_reconciliacion_semaforo.py+ fixture de 341 filas (cubre todos los colores en las 7 etapas) → regresión permanente en CI.tools/generar_fixture_semaforo.py— regenera el fixture si el Excel oficial cambia.Verificación
🤖 Generated with Claude Code