4
Bugs EPCIS 2.0 críticos corregidos
9
Workstations por CP en FTL Trace
9
Workstations registrados en Dolibarr
10
Archivos MD de especificación por CP
Cómo leer este reporte
Estructura del reporte
ObjectEvent
TransformationEvent
AggregationEvent
Son los registros de configuración que no cambian con cada producción: los GLNs de la planta (qué ubicación física corresponde a cada código GS1), los workstations por checkpoint, los proveedores con sus GLNs de origen. Sin estos maestros correctamente registrados, los eventos EPCIS no pueden construir las dimensiones WHERE ni las listas de source/destination.
Registros transaccionales del proceso productivo: recepciones de tela (qué llegó, cuándo, de quién), partidas por color, órdenes de compra a San Ramón. Esta capa existe en FTL Core (Dolibarr) y en el schema public de FTL Trace. Es la fuente de datos que alimenta los eventos EPCIS en cada checkpoint.
Cada checkpoint genera un evento EPCIS 2.0 con las 5 dimensiones que responden:
qué objeto, cuándo, dónde, por qué y cómo. Los eventos se encadenan mediante el SGTIN o SSCC del objeto transformado — cada CP hereda la identidad del anterior.
CP1 · CP3 · CP7 · CP9ObjectEvent · OBSERVE
CP2 · CP4 · CP6TransformationEvent
CP5 · CP8AggregationEvent
1. Estaciones de Trabajo en Dolibarr (FTL Core)
pruebas2.dpp.fintechlab.la
Dolibarr MRP · Módulo "Estaciones de trabajo" · 9 checkpoints FTL registrados · 01-jun-2026
🔗 Ver en Dolibarr →
| Ref. Dolibarr | Etiqueta | GLN-13 | SGLN URN (EPCIS 2.0) | Estado |
| FTL-CP1 | CP1 · Recepción de Tela | 7600001000011 | urn:epc:id:sgln:7600001.00001.0 | Activo |
| FTL-CP2 | CP2 · Corte de Paños | 7600001000028 | urn:epc:id:sgln:7600001.00002.0 | Activo |
| FTL-CP3 | CP3 · Lavado Externo (QLever) | 7600001000035 | urn:epc:id:sgln:7600001.00003.0 | Activo |
| FTL-CP4 | CP4 · Corte de Piezas | 7600001000042 | urn:epc:id:sgln:7600001.00004.0 | Activo |
| FTL-CP5 | CP5 · Habilitado / Cierre QA | 7600001000059 | urn:epc:id:sgln:7600001.00005.0 | Activo |
| FTL-CP6 | CP6 · Costura | 7600001000066 | urn:epc:id:sgln:7600001.00006.0 | Activo |
| FTL-CP7 | CP7 · Inspección QC | 7600001000073 | urn:epc:id:sgln:7600001.00007.0 | Activo |
| FTL-CP8 | CP8 · Acabados / Encajado (DPP) | 7600001000080 | urn:epc:id:sgln:7600001.00008.0 | Activo |
| FTL-CP9 | CP9 · Despacho | 7600001000097 | urn:epc:id:sgln:7600001.00009.0 | Activo |
GCP de ubicación: 7600001 (derivado de TRENTO_PLANT_GLN = 7600001000000).
Planta completa = urn:epc:id:sgln:7600001.00000.0.
Cada checkpoint tiene LocationRef único (00001–00009) con check digit GS1 válido.
2. Recepción de Tela en FTL Core (Dolibarr)
OC 3-2026-39 · Textil San Ramón · 18 marzo 2026
Luego de la carga de recepción de tela desde el archivo RECEPCIÓN TELA - OC 3-2026-39.xlsx,
la OC quedó registrada en FTL Core con sus 10 líneas —
una por partida/color de la misma orden de compra a Textil San Ramón.
| # | Partida | Color | Producto | Kg | Fecha ingreso |
| 1 | 26-01874 | WINTER WHITE | JERSEY FLAME 20/1 PEINADO 100% COTTON | 140.6 | 18/03/2026 |
| 2 | 26-01875 | WINTER WHITE | JERSEY FLAME 20/1 PEINADO 100% COTTON | 561.3 | 18/03/2026 |
| 3 | 26-01876 | HONEY | JERSEY FLAME 20/1 PEINADO 100% COTTON | 422.5 | 18/03/2026 |
| 4 | 26-01877 | SIENNA | JERSEY FLAME 20/1 PEINADO 100% COTTON | 606.4 | 18/03/2026 |
| 5 | 26-01878 | FUCHSIA | JERSEY FLAME 20/1 PEINADO 100% COTTON | 204.8 | 18/03/2026 |
| 6 | 26-01879 | TEAL | JERSEY FLAME 20/1 PEINADO 100% COTTON | 474.0 | 18/03/2026 |
| 7 | 26-01880 | HARBOR | JERSEY FLAME 20/1 PEINADO 100% COTTON | 133.0 | 18/03/2026 |
| 8 | 26-01881 | HARBOR | JERSEY FLAME 20/1 PEINADO 100% COTTON | 563.6 | 18/03/2026 |
| 9 | 26-01882 | LENTIL | JERSEY FLAME 20/1 PEINADO 100% COTTON | 259.3 | 18/03/2026 |
| 10 | 26-01883 | BLACK | JERSEY FLAME 20/1 PEINADO 100% COTTON | 601.7 | 18/03/2026 |
| Total | 3 407.2 Kg | |
Las partidas resaltadas (26-01875 y 26-01877) son las de referencia para OP-6989 Hábitat.
3. Correcciones EPCIS 2.0 aplicadas al backend
| # | Problema | Antes | Después | Severidad | Archivo |
| 1 | SGLN sin notación de puntos | …sgln:7600001000000 | …sgln:7600001.00000.0 | Crítico ✓ | gs1.py · epcis_helpers.py |
| 2 | CP1 epcList usaba SSCC SSCC corresponde a CP8, no CP1 | urn:epc:id:sscc:… | urn:epc:id:sgtin:…{partida} | Crítico ✓ | epcis_helpers.py · epcis_events.py |
| 3 | quantityList.epcClass sin URN Requiere LGTIN válido | "62076b7f3c4701" | urn:epc:class:lgtin:… | Crítico ✓ | epcis_helpers.py:_cp1_extras() |
| 4 | CP1 bizTransactionList incorrecta OP/OC del cliente no aplican en CP1 | prodorder + po (de cliente) | desadv (guía de remisión San Ramón) | Conceptual ✓ | epcis_builder.py |
4. Cambios en el Dashboard
- ✅
Dimensión WHAT — CP1: etiqueta cambiada a
"SGTIN del Lote de Tela (proveedor)" y valor usa
epc_list[0] (el SGTIN URI generado).
epcis-dimensions.ts
- ✅
CP2 vista verificar: eliminada visualización de "Hoja de Corte".
El campo no existe hasta CP4 — mostrarlo vacío generaba confusión.
cp2/verificar.astro
5. Mapa GLN — Confecciones Trento
| Entidad | GLN-13 | SGLN URN | Rol EPCIS |
| Planta Trento (general) | 7600001000000 | urn:epc:id:sgln:7600001.00000.0 | bizLocation (todos los CPs) |
| CP1 · Recepción tela | 7600001000011 | urn:epc:id:sgln:7600001.00001.0 | readPoint CP1 |
| CP2 · Corte paños | 7600001000028 | urn:epc:id:sgln:7600001.00002.0 | readPoint CP2 |
| CP3 · Lavado (QLever) | 7600001000035 | urn:epc:id:sgln:7600001.00003.0 | readPoint CP3 |
| CP4 · Corte piezas | 7600001000042 | urn:epc:id:sgln:7600001.00004.0 | readPoint CP4 |
| CP5 · Habilitado | 7600001000059 | urn:epc:id:sgln:7600001.00005.0 | readPoint CP5 |
| CP6 · Costura | 7600001000066 | urn:epc:id:sgln:7600001.00006.0 | readPoint CP6 |
| CP7 · Inspección QC | 7600001000073 | urn:epc:id:sgln:7600001.00007.0 | readPoint CP7 |
| CP8 · Acabados | 7600001000080 | urn:epc:id:sgln:7600001.00008.0 | readPoint CP8 |
| CP9 · Despacho | 7600001000097 | urn:epc:id:sgln:7600001.00009.0 | readPoint CP9 |
San Ramón (proveedor tela) Textil San Ramón S.A.C. · RUC 20102261551 | 7750342100003 | urn:epc:id:sgln:7750342.10000.0 | sourceList CP1 ✓ en BD |
| QLever (lavandería) | pendiente | pendiente GS1 Perú | sourceList CP3 |
6. Jerarquía GLN — readPoint vs bizLocation
Gap identificado en CP2, CP4, CP6
CP1 — Ingreso Tela · Fuentes de datos por campo EPCIS
ObjectEvent · receiving · in_progress
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | epcList[0] — SGTIN lote de tela | FTL Trace | public.partidas | articulo_tela + lote_proveedor | urn:epc:id:sgtin:7750342.000000.26-01875 |
quantityList.quantity — Peso recibido | FTL Trace | public.partidas | peso_neto_kg | 92.0 KGM |
ilmd.lotNumber — Número de partida | FTL Trace | public.partidas | lote_proveedor | 26-01875 |
| WHEN | eventTime — Fecha recepción almacén | FTL Trace | public.partidas | fecha_recepcion | 2026-03-18T06:00:00-05:00 |
eventTime — Origen real del dato | QLever | public.recepcion_tela | fecha_ingreso | 2026-03-18 |
recordTime — Registro en sistema | FTL Trace | public.partidas | record_time | 2026-05-28T11:55:35 |
| WHERE | readPoint — GLN zona recepción | FTL Trace | public.workstations | gln (cp_num = 1) | 7600001000011 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001000000 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[0] | receiving |
disposition | Definidos | dpp_constants.py | TIMELINE_DISPOSITIONS[0] | in_progress |
bizTransactionList — OC de tela | FTL Trace | public.partidas | guia_remision | OC 3-2026-39 |
sourceList — GLN San Ramón | FTL Trace | public.proveedores | gln (via rollos.proveedor_id) | 7750342100003 |
destinationList — GLN Trento | FTL Trace | public.org_settings | gln_principal | 7600001000000 |
| HOW | sensorElementList.deviceID | FTL Trace | public.sensor_readings | device_id | gemini_vlm:bascula_cp1 |
sensorElementList.value — Peso báscula | FTL Trace | public.sensor_readings | value · uom = KGM | 92.0 KGM |
📱 Flujo implementado:
App mobile captura foto del display de la báscula →
backend envía imagen a Google Gemini fast VLM (Google Cloud) →
LLM prompt extrae el valor numérico →
backend procesa la respuesta y la retorna a la app →
al completar CP1 el valor se guarda en sensor_readings
(sensor_type='weight', raw_payload.source='gemini_vlm').
|
FTL Trace = schema public en DB del FTL Trace ·
QLever = ERP Trento (exportado a public.recepcion_tela) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py) ·
public.partidas = nombre de negocio de la tabla rollos
FTL Trace · CP1 Ingreso de Tela · ObjectEvent · OBSERVE · 100% completado · 01-jun-2026 11:39
Evidencia de ejecución de queries
Ejecutado
2026-06-01
10:04:52
Tiempo total
694 ms
9 queries · 2 bases de datos
DB del FTL Trace · PostgreSQL
connect 71 ms
Q1–Q4 + Qc 4–9 ms c/u
FTL Core · MySQL (túnel SSH)
connect 282 ms
Q5–Q7 + Qa–Qb 62 ms c/u
| Campo (Excel v9) | Tipo | Mapea a EPCIS | Tabla DB | Columna | Base de datos | Valor ejemplo |
| ID Lote Tela (GTIN+Batch) | Generado | epcList[0] — SGTIN | public.partidas | lote_proveedor | FTL Core | 26-01875 |
| Código de Tela | Heredado · CORE | ilmd:lotNumber | public.partidas | articulo_tela | FTL Core | (24438) JERSEY FLAME 20/1 PEINADO -IVORY |
| Código del Proveedor Tier 2 (GLN) | Heredado · QLever | WHY → sourceList + nombre_proveedor | public.proveedores | gln | FTL Core | 7750342100003 |
| Orden de Producción (OP) | Referencia · CORE | Contexto — no va en evento CP1 | public.ordenes_produccion | orden_produccion | FTL Core | OP-6989 |
| Purchase Order (PO cliente) | Referencia · CORE | Contexto — aplica en CP9 | public.purchase_orders | numero_po · cliente | FTL Core | 1894 · HABITAT CLOTHES TO LIVE IN |
| Guía de Remisión | Referencia · QLever | WHY → bizTransactionList | public.partidas | guia_remision | FTL Core | OC 3-2026-39 |
| Fecha/Hora Recepción | Timestamp · QLever | WHEN → eventTime | public.partidas | fecha_recepcion | FTL Core | 2026-03-18 06:00:00 |
| Operador Receptor | ID Usuario · Login | Contexto — no en evento EPCIS | public.users | email · full_name | FTL Core | supervisor-cp1@ctrento.com.pe |
| Nombre_Proveedor | Texto · CORE/QLever | HOW → how_proveedor (sourceList) | public.partidas | nombre_proveedor | FTL Core | Textil San Ramón S.A.C. |
| Tipo_Tela | Texto · CORE | Contexto producto | public.partidas | articulo_tela | FTL Core | JERSEY FLAME 20/1 PEINADO |
| Nombre_Color_Lote_Tela | Texto · QLever | Contexto producto | public.partidas | color_tela | FTL Core | IVORY |
Comentarios columna F del Excel v9 (29-may-2026): epcList ← ID Lote Tela ·
ilmd:lotNumber ← Código de Tela · NOMBRE DEL PROVEEDOR en WHY ← GLN Tier 2
Resultado real de las tablas que alimentan el evento CP1 para el lote de referencia
GTIN 62076b7f3c4701 / partida 26-01875.
Q1 · public.partidas — partida del lote de prueba
SELECT id, lote_proveedor, peso_neto_kg, fecha_recepcion,
orden_compra, guia_remision, nombre_proveedor, estado_cp1
FROM rollos
WHERE id = '1186e377-8077-48bb-8406-fe2c72f50f42';
| lote_proveedor | peso_neto_kg | fecha_recepcion | orden_compra | guia_remision | nombre_proveedor | estado_cp1 |
| 26-01875 | 92.00 | 2026-03-18 06:00:00 | OC 3-2026-39 | OC 3-2026-39 | Textil San Ramón S.A.C. | completo |
Q2 · public.workstations — readPoint CP1
SELECT cp_num, code, gln, nombre_descriptivo
FROM workstations
WHERE cp_num = 1 AND activo = true;
| cp_num | code | gln | nombre_descriptivo |
| 1 | recepcion_materias_primas | 7600001000011 | Zona de recepción de tela (CP1) |
Q3 · public.org_settings — bizLocation
SELECT razon_social, gln_principal
FROM org_settings WHERE id = 1;
razon_social: Industrias Nettalco S.A.
gln_principal: 7600001000000
Q4 · public.proveedores — sourceList
SELECT razon_social, gln, ruc, tipo
FROM proveedores
WHERE razon_social ILIKE '%san ram%';
razon_social: Textil San Ramón S.A.C.
gln: 7750342100003
ruc: 20102261551
tipo: tela
Q5 · FTL Core — llx_commande_fournisseurdet — línea de partida 26-01875
SELECT cfd.label, cfd.description, cfd.qty,
cf.ref AS oc_interna, cf.ref_supplier AS oc_proveedor,
cf.date_commande, s.nom AS proveedor
FROM llx_commande_fournisseurdet cfd
JOIN llx_commande_fournisseur cf ON cf.rowid = cfd.fk_commande
JOIN llx_societe s ON s.rowid = cf.fk_soc
WHERE cfd.description LIKE '%26-01875%';
| label | description | qty (Kg) | oc_proveedor | date_commande | proveedor |
| JERSEY FLAME 20/1 PEINADO 100% COTTON (WINTER WHITE) | Partida: 26-01875 | Ingreso: 126175 | Fecha: 2026-03-18 | 561.30 | OC 3-2026-39 | 2026-03-18 | TEXTIL SAN RAMON S A |
⚠ qty = 561.30 Kg es el peso real de la partida en FTL Core.
El rollo del piloto tiene peso_neto_kg = 92.00 (subconjunto del seed de prueba).
Q adicional A · FTL Core — llx_mrp_mo — OP-6989
SELECT mo.rowid, mo.ref, mo.label,
p.ref AS prod_ref, p.label AS producto
FROM llx_mrp_mo mo
LEFT JOIN llx_product p ON p.rowid = mo.fk_product
WHERE mo.ref = 'MO-6989';
rowid: 7
ref: MO-6989
label: OP-6989 Estilo 27553
prod_ref: 27553
producto: Estilo 27553
Q adicional B · FTL Core — llx_commande — PO 1894 (cliente)
SELECT c.rowid, c.ref, c.ref_client, s.nom
FROM llx_commande c
JOIN llx_societe s ON s.rowid = c.fk_soc
WHERE c.ref = 'DP-1894';
rowid: 832
ref: DP-1894
ref_client: 1894
nom: HABITAT CLOTHES TO LIVE IN
Q adicional C · DB del FTL Trace — public.users — Operador receptor
SELECT email, full_name FROM users WHERE id = '3e307970-647c-5516-bfa4-078570c7125f';
email: supervisor-cp1@ctrento.com.pe
full_name: Supervisor CP1
HOW · public.sensor_readings — lectura báscula via Gemini VLM
Flujo de captura
📱
App Mobile
foto del display
→
☁️
Google Cloud
Gemini fast VLM
→
🤖
LLM Prompt
extrae valor
→
⚙️
Backend
procesa + retorna
→
🗃
sensor_readings
al completar CP1
SELECT device_id, sensor_type, value, uom,
reading_time, raw_payload
FROM sensor_readings
WHERE rollo_id = '1186e377-8077-48bb-8406-fe2c72f50f42'
ORDER BY reading_time;
| device_id | sensor_type | value | uom | reading_time | raw_payload |
| gemini_vlm:bascula_cp1 | weight | 92.0 | KGM | 2026-03-18 06:00:00-05:00 | {"source":"gemini_vlm","method":"photo_display_ocr","model":"gemini-2.0-flash","confidence":0.98,"raw_text":"92.0 kg"} |
Ejecutado: 2026-06-01 11:21:01 · confidence: 0.98 — Gemini reconoció "92.0 kg" del display de la báscula.
FTL Core — Dolibarr MySQL pruebas2.dpp.fintechlab.la · túnel SSH 13307
Q6 · llx_commande_fournisseur — OC de tela en FTL Core
SELECT cf.rowid, cf.ref, cf.ref_supplier,
cf.date_commande, cf.fk_statut, s.nom AS proveedor
FROM llx_commande_fournisseur cf
LEFT JOIN llx_societe s ON s.rowid = cf.fk_soc
WHERE cf.ref_supplier LIKE '%3-2026-39%';
| rowid | ref | ref_supplier | date_commande | fk_statut | proveedor |
| 1507 | OC-TELA-1779763856 | OC 3-2026-39 | 2026-03-18 | 5 · Recibida | TEXTIL SAN RAMON S A |
Q7 · llx_commande_fournisseurdet — línea de partida 26-01875
SELECT label, description, qty
FROM llx_commande_fournisseurdet
WHERE fk_commande = 1507
AND description LIKE '%26-01875%';
| label | description | qty (Kg) |
| JERSEY FLAME 20/1 PEINADO 100% COTTON (WINTER WHITE) | Partida: 26-01875 | Ingreso: 126175 | Fecha: 2026-03-18 | 561.30 |
CP2 — Corte Paños · Fuentes de datos por campo EPCIS
TransformationEvent · transforming · active
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | inputEPCList[0] — SSCC Rollo tela consumido | FTL Trace | public.rollos | id · codigo_rollo | urn:epc:id:sscc:7600001.{rollo_short} |
inputQuantityList.quantity — Peso Tela Input (kg) | FTL Trace | public.panos | peso_tela_input_kg | 92.0 KGM |
outputEPCList[0] — SGTIN Paños Cortados | FTL Trace | public.panos | id | urn:epc:id:sgtin:7600001.{pano_gtin} |
outputQuantityList.quantity — Peso Paños Output (kg) | Trento | trento.ProdTransfCorteDetalle | SUM("Total") GROUP BY OP | 48.5 KGM (OP-6989) |
ilmd.lotNumber — Partida de Tela | FTL Trace | public.panos | hoja_corte_id | 26-01875 |
| WHEN | eventTime — Fecha corte paños | FTL Trace | public.panos | fecha_corte | 2026-05-10T08:30:00-05:00 |
recordTime — Registro en sistema | FTL Trace | public.panos | record_time | 2026-05-28T11:55:35 |
| WHERE | readPoint — GLN mesa de corte (area proxy) | FTL Trace | public.workstations | gln (cp_num = 2) | 7600001000028 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001000000 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[1] | transforming |
disposition | Definidos | dpp_constants.py | TIMELINE_DISPOSITIONS[1] | active |
bizTransactionList[0] — Orden de Producción (type: po) | FTL Trace | public.ordenes_produccion | numero_op | OP-6989 |
bizTransactionList[1] — Orden servicio lavado (type: desadv) | Pendiente | public.lavados | orden_servicio | — (CP3) |
|
🔗 sourceList / destinationList — Heredado de CP1 (rollo input) a panos output. Ambos GLNs vienen del contexto de recepción.
|
| HOW | sensorElementList.deviceID — ST7 (Máquina cortadora / Tendedora / Mesa) | FTL Trace | public.sensor_readings | device_id | modbus:7_mb_81 (ST7) |
sensorElementList.value — kWh por paño | FTL Trace | public.sensor_readings | value · uom = KWH | — (sin datos piloto) |
⚠️ Estado: El lote piloto no tiene readings IoT para ST7. El backend busca SensorReading en workstation `corte_panos` ±5 min de fecha_corte del Pano. HOW vacío es comportamiento correcto, no un bug. Para agregar datos demo, ejecutar script seed_st7_sensor_reading_cp2.py (agregación diaria: kWh total ST7 / cantidad de panos cortados ese día).
|
FTL Trace = schema public en DB del FTL Trace ·
Trento = ERP Trento (dual sourcing para outputQuantityList) ·
Definidos = valor fijo por estándar GS1 CBV (dpp_constants.py)
| # | Área | Cambio | Commit |
| 1–7 | Dashboard | 7 labels descriptivos EPCIS en EpcisRawEventPanel.astro: - 7_mb_81 → Máquina cortadora / Tendedora / Mesa (ST7)
- corte_panos (code) → Zona de corte (CP2)
- transforming → Transformación de rollo a paños
- active → Paños activos en línea
- po → Orden de Producción OP-6989
- sourceList → Origen (rollo de Textil San Ramón)
- destinationList → Destino (Trento, Perú)
| 5d9aa41 |
| 8 | Backend | _get_peso_panos_output_from_trento() — Lookup trento.ProdTransfCorteDetalle por número OP, retorna outputQuantityList real desde Trento, no estimado. | pendiente |
CP2 Corte Paños — Vista consolidada EPCIS con sensor ST7
Queries de evidencia — data lineage CP2
Q1 · public.panos — Paños del lote piloto 26-01875
SELECT p.id, p.fecha_corte, p.peso_tela_input_kg,
p.peso_panos_output_kg, p.hoja_corte_id, p.estado_cp2
FROM panos p
JOIN rollos r ON r.id = p.rollo_id
WHERE r.lote_proveedor = '26-01875';
| id | fecha_corte | peso_input_kg | peso_output_kg | hoja | estado |
| 7a1d9c... | 2026-05-10T08:30:00 | 92.0 | 48.5 | 26-01875 | completed |
Q2 · public.workstations — readPoint CP2
SELECT cp_num, code, gln, nombre_descriptivo
FROM workstations
WHERE cp_num = 2 AND activo = true;
| cp_num | code | gln | nombre_descriptivo |
| 2 | corte_panos | 7600001000028 | Zona de corte (CP2) |
Q3 · trento.ProdTransfCorteDetalle — Peso paños Output (Trento)
SELECT uop."Numero" as op,
COALESCE(SUM(tcd."Total"), 0) as peso_total_kg
FROM trento."ProdTransfCorteDetalle" tcd
JOIN trento."UdpOrdenProduccion" uop ON uop."IdOrdenProduccion" = tcd."IdOP"
WHERE uop."Numero" = 'OP-6989'
GROUP BY uop."Numero";
| op | peso_total_kg |
| OP-6989 | 48.5 |
Q4 · public.sensor_readings — Verificar ausencia HOW (sin datos IoT piloto)
SELECT COUNT(*) as reading_count, device_id
FROM sensor_readings
WHERE workstation_id = (SELECT id FROM workstations WHERE cp_num = 2)
GROUP BY device_id;
Resultado: 0 rows (sin readings ST7 para workstation CP2)
💡 Expected: HOW vacío. Para agregar demo, ejecutar:
uv run python scripts/seed_st7_sensor_reading_cp2.py
CP3 — Lavado Externo · Fuentes de datos por campo EPCIS
ObjectEvent · receiving · in_progress
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | epcList[0] — SGTIN paño lavado | FTL Trace | public.panos | id | urn:epc:id:sgtin:7600001.{pano_gtin} |
ilmd.lotNumber — Referencia hoja de corte CP2 | FTL Trace | public.panos | hoja_corte_id | 26-01875 |
| WHEN | eventTime — Fecha retorno de lavandería | FTL Trace | public.lavados | fecha_retorno | 2026-05-15T08:00:00-05:00 |
recordTime — Registro en sistema | FTL Trace | public.lavados | record_time | 2026-05-28T11:55:35 |
| WHERE | readPoint — GLN almacén lavado paños | FTL Trace | public.workstations | gln (cp_num = 3) | 7600001000035 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001000000 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[2] | receiving |
disposition | Definidos | dpp_constants.py | TIMELINE_DISPOSITIONS[2] | in_progress |
bizTransactionList[0] — Orden de servicio lavado (type: desadv) | QLever | public.lavados | orden_servicio | OS-QLEVER-2026-05 |
sourceList — GLN lavandería QLever | Pendiente | public.proveedores | gln | — (sin GS1 Perú aún) |
🔗 destinationList — GLN Trento: 7600001.00000.0 (punto de recepción post-lavado). CP3 es unico junto a CP1 y CP9 donde aplica cambio inter-organizacional.
|
| HOW |
⚠️ Estado: Sin IoT piloto. Retorno post-lavado se registra manualmente via App Mobile (observaciones: danos, merma). Orden de servicio lavaderia se crea manual en QLever.
|
FTL Trace = schema public en DB del FTL Trace ·
QLever = ERP Trento (sin API aún) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py)
📸 Dashboard FTL Trace — CP3 Lavado Externo
FTL Trace Consolidada · Vista CP3 Lavado Externo · 2026-06-02 · ObjectEvent con datos EPCIS completos (WHAT/WHEN/WHERE/WHY)
Evidencia de datos CP3
Status
CP3 Lavado
ObjectEvent
Panos procesados OP-6989
2 partidas
26-01875, 26-01877 (Habitat)
Origen orden de servicio
QLever Modulo ERP
Sin API — registro manual
Observaciones post-lavado
App Mobile captura manual
danos, merma, cambios color
Q1 · public.lavados — Registros de lavado para partidas OP-6989
SELECT id, pano_id, orden_servicio, fecha_salida, fecha_retorno, observaciones
FROM lavados
WHERE pano_id IN (SELECT id FROM panos WHERE hoja_corte_id = '26-01875')
OR pano_id IN (SELECT id FROM panos WHERE hoja_corte_id = '26-01877')
ORDER BY fecha_retorno DESC;
Q2 · public.workstations — GLN almacén CP3
SELECT id, ref, gln, cp_num, descripcion
FROM workstations
WHERE cp_num = 3;
📝 Nota QLever: La orden de servicio lavado se genera en el módulo de servicios de QLever (Trento ERP) y se refiere por número de orden. El retorno de panos post-lavado se captura cuando la lavandería confirma entrada de tela en almacén (movimiento de stock QLever). Hoy ambos son registros manuales vía App Mobile o entrada directa en QLever — no hay API aún. El campo observaciones en public.lavados guarda danos, merma de peso, cambios de color detectados post-lavado.
CP4 — Corte de Piezas + GTIN · Fuentes de datos por campo EPCIS
TransformationEvent · commissioning · active
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | inputEPCList[0] — SGTIN paños lavados (heredado CP3) | FTL Trace | public.panos | id (build_epc_uri) | urn:epc:id:sgtin:7750342.c803c669 |
inputQuantityList.quantity — Kg paños input | FTL Trace | public.lotes | peso_panos_input_kg | ⚠️ — |
outputEPCList[0] — SGTIN lote (GTIN generado) | FTL Trace | public.lotes | gtin (generado) | 62076b7f3c4701 |
outputQuantityList.quantity — Kg piezas output | FTL Trace | public.lotes | peso_piezas_output_kg | ⚠️ — |
transformationID — ID único lote | FTL Trace | public.lotes | id (UUID) | 0f35298c-eb1f-... |
ilmd.lotNumber — Número hoja de corte | CORE 04·HC | public.lotes | hoja_corte_id | 26-01875 |
ilmd.productionDate — Fecha creación lote | FTL Trace | public.lotes | fecha_creacion | 2026-05-28 |
| WHEN | eventTime — Timestamp orden de corte | FTL Trace | public.lotes | fecha_creacion | 2026-05-28T15:55:39-05:00 |
recordTime — Registro en sistema | FTL Trace | public.lotes | record_time | 2026-05-28T15:55:39 |
| WHERE | readPoint — GLN mesa corte piezas | FTL Trace | public.workstations | gln (cp_num = 4) ⚠️ | 7600001.00000.0 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001.00000.0 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[3] | commissioning |
disposition | Definidos | _CP_META[3] | disposition ⚠️ | active (debe ser) |
bizTransactionList[0] — Orden de Corte (type: prodorder) | FTL Trace | public.lotes | hoja_corte_id | 26-01875 |
bizTransactionList[1] — OP (type: prodorder) | FTL Trace | public.ordenes_produccion | numero_op | OP-6989 |
|
🔗 sin sourceList/destinationList — CP4 es transformación interna (Trento → Trento). Los paños ingresan como input; salen como lote de piezas cortadas.
|
| HOW |
⚠️ Sensor ST3: Energía cortadora (área corte piezas). Pendiente integración. Hoy sin datos en sensorElementList.
|
FTL Trace = schema public en DB del FTL Trace ·
CORE 04·HC = ERP confecciones (Trento) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py, epcis_helpers.py)
⚠️ Problemas identificados · CP4 Corte de Piezas
1. disposition = in_progress (bug)
Dashboard muestra in_progress, pero debe ser active (decisión reunión 31-may-2026). Bug en _CP_META[3] y pendiente fix en dpp_constants.py.
2. Input/Output Quantities vacías
inputQuantityList y outputQuantityList sin valores — campos peso_panos_input_kg y peso_piezas_output_kg no poblados en lote demo.
3. readPoint = bizLocation
Ambos muestran GLN planta (7600001.00000.0). Workstation CP4 no tiene GLN específico asignado aún.
4. HOW sin sensor ST3
Energía cortadora no integrada (igual que ST7 en CP2). sensorElementList vacío.
📸 Dashboard FTL Trace — CP4 Corte de Piezas + GTIN
FTL Trace Consolidada · CP4 Corte de Piezas + GTIN · 2026-06-02 · TransformationEvent con 4 issues pendientes (disposition, input/output qty, readPoint, ST3)
Q1 · public.lotes — Lote OP-6989 con campos EPCIS
SELECT id, gtin, hoja_corte_id, peso_panos_input_kg, peso_piezas_output_kg,
fecha_creacion, record_time, estado_cp4, distribucion_tallas
FROM lotes
WHERE gtin = '62076b7f3c4701';
Q2 · public.workstations — GLN CP4 mesa corte piezas
SELECT id, ref, gln, cp_num, descripcion
FROM workstations
WHERE cp_num = 4;
Q3 · public.checkpoint_records — Evento EPCIS CP4
SELECT cp_num, estado,
datos_epcis->>'eventType' AS event_type,
datos_epcis->>'bizStep' AS biz_step,
datos_epcis->>'disposition' AS disposition
FROM checkpoint_records
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18'
AND cp_num = 4;
📝 Nota CP4: CP4 es donde nace el GTIN del lote de producción — el identificador único del DPP. Es el primer evento de comisionado con GS1 propio de Trento. El GTIN 62076b7f3c4701 representa el lote cortado de 26-01875 (OP-6989 Habitat). El TransformationEvent encadena CP3 (inputs: paños) → CP4 (output: lote de piezas con distribucion tallas y cantidad objetivo). Distribución por tallas se especifica en distribucion_tallas (JSON estructura).
CP5 — Cierre QA Corte · Fuentes de datos por campo EPCIS
AggregationEvent · packing · in_progress
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | parentID — SGTIN lote piezas (heredado CP4) | FTL Trace | public.lotes | gtin | urn:epc:id:sgtin:7750342.62076b7f3c4701 |
childEPCs[0] — SGTIN paquete habilitado | FTL Trace | public.cierre_qa | ⚠️ campo paquete | — |
childQuantityList[0] — Piezas OK (EA) | FTL Trace | public.cierre_qa | piezas_habilitadas_ok | EA |
childQuantityList[1] — Piezas defectuosas (EA) | FTL Trace | public.cierre_qa | piezas_defectuosas | EA |
childQuantityList[2] — Piezas faltantes (EA) | FTL Trace | public.cierre_qa | piezas_faltantes | EA |
ilmd.lotNumber — Número hoja de corte | CORE 04·HC | public.lotes | hoja_corte_id | 26-01875 |
| WHEN | eventTime — Timestamp cierre QA | FTL Trace | public.cierre_qa | created_at / fecha_cierre | 2026-05-28T16:30:00-05:00 |
recordTime — Registro en sistema | FTL Trace | public.cierre_qa | record_time | 2026-05-28T16:30:00 |
| WHERE | readPoint — GLN zona cierre QA | FTL Trace | public.workstations | gln (cp_num = 5) | 7600001.00005.0 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001.00000.0 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[4] | packing |
disposition | Definidos | _CP_META[4] | disposition ⚠️ | active (debe ser) |
sourceList — GLN mesa corte piezas | FTL Trace | public.workstations | gln (cp_num = 4) | 7600001.00004.0 |
destinationList — GLN cierre QA | FTL Trace | public.workstations | gln (cp_num = 5) | 7600001.00005.0 |
|
🔗 source/destination entre workstations internos — práctica aceptada para eventos intra-planta (CP4 → CP5). Las piezas cortadas ingieren desde corte, salen como paquete habilitado hacia costura.
|
| HOW |
⚠️ Sensor balanza avíos: Pendiente configuración técnica (Jenny). Hoy sensorElementList vacío.
|
FTL Trace = schema public en DB del FTL Trace ·
CORE 04·HC = ERP confecciones (Trento) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py, epcis_helpers.py)
⚠️ Problemas identificados · CP5 Cierre QA
1. disposition = in_progress (bug)
Dashboard muestra in_progress, pero debe ser active (decisión reunión 31-may-2026). Bug en _CP_META[4].
2. childEPCs sin SGTIN asignado
El paquete habilitado no tiene SGTIN propio en demo. Campo vacío en public.cierre_qa.
3. HOW sin sensor balanza
Pesaje de avíos requiere balanza pequeña. Pendiente integración técnica (pendiente Jenny).
4. Selección manual OC no implementada
App mobile debe mostrar órdenes de corte disponibles para selección manual. Feature pendiente en app mobile.
📸 Dashboard FTL Trace — CP5 Cierre QA Corte
FTL Trace Consolidada · CP5 Cierre QA Corte · 2026-05-28 · AggregationEvent con 4 issues pendientes (disposition, childEPCs, balanza, selección OC)
Q1 · public.cierre_qa — Cierre QA lote OP-6989
SELECT lote_id, piezas_habilitadas_ok, piezas_defectuosas, piezas_faltantes,
created_at, observaciones, estado_qa
FROM cierre_qa
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18';
Q2 · public.workstations — GLN CP5 cierre QA
SELECT id, ref, gln, cp_num, descripcion
FROM workstations
WHERE cp_num = 5;
Q3 · public.checkpoint_records — Evento EPCIS CP5
SELECT cp_num, estado, datos_epcis->>'parentID' AS parent_id,
datos_epcis->>'bizStep' AS biz_step,
datos_epcis->>'disposition' AS disposition
FROM checkpoint_records
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18'
AND cp_num = 5;
📝 Nota CP5: CP5 es un AggregationEvent (no TransformationEvent como CP2/CP4). Agrega piezas cortadas de CP4 en un paquete de corte con parentID (SGTIN del lote). A diferencia de transformaciones internas (CP2, CP4) que no tienen source/dest, CP5 sí los incluye: source = mesa corte piezas (CP4), destination = zona cierre QA (CP5). La selección de la hoja de corte a procesar es manual en app mobile — el usuario elige qué orden está siendo inspeccionada en ese momento.
CP6 — Costura · Fuentes de datos por campo EPCIS
TransformationEvent · assembling · in_progress
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | inputEPCList[0] — SGTIN paquete habilitado (CP5) | FTL Trace | public.cierre_qa | _input_epc_override | urn:epc:id:sgtin:7750342.62076b7f3c4701 |
outputQuantityList[0] — Prendas cosidas (EA) | FTL Trace | public.costuras | prendas_terminadas | EA |
transformationID — ID costura | FTL Trace | public.costuras | id (UUID) | str(costura.id) |
ilmd.lotNumber — Número hoja de corte | CORE 04·HC | public.lotes | hoja_corte_id | 26-01875 |
ilmd.productionDate — Fecha costura | FTL Trace | public.costuras | fecha_fin / fecha_inicio | 2026-05-28 |
| WHEN | eventTime — Timestamp fin costura | FTL Trace | public.costuras | fecha_fin (priority) / fecha_inicio | 2026-05-28T18:45:00-05:00 |
recordTime — Registro en sistema | FTL Trace | public.costuras | record_time | 2026-05-28T18:45:00 |
| WHERE | readPoint — GLN zona costura | FTL Trace | public.workstations | gln (cp_num = 6) | 7600001.00006.0 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001.00000.0 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[5] | assembling |
disposition | Definidos | _CP_META[5] | disposition | in_progress |
bizTransactionList — OP producción | FTL Trace | public.ordenes_produccion | id (prodorder GTIN) | OP-6989 |
|
🔗 SIN sourceList/destinationList — costura interna (transformación Trento → Trento). Solo si maquila: source=Trento, destination=taller_externo_gln.
|
| HOW |
⚠️ Sensor costura: Pendiente (datos poco confiables del ERP actual). sensorElementList vacío.
|
FTL Trace = schema public en DB del FTL Trace ·
CORE 04·HC = ERP confecciones (Trento) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py, epcis_helpers.py)
⚠️ Problemas identificados · CP6 Costura
1. outputQuantityList vacío en demo
Captura manual de prendas cosidas por talla en app mobile. Hoy: sin datos reales en demo.
2. HOW sin sensor costura
Datos de costura del ERP actual poco confiables. sensorElementList vacío. Pendiente integración técnica.
3. Formulario app mobile cantidad por talla
Feature aún no implementada. Requerido para captura manual de prendas cosidas.
4. Costura maquila sin GLN taller externo
Si costura es en taller externo, requiere configuración de GLN correspondiente. No implementado.
📸 Dashboard FTL Trace — CP6 Costura
FTL Trace Consolidada · CP6 Costura · 2026-06-02 · TransformationEvent con 4 issues pendientes (outputQuantityList, sensor, app mobile, maquila GLN)
Q1 · public.costuras — Costura lote OP-6989
SELECT lote_id, prendas_terminadas, operador_id, fecha_inicio, fecha_fin,
estado, observaciones
FROM costuras
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18';
Q2 · public.workstations — GLN CP6 costura
SELECT id, ref, gln, cp_num, descripcion
FROM workstations
WHERE cp_num = 6;
Q3 · public.checkpoint_records — Evento EPCIS CP6
SELECT cp_num, estado, datos_epcis->>'inputEPCList' AS input_epc,
datos_epcis->>'bizStep' AS biz_step,
datos_epcis->>'disposition' AS disposition
FROM checkpoint_records
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18'
AND cp_num = 6;
📝 Nota CP6: CP6 es un TransformationEvent (como CP2 y CP4). Transforma el paquete habilitado de CP5 en prendas terminadas costuradas. A diferencia de CP5 (AggregationEvent), CP6 usa inputEPCList / outputQuantityList en lugar de parentID / childEPCs. La costura interna NO lleva sourceList/destinationList (transformación dentro de Trento). El bizStep = assembling es único en el flujo de 9 checkpoints — es el único evento que representa costura/ensamblaje.
CP7 — Inspección QC · Fuentes de datos por campo EPCIS
ObjectEvent · inspecting · active
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | quantityList[0] — Prendas primera (EA) | FTL Trace | public.acabados | prendas_primera | EA |
quantityList[1] — Prendas segunda (EA, qualifier «segunda») | FTL Trace | public.acabados | prendas_segunda | EA |
quantityList[2] — Prendas saldo (EA, qualifier «saldo») | FTL Trace | public.acabados | prendas_saldo | EA |
quantityList[3] — Prendas descarte (EA, qualifier «descarte») | FTL Trace | public.acabados | prendas_descarte | EA |
ilmd.lotNumber — Número hoja de corte | CORE 04·HC | public.lotes | hoja_corte_id | 26-01875 |
| WHEN | eventTime — Timestamp inspección QC | FTL Trace | public.acabados | fecha_acabado | 2026-05-28T19:20:00-05:00 |
recordTime — Registro en sistema | FTL Trace | public.acabados | record_time | 2026-05-28T19:20:00 |
| WHERE | readPoint — GLN zona inspección QC | FTL Trace | public.workstations | gln (cp_num = 7) | 7600001.00007.0 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001.00000.0 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[6] | inspecting |
disposition | Definidos | _CP_META[6] | disposition | active |
sourceList — GLN zona costura | FTL Trace | public.workstations | gln (cp_num = 6) | 7600001.00006.0 |
destinationList — GLN inspección QC | FTL Trace | public.workstations | gln (cp_num = 7) | 7600001.00007.0 |
|
🔗 source/destination intra-planta — CP7 es ObjectEvent (no TransformationEvent). Las prendas cosidas ingresan desde costura (CP6), salen inspeccionadas desde zona QC (CP7). Práctica aceptada para eventos internos Trento.
|
| HOW |
⚠️ Datos inspección Excel: AQL, tipo defecto, reparaciones provienen de upload PDF/Excel. Fuera del estándar EPCIS. sensorElementList vacío.
|
FTL Trace = schema public en DB del FTL Trace ·
CORE 04·HC = ERP confecciones (Trento) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py, epcis_helpers.py)
⚠️ Problemas identificados · CP7 Inspección QC
1. Modelo legacy invertido
Tabla public.acabados representa CP7, tabla public.inspecciones representa CP8. Nombres confusos históricamente pero funcionales.
2. Datos inspección desde Excel
AQL, tipos de defecto, reparaciones por unidad provienen de upload PDF/Excel. App mobile solo visualiza. Feature de entrada pendiente.
3. Inspección agrupada por estilo+OP
App mobile debe agrupar por Estilo + OP (no hoja de corte). Configuración pendiente en selector mobile CP7.
4. Parámetros CP7 faltantes
Fintech Lab debe gestionar entrega de parámetros adicionales de CP7 (especificaciones QC, tolerancias, criterios de aceptación).
📸 Dashboard FTL Trace — CP7 Inspección QC
FTL Trace Consolidada · CP7 Inspección QC · 2026-06-02 · ObjectEvent con 4 issues pendientes (modelo legacy, datos Excel, estilo+OP, parámetros)
Q1 · public.acabados — Inspección QC lote OP-6989
SELECT lote_id, prendas_primera, prendas_segunda, prendas_saldo, prendas_descarte,
fecha_acabado, estado, observaciones
FROM acabados
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18';
Q2 · public.workstations — GLN CP7 inspección QC
SELECT id, ref, gln, cp_num, descripcion
FROM workstations
WHERE cp_num = 7;
Q3 · public.checkpoint_records — Evento EPCIS CP7
SELECT cp_num, estado, datos_epcis->>'bizStep' AS biz_step,
datos_epcis->>'disposition' AS disposition,
datos_epcis->>'quantityList' AS quantity_list
FROM checkpoint_records
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18'
AND cp_num = 7;
📝 Nota CP7: CP7 es un ObjectEvent (no TransformationEvent como CP2/CP4/CP6), similar a CP1 y CP3. Clasifica prendas cosidas en 4 categorías: primera, segunda, saldo y descarte. Incluye sourceList/destinationList porque hay movimiento de prendas entre zonas de trabajo (costura → inspección QC). El modelo backend se llama Acabado (nombre legacy) pero representa la Inspección QC en el flujo de negocio — confuso históricamente pero funcional. Los datos de calidad (AQL, tipo defecto, reparaciones) vienen de upload Excel/PDF, fuera del estándar EPCIS.
CP8 — Acabados (Encajado) · Fuentes de datos por campo EPCIS
AggregationEvent · packing · sellable_accessible · action ADD
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | parentID — SGTIN lote (grupo de cajas por estilo) | FTL Trace | public.lotes | gtin | urn:epc:id:sgtin:7750342.62076b7f3c4701 |
childEPCs — SGTINs serializados o SSCC fallback | FTL Trace | public.inspecciones | serial_desde / serial_hasta (si ≤1000) | urn:epc:id:sgtin:7750342.xxx[0-N] |
childQuantityList[0] — Prendas primera (EA) | FTL Trace | public.inspecciones | prendas_primera | EA |
childQuantityList[1] — Prendas segunda (EA, qualifier «segunda») | FTL Trace | public.inspecciones | prendas_segunda | EA |
childQuantityList[2] — Prendas reproceso (EA, qualifier «reproceso») | FTL Trace | public.inspecciones | prendas_reproceso | EA |
childQuantityList[3] — Prendas descarte (EA, qualifier «descarte») | FTL Trace | public.inspecciones | prendas_descarte | EA |
ilmd.lotNumber — Número hoja de corte | CORE 04·HC | public.lotes | hoja_corte_id | 26-01875 |
| WHEN | eventTime — Timestamp encajado/embalaje | FTL Trace | public.inspecciones | fecha_inspeccion | 2026-05-28T20:30:00-05:00 |
recordTime — Registro en sistema | FTL Trace | public.inspecciones | record_time | 2026-05-28T20:30:00 |
| WHERE | readPoint — GLN zona acabados | FTL Trace | public.workstations | gln (cp_num = 8) | 7600001.00008.0 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001.00000.0 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[7] | packing |
disposition | Definidos | _CP_META[7] | disposition | sellable_accessible |
sourceList — GLN inspección QC | FTL Trace | public.workstations | gln (cp_num = 7) | 7600001.00007.0 |
destinationList — GLN acabados | FTL Trace | public.workstations | gln (cp_num = 8) | 7600001.00008.0 |
|
🔗 source/destination intra-planta — CP8 es AggregationEvent (como CP5). Las prendas QC-aprobadas ingresan desde inspección QC (CP7), salen embaladas desde zona acabados (CP8). action=ADD indica agregación de prendas en cajas.
|
| HOW |
⚠️ 3 sensores pendientes: Flujómetro vapor caldera · Balanza prendas · Balanza avíos (pequeña). sensorElementList vacío.
|
FTL Trace = schema public en DB del FTL Trace ·
CORE 04·HC = ERP confecciones (Trento) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py, epcis_helpers.py)
✅ PASAPORTE DIGITAL DE PRODUCTO (DPP) — Nace en CP8
Identificadores generados en CP8:
• SSCC: Número de pallet/caja (urn:epc:id:sscc:...) — único por contenedor
• Código QR: Generado por plataforma — contiene GTIN + SSCC + lote
• SGTINs serializados: Si serial_desde/hasta ≤1000 unidades, se generan N SGTINs individuales
Datos del DPP en CP8:
• SKU: Código del producto (heredado CORE)
• Tallas: Distribución por talla (heredada CORE)
• Tipo embalaje: Descripción packaging (especificaciones)
• Ubicación almacén: GLN destino (sistema)
• Prendas embaladas: 390 prendas (primera + segunda + reproceso, descarte excluido)
⚠️ Problemas identificados · CP8 Acabados
1. Modelo legacy invertido
Tabla public.inspecciones representa CP8, tabla public.acabados representa CP7. Históricamente invertidos pero funcionales. `_cp8_extras()` ya implementado.
2. childEPCs condicionado por serialización
SGTINs serializados solo si serial_desde/serial_hasta ≤1000 unidades. Sino SSCC fallback. Demo: probablemente vacío (sin serialización).
3. 3 sensores pendientes
Flujómetro vapor caldera (área acabados) · Balanza prendas · Balanza avíos pequeña. Integración técnica pendiente. sensorElementList vacío.
4. Parámetros CP8 faltantes
Fintech Lab debe gestionar entrega de parámetros adicionales (especificaciones embalaje, packaging, dimensiones caja, peso máximo, etc.).
📸 Dashboard FTL Trace — CP8 Acabados (Encajado)
FTL Trace Consolidada · CP8 Acabados · 2026-06-02 · AggregationEvent con 4 issues pendientes (modelo legacy, serialización, sensores, parámetros) · DPP nace aquí
Q1 · public.inspecciones — Encajado lote OP-6989
SELECT lote_id, prendas_primera, prendas_segunda, prendas_reproceso, prendas_descarte,
sscc, cantidad_embalada, fecha_inspeccion, cajas, estado
FROM inspecciones
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18';
Q2 · public.workstations — GLN CP8 acabados
SELECT id, ref, gln, cp_num, descripcion
FROM workstations
WHERE cp_num = 8;
Q3 · public.checkpoint_records — Evento EPCIS CP8
SELECT cp_num, estado, datos_epcis->>'parentID' AS parent_id,
datos_epcis->>'bizStep' AS biz_step,
datos_epcis->>'disposition' AS disposition,
datos_epcis->>'action' AS action
FROM checkpoint_records
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18'
AND cp_num = 8;
📝 Nota CP8: CP8 es un AggregationEvent (como CP5), donde se agrupan prendas inspeccionadas en cajas con SSCC único. Representa el encajado final. CP8 es el punto donde nace el DPP — el Pasaporte Digital de Producto con código QR, SSCC, SKU, tallas y datos de trazabilidad completa. El modelo backend se llama Inspeccion (nombre legacy) pero representa los Acabados en el flujo de negocio. La disposition=sellable_accessible indica que el producto está listo para venta — es el estado más avanzado del flujo EPCIS (vs in_progress en CP1-CP6, active en CP4/CP7, in_transit en CP9).
CP9 — Despacho · Fuentes de datos por campo EPCIS
ObjectEvent · shipping · in_transit
| Dimensión | Campo EPCIS | Base de datos | Tabla | Columna | Valor ejemplo |
| WHAT | quantityList[0] — Cantidad cajas (EA, qualifier «cajas») | FTL Trace | public.despachos | cantidad_cajas | EA |
quantityList[1] — Peso neto total (KGM) | FTL Trace | public.despachos | peso_neto_kg | KGM |
ilmd.lotNumber — Número hoja de corte | CORE 04·HC | public.lotes | hoja_corte_id | 26-01875 |
| WHEN | eventTime — Timestamp despacho | FTL Trace | public.despachos | fecha_despacho | 2026-05-29T08:00:00-05:00 |
recordTime — Registro en sistema | FTL Trace | public.despachos | record_time | 2026-05-29T08:00:00 |
| WHERE | readPoint — GLN muelle despacho | FTL Trace | public.workstations | gln (cp_num = 9) | 7600001.00009.0 |
bizLocation — GLN planta Trento | FTL Trace | public.org_settings | gln_principal | 7600001.00000.0 |
| WHY | bizStep | Definidos | dpp_constants.py | TIMELINE_BIZSTEPS[8] | shipping |
disposition | Definidos | _CP_META[8] | disposition | in_transit |
bizTransactionList[0] — PO cliente (type=po) | CORE | ERP 01·OP | numero_po | OP-cliente-001 |
bizTransactionList[1] — Bill of Lading (type=bol) | FTL Trace | public.despachos | bl_number | BL-2026-0001 |
bizTransactionList[2] — Factura (type=inv) | FTL Trace | public.despachos | factura_exportacion | FAC-2026-0123 |
bizTransactionList[3] — Número DAM (type=desadv) | Manual | public.despachos | numero_dam | — |
sourceList[0] — GLN Trento | FTL Trace | public.org_settings | gln_principal | 7600001.00000.0 |
destinationList[0] — GLN cliente final | FTL Trace | public.despachos | cliente_destino_gln | Peter Millar / Habitat / Escape |
|
🌍 CP9 es el único evento INTER-ORGANIZACIONAL puro — Trenton (source) envia a cliente final (destination). Un CP9 por PO (Orden de Compra del cliente) para integridad financiera.
|
| HOW |
✓ Sin sensores IoT en CP9. Evento de cierre sin integración sensor.
|
FTL Trace = schema public en DB del FTL Trace ·
CORE = ERP confecciones (Trento) ·
Definidos = valor fijo por estándar GS1 CBV, declarado en backend (dpp_constants.py, epcis_helpers.py) ·
Manual = ingreso manual desde app mobile
🔗 TRAZABILIDAD EPCIS 2.0 COMPLETA — CP1 → CP9 CERRADA
San Ramón (tela cruda)
↓ CP1 · Recepción rollo (ObjectEvent)
↓ CP2 · Corte paños (TransformationEvent) — ST7 sensor
↓ CP3 · Lavado externo QLever (ObjectEvent)
↓ CP4 · Corte piezas + GTIN nace (TransformationEvent) — ST3 sensor
↓ CP5 · Cierre QA (AggregationEvent)
↓ CP6 · Costura (TransformationEvent) — sensor costura
↓ CP7 · Inspección QC (ObjectEvent)
↓ CP8 · Acabados + DPP nace (AggregationEvent) — flujómetro, balanzas
↓ CP9 · DESPACHO (ObjectEvent)
↓
Peter Millar / Habitat / Escape (cliente final vía WTS broker)
⚠️ Problemas identificados · CP9 Despacho
1. 1 CP9 por PO — múltiples eventos si hay múltiples POs
Si el lote tiene varias POs (órdenes de compra) de clientes distintos, se generan múltiples eventos CP9. Implementación actual: validar. Decisión reunión: 1 CP9 por PO para integridad financiera.
2. BL y DAM manuales en app mobile
bl_number (Bill of Lading) y numero_dam (Documento Aduanal) se ingresan manualmente. Feature en app mobile pendiente.
3. GLN clientes pendiente de registro
GLNs de Peter Millar, Habitat, Escape deben estar registrados en BD (public.despachos.cliente_destino_gln). Estado: a verificar.
4. Parámetros CP9 faltantes
Fintech Lab debe gestionar entrega de parámetros: packing list, certificado de origen, puerto de destino, especificaciones de empaque internacional.
📸 Dashboard FTL Trace — CP9 Despacho
Pending — Screenshot placeholder
assets/images/cp9-despacho/Screenshot.png
FTL Trace Consolidada · CP9 Despacho · ObjectEvent inter-organizacional con 4 issues pendientes (múltiples POs, BL/DAM manual, GLNs clientes, parámetros) · Cierra cadena CP1→CP9
Q1 · public.despachos — Despacho lote OP-6989
SELECT lote_id, cantidad_cajas, peso_neto_kg, bl_number, factura_exportacion,
numero_dam, cliente_destino_gln, fecha_despacho, estado
FROM despachos
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18';
Q2 · public.workstations — GLN CP9 muelle despacho
SELECT id, ref, gln, cp_num, descripcion
FROM workstations
WHERE cp_num = 9;
Q3 · public.checkpoint_records — Evento EPCIS CP9
SELECT cp_num, estado, datos_epcis->>'bizStep' AS biz_step,
datos_epcis->>'disposition' AS disposition,
datos_epcis->>'sourceList' AS source_list,
datos_epcis->>'destinationList' AS destination_list
FROM checkpoint_records
WHERE lote_id = '0f35298c-eb1f-4188-bddb-c9a27fbbef18'
AND cp_num = 9;
📝 Nota CP9: CP9 es un ObjectEvent (como CP1/CP3/CP7) y el único evento inter-organizacional puro del flujo EPCIS. Cierra la trazabilidad completa desde San Ramón (CP1) hasta el cliente final (Peter Millar / Habitat / Escape vía WTS broker). Incluye 4 bizTransactions (PO, BL, Factura, DAM) que documentan la exportación. La disposition=in_transit indica que el producto está en camino al cliente. Decisión reunión: 1 CP9 por PO para mantener integridad financiera — si un lote tiene múltiples órdenes de compra, se generan múltiples eventos CP9.
7. Pendientes
- ✅
GLN San Ramón — FTL Trace: ya registrado en
public.proveedores (Textil San Ramón S.A.C.).
gln = 7750342100003 →
urn:epc:id:sgln:7750342.10000.0
El sourceList de CP1 se resuelve automáticamente vía _cp1_extras().
- ✅
GLN San Ramón — Dolibarr: campo barcode actualizado en
TEXTIL SAN RAMON S A (SU-726, rowid=102).
barcode = 7750342100003 · tipo EAN13 (convención GLN-13 GS1).
Primer proveedor con GLN registrado — establece la convención para los demás.
- 🟡
GLN QLever (lavandería): registrar en proveedores.gln
para sourceList de CP3.
- 🟡
Validación sandbox GS1: copiar JSON del evento CP1 del lote
62076b7f3c4701 al
GS1 EPCIS Sandbox
para confirmar conformidad completa.
- 🟡
CP4 disposition: cambiar de in_progress a
active en _CP_META (confirmado en Excel v9).
- 🔵
Resume CP2: backend debe guardar estado "iniciado" para que
la app mobile pueda retomar si se cierra la sesión.
- 🔵
GLN San Ramón en GS1 Perú: solicitar GCP oficial para que
el SGTIN del lote de tela use el prefijo del proveedor real en lugar del proxy Trento.