档案信息化项目报价清单
把预算转成可审计、可回算、可解释的功能级报价。任何正式报价必须满足:单位和税口径明确,分项合计严格等于系统预算,系统与固定项合计严格等于项目总价,未知预算不得静默写成 0。
协同边界
- 独立功能级报价由本 Skill 主控报价逻辑,叠加当前
Spreadsheets完成工作簿读取、定向编辑、公式、数字格式、渲染和导出。 - 完整投标由
bid-document-builder总控商务口径和最终合稿;本 Skill 仅返回已核对的报价工作簿与对账结果。 - 普通售前方案中的投资估算由
presales-proposal-builder主控;只有需要功能级 Excel 分配时才叠加本 Skill。 - 招标模板或暗标要求 > 用户明确要求 > 中性报价默认 > 安铂品牌。不得因为是档案项目就自动套蓝橙。
- 本 Skill 不重建既有工作簿,不覆盖功能原文。需要润色时保留“原功能描述”,另增“优化说明”列并记录修改范围。
强制输入
开始前确认或从用户资料中提取:
- 源功能清单或用户确认的叶子功能列表;
- 每个系统预算,或总预算及已确认的系统分配;
- 币种、金额单位、是否含税;
- 固定项及其金额;
- 正式报价、内部测算还是投标报价;
- 招标模板、暗标、报价表字段和公式要求。
正式状态下,币种、单位或税口径未知必须停在内部草稿,不得假定为人民币、万元或含税。客户名称、项目编号、预算和功能范围均不得从历史报价迁移。
唯一配置契约
使用 templates/quotation_config.example.json 的结构。先把源表识别出的系统标题写入 source_sections,再配置 systems;两者的 key 和标题必须完全一致。金额均用十进制字符串,不使用二进制浮点数。每个系统必须包含唯一 section_key、完整 section_title、budget 和至少一个叶子功能或固定项。
叶子功能是可以单独描述交付结果和验收边界的最小可报价项。系统标题、功能组标题、说明行、空行和合计行不得参与分配。若无法可靠识别叶子项,先输出待确认清单,不自动给所有行分价。
复杂度权重只影响同一系统内叶子功能的相对分配,不代表市场价格或工作量承诺。默认权重规则见 complexity_keywords.md;同一关键词只能属于一个等级,用户显式权重优先。
分配与对账
运行:
python "<skill-dir>/scripts/allocate_quotation.py" --config "<quotation_config.json>" --output "<allocation_result.json>"
脚本使用 Decimal 和最大余数法,以 0.01 个配置单位为最小颗粒度:
- 从系统预算扣除系统固定项;固定项超过系统预算立即失败。
- 对该系统全部叶子功能按权重一次分配,不先按功能组行数切预算。
- 先计算未取整份额,再按余数从大到小回补尾差;相同余数按稳定
item_id排序。 - 断言“固定项 + 叶子项 = 系统预算”。
- 断言“全部系统预算 + 项目级固定项 = 项目总价”。若配置了
expected_project_total,两者必须相等。
配置中的系统未在源表找到、源表系统没有预算、标题与 key 冲突、金额非法、功能 ID 重复或存在未识别行时,必须阻断正式输出。
写入 Excel
将 allocation_result.json 交给当前 Spreadsheets Skill,在原工作簿副本上定向编辑:
- 数量、单价、合价必须是数值单元格;合价优先使用公式,设置金额数字格式,不写“¥ 650 万元”这类文本。
- 系统合计和项目合计使用公式,并增加“配置预算、分项合计、差额”对账区;差额非零不得导出。
- 保留源表字段、顺序、合并单元格和招标模板;不得重复插入已有表头。
- 公式无缓存值、损坏文件恢复或字段缺失时,明确报告缺失统计并要求人工复核,不得声称无损提取。
- 最终工作簿每张可见表至少渲染一次,检查截断、换行、冻结窗格、合并、打印区域、公式错误和金额显示;修改后重新渲染。
scripts/extract_xlsx_data.py 只用于损坏文件的数据抢救,不是常规读取路径。恢复结果不能证明公式、样式、合并、批注或图片无损;正式报价必须回到可正常打开的工作簿或经用户确认的重建底稿。
交付门禁
交付前同时提供:
- 最终 XLSX;
allocation_result.json对账结果;- 总价、各系统预算、固定项、税口径和单位摘要;
- 未报价、待确认、恢复缺失和人工复核项。
只有脚本返回 valid: true、工作簿公式复核通过、所有差额为 0 且完成视觉检查,才能称报价完成。不得把内部测算稿描述成正式报价。