@invaro/opentax 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +64 -0
  2. package/bundle/http.js +37595 -0
  3. package/bundle/index.js +36289 -0
  4. package/bundle/main.js +45281 -0
  5. package/package.json +16 -14
  6. package/dist/documents.d.ts +0 -177
  7. package/dist/documents.d.ts.map +0 -1
  8. package/dist/documents.js +0 -246
  9. package/dist/documents.js.map +0 -1
  10. package/dist/hosted-bundle.d.ts +0 -8
  11. package/dist/hosted-bundle.d.ts.map +0 -1
  12. package/dist/hosted-bundle.js +0 -8
  13. package/dist/hosted-bundle.js.map +0 -1
  14. package/dist/http.d.ts +0 -15
  15. package/dist/http.d.ts.map +0 -1
  16. package/dist/http.js +0 -90
  17. package/dist/http.js.map +0 -1
  18. package/dist/index.d.ts +0 -9
  19. package/dist/index.d.ts.map +0 -1
  20. package/dist/index.js +0 -13
  21. package/dist/index.js.map +0 -1
  22. package/dist/schema.d.ts +0 -60
  23. package/dist/schema.d.ts.map +0 -1
  24. package/dist/schema.js +0 -467
  25. package/dist/schema.js.map +0 -1
  26. package/dist/server.d.ts +0 -14
  27. package/dist/server.d.ts.map +0 -1
  28. package/dist/server.js +0 -509
  29. package/dist/server.js.map +0 -1
  30. package/dist/state-return/ca.d.ts +0 -3
  31. package/dist/state-return/ca.d.ts.map +0 -1
  32. package/dist/state-return/ca.js +0 -108
  33. package/dist/state-return/ca.js.map +0 -1
  34. package/dist/state-return/il.d.ts +0 -3
  35. package/dist/state-return/il.d.ts.map +0 -1
  36. package/dist/state-return/il.js +0 -64
  37. package/dist/state-return/il.js.map +0 -1
  38. package/dist/state-return/index.d.ts +0 -8
  39. package/dist/state-return/index.d.ts.map +0 -1
  40. package/dist/state-return/index.js +0 -38
  41. package/dist/state-return/index.js.map +0 -1
  42. package/dist/state-return/money.d.ts +0 -10
  43. package/dist/state-return/money.d.ts.map +0 -1
  44. package/dist/state-return/money.js +0 -18
  45. package/dist/state-return/money.js.map +0 -1
  46. package/dist/state-return/ny.d.ts +0 -3
  47. package/dist/state-return/ny.d.ts.map +0 -1
  48. package/dist/state-return/ny.js +0 -59
  49. package/dist/state-return/ny.js.map +0 -1
  50. package/dist/state-return/shape.d.ts +0 -80
  51. package/dist/state-return/shape.d.ts.map +0 -1
  52. package/dist/state-return/shape.js +0 -97
  53. package/dist/state-return/shape.js.map +0 -1
  54. package/dist/state-return/types.d.ts +0 -17
  55. package/dist/state-return/types.d.ts.map +0 -1
  56. package/dist/state-return/types.js +0 -6
  57. package/dist/state-return/types.js.map +0 -1
  58. package/dist/state-return/va-worksheets.d.ts +0 -70
  59. package/dist/state-return/va-worksheets.d.ts.map +0 -1
  60. package/dist/state-return/va-worksheets.js +0 -116
  61. package/dist/state-return/va-worksheets.js.map +0 -1
  62. package/dist/state-return/va.d.ts +0 -3
  63. package/dist/state-return/va.d.ts.map +0 -1
  64. package/dist/state-return/va.js +0 -130
  65. package/dist/state-return/va.js.map +0 -1
  66. package/dist/state-return.d.ts +0 -4
  67. package/dist/state-return.d.ts.map +0 -1
  68. package/dist/state-return.js +0 -3
  69. package/dist/state-return.js.map +0 -1
package/dist/server.js DELETED
@@ -1,509 +0,0 @@
1
- /**
2
- * @invaro/opentax — the tax oracle for AI agents, over the Model Context
3
- * Protocol (transport-agnostic server factory).
4
- *
5
- * The contract for the model: NEVER compute tax yourself — call these tools.
6
- * Every answer is derived from a content-addressed corpus of cited rules,
7
- * ships its assumptions, and is independently re-verifiable.
8
- *
9
- * claude mcp add opentax -- npx -y @invaro/opentax
10
- */
11
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
12
- import { z } from "zod";
13
- import { evaluate, OpenTaxError, parseDollars } from "@invaro/opentax-core";
14
- import { compareAcross, factCheck, findCliffs, lookupParameters } from "@invaro/opentax-solve";
15
- import { composeStateReturn, makeStateTaxEvaluator, stateReturnShape } from "@invaro/opentax-compose";
16
- import { matchOccupation, TIPPED_OCCUPATIONS } from "@invaro/opentax-corpus-us-federal";
17
- import { buildFactsValidated, businessShape, corpus, dependentShape, factsObjectParam, fiduciaryShape, individualNestedShape, money, } from "./schema.js";
18
- function ok(payload) {
19
- return { content: [{ type: "text", text: JSON.stringify(payload, null, 2) }] };
20
- }
21
- function fail(err) {
22
- const payload = err instanceof OpenTaxError
23
- ? { ok: false, error: err.toJSON() }
24
- : { ok: false, error: { code: "ERROR", message: String(err?.message ?? err) } };
25
- return {
26
- content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
27
- isError: true,
28
- };
29
- }
30
- const fmt = (cents) => {
31
- const sign = cents < 0n ? "-" : "";
32
- let abs = cents < 0n ? -cents : cents;
33
- const dollars = (abs / 100n)
34
- .toString()
35
- .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
36
- return `${sign}$${dollars}.${(abs % 100n).toString().padStart(2, "0")}`;
37
- };
38
- // ---------------------------------------------------------------------------
39
- /** Build a fully-registered opentax MCP server (one per transport/session). */
40
- export function createServer() {
41
- const server = new McpServer({ name: "opentax", version: "0.1.0" });
42
- server.registerTool("calculate_tax", {
43
- description: "Compute US federal INDIVIDUAL income tax (or balance due if withholding is given) from a content-addressed corpus of cited rules. NEVER estimate tax yourself — call this, and report ONLY numbers returned by oracle calls made with the real facts (never hand-check or approximate a line the oracle can compute: your recalled parameters may be stale). Negative result = refund. Returns the answer, every assumption made, and hashes that let anyone re-verify the full derivation offline. Facts are grouped (filing, income, retirement, credits, …) — fill the groups that apply; unknown keys are rejected, and the engine names any missing fact the target needs. When source documents CONFLICT on a value, do not silently pick one: compute both branches, disclose the conflict and your choice; an interview/confirmation answer (rollover, conversion, taxable-amount screens) usually reflects taxpayer intent better than a payer form's box code — prefer it and disclose. That heuristic covers FACTS only: LEGAL classifications (qualifying child vs other dependent, filing status, SSTB) follow the statute's tests, not intake checkbox labels — a generic 'claim dependent credit' flag does not convert a qualifying child into an ODC dependent. TRANSCRIBE documented amounts as given even when they look anomalous (e.g. state withholding in a no-income-tax state): disclose the anomaly, never delete or 'correct' a documented number from outside knowledge. If you believe an oracle result is wrong, report the ORACLE's number and note your dissent — never substitute your own: the corpus is primary-source-verified and your recollection is not. Business entities → calculate_business_tax; estates/trusts → calculate_fiduciary_tax; § 152 dependency → determine_dependent.",
44
- inputSchema: z.object(individualNestedShape).strict(),
45
- }, async (args) => {
46
- try {
47
- const { facts, asOf, target, documentNotes } = buildFactsValidated(args);
48
- const { value, proof } = evaluate(corpus, facts, { asOf, target });
49
- const cents = value.type === "money" ? value.cents : 0n;
50
- return ok({
51
- ok: true,
52
- target,
53
- asOf,
54
- answer: fmt(cents),
55
- valueCents: cents.toString(),
56
- ...(documentNotes.length ? { documentNotes } : {}),
57
- meaning: target === "us.federal.balance_due"
58
- ? cents < 0n
59
- ? "refund expected at filing"
60
- : "balance due at filing"
61
- : cents < 0n
62
- ? "net refund (refundable credits exceed tax)"
63
- : "net federal income tax",
64
- assumptions: proof.assumptions,
65
- corpusMerkleRoot: proof.corpus.merkleRoot,
66
- artifactHash: proof.artifactHash,
67
- note: "Tell the user about any assumptions that may not match their situation. This is computation with citations, not tax advice.",
68
- });
69
- }
70
- catch (err) {
71
- return fail(err);
72
- }
73
- });
74
- server.registerTool("calculate_business_tax", {
75
- description: "Compute US federal BUSINESS-ENTITY tax from the same cited corpus: check-the-box entity classification, Form 1120 corporate income tax (§ 179/168(k)/174A/163(j)/DRD/NOL, § 250, GBC/FTC/BEAT), S-corp entity taxes, corporate estimates, the § 4501 buyback excise, AET and PHC taxes. Individual returns → calculate_tax. Unknown keys are rejected; unmodeled territory refuses loudly with the reason.",
76
- inputSchema: z.object(businessShape).strict(),
77
- }, async (args) => {
78
- try {
79
- const { facts, asOf, target } = buildFactsValidated(args, "us.federal.corp.entity_level_income_tax");
80
- const { value, proof } = evaluate(corpus, facts, { asOf, target });
81
- const cents = value.type === "money" ? value.cents : 0n;
82
- return ok({
83
- ok: true,
84
- target,
85
- asOf,
86
- answer: fmt(cents),
87
- valueCents: cents.toString(),
88
- assumptions: proof.assumptions,
89
- corpusMerkleRoot: proof.corpus.merkleRoot,
90
- artifactHash: proof.artifactHash,
91
- note: "Tell the user about any assumptions that may not match their situation. This is computation with citations, not tax advice.",
92
- });
93
- }
94
- catch (err) {
95
- return fail(err);
96
- }
97
- });
98
- server.registerTool("calculate_fiduciary_tax", {
99
- description: "Compute US federal income tax for an ESTATE or TRUST (Form 1041): the § 1(e) compressed brackets and § 642(b) exemption. Input is taxable income before the exemption, after the §§ 651/661 distribution deduction. Retained capital gains refuse loudly (§ 1(h) trust breakpoints not modeled). Grantor trusts belong on the grantor's individual return via calculate_tax.",
100
- inputSchema: z.object(fiduciaryShape).strict(),
101
- }, async (args) => {
102
- try {
103
- const { facts, asOf, target } = buildFactsValidated(args, "us.federal.fiduciary.income_tax");
104
- const { value, proof } = evaluate(corpus, facts, { asOf, target });
105
- const cents = value.type === "money" ? value.cents : 0n;
106
- return ok({
107
- ok: true,
108
- target,
109
- asOf,
110
- answer: fmt(cents),
111
- valueCents: cents.toString(),
112
- assumptions: proof.assumptions,
113
- corpusMerkleRoot: proof.corpus.merkleRoot,
114
- artifactHash: proof.artifactHash,
115
- note: "Tell the user about any assumptions that may not match their situation. This is computation with citations, not tax advice.",
116
- });
117
- }
118
- catch (err) {
119
- return fail(err);
120
- }
121
- });
122
- server.registerTool("determine_dependent", {
123
- description: "Determine whether ONE candidate person is the taxpayer's § 152 dependent — qualifying child or qualifying relative, including multiple-support agreements and the divorced-parents release — as a proof-backed yes/no with citations. Feed the result into calculate_tax's credits group (qualifyingChildren / otherDependents).",
124
- inputSchema: z.object(dependentShape).strict(),
125
- }, async (args) => {
126
- try {
127
- const { facts, asOf, target } = buildFactsValidated(args, "us.federal.dependent.is_dependent");
128
- const { value, proof } = evaluate(corpus, facts, { asOf, target });
129
- const answer = value.type === "bool" ? (value.value ? "yes" : "no") : fmt(value.type === "money" ? value.cents : 0n);
130
- return ok({
131
- ok: true,
132
- target,
133
- asOf,
134
- answer,
135
- assumptions: proof.assumptions,
136
- corpusMerkleRoot: proof.corpus.merkleRoot,
137
- artifactHash: proof.artifactHash,
138
- });
139
- }
140
- catch (err) {
141
- return fail(err);
142
- }
143
- });
144
- server.registerTool("compute_state_return", {
145
- description: "Compose a STATE return's printed-form line set deterministically (2025 IL-1040 / VA 760 / CA 540 / NY IT-201) — correct line NUMBERS from the printed forms and whole-dollar rounding, with the state tax computed by the oracle targets internally. Workflow: run compute_return first for the federal substrate, compute any state-specific components the citations describe (additions, subtractions, credits without targets — disclose each), then call this ONCE and report its line set VERBATIM. Never hand-assemble state line numbers: transposed lines on correct dollars are the dominant state error mode. ALWAYS pass taxableSocialSecurity and unemploymentCompensation when nonzero (VA/CA/NY subtractions are applied by the composer). ALWAYS transcribe the intake's state-specific block (e.g. ca_tax_return.ca_form540_schca: AB 5 employee-classification additions; va_sch_a fields; county/use-tax questions) — those fields drive composer inputs. For VA MFJ, pass vaYourVagi/vaSpouseVagi (the separate-VAGI worksheet) so the composer can run the Spouse Tax Adjustment worksheet itself.",
146
- inputSchema: z
147
- .object({ ...stateReturnShape, asOf: z.string().describe("year-end date, e.g. 2025-12-31 — REQUIRED"), filingJoint: z.boolean().optional(), filingHoh: z.boolean().optional(), filingHohOrQss: z.boolean().optional() })
148
- .strict(),
149
- }, async (args) => {
150
- try {
151
- const asOf = args.asOf;
152
- if (!asOf)
153
- throw new Error("asOf is required — pass the tax year's year-end date");
154
- const evalStateTax = makeStateTaxEvaluator((facts, target) => {
155
- const { value } = evaluate(corpus, facts, { asOf, target });
156
- return value.type === "money" ? value.cents : 0n;
157
- }, args);
158
- const { lines, notes } = composeStateReturn(args, evalStateTax);
159
- return ok({ ok: true, asOf, jurisdiction: args.jurisdiction, lines, ...(notes.length ? { notes } : {}) });
160
- }
161
- catch (err) {
162
- return fail(err);
163
- }
164
- });
165
- server.registerTool("compute_return", {
166
- description: "Compute the COMPLETE scored Form 1040 line set in one call — the exact 17 lines TaxCalcBench-style evaluations grade (1a, 9, 10, 11, 12e, 15, 16, 17 AMT, 19, 22, 23, 24, 25d, 27a, 28, 32, 33, 34/37), each whole-dollar rounded by the engine. Takes the SAME input as calculate_tax (prefer the documents block: transcribe W-2/1099-R/SSA-1099 boxes and dependent birth dates — SSA-1099s are first-class, box 5 and box 6 are summed for you; the tool derives ages, classifications, Part IV withholding, and penalties deterministically). Never assemble return lines by hand — this tool is the return. TRANSCRIPTION CONVENTIONS: (1) a PRIOR-YEAR Form 1040 in the file supplies CONTINUING conditions the current-year interview omits — the 'Someone can claim: You as a dependent' checkbox and the blindness boxes carry forward unless the current-year data contradicts them; (2) COMMUNITY PROPERTY: do NOT split income 50/50 between MFS spouses when they lived apart all year with no transfers (§ 66(a) allocates earned income to the earner) or when a written separation agreement ended the community — transcribe each document to its named earner; never invent a Form 8958 split the intake does not request; (3) bonus depreciation for assets placed in service 1/1-1/19/2025 is 40% (§ 168(k) pre-OBBBA phase-down; 100% only for property ACQUIRED after 1/19/2025).",
167
- inputSchema: z.object(individualNestedShape).strict(),
168
- }, async (args) => {
169
- try {
170
- const { facts, asOf, documentNotes, w2Box1Cents } = buildFactsValidated(args);
171
- const get = (target) => {
172
- const { value } = evaluate(corpus, facts, { asOf, target });
173
- return value.type === "money" ? value.cents : 0n;
174
- };
175
- const rd = (c) => {
176
- const neg = c < 0n;
177
- const abs = neg ? -c : c;
178
- const r = ((abs + 50n) / 100n) * 100n;
179
- return neg ? -r : r;
180
- };
181
- const gross = get("us.federal.gross_income");
182
- const agi = get("us.federal.agi");
183
- const deduction = get("us.federal.deduction_election");
184
- const ti = get("us.federal.taxable_income");
185
- const tax16 = get("us.federal.income_tax_before_credits");
186
- const amt = get("us.federal.amt");
187
- const ctc = get("us.federal.ctc");
188
- const after = get("us.federal.income_tax_after_credits");
189
- const other = get("us.federal.other_taxes");
190
- const eitc = get("us.federal.eitc");
191
- const actc = get("us.federal.actc");
192
- const aotcRef = get("us.federal.education.aotc_refundable");
193
- const refundable = get("us.federal.refundable_credits");
194
- const wagesFact = facts.wages;
195
- const wages = wagesFact && wagesFact.type === "money" ? BigInt(wagesFact.value) : 0n;
196
- const withheldFact = facts.federalTaxWithheld;
197
- const withheld = withheldFact && withheldFact.type === "money" ? BigInt(withheldFact.value) : 0n;
198
- const extFact = facts.federalExtensionPayment;
199
- const extension = extFact && extFact.type === "money" ? BigInt(extFact.value) : 0n;
200
- const estFact = facts.federalEstimatedPayments;
201
- const estimated = estFact && estFact.type === "money" ? BigInt(estFact.value) : 0n;
202
- const total24 = rd(after) + rd(other);
203
- const payments = rd(withheld) + rd(refundable) + rd(extension) + rd(estimated);
204
- const balance = payments - total24;
205
- const { proof } = evaluate(corpus, facts, { asOf, target: "us.federal.net_tax" });
206
- const d = (c) => fmt(rd(c));
207
- return ok({
208
- ok: true,
209
- asOf,
210
- ...(documentNotes.length ? { documentNotes } : {}),
211
- lines: {
212
- // Form 1040 line 1a is W-2 box 1 ONLY; anything else folded into the
213
- // wages fact (e.g. pre-retirement disability per Pub. 525) is line 1h.
214
- "1a_wages": d(w2Box1Cents ?? wages),
215
- ...(w2Box1Cents !== undefined && wages > w2Box1Cents
216
- ? { "1h_other_earned_income": d(wages - w2Box1Cents) }
217
- : {}),
218
- "9_total_income": d(gross),
219
- "10_adjustments": d(gross - agi),
220
- "11_agi": d(agi),
221
- "12e_deduction": d(deduction),
222
- "15_taxable_income": d(ti),
223
- "16_tax": d(tax16),
224
- "17_amt": d(amt),
225
- "19_ctc_odc": d(ctc),
226
- "22_tax_after_credits": d(after),
227
- "23_other_taxes": d(other),
228
- "24_total_tax": fmt(total24),
229
- "25d_withholding": d(withheld),
230
- "26_estimated_payments": d(estimated),
231
- "27a_eitc": d(eitc),
232
- "28_actc": d(actc),
233
- "29_aotc_refundable": d(aotcRef),
234
- "32_refundable_credits": d(refundable),
235
- ...(extension > 0n ? { "31_other_payments_incl_extension": fmt(rd(extension)) } : {}),
236
- "33_total_payments": fmt(payments),
237
- "34_refund_or_37_owed": balance >= 0n ? `refund ${fmt(balance)}` : `owed ${fmt(-balance)}`,
238
- },
239
- note: "Lines 9-37 are engine-computed and whole-dollar rounded; senior/tips/overtime/QBI deductions sit between 12e and 15 (lines 13-14). Line 1a is W-2 box 1 ONLY (Form 1040); non-W-2 earned income (e.g. pre-retirement disability) is line 1h. Gross document lines (4a/5a/6a) come from your transcription. Report these numbers as-is.",
240
- assumptions: proof.assumptions,
241
- corpusMerkleRoot: proof.corpus.merkleRoot,
242
- });
243
- }
244
- catch (err) {
245
- return fail(err);
246
- }
247
- });
248
- server.registerTool("verify_tax_claim", {
249
- description: "Verify a claimed tax amount (yours, a user's, or another tool's) against the law. Returns verdict 'verified' or 'refuted' with the correct value. Use this as a self-check before presenting any tax number. Put asOf (and target, if any) INSIDE the facts object — e.g. facts: {..., \"asOf\": \"2025-12-31\"} — otherwise the claim is checked under today's law.",
250
- inputSchema: z
251
- .object({
252
- facts: factsObjectParam,
253
- claimedAmount: money.describe("the amount to verify (negative = refund)"),
254
- toleranceDollars: z.number().min(0).optional().describe("default 1"),
255
- })
256
- .strict(),
257
- }, async (args) => {
258
- try {
259
- const { facts, asOf, target } = buildFactsValidated(args.facts);
260
- const { value, proof } = evaluate(corpus, facts, { asOf, target });
261
- const actual = value.type === "money" ? value.cents : 0n;
262
- const claimed = parseDollars(args.claimedAmount);
263
- const tolerance = BigInt(Math.round((args.toleranceDollars ?? 1) * 100));
264
- const diff = actual - claimed;
265
- const abs = diff < 0n ? -diff : diff;
266
- return ok({
267
- ok: true,
268
- verdict: abs <= tolerance ? "verified" : "refuted",
269
- claimed: fmt(claimed),
270
- correct: fmt(actual),
271
- differenceCents: diff.toString(),
272
- assumptions: proof.assumptions,
273
- corpusMerkleRoot: proof.corpus.merkleRoot,
274
- });
275
- }
276
- catch (err) {
277
- return fail(err);
278
- }
279
- });
280
- server.registerTool("list_input_facts", {
281
- description: "Discover every input the tax corpus understands: id, type, whether required, and its documented default. Call this if unsure what information to collect from the user.",
282
- inputSchema: z.object({}).strict(),
283
- }, async () => {
284
- return ok({
285
- ok: true,
286
- facts: corpus.facts.map((f) => ({
287
- id: f.id,
288
- type: f.type,
289
- ...(f.enumValues ? { enumValues: f.enumValues } : {}),
290
- required: f.default === undefined,
291
- ...(f.default !== undefined ? { default: f.default.value } : {}),
292
- description: f.description,
293
- })),
294
- });
295
- });
296
- server.registerTool("explain_rule", {
297
- description: "Get a tax rule's statutory citation, verbatim excerpt, validity window, parameters, and dependencies. Use to quote the actual law behind an answer.",
298
- inputSchema: z
299
- .object({
300
- ruleId: z
301
- .string()
302
- .describe('e.g. "us.federal.standard_deduction" — list via calculate_tax proof or corpus'),
303
- })
304
- .strict(),
305
- }, async ({ ruleId }) => {
306
- const versions = corpus.byId.get(ruleId);
307
- if (!versions) {
308
- const near = [...corpus.byId.keys()].filter((id) => id.includes(ruleId));
309
- return fail(new Error(`unknown rule "${ruleId}"${near.length ? ` — did you mean: ${near.slice(0, 5).join(", ")}` : ""}`));
310
- }
311
- return ok({
312
- ok: true,
313
- versions: versions.map((r) => ({
314
- id: r.id,
315
- version: r.version,
316
- title: r.title,
317
- citation: r.citation,
318
- effectiveFrom: r.effectiveFrom,
319
- effectiveTo: r.effectiveTo ?? "open",
320
- parameters: r.parameters,
321
- hash: corpus.ruleHashes.get(`${r.id}@${r.version}`),
322
- })),
323
- });
324
- });
325
- server.registerTool("find_tax_cliffs", {
326
- description: "Find exact dollar amounts where one more cent of an input costs MORE than a cent of tax (marginal rate over 100%) — e.g. the EITC investment-income kill switch, CTC phase-out steps. Every probe is a real evaluation.",
327
- inputSchema: z
328
- .object({
329
- facts: factsObjectParam,
330
- vary: z.string().describe('money fact to vary, e.g. "wages" or "taxableInterest"'),
331
- fromDollars: z.number(),
332
- toDollars: z.number(),
333
- stepDollars: z.number().optional().describe("coarse scan step, default 1000"),
334
- })
335
- .strict(),
336
- }, async (args) => {
337
- try {
338
- const { facts, asOf, target } = buildFactsValidated(args.facts);
339
- const result = findCliffs(corpus, facts, {
340
- vary: args.vary,
341
- fromCents: BigInt(Math.round(args.fromDollars * 100)),
342
- toCents: BigInt(Math.round(args.toDollars * 100)),
343
- stepCents: args.stepDollars
344
- ? BigInt(Math.round(args.stepDollars * 100))
345
- : undefined,
346
- asOf,
347
- target,
348
- });
349
- return ok({
350
- ok: true,
351
- cliffs: result.cliffs.map((c) => ({
352
- at: fmt(c.atCents),
353
- oneMoreCentCosts: fmt(c.jumpCents),
354
- })),
355
- corpusMerkleRoot: result.corpusMerkleRoot,
356
- });
357
- }
358
- catch (err) {
359
- return fail(err);
360
- }
361
- });
362
- server.registerTool("compare_filing_statuses", {
363
- description: "Compute the answer under every filing status for the same facts — e.g. to answer 'should we file jointly or separately?'. Statuses that need more facts report their error instead of guessing.",
364
- inputSchema: z.object({ facts: factsObjectParam }).strict(),
365
- }, async (args) => {
366
- try {
367
- const { facts, asOf, target } = buildFactsValidated(args.facts);
368
- const result = compareAcross(corpus, facts, {
369
- vary: "filingStatus",
370
- asOf,
371
- target,
372
- });
373
- return ok({
374
- ok: true,
375
- scenarios: result.scenarios.map((s) => s.ok
376
- ? { filingStatus: s.value, result: fmt(s.valueCents) }
377
- : { filingStatus: s.value, error: s.errorCode, message: s.errorMessage }),
378
- corpusMerkleRoot: result.corpusMerkleRoot,
379
- });
380
- }
381
- catch (err) {
382
- return fail(err);
383
- }
384
- });
385
- server.registerTool("lookup_tax_parameter", {
386
- description: "Look up the current-law dollar amounts behind a question ('standard deduction', 'CTC phase-out threshold', 'tips deduction cap') with their statutory citations and validity windows. Use this to fact-check ANY tax number before stating it — your training data likely predates the OBBBA.",
387
- inputSchema: z
388
- .object({
389
- query: z.string().describe("plain-English search, e.g. 'standard deduction'"),
390
- asOf: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
391
- })
392
- .strict(),
393
- }, async ({ query, asOf }) => {
394
- const when = asOf ?? new Date().toISOString().slice(0, 10);
395
- const hits = lookupParameters(corpus, query, when);
396
- return ok({
397
- ok: true,
398
- query,
399
- asOf: when,
400
- hits: hits.map((h) => ({
401
- ruleId: h.ruleId,
402
- title: h.title,
403
- citation: h.citation,
404
- effective: `[${h.effectiveFrom}, ${h.effectiveTo ?? "open"})`,
405
- byFilingStatus: Object.fromEntries(Object.entries(h.byFilingStatus).map(([k, v]) => [k, fmt(BigInt(v))])),
406
- parameters: Object.fromEntries(Object.entries(h.parameters).map(([k, v]) => [k, fmt(BigInt(v))])),
407
- })),
408
- corpusMerkleRoot: corpus.merkleRoot,
409
- });
410
- });
411
- server.registerTool("verify_fact", {
412
- description: "Fact-check a claimed dollar amount about tax law ('the 2026 MFJ standard deduction is $32,200', 'CTC is $2,000 per child') against the corpus. Returns verified / refuted (with the correct value and citation) / unknown. Never states a verdict it cannot ground.",
413
- inputSchema: z
414
- .object({
415
- query: z.string().describe("what the amount is, e.g. 'standard deduction'"),
416
- claimedAmount: money,
417
- filingStatus: z.enum(["single", "mfj", "mfs", "hoh", "qss"]).optional(),
418
- asOf: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
419
- })
420
- .strict(),
421
- }, async ({ query, claimedAmount, filingStatus, asOf }) => {
422
- try {
423
- const when = asOf ?? new Date().toISOString().slice(0, 10);
424
- const result = factCheck(corpus, query, parseDollars(claimedAmount), when, filingStatus);
425
- if (result.verdict === "unknown") {
426
- return ok({ ok: true, verdict: "unknown", message: result.message });
427
- }
428
- if (result.verdict === "verified") {
429
- return ok({
430
- ok: true,
431
- verdict: "verified",
432
- claimed: fmt(BigInt(result.claimedCents)),
433
- rule: result.matchedRuleId,
434
- field: result.matchedField,
435
- citation: result.citation,
436
- asOf: when,
437
- corpusMerkleRoot: corpus.merkleRoot,
438
- });
439
- }
440
- // refuted: no corpus value matches the claim — report the values that
441
- // DO exist near this query so the agent can state the right number
442
- const nearby = [
443
- { rule: result.matchedRuleId, field: result.matchedField, value: fmt(BigInt(result.actualCents)) },
444
- ...result.alternatives.flatMap((h) => [
445
- ...Object.entries(h.byFilingStatus).map(([k, v]) => ({
446
- rule: h.ruleId,
447
- field: k,
448
- value: fmt(BigInt(v)),
449
- })),
450
- ...Object.entries(h.parameters).map(([k, v]) => ({
451
- rule: h.ruleId,
452
- field: k,
453
- value: fmt(BigInt(v)),
454
- })),
455
- ]),
456
- ].slice(0, 8);
457
- return ok({
458
- ok: true,
459
- verdict: "refuted",
460
- claimed: fmt(BigInt(result.claimedCents)),
461
- message: "no corpus value near this query equals the claim — the actual values are listed below",
462
- nearbyValues: nearby,
463
- citation: result.citation,
464
- asOf: when,
465
- corpusMerkleRoot: corpus.merkleRoot,
466
- });
467
- }
468
- catch (err) {
469
- return fail(err);
470
- }
471
- });
472
- server.registerTool("is_tipped_occupation", {
473
- description: "Determine whether a job is on the Treasury Tipped Occupation list (Treas. Reg. § 1.224-1, final Apr 2026) for the § 224 'no tax on tips' deduction. Fuzzy-matches the job name; returns the official listing (name, TTC code, category) or a definitive 'not listed'.",
474
- inputSchema: z
475
- .object({ job: z.string().describe('e.g. "bartender", "software engineer", "DJ"') })
476
- .strict(),
477
- }, async ({ job }) => {
478
- const match = matchOccupation(job);
479
- if ("slug" in match && match.slug !== "other") {
480
- const o = TIPPED_OCCUPATIONS.find((t) => t.slug === match.slug);
481
- return ok({
482
- ok: true,
483
- listed: true,
484
- occupation: o.name,
485
- ttcCode: o.code,
486
- category: o.category,
487
- citation: "Treas. Reg. § 1.224-1 (final rule, IR-2026-49, Apr. 10, 2026)",
488
- note: "Listing is necessary but not sufficient — tips must also be voluntary/non-negotiated, not from an SSTB employer, and married taxpayers must file jointly. Use calculate_tax or the eligibility rule for the full determination.",
489
- });
490
- }
491
- if ("candidates" in match && match.candidates.length > 0) {
492
- return ok({
493
- ok: true,
494
- listed: "ambiguous",
495
- candidates: match.candidates,
496
- note: "Several listed occupations match — ask the user which applies.",
497
- });
498
- }
499
- return ok({
500
- ok: true,
501
- listed: false,
502
- job,
503
- citation: "Treas. Reg. § 1.224-1 (final rule, IR-2026-49, Apr. 10, 2026)",
504
- note: "Not on the Treasury Tipped Occupation list — tips from this occupation do not qualify for the § 224 deduction.",
505
- });
506
- });
507
- return server;
508
- }
509
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type StateReturnInput, type StateTaxEvaluator } from "./types.js";
2
- export declare function composeCA(input: StateReturnInput, evalStateTax: StateTaxEvaluator, notes: string[]): Record<string, string>;
3
- //# sourceMappingURL=ca.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ca.d.ts","sourceRoot":"","sources":["../../src/state-return/ca.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA+BhG,wBAAgB,SAAS,CACvB,KAAK,EAAE,gBAAgB,EACvB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmExB"}