以下情境为教学假设,人物与数字不代表经核实的真实案例。
合同里写「争议提交某某法院」或「提交某某仲裁机构」时,多数人只把它当成一句格式条款。等到真的发生争议,这句话会决定三件事:你要飞到哪里、要请哪个地方的律师、以及多久之后才可能拿到钱。调解、仲裁和诉讼不是三种态度,而是三组成本结构。选错的代价,往往比争议本身还大。
三种程序的三组成本
把每种程序看成一个项目,它的输入是争议金额,输出是期望净得。成本分三块:内部工时(按机会成本算)、固定费用( mediator、仲裁机构、法院和律师)、以及时间(影响折现和执行)。
| 程序 | 典型周期 | 内部工时 | 固定费用(教学假设) | 回收概率(教学假设) | 执行特点 |
|---|---|---|---|---|---|
| 调解 | 1–2 个月 | 6 小时 | 1,000 | 65% | 和解靠自愿履行,无强制力 |
| 仲裁 | 12–18 个月 | 12 小时 | 8,500 | 70% | 跨境承认与执行通常更便利 |
| 诉讼 | 18–36 个月 | 20 小时 | 21,200 | 75% | 本地法院执行,跨境更麻烦 |
固定费用的拆分也要说清楚。调解的 1,000 是调解员费用;仲裁的 8,500 是机构受理费 2,500 加律师与准备 6,000;诉讼的 21,200 是法院费用 1,200 加律师 20,000。内部工时按 Nord 的 85 美元/小时计:调解 510、仲裁 1,020、诉讼 1,700。所有金额、周期和概率都是教学假设,不是报价,也不是统计结果。
回收概率为什么递增?调解没有强制力,但双方还愿意谈;仲裁有裁决,跨境执行通常比法院判决便利;诉讼有法院强制执行,但周期最长。递增不是无限的:70% 和 75% 都已经包含「胜诉但执行不到」的情形,不能当成胜诉率。
管辖条款:差旅和本地律师费要提前进表
「管辖」在财务上不是法律概念,而是一笔额外固定费用。如果合同约定在客户所在地解决争议,你就要把差旅、当地律师和语言成本加进固定费用。教学假设下,这笔增量在 5,000 到 15,000 之间。
以仲裁为例,原本固定费用 8,500;如果必须去对方所在地,加 6,000 的当地律师与差旅,固定费用变成 14,500。盈亏平衡点从:
(8,500 + 1,020) ÷ 70% = 13,600
变成:
(14,500 + 1,020) ÷ 70% = 22,171
也就是说,一笔 20,000 的争议,在本地仲裁是正的(20,000 × 70% − 9,520 = 4,480),在对方所在地仲裁就变成负的(14,000 − 15,520 = −1,520)。同一份合同、同一笔钱,只因为管辖地不同,结论反转。签约时把管辖地当成价格条款看,而不是当成法律条款看,这个差别就会提前暴露。
仲裁地、调解地和诉讼地可以不同。仲裁地决定程序法和裁决的承认执行,调解地通常只影响会议成本,诉讼地决定法院和律师。三者不要混为一谈;财务上要加的是「你实际要去哪里、要请哪里的律师」,而不是条款里出现了几个地名。
用 11,264 算三种程序的期望净得
Nord 的应收是 11,264 美元。把三种程序代进同一个公式:
期望回收 = 争议金额 × 回收概率
期望净得 = 期望回收 − 内部工时成本 − 固定费用
| 程序 | 期望回收 | 内部成本 | 固定费用 | 期望净得 | 盈亏平衡争议额 |
|---|---|---|---|---|---|
| 调解 | 7,321.60 | 510 | 1,000 | 5,811.60 | 2,323 |
| 仲裁 | 7,884.80 | 1,020 | 8,500 | −1,635.20 | 13,600 |
| 诉讼 | 8,448.00 | 1,700 | 21,200 | −14,452.00 | 30,533 |
这张表最重要的不是「调解最好」,而是「同一个金额在不同程序下的符号不同」。11,264 的争议,调解净得 5,811.60,仲裁净得 −1,635.20,诉讼净得 −14,452。仲裁和诉讼不是「更正式所以更好」,它们在这个金额上只是更贵。
盈亏平衡点的公式是:
盈亏平衡争议额 = (内部成本 + 固定费用) ÷ 回收概率
调解是 (510 + 1,000) ÷ 65% = 2,323;仲裁是 (1,020 + 8,500) ÷ 70% = 13,600;诉讼是 (1,700 + 21,200) ÷ 75% = 30,533。低于平衡点的争议,程序本身的成本就超过了概率加权后的回收,和对方有没有理无关。
时间价值会让表更难看的。按 10% 折现率,仲裁 18 个月后的 7,884.80 只值 6,834.42,净得 −2,685.58;诉讼 30 个月后的 8,448 只值 6,656.90,净得 −16,243.10;调解 2 个月后的 7,321.60 值 7,206.22,净得 5,696.22。周期越长,折现吃掉的钱越多,而固定费用是现在就要付的。
这也解释了为什么争议金额稍大时,仲裁会突然变得可行。同样 70% 的回收概率、同样 9,520 的总成本,争议额 20,000 时净得 4,480,争议额 13,600 时净得 0。仲裁的固定成本高,但它不随争议金额线性增长;金额越大,固定成本被摊得越薄。
决策矩阵:争议金额 × 程序成本
把上面的平衡点拼成一张矩阵,就可以在争议发生时不靠情绪选程序。下表的分档以本节的教学假设为准,换辖区、换律师报价后要重算。
| 争议金额 | 调解 | 仲裁 | 诉讼 | 建议路径 |
|---|---|---|---|---|
| 低于 2,323 | 负 | 负 | 负 | 提醒、和解或核销,不进入正式程序 |
| 2,323–13,600 | 正 | 负 | 负 | 先调解;调解不成再评估是否止损 |
| 13,600–30,533 | 正 | 正 | 负 | 调解优先;证据强且对方有资产时可选仲裁 |
| 高于 30,533 | 正 | 正 | 正 | 比较执行难度和周期,仲裁或诉讼都可能可行 |
这张矩阵的读法是「先看符号,再看大小」。符号为负的格子,不需要再讨论对方是否违约;正负号只由金额、成本、概率决定。符号为正的格子,再比较期望净得和回收周期。
小额争议走仲裁不经济,原因就在第一行和第二行。2,323 以下,连调解的固定成本都收不回来;2,323 到 13,600 之间,调解是唯一为正的程序,仲裁的 8,500 固定费用把期望回收吃光了。很多独立开发者觉得「仲裁比诉讼便宜」,这个印象只在跨境执行和保密性上有优势;在 11,264 这个金额上,仲裁比调解的总成本高 8,010,期望净得反而低 7,446.80。
LedgerLite 的单客户年费是 924,12 个月费用的责任上限也是 924;这个金额低于调解 2,323 的平衡点,连调解都不经济。订阅争议的正确路径是提醒、抵扣或核销,而不是仲裁;260 家客户的结构也决定了逐笔打官司会吞掉支持产能。
调解也不是无条件好。调解的 65% 回收概率包含「达成和解但对方不履行」的情形;如果对方已经失联或没有可执行资产,调解协议只是一张纸。这时要考虑的是保全和止损,而不是继续换程序。对方破产或失联的回收顺序见 4.3 对方破产或失联:能拿回多少 。
写成代码:dispute.ts
下面的 dispute.ts 把每种程序写成 ProcedureCost,用 evaluateProcedure 算期望回收、内部成本、固定费用、期望净得、折现后净得和盈亏平衡争议额,用 compareProcedures 一次算完三种程序,用 bestProcedure 选出期望净得最高的一种。
// file: src/contract/dispute.ts
// tier: L1
// verify: node --test test/contract/dispute.test.ts
import { type Cents } from "../core/money.ts";
import { type Bps, applyRate } from "../core/rate.ts";
import { type Result, fail, ok } from "../core/result.ts";
export type Procedure = "mediation" | "arbitration" | "litigation";
export type ProcedureCost = {
procedure: Procedure;
internalHours: number;
hourlyCostCents: Cents;
fixedCostCents: Cents;
durationMonths: number;
recoveryBps: Bps;
};
export type ProcedureResult = {
procedure: Procedure;
claimCents: Cents;
expectedRecoveryCents: Cents;
internalCostCents: Cents;
totalCostCents: Cents;
expectedNetCents: Cents;
discountedNetCents: Cents;
breakEvenClaimCents: Cents;
durationMonths: number;
};
function checkAmount(value: Cents, label: string): Result<true> {
if (!Number.isInteger(value) || value < 0) {
return fail(`${label} must be a non-negative integer amount in cents`);
}
return ok(true);
}
function checkRate(value: Bps, label: string): Result<true> {
if (!Number.isInteger(value) || value < 0 || value > 10000) {
return fail(`${label} must be between 0 and 10000 bps`);
}
return ok(true);
}
/**
* A procedure is a project: expected recovery is probability-weighted cash,
* while internal hours and fixed fees are paid whether or not the claim wins.
* The break-even claim is the amount at which expected net is zero, so a
* small invoice can be routed away from an expensive forum without arguing
* about the merits. Discounting puts the recovery at its present value
* because the cash arrives months after the cost.
*/
export function evaluateProcedure(
claimCents: Cents,
cost: ProcedureCost,
discountRateBps: Bps = 1000,
): Result<ProcedureResult> {
if (!Number.isInteger(claimCents) || claimCents <= 0) {
return fail("claim must be a positive integer amount in cents");
}
if (!Number.isInteger(cost.internalHours) || cost.internalHours < 0) {
return fail("internal hours must be a non-negative integer");
}
const hourly = checkAmount(cost.hourlyCostCents, "hourly cost");
if (!hourly.ok) {
return hourly;
}
const fixed = checkAmount(cost.fixedCostCents, "fixed cost");
if (!fixed.ok) {
return fixed;
}
if (!Number.isFinite(cost.durationMonths) || cost.durationMonths <= 0) {
return fail("duration months must be greater than zero");
}
const recovery = checkRate(cost.recoveryBps, "recovery rate");
if (!recovery.ok) {
return recovery;
}
if (cost.recoveryBps === 0) {
return fail("recovery probability must be greater than zero");
}
const discount = checkRate(discountRateBps, "discount rate");
if (!discount.ok) {
return discount;
}
const internalCostCents = Math.round(cost.internalHours * cost.hourlyCostCents);
const totalCostCents = internalCostCents + cost.fixedCostCents;
const expectedRecoveryCents = applyRate(claimCents, cost.recoveryBps);
const years = cost.durationMonths / 12;
const discountedRecoveryCents = Math.round(
expectedRecoveryCents / Math.pow(1 + discountRateBps / 10000, years),
);
return ok({
procedure: cost.procedure,
claimCents,
expectedRecoveryCents,
internalCostCents,
totalCostCents,
expectedNetCents: expectedRecoveryCents - totalCostCents,
discountedNetCents: discountedRecoveryCents - totalCostCents,
breakEvenClaimCents: Math.ceil(
(totalCostCents * 10000) / cost.recoveryBps,
),
durationMonths: cost.durationMonths,
});
}
/**
* Each procedure is evaluated as a standalone path. Summing them would add
* the same claim three times, once per forum.
*/
export function compareProcedures(
claimCents: Cents,
costs: ProcedureCost[],
discountRateBps: Bps = 1000,
): Result<ProcedureResult[]> {
if (costs.length === 0) {
return fail("at least one procedure is required");
}
const results: ProcedureResult[] = [];
for (const cost of costs) {
const evaluated = evaluateProcedure(claimCents, cost, discountRateBps);
if (!evaluated.ok) {
return evaluated;
}
results.push(evaluated.value);
}
return ok(results);
}
/**
* Pick the highest expected net. A tie keeps the earlier, cheaper procedure
* so the model never escalates without a positive gain.
*/
export function bestProcedure(
results: ProcedureResult[],
): ProcedureResult | null {
if (results.length === 0) {
return null;
}
let best = results[0];
for (const result of results) {
if (result.expectedNetCents > best.expectedNetCents) {
best = result;
}
}
return best;
}
把 Nord 的 1,126,400 美分代进去:调解返回期望回收 732,160、总成本 151,000、净得 581,160、平衡点 232,308;仲裁返回期望回收 788,480、总成本 952,000、净得 −163,520、平衡点 1,360,000;诉讼返回期望回收 844,800、总成本 2,290,000、净得 −1,445,200、平衡点 3,053,334。bestProcedure 在三种里选调解。
代码不处理执行风险、对方资产状况和管辖地带来的额外差旅;这些都会改变固定费用或回收概率,调用前手工调整输入即可。折现率默认 10%,是一个教学假设,不是资金成本的真实估计;换成自己的资金成本,比较结论可能变,但公式不变。
小结
- 程序选择是三组成本:内部工时、固定费用、时间;回收概率只是其中一半。
- 11,264 的争议:调解净得 5,811.60,仲裁 −1,635.20,诉讼 −14,452;只有调解为正。
- 盈亏平衡点:调解 2,323、仲裁 13,600、诉讼 30,533;低于平衡点的争议不应进入该程序。
- 管辖地会改变固定费用:加 6,000 的当地律师与差旅,仲裁平衡点从 13,600 升到 22,171。
- 按 10% 折现,仲裁净得降到 −2,685.58,诉讼降到 −16,243.10;时间越长越不利。
- 小额争议走仲裁不经济:8,500 的固定费用在 11,264 的金额上收不回来。
- 调解不是无条件好;对方失联或没有可执行资产时,和解协议也只是一张纸。
- 矩阵先看符号,再看大小;符号由金额、成本、概率决定,不由对方是否有理决定。
阅读导航:上一节:5.1 违约的四种形态 · 下一节:5.3 证据链与止损 。
常见错误与边界
- 把仲裁当成「更便宜的诉讼」。 仲裁的固定费用 8,500 在 11,264 的争议上远高于调解的 1,000;便宜与否取决于金额。
- 只比律师费,不比内部工时。 20 小时的诉讼准备按 85 美元/小时是 1,700,这笔机会成本经常被漏掉。
- 忽略管辖地的差旅成本。 对方所在地仲裁要多 5,000–15,000;20,000 的争议可能因此从正变负。
- 把回收概率当胜诉率。 70% 和 75% 已包含执行不到的情形;胜诉不等于拿到钱。
- 不做盈亏平衡。 13,600 是仲裁的门槛;低于门槛的争议,程序成本已经超过期望回收。
- 忽略时间价值。 18 个月后的 7,884.80 按 10% 折现只值 6,834.42;固定费用却是现在付。
- 把三种程序的期望值相加。 它们是同一笔争议的三条路径,相加会把同一笔钱算三次。
- 调解不成就立刻升级。 升级前要重算新程序的平衡点;金额没变,成本变了,结论可能反转。
- 在对方失联时继续选程序。 没有可执行资产时,裁决只是纸;应先保全和止损,而不是换一个更贵的程序。
- 把教学费率当报价。 调解员、仲裁机构和律师的收费因辖区和复杂度差异很大;表里的数字只用于比较结构。
本节的边界是「程序成本的期望值比较」:只覆盖调解、仲裁、诉讼三种路径的工时、固定费用、周期和概率,不展开证据规则、保全措施、裁决承认执行的具体条件和跨境法律适用。所有费用、周期与概率均为教学假设;具体程序选择因司法辖区而异,本节不构成法律意见。违约形态如何量化见 5.1 违约的四种形态 ,证据如何影响能否主张见 5.3 证据链与止损 。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。