Chi ha fatto la differenza nella trattativa?

Un’opportunità CRM ammette un solo cliente. Ma l’affare lo portano architetti, ingegneri e progettisti. Dall’esigenza commerciale al modulo Odoo, passando per BRD e matrice dei requisiti.

Modulo custom
Odoo 18
CRM
Contatti
Dashboard
Vendite
Illustrazione di un flusso che collega più contatti a un’unica opportunità CRM

OBIETTIVO DI PROGETTO

Registrare su ogni opportunità tutti i professionisti coinvolti con il loro ruolo, e misurare a trattativa chiusa su quali relazioni conviene investire, restando il più vicino possibile allo standard Odoo, per non compromettere aggiornabilità e manutenzione.

L’Analisi

Il vincolo di partenza: crm.lead ammette un solo partner_id. L’unico riferimento nativo a chi ha portato la trattativa è il campo testuale Referral: a valore singolo, non collegato all’anagrafica, non aggregabile.

La prassi che non regge: i professionisti finivano tra i follower del record. Un uso improprio, perché i follower servono alle notifiche, non prevedono un ruolo e non si prestano a reportistica. La domanda «quali contatti ci hanno aiutato di più a vincere» restava senza risposta.

La metrica scelta: la presenza, cioè quante opportunità vinte vedono coinvolto un dato contatto. Oggettiva, ricavabile dai dati, senza valutazioni soggettive. L’attribuzione ponderata del merito è stata esclusa per scelta e messa fuori ambito.

Requisiti tracciati: 11 requisiti (8 Must, 2 Should, 1 Could) in una matrice che lega ciascuno al modello, alla vista, alla copertura standard o custom e alle ore.

La Soluzione

Un modello-ponte, non un campo in più: crm.lead.contact collega opportunità, contatto e ruolo. È il modello su cui si costruisce tutto il reporting; un vincolo SQL impedisce lo stesso contatto due volte sulla stessa opportunità.

Ruoli configurabili dal cliente: crm.contact.role, anagrafica ordinabile e archiviabile (Architetto, Ingegnere, Geometra, Progettista, Impresa esecutrice), gestita da backend senza intervento tecnico.

Campi derivati e memorizzati: esito, fase e stato di archiviazione vengono calcolati dall’opportunità e salvati con store=True, così pivot e filtri possono raggruppare senza query custom. Sull’opportunità, una scheda «Contatti coinvolti» a compilazione progressiva: nessun campo obbligatorio blocca il salvataggio.

Reporting interamente nativo: vista pivot e grafico su crm.lead.contact, contatti in riga ed esito in colonna, azione già aperta sulle vinte e raggruppata per contatto. Nessun report QWeb.

Sicurezza dichiarativa: ACL agganciate ai gruppi standard delle vendite e record rule multi-azienda; viste ereditate dagli xmlid standard del CRM.

Risultati Ottenuti

Classifica delle relazioni: quali professionisti ricorrono sulle trattative vinte, leggibile anche per categoria.

Zero report custom: pivot, grafici e filtri sono nativi; l’unico codice è il modello-ponte.

Stima difendibile: WBS per layer con ore ottimistiche, realistiche e pessimistiche, più un buffer del 20%.

Aggiornabilità intatta: pattern ORM, viste XML ereditate e sicurezza dichiarativa. Nessun debito tecnico.

Scheda progetto

Piattaforma: Odoo sh 18, modulo CRM standard più modulo custom.
Deliverable: BRD con RTM e stima, più formazione per il team di 30 commerciali.