← Back to AAI for MerusCase

Prep for Hearing

The single-screen brief an attorney reads on the walk into the WCAB. Client phone, language, interpreter status, the case summary you wrote, all parties with contact info, upcoming events, open tasks, days since last client contact, and the gap flags that have to be closed before the gavel.

The case names, dates, phone numbers, and venue references in this page are fictitious demonstration data. Your install runs against your actual cases.

On this page

What it is

At the prompt:

aaicase> prep for Doe hearing

About thirty seconds later you have a one-screen brief shaped for exactly the moment you’ll use it — standing outside the hearing room, reading the case top to bottom before walking in. It is the most-rerun skill the morning of a hearing day, and the structure reflects the reality that you don’t have time to scroll. Everything that matters is above the fold.

How it runs (under the hood)

The skill resolves the case, then fires six parallel fetches:

/caseFiles/view/[CASE-ID]    → header, applicant, comments, attorney
/parties/view/[CASE-ID]      → every party with phone/role
/activities/index/[CASE-ID]  → activity history (the spine of hearing prep)
/tasks/index                 → open tasks for the case
/injuries/view/[CASE-ID]     → DOI, body parts, ADJ#
merus-events --case [CASE-ID] → upcoming events on the calendar

Required: case + activities. Optional: parties, tasks, injuries, events. If a non-required endpoint fails, the brief still runs and notes which section is missing data — you never get a half-rendered brief that silently dropped sections.

All data lands in a per-run mktemp -d temp directory locked to chmod 700. The directory is deleted at the end of the run.

Smart disambiguation when names match multiple cases

If “Doe” matches three open cases at the firm, the skill behaves differently depending on how it was invoked:

The one-shot heuristic is the right one: when an attorney scripts “prep me for tomorrow,” they almost always mean “the Doe case with the hearing tomorrow,” not “any case named Doe.” The skill picks the obvious answer; it does not invent one.

The seven sections of the brief

SectionWhat it shows
Case headerName, file number, status, venue, attorney of record, paralegal handling.
ClientName, phone, language, interpreter flag.
Case summaryThe first portion of CaseFile.comments — the attorney’s own note about the case. If empty, this is a flag.
InjuriesBody parts, DOI, claim number, ADJ#.
Key partiesDefense counsel, carrier, adjuster, QME/AME, treating providers — each with phone and role.
Upcoming eventsEvery event on the calendar in chronological order, formatted by merus-events.
Open tasksReal tasks only (autogenerated noise filtered), sorted by priority and due date.

Followed by:

Client-contact detection — no regex

The most-used flag is “days since last client contact,” and getting it right depends on knowing which activities count as client contact. The skill does this in two passes:

  1. Tag-based pass. Activities tagged with the firm’s client-contact tag IDs (typically 111, 32263, 32265, 23827) are counted directly. Fast, deterministic, no inference needed.
  2. Notes pass (when tag pass is empty). If no tagged client-contact activities exist, the skill takes the firm’s tag 101 (Note) entries — many firms log client phone calls under Note instead of Telephone Call. The 10 most-recent notes are emitted as RECENT_NOTE_CANDIDATES lines (id + date + first 300 chars). The model running the skill reads the candidate list and picks the most recent that describes communication WITH THE APPLICANT (e.g. “Applicant called,” “Spoke with applicant,” Spanish equivalents) — not a provider call (“Called Dr. Sample”) or defense call. Pure data classification, no separate subprocess.

The notes pass uses model classification, not regex pattern matching. A regex of /call(ed)?\s+(?:the\s+)?client/i would miss “spoke with Jane,” “LM for applicant,” “CC w/ client per attny request,” and a dozen other variations. The model handles all of them. No additional cost — the classification happens inside the conversation already running the skill, not a separate API call.

The gap flags

Every brief ends with a checkbox list of what to fix before the hearing. The flags are deliberately written as actions, not observations — what the attorney has to do, not what is wrong:

TriggerFlag text
CaseFile.comments is empty or very short“No case summary — WRITE ONE”
No client contact found, or last contact > 30 days“Client not contacted in X days — CALL TODAY”
No open tasks on the case“No prep tasks — add at least one before hearing day”
No phone number on the applicant contact“No phone on file — can’t reach client if hearing is continued”
Language not English and interpreter flag not set“No interpreter requested — language is [X], file the WCAB interpreter request”
No defense counsel party on case“No defense attorney on file — check who’s appearing for defense”
No carrier party on case“No carrier on file — needed for any benefits discussion”

Flags an attorney has already addressed get an unchecked box (the data is there); flags that still need work get a checked box (a thing-to-do). The format is intentional — you walk past the brief and your eye catches the checked boxes first.

Why the interpreter check matters

Showing up to a WCAB hearing without an interpreter your non-English-speaking client needs is a continuance at best and a malpractice exposure at worst.

8 CCR 9795.1 requires Workers’ Comp interpreter requests be filed in advance. The judge will not provide one ad-hoc. The interpreter check is a hard-edged gate — if the applicant’s language is anything other than English and the interpreter flag on the contact is not set, the brief flags it loudly.

The skill also flags subtler cases: language is set to English but the contact has notes mentioning “limited English” or the family communicates via a relative who interprets. Those don’t auto-flag, but they surface in the case summary so the attorney can decide.

Example output

HEARING PREP: Doe, Jane v. Sample County Agency (File# [NUMBER])
Venue: Anaheim WCAB | Status: Open

CLIENT
  Jane Doe | (555) 555-0142 | Language: Spanish | Interpreter: NO

CASE SUMMARY
  Specific injury 2026-04-12. Low back + right knee. Disputed AOE/COE.
  MSC set 2026-06-04. PTP Dr. Sample, QME pending — panel struck twice.

INJURIES
  Low back, right knee | DOI 2026-04-12 | Claim# [#] | ADJ# [#]

KEY PARTIES
  Role               Name                       Phone           Notes
  Defense Counsel    Sample & Sample LLP        (555) 555-0199  Coleman
  Carrier            Sample Insurance Co.       (555) 555-0188  TPA
  Adjuster           Sample Adjuster            (555) 555-0177  ext. 3214
  PTP                Dr. Sample                 (555) 555-0166  Anaheim
  QME (panel struck)  pending replacement
  Interpreter        NOT REQUESTED              —               see flag

UPCOMING EVENTS
  2026-06-04 09:30  MSC          Anaheim WCAB, Dept. 4
  2026-06-11 13:00  Status Conf  same

OPEN TASKS (real only — 4)
  HIGH  due 2026-06-03  File interpreter request — Spanish (8 CCR 9795.1)
  HIGH  due 2026-06-03  Confirm client transport / interpreter coordination
  NORM  due 2026-06-04  Bring claim log + benefits log for MSC
  NORM  due 2026-06-04  Confirm Dr. Sample report addresses AOE/COE

LAST CLIENT CONTACT: 2026-04-29 (38 days ago)

FLAGS — fix before hearing
  [x] Client not contacted in 38 days — CALL TODAY
  [x] No interpreter requested — language is Spanish, file the WCAB request
  [x] QME panel struck twice — confirm replacement strategy
  [ ] Case summary written
  [ ] Defense counsel on file
  [ ] Carrier on file

When to run it

Prep hearing vs. health check

Prep for hearingHealth check
Time~3 minutes~2 minutes
Output shapeSingle-screen courthouse briefDiagnostic with exposure flags + pre-computed SOL/5410 deadlines
EmphasizesParties, events, tasks, contact age, interpreter, gap-flags-as-actionsEthics gaps, milestone misses, missing QME/UR data, statute-window status
Run whenYou have a specific hearing coming upAny case touchpoint (client call, reassignment, quarterly review)

They overlap. Both fetch the same six core endpoints. The difference is shape: health check is a diagnostic, prep-hearing is a roadmap. You run the diagnostic when you want to understand a case. You run the prep when you’re about to walk in the room.

Troubleshooting

“Case summary missing” on a case I’ve been handling for months

The CaseFile.comments field is empty. Add a summary via the Merus UI or run audit [case] — the audit writes a comprehensive summary into comments (asking before overwriting if one exists). Re-run prep-hearing after.

“Client not contacted in 200 days” but I just called yesterday

The call wasn’t logged as an activity, or it was logged with a tag the skill doesn’t recognize as client contact. Add an activity with one of the firm’s client-contact tags, or just log the call as a Note (tag 101) — the notes-pass classifier will pick it up on next run.

“No interpreter requested” but I know the request was filed

The contact’s interpreter field in Merus isn’t set to 1. Update the contact (Merus UI or /contacts/edit/[ID]); the brief uses the field, not the existence of a filed request.

The brief shows the wrong case for “prep for Doe”

Multiple Doe matches. In interactive mode the skill should have asked — if it didn’t, you’re in one-shot mode and the disambiguation heuristic picked the wrong one. Re-run with the specific case ID (prep for case [ID] hearing) and the right one will load.

Events section is empty

Most likely no events on the calendar for this case, but possibly the merus-events sub-script failed. The case header still loads either way; check the upcoming event in the Merus UI directly to confirm.

Open tasks shows the QME report task but I closed that yesterday

The tasks endpoint may be cached briefly after a write. Re-run; if it still shows, the task wasn’t actually closed — check process my tasks on the case.

Part of AAI for MerusCase — code-guarded AI case intelligence for California Workers’ Comp attorneys.