- Spezza il registro delle decisioni in docs/decisions/DD-XXX.md, con indice - Ripulisce DATABASE.md dalla storia delle migration e aggiunge la sezione Lettura - Riduce PROJECT_STATE.md a una pagina; la procedura di allestimento passa in OPERATIONS.md - Aggiunge OPERATIONS.md, GLOSSARIO.md, trappole note e checklist in ARCHITECTURE.md - Sintetizza la copertura test di badge.md e documenta docs/archive - Allinea AGENTS.md, README.md e la regola Cursor (tolto l'obbligo di develop, in contrasto con DD-019) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
3.3 KiB
DD-035 — Avviso certificati: calcolato in Home, visibile solo al titolare e agli admin
Data: 24 settembre 2026
Stato: Accettata (implementata, versione 1.1.0)
Contesto
Il certificato medico ha una data di scadenza (profili_giocatore.certificato_scadenza), ma
oggi ci si accorge che è scaduto solo aprendo la tab Profili di /admin: spesso quando il
giocatore è già fuori regola. La richiesta è un avviso in Home, giallo nei 7 giorni prima
della scadenza e nero dopo, con i nomi dei giocatori, che sparisca da solo quando il
certificato viene rinnovato. Specifica completa in
modules/profilo-giocatore.md.
Decisione
- L'avviso si calcola al volo dalla data già salvata, con una funzione pura in
profili-core.ts: nessuna tabella, nessuno stato «avvisato», nessuna migration. - Lo vedono solo gli admin, con i nomi di tutta la rosa, e il giocatore interessato, riferito solo a sé. L'allenatore e i compagni non lo vedono.
- L'avviso dello staff non è cliccabile; quello personale apre
/profilo?tab=documenti. - Soglia fissa di 7 giorni in una costante; il giorno della scadenza il certificato vale
ancora (come
statoScadenza()). - Niente push: l'avviso vive solo in Home.
Alternative scartate
- Mostrarlo anche all'allenatore → il certificato è un dato sanitario che oggi l'allenatore
non vede (DD-034); servirebbe una funzione
SECURITY DEFINERapposta per un'informazione che all'allenatore non serve ad agire. - Salvare gli avvisi in una tabella o nel centro notifiche (DD-030) → uno stato da tenere allineato alla data, che si disallinea appena il giocatore corregge la scadenza; calcolarlo è gratis e sempre giusto.
- Avviso dello staff cliccabile verso
/admin?tab=profili→ l'admin non può caricare il file al posto del giocatore (DD-017), quindi il tocco non gli farebbe fare nulla in più, e richiederebbe di aggiungere a/adminla lettura della tab dall'URL. - Mostrare al massimo alcuni nomi e un «e altri N» → a inizio stagione ne scadono molti insieme ed è proprio lì che l'elenco completo serve.
- Push quotidiana a chi ha il certificato in scadenza → servirebbe un cron, che oggi non esiste per nessuna push (DD-025), e le push vanno riservate agli eventi importanti (EFFICIENZA_CLOUD.md).
- Includere i certificati mancanti → è un problema diverso (profilo incompleto), già coperto dal widget «Completa il tuo profilo» e dalla tab Profili.
Conseguenze
- Nessuna query nuova: si riusa
useProfili(), già in cache per Profilo e/admin, e le RLS esistenti decidono quanti profili arrivano (tutti all'admin, il proprio al giocatore). - Il rinnovo non richiede nessuna azione di chiusura: cambiata la data, l'avviso si aggiorna da solo.
- Chi non apre l'app non viene avvisato: l'avviso raggiunge solo chi entra in Home.
- Un admin che è anche giocatore vede solo l'avviso dello staff, dove compare il suo nome.
Riesame
Se gli avvisi in Home non bastano (certificati che scadono comunque senza essere rinnovati),
valutare una push, legata a un cron o a un invio manuale dell'admin come per i palloni. Se 7
giorni si rivelano pochi per prenotare una visita, alzare la costante o renderla regolabile.