Report Methodology¶
This document defines every calculated figure so managers can defend the numbers. The same definitions are embedded in the application (Settings → Scoring, user drill-down) and in every export (Methodology section / "Scoring Methodology" worksheet).
1. Data model¶
All usage is stored as daily metric values per user (or per organization) per product, exactly as delivered by the official sources:
- Claude Enterprise Analytics API (per-user activity, summaries, skills, usage & cost) — daily UTC snapshots
- Claude Code Analytics Admin API — daily UTC per-actor records
- Usage & Cost Admin API — daily UTC buckets
- Official CSV exports (imported)
Raw metrics are never modified; every derived figure is computed from
them on demand. Source authority is official API > file import > demo, so
an import can never overwrite API data.
Days are UTC calendar days as reported by Anthropic. Reporting periods
(week/month/quarter/year/custom) are resolved in the configured organization
timezone (default Asia/Phnom_Penh) and select whole UTC data days.
2. Weighted Usage Index (Total Usage %)¶
Raw values such as messages, tokens and lines of code are never summed together. Instead, each enabled metric m with weight w(m), target t(m) and contribution cap c(m):
attainment(m) = actual(m) / effective_target(m)
contribution(m) = w(m) × min(attainment(m), c(m)) # cap default 200%
Total Usage % = 100 × Σ contribution(m) ÷ Σ w(m) # applicable m only
- Targets are defined per
basis_days(default 30) and scaled linearly to the report period length (configurable). Example: target 200 messages / 30 days → 46.7 for a 7-day report. - Active-day metrics (
<product>.active_days) count distinct days with any activity for that product. When exclude weekends is enabled, active-day targets scale by countable working days (working_days(period) ÷ (basis_days × 5/7)), and configured public holidays are excluded from countable days. - Contribution cap (default 200%, configurable per metric, minimum 100%): one extreme metric cannot mask non-use of other products. The uncapped attainment stays visible in the drill-down for transparency.
- Applicability: a metric enters the denominator only when its product's data is obtainable for the period — an available API capability or any imported official data. A category the plan does not provide is excluded, never treated as zero.
- No Data: a user with no applicable metrics at all has no score and is classified No Data (never 0%).
- Scores above 100% are expected when usage exceeds targets.
Sub-scores¶
The same formula restricted to a product family:
- Chat Usage % — metrics with product
chat - Claude Code Usage % — metrics with product
claude_code - Other Product Usage % — every other product (Cowork, Claude Design, Office Agent, Science, future products)
Share of Organization Activity¶
Shares sum to 100% across scored users.
Policy versioning¶
Weights/targets/caps/basis are stored as a versioned scoring policy. Any change creates a new version (audited). Because scores are always computed from raw metrics, historical periods automatically reflect the active policy; every report records the policy version used.
Default policy (v1)¶
| Metric | Weight | Target / 30 days | Cap |
|---|---|---|---|
| Claude Chat — messages | 25 | 200 | 200% |
| Claude Chat — conversations | 10 | 40 | 200% |
| Claude Chat — active days | 10 | 12 | 200% |
| Claude Chat — projects used | 5 | 4 | 200% |
| Claude Chat — artifacts created | 5 | 6 | 200% |
| Claude Code — sessions | 15 | 20 | 200% |
| Claude Code — active days | 10 | 8 | 200% |
| Claude Code — lines added | 5 | 2000 | 200% |
| Claude Code — commits | 5 | 10 | 200% |
| Cowork — sessions | 5 | 8 | 200% |
| Claude Design — sessions | 5 | 4 | 200% |
Consumption metrics (tokens, cost, requests) are intentionally not scorable — they measure spend, not adoption — and are reported beside the score instead.
3. Usage status classification¶
Evaluated per user per period, in this order:
- Exempt (policy) — membership states excluded by configuration (invited / disabled / removed / service accounts, all configurable).
- Exempt — a matching active alert exemption (exact email, wildcard, domain, or group; within its start/expiry window). Exemption suppresses alerts only; exempt users stay in dashboards, reports and totals unless the explicit "exclude exempt from totals" report option is enabled.
- Grace Period — joined within the configured grace window (default 14 days before period end).
- No Data — no reliable data for the period.
- Threshold bands (global or per-group override):
- Passed: Total Usage % ≥ the passing threshold (default 50%)
- Warning: ≥ warning threshold (default 20%) and < the passing threshold
- Critical: < warning threshold
- A passing score with fewer than the configured minimum active days downgrades to Warning (the reason says why).
Alerts are generated for Warning / Critical (and optionally No Data), with per-period dedupe and a configurable suppression window for repeats.
4. Organization KPIs¶
| KPI | Definition |
|---|---|
| Assigned seats | Latest assigned_seat_count reported by the API; falls back to the count of active members (the source is always labeled) |
| Active users (period) | Users with ≥ 1 active day in the period |
| Inactive users | Active members with 0 active days in the period |
| Seat utilization | Active users ÷ assigned seats |
| Average / Median usage | Mean / median of Total Usage % over scored users |
| Low-usage users | Warning + Critical count |
| Tokens / Cost | Sum of user-attributed token counts / cost (Decimal math; API cents converted exactly) |
| Last activity / inactive days | Latest active data day per user; inactive days measured to the data-freshness date so missing data is not misread as inactivity |
5. Consistency guarantee¶
Every report generation builds one snapshot (period + filters) and all selected formats — and the on-screen preview — render from that same snapshot object. The automated test suite asserts XLSX/JSON/CSV totals equal the snapshot totals.
6. Known measurement limitations¶
- Official data lags (≈1 day for engagement, up to 24 h for usage/cost) and recent days can be revised by Anthropic for a while; the sync re-fetches a configurable lookback window (default 7 days) and reports carry the data-freshness timestamp plus a stale-data warning.
- Distinct counts from the Analytics API use approximation (documented typical error < 2%).
- Claude Code usage routed through non-Anthropic clouds (e.g. Bedrock) is not reported by these APIs.
- API-key actors (non-human) in Claude Code data are tracked separately and never mapped to human users.