# đŸ€ CRM Agent · Pipeline vente ERPNext natif (score 95+/100) **RĂŽle** : Cet agent construit le **CRM comme ERPNext natif** (CLAUDE.md #3 — **JAMAIS** EspoCRM ni HubSpot). Il ne produit pas de code applicatif jetable : il gĂ©nĂšre, de façon **dĂ©terministe et sans jamais fabriquer de chiffre**, les **fixtures Frappe/ERPNext v15** du pipeline commercial — du *lead* jusqu'au dĂ©pĂŽt CONFOTUR — prĂȘtes Ă  appliquer sur le VPS par l'agent ERPNext Backend. ## Scope Dashboard CRM luxury + pipeline **lead → visite → devis → rĂ©servation → contrat → CONFOTUR** + DocType porteur + commissions vendeurs, **100 % ERPNext natif**. ## Principe directeur : hand-off VPS, jamais d'Ă©criture serveur (#8) Chaque gĂ©nĂ©rateur transforme un **spec mĂ©tier** (contrat en-repo, zĂ©ro chiffre inventĂ©) en fixtures `out/` **commitĂ©es** — le hand-off direct. Le worker **n'Ă©crit jamais sur le VPS** ; l'application rĂ©elle (`bench migrate` / `import-fixtures`) reste cĂŽtĂ© **agent ERPNext Backend**. Ordre d'import imposĂ© : **DocType porteur AVANT le Workflow** qui le cible. ## Livrables CRM rĂ©ellement produits (`05_deliverables_mvp/crm/`) | Module | Sprint | RĂŽle | EntrĂ©e CLI | Job CI | Tests | |---|---|---|---|---|---| | [`workflow_vente/`](../../05_deliverables_mvp/crm/workflow_vente/README.md) | 4 (roadmap L50) | Graphe **Workflow** ERPNext : le pipeline `lead → visite → devis → rĂ©servation → contrat → CONFOTUR` (states + transitions + actions) | `workflow_vente_gen.py build\|validate` | `crm-workflow-vente-tests` | 25 | | [`dossier_vente/`](../../05_deliverables_mvp/crm/dossier_vente/README.md) | 4 (roadmap L50) | **DocType porteur** `OTO Dossier Vente` : le document rĂ©el qui circule dans le Workflow ; sans lui le pipeline n'a rien Ă  quoi s'attacher | `doctype_dossier_vente_gen.py build\|validate` | `crm-dossier-vente-tests` | 31 | | [`commissions/`](../../05_deliverables_mvp/crm/commissions/README.md) | 4 (roadmap L51) | BarĂšme **commissions vendeurs** : quel Ă©vĂšnement du pipeline paie, Ă  quel rĂŽle, sur quel montant + calculateur traçable `commission = base × taux` | `commissions_gen.py build\|validate` | `crm-commissions-tests` | 27 | **Trois modules cross-cohĂ©rents, une source unique** (CLAUDE.md #5 · Ă©liminer les doublons) : le nom du DocType, son champ d'Ă©tat, ses valeurs de statut et son caractĂšre *submittable* sont **dĂ©rivĂ©s** de `workflow_vente_spec.json` (anti-dĂ©rive) ; les rĂŽles sont **rĂ©solus** depuis `rbac/rbac_50_roles.json` — jamais un nom Frappe en dur. Total CRM : **83 tests** (25 + 31 + 27), tous gated dans le CI — c'est le total du **trio pipeline** ; le module financement bancaire ci-dessous porte ses **35 tests** Ă  part (source distincte). ## Module CRM additionnel · financement bancaire hypothĂ©caire (pilotĂ© par directive) Un **quatriĂšme** livrable CRM vit sous `05_deliverables_mvp/crm/` **hors du trio pipeline** — pilotĂ© non par `workflow_vente_spec.json` mais par une directive datĂ©e de Michel, d'oĂč son suivi sĂ©parĂ© (il ne partage pas la source unique du trio) : | Module | Sprint | RĂŽle | EntrĂ©e CLI | Job CI | Tests | |---|---|---|---|---|---| | [`financement_bancaire/`](../../05_deliverables_mvp/crm/financement_bancaire/README.md) | 4 (roadmap L52) | Parcours **hypothĂ©caire RD** : cƓur mĂ©tier du **gate check 4 conditions** — aucun document n'est transmis Ă  la banque tant que apport initial (20 % rĂ©sident · 30 % Ă©tranger · Ley 189-11) + documents exigĂ©s + autorisations signĂ©es + validation rĂ©fĂ©rente ne sont pas rĂ©unis ; fonctions **pures** sans I/O | `financement_bancaire_gen.py build\|validate` | `crm-financement-bancaire-tests` | 35 | MatĂ©rialise [`DIRECTIVE_FINANCEMENT_BANCAIRE_COMPLET_20260803.md`](../../DIRECTIVE_FINANCEMENT_BANCAIRE_COMPLET_20260803.md) (**Phase 1 · P0 · MVP** : contrat de donnĂ©es + cƓur du gate + 7 sections + banniĂšre critique). La **Phase 2** (formulaires PDF officiels des 6 banques, endpoints runtime `/api/hypotheque/*`, `renderHypotheque`) attend les dĂ©marches relationship-manager de Michel et l'exĂ©cution VPS — **hors pĂ©rimĂštre worker** (#8). **DĂ©cision produit ouverte** — la condition #4 du gate teste encore une validation **humaine** (`wag_validated_by`), alors que la couche `## PRÉCISION` de la directive la supersĂšde par un **audit IA signĂ©** ; producteur d'audit hors dĂ©pĂŽt → arbitrage de sĂ©quencement, **surfacĂ© non tranchĂ©** dans [`OPEN_DECISIONS_REGISTER.md` D-02](../../05_deliverables_mvp/OPEN_DECISIONS_REGISTER.md) (ne pas re-litiger · #5). ## Livrable transverse · Sprint 7 — scĂ©narios dĂ©mo (co-portĂ© CRM + FaisabilitĂ©) Un **cinquiĂšme** livrable vit sous `05_deliverables_mvp/demo/scenarios/` : **pas un livrable CRM propre**, mais un **mĂ©ta-gĂ©nĂ©rateur** qui **compose** les livrables dĂ©jĂ  produits (pipeline CRM + dossier de vente, bancable, e-CF, CONFOTUR, portails, OTOIA, SEO) en un **run-sheet de pitch** — sans jamais Ă©crire une donnĂ©e mĂ©tier lui-mĂȘme (CLAUDE.md #6). Il matĂ©rialise la roadmap **Sprint 7** (« CRM + FaisabilitĂ© : scĂ©narios dĂ©mo P07 banquier / P05 client », L68) et est donc **co-portĂ©** avec l'agent FaisabilitĂ© — recensĂ© ici parce que le pipeline CRM en est le fil conducteur, mais **il ne partage aucune source avec le trio ni avec le financement** ci-dessus : | Module | Sprint | RĂŽle | EntrĂ©e CLI | Job CI | Tests | |---|---|---|---|---|---| | [`scenarios/`](../../05_deliverables_mvp/demo/scenarios/README.md) | 7 (roadmap L68) | MĂ©ta-gĂ©nĂ©rateur `demo/scenarios` : compose les livrables existants en 2 run-sheets (`S-P07-BANQUIER` · `S-P05-CLIENT`) — zĂ©ro donnĂ©e mĂ©tier inventĂ©e, tout est citĂ© depuis les artefacts amont | `demo_scenario_gen.py build\|validate` | `demo-scenario-tests` | 39 | La cellule **Tests 39** est **auto-gatĂ©e** exactement comme les lignes du trio : `check_readme_claims` recompute chaque cellule « Tests » de fiche depuis `regression_plan.json` (source unique · `demo/scenarios` ∈ `plan.suites`). DĂ©tail des 2 scĂ©narios, des invariants et de la composition dans le README du module. ## Anti-invention (#6) — pourquoi les taux de commission sont `null` **Aucun taux de commission n'est documentĂ© dans CLAUDE.md.** Les taux du barĂšme restent donc `null` (**confirmation sourcĂ©e** attendue de Michel), jamais une valeur fabriquĂ©e. Idem devises **USD + DOP** et format **Letter US** : citĂ©s depuis CLAUDE.md #10, jamais rĂ©inventĂ©s. Tout paramĂštre non confirmĂ© reste une confirmation tracĂ©e (owner + source), pas une supposition. ## Non-nĂ©gociables (voir CLAUDE.md racine pour la liste complĂšte) - **CRM = ERPNext natif** — **JAMAIS** EspoCRM ni HubSpot (#3) - Gitea only (jamais GitHub) - ERPNext natif en prioritĂ© absolue avant tout outil externe - Score 4Big 95+/100 - ZĂ©ro invention de chiffres — les taux non confirmĂ©s restent `null` - **VPS pour tous projets** — le worker n'Ă©crit jamais sur le serveur (#8) - VĂ©rifier · Investiguer · Valider · Confirmer ## Livrable attendu · roadmap Voir `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md`. Volets CRM : Sprint 2 (enrichir `/crm.html` LIVE · pipeline visualization · WhatsApp) · Sprint 4 (workflow vente end-to-end + commissions vendeurs auto) · Sprint 7 (scĂ©narios dĂ©mo P07 banquier / P05 client). ## Coordination inter-agents - **ERPNext Backend** : destinataire des hand-off `out/` (crĂ©e le module `OTO Ventes`, importe DocType puis Workflow, active le calcul commission en prod). - **RBAC** : consomme `rbac/rbac_50_roles.json` pour rĂ©soudre les permissions du workflow et les rĂŽles payĂ©s par le barĂšme (source unique · anti-duplication). - **Publiciste** : rĂ©utilise le validateur maison Publiciste pour les specs CRM. - **QA** : les 3 suites CRM sont automatiquement agrĂ©gĂ©es aux gates de rĂ©gression et d'acceptation (dĂ©couverte CI). - **FaisabilitĂ©** : le CONFOTUR en fin de pipeline consomme le dossier de faisabilitĂ©. ## Communication inter-agents - Rapports quotidiens dans `05_deliverables_mvp/daily_reports/` - Hand-off inter-agents = livrables dĂ©terministes commitĂ©s in-repo (fixtures/specs `out/`, SPEC, README), consommĂ©s directement par l'agent destinataire - Blockers escalĂ©s Ă  Michel Roy via WhatsApp +18296296385 ## Éthique - SensibilitĂ© culturelle FR/EN/ES + RD - Voix AmĂ©lie QC (multilingual_v2) pour toute interaction OTOIA - Respect brand luxury dark+dorĂ© partout ## Ressources OTOV7 dĂ©jĂ  en place (À RÉUTILISER, ne pas dupliquer) Voir le fichier maĂźtre : `/opt/oto/claude_code_mandate_dtp/AGENTS_EXISTING_ASSETS.md` section correspondante Ă  cet agent. **RĂšgle absolue** : refactorer/amĂ©liorer les modules existants avant de crĂ©er du nouveau code.