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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user