如何从采购订单中只提取你需要的字段:
表头+明细行,无需模板
一张采购订单实际上是两个文档叠在一起:表头(订单号、日期、买方、供应商、收货地址)和明细表(带有编码、描述、数量、单价和小计的多行数据)。大多数提取工具对其中一部分处理良好,对另一部分处理较差。表头字段相对简单——位置可预期的单值。明细表才是难点:多行数据、列数各异、有时跨多页、偶尔夹杂注释和小计行。从同一份文档中同时正确提取这两部分,正是模板式工具失效、而AI自定义列名提取有效的地方。
为什么采购订单会让模板式提取失效
发票的结构相对简单:表头在上方,明细表在中间,合计在底部。采购订单有同样的结构,但变体更多、数据量更大。发票可能只有3至5个明细行,采购订单可以有50甚至300个。发票明细表通常4至6列宽,采购订单明细表可能有8至12列——货品编码、描述、数量、计量单位、单价、行小计、交货日期、仓库位置等等。
基于模板的提取工具——靠记忆每个字段的像素位置来工作——在采购订单上因两个原因失效:
- 每个客户使用不同的采购订单格式。客户A的采购订单把货品编码放在第3列,客户B的放在第1列。如果你处理20个客户的采购订单,就需要20个模板,每个映射不同的像素坐标到相同的逻辑字段。
- 明细行是动态的。一个映射"第1行,第3列 = 货品编码"的模板只能提取第1行。第2至第50行没有映射。你需要构建一个能识别表格的模板,告诉它"这个矩形区域里的内容全是明细行"——而很多模板工具根本不支持这种配置。
结果是,采购订单数据提取——本应是采购环节中自动化程度最高的任务——对于没有企业级智能文档处理平台的团队来说,仍然顽固地停留在手工阶段。
字段级提取改变了这道题的解法。不告诉工具每个字段在哪里,而是告诉它每个字段是什么。"采购订单号"、"供应商名称"、"货品编码"、"订购数量"、"单价"——AI通过字段在文档中的语义角色来定位每个值。同一套列定义适用于你所有客户的采购订单格式,无论布局如何。
需要提取哪些字段:标准采购订单字段集
你需要的字段分为两类:表头字段(每张采购订单一个值)和明细字段(每张采购订单每行一个值)。以下是覆盖大多数采购流程的标准提取字段集:
| 类别 | 字段名称 | 每张采购订单都有? | 为何需要它 |
|---|---|---|---|
| 表头 | 采购订单号 | 是 | 关联销售订单、货运单和发票的主键 |
| 表头 | 开单日期 | 是 | 账龄分析、在制订单分析 |
| 表头 | 买方公司名称 | 是 | 在你的ERP中识别客户 |
| 表头 | 供应商公司名称 | 多数有 | 处理入库采购订单时更相关 |
| 表头 | 收货地址 | 多数有 | 仓库路由、发货标签生成 |
| 表头 | 要求交货日期 | 常见 | 履单优先级排序 |
| 明细 | 货品编码/SKU | 是 | 库存查询、拣货 |
| 明细 | 货品描述 | 是 | 订单核验、拣货单 |
| 明细 | 订购数量 | 是 | 库存分配、生产计划 |
| 明细 | 计量单位 | 常见 | 件/箱/托盘——对拣货准确性至关重要 |
| 明细 | 单价 | 是 | 收入确认、利润分析 |
| 明细 | 行小计 | 多数有 | 订单价值、信用核查、提成计算 |
| 表尾 | 订单总金额 | 多数有 | 采购订单级财务汇总 |
| 表尾 | 付款条件 | 常见 | 应收账款账龄、现金流预测 |
你不需要全部14个字段。对于典型的履单流程,8个字段——采购订单号、开单日期、买方名称、收货地址、货品编码、数量、单价、行小计——已能覆盖90%的数据使用场景。从这些开始,再根据流程需要补充字段。
AI如何同时处理表头和明细行
这是采购订单提取的核心技术挑战,理解AI的解决方式有助于你正确设置列名。
表头字段(采购订单号、开单日期、买方名称等)在每份文档中只出现一次。AI通过语义角色识别它们——采购订单号看起来像一个参考编码(字母数字组合,通常带前缀),开单日期看起来像文档顶部附近的一个日期,公司名称看起来像法律实体名称。这些字段只提取一次,然后带入输出中的每一行明细。这一点很重要:如果你的输出有50行对应一张50条明细的采购订单,每行都带有采购订单号和买方名称。你可以筛选和排序,而不会失去父级采购订单的上下文。
明细字段(货品编码、数量、单价、行小计)出现在表格中——每行一组值。AI通过识别重复规律来检测表格结构:每行以一致的水平顺序包含相同类型的数据。它逐行独立提取,并将表头字段带入追加到输出中。
这种结构——表头字段作为"父级"上下文,明细字段作为"子级"行——与大多数ERP系统存储订单数据的方式直接对应。你提取的XLSX无需大量转换就能导入,因为行级结构已经符合ERP的预期格式。
处理复杂的采购订单格式
不是所有采购订单都是整洁的单页PDF加一张表格。以下是字段级提取处理简单工具会失败的边缘情况的方式:
跨多页的采购订单(每页重复列标题)。当采购订单表格跨页时,大多数ERP系统会在每页顶部重复列标题。AI将这些识别为标题行而非数据行,并在输出中排除。10页、200条明细行的采购订单产出200行数据,而不是210行带有重复标题的行。
包含多张表格的采购订单。有些采购订单有一张主明细表,还有一张单独的附加费用表(运费、手续费、税额)。如果你的列定义包含费用相关字段,AI会从两张表格中提取。如果你只想要明细行,就不要在列名中包含费用字段名。AI不会提取你没有定义的列的数据。
印刷采购订单上的手写批注。买方有时会在页边写备注——"周二发货"、"送达前致电"、"缺货时替代为X号货品"。除非你的列名专门描述这类批注(如"特殊说明"或"买方备注"),否则AI不会将这些当作数据字段。对于标准提取,手写批注会被忽略。
倾斜的纸质采购订单扫描件。手机斜拍的纸质采购订单比整洁的PDF更难提取,但AI的视觉模型能处理适度倾斜(水平偏转约15至20度以内)。超过这个范围,准确率会下降——上传前尽量拉直页面效果最好。
常见问题
AI能区分采购订单表格中的"单价"和"行小计"吗?
可以——前提是你为两者分别定义列。将一列命名为"单价",另一列命名为"行小计"或"扩展价格"。AI理解单价是每件货品的成本,行小计是单价乘以数量。它同时利用你提供的列名和数字关系(行小计通常大于对应的单价,且等于数量乘以单价)来正确分配值。
如果采购订单上有手写的价格或打勾标记怎么办?
手写批注相比印刷文字会降低提取准确率。对于印刷采购订单上有手写补充的情况(如买方圈出数量并写上修改值),AI可能提取印刷值或手写值,取决于清晰度。对于主要或完全手写的文档,期望准确率在65%至85%之间,而不是印刷采购订单的90%以上。建议对手写文档的提取输出进行人工抽检。
采购订单的明细表格使用合并单元格可以处理吗?
合并单元格——一个单元格跨多行或多列——在采购订单表格中很常见(如"A类货品小计"横跨所有列)。AI通过将合并值分配到对应的行来处理基本的合并单元格情况。但复杂的合并单元格布局(嵌套合并、交替合并模式)可能使AI产生混淆。如果你的采购订单大量使用合并单元格格式,建议先运行测试批次,验证输出后再大规模使用。
如何格式化提取出的日期和数字列,以匹配我的ERP导入规格?
你可以在列名中指定格式要求。不用只写"开单日期",改为写"开单日期(YYYY-MM-DD)"。不用只写"单价",改为写"单价(数字,保留2位小数)"。AI在提取时将值标准化为你指定的格式,消除了基于OCR工具常见的提取后重新格式化步骤——输出从提取那一刻起就已按你的ERP导入规格格式化。