Files
dyolink/.cursor/skills/lab-cases/SKILL.md

2.0 KiB

name, description
name description
dyolink-lab-cases Lab Cases tab — list, filters, detail panel, assignment, card UX. Use when changing CasesPage, cases API, or case list cards.

Lab Cases tab

UI: frontend/src/components/ui/lab/CasesPage.tsx
Backend: backend/src/modules/cases/
Shared prosthesis rows: LabCaseProsthesisGroupsList.tsx (also used in Treatment lab shipments rail)

List behavior

  • Default sort: sentAt desc (newest first).
  • Auto-select: On tab open / after filter reload, select first list item if none selected; keep selection when still in list; ?caseId= URL wins.
  • Right panel: Always shows detail for selected case when list non-empty (loading state while fetching).

Filters (GET /cases)

Param Behavior
prosthesisTypeCode Cases with ≥1 task of that prosthesis type (tasks.some) — not treatment-type filter
clinicOrganizationId From URL (Today case partners chart) or dropdown
q, sentFrom, sentTo Search + date range

Filter options: GET /cases/filter-optionsclinics, prosthesisTypes (distinct codes from sent-case tasks, catalog-ordered).

List card UI

Match Treatment shipment cards: patient name, clinic, colored prosthesis groups + teeth (LabCaseProsthesisGroupsList), sent date, progress bar, due-date badge, unread dot. No patient mobile on list cards.

List item shape: prosthesisGroups: { prosthesisTypeCode, teeth[] }[] from task teeth aggregation.

Detail panel

  • Task assignment: PATCH /cases/:caseId/tasks/:taskId/assign (TAB_CASES_EDIT)
  • Comments: shared LabCaseCommentsPanel + tasksApi comment routes
  • Mark read: POST /notifications/mark-case-read on select (Cases tab badge)

Permissions

TAB_CASES_READ / TAB_CASES_EDIT; owner always has Cases access. LabOrgGuard on routes.