Dropped in as received.
Exports keep their vendor banners, their merged headers, their archives and their quirks. Reformatting by hand is where errors enter, so the server reads the file the source system actually emitted.
An answer that resembles the question is not the same thing as an answer that adds up.
Anything that has to add up is computed deterministically over complete data, and anything that reaches an outside party comes only from a fact a named person signed off. This is the half of the product that exists because a language model is confident whether or not it is right.
Retrieval-augmented chat works by finding the pieces of text most like your question and handing them to a model. That is a good way to find what a document says. It is a terrible way to work out a total, because the index has no idea whether it returned all of the rows, most of them, or the five that happened to sit near your phrasing.
So the gateway keeps two paths apart on purpose, and the analysis path never touches the index.
Nobody opens a spreadsheet, and nobody retypes a figure into a prompt. Raw exports go in exactly as the source system produced them, and the server does the unglamorous work of turning them into something that can be queried honestly.
Exports keep their vendor banners, their merged headers, their archives and their quirks. Reformatting by hand is where errors enter, so the server reads the file the source system actually emitted.
The server looks inside archives without unpacking them, finds the real header row underneath the banner, and works out what each column is before anything is loaded.
One shape per kind of record, with types enforced. A value that cannot be parsed is a failure to report, not a zero to quietly substitute.
Row counts, date coverage, duplicate keys, orphaned references, totals against control figures. If the checks fail, the questions do not get answered. That ordering is the whole point.
Not free-form querying. A defined set of questions your organization has agreed on, each answered in SQL over every row of the canonical table, so the same question gives the same answer to everyone who asks it.
The figure comes back with the query that produced it and enough detail to reproduce it. A number you cannot trace is a number you cannot defend in front of an auditor, a lender or a board.
The server lists the questions it cannot answer from a given source, with the reason. If a source holds no supplier cost, gross margin is not derivable from it, and the honest output is that sentence rather than a plausible percentage. Absence is reported, never filled.
A generic operations example, following the sequence the one real build actually runs. An analyst drops a set of raw billing exports into the right folder, exactly as they came out of the billing system. On the next scheduled run the mirror has them. Then, in the assistant they already use, they ask what was billed last year and who the largest customers were.
Three things in that sequence are worth naming. The refusal came before the answers, because knowing what a source cannot tell you is more useful than a number you will have to withdraw. The workbook reconciled a second time at publish, against the same canonical totals, and it writes nothing at all when that fails. And the gaps were emitted as headed templates naming who must supply each one, so the missing half of the work is a list somebody can act on rather than a silence.
Not a warning banner. Not a partial file. No override flag, for anybody, including us. A document that goes to an outside party is either reconciled or it does not exist.
Beside the documents and the tables sits a third store: the facts your organization has actually agreed on. It exists because the alternative is re-deriving the same value on every request and hoping everyone derives it the same way. Each fact carries a state, a source and, once confirmed, the name of the person who confirmed it.
| State | What it means | May be used for internal work | May reach an outside party |
|---|---|---|---|
| Confirmed | A named person signed it off against their verified identity, with the source cell recorded. | ✓Yes | ✓Yes |
| Candidate | Proposed from a document or an export. Explicitly not authoritative. | △As a proposal | ✕No, enforced in code |
| Missing | Known to be needed, not yet supplied. Appears as a gap with the action that closes it. | ✓As a to-do | ✕Emitted as a named gap |
Outward-facing scaffolds accept confirmed facts only. That is a code path, not a policy document, and not an instruction to the assistant.
A long gap list is the system working.The line we repeat on workshop day
The first time a readiness check runs against a real record, it usually returns a great deal of red. That is the product telling you what you did not know you did not have, and the same computation doubles as the to-do list and as an ask list, written as rows a person can paste into an email with the owner named against each item. Nobody enjoys the first run. Everybody prefers it to finding out later.
Deterministic analysis is proven for one source export format. In the one real build its output was reconciled exactly against the client's own workbook, and each new source format is adapter work with its own profiling and its own integrity checks, scoped before it is promised. And the prose is not ours. The server returns source-linked evidence: cited passages, computed figures with their queries, scaffolds with filled slots and flagged gaps. Your assistant writes the sentences around them. So we say source-linked evidence and never source-linked answers, and we offer no faithfulness or groundedness guarantee, because the server never sees what the assistant finally wrote. The full list is on what the gateway does not claim.
Search and document reading are open: ask anything, and you get cited passages. Computation is deliberately not open. A governed set of questions is defined with you, each one implemented, checked and reproducible, so that two people asking the same thing get the same figure. Adding a question is a small piece of work, not a prompt.
Nothing in the assistant, which is exactly why the server hands back the query and the row count alongside the figure. If a number appears without a citation or without a query attached, treat it as the assistant's own and check it. We tell clients that plainly on workshop day: a number with no source is a bug worth reporting.
A person your policy allows, acting under their corporate sign-in, with the decision recorded against their verified identity and the source cell it came from. What the confirmation mechanism does and does not yet cover is set out on the limits page rather than in a footnote.
No, and it should not be sold as one. It computes over exports from the systems you already run, so that an answer can be produced and defended in the place your people are already working. Where a calculation is the zero-error critical path of your business, keep it in the system of record. That principle has its own page: where AI does not belong.
Bring one real export and one question you have to be able to defend. We will tell you whether it can be computed, what it would take, and where it cannot.