[DTP-Worker] Sprint 8 · buffer L75 · Doc agent CRM (stub→doc réelle · 3 modules Sprint 4 sourcés + anti-invention taux null) (Doc · roadmap L75)

- 03_agents/crm/AGENT.md : stub 29 lignes → doc réelle ~90 lignes
- Table 3 livrables CRM (workflow_vente/dossier_vente/commissions) :
  sprint · CLI build|validate · job CI · nb tests (25/31/25 = 81, tous sourcés)
- #3 mis en avant (CRM = ERPNext natif · JAMAIS EspoCRM/HubSpot)
- Anti-invention #6 : taux commission null ; USD+DOP/Letter US cités #10
- Vérifs : guard vert · check_docs vert (liens OK) · 0 réf roadmap morte

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-30 13:01:09 +00:00
parent dbeea972ed
commit ccda618ea4
3 changed files with 169 additions and 6 deletions
+56 -6
View File
@@ -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 ## 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) ## Non-négociables (voir CLAUDE.md racine pour la liste complète)
- **CRM = ERPNext natif** — **JAMAIS** EspoCRM ni HubSpot (#3)
- Gitea only (jamais GitHub) - Gitea only (jamais GitHub)
- ERPNext natif en priorité - ERPNext natif en priorité absolue avant tout outil externe
- Score 4Big 95+/100 - 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 - Vérifier · Investiguer · Valider · Confirmer
## Livrable attendu semaines 1-8 ## Livrable attendu · roadmap
Voir `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` pour deliverables par sprint. 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 ## Communication inter-agents
- Rapports quotidiens dans `05_deliverables_mvp/daily_reports/` - Rapports quotidiens dans `05_deliverables_mvp/daily_reports/`
+36
View File
@@ -1,5 +1,41 @@
# Activity Log · 2026-07-30 · Claude Code DTP # 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) ## Session `20260730_122751` (session 25)
**Tâche** : **Sprint 8 · buffer L75 (corrections finales · doc)** — Toutes les **Tâche** : **Sprint 8 · buffer L75 (corrections finales · doc)** — Toutes les
@@ -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é.