Back to index "Why did my contract stop generating?" There are five reasons, and the badge on the Scheduled tab tells you which one. Go look at it first. Badge Reason Fix Approval expired The...
Last updated
There are five reasons, and the badge on the Scheduled tab tells you which one. Go look at it first.
| Badge | Reason | Fix |
|---|---|---|
| Approval expired | The approval lapsed. The term ended, or an open-ended contract passed its 12-month window. | Extend term or Re-submit. See Renewing an expired contract. |
| Paused · N failed runs | Generation failed 3 or more times in a row and the system auto-deactivated it. The approval is still fine. | Fix the underlying cause, then press Resume. |
| Re-approval required | A re-approval is in flight (an amendment, a contract-type change, or a renewal). | Nothing. Wait for the chain. Generation resumes automatically when it clears. |
| Renewal rejected / Approval rejected | A re-approval was voted down. | Revise something real, then re-submit. |
| It is just paused (a plain Pause) | Somebody manually paused it. | Press Resume. |
If none of those apply and it still is not firing, check the Next run date on the row. It might simply not be due yet.
It means the approval that authorized this contract has run out, and no more expenses will post until you get a new one.
It does not mean the contract is broken, deleted, or wrong. It means the clock ran out on the permission.
Two ways it happens:
Full detail: Contract approval and how it expires.
Correct. Resume does not work on an expired approval, and that is why the Resume button is not even offered on an expired row.
Resume fixes a broken generation. It does not fix a lapsed approval. Only a fresh approval reactivates an expired contract. Use Extend term or Re-submit.
These two states look similar in a list and are completely different underneath, which is exactly why they have different colours (amber vs red) and different buttons.
There is already a template with that name, and the system will not overwrite it. The overwrite path has been removed entirely, because it used to let people change a committed price with nobody approving it.
You have exactly two options, and both are offered on the screen:
The template already has a live recurring contract. You cannot stack a second one on it.
Use the Open existing contract link to go look at the one that exists. If you genuinely need to replace it, delete the existing contract first (a soft delete that leaves every previously generated expense untouched), then create the new one.
Full detail: Saving an expense as a template.
Because a template can have exactly one live contract, and this is enforced.
Why the rule exists: the approval, the expiry clock, the amendment logic, and the committed-total calculation all assume one contract per template. Two contracts on one template would mean two competing approvals, two expiry clocks, and no honest answer to "what have we committed to?".
If you need the same vendor and amount on two different cadences, that is genuinely two different things. Make two templates.
Several possibilities:
Somebody changed the price on a FIXED contract. That is an amendment, and an amendment re-runs the full approval chain and the board if the new amount is at or above the board floor. This is the feature working. See Amending a contract's amount.
Somebody flipped the contract type. Flipping FIXED to VARIABLE or back re-arms the full approval in both directions.
The board decision it was tagged to is no longer approved. If the covering decision was re-opened, deferred, or rejected, the coverage is stale and the expense routes to the board normally on its next action. Look for the Coverage stale chip and the warning banner.
The amount crossed the board threshold. A VARIABLE contract's occurrence at or above the board floor routes to the board. That is the guardrail working, not a bug. If the expense genuinely never needs a board vote (a utility bill, for instance) see Bypassing board voting.
An amendment cleared its coverage. Changing the amount on a covered expense always drops the board-decision tag, because the board approved a specific number and you changed it.
Two legitimate reasons, both audited:
If neither applies and it still did not escalate, the amount is below your board escalation floor.
Be aware of what a rename does and does not do.
Renaming a template does not create a new template. It renames the existing one. The contract on it, the approval, the history, and everything else stay attached.
But a rename frees up the old name. Once "Elevator Maintenance" is renamed to "Elevator Maintenance 2026", the name "Elevator Maintenance" is available again. A subsequent Save as Template with that name will now succeed and create a new, separate template, where it would previously have been blocked as a collision.
That is not a bug, but it is a way to accidentally end up with two templates that look like the same thing. Before you rename, check the Scheduled tab to make sure you know which contract is attached to which template.
Nothing is overwritten by any of this. The worst case is a duplicate, not a loss.
Because there is no honest number.
Ongoing appears when the contract is open-ended (no end date, so there is no finite count of occurrences) or when it is VARIABLE (the amount moves, so multiplying it by anything would be fiction).
The system will not print "$0.00" and it will not invent a precise-looking figure that is not true. It says "Ongoing", which is exactly what it is.
Remember that an open-ended contract's approval renews every 12 months, so "ongoing" is bounded: somebody has to say yes again next year.
That is a VARIABLE contract. The ~ means "approximately": this is the current template amount, not a committed price. It is expected to move.
The expiry notice goes to everyone with permission to manage expenses at that property who is also an active member of that property. It is role-based, not per-contract: there is no "owner" of a recurring contract.
If you should not be receiving it, your expense-management permission at that property is what needs adjusting, not the email.
You will see a message saying so:
That schedule is no longer active, so it is not listed here.
or
That schedule could not be found for this property. It may have been removed.
Somebody deleted the contract between the email being sent and you clicking the link. Nothing is wrong. If it should still exist, re-create it from the template.
No, and this is deliberate.
Expenses that already posted, and board escalations that were already legitimately skipped, are not retroactively unwound when the underlying decision changes. They were correct at the time they happened.
What does happen is that the next evaluation uses the current facts. A revoked board decision stops covering the expense immediately going forward. An expired approval stops generation immediately going forward. The system is strict about the future and honest about the past.
No. Board members can view recurring contracts, and they see a Read-only banner saying so. They cannot create them, cannot edit them, and cannot set or clear a board-decision coverage tag.
Why: a board member being able to grant themselves a board-skip is a separation-of-duties problem. Board members vote on contracts; they do not author them.
No. It stays as Renewal rejected, and it stays paused.
This is deliberate. If a rejected renewal quietly fell back to "expired", it would look identical to a contract nobody had touched yet, and the fact that somebody actively said no would be lost.
Open it. The editor shows you who rejected it, when, and the reason if one was recorded (a board vote records no free-text reason, so on a board rejection there simply is no reason section, rather than a blank one). Revise something real, then re-submit.
They are both a re-approval that got voted down. The difference is what was being re-approved:
The fix is the same (Revise, then re-submit), but knowing which one you are looking at tells you what to revise.
Auto-post for anything where the contract is the approval. You approved the contract, so you do not want to click approve on twelve identical monthly expenses.
Draft for review for anything where each instance needs a human look, for example where the invoice has to be matched to a receipt before it posts.
Auto-post does not mean unapproved. The contract still goes through full approval. Auto-post means the occurrences under an already-approved contract post without re-entering the chain. The instant the approval lapses or the price changes, that stops.
Correct, and intentional. Resume computes the next run forward from today. It does not go back and create the occurrences that did not fire while the contract was paused or expired.
If you need those months, enter them as one-off expenses. Silently backfilling months of expenses onto the books is a far worse outcome than making you do it on purpose.
Every governance action in this feature is recorded with an actor and a timestamp: who created the contract, who amended it, who approved or rejected it, when it expired, who turned a board bypass on, every vote it skipped, every board decision it was tagged to, and every board escalation that was skipped and which decision authorized it.
If the behaviour you are seeing does not match this article, the audit trail will tell you what actually happened. Ask your URBI contact and reference the contract by name.