Rende dinamico il mese degli obiettivi di squadra invece di una costante fissa
"Presenze del mese" e "evento di squadra al mese" erano ancorati a una costante MESE = "2026-08": passato agosto restavano congelati sul mese scorso invece di azzerarsi a ogni cambio mese. Ora il mese di riferimento (e per il primo anche titolo e scadenza) segue la data corrente, con un parametro `oggi` iniettabile per test deterministici. Aggiunti unit test e un integration test end-to-end contro il database locale. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# Modulo — Obiettivi di squadra
|
||||
|
||||
**Stato:** implementato (v1.0), con costanti stagionali da aggiornare a mano
|
||||
**Stato:** implementato (v1.0), con target stagionali da aggiornare a mano (i mesi di
|
||||
riferimento sono ora dinamici)
|
||||
**File principali:** `src/lib/obiettivi.ts`, `src/lib/rosa.ts` (`useObiettivi()`)
|
||||
|
||||
---
|
||||
@@ -25,14 +26,14 @@ serie).
|
||||
|
||||
| Obiettivo | Calcolo | Target | Fonte |
|
||||
| ---------------------------------- | ----------------------------------------------- | ------ | ---------------------------------------------- |
|
||||
| 90% presenze ad agosto | risposte presente/ritardo sugli eventi del mese | 90% | `risposte_presenze` |
|
||||
| 90% presenze del mese | risposte presente/ritardo sugli eventi del mese corrente (dinamico) | 90% | `risposte_presenze` |
|
||||
| Tutti rispondono alle convocazioni | risposte totali / eventi possibili | 90% | `risposte_presenze` |
|
||||
| 250 presenze complessive | somma presenze di tutta la rosa | 250 | aggregato da `useRosa()` |
|
||||
| Media pagelle da 7.5 | media di squadra | 7.5 | `pagelle_voti` |
|
||||
| 200 pagelle compilate | conteggio voti | 200 | `pagelle_voti` |
|
||||
| Continuità di squadra | giocatori con ≥3 allenamenti consecutivi | 12 | `serieAllenamenti` |
|
||||
| 1 / 5 / 10 vittorie in campionato | partite vinte da dati CSI ufficiali | 1/5/10 | modulo [Collegamento CSI](collegamento-csi.md) |
|
||||
| 1 evento di squadra al mese | eventi di tipo "evento" nel mese | 1 | `eventi_app` |
|
||||
| 1 evento di squadra al mese | eventi di tipo "evento" nel mese corrente (dinamico) | 1 | `eventi_app` |
|
||||
|
||||
Mostrati in `squadra.tsx` (elenco completo con barra di progresso) e in `index.tsx` (home: il
|
||||
primo obiettivo non completato). Un obiettivo che supera il 90% genera anche una notifica
|
||||
@@ -46,9 +47,6 @@ smart (`notifiche-smart.ts`).
|
||||
[Serie di presenze](serie-presenze.md)), calcolato sui dati reali: un evento passato senza
|
||||
risposta vale come assenza e azzera la serie, quindi l'obiettivo misura anche quanto la
|
||||
squadra risponde alle convocazioni, non solo la presenza.
|
||||
- **Il mese di riferimento è una costante fissa nel codice** (agosto 2026): gli obiettivi
|
||||
legati al mese corrente vanno aggiornati manualmente a ogni cambio di mese o stagione, oggi
|
||||
sono "congelati" su un mese già passato.
|
||||
- Le vittorie di campionato dipendono dal parsing HTML del portale CSI: se quel parsing si
|
||||
rompe, questi tre obiettivi restano a 0% anche a fronte di vittorie reali.
|
||||
- I target (250 presenze, 200 pagelle, ecc.) sono costanti fisse, da rivedere manualmente a
|
||||
@@ -56,6 +54,13 @@ smart (`notifiche-smart.ts`).
|
||||
|
||||
---
|
||||
|
||||
## Evoluzioni possibili
|
||||
## Obiettivi mensili — mese dinamico
|
||||
|
||||
- Calcolare il mese di riferimento dinamicamente invece di una costante hardcoded.
|
||||
"90% presenze del mese" e "1 evento di squadra al mese" si azzerano automaticamente a ogni
|
||||
cambio mese: il mese di riferimento è calcolato dalla data corrente (fuso Europe/Rome), non più
|
||||
una costante fissa. Per il primo, titolo ("90% di presenze ad agosto" / "a settembre" / ...) e
|
||||
scadenza (ultimo giorno del mese) seguono di conseguenza. Per i test, `obiettiviSquadra`/
|
||||
`obiettiviOrdinati` accettano un terzo parametro opzionale `oggi: Date` per iniettare una data
|
||||
deterministica. Coperti sia da unit test (`test/unit/obiettivi.test.ts`, funzione pura) sia da
|
||||
un integration test end-to-end (`test/integration/obiettivi.test.ts`, scrive/rilegge righe vere
|
||||
su `eventi_app` e `risposte_presenze` sullo stack Supabase locale).
|
||||
|
||||
Reference in New Issue
Block a user