- 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>
58 lines
3.3 KiB
Markdown
58 lines
3.3 KiB
Markdown
# 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](../modules/profilo-giocatore.md#avviso-certificati).
|
|
|
|
**Decisione**
|
|
|
|
1. 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.
|
|
2. 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.
|
|
3. L'avviso dello staff **non è cliccabile**; quello personale apre
|
|
`/profilo?tab=documenti`.
|
|
4. Soglia fissa di **7 giorni** in una costante; il giorno della scadenza il certificato vale
|
|
ancora (come `statoScadenza()`).
|
|
5. **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 DEFINER` apposta 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 `/admin` la 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](../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.
|