---
title: "Odoo AI 导入映射：供应商价格核验"
canonical: https://wavect.io/zh/blog/odoo-ai-data-mapping-validation/
language: zh
description: "在更新 Odoo 供应商价格前，核验 AI 建议的字段映射、既有报价标识、箱价单位与最低数量。十二个合成用例说明拒绝与暂缓边界，原生导入仍需受控演练。"
image: "https://wavect.io/img/blog/headers/header_odoo-ai-data-mapping-validation.png"
author: ["Kevin Riedl"]
published: "2026-11-05"
updated: "2026-11-05"
reviewed: "2026-11-05"
---

# Odoo AI 导入映射：核验供应商价格

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

12 分钟 阅读 · 2026年11月5日 最近审核 2026年11月5日

[**下一篇**](/zh/blog/odoo-online-to-sh-integration-decision/)

要点速览

让 AI 提出映射建议，再依据独立批准的源数据含义和对照表核验。既有供应商报价的标识、采购单位、价格与最低数量必须保持一致。十二个合成用例只验证检查器，不代表 AI 准确率或导入成功；十四项原生检查仍未执行，需演练后由负责人验收。

假设供应商文件写着：一箱 24 件，价格 EUR 1,200.00。映射建议计算出了完全合法的数值 50.00，却把目标采购单位保留为“箱”。除法没有错，最终价格表达的却已经不是供应商原来的报价。

**让 AI 提出 Odoo 导入映射，再依据独立批准的源数据定义和对照表核验。**保留既有记录标识，以及每个采购单位对应的计价依据。含义不清的项目交给数据负责人确认；批准导入之前，还需要受控的原生环境演练。

**资料核验日期：2026 年 11 月 5 日。**产品事实依据 Odoo 20 官方文档。我们用 Python 和 Decimal 运算执行了十二个合成映射用例。候选映射均由人工构造，没有使用 AI 生成。我们没有向 Odoo 导入数据，也没有测试原生单位换算。原生验收检查仍为 `NOT_RUN`。

## AI 在 Odoo 导入映射中应该负责什么？

AI 可以建议源列对应哪个目标字段，也可以找出需要解释的行。该建议能否接受，应由独立审核的映射约定决定。在一个看似合理的字段对应关系变成业务记录修改指令前，数据负责人必须确定源含义、允许的转换和用于更新的记录标识。

更新供应商价格时，只有“价格”还不够。你需要知道这笔金额能购买多少数量，以及具体要修改哪条既有供应商价格行。模型若自信地补全这些缺口，就超出了源文件能够支持的证据范围。

[官方导入指南](https://github.com/odoo/documentation/blob/20.0/content/applications/essentials/export_import_data.rst) 使用 External ID 识别记录和重建关联。本例的验收约定补充了标识本身无法表达的业务含义。

本文关注导入前的决定。 [迁移验收指南](/zh/blog/odoo-migration-acceptance-reconciliation/) 处理迁移后记录与流程的对照。重复到达的供应商交期更新则属于另一项架构选择，可参考 [Odoo 规则、n8n 与 AI 智能体比较](/zh/blog/odoo-native-automation-n8n-ai-agent/) 。

## 哪些源数据含义必须先确定？

转换供应商价格前，先固定源标识和值的表达规则。标识按文本保留，价格和最低数量注明单位依据，产品与供应商引用通过获准对照表解析。如果源数据不能确定日期格式或每箱数量，就必须先由负责人作出决定，映射才能继续处理。

虚构文件包含两行，均使用公司 A 的供应商代码 `0042`。另一条对照记录在公司 B 使用相同供应商代码。产品代码 `00123` 和 `00124` 是文本，前导零属于已约定标识的一部分。

| 源项目 | L01 | L02 |
| --- | --- | --- |
| 产品代码 | 00123 | 00124 |
| 供应商／公司 | 0042 / A | 0042 / A |
| 源箱价 | 1.200,00 | 48,00 |
| 批准的币种与依据 | EUR，每箱净价。 | EUR，每箱净价。 |
| 每箱件数 | 24 | 12 |
| 最低采购量 | 2 箱。 | 3 箱。 |
| 源生效日期 | 01/03/2026，日／月／年。 | 01/03/2026，日／月／年。 |
| 既有报价标识 | catalog.offer_a_00123 | catalog.offer_a_00124 |

源规则明确接受小数逗号，并允许用点作分组千位分隔符；小数部分必须有两位。按这一规则，`1.200,00` 转为十进制值 `1200.00`。解析器的范围刻意限定于此，不能自动识别任意电子表格数字格式。

日期约定也来自独立输入。已批准日／月／年时，`01/03/2026` 转为 `2026-03-01`。如果没有这一约定，检查器会暂缓该用例。模型倾向采用哪种解释，不能消除源数据歧义。

既有报价标识要与产品标识区分。实际目录中，同一供应商对同一产品可能有多条价格条件。本例对照表指明的是两条具体既有记录，并未声称“供应商加 SKU”可以唯一识别所有阶梯价格或有效期。

## 为什么价格必须与采购单位一起核验？

供应商价格与采购单位共同表达一项商务含义。只改金额、不改单位，或只改单位、不改金额，都可能产生不同报价。最低采购量也必须使用同一声明依据。任何标准化之前，应把价格、单位和最低数量作为同一项映射决定批准。

Odoo 的 [计量单位文档](https://github.com/odoo/documentation/blob/20.0/content/applications/inventory_and_mrp/inventory/product_management/configure/uom.rst) 将采购单位放在供应商行，并区分采购单位与库存单位。因此，正确目标单位取决于实际产品及供应商配置。

L01 的 EUR 1,200.00 ÷ 24 件 = **每件 EUR 50.00**。最低 2 箱对应**48 件**。本例批准的映射保留箱价依据：采购单位为 24 件装箱，价格 1200.00，最低数量 2。

| 候选映射 | 实际含义 | 本约定下的决定 |
| --- | --- | --- |
| 24 件装箱 / 1200.00 / 最低 2 | 保留声明的源报价。 | 可进入受控演练。 |
| 件 / 1200.00 / 最低 2 | 把箱价当成每件价格。 | 拒绝。 |
| 24 件装箱 / 50.00 / 最低 2 | 把每件价格附到一箱上。 | 拒绝。 |
| 24 件装箱 / 1200.00 / 最低 48 | 把 48 件门槛变成 48 箱。 | 拒绝。 |

L02 的 EUR 48.00 ÷ 12 = 每件 EUR 4.00，3 箱包含 36 件。这些计算帮助审核人核对源含义，不是要求在保留箱价的同时再导入一套额外价格字段。

经独立批准，转换为按件计价也可能有效。但它需要相匹配的价格和最低数量，并证明目标流程正确使用这一依据。所附检查器只执行一套明确约定，并不禁止所有其他一致的映射方案。

## 如何独立核验映射建议？

把候选映射与另行批准的源规则和引用对照表比较。逐行核对预期标准化字段，保留完整行覆盖和准确目标标识。候选方案的置信度、解释文字或“已自查”声明，都不应决定比较是否通过。判断依据必须来自候选之外的获准资料。

下载样例将源行、已批准规则对象和候选行作为独立输入。检查器从源规则推导预期值，在公司范围内解析供应商引用，再逐字段比较。差异会带上源行标识，便于审核人定位受影响的数据。

这里的独立性指决定权的独立。如果同一个模型编造每箱数量，并把它同时写入映射和所谓参考表，两个输出吻合仍然只依赖一个无依据假设。负责人应把包装定义关联到供应商规格或获准产品记录。

向 AI 服务发送真实供应商数据前，应遵守该服务获准的数据路径决定。 [Odoo AI 数据驻留审查](/zh/blog/odoo-ai-data-residency-eu-hosting/) 处理这一独立问题。本文样例只包含虚构记录。

## 十二个映射检查说明了什么？

十二个构造用例全部得到预期分类：1 个 READY_FOR_REHEARSAL、8 个 REJECT、3 个 HOLD。这些结果说明检查器在声明样例上的行为符合预期，不能衡量 AI 映射准确率，也不能证明 Odoo 导入会成功。两类结论需要不同的实证。

| 用例 | 刻意设置的情况 | 预期／实际 |
| --- | --- | --- |
| M01 | 保留已批准的箱价映射。 | READY_FOR_REHEARSAL / READY_FOR_REHEARSAL |
| M02 | 产品代码 00123 变成 123。 | REJECT / REJECT |
| M03 | 源 1.200,00 变成价格 1.20。 | REJECT / REJECT |
| M04 | 保留箱价，单位却变为每件。 | REJECT / REJECT |
| M05 | 价格除以 24，单位仍为 24 件装箱。 | REJECT / REJECT |
| M06 | 最低数量变为 48，单位仍为 24 件装箱。 | REJECT / REJECT |
| M07 | 供应商代码 0042 对应到公司 B 引用。 | REJECT / REJECT |
| M08 | 两条报价行使用同一个 External ID。 | REJECT / REJECT |
| M09 | 源日期约定尚未批准。 | HOLD / HOLD |
| M10 | 产品缺少获准引用对照。 | HOLD / HOLD |
| M11 | 缺少供应商包装换算系数。 | HOLD / HOLD |
| M12 | 既有报价的 External ID 被换成新标识。 | REJECT / REJECT |

将 [检查器](/downloads/odoo-ai-data-mapping-validation/mapping-validator.py) 和 [样例文件](/downloads/odoo-ai-data-mapping-validation/mapping-fixtures.json) 放到同一目录，然后运行：

```
python3 mapping-validator.py
```

将输出与 [已记录结果](/downloads/odoo-ai-data-mapping-validation/model-results.json) 比较。进程成功退出表示十二个分类都符合预期，包括故意拒绝和暂缓的情况，并不代表已批准导入。

脚本只接受声明的 JSON 结构和源规则。它不能打开任意电子表格，不能自动发现原生字段，也不覆盖所有税务、币种和定价规则。标准化键是供审查的中间格式，不是可直接上传的 Odoo CSV。

## 什么时候应交给人工审核并暂缓映射？

权威源含义或目标引用缺失时应暂缓；已批准含义明确、候选却与之冲突时应拒绝。两种状态对应不同下一步：错误价格需要修正映射，未知包装规格则需要数据负责人提供证据。把所有问题都标成同一种错误，会掩盖真正缺少的决定。

[映射审核记录模板](/downloads/odoo-ai-data-mapping-validation/mapping-review-template.json) 将建议转换与批准证据分开。记录源文件身份和映射版本，再指定谁能解决每个未决字段。暂缓应附带具体问题，例如“最低 2 指两箱还是两件？”

除非已批准范围包括创建产品，否则不要把缺失的产品引用自动变成新建产品指令。本例只更新已有供应商价格记录。创建产品或新报价会改变任务，需要自己的验收要求。

检查器也无法证明获准对照表本身正确。如果公司 A 的供应商引用在源规则审批时就批错了，候选可能与它完全一致。依赖绿色比较结果之前，先审查参考数据，并保留支持该关联的证据。

## Odoo 原生演练需要证明什么？

原生演练应确认，已审查映射使用真实目标字段，并产生预期的供应商价格行为。检查安装环境中的引用和单位，再验证目标更新及一条有代表性的采购草稿流程。合成检查器只能证明中间建议符合声明约定，无法替代这些实际运行证据。

Odoo 的 [供应商价目表指南](https://github.com/odoo/documentation/blob/20.0/content/applications/inventory_and_mrp/purchase/products/pricelist.rst) 建议导出现有记录作为模板，并区分价格与最低数量。应从实际目标结构开始，不要仅重命名样例键就假定它们是原生导入列。

[原生验收包](/downloads/odoo-ai-data-mapping-validation/native-acceptance.json) 包含十四项拟议检查，全部为 `NOT_RUN`，验收状态为 `PENDING`。实际证据与审核人字段均为空。

| 边界 | 原生证据 | 验收问题 |
| --- | --- | --- |
| 目标字段 | 当前导出文件和已检查的字段映射。 | 每个中间值是否进入正确字段？ |
| 关联关系 | 已解析的产品、供应商和公司引用。 | 各行是否属于预期业务实体？ |
| 采购单位 | 已配置单位及其获准系数。 | 价格与最低数量是否使用同一预期依据？ |
| 既有标识 | 前后记录和重复执行的受控导入。 | 是否更新目标行且没有意外重复记录？ |
| 采购行为 | 按相关数量与日期审核的询价草稿。 | 目标价格条件是否按预期生效？ |
| 范围与例外 | 已导入行、暂缓行及受保护记录。 | 排除是否有意为之，异常变更是否都已调查？ |

检查采购草稿不等于授权发送订单或确认采购。除非业务负责人另行纳入范围，这些动作应留在演练之外。此处的目的是在生产更新前观察映射后果。

保留演练使用的准确文件和获准转换版本。如果供应商下个月改变某列含义，表头看起来熟悉也不足以证明旧规则仍适用。应重新评估受影响映射，并重复相关检查。

## 导入前我们会批准什么？

只有当源含义和目标标识已确定、已知反例会被正确拒绝，并且原生演练支持预期更新时，才应批准某个具体映射版本。未决行继续暂缓。证据中应能找到接受供应商价格含义的负责人，也应明确谁负责执行导入。

先确认价格、单位、最低数量的组合，以及准确的既有报价标识。这些决定关系到转换是否保留供应商条款、是否更新正确记录。再补上格式和关联检查，并保留源文件供审核。

更广泛的发布判断可参考 [软件 QA 清单](/zh/software-development-guide/software-qa-checklist-before-launch/) 。Wavect 的 [软件质量保障服务](/zh/services/software-quality-assurance/) 可以帮助定义并独立审核导入流程的验收证据。准备好源数据规范，以及业务含义仍有争议的映射。

## Odoo AI 导入映射常见问题

### Odoo 自带导入测试足够吗？

应把原生导入检查作为演练的一部分，再核对业务含义。一个合法小数和一个有效单位引用组合起来，仍可能表示错误的供应商价格。验收映射必须保留正确标识与计价依据，并有目标工作流的实际证据支持。

### 可以让第二个 AI 检查第一个 AI 的映射吗？

第二个模型可以提示可疑关联，但模型之间一致不能证明无文档说明的源列究竟是什么意思。权威源定义和获准参考数据应独立于候选建议。准确标识与金额使用确定性比较，未解决含义交给负责该数据的人决定。

### 是否应把所有供应商价格统一换算成每件？

只有获准目标表示要求这样做时才转换。本例有意保留采购箱价。改成按件计价，需要对应的价格与最低数量，以及兼容目标配置。应验证完整解释，不能因为单位更小就认为映射一定更好。

### 为什么前导零很重要？

本例中 00123 是已约定的文本标识，改成 123 就改变了键，即使电子表格强制转成数字后看起来相同。应按文本保留源标识，直到明确对照表确定目标身份；不能推断前导零只是装饰。

### 为什么要保留既有 External ID？

更新约定指定的是已有供应商价格记录。换成新标识改变了记录身份，而非保留原目标。决定入站行更新哪条记录前，应核对准确既有行，并考虑目录中相关的阶梯价格或有效期范围。

### READY_FOR_REHEARSAL 表示可以投入生产吗？

不表示。它只说明候选符合本样例的获准源规则和对照表。JSON 是中间审查格式，不是 Odoo 导入文件。原生字段映射、单位行为和最终记录仍需受控演练及负责人验收，所附原生用例全部尚未执行。

### 未解决的映射应由谁决定？

应由对源含义或目标业务规则负责的人，根据供应商规范和获准参考记录作出决定。工程师可以实现并测试该决定。模型可以提出解释，但不能在缺少授权依据时，悄悄把猜测变成新的导入规则。

QA 与生产就绪

## 接下来读什么

可靠生产软件所需的测试、审计、维护与加固。

[从这里开始**AI 生成代码的 QA**](/zh/blog/qa-for-ai-generated-code/)

- [README ZIP 恶意软件：审查 AI 工具的实际安装内容](/zh/blog/readme-zip-malware-install-review/)
- [AI 生成的 Odoo 模块：先审业务规则，再谈上线](/zh/blog/ai-generated-odoo-module-audit/)
- [Odoo 迁移验收：逐条核对业务记录与余额](/zh/blog/odoo-migration-acceptance-reconciliation/)
- [Odoo AI 智能体测试：验收实际保存的活动记录](/zh/blog/odoo-ai-agent-business-state-tests/)
- [Odoo 20 权限迁移：如何验收多公司隔离？](/zh/blog/odoo-20-company-access-migration-tests/)

[上一篇文章**Odoo 19 升级 20：AI 工作流要重新验收什么？**](/zh/blog/odoo-19-20-ai-upgrade-readiness/) [下一篇文章**Odoo 对接 BMD：月度交接前如何核对导出批次**](/zh/blog/odoo-bmd-export-reconciliation/)

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

12 分钟 阅读 · 2026年11月5日 最近审核 2026年11月5日

[**下一篇**](/zh/blog/odoo-online-to-sh-integration-decision/)
