Files
CRAPP/docs/decisions/DD-035.md
T
davideandClaude Sonnet 5.5 4b5ffc6664 Avviso certificati: il giocatore è avvisato 30 giorni prima (DD-041)
Il giocatore vede l'avviso giallo da 30 giorni prima della scadenza del
certificato medico; per lo staff resta 7 giorni, nero dopo la scadenza per
tutti. L'admin che è anche giocatore vede il proprio avviso personale oltre
a quello dello staff, da cui è escluso il suo nome.

La scelta degli avvisi per utente è in avvisiCertificatiUtente()
(profili-core) con test; documentati DD-041, DD-035, modulo e changelog.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 14:21:25 +02:00

3.4 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). La soglia del giocatore è stata alzata a 30 giorni da DD-041; quella dello staff resta 7.

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

  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).
  • 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 → superato da DD-041: vede anche il proprio avviso personale.

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.