Render a caller-computed recurring revenue figure
well_render_mrrPut an MRR figure YOU computed onto the MRR card.
This tool measures nothing. It takes the figure and its method as input and returns them for rendering. Call it only after you have computed the recurring revenue yourself and can state every field below from your own work — never to "get" an MRR.
The server derives no MRR of its own. The figure on the card is the one you state here, which is why every field below is required: the policy behind a number is the only thing that makes it checkable.
Under the number the card draws nothing. It carries the figure, the window it averages and the trend chip; everything else you state below is REQUIRED and reaches no pixel. All of it comes back in this tool's text result, which is what you write the prose from. The card is the measure; the explanation is yours.
REQUIRED, because a figure whose method is not stated cannot be checked:
amount— the recurring revenue per month incurrency, net of tax and of credit notes, as the sum returned itwindow— the months the average divides by, not the months that carried revenuemonths_in_windowandmonths_with_revenue— a window with dark months reports LOWER than its typical month. When the two differ you MUST say so in prose: how many months recorded recurring revenue, and that the average still divides by the whole windowrecurring_contexts— the billing contexts the reader confirmed as recurring, as the keys the card recorded."unclassified"among them means the reader counted the invoices with no billing context (the sum rows whosebilling_contextisnull) as recurring. This is the reader's half of the policy and the card cannot show it, so an answer that does not name them leaves the figure uncheckedinvoice_count,unattributed_countandunclassified_count— how much of the window the figure could reach at all.invoice_countis the issued invoices;unattributed_countis the SEPARATE set Well could place on neither side, reported beside it rather than inside it, and it may be larger. An unattributed invoice may still be recurring revenue. An unclassified one carries no billing context: it is in the figure only whenrecurring_contextsholds"unclassified", and when it is, say in prose that the reader chose to count it. Sendnullfor a count the sum returned asnull: it is unmeasured, not zeroexcluded— what fell out, as three invoice COUNTS kept apart:one_off(issued invoices under a context the reader did not count),credit_notes(thecredit_note_countnetted into the figure) andunreadable_rows(the sum'sexcluded_malformed,nullwhen unmeasured)
REFUSED rather than rendered, each because your own figures disagree with each other:
a negative
amount— the credit notes outweighed the recurring invoices, so net recurring revenue fell below zero. That is a finding to report in prose, not a figure to put on a card, and never one to flip to its magnitudean empty
recurring_contexts— an MRR with nothing counted as recurring is not an MRR of zero, it is a policy nobody stated. Say the figure has nothing to measure insteadmonths_with_revenueabovemonths_in_window, orunclassified_countaboveinvoice_counta
months_in_windowthat disagrees with the monthswindowspans — the two state one facta window whose bounds are not month starts — a month-average divides by whole months
changewith nobaseline, abaseline.valueof zero, a baseline that does not start before the window or spans a different number of months, or achangewhose magnitude or sign its own two figures contradicta
per_monthseries that does not name each month of the window once in order, does not average toamount, or disagrees withmonths_with_revenue
Send baseline and change as a pair or send neither. Do not send a direction: the card's colour is decided server-side from the figures. Revenue is higher-is-better, which is the opposite of the burn card and exactly why a caller does not get to state it.
When the token authorizes one workspace, call this directly — no other tool call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Recurring revenue per month, net of tax and credit notes. A negative net is refused, never flipped. | |
| change | No | Signed percentage against `baseline.value`, drawn as the card's trend chip. Send it only alongside `baseline`. | |
| window | Yes | Inclusive start and EXCLUSIVE end of the averaged window, YYYY-MM-DD. | |
| baseline | No | The earlier window this figure is compared against. Required for `change` to render, and never rendered itself: name it in prose. | |
| currency | Yes | ISO-4217 code the amount is denominated in. | |
| excluded | Yes | The three exclusion groups kept apart: the reader's choice, the structural netting, and the defective rows. | |
| per_month | No | The series behind the average. A month with no recurring revenue belongs in it as a zero. | |
| workspace_id | No | Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which. | |
| invoice_count | Yes | Issued invoices in the window. | |
| conversation_id | No | The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation. | |
| months_in_window | Yes | The divisor — every month in the window. | |
| recurring_contexts | Yes | The billing contexts the reader confirmed as recurring, as recorded keys; "unclassified" stands for the invoices with no billing context. At least one: an MRR counting nothing as recurring is a policy nobody stated, not a zero. | |
| unattributed_count | Yes | Invoices Well could place on neither side: a set separate from `invoice_count`, which may be larger. Null when unmeasured. | |
| unclassified_count | Yes | Invoices carrying no billing context. In the figure only when `recurring_contexts` holds "unclassified". | |
| months_with_revenue | Yes | How many of those months carried any recurring revenue. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| trend | No | ||
| amount | Yes | ||
| change | No | ||
| window | Yes | ||
| success | Yes | ||
| baseline | No | ||
| currency | Yes | ||
| excluded | Yes | ||
| per_month | No | ||
| computed_by | Yes | ||
| invoice_count | Yes | ||
| conversation_id | No | The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation. | |
| months_in_window | Yes | ||
| recurring_contexts | Yes | ||
| resolved_workspace | No | The workspace that answered, when the caller named none and the token authorizes several. | |
| unattributed_count | Yes | ||
| unclassified_count | Yes | ||
| months_with_revenue | Yes | ||
| conversation_id_note | No | Present only when the server opened a fresh lane, stating that no choice recorded earlier was read. | |
| conversation_id_source | No | Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened. |