# DPass 61D — Verifiche e limiti del collaudo

Data preparazione: 19 settembre 2026. Base: ZIP ricevuto + payload 61C + 61C1.
Nessuna connessione, modifica o pubblicazione sui database dell'utente.

## Risultati ottenuti

- **90 controlli della suite 61D superati**, comprendenti i 26 controlli senza database
  e 64 controlli aggiuntivi con ORM, migration e dati sintetici SQLite in memoria.
  Log: `verifiche/test_database.log`. Le 26 verifiche senza database sono state ripetute
  separatamente e non devono essere sommate di nuovo come test distinti.
- **16 controlli 61C** e **46 controlli 61C1** superati nuovamente.
  Si tratta delle suite isolate preesistenti, non dell'intero test suite Laravel.
- **27 controlli PHP di sintassi**: 26 file PHP non-Blade del payload e l'installer.
  I template nuovi sono inoltre compilati/parsi nei test Laravel.
- **12 rendering Chromium**: sei pagine con dati sintetici, ciascuna a 390 e 1440 pixel.
  Nessun overflow orizzontale della pagina né errore JavaScript rilevato.
  HTML generato dai controller reali, caricato tramite `set_content`, NON navigazione
  end-to-end su un server con login. Controllo visivo delle schermate principali effettuato.
- **11 scenari dell'installer superati**: preflight, applicazione, riapplicazione,
  blocco rollback dopo migration, conflitto locale, marker 61C1 mancante, APP_ENV production,
  pacchetto corrotto, migration fallita, ripresa e ripristino per errore test prima della migration.
  In queste simulazioni il comando artisan migrate era sostituito con uno stub dichiarato:
  verifica l'invocazione e la gestione dell'errore, NON l'esecuzione SQL MySQL.
- SQL cumulativo: controllo statico di coerenza dei nomi migration/campi, istruzioni preparate,
  assenza di DROP/TRUNCATE e costrutti noti incompatibili con il MySQL 5.7 di riferimento.
  La copia di riferimento 61B è rimasta identica al file allegato dall'utente.

## Casi funzionali coperti

Preventivi fissi/orari con motori esistenti; data ingresso futura; giorni della settimana;
ora locale e cambio ora non valido; cortesia e restituzione della riserva; targa normalizzata;
separazione tenant/Comune/utente e strutture/strada; limite 0/vuoto/numerico;
conteggio per data ingresso; titoli storici e assenza del doppio conteggio del titolo emesso;
saldo bonus/cash; saldo insufficiente e rollback; doppio invio; un solo ordine PayPal;
ripresa; annullamento; scadenza; incasso tardivo senza titolo; prova d'incasso incompleta;
importo errato; webhook con firma OpenSSL valida/invalida e ripetuta; browser assente;
struttura disabilitata prima della capture; protezioni delle vecchie proroghe;
registro, CSV e pagine utente; permessi middleware; contabilizzazione dei servizi futuri
con wallet/PayPal alla vendita; incassi diretti distinti dalle ricariche; pagamento tardivo
nel finanziario senza servizio inventato; comportamento degli altri scheduled invariato.

## Ambiente e sostituzioni dichiarate

PHP CLI 8.4.23; dipendenze vendor del progetto ricevuto. Nell'ambiente di preparazione mancava
pdo_sqlite: per i test DB è stato utilizzato un adattatore PDO di sviluppo basato su FFI e
sulla libreria SQLite reale 3.46.1, sempre con database `:memory:`. L'adattatore privato NON è
incluso nel pacchetto e NON deve essere installato nel progetto dell'utente.
L'installer sul locale usa la normale estensione pdo_sqlite quando disponibile; in sua assenza
segnala esplicitamente il test DB saltato, pur eseguendo i controlli isolati senza DB.
La migration Laravel 61D è stata realmente eseguita due volte sulla fixture SQLite.

PayPal: codice reale del gateway/completion con HTTP simulato tramite Http::fake e blocco delle
richieste non previste. Firma webhook con chiave effimera di test e cache del certificato simulata.
Nessun ordine, addebito, rimborso o webhook è stato creato su PayPal sandbox/live.
Non vengono forniti o modificati credenziali, webhook ID o URL pubblici specifici dell'utente.

## Verifiche ancora necessarie prima della produzione

Il pacchetto NON è stato eseguito su MySQL 5.7/8.0 reale, né sul PHP 8.3 dell'utente.
La compatibilità SQL è un obiettivo progettuale verificato staticamente, non un esito d'import
su tali server. Provare il cumulativo su una copia del database effettivo di ogni installazione.
I test SQLite non dimostrano i lock InnoDB: verificare due utenti in concorrenza sull'ultimo ingresso.
Verificare il checkout PayPal sandbox reale (ritorno browser, firma webhook, ripresa, scadenza),
poi un acquisto controllato nel contesto di rilascio concordato.
Non sono stati collaudati end-to-end gli altri provider, il pagamento all'uscita o rimborsi automatici:
non vengono introdotti da questa patch. Le chiamate API targa storiche non sono state riscritte;
resta da verificare sul locale e sulle integrazioni reali il titolo acquistato nel periodo previsto.

Il backup automatico dell'installer riguarda i sorgenti, non costituisce un dump del database.
La migration aggiunge tabelle/campi senza cancellare dati; dopo il suo avvio il rollback del codice
non viene eseguito automaticamente, per non rendere incoerenti incassi e callback.
