SPC: Cp/Cpk e limiti di controllo usano la sigma globale, non la within (MR-bar/d2) #19

Closed
opened 2026-09-21 20:14:44 +00:00 by Adriano · 3 comments
Owner

GRAVITÀ: media
FILE: src/backend/services/spc_service.py:88-106, :161-169
COSA: Cp = Pp·sqrt((n-1)/n): lo stesso indice due volte. Il docstring dice sigma_within. I limiti della carta a valori individuali usano la sigma globale: una deriva allarga i limiti e non viene segnalata.
INPUT: 13 valori intorno a 10.00 poi 12 intorno a 10.08, tolleranza 9.8–10.2 → limiti del codice 10.1718/9.9106, fuori controllo []; con MR-bar/1.128 → 10.0944/9.988, fuori controllo [5,17,24].
VERIFICATO: lettura di spc_service.py:88-106 (stats.stdev per Cp, stats.pstdev per Pp) + script numerico del revisore.

ORIGINE: revisione fable del 21/09/2026 su ramo V3.0.0, commit 8cc5e82. Documento completo: _output/2026-09-21-TieMeasureFlow-revisione.md su Wasabi.

GRAVITÀ: media FILE: src/backend/services/spc_service.py:88-106, :161-169 COSA: Cp = Pp·sqrt((n-1)/n): lo stesso indice due volte. Il docstring dice `sigma_within`. I limiti della carta a valori individuali usano la sigma globale: una deriva allarga i limiti e non viene segnalata. INPUT: 13 valori intorno a 10.00 poi 12 intorno a 10.08, tolleranza 9.8–10.2 → limiti del codice 10.1718/9.9106, fuori controllo []; con MR-bar/1.128 → 10.0944/9.988, fuori controllo [5,17,24]. VERIFICATO: lettura di spc_service.py:88-106 (`stats.stdev` per Cp, `stats.pstdev` per Pp) + script numerico del revisore. ORIGINE: revisione fable del 21/09/2026 su ramo `V3.0.0`, commit 8cc5e82. Documento completo: `_output/2026-09-21-TieMeasureFlow-revisione.md` su Wasabi.
Adriano added the bug label 2026-09-21 20:14:44 +00:00
Adriano added the assegnata:jeeg label 2026-09-21 20:22:51 +00:00
Author
Owner

⚡ jeeg — preso in carico 2026-09-21T20:22:52Z
ramo: lavoro/jeeg · capacità: docker, gpu, systemd

⚡ jeeg — **preso in carico** 2026-09-21T20:22:52Z ramo: `lavoro/jeeg` · capacità: docker, gpu, systemd
Author
Owner

ANALISI (passo 1) — ramo lavoro/jeeg, worktree ~/lavoro/TieMeasureFlow su jeeg, lotto A3

MODIFICHE: src/backend/services/spc_service.py — (a) capability: sigma_within = MRbar / 1.128 (media delle escursioni mobili |x_i − x_{i−1}| nell'ordine cronologico in cui arrivano i valori); Cp e Cpk usano sigma_within; Pp e Ppk usano la deviazione standard campionaria complessiva (stats.stdev, n−1), non pstdev. Se MRbar == 0 → Cp/Cpk None. (b) carta di controllo a valori individuali: UCL/LCL = media ± 3·sigma_within (= media ± 2.66·MRbar). Aggiorna docstring. Se il modello di risposta ha std_dev, resta la campionaria complessiva; aggiungi std_dev_within solo se il modello Pydantic lo consente senza rompere il frontend (campo opzionale).
TEST: serie 13 valori ~10.00 + 12 valori ~10.08 (tol 9.8–10.2): Cp ≠ Pp, punti fuori controllo rilevati; serie costante → None; n<2 → None; unilaterale → solo Cpk. Adegua i valori attesi dei test SPC esistenti ricalcolandoli a mano nel test (formula esplicita), non copiando l'output.
NON TOCCARE: src/frontend/flask_app/static/js/spc-charts.js.

ANALISI (passo 1) — ramo `lavoro/jeeg`, worktree `~/lavoro/TieMeasureFlow` su jeeg, lotto A3 MODIFICHE: src/backend/services/spc_service.py — (a) capability: `sigma_within = MRbar / 1.128` (media delle escursioni mobili |x_i − x_{i−1}| nell'ordine cronologico in cui arrivano i valori); Cp e Cpk usano sigma_within; Pp e Ppk usano la deviazione standard campionaria complessiva (`stats.stdev`, n−1), non `pstdev`. Se MRbar == 0 → Cp/Cpk None. (b) carta di controllo a valori individuali: UCL/LCL = media ± 3·sigma_within (= media ± 2.66·MRbar). Aggiorna docstring. Se il modello di risposta ha `std_dev`, resta la campionaria complessiva; aggiungi `std_dev_within` solo se il modello Pydantic lo consente senza rompere il frontend (campo opzionale). TEST: serie 13 valori ~10.00 + 12 valori ~10.08 (tol 9.8–10.2): Cp ≠ Pp, punti fuori controllo rilevati; serie costante → None; n<2 → None; unilaterale → solo Cpk. Adegua i valori attesi dei test SPC esistenti ricalcolandoli a mano nel test (formula esplicita), non copiando l'output. NON TOCCARE: src/frontend/flask_app/static/js/spc-charts.js.
Author
Owner

Soluzione

ESITO: fatto
COSA: Cp/Cpk da sigma within (MRbar/1.128, valori in ordine cronologico: verificato order_by measured_at), Pp/Ppk dalla deviazione campionaria complessiva; UCL/LCL della carta a valori individuali = media ± 3·sigma within. Campo opzionale std_dev_within. ⚠️ I Cp/Cpk mostrati cambiano rispetto a prima: era l'errore.
COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): 7249cb8
PROVA: 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).

**Soluzione** ESITO: fatto COSA: Cp/Cpk da sigma within (MRbar/1.128, valori in ordine cronologico: verificato `order_by measured_at`), Pp/Ppk dalla deviazione campionaria complessiva; UCL/LCL della carta a valori individuali = media ± 3·sigma within. Campo opzionale `std_dev_within`. ⚠️ I Cp/Cpk mostrati cambiano rispetto a prima: era l'errore. COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): 7249cb8 PROVA: `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).
Adriano removed the assegnata:jeeg label 2026-09-21 21:56:23 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#19