场景3 · 门店销售 — Pentana vs 新POTD 对照(代码级验证版)

结论切换收益链路验证 角色映射流程对比支付方式专题 状态机关键差异差异矩阵 行动计划待决策
生成 2026-11-03(代码级验证版) · 数据源:Pentana知识库 + 新POTD + 订单中台/履约中台 + 营销服中台(order-tool) + GODP代码考古 · 四场景对比第3份

执行摘要

门店销售(B2B子公司销售)链路已通可切换(支付/信用/定价3类项需确认)

核心结论(已代码级验证):经销商门店→子公司下单买备件链路从下单到SAP开票/AR收款全链贯通,0个致命缺陷。本场景是采购链(场景1/2)的"镜像"——采购方向 POTD 是厚核心,销售方向 POTD 是薄门面:销售单本体(配货单 AllocateNote)在履约中台(状态机也在那),SAP 推送(销售订单+发票)在 order-tool,AR 收款在 SAP 侧。

0
致命Gap 🔴
9
配置/迁移/待确认项 🟡
9
链路节点已验证
6
涉及系统数
⚠️ 本场景重点(已据业务澄清+跨系统调研修正):① PaymentMethodEnum(支付方式枚举)目前只有 EU 市场上了,澳洲子公司所在的 EM 市场还没发布——代码里枚举存在,但 EM 业务上未启用;若 EM 要上需市场整体切换 + 已上线子公司培训 + 历史数据修复;② 信用池(信用额度控制)是新开发项,不是 SAP 侧承接——上了支付方式字段后信用池也要新开发,需与业务打合 EU 正在开发的逻辑是否符合,符合则 EM 也要有开发测试周期;③ 经销商确认付款 handleDealerConfirmPayment 是 TODO 桩;④ 发票职责迁移:Pentana 自持 AR、自己开票(正向 OE212/OE225,内部 GL 闭环,经销商不能自助开票)→ iParts 无财务能力,正向发票全推 SAP(ZSDI_OTD_FPXX),AR/收款/GL 全在 SAP。职责从 Pentana 内部迁到 SAP,联动场景4 红冲;⑤ 按订单类型差异化定价需开发:Pentana Sales Type(Stock/Daily/VOR)直接驱动价格(IC407);iParts 有 Urgent/Regular/VOR 维度但只"半进"算价(基础价解耦、折扣有 conflation 雷点),要按三种订单类型算出不同价需商品中心+订单中台+POTD 三侧优化。详见支付方式与定价专题(5.4-5.7)与关键差异。

一、切换收益:门店销售链路的能力跃升

先看结论——切换后门店销售链路能带来哪些 Pentana 做不到的能力提升(均代码级可证);其后各节为得出此结论的过程证据。本节列本场景独有能力;推送失败自动补偿、CQRS 读写分离查询、多品牌多租户并行等为全链路通用能力(与采购场景共享),不再单列。

SAP 销售订单与发票自动推送
销售单确认后,order-tool 自动推 SAP 销售订单(ZSDI003_OTD_SALES_ORDER)与发票(ZSDI_OTD_FPXX),并支持发票回查(ZSD_INVOICE_QUERY,走 SAP 文件下载),开票与 AR 应收一键打通。
Pentana:开票靠 OE212 To-Be-Charged 批量夜跑或 OE204 放行后自动生成,收款靠人工 AR204 逐笔录,与 SAP 无自动衔接。
支付方式枚举化、付款条件标准化 EM 待发布
下单即选支付方式(PaymentMethodEnum:电汇/赊销/定金/余额/担保/铺货/信用证/保证金 8 种),PaymentTerm 标准化映射 SAP ZTERM,主数据一处配置全链生效。该能力 EU 市场已上线,EM(澳洲)市场待整体切换后发布(已上线子公司需培训、可能涉及历史数据修复)。
Pentana:下单时无支付方式枚举字段,靠 Account Type/Terms Code/Sales Type 三层客户主数据隐式表达,支付工具(支票/EFT/现金)延后到 AR204 收款时人工录。
销售单状态机与出库由专业履约中台执行
配货单 AllocateNote 状态机(CREATED→SUBMITTED→FINANCIAL_CONFIRMED→PART/ALL_OUTBOUND→FINISHED)在履约中台专业维护,POTD 聚合门面聚焦用户体验,职责分离。
Pentana:订单录入/放行/开票/收款全挤在 OE/AR 单模块,状态分散在各 T-Code。
出库走 OTWB 专业 WMS
销售出库经履约中台推 OTWB(SendNoteBizSourceEnum.OTWB_OUTBOUND),拣货/出库/可用量由专业仓储系统执行,库存权威性强。
Pentana:出库靠 OE204 放行 + WM202/RF202 拣货,库存与销售耦合在同一系统。
经销商主数据统一管理、折扣/区域结构化
经销商主数据与折扣/区域归 GODP godp-parts basedata(sp_bd_discount_dealer、dealer_code、dealer_area_code),门店列表走 NdrGateway,主数据治理统一。
Pentana:经销商=AR402 客户主档,折扣靠 IC407 矩阵 + 客户折扣码,多门店靠客户号前缀(G2xxx/G4xxx)区分,无统一治理。
部分出库状态原生支持
AllocateStatusEnum 原生区分 PART_OUTBOUND(35)与 ALL_OUTBOUND(40),部分出库状态清晰,不需人工判断。
Pentana:部分出库靠 OE204 行状态(Taken/Picked)与欠交 OE206/210/211/236 人工跟进。

二、代码级链路验证(新链路侧)

经销商门店→子公司下单买备件(B2B子公司销售)端到端链路,每步标注实现系统 + 代码证据。✅ 全部已验证。

1
经销商/门店下单 [POTD门面 → 履约中台]
POTD /web/subsidiary/sales-order(子公司销售单,薄门面)→ 履约中台建配货单 AllocateNote(CREATED)。orderType=LOCAL(1,Workshop门店向本地子公司买)/INTERNAL(5,NSC内部调拨)。销售单本体不在 POTD,在履约中台。
POTD: SubsidiaryCompanySalesOrderController:48 /web/subsidiary/sales-order;SubsidiarySalesOrderServiceImpl:101 注入 FulfillmentOrderService,读写 AllocateNoteHeadDTO(来自 msc-fulfillment-center.client.dto.allocateNote);OrderTypeEnum:15-53 LOCAL(1)/INTERNAL(5)
2
提交 + 财务确认 [履约中台]
AllocateNote 状态 CREATED→SUBMITTED→FINANCIAL_CONFIRMED(32)。POTD financialRelease 按 SalesRoleTypeEnum 分发:DEALER(经销商)走 handleDealerConfirmPayment;SUBSIDIARY(子公司)走中台 release 接口 /allocate/{allocateNo}/confirmed(带重试)。
POTD: SubsidiarySalesOrderServiceImpl.financialRelease:1130;handleSubsidiaryConfirmPayment:1191-1214 callReleaseInterfaceWithRetry;AllocateStatusEnum.FINANCIAL_CONFIRMED(32);OrderStatusEnum.FUNDS_CONFIRMED(70)
3
支付方式 + 付款条件 [POTD + PoConfiguration]
下单选 PaymentMethodEnum(T电汇/O赊销OA/D定金/P余额/G担保/F铺货/L信用证/B保证金)+PaymentTerm。PaymentTerm→SAP ZTERM 映射在 order-tool 配置(1/2/4→CB00,250→Z001,200→S001…)。配置入口 PoConfiguration。
POTD: PaymentMethodEnum:15-32(T/O/D/P/G/F/L/B);order-tool: application-uat-local.yml:198-234 SEND_NOTE.paymentTerms→ZTERM;PoConfigurationController#getPoConfigurationEnums
4
出库(OTWB) [履约中台 → OTWB]
AllocateNote 出库:PART_OUTBOUND(35)/ALL_OUTBOUND(40)。履约中台推 OTWB 出库单(SendNoteBizSourceEnum.OTWB_OUTBOUND,OtwbInOutboundTypeEnum.OUTBOUND)。拣货/出库由 OTWB 专业 WMS 执行。
履约中台: AllocateStatusEnum.PART_OUTBOUND(35)/ALL_OUTBOUND(40);SendNoteBizSourceEnum.OTWB_OUTBOUND(10);OtwbInOutboundTypeEnum.OUTBOUND(1);POTD仓库配置含 otwb_warehouse_code
5
推 SAP 销售订单 [order-tool → SAP]
order-tool 扩展点 AllocatePushDataToSapInvoiceEmExtPt(bizId=ALLOCATE_NOTE,useCase=LOCAL,scenario=EM_INVOICE)→ 推 SAP ZSDI003_OTD_SALES_ORDER。携带 PaymentTerm 映射的 ZTERM。
order-tool: AllocatePushDataToSapInvoiceEmExtPt:38-79 @Extensions(BIZ_ID_ALLOCATE_NOTE);sapInterfaceConfig bizConfigs SEND_NOTE→ZSDI003_OTD_SALES_ORDER(application-uat-local.yml:186-202)
6
推 SAP 发票 [order-tool → SAP]
order-tool SparePartAllocateSapInvoiceCreateCmdExe → 推 SAP ZSDI_OTD_FPXX 创建发票。取消/红冲走 PartSapInvoiceCreateAllocateNoteCancelCmdExe、SparePartReverseSapInvoiceCreateCmdExe。
order-tool: SparePartAllocateSapInvoiceCreateCmdExe(order-tool-app/executor);createInvoiceConfig→ZSDI_OTD_FPXX;PartSapInvoiceCreateAllocateNoteCancelCmdExe(红冲)
7
SAP 生成 AR 应收 [SAP]
SAP 侧:销售订单+发票落账 → 生成 AR 应收(借应收/贷收入)。AR 总账在 SAP 侧闭环,POTD/中台不承接 AR 总账。
8
发票回查与展示 [POTD → SAP]
POTD InvoiceQueryService 回查发票列表(/invoiceList、/api/purchasing/invoice/list),支持 isSourceSap=true 走 SAP 文件下载(queryInvoiceDownload)展示给业务。
POTD: SubsidiaryCompanySalesOrderController:172-177 /invoiceList;InvoiceQueryService.getInvoiceList;SapRemoteApi.searchInvoice(ZSD_INVOICE_QUERY)
9
状态回写完成 [履约中台]
出库完成 → AllocateStatusEnum FINISHED(50);POTD 同步 OrderStatusEnum.FUNDS_CONFIRMED(70)。整链闭环。
履约中台: AllocateStatusEnum.FINISHED(50);POTD: OrderStatusEnum.FUNDS_CONFIRMED(70)
✅ 链路判定:门店销售(B2B)链路完整——POTD门面→履约中台AllocateNote→OTWB出库→order-tool推SAP(销售订单+发票)→SAP AR应收→POTD发票回查。采购方向的镜像:采购单本体在POTD/状态机在POTD;销售单本体在履约中台/状态机在履约中台,POTD是薄门面。
⚠️ 两个未实现点(非断链,但需确认):① 经销商确认付款 handleDealerConfirmPayment 是 TODO 桩(仅记日志返回 true,未落库);② 信用额度/账龄控制在 POTD+履约中台主源码无命中(疑似 SAP 侧承接或未实现)。详见关键差异。

三、角色 / 组织映射

Pentana 角色/对象新链路对应映射说明
经销商门店(客户,如 G2029 GEELY CASTLE HILL)DEALER(SalesRoleTypeEnum)→ SAP KUNNR门店=客户;Pentana 每门店一个 AR402 客户号(G2xxx/G4xxx);新链路经销商主数据在 GODP godp-parts basedata(dealer_code)
子公司(卖方)SUBSIDIARY(SalesRoleTypeEnum)→ SAP 销售组织子公司=卖方;POTD financialRelease 按角色分发
收货仓库OTWB 仓库(otwb_warehouse_code)销售出库走 OTWB;按品牌隔离(同一 OTWB 仓不同品牌独立记录)
门店列表/多门店NdrGateway(StorePageParam/StoreListOutput)Pentana 靠客户号前缀+HE421多门店用户;新链路门店主数据来自 NDR 域
AR 收款员/出纳SAP AR 侧财务全切 SAP;POTD 只回写"已确认"状态+发票回查
多品牌/多门店隔离tenant_id+brand_code+市场+OrderBrandContextHolderPentana 靠客户号前缀+Product Code+Terms Code 余额账户;新链路多品牌多市场多租户原生

四、端到端流程对比(Pentana C1 vs 新分布式链路)

步Pentana(C1 门店销售)新链路(已验证)
0主数据:AR402客户(Account Type/Terms Code/Sales Type/信用额度 Screen6);IC402物料;IC407折扣矩阵;IC419仓库商品中心主数据;经销商主数据 GODP basedata;PoConfiguration(PaymentTerm/PaymentMethod);门店 NdrGateway;OTWB仓库
1OE202 Order Entry录单(表头 Warehouse/Sales Type/Account Type/Order Terms;无支付方式枚举)POTD /web/subsidiary/sales-order→履约中台 AllocateNote(orderType=LOCAL/INTERNAL);下单选 PaymentMethodEnum
2信用审批:HE201 Type03→OE215释放信用冻结(基于AR402信用额度)无审批闸门(B2B);信用额度/账龄控制未找到(⚠️待确认 SAP 侧承接)
3OE204 Order Release放行(拣货 WM202/RF202;行状态 Taken/Picked→触发开票)AllocateNote PART_OUTBOUND/ALL_OUTBOUND;履约中台推 OTWB 出库
4欠交:OE206/210/211/236(Selective/En-Mass/Consolidate/National);视图 OE609部分出库 PART_OUTBOUND 原生状态;欠交释放机制待确认
5OE212 To-Be-Charged Run批量开票(已定价行→AR发票过 DBTR 控制账;OE204放行后自动/夜跑)order-tool 推 SAP ZSDI_OTD_FPXX 创建发票;销售订单 ZSDI003_OTD_SALES_ORDER
6AR204 Cash Receipt收款(Cheque#/Bank/Drawer;Apply to Document 逐票 / Apply to Customer 挂账)SAP AR 侧收款;POTD 经销商确认付款 handleDealerConfirmPayment=TODO桩(⚠️);子公司侧 handleSubsidiaryConfirmPayment 已实现
7GL AR 批:GL204/GL206(前缀AR);AR417/418 接口批(IC616)SAP 侧 GL 闭环;POTD 不承接 AR/GL 总账
✅ Pentana 关键修正(本次考古纠正此前猜测):OE813≠缺货(是C25预测链异常需求审阅);AR210不存在(与AP210混淆,AR收款=AR204);AR202≠开票(是应收日记账维护,发票生成=OE212批量/OE204放行自动);INVVARTH是AP侧专用,销售侧无对应容差(销售价格控制=@OPRC/@OPRU/@OVRL)。

五、支付方式与定价专题对照(本场景重点)

经销商下单时的支付方式 + 备件定价——Pentana 与新链路在表达模型上的根本差异,以及逐项映射建议与开发优化项。含 5.1-5.4 支付方式/发票职责、5.5-5.7 定价专题(订单类型驱动价格、软件订单备件定价、经销商买价 vs 终端车主买价)。

5.1 表达模型差异

Pentana:无支付方式枚举,三层客户主数据隐式表达 单系统
Pentana 在下单(OE202)时没有"现金/EFT/信用卡/COD"枚举式支付方式下拉框。"结算类型"由 AR402 客户主数据三层字段决定:
① Account Type 二选一(结算类型本质):Open Item(逐票核销,每张发票单独追踪,AR204 用 Apply to Document) / Balance Brought Forward(余额按账龄桶滚存,AR204 用 Apply to Customer);
② Terms Code(付款条件码,如 A001,定义付款天数 7天/30天/月结,驱动账龄);
③ Sales Type(R零售/W批发,是定价渠道维度,非支付方式);
④ Settlement Allowance(早结折扣让利,非支付方式)。
真正的支付工具(支票/EFT/现金)不在 OE202 选,而是在 AR204 收款录入时定(Cheque/Receipt# + Bank + Drawer 字段)。
新链路:下单即选 PaymentMethodEnum + PaymentTerm→ZTERM 枚举化
新链路下单时直接选 PaymentMethodEnum(8 种):T(电汇)/O(赊销 OA)/D(定金)/P(余额)/G(担保)/F(铺货)/L(信用证)/B(保证金);PaymentTerm 标准化映射 SAP ZTERM(order-tool 配置:1/2/4→CB00,250→Z001,200→S001…)。配置入口 PoConfiguration(非客户主数据)。

5.2 逐项映射建议

⚠️ 市场发布状态(业务澄清):PaymentMethodEnum 与 PaymentTerm→ZTERM 映射目前只有 EU 市场上线,EM(澳洲)市场尚未发布。代码里枚举存在,但 EM 业务上未启用。若澳洲要上,需 EM 市场整体切换 + 已上线子公司培训 + 历史数据修复。下表为 EU 已验证逻辑,EM 切换时参照。
Pentana 概念新链路 PaymentMethodEnum映射说明与风险
Open Item + Terms Code(赊销月结,逐票核销)O = OA(赊销)OA 对应赊销;但 Pentana 的 Open Item(逐票)vs Balance Forward(滚存)二分法在新链路无直接对应——需确认 SAP 侧如何承接(疑似 SAP 客户主数据 accounting group 区分)
Balance Brought Forward(余额滚存账龄桶)O = OA(赊销)同为赊销;核销方式(逐票 vs 滚存)差异需 SAP 侧配置承接
AR204 即时收款(支票/EFT/现金,录 Cheque#+Bank)T = T/T(电汇)T 对应电汇;现金/支票在 PaymentMethodEnum 无直接枚举——疑似走 T 或由 SAP 侧承接,需确认
定金D = Deposit✅ 直接对应
信用证(LC)L = LC✅ 直接对应(多用于国际)
Terms Code(付款天数 7/30/月结)PaymentTerm→ZTERMPaymentTerm 映射 ZTERM 已在 order-tool 配置;Pentana Terms Code(如 A001)→PaymentTerm code→ZTERM 的完整映射表需补
Sales Type(R零售/W批发)无直接对应Sales Type 是定价渠道维度,非支付方式;新链路定价走商品中心/价格规则,不靠 Sales Type
Settlement Allowance(早结折扣)无直接对应早结折扣让利;需确认 SAP 侧折扣/返利配置承接

5.3 信用控制对照(本场景另一重点)

信用池(信用额度控制):新开发项,非 SAP 承接 🟡 新开发 + 业务打合
Pentana:AR402 Screen 6 Credit Details 维护信用额度;下单触发信用检查,失败→HE201 Type 03 信用审批→OE215 释放信用冻结。账龄:AR602 Accounts Debtor Enquiry 按 customer balance 看账龄汇总/月结单/付款历史(Open-item 逐票 / balance-forward 按桶)。
新链路(业务澄清):信用池(信用额度控制)是上了 PaymentMethodEnum 字段后需要配套的新开发项,不是 SAP 侧承接。EU 市场正在开发信用池逻辑,需与业务打合 EU 正在开发的逻辑是否符合业务想要的;如果符合,EM(澳洲)市场也要有开发和测试周期。目前代码里 creditLimit/aging 无业务命中,证实是待开发项。
风险:EM 市场在支付方式字段+信用池上线前,赊销(OA)客户下单无额度闸门→坏账风险;与 PaymentMethodEnum 字段发布节奏联动,不能分开上线。这是本场景最大交付风险——涉及业务打合+EM 开发测试,时间不确定。
⚠️ 经销商确认付款未实现:POTD handleDealerConfirmPayment(SubsidiarySalesOrderServiceImpl:1176-1186)是 TODO 桩,仅记日志返回 true,注释"TODO: 保存附件信息到订单中心"。对照 Pentana AR204 完整收款录入(Cheque#/Bank/Drawer/核销目标)。需确认经销商侧收款是否由 SAP 侧承接,或需开发补齐。

5.4 发票职责迁移(本场景另一重点,联动场景4)

发票职责从 Pentana 内部自持 → SAP 外部持有 🟢 职责迁移点(文档必讲)
Pentana 自持 AR、自己开票,内部 GL 闭环:经销商门店下单后,发票由 Pentana 系统自己开——OE212 To Be Charged Run(批量开票,核心)/ OE225 跨仓发票打印 / OE06 即开权限;订单 OE204 放行后 OE212 批量开票,状态置 invoiced。经销商不能自助开票(DC 门户只有下单 DC201/202、退货申请 DC203、回购 DC206、重打印 DC222,无开票 T-Code)——开票在子公司 AR 人员侧。AR 持应收→AR204 收款→GL Interface 内部总账。无任何 SAP/外部财务对接。
iParts 无任何财务能力,发票全推 SAP:销售单确认后 order-tool 推 SAP 销售订单 ZSDI003_OTD_SALES_ORDER + 发票 ZSDI_OTD_FPXX,支持发票回查 ZSD_INVOICE_QUERY(走 SAP 文件下载);AR 应收/收款/GL 全在 SAP 侧。
迁移含义:正向发票职责从 Pentana 内部迁到 SAP。子公司 AR 人员原来在 Pentana 跑 OE212 批量开票,迁移后变成 SAP 自动开票(order-tool 推送触发)、AR 人员在 SAP 侧对账;经销商原在 DC 门户重打印发票(DC222),迁移后发票来源是 SAP。联动场景4:退货红冲(credit note)同样职责迁移——Pentana OE216/OE217 自己开打印 credit note → iParts 推 SAP 红冲 INVCAT=TI。
✅ 职责迁移链(四场景统一视角):Pentana 自持 AR/AP(开票 OE212/OE225、credit note OE216/OE217、收款 AR204、付款 AP217、内部 GL Interface)→ iParts 无财务能力,正向发票/红冲/AR/AP/收款/付款/GL 全推 SAP。场景3=正向发票职责迁移,场景4=红冲职责迁移,场景1/2=AP 应付职责迁移。

5.5 订单类型驱动价格对照(本场景重点,需开发优化)

Pentana:Sales Type 直接驱动价格(IC407 折扣矩阵) 单系统
Pentana IC407 折扣矩阵按 (Sales Type + 客户折扣码[AR402] + 物料折扣码[IC404]) 三键查折扣,手册原文明示"允许为不同 sales types 配不同价",举例 Daily 单 20% / Stock 单 30%。基础价 IC404 维护 Prices 1-6(List/Trade/Daily/Stock/Internal/Special Wholesale)+ RRP。Sales Type 取值=订单类型(Stock/Daily/VOR)+ 渠道(R/W),订单类型直接驱动差异化定价。
iParts:有 Urgent/Regular/VOR 维度,但只"半进"算价 🟡 需开发优化
iParts 有紧急度维度 PoConfigurationPoTypeEnum(Regular=1/Urgent=2/VOR=3),独立于 OrderTypeEnum(LOCAL/INTERNAL)、独立于 PartPriceOrderTypeEnum(ZB01/ZF01/MSRP)。但:
① 基础价完全解耦——changeApiOrderType 对 orderCategory=1/2/3 原样返回 ZB01,Regular/Urgent/VOR 拿同一份基础价;商品中心 b_spare_part_price 价表无 order_type/紧急度列。
② 折扣进了但有 conflation 雷点——price-center 把 orderCategory 原样塞进折扣查询 orderType(OrderPriceCalculateCmdExe:177),mapper AND order_type=#{orderType},理论上 Urgent/VOR 能匹配不同折扣行;但 b_spare_part_discount.order_type 这一个 Integer 列被双重语义占用(紧急度 1/2/3 vs SAP AUART 1=ZB01),值 1 恰好两边对齐、2/3 无对应 AUART——复用时最大语义陷阱。
③ 字段滥用:orderCategory 一个 Integer 字段同时塞紧急度(1/2/3)和算价口径(5/6/7 免费/软件/零售)。
📌 对应关系(业务澄清,命名反向易混):Pentana Stock(正常备货)→ iParts Regular(1);Pentana Daily(日常加急)→ iParts Urgent(2);Pentana VOR → iParts VOR(3)。⚠️ 不要按字面把 Daily→Regular、Stock→Urgent——Pentana "Daily" 听似常规实为加急,"Stock" 听似库存实为正常备货。
Pentana Sales TypeiParts PoConfigurationPoTypeEnumorderCategory
Stock 正常备货Regular 常规1
Daily 日常(加急)Urgent 加急2
VOR 车在路边VOR 超紧急3
优化方案:按 Urgent/Regular/VOR 差异化定价需三侧改 🟢 开发项(非配置)
商品中心(product-center):① b_spare_part_price 加 sales_type/urgency_type 列(基础价按紧急度差异化,优先匹配专用价、兜底通用价);② b_spare_part_discount 加独立 urgency_type 列,把紧急度从被滥用的 order_type 列拆出来(不破坏现有 AUART 折扣数据)。
订单中台 price-center:① OrderDTO 加独立 urgencyType 字段(从 orderCategory 拆出,别再共用);② SparePartPriceQuery/SparePartDiscountQuery 透传 urgencyType;③ changeApiOrderType 对 1/2/3 派生区分(或走 salesType 列不动 apiCode)。
新POTD:PartsHubPoAssemblerImpl 在 setOrderCategory 之外 setUrgencyType(来自 PoConfigurationPoTypeEnum 的 1/2/3)。
SAP:若走新 AUART(给 Urgent/VOR 新增 ZB02/ZB03)则 SAP 侧配对应价表;若走 salesType 列方案则 SAP 不动。
折扣链路基本现成可复用(改动小),基础价链路必须新增列+改派生(改动大)。优先治理 orderCategory/order_type conflation,再做基础价差异化。

5.6 软件订单备件定价对照

Pentana:无"软件订单"类型,软件=非库存杂项物料 单系统
Pentana 没有"软件订单"类型。软件(软件升级 GLDSSFT/诊断授权 DIAGLI/维修信息访问 REPINF/SERVICE PLAN)以 Sundry Item 非库存杂项物料形式处理,OE406 维护,每仓库一个平价,不走 IC407 折扣矩阵(无物料折扣码),订单行/索赔行手工输入或自动带出。采购侧 PN202/PN406/PN802 非库存采购(含软件订阅采购)。
iParts:有"软件订单"分类,但用普通 B2B 的 DNP 价,无独立软件价表 🟡 需业务确认
iParts 有软件订单分类 orderCategory=6, ZBDR(PotdPriceCalCulateOrderCategoryEnum.SOFTWARE)+ OrderPoTypeEnum.SOFTWARE。但商品中心 b_spare_part_price SQL 不带 orderType 过滤,ZBDR 走非零售分支,与 ZB01(LOCAL)用同一张价表、同一 groupCode、同一 DNP 单价。软件差异仅在:① SAP 税率请求 orderType=ZBDR(可能不同税率);② 折扣查询 orderType=6(若 b_spare_part_discount 配了 orderType=6 折扣则生效,否则无折扣)。没有"软件备件"特殊行类型参与定价——软件备件单价=普通 B2B DNP 单价;软件特殊性体现在 SAP 单据类型 ZBDR(税率/账务)+ 可选 orderType=6 折扣配置,不在备件基础价上。
对照结论:两侧都没有软件专属备件价表。Pentana 把软件当杂项物料(平价、不进折扣矩阵);iParts 把软件当独立订单分类(走 DNP 价、SAP ZBDR 单据类型、可选 orderType=6 折扣)。iParts 比 Pentana 多了 SAP 单据类型层面的软件区分(ZBDR 税率/账务),但基础价层面两者都不给软件独立价。若业务要软件备件独立定价,iParts 需给 b_spare_part_price 增加 orderType 维度或为 ZBDR 单独配客户组/价表(同 5.5 优化路径)。

5.7 经销商买价(B2B)vs 终端车主买价(零售)对照

维度B2B 子公司销售(经销商向子公司买)门店零售(门店向车主卖)
派生 orderTypeLOCAL(经销商DEALER买+子公司SUBSIDIARY卖)RETAIL(orderCategory=7,卖方=STORES门店)
apiCodeZB01MSRP
价源商品中心 b_spare_part_price,客户组 MSS-NSC 或 NSC-Dealer商品中心 b_spare_part_price,客户组 Dealer-Customer
价格性质DNP(经销商买价/分销价)MSRP(建议零售价/终端车主价)
折扣b_spare_part_discount(orderType+卖方+买方+门店),type/num/part 三级折扣累乘不走订单级折扣;零售用商品行自带 discountRate
POTD 入口SubsidiaryCompanySalesOrderController /web/subsidiary/sales-orderWorkshopSalesOrder/StoreSalesOrder(门店零售单,POTD 另一套)
✅ 两侧都区分经销商买价 vs 终端车主买价:Pentana IC404 价格层级含批发层(Prices 2-6)+ 零售层(RRP),折扣类型 1=Wholesale/R=Retail,Sales Type R/W 渠道切分;iParts 用 groupCode(买卖方关系派生)区分 DNP vs MSRP 两套价表。差异:iParts 零售走 MSRP + 行级 discountRate(不走订单级折扣),Pentana 零售也进 IC407 矩阵。

六、状态机对比

Pentana(C1 单系统,OE+AR)

OE202录单 ──(信用检查)──> [HE201 Type03 → OE215 信用冻结释放] │ Account Type/Terms Code/Sales Type ▼ OE204放行(拣货 WM202/RF202,行状态 Taken/Picked) │ 欠交: OE206/210/211/236 ▼ OE212 To-Be-Charged(批量开票,过 DBTR) 或 OE204 放行后自动/夜跑开票 │ ▼ AR204 Cash Receipt(Cheque#/Bank/Drawer) Apply to Document(逐票) / Apply to Customer(挂账) │ ▼ GL AR 批(GL204/206,前缀AR;AR417/418) ⚠️ 下单无支付方式枚举 ⚠️ 信用额度 AR402 Screen6 + HE201 Type03 闸门 ⚠️ AR202≠开票(是应收日记账维护) ⚠️ AR210 不存在(AR收款=AR204)

新链路(履约中台 AllocateNote,POTD 薄门面)

POTD /web/subsidiary/sales-order(门面) │ → 履约中台建 AllocateNote ▼ CREATED(10) → SUBMITTED(20) │ POTD financialRelease 按角色分发: │ DEALER → handleDealerConfirmPayment(TODO桩⚠️) │ SUBSIDIARY → 中台 /allocate/{no}/confirmed(带重试) ▼ FINANCIAL_CONFIRMED(32) │ PaymentMethodEnum(T/O/D/P/G/F/L/B) │ PaymentTerm → SAP ZTERM ▼ PART_OUTBOUND(35) / ALL_OUTBOUND(40) │ 履约中台推 OTWB 出库 ▼ order-tool 推 SAP: ZSDI003_OTD_SALES_ORDER(销售订单) ✅ ZSDI_OTD_FPXX(发票) ✅ │ ▼ SAP AR 应收 + GL FINISHED(50) / FUNDS_CONFIRMED(70) 发票回查: ZSD_INVOICE_QUERY(isSourceSap=true) ⚠️ B2B 无审批闸门 ⚠️ 信用额度/账龄控制未找到 ⚠️ 经销商确认付款=TODO桩
✅ 关键差异:Pentana 状态机在单系统(OE→AR);新链路状态机在履约中台(AllocateStatusEnum),POTD 是薄门面只做聚合/分发。Pentana 有信用审批闸门(HE201 Type03),新链路 B2B 无闸门。

七、关键差异点解析

信用池(信用额度)新开发 + EM 市场联动 🟡 本场景最大交付风险
Pentana:AR402 Screen6 信用额度 + HE201 Type03 信用审批闸门 + OE215 释放 + AR602 账龄。新链路(业务澄清):信用池是上了 PaymentMethodEnum 字段后需要配套的新开发项(不是 SAP 侧承接)。EU 正在开发,需与业务打合 EU 逻辑是否符合;符合则EM(澳洲)也需开发测试周期。目前代码无 creditLimit/aging 命中,是待开发。与 PaymentMethodEnum 字段发布节奏联动,不能分开上线;EM 上线前赊销无额度控制→坏账风险。
经销商确认付款是 TODO 桩 🟡 待开发/确认
新链路:handleDealerConfirmPayment(SubsidiarySalesOrderServiceImpl:1176-1186)仅记日志返回 true,未落库("TODO: 保存附件信息到订单中心")。Pentana:AR204 完整收款录入(Cheque#/Bank/Drawer/核销目标 Apply to Document/Customer)。必做:确认经销商侧收款是否由 SAP 承接,或需开发补齐落库。
Account Type 二分法无直接对应 🟡 映射
Pentana Account Type(Open Item 逐票 / Balance Forward 滚存)决定收款核销路径;新链路 PaymentMethodEnum 无此二分概念。必做:确认 SAP 侧客户主数据 accounting group 如何承接逐票 vs 滚存核销。
现金/支票无直接枚举 🟡 映射
PaymentMethodEnum 8 种(T/O/D/P/G/F/L/B)无"现金/支票"枚举;Pentana 支付工具(支票/EFT/现金)在 AR204 录。必做:确认现金/支票收款走 T(电汇)还是 SAP 侧承接。
销售单本体在履约中台,不在 POTD 🟢 架构差异
采购方向 POTD 是厚核心(采购单本体+状态机在 POTD);销售方向 POTD 是薄门面(销售单=配货单 AllocateNote 本体+状态机在履约中台)。镜像架构——职责分离,但查询需跨 POTD+履约中台+SAP 聚合。
开票自动化 🟢 收益
Pentana OE212 批量夜跑/OE204 放行自动开票(单系统);新链路 order-tool 推 SAP ZSDI_OTD_FPXX 自动开票 + 发票回查展示。开票与 SAP AR 应收一键打通。
AR 收款全切 SAP 🟡 范式转变
Pentana AR204 手工录收款(支票/EFT/现金 + 核销);新链路 AR 收款在 SAP 侧,POTD 只回写"已确认"状态 + 发票回查。财务操作从 Pentana AR 模块迁到 SAP。

八、10维度差异全景

🟢已验证对齐 / 🟡配置/迁移/待确认 / 🔴缺失(本次:0)

维度评级核心差异
1 触发与前置主数据🟡经销商主数据 GODP basedata vs Pentana AR402;PaymentMethodEnum/PaymentTerm→ZTERM vs Account Type/Terms Code;门店 NdrGateway vs 客户号前缀
2 单据创建🟢POTD门面→履约中台 AllocateNote 已验证;orderType=LOCAL/INTERNAL;销售单本体在履约中台
3 审批流🟡B2B 无审批闸门;Pentana 有 HE201 Type03 信用审批;信用控制待确认 SAP 承接
4 状态机🟢履约中台 AllocateStatusEnum(CREATED→SUBMITTED→FINANCIAL_CONFIRMED→PART/ALL_OUTBOUND→FINISHED);POTD 薄门面
5 库存动作🟢OTWB 出库(SendNoteBizSourceEnum.OTWB_OUTBOUND);PART_OUTBOUND/ALL_OUTBOUND 原生状态
6 物流/运输🟢OTWB 出库;本链不涉及国际物流(GODP 不承担门店销售出库)
7 财务记账(开票/AR)🟡发票职责迁移:Pentana 自持 AR 自开票(OE212/OE225,内部 GL 闭环)→ iParts 无财务能力,order-tool 推 SAP ZSDI003_OTD_SALES_ORDER+ZSDI_OTD_FPXX,AR/收款/GL 全在 SAP;经销商确认付款=TODO桩;信用控制缺失
8 支付方式与定价🟡PaymentMethodEnum 8种 vs Pentana Account Type+Terms Code;定价:Sales Type(Stock/Daily/VOR)直接驱动价(IC407) vs iParts Urgent/Regular/VOR 只半进算价(基础价解耦+折扣conflation),按订单类型差异化定价需商品中心+订单中台+POTD三侧开发;软件订单两侧都无独立价表
9 异常处理🟡部分出库 PART_OUTBOUND 原生;取消/红冲 PartSapInvoiceCreateAllocateNoteCancelCmdExe 推 SAP;欠交释放机制待确认
10 查询报表🟡POTD 发票回查(ZSD_INVOICE_QUERY,isSourceSap=true);跨系统对账(POTD+履约中台+SAP)

九、切换必做动作(均为🟡配置/迁移/待确认,无🔴开发断链)

  1. 信用池新开发(最高优先,业务打合):信用池是上了 PaymentMethodEnum 字段后需配套的新开发项(非 SAP 承接);与业务打合 EU 正在开发的信用池逻辑是否符合业务想要的;符合则 EM(澳洲)市场安排开发测试周期(对标 Pentana AR402 Screen6 + HE201 Type03)。与支付方式字段发布联动,不能分开上线
  2. PaymentMethodEnum EM 市场发布:该能力 EU 已上、EM(澳洲)未发布;若上需 EM 市场整体切换 + 已上线子公司培训 + 历史数据修复。确认 EM 上线时间窗与澳洲切换计划
  3. 经销商确认付款补齐:handleDealerConfirmPayment 当前 TODO 桩——确认经销商侧收款由 SAP 承接还是需开发落库(对标 Pentana AR204 Cheque#/Bank/Drawer + Apply to Document/Customer)
  4. 支付方式映射:Pentana Account Type(Open Item/Balance Forward)+Terms Code → PaymentMethodEnum + PaymentTerm→ZTERM 完整映射表;现金/支票收款归类;OA 赊销核销方式(逐票 vs 滚存)在 SAP 侧配置承接
  5. SAP 侧配置:销售订单 ZSDI003_OTD_SALES_ORDER + 发票 ZSDI_OTD_FPXX 在 UAT/生产可用;AR 应收/收款/GL 闭环;发票查询 ZSD_INVOICE_QUERY 对接
  6. 发票职责迁移培训(联动场景4):Pentana 自持 AR 开票(正向 OE212/OE225,子公司 AR 人员跑批量开票;经销商 DC 门户仅重打印 DC222)→ iParts 推 SAP 自动开票(order-tool 触发);AR 人员转 SAP 侧对账;经销商发票来源变 SAP;历史发票数据迁移。退货红冲(场景4)同步职责迁移
  7. 按订单类型差异化定价(开发优化,三侧):Pentana Sales Type(Stock/Daily/VOR)直接驱动价,iParts Urgent/Regular/VOR 只半进算价。需商品中心(b_spare_part_price 加 sales_type 列、b_spare_part_discount 加独立 urgency_type 列解 conflation)+ 订单中台 price-center(OrderDTO 加独立 urgencyType 从 orderCategory 拆出、SparePartPriceQuery/DiscountQuery 透传、changeApiOrderType 对 1/2/3 派生区分)+ 新POTD(PartsHubPoAssemblerImpl setUrgencyType)三侧改。对应关系:Stock→Regular、Daily→Urgent、VOR→VOR(命名反向易混)。优先治理 orderCategory/order_type conflation,再做基础价差异化;折扣链路基本现成可复用,基础价链路改动大
  8. 软件订单备件定价(业务确认):两侧都无独立软件价表——Pentana 软件=非库存杂项物料(OE406 平价,不进 IC407);iParts 软件=orderCategory=6 ZBDR(走普通 B2B DNP 价,仅 SAP 税率/可选 orderType=6 折扣区分)。若业务要软件备件独立定价,同 5.5 优化路径给价表加 orderType 维度
  9. 科目映射:Pentana AR 控制账(DBTR/ARCR)→ SAP AR 科目;收入/税/银行科目映射(财务迁移核心交付物)
  10. 经销商主数据迁移:AR402 客户主档(信用额度/Terms Code/折扣码)→ GODP basedata(dealer_code/sp_bd_discount_dealer)+ SAP 客户主数据;门店列表→ NdrGateway
  11. 配置澳洲:companyCode/brandCode/市场(EM/EU?)/otwb_warehouse_code;PoConfiguration(PaymentTerm/PaymentMethod);SalesRoleTypeEnum 角色映射
  12. 数据迁移:未清销售单/出库/发票/收款余额;客户主档;折扣矩阵(IC407→商品中心/价格规则)
  13. 培训:支付方式枚举化操作、状态分散查询(POTD+履约中台+SAP)、发票回查、跨系统对账

十、待确认问题

  1. 信用池(最高优先):上了 PaymentMethodEnum 字段后,信用池是新开发项(非 SAP 承接)。需与业务打合 EU 正在开发的信用池逻辑是否符合业务想要的;符合则 EM(澳洲)市场需要开发测试周期。EM 上线前赊销(OA)无额度控制→坏账风险。上线节奏与 PaymentMethodEnum 字段是否联动?
  2. PaymentMethodEnum EM 发布:该能力 EU 已上、EM(澳洲)未发布。若上需 EM 市场整体切换 + 已上线子公司培训 + 历史数据修复。澳洲切换时间窗?
  3. 经销商确认付款:handleDealerConfirmPayment TODO 桩——经销商侧收款由 SAP 承接还是需开发落库?对标 Pentana AR204 的 Cheque#/Bank/Drawer + 核销目标如何对应?
  4. 支付方式映射:Pentana Account Type(Open Item 逐票 / Balance Forward 滚存)在 SAP 侧如何承接?PaymentMethodEnum 无现金/支票枚举,这两类收款归到哪?
  5. Terms Code → ZTERM:Pentana Terms Code(如 A001,7天/30天/月结)→ PaymentTerm code → SAP ZTERM 的完整映射表由谁出?
  6. SAP 接口可用性:ZSDI003_OTD_SALES_ORDER / ZSDI_OTD_FPXX / ZSD_INVOICE_QUERY 在 UAT/生产环境可用?字段映射?
  7. AR 收款:Pentana AR204 手工录收款(支票/EFT/现金),新链路 AR 全切 SAP——SAP 侧收款录入流程如何?POTD 是否需要回写收款状态?
  8. 发票职责迁移(联动场景4):Pentana 自持 AR 自己开票(正向 OE212/OE225,经销商不能自助开票)→ iParts 推 SAP 自动开票。子公司 AR 人员原来跑 OE212 批量开票,迁移后开票触发/对账/经销商重打印如何承接?历史发票数据迁移?退货红冲(credit note)同步职责迁移见场景4
  9. 按订单类型差异化定价(开发优化):业务是否要 Stock/Daily/VOR(Urgent/Regular/VOR)三种订单类型算出不同价格?当前 iParts 基础价三者同价、折扣有 conflation 雷点。三侧改动方案(商品中心加 sales_type/urgency_type 列、订单中台拆 urgencyType 独立字段、POTD setUrgencyType)是否排期?优先级?对应关系:Stock→Regular、Daily→Urgent、VOR→VOR——业务确认此映射?
  10. 软件订单备件定价:澳洲子公司"软件订单"实际业务含义(软件升级订阅/诊断授权/带软件备件/别的)?是否需要软件备件独立价表?当前 iParts 软件 orderCategory=6 ZBDR 走普通 B2B DNP 价,仅 SAP 税率/可选折扣区分——是否够用?
  11. 欠交释放:Pentana OE206/210/211/236 欠交释放机制,新链路如何对应?部分出库 PART_OUTBOUND 后的剩余如何处理?
  12. 经销商角色 vs 子公司角色:SalesRoleTypeEnum(DEALER/SUBSIDIARY)在澳洲子公司的实际场景——经销商是直接下单还是经子公司?两个角色的收款链路差异?
  13. B2C 门店零售:v1-8-0 新建的 WorkshopSalesOrder/StoreSalesOrder(零售给终端车主)是否在本次切换范围?还是只切 B2B 子公司销售?
  14. Settlement Allowance/Sales Type:Pentana 早结折扣(Settlement Allowance)与销售类型(Sales Type 定价渠道)在新链路如何承接?