BOQ → 初稿進度表 (Primavera P6)
排程人員在建立基線時,需要逐一手動輸入每個活動、建立連結,並根據 BOQ 進行成本加載。 此技能會自動產出這份初稿:每個工種每個位置一個活動、邏輯來自真實進度表、 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~=<正則表達式>當章節名稱重複時(例如兩個章節都叫做 "TUBULACOES E CONEXOES")以項目編號涵蓋 BOQ 區段;一行 id 涵蓋單一行。- 先一般規則,後例外:後面的規則覆蓋前面的規則;一行規則永遠優先。
- 鋼筋混凝土:將同一構件的模板、鋼筋和澆築折疊至構件類型(基腳、柱、繫梁、板),除非 BOQ 將其視為全工地工種。
- 位置:務必設定(空白會將一行分散至每個位置,包含工地)。建築樓層由低到高;工地設置、外部工程、邊界牆、外部水箱→歸入工地位置。
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 的行事曆與貨幣 |
| 位置、現地、佈局(樓層堆疊 / 獨立區塊)、哪些並行 | 順序。測試結果:初稿的自身排序策略是實際工作差異的主要原因 |
| 合約期間(月) | 沒有它時,工期正確性(0.75-1.33 倍)僅適用 4-6/17 個實際工作;加入後 17/17 個工作正確 |
| 他們已知的三個工期(一個結構、一個外殼/裝修、一個機電工種) | 初稿工期誤差約 2.25 倍;三個錨點可將其降至約 1.76 倍,並縮放其餘 |
| 工地工作提前進行或在結構之後(邊界牆、排水、水箱、鋪面) | 影響實際資金;承包商常先建圍牆 |
| 標記為「排程人員可拆分」的分類點 | Claude 已放置但排程人員可能拆分的行 |
空白答案保留預設值,報告會說明 – 切勿為排程人員虛構答案。
4. 建置
py scripts/build.py outputs/<job>
執行 plan.py + export.py:產生 schedule.json/.csv、report.md、schedule.xer。
每個活動攜帶其 BOQ 行 ID 與工期理由;每個連結說明來源(真實進度表:n 個連結 A→B,預設順序,排程人員的答案)。
匯入
- 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 並排程至與引擎相同的日期。
- 工期:中位數誤差 x2.25,加入三個排程人員工期後為 x1.76。
- 非現金流預測:初稿的月曲線與真實曲線的接近程度,並不優於教科書中的 S 曲線。每當有人詢問關於現金流或時程的初稿時,請說明此點。
限制
- 僅支援文字型 BOQ(無掃描 PDF)。每個工種每個位置一個活動:排程人員可按需進一步拆分。
- 單價與邏輯來自 73 份進度表,多為建築工程;土木/基礎設施尚未測試。
data/來自 73 份公開可取得的 P6 進度表(原始 XER 未包含在內)。
測試
py tests/smoke.py – 將內附範例(公開的 Januaria 招標 BOQ,628 行)依序執行分類、問題、建置與 P6 XER:檢查行數、金額至分、表格、任務、費用、連結、專案行事曆。任何變更後請執行。開發測試(3 份真實 BOQ、17 份保留進度表、P6 匯入檢查)所使用的檔案未包含在此。