事后折扣总览 (Post Discount Overview)
模块定位:
这是我们定制开发的3will_sale_post_discount插件,用于处理“订单已经确认/发货后,才协商补折扣”的业务场景。它不是改原商品行单价,而是通过新增“负数折扣服务行”落地,确保财务可追溯、业务可解释、退款有参考。
1. 这个插件解决什么问题
- 客户在成交后才要求让利,且通常只针对部分商品行。
- 业务希望快速处理,不想回滚整单或手工改发票。
- 财务需要完整审计链路,知道“谁、何时、为何、折了多少”。
- 退款场景要有“折后有效价”提示,减少算错金额的风险。
2. 实际实现方式(基于源码)
- 入口按钮:销售订单在
sale/done状态显示Apply Post Discount。 - 向导模式:支持多商品行一次性折扣,可选百分比或固定金额,必须填写原因。
- 落地机制:每条折扣会在订单上创建一条负数服务行(
POST-DISC)。 - 审计模型:记录在
sale.post.discount/sale.post.discount.line,并写入 chatter。 - 订单可视化:原商品行显示“已折扣”状态,订单出现
Post-Discountssmart button。 - 财务联动:在发票和贷项通知向导中提示“该订单存在事后折扣”,支持查看明细。
- 兼容升级:
pre_init_hook将旧模块sale_post_discount的 XMLID 迁移到新技术名。
3. 销售后处理流程图(给销售)
当订单已经确认或发货后,客户提出“补折扣”请求时,请按下面流程操作:
销售员操作要点(Action-Consequence)
-
点
Apply Post Discount
含义:进入受控向导,而不是直接改订单行价格。
后果:系统可追溯“谁在什么时候做了折扣”。 -
选商品行 + 填折扣值 + 填原因
含义:折扣是“按行处理”,并且必须有业务理由。
后果:系统会做累计校验,避免折扣超过原行金额。 -
选择
Confirm或Confirm & Invoice
含义:决定当前只落折扣,还是同步进入财务开票。
后果:两种都会新增负数折扣行;后者会更快进入财务链路。 -
查看 smart button / Discount History
含义:确认本单折扣是否已生效、是否已开票。
后果:后续沟通客户或财务时有统一依据。
4. 使用边界与业务口径
- 仅对已确认订单开放(
state in ('sale', 'done'))。 - 不改库存,不影响原商品发货数量;折扣通过财务负数行体现。
- 累计折扣受校验,不能超过原商品行金额(防止“折到负数”)。
- 折扣产品为服务类型且按下单开票,支持立即开票或后续统一开票。
5. 文档大纲(先出结构)
5.1 销售员视角:如何追加事后折扣
- 何时可以用(订单状态和前置条件)
- 向导字段含义(比例/固定金额/原因/预览)
Confirm与Confirm & Invoice的差异- 订单行状态、Discount History、smart button 怎么看
5.2 财务视角:开票与退款如何处理
- 折扣行如何进入发票/贷记单
- 退款时“折后有效价”提示如何解读
- 如何避免“按原价退款”的错误
5.3 审计与追踪:谁改了什么
- 审计模型字段说明(
reason、user_id、date、state、invoice_id) - chatter 留痕与历史查询路径
- 常见稽核问题与查证路径
6. 下一步
先按上述大纲逐篇落地 SOP,建议顺序:
10-sales-post-discount.md20-finance-credit-note.md30-audit-and-reporting.md