Background jobs
Three jobs are declared in the application manifest, all on a schedule of every five minutes, all served under /api/jobs/. The platform owns the clock: it POSTs each job's signed route when a slot comes due, and this module never keeps a schedule of its own. Every run — scheduled or hand-run — writes one row with its outcome, its item counts, its duration and any error.
Every sweep here is idempotent, and each job states exactly why on its own card. A second run over work already done therefore shows honestly as skipped rather than having to be inferred.
Not polling: nothing on screen can change status any more. Showing state as of .
Standing order execution
standing-orders · /api/jobs/standing-orders · every 5 minutes (*/5 * * * *)
Selects active standing orders whose next due date has arrived, puts each through the same validation, sanctions-screening, funds and limit checks as a one-off payment, posts a balanced debit/credit pair for the ones that pass, writes exactly one execution record per due date and advances the schedule. An unfunded due date is recorded as a failure with a customer notification and retried next cycle; after the configured number of consecutive failures the order is paused and a case is opened on the exceptions desk.
- Last run
- 2026-08-19 06:25:01 UTCplatform schedule · attempt 1
- Outcome
- succeededtook 9 ms
- Runs recorded
- 30
0 failed
- Waiting for the next run
- 0
standing orders
Item counts of the last run
- 0 examined
- 0 executed
- 0 failed
- 0 held
- 0 skipped
- 0 notified
- 0 paused
- 0 cases
- USD 0.00 paid
No standing order was due for execution; nothing was posted.
Run it now (for testing)
Optional: the platform triggers this job on its own schedule whether or not anybody presses this. One due date can be attempted exactly once: StandingOrderExecution is UNIQUE on (order, due date) and is written in the same transaction as the money, with the payment's deterministic UNIQUE reference as a second guard. A re-run reports skipped rather than paying again.
No standing order is due, so the next run will pay nothing.
Batch settlement & returns (SIMULATED scheme)Simulated scheme
batch-settlement · /api/jobs/batch-settlement · every 5 minutes (*/5 * * * *)
Finds posted batch entries whose configured settlement lag has elapsed and gives each one exactly one ending: SETTLED — the suspense balance moves to the scheme-clearing position with a balanced pair — or RETURNED, where the original movement is reversed by an equal-and-opposite compensating pair in a NEW journal (the original postings are never edited) and a case is opened on the exceptions desk. The same run settles approved high-value wires through the same engine.
- Last run
- 2026-08-19 06:25:01 UTCplatform schedule · attempt 1
- Outcome
- succeededtook 24 ms
- Runs recorded
- 30
0 failed
- Waiting for the next run
- 0
pending items
Item counts of the last run
- 0 examined
- 0 settled
- 0 returned
- 0 skipped
- 0 cases
- USD 0.00 settled
No batch entry was due for simulated settlement; nothing was posted. No approved high-value wire was due for simulated settlement.
Run it now (for testing)
Optional: the platform triggers this job on its own schedule whether or not anybody presses this. Each entry is resolved under a payment row lock, and a UNIQUE SchemeSettlement row — unique on both entry and payment — is written in the same transaction as the postings, so the row exists if and only if the money moved. A re-run finds them resolved and skips.
Nothing has reached its settlement lag, so the next run will settle nothing.
Period-limit reset
period-limit-reset · /api/jobs/period-limit-reset · every 5 minutes (*/5 * * * *)
Rolls over every customer whose daily or monthly payment-limit period has ENDED: the period's accounting — what was used, over how many payments, against which cap — is archived to the period history for reporting, and the live counter is removed so the new period starts at zero. A period that is still open is never touched, so spend booked today is never discarded.
- Last run
- 2026-08-19 06:25:01 UTCplatform schedule · attempt 1
- Outcome
- succeededtook 7 ms
- Runs recorded
- 30
0 failed
- Waiting for the next run
- 0
elapsed periods
Item counts of the last run
- 0 examined
- 0 rolled over
- 0 merged
- 0 skipped
- USD 0.00 carried to history
No customer's daily or monthly period had ended, so no limit counter was reset. Every live period keeps the spend already booked against it.
Run it now (for testing)
Optional: the platform triggers this job on its own schedule whether or not anybody presses this. Only counters whose period end has already passed are ever in the work list, so a live period is structurally invisible to the job. Each period is closed under a lock on the customer row, and the history row is UNIQUE on (customer, scope, period): a second run in the same period finds nothing left to close and reports it, and a counter that accrued after an archive is merged into that archive rather than overwriting it.
No customer's daily or monthly period has ended, so the next run will roll nothing over — which is the honest outcome, and it is still recorded.
Recent runs across every job
90 runs recorded in total
| Started (UTC) | Job | Trigger | Status | Duration | Counts | Outcome |
|---|---|---|---|---|---|---|
| 2026-08-19 06:25:01 UTCslot 2026-08-19 06:25:00 UTC · attempt 1 | Period-limit resetperiod-limit-reset | platform schedule | succeeded | 7 ms | 0 examined · 0 rolled over · 0 merged · 0 skippedUSD 0.00 carried to history | No customer's daily or monthly period had ended, so no limit counter was reset. Every live period keeps the spend already booked against it. |
| 2026-08-19 06:25:01 UTCslot 2026-08-19 06:25:00 UTC · attempt 1 | Standing order executionstanding-orders | platform schedule | succeeded | 9 ms | 0 examined · 0 executed · 0 failed · 0 held · 0 skipped · 0 notified · 0 paused · 0 casesUSD 0.00 paid | No standing order was due for execution; nothing was posted. |
| 2026-08-19 06:25:01 UTCslot 2026-08-19 06:25:00 UTC · attempt 1 | Batch settlement & returns (SIMULATED scheme)batch-settlement | platform schedule | succeeded | 24 ms | 0 examined · 0 settled · 0 returned · 0 skipped · 0 casesUSD 0.00 settled | No batch entry was due for simulated settlement; nothing was posted. No approved high-value wire was due for simulated settlement. |
| 2026-08-19 06:20:59 UTCslot 2026-08-19 06:20:00 UTC · attempt 1 | Period-limit resetperiod-limit-reset | platform schedule | succeeded | 7 ms | 0 examined · 0 rolled over · 0 merged · 0 skippedUSD 0.00 carried to history | No customer's daily or monthly period had ended, so no limit counter was reset. Every live period keeps the spend already booked against it. |
| 2026-08-19 06:20:59 UTCslot 2026-08-19 06:20:00 UTC · attempt 1 | Standing order executionstanding-orders | platform schedule | succeeded | 11 ms | 0 examined · 0 executed · 0 failed · 0 held · 0 skipped · 0 notified · 0 paused · 0 casesUSD 0.00 paid | No standing order was due for execution; nothing was posted. |
| 2026-08-19 06:20:59 UTCslot 2026-08-19 06:20:00 UTC · attempt 1 | Batch settlement & returns (SIMULATED scheme)batch-settlement | platform schedule | succeeded | 17 ms | 0 examined · 0 settled · 0 returned · 0 skipped · 0 casesUSD 0.00 settled | No batch entry was due for simulated settlement; nothing was posted. No approved high-value wire was due for simulated settlement. |
| 2026-08-19 06:15:48 UTCslot 2026-08-19 06:15:00 UTC · attempt 1 | Period-limit resetperiod-limit-reset | platform schedule | succeeded | 6 ms | 0 examined · 0 rolled over · 0 merged · 0 skippedUSD 0.00 carried to history | No customer's daily or monthly period had ended, so no limit counter was reset. Every live period keeps the spend already booked against it. |
| 2026-08-19 06:15:48 UTCslot 2026-08-19 06:15:00 UTC · attempt 1 | Standing order executionstanding-orders | platform schedule | succeeded | 8 ms | 0 examined · 0 executed · 0 failed · 0 held · 0 skipped · 0 notified · 0 paused · 0 casesUSD 0.00 paid | No standing order was due for execution; nothing was posted. |
| 2026-08-19 06:15:48 UTCslot 2026-08-19 06:15:00 UTC · attempt 1 | Batch settlement & returns (SIMULATED scheme)batch-settlement | platform schedule | succeeded | 11 ms | 0 examined · 0 settled · 0 returned · 0 skipped · 0 casesUSD 0.00 settled | No batch entry was due for simulated settlement; nothing was posted. No approved high-value wire was due for simulated settlement. |
| 2026-08-19 06:10:57 UTCslot 2026-08-19 06:10:00 UTC · attempt 1 | Period-limit resetperiod-limit-reset | platform schedule | succeeded | 6 ms | 0 examined · 0 rolled over · 0 merged · 0 skippedUSD 0.00 carried to history | No customer's daily or monthly period had ended, so no limit counter was reset. Every live period keeps the spend already booked against it. |
| 2026-08-19 06:10:57 UTCslot 2026-08-19 06:10:00 UTC · attempt 1 | Standing order executionstanding-orders | platform schedule | succeeded | 11 ms | 0 examined · 0 executed · 0 failed · 0 held · 0 skipped · 0 notified · 0 paused · 0 casesUSD 0.00 paid | No standing order was due for execution; nothing was posted. |
| 2026-08-19 06:10:57 UTCslot 2026-08-19 06:10:00 UTC · attempt 1 | Batch settlement & returns (SIMULATED scheme)batch-settlement | platform schedule | succeeded | 71 ms | 0 examined · 0 settled · 0 returned · 0 skipped · 0 casesUSD 0.00 settled | No batch entry was due for simulated settlement; nothing was posted. No approved high-value wire was due for simulated settlement. |
| 2026-08-19 06:05:48 UTCslot 2026-08-19 06:05:00 UTC · attempt 1 | Period-limit resetperiod-limit-reset | platform schedule | succeeded | 5 ms | 0 examined · 0 rolled over · 0 merged · 0 skippedUSD 0.00 carried to history | No customer's daily or monthly period had ended, so no limit counter was reset. Every live period keeps the spend already booked against it. |
| 2026-08-19 06:05:48 UTCslot 2026-08-19 06:05:00 UTC · attempt 1 | Standing order executionstanding-orders | platform schedule | succeeded | 8 ms | 0 examined · 0 executed · 0 failed · 0 held · 0 skipped · 0 notified · 0 paused · 0 casesUSD 0.00 paid | No standing order was due for execution; nothing was posted. |
| 2026-08-19 06:05:48 UTCslot 2026-08-19 06:05:00 UTC · attempt 1 | Batch settlement & returns (SIMULATED scheme)batch-settlement | platform schedule | succeeded | 9 ms | 0 examined · 0 settled · 0 returned · 0 skipped · 0 casesUSD 0.00 settled | No batch entry was due for simulated settlement; nothing was posted. No approved high-value wire was due for simulated settlement. |
Sample book disclosure: the customer accounts, staff users and sanctions watchlist in this environment are seeded demonstration data created by this module — there is no connection to a real core banking system, payment scheme or sanctions feed. Batch (ACH-style) clearing and high-value wire settlement both run through this module's own SIMULATED settlement engine, never a real scheme or wire network.