---
referrals: 3
kind: program
payer: domain:acme.example
code: acme_intro
category: bizdev
status: open
at: 2026-10-30T00:00:00Z
---
# Acme intro fee

Rates, amounts and names in this file are placeholders, not recommendations or market rates. Each party sets its own terms.

In plain words: a person introduces someone, and the payer accepts the intro. If a contract is signed within 180 days, that person earns a flat 370.00, once per deal. A person is a party like any other, and a record holds no name for them.

Change first: `payer`, `code`, the amount and the days. The person's handle is `local:<your party id>/<your own id for them>`. Don't pay anyone who works for the buyer or advises it: that can be bribery.

## Rules

### intro_fee

- on: contract_signed
- basis: flat
- amount: 370.00
- asset: USD
- once_per: deal

## Attribution

- model: last_touch
- allowed_kinds: intro
- requires_acceptance: intro
- window_days_by_kind.intro: 180
- match: token, deal

## Settlement

- holdback_days: 30
- clawback_days: 60
- cycle: on_demand
- payout_asset: USD
- rails: check, ach

## Conduct

- pays_customer_staff: false

## Example

Made-up lines. Jo makes two intros. The payer accepts the first, and a contract follows. The payer never accepts the second, so that contract computes nothing for Jo.

To run it, save this file as `REFERRALS.md` and these lines as `referrals.jsonl`, then run `node referrals.mjs run REFERRALS.md referrals.jsonl --as-of 2027-04-01T00:00:00Z`.

As of: 2027-04-01T00:00:00Z

```jsonl
{"type":"party","at":"2026-10-30T00:00:00Z","handle":"local:pt_921d8eb87f31deb6958d5a9e/jo","party_kind":"person"}
{"type":"agreement","code":"jo","partner":"local:pt_921d8eb87f31deb6958d5a9e/jo"}
{"type":"touch","at":"2026-12-01T09:00:00Z","token":"rf1.acme_intro.jo.meet1.tpczo0.dhb.n.-","kind":"intro","deal":"opp_j1","by":"domain:acme.example"}
{"type":"event","at":"2026-12-02T09:00:00Z","kind":"deal_accepted","source":"crm:accept_j1","deal":"opp_j1","touch":"tc_2e4827cf23026041498e8da6"}
{"type":"event","at":"2027-02-01T09:00:00Z","kind":"contract_signed","source":"contract:c_j1","deal":"opp_j1"}
{"type":"touch","at":"2026-12-05T09:00:00Z","token":"rf1.acme_intro.jo.meet2.tpkec0.dhb.n.-","kind":"intro","deal":"opp_j2","by":"domain:acme.example"}
{"type":"event","at":"2027-02-05T09:00:00Z","kind":"contract_signed","source":"contract:c_j2","deal":"opp_j2"}
```

## Worked result

Computed by `run_ledger` as of 2027-04-01T00:00:00Z, on the made-up lines above. Computed amounts are arithmetic on the records and terms you sent. They do not say what anyone owes. Your contract decides that.

| Event | Who | Working | Computed | Note |
|---|---|---|---|---|
| deal_accepted, 2026-12-02 |  | Recorded. No rule fires on this kind of event |  |  |
| contract_signed, 2027-02-01 | jo | Flat 370.00 | 370.00 |  |
| contract_signed, 2027-02-05 | jo | This kind of touch counts only after the payer accepts it. | 0.00 | X11 |

| Payee | Asset | Earned | Reversed | Net | Held | Payable |
|---|---|---|---|---|---|---|
| jo | USD | 370.00 | 0.00 | 370.00 | 0.00 | 370.00 |


## Why these settings

Acceptance gives a person's intro a date both sides can point to, and a flat amount keeps a small deal easy to explain.
