From 8aeb25f930efc5b6326f36995e15cfbd4d973c54 Mon Sep 17 00:00:00 2001
From: "Adriano (daitarn)"
{messaggioVerifica}
} {messaggioGiornale &&{messaggioGiornale}
} + {consulenzaEsito === 'salvata' &&Prima consulenza salvata.
} + {flusso === 'questionario' && ( +Passo 4 di 4 — Questionario
+ {cliente.ha_accesso ? ( +Il questionario lo compila il cliente dal suo accesso, anche sul tablet del centro.
+ ) : ( + <> +Il questionario lo compila il cliente dal suo accesso, anche sul tablet del centro: crealo per continuare.
+ Crea accesso al referto + > + )} +{fuoriCount} {Number(fuoriCount) === 1 ? 'misura è' : 'misure sono'} fuori dal range di @@ -96,6 +117,31 @@ const messaggioGiornale =
Data di nascita: {cliente.data_nascita ? formattaData(cliente.data_nascita) : '—'}
+Prima consulenza
+ + {consulenza ? 'Modifica' : 'Compila'} + +Non ancora compilata.
+ ) : ( + <> +Livello: {consulenza.livello ?? '—'}
+Obiettivo primario: {consulenza.obiettivo_primario ? ETICHETTA_OBIETTIVO.get(consulenza.obiettivo_primario) ?? consulenza.obiettivo_primario : '—'}
+Obiettivo specifico: {consulenza.obiettivo_specifico ?? '—'}
+Data target: {consulenza.data_target ? formattaData(consulenza.data_target) : '—'}
+Note mediche: {consulenza.note_mediche ?? '—'}
+Storia sportiva: {consulenza.storia_sportiva ?? '—'}
+Limitazioni fisiche attuali: {consulenza.limitazioni ?? '—'}
+Disponibilità: {consulenza.disponibilita_giorni ?? '—'} giorni/settimana
+Fascia oraria preferita: {consulenza.fascia_oraria ?? '—'}
+Note screening: {consulenza.note_screening ?? '—'}
+ > + )} +Giornale di bordo
Solo lo staff lo vede. Una nota sbagliata si cancella e si riscrive: non si modifica.
diff --git a/apps/platforms/src/pages/longevity/gestionale/cliente/[code]/checkup.astro b/apps/platforms/src/pages/longevity/gestionale/cliente/[code]/checkup.astro index 8616422..0a8fed8 100644 --- a/apps/platforms/src/pages/longevity/gestionale/cliente/[code]/checkup.astro +++ b/apps/platforms/src/pages/longevity/gestionale/cliente/[code]/checkup.astro @@ -40,6 +40,9 @@ const valoriPreselezione = sessione ? new Map([...valori.entries()].filter((kv): kv is [string, number] => kv[1] !== null)) : valoriUltimoCheckup(db, cliente.client_code); const errore = Astro.url.searchParams.get('errore'); +// Passo 3 del flusso guidato per un cliente nuovo (?flusso=nuovo, #15): solo per un +// check-up NUOVO — in correzione (?sessione={cliente.cognome} {cliente.nome} — {cliente.client_code}. Lascia vuoto ciò che non hai misurato.
+ {flusso === 'nuovo' &&Passo 3 di 4 — Scheda Rapida
}{errore}
} @@ -56,6 +60,7 @@ const errore = Astro.url.searchParams.get('errore'); diff --git a/apps/platforms/src/pages/longevity/gestionale/cliente/[code]/consulenza.astro b/apps/platforms/src/pages/longevity/gestionale/cliente/[code]/consulenza.astro new file mode 100644 index 0000000..7358216 --- /dev/null +++ b/apps/platforms/src/pages/longevity/gestionale/cliente/[code]/consulenza.astro @@ -0,0 +1,113 @@ +--- +// La scheda di prima consulenza (#15): livello, obiettivo, note dello screening iniziale. +// Precompilata se esiste già — correggere e salvare SOVRASCRIVE, nessuno storico (decisione +// di Adriano, 27/09/2026). L'invio va all'API del gestionale, che fa la validazione vera +// (pages/api/longevity/gestionale/consulenza.ts) — qui c'è solo il form. +// +// Passo 2 del flusso guidato per un cliente nuovo (?flusso=nuovo, #15): il parametro passa +// di pagina in pagina fino al questionario, e ogni passo ha un link «Salta». +import Longevity from '../../../../../layouts/Longevity.astro'; +import { getLongevityDb } from '../../../../../lib/longevity/db'; +import { clienteDaCodice } from '../../../../../lib/longevity/anagrafica'; +import { consulenzaDi, OBIETTIVI } from '../../../../../lib/longevity/consulenza'; + +export const prerender = false; + +const { code } = Astro.params; +const cliente = code ? clienteDaCodice(code) : null; +if (!cliente) return new Response('Cliente non trovato', { status: 404 }); + +const db = getLongevityDb(); +const scheda = consulenzaDi(db, cliente.client_code); +const errore = Astro.url.searchParams.get('errore'); +const flusso = Astro.url.searchParams.get('flusso') ?? ''; +const query = flusso ? `?flusso=${encodeURIComponent(flusso)}` : ''; +--- +{cliente.cognome} {cliente.nome} — {cliente.client_code}. Tutti i campi sono facoltativi.
+ {flusso === 'nuovo' &&Passo 2 di 4 — Prima consulenza
} +{errore}
} + + +