FintechLab × Trento — FTL Trace TX

Reporte: Proceso Productivo y Trazabilidad EPCIS 2.0

Datos maestros · Proceso producto · Trazabilidad GS1 por checkpoint · 01 junio 2026

✓ Backend fixes aplicados ✓ Workstations FTL Trace ✓ Workstations FTL Core GTIN ref: 62076b7f3c4701 OP-6989 · Hábitat
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
1. Estaciones de Trabajo en Dolibarr (FTL Core) pruebas2.dpp.fintechlab.la
Estaciones de trabajo FTL-CP1 a FTL-CP9 en Dolibarr MRP
Dolibarr MRP · Módulo "Estaciones de trabajo" · 9 checkpoints FTL registrados · 01-jun-2026
🔗 Ver en Dolibarr →
📋 9 workstations · tabla llx_workstation_workstation
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 (0000100009) 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.

📦 OC-TELA-1779763856 · ref. proveedor: OC 3-2026-39 · estado: Recibida
# Partida Color Producto Kg Fecha ingreso
126-01874WINTER WHITEJERSEY FLAME 20/1 PEINADO 100% COTTON140.618/03/2026
226-01875WINTER WHITEJERSEY FLAME 20/1 PEINADO 100% COTTON561.318/03/2026
326-01876HONEYJERSEY FLAME 20/1 PEINADO 100% COTTON422.518/03/2026
426-01877SIENNAJERSEY FLAME 20/1 PEINADO 100% COTTON606.418/03/2026
526-01878FUCHSIAJERSEY FLAME 20/1 PEINADO 100% COTTON204.818/03/2026
626-01879TEALJERSEY FLAME 20/1 PEINADO 100% COTTON474.018/03/2026
726-01880HARBORJERSEY FLAME 20/1 PEINADO 100% COTTON133.018/03/2026
826-01881HARBORJERSEY FLAME 20/1 PEINADO 100% COTTON563.618/03/2026
926-01882LENTILJERSEY FLAME 20/1 PEINADO 100% COTTON259.318/03/2026
1026-01883BLACKJERSEY FLAME 20/1 PEINADO 100% COTTON601.718/03/2026
Total 3 407.2 Kg
Las partidas resaltadas (26-01875 y 26-01877) son las de referencia para OP-6989 Hábitat.
Ficha OC-TELA-1779763856 en Dolibarr FTL Core
FTL Core · OC-TELA-1779763856 · 10 líneas recibidas · 01-jun-2026
🔗 Ver en FTL Core →
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
🔍 Data lineage — de dónde viene cada campo del evento EPCIS
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 · Panel EPCIS 2.0 · 5 dimensiones
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
🧩 Datos CORE para Trazabilidad — fuentes y mapeo EPCIS
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
🗃 Evidencia — queries ejecutados · 2026-06-01 10:03:43 · DB del FTL Trace + FTL Core

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
🔍 Data lineage — de dónde viene cada campo del evento EPCIS
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)
Correcciones EPCIS CP2 aplicadas · 01-jun-2026
# Á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
FTL Trace — CP2 Corte Paños · Panel EPCIS 2.0 · Vista Consolidada
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
🔍 Data lineage — de dónde viene cada campo del evento EPCIS
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)
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.
7. Pendientes
  • GLN San Ramón — FTL Trace: ya registrado en public.proveedores (Textil San Ramón S.A.C.).
    gln = 7750342100003urn: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.