Recued
Menu
← Back to recipes

Raise the period's rent charges

by recued-core v4 7 views

Use “Raise the period's rent charges” in Recued. Raises one rent charge per live contract for a billing period. Safe to run unattended on a monthly schedule and safe to run twice — the charge id is the (contract, period, kind) tuple, so a repeat is a no-op rather than a second bill.

Complete workflow

Rental Book 19 pinned recipes

Use Rental Book in Recued for property, landlord, ledger, and records. It includes 24 built-in actions and 18 ready-to-run workflows.

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

Use “Raise the period's rent charges” in Recued. Raises one rent charge per live contract for a billing period. Safe to run unattended on a monthly schedule and safe to run twice — the charge id is the (contract, period, kind) tuple, so a repeat is a no-op rather than a second bill.

pack:rental-bookbillingchargescheduled
by recued-core pinned v4

Use “Add a building” in Recued. Records one building or complex. Units hang off it.

pack:rental-bookbuildingsetup
by recued-core pinned v2

Use “Add a unit” in Recued. Records one rentable unit against a building. It uses the connections and settings you choose when you run it.

pack:rental-bookunitsetup
by recued-core pinned v2

Use “Add a tenant” in Recued. Records one tenant and how they pay: cash, autopay, or stripe.

pack:rental-bookcustomertenantsetup
by recued-core pinned v3

Use “Open a rental contract” in Recued. Binds a tenant to a unit at a monthly rent. The contract is what a period charge is raised against.

pack:rental-bookcontractsetup
by recued-core pinned v4

Use “Record a rent payment” in Recued. Records what a tenant actually paid, against their account rather than against an invoice. A partial payment is one receipt for the part; an overpayment is one receipt for the whole, and the credit carries.

pack:rental-bookreceiptpaymentmanual
by recued-core pinned v3
Show all 19 recipes

Use “Collection sheet” in Recued. The month's collection list as a table and as CSV, one row per active contract, each carrying the contract id the import matches on.

pack:rental-bookreportexportcsv
by recued-core pinned v2

Use “Import payments” in Recued. Reads the collection sheet back and records one receipt per row that carries an amount and the date it arrived. Re-uploading the same sheet records nothing twice, and a row it cannot record is named rather than dropped.

pack:rental-bookreceiptpaymentimport
by recued-core pinned v5

Use “Tenant statement” in Recued. One tenant's account: everything charged, everything received, and the balance derived from the two. Not read off any invoice, because no invoice knows about the payment that arrived against a different month.

pack:rental-bookstatementreportledger
by recued-core pinned v5

Use “Buildings” in Recued. Every building you hold, with a way into each one's units.

pack:rental-booklistbuildingnavigation
by recued-core pinned v5

Use “Building” in Recued. One building: what it is, and every unit in it. It uses the connections and settings you choose when you run it.

pack:rental-bookdetailbuildingnavigation
by recued-core pinned v5

Use “Unit” in Recued. One unit: who is in it now, and every tenancy it has had. It uses the connections and settings you choose when you run it.

pack:rental-bookdetailunittenancy
by recued-core pinned v4

Use “Contracts” in Recued. Live tenancies by default; expired ones only when you ask.

pack:rental-booklistcontractfilter
by recued-core pinned v5

Use “Customers” in Recued. Everyone on the book, most recent first — and the way to start a tenancy for one.

pack:rental-booklistcustomerpicker
by recued-core pinned v5

Use “Retire or restore a customer” in Recued. Takes a customer off the working list without deleting anything they are attached to, or puts them back.

pack:rental-bookcustomerhousekeeping
by recued-core pinned v5

Use “End a tenancy” in Recued. Closes a contract on a date. The ledger it produced stays exactly as it is — ending a tenancy is not settling it.

pack:rental-bookcontractterminationlifecycle
by recued-core pinned v5

Use “Change the rent” in Recued. Sets a contract's rent. Periods already raised keep the amount they were raised at.

pack:rental-bookcontractrentlifecycle
by recued-core pinned v5

Use “Collect the rent” in Recued. Type what each tenant paid, straight into a grid — one row per live tenancy, one save.

pack:rental-bookreceiptpaymentbatch
by recued-core pinned v5
View pack details, dependencies, and permissions →

Point a monthly schedule at this

There is nothing to declare in the recipe — schedules are server-side rows you attach to a dish. 1st of month at 9:00 AM (0 9 1 ) is the preset this is built for.

Check the preset you pick. Last weekday 5:00 PM is currently the same expression as Weekly Friday 5:00 PM (0 17 5) — it fires every Friday, not monthly.

Advance or arrears

Billing mode decides which month a run bills, so the same schedule serves both kinds of business:

  • advance (default) — running on 1 August bills August. Rent is due for the month about to start.
  • arrears — running on 1 August bills July. Rent is due for the month just finished.

Leave Period empty and the mode decides. Fill it in (2026-03) to bill a month by hand — a catch-up after downtime, or a correction. The mode is then ignored.

Running it twice is safe

The charge is dated to its PERIOD, not to the moment it was raised. That is what makes a re-run a no-op: the store replays a natural-key write only when every stored value matches, so a wall-clock stamp would make the second run a CONFLICT rather than a repeat. When it was actually written is still on the row as _record.created_at.

The charge id is derived from (contract, period, kind). A second run writes the same id, and the store recognises an identical row and does nothing.

Unless the rent changed. A contract whose rent moved after the first run produces a conflict for that tenant, not a silent overwrite — the recipe reports it and leaves the original charge alone. Raise the difference by hand, or void and re-raise.

Which contracts count

A contract is billed for a period when it started before the period ended and had not ended before the period began. An open-ended contract (no end date) qualifies on the second test automatically.

Both comparisons happen inside the store, on real date slots. ⚠ They cannot be done in the recipe — the condition operators coerce with Number(), and Number('2026-07-01') is NaN, so a date compared in a recipe silently matches nothing.

Status still matters. Only active contracts are read. A contract left active past its end date is excluded by the date test; one marked ended early is excluded whatever its dates say.

How it works 27 steps

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

Process (27 steps)
period_in trim
Trim whitespace from setting period
now_iso date_add
Add 0 seconds to
is_arrears compare
Check if setting billing mode equals arrears
window_name ternary
Apply ternary
window date_period
Apply date_period
window_ym truncate
Truncate window start to a max length
period default
Apply default
next_probe date_add
Add 31 days to
next_ym truncate
Truncate next probe to a max length
read_cap clamp
Clamp setting limit between 1 and 200
dated_read ?
open_read ?
defaults defaults
Apply defaults
both flatten
Flatten nested lists in
contracts unique
Remove duplicates from
contract_count count
Count items in contracts
has_any compare
Check if contracts has data
none_guard guard
Stop if has any equals
raised ?
results map
Extract from each item
ok_rows filter
Filter by condition
conflict_rows filter
Filter by condition
ok_count count
Count items in ok rows
conflict_count count
Count items in conflict rows
mode_label ternary
Apply ternary
conflict_table to_table
Format results as a data table
card to_summary
Format results as a summary card
Settings 3 configurable

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

limit setting = 200
period setting =
billing mode setting = advance

About

Tags

pack:rental-bookbillingchargescheduledmonthly

Details

27 steps 3 configurable settings recipe_id: raise-period-charges