From the index only
The facts in an answer always come from the system's own data: screen name, address, procedure steps, document name. What is not found is not in the answer either.
The ERPONA assistant answers your question from the system's own data: screens, menus, procedures and the documents you are allowed to see. The language model turns those facts into a fluent sentence - it does not create facts.
The language-model layer is off by default - until you switch it on, nothing leaves the system.
A language model's most expensive mistake is not silence - it is speaking confidently and being wrong. "That account is 601100" reads like a correct sentence, and an accountant may act on it without checking.
So ERPONA splits the question in two: who finds the fact and who writes the sentence. The system finds the fact - the index is built from live metadata, so a newly installed module is known to the assistant automatically. The language model only does the second job.
When the match is weak the assistant says it does not know and offers the closest results as suggestions. That is a decision, not a shortcoming.
The block below explains the mechanism: the same question is processed twice, and the second time the model adds a number that is not in the facts.
—
—
—
—
—
Sample text; the numbers come from your own database.
Where is the accounting health screen?
screen: Accounting health · /erpona/accounting-health blocks: open problems · period close · e-invoice queue
You will find the accounting health screen at /erpona/accounting-health. It shows open problems, the period close and the e-invoice queue in one place.
Address intact · no number outside the facts
The answer is sent.
Where is the accounting health screen?
screen: Accounting health · /erpona/accounting-health blocks: open problems · period close · e-invoice queue
The accounting health screen at /erpona/accounting-health currently shows 12 open problems.
"12" is not in the facts - the model added a number
The answer is discarded - the user gets the system's own text: Accounting health · /erpona/accounting-health
The facts in an answer always come from the system's own data: screen name, address, procedure steps, document name. What is not found is not in the answer either.
The assistant does not create, change or delete documents, and it does not calculate figures. Posting an entry from a chat window is the easiest way to make a mistake - that route is closed.
Once the model returns an answer, it passes through two filters. If either fails, the answer is dropped and the user receives the system's own text.
Every internal address in the facts must appear in the answer. If the model "tidies up" an address, the user clicks a broken link - so such an answer is not sent.
Every number in the answer must exist in the facts. A number that is not there causes the answer to be dropped. The system prompt also forbids adding numbers - the check is the second line of defence.
The model's stop reason is read before the content: if the answer was truncated or refused, the partial text is not used.
Nothing breaks. The model layer is optional: with no key, no provider or no network, the deterministic text is sent as it is and the user sees no difference.
The channel changes, the logic does not: same question, same permission filter. A menu you cannot see is invisible to the assistant too.
Ask in the chat panel on a document; the answer comes back with buttons that open the screen.
A Telegram account is linked to a system user. An unlinked chat gets no answer - otherwise anyone could pull a list of screens.
Questions are answered by email as well - same index, same boundaries.
"How do I close the month?" is not answered by one screen address: the accountant is asking in what order to do what.
For those questions the assistant answers with a procedure - numbered steps, each tied to its own screen. In step-by-step mode the bot gives one step, waits for "done", then gives the next; come back later and it continues where you left off.
Document search works separately: "the latest invoice for that customer" is searched with your permissions - a document you may not see does not appear in the answer.
The language-model layer does not run in a standard installation. With it off the assistant still works - the answer is simply written by the system itself.
When you switch it on, what is sent is precise: the question and the facts the system found. Not the whole database, not the document archive - only the lines found for that one answer. The key lives in a system setting and can be withdrawn at any time.
This site itself carries no tracker, no external font and no analytics. The privacy page explains how that is verified.
The demo database is full of real documents - not a mock-up. Send a request and we will walk through your scenario.