以下情境为教学假设,人物与数字不代表经核实的真实案例。
退出不一定意味着卖掉公司。对很多独立开发者,更现实的路径是继续持有、把每年的利润分出来,让公司成为一台持续产生现金的机器。这条路径的难点不在增长,而在治理:钱怎么从公司到股东手里,谁有权决定,留下多少再投资,信息给谁看。治理没写清楚,公司越赚钱,争议越大。
这一节把持有型公司的治理拆成四件事:股权与投票权、董事会与顾问、分红政策、信息权与审计。主案例是 LedgerLite:一人持有、SDE 130,240 美元、净利润 58,299 美元、经营现金流 64,299 美元、年末现金 95,000 美元。Nord 与 Tidecast 作为对照。所有比率、税率与工时都是教学假设,不构成法律、税务或投资建议。
股权与投票权:两列数字,不是一列
持有型公司最常见的错误,是把「股权比例」当成「控制权比例」。这两列数字在单一股东、同股同权的结构里恰好相等,一旦引入合伙人、投资人、家族成员或员工持股,就会分开。治理文件要同时写清两列:谁拿多少经济利益,谁拿多少票。
| 结构 | 股权 | 投票权 | 控制结果 |
|---|---|---|---|
| 单一股东 | 100% | 100% | 没有外部否决 |
| 两位合伙人 | 50% / 50% | 50% / 50% | 任何一方都能否决 |
| 双层股权 | 60% / 40% | 93.8% / 6.3% | 创始人用少数股权保持多数投票 |
| 投票权委托 | 按股权 | 集中到一人 | 经济不变,控制集中 |
双层股权那一行值得展开。假设创始人持 60% 股权、每股 10 票,投资人持 40%、每股 1 票,总票数是 60,000 + 4,000 = 64,000,创始人的投票权是 93.8%,投资人只有 6.3%。经济上投资人仍拿 40% 的分红,控制上却只有 6.3% 的票。这种结构在融资时常见,在家族传承时也常见:把分红权逐步给下一代,把投票权留在创始人或受托人手里。
反过来,50/50 是最脆弱的控制结构。两位合伙人各占一半,任何一方都能否决分红、预算、招聘和出售。Nord 就是这种结构:两位合伙人各 50%,没有董事会,也没有书面退出条款。它的问题不是「谁说了算」,而是「谁都不能单独说了算」。合伙人退出机制见 2.3 合伙人协议与退出机制 ,这里只强调一点:50/50 的治理成本,最终会以决策延迟和谈判僵局的形式出现。
投票权还有一层容易被忽略:投票权可以授权,但不能代替所有权。投票权委托、一致行动协议、受托投票,都能在不变更股权的情况下集中控制;它们的代价是协议期限、撤销条件和违约救济。把这些写进股东协议,比在每次开会前临时确认谁投什么票要便宜。
董事会与顾问:什么时候值得设
一人公司不需要董事会。需要董事会的时间点,通常不是「公司变大了」,而是「有外部股东、有银行授信、有重大交易、或者创始人不再每天在场」。董事会不是荣誉职位,是一台有固定运行成本的决定机器。第 3.3 董事会、观察员与信息权 已经把席位、观察员和信息权的成本拆过;这里只做持有型公司的取舍。
| 形式 | 人数 | 年度治理工时 | 年度成本($100/小时) | 适用 |
|---|---|---|---|---|
| 无董事会,仅顾问 | 2 位顾问 | 16 小时 | $1,600 | 一人公司、无外部股东 |
| 三人董事会 | 3 席 | 约 70 小时 | 约 $7,000 | 有投资人、有银行债务 |
| 五人董事会 | 5 席 | 约 94 小时 | 约 $9,400 | 多轮融资、准备出售 |
三人董事会的 70 小时来自第 3.3 节的教学假设:一年 4 次会议、每席 3 小时、会前准备 4 小时、12 次信息披露每次 1.5 小时。五人董事会把会议小时从 52 拉到 76,加上 18 小时披露,合计 94 小时。多出来的两席,一年增加 24 小时,约 $2,400;这还没算决策延迟和关系维护。
顾问比董事便宜,但不是免费。两位顾问、一年 4 次、每次 2 小时参会加 2 小时准备,合计 16 小时、$1,600。顾问没有投票权,适合「需要外部视角但不需要让渡控制」的阶段。把顾问当董事用,会在关键事项上发现「他们只能建议,不能批准」;把董事当顾问用,会在关键事项上发现「他们能否决,但不承担经营责任」。
持有型公司还要区分「董事会」和「股东会」。董事会批预算、任免管理层、决定重大支出;股东会批章程修改、分红、合并出售、股权激励池。一人公司两者合一,但文件仍要分开写:哪些事项需要股东决议,哪些事项授权董事或经理执行。合并写在一起,传承或引入新股东时就要重写。
分红政策:40% / 60% 的三种基数
分红政策的核心不是「分多少」,而是「按什么基数分」。同样写「派息 40%、留存 60%」,基数换成 SDE、净利润或经营现金流,结果完全不同。LedgerLite 的三个基数分别是 130,240、58,299 和 64,299 美元。
| 基数 | 基数金额 | 派息 40% | 名义留存 60% | 派息后经营现金 | 扣设备投资后净现金增加 | 派息/净利润 | 留存是否由现金覆盖 |
|---|---|---|---|---|---|---|---|
| SDE | $130,240 | $52,096 | $78,144 | $12,203 | $9,203 | 89.4% | 否,缺口 $65,941 |
| 净利润 | $58,299 | $23,320 | $34,979 | $40,979 | $37,979 | 40.0% | 是,余 $6,000 |
| 经营现金流 | $64,299 | $25,720 | $38,579 | $38,579 | $35,579 | 44.1% | 是,余 $0 |
第一行是很多创始人会写的版本:SDE 130,240,派息 40% 是 52,096,留存 60% 是 78,144。看起来留了大头,实际上 52,096 已经吃掉净利润 58,299 的 89.4%,真正留在公司里的净利润只有 6,203。经营现金流 64,299 减去派息 52,096,只剩 12,203;再减设备投资 3,000,净现金只增加 9,203。名义留存 78,144 里,有 65,941 没有现金来源。
第二行把基数换成净利润。派息 40% 是 23,320,留存 34,979;经营现金流减派息后是 40,979,扣设备投资后 37,979。留存不仅被覆盖,还多出 6,000,来自递延收入增加 8,000 和应收增加 2,000 的净影响。第三行把基数换成经营现金流,派息 25,720,留存 38,579,派息后现金刚好等于留存,设备投资会再吃掉 3,000。
三行放在一起,结论很清楚:分红政策必须声明基数。写「40%」不写基数,等于没有政策。持有型公司最稳妥的写法是「以经审计净利润为基数,派息不超过 40%,且派息后现金不低于 6 个月运营费用」;SDE 和经营现金流可以作为上限参考,但不能直接当分红基数,因为 SDE 在创始人薪酬和所得税之前。
还要看覆盖倍数。按 SDE 基数派息 52,096,净利润 58,299,覆盖倍数是 1.12 倍;净利润下降 10.6%,覆盖倍数就打到 1.0。也就是说,这个派息水平只留下不到 11% 的利润缓冲。教学假设下,持有型公司的目标是覆盖倍数不低于 1.5 倍;按 58,299 的净利润,派息上限是 38,866,相当于 SDE 的 29.8%。这个数字比「40%」保守,但它能在利润下滑一年时不分红也不违约。
| 派息口径 | 派息金额 | 覆盖倍数 | 利润下滑多少会打穿 |
|---|---|---|---|
| SDE 的 40% | $52,096 | 1.12× | 10.6% |
| SDE 的 30% | $39,072 | 1.49× | 33.0% |
| 净利润的 40% | $23,320 | 2.50× | 60.0% |
派息之后,剩下的钱要有去处。留存不是为了趴在账上,而是为了再投资:产品研发、招聘、并购、现金缓冲。LedgerLite 按 SDE 基数派息后只剩 9,203 的净现金增加,连一个月的运营费用都不够;按净利润基数派息后有 37,979,才够覆盖一次小规模招聘或半年的现金缓冲。分红政策如果不和再投资计划一起写,留存比例就只是一个会计数字。
信息权与审计:持有型公司也需要
一人公司没有外部股东,信息权看起来是多余的。但只要出现合伙人、家族成员、银行债务、投资人或者潜在的收购方,信息权就会变成治理的一部分。信息权不是「发个邮件」,而是一条持续的义务:取数、解释、按时限披露。
| 信息项 | 频率 | 时限(教学假设) | 年度工时 |
|---|---|---|---|
| 月度财务 | 每月 | 次月 15 天内 | 18 小时 |
| 季度经营包 | 每季度 | 季度结束后 30 天 | 24 小时 |
| 年度预算 | 每年 | 财年开始前 30 天 | 16 小时 |
| 年度审计或审阅 | 每年 | 财年结束后 90 天 | 40 小时 |
| 临时重大事项 | 触发时 | 5 个工作日内 | 12 小时 |
| 合计 | 110 小时 |
110 小时按 $100/小时折 $11,000,另加审计或审阅的外部费用。教学假设下,年收入 240,240 的 LedgerLite 做一次年度审阅的外部费用约 $6,000;正式审计通常更贵,且只在有银行债务、投资人要求或出售准备时才需要。审计的触发条件要写进治理文件:谁可以要求审计、费用由谁承担、审计范围是什么、发现差异怎么处理。
信息权还要写「坏消息条款」。月度财务只能告诉你已经发生的事;重大事项通知要覆盖融资、并购、核心客户流失、数据泄露、关键人离职、重大诉讼和核心 IP 纠纷。规则可以是「5 个工作日内通知,写明事件、影响、已采取动作和下一步」。这条规则的成本很低,但它决定了信息权是「提前沟通」还是「事后追认」。
对持有型公司,信息权还有一个内部作用:它迫使创始人每月把数做实。没有外部股东时,最容易发生的是「账上还有钱,但不知道这个月赚没赚」。月度财务、季度经营包和年度审阅,本质上是给经营装一条固定的检查线。第 8.1 节 的 13 周现金表是这条检查线的短期版本;治理信息权是它的长期版本。
治理文件清单
治理不是一堆原则,是一组文件。文件的价值不在于厚,而在于每一份都能回答一个具体问题:谁有权、按什么价格、什么时候、给谁看。下表是一人持有型公司的最小清单,随着合伙人、投资人、家族成员进入逐步增加。
| 文件 | 回答什么问题 | 更新频率 | 谁维护 |
|---|---|---|---|
| 公司章程或组织文件 | 公司是什么主体、股东权利怎么定义 | 变更时 | 公司秘书/律师 |
| 股东协议 | 股权、投票、转让、退出、僵局怎么处理 | 每次股权变动 | 股东 |
| 董事会议事规则 | 谁参加、怎么表决、哪些事项保留 | 每年 | 董事会 |
| 分红政策 | 基数、比例、覆盖倍数、现金下限 | 每年 | 财务负责人 |
| 关联交易政策 | 股东与公司之间的交易怎么定价、谁批准 | 每年 | 财务负责人 |
| 信息权与月报模板 | 给谁看、看什么、什么时候给 | 每年 | 财务负责人 |
| 年度预算与审批矩阵 | 多少钱谁批、什么事项上会 | 每年 | 管理层 |
| 审计与银行授权 | 谁可以要求审计、谁可以动银行账户 | 每年 | 董事会 |
| 关键人保险与授权书 | 关键人出事时谁接管、现金从哪来 | 每三年 | 股东 |
清单里最容易被跳过的是「审批矩阵」和「银行授权」。审批矩阵决定日常经营的速度;银行授权决定公司能不能在关键时刻付款。一人公司常把两者都放在创始人一个人身上,传承或意外发生时,公司会立刻停摆。治理文件不是为大公司准备的,它首先是为「创始人不在场」准备的。
Nord 的对照很短:两位合伙人各 50%,没有董事会,治理成本不在会议,而在 50/50 的僵局——任何一方都能否决分红、预算和退出。Tidecast 是单一资产、单一所有人,138,171 美元净得、121,171 美元 SDE,没有子公司,也没有分红对象;持有型治理对它是多余的,它缺的是关键人保险和一份可执行的传承安排。
把治理写成代码:holdco-governance.ts
下面的 holdco-governance.ts 把两件事固化成函数。votingSummary 同时算股权和投票权,支持双层股权;它要求股权合计等于 10,000 个基点,避免「90% 的 cap table」这种看起来完整、实际缺一块的结构。dividendPolicy 把派息基数、名义留存、派息后现金和缺口放在同一个返回值里;retentionFunded 为 false 时,说明「留存 60%」只是一句口号,现金并没有留下来。
// file: src/capital/holdco-governance.ts
// tier: L1
// verify: node --test test/capital/holdco-governance.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 Shareholder = {
name: string;
equityBps: Bps;
votesPerShare: number;
};
export type HolderVote = {
name: string;
equityBps: Bps;
voteBps: Bps;
};
export type VotingSummary = {
totalEquityBps: Bps;
totalVotes: number;
holders: HolderVote[];
largestVoteBps: Bps;
hasMajority: boolean;
};
export type DividendInput = {
sdeCents: Cents;
netIncomeCents: Cents;
operatingCashFlowCents: Cents;
payoutBps: Bps;
};
export type DividendOutcome = {
payoutCents: Cents;
statedRetentionCents: Cents;
retainedCashCents: Cents;
fundingGapCents: Cents;
payoutToNetIncomeBps: Bps;
payoutToCashFlowBps: Bps;
netIncomeToSdeBps: Bps;
retentionFunded: boolean;
};
function checkAmount(value: Cents, label: string): string | null {
if (!Number.isInteger(value) || value < 0) {
return `${label} must be a non-negative integer amount in cents`;
}
return null;
}
function checkBps(value: Bps, label: string): string | null {
if (!Number.isInteger(value) || value < 0 || value > 10000) {
return `${label} must be between 0 and 10000 bps`;
}
return null;
}
/**
* Equity and votes are separate columns. One holder can own 60% of the
* economics and still hold less than 60% of the votes, or the reverse with a
* dual-class structure. The summary keeps both numbers visible so a voting
* agreement is not mistaken for an economic agreement.
*/
export function votingSummary(holders: Shareholder[]): Result<VotingSummary> {
if (holders.length === 0) {
return fail("at least one shareholder is required");
}
let totalEquityBps = 0;
let totalVotes = 0;
for (const holder of holders) {
if (holder.name.trim() === "") {
return fail("shareholder name is required");
}
const equityError = checkBps(holder.equityBps, "equity");
if (equityError) {
return fail(equityError);
}
if (!Number.isInteger(holder.votesPerShare) || holder.votesPerShare <= 0) {
return fail("votes per share must be a positive integer");
}
totalEquityBps += holder.equityBps;
totalVotes += holder.equityBps * holder.votesPerShare;
}
if (totalEquityBps !== 10000) {
return fail("equity shares must add up to 10000 bps");
}
if (totalVotes <= 0) {
return fail("total votes must be positive");
}
const rows = holders.map((holder) => ({
name: holder.name,
equityBps: holder.equityBps,
voteBps: divide(holder.equityBps * holder.votesPerShare, totalVotes),
}));
const largestVoteBps = Math.max(...rows.map((row) => row.voteBps));
return ok({
totalEquityBps,
totalVotes,
holders: rows,
largestVoteBps,
hasMajority: largestVoteBps > 5000,
});
}
/**
* A payout ratio is only meaningful when the base is named. Applying 40% to
* SDE looks conservative, but SDE sits before founder salary and tax. This
* function keeps the stated retention and the cash actually left in the
* business side by side, because the gap is what has to be funded.
*/
export function dividendPolicy(input: DividendInput): Result<DividendOutcome> {
for (const [value, label] of [
[input.sdeCents, "SDE"],
[input.netIncomeCents, "net income"],
[input.operatingCashFlowCents, "operating cash flow"],
] as Array<[Cents, string]>) {
const error = checkAmount(value, label);
if (error) {
return fail(error);
}
}
if (input.netIncomeCents <= 0) {
return fail("net income must be positive to measure dividend cover");
}
if (input.operatingCashFlowCents <= 0) {
return fail("operating cash flow must be positive");
}
const payoutError = checkBps(input.payoutBps, "payout");
if (payoutError) {
return fail(payoutError);
}
const payoutCents = applyRate(input.sdeCents, input.payoutBps);
const statedRetentionCents = input.sdeCents - payoutCents;
const retainedCashCents = input.operatingCashFlowCents - payoutCents;
return ok({
payoutCents,
statedRetentionCents,
retainedCashCents,
fundingGapCents: Math.max(0, statedRetentionCents - retainedCashCents),
payoutToNetIncomeBps: divide(payoutCents, input.netIncomeCents),
payoutToCashFlowBps: divide(payoutCents, input.operatingCashFlowCents),
netIncomeToSdeBps: divide(input.netIncomeCents, input.sdeCents),
retentionFunded: retainedCashCents >= statedRetentionCents,
});
}
代码有三个刻意的选择。第一,votingSummary 不把股权比例直接当投票比例,而是按 equityBps × votesPerShare 算总票数;双层股权下,60% 的经济利益可以变成 93.8% 的投票权。第二,dividendPolicy 的派息始终乘在传入的 sdeCents 上,调用方要把基数换成净利润或经营现金流,就必须显式换参数;这迫使「基数是什么」在代码里可见。第三,fundingGapCents 只在名义留存大于实际留存现金时为正,它不判断分红是否合法,只回答「钱够不够」。
把 LedgerLite 代入:SDE 13,024,000 美分、净利润 5,829,900 美分、经营现金流 6,429,900 美分、派息 4,000 基点。返回派息 5,209,600 美分、名义留存 7,814,400 美分、实际留存现金 1,220,300 美分、缺口 6,594,100 美分;派息占净利润 8,936 基点,占经营现金流 8,102 基点,净利润占 SDE 4,476 基点。数字与上表一致。
小结
- 持有型公司的治理先分两列:股权是经济利益,投票权是控制;50/50 的结构没有多数方,任何一方都能否决。
- 董事会不是荣誉,是成本:三人董事会约 70 小时、$7,000,五人约 94 小时、$9,400;顾问约 16 小时、$1,600,但没有投票权。
- 分红政策必须声明基数。LedgerLite 按 SDE 派息 40% 是 52,096 美元,占净利润 89.4%,名义留存 78,144 美元里有 65,941 没有现金来源。
- 按净利润派息 40% 是 23,320 美元,留存 34,979 美元,经营现金流可以覆盖;按经营现金流派息 40% 是 25,720 美元,刚好覆盖留存。
- SDE 基数派息的覆盖倍数只有 1.12 倍,净利润下降 10.6% 就打穿;覆盖倍数 1.5 倍对应的派息上限是 38,866 美元,约为 SDE 的 29.8%。
- 信息权一年约 110 小时、$11,000,另加年度审阅的外部费用;审计触发条件要写进治理文件。
- 治理文件的最小清单有九项,最容易被跳过的是审批矩阵和银行授权;它们决定创始人不在场时公司能不能继续运转。
- Nord 的治理成本是 50/50 僵局,Tidecast 的治理成本接近于零,但两者都缺传承安排;治理结构和传承结构要分开设计。
阅读导航:上一节:11.3 债务、合同与主体注销 · 下一节:12.2 职业化管理与授权 。
常见错误与边界
- 把股权比例当投票权比例。 双层股权、投票权委托、一致行动协议都会让两列数字分开;治理文件要同时写经济权利和投票权利。
- 50/50 却不写僵局条款。 Nord 两位合伙人各 50%,任何一方都能否决分红、预算和退出;没有打破僵局的机制,治理成本会以决策延迟的形式出现。
- 把董事会当荣誉。 三人董事会一年约 70 小时、$7,000;五人约 94 小时、$9,400;先算成本,再决定席位。
- 把顾问当董事。 顾问没有投票权,只能建议;需要否决权时,顾问满足不了。
- 分红不写基数。 「派息 40%」按 SDE、净利润和经营现金流算是三个不同的结果;不写基数等于没有政策。
- 把 SDE 当分红基数。 SDE 在创始人薪酬和所得税之前;按 SDE 派息 40%,实际吃掉净利润的 89.4%,名义留存 60% 里大部分没有现金来源。
- 只看留存比例,不看现金覆盖。 名义留存 78,144 美元,派息后只剩 12,203 经营现金,扣设备投资后 9,203;留存要靠期初现金或借款补。
- 信息权没有时限。 「尽快提供」等于没有义务;月度 15 天、季度 30 天、重大事项 5 个工作日,才是可执行的约定。
- 审计触发条件不写。 谁可以要求审计、费用谁承担、范围多大、差异怎么处理,都要在治理文件里写清;否则审计会变成临时谈判。
- 治理文件只写原则,不写审批矩阵。 多少钱谁批、什么事项上会、银行谁授权,才是日常经营真正用得到的部分。
边界:本节只处理持有型公司的治理结构与分红政策,不构成法律、税务或投资建议。公司章程、股东协议、董事会规则和具体司法辖区的义务需要当地执业律师审阅。代码只算投票权、派息和现金缺口,不判断条款是否公平,也不替代审计与估值。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。