Recued
Menu
← Back to recipes

Explain the month

by recued-core v1 25 views

Use “Explain the month” in Recued. See which income and expense accounts changed most since last month and what drove each change, written by you or suggested by your AI model.

Complete workflow

Month-end closer 11 pinned recipes

Use Month-end closer in Recued to bring your imported bank statement into your Ledger book once a month: book or match every line, check the books against the statement, explain what changed since last month, and close the month with a package for your accountant. It installs Ledger book and Bank statement import too; give both Read + write. It includes 13 built-in actions and 10 ready-to-run workflows. Actions that change data use Recued's approval controls.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Explain the month
This recipe

Use “Explain the month” in Recued. See which income and expense accounts changed most since last month and what drove each change, written by you or suggested by your AI model.

pack:month-end-closermonth-endbookkeepingvariance
by recued-core pinned v1

Use “Link your bank account” in Recued. Tell Month-end closer, once, which Ledger book account your imported bank statement belongs to.

pack:month-end-closermonth-endbank-reconciliationrecords
by recued-core pinned v1

Use “Month to close” in Recued. See, for one month, which lines of your bank statement are already in your Ledger book and which are not yet.

pack:month-end-closermonth-endbank-reconciliationrecords
by recued-core pinned v1

Use “Book bank lines” in Recued. Tick bank statement lines that are not in your Ledger book yet and book them to one of your existing accounts in a single step.

pack:month-end-closermonth-endbank-reconciliationbookkeeping
by recued-core pinned v1

Use “Match lines typed by hand” in Recued. Link bank statement lines to entries you already typed into your Ledger book, so the same money is never booked twice.

pack:month-end-closermonth-endbank-reconciliationbookkeeping
by recued-core pinned v1
Show all 11 recipes

Use “Book as suggested” in Recued. Book bank statement lines to the account your earlier bookings or your AI model suggest, ticking only the suggestions you agree with.

pack:month-end-closermonth-endbank-reconciliationbookkeeping
by recued-core pinned v1

Use “Suggest accounts with AI” in Recued. Ask your AI model which of your Ledger book accounts each new bank statement line belongs to, and keep its answers for you to review.

pack:month-end-closermonth-endbookkeepingai
by recued-core pinned v1

Use “Close the month” in Recued. Check your books against your bank statement's closing balance, then seal the month and copy a package for your accountant.

pack:month-end-closermonth-endbank-reconciliationbookkeeping
by recued-core pinned v1

Use “Reopen a month” in Recued. Unseal a month you sealed so its lines can be booked, matched and explained again. Its figures are kept, so sealing it again takes one click.

pack:month-end-closermonth-endbookkeepingrecords
by recued-core pinned v1

Use “Month-end reminder” in Recued. On a schedule you choose, it tells you when last month isn't sealed yet, and when a month you sealed has changed since.

pack:month-end-closermonth-endbookkeepingreminder
by recued-core pinned v1
View pack details, dependencies, and permissions →

What it does

For the month you pick, it compares each of your income and expense accounts in Ledger book with the month before, and lists the ones that changed enough to explain. For each of those it shows which entries moved: new descriptions, regular ones that did not appear, and bigger or smaller bills.

What counts as changed enough

A change is listed when it is at least the smallest change you set (50 by default, in your bank account's currency) and at least the percentage you set of last month's total (5 by default). Accounts on your always explain list are listed whenever they moved at all.

Explaining a change

Write what drove each change in the table and press Save explanations. Or press Ask AI to explain: it sends each listed account's name, its two totals and the entries that moved (their descriptions and amounts) to the AI model you set up in Recued, and keeps one sentence per account. When the entries do not explain a change, the model is told to say "driver unclear — check" rather than guess. Nothing is sent until you press the button, and an explanation you wrote yourself is never replaced by the AI.

When the figures change

An explanation is kept with the figures it was written for. If more entries are booked afterwards, the table says so, and asking the AI again rewrites its own explanations for the new figures.

Closing

The explanations go into the package Close the month gives your accountant. A month with no explanations can still be closed: the package then says none were written. A sealed month's explanations can't be changed until you unseal it.

How it works 164 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (164 steps)
■ now_iso date_add
Add 0 seconds to
■ today_local date_format
Format as a date
■ today default
Apply default
■ ym_parts split
Split today into parts
■ month_start template
Generate text from a template
■ prev_day date_add
Add -1 days to
■ prev_parts split
Split prev day into parts
■ last_month template
Generate text from a template
■ period_in trim
Trim whitespace from setting period
■ month default
Apply default
■ period_start template
Generate text from a template
■ plus_32 date_add
Add 32 days to
■ month_ok compare
Check if plus 32 exists
■ before_start date_add
Add -1 days to
skip: step.month_ok equal false
■ before_text default
Apply default
■ before_parts split
Split before text into parts
■ prior template
Generate text from a template
■ floor_raw default
Apply default
■ floor_num to_number
Convert floor raw to a number
■ floor_in default
Apply default
■ floor_n math
Calculate: max({{step.floor_in}}, 0)
■ pct_raw default
Apply default
■ pct_num to_number
Convert pct raw to a number
■ pct_in default
Apply default
■ pct_n math
Calculate: max({{step.pct_in}}, 0)
■ always_in default
Apply default
■ always_clean replace
Replace text in always in
■ always_ids split
Split always clean into parts
■ submitted default
Apply default
■ submitted_count count
Count items in submitted
■ has_edits compare
Check if submitted count is greater than 0
■ wants_write any
Check if any of the conditions are true
⚠ stop_edit_or_ask_not_both guard
Stop if has edits equals
skip: config.run_ai equal false
◆ setup recued-core.month-end-closer.bank_account.search
Search bank account on month end closer
■ setup_rows default
Apply default
■ setup_count count
Count items in setup rows
■ linked compare
Check if setup count is greater than 0
⚠ stop_link_your_bank_account_first guard
Stop if linked equals
skip: step.wants_write equal false
⚠ stop_month_not_yyyy_mm guard
Stop if month ok equals
skip: step.wants_write equal false
■ bank_currency default
Apply default
■ can_read all
Check if all conditions are true
◆ closes recued-core.month-end-closer.month_close.search
Search month close on month end closer
skip: step.can_read equal false
■ close_rows default
Apply default
■ closed_count count
Count items in close rows
■ was_closed compare
Check if closed count is greater than 0
⚠ stop_month_is_sealed guard
Stop if was closed equals
skip: step.wants_write equal false
◆ accounts recued-core.ledger-book.account.search
Search account on ledger book
skip: step.can_read equal false
■ account_rows default
Apply default
■ pl_accounts filter
Filter by condition
■ signs default
Apply default
■ pl_signed enrich_by
Apply enrich_by
■ pl_count count
Count items in pl signed
■ can_total all
Check if all conditions are true
◆ now_totals recued-core.ledger-book.leg.balance
Balance leg on ledger book
skip: step.can_total equal false
◆ then_totals recued-core.ledger-book.leg.balance
Balance leg on ledger book
skip: step.can_total equal false
■ now_results default
Apply default
■ then_results default
Apply default
■ all_results flatten
Flatten nested lists in
■ unread filter
Filter by condition
■ unread_count count
Count items in unread
⚠ stop_totals_unreadable guard
Stop if unread count is greater than
■ now_rows map
Extract from each item
■ then_rows map
Extract from each item
■ joined enrich_by
Apply enrich_by
■ figures map
Extract from each item
■ measured map
Extract from each item
■ over filter
Filter by condition
■ listed filter
Filter by condition
■ flag_all flatten
Flatten nested lists in
■ flag_unique unique
Remove duplicates from
■ flag_sorted sort
Sort by size
■ flagged_count count
Count items in flag sorted
■ flagged slice
Take a subset of
■ shown_count count
Count items in flagged
■ has_flags compare
Check if shown count is greater than 0
■ can_contrib all
Check if all conditions are true
■ flag_refs pluck
Extract ref from each item
◆ contrib recued-core.ledger-book.leg.search
Search leg on ledger book
skip: step.can_contrib equal false
■ contrib_rows default
Apply default
■ contrib_count count
Count items in contrib rows
■ contrib_capped compare
Check if contrib next cursor has data
■ this_legs filter
Filter by condition
■ last_legs filter
Filter by condition
■ this_parts map
Extract from each item
■ last_parts map
Extract from each item
■ parts_all flatten
Flatten nested lists in
■ by_description group_by
Group by key
■ described enrich_by
Apply enrich_by
■ described_signed enrich_by
Apply enrich_by
■ movers map
Extract from each item
■ movers_moved filter
Filter by condition
■ movers_sorted sort
Sort by size
■ movers_top slice
Take a subset of
■ movers_clean map
Extract from each item
■ movers_by_account group_by
Group by account_ref
■ movers_list to_list
Apply to_list
◆ saved recued-core.month-end-closer.month_line.search
Search month line on month end closer
skip: step.can_read equal false
⚠ stop_more_than_1000_explanations_this_month guard
Stop if saved next cursor has data
■ saved_rows default
Apply default
■ with_saved enrich_by
Apply enrich_by
■ with_movers enrich_by
Apply enrich_by
■ lines map
Extract from each item
■ no_driver filter
Filter by condition
■ stale_ai filter
Filter by condition
■ need_all flatten
Flatten nested lists in
■ need_ai unique
Remove duplicates from
■ need_count count
Count items in need ai
■ ask_model all
Check if all conditions are true
■ ai_payload map
Extract from each item
✦ answers core.ai.generate
AI generates content from a template
skip: step.ask_model equal false
■ answer_rows default
Apply default
■ answer_trimmed map
Extract from each item
■ answered filter
Filter by condition
■ answered_count count
Count items in answered
■ ai_targets enrich_by
Apply enrich_by
■ ai_known filter
Filter by condition
■ ai_writes map
Extract from each item
■ lines_signed map
Extract from each item
■ kept_sigs pluck
Extract sig from each item
■ flagged_line_ids pluck
Extract line_id from each item
■ for_flagged filter
Filter by condition
■ edits_signed map
Extract from each item
■ edits_changed filter
Filter by condition
■ edit_targets enrich_by
Apply enrich_by
■ edit_text map
Extract from each item
■ edits_set filter
Filter by condition
■ edits_cleared filter
Filter by condition
■ owner_writes map
Extract from each item
■ owner_clears map
Extract from each item
■ edit_count count
Count items in edits changed
■ texts flatten
Flatten nested lists in
■ text_new filter
Filter by condition
■ text_old filter
Filter by condition
■ create_ops map
Extract from each item
■ update_ops map
Extract from each item
■ clear_ops map
Extract from each item
■ save_ops flatten
Flatten nested lists in
■ save_count count
Count items in save ops
◆ save recued-core.month-end-closer.month_line.post
Post month line on month end closer
skip: step.save_count equal 0
■ writes flatten
Flatten nested lists in
■ after enrich_by
Apply enrich_by
■ who default
Apply default
■ after_keyed map
Extract from each item
■ after_named enrich_by
Apply enrich_by
■ grid_rows map
Extract from each item
■ explained_rows filter
Filter by condition
■ explained_count count
Count items in explained rows
■ waiting_count math
Calculate: {{step.shown_count}} - {{step.explained_count}}
■ over_cap compare
Check if flagged count is greater than 100
■ closed_note ternary
Apply ternary
■ over_cap_note ternary
Apply ternary
■ capped_note ternary
Apply ternary
■ ai_note ternary
Apply ternary
■ count_text template
Generate text from a template
■ empty_text template
Generate text from a template
■ ready_text ternary
Apply ternary
■ month_text ternary
Apply ternary
■ status_text ternary
Apply ternary
■ can_ask all
Check if all conditions are true
■ action_choices default
Apply default
■ shown_actions_raw filter
Filter by condition
■ actions map
Extract from each item
■ movers_table to_table
Format results as a data table
■ card to_summary
Format results as a summary card
▼
Output
filter accounts
summary card
button actions
table grid_rows
table movers_table
Settings 6 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

floor setting = 50
always setting =
period setting =
run ai setting = false
drivers setting =
percent setting = 5

Uses (8 operations)

Pack operation Search bank account on month end closer recued-core.month-end-closer.bank_account.search
Pack operation Search month close on month end closer recued-core.month-end-closer.month_close.search
Pack operation Search account on ledger book recued-core.ledger-book.account.search
Pack operation Balance leg on ledger book recued-core.ledger-book.leg.balance
Pack operation Search leg on ledger book recued-core.ledger-book.leg.search
Pack operation Search month line on month end closer recued-core.month-end-closer.month_line.search
AI models AI generates content from a template core.ai.generate
Pack operation Post month line on month end closer recued-core.month-end-closer.month_line.post

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

What it's allowed to do

Write Pack Month-end closer external change
Read: bank_account.search · No approvalRead: month_close.search · No approvalRead: month_line.search · No approvalWrite: month_line.post · No approval
Read AI models core.ai.generate read-only

3 more aren't listed here. You'll see them at install.

Data it touches

SurfacesAI models

About

Tags

pack:month-end-closermonth-endbookkeepingvarianceairecordsv3

Details

164 steps 6 configurable settings recipe_id: explain-month