1 - Fondamenta
Backend:
· Setup repo Git (accesso Cliente dalla creazione)
· docker-compose.yml: PostgreSQL, Redis, MinIO, backend, frontend
· Struttura FastAPI: router, middleware CORS, error handling globale
· Alembic: migration iniziale con tutte le tabelle core
· Auth: JWT login/refresh, hashing password (bcrypt), RBAC middleware
· GET /api/health con check DB e Redis
· Seed dati: utenti demo per ogni ruolo
Frontend:
· Vite + React 18 + TypeScript + TailwindCSS + shadcn/ui
· Axios client con interceptor (refresh token automatico)
· React Query setup (cache, invalidation strategy)
· Layout base: sidebar navigazione per ruolo, header, breadcrumb
· Pagina Login (form + gestione errori)
· Route guard per ruolo
· Pagina 404 / Unauthorized
Backend
· POST /valuations – creazione richiesta con validazione campi obbligatori
· GET /valuations – lista con filtri (targa, stato, priorità) + paginazione
· GET /valuations/{id} – dettaglio + storico
· Upload foto (MinIO): POST /valuations/{id}/photos
· POST /valuations/{id}/comments – solo commenti (dato congelato)
· Integrazione MotorNet (o fallback): GET /vehicles/lookup?plate=XX000XX
o lookup targa → marca, modello, versione, anno immatricolazione
o gestione versioni multiple con selezione manuale
· Logica "freeze": dopo inserimento, dati sola lettura per venditore
· Visibilità per gruppo: venditore vede solo valutazioni del proprio gruppo
Frontend
· Form inserimento richiesta valutazione
o Targa → autocomplete dati veicolo (MotorNet)
o Selezione versione da lista
o Campi: KM, regime ritiro, data rientro, alimentazione interesse, priorità, note
o Upload foto drag-and-drop con preview
· Lista valutazioni venditore (card + filtri)
· Dettaglio valutazione: readonly dopo invio, sezione commenti
· Visualizzazione "scheda veicolo" in stile Eurotax (listino nuovo, rettifiche km)
Backend
· Coda FIFO + priorità: query ordinata per (priority_rank, created_at)
o priority_rank: Contratto=1, Preventivo=2, Valutazione=3
· PATCH /valuations/{id} – inserimento valore finale, modifica parametri tecnici
· GET /valuations/{id}/history – log modifiche (solo valutatori)
· POST /valuations/{id}/market-value – trigger on-demand Eurotax API
· Integrazione Portale dell'Automobilista (TrOCR CAPTCHA se necessario, vedi DealerEase)
· Import CSV Infinity (endpoint admin): stock, costi medi, margini, prezzi, giacenza
o POST /admin/import/stock
o Parser CSV configurabile (separatore, colonne mappate)
o Storicizzazione per modello
· GET /vehicles/{model}/stats – aggregati da CSV importati
· Email automatica a venditore al completamento valutazione (template HTML)
o con link diretto alla valutazione
· GET /valuations/previous?plate=XX000XX – storico valutazioni su stessa targa
Frontend
· Dashboard valutatore: coda di lavoro ordinata, indicatori priorità colorati
· Ricerca avanzata: targa, venditore, marca, modello, stato, data
· Dettaglio valutazione valutatore:
o Pannello dati veicolo + dati mercato
o Sezione dati interni (stock, costo medio ripristino, giacenza, margine, prezzo medio)
o Pulsante "Richiedi valore mercato" (Eurotax on-demand)
o Form inserimento valore finale con note
o Storico modifiche (accordion o timeline)
· Badge storico valutazioni stessa targa
· Visualizzazione verifica revisioni (Portale Automobilista)
Backend
· Import CSV contratti da Infinity: POST /admin/import/contracts
· POST /valuations/{id}/contract – abbinamento (ruolo backoffice/valutatore)
o input: azienda, area, numero contratto, anno
o lookup nel CSV importato → restituzione targa + cliente per conferma
· Stato won sulla valutazione dopo abbinamento confermato
· Alert giornaliero (Celery beat):
o se data_richiesta_consegna > data_previsto_ritiro + X_giorni → alert email valutatore
o X configurabile per admin
· Check giornaliero: contratti con permuta senza valutazione a sistema → report
· GET /dashboard/valuations – KPI: totale valutazioni, vinte, filtro azienda/sede/venditore
Frontend
· Modal abbinamento contratto con step conferma (targa + cliente)
· Badge "Vinta" su valutazione abbinata
· Dashboard semplice (ruolo valutatore/admin):
o Contatori: tot valutazioni, vinte, in attesa
o Filtri: azienda, sede, venditore, periodo
o Grafico trend mensile (recharts)
Backend
· CRUD repairs: POST /repairs, GET /repairs, PATCH /repairs/{id}
· Upload PDF preventivo: POST /repairs/{id}/documents
· Commenti con @mention: POST /repairs/{id}/comments
o Notify via email gli utenti menzionati
· In fase di creazione: recupero automatico da CSV (marca, modello, data imm., km, valore perizia preventiva e consuntiva) dalla targa
· Ruolo approvatore: PATCH /repairs/{id} con campi aggiuntivi (destinazione, stato offerta, subtotale finale)
· Obbligo subtotale in chiusura (accettato/rifiutato) – validazione server-side
· Task Celery giornaliero:
o Aggiornamento dati perizia da CSV Infinity
o Check: se targa non ha perizia su Infinity → alert approvatore
o Alert se preventivo approvato supera X% perizia consuntiva
o Alert se preventivo approvato supera X% perizia preventiva
o Soglie X configurabili da admin
· GET /dashboard/repairs – riepilogo costi (sede, marca, venditore, tipologia lavorazione)
· GET /repairs/export – export CSV/Excel per BI esterno
· Visibilità per gruppo di appartenenza
Backend
· Sistema notifiche in-app: GET /notifications, PATCH /notifications/{id}/read
· Preferenze notifiche per utente: email / push (default entrambe)
· Web push notifications (service worker, opzionale se nei tempi)
· Panel admin:
o Gestione utenti (CRUD, assegnazione ruoli/gruppi)
o Configurazione soglie alert (tabella alert_config) + TTL cache targa (default 90gg)
o Log importazioni CSV
o Gestione Vehicle Registry (cache targhe):
§ GET /admin/vehicle-registry – lista targhe in cache (filtri: source, scaduta, data)
§ GET /admin/vehicle-registry/{plate} – dettaglio targa + versioni candidate
§ DELETE /admin/vehicle-registry/{plate} – cancella singola targa dalla cache
§ DELETE /admin/vehicle-registry – svuota tutta la cache (bulk, richiede conferma)
§ PATCH /admin/vehicle-registry/{plate}/refresh – forza re-fetch da API esterna
o Widget API Usage (pannello admin):
§ ricercheTargaRimanenti Motornet (ultimo valore da api_usage_log)
§ cache hit rate % (chiamate evase da DB vs chiamate reali)
§ grafico storico chiamate API nel tempo
· Storico: 5 anni per valutazioni perse e perizie, illimitato per vinte
o Policy di retention configurabile
· Rate limiting API (slowapi)
· Logging strutturato (structlog) + health endpoint dettagliato
Frontend
· Campanella notifiche in header (badge contatore, dropdown lista)
· Pagina preferenze notifiche utente
· Pannello admin (solo ruolo admin):
o Tabella utenti con azioni
o Form configurazione soglie + TTL cache
o Log import CSV con stato e timestamp
o Sezione Vehicle Registry:
§ Tabella targhe in cache (colonne: targa, source, data fetch, scadenza, versione selezionata)
§ Pulsanti: cancella singola, refresh forzato
§ Pulsante "Svuota tutta la cache" con modal di conferma
o Widget monitoraggio API:
§ Card "Ricerche Motornet rimanenti" (valore live da ultimo log)
§ Card "Cache hit rate" con percentuale e contatori
§ Mini-grafico chiamate API ultimi 30gg
· Gestione errori globale (toast/banner per errori API)
· Loading skeleton su tutte le liste
· Responsive: tablet-friendly (operatività in reparto)
Backend
· Test unitari (pytest): services, business logic, alert thresholds
· Test integrazione: flusso completo venditore→valutatore→backoffice
· Test import CSV con file reali forniti da GMG
· Configurazione ambiente staging (clone prod)
Frontend
· Test E2E (Playwright o Cypress): flusso principale per ogni ruolo
· Test cross-browser: Chrome, Edge, Firefox, Safari