Skip to main content

事后折扣总览 (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-Discounts smart button。
  • 财务联动:在发票和贷项通知向导中提示“该订单存在事后折扣”,支持查看明细。
  • 兼容升级pre_init_hook 将旧模块 sale_post_discount 的 XMLID 迁移到新技术名。

3. 销售后处理流程图(给销售)

当订单已经确认或发货后,客户提出“补折扣”请求时,请按下面流程操作:

销售员操作要点(Action-Consequence)

  1. Apply Post Discount
    含义:进入受控向导,而不是直接改订单行价格。
    后果:系统可追溯“谁在什么时候做了折扣”。

  2. 选商品行 + 填折扣值 + 填原因
    含义:折扣是“按行处理”,并且必须有业务理由。
    后果:系统会做累计校验,避免折扣超过原行金额。

  3. 选择 ConfirmConfirm & Invoice
    含义:决定当前只落折扣,还是同步进入财务开票。
    后果:两种都会新增负数折扣行;后者会更快进入财务链路。

  4. 查看 smart button / Discount History
    含义:确认本单折扣是否已生效、是否已开票。
    后果:后续沟通客户或财务时有统一依据。

4. 使用边界与业务口径

  • 仅对已确认订单开放(state in ('sale', 'done'))。
  • 不改库存,不影响原商品发货数量;折扣通过财务负数行体现。
  • 累计折扣受校验,不能超过原商品行金额(防止“折到负数”)。
  • 折扣产品为服务类型且按下单开票,支持立即开票或后续统一开票。

5. 文档大纲(先出结构)

5.1 销售员视角:如何追加事后折扣

  • 何时可以用(订单状态和前置条件)
  • 向导字段含义(比例/固定金额/原因/预览)
  • ConfirmConfirm & Invoice 的差异
  • 订单行状态、Discount History、smart button 怎么看

5.2 财务视角:开票与退款如何处理

  • 折扣行如何进入发票/贷记单
  • 退款时“折后有效价”提示如何解读
  • 如何避免“按原价退款”的错误

5.3 审计与追踪:谁改了什么

  • 审计模型字段说明(reasonuser_iddatestateinvoice_id
  • chatter 留痕与历史查询路径
  • 常见稽核问题与查证路径

6. 下一步

先按上述大纲逐篇落地 SOP,建议顺序:

  1. 10-sales-post-discount.md
  2. 20-finance-credit-note.md
  3. 30-audit-and-reporting.md