# Finance Settlement

> Use when building 商家结算, 账期 T+N, 结算单, 抽佣, 待结算/可结算, merchant payout. Distinct from WeChat 分账 (backend-pay-split-account) and from GMV reports (backend-finance-stats).

- Skill: `1398281322-a11y/finance-settlement` (Agent Skill)
- Install (CLI): `npx skillmds@latest add 1398281322-a11y/finance-settlement`
- Raw SKILL.md: https://api.skillmd.com/api/skills/1398281322-a11y/finance-settlement/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: 1398281322-a11y (https://skillmd.com/u/1398281322-a11y)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/1398281322-a11y/finance-settlement

---


# 商家结算 / 账期

## When to Invoke

门店/商家要打款、T+1/T+7 账期、结算单、平台抽佣后应付。文旅核销后才可结算。面试：「怎么给商家结账」。

## When NOT

微信分账 API → `pay-split-account`（渠道把钱划走）。那是支付通道；本文件是 **平台账本上的应付与账单**。统计 GMV → `finance-stats`。

## 风险（面试考点）

支付成功立刻给商家可提现：退款时平台垫资。默认 **履约完成（发货确认/核销）后进入待结算，账期满可结算**。

结算单与交易单多对多：一笔订单可能跨账期退款，要从下期扣或追缴。不能结算后物理删除明细。

佣金：`应付商家 = 实付 - 平台佣金 - 渠道手续费（看合同）`。尾差规则固定。

和渠道分账同时存在时：渠道已分账则平台结算单只做对账，避免再打一笔。

## 方案选型（轻量优先）

```text
支付成功     → 记账「平台预收」（未对商家负债或冻结）
核销/收货   → 生成结算明细 status=PENDING，账期日=履约日+N
账期到      → 聚合成结算单 SETTLED，可提现/打款
退款        → 未结算明细冲红；已结算则下期扣或应收回
```

```sql
t_settle_item  uk(order_no, sku_line)  -- 一笔履约一行
t_settle_bill  merchant_id + period    -- 账期账单
```

打款：结算单 SUCCESS 才调代付；代付单号稳定，超时查单，见 `pay-refund-channel` 同类「同号重试」。

## 默认方案

日批：把昨日已核销未入明细的订单入 `settle_item`。账期批：PENDING 且 `available_at<=today` 汇总成账单。人工审核或自动打款。

明细保留订单号、核销号、金额分、佣金分，财务可钻取。

## 反例

错误：支付成功就给商家余额++。
正确：履约后才待结算。

错误：结算后 UPDATE 把历史金额改掉。
正确：冲红新行，不动已出账单金额（账单作废走红字单）。

错误：当渠道分账已打给门店，平台再打款一次。
正确：模式互斥或对账扣减。

## 验证

- 核销后未满账期，商家余额不增加。
- 账期内退款，账单金额减少或红字，不出现已打款又全额再打。
- 两门店拆单，各出各的结算明细。

## 评审清单

- [ ] 结算时点是履约不是支付
- [ ] 有账期与账单
- [ ] 退款冲减路径
- [ ] 未与渠道分账双打
---

