Produzioni: nessun ruolo né legame con la stazione; ricetta non assegnata misurabile via barcode #24
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
GRAVITÀ: media
FILE: src/backend/api/routers/production.py:46-163 ; src/backend/services/production_service.py:179 ; src/frontend/flask_app/blueprints/measure.py:390-408, 188-225, 269
COSA: gli endpoint dei run chiedono solo
get_current_user.open_runnon verificaStationRecipeAssignmentnérecipe.active. Lato Flask il filtro per stazione vale solo per l'elenco: barcode,/measure/start/<id>,/measure/execute/<id>accettano qualunque ricetta.INPUT: Maker senza MeasurementTec apre un run su stazione a cui la ricetta non è assegnata.
VERIFICATO: script pytest → "RUN aperto da Maker (no MeasurementTec, ricetta non assegnata alla stazione) -> 201".
ORIGINE: revisione fable del 21/09/2026 su ramo
V3.0.0, commit8cc5e82. Documento completo:_output/2026-09-21-TieMeasureFlow-revisione.mdsu Wasabi.⚡ jeeg — preso in carico 2026-09-21T20:23:03Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI (passo 1) — ramo
lavoro/jeeg, worktree~/lavoro/TieMeasureFlowsu jeeg, lotto A1+B2MODIFICHE backend (lotto A1): src/backend/api/routers/production.py — aprire/avanzare/pausa/ripresa/chiusura richiedono ruolo MeasurementTec o Supervisor o admin (usa i
require_*esistenti in auth/dipendenze). src/backend/services/production_service.pyopen_run— rifiuta 422/409 se la ricetta non èactiveo, quando la stazione ha assegnazioni (StationRecipeAssignment), se la ricetta non è fra quelle assegnate. Una stazione senza alcuna assegnazione resta libera (comportamento attuale del filtro elenco: verificalo in station_service e replica la stessa regola).MODIFICHE frontend (lotto B2): src/frontend/flask_app/blueprints/measure.py —
lookup_barcode,start_sequence,task_execute: applica lo stesso filtro per stazione dell'elenco; ricetta non assegnata → 403/messaggio «ricetta non assegnata a questa stazione».TEST: backend: Maker senza MeasurementTec → 403; ricetta non assegnata → rifiuto; assegnata → 201. frontend: src/frontend/flask_app/tests/test_measure_station_filter.py — barcode e start di ricetta non assegnata rifiutati.
Soluzione
ESITO: fatto
COSA: Backend: aprire/avanzare/pausa/ripresa/chiusura richiedono MeasurementTec, Supervisor o admin;
open_runrifiuta ricetta non attiva o non assegnata alla stazione. Frontend: barcode, start e task_execute applicano il filtro di stazione (403). Prova originale rilanciata: run aperto da Maker → 403.COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a
d483fa1): bfe66a5;befdce5PROVA:
uv run --extra server --extra client --extra dev pytest -q→ 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).