---
title: "The rules table"
url: https://services.dev/docs/examples/tax/rules
captured: [tax-build.txt, tax-pool.txt, tax-rules.txt, tax-transcript-v3.txt, tax-who.txt]
---
# The rules table

URL: https://services.dev/docs/examples/tax/rules

> Who may perform each act in the tax brand's Services, frozen under a version. Who prepares and signs, the EFIN a return goes under, where the §7216 consent lets return information go, who represents, which advice waits for a signer, and the fee no return may carry. Every row is illustrative and records its position.

*tax's words: return is a job, taxpayer is a subject, review is a task, preparer is a member (examples/tax/brand.ts).*

Every row is illustrative: a brand's counsel writes its real table, and each row says what the brand does and why. An act is reserved to a credential, a consent or the brand's own credential, open to the brand, or refused: [Rules](https://services.dev/docs/people/rules.md).

```bash
cat rules.ts
```

```txt title="magic values: none"
  prepare: { reserved: preparer, where: '*', in: { 'US-CA': { all: ['ptin'], any: ['ctec', 'cpa', 'enrolled agent', 'attorney'] } }, position: 'A paid preparer holds a PTIN; on a California leg the brand staffs a CTEC registrant, a CPA, an enrolled agent or an attorney.' },
  sign: { reserved: signer, where: '*', position: 'The signer holds a PTIN, and a CPA licence or an enrolled agent\'s card, and signs as the paid preparer for the brand\'s firm.' },
  file: { reserved: preparer, and: { brand: 'efin' }, where: '*', position: 'E-filed under the brand\'s own EFIN, the signer\'s PTIN in the paid-preparer block.' },
  disclose: { reserved: { consent: '7216' }, position: '§7216: return information goes only where the taxpayer\'s signed consent names, and abroad only when it says so.' },
  price_outcome: { refused: true, position: 'Circular 230 §10.27: no fee is contingent on a return as prepared or amended.' },
  version: '2026-10',
      extend: { open: true, position: 'An extension asks for time, not a return: the brand files it, or answers that a state needs none.' },
      pay: { open: true, position: 'Paying what is owed with the extension is a payment, not a return: the brand sends it.' },
      represent: { reserved: ['cpa', 'enrolled agent', 'attorney'], where: '*', self: true, position: 'Representing a taxpayer needs one of these and a Form 2848 that names the representative; a taxpayer may answer for themselves.' },
      send: { open: true, position: 'Sending a signed response under a live authorization is a delivery act.' },
      price_outcome: { open: { on: 'abated_usd' }, position: 'Circular 230 §10.27(b): a fee on a penalty the agency abates is permitted.' },
      advise: { reserved: signer, where: '*', kind: 'advice', position: 'An answer that tells a taxpayer what to do is a signer\'s advice, adopted in their name.' },
      match: { open: true, and: { brand: 'tin_matching' }, position: 'Each payee\'s name and TIN are matched under the brand\'s own TIN matching.' },
      file: { open: true, and: { brand: 'iris' }, position: 'A 1099 reports a payment, not a return: the brand files it under its own transmitter code.' },
      order: { reserved: { brand: 'ives' }, position: 'Transcripts are ordered through the brand\'s participant status.' },
      disclose: filing.disclose,
      prepare_return: { refused: true, route: 'https://apis.tax/annual-return', position: 'A paid preparer with a PTIN prepares a return: the transcript door prepares none.' },
      represent_taxpayer: { refused: true, route: 'https://apis.tax/notice-response', position: 'A CPA, enrolled agent or attorney represents a taxpayer: the transcript door represents none.' },
      sign_consent: { refused: true, position: 'The taxpayer signs the consent: nothing here signs for them.' },
```

[The whole file](https://services.dev/docs/examples/tax/build.md#rulests), and `check` after it.

## Each row

| Service | Act | Who performs it | Where | Position |
|---|---|---|---|---|
| annual-return, amended-return | `prepare` | a PTIN holder; on a California leg, also a CTEC registration, a CPA licence, an EA card or a bar admission | every leg | The brand staffs California's leg the way California registers preparers. |
| annual-return, amended-return | `sign` | a PTIN, and a CPA licence or an EA card | every leg | The signer signs as the paid preparer for the brand's firm, by name, PTIN and credential. |
| annual-return, amended-return | `file` | a PTIN, under the brand's own EFIN | every leg | The signer never lends their own e-file number. |
| annual-return, amended-return, transcript | `disclose` | the taxpayer's signed §7216 consent | where the consent names | Return information goes nowhere the consent doesn't name, and abroad only when it says so. |
| annual-return, amended-return | `price_outcome` | refused | | Circular 230 §10.27: no fee rides on a return as prepared or amended. |
| annual-return | `extend`, `pay` | the brand: open | | An extension asks for time, not a return; a deposit is a payment. |
| notice-response | `represent` | a CPA, an EA or an attorney under a Form 2848 that names them, or the taxpayer for themselves | everywhere | |
| notice-response | `send` | the brand: open | | Sending a signed response under a live grant is a delivery act. |
| notice-response | `price_outcome` | open, on a penalty abated | | §10.27(b): a fee on a penalty the IRS takes off is permitted. |
| question | `advise` | a signer: advice | everywhere | An answer that tells a taxpayer what to do goes out in a signer's name. |
| information-returns | `match`, `file` | the brand: open, under its TIN matching and its transmitter code | | A 1099 reports a payment; it isn't a return. |
| transcript | `order` | the brand's own IVES participant status | | |
| transcript | `prepare_return`, `represent_taxpayer`, `sign_consent` | refused, the first two routed to the brand's own Services | | The transcript door prepares, represents and signs nothing. |

The `disclose` row joins the brand's two lines. The officer's consent lists each disclosure she allows, such as a lender she names, who then reads the filed return. A consent that leaves out disclosure abroad sends the review only to members who work in the US.

Each return pins the version it was ordered under, `2026-10`.

## What check reads back

Each step of the annual return, who does it, and the row that decides it:

```bash
npx services.dev check --who services/annual-return.ts
```

```txt title="magic values: none"
services/annual-return.ts · Annual Return · 12 steps · $1,800 per return, charged when the federal return is accepted
  consent    party         the owner, as officer · an ask: the §7216 consent · nothing · Free
  organizer  party         the owner · an ask: upload the request list · nothing · Free
  compute    code          schedules, your code · by: schedules, citing each one · nothing · Free
  draft      ai            AI, citing the workpapers · the default · AI, at cost · Free
  check      ai            AI, with three adversarial lenses · the default · AI, at cost · Free
  sign       credentialed  a signer from practitioners: a PTIN, and a CPA licence or an enrolled agent's card, as the paid preparer for the brand's firm · rules: sign is reserved · $45 + $15 a jurisdiction an act · Launch: roles.signer.pool at :34
  authorize  party         the owner, id-verified · an ask: Form 8879-CORP or 8879-PE · nothing · Free
  file       brand         the brand, under its own EFIN, with the signer's PTIN in the paid-preparer block · rules: file is reserved, and the brand's efin · nothing · every plan: the floor
  prepare    credentialed  a preparer from practitioners: a PTIN, and on a California leg a CTEC registration or a CPA, EA or bar card · rules: prepare is reserved; a rejection no route names · $90 + $15 a jurisdiction an act · Launch: roles.preparer.pool at :34
  tentative  code          tentative, your code · three days out and unfiled · nothing · Free
  pay        system        Treasury and each state · a submit; rules: pay is open · the taxpayer's own payment · Free
  extend     system        the IRS and each state that needs a filing · a submit; rules: extend is open · nothing · Free
  beyond     the steps: subject at :29 · subject.of_record.custodian at :31, Team · subject.keeps at :32 · the assessment, refund and expiring clocks on the subject at :55-57
  plan       Team (services.dev) · the highest line · on Free, you sign and staff prepare: check --fit free services/annual-return.ts
```

## A refused act

A refusal cites its row, names whose act it is, and meters nothing:

```txt
→ POST /returns {"service":"prepare_return","max_usd":100,"key":"prepare_return"}
```

```txt title="magic values: none"
← 403 act_refused: prepare_return is never performed here: A paid preparer with a PTIN prepares a return: the transcript door prepares none.
  cites  rules 2026-10 · services['transcript'].prepare_return
  next   hand_to_person https://apis.tax/annual-return

→ POST /returns {"service":"represent_taxpayer","max_usd":100,"key":"represent_taxpayer"}
← 403 act_refused: represent_taxpayer is never performed here: A CPA, enrolled agent or attorney represents a taxpayer: the transcript door represents none.
  cites  rules 2026-10 · services['transcript'].represent_taxpayer
  next   hand_to_person https://apis.tax/notice-response

→ POST /returns {"service":"sign_consent","max_usd":100,"key":"sign_consent"}
← 403 act_refused: sign_consent is never performed here: The taxpayer signs the consent: nothing here signs for them.
  cites  rules 2026-10 · services['transcript'].sign_consent
  next   none: the act is never performed here

← GET /owner/events: no return.ordered and no charge, and the key has spent $0
```

A refused row binds a price too. A fee on a return's refund fails `check`; the notice response's abatement may carry one:

```bash
npx services.dev check services/annual-return.ts
```

```txt title="magic values: none"
services/annual-return.ts · 45 lines · $1,800 per job, or 20% of the refund, 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.
  ✗ rules_refused · annual-return price.outcome: rules 2026-10 refuses a fee contingent on the return as prepared. Circular 230 §10.27: no fee is contingent on a return as prepared or amended. Take outcome off the price; a notice's abated penalty may carry one.
    at services/annual-return.ts:60 · price.outcome · rules.ts:16 · price_outcome
✗ 1 to fix
  next    Take outcome off the price.
```

```bash
npx services.dev check services/notice-response.ts --only price
```

```txt title="magic values: none"
services/notice-response.ts · 19 lines · $299 per job, or $99 if you answer it yourself, or 25% of a penalty abated, $99 at least, within 48 hours, charged on send's receipt.
  price   outcome on abated_usd · 25%, $99.00 at least · when kind is penalty · rules 2026-10 · services['notice-response'].price_outcome, open
```

## A state the row doesn't cover

A row with `in` asks more of one leg. A PTIN alone can't claim California's repair; an EA card can:

```txt
→ POST /reviews/tsk_7Hq3/claim   # as mbr_7Hq6
```

```txt title="magic values: none"
← 403 ineligible · credential: prepare on US-CA needs ptin, and ctec, cpa, enrolled agent or attorney, and the verifier holds ptin alone for mbr_7Hq6 · rules 2026-10 · services['annual-return'].prepare
```

```txt
→ POST /reviews/tsk_7Hq3/claim   # as mbr_8Ea1
```

```txt title="magic values: none"
← 200 claimed · prepare · tsk_7Hq3 · US-CA · $150.00 · held for you 24 hours
```

A lender the consent doesn't name is refused at $0:

```txt
→ POST /returns {"service":"transcript","taxpayer":{"name":"Fern & Co","email":"books@fern.example"},"ein":"98-7654350","tin_last4":"4350","years":[2026],"source":"filed","purpose":"business lending","max_usd":12,"key":"tr-fern-2"}   # Northline Credit's key
```

```txt title="magic values: none"
← 403 consent_required: disclose needs the taxpayer's §7216 consent to name this lender, and job_4Ta1's names Harbor Bank alone. Ask Maya Fern for one, or order with source: 'ives' and her Form 4506-C.
  cites  rules 2026-10 · services['transcript'].disclose
  next   hand_to_person https://apis.tax/asks/new?consent=7216&for=Northline%20Credit
```

[Where an act happens](https://services.dev/docs/people/where.md) covers `where` and `in`, and [Refusals and cures](https://services.dev/docs/people/refusals.md) every refusal a row can bring.

---

- Up: [The tax example](https://services.dev/docs/examples/tax.md)
- Previous: [What the brand gets](https://services.dev/docs/examples/tax/surfaces.md)
- Next: [The preparers' Pool](https://services.dev/docs/examples/tax/pool.md)
