Community生产力与协作github.com

hamzaabduljabbar/boq-schedule

将带有价格的工程量清单(BOQ)转换为初步的成本加载施工进度计划,可导入 Primavera P6(XER 格式)——按工种和位置组织活动,逻辑源自 73 个真实 P6 进度计划,每项活动都包含 BOQ 金额和数量。

boq-schedule 是什么?

该技能旨在帮助施工规划师从带有价格的工程量清单(BOQ)自动生成初步的成本加载进度计划(Primavera P6 XER格式)。它通过Claude驱动,将BOQ中的每一条目(支持英语、葡萄牙语、西班牙语)分类为具体的工种(如混凝土、钢筋等)和位置(如场地、底层、顶层),并生成包含逻辑关系(从73个真实P6进度计划中学习)、成本和数量的活动网络。用户只需提供Excel或CSV格式的定价BOQ,然后回答一系列BOQ无法提供的规划问题(如布局、合同工期等)。最终输出一个可直接导入P6的XER文件,其中每项活动都带有其对应的BOQ条目ID和成本信息。需要特别注意的是,此技能不适用于将BOQ加载到已有进度计划中,也不提供现金流预测——它只是一个基于真实数据构建的初始框架,规划师需在此基础上进行调整和优化。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hamzaabduljabbar/autoConst-boq-schedule/tree/HEAD

Installed? Explore more 生产力与协作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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 导入检查)使用了未捆绑的文件。

相关技能