医药流通ERP 商品编码统一(三层模型 + 批次账簿)
Overview
本技能固化医药流通企业 ERP 中商品编码统一的核心设计:以「SPU / SKU / 箱规」三层模型承载"自然属性—管理属性—单位换算",并以批次管理作为一品一码、破解一品多码的底层纽带。
一句话本质:商品不是一个扁平编码,而是"自然身份(SPU) + 管理视角(SKU) + 单位换算(箱规)"三层解耦,再用批号把渠道 / 价格 / 返利 / 厂家钉死在一次真实交易上,财务才能按维度还原真实成本。
任何编码相关设计,第一步必须确认要表达的是"哪一层":自然属性、管理属性、还是单位换算。三大层先分清,再套规则。完整数据模型 DDL、批号生成规则与财务成本维度见 references/product_coding_model.md。
1. 三层模型总览
| 层 | 承载内容 | 单位口径 | 编码稳定性 | 谁在变 |
|---|---|---|---|---|
| SPU | 商品自然属性(品名、规格、剂型、成分、通用名等"一物"身份) | 最小单位(最小计量颗粒,如支/片/粒/袋) | 自然属性不变则编码不变 | 极稳定 |
| SKU | 总部及子公司管理不变 / 集中变化的属性(价格体系、渠道、考核、分货、质检要求等) | 最小销售单位(对外交易/定价的实操单位) | 管理属性变化可扩展新 SKU,底层指向同一 SPU | 随组织/场景变 |
| 箱规 | 各单位之间的转换比 | 无独立单位,只描述换算关系 | 随包装/件装变而调整 | 随件包装变 |
关键认知:
- SPU 是"一物"的锚点,不因管理属性、渠道、价格变化而分裂;分裂的应是 SKU。
- SKU 指向唯一 SPU,一个 SPU 可挂多个 SKU(不同渠道/价格/考核视角)。SKU 的膨胀是"管理视角"的膨胀,不是"实体"的膨胀。
- 箱规把 SPU(最小单位) 与 SKU(最小销售单位) 以及箱/中包等单位连起来,所有换算集中在这里维护,禁止在业务单据里散落写死换算。
1.1 SPU — 商品自然属性层
- 描述"这一物本身":通用名、商品名、规格、剂型、成分、包装材质、基础条码、贮藏条件等自然属性。
- 单位:最小单位(计量的最小颗粒,如 1 支注射液、1 片片剂)。
- 厂家不在 SPU 主数据里固化——厂家作为商品基础属性之一,但其取数一律来自批号信息(见 2.2)。SPU 只锚定"自然身份"。
- 自然属性未变 → SPU 不新增编码。
1.2 SKU — 管理属性层
- 描述"这个主体(总部/子公司)怎么管、怎么卖":价格体系(底价/销价/促销价)、渠道归属、考核归属、分货策略、首营/质检要求、可经营组织范围等随管理视角变化的属性。
- 单位:最小销售单位(出库/开票/定价的实操单位,如 1 盒、1 瓶)。
- 管理属性变化(如某子公司单独定价、某渠道单独考核)→ 扩展新 SKU,但底层 SPU 不变。
- SKU 是"一品多码"的主要来源:管理视角膨胀会自然产生多 SKU;用批次账簿(2.4)把多 SKU 归因回同一 SPU,才能破解多码。
1.3 箱规 — 单位换算层
- 描述 最小单位 ↔ 最小销售单位 ↔ 中包 ↔ 箱 之间的转换比。
- 必须显式标注三个角色:
- 计量单位(定价单位):用来算价、定价的基准单位。
- 最小单位:SPU 的最小计量颗粒(见 1.1)。
- 报表单位:对外统计/报表口径单位。
- 三者可能互不相同(如定价按"盒"、报表按"件"、库存按"支"),必须逐一标注,禁止默认等同。
- 换算关系集中在箱规表维护,业务单据只引用箱规 ID,不直接写死比例。
2. 依赖条件与设计约束(5 条,必读)
2.1 公司/部门视图扩展业务属性管控与数据分析
- 通过公司视图、部门视图为同一 SPU/SKU 扩展采购、销售、运营、财务、质量等业务属性维度。
- 同一商品在不同公司/部门视图下,呈现不同的业务属性(如某子公司可经营、某部门不可;某单位采购价不同)。
- 设计要点:业务属性挂在"商品 × 公司视图 / 部门视图"的维度表上,不污染 SPU 主数据;数据分析按视图切片。
2.2 基础信息变化但主体未变 — 随批号记录,不新增编码
- 判定铁律:先问"实际主体变没变?"
- 主体未变(如商品件包装调整、厂家更名)→ 不新增 SPU 编码,变化信息随批号信息记录。
- 主体真变(实际生产厂家变更)→ 必须新增编码(厂家是商品基础属性,真实主体变了就是另一个商品)。
- 具体落地:
- 件包装变化:记录到批号附带的件包装字段,不改 SPU。
- 厂家更名:记录到批号附带的厂家名称字段,不改 SPU(主体仍是同一家)。
- 厂家取数一律从批号信息获取,SPU 主数据不固化厂家;这样既兼容更名,又能在真换厂家时通过新批号 + 新 SPU 区分。
- 设计要点:批号信息表持有 厂家名称 / 件包装 / 生产日期 / 效期 / 澄明度 等"可变的实例属性",SPU 持有"稳定的自然属性"。
2.3 财务成本核算 — 多维度成本还原,破解一品多码
- 表面财务只核算"商品",但商品编码已融入上下游渠道信息 → 出现一品多码,直接按商品汇总会算错成本。
- 财务核算必须支持按以下维度归集与还原成本:
- 品种(SPU 维度,跨 SKU 归因)
- 供应商(上游渠道)
- 联系人(具体业务对接人/客户代表)
- 业态(商业 / 纯销 / 零售 等)
- 项目(具体经营项目/合同)
- 设计要点:成本核算引擎以 SPU 为归集根,按上述维度做分摊;SKU 的渠道/价格差异通过批次账簿(2.4)归因回 SPU,避免多码导致成本失真。
2.4 批次管理 — 一品一码的基础,破解一品多码的必然条件
- 统一编码本身不强制批次管理,但批次管理是"一品一码"的基础,也是解决一品多码的必然条件。
- 有了批次,才能从以下多业务场景规避一品多码:
- 价格:底价、销价、促销价等随批绑定,不同 SKU 的同批商品可归因回同一身份。
- 渠道 / 考核 / 分货:批级记录渠道、考核归属、分货策略,跨 SKU 统一视角。
- 结合返利可实现订单成本还原:批次级记录返利,把"销价 - 返利"还原为真实成本,体现品种贡献度。
- 设计要点:批号是连接 SPU(自然) + SKU(管理) + 实际交易(渠道/价格/返利/厂家) 的纽带;没有批号,多 SKU 无法归因,一品多码无解。
2.5 批号生成规则 — 支持旧批号重启用
- 同一品种、同一批号在后期可能重启用旧批号(如再次生产同批号)。
- 批号生成规则必须纳入以下要素,使重复批号在语义上可区分、不冲突:
- 生产日期(提供时间唯一性,旧批号重启用靠日期区分)
- 效期(有效期)
- 澄明度(注射/输液类关键质量指标)
- 件包装(同一品种不同件装,批号需区分)
- 厂家名称(兼容更名/换厂;与 2.2 的"厂家从批号取数"一致)
- 设计要点:批号 = f(生产日期, 效期, 澄明度, 件包装, 厂家名称);重启用旧批号时,新生产日期使其全局唯一;批号信息表以"(品种, 批号, 生产日期)"或含日期的复合键保证可重启用而不冲突。
3. 数据模型要点
见 references/product_coding_model.md:SPU 主数据、SKU 管理属性、箱规换算(含计量/最小/报表单位标识)、批号信息(含厂家/生产日期/效期/澄明度/件包装)、财务成本维度与批次账簿的 DDL 与关键字段、批号生成规则表达式、旧批号重启用复合键设计。
4. 落地校验清单(实施/审计时用)
设计或审查商品编码模块,逐项确认:
- 是否已分 SPU / SKU / 箱规 三层,且各自承载内容、单位口径清晰不混?
- SPU 是否只锚定自然属性,厂家不固化在 SPU,取数来自批号?
- SKU 是否都指向唯一 SPU,管理属性膨胀只扩 SKU 不裂 SPU?
- 箱规是否显式标注 计量单位 / 最小单位 / 报表单位 三个角色,且换算集中在箱规表?
- 公司/部门视图是否独立扩展业务属性,未污染 SPU 主数据?
- 基础信息变化是否先判"主体变没变":未变随批号记录、真变才新编码?
- 件包装/厂家更名是否随批号记录、不新增编码?
- 财务是否支持按 品种/供应商/联系人/业态/项目 多维度成本归集与还原?
- 是否以批次为纽带打通 SPU+SKU+交易,支撑返利成本还原与品种贡献度?
- 批号生成规则是否纳入 生产日期/效期/澄明度/件包装/厂家名称,且支持旧批号重启用不冲突?
Resources
references/
product_coding_model.md— 完整数据模型:SPU/SKU/箱规/批号信息/财务成本维度/批次账簿 的字段、主键与关系;批号生成规则表达式;旧批号重启用复合键设计;公司/部门视图扩展表。
scripts/
product_coding_validator.py— 可跑校验脚本(stdlib,直接python product_coding_validator.py)。实现 SKILL.md 第 1.3 / 2.2 / 2.4 / 2.5 节规则:① 批号生成encode(厂家名,生产日期,效期,澄明度,件包装)并演示旧批号重启用(复合键spu_id+batch_no+prod_date不冲突);② 箱规校验——某商品必须恰好一个 计量单位/最小单位/报表单位 且最小单位自换算比=1;③ 厂家更名主体未变只更新批号取数、不新增 SPU。接真实 ERP 只需把内存示例 (VALID_SPECS / BatchInfo) 替换为你们的 SPU/箱规/批号数据。
assets/
本技能无需素材文件。