cid_app/memory-bank/features-archive.md
2026-05-03 23:00:02 +02:00

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.dart fino a comp_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.dart usa i package geolocator e geocoding per 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 CustomPaint vettoriale (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 GlobalData e li memorizza sul dispositivo fisico usando le SharedPreferences (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 CidDataManager serializza i dati di GlobalData lato 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.dart che collega le variabili di GlobalData ai nomi esatti dei PdfTextBoxField e PdfCheckBoxField del form PDF.
    • Appiattisce i campi interattivi (flattenAllFields()) trasformandoli in testo statico per impedirne la modifica successiva.
    • Advanced: Renderizza il Canvas del disegno e i punti vettoriali delle Firme Autografe in PNG per stamparli sopra il documento.

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 flag isPro dell'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.dart carica da root bundle il file assets/certificate.pfx (chiave privata) e usa PdfSignature per 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_launcher con schemi tel:) per chiamare istantaneamente l'ospedale o l'officina selezionata.