核心结论(已跨系统代码级验证):经销商门店退货/贷记链路从退货建单到 SAP 红冲发票全链贯通,0个致命缺陷。新链路 RO 退货模块是完整实现(非桩)——退货单本体(逆向单 ReverseOrder)在订单中台,POTD 做门面+门店仓出库,SAP 推送(逆向销售单+红冲发票)在 order-tool,物流履约统一走 OTWB(与正向发运同接口,仅 DN-Return 202 vs DN-Sales 201)。RO 模块只覆盖门店(B2B)销售退货;子公司采购逆向是索赔、在 GODP 承接(godp-claim-part),与门店退货是两个独立域,不在本场景对照。
先看结论——切换后退货链路能带来哪些 Pentana 做不到的能力提升(均代码级可证);其后各节为得出此结论的过程证据。本节列本场景独有能力;推送失败补偿、CQRS、多品牌多租户等为全链路通用能力,不再单列。
review 是关键闸门,有按钮权限控制(@BtnPermission);审核通过才出库+推 SAP,拒绝则取消库存占用。NSC 退货单不可取消、原单已关联 NSC 单不可再审批。ReturnReasonEnum 结构化:30系统错误/40经销商下错单/50物流损坏/51故障件/52拒收损坏,便于数据分析与质量追溯。queryReturnableQtyBySo),防止超退。RETURN(退货退款)+ SCRAP(报废/仅退款);订单中台还有 ONLY_GOODS(仅退货)。SCRAP 自动出库(autoOutbound=true),RETURN 等出库。经销商门店退货/贷记端到端链路,每步标注实现系统 + 代码证据。✅ 全部已验证。重点标注跨系统归属(POTD / 订单中台 / 履约中台 / order-tool / OTWB / SAP)。
/web/return(ReturnOrderController)→ 订单中台建逆向单 ReverseOrder(/msc-order-center/open-api/v2/reverse/create)。退货单本体在订单中台;关联原单 relationNo=正向SO配货单号、orderNo=正向订单号。退货原因 ReturnReasonEnum + 处理方式 HandlingMethodEnum(RETURN/SCRAP)。createOccupancyForSoReturn(写 StockOccupancyRecord,门店仓)。review 审核闸门(@BtnPermission NS_RO_REVIEW/RO_REVIEW)。通过→approved(推 bizevent);拒绝→取消库存占用 + businessStatus=REJECTED。stockOutboundOrderGateway.createOutbound → ShipmentOutboundHandler → 门店仓 PartInventory 扣减、占用释放。autoOutbound:SCRAP=true(直接出库),RETURN=false(等出库)。BizTypeEnum.SHIPMENT。StockOutboundOrderServiceImpl.confirmOutbound,orderBizType==SHIPMENT)调中台 returnOrderService.doReviewRoOrder,履约中台生成逆向配货单(AllocateNote)+发运单(SendNote=DN),传退货链单号对。LocalReturnStatusEventPreProcessExtPt.preProcess → ReverseOtwbManager.sendSync 构建 RDN(customOrinOrderType=202 DN-Return,正向是 201 DN-Sales;customerInboundNo=sendNoteNo)→ POST /uis/rest/in/OmIntClearanceTaskBuffalo 经 GBOP 网关 otwb-gbop-gateway。与正向发运推 OTWB 同接口同 Wrapper,仅 201→202。OtwbEventInOutBoundExt.process(type=0 INTBOUND)→ inOutboundGateway.syncFromOtwb 把出入库流水同步回履约中台 → 发布 ReverseSendNoteSignedEvent 触发 RO2 虚拟入库级联。reverseOrderSyncSap。退货退款(GOODS_MONEY)推 ZBRE,仅退款(ONLY_MONEY)推 ZBCR。前置:正向必须有发货单 sendNoteNo 存在(已发货),不要求正向发票已开。SparePartReverseSapInvoiceCreateCmdExe 推 SAP 红冲发票(INVCAT=TI,AUART=ZBRE/ZBCR),报文填原正向 TI 票号。正向发票未开 → 不应走红冲,走其他方式(业务/财务对齐决定)。⚠️ 当前代码无"正向开票与否"判断:红冲创建唯一条件是国家白名单(isRedInkCountry,默认 GB),不看正向发票,原票号留空时 SAP 仍接受——这是需业务/财务对齐的设计差异(见七)。FulfillmentStatusChangeMQ(bizId=2,type=2)→ POTD FulfillmentStatusChangeConsumer 推 bizevent redInked→ 订单中台状态机 CREDIT_INVOICE_ISSUED(45)→ confirmRefund→COMPLETED(100)。整链闭环。| Pentana 角色/对象 | 新链路对应 | 映射说明 |
|---|---|---|
| 经销商(退货方) | 退货单 relationNo=正向SO配货单号 | 退货关联正向销售单;Pentana OE216 关联已开票发票 |
| 子公司(收退货方) | POTD 门面 + 订单中台逆向单 + 履约中台 DN | 退货单本体在订单中台;DN 在履约中台 |
| NSC/供应商(退货退款到) | NSC 退货单(orderType=5,businessType=TOB=2) | 原单审核选"退回直发供应商"自动生成 NSC 单 |
| 退货入库仓(NSC) | OTWB 待入库(RDN,DN-Return 202)→ 履约中台流水 | OTWB 是物流履约统一入口;Pentana OE216 Warehouse Goods Returned To(内部回库) |
| AR 贷记/红冲(发票职责) | SAP 红冲发票(INVCAT=TI,order-tool 推) | 职责迁移:Pentana 自持 AR 开 credit note(OE217 打印)→ iParts 推 SAP 红冲 |
| 正向开票(发票职责) | SAP 正向销售发票(order-tool 推 ZSDI_OTD_FPXX) | 职责迁移:Pentana 自开 OE212/OE225 → iParts 推 SAP(详见场景3) |
| 步 | Pentana(C5 退货/贷记,单系统自持) | 新链路(跨系统,已验证) |
|---|---|---|
| 0 | 前置:已开票订单(状态≠A);原因码 CRRC;AR402客户 | 前置:正向SO配货单(已签收/已发货 sendNoteNo);ReturnReasonEnum;可退量自动算。不要求正向发票已开 |
| 1 | OE216 录贷记单(ARPR056):选发票+退货仓+原因码;三类明细 Quantity/Price/Tax | POTD /web/return → 订单中台建逆向单;HandlingMethodEnum(RETURN/SCRAP) |
| 2 | (无独立提交步,OE216 录完即待释放) | 提交→门店仓库存占用(StockOccupancyRecord);状态 UNDER_REVIEW |
| 3 | OE217 释放(ARPR058):Accept+打印 credit note 或 reject;F13零库存/F14覆盖到期 | review 审批闸门(@BtnPermission);通过出库/拒绝取消占用 |
| 4 | (释放即回库,无独立出库步) | 门店仓出库(POTD本地 ShipmentOutboundHandler,门店仓 PartInventory 扣减) |
| 5 | (单系统无中台/DN) | 出库确认→调履约中台生成逆向配货单(AllocateNote)+发运单(DN) |
| 6 | (单系统无 OTWB) | 中台推 RDN 给 OTWB 待入库(DN-Return 202,同接口 DN-Sales 201) |
| 7 | (单系统无 OTWB 回调) | OTWB 入库→回调履约中台 syncFromOtwb 同步流水→ReverseSendNoteSignedEvent |
| 8 | AR 贷记过账 + 打印 credit note(释放自动):贷 DBTR 减应收 + 退货量回库(贷 INAC);受损件核销借 IC418 | order-tool 推 SAP 逆向销售单(ZBRE退货退款/ZBCR仅退款) |
| 9 | (credit note 是 Pentana 内部独立单据,内部 GL 闭环) | 正向已开票→order-tool 推 SAP 红冲发票(INVCAT=TI,填原票号);正向未开票→走红冲以外方式(业务对齐)。⚠️ 当前代码无此分支(只看国家白名单) |
| 10 | GL AR 批(GL204/206):贷 DBTR/借收入反冲或 INAC 库存(内部 GL Interface) | SAP 红冲回传→FulfillmentStatusChangeConsumer→CREDIT_INVOICE_ISSUED(45)→confirmRefund→COMPLETED(100);GL 全在 SAP 侧 |
| alt | OE218 杂项贷记/经销商回购(无发票,不校验上限;option 5 Release to stock) | SCRAP(仅退款,reverseOrderType=3)部分对应;无独立"经销商回购"类型。无 OE218 等价的"未开票杂项贷记"类型 |
退货类型/处理方式/原因码/红冲职责——Pentana 与新链路的模型差异与业务对齐点。
| Pentana 退货类型 | 新链路 HandlingMethodEnum / ReverseOrderTypeEnum | 映射说明 |
|---|---|---|
| OE216 对已开票订单退货(系统校验不超发票值/量) | RETURN(退货退款,reverseOrderType=1=GOODS_MONEY) | ✅ 直接对应;都有数量+金额双向 |
| OE216 Price/Tax 贷记(错价/错税,无库存移动) | SCRAP(仅退款,reverseOrderType=3=ONLY_MONEY)部分对应 | ⚠️ Price/Tax 贷记无库存;SCRAP 是报废仅退款。纯错价/错税(不退货只调金额)在新链路无独立类型 |
| OE218 杂项贷记/经销商回购(无发票,不校验上限) | 无直接对应(SCRAP 部分对应仅退款) | ⚠️ 经销商回购(buy-back)在新链路无独立类型;OE218 option 5 "Accept Credit and Release to stock" 无对应 |
| — | ONLY_GOODS(仅退货,reverseOrderType=2,订单中台有,POTD 未暴露) | 新链路有仅退货类型,Pentana 无对应(退货必伴随贷记) |
| OE216 三类明细:Quantity(退货有库存)/Price(错价无库存)/Tax(错税无库存) | HandlingMethodEnum 两类:RETURN/SCRAP | Pentana 三分(库存/价格/税)→ 新链路二分(退货退款/仅退款);错价/错税贷记的映射需确认 |
isRedInkCountry(默认 GB),不看正向发票;原正向 TI 票号查不到就留空,代码注释明说"SAP 仍接受"。没有 OE218 等价的"未开票杂项贷记"类型。ZSDI_OTD_FPXX;退货红冲 order-tool 推 SAP INVCAT=TI;AR/AP/收款/付款/GL 全在 SAP 侧。🟢已验证对齐 / 🟡业务对齐/迁移/待确认 / 🔴缺失(本次:0)
| 维度 | 评级 | 核心差异 |
|---|---|---|
| 1 触发与前置主数据 | 🟢 | 正向SO已发货(sendNoteNo)即可退货,不要求正向发票已开;ReturnReasonEnum 结构化;可退量自动算;Pentana 需已开票订单+CRRC |
| 2 单据创建 | 🟢 | POTD门面→订单中台逆向单已验证;关联 relationNo/orderNo;HandlingMethodEnum(RETURN/SCRAP) |
| 3 审批流 | 🟢 | 有审批闸门(review @BtnPermission);Pentana OE217 释放无独立闸门 |
| 4 状态机 | 🟡 | 订单中台 RoStatusEnum;不感知正向发票、无"开票与否"分流(Pentana 有 OE216/OE218 分流);红冲回传驱动 |
| 5 库存动作(跨系统两段) | 🟢 | 门店仓出库(POTD本地)→履约中台DN→中台推RDN给OTWB待入库(202)→OTWB入库回调履约中台;与正向发运(201)一致;NSC入库库存归属需对账 |
| 6 物流/运输 | 🟢 | OTWB 物流履约统一入口;退货 RDN 与正向同接口 |
| 7 红冲/退款(职责迁移+业务分流) | 🟡 | Pentana 自持 AR 开 credit note(有开票与否分流)→ iParts 推 SAP 红冲 INVCAT=TI(当前无分流,只看国家白名单);需业务/财务对齐 |
| 8 退货类型 | 🟡 | RETURN/SCRAP vs OE216(Quantity/Price/Tax)+OE218(杂项/回购);错价/错税/回购无独立类型 |
| 9 异常处理 | 🟢 | 拒绝取消占用;NSC退货单自动生成;子公司采购索赔在 GODP(独立域,不在本场景) |
| 10 查询报表 | 🟡 | order-boss 逆向单查询;跨系统对账(POTD+订单中台+履约中台+order-tool+OTWB+SAP) |