以下情境为教学假设,人物与数字不代表经核实的真实案例。
传承不是「写一份遗嘱」这么简单。它要同时回答三个问题:股权给谁、管理交给谁、现金从哪里来。三个问题的时间表不同:股权可以分十年转,管理可以在某一天交接,现金可能要在一个人出事后的 90 天内到位。只安排其中一条线,另外两条会在最不方便的时候变成争议。
这一节用 Nord Studio 做主案例:两位合伙人各 50%,SDE 34,320 美元,没有书面退出条款,也没有继承安排。4.5 倍 SDE 的企业价值是 154,440 美元,3.0 倍是 102,960 美元;50% 股权对应 77,220 和 51,480 美元。LedgerLite 与 Tidecast 作为对照。所有结构、费率、保费和期限都是教学假设,只做结构说明,不引用具体法条,也不构成法律、税务或投资建议。
传承先分三条线:股权、管理、现金
传承失败通常不是因为「没有遗嘱」,而是因为三条线只安排了一条。股权给了下一代,但管理没人接;管理有人接,但买断现金没有着落;现金准备好了,但股权登记还在逝者名下。三条线要分别设计,再在同一张时间表上对齐。
| 线 | 要回答的问题 | 常用工具 | 可计算量 |
|---|---|---|---|
| 股权 | 谁拥有、何时转移、转多少 | 赠与、信托、分期转让 | 转移基点、控制阈值、登记时点 |
| 管理 | 谁经营、谁决策、谁备份 | 职业管理者、董事会、授权矩阵 | 管理者人数与成本、创始人监督时间 |
| 现金 | 谁付钱、付多少、何时付 | 买卖协议、分期票据、保险 | 买断价、首付、月供、保额缺口 |
三条线里,现金最容易被低估。股权可以慢慢转,管理可以慢慢交,但合伙人去世或退出时,买断款往往要在很短的时间内支付。没有现金安排,活着的合伙人要么借钱,要么把公司卖掉,要么和继承人对簿公堂。Nord 的两位合伙人各 50%,任何一方出事,另一方都需要 77,220 美元才能按 4.5 倍买下 50%;这笔钱不会因为「关系好」自动出现。
股权传承的三种结构:赠与、信托、分期转让
股权传承的结构可以按两个维度分类:股权什么时候转移,现金什么时候支付。赠与是「股权先走、现金不走」;信托是「股权登记给受托人、收益给受益人」;分期转让是「股权按年走、现金按年付」。三种结构都能用,差别在控制权、现金流和失败时的补救。
| 方式 | 股权何时转移 | 现金何时到 | 控制权 | 主要风险 |
|---|---|---|---|---|
| 赠与 | 签署即转移 | 无现金 | 立即转移 | 赠与人失去控制,受赠人可能被稀释 |
| 信托 | 登记给受托人 | 无现金,受益人拿收益 | 受托人按信托文件投票 | 设立与年度管理成本,受托人责任 |
| 分期转让 | 每年转一部分 | 按年支付 | 逐步转移 | 受让方违约、公司估值变化 |
信托的设立成本是教学假设:一次性 3,000 美元,年度管理 1,500 美元。它的价值不是省税,而是把「控制权」和「收益权」分开:受托人持有投票权,受益人拿分红;创始人可以在生前保留投资顾问或保护人的角色,但不再直接持有股权。对家族传承,这种分离能避免「继承人不懂业务却拥有多数票」;对合伙人传承,它能避免「继承人不参与经营却能否决决策」。
分期转让更适合没有信托预算的小公司。Nord 的一位合伙人持有 5,000 个基点(50%),按每年 500 个基点(5%)转给继任者,十年转完。控制权的变化可以用一张表看清:
| 年份 | 当年转让 | 累计转让 | 剩余 | 累计比例 |
|---|---|---|---|---|
| 第 1 年 | 500 bps | 500 bps | 4,500 bps | 5.0% |
| 第 3 年 | 500 bps | 1,500 bps | 3,500 bps | 15.0% |
| 第 5 年 | 500 bps | 2,500 bps | 2,500 bps | 25.0% |
| 第 7 年 | 500 bps | 3,500 bps | 1,500 bps | 35.0% |
| 第 10 年 | 500 bps | 5,000 bps | 0 bps | 50.0% |
如果转的是有投票权的普通股,第 5 年累计到 25%,受让方就跨过了常见的少数否决线;如果协议给 25% 股东一个董事席位或重大事项否决权,第 5 年就是控制权交接的触发点。如果转的是无投票权股份,受让方拿到 25% 的经济利益,投票权仍在创始人手里。两种安排都合法,但必须在同一份股东协议里写清:转的是经济权利还是投票权利,25% 触发什么,剩余 25% 什么时候转。
家族传承还要多一层:继承人是否参与经营。最稳的做法是把「所有权」和「雇佣」分开:继承人可以持股,但不自动获得职位;要进公司,按市场标准招聘、按岗位付薪、按绩效晋升。家族成员之间的分红政策、竞业限制、股权回购规则,最好在家族成员进入公司之前写清,而不是等冲突发生后再谈。
合伙人退出:买卖协议与两档估值
合伙人退出的核心是一份买卖协议(buy-sell agreement):谁可以买、谁必须卖、按什么价格、什么时候付。Nord 没有这份协议,所以两位合伙人各 50% 的结构在任一方退出时都会变成临时谈判。买卖协议的第一件事,是把估值公式写死,而不是每次重新谈倍数。
Nord 的公式是「SDE × 倍数 × 股权比例」。两档倍数的对比如下:
| 倍数 | 企业价值 | 50% 股权价值 | 与 4.5 倍的差额 |
|---|---|---|---|
| 4.5× SDE | $154,440 | $77,220 | 0 |
| 3.0× SDE | $102,960 | $51,480 | −$25,740(−33.3%) |
4.5 倍是合伙人之间的回购锚,3.0 倍是外部买方对这家服务型公司的报价锚。两者差 25,740 美元,折价 33.3%。买卖协议通常写「按 4.5 倍回购,但整体出售时按买方报价」,或者写「取两者较高者」。前一种对留下的人有利,后一种对退出的人有利;关键是提前选一个,而不是在退出当天选。
估值公式还要写调整项:净债务、营运资金、未开票收入、递延收入。Nord 的案例没有给出净债务和营运资金余额,教学假设按 0 处理;真实交易里,净债务通常从企业价值里扣,营运资金低于目标值也会下调价格。公式不写调整项,算出来的 77,220 只是「标题价」,不是「到手价」。
价格确定后,支付安排决定现金流压力。Nord 的 77,220 美元可以一次性付、分 24 个月、分 60 个月,也可以先付首付再分期。下表按 20% 首付、无利息的教学假设计算:
| 方案 | 首付 | 融资额 | 期限 | 月供 | 末期 | 总价 |
|---|---|---|---|---|---|---|
| 一次性 | $77,220 | $0 | 0 | $0 | $0 | $77,220 |
| 20% 首付 + 24 个月 | $15,444 | $61,776 | 24 | $2,574.00 | $2,574.00 | $77,220 |
| 20% 首付 + 60 个月 | $15,444 | $61,776 | 60 | $1,029.60 | $1,029.60 | $77,220 |
| 无首付 + 24 个月(2.3 节口径) | $0 | $77,220 | 24 | $3,217.50 | $3,217.50 | $77,220 |
20% 首付把 24 个月的月供从 3,217.50 降到 2,574.00,每月少 643.50 美元;60 个月把月供降到 1,029.60,但退出方要承担五年的信用风险。第 2.3 合伙人协议与退出机制 已经把月供对照过 Nord 的月 SDE 和月税后现金;这里只补一句:首付来自公司现金,分期来自未来现金流,两者不能同时假设「公司会增长」。如果公司现金只够付首付,分期就必须用保险或外部融资兜底。
保险 funded buy-sell:保额、保费与缺口
保险 funded buy-sell 的思路很直接:合伙人互相投保,或者公司为关键人投保;一方去世或失能,保险金用来买断他的股权。它的好处是把「不确定的身故时点」换成「确定的保额」,坏处是保费是确定的现金支出,而且保额可能不够。
教学假设的保费是保额的 2.5%,不引用任何真实报价。保额、覆盖率与缺口如下:
| 保额 | 覆盖率 | 年保费(2.5%) | 缺口 |
|---|---|---|---|
| $77,220 | 100% | $1,930.50 | $0 |
| $61,776 | 80% | $1,544.40 | $15,444 |
| $38,610 | 50% | $965.25 | $38,610 |
80% 保额看起来「够用」,但它留下 15,444 美元的缺口,正好是 20% 首付的金额。如果活着的一方没有这笔现金,保险金只能付掉大部分买断款,剩下的靠分期或借款。50% 保额留下 38,610 美元缺口,相当于 Nord 一年的 SDE 还多 4,290 美元;这种情况下,保险没有解决问题,只是把问题推迟到交割日。
关键人保险的保额可以按企业价值定。Nord 的 4.5 倍企业价值是 154,440 美元,2.5% 保费是 3,861 美元/年;保险金付给公司,公司可以用 77,220 美元买断退出方的 50%,剩下 77,220 美元用于补充收入、招聘接替者或覆盖客户流失。这个结构的重点是「受益人是谁」:付给公司的保险金用于公司目的,付给个人或遗产的保险金用于继承人,两者不能混。
保险不是唯一的现金来源。10 年定期储蓄每年 1,930.50 美元,十年本金 19,305 美元,远低于 77,220 美元的买断价;保险的杠杆来自「在被保险事件发生时赔付」,不是来自储蓄收益。如果公司更愿意自留风险,可以设一笔「买断准备金」,每年从分红里留出固定金额;代价是这笔钱在事件发生前一直占用现金,且没有杠杆。
继承安排:遗嘱、授权与关键人保险
继承安排是一组文件,不是一份文件。遗嘱决定股权归谁,授权书决定谁能在创始人失能时签字,买卖协议决定谁必须买、谁必须卖,关键人保险决定现金从哪里来,股权登记决定谁是法律上的股东。五份文件缺一份,传承就会在某个环节卡住。
| 安排 | 回答什么问题 | 触发时点 | 谁维护 |
|---|---|---|---|
| 遗嘱或信托 | 股权由谁继承、受益人是谁 | 身故 | 股东与律师 |
| 授权书或代理 | 创始人失能时谁签字、权限多大 | 失能 | 股东 |
| 买卖协议 | 谁必须买、谁必须卖、按什么价格 | 身故、失能、退休、离婚 | 合伙人 |
| 关键人保险 | 买断现金从哪来、受益人是谁 | 身故或失能 | 公司 |
| 股权登记与股东名册 | 谁是登记股东、转让是否生效 | 每次转让 | 公司秘书 |
| 过渡决议 | 过渡期谁经营、董事会如何组成 | 触发事件后 | 董事会 |
家族传承还要处理「继承人不参与经营」的情况。可选结构有三种:给继承人无投票权股份,投票权留在信托或董事会;给继承人分红权,但不给董事席位;给继承人股权,同时用买卖协议约定公司或其它股东有优先购买权。三种结构都不需要引用具体法条,但都需要在股东协议和公司章程里写清。
Nord 没有家族成员,但两位合伙人就是一个「商业家庭」。它的继承安排最小版本是:一份相互买卖协议、两份关键人保险(各保 77,220 美元)、一份授权书(一方失能时另一方可签日常合同)、一份股权登记更新规则。LedgerLite 一人持有、260 家客户,结构更简单:一份遗嘱、一份授权书、一份关键人保险,加上客户交接清单即可。Tidecast 是单一资产、单一所有人,138,171 美元净得、121,171 美元 SDE;没有合伙人,也没有股权传承,但账号、IP 和续作权需要一份交接安排。
把传承写成代码:succession.ts
下面的 succession.ts 把四个可计算的部分固化成函数。buySellRange 按 SDE、股权比例和两档倍数算买断价与折价;paymentPlan 算首付、融资额、月供和末期;stagedTransfer 算每年转让、累计比例、剩余比例和跨过阈值的年份;insuranceCoverage 算保额、保费、覆盖率和缺口。
// file: src/capital/succession.ts
// tier: L1
// verify: node --test test/capital/succession.test.ts
import { type Cents } from "../core/money.ts";
import { type Bps, applyRate, divide } from "../core/rate.ts";
import { type Result, fail, ok } from "../core/result.ts";
export type BuySellRange = {
highValueCents: Cents;
lowValueCents: Cents;
differenceCents: Cents;
discountBps: Bps;
};
export type PaymentPlan = {
principalCents: Cents;
downPaymentCents: Cents;
financedCents: Cents;
monthlyCents: Cents;
lastCents: Cents;
months: number;
totalCents: Cents;
};
export type TransferStep = {
year: number;
trancheBps: Bps;
cumulativeBps: Bps;
remainingBps: Bps;
};
export type StagedTransfer = {
startBps: Bps;
trancheBps: Bps;
years: number;
thresholdBps: Bps;
steps: TransferStep[];
firstThresholdYear: number | null;
finalRemainingBps: Bps;
};
export type InsuranceCoverage = {
benefitCents: Cents;
annualPremiumCents: Cents;
buyoutCents: Cents;
coverageBps: Bps;
gapCents: Cents;
funded: boolean;
};
function amountError(value: Cents, label: string): string | null {
return Number.isInteger(value) && value >= 0
? null
: `${label} must be a non-negative integer amount in cents`;
}
function bpsError(value: Bps, label: string): string | null {
return Number.isInteger(value) && value >= 0 && value <= 10000
? null
: `${label} must be between 0 and 10000 bps`;
}
/**
* A buy-sell agreement needs a formula, not a single number: SDE x multiple x
* equity share. The two multiples bracket what the partners accept in a good
* year and what a buyer would pay for the same business. The discount between
* them is the price of liquidity.
*/
export function buySellRange(
sdeCents: Cents,
equityBps: Bps,
highMultipleBps: Bps,
lowMultipleBps: Bps,
): Result<BuySellRange> {
const sdeError = amountError(sdeCents, "SDE");
if (sdeError) return fail(sdeError);
if (sdeCents === 0) return fail("SDE must be positive");
const equityError = bpsError(equityBps, "equity");
if (equityError) return fail(equityError);
for (const [value, label] of [
[highMultipleBps, "high multiple"],
[lowMultipleBps, "low multiple"],
] as Array<[Bps, string]>) {
if (!Number.isInteger(value) || value < 0) {
return fail(`${label} must be a non-negative integer in basis points`);
}
}
if (lowMultipleBps > highMultipleBps) {
return fail("low multiple cannot exceed the high multiple");
}
const highValueCents = applyRate(applyRate(sdeCents, highMultipleBps), equityBps);
const lowValueCents = applyRate(applyRate(sdeCents, lowMultipleBps), equityBps);
const differenceCents = highValueCents - lowValueCents;
return ok({
highValueCents,
lowValueCents,
differenceCents,
discountBps: highValueCents === 0 ? 0 : divide(differenceCents, highValueCents),
});
}
/**
* A down payment changes the size of the note, not the total price. The
* financed balance is split into equal payments and the final payment absorbs
* the rounding remainder, so the schedule always sums to the price.
*/
export function paymentPlan(
principalCents: Cents,
downPaymentBps: Bps,
months: number,
): Result<PaymentPlan> {
const principalError = amountError(principalCents, "principal");
if (principalError) return fail(principalError);
if (principalCents === 0) return fail("principal must be positive");
const downError = bpsError(downPaymentBps, "down payment");
if (downError) return fail(downError);
if (!Number.isInteger(months) || months <= 0) {
return fail("months must be a positive integer");
}
const downPaymentCents = applyRate(principalCents, downPaymentBps);
const financedCents = principalCents - downPaymentCents;
const monthlyCents = Math.floor(financedCents / months);
return ok({
principalCents,
downPaymentCents,
financedCents,
monthlyCents,
lastCents: financedCents - monthlyCents * (months - 1),
months,
totalCents: downPaymentCents + financedCents,
});
}
/**
* Staged transfer separates the timing of ownership from the timing of cash.
* Each annual tranche is applied against the remaining holding; the threshold
* year is the first year the cumulative transfer reaches the control or
* disclosure line the agreement cares about.
*/
export function stagedTransfer(
startBps: Bps,
trancheBps: Bps,
years: number,
thresholdBps: Bps,
): Result<StagedTransfer> {
const startError = bpsError(startBps, "starting stake");
if (startError) return fail(startError);
if (!Number.isInteger(trancheBps) || trancheBps <= 0 || trancheBps > 10000) {
return fail("tranche must be a positive integer up to 10000 bps");
}
if (!Number.isInteger(years) || years <= 0) {
return fail("years must be a positive integer");
}
const thresholdError = bpsError(thresholdBps, "threshold");
if (thresholdError) return fail(thresholdError);
if (trancheBps * years > startBps) {
return fail("tranches exceed the starting stake");
}
const steps: TransferStep[] = [];
let firstThresholdYear: number | null = null;
let previousCumulative = 0;
for (let year = 1; year <= years; year += 1) {
const cumulativeBps = trancheBps * year;
if (
firstThresholdYear === null &&
thresholdBps > 0 &&
cumulativeBps >= thresholdBps &&
previousCumulative < thresholdBps
) {
firstThresholdYear = year;
}
steps.push({
year,
trancheBps,
cumulativeBps,
remainingBps: startBps - cumulativeBps,
});
previousCumulative = cumulativeBps;
}
return ok({
startBps,
trancheBps,
years,
thresholdBps,
steps,
firstThresholdYear,
finalRemainingBps: startBps - trancheBps * years,
});
}
/**
* Insurance-funded buy-sell is a coverage calculation before it is a policy
* purchase. A policy that covers 80% still leaves a 20% cash call at exactly
* the moment the surviving partner has the least liquidity.
*/
export function insuranceCoverage(
benefitCents: Cents,
premiumBps: Bps,
buyoutCents: Cents,
): Result<InsuranceCoverage> {
for (const [value, label] of [
[benefitCents, "benefit"],
[buyoutCents, "buyout"],
] as Array<[Cents, string]>) {
const error = amountError(value, label);
if (error) return fail(error);
}
if (buyoutCents === 0) return fail("buyout must be positive");
const premiumError = bpsError(premiumBps, "premium");
if (premiumError) return fail(premiumError);
return ok({
benefitCents,
annualPremiumCents: applyRate(benefitCents, premiumBps),
buyoutCents,
coverageBps: divide(benefitCents, buyoutCents),
gapCents: Math.max(0, buyoutCents - benefitCents),
funded: benefitCents >= buyoutCents,
});
}
代码有四个刻意的选择。第一,buySellRange 先算企业价值再乘股权比例,每一步取整到美分,避免两次四舍五入叠加。第二,paymentPlan 的首付从本金里扣,融资额再分期,末期吸收余数,保证总价不变。第三,stagedTransfer 只算股权转移,不算投票权;投票权是否跟着走,要在协议里单独写。第四,insuranceCoverage 只算覆盖率与缺口,不判断保单是否可承保;年龄、健康、职业和免赔额都会改变真实保费。
把 Nord 代入:SDE 3,432,000 美分、股权 5,000 基点、高倍数 45,000 基点、低倍数 30,000 基点。返回高值 7,722,000 美分(77,220 美元)、低值 5,148,000 美分(51,480 美元)、差额 2,574,000 美分(25,740 美元)、折价 3,333 基点(33.3%)。20% 首付、24 个月:首付 1,544,400 美分、融资 6,177,600 美分、月供 257,400 美分(2,574 美元)。5% 年转让、10 年、25% 阈值:第 5 年累计 2,500 基点,剩余 2,500 基点。保额 7,722,000 美分、保费 250 基点:年保费 193,050 美分(1,930.50 美元),覆盖率 100%。
小结
- 传承分三条线:股权、管理、现金;三条线的时间表不同,只安排一条会在另外两条上出问题。
- 股权传承有三种结构:赠与、信托、分期转让;信托的教学假设成本是设立 3,000 美元、年度 1,500 美元。
- Nord 一位合伙人的 50% 按每年 5% 转让,十年转完;第 5 年累计 25%,如果转的是投票股,就是控制权交接的触发点。
- 买卖协议要把估值公式写死:SDE × 倍数 × 股权比例,并写清净债务、营运资金等调整项。
- Nord 的 50% 按 4.5× SDE 是 77,220 美元,按 3.0× SDE 是 51,480 美元,差额 25,740 美元,折价 33.3%。
- 20% 首付、24 个月分期:首付 15,444 美元,融资 61,776 美元,月供 2,574 美元;无首付 24 个月月供 3,217.50 美元。
- 保险按保额 2.5% 保费计算:100% 覆盖年保费 1,930.50 美元;80% 覆盖年保费 1,544.40 美元,缺口 15,444 美元。
- 继承安排至少五份文件:遗嘱或信托、授权书、买卖协议、关键人保险、股权登记;家族传承还要把所有权和雇佣分开。
阅读导航:上一节:12.2 职业化管理与授权 · 下一节:13.1 三卷指标矩阵 。
常见错误与边界
- 把传承当成一份遗嘱。 遗嘱只解决股权归谁;管理交接、买断现金、股权登记要分别安排。
- 只转股权,不转投票权。 5% 年转让到第 5 年累计 25%,如果转的是投票股,受让方就跨过否决线;转无投票权股则控制权不变。
- 信托只看成本,不看控制。 信托的教学假设成本是设立 3,000 美元、年度 1,500 美元;它的价值是把投票权和收益权分开,不是省税。
- 买卖协议没有估值公式。 没有公式,退出当天就要重新谈倍数;4.5× 与 3.0× 之间差 25,740 美元。
- 估值公式不写调整项。 净债务、营运资金、未开票收入、递延收入都会移动价格;77,220 只是标题价,不是到手价。
- 只谈价格,不谈支付。 20% 首付把 24 个月月供从 3,217.50 降到 2,574.00;首付和分期不能同时假设公司会增长。
- 保险保额不足。 80% 保额留下 15,444 美元缺口,正好是 20% 首付;50% 保额留下 38,610 美元缺口,保险只是推迟问题。
- 保险受益人不写清。 付给公司的保险金用于买断,付给个人或遗产的保险金用于继承人;两者混在一起,交割时会被质疑。
- 家族成员自动获得职位。 所有权和雇佣要分开;持股不等于岗位,进公司要按市场标准招聘和付薪。
- 文件写完不更新。 股权转让、婚姻变化、合伙人增减、保险受益人变更,都要同步更新股东名册、买卖协议和授权书。
边界:本节只做传承结构说明和可计算量的拆解,不引用具体税法、继承法或保险法条文,也不构成法律、税务或投资建议。遗嘱、信托、买卖协议、保险受益人和股权登记需要当地执业律师、税务顾问和保险经纪审阅。代码只算价格、分期、转让进度和保险覆盖,不判断结构是否适合某个家庭或某个司法辖区。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。