About This System

This is a hospital management system built for Kenya's healthcare environment. It is used by hospital staff to manage everything that happens from the moment a patient walks in to the moment they are discharged and their bill is settled.

The system is designed around the real workflow of a Kenyan hospital:

📋 Receptionist

Registers a patient when they arrive at the hospital.

🧑‍⚕️ Doctor

Reviews the patient and creates an admission record with a diagnosis and treatment plan.

👩‍⚕️ Nurse

Assigned to the patient, logs daily vitals, and requests medicines or supplies when needed.

💼 Nurse-in-Charge

Oversees all nurses, reviews and approves or rejects requests before they reach the pharmacy.

💊 Pharmacist

Dispenses approved medicines and supplies, manages stock levels, and handles billing.

⚙️ Admin

Manages the entire system — wards, beds, users, inventory, and payments.

🤶 Maternity Nurse

Registers and manages maternity patients directly in the ward, bypassing the standard OPD flow.

🪦 Mortuary Attendant

Accepts body transfers from wards, logs mortuary charges, and processes releases to the family.

External integrations:

🏥 SHA / AfyaLink

Kenya's Social Health Authority insurance system. Patients covered by National Health Insurance can have their bills submitted as claims directly from this system.

📱 HydroLife / M-Pesa

Patients can pay their hospital bills via M-Pesa. The payment request is sent directly to the patient's phone as an M-Pesa prompt.

How to Use This Guide

Pass

What you see matches the "What you should see" description at the end of the test.

Fail

Something unexpected happened. Take a screenshot and note the test number.

👤

Role

Each test shows which account to use. Log in with that role before starting the test.

Test Accounts

Log in using the email and password below. Every account uses the same password.

Role Full Name Email Password
Admin Admin User admin@ictrh.go.ke password
Doctor Dr. John Doe doctor@ictrh.go.ke password
Nurse Nurse Jane Smith nurse@ictrh.go.ke password
Nurse-in-Charge Nurse Mary Johnson nurse-in-charge@ictrh.go.ke password
Pharmacist Pharmacist David Brown pharmacist@ictrh.go.ke password
Receptionist Receptionist Alice Mwangi receptionist@ictrh.go.ke password
Patient Patient John Smith patient@ictrh.go.ke password
Maternity Nurse Nurse Amina Hassan maternity@ictrh.go.ke password
Mortuary Attendant Attendant Peter Ouma mortuary@ictrh.go.ke password
1 Logging In
1.1 Logging in works Any Role
  1. Go to the app in your browser.
  2. Enter a valid email and password from the table above.
  3. Click Log in.
What you should see A dashboard page that matches your role (e.g., Admin sees an Admin Dashboard, Doctor sees a Doctor Dashboard).
1.2 Wrong password is rejected Any Role
  1. Go to the login page.
  2. Enter a valid email but type a wrong password.
  3. Click Log in.
What you should see A red error message saying the credentials are wrong. You stay on the login page.
1.3 Other roles' pages are blocked Nurse
  1. Log in as the Nurse.
  2. In the browser address bar, manually type the admin URL (e.g., .../admin/dashboard) and press Enter.
What you should see You are either redirected away or shown an "Access Denied" / "403" page. You should never see the Admin dashboard while logged in as a Nurse.
1.4 Logging out works Any Role
  1. Find the logout button (usually in the top-right menu or sidebar).
  2. Click Log out.
What you should see You are taken back to the login page.
2 Registering a Patient

Role: Receptionist (or Admin)

2.1 Register a new patient Receptionist
  1. Log in as Receptionist.
  2. In the sidebar, click Patients then Register Patient (or click New Patient).
  3. Fill in all the fields:
    • First Name: Jane
    • Last Name: Wanjiku
    • Date of Birth: 01/01/1990
    • Gender: Female
    • Phone: 0712345678
    • Patient Type: Inpatient
  4. Click Save or Register.
What you should see A success message like "Patient registered successfully." The patient appears in the patient list with a number like P000001.
2.2 Patient number increases automatically Receptionist
  1. Register a second patient (any name, fill required fields).
  2. Check the patient list.
What you should see The second patient has the next number, e.g., P000002. Numbers never repeat.
2.3 Required fields cannot be skipped Receptionist
  1. Open the Register Patient form.
  2. Leave First Name empty. Fill everything else.
  3. Click Save.
What you should see A red error message appears next to the First Name field. The form does not submit and no patient is created.
2.4 Edit a patient's details Receptionist
  1. Open any patient from the list.
  2. Click Edit.
  3. Change the phone number to 0799999999.
  4. Click Save.
What you should see Success message. The patient record now shows the new phone number.
3 Admitting a Patient

Role: Doctor

3.1 Create an admission Doctor
  1. Log in as Doctor.
  2. Click AdmissionsNew Admission.
  3. Select patient Jane Wanjiku.
  4. Set today's date as Admission Date.
  5. Fill in: Reason for Admission (e.g., "High fever"), Diagnosis (e.g., "Malaria"), Treatment Plan (e.g., "IV fluids and antimalarials").
  6. Click Save.
What you should see Success message. A new admission appears in the list with a number like A000001 and status "Pending Bed Assignment".
3.2 Doctor only sees their own patients Doctor
  1. Log in as a second doctor account (if available).
  2. Go to My Patients.
What you should see Only the patients admitted by this doctor appear. Jane Wanjiku (admitted by the first doctor) should NOT be visible here.
3.3 Create a prescription Doctor
  1. Log in as Doctor.
  2. Go to PrescriptionsNew Prescription.
  3. Select the patient and her admission.
  4. Add a medicine item:
    • Select a medication (e.g., "Paracetamol")
    • Quantity: 10
    • Dosage: 500mg
    • Frequency: Twice daily
    • Duration: 5 days
  5. Click Submit.
What you should see Prescription created with number like RX000001 and status "Pending".
4 Assigning a Bed

Role: Nurse

4.1 Assign a bed to an admitted patient Nurse
  1. Log in as Nurse.
  2. Go to Bed AssignmentsAssign Bed.
  3. Select the admission for Jane Wanjiku.
  4. Select a Ward (e.g., "General Ward").
  5. Select an available bed (e.g., "B001").
  6. Click Save.
What you should see Success message. The admission status changes to "Admitted". Bed B001 is now marked as Occupied.
4.2 Occupied beds do not appear in the list Nurse
  1. Try assigning another patient to the same ward.
  2. Open the bed dropdown.
What you should see Bed B001 is not listed as an option because it is occupied. Only available beds appear.
5 Logging Patient Vitals

Role: Nurse

5.1 Record daily observations Nurse
  1. Log in as Nurse.
  2. Go to My Patients and open Jane Wanjiku's record.
  3. Click Add Observation.
  4. Fill in: Temperature: 37.0, Blood Pressure: 120/80, Pulse: 72, Oxygen Saturation: 98.
  5. Click Save.
What you should see The observation is saved and appears in the patient's observation history with today's date and time.
6 Medicine & Inventory Requests

Workflow: Nurse → Nurse-in-Charge → Pharmacist

6.1 Nurse creates a medicine request Nurse
  1. Log in as Nurse.
  2. Go to Medicine RequestsNew Request.
  3. Select Jane Wanjiku's admission.
  4. Select medication: Paracetamol, Quantity: 5, Reason: Patient has headache.
  5. Click Submit.
What you should see Request created with status "Pending".
6.2 Nurse-in-Charge approves the request Nurse-in-Charge
  1. Log in as Nurse-in-Charge.
  2. Go to Medicine Requests.
  3. Find the pending request for Jane Wanjiku.
  4. Click View, then click Approve.
  5. Optionally add a note, then confirm.
What you should see Request status changes to "Approved". The nurse's request list also shows it as approved.
6.3 Nurse-in-Charge rejects a request Nurse-in-Charge
  1. Create another medicine request as Nurse.
  2. Log in as Nurse-in-Charge, find the new pending request.
  3. Click Reject, enter reason: Already dispensed today.
  4. Confirm.
What you should see Status changes to "Rejected". The rejection reason is visible when the nurse opens the request.
6.4 Pharmacist dispenses an approved request Pharmacist
  1. Log in as Pharmacist.
  2. Go to Medicine Requests.
  3. Find the Approved request for Paracetamol.
  4. Click View, then click Dispense.
  5. Confirm.
What you should see
  • Request status → "Dispensed"
  • A billing record is created for Jane Wanjiku
  • The stock quantity of Paracetamol decreases by 5
6.5 Rejected requests are not shown to pharmacist Pharmacist
  1. Log in as Pharmacist.
  2. Go to Medicine Requests.
What you should see The rejected request from Test 6.3 does not appear in the pharmacist's list.
7 Prescription Approval & Dispensing

Workflow: Nurse-in-Charge → Pharmacist

7.1 Approve a prescription Nurse-in-Charge
  1. Log in as Nurse-in-Charge.
  2. Go to Prescriptions.
  3. Find the prescription RX000001 (status: Pending).
  4. Click Approve.
What you should see Status changes to "Approved".
7.2 Pharmacist dispenses a prescription Pharmacist
  1. Log in as Pharmacist.
  2. Go to Prescriptions.
  3. Find the approved prescription.
  4. Click Dispense.
What you should see
  • Prescription status → "Dispensed"
  • Medicine stock reduced
  • Billing entry created for the patient
8 Patient Billing & Payment

Role: Admin or Pharmacist

8.1 View patient billing Admin
  1. Log in as Admin.
  2. Go to Patient Billing.
What you should see A list of billing records. Jane Wanjiku's entries (from dispensed medicines) should appear here with status "Pending".
8.2 Initiate M-Pesa payment Admin
  1. Open a pending billing for Jane Wanjiku.
  2. Click Initiate Payment.
  3. Enter a test phone number (e.g., 254712345678).
  4. Confirm.
What you should see A message confirming the payment request was sent. The billing record shows a reference/tracking number from the payment provider.
8.3 Check payment status Admin
  1. On the same billing record, click Check Payment Status.
What you should see The status updates based on the payment provider's response — either "Paid" or a pending/failure message.
9 Inventory Management

Workflow: Pharmacist reports → Admin approves

9.1 Report damaged inventory Pharmacist
  1. Log in as Pharmacist.
  2. Go to InventoryReport Damage.
  3. Select item: Gauze, Quantity: 3, Reason: Torn packaging.
  4. Click Submit.
What you should see Damage report created with status "Pending". Visible in "My Reports".
9.2 Admin approves damage report Admin
  1. Log in as Admin.
  2. Go to InventoryDamage Reports.
  3. Find the Gauze damage report.
  4. Click Approve, add optional notes, confirm.
What you should see Report status → "Approved". Gauze stock quantity reduced by 3.
9.3 Add stock to an inventory item Pharmacist
  1. Log in as Pharmacist (or Admin).
  2. Go to Inventory Items, open Paracetamol.
  3. Click Add Stock, enter quantity: 100, confirm.
What you should see Paracetamol's stock increases by 100.
9.4 View expired items Pharmacist
  1. Log in as Pharmacist.
  2. Go to InventoryExpired Items.
What you should see Any items whose expiry date has passed are listed here.
10 SHA Insurance (Kenya Health Authority)

Role: Admin

10.1 Link a patient to SHA Admin
  1. Log in as Admin.
  2. Open Jane Wanjiku's patient record.
  3. Find the SHA section, enter:
    • CR ID: CR123456
    • SHA Number: SHA001
    • Scheme: SHIF
  4. Save.
What you should see Patient record updated with SHA details.
10.2 Check patient SHA eligibility Admin
  1. On Jane Wanjiku's patient page, click Check SHA Eligibility.
What you should see A response from the SHA system showing whether the patient is eligible. The date of the check is recorded.
10.3 Submit a SHA claim Admin
  1. Go to SHA Claims.
  2. Find a billing record for Jane Wanjiku that has a SHA service code.
  3. Click Submit Claim.
What you should see Claim submitted. Status changes to "Submitted". A claim reference number appears.
10.4 Check claim status Admin
  1. Open a submitted claim.
  2. Click Check Status.
What you should see Status updates based on the SHA response (e.g., Approved, In Review, Rejected).
11 Notifications
11.1 Nurse gets notified when request is approved Nurse & Nurse-in-Charge
  1. While logged in as Nurse, keep the browser open.
  2. In a second browser tab (or another browser), log in as Nurse-in-Charge and approve a pending request.
  3. Switch back to the Nurse's tab.
What you should see A notification badge (number) appears on the bell icon in the top bar. Clicking it shows the approval message.
11.2 Mark a notification as read Nurse
  1. Log in as Nurse.
  2. Click the notification bell.
  3. Click on an unread notification.
What you should see The notification is marked as read. The unread count on the bell decreases.
11.3 Mark all notifications as read Any Role
  1. With several unread notifications, click the bell.
  2. Click Mark all as read.
What you should see All notifications are cleared. The badge on the bell disappears or shows 0.
12 Admin: Roles & Users
12.1 View all user-role assignments Admin
  1. Log in as Admin.
  2. Go to User Roles.
What you should see A list of all users and their assigned roles.
12.2 Assign a role to a user Admin
  1. Go to User RolesAssign Role.
  2. Select a user.
  3. Select role: Doctor.
  4. Save.
What you should see The user now appears in the list with the Doctor role.
12.3 Edit a user's role Admin
  1. Find any user in the user-role list.
  2. Click Edit.
  3. Change their role.
  4. Save.
What you should see Role updated successfully. That user's access changes immediately on next login.
13 What Can Go Wrong — Things to Look For

Watch for these situations throughout all tests.

Situation What should happen
You submit a form with blank required fields A red error message appears next to the empty field. The form does not save.
You try to access another role's page by typing the URL You are blocked — either redirected or shown an error.
You try to assign a bed that is already taken The occupied bed does not appear in the dropdown at all.
A pharmacist tries to dispense a request that was rejected The rejected request is not visible in their list.
You dispense more medicine than is in stock An error message stops the dispensing — it does not go negative.
A patient is deleted They no longer appear in new forms, but old billing history still shows their name.
14 Profile Settings

Role: Any

14.1 Update your name Any Role
  1. Click your name or profile icon (top-right corner).
  2. Go to Profile.
  3. Change the name, click Save.
What you should see Name updated. Success message shown.
14.2 Change your password Any Role
  1. Go to Profile.
  2. Enter current password, new password, and confirm new password.
  3. Click Save.
What you should see Password updated. Success message shown. You can log in with the new password.
14.3 Old password cannot be reused to log in Any Role
  1. After changing your password, log out.
  2. Try logging in with the old password.
What you should see Login fails with an error message.
15 Maternity Ward

Role: Maternity Nurse (or Admin). Before testing, ensure at least one ward with type = Maternity and available beds exists in Admin → Ward Management.

15.1 Sidebar shows maternity links only Maternity Nurse
  1. Log in as Maternity Nurse.
  2. Check the sidebar.
What you should see Two links: Maternity Ward (patient list) and Register Patient. Standard nurse or admin links should not appear.
15.2 Register a new maternity patient Maternity Nurse
  1. Click Register Patient.
  2. Select New Patient.
  3. Fill in: First Name: Fatuma, Last Name: Ali, DOB: 15/03/1995, Phone: 0711222333, Emergency Contact: Mohammed Ali, Emergency Phone: 0711444555.
  4. Select a Maternity Ward and a bed (bed list loads automatically after selecting the ward).
  5. Set Admission Date to today.
  6. Fill Reason for Admission: Labour pains.
  7. Enter Pregnancy Details: Gestational Age: 38, Gravida: 2, Para: 1.
  8. Click Submit.
What you should see Success message. Redirected to the maternity list. Patient appears with an inpatient number in the format IP000001 and status Admitted.
15.3 New/Existing patient toggle works Maternity Nurse
  1. Open Register Patient.
  2. Click Existing Patient radio button.
  3. Confirm the existing-patient dropdown appears and the name/DOB fields hide.
  4. Click New Patient radio button.
What you should see Toggling between the two options shows/hides the correct fields instantly without a page reload.
15.4 Admit an existing patient Maternity Nurse
  1. Open Register Patient, select Existing Patient.
  2. Choose any active female patient from the dropdown.
  3. Complete ward, bed, and admission details, then submit.
What you should see Admission created. No duplicate patient record created. The existing patient's type is updated to Inpatient.
15.5 High-risk flag displays a warning banner Maternity Nurse
  1. Register a new maternity patient and tick High Risk.
  2. Enter risk factors: Gestational diabetes, previous C-section.
  3. Submit, then open the patient's record from the list.
What you should see A red warning banner at the top of the show page: "HIGH-RISK PREGNANCY" with the risk factors listed. Non-high-risk patients show no banner.
15.6 Bed is marked Occupied after admission Admin
  1. Log in as Admin.
  2. Go to Ward Management and open the Maternity ward.
What you should see The bed selected during admission is listed as Occupied. The ward's available bed count is reduced by 1.
15.7 Validation — required fields cannot be skipped Maternity Nurse
  1. Open Register Patient.
  2. Leave First Name blank (New Patient selected). Fill all other fields.
  3. Click Submit.
What you should see A validation error next to First Name. The form does not submit.
16 Mortuary Module

Roles involved: Admin (to mark a patient deceased) → Mortuary Attendant (to manage the record). This test requires an existing active admission.

16.1 Admin marks a patient deceased Admin
  1. Log in as Admin.
  2. Go to Admissions and open any active admission.
  3. Click Mark Deceased.
  4. Enter Cause of Death: Cardiac arrest.
  5. Confirm.
What you should see Admission status changes to Deceased. The bed is freed (marked Available). A pending mortuary transfer is created automatically.
16.2 Mortuary Attendant sees the pending transfer Mortuary Attendant
  1. Log in as Mortuary Attendant.
  2. Go to Mortuary Records (sidebar link).
What you should see The deceased patient appears in the Incoming Transfers — Awaiting Acceptance section (yellow background). Active and discharged sections may be empty.
16.3 Accept the transfer Mortuary Attendant
  1. Click Accept Transfer → on the pending record.
  2. Fill in: Arrival Date/Time (today), Daily Storage Rate: 500, Storage Location: Cold Room A, Storage Unit: Drawer 1.
  3. Click Confirm Acceptance.
What you should see Record moves to the Currently in Facility (blue) section on the index. The show page now shows the Add Charge form and the Release Body button instead of the acceptance form. A Day 1 storage charge of KES 500.00 appears in the mortuary ledger.
16.4 Add a manual charge Mortuary Attendant
  1. On the active record's show page, scroll to Add Charge.
  2. Set Type: Preservation, Description: Embalming service, Amount: 2500, Quantity: 1.
  3. Click Add Charge.
What you should see New line appears in the Mortuary Ledger with a purple "Preservation" badge. Grand total updates to include the new charge.
16.5 Automatic daily storage charges Admin / Server
  1. In the terminal, run: php artisan mortuary:charge-storage
  2. Reload the mortuary record's show page.
What you should see If the record's arrival time is more than 24 hours ago, additional day-charges appear in the ledger (Day 2, Day 3, etc.). Running the command again does not add duplicate charges.
16.6 Release body and finalise bill Mortuary Attendant
  1. On the active record's show page, click Release Body & Finalise Bill.
  2. Confirm the dialog.
What you should see Record moves to the Recently Released section. All ledger items are marked ✓ Merged. Log in as Admin and check Patient Billing — mortuary charges for this patient now appear with item_type = mortuary and status Pending.
16.7 Cannot accept or discharge an already-active / discharged record Mortuary Attendant
  1. Open a discharged mortuary record.
  2. Try to access the discharge route directly in the browser URL (e.g., .../mortuary/records/1/discharge).
What you should see A 422 error or redirect — not a crash. The system prevents double-processing.
17 Store Requisition — Collector Assignment

Workflow: Admin (Support Staff setup) → Nurse (create request) → Nurse-in-Charge (approve) → Pharmacist (mark ready) → Nurse (assign collector).

17.1 Admin adds a Support Staff member Admin
  1. Log in as Admin.
  2. Go to Support Staff (sidebar).
  3. Click Add Staff.
  4. Enter Name: Joseph Kariuki, Phone: 0722111222, Department: Stores, Designation: Porter. Leave Employee ID blank.
  5. Save.
What you should see Staff member added with an auto-generated employee ID such as SS0001.
17.2 Edit and delete a Support Staff member Admin
  1. Open the staff member just created.
  2. Click Edit, change the phone to 0733444555, save.
  3. Confirm the new phone is displayed.
  4. Optionally, click Delete on a different staff member to confirm deletion works.
What you should see Edit saves correctly. Deletion removes the record from the list without crashing the page.
17.3 Assign collector using registered Support Staff Nurse, Nurse-in-Charge, Pharmacist
  1. As Nurse, create an inventory request.
  2. As Nurse-in-Charge, approve it.
  3. As Pharmacist, mark it Ready for Pickup.
  4. As Nurse, open the request detail page.
  5. In the Assign Collector section, select Support Staff (registered).
  6. Choose Joseph Kariuki (SS0001 — Porter) from the dropdown.
  7. Click Assign Collector.
What you should see Success message. The request page shows the collector's name, phone, and the timestamp of assignment. The nurse receives an in-app notification confirming the assignment.
17.4 Assign collector using manual entry Nurse
  1. On a Ready inventory request, open the Assign Collector section.
  2. Select Manual Entry.
  3. Enter Name: Ali Hassan, Phone: 0744999888.
  4. Click Assign Collector.
What you should see Collector saved with the manually entered name and phone. The registered-staff dropdown is not required and is hidden.
17.5 Reassign to a different collector Nurse
  1. On a request with a collector already assigned, submit the form again with a different name.
What you should see The new collector details replace the previous assignment. No error about "already assigned."
17.6 Assign Collector section does not appear on pending/approved requests Nurse
  1. Open an inventory request that is still in Pending or Approved status.
What you should see The Assign Collector section is not visible. It only appears once the pharmacist has marked the request as Ready for Pickup.
Quick Reference — Who Can Do What
Action Admin Doctor Nurse Nurse-in-Charge Pharmacist Receptionist Maternity Nurse Mortuary Attendant
Register patientsYesYes
Create admissionsYesYes
Assign bedsYesYesYes
Log vitalsYes
Create medicine requestsYes
Approve / reject requestsYes
Assign collector to requestYes
Dispense medicinesYes
Create prescriptionsYes
Approve prescriptionsYes
Manage inventoryYesYes
Billing & paymentsYesYesYes
SHA claimsYesYes
Manage users & rolesYes
Manage Support StaffYes
Maternity admissionsYesYes
Mark patient deceasedYes
Mortuary records & chargesYesYes