longevity: verifica misure fuori range in scheda cliente, link a crea accesso

Scheda cliente ([code].astro): sezione "Misure da verificare" da
misureDaVerificare (id, range) al posto di misureFuoriRange (nessun id,
nessuna azione); ogni riga ha due form verso /api/longevity/gestionale/verifica
(conferma/scarta), messaggio dopo la decisione, e link "Crea accesso al
referto" quando il cliente non ha ancora un accesso.

gestionale.ts: rimossa misureFuoriRange (e il tipo MisuraFuoriRange), sostituita
ovunque da misureDaVerificare (misure.ts), l'unica con id e range utile alle
azioni. accesso.astro: link "Torna alla scheda" in tutti gli stati.

Refs #7
Refs #8

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-26 13:11:38 +00:00
parent 6cbb205064
commit 2c9a74f849
5 changed files with 67 additions and 37 deletions
@@ -9,7 +9,8 @@ import { join } from 'node:path';
import { tmpdir } from 'node:os';
import { createLongevityDb, createIdentityDb } from '../../src/lib/longevity/db';
import { seedRegistro, seedPesi, MODEL_VERSION } from '../../src/lib/longevity/registro';
import { salvaCheckup, sessioniDi, misureFuoriRange } from '../../src/lib/longevity/gestionale';
import { salvaCheckup, sessioniDi } from '../../src/lib/longevity/gestionale';
import { misureDaVerificare } from '../../src/lib/longevity/misure';
import { salvaDalForm, refertoDi } from '../../src/lib/longevity/vista';
import {
creaCliente, elencoClientiParam, clienteDaCodiceParam, etaDelClienteParam, apriFascicolo,
@@ -125,7 +126,7 @@ describe('salvaCheckup rifiuta prima di scrivere: nessuna traccia parziale', ()
});
describe('le misure fuori range restano nel fascicolo, marcate e leggibili', () => {
it('una misura oltre il range di plausibilità (f_peso_kg, max 250) si salva, si marca, ed esce da misureFuoriRange', () => {
it('una misura oltre il range di plausibilità (f_peso_kg, max 250) si salva, si marca, ed esce da misureDaVerificare', () => {
const db = dbPronto();
const esito = salvaCheckup(db, {
client_code: 'ISL-0001', data: '2026-09-26', eta: 38, operatore: 'n',
@@ -140,9 +141,9 @@ describe('le misure fuori range restano nel fascicolo, marcate e leggibili', ()
).get(esito.sessioneId) as { fuori_range: number };
expect(riga.fuori_range).toBe(1);
const elenco = misureFuoriRange(db, 'ISL-0001');
const elenco = misureDaVerificare(db, 'ISL-0001');
expect(elenco.length).toBe(1);
expect(elenco[0]).toMatchObject({ test_id: 'f_peso_kg', valore: 500, data: '2026-09-26' });
expect(elenco[0]).toMatchObject({ test_id: 'f_peso_kg', valore_num: 500, data: '2026-09-26' });
});
});
+21 -1
View File
@@ -1,6 +1,6 @@
// tests/longevity/pagine.test.ts
import { describe, it, expect } from 'vitest';
import { readFileSync, existsSync } from 'node:fs';
import { readFileSync, existsSync, readdirSync } from 'node:fs';
import { join } from 'node:path';
const leggi = (p: string) => readFileSync(join(process.cwd(), p), 'utf8');
@@ -146,4 +146,24 @@ describe('il gestionale del trainer (Unità 2b)', () => {
expect(src).toMatch(/admin/);
expect(src).toMatch(/Astro\.redirect\(\s*['"`]\/longevity\/io['"`]/);
});
it('la scheda cliente porta le azioni di verifica di una misura fuori range (#7) e il link per creare l\'accesso (#8)', () => {
const src = leggi('src/pages/longevity/gestionale/cliente/[code].astro');
expect(src).toMatch(/action=["']\/api\/longevity\/gestionale\/verifica["']/);
expect(src).toMatch(/name=["']misura_id["']/);
expect(src).toMatch(/value=["']confermata["']/);
expect(src).toMatch(/value=["']scartata["']/);
expect(src).toMatch(/\/longevity\/gestionale\/cliente\/\$\{cliente\.client_code\}\/accesso/);
});
it('nessuna pagina longevity usa piu misureFuoriRange, rimossa da gestionale.ts a favore di misureDaVerificare (#7)', () => {
// Scandisce TUTTE le pagine sotto src/pages/longevity/, stesso criterio di
// referto.test.ts: un elenco scritto qui non protegge una pagina nuova.
const dir = join(process.cwd(), 'src/pages/longevity');
const pagine = (readdirSync(dir, { recursive: true }) as string[]).filter((f) => f.endsWith('.astro'));
expect(pagine.length).toBeGreaterThan(0);
for (const f of pagine) {
expect(readFileSync(join(dir, f), 'utf8'), `src/pages/longevity/${f}`).not.toMatch(/misureFuoriRange/);
}
});
});