Chargeback and the ledger
Preview and lock a chargeback month, then create agents, rules, and inbox assignments on Agents & allocation.
Best for: Finance leads locking a month and clearing unattributed spend
Chargeback and the ledger
Chargeback locks a month and downloads the cost-center file. The ledger is where agents, rules, and unattributed spend are kept. The nav item for the ledger is Agents. Its address is /meridian/ledger. The page title is Agents & allocation.
Chargeback / GL Export
Open it from Governance. The card is Chargeback / GL Export, and the line under the title is "Month-locked cost-center CSV for your ERP". The Governance item in the top nav, and the Governance card on Settings, are there when the account includes governance.
The page title is Chargeback / GL Export. The line under it is "Month-locked CSV allocating AI spend to cost centers for your GL. After lock, export balanced journal entries for QuickBooks, NetSuite, or generic CSV. Suspense holds unallocated dollars — nothing is silently dropped."
Links at the top right:
- Edit GL mappings opens GL Mapping
- File profiles opens the file profiles page
- GL tie-out opens the tie-out report
- Accrual opens the accrual report. The label on the page adds a parenthetical after Accrual.
When the account does not include chargeback, the page says "Included in Growth and above — talk to sales to unlock Chargeback / GL Export." The controls below stay behind that gate.
Period, draft, and lock
Period (month) is a month picker. It starts on the last closed month.
Preview draft builds the draft for that month. While it runs, the button shows a spinner.
Lock & download locks the month and downloads chargeback_ plus the month, as a CSV. When the chosen month is the current month or a later month, the button instead says Lock early & download, and it stays disabled until the checkbox is checked. The warning is "{month} has not closed. Locking now posts an incomplete month to the GL — controllers usually wait for month-end." The checkbox is "I understand — lock this open month early."
Lock is also disabled when that month is already locked.
After a draft or a lock, four tiles show Status, Total, Attributed, and Suspense. Amounts are dollars with two decimal places.
If the draft has warnings, they appear under the heading Draft / run warnings.
A failed preview says "Draft failed" plus the status, unless the server sent its own message. A failed lock says "Lock failed" the same way.
Lines
When the draft has lines, the table columns are Type, GL, Department, Agent, Vendor, Amount, and Records.
| What you see | What it means |
|---|---|
| Current | A line for the month you are looking at. |
| Adj, then a month | An adjustment line. The table row is tinted violet. |
| An em dash in Department | A suspense line. The row is tinted amber. |
| GL code, with a label under it when one exists | The mapped account. |
| Agent, Vendor, or a missing department | An em dash when that value is empty. Vendor uses the display name when there is one. |
Locked months
The list is titled Locked months. With none, the page says "No locked periods yet."
Each locked month reads "Locked" and the month, then "by" and the person's name when one was recorded, the lock date, and the total. When the month has adjustment lines, it also says how many.
Allocation CSV downloads that month's CSV again. A failed download says "Download failed", unless the server sent its own message.
Export as JE… downloads a zip named meridian_je_, the system, and the month. The choices are:
- Generic CSV
- QuickBooks Online
- NetSuite (early access)
- Dynamics 365 Finance (early access)
- Sage Intacct (early access)
- SAP S/4HANA (early access)
Export reclass JE… appears only when that locked month has adjustment lines. The zip is named meridian_reclass_, the system, and the month. The choices are the same list. A failed export says "JE export failed" or "Reclass JE export failed", unless the server sent its own message.
Agents & allocation
The breadcrumb is Dashboard / Agents & rules. The title is Agents & allocation. The line under it is "Create agents in seconds, wire rules, clear the unattributed inbox."
Refresh reloads the page. Apply rules now runs every active rule. Success says "Applied rules:" then how many were attributed and how many are "still unattributed". A failure says "Apply failed" and the status.
While the page is loading it says "Loading…". The first paint, before that, says "Loading ledger…". If the lists cannot be loaded, the page says "Failed to load ledger management data".
Three tabs:
- Agents, with the count of active agents
- Rules, with the rule count
- Unattributed, with the unattributed count
Opening /meridian/ledger?tab=rules or ?tab=inbox or ?tab=agents selects that tab. The Unattributed tab is inbox.
Agents
Add agent says "Name + department. Owner defaults to you" and then the signed-in email, or "current user" when that email is missing.
| Field | What it is |
|---|---|
| Name | Required. The placeholder is "Support Copilot". |
| Department | A department, or None. |
| Monthly budget (optional) | A number. The placeholder is "2500.00". |
| Currency | USD, EUR, GBP, CAD, AUD, or JPY. It starts on USD. |
Create agent sends it. While a save is in progress the button says Saving…. Success says "Agent created". A duplicate name says "An agent with that name already exists in this organization."
The table columns are Agent, Dept, Monthly budget, and Spend (90d). A missing department is an em dash. The name and the spend both open that agent's page for 90 days. The status under the name is active or inactive. An inactive row is dimmed.
With no agents, the page says "No agents yet — add one in about ten seconds."
Set budget opens the budget editor when no budget is saved. A saved budget shows the currency and the amount. Save budget stores it and says "Agent budget updated." Clear removes it and says "Agent budget cleared." A blank or negative amount says "Enter a valid non-negative monthly budget, or use Clear." Cancel closes the editor.
Edit is titled "Edit name, department, and owner". The form is Name, Department, and Owner. A blank name says "Enter a name." The note under the fields is "Leave department blank to keep the current value. Choose a person as owner. Clearing either is not available." Owner searches with "Search by name or email". A person is shown as name and email when those differ, otherwise whichever is present, or "Unknown person". No matches says "No matching people". Save says "Agent updated." Cancel closes the form.
Deactivate asks Deactivate agent “name”? Historical spend stays linked. Success says "Deactivated" and the name. The row stays, marked inactive. A failure says "Deactivate failed" and the status.
One agent
The agent page heading is the agent name. The line under it is the department or "No department", the workflow or "No workflow", the time range, and the start and end dates. A description is shown when the agent has one.
The figures are Spend, Records, Tokens, and Vendors.
By vendor columns are Vendor and Spend. With none, the page says "No spend in this window". By model columns are Model and Spend. The model cell is the vendor, a slash, and the model, or an em dash when the model is missing. With none, the page says "No model breakdown".
Recent attributed lines columns are Date, Vendor, Model, and Cost. With none, the page says "No recent lines".
Back to dashboard returns to the dashboard. A failed load says "Failed to load agent P&L" and the status, unless the server sent its own message. Retry loads it again. While it loads, the page says "Loading agent P&L…".
Rules
Add rule says "After create, you'll be offered to apply it to matching unattributed spend."
When spend matches is Vendor, Model, Source type, Project label, Cost center, API key, or Tag. It starts on Vendor.
Match value placeholders, in that same order: openai, gpt-4o, api_sync, mobile-app, CC-100, key id, env:prod. A tag that contains a colon is split into a key and a value at the first colon.
Assign to agent starts on "Select agent…". Only active agents are listed. An empty match says "Enter a match value". No agent says "Pick a target agent".
Create rule sends it. The confirm, when matching unattributed rows exist, is "Apply this rule to" the count of "matching unattributed record" or "records", and the dollar amount. Accepting says "Rule created. Attributed" the number attributed "of" the number scanned "matching rows." If that apply fails, the page says "Rule created, but backfill failed — use Apply rules now." Declining says "Rule created." and how many "matching rows left unattributed until you apply." With no matches, the page says "Rule created. No matching unattributed spend right now."
If the saved match cannot be shown back the way it was entered, the page says "Rule saved but match display failed validation — refresh and check MATCH column."
The table columns are Priority, Match, and Rule. Match chips read field = value. The rule sentence is those chips, an arrow, and the agent name, or the workflow, or an em dash. A duplicate priority says "That priority is already used. Leave priority blank or pick another number."
Disable and Enable turn a rule off or on. A dimmed row is inactive. Delete asks "Delete this rule? Past attributions stay as they were — the ledger does not rewrite history." Success says "Rule deleted (historical attributions kept)". A failure says "Delete failed" and the status.
With no rules, the page says "No rules yet. Example: vendor = openai → Support Copilot."
Unattributed
The tab opens Attribution inbox. The line under it is the unattributed count, "unattributed records", the dollar total, and "(90 days). Assign → optional rule → number drops live." Warnings, when the inbox has them, are under Inbox warnings.
The table columns are a checkbox, Date, Vendor, Service, Model, Agent, Reason, and Cost. An empty date, service, model, agent, or reason is an em dash. When a row is a prior-period correction, Reason also says "Prior-period correction".
Assign to agent… lists active agents. Also create vendor rule + backfill is checked to start. Assign selected is disabled until at least one row is checked and an agent is chosen. With neither, the page says "Select rows and an agent".
Success with the checkbox on says "Assigned" the count "manually; rule backfill attributed" the further count "more." With the checkbox off, it says "Assigned" the count "row(s) to agent (manual provenance)."
With nothing in the window, the page says "Inbox clear — nothing unattributed in this window."