diff --git a/AGENTS.md b/AGENTS.md index 050df8c..3d2f8aa 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -214,9 +214,13 @@ medir algo nuevo no obliga a migrar el esquema a las tres de la mañana. Vistas: `v_run_summary`, `v_episode_summary`, `v_failure_breakdown`. Realtime está publicado en `events`, `pallet_states` y `episodes`; Live se alimenta de ahí. -`task` es un campo (`induction` | `palletizing`), no una rama del código: así la línea -base de inducción sigue siendo comparable cuando entre el paletizado, y el jurado ve -evolución en vez de borrón y cuenta nueva. +`task` es un campo, no una rama del código: así la línea base sigue siendo comparable +cuando entra una tarea nueva, y el jurado ve evolución en vez de borrón y cuenta nueva. +En el paletizado real la tarea es **de dónde se coge** el paquete —`table` | `conveyor` +| `truck`, el mismo identificador que `runs.config.source`—, que es lo que permite +comparar mesa, cinta y camión entre sí. `induction`, `palletizing` y +`paletizado-guionizado` se quedan en el CHECK como histórico: dice qué se puede +ALMACENAR, no qué se produce hoy. --- diff --git a/backend/sql/001_schema.sql b/backend/sql/001_schema.sql index 3171a6c..cff6a52 100644 --- a/backend/sql/001_schema.sql +++ b/backend/sql/001_schema.sql @@ -93,7 +93,11 @@ begin loop execute format('alter table %I drop constraint if exists %I', t, t || '_task_check'); execute format( - 'alter table %I add constraint %I check (task in (''induction'', ''palletizing'', ''paletizado-guionizado''))', + 'alter table %I add constraint %I check (task in (' + -- Vigentes: la fuente de la que se coge el paquete, igual que config.source. + '''table'', ''conveyor'', ''truck'', ' + -- Histórico: lo que ya está subido. Este CHECK dice qué se puede ALMACENAR. + '''induction'', ''palletizing'', ''paletizado-guionizado''))', t, t || '_task_check'); end loop; end $$; diff --git a/backend/theker_telemetry/schema.py b/backend/theker_telemetry/schema.py index fc01f98..44426f6 100644 --- a/backend/theker_telemetry/schema.py +++ b/backend/theker_telemetry/schema.py @@ -34,7 +34,15 @@ # Tareas que el repo sabe medir. La tarea es un campo, no una rama del código: así la # línea base de inducción sigue siendo comparable cuando entre el paletizado. -TASKS = frozenset({"induction", "palletizing", "paletizado-guionizado"}) +# +# En el paletizado real la tarea es DE DÓNDE SE COGE el paquete —mesa, cinta o camión, +# con el mismo identificador que `runs.config.source`—, y no una etiqueta única para los +# nueve niveles: son tres tareas distintas y compararlas entre sí es justo lo que se le +# pide a la plataforma. Los otros tres son histórico y siguen siendo almacenables. +TASKS = frozenset({ + "table", "conveyor", "truck", + "induction", "palletizing", "paletizado-guionizado", +}) @dataclass diff --git a/frontend/lib/ui.ts b/frontend/lib/ui.ts index 1ad7a83..18e9ee9 100644 --- a/frontend/lib/ui.ts +++ b/frontend/lib/ui.ts @@ -158,7 +158,13 @@ export function clockTime(iso: string | null | undefined): string { }); } +/* La tarea es de dónde se coge el paquete. El identificador viaja en inglés —el mismo + * que `runs.config.source`— y se traduce aquí: la pantalla no lo enseña crudo. */ export const TASK_TEXT: Record = { + table: "mesa", + conveyor: "cinta", + truck: "camión", + // Histórico, de antes de separar la tarea por fuente. induction: "inducción", palletizing: "paletizado", "paletizado-guionizado": "paletizado guionizado",