Python / pandas / 合同业务即代码

合作方分账引擎

用 pandas 做多源对账、按合作方分账、可直接复核的 Excel 输出,全部脚本化。

这些 notebook 是 contract-business-as-code:合作方的分成比例、支付通道扣费、退款抵扣、产线到结算渠道的映射规则,从合同条款和业务规则里读出来,再 codify 成 pandas pipeline,按合作方输出可直接付款的多 sheet 应付应收明细。一只眼睛读合同,一只眼睛写 pandas——这个交叉技能,是之后做数据治理和企业级 ERP 交付能自然衔接上的前置。

Script Patterns批量读取、编码处理、字段类型修正、merge、按合作方分类、ExcelWriter
Business Objects订单号、产线、渠道、合作方类别、分成比例、支付通道扣费、退款抵扣
Use Case多源对账、按合作方分账引擎、入口匹配、CSV 转 Excel
Public Boundary只展示脱敏代码结构,不展示真实合作方名、分成比例、账号和订单数据

业务流

从业务现场到复核结论

01读取多文件
02统一编码
03修正字段类型
04按合作方分类
05套合同规则
06按合作方出 sheet
07交付财务付款

证据模式

这证明了什么能力

多源对账脚本把官方 CSV 流水和开发 TXT 导出做订单号匹配,找出未进入官方流水的补充金额。

合作方分账脚本把合同里的分成比例、支付通道扣费、退款抵扣 codify 成代码,按合作方输出多 sheet 可直接付款的应付明细,财务拿到即可走付款。

入口匹配脚本处理账号字段与开通号码匹配,暴露了字段类型治理为什么必须在 merge 之前做完。

CSV 转 Excel 工具把一次性 notebook 逻辑改造成可选择文件、可提示错误、可记录日志的小工具。

处理模型

问题、处理方式和系统价值

01

业务问题

运营数据来自不同系统,编码、字段类型、订单号、金额单位都不一致;结算规则不在任何系统里,只在合同里。

02

处理方式

先把 key 和字段类型统一,再把合同条款(分成比例、扣费、退款逻辑)codify 成常量,再用 pandas 做 merge、合作方分类、ExcelWriter 输出按合作方拆分的应付应收账单。

03

系统价值

这些 pipeline 不是品牌交付物,但它们证明的交叉技能——读合同的同时写代码——和后来把数据治理、企业级 ERP 从需求做成可运行软件,是同一套技能。

脱敏代码

sanitized notebook pattern

# Pattern A — multi-source reconciliation across systems
official = pd.concat(
    pd.read_csv(file, encoding="gb18030")
    for file in glob("official_flow_*.csv")
)
dev = pd.concat(
    pd.read_csv(file, sep="\t")
    for file in glob("*export.txt")
)
joined = pd.merge(dev, official, how="left", on="order_id")
unmatched = joined[joined["official_amount"].isna()]

# Pattern B — contract-business-as-code: per-partner settlement
# Real rev-share rates, fees, and channel codes omitted per NDA
flow["partner"] = "other"
flow.loc[flow["line"].isin(VENDOR_A_LINES), "partner"] = "vendor_a"
flow.loc[flow["line"].isin(LICENSEE_B_LINES), "partner"] = "licensee_b"

books = {}
for partner, rate in PARTNER_RATES.items():
    sub = flow[flow["partner"] == partner]
    net = sub["gross"].sum() - REFUNDS[partner]
    books[partner] = {
        "monthly_payable": round(net * PSP_NET * rate["monthly"], 2),
        "oneoff_payable": round(sub["oneoff"].sum() * PSP_NET * rate["oneoff"], 2),
    }

with pd.ExcelWriter("partner_settlement.xlsx") as w:
    for partner, book in books.items():
        pd.DataFrame([book]).to_excel(w, sheet_name=partner, index=False)