cid_app/memory-bank/decisions.md
2026-04-25 01:00:02 +02:00

1.8 KiB

Decisions & Architecture

Gestione Firebase Sync e Tipizzazione

  • Problema: Firebase trasforma dizionari con chiavi numeriche sequenziali (come le 17 circostanze del CID) in List, causando crash a runtime.
  • Soluzione: Introdotta e adottata la funzione helper fixCircostanze in CidDataManager per fare un parsing dinamico sicuro sia da List che da Map.

Coordinate PDF

  • Decisione (Blindata): Il motore PDF utilizza un posizionamento assoluto (pw.Stack) con coordinate fisse (es. Box 12 Y=575.0, Font 8pt Bold) per garantire una stampa pixel-perfect identica al modulo cartaceo ufficiale. Non rompere mai il layout per testo in overflow.

Mappatura Payload

  • Si utilizzano nomi brevi (minificati) per il payload JSON (es. cog per Cognome, cf per Codice Fiscale, circ per Circostanze) per ridurre le dimensioni dei pacchetti e ottimizzare i codici QR.

Sincronizzazione Dati Condivisi

  • Il "Cassetto 1" (Grafico Incidente con auto e strade) viene gestito esclusivamente dal Conducente A e sincronizzato in sovrascrittura su B per evitare conflitti logici.
  • Le Firme ("Cassetto 2") restano indipendenti (A non sovrascrive B).

Monetizzazione & Paywall (RevenueCat)

  • Decisione: L'app utilizza un modello "Hard Paywall parziale". Gli utenti possono compilare il modulo offline gratuitamente, ma la funzionalità core di Scambio Dati (QR Code e sincronizzazione Firebase) è bloccata dietro un abbonamento annuale.
  • Implementazione: Utilizzo di RevenueCat (purchases_flutter) per delegare la validazione delle ricevute lato server. Interfaccia Paywall custom (PaywallScreen) piuttosto che il pacchetto UI di RevenueCat per mantenere coerenza stilistica e aumentare le conversioni con copy persuasivo ("Sblocca la sincronizzazione").