业务口径分销开票
繁花惠 / 优花速达开票
开票池范围、票种与出票方、开票快照与金额拆分、物流费取数、申请撤销口径、「为什么没看到」速查表
Markdown 原文(给 AI 用):https://doc.xfun.fun/partner-invoice-logic.md
哪些订单能进开票池
同时满足以下条件的订单进入开票池,发票、收据共用这一个池子:
- 分销小程序(繁花惠 / 优花速达)的订单,订单状态为 已完成;
- 确认收货满 5 天,且在 95 天内(没有确认收货时间的订单不进池,测试造数时注意补 confirm_time);
- 场次 ≥ 2026-10-01;
- 已生成 开票快照(每日任务为确认收货满 5 天的订单生成,见「开票快照」)。
页面上的 30 / 60 / 90 天筛选是在这个池子里再按确认收货时间收窄。
票种一览
| 票种 | 内容 | 出票方 | 进入条件 |
|---|---|---|---|
| 花材发票 | 可开票供应商的花材款 | 对应供应商 | 生成快照时该供应商已标记「可开票」 |
| 花材收据 | 未标记可开票供应商的花材款,收据行名「鲜切花」 | 平台出具(分平台盖章) | 供应商未标记可开票 |
| 干线物流费发票 | 订单的物流费(算法见「物流费」) | 捷通公司 | 订单实际使用的 物流商已标记「可开票」,且物流费取自真实运费 |
| 物流费收据 | 同上,收据行名「物流-平台服务费」 | 平台出具 | 物流商未标记可开票,或物流费按物流加价兜底 |
| 供应链服务费发票 | 订单的打包服务费 | 花序公司 | 有剩余额度即生成 |
| 平台服务费发票 | 以上都分完后的 剩余部分 | 花古德公司 | 剩余额度 > 0 |
两个「可开票」开关都在运营端维护:供应商侧是供应商的可开票标识,物流商侧是物流列表里的「是否可开票」。物流商按 订单实际发货用的物流商判断,不是下单页选的那个名字相近的。两个开关都在生成快照时读取,之后再改不影响已生成快照的订单。
开票快照
- 订单确认收货满 5 天时,每日任务按当时的数据拆分一次金额并固化;之后运费、可开票状态、售后都不再改变开票金额,申请时只读快照。
- 快照时各票据项之和恒等于用户实付(现金 + 寻梦币,已扣优惠券、满减和快照前的售后退款)。
- 快照之后才发生的售后不再扣减,这是唯一会出现「实开 > 最终实付」的情况。
- 已经被通用勾选流程申请过、或已开过收据的存量订单,按发货单实际运费固化,保证与已开出的金额一致。
拆分顺序、售后「谁售后扣谁」、优惠券怎么吸收和带数字的例子,见「分销开票金额拆分(方案二·售后扣减)」。
金额怎么拆(核心规则)
可开票总额 = 现金实付 + 寻梦币抵扣 (寻梦币按正常付款算)
优惠券 / 满减 / 平台补贴 不算钱,会压缩能开的票按固定顺序分配,每一步都不能超过还剩的额度:
花材(发票 + 收据) 各供应商 供货价×数量 − 该供应商承担的发货后售后额;可开票供应商进发票,其余进收据
物流费 三者取最小:物流成本、订单物流加价、剩余额度(详见「物流费」)
供应链服务费 = 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 |
物流费
- 物流成本:繁花到店(繁花惠订单挂城市仓)取城市仓当场录入的运费,按重量分到该仓当场全部发货单,再分到订单;其余订单取发货单实付运费减补偿/赔付,不要求物流结算完成;
- 发货单级的运费按发货单下全部分销订单的 物流加价等比分摊到订单;
- 取不到物流成本(为 0)时,按订单物流加价兜底,这部分一律开 收据;
- 单笔订单物流费 = min(物流成本, 该订单物流加价, 剩余额度);
- 物流商可开票且物流费取自真实运费 → 捷通发票;否则进收据。
物流费的完整口径和繁花包干城市仓订单见「开票物流费与繁花包干」。
申请、撤销与记录
- 发票申请:发票中心按费用类型勾选(花材款 / 供应链服务费 / 干线物流费 / 平台服务费),可按 30 / 60 / 90 天筛选;金额由快照固定,勾选只决定本次开哪些类型,未勾的留在池子里下次再开。花材款只能整体勾选。
- 收据申请:「去开收据」同样可按费用类型(花材款 / 干线物流费)和时间勾选,与发票侧筛选相互独立。收据按平台各出一张,两行汇总(鲜切花 / 物流-平台服务费),场次文案如「2026.10.04-2026.11.01 共三个场次」。
- 发票撤销:按申请单撤销,全部票据都未开才可撤;任一票据已开或已被开票平台受理,整单不可撤。撤销后额度回到池子可重新申请。
- 收据不可撤销(产品口径),开过收据的订单该项不再回池。测试期间造废的收据要清数据才能重开。
- 开票记录按申请单展示,汇总状态有待商家开票 / 已开发票 / 部分开票 / 已撤销;平台三项每类一张票据,卡片和详情显示真实关联订单数。
- 分组名不带公司前缀(显示「平台服务费」而非「花古德公司-平台服务费」),出票公司在票据详情中展示。
- 逾期:超 30 天未上传变「已逾期」,花店得申请金额 2% 的寻梦币补偿;逾期后补开的票仍带逾期标识。
运营端
- 平台开票列表:平台三项(供应链服务费 / 干线物流费 / 平台服务费)一条票据一行;花材款按申请单聚合成一行,点开看各供应商明细。支持按平台(繁花惠 / 优花速达)筛选,带三格金额汇总;
- 发票申请列表:可按开票类型 / 所属平台筛选,返回平台字段;
- 物流商管理:新增 / 编辑物流商时可设置「是否可开票」;
- 平台三项由内部开票公司的供应商账号出票,不进逾期扣款、不发短信。
「为什么没看到」速查表
| 现象 | 原因 | 怎么让它出现 |
|---|---|---|
| 整个池子是空的 | 订单没确认收货、确认收货不满 5 天、超过 95 天,或场次早于 2026-10-01 | 走完确认收货并等满 5 天(测试数据可补 confirm_time 后手动跑快照任务) |
| 提交时报「开票金额尚未生成」 | 订单还没有快照 | 等每日快照任务,或测试环境手动执行快照任务 |
| 某供应商花材只在收据里 | 生成快照时该供应商未标「可开票」 | 快照已生成的订单不会再变;之后确认收货的订单按新标记生成 |
| 物流费在收据里 | 物流商未标可开票,或没取到运费、按物流加价兜底 | 核对订单实际用的物流商和发货单运费 |
| 没有物流费 | 订单物流加价为 0 / 实付扣完花材已无剩余 | 逐一核对 |
| 没有服务费 / 平台服务费 | 实付(含寻梦币)扣完花材已经没有剩余 | 下一单不用优惠,实付高于供货价合计 |
| 金额比预期小 | 用了优惠/满减,开票总额被实付封顶,按顺序从后往前砍;或快照前发生了售后 | 属正常口径,快照时票面合计恒等于实付 |
| 订单在别的账号看不到 | 各账号只能看自己的池子 | 用下单账号查看 |
| 开过收据的订单不见了 | 收据不可撤销,该项已被占用 | 属正常口径 |
| 切了 30 天筛选后订单变少 | 时间筛选按确认收货时间收窄 | 切到 90 天或不传 |
依据代码:PartnerInvoiceLogic、PartnerInvoiceSnapshotLogic、PartnerLogisticsCostProvider、PurchaserReceiptLogic(xm-bulky-mall-purchaser,bulky-test/purchaser)。