Recued
Menu
← Back to recipes

Collect the rent

by recued-core v5 11 views

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

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.

Collect the rent
This recipe

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

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 “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
Show all 19 recipes

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

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
View pack details, dependencies, and permissions →

One screen, one save

Every live tenancy gets a row with the rent DUE beside it. Type what actually arrived and press save; each amount you filled in becomes a receipt.

A blank is a tenant who has not paid, not a payment of nothing — blank rows are skipped, and the count of what was skipped is reported.

Saving twice is safe, and it did not used to be

Pressing save a second time used to record every payment again. A double-click, a browser resubmit, or simply not being sure the first one took — all of them sent the same rows, each got a fresh id, and a tenant who paid 1200 showed 2400 received. Nothing announced it, because a doubled balance still looks like money.

Each receipt's id is now derived from the tenancy, the day and the amount, so a row already recorded is recognised and skipped. The card says how many were newly written and how many you already held.

It is the SAME identity the collection sheet uses. Type a payment here and then upload a sheet that also has it, and you get ONE receipt, not two — the grid and the spreadsheet are two doors into the same book. ⚠ The amount has to match as WRITTEN, though: 1200 typed here and 1200.00 on the sheet are two different receipts, because nothing between the cell and the row decides they are the same number.

If you answer Paid by differently on the two screens, the sheet reports that row as refused rather than already held. The two agree on which payment it is and disagree on how it arrived, and nothing here picks a winner. Nothing is lost and nothing doubles — you keep one receipt, the one you entered first. Both screens now offer the same five methods and start on the same one, so this only happens if you deliberately say two different things about one payment.

A row that cannot be recorded now SAYS SO

The whole save crosses in one call, and the card reports what landed and what did not — written, already held, refused, with the reason and the row for each refusal.

Before, it could not. Each row was written on its own in a loop, and a loop reports the run as a success even when every write was rejected. A grid with one bad amount in it looked exactly like a grid that worked.

The tenancy is shown but cannot be typed. Only the amount, the day, the method and the reference are yours to change: an editable tenancy would let a payment be re-pointed at another tenant by editing the row it is sitting in.

The day is on every row, and you can change it

It used to be the clock. Every receipt this screen wrote was stamped with the moment you pressed save, so a Wednesday payment entered on Friday was a Friday payment as far as the rent book was concerned. Nothing looked wrong; the date was simply not the date.

Each row now arrives filled in with today, which is right for the common case, and each row is editable on its own — so a save can hold three payments that arrived on three different days. Clear the day and that row is skipped rather than recorded on a date nobody chose.

Days are YYYY-MM-DD. A day in any other shape is refused, and the count of refusals is on the summary card beside what was written — a row that did not become a receipt is now visible instead of quietly missing.

Paid by now offers the same five words everywhere

This screen used to offer bank, cash, card and autopay while Record rent payment and Import payments both offered cash, autopay, stripe, transfer and other — so two of the three places you can record a payment could not say bank at all. All three now offer the same five.

bank was a second word for transfer. card is stripe when that is how you take cards and other when it is not.

Receipts you already recorded keep the word they were saved with. Nothing rewrites them, so an old row still reads bank; it is a stored value, not a broken one. New receipts use the five above.

The sheet still exists

collection-sheet exports the same list as CSV for anyone who would rather work in a spreadsheet, or hand it to a bookkeeper — import-payments reads it back. This is the same job without the round trip, not a replacement for it.

Amounts must be plain digits — 1200 or 1200.50. 1,200.00 is refused, and so is 1.200,00: those same characters mean twelve hundred in one country and one point two in another, and a rent book that picked one would be wrong about money somewhere.

How it works 25 steps

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

Process (25 steps)
cap clamp
Clamp setting limit between 1 and 200
now_iso date_add
Add 0 seconds to
today date_format
Format as a date
live_read ?
live default
Apply default
live_count count
Count items in live
seeded map
Extract from each item
submitted default
Apply default
submitted_count count
Count items in submitted
has_submission compare
Check if submitted has data
grid_rows ternary
Apply ternary
with_amount filter
Filter by condition
payable filter
Filter by condition
payable_count count
Count items in payable
skipped math
Calculate submitted count minus payable count
has_payable compare
Check if payable has data
payments_csv to_csv
Serialize rows as a CSV string
recorded ?
skip: step.has_payable equal false
ok_count default
Apply default
held_count default
Apply default
refused_count default
Apply default
not_attempted default
Apply default
any_refused compare
Check if refused count is greater than 0
refused to_table
Format results as a data table
skip: step.any_refused equal false
card to_summary
Format results as a summary card
Settings 4 configurable

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

limit setting = 200
method setting = autopay
period setting =
payments setting =

About

Tags

pack:rental-bookreceiptpaymentbatch

Details

25 steps 4 configurable settings recipe_id: collect-rent