/** * crea-fascicolo.ts — apre il fascicolo Longevity di una persona che ha già un account. * * A COSA SERVE: il referto si aggancia all'utente, non al ruolo (`codicePerUtenteLoggato`), * quindi chiunque abbia un account — cliente, trainer o admin — può avere il proprio, ma * solo se esiste la riga che lo lega al fascicolo. Finché non c'è il gestionale trainer, * questo è l'unico modo di crearla senza inventarsi dati come fa seed-demo. * * COME SI USA: * npm run crea-fascicolo -- --utente nicola --nome Nicola --cognome Antonelli --sesso M * opzionali: --nascita 1980-01-31 --email x@y.it --telefono 333... * percorsi: --utenti-db / --longevity-db / --identity-db, oppure DB_PATH / * LONGEVITY_DB_PATH / IDENTITY_DB_PATH (gli stessi nomi del container). * * ⚠️ NON inventa niente. `--sesso` è obbligatorio perché entra nel calcolo dei punteggi * (le curve dei test fisici sono distinte per sesso), e la data di nascita si può omettere * ma allora l'età della sessione resta vuota: meglio un campo vuoto che una data * plausibile e falsa. * ⚠️ Si ferma se quell'utente ha già un fascicolo: due fascicoli per la stessa persona * significano due storie parallele, e nessuna delle due è quella giusta. * ⚠️ Il fascicolo nasce VUOTO: il referto dirà «non hai ancora compilato il questionario» * finché la persona non lo compila da sé, che è il percorso vero. * * DIPENDE DA: tsx (devDependency). */ import { createLongevityDb, createIdentityDb } from '../src/lib/longevity/db'; import { creaCliente, codicePerUtente } from '../src/lib/longevity/anagrafica'; import { createDb } from '../src/lib/db'; const argv = process.argv.slice(2); const opt = (nome: string, def?: string): string | undefined => { const i = argv.indexOf(nome); return i >= 0 && argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[i + 1] : def; }; const utente = opt('--utente'); const nome = opt('--nome'); const cognome = opt('--cognome'); const sesso = opt('--sesso'); if (!utente || !nome || !cognome || (sesso !== 'M' && sesso !== 'F')) { console.error('Uso: npm run crea-fascicolo -- --utente --nome --cognome --sesso '); console.error(' opzionali: --nascita AAAA-MM-GG --email --telefono '); process.exit(1); } const utentiDb = createDb(opt('--utenti-db', process.env.DB_PATH ?? 'data/piattaforme.db')); const longevity = createLongevityDb(opt('--longevity-db', process.env.LONGEVITY_DB_PATH ?? 'data/longevity.db')); const identity = createIdentityDb(opt('--identity-db', process.env.IDENTITY_DB_PATH ?? 'data/identity.db')); const riga = utentiDb.prepare('SELECT id, role FROM users WHERE username = ?').get(utente) as { id: number; role: string } | undefined; if (!riga) { console.error(`L'utente "${utente}" non esiste: crealo prima con npm run create-user.`); process.exit(1); } const esistente = codicePerUtente(identity, riga.id); if (esistente) { console.error(`"${utente}" ha già il fascicolo ${esistente}: non ne apro un secondo.`); process.exit(1); } const code = creaCliente(identity, longevity, { nome, cognome, sesso, data_nascita: opt('--nascita'), email: opt('--email'), telefono: opt('--telefono'), user_id: riga.id, }); console.log(`fascicolo ${code} aperto per ${nome} ${cognome}`); console.log(` utente ${utente} (id ${riga.id}, ruolo ${riga.role})`); console.log(` nascita ${opt('--nascita') ?? '— non dichiarata: l\'età delle sessioni resterà vuota'}`); console.log('\nÈ vuoto: da /longevity/questionario la persona lo compila e il referto compare.');