← 返回 Skills 市场
ruiyongwang

Estimate Builder

作者 ruiyongwang · GitHub ↗ · v1.0.0 · MIT-0
darwinlinuxwin32 ⚠ suspicious
90
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install cn-estimate-builder
功能描述
建设工程项目估算编制系统。生成包含人工费、材料费、机械费、分包费、其他费的详细造价分解表,符合GB/T 50500-2024计价标准。
使用说明 (SKILL.md)

\r \r

📊 建设工程估算编制系统\r

\r

💼 业务背景\r

\r

问题痛点\r

  • 造价构成复杂,人材机管利规税难以厘清\r
  • 多层级费用类别统计困难\r
  • 费率计算逻辑容易出错\r
  • 清单格式要求各地不同\r \r

解决方案\r

结构化估算编制器,依据 GB/T 50500-2024《建设工程工程量清单计价标准》生成专业工程造价估算,支持 proper cost categorization, markups, and export capabilities.\r \r

📐 核心成本类别\r

\r | 类别 | 中文名称 | 说明 |\r |------|---------|------|\r | LABOR | 人工费 | 直接从事施工的生产工人开支的各项费用 |\r | MATERIAL | 材料费 | 建筑工程材料、构件、零件、半成品的费用 |\r | EQUIPMENT | 机械费 | 工程施工机械使用费 |\r | SUBCONTRACTOR | 专业工程暂估价/分包费 | 专业工程分包及暂估价 |\r | OTHER | 其他项目费 | 措施费、规费、税金等 |\r \r

💻 技术实现\r

\r

import pandas as pd\r
from typing import Dict, Any, List, Optional\r
from dataclasses import dataclass, field\r
from datetime import date\r
from enum import Enum\r
\r
\r
class CostCategory(Enum):\r
    """造价类别枚举(符合GB/T 50500-2024)"""\r
    人工费 = "labor"\r
    材料费 = "material"\r
    机械费 = "equipment"\r
    专业工程 = "subcontractor"\r
    其他项目费 = "other"\r
\r
\r
@dataclass\r
class 估算清单项:\r
    """估算清单行项目"""\r
    行号: int\r
    工作分解编码: str  # WBS编码\r
    项目名称: str      # 清单项目名称\r
    工程量: float\r
    单位: str\r
    综合单价: float\r
    费用类别: CostCategory\r
    备注: str = ""\r
\r
    @property\r
    def 合价(self) -> float:\r
        return round(self.工程量 * self.综合单价, 2)\r
\r
\r
@dataclass\r
class 费用汇总:\r
    """分部分项工程费用汇总"""\r
    人工费: float = 0\r
    材料费: float = 0\r
    机械费: float = 0\r
    专业工程费: float = 0\r
    其他项目费: float = 0\r
\r
    @property\r
    def 分部分项费(self) -> float:\r
        return self.人工费 + self.材料费 + self.机械费 + self.专业工程费 + self.其他项目费\r
\r
\r
@dataclass\r
class 费率调整:\r
    """费率调整项(规费、税金、利润等)"""\r
    名称: str\r
    费率: float  # 小数表示 (0.10 = 10%)\r
    基数: str = "直接费"  # "直接费" 或 "小计"\r
\r
\r
class 估算编制器:\r
    """建设工程估算编制器"""\r
\r
    def __init__(self, 项目名称: str, 项目编号: str = ""):\r
        self.项目名称 = 项目名称\r
        self.项目编号 = 项目编号\r
        self.编制日期 = date.today()\r
        self.清单项列表: List[估算清单项] = []\r
        self.费率调整列表: List[费率调整] = []\r
        self._下一行号 = 1\r
\r
    def 添加清单项(self,\r
                   工作分解编码: str,\r
                   项目名称: str,\r
                   工程量: float,\r
                   单位: str,\r
                   综合单价: float,\r
                   费用类别: CostCategory = CostCategory.其他项目费,\r
                   备注: str = "") -> 估算清单项:\r
        """添加清单行项目"""\r
        item = 估算清单项(\r
            行号=self._下一行号,\r
            工作分解编码=工作分解编码,\r
            项目名称=项目名称,\r
            工程量=工程量,\r
            单位=单位,\r
            综合单价=综合单价,\r
            费用类别=费用类别,\r
            备注=备注\r
        )\r
        self.清单项列表.append(item)\r
        self._下一行号 += 1\r
        return item\r
\r
    def 添加费率调整(self, 名称: str, 费率: float, 基数: str = "直接费"):\r
        """添加费率调整项(规费、利润、税金等)"""\r
        self.费率调整列表.append(费率调整(名称=名称, 费率=费率, 基数=基数))\r
\r
    def 设置标准费率(self,\r
                     管理费: float = 0.10,\r
                     利润: float = 0.07,\r
                     规费: float = 0.05,\r
                     税金: float = 0.09):\r
        """设置标准建设工程费率(依据建标[2013]44号)"""\r
        self.费率调整列表 = [\r
            费率调整("管理费", 管理费, "直接费"),\r
            费率调整("利润", 利润, "小计"),\r
            费率调整("规费", 规费, "小计"),\r
            费率调整("税金", 税金, "小计")\r
        ]\r
\r
    def 获取费用汇总(self) -> 费用汇总:\r
        """按费用类别获取汇总"""\r
        汇总 = 费用汇总()\r
        for item in self.清单项列表:\r
            费用 = item.合价\r
            if item.费用类别 == CostCategory.人工费:\r
                汇总.人工费 += 费用\r
            elif item.费用类别 == CostCategory.材料费:\r
                汇总.材料费 += 费用\r
            elif item.费用类别 == CostCategory.机械费:\r
                汇总.机械费 += 费用\r
            elif item.费用类别 == CostCategory.专业工程费:\r
                汇总.专业工程费 += 费用\r
            else:\r
                汇总.其他项目费 += 费用\r
        return 汇总\r
\r
    def 计算总造价(self) -> Dict[str, Any]:\r
        """计算含费率调整的估算总造价"""\r
        汇总 = self.获取费用汇总()\r
        直接费 = 汇总.分部分项费\r
\r
        费率明细 = []\r
        小计 = 直接费\r
\r
        for 费率项 in self.费率调整列表:\r
            if 费率项.基数 == "直接费":\r
                金额 = 直接费 * 费率项.费率\r
            else:\r
                金额 = 小计 * 费率项.费率\r
\r
            费率明细.append({\r
                '名称': 费率项.名称,\r
                '费率': f"{费率项.费率 * 100:.1f}%",\r
                '金额': round(金额, 2)\r
            })\r
            小计 += 金额\r
\r
        return {\r
            '费用汇总': {\r
                '人工费': round(汇总.人工费, 2),\r
                '材料费': round(汇总.材料费, 2),\r
                '机械费': round(汇总.机械费, 2),\r
                '专业工程费': round(汇总.专业工程费, 2),\r
                '其他项目费': round(汇总.其他项目费, 2),\r
                '分部分项工程费': round(直接费, 2)\r
            },\r
            '费率调整': 费率明细,\r
            '规费+利润+税金合计': round(小计 - 直接费, 2),\r
            '建筑安装工程费': round(小计, 2)\r
        }\r
\r
    def 按WBS分组(self) -> Dict[str, List[估算清单项]]:\r
        """按WBS编码前缀分组清单项"""\r
        分组结果 = {}\r
        for item in self.清单项列表:\r
            前缀 = item.工作分解编码.split('.')[0] if '.' in item.工作分解编码 else item.工作分解编码\r
            if 前缀 not in 分组结果:\r
                分组结果[前缀] = []\r
            分组结果[前缀].append(item)\r
        return 分组结果\r
\r
    def 从DataFrame导入(self, df: pd.DataFrame):\r
        """从DataFrame导入清单项"""\r
        for _, row in df.iterrows():\r
            self.添加清单项(\r
                工作分解编码=str(row.get('WBS编码', '')),\r
                项目名称=row['项目名称'],\r
                工程量=float(row['工程量']),\r
                单位=row['单位'],\r
                综合单价=float(row['综合单价']),\r
                费用类别=CostCategory(row.get('费用类别', 'other').lower()),\r
                备注=row.get('备注', '')\r
            )\r
\r
    def 导出到DataFrame(self) -> pd.DataFrame:\r
        """导出估算到DataFrame"""\r
        data = []\r
        for item in self.清单项列表:\r
            data.append({\r
                '行号': item.行号,\r
                'WBS编码': item.工作分解编码,\r
                '项目名称': item.项目名称,\r
                '工程量': item.工程量,\r
                '单位': item.单位,\r
                '综合单价': item.综合单价,\r
                '合价': item.合价,\r
                '费用类别': item.费用类别.value,\r
                '备注': item.备注\r
            })\r
        return pd.DataFrame(data)\r
\r
    def 导出到Excel(self, 输出路径: str) -> str:\r
        """导出估算到Excel(符合清单计价格式)"""\r
        总造价 = self.计算总造价()\r
\r
        with pd.ExcelWriter(输出路径, engine='openpyxl') as writer:\r
            # 封面汇总\r
            封面数据 = pd.DataFrame([{\r
                '项目名称': self.项目名称,\r
                '项目编号': self.项目编号,\r
                '编制日期': self.编制日期,\r
                '清单项数量': len(self.清单项列表),\r
                '分部分项工程费': 总造价['费用汇总']['分部分项工程费'],\r
                '建筑安装工程费': 总造价['建筑安装工程费']\r
            }])\r
            封面数据.to_excel(writer, sheet_name='汇总封面', index=False)\r
\r
            # 清单明细\r
            清单df = self.导出到DataFrame()\r
            清单df.to_excel(writer, sheet_name='清单明细', index=False)\r
\r
            # 费用构成\r
            费用df = pd.DataFrame([总造价['费用汇总']])\r
            费用df.to_excel(writer, sheet_name='费用构成', index=False)\r
\r
            # 费率调整\r
            if 总造价['费率调整']:\r
                费率df = pd.DataFrame(总造价['费率调整'])\r
                费率df.to_excel(writer, sheet_name='费率调整', index=False)\r
\r
        return 输出路径\r
\r
    def 校核(self) -> List[str]:\r
        """校核估算常见问题"""\r
        问题列表 = []\r
\r
        if not self.清单项列表:\r
            问题列表.append("估算无清单项")\r
\r
        for item in self.清单项列表:\r
            if item.工程量 \x3C= 0:\r
                问题列表.append(f"行{item.行号}: 工程量无效")\r
            if item.综合单价 \x3C 0:\r
                问题列表.append(f"行{item.行号}: 综合单价为负")\r
            if not item.项目名称:\r
                问题列表.append(f"行{item.行号}: 缺少项目名称")\r
\r
        if not self.费率调整列表:\r
            问题列表.append("未定义费率调整(管理费、利润、规费、税金)")\r
\r
        return 问题列表\r
```\r
\r
## 🚀 快速开始\r
\r
```python\r
# 创建估算\r
估算 = 估算编制器("某学校建设项目", "PRJ-2024-001")\r
\r
# 添加清单项(示例:教学楼土建工程)\r
估算.添加清单项("01.01", "平整场地", 5000, "m²", 8.50, CostCategory.其他项目费)\r
估算.添加清单项("02.01", "钢筋混凝土基础", 200, "m³", 680, CostCategory.材料费)\r
估算.添加清单项("02.02", "基础模板", 1500, "m²", 45, CostCategory.人工费)\r
估算.添加清单项("02.03", "土方开挖", 3000, "m³", 28, CostCategory.机械费)\r
估算.添加清单项("03.01", "钢结构工程", 50, "t", 8500, CostCategory.专业工程费)\r
\r
# 设置标准费率(依据建标[2013]44号)\r
估算.设置标准费率(管理费=0.10, 利润=0.07, 规费=0.05, 税金=0.09)\r
\r
# 计算总造价\r
结果 = 估算.计算总造价()\r
print(f"分部分项工程费: ¥{结果['费用汇总']['分部分项工程费']:,.2f}")\r
print(f"建筑安装工程费: ¥{结果['建筑安装工程费']:,.2f}")\r
```\r
\r
## 📋 常见用法\r
\r
### 1. 按费用类别统计\r
```python\r
汇总 = 估算.获取费用汇总()\r
print(f"人工费: ¥{汇总.人工费:,.2f}")\r
print(f"材料费: ¥{汇总.材料费:,.2f}")\r
print(f"机械费: ¥{汇总.机械费:,.2f}")\r
```\r
\r
### 2. 导出到Excel\r
```python\r
估算.导出到Excel("项目估算成果.xlsx")\r
```\r
\r
### 3. 估算校核\r
```python\r
问题 = 估算.校核()\r
for p in 问题:\r
    print(f"⚠️ {p}")\r
```\r
\r
## 📚 规范参考\r
\r
| 标准号 | 标准名称 | 适用范围 |\r
|--------|---------|---------|\r
| GB/T 50500-2024 | 建设工程工程量清单计价标准 | 清单编制、计价 |\r
| 建标[2013]44号 | 建筑安装工程费用项目组成 | 费用构成 |\r
| GB/T 51262-2017 | 建筑工程施工质量验收统一标准 | 质量验收 |\r
\r
## 📖 触发场景\r
\r
- 建设工程估算编制\r
- 工程量清单编制\r
- 造价构成分析\r
- 费率计算与调整\r
- 估算成果导出\r
安全使用建议
Do not install yet. Ask the publisher to explain/resolve these points before proceeding: (1) Confirm the publisher/owner identity (ownerId mismatch between registry and _meta.json/claw.json). (2) Explain why 'filesystem' permission is declared and what files (if any) the skill will read or write; refuse or restrict filesystem access unless explicitly required. (3) Clarify runtime requirements: the skill lists python3 but references pandas in code—confirm whether the skill will execute code locally and what Python packages are needed. (4) Reconcile inconsistent default markup/fee rates between instructions.md and SKILL.md so the agent behavior is predictable. (5) Verify the homepage/source (https://datadrivenconstruction.io) and request a signed release or repository link for the code. If you proceed, limit permissions (deny filesystem if possible), test with non-sensitive example data, and monitor for unexpected file access.
功能分析
Type: OpenClaw Skill Name: cn-estimate-builder Version: 1.0.0 The skill bundle is a legitimate construction cost estimation tool designed to generate cost breakdowns according to Chinese GB/T 50500-2024 standards. The Python code in SKILL.md contains standard business logic for calculating labor, material, and equipment costs, and the filesystem permission requested in claw.json is justified by the Excel export functionality. No indicators of data exfiltration, malicious execution, or prompt injection were found.
能力评估
Purpose & Capability
The skill claims to be an instruction-only estimator for GB/T 50500-2024 and includes Python sample code, which explains the python3 requirement. However, the package metadata (claw.json and _meta.json) shows different owner IDs and version numbers than the registry metadata, and claw.json declares a 'filesystem' permission even though there are no code files that would clearly need broad filesystem access. These inconsistencies suggest the declared capabilities/permissions are not fully aligned with the stated purpose.
Instruction Scope
The SKILL.md and instructions.md focus on building and validating estimates and include code snippets using pandas and DataFrame import/export methods. The runtime instructions themselves do not explicitly instruct reading arbitrary system files or exfiltrating data, but the DataFrame import/export examples imply file or data handling. There are inconsistent default rates between instructions.md (15% overhead / 10% profit / 5% contingency) and SKILL.md code (管理费 10%, 利润 7%, 规费 5%, 税金 9%), which is a functional inconsistency that could confuse users or agents following the skill.
Install Mechanism
This is instruction-only with no install spec and no downloaded artifacts, which is lower risk. The skill declares python3 as a required binary (consistent with included Python examples) but does not require or declare pandas or other Python packages that the examples reference.
Credentials
The skill does not request environment variables, credentials, or config paths. That is proportionate for an estimation assistant that doesn't integrate with external services.
Persistence & Privilege
always:false and user-invocable:true (normal). However, claw.json includes a 'filesystem' permission which would permit reading/writing files if enforced by the platform; the registry metadata and SKILL.md do not justify or explain why general filesystem access is needed. Also ownerId/version mismatches across files raise supply-chain provenance concerns about who controls the skill and whether it was tampered with.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install cn-estimate-builder
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /cn-estimate-builder 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
cn-estimate-builder 1.0.0 - Initial release of the construction project estimate compilation system with cost breakdown per GB/T 50500-2024 standard. - Supports detailed categorization: labor, material, equipment, subcontractor, and other costs. - Allows rate adjustments for management, profit, fees, and taxes. - Provides import/export via pandas DataFrame and Excel. - Includes WBS grouping, cost summary, and validation features.
元数据
Slug cn-estimate-builder
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Estimate Builder 是什么?

建设工程项目估算编制系统。生成包含人工费、材料费、机械费、分包费、其他费的详细造价分解表,符合GB/T 50500-2024计价标准。 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 90 次。

如何安装 Estimate Builder?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install cn-estimate-builder」即可一键安装,无需额外配置。

Estimate Builder 是免费的吗?

是的,Estimate Builder 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Estimate Builder 支持哪些平台?

Estimate Builder 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(darwin, linux, win32)。

谁开发了 Estimate Builder?

由 ruiyongwang(@ruiyongwang)开发并维护,当前版本 v1.0.0。

💬 留言讨论