下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-bvz82yrd--bid-decision-evaluator.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-bvz82yrd/bid-decision-evaluator。投标决策评估器——输入一条招标公告和本企业名称,从资格门槛、能力匹配度、竞争格局与机会空间、报价空间与商务条件、项目与履约风险、投入成本六个方面取数核验,输出建议投/谨慎投/建议不投三档结论与综合匹配分报告。适用于与本采购方无历史合作的冷启动投标场景。Use when the user asks 投标决策评估、该不该投、要不要投这个标、投标评估、投标可行性分析、评估这个标。
阅读全文 (展开查看完整说明)
概述
投标决策评估(Bid Decision Evaluator)
Overview
接收一条招标/采购公告 + 本企业名称,从资格符合性、我方同类战绩、采购方画像、竞争格局、报价空间、项目与履约风险六个方面逐项取数核验,输出「建议投 / 谨慎投 / 建议不投」三档结论 + 综合匹配分 + 逐项依据的结构化 HTML 决策报告。
前提是"没跟这家甲方合作过"——有过合作的项目,销售心里本来就有底,不需要再评估一遍;所以本技能不含任何"我方与甲方关系"类计分项,改用采购方公开成交格局来判断有没有人被长期占位。
解决的问题是销售每天最贵的动作——看完公告后「这个标到底投不投」的纠结。本技能把纠结变成一张可解释的决策卡:每个结论都有公开数据支撑,逐条给依据,不拍脑袋。
本技能是业务逻辑层:数据访问依赖已安装的 bidi-tender-search 技能(比地 API、Token、接口目录)。若未安装该技能,先提示用户安装并配置 BIDI_API_TOKEN。
定位与边界
- 回答「该不该投」;「潜在投标人预测」回答「谁会来投」——两者互补,本技能的竞争格局维度复用预测技能的候选池打分逻辑(轻量版),但结论互不依赖,可单独运行。
- 只输出两层:事实层(公开数据可证的项目要素、历史记录、司法信用记录)+ 判断层(规则引擎按第 5 节计分模型得出,每条附依据)。
- 不做报价建议:不输出任何「建议报价」「报价策略」,价格相关仅允许呈现历史成交的客观事实。
- 不预测中标结果:结论是「参与决策」而非「赢单概率」,避免误导。
依赖与认证
- 令牌复用
bidi-tender-search的约定,按下列顺序多级回退解析 Bearer Token:--token> 环境变量BIDI_API_TOKEN/BIDI_TOKEN>BIDI_TOKEN_FILE>~/.workbuddy/tender-subscriptions/.env>~/.workbuddy/mcp.json的mcpServers.bidi-tender.env>~/.codex/config.toml。解析时同时探测环境变量 HOME 与系统真实主目录(passwd),兼容 WorkBuddy 沙箱改写 HOME 的情况。不得在命令、日志、报告或示例中输出 Token。若已配置,会话内自动复用,后续调用不再询问。 scripts/check_report.py(纯标准库):定稿前必跑的一致性自检,用法python scripts/check_report.py <报告.html>。五项检查:① 标签配对平衡(含 tbody 嵌套残留);② 目录/section/h2 与「第 0X 章」交叉引用一致;③ 维度满分与得分三处一致(第 01 章卡片 / 各章小结 / 第 08 章表)+ 合计等于标注总分;④ 版本痕迹与禁用术语扫描(剥离注释与 SVG path 后只扫正文);⑤ 占位符残留——交付报告中出现任何{{ }}即报错。退出码 0 = 通过。
模板模式:文件名含
template时自动切为模板校验(允许保留{{ }},检查 ①②③ 仍生效),用于校验assets/report_template.html自身版式未走样。定稿报告一律跑严格模式。
scripts/decide.py(纯标准库实现:取数 + 六维计分 + 输出 decision.json;报告 HTML 由会话按模板填充)。启动先跑python scripts/decide.py self-check:它以 JSON 报告凭据是否解析成功、命中的来源路径、候选主目录与接口登记状态(不回显 Token 值);凭据缺失时输出howto配置指引并以退出码 3 结束。decide子命令在确实无凭据时打印同一份配置指引(退出码 2)。工商/资质/司法/处罚接口路径在ENDPOINTS表登记后自动启用,未登记则优雅降级为"待核实"。- 交互形式(必须遵守):所有输入收集一律使用弹窗式交互卡片(选择题 + 输入框),不用纯文本逐项追问。一次最多 3–4 个问题;每题给 2–4 个预设选项,自由内容(公告链接/标题、企业名称、Token)让用户直接在输入框填写,预设选项仅作辅助路径。
- 首次被触发时,先确认 Token,再收集项目信息:
- 运行
python scripts/decide.py self-check检查凭据:它会在环境变量、~/.workbuddy/tender-subscriptions/.env、~/.workbuddy/mcp.json、~/.codex/config.toml之间多级回退查找,并兼容 HOME 被改写的情况;凭据缺失时会直接给出配置指引。 - 若已配置:直接弹出「评估信息收集」卡片(见下),随后立即开始评估。
- 若未配置:第一张弹窗只问 Token 状态,两个选项:
- 选项 A「我有比地 API 的 Bearer Token」→ 用户在输入框粘贴 Token(仅本轮会话内临时使用,不写入任何项目文件),随后弹出「评估信息收集」卡片;
- 选项 B「还没有 Token」→ 展示申请指引:前往比地数据开放平台(https://www.bidizhaobiao.com/sjjk/),注册账号后进入『开放数据 / API 接入』页面即可获得 Bearer Token(申请通常是免费的);拿到后回来粘贴 Token,进入信息收集卡片。
- 「评估信息收集」卡片(Token 确认后弹出,一次收齐全部输入,之后不再追加提问):
| 问题 | 交互方式 | 辅助选项 |
|---|---|---|
| ① 目标项目 | 输入框填写:公告链接 / 公告标题 / 公告编号 任一 | 「我只有大致印象」→ 在输入框填关键词(如"深圳 政务云 运维"),我方先检索定位再请用户确认 |
| ② 本企业名称 | 输入框填写企业全称 | 如有曾用名/简称一并在输入框注明;会话内评估过的企业可给「沿用上一次的企业」快捷选项 |
| ③ 严谨评估(可选) | 单选 | 「关闭(默认)——使用全部公开数据,最快」;「开启——以公告发布日为数据截止点,只用当时可见的数据」 |
取数过程中发现必须澄清的问题时,才允许弹后续卡片,逐次只问一个。
- API 基础地址与状态码规范见
bidi-tender-search的 SKILL.md;常见调用陷阱见references/bidi-pitfalls.md(与预测技能共用)。 - 降级通道:接口不可用(Token 缺失、接口故障、访问策略拦截)时,须先向用户说明,经同意后改走公开网页检索(政府采购网、各地公共资源交易平台、采购人官网公示栏)。降级时报告第九章「数据从哪来的」必须如实标注实际数据通道、检索日期与局限(如"3 年全量历史未公开可检索"),不得伪装成接口取数。
参数
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
tender | 字符串(必填) | — | 标讯标题、docId 或比地 URL。 |
me | 字符串(必填) | — | 本企业名称(我方档案、战绩、风险自查核对的主体)。支持提供多个曾用名/简称。 |
time_isolation | 布尔 | false | false=使用全部公开数据(最快);true=以目标公告发布日为截止点,只用此前数据(用户要求"严谨评估"时开启)。 |
参数收集一律通过弹窗式交互卡片完成(见"依赖与认证"的「评估信息收集」卡片),不使用纯文本逐项追问。
工作流程
- 定位标讯:用
scripts/decide.py的search()按标题关键词检索,确认 docId、采购人、发布时间、预算、采购方式。若time_isolation=true,记录publishTime作为截止点。 - 读取正文与要素:用
document(doc_id)+extract(doc_id)拉公告正文与 17 要素(所需资质、报名方式与截止、预算、保证金、服务期、联系人等)。产出三块基础结论:- 项目基本信息卡(后续报告第 2 章);
- 资格要求两类式:从公告原文结构化拆成「公告已明确(任一不符即废标)」与「公告详情可核验(待详情接口提取)」两组,并逐条标注"本项目的资格要求"而非行业通用条件;详情接口未能核验时,用法定通用条款占位并标注"非公告提取原文"。两类式仅作为资格计分(第 9 步)与第 6 章「大坑」卡片的数据底稿,最终报告不再单独渲染资格核对章。
- 采购内容解读:服务/货物/工程类型、关键核对项、品类陷阱提示(如"运维服务≠软件开发")。
- 我方档案:对
me用company()查工商基本信息(登记状态/注册资本/成立年份/经营范围),用qualification接口查我方资质证书清单。企业名先经主体确认归一(曾用名/简称→统一社会信用代码),避免战绩串档。注意isHistory、多职务、空壳返回三个坑(同预测技能第 3 步)。 - 资格符合性核对(三态):逐条比对公告资格要求与我方档案,输出三态:
- 符合:公开数据可直接证明(资质证书在有效期、业绩记录达标);
- 不符:公开数据明确证明不满足(如证书过期、等级不够)——任一硬性项不符即触发一票否决;
- 待核实:公开数据覆盖不到(如人员证书、联合体协议、财务报表)——统一标注「待核实」并说明需核对公告详情,与已确认项严格区分,不混入计分。
- 我方同类战绩:
search()传winTenderer=<me>+ 同品类关键词,显式传publishTime(默认只查近三个月),近 3 年口径;拉取后本地按winTenderer二次筛选(服务端过滤偏宽松)。统计:同类中标次数、单合同金额区间、同区域占比(以百分比呈现,不用分数形式)、近 12 个月活跃度。计入口径:仅统计可确证的中标记录——未能确认中标人的结果动态、未公开结果的投标记录一律不计入,可在明细表脚注中作"待核实记录"如实列出。同时用同口径查采购人(该甲方)的同类历史公告,进入第 6 步。
⚠️ 战绩/金额取数必须覆盖「候选人公示」通道(2026-09-17 实测踩坑,务必遵守):查我方战绩与金额时不要只传
channel=[101](中标信息)。「候选人公示」是独立通道,通道码
channel=119(101=中标信息、119=候选人公示)。大量项目只在中标前发候选人公示,且公示里直接载明中标候选人的报价——只查中标信息会同时漏掉中标记录与金额,导致「最大单」「战绩次数」双双偏低。正确写法(二选一,实测等价):①
channel=[101, 119];② 不传channel拉全通道,再本地逐条核验winTenderer。推荐用 ②,可兜住将来新增/未知通道。示意对比(同一企业、同一时间窗口):
口径 复核确证条数 历史最大单 channel=[101]only明显偏少(漏掉候选人公示区间的命中项) 偏低(错) channel=[101,119]/ 不限通道全量命中(中标信息 + 候选人公示) 真实最大单(对) ⚠️ 易错:
channel=[105]不是候选人公示(实测返回300104001空结果);119 才是。【同项目多公告去重】同一项目常同时有「候选人公示(可能多次)」+「中标/成交结果公示」多条记录,统计「中标次数」时须按项目名称/项目编号去重为独立项目数,同时把「公告条数」与「项目数」两个口径分开呈现(如「N 条公告 / M 个独立项目」两个口径分开写),避免口径混淆。
【金额取数优先级与归属】金额优先取中标/成交结果公告;无结果公告时,候选公示中的"成交候选人报价/响应报价"可作为该项目的可确证金额(须在脚注注明来源为候选人公示、是否含税)。金额必须与命中的
winTenderer同一主体——同一条记录里的winBidPrice可能是他方金额(实测某条候选人公示记录里winTenderer是另一家公司,其金额不可计入我方)。金额一律回原文核对(用BID-002取data.content),不得按列表字段直接下结论。
- 采购方画像(这家甲方把钱给了谁):用
tenderee=<甲方>单独检索该采购方近 3 年的成交类公告(中标信息 + 候选人公示双通道),统计三件事:- ① 成交条数与去重后的中标供应商家数;
- ② 每家命中次数分布 → 中标集中度:同一家中标 ≥3 次,或前 3 名合计占 ≥60% 判「高」(有人长期占位);无长期占位者判「低」(这家甲方不"认人");样本不足 3 条不判定、不修正并标注;
- ③ 成交金额区间(min/max/中位)——供报价空间维度做可比价参照。
输出须包含「上期中标供应商」(该甲方最近一次同类项目成交方)。本项目若查不到首期/上轮结果,如实写"公开记录中未见,无法确认上一轮成交方",不得编造、不得据此扣分。 检索中若出现与我方名称相关的记录,另开"关联复投信号"卡片如实备述(注明主体关系与记录内容),但不作为计分项——本模型不含"我方—甲方关系"维度。
> ⚠️ 这一步是 v5 取代旧「与该甲方合作史」的位置。区别在于:旧口径查的是"我方和甲方有没有交集"(没合作过就恒为 0,无信息量),新口径查的是"甲方和市场的关系"(公开数据永远算得出来)。
- 竞争格局与机会空间评估:两块数据合成 C 维——
- 同品类市场:近 3 年同区域 + 同品类中标公告聚合(与预测技能候选池同源,轻量执行):公告条数/年均、活跃中标供应商家数。按第 5 节阈值映射低/中/高三档,得 C 维基础分。
- 甲方侧格局:复用第 6 步的中标集中度(低 +2 / 高 −2),加上中标名额数(≥3 家 +2)与在位供应商续期迹象(−2)。
3 年全量数据不可得时(如公开网页检索仅能回溯近 12 个月),用可回溯窗口的近似口径判定,报告须明确标注"近似口径"与实际窗口,并在档位旁注"(近似)"。不输出潜在投标人名单(那是预测技能的职责),只输出档位与依据数字。
- 风险清单:三路核查 + 一个公告体检:
- 采购人侧:
executed()/dishonest()/ 行政处罚 / 欠税接口(权限自检 + 优雅降级:300104001=干净,300103001/401=未开通→标注"未能核验"不中断); - 我方侧:同口径自查(失信/经营异常是红级一票否决);
- 项目侧:保证金比例异常、流标重招记录、付款/资金来源线索;
- 公告体检:要素缺失项(预算未披露、联系人不清等)归黄级。
- 采购人侧:
- 计分与结论:按「计分模型」计分(资格通过即得 40 分,其余 5 个计分项合计 60 分),再映射三档结论。每个分项的得分必须能回指到具体数据依据(如"能力匹配度 15/25:相近品类近 3 年有多个独立项目中标")。报价空间维度按「最高限价 ↔ 同类项目成交价 ↔ 我方成本量级」的相对位置定强/一般/弱三档,付款与结算条件、保证金与质保金一并计入;公开数据不足以判定时按「一般」计并列入待核实,不得猜;全程只描述空间,不给报价建议。每张卡片只写「依据」一段(见下条组件规范)。
- 打分依据组件(硬性规范):第 01 章的「打分依据」不得只画分数字条,必须包含——
- 顶部:权重构成条(每段宽度 = 该维度权重,段内标"维度名 + 权重")+ 一句话说明"门槛 40 分/正向 37 分/反向 23 分"。不放方向图例(图例要解释的三个色块本身就长在权重条上,再单列一行属冗余,用户已明确删掉);
- 每个维度一张卡(共 6 张,含门槛卡),卡片必须含:维度名(大白话)+ 小字副标题、权重、得分/满分、得分进度条,以及「依据」一段。卡片上不放假徽章/方向标签(方向由顶部图例与配色承载,逐卡重复标签属冗余,用户已明确否决):
- 依据:凭什么给这个分——必须落到具体数字(条数、金额、家数、日期),不得写"经验判断"。卡片到此为止:不写「规则」段与「意义」段。
- 默认不输出「规则重审」「新旧规则对照」类板块——阈值与分档统一收进第 08 章「评分规则说明」,第 01 章只留卡片。仅在用户明确要求复盘规则变化时,才作为附录另行追加(判定标签:不合理/偏高/缺失/合理保留)。
- 视觉口径:正向蓝、反向橙、门槛绿(绿色是"过关"语义,用户 2026-09-18 明确要求资格不用灰色;门槛卡的描边、进度条、得分数字、权重段、图例点、第 08 章满分列一律走绿色体系);反向维度的配色要能读出"分越高=阻力越小"的语义,防止读者把扣分看成得分(不要在卡片上加文字标签去解释这一点)。定稿版式即为
assets/report_template.html第 01 章的六个打分依据卡(门槛卡 + 5 张维度卡)。
- 生成报告:复制
assets/report_template.html(变量模板 = 唯一版式基准)整段套用,按决策链顺序把{{变量}}替换为真实数据并输出浅色主题 HTML。模板已内置完整版式骨架(比地亮蓝渐变页眉 + 一行式 sticky 目录 + 9 章结构 + 核心结论卡〔三档徽章 + 「实际倾向」chip + 分数档位标尺 + SVG 环形匹配分〕+ 大白话结果卡 + 逐章结果横幅 + 金额量级对比条 + 五步走行动清单 + 通俗计分表与红绿灯结论对照),不要另写一套 CSS,也不要回退旧版式。图标一律用内联 SVG 线性图标,禁用 emoji。正文不得出现接口编号,仅「九、数据从哪来的」段保留 BID-/IC-/JU-/OP-/RISK- 溯源编号。变量名、含义、取值与块结构见 [references/variables.md](references/variables.md);数据落地口径与说人话对照表按输出规范逐条遵守;落盘前跑python scripts/check_report.py <报告.html>确认零残留、零违规。
计分模型(满分 100 · 投标企业视角 · 冷启动版 · 资格为 40 分一等权重项)
设计立场(2026-09-18 依据用户反馈确立):本模型服务于「从未与这家采购方合作过」的投标企业——这是绝大多数真实场景,也正是需要做评估的场景。 已经合作过的甲方,销售心里本来就有底,不需要再算一遍。因此不设任何「我方与甲方关系」类维度;原先"关系"想回答的那个问题(这家甲方是不是已经被别人占住了),改从公开数据侧回答——看该采购方的中标集中度(同一家是否长期中标、前三名占比是否过高),冷启动同样答得出来。
立论:资格不符 → 连门都进不了,讨论其他条件毫无意义;资格一旦符合 → 这个项目已经可以进入考虑范围,剩下要判断的是"值不值得投精力",而不是"能不能投"。所以资格通过即得 40 分,是单项里权重最高的门槛分。这样总分天然带 40 分底子,落点集中在 40–100,档位判定要看的是"在能投的前提下有多值得投"。
其余 60 分按「对冷启动作战胜负的影响程度」配置(不按"查得到多少信息"配置):
- 能力匹配度 25——"这活我干过吗"决定评标能不能拿分、交付能不能落地,权重最高,也是没合作过时唯一能靠自己积累改变的东西。
- 竞争格局与机会空间 14——没合作过时,赢面几乎完全由"抢的人多不多"和"有没有人已经占着"决定,权重仅次于能力。
- 报价空间与商务条件 10——"中了划不划算、钱好不好收"。原模型缺这一块,而"中了也是亏"是仅次于资格不符的不投理由。
- 项目与履约风险 7——"有没有影响交付和收钱的坑",多数项目条款常规,区分度有限。
- 投入成本 4——"试一把要花多少钱",免费取文件 + 低保证金已成常态,区分度最低。
三条不可动摇的底线:① 待核实 ≠ 不符合,公开数据查不到的属于信息缺口,只列清单、不扣分、不否决;② 一票否决只由三类事触发;③ 每个分项必须能回指到具体数据。
一票否决(命中任一 → 直接「建议不投」,不再按分档): ①公告已明确的硬性资格项已知不符;②我方为失信被执行人或经营异常;③公告递交截止时间已过。
| 维度 | 方向 | 满分 | 计分规则(全部可回指数据) |
|---|---|---|---|
| A 资格门槛 | 门槛(通过即得分) | 40 | 已知不符 = 0 分且一票否决;无已知不符 → 通过 = 40 分。公告未设资质要求(或未列资质条款)→ 默认视为通过,照样计 40 分,依据文案必须写明「公告未设资质要求,默认视为通过,计 40 分」,不得留白(引擎口径 qual_required=False / CLI --no-qual-req)。待核实项列清单,不扣分 |
| B 能力匹配度 | 正向 ↑ | 25 | 同品类中标 ≥3 次 = 25;1–2 次 = 20;相近品类 ≥3 次 = 15;相近品类 1–2 次 = 10;仅投标未中 = 5;无记录 = 0 |
| C 竞争格局与机会空间 | 反向 ↓ | 14 | 基础分按同品类烈度(活跃对手 ≤5 家 = 14;一般 = 8;>15 家 = 3);中标名额 ≥3 家 +2;有在位供应商续期迹象 −2;该采购方中标集中度 低(无长期占位者)+2 / 高 −2;上下限 0–14 |
| D 报价空间与商务条件 | 正向 ↑ | 10 | 看最高限价相对同类项目成交价的位置、付款与结算条件、保证金与质保金:强 = 10;一般 = 6;弱(限价贴着我方成本/需大额垫资/质保金 ≥10%/验收周期 >90 天)= 2。只描述空间,不给报价建议;公开数据不足以判定的按「一般」计并列入待核实 |
| E 项目与履约风险 | 反向 ↓ | 7 | 等级制:无不利因素 = 7;轻微 = 6(−1);中等 = 4(−3);重大 = 2(−5)。只计影响我方履约/回款/成本的因素 |
| F 投入成本 | 反向 ↓ | 4 | 低(免费取文件/保证金低/线上开标)= 4;中 = 2;高(高保证金/强制联合体/需长期驻场)= 1 |
分数结构:门槛 40(进门)+ 正向 35(我有多能打、划不划算:能力 25 + 报价 10)+ 反向 25(这活有多难啃:竞争 14 + 风险 7 + 成本 4)= 100。 权重构成条须如实呈现这个 40/35/25 结构。
资格配色为绿色,不用灰色(用户 2026-09-18 明确要求):门槛卡的描边与浅底、得分进度条、得分数字、权重构成条的资格段、图例圆点、第 08 章满分列,全部走绿色体系(#4ADE80 → #15803D;得分数字 gate_cls 通过时写 gatev)。绿色在此表达"过关",与红黄绿三档标尺的语义一致,不再承担"中性/待定"含义。
「相近品类」判定口径:与本项目品类交付能力同源的上位/邻近品类。例:本项目为「行业数据服务」,可判相近品类「标讯/招投标/商情数据服务」。判据是交付物与工序是否同源(数据采集 → 清洗 → 合规处理 → 数据成果交付),不是字面关键词重合。报告中必须写明相近品类名称及所依据的项目记录,脚注注明该处为口径放宽。
用词约束(2026-09-18 换词):一律写「同品类/相近品类」,不得再用「同族」「相近品类」——用户反馈"这个同族是什么意思,看不懂"。第 03 章横幅下方在模板里固定有一条术语条(
.simleg:同品类 = 干过一模一样的活 > 相近品类 = 同一大类下沾边的活 > 只投过没中/完全没干过),固定文案、不占变量,生成时无需填值。
竞争强度阈值(依据可调整,调整需在报告评分规则章同步说明):
| 档位 | 判定条件(近 3 年同区域同品类) |
|---|---|
| 高烈度 | 年均公告 >50 条,或活跃中标供应商 >15 家 |
| 低烈度 | 年均公告 <10 条 且 活跃中标供应商 ≤5 家 |
| 中烈度 | 其余情形 |
C 维还要看三个「非烈度」信号(常比烈度更决定成败):
①中标名额数——公告写明"选 N 家中标人"时,N≥3 视为实质利好(+2);
②在位供应商——上一轮同名/同品类项目的中标方或入围候选方,若其服务期恰好衔接到本次,说明有人在做且想续做(−2);
③该采购方中标集中度——统计该采购方近 3 年公开成交记录里各家供应商的命中分布。判「高」= 同一家中标 ≥3 次,或前 3 名合计占 ≥60%(−2,说明有人长期占位,冷启动很难撬动);判「低」= 无长期占位者(+2,说明这家甲方不"认人",对新进入者友好);样本不足 3 条时不判定、不修正,并在报告中标注。
③ 是本模型替代「与该甲方关系」的关键设计:有过合作的项目不需要评估,没合作过时,"我和甲方的关系"天然是 0 分、没有信息量;而"甲方和市场的关系"用公开成交记录就能算出来,且直接回答"我挤不挤得进去"。报告第 04 章「采购方画像」就是它的呈现章。
- 第 05 章结论先行,过程折叠(用户两次返工后定稿:"我只想知道结果,不要让我去想"):
- 横幅之后紧跟竞争判定结果条(
.cres,置于 KPI 依据卡之前):档位大字(如「人多 · 竞争激烈」)+ 利害 chip(如「对你不利 · 本维 5 / 14 分」)+ 一句话「对你意味着什么 + 分数怎么来的(基础分 ± 修正项)」。读者只读这一条就能得到全部结论; - 判定过程(两条轴各判各的「少/一般/多」三段轨道 + 指针 + 「取更热闹的那条」合成链)放进
<details>默认折叠,摘要行写「怎么看出来的:两条轴各判各的档,取更热闹的那条(点开展开)」,只给想核对的人; - 结果条不得重复 KPI 卡上的原始数字(公告量/供应商数/名额只在 KPI 卡出现一次);口径信息全部归章脚注;
- 两条轴:①年均中标公告量(少 <10 条/一般 10 至 50 条/多 >50 条)、②活跃中标供应商数(少 ≤5 家/一般 6 至 15 家/多 >15 家)。单位不同必须写清(年均 vs 累计),否则读者会拿累计家数去比单年门槛而算不通;
- 合成规则只讲一句人话:两条轴里取更热闹的那条当本档位(任一条为「多」→ 人多;两条都「少」→ 人少;其余 → 一般)。该规则与
scripts/decide.py的competition()完全等价——不要改写成"两条同时成立/任一成立"的与或条件,那正是前两版看不懂的来源; - 指针位置按三段等宽取 17/50/83(这是档位指示,不是等比刻度,别按数值比例算);
- 禁止:逐条打勾的条件表、「介于两者之间」这类不解释原因的说法;也不要在横幅里重复 KPI 卡已经给过的数字(同一组数字一屏出现多次,是"看不懂"的直接原因)。
- 横幅之后紧跟竞争判定结果条(
风险分级定义:
| 级别 | 典型情形 |
|---|---|
| 红级 | 采购人或我方列入失信被执行人;重大被执行/重大税收违法;递交截止已过 |
| 橙级 | 采购人近 1 年新增多条被执行记录;保证金比例异常(>合同估算价 2%);该品类近 1 年 ≥2 次流标重招;我方近 12 个月无任何同类中标且该品类首投 |
| 黄级 | 公告未披露预算/最高限价;要素缺失(联系人不清、报名方式不明);该品类近 1 年 1 次流标重招;代理机构为首次合作 |
关键改动:黄级不再一律扣分,须先判「这个坑是谁的」——
- 扣分:影响我方履约(重大 −5);影响我方回款或成本(中等 −3);影响决策信息完备度如预算未披露(轻微 −1)。
- 只提示不扣分:与采购人自身经营状况相关、且经核不影响我方履约与回款的纠纷(如历史久远、小额、已被执行完毕)。判据要写出来(条数、时间分布、案额量级)。
目的:避免"查得越细、发现越多小问题、分数越低"的反向激励。
决策结论口径
| 条件 | 结论 | 报告措辞 |
|---|---|---|
| 一票否决(资格已知不符/我方失信或经营异常/递交截止已过),或任一红级风险 | 建议不投 | "存在硬性障碍:……(逐条列出)。继续投入将难以通过资格审查。" |
| 总分 40–69 | 谨慎投 | "门槛这一关能过,但……(写明缺什么)。建议先落实待核实项与风险应对,再决定投入多少精力。" |
| 总分 ≥70 | 建议投 | "资格能过,业绩/报价/竞争面至少两项站得住,未见红级风险,建议参与投标。" |
- 三个档位与分数标尺严格对应:红 0–40(门槛未过 → 建议不投)/黄 40–69(谨慎投)/绿 70–100(建议投)。因资格通过即得 40 分,总分低于 40 只可能由一票否决造成;标尺第一段标注为"门槛未过",不得写成"分数低所以不投"。建议投线 70 分 = 资格 40 分 + 其余 60 分里拿到一半(30 分),这条换算关系要在第 08 章讲清楚。
conclusion_chip默认同conclusion;仅当结论为「谨慎投」且扣除资格 40 分后的实得分 ≤6 分(即除资格外几乎没有任何加分项)时,固定写「实际倾向:胜算偏低,先补功课」。- 结论卡必须同时给出一句话核心理由(引用最强的 1–2 条依据,如"上期中标供应商即你方")。
- 结论与依据三层不重复:核心结论给判断,正文给依据,要点提醒给动作。
- 存在待核实项时不改变结论档位,但在「投标要点提醒」中逐条列出,注明"结论按当前公开数据得出,若人工核实结果与假设不符,需重新评估"。
输出规范
- 版式骨架(以
assets/report_template.html为唯一版式基准与最终定稿模板):1120px 容器、比地亮蓝渐变页眉(主色 #1E6FFF,深→浅 #0A4BC0→#4E9BFF,金色点缀线;主标题固定「投标决策评估报告」,副标题只放公告名称,页眉信息卡一行一组:目标项目〔含预算〕/ 采购单位 / 我方企业 / 公告发布 / 评估时间)、一行式 sticky 目录(正式短标签,flex-wrap 兜底、禁横向滚动、无「回到顶部」)、章节编号卡 + 「一、二、…」中文序号大标题(括号内一句通俗说明)、内联 SVG 线性图标、打印样式;正式报告不带顶部演示横幅。生成时整段复制模板并替换变量,不要另写一套 CSS。
模板变量契约(硬性):
- 变量分两类——标量变量(直接替换为文本/数字/类名)与块变量(
own_win_rows/buyer_rows/risk_cards/action_steps/sensitivity_rows/data_source_items,按模板内注释给出的行/卡结构多行重复输出)。 - 六类 tone/cls 变量的取值域固定(结果卡
orange|good、统计卡c-red|c-orange|c-green、横幅red|warn|caution|info、维度卡zero|gatec、风险卡orange|gray、动作卡first),不要自造类名;某类计数为 0 时不得出现该类配色的卡。 - 变量总表见 [references/variables.md](references/variables.md);配色与结构红线见 [references/report-rules.md](references/report-rules.md)。
- 数据落地口径补充:模板内已不含任何真实数据,生成时必须逐项取数填充;接口取不到值的字段按本行口径写「—/未披露/待核实」,不得留空、不得保留
{{ }}。 - 报告章节(共 9 章,按供应商决策链顺序,编号固定;每章开头用「结果横幅」先给答案、再给依据):
- 一、核心结论(结论卡:三档徽章 + 「实际倾向」chip + 分数档位标尺 + SVG 环形匹配分 + 直白解读 + 4 张大白话结果卡 + 打分依据六卡(含 40 分门槛卡);整卡配色随结论档位取绿/黄/红)
- 二、项目概况(「一句话看懂」导读条 + 项目要素键值卡 + 特别提醒;未披露项写「公告里没查到——看公告原文」)
- 三、我方同类战绩(这种活干过吗)(结果横幅 + 近 3 年统计小卡 + 金额量级对比条 + 明细表,表头用「我方中标项目名称」,末列「和这个标像吗」)
- 四、采购方画像(这家采购方什么路数)(结果横幅〔讲这家甲方"认不认人"〕+ 依据数字小卡〔成交条数/中标供应商家数/中标集中度〕+ 集中度判定说明 + 该采购单位同类历史表;上期中标供应商查不到时如实说明)
- 五、竞争格局与机会空间(会有多少对手来抢、有没有人占着)(结果横幅〔只讲定档意味着什么,不重复原始数字〕+ 竞争判定结果条,紧跟横幅、置于依据卡之前〔档位大字 + 利害 chip〔含本维得分〕+ 一句话「对你意味着什么与分数怎么来的」——读者只读这一条就能走人〕+ 依据数字小卡〔公告量/活跃供应商/本项目中标名额〕+ 判定过程放进
<details>默认折叠〔两条轴各判各的「少/一般/多」三段轨道 + 指针 + 「取更热闹的那条」合成链,只给想核对的人展开〕) - 六、风险清单(有什么坑)(计数条 4 只 chip:硬伤/大坑/小坑/只提示不扣分;分级卡配色语义固定为 小坑=黄、大坑=橙、只提示不扣分=灰,某类为 0 时不得出现该类配色的卡;计数条不再写"扣 N 分",改为在章末小结里按等级制说明档位 + 分级卡:每条含「实际情况」与「要办的事」,配「哪些查了、哪些没查到」灰卡;无风险也要明确写"未发现"并给核查口径)
- 七、投标要点提醒(接下来怎么办)(五步走行动清单,每步一个动作;不做时间倒排,公告披露的时间节点仅作事实呈现)
- 八、评分规则说明(分数怎么算的)(六维通俗计分表(含 40 分门槛项) + 结论对照红绿灯表原样呈现,让用户知道分怎么来的)
- 九、数据从哪来的(溯源编号仅在本段出现 + 检索日期 + 未能核验清单 + 局限说明)
- 结果表达组件(定稿模板固定,缺一不可):
- 结论卡精准化:三档徽章旁并排「实际倾向」chip;结论为「谨慎投」且扣除资格 40 分后实得分 ≤6 时 chip 固定为「实际倾向:胜算偏低,先补功课」,结论与倾向一致时写「倾向明确,可推进」(不要复读结论原词),配分数档位标尺(红 0–40 门槛未过 / 黄 40–69 谨慎投 / 绿 70–100 建议投)。
- 结论卡配色与档位严格同步(用户 2026-09-18 明确反馈:"建议投为什么是红色?"):
verdict_tone必须随结论档位取值——建议投 =v-good(绿)/ 谨慎投 =v-mid(黄)/ 建议不投 =v-bad(红),大徽章、环形图渐变与分数(gauge_c1/gauge_c2/gauge_num_color)、标尺指针、卡片描边左侧色条一起换色,模板基色只是兜底,不得让建议投停留在橙色。判定口诀:标尺指针落在哪段颜色,整张卡就该是哪段颜色。 - 大白话结果卡(第 1 章 4 张):最强依据压成「一句结论 + 一句数据」,标题口语化(如「这种活,你一次都没干过」「这单子,比你过去的大 27 倍」);金额倍数只做除法呈现,不加主观形容。
- 结果横幅(第 3–6 章开头):图标 + 大字结论(没干过/这家甲方不认人/不少/大坑)+ 一句数据依据;红/橙/黄三色映射不符/高风险/需注意。
- 金额量级对比条:本项目预算 vs 我方最大单,两条横条按比例呈现,旁注倍数。
- 数据落地口径(逐条遵守):
- 报告内全部事实数据必须来自比地接口取数,接口之外无事实性数据;分析性表述必须标注口径(如"近似口径""公告直取")。
- 接口体系支持的模块一律保留:个别公告取不到值 → 写"—/未披露";接口权限未开通 → 模块保留为"待××接口开通后自动填充"占位,结论以"待核实"呈现,不作为"未发现"。
- 接口完全不支持的去掉:采购文件全文、评审细节等采购文件口径内容不得作为数据模块或核对依据出现,统一改挂"公告详情"口径;"采购文件"仅允许出现在免责话术"最终以采购文件与正式公告为准"中。
- 资格条款原文无法从接口提取时,用"政府采购法定通用条款占位"并明确标注"非公告提取原文",不臆断条款内容。
- 语言风格(说人话对照表,用户可见文案必须替换;章节大标题保持「一、核心结论」式正式命名,括号内保留通俗说明):六维计分→打分依据:六个方面;资格符合度→门槛够不够(资格);同类战绩→干过没有(战绩);甲方合作史→这家甲方什么路数(采购方画像);竞争强度→对手多不多(竞争格局);报价空间与商务条件→划不划算(报价);风险清单→坑多不多(风险);红级/橙级/黄级→硬伤/大坑/小坑;待核实项→统一标「待核实」/列入「要办的事」/公告里没查到——看公告原文;可确证→逐条复核过;口径→统计方式;跨品类首投→头一回投这行的标;上期中标供应商→上次这个活是哪家做的(按品类措辞)。专业术语可在括号内轻注,不得裸用。
- 数字口径:每个分数带依据;统计带时间范围与样本量(如"近 3 年、同区域同品类公告 23 条");占比用百分比呈现(如 100%),不用分数形式;参与强度用单点档位,不用区间。
设计红线与禁用词
- 用户可见文案禁用:头部 / 长尾 / 腰部 / CR5 / CR10 / 企业实力 / 信用合规 / 现任("上期中标供应商"替代)。
- 不做报价建议、不做时间倒排行动表(时间只作事实呈现)、不推算未来节点(未发生节点写"以正式公告为准")。
- 缺失字段写"—",脚注统一"以正式公告为准";样本不足不输出判读(如采购方画像需 ≥3 条该采购方成交记录才判集中度,竞争格局需 ≥3 条同类公告,不足则该维度按规则给分但正文注明样本有限)。
- 不设「我方—甲方关系」类计分项(用户 2026-09-18 明确要求):需要做评估的场景本就是"没跟这家甲方合作过",有合作的项目不需要再算一遍。凡写出"与该甲方关系""合作史""熟不熟"之类的维度名或得分项,一律视为口径错误。信息需求由第 04 章「采购方画像」(该甲方中标集中度)承接。
- 结论卡配色必须与档位同步(用户 2026-09-18 明确要求):建议投 = 绿、谨慎投 = 黄、建议不投 = 红——大徽章、环形图、标尺指针、卡片描边一起换色;不得把结论卡固定成橙色。判定口诀:标尺指针落在哪段颜色,整张卡就是哪段颜色。
- 金额与市场数据必须自带范围(用户 2026-09-18 明确要求):①凡"最大单 / 金额区间 / 倍数对比",必须写明是同品类还是相近品类的金额(如「贵司相近品类最大单」「相近品类单笔金额区间」),禁止裸写「贵司最大单」——我方其他业务的最大单可能大得多,裸写会把"标的比过去大 12 倍"误读成"标的比我方能力大 12 倍";②市场面数字的卡必须带地域 + 品类(如「福建同类中标公告」「在抢的供应商(福建同类)」),不让读者猜数据是哪里的。
- 术语只说人话:品类贴合度只写「同品类(一模一样的活)/相近品类(同一大类下沾边的活)」,不得用「同族」这类自造词;第 05 章档位判定用两条轴落档 + 「取更热闹的那条」,不得写与或条件表。
- 待核实与不符严格区分:待核实项不得触发一票否决,不符项必须触发。
- 内部术语不进用户可见文案:信号分 / 宽池 / 候选池代码 / 维度编号 A–E 等;接口编号仅在「数据从哪来的」段出现。
- 报告只呈现唯一终稿,不写版本历史(用户 2026-09-18 明确要求):正文与脚注都不得出现「修订记录」「v1/v2」「旧版/旧规则」「重审」「新旧对照」「本次规则调整」等字样,也不解释"改了什么、原稿错在哪"。修订过程只留在会话记录与工作日志里;每次交付按最新口径重写全文,读者看到的就是定稿。
- 同一条维度的事实,三个地方必须完全一致:第 01 章卡片的「权重/得分」、各维章节小结的「该方面得 X / Y 分」、第 08 章表的「满分/本项目得分」。满分固定为 资格门槛 40 / 能力匹配度 25 / 报价空间与商务条件 10 / 竞争格局与机会空间 14 / 项目与履约风险 7 / 投入成本 4,六项之和必须等于
total_score。交付前逐项对照(历史事故:维度满分被误写、风险维小结仍写旧的"扣分制",而卡片与第 08 章已是"等级制")。 - 门槛是计分项,不是旁注:资格 40 分必须同时出现在第 01 章门槛卡得分、第 08 章「满分/本项目得分」列与合计里;不得再写成"不计分"。一票否决时门槛记 0 分、结论固定「建议不投」,其余五个方面仍照常给分并在依据里注明"门槛未过,以下得分仅供参考"。
- 资格相关的色块一律绿色,不得用灰色(用户 2026-09-18 明确要求):权重构成条的资格段、门槛卡描边与浅底、门槛进度条、门槛得分数字、图例圆点、第 08 章资格行满分列,六处必须同色系;不得出现"门槛灰"。
- 章节内小标题必须与表体内容对得上:标题承诺几件事,表体就得正好是那几件事;表体明确"不改变结论"的,标题就不能写"会改变结论"。
- 凡写出来的数字都要能算回去:如"若从严判为中等风险,总分降至 64 分"必须可由其他章节分数算出(67 − 6 + 3 = 64);不确定就不写。
- 交稿前自检:对成稿全文跑正则
(BID|IC|JU|CONS|RISK|OP)-d{3}|未开通|已开通|docId|子接口|状态码|返回码|字段|API|token|头部|长尾|腰部|CR5|CR10|企业实力|信用合规|现任|建议报价,命中项只允许落在「数据从哪来的」段;另跑 emoji 扫描(Unicode 表情区段)应为 0 命中;再跑版本痕迹与术语扫描v1|v2|旧版|修订|重审|新旧对照|· 新增|需人工核实|五维|介于两者之间|同族,同样应 0 命中(模型版本号等描述只允许留在模板注释里,不进正文);最后检查{{残留应为 0。以上五项已脚本化,定稿前直接跑python scripts/check_report.py <报告.html>,必须全绿再交付。同一次评估的预览文件与模板改动,一并跑一遍。
参考资料
assets/report_template.html— 唯一版式基准与最终定稿模板(变量版)。9 章结构骨架 + 全部 CSS + 内联 SVG 图标全部内置,真实数据位一律为{{变量}};块变量的行/卡结构以 HTML 注释写在模板内。生成报告时整段复制本文件并替换变量。references/variables.md— 模板变量总表(160 个变量:含义 / 取数来源 / 格式示例 / 块结构 / tone 取值域)。references/report-rules.md— 报告质量红线与交稿自检速查卡(结构顺序、三原则、禁用词表、数据兜底、模板填充契约、tone 配色表、自检清单)。references/bidi-pitfalls.md— 与tender-bidder-predictor共用的调用陷阱清单。references/endpoints.md— 比地接口路径与参数登记表。