直播电商公司做内训时,发现一个非常典型的问题:
❌ 财务还在用 Excel 手工算直播收益
❌ 退货没扣干净
❌ 佣金按 GMV 乱算
❌ 多场直播数据对不上
于是我花半天时间,用 Python 搭了一套
「直播间坑位费 × 退货退款 × 佣金」三合一核算系统
今天这篇文章,从业务 → 会计 → 代码 → 工程化,一步一步讲清楚。
一、真实业务场景还原
假设你是品牌方财务:
- 一周 10 场直播
- 每场涉及:
- 坑位费(固定)
- 佣金(按成交)
- 退货退款(滞后)
- 平台技术服务费
- 老板问你一句:
“这场直播,我们到底赚没赚?”
你拿什么回答?
靠 Excel?靠拍脑袋?
二、传统做法的 5 大痛点
环节 问题
坑位费 固定值,无动态
佣金 按 GMV,虚高
退货 滞后、漏扣
平台费 经常被忽略
多场汇总 人工合并,极易错
👉 结论:
这不是“算账”,这是财务风险。
三、核心核算逻辑(会计 + 程序)
1️⃣ 业务公式(重点)
实际成交 = GMV - 退货金额
应付佣金 = 实际成交 × 佣金率
平台服务费 = GMV × 平台费率
品牌总成本 = 坑位费 + 佣金 + 平台费
净支出 = 品牌总成本 - 退货金额
2️⃣ 会计映射关系
程序字段 会计科目
GMV 营业收入
退货金额 销售退回
佣金 销售费用
坑位费 推广费
平台费 技术服务费
四、项目结构设计(工程化)
live_finance/
│
├── models.py # 数据模型
├── validator.py # 数据校验
├── engine.py # 核算引擎
├── aggregator.py # 多场汇总
├── main.py # 程序入口
└── README.md
✅ 不写面条代码
✅ 每一层都有明确职责
五、核心代码实现(完整展示)
1️⃣ models.py(领域模型)
from dataclasses import dataclass
from typing import Optional
@dataclass
class LiveOrder:
"""
单场直播订单数据模型
"""
live_id: str # 直播场次ID
anchor: str # 主播名称
gmv: float # 总成交额
return_amount: float # 退货金额
commission_rate: float # 佣金比例
platform_rate: float # 平台服务费率
slot_fee: float # 坑位费
refund_days: Optional[int] = None # 退货周期(可选)
2️⃣ validator.py(数据校验)
class OrderValidator:
"""
订单数据合法性校验
"""
@staticmethod
def validate(order):
if order.gmv < 0:
raise ValueError("GMV 不能为负数")
if order.return_amount > order.gmv:
raise ValueError("退货金额不能大于 GMV")
if not 0 <= order.commission_rate <= 1:
raise ValueError("佣金率必须在 0~1 之间")
if not 0 <= order.platform_rate <= 1:
raise ValueError("平台费率必须在 0~1 之间")
3️⃣ engine.py(核算引擎)
class FinanceEngine:
"""
单场直播财务核算引擎
"""
def __init__(self, order):
self.order = order
def real_sales(self) -> float:
"""
实际成交金额
"""
return self.order.gmv - self.order.return_amount
def commission(self) -> float:
"""
应付佣金
"""
return self.real_sales() * self.order.commission_rate
def platform_fee(self) -> float:
"""
平台技术服务费
"""
return self.order.gmv * self.order.platform_rate
def brand_total_cost(self) -> float:
"""
品牌方总成本
"""
return (
self.order.slot_fee
+ self.commission()
+ self.platform_fee()
)
def return_rate(self) -> float:
"""
退货率
"""
return self.order.return_amount / self.order.gmv
def summary(self) -> dict:
"""
单场核算结果汇总
"""
return {
"live_id": self.order.live_id,
"anchor": self.order.anchor,
"gmv": self.order.gmv,
"real_sales": self.real_sales(),
"commission": self.commission(),
"platform_fee": self.platform_fee(),
"slot_fee": self.order.slot_fee,
"brand_cost": self.brand_total_cost(),
"return_rate": round(self.return_rate(), 4)
}
4️⃣ aggregator.py(多场汇总)
class ReportAggregator:
"""
多场直播财务结果汇总
"""
@staticmethod
def aggregate(results: list[dict]) -> dict:
return {
"total_gmv": sum(r["gmv"] for r in results),
"total_real_sales": sum(r["real_sales"] for r in results),
"total_commission": sum(r["commission"] for r in results),
"total_platform_fee": sum(r["platform_fee"] for r in results),
"total_slot_fee": sum(r["slot_fee"] for r in results),
"total_brand_cost": sum(r["brand_cost"] for r in results),
"avg_return_rate": round(
sum(r["return_rate"] for r in results) / len(results), 4
)
}
5️⃣ main.py(程序入口)
from models import LiveOrder
from validator import OrderValidator
from engine import FinanceEngine
from aggregator import ReportAggregator
def main():
# 模拟多场直播数据
orders = [
LiveOrder(
live_id="L001",
anchor="主播A",
gmv=100000,
return_amount=20000,
commission_rate=0.20,
platform_rate=0.05,
slot_fee=10000
),
LiveOrder(
live_id="L002",
anchor="主播B",
gmv=80000,
return_amount=10000,
commission_rate=0.18,
platform_rate=0.05,
slot_fee=8000
)
]
results = []
for order in orders:
# 数据校验
OrderValidator.validate(order)
# 单场核算
engine = FinanceEngine(order)
results.append(engine.summary())
# 多场汇总
report = ReportAggregator.aggregate(results)
print("====== 单场核算结果 ======")
for r in results:
print(r)
print("\n====== 多场汇总结果 ======")
print(report)
if __name__ == "__main__":
main()
六、运行效果示例
====== 单场核算结果 ======
{'live_id': 'L001', 'anchor': '主播A', 'gmv': 100000, ...}
{'live_id': 'L002', 'anchor': '主播B', 'gmv': 80000, ...}
====== 多场汇总结果 ======
{
'total_gmv': 180000,
'total_real_sales': 150000,
'total_commission': 27000,
'total_platform_fee': 9000,
'total_slot_fee': 18000,
'total_brand_cost': 54000,
'avg_return_rate': 0.1667
}
七、核心知识点总结(面试 / 考试常考)
技术点 说明
dataclass 简化类定义
分层设计 模型 / 校验 / 引擎
权责发生制 退货必须扣
工程化思维 拒绝脚本式代
利用AI解决实际问题,如果你觉得这个工具好用,欢乐关注长安牧笛!