Plans, prices, and executes the renewal cycle for leases in the renewal-offer window. Segments expiring leases into pricing tiers, computes per-tier offers using market_to_lease_gap and prior effective rent, checks every offer against policy bands, and produces a draft communication set with all legal-notice templates flagged for review. Guards against retention through concession creep. Runs monthly at the property and per-tagged trigger when a lease enters its renewal-offer window.
Turn the expiring-lease population into a priced renewal plan that (1) offers every resident a renewal inside the overlay's lead-time window, (2) prices each offer using market_to_lease_gap and the resident's prior effective rent, (3) routes any offer outside policy for approval before send, (4) draft-produces resident communications for review, and (5) tracks acceptance through to executed renewal with a loop back to retention-NPV logic when refusals cluster.
end_date within renewal_offer_lead_time and no renewal_offered event; renewal_offer_rate below target band; renewal_acceptance_rate trend declining over trailing 90 days.| Input | Type | Required | Notes |
|---|---|---|---|
| Expiring-lease list | table | required | lease_id, end_date, current effective rent, unit_type, resident tenure |
| Rent roll snapshot | table | required | for loss_to_lease, market_to_lease_gap |
| Market rent reference | csv | required | by unit_type and submarket |
| Concession policy overlay | yaml | required | ceiling and cases allowed |
| Renewal uplift bands | csv | required | overlay-driven per segment / market |
| Resident ledger (T12) | table | optional | payment history informing retention-NPV case |
| Turn cost reference | csv | optional | per-unit turn cost for refusal-case NPV |
| Jurisdiction notice rules | yaml | optional | flags whether renewal notice is statutory |
| Output | Type | Shape |
|---|---|---|
| Renewal segmentation table | table | lease_id, tier, prior effective rent, market rent, proposed offer, band, gap |
| Renewal strategy memo | memo | narrative with blended uplift, expected acceptance, budget impact |
| Draft resident communication set | email_draft | per-lease letter templates, legal_review_required where statutory |
| Approval request bundle | list | any offer outside policy band |
| Acceptance tracker | checklist | follow-up cadence, due dates |
Asset_class, segment, form_factor, lifecycle_stage, management_mode, market, role. The workflow refuses to price without a market rent reference; if absent, routes to workflows/market_rent_refresh first.
end_date within the overlay's renewal_offer_lead_time. Exclude transfers (same household, new unit — handled separately). Annotate residents with tenure, payment record flag (from ledger if provided), and unit turn scope tag (classic vs. renovated).reference/normalized/market_rents__{market}_mf.csv with submarket and unit_type keys. Compute market_to_lease_gap per lease and the property's weighted loss_to_lease.market_to_lease_gap). Default offer: flat or overlay-defined decrease to retain; case-by-case concession review only.approval_request row 13. Any offer with a concession exceeds policy also requires row 13. Both open automatically; the workflow does not send.renewal_acceptance_rate by tier using overlay bands and the property's trailing 90-day baseline. Express downside: if Tier B refusal rate rises X points, expected turnover_rate, average_days_vacant, and blended_lease_trade_out shift; show the sensitivity.renewal_offer_rate, renewal_acceptance_rate, rent_growth_renewal, renewal_rent_delta_dollars, blended_lease_trade_out, market_to_lease_gap, loss_to_lease, concession_rate, turnover_rate, average_days_vacant.
reference/normalized/market_rents__{market}_mf.csvreference/normalized/concession_benchmarks__{market}_mf.csvreference/derived/role_kpi_targets.csvreference/derived/renewal_uplift_bands__middle_market.csvreference/normalized/approval_threshold_defaults.csvoverlays/segments/middle_market/service_standards.mdapproval_request row 13.approval_request row 13.approval_request row 1.approval_request row 3.workflows/market_rent_refresh before the workflow runs.legal_review_required banner mandatory in jurisdictions that treat renewal notice as notice.blended_lease_trade_out. Fix: report acceptance and trade-out together; tier breakouts show the trade-off.workflows/move_out_administration instead.Summary. 28 expirations segmented A / B / C / D. Weighted market_to_lease_gap at property: within band. Expected renewal_acceptance_rate consistent with trailing 90-day baseline.
Segmentation.
Approvals. No Tier B / C offers outside band. Two Tier A cases carry an overlay-permitted minor decrease; within policy. Zero approval_request row 13 opened.
Communications. 28 resident letters drafted with draft_for_review; 0 marked legal_review_required (jurisdiction overlay: Charlotte does not treat renewal notice as statutory). Portal-message variant produced for each.
Sensitivity. If Tier B acceptance falls 5 points vs. baseline, blended_lease_trade_out softens and expected incremental vacancy drives turn cost and lost rent per the reference library; memo shows the dollar impact.
Confidence banner. market_rents__charlotte_mf@as_of=2026-03-31, status=sample. renewal_uplift_bands__middle_market@as_of=2026-03-31, status=starter.
draft_for_review banner. Mark legal_review_required on any letter whose jurisdiction treats renewal notice (or rent-increase notice) as statutory. Include a portal-message variant and an email variant.approval_request row 13 into a single approval packet for the regional_manager, with per-lease rationale and sensitivity numbers. Executor does not send until approvals return approved.as_of_date and status tags. Note that jurisdiction-specific rules are overlay-driven.