# Policies

URL: /systems/finance/policies · Id: `page:systems/finance/policies`

> Every financial number follows a declared rule, so two readers of one ledger get one answer.

A [Policy](/business/nouns/policy) is the declared rule behind a number or a recurring choice, such as how revenue is recognized or how shared [Cost](/business/nouns/cost) splits. The [Studio](/business/nouns/studio) supplies every default, and a [Startup](/business/nouns/startup) overrides one by [Decision](/business/nouns/decision).

## Why numbers need declared rules
Every financial number is a projection of [Entries](/business/nouns/entry), 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](/business/nouns/subscription) 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](/business/nouns/agreement), or sibling chain |
| `transfer.price` | A sale to a sibling books at the sibling [Offer](/business/nouns/offer)'s list [Price](/business/nouns/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](/business/nouns/guard) check every [Action](/business/nouns/action); above a stakes threshold, a [Human](/business/nouns/human) answers |

A cost cap is a [Limit](/business/nouns/limit), and a stakes threshold is a [Setting](/business/nouns/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](/business/nouns/period) forward.

```ts
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](/products/templates/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](/systems/finance/revenue-counting): the numbers these Policies compute.
- [Unit economics](/systems/finance/unit-economics): where `cost.allocation` and `ltv.horizon` apply.