投标准备清单生成(Tender Preparation Checklist)
Overview
Turn a 招标文件 PDF into a ready-to-use bidding preparation checklist covering four
dimensions, with each requirement kept verbatim, tagged by required response material and
priority, and indexed to its page. Deliver both an Excel and a Word document sharing the
same six-column structure.
When to use
- User uploads / points to a tender document and asks for a 投标准备清单, 投标自查清单, or
"帮我把招标要求整理成清单". - User wants Excel + Word outputs with columns 编号 / 要求原文 / 所属维度 / 响应材料 /
响应优先级 / 页码索引. - User mentions 资格条件、符合性、实质性、投标无效、评分标准、封标 等关键词 and needs them
systematically organized.
Workflow
Step 1 — Extract the PDF text with page markers
Run the bundled extractor to get a flat text file where every page is delimited by
========== PAGE N ==========. This makes page-index mapping reliable.
python scripts/extract_pdf.py 招标文件.pdf -o extracted.txt
# optional: pull a single chapter, e.g. scoring criteria
python scripts/extract_pdf.py 招标文件.pdf -o scoring.txt -p 207-216
Run scripts with the WorkBuddy managed Python venv that has pdfplumber, openpyxl,
and python-docx installed (on this machine:
C:/Users/17478/.workbuddy/binaries/python/envs/default/Scripts/python.exe).
If the venv/preview is missing, create it once:
python -m venv managed/envs/default then
managed/envs/default/Scripts/pip install pdfplumber openpyxl python-docx.
Step 2 — Read & classify the requirements
Read extracted.txt in chunks (large tenders can exceed 250 pages). For every actionable
requirement, decide:
- dimension — one of the four (see
references/data_schema.md§二). - requirement — copy the original text verbatim; do NOT merge or trim clauses. Give each
clause its own row. - material — the evidence type to prepare (营业执照 / 特定资质 / 体系证书 / 投标人荣誉 /
投标人项目荣誉 / 人员证书 / 业绩合同 / 承诺书 / 报价函 / 保证金凭证 / 服务方案 等). - priority —
高(missing ⇒ bid invalid / disqualified),中(affects score),低(informational). - page — the source page number, e.g.
P207.
Cover systematically: 前附表/投标人须知 (基本信息 + 资格 + 符合性 + 无效条款 + 报价),
第三章采购需求 (商务/技术要求), 第四章评分标准, 第六章投标文件格式 + 附件 (封标/电子投标).
Step 3 — Emit the structured JSON
Write the classified rows into a JSON file following assets/items_example.json:
{
"meta": { "project": "项目名称", "source": "文件.pdf" },
"items": [
{ "requirement": "…", "dimension": "(一)项目基本信息",
"material": "投标函照填", "priority": "低", "page": "P1" }
]
}
The schema, dimension definitions, material vocabulary, and priority rubric live in
references/data_schema.md — read it when unsure how to classify.
Step 4 — Generate the deliverables
Run the generator (auto-install deps openpyxl python-docx if needed):
python scripts/gen_checklist.py items.json "输出文件名"
This writes 输出文件名.xlsx and 输出文件名.docx with:
- Header row: 编号 / 要求原文 / 所属维度 / 响应材料 / 响应优先级 / 页码索引
- Excel: frozen header, auto-filter, rows tinted by priority (高=红, 中=黄, 低=绿)
- Word: same 6-column table, priority-tinted cells, print-friendly
- Rows auto-numbered and sorted 高→中→低.
Step 5 — Verify & present
Open both files, sanity-check row counts and that verbatim text matches the source, then
present_files both deliverables. Note any dimension the user may want expanded (e.g.
第三章 full service standards as separate rows).
Resources
scripts/extract_pdf.py— page-marked PDF text extraction (supports-p START-END).scripts/gen_checklist.py— JSON → xlsx + docx checklist generator.references/data_schema.md— field schema, four-dimension口径, material vocabulary, priority rubric.assets/items_example.json— minimal valid sample spanning all four dimensions.