投标风险评估
读取招标文件,逐条分析资格条件、废标条款、评分标准、合同条款,输出带分标差异化标注的投标风险要点评估表(Excel),供编标团队使用。
本技能为通用方法论,不含任何特定企业、人员或项目的保密信息,可安全分发与公开上架。
核心原则
1. 废标与评分必须严格区分
废标红线清单(Sheet 1)仅包含会导致投标无效的条款,来源仅限于:
- 招标公告的资格要求
- 投标人须知前附表中标注"必须提供否则作无效投标处理"的条款
- 负偏离限制条款(允许负偏离0项=必须完全响应)
- 投标保证金有效性条款
- 信用记录禁止条款
- 关联关系禁止条款
- 串通投标情形
得分高低(业绩分、人员分、技术方案分等)属于评分分析,放在资信/商务/报价/技术评估表中,绝不出现在废标红线清单中。
2. 检查内容必须使用招标文件原文
所有检查项的"检查内容"列必须尽可能使用招标文件原文,不可简写或改写。特别警惕以下常见错误:
- ❌ "2021年以来新建大型水利工程等评审" → 意思完全变了
- ✅ 原文:"投标人2021年以来,组织审查过除新建大型灌区工程以外的其他大型水利水电工程项目勘察设计(含项目规划、建议书、可行性研究、初步设计、安全鉴定、实施方案等)成果"
- ❌ "水文规划/水工水资源/水利规划..." → 专业名称不准确
- ✅ 原文:"水文规划(水文水资源、水利规划)、地质、水工、机电及金属结构(水机、电气、金属结构)、造价、水土保持6类主要专业"
用「原文:」前缀标注原文内容。
3. 多分标项目必须逐条标注分标差异
当项目有多个分标时,每个检查项必须在"检查内容"列标注适用范围:
- 【全部分标相同】 — 所有分标要求一致
- 【分标1】 【分标2-5】 【分标6-7】 — 仅该类别分标适用
高分攻略清单须包含"适用分标"列。
4. 输出即交付
收到招标文件后直接分析并生成Excel,不问"要不要填进去""要不要生成Excel"等确认问题。
工作流程
Step 1: 读取招标文件
.doc 格式(OLE复合文档)使用 olefile + UTF-16LE 文本提取:
import olefile, struct
ole = olefile.OleFileIO(path)
data = ole.openstream('WordDocument').read()
# 遍历 data,提取 0x4E00-0x9FFF(中文)、0x0020-0x007E(ASCII)范围字符
.docx 格式使用 markitdown 或 python-docx。
Step 2: 定位关键章节
在提取的文本中搜索以下关键词定位关键内容,必须读到原始文字:
- 招标公告(资格要求、联合体、保证金)
- 投标人须知前附表(资格证明文件、报价文件、商务技术文件的"必须提供"清单、负偏离限制、最高限价)
- 评标方法及评分标准(价格分、业绩分、技术分、人员分、认证分的原文条款、分值构成百分比)
- 采购需求(技术需求、服务范围、分标描述)
- 合同条款(预付款、付款条件、违约责任)
⚠️ 嵌套表格强制检查
电力、水利等大型央国企/招标人的招标文件大量使用嵌套表格(表格中的表格)存储关键信息。python-docx 的 table.cell(x,y).text 在遇到嵌套表格时返回空字符串,导致关键数据遗漏。
检查流程(不可跳过):
- 表格预览扫描:读取每个表格时,逐行检查关键列(如"评审标准"列、"内容"列)是否为空
- 空单元格追踪:如果某行该列显示为空,但该行是已知需有内容的关键行(如"2.2.1 分值构成"、"3.2.4 最高限价"、"评分标准"等),必须怀疑嵌套表格
- XML解析提取:使用以下方法提取嵌套表格内容:
from docx.oxml.ns import qn
# 直接用XML访问嵌套表格
row_elem = table._element.findall(qn('w:tr'))[row_index]
tc = row_elem.findall(qn('w:tc'))[col_index] # 通常是第3列(评审标准/内容列)
nested_tbls = tc.findall('.//' + qn('w:tbl'))
for nt in nested_tbls:
for tr in nt.findall(qn('w:tr')):
for ttc in tr.findall(qn('w:tc')):
ts = ttc.findall('.//' + qn('w:t'))
txt = ''.join(t.text or '' for t in ts)
- 编码问题处理:终端输出中文可能因GBK编码报错。将结果写入UTF-8文件后用Read工具阅读:
with open(path, 'w', encoding='utf-8') as f:
f.write(content)
- 常见嵌套表格位置:
- 投标人须知前附表 → 3.2.4 最高限价(嵌套多分标限价表)
- 评标办法前附表之一 → 2.2.1 分值构成(嵌套分标/技术/商务/报价百分比表)
- 评标办法前附表之三/四 → 商务/技术评分标准(可能嵌套分标差异表)
模板内置废标项(通用规则,适用于所有电子招投标项目)
以下废标项不依赖具体招标文件原文,属于电子招投标和编标规范的通用风险,每次生成评估表时必须包含:
- 文字(表格)显示不全:电子投标文件中文字截断、表格溢出、内容叠盖、乱码,导致评委无法正常评审。【通用编标规范】风险等级:高。
模板内置风险项(报价评估必查)
以下检查项在报价风险评估(Sheet 4)中必须作为独立行项标出,不得与其他内容合并:
- 最高限价(上控价)—— 超过即废标:无论项目是否有最高限价,必须在报价风险评估中单独列一行,标记为风险等级「高」。内容格式:「确认是否有最高限价。★超过最高限价作无效报价处理,直接导致否决投标。务必在报价前确认各标包/分标的最高限价金额。」如有最高限价则注明具体金额和来源依据,如无则标注「无上控价」。
关键要求:分析招标文件时,必须主动查找并填入最高限价的具体金额。不能只写"有"或"详见附件"。查找途径:
1. 招标公告标的物清单中的"最高限价"列(如有)
2. 投标人须知前附表3.2.3/3.2.4(常见嵌套表格——如cell.text为空,必须用XML解析嵌套tbl)
3. 附件B-报价表 / 最高限价表
4. 如果以上途径都找不到(如限价在独立Excel附件中且未提供),标注为「【待确认】需人工查看附件B-报价表」
5. ⚠️ 嵌套表格是最高限价的常见载体,不要因为 cell.text 返回空就放弃查找
Step 3: 逐条填写评估表
按以下8个Sheet结构组织内容:
Sheet 0: 使用说明 — 项目基本信息、评估表结构说明、废标vs评分区分说明
Sheet 1: 废标红线清单 — 仅废标条款,格式:序号/检查项/检查内容(原文)/依据(页码)/是否满足/佐证材料/确认人/备注
Sheet 2: 资信风险评估 — 企业资格、资质、业绩、人员、财务信用
Sheet 3: 商务风险评估 — 文件编制、电子平台、分标规则、时间节点、合同条款
Sheet 4: 报价风险评估 — 报价模式、成本风险、支付风险、竞争分析
Sheet 5: 技术风险评估 — 服务范围、质量管理、考核管理、技术方案
Sheet 6: 高分攻略清单 — 适用分标/加分项(原文)/满分/依据
Sheet 7: 风险评估汇总 — 项目信息、废标统计、板块风险评分、策略建议
每条包含11列:序号/风险类别/检查项/检查内容/依据(页码)/风险等级/当前状态/应对措施/责任人/截止时间/备注
风险等级判定:
- 高(红色)— 直接导致废标或得分占比>30%或影响成本>10%
- 中(黄色)— 影响得分占比10-30%或影响成本3-10%
- 低(绿色)— 影响有限
Step 4: 生成Excel
必须使用 xlsxwriter(不支持 openpyxl 写入,会在WPS中出现乱码)。
关键格式要求:
- 表头:深蓝底白字(#1F3864),微软雅黑10号加粗
- 章节标题:蓝底白字(#4472C4)
- 风险等级列条件格式:高=红底、中=黄底、低=绿底
- N/A项:灰色背景
- 列宽:序号6/风险类别14/检查项22/检查内容50/依据25/风险等级10/状态10/应对措施35/责任人10/截止时间12/备注20
- 样式实现细节见 references/xlsxwriter-patterns.md
Step 5: 交付
生成后将文件路径反馈给用户,并附关键风险的文字摘要(废标红线项、高风险项、最高限价确认情况)。
禁止行为
- ❌ 不要用 openpyxl 写入 Excel(会在WPS中出现乱码)
- ❌ 不要把评分得分项放进废标红线清单
- ❌ 不要简写或改写招标文件原文
- ❌ 不要在有多个分标时不标注分标差异
- ❌ 不要在生成过程中反复确认——直接输出
- ❌ 不要遗漏"必须提供否则作无效投标处理"的条款