What I built
A desktop tool for tax professionals that replaces a manual browser workflow: given an article of a tax law, it searches the tax authority's public rulings database, reads each ruling in full, extracts the official answer, and gathers the related administrative-court criteria into a spreadsheet. It runs on a locked-down corporate machine with nothing installed and no credentials, and it shipped with the document its IT and security department needed in order to approve it.
Everything interesting about it is a restraint rather than a capability: what it refuses to automate, what it refuses to claim, and what it had to prove about itself before anyone would run it.
At a glance
- Result
- Replaced a manual browser workflow, and shipped with the document IT and security needed to approve it
- Output
- A spreadsheet, plus a folder of the full texts
- Runs on
- Windows and the spreadsheet software already installed; no administrator rights, nothing left running
- Network
- Read-only traffic to three named public domains; no credentials to store
- Language models
- None. Search, fetch, verify and extract are deterministic; summaries are verbatim extracts
- Left manual
- Supreme Court case law: the exact query is written into the sheet and never executed
- Known limits
- Court criteria are inferred, so they are labelled as candidates that require professional review
Architecture
Scroll sideways to see the whole diagram.
Everything before the output is deterministic: search, fetch, verify, extract. Nothing is summarised by a model — the summary column is a verbatim extract of the ruling's own answer. The second output exists because the professional will want to interrogate the material with their own tools, and handing over the raw corpus is a better way to help with that than generating an interpretation.
Engineering decisions
1. Not automating the source that asks you not to
- Problem
- The most valuable cross-reference is Supreme Court case law. Its search engine is public and would have been no harder to drive than the other two.
- Options
- Drive it like the rest and hand over a complete table, or leave it out and give the user a worse tool.
- Chose
- Neither, exactly: the tool never connects to it, and instead writes the exact query into the spreadsheet — the search URL and every field, ready to paste — so the professional runs it themselves in the official search. The column exists; the automation does not.
- Cost
- A manual step in the middle of the workflow the tool exists to remove, in the one column users most want automatic. That is the trade I would make again: the alternative is a firm's traffic against a court's site in a way its terms do not invite, to save a professional thirty seconds.
2. Labelling the uncertain output as uncertain
- Problem
- There is no official identifier linking a tax ruling to a court decision. Any cross-reference is inferred from subject matter — same article, overlapping language — and inference in a legal document reads as authority.
- Options
- Present the matches as results, which is what makes the tool look finished, or present them as candidates, which makes it look unfinished.
- Chose
- Candidates, said plainly in the tool and again in its documentation: these are search aids on the same subject, they require professional review, they may include references that do not apply and may miss ones that do. The limitations section also separates the tool's own limits from the source's — a subsection search returns nothing when the ruling never spells the subsection out, which is a fact about the database, not a bug to be hidden.
- Cost
- It reads as a weaker product than it is, and a demo of it is less impressive. A research tool that quietly promotes an inferred link to an authority is worse than no tool, because the error it produces is invisible and lands in someone's advice.
3. Matching the law, not just the number
- Problem
- Article 74.3 exists in every tax law, and in the repealed versions of each of them. A number alone selects the wrong rulings with confidence.
- Options
- Search the number and let the professional discard what does not apply, or confirm each ruling against the law it actually cites.
- Chose
- Confirm: the requested tax maps to its statute, and each ruling is checked against the governing law it names, discarding same-numbered articles from other and superseded laws.
- Cost
- Recall drops — a ruling that does not state its governing law cleanly falls out of the results. In legal research that is the right direction to lose in: a citation that does not apply costs far more than one that was missed and can be found by widening the search.
4. Built to be approved, not installed
- Problem
- The deliverable is an executable that arrives by email at a company whose security policy blocks executables, and the person deciding has no reason to trust it.
- Options
- Ask for an exception and hope, or make approval cheap enough that saying yes is easy.
- Chose
- The second, as a design constraint rather than paperwork at the end. It uses the shell that already ships with Windows and the spreadsheet software already installed, so nothing is installed, no administrator rights are needed and nothing is left running afterwards; traffic is read-only to three named public domains; there are no credentials to store. It shipped with a dossier written for the reviewer: every endpoint contacted and why, the single file it writes, how to verify the traffic independently with a proxy, and a straight explanation of the one flag that looks alarming — the execution-policy bypass — with two alternatives if the policy prefers them. It also carried a costed fallback: the same logic reimplemented as a cloud script so that nothing executes on company machines at all, with what changes and what that version cannot do.
- Cost
- The dossier took as long as some of the features, and the fallback was designed for a decision that might never need it. Both are only worth it if you accept that a tool nobody is allowed to run has no value at all, however good it is.
Where the model isn't
This is the kind of task people reach for a language model to do: read hundreds of legal texts and tell me what they say. It does not. The only summary it writes is a verbatim extract of the ruling's official answer, because in this domain a paraphrase is a liability — the reader needs the administration's words, not a fluent version of them. Where the material genuinely needs interrogating, the tool prepares the corpus and hands it over: one text file per ruling with its full text and its candidate references, plus a cover page recording the search that produced them, so the professional can put it into a notebook tool and ask their own questions with the sources in front of them. The tool is deterministic and the judgement stays with the person who is accountable for it.