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~=<正则表达式>按条目编号覆盖 BOQ 的某一节(当章节名称重复时使用,例如两个章节都叫 "TUBULACOES E CONEXOES");id=<条目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 中的货币单位 |
| 位置、场地布局(楼层堆叠/独立区块)、哪些并行施工 | 决定施工顺序。测试表明:草案自身的排程策略是导致与实际项目差异的主要原因 |
| 合同工期(月) | 没有此信息时,17 个真实项目中只有 4-6 个的工期是合理的(0.75-1.33 倍);加入此信息后,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 导入检查)使用了未捆绑的文件。