@model AiUsageReportViewModel @{ ViewData["Title"] = "AI Usage Report"; ViewData["PageIcon"] = "bi-robot"; string FeatureIcon(string? f) => f switch { "PhotoQuote" => "bi-camera", "HelpChat" => "bi-chat-dots", "ReceiptScan" => "bi-receipt", "AccountSuggest" => "bi-tags", "ArFollowUp" => "bi-envelope", "FinancialSummary" => "bi-bar-chart", "CashFlowForecast" => "bi-graph-up", "AnomalyDetection" => "bi-exclamation-triangle", _ => "bi-cpu" }; }
Observability

AI Usage Report

Anthropic API call volume and photo uploads per tenant. Last 30 days unless noted.

@Model.TotalCallsLast30Days.ToString("N0")
AI Calls — Last 30 Days
@Model.TotalCallsToday.ToString("N0")
AI Calls Today
@Model.TotalPhotosUploaded.ToString("N0")
Total AI Photos Uploaded
@Model.CompaniesActiveToday
Companies Active Today
Usage Tier (last 30 days): Inactive — 0 calls Light — 1–10 Regular — 11–50 Heavy — 51–200 Power User — 200+
Per-Company Breakdown @Model.Rows.Count companies total
@foreach (var row in Model.Rows) {
@row.CompanyName @if (!row.IsActive) { Inactive }
@row.Plan
Today @if (row.Today > 0) { @row.Today.ToString("N0") } else { }
30 Days @if (row.Last30Days > 0) { @row.Last30Days.ToString("N0") } else { }
All Time @if (row.AllTime > 0) { @row.AllTime.ToString("N0") } else { }
@if (row.TopFeature != null) {
Top Feature @row.FeatureDisplayName(row.TopFeature)
}
Tier @row.UsageTier
} @if (!Model.Rows.Any()) {
No AI usage logged yet.
}
@foreach (var row in Model.Rows) { } @if (!Model.Rows.Any()) { }
Company Plan Today 7 Days 30 Days All Time Photos Top Feature (30d) Tier
@row.CompanyName @if (!row.IsActive) { Inactive } @row.Plan @(row.Today > 0 ? row.Today.ToString("N0") : "—") @(row.Last7Days > 0 ? row.Last7Days.ToString("N0") : "—") @(row.Last30Days > 0 ? row.Last30Days.ToString("N0") : "—") @(row.AllTime > 0 ? row.AllTime.ToString("N0") : "—") @if (row.PhotoCount > 0) { @row.PhotoCount.ToString("N0") } else { } @if (row.TopFeature != null) { kv.Value).Select(kv => $"{row.FeatureDisplayName(kv.Key)}: {kv.Value}"))"> @row.FeatureDisplayName(row.TopFeature) @if (row.FeatureBreakdown.Count > 1) { +@(row.FeatureBreakdown.Count - 1) more } } else { } @row.UsageTier
No AI usage logged yet. Usage data will appear here once tenants start using AI features.