Secuencia completa CP1 → CP9 con hashes SHA-256 y linkeo secuencial
| CP | Checkpoint ID | Tipo | Evento EPCIS | Estado | Hash (8) | Timestamp UTC |
|---|---|---|---|---|---|---|
| CP1 | 67a07c0a | rollo | ObjectEvent | completo | ed602948 | 2026-03-23 17:03 |
| CP2 | 889eeab4 | pano | TransformationEvent | completo | 9770cd96 | 2026-03-23 21:29 |
| CP3 | cb525505 | lavado | ObjectEvent | completo | 5ea4f576 | 2026-03-23 21:30 |
| CP4 | e2f23e51 | lote | TransformationEvent | completo | ecfc0e35 | 2026-03-23 21:31 |
| CP5 | f57cd8e0 | cierre_qa | AggregationEvent | completo | 64c5becc | 2026-03-23 21:32 |
| CP6 | b421adcc | costura | TransformationEvent | completo | a2fafc56 | 2026-03-23 21:33 |
| CP7 | f0b4e151 | inspeccion | ObjectEvent | completo | f142e182 | 2026-03-23 21:54 |
| CP8 | 9f79ed4d | acabado | ObjectEvent | completo | 067bba18 | 2026-03-23 22:30 |
| CP9 | 68504788 | despacho | ShippingEvent | completo | f36c40a1 | 2026-03-23 22:31 |
Datos del rollo de origen — CP1
1 critico · 2 advertencias · 3 informativos
prev_checkpoint_id vacio en CP3 (cb525505). Confirmado en DB: CP4 (e2f23e51) apunta a CP2 (889eeab4) saltando CP3 — la cadena CP2→CP3→CP4 esta rota.orden_pedido y cliente_destino_gln vacios en CP9 — campos criticos para la generacion del Digital Product Passport (DPP).prendas_primera, prendas_segunda, prendas_reproceso en 0 e inspector_id vacio — datos de inspeccion AQL no registrados.link_dpp hardcodeado en ftltrace.com — confirmar dominio productivo vs dpp.fintechlab.la.eficiencia_corte: 0.0 y marker_id vacio — datos PEF incompletos para calculo de huella ambiental.peso_salida_kg: 0.0 — perdida de masa post-lavado no registrada, afecta calculo de merma.cb525505) sin prev_checkpoint_id — CP4 enlaza directamente a CP2, saltando CP3
Analisis de causa raiz y cambios propuestos para los 6 hallazgos
prev_event_id vacioepcis_snapshot.py:build_epcis_payload no incluye prev_event_id en el bloque accion. El prev_checkpoint_id se almacena en CheckpointRecord pero no se propaga al payload EPCIS. Confirmado en DB: CP3 (cb525505) tiene prev_checkpoint_id = NULL, y CP4 (e2f23e51) apunta a CP2 (889eeab4) saltando CP3.
En checkpoint_lifecycle.py:113, pasar prev.checkpoint_id al builder. En _cerrar_cp1, pasar None.
_ensure_cp_entity crea Despacho con orden_pedido="" y cliente_destino_gln="". La validacion _REQUIRED["cp9"] solo exige ["lote_id"].
_ensure_cp_entity crea Inspeccion con defaults prendas_primera=0, inspector_id="". Validacion _REQUIRED["cp8"] solo exige ["lote_id"].
link_dpp hardcodeadoDominio ftltrace.com hardcodeado en cp7_acabado.py:67 y checkpoint_records.py:334.
_crear_pano_cp2 usa defaults marker_id="" y eficiencia_corte=0. El flujo mobile omite estos campos que son required en el dashboard.
_ensure_cp_entity usa peso_salida_kg=datos.get("peso_salida_kg", 0) como default.