Hospital System — QA Testing Guide
A step-by-step manual for testing all features of the hospital management platform. No technical knowledge required.
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.
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.
Log in using the email and password below. Every account uses the same password.
| Role | Full Name | 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 |
- Go to the app in your browser.
- Enter a valid email and password from the table above.
- Click Log in.
- Go to the login page.
- Enter a valid email but type a wrong password.
- Click Log in.
- Log in as the Nurse.
- In the browser address bar, manually type the admin URL (e.g.,
.../admin/dashboard) and press Enter.
- Find the logout button (usually in the top-right menu or sidebar).
- Click Log out.
Role: Receptionist (or Admin)
- Log in as Receptionist.
- In the sidebar, click Patients then Register Patient (or click New Patient).
- Fill in all the fields:
- First Name:
Jane - Last Name:
Wanjiku - Date of Birth:
01/01/1990 - Gender:
Female - Phone:
0712345678 - Patient Type:
Inpatient
- First Name:
- Click Save or Register.
- Register a second patient (any name, fill required fields).
- Check the patient list.
- Open the Register Patient form.
- Leave First Name empty. Fill everything else.
- Click Save.
- Open any patient from the list.
- Click Edit.
- Change the phone number to
0799999999. - Click Save.
Role: Doctor
- Log in as Doctor.
- Click Admissions → New Admission.
- Select patient
Jane Wanjiku. - Set today's date as Admission Date.
- Fill in: Reason for Admission (e.g., "High fever"), Diagnosis (e.g., "Malaria"), Treatment Plan (e.g., "IV fluids and antimalarials").
- Click Save.
- Log in as a second doctor account (if available).
- Go to My Patients.
- Log in as Doctor.
- Go to Prescriptions → New Prescription.
- Select the patient and her admission.
- Add a medicine item:
- Select a medication (e.g., "Paracetamol")
- Quantity:
10 - Dosage:
500mg - Frequency:
Twice daily - Duration:
5 days
- Click Submit.
Role: Nurse
- Log in as Nurse.
- Go to Bed Assignments → Assign Bed.
- Select the admission for Jane Wanjiku.
- Select a Ward (e.g., "General Ward").
- Select an available bed (e.g., "B001").
- Click Save.
- Try assigning another patient to the same ward.
- Open the bed dropdown.
Role: Nurse
- Log in as Nurse.
- Go to My Patients and open Jane Wanjiku's record.
- Click Add Observation.
- Fill in: Temperature:
37.0, Blood Pressure:120/80, Pulse:72, Oxygen Saturation:98. - Click Save.
Workflow: Nurse → Nurse-in-Charge → Pharmacist
- Log in as Nurse.
- Go to Medicine Requests → New Request.
- Select Jane Wanjiku's admission.
- Select medication:
Paracetamol, Quantity:5, Reason:Patient has headache. - Click Submit.
- Log in as Nurse-in-Charge.
- Go to Medicine Requests.
- Find the pending request for Jane Wanjiku.
- Click View, then click Approve.
- Optionally add a note, then confirm.
- Create another medicine request as Nurse.
- Log in as Nurse-in-Charge, find the new pending request.
- Click Reject, enter reason:
Already dispensed today. - Confirm.
- Log in as Pharmacist.
- Go to Medicine Requests.
- Find the Approved request for Paracetamol.
- Click View, then click Dispense.
- Confirm.
- Request status → "Dispensed"
- A billing record is created for Jane Wanjiku
- The stock quantity of Paracetamol decreases by 5
- Log in as Pharmacist.
- Go to Medicine Requests.
Workflow: Nurse-in-Charge → Pharmacist
- Log in as Nurse-in-Charge.
- Go to Prescriptions.
- Find the prescription RX000001 (status: Pending).
- Click Approve.
- Log in as Pharmacist.
- Go to Prescriptions.
- Find the approved prescription.
- Click Dispense.
- Prescription status → "Dispensed"
- Medicine stock reduced
- Billing entry created for the patient
Role: Admin or Pharmacist
- Log in as Admin.
- Go to Patient Billing.
- Open a pending billing for Jane Wanjiku.
- Click Initiate Payment.
- Enter a test phone number (e.g.,
254712345678). - Confirm.
- On the same billing record, click Check Payment Status.
Workflow: Pharmacist reports → Admin approves
- Log in as Pharmacist.
- Go to Inventory → Report Damage.
- Select item:
Gauze, Quantity:3, Reason:Torn packaging. - Click Submit.
- Log in as Admin.
- Go to Inventory → Damage Reports.
- Find the Gauze damage report.
- Click Approve, add optional notes, confirm.
- Log in as Pharmacist (or Admin).
- Go to Inventory Items, open Paracetamol.
- Click Add Stock, enter quantity:
100, confirm.
- Log in as Pharmacist.
- Go to Inventory → Expired Items.
Role: Admin
- Log in as Admin.
- Open Jane Wanjiku's patient record.
- Find the SHA section, enter:
- CR ID:
CR123456 - SHA Number:
SHA001 - Scheme:
SHIF
- CR ID:
- Save.
- On Jane Wanjiku's patient page, click Check SHA Eligibility.
- Go to SHA Claims.
- Find a billing record for Jane Wanjiku that has a SHA service code.
- Click Submit Claim.
- Open a submitted claim.
- Click Check Status.
- While logged in as Nurse, keep the browser open.
- In a second browser tab (or another browser), log in as Nurse-in-Charge and approve a pending request.
- Switch back to the Nurse's tab.
- Log in as Nurse.
- Click the notification bell.
- Click on an unread notification.
- With several unread notifications, click the bell.
- Click Mark all as read.
- Log in as Admin.
- Go to User Roles.
- Go to User Roles → Assign Role.
- Select a user.
- Select role:
Doctor. - Save.
- Find any user in the user-role list.
- Click Edit.
- Change their role.
- Save.
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. |
Role: Any
- Click your name or profile icon (top-right corner).
- Go to Profile.
- Change the name, click Save.
- Go to Profile.
- Enter current password, new password, and confirm new password.
- Click Save.
- After changing your password, log out.
- Try logging in with the old password.
Role: Maternity Nurse (or Admin). Before testing, ensure at least one ward with type = Maternity and available beds exists in Admin → Ward Management.
- Log in as Maternity Nurse.
- Check the sidebar.
- Click Register Patient.
- Select New Patient.
- Fill in: First Name:
Fatuma, Last Name:Ali, DOB:15/03/1995, Phone:0711222333, Emergency Contact:Mohammed Ali, Emergency Phone:0711444555. - Select a Maternity Ward and a bed (bed list loads automatically after selecting the ward).
- Set Admission Date to today.
- Fill Reason for Admission:
Labour pains. - Enter Pregnancy Details: Gestational Age:
38, Gravida:2, Para:1. - Click Submit.
- Open Register Patient.
- Click Existing Patient radio button.
- Confirm the existing-patient dropdown appears and the name/DOB fields hide.
- Click New Patient radio button.
- Open Register Patient, select Existing Patient.
- Choose any active female patient from the dropdown.
- Complete ward, bed, and admission details, then submit.
- Register a new maternity patient and tick High Risk.
- Enter risk factors:
Gestational diabetes, previous C-section. - Submit, then open the patient's record from the list.
- Log in as Admin.
- Go to Ward Management and open the Maternity ward.
- Open Register Patient.
- Leave First Name blank (New Patient selected). Fill all other fields.
- Click Submit.
Roles involved: Admin (to mark a patient deceased) → Mortuary Attendant (to manage the record). This test requires an existing active admission.
- Log in as Admin.
- Go to Admissions and open any active admission.
- Click Mark Deceased.
- Enter Cause of Death:
Cardiac arrest. - Confirm.
- Log in as Mortuary Attendant.
- Go to Mortuary Records (sidebar link).
- Click Accept Transfer → on the pending record.
- Fill in: Arrival Date/Time (today), Daily Storage Rate:
500, Storage Location:Cold Room A, Storage Unit:Drawer 1. - Click Confirm Acceptance.
- On the active record's show page, scroll to Add Charge.
- Set Type:
Preservation, Description:Embalming service, Amount:2500, Quantity:1. - Click Add Charge.
- In the terminal, run:
php artisan mortuary:charge-storage - Reload the mortuary record's show page.
- On the active record's show page, click Release Body & Finalise Bill.
- Confirm the dialog.
item_type = mortuary and status Pending.
- Open a discharged mortuary record.
- Try to access the discharge route directly in the browser URL (e.g.,
.../mortuary/records/1/discharge).
Workflow: Admin (Support Staff setup) → Nurse (create request) → Nurse-in-Charge (approve) → Pharmacist (mark ready) → Nurse (assign collector).
- Log in as Admin.
- Go to Support Staff (sidebar).
- Click Add Staff.
- Enter Name:
Joseph Kariuki, Phone:0722111222, Department:Stores, Designation:Porter. Leave Employee ID blank. - Save.
- Open the staff member just created.
- Click Edit, change the phone to
0733444555, save. - Confirm the new phone is displayed.
- Optionally, click Delete on a different staff member to confirm deletion works.
- As Nurse, create an inventory request.
- As Nurse-in-Charge, approve it.
- As Pharmacist, mark it Ready for Pickup.
- As Nurse, open the request detail page.
- In the Assign Collector section, select Support Staff (registered).
- Choose
Joseph Kariuki (SS0001 — Porter)from the dropdown. - Click Assign Collector.
- On a Ready inventory request, open the Assign Collector section.
- Select Manual Entry.
- Enter Name:
Ali Hassan, Phone:0744999888. - Click Assign Collector.
- On a request with a collector already assigned, submit the form again with a different name.
- Open an inventory request that is still in Pending or Approved status.
| Action | Admin | Doctor | Nurse | Nurse-in-Charge | Pharmacist | Receptionist | Maternity Nurse | Mortuary Attendant |
|---|---|---|---|---|---|---|---|---|
| Register patients | Yes | — | — | — | — | Yes | — | — |
| Create admissions | Yes | Yes | — | — | — | — | — | — |
| Assign beds | Yes | — | Yes | Yes | — | — | — | — |
| Log vitals | — | — | Yes | — | — | — | — | — |
| Create medicine requests | — | — | Yes | — | — | — | — | — |
| Approve / reject requests | — | — | — | Yes | — | — | — | — |
| Assign collector to request | — | — | Yes | — | — | — | — | — |
| Dispense medicines | — | — | — | — | Yes | — | — | — |
| Create prescriptions | — | Yes | — | — | — | — | — | — |
| Approve prescriptions | — | — | — | Yes | — | — | — | — |
| Manage inventory | Yes | — | — | — | Yes | — | — | — |
| Billing & payments | Yes | — | — | Yes | Yes | — | — | — |
| SHA claims | Yes | — | — | — | Yes | — | — | — |
| Manage users & roles | Yes | — | — | — | — | — | — | — |
| Manage Support Staff | Yes | — | — | — | — | — | — | — |
| Maternity admissions | Yes | — | — | — | — | — | Yes | — |
| Mark patient deceased | Yes | — | — | — | — | — | — | — |
| Mortuary records & charges | Yes | — | — | — | — | — | — | Yes |