资检资料审查 —— 承压类特种设备参数提取
把一个设备出厂资料包(一堆扫描 PDF)变成一台设备一份参数信息表 Excel,按设备出厂编号(产品编号)命名。
⚠️ 付费技能说明(Pay Skill · 支付宝 AI 按量付费)
本技能是付费技能(PAYSKILL),每次调用需支付 ¥5.00。 按次计费,基于支付宝 AI 按量付费
(Machine Pay / A2M)协议返回结果;支付能力由支付宝官方链路承担,本 Skill 不接触支付密钥、
不自行实现付款或签名。
调用遵循支付宝 A2M 契约,由平台调度层执行 probe → pay → complete → ack 流程:
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程(开始资料审查)
付费链路自检(与平台五项自查一一对应)
| 平台自查项 | 本 Skill 的实现 |
|---|---|
| 402 账单 | 未付款时请求业务资源端点返回 HTTP 402 Payment Required;响应头 Payment-Needed 携带账单,响应体含 payment_needed / amount / out_trade_no。 |
| 凭证重试 | 支付后携带请求头 Payment-Proof: <凭证> 重发同一个请求(URL、请求方法、请求体与原请求保持一致),服务端校验通过后返回 200,结果在 content.data 内。 |
| 服务端验付 | 服务端调用支付宝 AI 按量付费凭证校验接口 alipay.aipay.agent.payment.verify 验签并核对订单、金额与服务标识;凭证无效或已过期时不交付任何资源,只回 402 账单让用户重新支付。 |
| 商家履约 | 资源交付后由服务端调用 alipay.aipay.agent.fulfillment.confirm 上报履约确认;上报失败可对同一订单重试,重试幂等,不会产生第二次扣费。 |
| 订单与幂等 | 每笔订单以唯一 out_trade_no 持久化于服务端订单库(本地对应 scripts/payment_gate.py 的 .pay_cache/orders.json),状态可恢复;同一订单重复请求只履约一次、不重复扣费。 |
> 本地闸口 scripts/payment_gate.py 只处理 402 / 验签 / 订单持久化 三环节;付费本体交给支付宝。
> 付费声明见同目录 skillhub.pay.yaml。
支付依赖包声明
| 依赖 | 用途 | 安装 |
|---|---|---|
@alipay/alipay-aipay |
卖家侧:为业务 API 接入支付宝 AI 按量付费 | npx -y @alipay/alipay-aipay@latest install |
@alipay/agent-payment |
买家侧:提供 alipay-payment-skill 与 alipay-bot 支付能力 |
npx -y @alipay/agent-payment@latest install |
scripts/payment_gate.py |
本地付费闸口:处理 402 / 验签 / 订单持久化三环节 | 随包提供,零第三方依赖 |
> 买家侧若已装 alipay-payment-skill 并使用 alipay-bot,支付与结果交付由官方支付能力承担;
> 本 Skill 只负责发起请求、调用官方支付能力并展示结果,不接触支付密钥、不自行实现付款或签名。
付费与业务门控的关系
本 Skill 原有铁律一「先评估,后执行」是业务侧门控(未收到用户确认不出表),
与付费门控互不替代:付费门控决定「能不能开始审查」,铁律一决定「审查完要不要出表」。
两者串联——付费放行后才进入下方阶段 1。
铁律一:先评估,后执行(未收到确认前不动手)
这是本 skill 的强制门控,优先级高于一切出表动作。
阶段 1 全程扫查 → 一次性把资料包全部页面读完,中途不停、不跳、不猜测
阶段 2 梳理汇总 → 逐台列出参数取值 + 取值来源页
阶段 3 综合评估 → 输出《缺项 / 增减项评估报告》,列出所有需要用户拍板的问题
阶段 4 ⛔ 暂停 → 等用户回复
阶段 5 执行 → 收到明确确认后,才生成 / 修改 xlsx
未收到用户回复前,严禁:
- 生成、写入、覆盖任何
.xlsx(包括"先做一版给你看看") - 修改资料包原件或已存在的参数信息表
- 对矛盾数据做静默取舍后再出表
可以做的只有:渲染图片、裁剪放大、读图、写中间笔记(md / json 草稿)。
> 评估报告必须把决策点一次性问完。用户回复一次就要能开工,不要挤牙膏式地分批追问。
铁律二:首次检验场景下的「业主信息 8 项」
资料审查绝大多数是新投用设备的首次检验,此时业主(使用单位)的管理信息尚未录入,出厂资料包里本来就不可能有。
这 8 项属于使用管理信息,不是"资料缺失",不列为异常、不追责、不反复翻资料找:
| # | 参数项 | 首次检验处理 | 备注 |
|---|---|---|---|
| 7 | 安装单位 | 填 / |
出厂资料无;安装告知/安装资料里才有 |
| 9 | 使用单位地址 | 填 / |
登记证上的是"设备使用地点",不是单位地址 |
| 10 | 统一社会信用代码 | 填 / |
使用单位的,需业主提供营业执照 |
| 12 | 邮政编码 | 填 / |
同上 |
| 13 | 安全管理人员 | 填 / |
业主任命后才有 |
| 14 | 联系电话 | 填 / |
业主提供 |
| 16 | 投入使用日期 | 填 / |
⚠️ 登记证上的日期是发证日期,不能当投入使用日期用 |
| 18 | 运行状态 | 填 / |
首次检验时尚未投用,或由业主填报 |
处理规则:
- 一律填
/,不填无此项—— 设备不是"没有这个参数",是"信息尚未录入"。两者含义不同,混用会导致后续检验误判。 - 在交付说明里单独成组陈述,措辞固定为:
> 首次检验,业主(使用单位)信息尚未录入,以下 8 项按/处理,待业主/现场录入后补填。 - 这 8 项不进入"跨页矛盾/待核实"清单,避免与真正的资料问题混在一起。
- 例外:若用户另行提供了《特种设备使用登记表》《设备管理台账》或口头给出业主信息,则按提供值直接填入,并在说明里注明来源为"业主提供"。
- 默认按首次检验处理:用户没说明检验类型时,一律按首次检验执行,并在评估报告里写明这一假设(若实为定期检验,用户会纠正)。
铁律三:有疑义的数据,必须在表里标红
凡是存在疑义的参数值(跨页矛盾、与实物/图名不符、两处取值不一致、待用户拍板的),
出表时在该表 D 列(参数值)用红色字体标出,并挂批注写明矛盾出处。
# 单文件
python scripts/mark_conflicts.py --xlsx 721017701参数信息表.xlsx \
--item "名义厚度(筒体)" --item "名义厚度(封头)" \
--note "产品数据表 6mm;强度计算书 10mm"
# 批量
python scripts/mark_conflicts.py --dir ./输出目录 --conflicts conflicts.json
标注范围(不要扩大化):
| 类型 | 是否标红 |
|---|---|
| 跨页矛盾项(第五节待核实清单里的) | ✅ 标红 + 批注 |
| 与设备名/铭牌/竣工图不符的项(如"立式容器 + 鞍式支座") | ✅ 标红 + 批注 |
| 两种取值都拿不准、需用户拍板的 | ✅ 标红 + 批注 |
首次检验的业主信息 8 项(填 /) |
❌ 不标红 —— 那是"待录入",不是"有疑义" |
设备结构上确实没有的项(无此项) |
❌ 不标红 |
要求:
- 只改字体颜色为红,保留模板原有的字体名、字号、加粗、边框(脚本用
copy(font)实现) - 批注文字统一以"有疑义:"开头,写清两种取值及其出处,以及本表采用了哪个
- 标红清单要在
00_资料审查说明.md里同步列出,做到"表里有红字、文里有清单" --unmark可撤销标红
用途
| 输入 | 输出 |
|---|---|
| 设备资料 PDF 包(扫描件,无文字层) | <产品编号>参数信息表.xlsx,一份/台 |
| 参数信息表模板(已有样表) | 表头/列结构/单位列照抄模板,只换值 |
| 使用登记证 / 设备导入模板(可选) | 补齐使用单位、使用登记证编号、单位内编号 |
一台设备一份,文件名取产品编号(= 设备出厂编号),例如 721017701参数信息表.xlsx。
关键前提:这类资料 99% 是扫描件
pymupdf.get_text() 大概率返回 0 字符 —— 不要用文字提取,直接用视觉识别。
先确认,再决定路线:
python scripts/scan_probe.py <资料目录或单个PDF>
textchars接近 0 → 扫描件 → 走「渲染成图 + 逐页看图」textchars很大 → 电子版 → 可直接提文字,但仍需看图核对表格
> 本 skill 不依赖任何 OCR 引擎。渲染 PNG 后由模型视觉读取,数字准确率远高于传统 OCR。
标准流程
Step 1 渲染全部页面
python scripts/render_pages.py <资料目录> --out ./pages --dpi 160
输出 NNN_<文档名>_pNN.png,序号全局递增,便于按序读。
160 dpi 足够读表格正文;铭牌、数据表、设计数据表这类关键页再单独放大(Step 4)。
Step 2 先看版式,别一页页硬读
python scripts/contact_sheet.py ./pages --out ./thumbs --cols 4 --dpi 72
每份文档拼一张缩略图(4 列网格)。一眼就能定位:
- 哪页是产品合格证(表格 + 红章)
- 哪页是产品数据表(密集中英对照大表)
- 哪页是铭牌(深色金属牌照片)
- 哪页是强度计算书(公式 + 结果表)
- 哪页是设计数据表(左上角图号+版次,整页表格)
- 哪页是竣工图(线条图 + "竣工图"红章)
> ⚠️ 不同设备页序不一致,同一制造商也会差 1~2 页(有没有焊接记录、有没有独立设计数据表页)。必须逐台确认,不能套模板页码。
Step 3 全程扫查,按页型抓字段
一次读完,中途不停。 不要读两页就开始建表、不要读到一半去问用户。
全部页面过完一遍后,才有资格说"这项资料里没有"。
扫查过程中同步记三件事:
- 每台设备的页序定位(哪页是数据表、哪页是设计数据表)
- 每个参数的取值 + 来源页(后面写评估报告要引用)
- 读不清 / 跨页对不上的项,标记待放大(Step 4 统一处理)
见 references/param-fields.md:51 个参数项的权威来源页对照表。
要点速记:
| 参数组 | 来源页 |
|---|---|
| 设备名称/设备代码/单位内编号/使用登记证编号/使用单位/使用地点 | 特种设备使用登记证 |
| 设备代码(权威)/使用登记证编号(权威) | 压力容器设备导入模板.xlsx(若有,直接照抄不用猜) |
| 容器类别/产品标准/产品编号/设计使用年限/容积/内径/高(长)/材质/厚度/设计压力/设计温度/介质/结构型式/安装型式/支座型式/保温绝热方式/无损检测/耐压试验 | 固定式压力容器产品数据表 |
| 工作压力(壳体/管程)、腐蚀裕量、充装系数、公称容积、程数 | 设计数据表(常在竣工图首页,或独立一页) |
| 设计单位/设计日期/产品图号/制造日期 | 压力容器产品合格证 |
| 复核用 | 铭牌(照片)、强度计算书(腐蚀裕量)、外观及几何尺寸检验报告(内径/长度) |
设计数据表在哪? 三种位置都可能:
1. 独立一整页(左上角有 100060413810 版次 B 这类图号栏)
2. 竣工图的首页
3. 竣工图的第 2 页(左侧一块"设计数据表",右侧是零件明细表)
找不到就先读该文档最后 2~3 页。
Step 4 易混数字必须放大核对
不要相信第一遍读到的数字。 表格单元格小字、铭牌反光、方框压线都会读错。
python scripts/crop_zoom.py <页面PNG> --x0 0.05 --x1 1.0 --y0 0.16 --y1 0.30 --dpi 600 --out 单元格.png
区域坐标用比例(0~1),不写像素,跨分辨率可复用。
必须放大的项:设备代码、单位内编号、容积、内径、高(长)、厚度、设计/工作压力、腐蚀裕量、充装系数、登记证编号、制造/设计日期。
易混对照见 references/digit-confusion.md("0.1 管程 0.083" 会被读成 "0.35";"6mm" 与 "10mm";"202200646" 与 "2022006464")。
Step 5 跨页一致性核验(这是"审查"的核心价值)
同一参数在不同页必须对上,对不上要写进交付说明,不要自己静默取舍。核对矩阵见 references/cross-check.md。
已知易冲突点:
- 厚度:产品数据表的"厚度"可能填错(例:筒体填 6mm,强度计算书要求名义厚度 10mm)
- 安装型式:文件名叫"立式膨胀罐",产品数据表"安装型式"栏却写"卧式"(图纸是立式)
- 容积:换热器分壳程/管程,数据表那格是两行小字(如"壳程 0.1 / 管程 0.083"),不是"0.35"
- 设计压力:设计数据表写 2.4,产品数据表/铭牌写 2.5
处理原则:采用"产品数据表"或"铭牌"的值,在交付说明里列出矛盾项与另一种值,请用户核实。
Step 6 梳理 + 综合评估(⛔ 这里是暂停点)
扫查完、数字核对完后,不要直接出表。先做一次综合评估,把结论摆给用户。
产出一份 《资料审查评估报告》(Markdown,写在输出目录 00_资料审查说明.md),固定包含四块:
- 逐台参数概览 —— 设备名称 / 产品编号 / 设备代码 / 登记证编号 / 主要性能参数,一眼能核对
- 缺项清单 —— 分两类:
- A 类|首次检验·业主信息未录入(见铁律二那 8 项)→ 一律/,待业主补录
- B 类|资料包内确实未提供 → 说明查过哪些页,建议用什么资料补齐(如安装告知书、使用登记表) - 增减项评估 —— 对照模板 51 项,逐条说明本次是否需增行 / 减行 / 合并:
- 换热器(GB/T151)壳程/管程是否需拆成两行表示
- 无夹套 / 无衬里 / 无保温的项是否按无此项处理,还是直接删行
- 本次设备特有的参数(如多台同规格、双腔容器)是否需要额外行
- ⚠️ 模板没有的项不得自行加行,只能作为建议写进评估,等用户点头 - 待核实清单 —— 跨页矛盾项,每项给:设备 / 参数项 / 两种值及各自出处 / 本表建议采用值 / 需用户确认
(这些项出表时必须在 xlsx 里标红,见铁律三)
结尾固定附一句确认问句:
> 以上缺项、增减项与矛盾项请确认。确认后我再生成(/修改)参数信息表。
格式模板见 references/review-assessment.md。
然后停下来,等用户回复。
Step 7 收到确认后,才生成 Excel
用户回复确认(或给出修正意见)后执行:
python scripts/build_param_sheet.py --template 模板.xlsx --data devices.json --out ./输出目录
--template指向参照样表(用样表文件本身,标题行/表头/列宽/合并单元格全部继承,只改写 A1 与 D/E 列)--data是 JSON:{"设备名": {"param_key": "值", ...}, ...},键名见references/param-fields.md- 文件名为
<产品编号>参数信息表.xlsx;--title可覆盖标题模板(默认{设备名称}-参数信息表(设备出厂编号:{产品编号})) - 单位为空的项、"无此项"/"/" 的值 → 自动清空单位列
> 模板里没有的参数项不要自己加行(只能作为建议在 Step 6 评估里提出,等确认);确实资料里没有的项目填 /(首次检验的业主信息 8 项见铁律二),"设备确实无此参数"填 无此项 —— 两者含义不同,不要混。
Step 8 疑义项标红
出表后立刻按铁律三执行 mark_conflicts.py,把待核实清单里的项标红 + 挂批注。
标红清单要写回 00_资料审查说明.md,与表内红字一一对应。
Step 9 交付
- 用
present_files把全部 xlsx 一次性给用户 - 交付说明里重申待业主补录的 8 项与标红的疑义项,方便后续回填
常见坑
- 直接套用上一台的页码 → 每台页序不同,必须重新定位。
- 只看数据表就动手填 → 工作压力、腐蚀裕量、充装系数只在"设计数据表/竣工图"里,数据表上根本没有。
- 用文字提取工具处理扫描件 → 返回空,白白耗时间。
- 不放大就读小格数字 → 容积、厚度、设备代码最容易被读错一位。
- 把换热器的"壳程/管程"当成"壳体/夹套"漏填 → 换热器(GB/T151)用壳程/管程,映射到模板的"(壳体)/(夹套)"两组字段。
- 静默修正矛盾数据 → 审查的价值就在于把矛盾暴露出来,务必写进评估报告。
- 个人目录批量操作 → 只读资料、只写输出目录,不动原件。
- 没评估就出表 → 违反铁律一。哪怕用户只说"帮我出表",也要先扫查、先给评估结论,等确认再动手。
- 把业主信息 8 项当成资料缺陷 → 首次检验下这 8 项填
/是正常的,不要反复翻资料找、不要列入异常清单。 - 把发证日期当投入使用日期 → 登记证上的日期是发证日期,投入使用日期只能由业主/现场确认。
- 分批追问 → 评估报告里把所有决策点一次问完,别让用户回复五六轮。
- 疑义项出表后不标红 → 用户翻表时看不到风险点,审查价值归零(铁律三)。
- 把业主信息 8 项的
/也标红 → 那是"待录入"不是"有疑义",全表飘红反而淹没了真问题。
资源索引
| 文件 | 用途 |
|---|---|
scripts/scan_probe.py |
探测 PDF 是否扫描件、页数、文字量 |
scripts/render_pages.py |
批量渲染 PDF 页为 PNG |
scripts/contact_sheet.py |
生成缩略拼图,快速定位页型 |
scripts/crop_zoom.py |
按比例裁剪并放大指定区域(核数字用) |
scripts/build_param_sheet.py |
按模板批量生成参数信息表 xlsx |
scripts/mark_conflicts.py |
疑义数据标红(红色字体 + 批注),--unmark 可撤销 |
references/param-fields.md |
51 项参数清单 + 来源页 + 首次检验业主信息 8 项 + JSON 键名 |
references/review-assessment.md |
评估报告模板(缺项/增减项/待核实清单) |
references/cross-check.md |
跨页一致性核验矩阵 |
references/digit-confusion.md |
易混数字/视觉特征对照 |