LIS Module (نظام معلومات المختبر)
The LIS (Laboratory Information System) module provides end-to-end laboratory management including test ordering, sample tracking, result entry with multi-level approval, quality control, machine interfacing, billing, compliance, and a patient self-service portal.
Features
| Feature | Description | Link |
|---|---|---|
| Lab Sections | Organize the lab into departments (Hematology, Biochemistry, etc.) | sections |
| Specimen Types | Define specimen types with collection instructions | specimen-types |
| Investigations | Investigation catalog, categories, normal ranges, and panels | investigations |
| Patients | Lab patient registration and demographics | patients |
| Doctors | Referring and internal doctors | doctors |
| Doctor Commissions | Commission rules, calculation, settlement & void | doctor-commissions |
| Lab Requests | Test ordering with multi-investigation support | requests |
| Visits | Patient visit registration and tracking | visits |
| Samples | Sample collection, receiving, and rejection | samples |
| Results | Result entry, validation, approval, and release | results |
| Quality Control | QC lots, Westgard rules, Levey-Jennings charts | qc |
| Machines | Machine interfacing and result matching | machines |
| Pricing | Price lists and insurance contracts | pricing |
| Invoices | Lab invoicing with post and cancel | invoices |
| Compliance | Audit logs, custody tracking, retention policies, checklists | compliance |
| Reagents & Supplies | Reagent inventory, FIFO consumption, stock alerts | reagents |
| Reports | Workload, TAT, volume, revenue, QC, abnormals | reports |
| Patient Portal | Patient self-service result viewing | patient-portal |
| Insurance Billing | Insurance billing pipeline with split invoicing | insurance-billing |
| Payments | Patient payment collection with JE auto-posting | payments |
| External Labs | External laboratory management with pricing | external-labs |
| Referrals | Bidirectional referral tracking with results | referrals |
Entity Relationship Diagram
API Base URL
All LIS endpoints are prefixed with:
/api/lis/...Patient portal endpoints use a separate prefix:
/api/lis/portal/...All API Endpoints
Lab Configuration
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/sections | List lab sections | lis.sections.view |
POST | /api/lis/sections | Create a section | lis.sections.create |
GET | /api/lis/sections/{id} | Get section details | lis.sections.view |
PUT | /api/lis/sections/{id} | Update a section | lis.sections.update |
DELETE | /api/lis/sections/{id} | Delete a section | lis.sections.delete |
GET | /api/lis/specimen-types | List specimen types | lis.specimen-types.view |
POST | /api/lis/specimen-types | Create specimen type | lis.specimen-types.create |
GET | /api/lis/specimen-types/{id} | Get specimen type | lis.specimen-types.view |
PUT | /api/lis/specimen-types/{id} | Update specimen type | lis.specimen-types.update |
DELETE | /api/lis/specimen-types/{id} | Delete specimen type | lis.specimen-types.delete |
GET | /api/lis/investigation-categories | List categories | lis.investigation-categories.view |
POST | /api/lis/investigation-categories | Create category | lis.investigation-categories.create |
GET | /api/lis/investigation-categories/{id} | Get category | lis.investigation-categories.view |
PUT | /api/lis/investigation-categories/{id} | Update category | lis.investigation-categories.update |
DELETE | /api/lis/investigation-categories/{id} | Delete category | lis.investigation-categories.delete |
GET | /api/lis/investigations | List investigations | lis.investigations.view |
POST | /api/lis/investigations | Create investigation | lis.investigations.create |
GET | /api/lis/investigations/{id} | Get investigation | lis.investigations.view |
PUT | /api/lis/investigations/{id} | Update investigation | lis.investigations.update |
DELETE | /api/lis/investigations/{id} | Delete investigation | lis.investigations.delete |
PUT | /api/lis/investigations/{id}/normal-ranges | Sync normal ranges | lis.investigations.update |
PUT | /api/lis/investigations/{id}/panel-members | Sync panel members | lis.investigations.update |
Patients & Doctors
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/patients | List patients | lis.patients.view |
POST | /api/lis/patients | Create patient | lis.patients.create |
GET | /api/lis/patients/{id} | Get patient | lis.patients.view |
PUT | /api/lis/patients/{id} | Update patient | lis.patients.update |
DELETE | /api/lis/patients/{id} | Delete patient | lis.patients.delete |
GET | /api/lis/doctors | List doctors | lis.doctors.view |
POST | /api/lis/doctors | Create doctor | lis.doctors.create |
GET | /api/lis/doctors/{id} | Get doctor | lis.doctors.view |
PUT | /api/lis/doctors/{id} | Update doctor | lis.doctors.update |
DELETE | /api/lis/doctors/{id} | Delete doctor | lis.doctors.delete |
Lab Requests & Visits
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/requests | List requests | lis.requests.view |
POST | /api/lis/requests | Create request | lis.requests.create |
GET | /api/lis/requests/{id} | Get request | lis.requests.view |
PUT | /api/lis/requests/{id} | Update request | lis.requests.update |
POST | /api/lis/requests/{id}/cancel | Cancel request | lis.requests.update |
POST | /api/lis/requests/{id}/investigations | Add investigation | lis.requests.update |
DELETE | /api/lis/requests/{id}/investigations/{inv_id} | Remove investigation | lis.requests.update |
GET | /api/lis/visits | List visits | lis.visits.view |
POST | /api/lis/visits | Create visit | lis.visits.create |
GET | /api/lis/visits/{id} | Get visit | lis.visits.view |
PUT | /api/lis/visits/{id} | Update visit | lis.visits.update |
DELETE | /api/lis/visits/{id} | Delete visit | lis.visits.delete |
POST | /api/lis/visits/{id}/complete | Complete visit | lis.visits.update |
Samples & Results
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/samples | List samples | lis.samples.view |
POST | /api/lis/samples | Create sample | lis.samples.create |
GET | /api/lis/samples/{id} | Get sample | lis.samples.view |
POST | /api/lis/samples/{id}/collect | Collect sample | lis.samples.update |
POST | /api/lis/samples/{id}/receive | Receive sample | lis.samples.update |
POST | /api/lis/samples/{id}/reject | Reject sample | lis.samples.update |
GET | /api/lis/results | List results | lis.results.view |
GET | /api/lis/results/{id} | Get result | lis.results.view |
POST | /api/lis/results/{id}/enter | Enter result | lis.results.update |
POST | /api/lis/results/{id}/validate | Validate result | lis.results.update |
POST | /api/lis/results/{id}/approve | Approve result | lis.results.update |
POST | /api/lis/results/{id}/release | Release result | lis.results.update |
Quality Control
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/qc-lots | List QC lots | lis.qc-lots.view |
POST | /api/lis/qc-lots | Create QC lot | lis.qc-lots.create |
GET | /api/lis/qc-lots/{id} | Get QC lot | lis.qc-lots.view |
PUT | /api/lis/qc-lots/{id} | Update QC lot | lis.qc-lots.update |
DELETE | /api/lis/qc-lots/{id} | Delete QC lot | lis.qc-lots.delete |
GET | /api/lis/qc-lots/{id}/results | List QC results | lis.qc-lots.view |
POST | /api/lis/qc-lots/{id}/results | Record QC result | lis.qc-lots.create |
DELETE | /api/lis/qc-lots/{id}/results/{rid} | Delete QC result | lis.qc-lots.delete |
GET | /api/lis/qc-lots/{id}/levey-jennings | Levey-Jennings data | lis.qc-lots.view |
Machines & Machine Results
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/machines | List machines | lis.machines.view |
POST | /api/lis/machines | Create machine | lis.machines.create |
GET | /api/lis/machines/{id} | Get machine | lis.machines.view |
PUT | /api/lis/machines/{id} | Update machine | lis.machines.update |
DELETE | /api/lis/machines/{id} | Delete machine | lis.machines.delete |
GET | /api/lis/machine-results | List machine results | lis.machine-results.view |
GET | /api/lis/machine-results/unmatched | List unmatched results | lis.machine-results.view |
POST | /api/lis/machine-results/{id}/match | Match to sample/test | lis.machine-results.update |
POST | /api/lis/machine-results/{id}/approve | Approve matched result | lis.machine-results.update |
POST | /api/lis/machine-results/{id}/reject | Reject machine result | lis.machine-results.update |
Pricing & Billing
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/price-lists | List price lists | lis.price-lists.view |
POST | /api/lis/price-lists | Create price list | lis.price-lists.create |
GET | /api/lis/price-lists/{id} | Get price list | lis.price-lists.view |
PUT | /api/lis/price-lists/{id} | Update price list | lis.price-lists.update |
DELETE | /api/lis/price-lists/{id} | Delete price list | lis.price-lists.delete |
GET | /api/lis/insurance-contracts | List contracts | lis.insurance-contracts.view |
POST | /api/lis/insurance-contracts | Create contract | lis.insurance-contracts.create |
GET | /api/lis/insurance-contracts/{id} | Get contract | lis.insurance-contracts.view |
PUT | /api/lis/insurance-contracts/{id} | Update contract | lis.insurance-contracts.update |
DELETE | /api/lis/insurance-contracts/{id} | Delete contract | lis.insurance-contracts.delete |
GET | /api/lis/invoices | List invoices | lis.invoices.view |
POST | /api/lis/invoices | Create invoice | lis.invoices.create |
GET | /api/lis/invoices/{id} | Get invoice | lis.invoices.view |
PUT | /api/lis/invoices/{id} | Update invoice | lis.invoices.update |
DELETE | /api/lis/invoices/{id} | Delete invoice | lis.invoices.delete |
POST | /api/lis/invoices/{id}/post | Post invoice | lis.invoices.update |
POST | /api/lis/invoices/{id}/cancel | Cancel invoice | lis.invoices.update |
Compliance
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/compliance/audit-logs | List audit logs | lis.compliance.view |
GET | /api/lis/compliance/audit-logs/{id} | Get audit log | lis.compliance.view |
GET | /api/lis/compliance/custody-logs | List custody logs | lis.compliance.view |
POST | /api/lis/compliance/custody-logs | Create custody log | lis.compliance.create |
GET | /api/lis/compliance/retention-policies | List policies | lis.compliance.view |
POST | /api/lis/compliance/retention-policies | Create policy | lis.compliance.create |
GET | /api/lis/compliance/retention-policies/{id} | Get policy | lis.compliance.view |
PUT | /api/lis/compliance/retention-policies/{id} | Update policy | lis.compliance.update |
DELETE | /api/lis/compliance/retention-policies/{id} | Delete policy | lis.compliance.delete |
GET | /api/lis/compliance/checklists | List checklists | lis.compliance.view |
POST | /api/lis/compliance/checklists | Create checklist | lis.compliance.create |
GET | /api/lis/compliance/checklists/{id} | Get checklist | lis.compliance.view |
PUT | /api/lis/compliance/checklists/{id} | Update checklist | lis.compliance.update |
DELETE | /api/lis/compliance/checklists/{id} | Delete checklist | lis.compliance.delete |
POST | /api/lis/compliance/checklists/{id}/complete | Complete checklist | lis.compliance.update |
Reagents & Supplies
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/reagents | List reagents | lis.reagents.view |
POST | /api/lis/reagents | Create reagent | lis.reagents.manage |
GET | /api/lis/reagents/alerts/low-stock | Low stock alerts | lis.reagents.view |
GET | /api/lis/reagents/alerts/expiring | Expiring batch alerts | lis.reagents.view |
GET | /api/lis/reagents/{id} | Get reagent with batches | lis.reagents.view |
PUT | /api/lis/reagents/{id} | Update reagent | lis.reagents.manage |
DELETE | /api/lis/reagents/{id} | Delete reagent | lis.reagents.manage |
POST | /api/lis/reagents/{id}/batches | Add batch | lis.reagents.manage |
POST | /api/lis/reagents/{id}/consume | Manual consume (FIFO) | lis.reagents.consume |
GET | /api/lis/reagents/{id}/consumption-report | Consumption report | lis.reagents.view |
Reports
| Method | Endpoint | Description | Permission |
|---|---|---|---|
GET | /api/lis/reports/workload | Workload summary | lis.reports.view |
GET | /api/lis/reports/turnaround-time | Turnaround time | lis.reports.view |
GET | /api/lis/reports/test-volume | Test volume | lis.reports.view |
GET | /api/lis/reports/revenue | Revenue summary | lis.reports.view |
GET | /api/lis/reports/qc-summary | QC summary | lis.reports.view |
GET | /api/lis/reports/abnormals | Abnormal results | lis.reports.view |
Patient Portal
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST | /api/lis/portal/login | Patient login | none |
GET | /api/lis/portal/results | List released results | portal token |
GET | /api/lis/portal/results/{id} | Get result details | portal token |
POST | /api/lis/portal/logout | Invalidate token | portal token |
Lab Workflow Overview
Localization
Every request can include an Accept-Language header set to ar or en.
Accept-Language: ar