Recued
Menu
← Back to recipes

Close the month

by recued-core v1 26 views

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.

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.

Close the month
This recipe

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 “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 “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 “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 “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 →

Closing a month

A month is ready to close when three things are true:

  1. Every statement line is in your books: booked, or matched to an entry you typed in by hand.
  2. You typed the closing balance printed on your bank statement for the month.
  3. The statement and the books agree, or you wrote down why they do not.

Fill in the balance, press Check, and when nothing is listed as stopping it, press Seal this month. The figures are sealed: the statement's balance, the books' balance, and any difference with your reason.

How the difference is worked out

The books' closing balance is your bank account in Ledger book up to the last day of the month. Entries you typed in that are not on the statement yet (a cheque that has not cleared, say) are allowed for, so they do not count as a difference. Whatever is left is the unexplained difference, and it has to be 0 or come with a reason. Nothing is ever posted to make it 0.

What your accountant gets

A summary of the seal, and every line of the month as CSV: its date, description, money in or money out, whether it was booked or matched, and where it went. Money in and money out are separate columns, both positive, so a spreadsheet reads them as numbers. Copy both from the page.

The summary also lists what drove the month's changes, as written in Explain the month, with the figures each explanation was written for. A month can be closed without explanations; the summary then says none were written.

After sealing

While a month is sealed, Month-end closer will not book, match, unmatch or explain anything in it. Ledger book itself is not locked, so if something is posted into a sealed month there, this page says the month has changed since you sealed it: the books' bank balance at its end, or the number of entries in it. Month-end reminder checks the same thing on a schedule.

Unseal, and seal again

  • Unseal this month when something in it has to change. An unsealed month gets no alerts until you seal it again, and leaving it unsealed is fine.
  • Seal again fills in the statement's closing balance from the seal, so you only confirm it; your reason for a difference is kept while the difference is the same.
  • A sealed month that changed can be sealed again directly, which accepts the change. If the books and the statement no longer agree, it refuses until you find the difference or write down why.
  • Sealing a month again when nothing changed is refused: there is nothing new to seal.
How it works 197 steps

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

Process (197 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
◆ 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
■ label default
Apply default
■ ledger_id default
Apply default
■ bank_ref template
Generate text from a template
■ bank_currency 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
■ next_parts split
Split plus 32 into parts
■ next_month_start template
Generate text from a template
◆ closes recued-core.month-end-closer.month_close.search
Search month close on month end closer
skip: step.linked equal false
■ close_rows default
Apply default
■ closed_rows filter
Filter by condition
■ closed_count count
Count items in closed rows
■ was_closed compare
Check if closed count is greater than 0
■ close_row default
Apply default
■ close_exists compare
Check if close row exists
◆ seals recued-core.month-end-closer.bank_seal.search
Search bank seal on month end closer
skip: step.linked equal false
■ seal_rows default
Apply default
■ seal_id template
Generate text from a template
■ seal_match filter
Filter by condition
■ seal_row default
Apply default
■ seal_exists compare
Check if seal row exists
◆ lines recued-core.statement-import.line.search
Search line on statement import
skip: step.linked equal false
⚠ stop_more_than_1000_statement_lines_this_month guard
Stop if lines next cursor has data
■ line_rows default
Apply default
■ signed map
Extract from each item
◆ booked recued-core.ledger-book.batch.search
Search batch on ledger book
skip: step.linked equal false
⚠ stop_more_than_1000_bookings_this_month guard
Stop if booked next cursor has data
■ booked_rows default
Apply default
◆ links recued-core.month-end-closer.bank_link.search
Search bank link on month end closer
skip: step.linked equal false
⚠ stop_more_than_1000_links_this_month guard
Stop if links next cursor has data
■ link_rows default
Apply default
■ with_booking enrich_by
Apply enrich_by
■ with_link enrich_by
Apply enrich_by
■ open_lines filter
Filter by condition
■ booked_lines filter
Filter by condition
■ linked_lines filter
Filter by condition
■ line_count count
Count items in line rows
■ open_count count
Count items in open lines
■ booked_count count
Count items in booked lines
■ linked_count count
Count items in linked lines
■ not_in_books_raw sum
Sum values in
■ not_in_books_total math
Calculate: round({{step.not_in_books_raw}} * 100) / 100
◆ bank_legs recued-core.ledger-book.leg.search
Search leg on ledger book
skip: step.linked equal false
⚠ stop_more_than_1000_bank_entries_this_month guard
Stop if bank legs next cursor has data
◆ cat_legs recued-core.ledger-book.leg.search
Search leg on ledger book
skip: step.linked equal false
⚠ stop_more_than_1000_entries_this_month guard
Stop if cat legs next cursor has data
■ leg_rows default
Apply default
■ hand_legs filter
Filter by condition
■ linked_refs pluck
Extract batch_ref from each item
■ unclaimed_legs filter
Filter by condition
■ unclaimed_count count
Count items in unclaimed legs
■ not_in_bank_raw sum
Sum values in
■ not_in_bank_total math
Calculate: round({{step.not_in_bank_raw}} * 100) / 100
■ can_read_books all
Check if all conditions are true
◆ books recued-core.ledger-book.leg.balance
Balance leg on ledger book
skip: step.can_read_books equal false
■ books_raw default
Apply default
■ books_closing math
Calculate: round({{step.books_raw}} * 100) / 100
◆ period_legs recued-core.ledger-book.leg.balance
Balance leg on ledger book
skip: step.can_read_books equal false
■ entries_now default
Apply default
■ seal_stmt_n math
Calculate: round(({{step.seal_row.statement_closing}}) * 100) / 100
skip: step.seal_exists equal false
■ seal_books_n math
Calculate: round(({{step.seal_row.books_closing}}) * 100) / 100
skip: step.seal_exists equal false
■ seal_resid_n math
Calculate: round(({{step.seal_row.residual}}) * 100) / 100
skip: step.seal_exists equal false
■ seal_books default
Apply default
■ drift math
Calculate: round(({{step.books_closing}} - {{step.seal_books}}) * 100) / 100
■ entries_then default
Apply default
■ entries_moved math
Calculate: abs({{step.entries_now}} - {{step.entries_then}})
■ moved any
Check if any of the conditions are true
■ drifted all
Check if all conditions are true
■ stmt_typed trim
Trim whitespace from setting statement closing
■ kept_stmt template
Generate text from a template
skip: step.seal_exists equal false
■ stmt_in default
Apply default
■ stmt_blank compare
Check if stmt typed is empty
■ stmt_from_seal all
Check if all conditions are true
■ has_stmt compare
Check if stmt in has data
■ stmt_n to_number
Convert stmt in to a number
■ stmt_valid all
Check if all conditions are true
■ stmt_num default
Apply default
■ stmt_closing math
Calculate: round({{step.stmt_num}} * 100) / 100
■ residual math
Calculate: round(({{step.stmt_closing}} - {{step.books_closing}} - {{step.not_in_books_total}} + {{step.not_in_bank_total}}) * 100) / 100
■ dates_desc sort
Sort by posted_on
■ last_date default
Apply default
■ on_last filter
Filter by condition
■ on_last_count count
Count items in on last
■ hint_balance default
Apply default
■ hint_ok all
Check if all conditions are true
■ hint_text ternary
Apply ternary
■ no_open compare
Check if open count equals 0
■ residual_zero compare
Check if residual equals 0
■ reason_typed trim
Trim whitespace from setting reason
■ reason_blank compare
Check if reason typed is empty
■ same_difference compare
Check if residual equals seal resid n
■ kept_reason default
Apply default
■ carry_reason all
Check if all conditions are true
■ reason_in ternary
Apply ternary
■ has_reason compare
Check if reason in has data
■ stmt_missing compare
Check if stmt valid equals false
■ explained any
Check if any of the conditions are true
■ unchanged_seal all
Check if all conditions are true
■ can_seal compare
Check if unchanged seal equals false
■ ready all
Check if all conditions are true
■ checks default
Apply default
■ blockers filter
Filter by condition
■ blocker_count count
Count items in blockers
■ blockers_table to_table
Format results as a data table
⚠ stop_link_your_bank_account_first guard
Stop if linked equals
skip: config.confirm equal false
⚠ stop_month_not_yyyy_mm guard
Stop if month ok equals
skip: config.confirm equal false
⚠ stop_nothing_changed_since_sealing guard
Stop if unchanged seal equals
skip: config.confirm equal false
⚠ stop_lines_not_in_books guard
Stop if no open equals
skip: config.confirm equal false
⚠ stop_no_statement_closing guard
Stop if stmt valid equals
skip: config.confirm equal false
⚠ stop_difference_not_explained guard
Stop if explained equals
skip: config.confirm equal false
■ stmt_closing_s template
Generate text from a template
■ books_closing_s template
Generate text from a template
■ not_in_bank_total_s template
Generate text from a template
■ residual_s template
Generate text from a template
■ seal_delta math
Calculate: abs(({{step.stmt_closing}}) - ({{step.seal_row.statement_closing}})) + abs(({{step.books_closing}}) - ({{step.seal_row.books_closing}})) + abs(({{step.not_in_bank_total}}) - ({{step.seal_row.not_in_bank_total}})) + abs(({{step.residual}}) - ({{step.seal_row.residual}}))
skip: step.seal_exists equal false
■ reason_changed compare
Check if reason in does not equal kept reason
■ seal_changed any
Check if any of the conditions are true
■ seal_is_new compare
Check if seal exists equals false
■ seal_update_needed all
Check if all conditions are true
■ close_is_new compare
Check if close exists equals false
■ close_status_open compare
Check if close row status does not equal closed
■ closed_other_day compare
Check if close row closed on does not equal today
■ close_changes any
Check if any of the conditions are true
■ close_update_needed all
Check if all conditions are true
■ op_choices default
Apply default
■ chosen filter
Filter by condition
■ close_ops pluck
Extract op from each item
◆ close_post recued-core.month-end-closer.month_close.post
Post month close on month end closer
skip: config.confirm equal false
■ closed_now any
Check if any of the conditions are true
■ cat_rows default
Apply default
■ booked_to enrich_by
Apply enrich_by
■ pkg_booked map
Extract from each item
■ pkg_linked map
Extract from each item
■ pkg_open map
Extract from each item
■ pkg_books_only map
Extract from each item
■ pkg_all flatten
Flatten nested lists in
■ pkg_sorted sort
Sort by date
■ package_csv to_csv
Serialize rows as a CSV string
■ status_closed_text ternary
Apply ternary
■ show_drift all
Check if all conditions are true
■ drift_text ternary
Apply ternary
■ ready_text ternary
Apply ternary
■ is_unsealed all
Check if all conditions are true
■ unsealed_note ternary
Apply ternary
■ open_status ternary
Apply ternary
■ month_status ternary
Apply ternary
■ status_text ternary
Apply ternary
■ stmt_text ternary
Apply ternary
■ reason_text ternary
Apply ternary
■ stmt_seal_note ternary
Apply ternary
■ stmt_card_text template
Generate text from a template
■ reason_seal_note ternary
Apply ternary
■ reason_card_text template
Generate text from a template
■ sealed_line ternary
Apply ternary
◆ why recued-core.month-end-closer.month_line.search
Search month line on month end closer
skip: step.linked equal false
■ why_rows default
Apply default
■ why_explained filter
Filter by condition
■ why_count count
Count items in why explained
■ has_why compare
Check if why count is greater than 0
◆ why_accounts recued-core.ledger-book.account.search
Search account on ledger book
skip: step.has_why equal false
■ why_account_rows default
Apply default
■ why_account_refs map
Extract from each item
■ why_named enrich_by
Apply enrich_by
■ why_by default
Apply default
■ why_noted enrich_by
Apply enrich_by
■ why_figures map
Extract from each item
■ why_sorted sort
Sort by name
■ why_lines map
Extract from each item
■ why_md join
Join items with " "
■ why_section ternary
Apply ternary
■ summary_md template
Generate text from a template
■ has_open compare
Check if open count is greater than 0
■ can_explain all
Check if all conditions are true
■ seal_first all
Check if all conditions are true
■ seal_again all
Check if all conditions are true
■ can_book all
Check if all conditions are true
■ action_choices default
Apply default
■ shown_actions_raw filter
Filter by condition
■ shown_actions map
Extract from each item
■ hint_wanted any
Check if any of the conditions are true
■ hint_card_text ternary
Apply ternary
■ card to_summary
Format results as a summary card
▼
Output
filter lines
summary card
table blockers_table
button shown_actions
copyable summary_md
copyable package_csv
Settings 4 configurable

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

period setting =
reason setting =
confirm setting = false
statement closing setting =

Uses (11 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 bank seal on month end closer recued-core.month-end-closer.bank_seal.search
Pack operation Search line on statement import recued-core.statement-import.line.search
Pack operation Search batch on ledger book recued-core.ledger-book.batch.search
Pack operation Search bank link on month end closer recued-core.month-end-closer.bank_link.search
Pack operation Search leg on ledger book recued-core.ledger-book.leg.search
Pack operation Balance leg on ledger book recued-core.ledger-book.leg.balance
Pack operation Post month close on month end closer recued-core.month-end-closer.month_close.post
Pack operation Search month line on month end closer recued-core.month-end-closer.month_line.search
Pack operation Search account on ledger book recued-core.ledger-book.account.search

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: bank_seal.search · No approvalRead: bank_link.search · No approvalWrite: month_close.post · No approvalRead: month_line.search · No approval

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

About

Tags

pack:month-end-closermonth-endbank-reconciliationbookkeepingrecordsv3

Details

197 steps 4 configurable settings recipe_id: close-month