Skip to main content
All Docs
FeaturesPurple PepperUpdated April 6, 2026

Action Required Auto-Flagging

Action Required Auto-Flagging

The Action Required system automatically detects overdue tenancy events, flags them for the assigned agent, sends notifications, and clears flags once the issue is resolved — with no manual intervention needed.

How It Works

1. Daily Scan (7 AM UTC)

An Inngest cron job (action-required-scan) runs once per day and performs three operations in order:

  1. Auto-resolve existing flags — Any flag whose underlying condition has been resolved is cleared automatically (see Auto-Resolution below).
  2. Detect overdue move-ins — Tenancies where the start date is in the past and the status is still pending (non-legacy tenancies only).
  3. Detect overdue renewal decisions — Renewals where decision_due_date is in the past and the status is still decision_required or pending. These renewals are also transitioned to action_required in the state machine.

Flags are deduplicated — if a flag already exists for a given resource, no duplicate is created.

2. Notifications

For each new flag, the scanner fans out a notification event handled by action-required-notify. The assigned agent receives:

  • An in-app notification via the platform notification system.
  • An email notification via Resend with a branded HTML template and a direct link to the relevant tenancy.

3. Dashboard Alert Panel

The ActionRequiredAlerts component is rendered at the top of the agent dashboard, above KPI cards. It is only shown when at least one unresolved flag exists.

Overdue Move-In (Red / High Severity)

Displayed when a tenancy's start date has passed but the tenant has not been moved in.

FieldDescription
Property addressThe address of the affected property
Tenant nameThe primary tenant on the tenancy
Due dateThe original tenancy start date
Days overdueCalendar days past the due date
Assigned agentThe agent responsible for the tenancy

Action link: "Confirm Move-In" — links directly to the tenancy detail page.

Overdue Renewal Decision (Amber / Medium Severity)

Displayed when a renewal's decision due date has passed without a confirmed action.

FieldDescription
Property addressThe address of the affected property
Tenant nameThe tenant on the renewal
Decision due dateThe date by which a decision was required
Days overdueCalendar days past the decision due date
Assigned agentThe agent responsible for the renewal

Action link: "Action Renewal" — links to the tenancies list.

4. Manual Dismissal

Every flag in the dashboard panel includes a dismiss button (✕). Clicking it calls dashboard.dismissActionFlag and immediately removes the flag from the panel and updates the portfolio metrics count.

Auto-Resolution

Flags are automatically cleared during the next daily scan without any agent action if:

Flag TypeResolved When
Overdue Move-InTenancy status changes to active
Overdue Renewal DecisionRenewal status progresses to renewal_in_progress, renewal_confirmed, renewed, set_to_end, or ended

Dashboard Metrics

The Outstanding Items section on the agent dashboard includes action required flag counts. The badge variant switches to danger (red) whenever any action-required flags are present, alongside existing triggers for expired compliance or overdue todos.

portfolioMetrics now exposes actionRequired.total, which feeds into the total outstanding count displayed in the dashboard summary.

Database

Flags are persisted in the action_required_flags table:

ColumnDescription
idPrimary key
flagTypeoverdue_move_in or overdue_renewal_decision
resourceIdID of the related tenancy or renewal
assignedAgentAgent user ID
overdueDateThe date the event became overdue
emailSentWhether the Resend notification has been dispatched
resolvedAtTimestamp of auto- or manual resolution (null if open)

A uniqueness constraint on (flagType, resourceId) prevents duplicate open flags for the same resource.

Inngest Functions

Function IDTriggerDescription
action-required-scanCron — daily at 07:00 UTCScans for overdue events, auto-resolves closed flags, creates new flags, fans out notification events
action-required-notifyEvent — one per new flagSends in-app + email notification to the assigned agent

Both functions are registered at /api/inngest.