Nexus Docs Documentation for the Nexus hospital management system

User Guide

Laboratory

OpenELIS-style lab workbench with patient-context popups — the sixth kiosk.

A.1 What a Lab doctor / nurse owns

ResponsibilityDetail
Lab workbenchThe single screen they sign in to: nine workflow tabs — Orders, Receiving, Workbench, Verify, Worksheets, Lab Transfers, Analytics, Reports, Catalog.
Order intakeOrders coming in from the wards (ICU / ER / Maternity / Operations / Ward) appear on the Orders tab the moment a doctor places them, routed by default to the Main Lab branch.
Specimen receiptWhen a tube arrives, Receiving records the accession number, specimen type, condition, and rejection reason if any.
Result entryWorkbench is where a tech enters numeric / coded results against each open order. Verify is where a second person signs the results off before they become final.
WorksheetsA batch view that lets the bench run multiple specimens in one go and sweep results back onto orders.
Lab-to-Lab transfersWhen the hospital runs more than one lab (Main + Microbiology + Blood Bank + satellite labs), the Lab Transfers tab is where work moves between them. A pending transfer shows up on the receiving lab’s Inbox sub-tab; they Accept (taking ownership) or Reject (with a reason).
Operational analyticsThe Analytics tab is the lab director’s view: total / pending / completed / cancelled / STAT counts over a window, leaderboards of top referring doctors and most-ordered tests, per-branch usage table, 14-day order-volume sparkline.
Walk-in patient registrationLab staff can register a new patient directly from the Orders tab (+ Register Patient button) instead of bouncing them back to reception. The form does a name / phone / national-ID search before allowing create so duplicate MRNs don’t accumulate.
Final reportingReports publishes the verified results as DiagnosticReport resources — visible to the ordering doctor under Results on their patient chart.
CatalogThe test/panel catalog itself (codes, reference ranges, units, specimen requirements) — usually edited by the lab director.
Patient contextClick any patient name on any tab to open a chart popup with the order itself plus vitals, allergies, conditions, current medications, prior reports, care plans, consents — all the bedside context needed to interpret a sample correctly.
Recording observationsThe chart’s editable categories (Vitals, Allergies, Conditions, Nursing Assess.) are mostly for context — bedside teams own these — but a phlebotomy difficulty note or a critical-value-driven allergy update can be added inline.

A.2 What they cannot do

The Lab shell is intentionally narrow — kiosk-style, like the five ward kiosks:

  • No sidebar, no global navigation, no dashboard.
  • No access to ward boards (ICU / ER / Maternity / Operations / Ward), no access to pharmacy, radiology, billing, HR, or admissions screens.
  • They CAN now create a patient record (walk-in registration from the Orders tab) and place lab orders against any patient — but they cannot see clinical history outside the lab chart popup, cannot admit a patient to a ward, and cannot collect cashier deposits.

Forbidden URLs land on the standard Forbidden page.

A.3 What the screen looks like

When a lab doctor or nurse logs in:

┌────────────────────────────────────────────────────────────────────────────────┐
│ M  Mando · Laboratory       [ Laboratory ]          🔔   Dr. Samir Khalil ┄    │
├────────────────────────────────────────────────────────────────────────────────┤
│                                                                                │
│   Laboratory                                                                   │
│   OpenELIS-style workflow · FHIR R5 compatible                                 │
│                                                                                │
│   [Orders] Receiving Workbench Verify Worksheets Lab-Transfers Analytics       │
│   Reports Catalog                                                              │
│                                                                                │
│  [ search… ] [ All statuses ▾ ]    [ + Register Patient ] [ + Place Order ]    │
│                                                                                │
│  Order #    Patient        Test / Panel         Lab          Priority  Status  │
│  LAB-2026…  John Smith     CBC (58410-2)        Main Lab     STAT      active  │
│  LAB-2026…  Maria Garcia   Glucose (2345-7)     Microbiology routine   active  │
│  …                                                                             │
└────────────────────────────────────────────────────────────────────────────────┘

Top bar: brand → single static tab “Laboratory” → notification bell → user pill → Sign out.

A.4 The day, end to end

  1. Sign in. The system bounces them straight to /lab. No dashboard.
  2. Watch the queue. Orders is the default tab. Each row shows the order #, patient name, test/panel, lab branch, priority, status, and date.
  3. Walk-in patient? Click + Register Patient. Type a name (or phone or national ID) — the form shows possible matches inline before letting you create. If it’s a real new patient, fill the form and submit; the system jumps straight into the Place Order modal with the new patient pre-selected.
  4. Click a patient name on any row → the chart popup opens with 11 cards: Lab Order, Vitals, Allergies, Conditions, Nursing Assess., Medications, Lab Orders (history), Imaging Orders, Results, Care Plans, Consents.
  5. Click “Lab Order” → snapshot of the specific order the user clicked: order #, code, display, priority, status, category, ordered date, specimen type, reason / clinical question, notes. STAT orders get a red banner.
  6. Click “Lab Orders” to see all of this patient’s lab history. The current order is highlighted with a “this order” badge so it’s easy to spot.
  7. Click “Conditions” / “Medications” to inform interpretation — e.g. an elevated glucose is expected on a patient with active diabetes who’s on insulin.
  8. Add a vital / allergy / condition / nursing note if the chart turned up something the bedside team missed.
  9. Move the sample through the workflow. Switch tabs as the workflow demands:
    • Receiving — log accession, specimen type, condition. Reject if hemolysed, clotted, mislabelled.
    • Workbench — pick the order, enter results against each test.
    • Verify — second tech reviews and signs off; preliminary → verified.
    • Worksheets — batch view for runs.
    • Reports — verified results aggregated into a DiagnosticReport and published.
  10. Need a different lab to run it? Open Lab Transfers → pick the order → choose destination → add reason → send. The receiving lab gets a notification on their bell and the transfer appears on their Inbox sub-tab.
  11. End of shift: the lab director opens Analytics to scan the day/week — pending count, STAT count, top referring doctors, most-ordered tests, per-branch volumes.
  12. Patient name is clickable on every tab — tabs share the same chart popup, mounted once at the page level.

A.5 Walk-in patient registration

A patient walks in for an outpatient draw without going through reception. Lab staff register them directly:

  1. From Orders, click + Register Patient.
  2. Start typing into the search box (top of the modal). The form runs a debounced search across name, phone, email, and national ID. Possible matches appear in an orange “Possible matches” panel.
  3. If a match appears: click it → the modal closes and the Place Order modal opens with that patient pre-selected. No duplicate MRN, no extra typing.
  4. If no match: fill the create form — full name (required), date of birth, gender, phone, national ID, email, address — and click Register & Place Order. The system creates the patient, mints an MRN, refreshes the patient list, and jumps straight into the order modal with the new patient pre-selected.

Why search-first: the system already has Master Patient Index dedup on the receptionist surface, but a walk-in lab visit is the most common path to accidentally creating a parallel record (no admission, no insurance lookup, no demographics double-check). The orange match panel is the single guardrail.

A.6 Lab Transfers

When the hospital runs more than one lab, the Lab Transfers tab is the inter-lab workflow surface.

Branch picker (top of tab): “Working at this lab” — defaults to Main Lab, persisted in localStorage. The picker shows live counters: open orders currently routed here + pending transfers waiting on this branch.

Three sub-tabs:

Sub-tabWhat it shows
InboxTransfers other labs sent to me, status pending. The badge on the tab is the count. Each row has Accept / Reject buttons.
OutgoingTransfers I sent. Read-only — I can see whether they were accepted, rejected, or completed.
All activityInbox + Outgoing combined, sorted newest first. The full audit trail.

How the workflow walks:

  1. Tech at Main Lab clicks + Transfer Order → picks an open order at this branch, picks a destination, picks a priority (routine / urgent / STAT), adds a reason (“requires special analyzer”, “overflow”, “after-hours coverage”). Submit.
  2. The transfer is created with status pending. The receiving lab gets a high-priority notification (STAT/urgent) or a normal one (routine) on their bell.
  3. The destination tech opens Lab Transfers, sees the row in their Inbox, and either:
    • Accept — status flips to accepted, the order’s current_lab_id is updated to the receiving lab. The order now appears on the receiving lab’s Orders queue and disappears from the sender’s. The sender is notified.
    • Reject — status flips to rejected with a required note (why). The order stays at the sending lab. The sender is notified at high priority.
  4. Once the work is done, the destination optionally Marks complete — separate from accepted, this is the “result has been returned” state. Useful for split-batch flows where one transfer corresponds to one analyte run, not the whole order.

Server-side guardrails:

  • A transfer cannot have from_lab_id == to_lab_id (HTTP 400).
  • Only pending transfers can be Accepted or Rejected (HTTP 409 otherwise).
  • Only pending transfers can be deleted (HTTP 409 otherwise — already-decided rows survive as audit).

Common pitfalls:

  • “The order isn’t on my Orders list anymore.” It was transferred. Switch the branch picker on Lab Transfers to your branch and check Outgoing.
  • “I accepted by mistake.” Cannot un-accept. Send a new transfer back to the original lab with a “wrong destination” reason.
  • “I want to reject without a note.” Reject requires a note — by design, so the sender knows what to fix.

A.7 Analytics

The Analytics tab is the lab director’s operational dashboard. Single API call, no charts library.

Window selector (top): Last 7 / 30 / 90 / 180 / 365 days. Default 30. Refresh button forces a re-fetch.

KPI grid: total orders, pending, completed, STAT/urgent, cancelled, transfers pending. Pending and STAT are colour-coded amber and red respectively.

Order-volume sparkline (last 14 days, clamped to the selected window): a CSS bar-chart of daily counts so you can see a Saturday dip or an outbreak spike.

Top referring doctors (left panel): top 10 requesters by count over the window. Each row is a horizontal bar plus a count.

Most ordered tests (right panel): top 10 tests by count over the window. Same bar layout.

Usage by lab branch (bottom panel): every active branch with its order volume, pending, and completed counts over the window. Useful for capacity planning (“Microbiology is sitting at 80% pending for the third week — we need a second analyzer”).

The dashboard is intentionally lightweight — bars are CSS percentages, not a chart library — so it loads fast on a kiosk machine and never needs a CDN.

A.8 Notifications

Inbound (the bell flashes):

  • New lab order placed by a doctor (the wards) — fires lab_order_new on the Laboratory department feed.
  • STAT priority orders fire at high priority; routine orders fire normal.
  • New transfer inlab_transfer_in fires when another lab routes work to this branch. STAT/urgent priority bumps to high.
  • Transfer acceptedlab_transfer_accepted fires back to the sender.
  • Transfer rejectedlab_transfer_rejected fires back to the sender at high priority.

Outbound (the lab fires automatically):

  • Verified result published → ordering doctor’s notification feed (planned — see follow-ups below).
  • Critical-value flagged → ward + ordering doctor (planned).

A.9 Common pitfalls

  • “I want to enter a result but the chart popup is open.” The chart is for context, not result entry. Close it and use the Workbench tab — pick the order, type the value.
  • “I don’t see the order I’m expecting.” Filter on Status and Priority at the top of Orders. The default is “All statuses”. If a doctor only just placed it, the table refreshes when you re-enter the tab. Also check the Lab column — it may have been transferred to a different branch.
  • “I tried to open another ward to check the patient.” Correct — lab staff can’t browse ward boards. Use the chart popup to see the bedside context (active conditions, current meds, allergies, vitals).
  • “The order has no specimen type.” That’s an oversight by the ordering doctor. You can still receive the specimen; record the actual type on the Receiving form.
  • “My patient has 30 prior reports.” That’s expected on a long admission. Use the Results tab’s search to filter by report number, patient name, or display.
  • “I registered the same walk-in twice.” The orange match panel was probably ignored. The system shows up to 6 candidates — always click an existing record before creating a new one.
  • “The transfer is stuck in pending forever.” The receiving branch hasn’t acted. Open the Lab Transfers Outgoing sub-tab — if it’s been hours, ring the destination lab manually; transfer SLAs aren’t enforced by the system today.