Curated tables per domain and context documents
Response protocol, domain document and playbook
Answer with number, date range and last load
Assistant via MCP, internal app and report on request
What it solves
- Each coordinator asks their assistant and gets the same number a colleague got for the same question.
- The assistant says how current the data is and what the dataset cannot answer, instead of filling the gap with a guess.
- Student, guardian and buyer data stays inside the query: the answer comes out aggregated.
Business questions it answers
Ask your agent these questions once the case is live.
What you need
- Curated tables in Nekt for each domain (enrollment, sales, media, scheduling), with stable column names
- An owner who writes and maintains the context documents and the check numbers
- A decision on who can see what: which tables each agent profile reads
What you get
- A response protocol that applies to every question
- Domain documents with definitions, measured check numbers and limits
- Playbooks that fix the structure of recurring reports
- An entry index that tells the agent which documents to read
Where to activate
Each coordinator uses their own Claude with the protocol and the documents for their scope.
An app for educators that queries only the curated tables and returns aggregates.
How were sales generates the page or document in the playbook format.
No new modeling is needed if the curated tables already exist. The work is writing, measuring and maintaining the documents. The detailed view has the business rules, the pitfalls and the acceptance test. Or send everything straight to your agent with the Nekt MCP.
Coordinators and educators ask the assistant about enrollments, sales and the funnel, and the assistant answers with the first number the query returns. It adds up rows from different snapshots, calls a prospect a student, fills in incomplete series and explains a drop with a cause that is not in any table. Two people ask the same question and get different numbers.
How it is usually done, and the rule
Each row is a mistake that already happened in practice.
Fixed working order: fetch the semantic context using the user's original question, read the returned documents, check the table's last load, and only then generate and run the query. At the end, check the order of magnitude against the reference numbers in the domain document before delivering.
The protocol says how to answer (number rules, what not to invent, format). The domain document says how to calculate each metric. The playbook says what to build and in what order. In a conflict, the domain document wins on calculation and the protocol wins on form. Also separate operational rules (which table, which date, how to count) from semantics (what each column means), and never carry the meaning of one table over to another without a written rule.
Keep a root document that lists each document with a Read when line (topic and words in the request). The agent reads every one that matches; chained metrics are read together (a ROAS question also reads media and revenue). If no document covers the request, the agent says so instead of improvising. Every new or renamed document updates the index in the same task.
Never fill in a number that did not come from the query, and never complete or round a series. Null means absence and is reported as absence. Every time-based answer states the start date, end date and last load date (MAX of the date column). The current day is partial: compare only closed days and say so.
When the comparison period is zero, negative or less than a quarter of the current value, write low base and show the change in reais. Every relevant change carries the amount in reais alongside the percentage. Changes in rates are given in percentage points. Do not add percentages or averages across rows: recompute the ratio from the totals.
Breaking down is analysis: volume versus ticket, which group or campus explains the change in reais. Explaining why it dropped or recommending action, with no productivity, target or budget data in the dataset, is invention. Close with the list of what the current dataset does not answer. When the month drops against the previous one and rises against last year, show both comparisons and do not pick one.
An event question (how many new enrollments between A and B) uses the event date and the whole end date, not midnight. The historical cohort does not change afterward: if 20 joined and 2 canceled, there were 20 new enrollments; the current status (18 active, 2 canceled) comes separately, from the most recent status of the same enrollment. A position question (how many were enrolled on D) uses a single snapshot.
By default, answer with counts and sums. List people only when the person asking requests it, with the columns the question needs and up to 50 rows. In coordinator and media agents, email, name, phone and ID number stay inside the query only (to match sources) and never appear in the answer. A CRM contact may be a guardian, a prospect or a family member.
Coordinator agents read only a curated set of tables, cited by full name in the document. An access error outside that set is the scope working: the agent replies that it is outside its access and says where it lives (dashboard, spreadsheet, another owner), without requesting new permissions. Each document includes a What this source does not answer and where to look table.
The same question uses the same calculation for any person, conversation or dashboard. Filters follow this priority: those explicit in the current question, those clearly carried over in the conversation, those active on the dashboard, the document's default rules. A recurring report follows the playbook: an executive summary of up to five lines before any table, the month compared with the previous month and the same month last year always together, year to date, breakdowns and a methodology footer. The medium changes (page, document, markdown), not the structure.
Which document handles what
Every question goes through all three, in this order of precedence.
Definitions
Pitfalls that already happened
The assistant explained a drop in sales by lower team productivity and suggested prioritizing conversion, on a dataset that only had sales, cancellations and sign-ups.
Write in the protocol what the dataset does not have and require the list of what the data does not answer.
Campus and consultant rankings showed four-digit changes on tiny bases, and those names went to the top of the summary.
Low base rule and sorting by absolute change in reais.
The question was how many new enrollments there were, and the agent filtered on today's active status, leaving out those who canceled later.
Cohort by event in the period; current status in a separate block.
The period up to the 31st became the 31st at 00:00, and every enrollment from that day was left out.
Compare by date, with the end date inclusive.
In the scheduling tool, a lead was someone who booked a call. The agent presented that number as Leads and MQL, which in that company came from another source outside the database.
Name each concept after its source and write in the document what it is not.
After restricting coordinators' access to a curated set, documents still cited the old tables and the agent hit an access error on every question.
Update the full names on the same day as the change and treat access errors as out of scope.
Acceptance test
The case is done when every item passes.
- The same question, asked by two users in different conversations, returns the same number, the same date range and the same last load date.
- For the reference closed month, the agent reproduces the document's check numbers (for example, revenue to the cent and the exact number of sales).
- Every answer with a time range states the start date, end date and last load.
- Asking a coordinator agent for the list of buyers returns a refusal and the aggregated total; in an agent with permission, the list comes back with at most 50 rows.
- Asking why a number dropped returns the breakdown in reais and the limits statement, with no cause or recommendation.
Agent package
Paste into Claude, ChatGPT or any client with the Nekt MCP connected.
Assistant response protocol - Always: fetch the semantic context using the original question before any SQL; read the returned documents; if there is a playbook for the deliverable, it governs the structure. - Run MAX(<date column>) and state the last load in every answer with a time range. The current day is partial: compare only closed days. - Check the order of magnitude against the reference numbers in the domain document before delivering. - Precedence: the domain document wins on calculation; this protocol wins on form. Explicit user question > operational rules > table semantics. - Never fill in a number that did not come from the query. Null means absence, not zero. - Comparison base zero, negative or less than a quarter of the current value: write low base and show the change in reais. Rate changes in percentage points. Do not add percentages or averages across rows. - Point to the fact, never the cause. Do not recommend action. Close with what the dataset does not answer. If MoM and YoY disagree, show both. - Events use the event date, with the end date inclusive. The historical cohort does not shrink with later cancellations; current status comes separately. - Answer with counts and sums. List people only when asked, with the necessary columns and up to 50 rows. In coordinator agents, never list email, name, phone or ID number. - Read only the tables listed by full name. An access error outside them = out of scope: say where the answer lives, without requesting access. - Filters: current question > conversation context > dashboard filters > document default. - Sales report with no specified content: follow the playbook (executive summary, month with MoM and YoY, YTD, year trajectory, breakdowns, rankings by change in reais, interpretation and methodology). - Values in pt-BR format, no emoji, footer with source and last load. Client-specific exceptions: - <client>: the coordinators' agent reads only <curated set>; targets live in the <dashboard> and are not in the database. - <client>: <tool concept> is not <official metric>; the official metric comes from <source> and is not in the database. - <client>: check number for the reference month: <metric> = <value> in <closed month>.
Build the "AI assistant for coordinators" case in my Nekt workspace following the rules at https://academy.nekt.com/en/industrias/educacao/assistente-ia-coordenadores.md. 1) Find the source tables and confirm the columns the rules use. 2) Create a transformation at the stated grain applying every rule. 3) Run the acceptance test and show me the result of each item. 4) Create the case's context document in the workspace, leaving my clients' exceptions open for me to fill in.
Variations
One document per source (sales, media, scheduling) and one that crosses sources, each with a section for the agent.
Different agents for coordination, paid traffic and leadership, with different table lists.
Questions about prospects and stages answered as CRM analysis, never as enrollment.