The money

The running jobjob_4Tx2 · delivered · workpapers-2026.txt · return.txt · $1,800.00 charged

Every way the tax brand earns, as check prints it before you sell and as the owner reads it after a year. The Tax Plan once a cycle, a notice answered with a professional or by the client, a fee on a penalty abated, an approval sold on top, a state's fee at cost, what each person is paid, and what a missed date gives back.

tax's wordsreturn is a jobtaxpayer is a subjectreview is a taskpreparer is a member

A return earns its price, less the AI, the people and services.dev's take. The brand sells seven ways:

The brand sellsWritten
A year, with allowances: a job inside one charges $0, so its ledger shows only its costprice.every, price.includes
A return, priced on its datewithin: '5d before file', late: '20%'
A professional, or the client: a taxpayer may always answer their own noticeself: 99, and self: true on the rules row
A share of a penalty abated: the one fee that rides on a resultprice.outcome, open on the notice response's rules row
A person's approval, as an upgrade: AI closes the books, an accountant attests for $600 moreapproved: 900
Each payee's 1099, $15 a payeeper: 'payees'
A state's fee, at cost, read off the filing's receiptlines.state_fees

check prints each Service's ledger and its margin, with the arithmetic that makes it:

captured/tax-check.txt · magic values: none
$ npx services.dev check
services/amended-return.ts · 22 lines · $900 per job, within 30 days, charged when file or aar is accepted.
  ledger  +$900.00 · AI $1.26 (example) · preparer $150.00 · signer $105.00 · you $643.74 · 4 jurisdictions
  margin  at least $465.00 when the first preparer does prepare ($900.00 − $150.00 preparer − $105.00 signer − $180.00 AI cap) · $337.50 at the ladder's cap, the lower of 50% and what the floor leaves · $210.00 after a decline and a second preparer
          a job that stops costs you at most $285.00
services/annual-return.ts · 45 lines · $1,800 per job, filed 5 days before its deadline, 20% off if late, or we pay the penalty and its interest, up to $5,000, after we ask the IRS to take it off, charged when file is accepted.
  ledger  +$1,800.00 · AI $1.68 (example) · signer $105.00 · you $1,693.32 · 4 jurisdictions
  margin  at least $1,335.00 when the first signer signs ($1,800.00 − $105.00 signer − $360.00 AI cap) · $1,282.50 at the ladder's cap, the lower of 50% and what the floor leaves · $1,230.00 after a decline and a second signer · $1,185.00 when a routed step runs
          a job that stops costs you at most $465.00 · filed late, $360.00 less · a missed date you answer for, up to $5,000.00 more
services/carryforward-watch.ts · 8 lines · $9 per year, charged at the start of each year.
  ledger  +$9.00 · AI $0.84 (example) · you $8.16
  margin  at least $7.20 a job (80%) · a job that stops costs you at most $1.80
services/estimate.ts · 17 lines · $79 per job, within 48 hours, charged on delivery.
  ledger  +$79.00 · AI $0.42 (example) · you $78.58
  margin  at least $63.20 a job (80%) · a job that stops costs you at most $15.80
services/information-returns.ts · 17 lines · $15 per payee, charged when file is accepted.
  ledger  +$90.00 · AI $0.84 (example) · you $89.16 · 6 payees

The Tax Plan charged $2,400 at the start of each cycle:

Call
→ GET /subscriptions/sbn_7Hq2
magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
← sbn_7Hq2 · tax-plan · active · cycle 2 · 2028-01-20 → 2029-01-20 · $2,400.00 per year
  allowances  annual-return 1 of 1 · information-returns 0 of 25 · estimate 0 of 4 · question 0 of 12 · notice-response 0 of 2
  schedule    information → information-returns · next 2029-01-05
  schedule    annual → annual-return · next 2029-02-01
  schedule    estimate → estimate · next 2028-04-05
  event       question.asked → question
  event       notice.received → notice-response
  charge      cycle 1 · $2,400.00 · 2027-01-20
  charge      cycle 2 · $2,400.00 · 2028-01-20

Each job it ordered, at its cost:

Call
→ GET /subscriptions/sbn_7Hq2
magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
# each job the plan drew on, as the owner reads its ledger
  job_4Tx1  information-returns  2026  +$0.00 · AI $0.84 · you −$0.84 · 5 payees
  job_4Tx3  annual-return        2026  +$0.00 · AI $3.36 · signer $210.00 · you −$213.36
  job_4Tx4  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4Tx5  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4Tx6  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4Tx7  notice-response            +$0.00 · AI $0.84 · representative $90.00 · you −$90.84
  job_4Tx8  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4TxA  information-returns  2027  +$0.00 · AI $0.84 · you −$0.84 · 6 payees
  job_4Tx9  annual-return        2027  you $0.00

A return on its own charges $1,800; an amendment pays two members:

Call
→ GET /owner/returns/job_4Tx2   # the owner console
magic values: none
  ledger  +$1,800.00 · AI $1.68 · signer $105.00 · you $1,693.32
Call
→ GET /owner/returns/job_4Tx3   # the owner console
magic values: none
  ledger  +$900.00 · AI $1.26 · preparer $150.00 · signer $105.00 · you $643.74

One OFFER sells both postures. Under posture: 'self' the officer answers herself, and the representative's $90 drops out:

captured/tax-money.txt · 402 · OFFER · $299 with a representative, or $99 if you answer it yourself. · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
→ POST /returns {"service":"notice-response","owner":{"name":"Ada Lovelace","email":"ada@example.com"},"ein":"12-3456789","notice":"cp161.pdf","reply_by":"2027-12-14","tax_years":["2026"],"key":"cp161-1"}
  choices   posture: 'full' · $299.00 · a CPA, enrolled agent or attorney answers for you, under a Form 2848 that names them
            posture: 'self' · $99.00 · the AI drafts the response, and you sign and send it in your own name, with nothing to authorize
  abated    on a penalty the agency takes off: 25% of what it takes off, $99.00 at least, in place of $299.00
captured/tax-money.txt · 200 · job_4Tz1 · notice-response · delivered · $99.00 charged · posture self · rules 2026-10 · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
→ GET /owner/returns/job_4Tz1   # posture self
  record  read · ai · CP161 | match · code · each payment posted to its period | classify · code · agree → pay | poa · skipped: the owner performs every act it grants | review · ai · adversarial · pass | respond · owner · signed as officer, in her own name · id-verified | send · rcp_7Hz1 accepted | pay · Treasury · accepted
  ledger  +$99.00 · AI $0.84 · you $98.16 · posture self

Circular 230 lets one fee ride on a result: a share of a penalty the IRS takes off, here a quarter, $99 at least. The rules table refuses the same key on a return:

captured/tax-money.txt · 200 · job_4Tz4 · notice-response · accepted · Harbor Partners · $367.50 charged · on the abatement's receipt · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
→ GET /owner/returns/job_4Tz4
  record  read · ai · CP162 · failure-to-file penalty $1,470.00 for 2025: 3 partners × 2 months × $245 | match · code · nothing misapplied | classify · code · penalty → respond | respond · representative · claimed by mbr_8Ea1, CAF 0312-45678R | poa · owner · Form 2848 · names mbr_8Ea1 · income, 1065, 2025 | respond · a request for first-time abatement, three clean years before it · stamped | send · rcp_7Hz7 accepted | abated · rcp_7Hz8 · $1,470.00 taken off
  price   25% of $1,470.00 abated, $367.50, above the $99.00 floor · rules 2026-10 · services['notice-response'].price_outcome

Only what the receipt states is charged:

captured/tax-money.txt · 402 · OFFER · $1,800 per return, filed 5 days before its deadline, 20% off if late, or we pay the penalty and its interest, up to $5,000, after we ask the IRS to take it off. · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
→ POST /returns {"service":"annual-return","business":{"name":"Harbor Partners","email":"books@harbor.example"},"owner":{"name":"Rosa Diaz","email":"rosa@harbor.example"},"ein":"98-7654340","tax_year":"2026","entity":"partnership","jurisdictions":["US","US-NJ"],"books":"https://books.example/harbor","key":"harbor-2026"}
  lines     state fees at cost, read off each filing's receipt · charged with the return, up to max_usd
  holds     $1,800.00 once you send max_usd · released when every filing is accepted
captured/tax-money.txt · 200 · job_4Tz3 · annual-return · accepted · $1,950.00 charged · held $2,000.00, $50.00 released · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
→ GET /owner/returns/job_4Tz3
  receipts  rcp_7Hz3 US 1065 2026 accepted · rcp_7Hz4 US-NJ NJ-1065 2026 accepted · fee $150.00
  ledger    +$1,950.00 · state fees $150.00 at cost, rcp_7Hz4 (pass-through) · AI $1.68 · signer $75.00 · you $1,723.32
  take      on $1,725.00 · the state's fee leaves the base with its receipt

A late date costs the brand, never the client:

WhenWhat happensKey
Filed after the price's deadline20% comes off the charge, released from the holdlate: '20%'
The client never answersThe job lapses, the hold is released, nothing is chargedorganizer.expires
A penalty for a date the brand or its member missedCredited back from your line, up to $5,000clocks.file.guarantee

When a date is missed walks Cedar Works' late return, from the stale credential to the credit back.

Each act is payable two days after it and paid that evening:

Call
→ GET /subscriptions/sbn_7Hq2
magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
# pay accrued to members: each act payable two days after it, paid that evening
  mbr_8Ea1  job_4Tx2  sign    $105.00  payable 2026-02-03 · paid 2026-02-03 · simulated
  mbr_8Ea1  job_4Tx3  sign    $105.00  payable 2027-07-13 · paid 2027-07-13 · simulated
  mbr_8Ea1  job_4Tx3  sign    $105.00  payable 2027-07-15 · paid 2027-07-15 · the re-sign after a repair, a new act · simulated
  mbr_8Ea1  job_4Tx7  respond $90.00   payable 2027-11-16 · paid 2027-11-16 · simulated

Ten jobs: one return at its own price, the rest inside two cycles:

Call
→ GET /subscriptions/sbn_7Hq2
magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }
# the brand
tax · 10 jobs · +$6,600.00 · AI $9.24 · people $405.00 · you $6,185.76

Money has the formula.