# 🤝 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` | 25 | **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 : **81 tests** (25 + 31 + 25), 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 + 6 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). ## 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.