Last updated: 26 July 2026
Diagnostic services in NICE HMS use FHIR resources: ServiceRequest (test orders), Specimen (sample collection), and DiagnosticReport (results and PDF). There is no standalone "Lab" sidebar menu — the workflow is distributed across four areas:
| Area | Purpose |
|---|---|
| Admin → Service Request Masters | Configure tests, panels, and reference ranges |
| Patient Dashboard → Billing | Primary entry point for ordering tests |
| Patient → Services → Services Panel | Console for viewing and managing orders |
| Doctor workspace | Create service requests, specimens, and diagnostic reports |
Admins configure the diagnostic test catalog under Admin → Service Request Masters. The sidebar provides links for Single Test creation, Custom Panel creation, and From LOINC import. A search page (/admin/admin/service-request-masters/search/0) lists all configured services with name, display name, and LOINC ID.
| Field | Required | Description |
|---|---|---|
| Test Name | Yes | Auto-generates the LOINC ID by lowercasing and removing spaces |
| LOINC ID | Yes | Manually editable; defaults from Test Name |
| Category | Yes | Hospital, Laboratory, Radiology, Blood Bank, or Pharmacy |
| Scale Type | Yes | Determines the result entry template (see below) |
| Sale Price | Yes | Decimal value |
| Unit | Conditional | Hidden for Document and Narrative scale types |
| After Billing | Yes | TRUE = diagnostic report blocked until invoice is created. FALSE = report can be created immediately. |
| Consignee Ledger | No | Ledger account for revenue sharing |
| Consignee Ledger % | No | Percentage share to the ledger |
| Item SubHead | No | Accounting classification |
| Reference Range | Conditional | Hidden for Document, Panel, and Narrative types. Opens a modal for age/gender-specific ranges. |
A panel groups related tests ordered together (e.g., Complete Blood Count, Lipid Profile, LFT, KFT). The parent form has the same fields as a single test, which propagate to all child tests. Use the Add button to add child tests.
Each child test has its own: Test name, LOINC ID, Scale Type, Unit (conditional), and Reference Range (conditional). A child test with scale type Panel (-) acts as a display-only grouping header within the panel.
The scale type determines how results are entered and what the report template looks like:
| Scale Type | Code | Input | Used For |
|---|---|---|---|
| Quantitative | Qn | Number input with reference range. Values outside range auto-bold. | Hemoglobin, Fasting Blood Sugar, most lab tests |
| Ordinal | Ord | Text input with reference range | Urine dipstick (1+, 2+, 3+) |
| Nominal | Nom | Text input with reference range | Blood group, presence/absence tests |
| Document | Doc | TinyMCE rich text editor with AI generation and voice dictation | USG, CT, MRI, procedure notes, OT notes |
| Narrative | Nar | Free text | Clinical interpretations, comments |
| Panel | - | Display-only grouping header | Section labels within a custom panel |
Document-type tests deserve special attention: since ABDM does not have a separate "procedure" HI type, DiagnosticReport with scale type Document can serve ultrasound, CT scan, procedure notes, and OT notes. However, the system also has a separate Procedure/OT Note module (see OPD Workflow) for dedicated surgical documentation with operator, assistants, and anesthetist fields.
Reference ranges are configured per test with optional age and gender variations:
| Setting | Description |
|---|---|
| Age Limit Low / High | Age range this reference applies to (default: 0-200 years) |
| Age Type | Years, Months, or Days |
| Applies To | Gender filter: Male, Female, other, unknown (default: all) |
| Lower Limit / Higher Limit | Numeric reference range (Qn scale) |
| Text | Text-based reference range (Ord/Nom scales) |
You can add multiple reference ranges — for example, different hemoglobin ranges for adult males, adult females, and children. At result entry time, the system filters reference ranges by the patient's age and gender and applies the last matching range.
The From LOINC page imports tests from a standardized global LOINC master (orgId=0):
When afterBilling is set to TRUE for a test or panel, the diagnostic report page checks the ServiceRequest status. If the status is still "draft" (not yet billed), the page blocks with:
Your service request needs be active or completed state because its panels after billing state is true
The flow: create ServiceRequest (draft) → create invoice → ServiceRequest becomes active → diagnostic report can be created.
When afterBilling is FALSE, the diagnostic report can be created immediately regardless of billing status. The default in the admin test form is FALSE; reseller-level tests default to TRUE.
There are three ways to create a service request:
| Entry Point | Path |
|---|---|
| Billing page | Patient Dashboard → Billing → Lab & Services Billing → Create |
| Services Console | Sidebar → Patient → Services → Services Panel (/admin/patient/console/services-console) |
| Doctor workspace | Navigate directly to /admin/doctor/records/bundle/service-request/create?patientid=X&encounterid=Y |
The billing page is the primary entry point for most organizations.
| Field | Description |
|---|---|
| Date | DateTime picker, defaults to current |
| Priority | Routine, Urgent, ASAP, or STAT |
| Status | Draft (default), Active, On-hold, Cancelled, Completed |
| Intent | Always "order" (disabled field) |
| Requester | Practitioner or Patient; also supports free-text "Out Of List" entry |
| To be Done or Signed by | Multi-select practitioners who perform and sign the report |
| Repeat | DONT REPEAT (blocks duplicate tests in same encounter) or REPEAT |
| Category | Dropdown of service request categories; defaults to "Laboratory procedure" |
| Services | Multi-select from the organization's configured tests and panels |
| Note | Free-text clinical notes |
The saved ServiceRequest form displays three links:
| Link | Destination |
|---|---|
| Click Here to Report | Opens the Diagnostic Report page for result entry |
| Click Here To create Invoice | Opens the invoice creation page, passing the service request ID |
| Click Hear Add Specimen | Opens the Specimen form for sample collection |
The system prevents adding more than one specimen per service request and blocks duplicate tests in the same encounter (unless marked REPEAT).
Specimen entry is a link from the Service Request form, not a standalone dashboard. There is no list of pending collections or barcode/label printing.
Access: Service Request form → Click Hear Add Specimen
The form at /admin/doctor/records/bundle/specimen/create has three fields:
| Field | Type |
|---|---|
| Collected Date and Time | DateTime picker |
| Received Date and Time | DateTime picker |
| Specimen Type | Free text input (not a dropdown) |
To find past specimens for a patient, use the search page at /admin/doctor/records/bundle/specimen/search/{patientId}.
Access: Service Request form → Click Here to Report
This opens /admin/doctor/records/bundle/diagnostic-report-by-service-request/{serviceRequestId}. The form is generated dynamically from the panel or test configuration — one observation row per configured child test, with the input type determined by its scale type.
| Field | Description |
|---|---|
| Request Status | Active or Completed. Controls the ServiceRequest status. |
| Lab Id | Optional free-text local lab identifier |
Quantitative (Qn): Number input showing the test name, value field, unit, and the patient's applicable reference range. Values outside the reference range are rendered in bold on the final report.
Ordinal / Nominal (Ord/Nom): Text input showing test name, value field, unit, and reference range.
Document (Doc): A TinyMCE rich text editor with three productivity features:
Document-type observations are used for ultrasound reports, CT scan findings, MRI interpretations, procedure notes, and OT notes.
Narrative (Nar): Free text input for clinical interpretations and comments.
Panel (-): Display-only section header within a panel — no value to enter.
Results can be saved as draft and finalized later. When the status is set to "final," the ServiceRequest is automatically marked as completed, and the report is pushed to ABDM (if ABDM is configured).
After saving, the system returns a PDF link:
/api/pdfs/bundle/{compositionId}?bundletype=DiagnosticReportreportPaperSize| Method | How |
|---|---|
| PDF opens in browser tab. Print or save as PDF. | |
| Sends the report PDF to the patient's registered mobile number. Available via the BundleWhatsApp API endpoint. |
The system has a separate Procedure/OT Note module for surgical and procedural documentation. It is not part of the lab workflow — it is a standalone FHIR Composition accessed from the Doctor workspace:
Access: /admin/doctor/records/bundle/op-procedure/create?patientid=X&encounterid=Y
The form captures: Primary Operator, Assistants, Anesthetist, Technicians, Asserter, Recorder, and a Procedure TinyMCE editor for free-text notes with template support.
However, since ABDM does not distinguish procedures as a separate HI type, a DiagnosticReport with Document scale type can also serve procedure and OT note use cases. Choose whichever fits your documentation needs.
Q: Why can't I create a diagnostic report for a service request?
A: If the test or panel has afterBilling: TRUE, the diagnostic report is blocked until an invoice is created for the service request and its status becomes "active" or "completed." Create the invoice from the Service Request form link first.
Q: How do I add reference ranges that vary by age and gender? A: In the test configuration form, open the Reference Range modal. Add separate ranges with different age limits and gender selections. At result entry time, the system auto-filters to the matching range.
Q: Can I enter partial results and finalize the rest later? A: Yes. Save results as draft. Only finalized results appear on the printed report.
Q: How do I create a report for an ultrasound or CT scan? A: Configure the test with Scale Type: Document (Doc). This provides a TinyMCE rich text editor with AI generation and voice dictation instead of numeric value fields.
Q: Does the system print barcode labels for specimens? A: No. The specimen form records collection and receipt timestamps with a free-text specimen type. There is no barcode or label printing.
Q: How are tests priced and billed? A: Each test/panel has a configured Sale Price. From the Service Request form, click "Click Here To create Invoice" — the system creates an invoice with the test and its price. The invoice links to the service request and the encounter.
Q: Can I import standardized test panels? A: Yes. Use Admin → Service Request Masters → From LOINC to import panels from the global LOINC master. You can customize display names, units, and reference ranges before saving them to your organization.
Q: Can reports include previous results for comparison? A: Yes. When generating a report, the system can show previous results for the same test alongside the current result for trend analysis.
Q: Is there a lab dashboard showing pending samples or turnaround times?
A: No. The Services Console (/admin/patient/console/services-console) lists service requests with date and category filters, but there is no dedicated lab dashboard with status counts or turnaround time tracking.