Longevity: il registro si semina da solo, e un cliente demo con un referto vero

seedRegistro/seedPesi esistevano dal 22/08 ed erano chiamati SOLO dai test: su
un database nuovo il registro restava vuoto, campiDelQuestionario non trovava
niente e la pagina del questionario si apriva SENZA DOMANDE. Non era un problema
della demo, era il primo avvio in produzione - lo stesso difetto gia' visto in
questo ramo (una funzione corretta che nessuno chiama), con la stessa
correzione: agganciarla dove non si puo' dimenticare, cioe' alla creazione del
database. Entrambe le semine sono INSERT OR REPLACE, quindi rilanciarle e' a
vuoto, e i punteggi gia' emessi non cambiano (sono congelati nella tabella
"score", che e' quello che il referto legge). Quattro test lo presidiano.

scripts/seed-demo.ts crea l'utente con ruolo "cliente", il fascicolo (passando
da creaCliente, l'unico varco fra identity e longevity) e compila il
questionario attraverso salvaDalForm - lo stesso percorso della pagina vera,
consenso compreso - cosi' i punteggi vengono calcolati e congelati come in
produzione. Si ferma se l'utente esiste gia': rifare la demo su dati esistenti
vuol dire duplicare o cancellare un fascicolo, e non e' una decisione da script.

Verificato girando l'app: Energy 74,5/100 con copertura 50%, Performance e
Recovery dichiarati insufficienti (5% e 35%) con l'elenco di cosa manca, Fitness
Age assente. E' la regola di Nicola all'opera - annullare invece di stimare - ed
e' lo stato vero del prodotto: nel registro ci sono solo le 20 domande del
questionario, i test fisici arrivano col gestionale trainer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EndnceRA5WnA6rvA5iV9WL
This commit is contained in:
AdrianoDev
2026-09-03 12:27:24 +00:00
parent 6301f521fd
commit 18b0877026
5 changed files with 218 additions and 2 deletions
+22 -1
View File
@@ -1,6 +1,7 @@
import Database from 'better-sqlite3';
import { mkdirSync } from 'node:fs';
import { dirname } from 'node:path';
import { seedRegistro, seedPesi, MODEL_VERSION } from './registro';
/**
* Sotto questa copertura di peso un elemento calcolato e' 'insufficiente' e non ha valore.
@@ -127,8 +128,28 @@ function apri(p: string, schema: string): Database.Database {
return db;
}
/**
* ⚠️ Il registro dei test e i pesi si seminano QUI, all'apertura del database.
*
* Fino al 03/09/2026 `seedRegistro` e `seedPesi` esistevano, erano giusti, ed erano
* chiamati **solo dai test**: su un database nuovo il registro restava vuoto, quindi
* `campiDelQuestionario` non trovava niente e la pagina del questionario si apriva
* **senza domande**. Non era un difetto della demo: era il primo avvio in produzione.
* È lo stesso difetto già visto una volta in questo ramo — «una funzione corretta che
* nessuno chiama» — e la correzione è la stessa: agganciarla dove non si può dimenticare.
*
* Entrambe le semine sono `INSERT OR REPLACE`, quindi rilanciarle è a vuoto; e il
* registro è **dato di prodotto** (le domande e i pesi decisi con Nicola), non dato di
* un cliente: riallinearlo a ogni avvio è voluto, così una domanda modificata in
* `registro.ts` entra col rilascio invece che con una migrazione a mano.
* ⚠️ I punteggi già emessi non cambiano: sono congelati in `score` e il referto legge
* quelli, mai un ricalcolo (vedi `refertoDi`).
*/
export function createLongevityDb(path?: string): Database.Database {
return apri(path ?? process.env.LONGEVITY_DB_PATH ?? 'data/longevity.db', SCHEMA_LONGEVITY);
const db = apri(path ?? process.env.LONGEVITY_DB_PATH ?? 'data/longevity.db', SCHEMA_LONGEVITY);
seedRegistro(db);
seedPesi(db, MODEL_VERSION);
return db;
}
export function createIdentityDb(path?: string): Database.Database {