# Note tecniche 61D2

`FacilityBookingDuration` decide l'unità da configurazione esistente. Solo tariffa oraria + maximum_amount positivo + maximum_period=rolling_24h usa giorni; input interi, durata massima sul server e massimo tecnico preesistente. Il client non sceglie autonomamente l'unità e non può trasformare i minuti in giorni per eludere il controllo.

`FacilityDailyTariffQuoteService` è invocato esclusivamente dal percorso strutture giornaliero. I modelli/column di prenotazione, pagamento e sosta non cambiano. I campi duration_unit/duration_days e la ripartizione economica sono aggiunti ai JSON snapshot esistenti.

Il gruppo tariffario viene risolto nell'intero intervallo, avanzando per minuti effettivi (timestamp) ma verificando il calendario nel fuso del Comune. I segmenti vengono raccolti in contenitori economici per tariffa: 24h dall'ingresso per rolling_24h; giorno locale per calendar_day; intera prenotazione per singola sosta/nessun tetto. Questo evita di estendere al giorno successivo una tariffa valida solo nel primo giorno. Si riutilizza TariffCalculator per importi, scaglioni, minimi e massimo legacy. Nessuna moltiplicazione indiscriminata giorni × massimale.

Cortesia: preview una sola volta per l'intera permanenza; riserva/consumo/rilascio rimangono quelli della 61D. Le finestre rolling restano ancorate all'ingresso, non alla fine della cortesia.

I nuovi accessi pagati registrano `facility_price_allocations` con tariffa, estremi del periodo e importo. Per il tetto si considera soltanto spesa precedente pertinente a targa, tenant, Comune, struttura e tariffa. Il confine esatto di 24 ore appartiene al periodo terminato, non produce un giorno successivo gratuito. La ripartizione di una prenotazione non viene trattata come una nuova sosta a ogni giorno e non genera più pagamenti o più titoli. Le quote della prenotazione corrente non sono rilette come spesa storica nello stesso calcolo.

Modifiche additive ai servizi condivisi:
- TariffCalculator: conteggio minuti precomputato facoltativo; in assenza conserva il percorso storico.
- HourlyTariffGroupCalculator: opzioni continuation/elapsedMinutes, false per i chiamanti storici.
- HourlyTariffScheduleService/HolidayService: fuso calendario esplicito facoltativo, usato dal percorso giornaliero; default storico invariato.
- TariffPolicyService: solo un nuovo metodo di preview cortesia; il metodo quote storico non è modificato.

Nessun endpoint pubblico modificato; nessun nuovo binding globale del motore; nessuna condizione relativa a un Comune specifico. Il menu della 61D1 e il branding rimangono invariati. Le stringhe nuove sono in lang/it e lang/en/dpass_facility_duration.php; il resto dei template mantiene le traduzioni già presenti nella 61D.

Un preventivo giornaliero precedente che contiene soltanto minuti viene rifiutato prima dell'avvio di un nuovo acquisto, con richiesta di nuovo preventivo in giorni. Per prenotazioni già create `begin` conserva l'idempotenza e ritorna il record; callback e conferme continuano a usare l'importo/periodo congelato. Nessun job di aggiornamento storico.
