# DPass 61D7 — Massimale delle prenotazioni giornaliere indipendenti

## Causa verificata
Il report locale conferma `duration_days=1`, `duration_minutes=1440`, importo base
576 euro, massimale 24 euro e spesa precedente della targa 24 euro. Il vecchio
motore sottraeva lo storico al tetto del primo periodo: 1 giorno = 0 euro,
2 giorni = 24 euro. Non è un errore del valore iniziale del campo giorni.

## Correzione
Soltanto le prenotazioni giornaliere delle strutture (tariffa oraria con
massimale positivo e periodo 24 ore mobili) usano un massimale indipendente
per ciascun periodo della prenotazione. Gli acquisti precedenti della targa
non scontano la nuova prenotazione. Le fasce, i minimi, gli scaglioni,
le varianti di calendario e la cortesia continuano a usare i servizi esistenti.
Un costo inferiore al tetto non viene portato artificialmente al massimale.
Le soste ordinarie e le prenotazioni in minuti mantengono la politica precedente.

Con la configurazione del report e tutti i minuti tariffabili:
- 1 giorno: 24 euro; 2 giorni: 48 euro; 3 giorni: 72 euro.
- La durata massima tariffaria può rimanere 1440 minuti.
- Il massimo giorni resta DPASS_FACILITY_BOOKING_MAX_DAYS, senza modificarlo.

## Applicazione prima in locale
Salvare lo ZIP in C:\Users\massi\Downloads e incollare in WSL l'intero blocco:

```bash
(
  set -e
  cd ~/progetti/dpass
  PATCH_DIR="$(mktemp -d /tmp/dpass_patch_61D7.XXXXXX)"
  unzip -q \
    /mnt/c/Users/massi/Downloads/dpass_patch_61D7_massimale_prenotazioni_indipendenti.zip \
    -d "$PATCH_DIR"
  bash "$PATCH_DIR/apply_patch.sh" "$PWD"
)
```

Esito: `[61D7] PATCH 61D7 APPLICATA E VERIFICATA.`
Base richiesta: 61D6. Controlli hash, backup, test isolati, marcatore e ripristino
automatico dei sorgenti in caso di errore dopo la copia. Non forzare i conflitti.
Nessuna migration, modifica .env, Composer, NPM o cron.

## Preventivi aperti e storico
La versione economica diventa 61D7 e cambia la firma del preventivo. I preventivi
giornalieri precedenti NON ancora acquistati devono essere ricalcolati. Il GET
del riepilogo torna al modulo con i dati compilati e messaggio IT/EN già esistente.
Non ricalcola silenziosamente, non modifica lo snapshot, non addebita nulla.
Anche un POST da una vecchia scheda viene rifiutato dal controllo prezzo/firma
prima di creare riserve o addebitare il borsellino.
Una prenotazione già presente viene riaperta prima di questi controlli: pagamenti
avviati e titoli confermati conservano importo, durata e snapshot. Eventuali titoli
già confermati a zero NON vengono rivalorizzati, annullati o cancellati; vanno
verificati separatamente. Il controllo delle sovrapposizioni resta attivo.
Il diagnostico precedente confronta hash 61D6: dopo questa patch due file sono
intenzionalmente differenti, non significa che l'installazione sia corrotta.

## Primo collaudo
Ricalcolare un nuovo preventivo con la stessa tariffa e targa del report,
lasciando il valore iniziale 1. Con la configurazione riportata attendersi 24 euro;
verificare poi 2 giorni = 48 euro e 3 giorni = 72 euro. Verificare italiano/inglese.
Per acquistare, scegliere un intervallo che non si sovrapponga a titoli esistenti.
Non eliminare soste o movimenti per aggirare un eventuale blocco sovrapposizioni.

## Produzione
Per ora nessuna operazione in produzione. Restano previsti File Manager/FTP
cPanel e phpMyAdmin, mai SSH/Terminal. I file vanno presi dal locale collaudato.
Lo SQL cumulativo 61A/61B/61D è incluso invariato e NON viene eseguito dalla patch.
Non applicare separatamente il vecchio 61B. Vedere CPANEL_RILASCIO_61D7.md.

## Ripristino manuale
Conservare la cartella estratta e il percorso backup stampato dall'installer.
`bash /percorso/patch/rollback.sh "$HOME/progetti/dpass" /percorso/backup`
Il ripristino verifica hash e non sovrascrive modifiche successive. Non modifica
prenotazioni o database. Riattivere la vecchia logica ripristina anche il difetto:
usarlo soltanto per recuperare un problema tecnico, non come operazione ordinaria.
