/accounting/recurring
📷 Screenshot: Recurring Transactions page with stats cards, status tabs and the “New Recurring” button — to be added.
What a recurring transaction can generate
A recurring transaction targets exactly one entity type:
Each generated document is a normal expense / invoice / journal entry and behaves
exactly like one you created by hand from that point on.
Access (multi-business note)
The Recurring Transactions area is available to users with accounting read access (accounting:read) in the active business. Recurring transactions are
scoped to the accounting book of the business that is active when you create
them; switching business switches which schedules you see.
The lifecycle of a schedule
Every recurring transaction has a status:
The page header shows count cards for Total, Active, Paused and
Completed, and status tabs to filter the list. You can also filter by entity
type (Expense / Invoice / Journal Entry) and search by name.
Creating a recurring transaction
-
Go to
/accounting/recurringand click New Recurring. -
Fill in the schedule header:
-
Fill in the Template Data — the details of the document to generate. The
fields depend on the type you chose:
Expense
- Vendor (contact), Amount (required), Category, Description (required), Currency, and Notes.
- Customer (required), Due Days (how many days after generation the invoice is due), and one or more Line Items — each with a description, quantity and unit price. Optional Terms and Notes. The form shows a running estimated total.
- Memo (required) and at least two Lines, each with an account and a debit or credit amount. A running Dr/Cr total is shown. (Remember a journal entry must balance — see Journal Entries.)
- Click Create Recurring. The schedule starts Active, and its first next occurrence is calculated from the start date and frequency.
📷 Screenshot: New Recurring Transaction modal with the Journal Entry template fields expanded — to be added.
How and when documents get generated
A background scheduler runs every 5 minutes. On each run it looks for schedules that are due (active, with a next occurrence at or before now) and generates the next document for each. You don’t have to do anything for this to happen. For each successful generation the system:- creates the target document (and, for a journal entry, posts it);
- advances the schedule’s next occurrence by the frequency;
- increments the occurrence count and stamps last generated;
- writes a history record of the occurrence.
Generate now (manually)
To run a cycle immediately rather than waiting for the scheduler, use Generate now (the bolt icon) on an Active schedule. This produces the next document on demand. It refuses to run if the schedule is completed or cancelled, if the maximum occurrences has already been reached, or if the end date has passed.Managing a schedule
Row actions (and the same actions on the detail page) let you control a schedule:
Click a row to open the schedule’s detail page, which shows its settings and
the full occurrence history (each generated document, when it was generated,
the slot it filled, the amount, and whether it succeeded or failed).
📷 Screenshot: Recurring transaction detail page showing the occurrence history table — to be added.
When a schedule finishes
If you set a maximum occurrences, the schedule automatically becomes Completed on the generation that reaches the cap, and its next occurrence is cleared so it never runs again. If you set an end date, generation simply stops once that date has passed.Behind the scenes
- Expense and Invoice schedules create a draft/open document of that type, which then follows its own normal posting and payment flow.
- Journal Entry schedules create and post the entry in one move, so the ledger is updated immediately. The entry must balance — if the template lines don’t, that occurrence is recorded as failed.
Known gaps / things to verify
These are noted for the team and should be confirmed before this page is considered final for end users:- Detail-link route mismatch. From the list, clicking a row navigates to
/accounting/recurring-transactions/:id, but the registered route for the detail page is/accounting/recurring/:id. The row click may land on a not-found page. The list and detail pages otherwise live under/accounting/recurring. - Expense template — account fields appear ignored. The “New Recurring” form collects an Expense Account and a Payment Account for expense schedules, but the back-end expense generator only uses amount, description, category, contact, currency and notes — it does not appear to pass those two account selections through. Confirm whether these fields actually influence the generated expense before documenting them as effective.
- No dedicated RBAC slug. Creating/pausing/cancelling/generating recurring
transactions is gated only by general accounting workspace access
(
accounting:readon the route), not by a finer-grained permission. Confirm this is intended.
Related
- Journal Entries — the entries that “Journal Entry” schedules generate and post.
- Journal Entry Templates — reusable line layouts for one-off (manual) journal entries.