6.1 KiB
6.1 KiB
🗄️ Features Archive
Questo documento è un archivio tecnico completo che descrive tutte le funzionalità (features) principali presenti all'interno dell'applicazione CAI Facile, spiegando lo scopo ("Cosa fa") e l'implementazione tecnica a livello di codice ("Come lo fa").
1. Compilazione Guidata del Modulo CID
- File Coinvolti:
comp_1-5.dartfino acomp_15.dart,comp_16.dart,global_data.dart - Cosa fa: Trasforma il complesso modulo cartaceo ministeriale della Constatazione Amichevole in un flusso guidato step-by-step (wizard) ottimizzato per smartphone.
- Come lo fa: Lo stato dell'intera compilazione viene mantenuto in RAM tramite le variabili statiche della classe
GlobalData.- Utilizza validatori Regex nei form (es. email e telefoni internazionali).
- La localizzazione automatica in
comp_1-5.dartusa i packagegeolocatoregeocodingper recuperare le coordinate GPS del telefono e tradurle nel nome della strada/città dell'incidente senza che l'utente debba digitarla. - La dinamica dell'incidente viene disegnata dall'utente su un
CustomPaintvettoriale (PainterV40), permettendo il piazzamento di veicoli (auto, moto, furgoni), frecce e percorsi liberi.
2. Autocompilazione e Persistenza Locale (Profilo Utente)
- File Coinvolti:
services/profilo_service.dart - Cosa fa: Evita la noiosa riscrittura manuale dei dati anagrafici e della polizza assicurativa per i futuri incidenti o compilazioni.
- Come lo fa: Ad ogni salvataggio del modulo, il servizio estrae i dati del contraente, del veicolo, dell'assicurazione e del conducente da
GlobalDatae li memorizza sul dispositivo fisico usando leSharedPreferences(sistema chiave-valore nativo di iOS/Android). All'avvio dell'app o della sezione, l'app interroga la cache e popola automaticamente i text field.
3. Scambio Dati P2P via Firebase e QR Code
- File Coinvolti:
scambio_dati_screen.dart,cid_data_manager.dart,firebase_exchange.dart - Cosa fa: Risolve il problema di dover compilare a mano un solo telefono o scambiarsi i telefoni durante l'incidente. Il Veicolo A e il Veicolo B possono compilare la propria parte sui rispettivi smartphone per poi unire i dati magicamente.
- Come lo fa: L'architettura si basa su Google Cloud Firestore.
- Il Conducente A (Host) preme "Ricevi Dati", il sistema genera una Sessione univoca sul DB e genera un QR Code con l'ID sessione.
- Il Conducente B (Guest) scansiona il QR Code col pacchetto
mobile_scanner, si connette a Firestore, e invia in formato JSON i propri dati. - La classe
CidDataManagerserializza i dati diGlobalDatalato A e lato B isolandoli, per evitare sovrascritture incrociate (es. il Veicolo B non può sovrascrivere il disegno del grafico del Veicolo A).
4. Motore di Generazione PDF e Sigillo Crittografico
- File Coinvolti:
pdf_engine.dart,cai_mapping.dart - Cosa fa: Stampa i dati raccolti sul modulo grafico ministeriale del CID e genera il file PDF legalmente valido e condivisibile via WhatsApp/Mail.
- Come lo fa: Usa la libreria
Syncfusion Flutter PDF.- Legge un template vergine
assets/CAI_p1.pdf. - Itera sul dizionario in
cai_mapping.dartche collega le variabili diGlobalDataai nomi esatti deiPdfTextBoxFieldePdfCheckBoxFielddel form PDF. - Appiattisce i campi interattivi (
flattenAllFields()) trasformandoli in testo statico per impedirne la modifica successiva. - Advanced: Renderizza il
Canvasdel disegno e i punti vettoriali delleFirme Autografein PNG per stamparli sopra il documento.
- Legge un template vergine
5. Monetizzazione In-App (Paywall)
- File Coinvolti:
screens/paywall_screen.dart,services/subscription_service.dart - Cosa fa: Sistema di barriera all'accesso (Paywall) che sblocca le funzioni premium dell'app (es. la possibilità di usare lo Scambio Dati).
- Come lo fa: L'app si appoggia a RevenueCat (
purchases_flutter). Il servizio si inizializza all'apertura dell'app distinguendo se è su iOS (certificati P8) o su Android (chiavi API Google Play). L'acquisto non è un abbonamento ricorrente, ma uno sblocco "Una-Tantum" locale da 0,99€ che altera il flagisProdell'utente.
6. Verifica Copertura RCA (Anti-Frode)
- File Coinvolti:
verifica_rca_screen.dart,test_scraping.dart - Cosa fa: Permette all'utente di inserire la targa della controparte per scoprire immediatamente se il veicolo è assicurato oppure no.
- Come lo fa: In assenza di API pubbliche gratuite, utilizza un proxy di web scraping (
test_scraping.dart) che effettua chiamate HTTP mascherate simulando un browser verso portali governativi (es. Il Portale dell'Automobilista). Intercetta la risposta HTML, la parsifica e restituisce alla UI l'informazione cruda sulla polizza.
7. Firma Elettronica Avanzata (FEA) 🚧 In corso
- File Coinvolti:
screens/fea_verification_screen.dart,pdf_engine.dart - Cosa fa: Previene il disconoscimento della firma digitale garantendole pieno valore legale.
- Come lo fa:
- L'utente inserisce il cellulare e riceve un OTP (One Time Password) via SMS, confermando in maniera inequivocabile l'identità hardware al momento della firma sul display.
- Il sistema appende una Pagina 2 (Attestato FEA) al PDF generato con l'ID univoco della transazione OTP e l'orario certificato.
- Infine,
pdf_engine.dartcarica da root bundle il fileassets/certificate.pfx(chiave privata) e usaPdfSignatureper sigillare crittograficamente l'intero PDF. Qualsiasi alterazione al PDF effettuata dopo il salvataggio invaliderà automaticamente la certificazione in Adobe Acrobat.
8. Soccorsi Rapidi (Pronto Soccorso / Carro Attrezzi)
- File Coinvolti:
carro_attr.dart,ps.dart - Cosa fa: Interfacce di emergenza rapide per l'utente in panico post-incidente, mostrando in un clic il carro attrezzi più vicino o l'ospedale più vicino.
- Come lo fa: Esegue query geospaziali calcolando la distanza tra le coordinate dell'utente (ottenute via
geolocator) e i punti di interesse nelle vicinanze. Avvia intent nativi (es.url_launchercon schemitel:) per chiamare istantaneamente l'ospedale o l'officina selezionata.