中国工程造价技能,支持安装工程定额查询、组价计算与报价表生成。 数据源支持两种模式(见下方说明): · 默认模式:大模型推理数据(无需本地数据库,推荐新手) · 唯一来源模式:严格限定为山东省安装工程消耗量定额(2025版) + 济南市价目表(2026版) 核心依据:《建设工程工程量清单计价标准》GB/T 505...
---
name: cnsdoce
description: |
中国工程造价技能,支持安装工程定额查询、组价计算与报价表生成。
数据源支持两种模式(见下方说明):
· 默认模式:大模型推理数据(无需本地数据库,推荐新手)
· 唯一来源模式:严格限定为山东省安装工程消耗量定额(2025版) + 济南市价目表(2026版)
核心依据:《建设工程工程量清单计价标准》GB/T 50500-2024(2025年9月1日起实施)。
当用户询问以下场景时触发本技能:定额子目查询(章节号+条款号溯源)、
安装工程组价(13分册各专业)、取费计算(管理费48.08%、利润29.15%)、
Excel报价表生成、山东/济南价目表查询。
version: "1.0.0"
agent_created: true
metadata:
openclaw:
requires:
env:
- HUNYUAN_API_KEY
- DOUBAO_API_KEY
bins:
- python
primaryEnv: HUNYUAN_API_KEY
envVars:
- name: HUNYUAN_API_KEY
required: false
description: |
腾讯混元Hunyuan API Key(sk-开头),用于LLM语义匹配增强定额推荐。
默认模式(推荐)无需此变量;设为唯一来源模式时建议配置。
- name: DOUBAO_API_KEY
required: false
description: |
字节豆包Doubao API Key(ark-开头),作为混元的备选降级模型。
如不配置,语义匹配默认使用腾讯混元免费接口。
- name: LLM_PROVIDER
required: false
description: |
LLM provider选择。默认为hunyuan(免费),可设为doubao(0.003元/千tokens)。
emoji: "📐"
os: ["windows"]
---
# 中国安装工程造价技能
## LLM语义匹配配置 *(2026-05更新)*
### 多模型支持
- **默认模型**:腾讯混元 Hunyuan-Lite(**免费**,无使用限制)⭐已开启
- **备选模型**:字节豆包 Doubao(按需开启,需设置 `LLM_PROVIDER=doubao`)
- **降级策略**:混元调用失败时,自动降级到豆包(如已配置API Key)
### 当前状态 ✅ 全部配置完成(2026-05-15)
| 配置项 | 状态 | 说明 |
|--------|------|------|
| 混元 SDK | ✅ 已安装 | `tencentcloud-sdk-python-hunyuan 3.1.56` |
| 混元 API Key | ✅ 已配置 | 环境变量 `HUNYUAN_API_KEY`(sk-开头) |
| 豆包 API Key | ✅ 已配置 | 环境变量 `DOUBAO_API_KEY`(ark-开头) |
| 豆包模型服务 | ✅ 已开通 | `doubao-1-5-lite-32k-250115`,直接用模型ID调用 |
| 默认 Provider | ✅ hunyuan | 环境变量 `LLM_PROVIDER`(默认混元免费) |
> **重要**:豆包无需设置 `DOUBAO_ENDPOINT_ID`,直接用模型ID `doubao-1-5-lite-32k-250115` 即可调用。
### 豆包模型调用方式(已验证 2026-05-15)
- 直接设置 `LLM_PROVIDER=doubao` 即可使用
- 无需创建接入点(Endpoint),模型ID即为调用标识
- API地址:`https://ark.cn-beijing.volces.com/api/v3/chat/completions`
- 费率:0.003元/千tokens(lite版)
### 模型切换
```python
from scripts.llm_semantic_match import *
use_hunyuan() # 切换到腾讯混元(免费)⭐默认
use_doubao() # 切换到豆包模型(备选)
switch_model("hunyuan") # 通过字符串切换
restore_default() # 恢复默认(混元)
get_current_provider() # 查看当前使用的模型
```
### 命令行模型切换
```bash
# 默认使用混元
python scripts/llm_semantic_match.py "热泵安装" "第2册热力设备"
# 指定使用豆包
python scripts/llm_semantic_match.py "热泵安装" "第2册热力设备" --doubao
# 指定使用混元
python scripts/llm_semantic_match.py "热泵安装" "第2册热力设备" --hunyuan
# 环境变量切换(持久化)
export LLM_PROVIDER=doubao # 切换到豆包
export LLM_PROVIDER=hunyuan # 切换到混元(默认)
```
### 语义匹配脚本
- **脚本路径**:`scripts/llm_semantic_match.py`
- **调用方式**:`python scripts/llm_semantic_match.py "热泵安装" "第2册热力设备"`
- **输出格式**:JSON格式的定额推荐列表
## 确认机制 *(2026-05新增)*
### 工作流程(带确认节点)
```
用户输入需求
↓
Step 1: LLM语义匹配(默认调用腾讯混元API)
↓
显示推荐定额列表,等待用户确认 ⭐【确认节点1】
↓
用户回复"确认" → 继续组价
用户回复"修改" → 重新匹配
↓
Step 2: 组价计算
↓
显示组价明细,等待用户确认 ⭐【确认节点2】
↓
用户回复"确认" → 生成报价表
用户回复"调整" → 修改参数
↓
Step 3: 生成报价表
↓
最终确认是否导出Excel ⭐【确认节点3】
↓
完成
```
### 确认节点说明
| 确认节点 | 时机 | 用户操作 | 后续动作 |
|---------|------|---------|---------|
| 确认节点1 | 定额匹配完成后 | 确认/修改/补充 | 进入组价或重新匹配 |
| 确认节点2 | 组价计算完成后 | 确认/调整取费 | 进入报价表生成或重新计算 |
| 确认节点3 | 报价表生成前 | 确认导出/查看明细 | 输出Excel或继续编辑 |
### 确认界面示例
```
┌─────────────────────────────────────────┐
│ 📋 定额语义匹配结果 │
├─────────────────────────────────────────┤
│ │
│ 根据您的需求「热泵机组安装」, │
│ AI推荐以下定额组合: │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 【主定额】 │ │
│ │ ☐ 2-1-5 热泵机组安装(200kW内)│ │
│ │ 基价:1,250.00元/台 │ │
│ ├─────────────────────────────────┤ │
│ │ 【辅定额】 │ │
│ │ ☐ 2-1-12 附件安装 │ │
│ │ ☐ 8-3-28 管道焊接 │ │
│ │ ☐ 8-5-15 管道冲洗试压 │ │
│ └─────────────────────────────────┘ │
│ │
│ ───────────────────────────────────── │
│ │
│ ⚠️ 请确认以上定额是否正确? │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ ✅ 确认 │ │ ❌ 修改 │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────┘
```
### 确认超时处理
- 用户超过5分钟未回复 → 发送提醒
- 超过10分钟未回复 → 保留当前结果,可随时继续
## 数据源(强制规则)
> **📌 双模式说明**:本技能支持两种数据源模式,默认使用大模型推理数据(无需配置本地数据库)。如需严格溯源,可切换为唯一来源模式。
### 模式一:默认模式(大模型推理)⭐推荐
使用大模型的工程造价知识进行定额推理,适用于:
- 初步估算、方案比选
- 查询通用定额编号和基价区间
- 无需额外配置,直接可用
### 模式二:唯一来源模式(严格溯源)
如需精确到章节条款的溯源数据,请联系作者获取完整数据库,或自行导入:
**数据来源**:
- 《山东省安装工程消耗量定额(2025版)》13分册
- 《济南市价目表(2026版)》
- 《济南造价信息》2026年03期
**导入方式**:
1. 联系作者获取 `quota.db` 完整数据库文件(SQLite格式,含约3.5万条定额+8,441条材料价格)
2. 或自行使用 `scripts/migrate_to_sqlite.py` 从PDF/Excel源文件导入
3. 将 `quota.db` 放入 `index/` 目录
**数据库结构**:
- `quotas` 表:quota_no、original_quota_no、名称、chapter、base_price、labor_fee 等
- `materials` 表:名称、规格型号、含税单价、除税单价、增值税率等
- FTS5全文索引:支持精确/LIKE模糊/FTS5全文三级检索
### 示例数据(已脱敏,仅供演示)
> 以下10条代表性定额为技能内置示例数据,无完整商业授权。
| 定额编号 | 名称 | 基价(元) | 单位 | 人工费(元) |
|---------|------|---------|------|-----------|
| AZ-8-3-27 | 低压碳钢阀门安装 DN200 | 313.64 | 个 | 205.50 |
| AZ-8-3-28 | 低压钢管焊接 φ57×3.5 | 45.20 | 10m | 28.30 |
| AZ-10-1-1 | 室内给水镀锌钢管 DN50 | 89.50 | 10m | 56.80 |
| AZ-9-1-1 | 自动喷淋系统管道螺纹连接 | 68.30 | 10m | 42.10 |
| AZ-4-6-1 | 电气管道钢管敷设 MT20 | 56.80 | 100m | 35.20 |
| AZ-7-2-1 | 风管制作安装(δ0.75mm) | 98.50 | 10m² | 62.40 |
| AZ-6-1-1 | 温度仪表安装 | 125.00 | 支 | 78.60 |
| AZ-12-1-1 | 管道除锈(轻锈) | 18.60 | 10m² | 12.30 |
| AZ-13-1-1 | 脚手架搭拆(10m内) | 45.00 | 10m² | 28.50 |
| AZ-3-1-1 | 碳钢容器安装(5t内) | 680.00 | 台 | 420.00 |
> ⚠️ **法律声明**:示例数据仅供技能演示使用,不得作为正式计价依据。正式项目请使用经授权的完整定额数据库。
### 严禁(唯一来源模式)
- 使用大模型通用知识补充定额数据;无溯源依据不得输出定额子目
- 材料价格必须从数据库中查取,不得使用估算值
## 安装工程13分册专业结构(2025版)
> **重要**:《山东省安装工程消耗量定额(2025版)》共 **13个分册**,覆盖安装工程全专业。
| 分册号 | 分册名称 | 主要内容 | 常见定额编号示例 |
|:------:|---------|---------|---------------|
| 第1册 | 机械设备安装工程 | 泵、风机、制冷设备、通用设备的安装与调试,找正、灌浆 | 1-1-1(泵安装) |
| 第2册 | 热力设备安装工程 | 锅炉、换热站、余热利用系统安装 | 2-1-1(锅炉安装) |
| 第3册 | 静置设备与工艺金属结构 | 容器、塔器、储罐制作安装,金属平台/梯子/栏杆 | 3-1-1(塔器安装) |
| 第4册 | 电气设备安装工程 | 变配电、电缆敷设、照明系统、防雷接地、配管配线 | 4-6-1(钢管敷设) |
| 第5册 | 建筑智能化工程 | 综合布线、安防、楼宇自控、智能照明、火灾报警联动 | 5-1-1(综合布线) |
| 第6册 | 自动化控制仪表安装工程 | 工业自动化仪表、过程检测与控制装置、仪表盘柜,共10章47节885个子目 | 6-1-1(温度仪表) |
| 第7册 | 通风空调工程 | 风管、风机、空调机组、冷却塔、消声设备系统安装 | 7-2-1(风管制作安装) |
| 第8册 | 工业管道工程 | 高温高压工业管道预制、安装、试压、吹扫(石化/制药行业) | 8-3-28(低压钢管焊接) |
| 第9册 | 消防工程 | 水/气体/泡沫灭火系统、火灾自动报警、消防联动设备 | 9-1-1(自动喷淋管道) |
| 第10册 | 给排水、采暖、燃气工程 | 室内外给排水、散热器、地暖、燃气管道及器具安装 | 10-1-1(室内给水镀锌钢管) |
| 第11册 | 通信设备与线缆安装工程 | 电话、网络、有线电视、移动通信室内覆盖系统 | 11-1-1(电话系统安装) |
| 第12册 | 刷油、防腐蚀、绝热工程 | 金属表面防腐、管道绝热、设备保温施工 | 12-1-1(管道除锈) |
| 第13册 | 措施项目 | 脚手架、高层建筑施工增加费、系统调试费、安全文明施工费等可计量措施项目 | 13-1-1(脚手架搭拆) |
> 注:原2016版定额已废止。2025版各分册均体现"四新"技术应用导向,支持绿色建造与智能建造。
## 核心功能
1. **定额查询** — 根据工作内容关键词,匹配1条或多条定额子目,标注分册号+章节号+条款号+工作内容原文
2. **分册精确过滤搜索** — `search_quota.py` 支持 `volume` 参数,先过滤分册再做语义/文本搜索,用法:`python search_quota.py "低压焊接" 5 "第8册"`
3. **SQLite + FTS5 全文索引** — `search_quota.py v6` 优先使用SQLite数据库查询(毫秒级),支持精确/LIKE模糊/FTS5全文三级检索
4. **LLM语义匹配** — 接入腾讯混元API(默认免费)+ 字节豆包API(备选),支持自然语言查询(如"热泵安装"→自动识别为第2册相关定额)
5. **确认机制** — 定额匹配后需用户确认一次,确保准确性后再执行组价
6. **材料价格查询** — 按名称/规格型号模糊搜索材料价格(支持含税价/除税价/增值税率)
7. **一清单对N定额组价** — 主定额 + 辅定额 + 主材费,合成综合单价
8. **取费计算** — 管理费+利润自动计算(规费科目已取消,社保费/公积金并入人工费)
9. **报价表输出** — 生成带 Excel 公式的标准报价表,可追溯计算逻辑
> **重要**:一个清单项目通常需要多条定额配合(如:安装定额 + 除锈定额 + 保温定额 + 主材),组价时必须齐全!
## search_quota.py 搜索技巧(经验 2026-05-16)
> search_quota.py v6 已支持 SQLite 毫秒级查询,**优先使用本脚本**,避免手写临时Python文件。
### ⚡ 最快方式:精确编号查询
`ash
python search_quota.py --quota-no "AZ-8-3-85"
`
- 耗时:~200ms(含SQLite初始化)
- 适用:已知定额编号,直接精确查询
### 🔍 关键词搜索注意事项
**数据库
ame 字段格式**:第8册阀门类定额的
ame 字段为 **"公称直径(mm以内) 100"**,不含"DN"前缀和"调节阀"字样。
| 搜索词 | 结果 | 原因 |
|--------|------|------|
| "DN100 调节阀" | ❌ 未找到 | name不含"调节阀","DN100"不匹配(数据库是"100") |
| "低压调节阀" | ❌ 未找到 | chapter="一、低压阀门"不含"调节阀"三字 |
| "100 阀门" | ✅ 找到 | name含"100",chapter含"阀门" |
| "调节阀" | ⚠️ 找到第6册 | 匹配第6册(仪表调节阀),非第8册 |
| "公称直径 100" | ✅ 找到 | 精确匹配name字段 |
### 📌 推荐搜索策略
`ash
# 第8册 低压阀门 → 用 "100 阀门" + 分册过滤
python search_quota.py "100 阀门" 5 "第8册"
# 已知定额编号 → 直接精确查询(最快)
python search_quota.py --quota-no "AZ-8-3-85"
# 材料查询 → 用 --material 参数
python search_quota.py --material "法兰 DN100"
python search_quota.py --material "螺栓 M16"
`
### ⏱️ 性能参考
| 操作 | 耗时 |
|------|------|
| 脚本启动 + SQLite初始化 | ~150ms |
| --quota-no 精确查询 | ~200ms |
| 关键词搜索("100 阀门") | ~220ms |
| 完整查询(主定额+辅定额+2种材料) | ~900ms |
---
## 定额溯源标准
每个定额子目输出必须包含以下字段,缺一不可:
| 字段 | 说明 |
|------|------|
| 定额编号 | 如 AZ-8-3-28(带专业前缀) |
| 分册号 | 第X册 XX工程 |
| 章节号 | 定额手册章节编号 |
| 条款号 | 该子目在章节中的条款编号 |
| 工作内容 | 定额工作内容原文(逐字引用) |
| 计量单位 | 如:m、m²、个、套等 |
| 基价 | 济南市价目表2026版单价 |
无分册号、章节号、条款号、工作内容原文的定额输出视为不合格。
## 取费标准(山东安装工程,2025版规则)
> **重大变化**:依据 GB/T 50500-2024,自2025年11月1日起:
> - **取消"规费"科目**,社会保险费、住房公积金并入人工费
> - 企业管理费中已含相关统筹费用
> - 费用结构简化为:人工费 + 管理费 + 利润 + 税金
```
管理费费率 = 48.08%(以人工费为基数)
利润费率 = 29.15%(以人工费+管理费为基数)
综合费率 = (1 + 48.08%) × (1 + 29.15%) - 1 ≈ 91.25%
税前综合单价 = 基价 × (1 + 91.25%) = 基价 × 1.9125
含税综合单价 = 税前综合单价 × (1 + 9%) = 基价 × 1.9125 × 1.09 ≈ 基价 × 2.0846
```
税金 = 9%(增值税一般纳税人)
## 执行时间节点(重要)
| 时间节点 | 政策内容 |
|---------|---------|
| 2025年9月1日 | 国有资金投资项目**必须执行** GB/T 50500-2024 |
| 2025年11月1日 | 山东省新版费用计算规则与各专业消耗量定额正式施行 |
| 2026年1月1日 | 济南公共资源交易中心全面启用新标准,房屋市政工程按新标准执行 |
> ⚠️ 过渡期:2026年1月1日前已发标或签约项目可继续沿用2013版清单标准。
## 价格信息获取渠道
- **广材助手**:一键选取济南2026版价目表,定额、价格、取费同步
- **广材网**:信息价专区,定位济南检索全套价格,支持导出
- **询价无忧网**:2008年至2026年2月历史信息价汇总
- **济南市城乡交通运输局**:公路工程主要材料价格参考信息
## 工作流程(含一清单对N定额组价)
### 流程零:LLM语义匹配 *(2026-05新增)*
> **触发时机**:用户使用自然语言描述工作内容时(如"热泵安装"、"低压管道焊接")
1. 接收用户输入的工作内容描述
2. 调用 `scripts/llm_semantic_match.py`:
```bash
python scripts/llm_semantic_match.py "热泵机组安装" "第2册热力设备"
```
3. 豆包API返回推荐的定额列表(JSON格式)
4. 展示推荐结果,等待用户确认(⭐确认节点1)
5. 用户确认后,进入流程一
### 流程一:定额查询(输出主定额+关联辅定额)
1. 接收用户确认的定额范围(或直接输入的工作内容关键词)
2. 根据专业类型确定分册(第X册)
3. 在 `references/` 目录对应分册文件中检索匹配定额
4. **读取 `references/multi_quota_mapping.md` 查找该清单的主定额+辅定额标准组合**
5. 输出:
- **主定额**:主定额编号 + 分册 + 章节 + 条款 + 工作内容 + 基价
- **辅定额List**:辅定额1编号 + ... + 辅定额N编号
- **主材List**:主材名称 + 规格 + 估算用量
6. 若本地无匹配,返回"未查到合规定额,请补充依据"
> **⚠️ 重要**:输出定额后必须进入确认节点,等待用户确认后再执行组价!
> **输出格式示例**:
> ```
> 【清单】室内给水镀锌钢管DN50
>
> 【主定额】10-1-1(第10册第1章第1条)基价:XX元/10m
> 【辅定额】
> - 8-7-1 管道冲洗消毒(第8册第7章第1条)基价:XX元/100m
> - 8-5-12 螺纹阀门安装(第8册第5章第12条)基价:XX元/个
> 【主材】
> - 镀锌钢管DN50:清单量×1.02(含2%损耗)
> - 截止阀DN50:按设计数量
> ```
### 流程二:组价计算(一清单对N定额,含单位换算)
> ⚠️ **重要**:一个清单项目的综合单价 = Σ(所有定额合价) + Σ(所有主材费)
**Step 1:识别清单信息**
- 读取清单单位、清单工程量
**Step 2:查定额组合**
- 读取 `references/multi_quota_mapping.md` 获取该清单的标准定额组合
- 若表中无记录,询问用户需要哪些辅定额
**Step 3:逐项计算定额工程量**
- 对**主定额**:定额工程量 = 清单工程量 × 换算系数(查 `unit_conversion.md`)
- 对**每个辅定额**:定额工程量 = 清单工程量 × 该辅定额的换算系数
- 对**主材**:主材用量 = 清单工程量 × (1 + 损耗率)
**Step 4:逐项计算定额合价**
```
主定额合价 = 主定额工程量 × 主定额基价
辅定额1合价 = 辅定额1工程量 × 辅定额1基价
辅定额2合价 = 辅定额2工程量 × 辅定额2基价
...
主材费 = 主材用量 × 主材信息价
```
**Step 5:计算清单综合单价**
```
清单总价 = 主定额合价 + Σ(辅定额合价) + 主材费
税前综合单价 = 清单总价 × (1 + 48.08%) × (1 + 29.15%)
含税综合单价 = 税前综合单价 × (1 + 9%)
```
**Step 6:输出组价明细表** *(⭐确认节点2)*
- 展示每个定额的计算过程
- 展示主材费计算过程
- 汇总清单综合单价
- **等待用户确认后进入流程三**
### 流程三:报价表生成(含多定额分解)*(⭐确认节点3)*
1. 读取用户确认的组价结果
2. 读取 `assets/报价模板.xlsx` 作为基础模板
3. **创建以下Sheet结构**:
- **Sheet1:清单汇总表**
| 清单编码 | 清单名称 | 单位 | 工程量 | 综合单价 | 合价 |
- **Sheet2:定额明细表**
| 清单编码 | 定额类型(主/辅/主材) | 定额编号 | 子目名称 | 清单单位 | 清单量 | 定额单位 | 换算系数 | 定额量 | 基价 | 定额合价 | 主材费 |
3. 填充数据:
- 每个清单对应1行在"清单汇总表"
- 每个清单对应N行在"定额明细表"(1主定额 + N辅定额 + M主材)
4. **公式设置**:
- 定额工程量:`=[@清单工程量]*[@换算系数]`
- 定额合价:`=[@定额工程量]*[@基价]`
- 清单综合单价:`=SUMIFS(定额明细表[@定额合价],[@清单编码],[@当前清单编码]) * (1+48.08%)*(1+29.15%)`
- 含税综合单价:`=[@综合单价]*(1+9%)`
5. 汇总行:`=SUBTOTAL(109,[合价])`(筛选时不跳行)
6. 输出文件并告知用户保存路径
> **Excel模板改进建议**:
> 报价模板.xlsx 需要更新为双Sheet结构(清单汇总 + 定额明细),才能支持一清单对N定额的输出!
---
---
## 目录结构
```
cnsdoce/
├── SKILL.md # 本文件(含MIT-0许可证声明)
├── LICENSE # MIT-0许可证(ClawHub强制要求)
├── scripts/
│ ├── search_quota.py # 定额搜索脚本(SQLite优先)
│ ├── llm_semantic_match.py # LLM语义匹配脚本
│ ├── calc_fees.py # 取费计算(2025版规则)
│ ├── match_quota.py # 定额关键词匹配引擎
│ ├── migrate_to_sqlite.py # SQLite迁移脚本
│ └── requirements.txt # Python依赖包
├── references/
│ ├── fee_standard.md # 取费标准(2025版规则)
│ ├── unit_conversion.md # 清单与定额单位换算表
│ ├── multi_quota_mapping.md # 一清单对N定额标准组合
│ └── volume_0[1-9]_*.md # 13分册章节摘要(精简版)
├── index/
│ └── quota.db # SQLite数据库(可选,联系作者获取完整版)
└── assets/
└── 报价模板.xlsx # 带公式的标准报价表Excel模板
```
> ⚠️ `quota.db` 完整数据库(含约3.5万条定额+8,441条材料价格)需联系作者获取,或自行导入。
## 常用定额编号参考(2025版安装工程13分册)
| 分册 | 专业 | 常见定额编号示例 | 备注 |
|:----:|------|----------------|------|
| 第4册 | 电气安装 | 4-6-1(钢管敷设 MT20) | 变配电/电缆/照明 |
| 第6册 | 仪表安装 | 6-1-1(温度仪表安装) | 自动化控制仪表 |
| 第7册 | 通风空调 | 7-2-1(风管制作安装) | 风机/空调机组 |
| 第8册 | 工业管道 | 8-3-28(低压钢管焊接 φ57×3.5) | 高温高压管道 |
| 第9册 | 消防安装 | 9-1-1(自动喷淋管道) | 水/气体/泡沫灭火 |
| 第10册 | 给排水 | 10-1-1(室内给水镀锌钢管) | 散热器/地暖/燃气 |
| 第12册 | 刷油绝热 | 12-1-1(管道除锈) | 防腐/保温 |
| 第13册 | 措施项目 | 13-1-1(脚手架搭拆) | 高层增加费/调试费 |
## Excel 输出规范(含单位换算)
报价表 Excel 必须满足:
1. **表头**:项目名称 + 日期 + 编制人
2. **列结构**:
- 序号 | 分册 | 定额编号 | 子目名称 | 章节 | 条款 | 工作内容
- **清单单位** | **清单工程量** | **定额单位** | **换算系数** | **定额工程量**
- 基价 | 税前综合单价 | 含税综合单价 | 合价 | 备注
3. **公式列**:
- 换算系数:`=IF(清单单位="m",0.1,IF(...))` 或 VLOOKUP 查表
- 定额工程量:`=[@清单工程量]*[@换算系数]`
- 税前综合单价:`=[@基价]*(1+48.08%)*(1+29.15%)`
- 含税综合单价:`=[@税前综合单价]*(1+9%)`
- 合价:`=[@定额工程量]*[@含税综合单价]`
- 小计:`=SUBTOTAL(109,[合价])`(筛选时不跳行)
4. **格式**:千元以上保留2位小数,千元以下取整,金额用万元标注
5. **合计行**:加粗,含大写金额
---
## 单位换算规范
> 详细换算表见 `references/unit_conversion.md`
### 通用换算规则
| 定额单位 | 清单单位 | 换算系数 | 示例 |
|---------|---------|---------|------|
| 10m | m | ×0.1 | 100m管道 → 10个定额单位 |
| 100m | m | ×0.01 | 500m电缆 → 5个定额单位 |
| 10m² | m² | ×0.1 | 200m²风管 → 20个定额单位 |
| 10个 | 个 | ×0.1 | 50个阀门 → 5个定额单位 |
| 100kg | kg | ×0.01 | 300kg支架 → 3个定额单位 |
| 个 | 个 | ×1 | 变压器/空调机组不换算 |
### 特殊换算(保温工程)
```
保温体积 = π × (管道外径 + 保温厚度) × 保温厚度 × 管道长度
Excel:=PI()*(D2+δ)*δ*L2
```
## 材料匹配与单价换算规则
> **背景**:在生成报价表时,需从材料数据库(`quota.db` 的 `materials` 表,或用户导入的完整数据库)匹配未计价材料价格。材料库中规格信息在`名称`字段中(非`规格型号`),且计价单位(m/个/t/kg等)可能与定额计量单位(10m/10个/副等)不一致,需要匹配+换算。
### 材料匹配打分机制
当根据定额子目匹配材料时,采用以下多层级打分策略:
| 匹配层级 | 条件 | 分数 |
|---------|------|:----:|
| 精确DN匹配 | 材料名称含`DN{目标DN}` | +10 |
| 管外径匹配 | 材料名称含`D{管外径}`或`管外径D{管外径}` | +9 |
| φ匹配 | 材料名称含`φ{管外径}`或`Φ{管外径}` | +8 |
| 尺寸标记匹配 | 名称含目标数字且有D/φ标记 | +5 |
| 来源优先级 | 价格取定表(2026) | +2 |
| 来源优先级 | 济南造价信息2026年03期 | +1 |
| 通用条目加分 | 名称无DN/φ/D等规格标记(通用条目) | +1 |
| 错误DN扣分 | 名称含非目标DN号(如搜索DN250但名称含DN20) | -5 |
**DN→管外径映射表**:
| DN | 15 | 20 | 25 | 32 | 40 | 50 | 65 | 80 | 100 | 125 | 150 | 200 | 250 | 300 | 350 | 400 | 450 | 500 | 600 | 700 | 800 |
|----|----|----|----|----|----|----|----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
| D | 18 | 25 | 32 | 38 | 45 | 57 | 76 | 89 | 108 | 133 | 159 | 219 | 273 | 325 | 377 | 426 | 480 | 530 | 630 | 720 | 820 |
**匹配结果标注**:
- **精确匹配**(score > 3):直接显示材料名称+规格
- **参考匹配**(score ≤ 3):显示清理后名称+`(参考)`标记,移除名称中的错误DN号
**排除关键词**:栏杆、扶手、成品安装、底座、盲板等非工程材料条目需过滤
### 未计价材料单价换算
材料库中的计价单位(如m、个、t、kg、片、只)可能与定额计量单位(如10m、10个、副)不同,需统一换算:
**可换算的维度(同维度)**:
| 材料单位 | 定额单位 | 换算系数 | 说明 |
|---------|---------|:--------:|------|
| 个 | 10个 | ×10 | 管件、阀门 |
| m | 10m | ×10 | 管材按长度计价 |
| 片 | 副 | ×2 | 1副法兰 = 2片 |
| 只 | 副 | ×2 | 1副法兰 = 2只 |
**不可换算的维度(跨维度)**:
| 材料单位 | 定额单位 | 处理方式 |
|---------|---------|---------|
| kg | 10m | ⚠️ 无法换算,需人工确认或另找按米计价的条目 |
| t | 10m / 10个 | ⚠️ 无法换算,标记红色提醒 |
| 个 | 副 | ⚠️ 含义不同(阀门个≠法兰副),需人工确认 |
### 未计价材料列规范(Excel输出)
报价表综合单价Sheet末尾应包含以下列:
| 列 | 列名 | 说明 |
|----|------|------|
| 未计价材料 | 材料名称+规格 | 如"无缝钢管 DN50",参考匹配标注`(参考)` |
| 未计价材料单价(元) | 数值 | 已换算为定额计量单位的单价,不可换算的红色标注 |
| 计价单位 | 定额计量单位 | 与定额"计量单位"列一致 |
| 来源 | 数据来源 | `价格取定表(2026)` 或 `济南造价信息2026年03期(含税单价_202603)` |
> ⚠️ **价格溯源**:每个未计价材料价格必须标注来源,济南造价信息还需标注具体字段名(`含税单价_202603`/`含税单价_202602`/`取定价`)
## ⚠️ PowerShell/Windows 执行注意事项(经验教训 2026-05-16)
> 以下是在 Windows PowerShell 5.1 环境下执行定额查询时积累的经验教训,必须严格遵守。
### 1. PowerShell 5.1 语法限制
| 操作 | ❌ 错误写法 | ✅ 正确写法 | 说明 |
|------|------------|------------|------|
| 链式命令 | `cd X && python a.py` | `cd X; python a.py` | PS5.1 不支持 `&&`/`\|\|` |
| 条件执行 | `A && B` | `A; if ($?) { B }` | 需用 `$?` 判断上条命令是否成功 |
| 三元运算 | `A ? B : C` | `if (A) { B } else { C }` | 三元运算符为 PS7+ 特性 |
| 空合并 | `$a ?? $b` | `if ($null -eq $a) { $b } else { $a }` | `??` 为 PS7+ 特性 |
### 2. 中文编码问题(最常见问题)
**问题**:在 PowerShell 中直接用 `python -c "含中文的字符串"` 执行,中文会乱码或报错。
**解决方案**:
1. 将 Python 代码写入临时 `.py` 文件(UTF-8 编码)
2. 执行该 `.py` 文件
3. 读取输出结果
```powershell
# ❌ 错误:中文会乱码
python -c "print('DN100调节阀')"
# ✅ 正确:先写文件再执行
Set-Content -Path temp_query.py -Value "print('DN100调节阀')" -Encoding UTF8
C:\Users\Administrator\.workbuddy\binaries\python\envs\default\Scripts\python.exe temp_query.py
```
### 3. 路径引用规则
| 场景 | 正确做法 | 原因 |
|------|---------|------|
| 引用 `.workbuddy` 目录 | 使用绝对路径 `C:\Users\Administrator\.workbuddy\...` | 相对路径会被 PS 当作模块名解析 |
| Python 可执行文件 | `C:\Users\Administrator\.workbuddy\binaries\python\envs\default\Scripts\python.exe` | 避免 PATH 混乱 |
| 脚本路径 | 绝对路径或确保正确 working directory | PowerShell 的 cwd 可能与预期不同 |
### 4. SQLite 列名规范
查询 `quota.db` 时,必须先确认列名(用 `PRAGMA table_info(表名)`),**严禁猜测列名**。
| 表名 | 正确列名 | 常见错误 |
|------|---------|---------|
| `quotas` | `labor_fee`(人工费) | `labor_cost` ❌ |
| `quotas` | `material_fee`(材料费) | `material_cost` ❌ |
| `quotas` | `machine_fee`(机械费) | `machine_cost` ❌ |
| `quotas` | `base_price`(基价) | `basePrice` ❌ |
| `materials` | `含税单价`(中文列名) | `tax_included_price` ❌ |
### 5. 优先使用 search_quota.py 脚本
**不要每次都写临时 Python 文件!** `search_quota.py v6` 已支持命令行直接查询,且优先使用 SQLite 毫秒级查询。
```powershell
# ✅ 推荐:直接调用脚本(快)
$python = "C:\Users\Administrator\.workbuddy\binaries\python\envs\default\Scripts\python.exe"
$script = "C:\Users\Administrator\.workbuddy\skills\cnsdoce\scripts\search_quota.py"
& $python $script "DN100 调节阀"
# ❌ 避免:每次都创建临时查询文件(慢)
# 仅在脚本无法满足需求时才写临时 .py 文件
```
### 6. 快速查询定额的标准流程
```
用户提问
↓
直接调用 search_quota.py(命令行参数传入)
↓
(如脚本参数解析不支持中文)→ 写临时 .py 文件查询 SQLite
↓
解析结果 → 输出给用户
```
### 7. 常见错误速查
| 错误信息 | 原因 | 解决方案 |
|---------|------|---------|
| `&&` is not recognized | PS5.1 不支持 `&&` | 改用 `;` 链接命令 |
| `labor_cost` column not found | 列名错误,应为 `labor_fee` | `PRAGMA table_info(quotas)` 查列名 |
| 中文乱码/问号 | `python -c` 编码问题 | 写 .py 文件,UTF8 编码执行 |
| `.workbuddy` 被当作模块 | 相对路径问题 | 改用绝对路径 |
| FTS5 中文无效 | `unicode61` 不支持中文分词 | 中文搜索用 `LIKE`,不用 FTS5 |
---
## 触发词
以下表述自动触发本技能:
- "查一下这个定额"
- "帮我组价"
- "套这个定额"
- "生成报价表"
- "计算一下取费"
- "@skill://cnsdoce"
- "山东安装定额" / "2025版安装定额" / "安装工程13分册"
- "济南价目表" / "济南市价目表2026"
- "GB/T 50500-2024" / "50500-2024"
- "管道/电气/暖通/仪表/消防/给排水/智能化/通信/刷油/绝热" + "定额" 或 "组价"
- "材料价格" / "查询材料" / "钢筋价格" / "钢管价格" + "多少" 或 "查询"
### LLM语义匹配触发词
- "帮我查一下" + 工作内容描述(自然语言)
- "我想装" / "我想做" + 工程描述
- "热泵/泵/风机/管道" + "安装" + 规格描述
- 任何使用自然语言描述工程内容的场景
### 确认机制触发
- 定额匹配完成后自动进入确认节点
- 用户回复"确认"/"对的"/"正确" → 继续下一步
- 用户回复"修改"/"不对"/"调整" → 重新匹配
- 用户回复"加上XX" → 在当前基础上补充
don't have the plugin yet? install it then click "run inline in claude" again.