Files
AdrianoDev a59b4e0c0e crea-fascicolo: aprire il fascicolo di chi ha gia' un account
"Anche un admin deve avere il suo referto" (Adriano). Il codice lo permetteva
gia': il referto si aggancia all'utente, non al ruolo. Mancava il modo di
creare la riga che lega utente e fascicolo senza passare da seed-demo, che
inventa anche la persona e le risposte.

Non indovina niente: --sesso e' obbligatorio perche' entra nelle curve dei
punteggi, la data di nascita si puo' omettere e allora l'eta' resta vuota -
meglio un campo vuoto di una data plausibile e falsa. Si ferma se quell'utente
ha gia' un fascicolo: due fascicoli per la stessa persona sono due storie
parallele, e nessuna e' quella giusta.

Il fascicolo nasce vuoto: il referto dice "non hai ancora compilato il
questionario" finche' la persona non lo compila, che e' il percorso vero.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EndnceRA5WnA6rvA5iV9WL
2026-09-03 13:02:54 +00:00

76 lines
3.5 KiB
TypeScript

/**
* 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 <username> --nome <N> --cognome <C> --sesso <M|F>');
console.error(' opzionali: --nascita AAAA-MM-GG --email <mail> --telefono <n>');
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.');