---
title: "Tax question"
url: https://services.dev/docs/examples/tax/question
captured: [tax-agent.txt, tax-build.txt, tax-check.txt]
---
# Tax question

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

> A taxpayer's question, answered by AI in the job's thread with its sources. An answer that tells them what to do is advice the rules reserve, so a signer from the Pool adopts it as written, revises it, or refuses it, and it goes out in the signer's name.

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

Most questions are facts: when an estimate is due, what a form is for. Some are advice: whether to deduct the van. The AI answers every one in the job's thread and cites what it rests on. The rules table reserves `advise` to a signer, so an answer that tells the taxpayer what to do waits for one.

```bash
cat services/question.ts
```

```txt title="magic values: none"
import { Service } from 'services.dev'
import { preparers } from '../pools/preparers.ts'
import rules from '../rules.ts'

// The AI answers a taxpayer's question in the job's thread, citing what it rests on. An answer that tells them what to do
// is advice the rules reserve: it waits until a signer from the Pool adopts it as written, revises it, or refuses it,
// and what the client reads goes out in the signer's name.
export default Service({
  name: 'Tax Question',
  description: 'A tax question, answered with its sources.',
  input: { owner: 'party: who asks', ein: 'text: such as 12-3456789', question: 'text: such as Can we deduct the van?' },
  output: { answer: 'text' },
  rules,
  subject: { kind: 'taxpayer', key: 'ein' },
  roles: { signer: { pool: preparers, pay: 25 } },
  talk: { with: 'owner', adopt: { by: 'signer', may: ['adopt', 'revise', 'refuse'], checklist: ['the authority cited says what the answer says', 'the facts it assumes are the facts in the thread'] } },
  deliver: { answer: { by: 'ai', cite: 'the code, its regulations and the agency guidance it rests on' } },
  price: 49,
})
```

```bash
npx services.dev check
```

```txt title="magic values: none"
services/question.ts · 10 lines · $49 per job, within 48 hours, charged on delivery.
  bounds  reserved advise to ptin, and cpa or enrolled agent: an answer that is advice waits for a signer to adopt, revise or refuse it
  talk    the AI answers the client · advice (advise, rules 2026-10) held for the signer, who adopts, revises or refuses it on a 2-item checklist, included, up to 3 answers · contact relays through the thread
```

## Adopt, revise or refuse

The held answer posts to the Pool as a review for a signer, $25 an act. The signer reads the question, the answer and its sources, and does one of three things on a two-item checklist: the authority says what the answer says, and the facts it assumes are the facts in the thread.

| The signer | The taxpayer gets |
|---|---|
| adopts it | the AI's answer, in the signer's name |
| revises it | the signer's version, in their name, with what changed on the record |
| refuses it | nothing from the AI; the signer writes the answer, or says why there isn't one |

## Inside the plan

On the Tax Plan a `question.asked` event orders it inside the allowance, twelve a year. A bookkeeping agent asks the same way, and the answer waits for its signer:

```txt
→ tools/call get_return {"id":"job_4Ta5","wait":50}
```

```txt title="magic values: none"
← job_4Ta5 · question · delivered · $0.00
  answer    held: it tells the business what to do, so it waited for a signer · adopted as written by mbr_8Ea1, Katherine Johnson, EA, in her own name
  next      list_return_messages {"id":"job_4Ta5"}
```

[Talk](https://services.dev/docs/service/talk.md) covers `talk.adopt`, and [the rules table](https://services.dev/docs/examples/tax/rules.md) the `advise` row.

---

- Up: [The tax example](https://services.dev/docs/examples/tax.md)
- Previous: [Estimated payment](https://services.dev/docs/examples/tax/estimate.md)
- Next: [Notice response](https://services.dev/docs/examples/tax/notice-response.md)
