《独立开发者的商业指南·资本与退出》12.3 家族、合伙与继承

传承不是一份遗嘱,而是股权、管理、现金三条线同时交接。本节用 Nord 两位合伙人各 50% 算一方退出的买断价:4.5×SDE 是 77,220 美元、3.0×SDE 是 51,480 美元,再拆 20% 首付、24/60 个月分期与保险 funded buy-sell 的保额缺口。

以下情境为教学假设,人物与数字不代表经核实的真实案例。

传承不是「写一份遗嘱」这么简单。它要同时回答三个问题:股权给谁、管理交给谁、现金从哪里来。三个问题的时间表不同:股权可以分十年转,管理可以在某一天交接,现金可能要在一个人出事后的 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 bps500 bps4,500 bps5.0%
第 3 年500 bps1,500 bps3,500 bps15.0%
第 5 年500 bps2,500 bps2,500 bps25.0%
第 7 年500 bps3,500 bps1,500 bps35.0%
第 10 年500 bps5,000 bps0 bps50.0%

如果转的是有投票权的普通股,第 5 年累计到 25%,受让方就跨过了常见的少数否决线;如果协议给 25% 股东一个董事席位或重大事项否决权,第 5 年就是控制权交接的触发点。如果转的是无投票权股份,受让方拿到 25% 的经济利益,投票权仍在创始人手里。两种安排都合法,但必须在同一份股东协议里写清:转的是经济权利还是投票权利,25% 触发什么,剩余 25% 什么时候转。

家族传承还要多一层:继承人是否参与经营。最稳的做法是把「所有权」和「雇佣」分开:继承人可以持股,但不自动获得职位;要进公司,按市场标准招聘、按岗位付薪、按绩效晋升。家族成员之间的分红政策、竞业限制、股权回购规则,最好在家族成员进入公司之前写清,而不是等冲突发生后再谈。

合伙人退出:买卖协议与两档估值

合伙人退出的核心是一份买卖协议(buy-sell agreement):谁可以买、谁必须卖、按什么价格、什么时候付。Nord 没有这份协议,所以两位合伙人各 50% 的结构在任一方退出时都会变成临时谈判。买卖协议的第一件事,是把估值公式写死,而不是每次重新谈倍数。

Nord 的公式是「SDE × 倍数 × 股权比例」。两档倍数的对比如下:

倍数企业价值50% 股权价值与 4.5 倍的差额
4.5× SDE$154,440$77,2200
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$00$0$0$77,220
20% 首付 + 24 个月$15,444$61,77624$2,574.00$2,574.00$77,220
20% 首付 + 60 个月$15,444$61,77660$1,029.60$1,029.60$77,220
无首付 + 24 个月(2.3 节口径)$0$77,22024$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,220100%$1,930.50$0
$61,77680%$1,544.40$15,444
$38,61050%$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 三卷指标矩阵 。

常见错误与边界

  1. 把传承当成一份遗嘱。 遗嘱只解决股权归谁;管理交接、买断现金、股权登记要分别安排。
  2. 只转股权,不转投票权。 5% 年转让到第 5 年累计 25%,如果转的是投票股,受让方就跨过否决线;转无投票权股则控制权不变。
  3. 信托只看成本,不看控制。 信托的教学假设成本是设立 3,000 美元、年度 1,500 美元;它的价值是把投票权和收益权分开,不是省税。
  4. 买卖协议没有估值公式。 没有公式,退出当天就要重新谈倍数;4.5× 与 3.0× 之间差 25,740 美元。
  5. 估值公式不写调整项。 净债务、营运资金、未开票收入、递延收入都会移动价格;77,220 只是标题价,不是到手价。
  6. 只谈价格,不谈支付。 20% 首付把 24 个月月供从 3,217.50 降到 2,574.00;首付和分期不能同时假设公司会增长。
  7. 保险保额不足。 80% 保额留下 15,444 美元缺口,正好是 20% 首付;50% 保额留下 38,610 美元缺口,保险只是推迟问题。
  8. 保险受益人不写清。 付给公司的保险金用于买断,付给个人或遗产的保险金用于继承人;两者混在一起,交割时会被质疑。
  9. 家族成员自动获得职位。 所有权和雇佣要分开;持股不等于岗位,进公司要按市场标准招聘和付薪。
  10. 文件写完不更新。 股权转让、婚姻变化、合伙人增减、保险受益人变更,都要同步更新股东名册、买卖协议和授权书。

边界:本节只做传承结构说明和可计算量的拆解,不引用具体税法、继承法或保险法条文,也不构成法律、税务或投资建议。遗嘱、信托、买卖协议、保险受益人和股权登记需要当地执业律师、税务顾问和保险经纪审阅。代码只算价格、分期、转让进度和保险覆盖,不判断结构是否适合某个家庭或某个司法辖区。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《移动游戏产品的架构·商业化与发行工程》附录 C 商业化与发行评审清单
  2. 《移动游戏产品的架构·商业化与发行工程》附录 B 双案例商业化事实表
  3. 《移动游戏产品的架构·商业化与发行工程》附录 A 商业化与发行术语速查