# 招投标实体数据库与地图看板 TODO

更新时间：2026-06-17

## 当前基线

- [x] 已从原始 Excel 抽取实体表：项目、招标公司、投标公司、投标产品、投标公司资质。
- [x] 已生成实体工作簿：`docs/deliverables/20260617-raw-excel-entity-tables/原始Excel招投标实体抽取表.xlsx`
- [x] 已生成地图 HTML 看板：`docs/deliverables/20260617-entity-map-dashboard/招投标实体地图看板.html`
- [x] 地图看板已支持全国省级汇总、金额/项目数切换、点击省份下钻、右侧项目明细、地区排行、供应商排行、需求类型分布。
- [x] 已按项目规则记录运行笔记：`docs/runs/20260617-entity-map-dashboard.html`

## P0：先把 Excel 真正数据库化

### Task 1：建立关系型数据模型

**目标：** 把现在分散在 Excel sheet 里的内容，沉淀为稳定的数据库表结构，后续 HTML、Excel、爬虫、公司关系图都从同一套表导出。

**建议表：**

- [ ] `tender_projects`：招投标项目主表，记录项目编号、项目名称、地区、预算/中标金额、公告时间、项目阶段、来源链接。
- [ ] `buyers`：招标公司/采购单位表，记录单位名称、组织类型、地区、统一社会信用代码占位、来源。
- [ ] `bidders`：投标公司/供应商表，记录公司名称、地区、注册资本占位、经营状态占位、来源。
- [ ] `products`：投标产品表，记录产品名称、软件功能、硬件参数、数量、单价、品牌/型号、所属项目。
- [ ] `qualifications`：资质字典表，记录资质名称、资质类型、发证机构、有效期字段。
- [ ] `bidder_qualifications`：投标公司与资质关联表。
- [ ] `project_bidders`：项目与投标公司关联表，记录是否中标、投标报价、商务分、技术分、报价分、总分、排名。
- [ ] `project_products`：项目与产品关联表。
- [ ] `source_evidence`：证据表，记录每一条数据来自哪个 Excel、PDF、网页链接、页码、截图或附件。
- [ ] `scoring_items`：评分细项表，记录商务分、技术分、报价分的具体评分标准和扣分/得分依据。
- [ ] `attachments`：招标文件、合同公示、候选人公告、评分表等原文件索引。

**验收标准：**

- [ ] 能从当前实体 Excel 一键生成 SQLite 或 DuckDB。
- [ ] 每个项目、公司、产品、资质都有稳定 ID。
- [ ] 地图 HTML 不再直接解析 Excel，而是读取数据库导出的 JSON。

## P0：补齐数据质量与去重

### Task 2：项目去重与异常金额校验

**目标：** 当前数据里存在“即将删除”“更新版”“同一项目不同公告”等情况，需要在展示前做去重和归并。

- [ ] 建立项目去重规则：项目名称、项目编号、采购单位、金额、日期、来源 URL 综合判断。
- [ ] 给每条项目加 `duplicate_group_id` 和 `canonical_project_id`。
- [ ] 对明显异常金额增加校验标记，例如金额过大、金额为 0、预算与中标金额混用。
- [ ] 地图看板支持“原始记录数”和“去重项目数”两个口径。

**验收标准：**

- [ ] 输出一张 Excel 或 HTML 去重报告。
- [ ] 地图看板默认使用去重口径，并能切换查看原始口径。

## P1：增强地图看板

### Task 3：离线化地图资源

**目标：** 当前 HTML 的 ECharts 和 GeoJSON 依赖在线 CDN，后续要保证断网或内网也能展示。

- [ ] 下载并固定 ECharts JS 到项目本地。
- [ ] 下载中国、省、市、区县 GeoJSON 到 `docs/assets/map/` 或类似目录。
- [ ] 修改看板脚本，优先加载本地资源。
- [ ] 保留在线 CDN 作为备用。

**验收标准：**

- [ ] 关闭网络后，地图仍能打开并完成全国到北京区县下钻。
- [ ] 页面没有外部资源加载失败导致的空白。

### Task 4：地图下钻做成完整层级

**目标：** 从全国到省，再到市，再到区县，形成稳定交互。

- [ ] 全国层级：展示省级金额和项目数。
- [ ] 省级层级：展示地市金额和项目数。
- [ ] 直辖市层级：展示区县金额和项目数。
- [ ] 区县/地市点击后，右侧显示项目清单、采购单位、供应商、产品和来源。
- [ ] 增加面包屑：全国 / 北京市 / 海淀区。

**验收标准：**

- [ ] 点击中国地图上的北京后，可以看到北京各区汇总。
- [ ] 点击某一区后，可以看到该区项目明细。

### Task 5：报表筛选器

**目标：** 让地图不只是展示，还能按业务问题筛选。

- [ ] 时间筛选：按年份、月份、季度。
- [ ] 项目阶段筛选：招标、候选人、中标、合同公示。
- [ ] 客户类型筛选：学校、医院、银行、政府、国企、园区等。
- [ ] 需求类型筛选：软件平台、硬件设备、系统维保、综合集成、餐饮运营。
- [ ] 金额区间筛选。

**验收标准：**

- [ ] 任意筛选组合后，地图、排行、明细表同步刷新。

## P1：公司关系与竞品分析

### Task 6：招标公司与投标公司的关系图

**目标：** 把“谁经常投谁的项目、谁在哪些地区更强、谁和哪些产品绑定”做成关系网络。

- [ ] 建立采购单位到供应商的边：`buyer -> bidder`。
- [ ] 建立项目到产品的边：`project -> product`。
- [ ] 建立供应商到资质的边：`bidder -> qualification`。
- [ ] 建立供应商到地区的边：`bidder -> province/city/district`。
- [ ] 输出关系图 HTML，支持点公司看项目、点项目看产品、点资质看覆盖公司。

**验收标准：**

- [ ] 能回答“某投标公司参与过哪些项目、覆盖哪些客户、有哪些资质、主推哪些产品”。

### Task 7：供应商竞争力画像

**目标：** 模仿天眼查、企查查的公司画像结构，但只使用授权来源和项目内证据，不凭空补数据。

- [ ] 公司基础信息：名称、地区、注册资本、成立时间、经营状态、统一社会信用代码。
- [ ] 中标记录：项目数、总金额、平均金额、地区覆盖。
- [ ] 产品能力：软件功能、硬件设备、维保服务、集成能力。
- [ ] 资质能力：资质数量、资质类型、证据来源。
- [ ] 评分能力：商务分、技术分、报价分、总分、排名趋势。
- [ ] 风险提示：数据缺失、来源不稳定、需人工核验。

**验收标准：**

- [ ] 每个重点投标公司能导出一页 HTML 或 Excel 画像。

## P1：评分与中标原因分析

### Task 8：评分标准结构化

**目标：** 解决“商务 7 分为什么得 4 分、报价 42 分为什么得 35 分”这类问题。

- [ ] 从招标文件抽取评分办法。
- [ ] 把商务、技术、报价、其他分拆成评分细项。
- [ ] 把每家公司得分绑定到对应评分细项。
- [ ] 抽取报价分公式，例如低价优先、基准价法、偏离率扣分等。
- [ ] 在项目详情页展示“公式、原始报价、计算过程、最终得分”。

**验收标准：**

- [ ] 对一个项目能追溯每家公司每个分项为什么得这个分。
- [ ] 对报价分能复算出与公告一致或差异可解释的结果。

### Task 9：中标原因总结

**目标：** 自动生成“为什么是他中标”的证据型结论。

- [ ] 按报价、商务、技术、资质、产品参数、交付周期、服务承诺拆原因。
- [ ] 每条原因必须绑定证据来源。
- [ ] 对无法判断的原因标记“缺证据”，不编造。
- [ ] 输出项目级中标原因摘要。

**验收标准：**

- [ ] 每个项目有一句话结论和分项证据。

## P2：资料采集与证据链

### Task 10：附件下载与归档

**目标：** 每个项目都能找到招标文件、候选人公告、中标公告、合同公示等原文件。

- [ ] 建立项目附件目录：`data/raw/project-files/<project_id>/`。
- [ ] 下载招标文件、评分办法、合同公示、公告截图。
- [ ] 对每个附件记录来源链接、下载时间、文件类型、是否可打开。
- [ ] 将附件索引写入 `attachments` 表。

**验收标准：**

- [ ] 每个重点项目都有本地原文件或明确的缺失原因。

### Task 11：来源平台采集流程

**目标：** 固化“从哪里找、怎么找、什么情况下需要扫码”的流程。

- [ ] 千里马、乙方宝、政府采购网、地方公共资源交易平台、地铁招投标平台分开建采集策略。
- [ ] 记录每个平台的登录要求、附件下载方式、反爬限制和可复用字段。
- [ ] 需要扫码时，只做授权账号内的下载，不绕过权限。
- [ ] 下载失败时写入失败原因和待人工处理队列。

**验收标准：**

- [ ] 新项目可以按平台策略自动或半自动补齐原文件。

## P2：Skill 与 Workflow 沉淀

### Task 12：沉淀招投标抽取 skill

**目标：** 把本轮问答沉淀成可复用技能，后续换一个 Excel 也能照流程跑。

- [ ] Skill 1：`tender-excel-entity-extraction`，负责从原始 Excel 抽项目、招标公司、投标公司、产品、资质。
- [ ] Skill 2：`tender-source-evidence-crawl`，负责按平台找公告、附件、评分文件。
- [ ] Skill 3：`tender-scoring-analysis`，负责评分标准、报价公式、中标原因复算。
- [ ] Skill 4：`tender-map-dashboard`，负责从数据库生成地图和报表 HTML。
- [ ] Skill 5：`tender-coverage-audit`，负责统计抓到几项、缺几项、缺失原因。

**验收标准：**

- [ ] 每个 skill 都有输入、输出、命令、验收标准和失败处理。
- [ ] 新线程可以只读 skill 就复现本项目流程。

### Task 13：沉淀端到端 workflow

**目标：** 形成完整流程：原始 Excel -> 数据库 -> 附件采集 -> 结构化抽取 -> HTML/Excel 输出 -> 缺失审计。

- [ ] Workflow Step 1：导入原始 Excel。
- [ ] Workflow Step 2：抽实体表。
- [ ] Workflow Step 3：入库并去重。
- [ ] Workflow Step 4：补公告和附件。
- [ ] Workflow Step 5：抽软件、硬件、资质、评分、报价公式。
- [ ] Workflow Step 6：生成项目单表、公司画像、地图看板。
- [ ] Workflow Step 7：输出缺失审计和下一轮采集队列。

**验收标准：**

- [ ] 一个新 Excel 能按 workflow 跑出同一套交付物。

## P2：页面产品化

### Task 14：项目详情页

**目标：** 地图只能看总体，详情页用于看单个项目的完整证据。

- [ ] 项目概览：名称、地区、金额、采购单位、中标单位、时间。
- [ ] 产品清单：软件功能、硬件参数、数量、型号。
- [ ] 投标公司：三家或全部投标公司、报价、排名、得分。
- [ ] 评分标准：商务、技术、报价、其他。
- [ ] 中标原因：证据型总结。
- [ ] 附件与来源：原文件、链接、页码。

**验收标准：**

- [ ] 从地图明细点击任意项目，进入项目详情页。

### Task 15：导出能力

**目标：** 页面里的分析结果可以继续导出为 Excel 给业务使用。

- [ ] 导出当前筛选结果为 Excel。
- [ ] 导出单个项目详情 Excel。
- [ ] 导出供应商画像 Excel。
- [ ] 导出缺失项审计 Excel。

**验收标准：**

- [ ] 导出的 Excel 使用 Microsoft Excel 格式 `.xlsx`，不使用 TSV。

## P3：高级分析

### Task 16：区域机会分析

- [ ] 哪些省市项目金额大但供应商集中度低。
- [ ] 哪些地区软件项目多、硬件项目多、维保项目多。
- [ ] 哪些地区适合优先拓展。

### Task 17：竞品打法分析

- [ ] 竞品常见报价区间。
- [ ] 竞品常中标客户类型。
- [ ] 竞品强项产品和资质。
- [ ] 竞品在商务分、技术分、报价分上的优势。

### Task 18：我方投标策略建议

- [ ] 按地区给机会优先级。
- [ ] 按客户类型给打法建议。
- [ ] 按评分办法给资质补齐建议。
- [ ] 按报价公式给价格策略建议。

## 最近建议执行顺序

1. [ ] 先做 Task 1：建立 SQLite 或 DuckDB 数据库。
2. [ ] 再做 Task 2：项目去重和异常金额校验。
3. [ ] 接着做 Task 3：地图资源离线化，保证页面稳定打开。
4. [ ] 然后做 Task 8：评分标准结构化，解决“为什么这个分”的核心问题。
5. [ ] 最后做 Task 12 和 Task 13：把本轮流程沉淀成 skill 与 workflow。

## 当前判断

这个项目最值得继续做的不是单纯美化页面，而是先把 Excel 数据变成可追溯的关系型数据库，再围绕“地图看机会、项目看证据、公司看竞争力、评分看中标原因”四条线扩展。这样后续无论是 HTML 看板、Excel 报告，还是自动爬取附件，都能从同一套数据结构上长出来。
