LLM_PROVIDER=doubao)
| 配置项 | 状态 | 说明 |
|--------|------|------|
| 混元 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 即可调用。
LLM_PROVIDER=doubao 即可使用
https://ark.cn-beijing.volces.com/api/v3/chat/completions
from scripts.llm_semantic_match import *
use_hunyuan() # 切换到腾讯混元(免费)⭐默认
use_doubao() # 切换到豆包模型(备选)
switch_model("hunyuan") # 通过字符串切换
restore_default() # 恢复默认(混元)
get_current_provider() # 查看当前使用的模型
# 默认使用混元
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册热力设备"
用户输入需求
↓
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 管道冲洗试压 │ │
│ └─────────────────────────────────┘ │
│ │
│ ───────────────────────────────────── │
│ │
│ ⚠️ 请确认以上定额是否正确? │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ ✅ 确认 │ │ ❌ 修改 │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────┘
assets/quota_reference.db(20KB,34条费率记录),覆盖16个工程类型
references/cost_composition.md(费用构成与计价程序)、references/measure_items.md(措施项目费计算规则)、references/other_items.md(其他项目费)
fee_rates 表获取费率,严禁使用 quota_items.management_rate / profit_rate 字段
general_price 已是综合单价,不可再叠加管理费
> 📌 双模式说明:本技能支持两种数据源模式,默认使用大模型推理数据(无需配置本地数据库)。如需严格溯源,可切换为唯一来源模式。
使用大模型的工程造价知识进行定额推理,适用于:
如需精确到章节条款的溯源数据,请联系作者获取完整数据库,或自行导入:
数据来源:
导入方式:
quota.db 完整数据库文件(SQLite格式,含约3.5万条定额+8,441条材料价格)
scripts/migrate_to_sqlite.py 从PDF/Excel源文件导入
quota.db 放入 index/ 目录
数据库结构:
quotas 表:quota_no、original_quota_no、名称、chapter、base_price、labor_fee 等
materials 表:名称、规格型号、含税单价、除税单价、增值税率等
费率数据库(v1.1.0 新增):
quota_reference.db(技能 assets 目录,20KB):含 fee_rates 表,34条记录
SELECT management_rate, profit_rate, calculation_base FROM fee_rates WHERE engineering_type = '安装工程' AND city = '济南市'
> 以下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 |
> ⚠️ 法律声明:示例数据仅供技能演示使用,不得作为正式计价依据。正式项目请使用经授权的完整定额数据库。
> 重要:《山东省安装工程消耗量定额(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版各分册均体现"四新"技术应用导向,支持绿色建造与智能建造。
search_quota.py 支持 volume 参数,先过滤分册再做语义/文本搜索,用法:python search_quota.py "低压焊接" 5 "第8册"
search_quota.py v6 优先使用SQLite数据库查询(毫秒级),支持精确/LIKE模糊/FTS5全文三级检索
> 重要:一个清单项目通常需要多条定额配合(如:安装定额 + 除锈定额 + 保温定额 + 主材),组价时必须齐全!
> search_quota.py v6 已支持 SQLite 毫秒级查询,优先使用本脚本,避免手写临时Python文件。
`ash
python search_quota.py --quota-no "AZ-8-3-85"
`
**数据库
ame 字段格式**:第8册阀门类定额的
ame 字段为 "公称直径(mm以内) 100",不含"DN"前缀和"调节阀"字样。
| 搜索词 | 结果 | 原因 |
|--------|------|------|
| "DN100 调节阀" | ❌ 未找到 | name不含"调节阀","DN100"不匹配(数据库是"100") |
| "低压调节阀" | ❌ 未找到 | chapter="一、低压阀门"不含"调节阀"三字 |
| "100 阀门" | ✅ 找到 | name含"100",chapter含"阀门" |
| "调节阀" | ⚠️ 找到第6册 | 匹配第6册(仪表调节阀),非第8册 |
| "公称直径 100" | ✅ 找到 | 精确匹配name字段 |
`ash
python search_quota.py "100 阀门" 5 "第8册"
python search_quota.py --quota-no "AZ-8-3-85"
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版单价 |
无分册号、章节号、条款号、工作内容原文的定额输出视为不合格。
> 重大变化:依据 GB/T 50500-2024,自2025年11月1日起:
> - 取消"规费"科目,社会保险费、住房公积金并入人工费
> - 企业管理费中已含相关统筹费用
> - 费用结构简化为:人工费 + 管理费 + 利润 + 税金
| 工程类型 | 工程类别 | 管理费率 | 利润率 | 计费基础 | 税金 |
|---------|---------|---------|--------|---------|------|
| 安装工程 | — | 48.08% | 29.15% | 人工费 | 9% |
| 建筑工程 | I类 | 39.15% | 32.13% | 人工费 | 9% |
| 建筑工程 | II类 | 30.11% | 17.61% | 人工费 | 9% |
| 建筑工程 | III类 | 23.27% | 13.59% | 人工费 | 9% |
| 市政工程 | 道路/桥涵/排水 | 19.35% | 10.36% | 人工费+机具费 | 9% |
| 市政工程 | 给水 | 36.22% | 22.89% | 人工费+机具费 | 9% |
| 园林绿化工程 | — | 52.33% | 27.26% | 人工费 | 9% |
| 装饰工程 | I类 | 61.57% | 34.87% | 人工费 | 9% |
| 装饰工程 | II类 | 47.03% | 21.30% | 人工费 | 9% |
| 装饰工程 | III类 | 29.81% | 16.37% | 人工费 | 9% |
| 房屋修缮工程 | — | 48.08%~46.16% | 29.15%~24.15% | 人工费 | 9% |
| 古建筑修缮工程 | — | 47.81% | 28.47% | 人工费 | 9% |
| 仿古建筑工程 | — | 30.59% | 13.13% | 人工费 | 9% |
| 构筑物工程 | I/II/III类 | 31.30%/27.16%/18.91% | 26.93%/20.99%/10.51% | 人工费 | 9% |
| 桩基础工程 | I/II/III类 | 20.93%/15.53%/11.91% | 15.17%/11.36%/4.35% | 人工费 | 9% |
| 单独土石方工程 | I/II/III类 | 26.07%/18.05%/11.91% | 20.02%/13.88%/6.16% | 人工费 | 9% |
| 市政养护维修工程 | — | 20.07%~25.19% | 11.79%~14.86% | 人工费+机具费 | 9% |
> 计费基础说明:
> - 安装/建筑/装饰/园林/修缮/仿古/构筑物/桩基础/土石方 → 人工费
> - 市政工程(含养护维修)→ 人工费 + 施工机具使用费
-- 正确做法:查 fee_rates 表
SELECT management_rate, profit_rate, calculation_base
FROM fee_rates
WHERE engineering_type = '安装工程'
AND city = '济南市';
-- ❌ 错误做法:以下字段全部为安装工程费率,对其他专业不正确
-- SELECT management_rate, profit_rate FROM quota_items WHERE ...
管理费 = 人工费 × 48.08%
利润 = (人工费 + 管理费) × 29.15%
税前综合单价 = 基价 + 管理费 + 利润 + 未计价材料费
含税综合单价 = 税前综合单价 × 1.09
> 其他专业的组价公式同理,只需替换对应的管理费率和利润率。
> 市政工程的管理费和利润以人工费+施工机具使用费为基数计算。
| 时间节点 | 政策内容 |
|---------|---------|
| 2025年9月1日 | 国有资金投资项目必须执行 GB/T 50500-2024 |
| 2025年11月1日 | 山东省新版费用计算规则与各专业消耗量定额正式施行 |
| 2026年1月1日 | 济南公共资源交易中心全面启用新标准,房屋市政工程按新标准执行 |
> ⚠️ 过渡期:2026年1月1日前已发标或签约项目可继续沿用2013版清单标准。
> ⚠️ v1.2.0 强制要求:任何组价任务启动时,必须先执行 Step 0(单位比对),再进入后续流程。不经过单位比对直接输出价格可能产生数倍偏差。
执行时机:组价计算前(在 Step 1 定额查询之后、Step 2 组价计算之前)
组价 Step 0(必须在计算前执行):
1. 读取用户清单中每一项的"单位"(从Excel或用户输入)
2. 查询匹配定额的 unit 字段(quota.db → quotas 表或 quota_reference.db 对应表)
3. 比对两个单位:
├─ 一致 → 折算系数 = 1.0
├─ 不同但等价(处↔个、台↔个) → 折算系数 = 1.0(1:1等价)
└─ 不同 → 计算折算系数(见下方速查表)
4. 安装单价1 = (定额基价 + 管理费) × 折算系数 × 拆除系数
> ⚠️ 强制要求:任何组价任务启动时,必须先执行 Step 0,再进入 Step 1。不经过单位比对直接输出价格可能产生数倍偏差。
> 触发时机:用户使用自然语言描述工作内容时(如"热泵安装"、"低压管道焊接")
scripts/llm_semantic_match.py:
```bash
python scripts/llm_semantic_match.py "热泵机组安装" "第2册热力设备"
```
references/ 目录对应分册文件中检索匹配定额
references/multi_quota_mapping.md 查找该清单的主定额+辅定额标准组合
> ⚠️ 重要:输出定额后必须进入确认节点,等待用户确认后再执行组价!
> 输出格式示例:
> ```
> 【清单】室内给水镀锌钢管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:按设计数量
> ```
> ⚠️ 重要:一个清单项目的综合单价 = Σ(所有定额合价) + Σ(所有主材费)
>
> ⚠️ v1.2.0 强制要求:执行组价前必须先完成 Step 0(单位比对)(见上方工作流程开头),读取清单单位与定额 unit 字段比对,不一致时按折算系数换算。不执行 Step 0 直接输出价格可能产生数倍偏差!
Step 0:单位比对(⚡v1.2.0,先于 Step 1 执行)
Step 1:识别清单信息
Step 2:查定额组合
references/multi_quota_mapping.md 获取该清单的标准定额组合
Step 3:逐项计算定额工程量
unit_conversion.md)
Step 4:逐项计算定额合价
主定额合价 = 主定额工程量 × 主定额基价
辅定额1合价 = 辅定额1工程量 × 辅定额1基价
辅定额2合价 = 辅定额2工程量 × 辅定额2基价
...
主材费 = 主材用量 × 主材信息价
Step 5:计算清单综合单价
清单总价 = 主定额合价 + Σ(辅定额合价) + 主材费
税前综合单价 = 清单总价 × (1 + 48.08%) × (1 + 29.15%)
含税综合单价 = 税前综合单价 × (1 + 9%)
Step 6:输出组价明细表 (⭐确认节点2)
assets/报价模板.xlsx 作为基础模板
| 清单编码 | 清单名称 | 单位 | 工程量 | 综合单价 | 合价 |
| 清单编码 | 定额类型(主/辅/主材) | 定额编号 | 子目名称 | 清单单位 | 清单量 | 定额单位 | 换算系数 | 定额量 | 基价 | 定额合价 | 主材费 |
=[@清单工程量]*[@换算系数]
=[@定额工程量]*[@基价]
=SUMIFS(定额明细表[@定额合价],[@清单编码],[@当前清单编码]) (1+48.08%)(1+29.15%)
=[@综合单价]*(1+9%)
=SUBTOTAL(109,[合价])(筛选时不跳行)
> 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 # 取费标准(全专业,v1.1.0扩充)
│ ├── unit_conversion.md # 清单与定额单位换算表
│ ├── multi_quota_mapping.md # 一清单对N定额标准组合
│ ├── cost_composition.md # ⚡费用构成与计价程序(v1.1.0新增)
│ ├── measure_items.md # ⚡措施项目费计算规则(v1.1.0新增)
│ ├── other_items.md # ⚡其他项目费(暂列金额/暂估价/计日工)(v1.1.0新增)
│ └── volume_0[1-9]_*.md # 13分册章节摘要(精简版)
├── index/
│ └── quota.db # SQLite数据库(可选,示例10条)
└── assets/
├── 报价模板.xlsx # 带公式的标准报价表Excel模板
└── quota_reference.db # ⚡全专业费率库(v1.1.0新增,20KB,34条记录)
> ⚠️ quota.db 完整数据库(含约3.5万条定额+8,441条材料价格)需联系作者获取,或自行导入。
> ✅ quota_reference.db 已内置在技能中(20KB),无需额外配置,覆盖16个专业类型费率。
| 分册 | 专业 | 常见定额编号示例 | 备注 |
|:----:|------|----------------|------|
| 第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 必须满足:
=IF(清单单位="m",0.1,IF(...)) 或 VLOOKUP 查表
=[@清单工程量]*[@换算系数]
=[@基价](1+48.08%)(1+29.15%)
=[@税前综合单价]*(1+9%)
=[@定额工程量]*[@含税综合单价]
=SUBTOTAL(109,[合价])(筛选时不跳行)
> 详细换算表见 references/unit_conversion.md
核心原则:数据库中定额条目的 unit 字段 ≠ 用户清单中的计量单位。组价前必须读取并比对两个单位,单位不一致时必须按折算系数换算价格。
组价 Step 0(必须在计算前执行):
1. 读取用户清单中每一项的"单位"(从Excel或用户输入)
2. 查询匹配定额的 unit 字段(quota.db → quotas 表)
3. 比对两个单位:
├─ 一致 → 折算系数 = 1.0
├─ 不同但等价(处↔个、台↔个) → 折算系数 = 1.0(1:1等价)
└─ 不同 → 计算折算系数
4. 安装单价1 = (定额基价 + 管理费) × 折算系数 × 拆除系数
| 定额单位 | 清单单位 | 折算系数 | 典型定额 | 说明 |
|:---:|:---:|:---:|------|------|
| 10m³ | 个/项 | 体积/10 | JZ-5-1-11 基础制作 | 需从规格中提取长×宽×厚计算体积(m³),体积÷10 |
| 10m³ | 项 | 体积/10 | JZ-19-3-4 基础拆除 | 同上,通过规格字段提取实际体积 |
| 10m | 米 | ×0.1 | 管道类定额 | 定额每10米,清单每米 |
| 100m | 米 | ×0.01 | AZ-4-9-104 电缆敷设 | 定额每100米,清单每米 |
| 100kg | kg | ×0.01 | AZ-13-1-5 支架安装 | 定额每100kg,清单每kg |
| 处 | 个 | ×1.0 | SZ-5-3-157 阀门附件 | 1:1等价,市政给水"处"=1个连接点 |
| 台 | 个 | ×1.0 | AZ-4-2-1 断路器 | 1:1等价,设备类"台"=清单"个" |
| 定额单位 | 清单单位 | 换算系数 | 示例 |
|---------|---------|---------|------|
| 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 | 变压器/空调机组不换算 |
当定额单位=10m³、清单单位=个/项时:
# 从规格字段解析体积(如 "C30砼长2.9m宽1.85m厚0.1m")
# 或 "长5m×宽3m×高0.3m"
体积 = 长 × 宽 × 高(厚) # 单位 m³
折算系数 = 体积 / 10
安装单价1 = (定额基价 + 管理费) × 折算系数 × 拆除系数
拆除类定额按山东省规定以 50% 计取(拆除系数 = 0.5):
if '拆除' in 定额名称 or '拆除' in 项目名称:
拆除系数 = 0.5
else:
拆除系数 = 1.0
若使用 quota_jinan_2026.db(完整版数据库,需自行导入),其 general_price 已是综合单价(含管理费+利润),不可再叠加管理费:
# quota_jinan_2026.db 中的定额
安装单价1 = general_price × 折算系数 × 拆除系数
# 标准 quota.db 中的定额
计费基础 = 人工费 + 机械费 (安装工程用人工费)
管理费 = 计费基础 × 管理费率
安装单价1 = (定额基价 + 管理费) × 折算系数 × 拆除系数
组价完成后必须逐项验证:
以下案例来自实际工程项目,已对项目名称和具体金额做脱敏处理,保留定额编号和折算逻辑:
| 序号 | 项目 | 定额编号 | 定额单位 | 清单单位 | 折算 | 错误根因 |
|:---:|------|------|:---:|:---:|:---:|:--:|
| 1 | 风机拆除 | AZ-1-7-65 | 台 | 台 | ×1.0 | 遗漏拆除×0.5(少扣50%) |
| 2 | 基础制作 | JZ-5-1-11 | 10m³ | 个 | 需体积折算 | 未做体积折算(10m³按1个算,偏差可达~19倍) |
| 3 | 基础拆除 | JZ-19-3-4 | 10m³ | 项 | 需×0.45 | 体积折算+拆除×0.5 双遗漏 |
| 4 | 风机安装 | 济南 1-7-8 | 台 | 台 | ×1.0 | 济南价目表叠加管理费(general_price已含管理费,重复计算偏高~33%) |
| 5 | 钢管 | 济南 8-1-30 | 10m | 米 | ×0.1 | 未做单位折算(10m按1m算,偏高10倍) |
| 6 | 电缆桥架 | AZ-4-9-38 | 10m | 米 | ×0.1 | 未做单位折算(偏高10倍) |
| 7 | 电缆 | AZ-4-9-104 | 100m | 米 | ×0.01 | 未做单位折算(偏高100倍) |
> ⚠️ 以上案例说明:单位不匹配可能导致价格偏差数倍到百倍,这是工程计价中最常见也最严重的错误来源之一。
-- quota.db 查单位(quota 是定额编号字段名,具体字段名以实际数据库为准)
SELECT quota_no, name, unit, base_price, labor_fee, machine_fee
FROM quotas WHERE quota_no = 'JZ-5-1-11';
-- 若使用 quota_jinan_2026.db
SELECT quota_id, unit, general_price, general_labor, general_machine, project_name
FROM quota_items WHERE quota_type = '安装工程' AND quota_id = '1-7-8';
保温体积 = π × (管道外径 + 保温厚度) × 保温厚度 × 管道长度
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 |
匹配结果标注:
(参考)标记,移除名称中的错误DN号
排除关键词:栏杆、扶手、成品安装、底座、盲板等非工程材料条目需过滤
材料库中的计价单位(如m、个、t、kg、片、只)可能与定额计量单位(如10m、10个、副)不同,需统一换算:
可换算的维度(同维度):
| 材料单位 | 定额单位 | 换算系数 | 说明 |
|---------|---------|:--------:|------|
| 个 | 10个 | ×10 | 管件、阀门 |
| m | 10m | ×10 | 管材按长度计价 |
| 片 | 副 | ×2 | 1副法兰 = 2片 |
| 只 | 副 | ×2 | 1副法兰 = 2只 |
不可换算的维度(跨维度):
| 材料单位 | 定额单位 | 处理方式 |
|---------|---------|---------|
| kg | 10m | ⚠️ 无法换算,需人工确认或另找按米计价的条目 |
| t | 10m / 10个 | ⚠️ 无法换算,标记红色提醒 |
| 个 | 副 | ⚠️ 含义不同(阀门个≠法兰副),需人工确认 |
报价表综合单价Sheet末尾应包含以下列:
| 列 | 列名 | 说明 |
|----|------|------|
| 未计价材料 | 材料名称+规格 | 如"无缝钢管 DN50",参考匹配标注(参考) |
| 未计价材料单价(元) | 数值 | 已换算为定额计量单位的单价,不可换算的红色标注 |
| 计价单位 | 定额计量单位 | 与定额"计量单位"列一致 |
| 来源 | 数据来源 | 价格取定表(2026) 或 济南造价信息2026年03期(含税单价_202603) |
> ⚠️ 价格溯源:每个未计价材料价格必须标注来源,济南造价信息还需标注具体字段名(含税单价_202603/含税单价_202602/取定价)
> 以下是在 Windows 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+ 特性 |
问题:在 PowerShell 中直接用 python -c "含中文的字符串" 执行,中文会乱码或报错。
解决方案:
.py 文件(UTF-8 编码)
.py 文件
# ❌ 错误:中文会乱码
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
| 场景 | 正确做法 | 原因 |
|------|---------|------|
| 引用 .workbuddy 目录 | 使用绝对路径 C:\Users\Administrator\.workbuddy\... | 相对路径会被 PS 当作模块名解析 |
| Python 可执行文件 | C:\Users\Administrator\.workbuddy\binaries\python\envs\default\Scripts\python.exe | 避免 PATH 混乱 |
| 脚本路径 | 绝对路径或确保正确 working directory | PowerShell 的 cwd 可能与预期不同 |
查询 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 ❌ |
不要每次都写临时 Python 文件! search_quota.py v6 已支持命令行直接查询,且优先使用 SQLite 毫秒级查询。
# ✅ 推荐:直接调用脚本(快)
$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 文件
用户提问
↓
直接调用 search_quota.py(命令行参数传入)
↓
(如脚本参数解析不支持中文)→ 写临时 .py 文件查询 SQLite
↓
解析结果 → 输出给用户
| 错误信息 | 原因 | 解决方案 |
|---------|------|---------|
| && 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 |
以下表述自动触发本技能:
共 3 个版本