hamzaabduljabbar/boq-schedule

Transformez un bordereau de quantités (BOQ) chiffré en un premier jet de programme de construction chargé en coûts, importable dans Primavera P6 (XER) — activités par corps d'état et par emplacement, logique apprise de 73 plannings P6 réels, montants et quantités du BOQ sur chaque activité.

Qu'est-ce que boq-schedule ?

Cette compétence permet de générer automatiquement un premier jet de planning de construction, chargé en coûts et directement importable dans Primavera P6 au format XER, à partir d'un bordereau de quantités (BOQ) chiffré. Elle lit les lignes du BOQ dans plusieurs langues (anglais, portugais, espagnol) et les classifie par corps d'état et emplacement avec justification. Une série de questions est posée au planificateur pour préciser les éléments non présents dans le BOQ : emplacements, organisation des lieux, durée du contrat, trois durées connues, et l'ordre des travaux de site. Le résultat final est un planning d'activités liées, avec les coûts et quantités du BOQ intégrés, et un rapport expliquant chaque décision. Basé sur l'apprentissage de 73 plannings P6 réels, il offre une fiabilité de 75 à 80 % sur les liens logiques et une réduction de l'erreur de durée de x2,25 à x1,76 lorsque trois durées sont fournies par le planificateur.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hamzaabduljabbar/autoConst-boq-schedule/tree/HEAD

Installed? Explore more Productivité et collaboration skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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".
  • skip uniquement 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 :

QuestionPourquoi c’est important
Date de début, semaine de travail (5/6/7), deviseLe calendrier et la devise des montants dans P6
Emplacements, site, agencement (étages empilés / blocs séparés), lesquels sont parallèlesLa 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.

Skills associés