BOQ → ドラフト工程表(Primavera P6)
プランナーがベースライン工程表を作成する際、通常はすべてのアクティビティを手入力し、リンクを張り、BOQから原価をロードします。このスキルはその初回パスを自動生成します。業種・場所ごとに1アクティビティ、実績スケジュールから学習したロジック、全アクティビティにBOQの金額を紐付け、P6でインポート可能なXERを出力します。日程の決定権はプランナーにあります – ドラフトは骨格であり、プランナーが修正するためのもので、予測ではありません。
必要なもの
- 価格設定済みBOQ: .xlsx または .csv 形式。説明 + 数量 + 金額(または単価)を含む。見出しは列として、またはテキスト行として上にある形式に対応。項目番号(1, 1.2, 1.2.3)も可。英語、ポルトガル語、スペイン語のヘッダーに対応。
- Python 3 および
data/rates.json(マイニングされた単価とロジック)。それ以外は不要。
ワークフロー(Claudeが全ステップを実行、プランナーはタイピングの承認と質問への回答を行う)
1. BOQを読み取る
py scripts/read_boq.py <boq.xlsx|.csv> --out outputs/<job>
brief.csv(各行のチャプターパスとキーワード推測を含む)と types.md(作業タイプとステップ2のルール)を出力します。ユーザーに行数、合計金額、使用したシート/列を通知します。合計金額がBOQの合計と一致しない場合は、タイピングを開始する前に停止して原因を特定します。
2. すべての行をタイピングする(これはキーワード推測ではなく、Claudeの役割です)
types.md を読み、次に brief.csv のすべてをチャプターごとに読みます。長い場合はページ分割します。outputs/<job>/decisions.csv を列 key,type,locations,reason で書き出します。
chapter=<チャプターパスの開始>はチャプター全体をカバーします(大文字/アクセント無視)。id~=<正規表現>は、チャプター名が重複する場合(例:2つのチャプターが両方とも「TUBULACOES E CONEXOES」という名前)に、項目番号でBOQセクションをカバーします。行IDは1行をカバーします。- 最初に一般ルール、次に例外: 後のルールが前のルールを上書きします。行ルールは常に優先されます。
- 鉄筋コンクリート: 型枠、鉄筋、打設を1つのエレメント(基礎、柱、梁、スラブ)のタイプにまとめます。ただし、BOQで作業全体として価格設定されている場合は除きます。
- 場所: 常に設定します(空白の場合はすべての場所(サイトを含む)に1行が広がります)。建物は低い階から順に。サイト設置、外構、境界壁、外部タンク → サイト場所。
skipはサイト作業ではない場合のみ使用し、理由を記載します。混合または疑わしいチャプター: 最適なタイプを選択し、「プランナーが分割する可能性あり」と理由に記載します – これらは後で質問として戻ります。- キーワード推測を信頼しないでください:誤読することがあります(「tapume com telha」→屋根、「cabeamento」→スラブ、「aluminio」→照明)。
py scripts/apply_types.py outputs/<job> --locations "Site|GF|FF"
不明なタイプ、不明な場所、未決定の行があると停止します。金額チェック: タイピング済み + スキップ = BOQ合計。lines.csv と typing.md(業種別金額、各行の決定者、単位に関する警告)を出力します。ユーザーに業種別金額表と警告を表示し、修正してクリーンになるまで再実行します。
3. プランナーに質問する
py scripts/questions.py outputs/<job> --start 2026-01-05
キャリブレーションされていない初回ドラフトを構築し、questions.md + 提案された回答を含む answers.json を出力します。平易な言葉でユーザーに質問を提示し(はい/いいえの質問には AskUserQuestion が適しています)、その後 answers.json を記入します。
| 質問 | 重要な理由 |
|---|---|
| 開始日、稼働週(5/6/7)、通貨 | P6のカレンダーと通貨 |
| 場所、サイト、レイアウト(フロア積み重ね / 別ブロック)、並行作業の有無 | 順序。テスト済み: ドラフトのシーケンス戦略が実際のジョブと異なる主な理由 |
| 契約期間(月数) | これなしでは、17の実績ジョブ中4~6で期間の長さが適切でしたが(0.75-1.33倍)、ありでは17/17で適切 |
| プランナーが知っている3つの工期(構造1つ、外装/仕上げ1つ、設備工事1つ) | ドラフトの工期は1行あたり約2.25倍の誤差がありますが、3つのアンカーで約1.76倍になり、残りをスケールします |
| サイト作業は構造物の前か後か(境界壁、排水、タンク、舗装) | 実際の資金を移動します。請負業者は壁を先に建設することが多い |
| 「プランナーが分割する可能性あり」とフラグが立ったタイピングポイント | Claudeが配置したがプランナーが分割する可能性のある行 |
回答が空白の場合、デフォルトが使用され、レポートにその旨が記載されます。プランナーに代わって回答をでっち上げることは絶対にしないでください。
4. ビルド
py scripts/build.py outputs/<job>
plan.py + export.py を実行: schedule.json/.csv、report.md、schedule.xer。すべてのアクティビティには、対応するBOQ行IDと工期の理由が含まれます。すべてのリンクにはその出典(実績スケジュール: A→Bのnリンク、デフォルト順序、プランナーの回答)が記載されます。
インポート
- P6: ファイル > インポート > Primavera PM (XER) > 新規プロジェクト作成、その後 ツール > スケジュール (F9)。費用はアクティビティごとに「 BOQ <行>」として、数量、単位、単価とともに表示されます。
エビデンス(すべて実データで検証、一つ抜き法)
- タイピング: Hassan BOQ 22/22行 = プランナー自身のアクティビティと一致(キーワード推測は15/22)。Aracaju 643行、Januaria 628行をタイピング、金額はセント単位まで一致。
- ロジック: 17の保留スケジュールにおいて、実績リンクの75-80%が保持されました。Hassan 18/18。
- P6: ドラフトXERはP6 Professional 25にインポートされ、同じ日程でスケジュールされます。
- 工期: 中央誤差2.25倍、プランナーの3つの工期を使用すると1.76倍。
- キャッシュフロー予測ではありません: ドラフトの月次曲線は、教科書のS字曲線と同程度にしか実績と一致しませんでした。誰かがドラフトからキャッシュフローやタイミングについて尋ねてきた場合は、この点を必ず伝えてください。
制限
- テキストBOQのみ対応(スキャンPDFは不可)。業種・場所ごとに1アクティビティ。詳細分割はプランナーが行います。
- 単価とロジックは73のスケジュール(主に建築工事)から取得。土木/インフラ工事は未テスト。
data/は73の公開P6スケジュールからマイニングされたものです(生のXERはバンドルされていません)。
テスト
py tests/smoke.py - バンドルされたサンプル(公開されているJanuaria入札BOQ、628行)を、タイピング、質問、ビルド、P6 XERの全ステップでテストします。行数、金額の一致、テーブル、タスク、費用、リンク、プロジェクトカレンダーを検証します。変更後は必ず実行してください。開発用テスト(3つの実BOQ、17の保留スケジュール、P6インポートチェック)は、バンドルされていないファイルを使用していました。