Get ready to close the month
Checks what is blocking the month's close: expenses to prepare, expenses not exported, missing receipts, settlements not exported and overdue invoices.
Controller๐ MonthlyIntermediateRead-only
Ask it like this
Are we ready to close the month?
When to use it
At the end of the month or quarter, to check that every accounting item is processed before closing the period.
What it produces
A close report with a status per item, the amounts involved and the list of expenses that block.
How it works
- 1Counts the month's expenses not yet prepared for accounting
- 2Counts those that are ready but not yet exported
- 3Spots expenses with no receipt
- 4Counts the month's settlements still to be exported
- 5Recalls supplier invoices overdue as of today
- 6Sums up each item as "OK" or "action required"
What protects you
- This skill only reads: it changes nothing in Spendesk
- It acts with your permissions and your role, never beyond
- The assistant cannot approve or pay
โธTechnical detail87/100 ยท 4 tools
ReconciliationERP exportspendesk_analyze_spendget_payablesspendesk_analyze_settlementsspendesk_get_due_invoices
# Month-end close checklist
## Purpose
Check in one request what is blocking a month's close: expenses not yet prepared, expenses ready but not exported, missing receipts, settlements not exported, overdue supplier invoices. Each item comes out โ
or โ.
This skill only reads. It closes nothing, exports nothing and marks nothing as ready: see the accounting export skill for what comes next.
## Before any call
State the exact dates of the month being checked (e.g. "from 2026-09-01 to 2026-09-30"). Checks 1 to 3 apply to the expenses' **document date** (`payableDate`), not the accounting date.
## Check 1 โ Bookkeeping status of the month's expenses
```json
{
"tool": "spendesk_analyze_spend",
"params": { "fromDate": "2026-09-01", "toDate": "2026-09-30", "groupBy": ["bookkeepingStatus", "payableType"] }
}
```
One call gives the count and amount per status:
| `bookkeepingStatus` | Reading | Verdict |
|---------------------|---------|---------|
| `toPrepare` | Not yet prepared: **left out of the export without warning** | โ if any remain |
| `toExport` | Ready, not yet exported (includes exports in flight or failed, which cannot be told apart) | โ if any remain |
| `exported` | Exported, or marked exported by hand | โ
|
The `payableType` breakdown isolates expense claims (`expenseClaim`) still to prepare.
## Check 2 โ List the expenses that block
```json
{
"tool": "get_payables",
"params": { "filters": { "operator": "and", "subfilters": [
{ "field": "payableDate", "operator": "between", "value": { "from": "2026-09-01T00:00:00.000Z", "to": "2026-09-30T23:59:59.999Z" } },
{ "field": "bookkeepingStatus", "operator": "=", "value": ["toPrepare", "toExport"] }
] } }
}
```
The field is called `bookkeepingStatus` (not `bookingStatus` or `status`). Page with `cursor` while `hasNextPage` is `true`. For the supplier's or employee's name, call `get_payable_by_id` on the rows you present.
## Check 3 โ Missing receipts
```json
{
"tool": "get_payables",
"params": { "filters": { "operator": "and", "subfilters": [
{ "field": "payableDate", "operator": "between", "value": { "from": "2026-09-01T00:00:00.000Z", "to": "2026-09-30T23:59:59.999Z" } },
{ "field": "documentaryEvidenceStatus", "operator": "=", "value": ["missing", "declaredAsInvalid"] }
] } }
}
```
This filter avoids querying attachments expense by expense. `provided` means a file is attached, not that the document is compliant.
## Check 4 โ Settlements not exported
```json
{
"tool": "spendesk_analyze_settlements",
"params": { "fromDate": "2026-09-01", "toDate": "2026-09-30", "filters": { "state": ["created", "failedToExport"] } }
}
```
Settlements feed the bank journal, independently of expenses. `summary.totalCount` gives their number. The total is **net and signed**: add `"groupBy": ["type"]` to separate payments from refunds. For the list, use `get_settlements` with the same `state`.
## Check 5 โ Overdue supplier invoices
```json
{ "tool": "spendesk_get_due_invoices", "params": { "includeLineItems": false } }
```
For information: a late payment does not block the close. The figure is as of **today** and for the current company; do not pass a past date as `asOfDate` for "overdues at month-end", it is not a historical aging.
## Report
```
Close of <month> (<exact dates>)
โ
/โ Expenses to prepare N โ X EUR
โ
/โ Expenses ready, not exported N โ X EUR
โ
/โ Missing receipts N
โ
/โ Settlements not exported N โ X EUR net
โน๏ธ Overdue invoices (as of today) N โ X EUR
Conclusion: ready to export when the first four items are โ
.
```
## Limits to state
- A failed export and a pending one cannot be told apart: both stay in `toExport`.
- One company at a time: on a multi-entity connection, repeat the checklist per entity.
- The MCP cannot approve an expense, nor prepare it for you without the "Manage payables" write permission.
## Observed result (demo account, 5 October 2026)
Over 12 months: 25 expenses, 23 exported and 2 still to prepare (EUR 25,834.90), both from September. No missing receipt over the third quarter. 2 September settlements not exported, for EUR 10,613.50. 11 overdue invoices for EUR 19,095.67.
## Example prompts
- "Are we ready to close the month?"
- "Run the close checklist for September"
- "Show me what is blocking the month-end close"
How to install this skill
/
- 1Download the file
s46-controller-cloture-checklist.mdusing the button above. - 2Place the file in the
.claude/directory of your project (or~/.claude/for a global install).cp s46-controller-cloture-checklist.md .claude/s46-controller-cloture-checklist.md - 3Use in Claude Code โ the skill is automatically discovered. Describe your need in natural language and Claude will apply the skill instructions.
๐ก Make sure the Spendesk MCP is configured in your
.claude/settings.json with the tools spendesk_analyze_spend, get_payables, spendesk_analyze_settlements, spendesk_get_due_invoices.Similar skills
โ
Top