Appearance
Tenant screening
Screening a tenant for a letting: the applicant answers one flow with income, employment or accounts and two referees, the same four rules apply to everyone, and borderline applicants go to the lettings team. Pack: examples/policies/tenant-screening/.
A pattern for expressing a property & rentals policy, not compliance guidance: the thresholds, lists and fields are placeholders chosen to make the example run; a real policy comes from the business's own rules. It calls no app, so it runs in an empty workspace as it is.
The decision it automates
Whether to accept the applicant, refer them to the lettings team, or decline, when the application is submitted.
Data expected
- The applicant as a subject (kind
user) withidentityVerified, written by your platform from its identity check. - The flow's answers under
submission:rent,monthlyIncome,employment,employerNameoraccounts,referee1Emailandreferee2Email.
Steps and rules
| Step | Type | Why |
|---|---|---|
collect | wait_for_collection | The tenant-application flow; self-employed applicants are asked for accounts instead of an employer. |
rules | evaluate_rules | The tenant-screening rule set under max_severity. |
route | branch | rules.outcome == manual_review opens a case. |
review | create_case | lettings_review, 48-hour SLA. |
decide | emit_decision | From the rules, or the reviewer's decision. |
The rule set tenant-screening (useCase: onboarding) uses max_severity: a failed block rule rejects, a failed warn rule sends the run to review, and the weights add up to the score.
| Rule | Type | Severity, weight | Fails when |
|---|---|---|---|
tenant_identity_verified | comparison | block, 100 | subject.identityVerified is not true |
tenant_rent_ceiling | expression | block, 100 | rent is above 60% of monthlyIncome |
tenant_rent_to_income | expression | warn, 40 | rent is above 40% of monthlyIncome |
tenant_two_referees | comparison | warn, 20 | no second referee was given |
What a reviewer sees
A lettings_review case with the answers and each criterion met or missed, so the landlord can be told why.
How to adapt it
Take the rent from your listing instead of the form, add your referencing provider as an asynchronous app (an app you build) whose webhook resumes the run when references return, and add a guarantor step for applicants above the threshold.
Run it
bash
pnpm policy:import examples/policies/tenant-screening --publishThe fixture applies for a rent of 1 850 on an income of 4 200 (44%): the rent-to-income rule fails, a lettings_review case opens, the check approves it and the run completes with a manual approve.