FeaturesPurple PepperUpdated April 7, 2026
End Tenancy Workflow
End Tenancy Workflow
Agents can schedule a tenancy to end on a specific date directly from the tenancy overview screen. The system handles status transitions automatically, creates close-out tasks, and surfaces the tenancy through the renewals dashboard pipeline.
Prerequisites
- The tenancy must be in Active or Expiring status.
- The selected end date must be today or in the future.
How to End a Tenancy
- Open the tenancy overview for the relevant tenancy.
- Click the End Tenancy button.
- In the dialog that opens:
- Select an End Date (defaults to the current term end date, or 30 days from today).
- Choose a Reason from the dropdown (see options below).
- Optionally add Notes (up to 2,000 characters).
- Read the "What happens next" summary in the dialog.
- Check the confirmation checkbox.
- Click End Tenancy Now (if today) or Schedule End (if a future date).
End Reason Options
| Value | Label |
|---|---|
tenant_notice | Tenant gave notice |
landlord_notice | Landlord gave notice |
mutual_agreement | Mutual agreement |
section_21 | Section 21 (no-fault eviction) |
section_8 | Section 8 (grounds for possession) |
break_clause | Break clause exercised |
end_of_fixed_term | End of fixed term (not renewing) |
other | Other |
What Happens After Submission
Immediate (on submit)
- Tenancy status is set to
set_to_end(or immediatelyendedif the end date is today). - The active/periodic tenancy term is updated with the end date and
endingstatus. - A renewal record of type
end_tenancyis created atset_to_endstatus and appears in the renewals dashboard. - 4 close-out reminder todos are created:
- Deposit return
- Check-out inspection
- Compliance review
- Landlord notification
- A
tenancy.end_initiatedaudit event is recorded. - A
tenancy/end-initiatedInngest event is emitted for downstream processing.
Tenancy Overview Indicators
- The status badge displays in orange for
set_to_endtenancies. - An alert banner appears on the tenancy overview showing the scheduled end date.
- The term detail view shows the term type as
ending.
Automatic Transition (daily cron)
A daily background job (end-tenancy-scan) runs at 06:00 UTC and:
- Finds all
set_to_endtenancies whose end date has passed. - Transitions each matching tenancy to
ended. - Transitions all linked tenancy terms to
ended. - Transitions linked renewal records from
set_to_endtoended. - Logs an audit event for each transition.
Note: If you set the end date to today, the tenancy is transitioned to
endedimmediately on submission — the cron job is not needed.
Renewals Dashboard Integration
| Column | When visible |
|---|---|
| Set to End | From submission until the end date passes |
| Ended (30-day) | For 30 days after the end date, once transitioned by the cron |
Status Transition Reference
active / expiring
│
▼ (endTenancy mutation)
set_to_end ──────────────────────────────────┐
│ │ (if end date = today)
│ (daily cron at 06:00 UTC, │
│ after end date passes) │
▼ ▼
ended ended
API Reference
tenancy.endTenancy (tRPC Mutation)
Org-scoped mutation. Requires an authenticated session.
Input
| Field | Type | Required | Description |
|---|---|---|---|
tenancyId | string | ✓ | ID of the tenancy to end |
endDate | string (YYYY-MM-DD) | ✓ | The date the tenancy should end (today or future) |
reason | EndReason | ✓ | One of the 8 reason values listed above |
notes | string | — | Optional free-text notes (max 2,000 chars) |
Validation errors
- Tenancy not in
activeorexpiringstatus → mutation rejected. - End date is in the past → mutation rejected.
Side effects on success
- Tenancy status updated.
- Active tenancy term end date and status updated.
- Renewal record created (
end_tenancytype). - 4 close-out todos created.
- Audit event
tenancy.end_initiatedemitted. - Inngest event
tenancy/end-initiatedfired.
The following tRPC query caches are invalidated on success:
tenancy.getByIdtenancy.listTermstenancy.getRenewalstenancy.getTodostenancy.overviewCountsrenewals.pipelineSummary