TenantAtlas/specs/058-tenant-ui-polish/data-model.md
2026-01-21 08:12:46 +01:00

2.2 KiB

Data Model — Tenant UI Polish

This feature is read-only. It introduces no schema changes.

Entities

Tenant

  • Role: scope boundary for all queries.
  • Source: Tenant::current() (Filament tenancy).

OperationRun

  • Role: operations feed, KPIs, and canonical “View run” destinations.
  • Key fields used (existing):
    • tenant_id
    • type
    • status (queued|running|completed)
    • outcome (succeeded|partial|failed|...)
    • created_at, started_at, completed_at
    • summary_counts, failure_summary (JSONB)

Derived values:

  • Active: status IN ('queued','running')
  • Terminal: status = 'completed'
  • Avg duration (7 days): only terminal runs with started_at and completed_at.

InventoryItem

  • Role: inventory totals and coverage chips.
  • Key fields used (existing, inferred from resources):
    • tenant_id
    • coverage-related flags / fields used to categorize: Restorable, Partial, Risk, Dependencies

Derived values:

  • Total items
  • Coverage % = restorable / total (if total > 0)
  • Chip counts: Restorable, Partial, Risk, Dependencies

InventorySyncRun

  • Role: “Last Inventory Sync” and “Sync Runs” list.
  • Key fields used:
    • tenant_id
    • status + timestamps
    • any “selection_hash / selection payload” metadata used for display

Finding (Drift Finding)

  • Role: drift KPIs and “Needs Attention”.
  • Key fields used (existing migration):
    • tenant_id
    • severity (enum-like string)
    • status (open/closed)
    • timestamps
    • scope_key for grouping

Derived values:

  • Open findings by severity
  • Staleness: last drift scan older than 7 days

KPI Queries (read-only)

Dashboard

  • Drift KPIs: counts of open findings by severity + stale drift indicator.
  • Operations health: counts of active runs + failed/partial recent.
  • Recent lists: latest 10 findings + latest 10 operation runs.

Inventory hub

  • Total items
  • Coverage % (restorable/total)
  • Last inventory sync (status + timestamp)
  • Active operations: (all active runs) + (inventory.sync active runs)

Operations index

  • Total runs (30d)
  • Active runs (queued + running)
  • Failed/partial (7d)
  • Avg duration (7d, terminal runs only)

All queries must be tenant-scoped.