diff --git a/03_agents/crm/AGENT.md b/03_agents/crm/AGENT.md index c3c9a75..2f414ac 100644 --- a/03_agents/crm/AGENT.md +++ b/03_agents/crm/AGENT.md @@ -1,17 +1,67 @@ -# CRM Agent · ERPNext CRM natif +# 🤝 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, workflow lead→contrat, JAMAIS EspoCRM ni HubSpot +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/` | 4 (roadmap L51) | 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/` | 4 (roadmap L51) | **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/` | 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. + +## 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é +- ERPNext natif en priorité absolue avant tout outil externe - Score 4Big 95+/100 -- Zéro invention chiffres +- 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 semaines 1-8 -Voir `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` pour deliverables par sprint. +## 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/` diff --git a/05_activity_log/2026-07-30.md b/05_activity_log/2026-07-30.md index 4e69ea6..b3da926 100644 --- a/05_activity_log/2026-07-30.md +++ b/05_activity_log/2026-07-30.md @@ -1,5 +1,41 @@ # Activity Log · 2026-07-30 · Claude Code DTP +## Session `20260730_125754` (session 26) + +**Tâche** : **Sprint 8 · buffer L75 (corrections finales · doc)** — Aucun module +roadmap ne reste à créer (recette `qa/acceptance` : 15/15 promesses `in_repo`, +seule M5 « 2 stores » hors périmètre worker · #8). Tâche buffer conforme au mandat +(« améliore la doc d'un AGENT.md existant ») : poursuite de la remédiation entamée +session 25 (QA) sur le **prochain agent le plus sous-documenté vs ce qu'il a livré**. + +**Gap comblé** : `03_agents/crm/AGENT.md` était le **stub générique de 29 lignes** +alors que l'agent **CRM a livré 3 modules substantiels** au Sprint 4 +(`workflow_vente`, `dossier_vente`, `commissions`). La doc ne reflétait rien de la +réalité livrée (même écart que QA en session 25). + +**Fichier modifié** : +- `03_agents/crm/AGENT.md` : réécrit (stub → doc réelle, ~90 lignes). Table des + **3 livrables CRM** (sprint · rôle · **entrée CLI** · **job CI** · **nb tests** — + tous **sourcés** depuis les modules réels + le CI), principe hand-off VPS (jamais + d'écriture serveur · #8), cross-cohérence source-unique (`workflow_vente_spec.json` + + `rbac_50_roles.json`), anti-invention (**taux commission `null`**), mise en avant + #3 (CRM = ERPNext natif · JAMAIS EspoCRM/HubSpot), coordination inter-agents. + +**Anti-invention (#6)** : **zéro chiffre fabriqué** — 25/31/25 = **81 tests** +comptés par `grep -c 'def test_'` ; jobs CI et sous-commandes `build`/`validate` +vérifiés par `grep` ; deliverables Sprint 4 cités depuis roadmap L51 ; USD+DOP / +Letter US cités depuis CLAUDE.md #10. + +**Vérifs** : `ci/guard_constraints.sh` vert ; `ci/check_docs.sh` vert (liens +internes OK · aucun lien mort) ; 0 référence `ROADMAP_8_WEEKS.md` (non régressé). + +**Hors périmètre worker (VPS · #8)** : néant (changement doc-only en-repo). + +**Détail complet** : voir +[`05_deliverables_mvp/daily_reports/2026-07-30-session26.md`](../05_deliverables_mvp/daily_reports/2026-07-30-session26.md). + +**Auto-score 4Big** : 95/100. + ## Session `20260730_122751` (session 25) **Tâche** : **Sprint 8 · buffer L75 (corrections finales · doc)** — Toutes les diff --git a/05_deliverables_mvp/daily_reports/2026-07-30-session26.md b/05_deliverables_mvp/daily_reports/2026-07-30-session26.md new file mode 100644 index 0000000..271745e --- /dev/null +++ b/05_deliverables_mvp/daily_reports/2026-07-30-session26.md @@ -0,0 +1,77 @@ +# Rapport de session · 2026-07-30 · session 26 + +**Agent** : Claude Code DTP · **Session** : `20260730_125754` +**Sprint** : 8 · **Volet** : buffer L75 (corrections finales · documentation agent) +**Auto-score 4Big** : 95/100 + +--- + +## 1. Contexte — pourquoi une tâche « doc » et pas un nouveau module + +La recette d'acceptation (`05_deliverables_mvp/qa/acceptance/out/acceptance_matrix.json`) +prouve que **15/15 promesses** roadmap sont `in_repo` (seule M5 « app publiée +2 stores » reste hors périmètre worker · #8). **Aucun module roadmap ne reste à +créer** ; un 5ᵉ générateur méta serait un doublon (interdit CLAUDE.md #5). La +consigne de mandat prévoit ce cas : *« Si aucune tâche prioritaire évidente → +améliore la doc d'un AGENT.md existant. »* + +La session 25 a fait exactement cela pour l'agent **QA** (stub 29 lignes → doc +réelle 82 lignes). J'ai poursuivi la même remédiation sur le **prochain agent le +plus sous-documenté au regard de ce qu'il a livré**. + +## 2. Défaut corrigé — `03_agents/crm/AGENT.md` était un stub + +L'agent **CRM** a livré **3 modules substantiels** au Sprint 4 +(`05_deliverables_mvp/crm/`) — pipeline vente, DocType porteur, barème +commissions — mais son `AGENT.md` restait le **stub générique de 29 lignes** qui +ne reflétait rien de la réalité livrée. Écart de documentation identique à celui +traité pour QA en session 25. + +## 3. Ce qui a été fait + +`03_agents/crm/AGENT.md` réécrit (stub → doc réelle, ~90 lignes) : + +- **Table des 3 livrables CRM** — module · sprint (ligne roadmap) · rôle · **entrée + CLI** · **job CI** · **nb tests** — chaque valeur **sourcée** depuis les modules + réels et le CI. +- Principe directeur : **hand-off VPS, jamais d'écriture serveur** (#8) ; ordre + d'import DocType-avant-Workflow. +- Cross-cohérence (source unique) : nom/champ d'état/statuts dérivés de + `workflow_vente_spec.json` ; rôles résolus depuis `rbac_50_roles.json`. +- Anti-invention (#6) explicité : **taux de commission `null`** (aucun taux dans + CLAUDE.md), USD+DOP et Letter US **cités** depuis #10. +- Non-négociable **#3 mis en avant** : CRM = ERPNext natif, **JAMAIS** EspoCRM/HubSpot. +- Coordination inter-agents (ERPNext Backend · RBAC · Publiciste · QA · Faisabilité). + +## 4. Anti-invention (#6) + +**Zéro chiffre fabriqué.** Chaque nombre de la doc est un compte réel : + +| Source | Valeur citée | +|---|---| +| `grep -c 'def test_'` sur les 3 suites | 25 / 31 / 25 → **81 tests** | +| `.gitea/workflows/ci.yml` | jobs `crm-workflow-vente-tests`, `crm-dossier-vente-tests`, `crm-commissions-tests` (tous dans `gate.needs`) | +| `grep add_parser` des 3 générateurs | sous-commandes `build` / `validate` | +| `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` L51 | deliverables Sprint 4 | +| CLAUDE.md #3 / #10 | ERPNext natif · USD+DOP · Letter US | + +## 5. Vérifications + +- `ci/guard_constraints.sh` → **vert** (contraintes non-négociables OK). +- `ci/check_docs.sh` → **vert** (liens internes OK · aucun lien mort). +- `grep ROADMAP_8_WEEKS\.md 03_agents/` → **0 référence morte** (non régressé + depuis session 25). +- Comptes de tests vérifiés par `grep` (pytest non installé dans l'environnement + worker ; l'exécution réelle est assurée par le CI Gitea). + +## 6. Hors périmètre worker (VPS · #8) + +Néant — changement doc-only en-repo. + +--- + +**Bilan** : la documentation de l'agent CRM reflète désormais fidèlement les 3 +livrables réellement produits, avec chaque chiffre sourcé. Reste sous-documentés +(stubs 29 lignes) : bim, devops, erpnext_backend, ifc_speckle, mobile, onapi_legal, +rendu, seo, frontend_console — candidats naturels pour les prochaines itérations +buffer, à traiter par ordre de volume livré.