Summary
Large language models are now good enough to read a year of bank activity, recognize that a $30,000 deposit is loan proceeds rather than revenue, and notice that domestic software development was expensed in a year the law required it to be capitalized. They are not, and should never be treated as, calculators. A tax return is a chain of arithmetic in which a single wrong figure propagates into every schedule after it, and in which every figure must be reproducible years later under examination.
NGTAX.AI is built on one division of labor: models judge, code computes. This paper explains that boundary, why it is the precondition for using frontier models in tax preparation at all, and how it is enforced in the system rather than requested in a prompt.
The two kinds of work in a tax return
Every corporate return mixes two kinds of work that look similar and are not.
Judgment. Is this payment to a design agency a marketing expense or research and experimental expenditure? Is a transfer from the founder a loan or a capital contribution? Was this laptop placed in service this year, and does the company have a written de minimis policy? Is a reasonable-compensation position defensible? These questions need reading, context and an argument from authority. Rules alone answer them badly: the same vendor may do both marketing and development work, and only the invoice says which.
Computation. Given those decisions, what is line 20? What is the 80% NOL limitation? What does Schedule M-1 line 10 equal, and does it tie to line 28? These questions have exactly one right answer, which a tested function produces the same way every time.
Most failed attempts to apply AI to tax put both kinds of work in the model. The model is asked to "prepare the return", and it produces a plausible document whose figures are generated rather than computed. Some will be right. None can be defended, because nobody — including the model — can show the arithmetic that produced them.
The boundary
In NGTAX.AI, a model never produces a total, a subtotal, a depreciation figure or a tax computation. Those run in deterministic code in the ledger and tax packages, against the books. A model classifies, explains, reviews and drafts positions — always against figures the code has already calculated.
Concretely:
| A model decides | Code computes |
|---|---|
| That a $3,200 laptop is a capital asset, not an office expense | 60% bonus plus 5-year MACRS on the remainder, from the year's rate table |
| That $24,000 paid to a development shop is domestic research | Capitalization and amortization, or the deduction, under the year's law |
| That four $12,000 payments are federal estimated tax deposits | That they are not deductible, and that they appear as payments on line 33 |
| That a finding is material and which accounts it touches | Whether Schedule L balances and the M-1 ties |
If a prompt ever asks for a number, that number belongs in code. This one sentence removes most of the failure modes people associate with "AI tax software": hallucinated figures, inconsistent rounding, arithmetic that changes between runs, and returns whose totals do not foot.
How the boundary is enforced
A design principle that depends on everyone remembering it does not survive a busy season. The boundary is enforced in four places.
1. The output contract. Every model call declares a schema for its response. The classification agent may return a category, a confidence, a rationale, the evidence it relied on and, if it is unsure, a question. It has no field in which to return an amount. A response that does not parse is retried once and then routed to a human queue — never to a guess.
2. One gateway. All model access goes through a single package. Nothing else in the codebase may import the model provider's SDK; a lint rule fails the build if it does. That package records routing, cost, provenance and the budget for every call.
3. An authority gate. When a model proposes a tax treatment — "capitalize under §174", "limit meals to 50%" — the proposal must cite an authority held in a register of verified primary sources. The register stores the citation and the tax years it applies to. A treatment citing an authority that is not in the register, or not valid for the year, is rejected before it touches the return.
4. Money is never a float. Amounts are integers at four decimal places in application code and fixed-point numerics in the database. Rounding happens once, at the line the form instructions specify, with the rounding mode named. A model cannot introduce a figure because there is no path from a model response to a money value except through code that recomputes it.
Why this makes models more useful, not less
Constraining the model to judgment is not a hedge against weak models; it is what lets us use strong ones aggressively.
- Judgment can be reviewed. A position with a rationale and an authority can be examined by a second, independent agent, and then by a CPA. A generated number can only be re-derived.
- Judgment can be escalated. When a model's confidence falls below a threshold, the right behavior is a question to a human. That question is cheap. A wrong figure discovered by the IRS is not.
- Computation can be tested. Every computed line has golden-file tests built from hand-worked returns. A change that moves a figure fails the build until someone explains it.
- The result is reproducible. Re-running the engine on the same ledger, with the same recorded model judgments, yields the same return to the dollar — the property paper 3 builds on.
A worked example
The engine's first test company, a fictional Delaware corporation, has ten errors seeded into its bookkeeper's ledger: a duplicated import, a transfer booked as both income and expense, a capital contribution and loan proceeds booked as sales, an expensed laptop, expensed software development, meals at 100%, an IRS penalty deducted as taxes, estimated tax payments expensed, and loan principal booked as interest.
Each error is caught at a defined stage — ingestion, a rule, classification, review or examination — and in every case the model's contribution is a decision with a reason. The figures that result (total income 360,300; taxable income 223,724; tax 46,982; Schedule L balancing at 353,861) are produced by code and pinned by tests. Where the company's books cannot answer a question — an $8,000 wire with no invoice — the engine does not guess. It holds the item in suspense and asks.
What this means for a CPA
You are not asked to trust a model's arithmetic, because there is none. You are asked to review a short list of judgments, each with the evidence and authority behind it, against figures you can trace to the transaction. That is the same review you would give a capable staff accountant's work — with a complete file attached.