售前技术方案(报价版)产出流水线
一套已经跑通过 27 页 / 48 表、32 页 / 53 表两版真实方案的做法。核心不是"写文章",
是把甲方的工艺条件翻译成设备、把设备翻译成钱、把风险翻译成文字。
何时使用
- 有一份甲方给的原始技术方案 / 招标技术规格书,要出我方报价版方案
- 已出过方案,客户提出修订(改货位数、改数量、取消拓展、改自动化方式),要出第二版
- 需要给甲方一份"含设备清单 + 分项报价 + 风险说明"的正式 Word
不适用:纯投标签约文件(走 procurement-rfq)、纯汇报 PPT。
运行环境(安装前先确认)
| 项 | 要求 | 用在哪 |
|---|---|---|
| 操作系统 | Windows 10 / 11 | scripts/postprocess.ps1 走 Word COM:统一 A4 页幅、禁止表格行跨页、标题与表题同页、更新目录域、导出 PDF |
| Microsoft Word | 2016 及以上,需可调用 COM | 同上。无 Word 时只能得到未经后处理的 docx(页幅可能为 Letter、表格行会跨页断开、目录页码不更新) |
| Python | 3.8+,需 python-docx、pymupdf |
scripts/md2html.py、scripts/check_quote.py |
| 内置技能 | workbuddy-docx(提供 html-to-doc/scripts/convert_doc.py) |
HTML→DOCX 转换环节 |
macOS / Linux 只跑得通 P1~P4 与 P5 的「md → html → docx」两段;后处理可改用 LibreOffice 转 PDF,但页幅统一、行不跨页、标题同页这三项效果不同,需人工复核。
五阶段流程
P1 读原文,先做结构判断(不要急着写)
- 用 Read 或
python -c提取甲方 docx 全文(段落 + 表格),弄清:产能/节拍、单件重量与尺寸、
托盘规格、场地尺寸与柱距、供电、上位系统(WMS/ERP/MES)、验收口径、明确不包含项。 - 算出关键耦合约束,这些数字决定方案成不成立,先算再写:
- 台面高度 → 叉入净空 → 下料段结构能不能做
- 层数 × 层高 × 整托高 → 起升高度、货架总高、放货余量
- 货位数 ÷ 日均出库 → 缓冲天数(这是客户最容易被漏掉的决策依据)
- 节拍 → 设备数量 → 负荷率 - 与甲方原文对不上的地方单独列出来(做不到的、成本离谱的、规范不允许的),
后面在方案里正面写,不要藏。
P2 定章节骨架
按 references/01-方案骨架.md 的 11 章结构。骨架顺序的逻辑是:
先讲清楚"你的现场长什么样"(工艺与约束)→ 再讲"我用什么系统解决"(系统设计)→
再讲"每台设备是什么"(设备清单)→ 再讲"多少钱"(报价)→ 最后讲"风险与边界"。
报价一定放在设备清单之后,因为报价的每一项都要能在清单里找到对应。
P3 分章写 Markdown 草稿(stage1)
- 一章一个 md 文件或一个大 md,命名
final_draft.md/final_draft_v2.md - 表格用标准 Markdown 表格;宽表列数 ≤ 9
- 每张表必须有
表 x-y 标题的题注行(紧贴表格上方) - 数字一律写阿拉伯数字 + 千分位;金额统一"元"或"万元"其中一种,全文不能混
P4 出图(可选但强烈建议)
系统架构 / 网络拓扑 / 布局图用 matplotlib 画(references/04-排版转换与踩坑.md 有画法要点和常见坑)。
输出 PNG,md 里用  引用,转换脚本会 base64 内联,不依赖外部路径。
P5 转 DOCX 并做后处理(这一步最容易翻车,按顺序做)
# 1) md -> html(本 skill 自带)
python <SKILL>/scripts/md2html.py draft.md out.html
# 2) html -> docx(WorkBuddy 内置转换器,路径按实际插件版本)
python "<workbuddy-docx>/skills/html-to-doc/scripts/convert_doc.py" \
--html out.html --output out.docx --require-page-furniture --no-verify
# 3) Word 后处理(A4 / 行不跨页 / 标题同页 / 更新域 / 导 PDF)
powershell -ExecutionPolicy Bypass -File <SKILL>/scripts/postprocess.ps1 -Docx out.docx
若系统策略禁止运行 .ps1(报"在此系统上禁止运行脚本"),改为在 PowerShell 里以脚本块执行同一文件:
Get-Content postprocess.ps1 -Raw -Encoding UTF8 读出后用 [scriptblock]::Create() 调用,
参数仍是 -Docx <路径>。两种方式效果相同,后处理逻辑不变。
第 3 步不能省。 转换器会:把正文落成 Letter 纸(封面却是 A4)、把表格行拆成两半、
让表题和表格分处两页、让章标题孤零零留在页尾、目录页码全错。
P6 自检(不做自检等于没做)
- 跑
python <SKILL>/scripts/check_quote.py out.docx,算术必须 0 错 0 漏填 - 渲染 PDF 每页 PNG,逐页看(见
references/05-自检清单.md的视觉检查项) - 目录页码 vs 实际页脚页码,抽 5 处比对
- 交叉核对:正文提到的数字(货位数、台数、天数、占比)与表格、与汇总表是否一致
硬规则(违反必出事)
| 规则 | 原因 |
|---|---|
| 报价永远从设备清单逐项汇总,不许先给总数再倒推 | 倒推出来的数对不上任何一张表,客户一核就穿 |
| 分项合计 = 各子系统小计之和;含税 = 不含税 × (1+税率) | 三处数字必须能对上,脚本核 |
| 管理费、税、降本项各自单列,不塞进设备单价 | 客户要砍价时,你得知道砍的是哪一块 |
| 任何"降本 X 万"必须写清降的是哪几项、各降多少 | 曾出现"合计可降 33.8 万"与实际 32.1 万不符 |
| 风险项要写"会怎样",不只写"有风险" | "叉入净空仅 115mm,下料段须做两侧纵梁+中间全开口" |
| 客户改一处,必须回头改所有相关处 | 改货位数要同步改缓冲天数、布局、报价、结论 |
| 第二版要标版本号并保留第一版 | 封面 版本:V2.0,文件名带"第二版" |
目录结构
presales-solution-doc/
├── SKILL.md
├── references/
│ ├── 01-方案骨架.md 11 章结构 + 每章必备表格
│ ├── 02-报价与设备清单.md 分项口径、管理费税率、降本写法、校验方法
│ ├── 03-风险与结论写法.md 耦合约束、缓冲天数、结论句式
│ ├── 04-排版转换与踩坑.md 转换命令、分页、列宽、A4、画图要点
│ └── 05-自检清单.md 数字校验 + 视觉检查 + 交叉核对
└── scripts/
├── md2html.py Markdown → 商务 HTML(A4、页码、表头重复)
├── postprocess.ps1 Word 后处理 + 导 PDF
└── check_quote.py 数量×单价=合价 / 小计=逐行合计
交付物命名
<年份>年<项目简称>项目售前方案(报价版).docx,第二版加 ·第二版。
中间产物全部放 output/<项目>-presales/ 下的 stage1(md) / stage2(html) / working(脚本+pdf+png),
不要和交付物混在桌面目录。