业务口径分销开票
繁花惠 / 优花速达开票
票种与出票方、金额拆分与封顶规则、物流费算法、申请撤销口径、「为什么没看到」速查表、拍板时间线
Markdown 原文(给 AI 用):https://doc.xfun.fun/partner-invoice-logic.md
哪些订单能进开票池
- 分销小程序(繁花惠 / 优花速达)的订单,订单状态为 已完成;
- 确认收货时间在近 3 个月内(没有确认收货时间的订单不进池,测试造数时注意补 confirm_time);
- 发票、收据共用同一个池子,一个订单的钱按下面的规则拆到各票种,互不重复。
票种一览
| 票种 | 内容 | 出票方 | 进入条件 |
|---|---|---|---|
| 花材发票 | 可开票供应商的花材款,按 供货价×数量 | 对应供应商 | 该供应商已标记「可开票」 |
| 花材收据 | 未标记可开票供应商的花材款 | 平台出具(分平台盖章) | 供应商未标记可开票 |
| 干线物流费发票 | 订单的物流费(算法见「物流费专项」) | 捷通公司 | 订单实际使用的 物流商已标记「可开票」 |
| 物流费收据 | 同上 | 平台出具 | 物流商未标记可开票 |
| 供应链服务费发票 | 订单的打包服务费 | 花序公司 | 有剩余额度即生成 |
| 平台服务费发票 | 以上都分完后的 剩余部分 | 花古德公司 | 剩余额度 > 0 |
两个「可开票」开关都在运营端维护:供应商侧是商品/供应商的可开票标识,物流商侧是物流列表里的「是否可开票」。注意物流商是按 订单实际发货用的物流商判断,不是下单页选的那个名字相近的。
金额怎么拆(核心规则)
一切从「这单实际付了多少钱」出发:
可开票总额 = 现金实付 + 寻梦币抵扣 (寻梦币按正常付款算,9-18 拍板)
优惠券 / 满减 / 平台补贴 不算钱,会等比压缩能开的票按固定顺序分配,每一步都不能超过还剩的额度:
花材(发票 + 收据) 按各供应商供货价×数量;可开票供应商进发票,其余进收据
物流费 三者取最小:实际运费、订单物流加价、剩余额度(详见「物流费专项」)
供应链服务费 = min(订单打包服务费, 剩余额度)
平台服务费 = 前面全部分完后的剩余,剩多少开多少
钱不够时的兜底:实付连花材都覆盖不了时,先从 收据里扣,收据扣到 0 还不够,再按比例压低 花材发票。所以永远满足恒等式:
花材发票 + 花材收据 + 物流费 + 供应链服务费 + 平台服务费 = 实付(含寻梦币)两个测试期间的真实例子
| 场景 | 数据 | 结果 |
|---|---|---|
| 实付低于供货价 | 实付145.52,供货价 90(可开票)+60(收据)=150 | 发票 90 全额保住,收据 60−4.48= 55.52,服务费/物流/平台全为 0 |
| 物流加价被剩余额度封顶 | 实付29.90,花材 15+8.8=23.8,加价10.8,运费100 | 物流费 = min(100, 10.8, 剩余6.10) = 6.10 |
物流费专项
- 实际运费取发货单的实付运费减赔付,不要求物流结算完成(9-18 拍板:录了运费就能用);
- 运费是发货单级的,同一发货单下多笔订单按各自的 物流加价等比分摊;
- 已开过物流票的部分从发货单额度里扣掉,同一发货单不会开两遍;
- 单笔订单票面 = min(分摊到的实际运费, 该订单物流加价, 剩余额度);
- 物流商可开票 → 捷通发票;不可开票 → 进收据;运费超过加价的部分本来就开不出,加价超过实付剩余的部分计入不了。
申请、撤销与记录
- 一键申请:默认发票+收据一起申请;也支持 只开发票或 只开收据(9-9 拍板可分开)。收据按平台各出一张,两行汇总(花材 / 物流),场次文案如「2026.08.04-2026.09.19 共三个场次」。
- 发票撤销:待商家开票的可撤;供应商已在开票平台受理或已开出的,撤销入口消失且接口拒绝。撤销后的额度回到池子可重新申请。
- 收据不可撤销(产品口径),开过收据的订单不再回池。测试期间造废的收据要清数据才能重开。
- 开票记录按申请单/票据维度展示;平台三项每类合并为一张票据,卡片和详情都显示真实关联订单数(9-18 修正)。
- 分组名不带公司前缀(显示「平台服务费」而非「花古德公司-平台服务费」,9-18 拍板),出票公司在票据详情中展示。
运营端
- 平台开票列表:只展示供应链服务费 / 干线物流费 / 平台服务费三类,支持按平台(繁花惠/优花速达)筛选,带三格金额汇总;
- 发票申请列表:花材类发票在这里看,新增平台筛选与平台字段;
- 物流商管理:新增/编辑物流商时可设置「是否可开票」(该开关 9-18 修复后已生效);
- 平台三项由内部开票公司的供应商账号出票,不进逾期扣款、不发短信。
「为什么没看到」速查表
测试期间实际遇到的全部案例,产品和测试可按这张表自查:
| 现象 | 原因 | 怎么让它出现 |
|---|---|---|
| 整个池子是空的 | 订单没确认收货,或超过 3 个月 | 走完确认收货,测试数据补 confirm_time |
| 某供应商花材只在收据里 | 该供应商未标「可开票」 | 运营端标记后重新看 |
| 没有物流费 | 发货单没录运费 / 订单物流加价为 0 / 实付剩余为 0 / 物流商未标可开票(注意认准订单实际用的那家) | 四个条件逐一核对 |
| 没有服务费 / 平台服务费 | 实付(含寻梦币)扣完花材已经没有剩余 | 下一单不用优惠,实付高于供货价合计 |
| 金额比预期小 | 用了优惠/满减,开票总额被实付封顶,按顺序从后往前砍 | 属正常口径,票面合计恒等于实付 |
| 订单在别的账号看不到 | 各账号只能看自己的池子 | 用下单账号查看 |
| 开过收据的订单不见了 | 收据不可撤销,订单已被占用 | 属正常口径 |
本轮测试确认的口径(时间线)
| 日期 | 拍板内容 |
|---|---|
| 09-09 | 发票与收据可以分开申请;收据只装不可开票部分 |
| 09-18 | 寻梦币按正常付款计入可开票总额(不是优惠券) |
| 09-18 | 票据分组名去掉「XX公司-」前缀 |
| 09-18 | 平台项卡片显示真实订单数(原固定为 1) |
| 09-18 | 物流费不再要求发货单已结算,录入运费即可用 |
说明
一个已知风险(物流费不等结算的代价):未结算的运费金额没有写保护,结算被驳回时金额会清零,但先开出去的票不会回滚。产品已知悉并接受。
依据测试环境当前部署版本整理(purchaser / admin 均为 9-18 之后的构建)。数据示例均来自本轮真实测试订单。