longevity: collega i test fisici a calcolaSessione, misure valide fra sessioni

Un check-up e un questionario sono sessioni separate: prima di questo
commit calcolaSessione leggeva solo le misure della sessione corrente,
quindi l'una non vedeva mai i dati dell'altra. misureValideAlla (nuova,
motore/index.ts) legge invece, per ogni test_id, la misura valida piu'
recente del cliente fra tutte le sue sessioni fino a quella data.
sottoDominiDellaSessione unisce sotto-domini da curva (questionario) e
sotto-domini fisici (sottoDominiFisici) in un'unica mappa, usata sia da
calcolaSessione (livello 1) sia da vista.ts (sottoDominiPresenti, per
"cosa manca" nel referto — non piu' una query separata sulla tabella
misure). Aggiornati i commenti di seed-demo.ts (il registro ora contiene
anche le voci f_*, anche se questa demo non le compila).

Test nuovi in motore-fisici-sessione.test.ts: il caso demo() dell'oracolo
end-to-end, un ingresso mancante o l'eta assente che lascia il
sotto-dominio fuori, la combinazione fra sessioni (check-up dopo il
questionario, sessione precedente che non vede il futuro, misura fuori
range sostituita dalla precedente valida). 202 test esistenti restano
verdi, 9 nuovi: 211 totali. tsc --noEmit: 0 errori (0 anche su 13d8cdd).

Refs #1
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-26 12:38:34 +00:00
parent 48910d84ba
commit 4968b75472
4 changed files with 379 additions and 63 deletions
+8 -7
View File
@@ -26,13 +26,14 @@
* ⚠️ I dati sono INVENTATI e vanno detti tali a chi guarda: è una persona che non esiste.
* Il referto che ne esce non è un esempio clinico, è un esempio di interfaccia.
*
* ⚠️ Cosa mostrerà davvero il radar: il registro contiene oggi SOLO le 20 domande del
* questionario — i test fisici (handgrip, VO2max, plank, composizione corporea...) non
* hanno ancora una riga, arrivano col gestionale trainer. Quindi escono con un valore gli
* assi che il questionario copre almeno al 40%, e gli altri restano dichiarati
* insufficienti con l'elenco di cosa manca. Non è un difetto della demo: è lo stato del
* prodotto, ed è anche la regola di Nicola che si vede all'opera (annullare invece di
* stimare).
* ⚠️ Cosa mostrerà davvero il radar: questo script compila SOLO il questionario (le 20
* domande `q_*`) tramite `salvaDalForm` — non registra nessuna misura fisica (`f_*`), che
* arriva dal check-up col gestionale trainer, non da qui. Il registro le contiene entrambe
* (vedi `registro.ts`), ma senza `registraMisure` per le `f_*` questa sessione non ne vede
* nessuna. Quindi escono con un valore gli assi che il questionario copre almeno al 40%, e
* gli altri restano dichiarati insufficienti con l'elenco di cosa manca. Non è un difetto
* della demo: è lo stato di UNA sessione di solo questionario, ed è anche la regola di
* Nicola che si vede all'opera (annullare invece di stimare).
*
* DIPENDE DA: tsx (devDependency) — il codice del prodotto è TypeScript e questo script
* lo usa davvero invece di riscriverne una copia in SQL.