Skip to content

call-log-billing

Turn the daily SMS Backup & Restore call-log XML into a per-matter billable call table. Use when the user mentions the call log, calls-*.xml, billing calls, or phone time for Clio.

Source: .opencode/skills/call-log-billing/SKILL.md — site rebuilt 2026-09-05.


Call Log Billing

Parse an SMS Backup & Restore calls-*.xml backup for one calendar month, drop non-billable calls, map callers to Clio matters, and emit per-matter tables plus a Clio-ready time-entry draft.

Scope and hard rules

  • Source file is given explicitly (backups land daily, e.g. G:\My Drive\calls-20260831225836.xml). Never guess which backup is latest — ask, or take the path as an argument.
  • Drop all missed calls (type="3"). Keep In/Out/Rejected with their durations as-is.
  • Always drop: Morag Black, Mum, Dad, Parents House (family/personal).
  • Bill ONLY contacts in CONTACT_TO_MATTER below. Everything else is reported under UNMAPPED for review — never assigned to a matter by guessing.
  • Never invent Clio matter numbers, descriptions, or statuses. New mappings are confirmed by the user (via the clio skill, read-only) before entering the map.
  • Durations are verbatim from the XML (duration seconds). Hours = seconds / 3600.

Contact → matter map (user-confirmed)

XML contact_name Clio matter Clio id
Brian Barr 00975-HJV Consultants Limited 2660944
Stuart Wilson 00972-Wilson Developments (Scotland) Ltd 2646160
Monty Langmuir 01459-Langmuir and Hay 9376841
Richard Corrigan Irs 01403-Insulated Render Systems (Scotland) Ltd 8335294

Ignore list (never billed): Marcus Wallace, David Wallace, Josh Princess.

Procedure

  1. Run tools/call_log_billing.py <xml-path> --month YYYY-MM.
  2. Optional verification via the clio skill: check each mapped matter is still Open (get /v4/matters/<id>), and resolve any UNMAPPED caller with contacts --query "<surname>" before adding it to the map.
  3. Report: one table per matter (Date | Dir | Duration), per-matter totals in seconds/minutes/decimal hours, a combined time-entry draft, then UNMAPPED (calls + total time left out) so nothing is silently dropped.

Clio time entries — read-only limit

The firm's Clio integration is read-only (read scopes only; the client issues GETs). This skill never posts time. It produces the draft table below for manual entry (or CSV import) — Date | Matter | Description | Hours:

  • Hours per call = duration / 3600, 2dp. August 2026 example totals: 00975 = 0.45h, 00972 = 1.10h, 01459 = 0.39h, 01403 = 0.13h.

Base directory for this skill: .opencode/skills/call-log-billing