Matters per customer (opened in period)iMatters per customer. Count of matters where date_created falls in the selected window and the matter links to this customer via action_participant.csv. Excludes deleted and out-of-scope action types.
Hours per customer (in period)iRaw logged hours per customer. Sum of ACTUAL HRS from the Time Records Report, filtered to matters attributed to this customer, in the selected window. Subject to logging hygiene — see "Normalised workload" below for a hygiene-independent effort estimate.
Customer summaryiPer-customer breakdown. Lifetime matters = all-time count. Opened/closed = within the selected window. Median and P90 cycle times in days (close date − created date). Hours = raw logged only.
| Customer | Lifetime matters | Opened in period | Closed in period | Median cycle (days) | P90 cycle | Hours |
Matters per lawyer (opened in period)iMatters led per lawyer. Count of matters opened in the window where the lawyer is the matter's assigned_to_participant_id. Only current lawyers shown; historical lawyers' matters still appear in the customer-level aggregates above.
Hours per lawyer (in period)iRaw logged hours per lawyer. Sum of hours where the lawyer is the timekeeper on the Time Records Report, in the window. Zero doesn't mean no work — it means no time was logged. Compare against "Normalised workload" below to see the logging gap.
Lawyer × Customer heatmap (matters opened)iIntersection of lawyer and customer. Each cell = matters opened in the window where this lawyer is the lead and this customer is on the matter. Darker cells = more matters. Useful for spotting existing specialisation (e.g. "Catherine handles most L'Oréal").
Raw logged hours vs Normalised effort — current lawyersiThe logging gap. Raw = hours the lawyer recorded in the Time Records Report. Normalised = effort estimated from task counts × calibrated standards. Gap = difference. A large positive gap (e.g. Zack's +10×) means the lawyer is doing work but not logging it — the normalised figure is the truer measure.
| Lawyer | Raw logged (tasks) | Normalised effort | Logging gap |
Calibrated effort per task type (top 10)iStandard effort per task type. Median actual_hours across tasks where hours were logged (>0). These are the multipliers the normalised effort model applies to unlogged tasks. Recalibrated automatically every time refresh.py runs.
| Task type | Standard effort (h) |
| Customer | Matters (90d) | Hours (90d) |
Catherine Pappas | Zack Bakoulas | Jobelyn Espino | Merryl Palamara | Alana (p-t) |
Job mix (hours by QUICK-CODE)iWhat work the team is doing. Total logged hours grouped by the QUICK-CODE field on each time entry (ActionStep's task-type classifier: T&C Drafting, Artwork Review, Revision, etc.). Entries without a QUICK-CODE show as (blank) — improving that is a quick-win hygiene change.
Hours per lawyer per monthiLogged hours trend. Sum of ACTUAL HRS for each current lawyer, grouped by calendar month. Reflects only what's logged — treat absolute values as a lower bound; the shape of the trend is more reliable than the absolute height.