Gold tables for the closed period
Closed period, cut per audience and same-length comparison
Scoreboard per audience, with a send log
Email, Slack, Teams, Google Chat or CRM chat
What it solves
- The summary arrives ready, on time, for each audience, with nobody building it.
- Each person gets only what is theirs: leadership the consolidated view, a manager their branch.
- When the data is late, the message says so instead of sending a stale number.
Business questions it answers
Ask your agent these questions once the case is live.
What you need
- The summary metrics in gold tables, with closed rules
- The list of audiences, what each receives, through which channel and at what time
- The sending channel credential stored as a secret in Nekt
What you get
- A scoreboard per audience and period, computed in the warehouse
- The message built from the scoreboard, with comparisons and highlights
- A send log that prevents resends and surfaces failures
- An automatic warning when the source did not load
Where to activate
Gmail or Outlook with the summary in HTML, built from the scoreboard.
Slack, Teams, Google Chat or the CRM chat, with messages split at the channel limit.
A short, actionable list for people in the field, such as the week's most quoted items that did not close.
With the gold tables ready, each summary is a scoreboard and a send routine. The care goes into the period rule, the send log and switching off what nobody reads. The detailed view has the business rules, the pitfalls and the acceptance test. Or send everything straight to your agent with the Nekt MCP.
The daily summary is a clock-scheduled query that sends whatever is in the table. On Monday it compares with Sunday; on the day the load was late, it sends the day-before-yesterday number as if it were yesterday's; on a rerun, it sends twice; when one recipient fails, the others get nothing. Months later, the routine is still running and spending credits for a channel nobody reads.
How it is usually done, and the rule
Each row is a mistake that already happened in practice.
Compute in a table, per audience and period, each metric with the current value, the previous period and the change. The send routine only formats. If there is AI-written text, the model gets the ready scoreboard and never adds a number that is not in it; the priority of highlights is also computed in the table, not by the model.
The daily summary covers the previous day in the business time zone. In a business-day routine, Monday covers Friday and national holidays are skipped. The week is defined once (Monday to Sunday or Sunday to Saturday) and written down. The current month comes as a partial month to date, never compared with a full month.
Day against the same weekday last week, week against week, month to date against the same days of the previous month. Rate changes are in percentage points; a very small base becomes a change in reais.
The recipient list lives in a table (audience, channel, destination, cut, time), not in code. Leadership gets the consolidated view; a manager, their branch; a seller or advisor, their book. A row from another branch never goes to someone who should not see it. A client who left the portfolio stops receiving.
Before sending, check that the source table has the reference day. If not, wait a short window and, if it still has not arrived, send with a note on how current the data is, or do not send. A heartbeat block (how many records came in over the last 24 hours) exposes stalled ingestion.
Log every send (audience, period, channel, status, time). A rerun does not resend what already went out. One recipient's failure does not stop the others, and a send failure makes the run fail visibly. Long messages are split at the channel limit.
Every new routine first runs without sending (dry run), then to one internal recipient and only then to the real list. A client-facing message can start as a draft reviewed by someone before sending.
Open with a readout of up to five lines before any table. Show what calls for action: what went out of range, what overran, what is at risk. Block order is fixed (current month before the previous one, consolidated before detail) so readers find the same place every day. Values in Brazilian format, with a footer giving source and load date.
A disabled destination, an unread channel or a replaced report keeps consuming credits. Review routines periodically and pause the ones with no reader, recording the reason and the date.
Cadence and cut per audience
A common starting point across workspaces. Adjust the time to each team's routine.
Definitions
Pitfalls that already happened
The load chain was late and the summary went out on time with the day-before-yesterday number, with no warning.
Check the source date before sending and warn.
A source went more than a month without loading and nobody noticed, because nothing warned. The month showed a fraction of the real entries.
A heartbeat block with volume over the last 24 hours.
An error with one recipient stopped all of them, and the retry resent to people who had already received it.
Log per audience and period and failures isolated per recipient.
The chat destination was switched off and the query kept running every day for more than a month.
Pause routines with no active destination and record the reason.
A daily summary written in Spark started failing repeatedly, with no useful error message. Rewritten in plain Python, it ran again.
A send routine is light: a Python notebook reading the ready scoreboard.
Comparing yesterday with the day before made every Monday look like a drop, because Sunday does not have the same operation.
Previous business day and comparison with the same weekday last week.
Acceptance test
The case is done when every item passes.
- For a reference day, every number in the message matches the query on the gold table for the same day.
- Running the routine twice on the same day produces a single send row per audience in the log and a single message.
- With the source table missing the reference day, the routine sends the delay warning or does not send, and never sends the previous day's number as if it were the reference day's.
- On Monday, the business-day summary covers Friday; after a national holiday, it covers the last business day.
- A manager receives zero rows from another branch.
Agent package
Paste into Claude, ChatGPT or any client with the Nekt MCP connected.
Scheduled summary per audience - Each summary covers a closed period in the America/Sao_Paulo time zone: daily = previous business day (Monday covers Friday, national holidays skipped); weekly = <week rule>; monthly = closed calendar month. - Every number comes from the scoreboard <scoreboard table>. The message carries no number that is not in the scoreboard. - Comparisons over same-length windows: day against the same weekday last week, week against week, month to date against the same days of the previous month. Rates change in percentage points. - Before sending, check that the source has the reference day. If not, send with the note 'data up to <date>' or do not send. - Recipients, channel, time and cut come from the table <recipient table>. Nobody receives rows outside their cut. - One send per audience and period: check the log <log table> before sending. - Structure: a readout of up to five lines, then the blocks in the order <block list>. - Values in pt-BR format, no emoji, with a footer giving source and last load date. Client exceptions: - <client>: daily summary at <time> for <audience>, cut <branch>. - <client>: message created as a draft and reviewed by <person> before sending. - <client>: week runs Sunday to Saturday.
Build the "Daily email reports" case in my Nekt workspace following the rules at https://academy.nekt.com/en/casos/relatorios-por-email.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
The model gets the ready scoreboard and writes highlights and alerts, computing nothing.
The same routine only sends when something goes out of range, such as an ad account balance down to a few business days.
One scoreboard per client and period, with a structure the client approved and sections without a source removed.