Policies
Every financial number follows a declared rule, so two readers of one ledger get one answer.
A Policy is the declared rule behind a number or a recurring choice, such as how revenue is recognized or how shared Cost splits. The Studio supplies every default, and a Startup overrides one by Decision.
Why numbers need declared rules
Every financial number is a projection of Entries, and most projections involve a choice. Is a per-lead fee recurring revenue, and which Startup pays for a shared support inbox? Two honest people can answer differently.
A Policy writes the answer down once, in a form code applies. Every number then cites the Policy version it used, so two reports that disagree show why.
The defaults
A new Startup inherits these Policies. Each one is a record with its own history.
| Policy | Default rule |
|---|---|
revenue.recognition | One-time sales earn on delivery, Subscriptions day by day, outcomes on acceptance, credits on use |
mrr.usageWindow | Usage revenue enters MRR at its trailing 30-day run rate |
mrr.outcomeFees | Outcome fees stay out of MRR and report as outcome revenue |
revenue.outside | Outside means no shared owner, Studio account, Agreement, or sibling chain |
transfer.price | A sale to a sibling books at the sibling Offer's list Price |
cost.allocation | Shared Cost splits by metered use, else by share of outside revenue |
ltv.horizon | Lifetime value counts at most 24 months of contribution |
model.choice | Each task class runs the cheapest model that passes its evaluations, under a cost cap |
approval.rule | Guards check every Action; above a stakes threshold, a Human answers |
A cost cap is a Limit, and a stakes threshold is a Setting. The Policy says how the choice is made; the Setting holds the value it reads.
Changing a Policy
To change a Policy, record a Decision with the reason and update the rule. The new version applies from the open Period forward.
import { $ } from 'startup-builder'
await $.Policy.update({
id: 'mrr.outcomeFees',
rule: 'Lead fees enter MRR at their trailing 90-day run rate.',
})A locked Period never changes. Its reports keep the numbers computed under the Policy in force when it locked. A new report under the new rule carries both version labels.
One ledger, many views
Any reader can apply a different Policy over the same Entries. An investor who counts lead fees as non-recurring sees that MRR, labeled as the investor's view. The ledger stays one; only the projection differs.
Example
A Directory of wedding photographers charges 200 photographers $15 a month and $40 per booked lead. Under the defaults its MRR is $3,000, and lead fees report apart at $2,400 a month. After six steady months it changes mrr.outcomeFees, and MRR reads $5,400 under version 2, with the Decision linked.
Next
- Revenue recognition: the numbers these Policies compute.
- Unit economics: where
cost.allocationandltv.horizonapply.