BOQ -> projet de planning (Primavera P6)
Un planificateur qui démarre un planning de référence tape chaque activité, la lie et la charge en coûts à partir du BOQ. Cette compétence ébauche cette première passe : une activité par corps d'état et par emplacement, la logique issue de plannings réels, les montants du BOQ sur chaque activité, dans un fichier XER que P6 importe. Le planificateur maîtrise les dates – l’ébauche est le squelette qu’il corrige, pas une prévision.
Ce qu’elle nécessite
- Un BOQ chiffré : .xlsx ou .csv avec description + quantité + montant (ou taux). Des en-têtes en colonne ou sous forme de lignes de texte au-dessus des données, des numéros d’article (1, 1.2, 1.2.3) acceptables. En-têtes en anglais, portugais ou espagnol.
- Python 3 et
data/rates.json(taux et logique extraits). Rien d’autre.
Flux de travail (Claude exécute chaque étape ; le planificateur approuve la classification et répond aux questions)
1. Lire le BOQ
py scripts/read_boq.py <boq.xlsx|.csv> --out outputs/<job>
Écrit brief.csv (chaque ligne avec son chemin de chapitre et une estimation par mot‑clé) et types.md (les types de travaux
et les règles pour l’étape 2). Indiquez à l’utilisateur le nombre de lignes, le total et la feuille/les colonnes utilisées.
Si le total ne correspond pas au total du BOQ, arrêtez‑vous et trouvez pourquoi avant de classifier quoi que ce soit.
2. Classifier chaque ligne (c’est le travail de Claude, pas l’estimation par mot‑clé)
Lisez types.md, puis lisez TOUT brief.csv – chapitre par chapitre, en pages si c’est long. Écrivez
outputs/<job>/decisions.csv avec les colonnes key,type,locations,reason :
chapter=<début du chemin du chapitre>couvre un chapitre (casse/accents ignorés) ;id~=<regex>couvre une section du BOQ par numéro d’article lorsque les noms de chapitre se répètent (ex. deux chapitres appelés "TUBULACOES E CONEXOES") ; un id de ligne en couvre une.- Règles générales d’abord, exceptions après : une règle ultérieure remplace une antérieure ; une règle de ligne l’emporte toujours.
- Béton armé : regroupez le coffrage, les aciers et le coulage d’un même élément dans le type de l’élément (semelle, poteau, longrine, dalle), sauf si le BOQ les facture comme corps d’état globaux.
- Emplacements : définissez‑les toujours (un champ vide répartit une ligne sur tous les emplacements, y compris le site). Étages des bâtiments du plus bas au plus haut ; installation de chantier, travaux extérieurs, mur de clôture, réservoirs extérieurs → emplacement "site".
skipuniquement pour l’argent qui n’est pas un travail de chantier, et dites pourquoi. Chapitres mixtes ou douteux : choisissez le meilleur type et écrivez "le planificateur peut diviser" dans la raison – ceux‑ci reviendront sous forme de questions.- Ne faites pas confiance à l’estimation par mot‑clé : elle se trompe ("tapume com telha" → toit, "cabeamento" → dalle, "aluminio" → éclairage).
py scripts/apply_types.py outputs/<job> --locations "Site|GF|FF"
S’arrête sur tout type inconnu, emplacement inconnu ou ligne non classifiée. Vérification des montants : classifié + ignoré = total BOQ.
Écrit lines.csv et typing.md (montant par corps d’état, qui a classifié chaque ligne, avertissements d’unité). Montrez à l’utilisateur
le tableau des montants par corps d’état et les avertissements ; corrigez et relancez jusqu’à ce que ce soit propre.
3. Interroger le planificateur
py scripts/questions.py outputs/<job> --start 2026-01-05
Construit un premier projet non calibré et écrit questions.md + answers.json avec des réponses suggérées.
Posez les questions à l’utilisateur en langage clair (AskUserQuestion fonctionne bien pour les questions oui/non), puis
remplissez answers.json :
| Question | Pourquoi c’est important |
|---|---|
| Date de début, semaine de travail (5/6/7), devise | Le calendrier et la devise des montants dans P6 |
| Emplacements, site, agencement (étages empilés / blocs séparés), lesquels sont parallèles | La séquence. Testé : la propre stratégie de séquencement de l’ébauche est la principale raison pour laquelle les projets réels diffèrent |
| Durée du contrat (mois) | Sans elle, la durée était correcte (0,75-1,33x) pour 4 à 6 des 17 projets réels ; avec elle, 17 sur 17 |
| Trois durées qu’ils connaissent (une structure, une enveloppe/finition, un corps d’état technique) | Les durées de l’ébauche sont erronées d’un facteur ~2,25 sur une ligne ; trois points d’ancrage les ramènent à ~1,76x et mettent à l’échelle le reste |
| Travaux de site précoces ou après la structure (mur de clôture, drainage, réservoirs, pavage) | Déplace de l’argent réel ; les entrepreneurs construisent souvent le mur en premier |
| Points de classification marqués "le planificateur peut diviser" | Lignes que Claude a placées mais qu’un planificateur pourrait diviser |
Les réponses vides gardent la valeur par défaut et le rapport le mentionne – n’inventez jamais une réponse pour le planificateur.
4. Construire
py scripts/build.py outputs/<job>
Exécute plan.py + export.py : schedule.json/.csv, report.md, schedule.xer.
Chaque activité porte ses identifiants de ligne BOQ et la raison de sa durée ; chaque lien indique d’où il vient
(plannings réels : n liens A->B, ordre par défaut, réponse du planificateur).
Importer
- P6 : Fichier > Importer > Primavera PM (XER) > Créer un nouveau projet, puis Outils > Planification (F9). Les dépenses apparaissent par activité sous la forme " BOQ " avec quantité, unité et prix unitaire.
Preuves (toutes sur des données réelles, leave‑one‑out)
- Classification : BOQ Hassan 22/22 lignes = l’activité propre du planificateur par ligne (estimation par mot‑clé 15/22). Aracaju 643 lignes et Januaria 628 lignes classifiées, montant au centime près.
- Logique : 75 à 80 % des liens réels sont conservés sur 17 plannings mis de côté ; Hassan 18/18.
- P6 : le fichier XER de l’ébauche s’importe dans P6 Professional 25 et se planifie aux mêmes dates que le moteur.
- Durées : erreur médiane x2,25, x1,76 avec trois durées du planificateur.
- Pas une prévision de trésorerie : la courbe mensuelle de l’ébauche n’était pas plus proche de la réalité qu’une courbe en S théorique. Dites‑le chaque fois que quelqu’un demande une prévision de trésorerie ou de calendrier à partir de l’ébauche.
Limites
- BOQ textuels uniquement (pas de PDF scannés). Une activité par corps d’état et par emplacement : le planificateur divise plus finement.
- Les taux et la logique proviennent de 73 plannings, principalement des bâtiments ; les ouvrages de génie civil/infrastructure ne sont pas testés.
data/est extrait de 73 plannings P6 publics (les XER bruts ne sont pas inclus).
Tests
py tests/smoke.py – l’exemple fourni (BOQ d’appel d’offres public Januaria, 628 lignes) en passant par la classification, les questions, la construction et
le XER P6 : lignes, montant au centime, tableaux, tâches, dépenses, liens, calendrier du projet. À exécuter après toute modification.
Les tests de développement (3 BOQ réels, 17 plannings mis de côté, la vérification d’import P6) utilisaient des fichiers non inclus.