longevity: schema misure con verifica/verificata_da/verificata_at + migrazione
Aggiunge le tre colonne allo schema (db.ts) e una funzione migra() idempotente che le aggiunge via ALTER TABLE a un longevity.db esistente (PRAGMA table_info per capire cosa manca): CREATE TABLE IF NOT EXISTS non tocca una tabella gia' creata, e in produzione un longevity.db esiste dal 03/09/2026. misureValideAlla (motore/index.ts) lascia entrare anche le misure fuori range confermate (verifica = 'confermata'), non solo quelle nel range. Refs #7 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -40,8 +40,8 @@
|
||||
* applicarla, e restituisce `null` se il registro (dato modificabile senza
|
||||
* migrazioni) ha una riga incompleta, invece del punteggio pieno che dava
|
||||
* `lerp` con estremi indefiniti; e la lettura delle misure esclude
|
||||
* `fuori_range = 1` (§9 della spec), in attesa della colonna di conferma
|
||||
* (punto aperto in §12).
|
||||
* `fuori_range = 1` (§9 della spec) salvo conferma esplicita del trainer
|
||||
* (`misure.verifica = 'confermata'`, issue #7: `verificaMisura` in `misure.ts`).
|
||||
*/
|
||||
|
||||
import type Database from 'better-sqlite3';
|
||||
@@ -156,9 +156,11 @@ export const FINESTRA_GIORNI: number | null = null;
|
||||
*
|
||||
* Stessa esclusione di `fuori_range = 1` che c'era prima nella lettura diretta (§9 della
|
||||
* spec): una misura fuori dal range dichiarato non entra, né dalla sessione corrente né da
|
||||
* una precedente. La colonna della conferma non esiste ancora (§12 della spec, issue #7):
|
||||
* quando ci sarà, questo filtro andrà rilassato per lasciar passare le misure confermate,
|
||||
* non tolto del tutto.
|
||||
* una precedente — A MENO che il trainer l'abbia confermata (`verifica = 'confermata'`,
|
||||
* colonna aggiunta dall'issue #7, scritta da `verificaMisura` in `misure.ts`): da quel
|
||||
* momento in poi entra nello score come qualunque altra misura, qui e in ogni sessione
|
||||
* successiva che la eredita. `verifica = 'scartata'`, o mai verificata (NULL), resta
|
||||
* esclusa come prima.
|
||||
*/
|
||||
export function misureValideAlla(db: Database.Database, sessioneId: number): Map<string, number> {
|
||||
const sessione = db.prepare(
|
||||
@@ -170,7 +172,7 @@ export function misureValideAlla(db: Database.Database, sessioneId: number): Map
|
||||
`SELECT m.test_id AS test_id, m.valore_num AS valore_num, s2.data AS data
|
||||
FROM misure m
|
||||
JOIN sessioni s2 ON s2.id = m.sessione_id
|
||||
WHERE m.client_code = ? AND m.fuori_range = 0 AND m.valore_num IS NOT NULL
|
||||
WHERE m.client_code = ? AND (m.fuori_range = 0 OR m.verifica = 'confermata') AND m.valore_num IS NOT NULL
|
||||
AND (s2.data < ? OR (s2.data = ? AND s2.id <= ?))
|
||||
ORDER BY s2.data DESC, s2.id DESC, m.id DESC`
|
||||
).all(sessione.client_code, sessione.data, sessione.data, sessione.id) as
|
||||
|
||||
Reference in New Issue
Block a user