1Business context
MediCare+ books doctor appointments. The business goal is filling doctors' calendars without double-booking: availability by day and slot, closed Sundays, new vs existing patients, insurance details and self-service rescheduling.
Pick a specialty, filter doctors, choose a day (Sundays closed) and a free time slot, fill new or existing patient details, then reschedule or cancel.
2Users & roles
- 👤 Patient — finds a doctor, books, reschedules or cancels
- 👤 Existing patient (P-1001) — details prefilled by lookup
3Modules & screens
| Screen | Route | What it does |
|---|---|---|
| Find a doctor | /apps/clinic | Specialty, gender, fee and availability filters, sort by fee |
| Doctor profile | /apps/clinic/doctor/[id] | In-clinic or video, day chips (Sundays closed), time slots |
| Patient details | /apps/clinic/details | New or existing patient, insurance fields, consent |
| Confirmation | /apps/clinic/confirmation | Appointment id (APT-…) and type |
| My appointments | /apps/clinic/appointments | Reschedule and cancel |
4Main end-to-end journey
Book a video consultation
- Choose Cardiology and book the first doctor
- Choose Video
- Pick the first enabled day and first free slot
- Continue as a new patient with details and symptoms
- Accept consent and confirm
Expected: Appointment confirmed with an APT- id and type Video consult
5Business rules & validations
- Specialty & filtersBeginner
Toggle specialty-*, combine filter-gender, filter-fee and filter-available-today; assert doctor-count.
- Sort orderIntermediate
sort-doctors “Lowest fee” must order doctor-fee values ascending.
- Disabled datesIntermediate
Sunday chips in appointment-day are disabled; pick the first enabled day with :not([disabled]).
- Booked slotsIntermediate
Slots with data-available="false" are disabled; choose a free one and check slot-summary.
- Existing patient lookupIntermediate
patient-existing + P-1001 shows patient-found; any other ID shows patient-not-found.
- Conditional insurance fieldsBeginner
has-insurance reveals insurance-provider and policy-number, both validated.
- RescheduleAdvanced
Move an appointment in reschedule-modal and assert appointment-slot changed.
- CancelAdvanced
cancel-appt-<id> → confirm-cancel-appointment sets appointment-status to Cancelled.
6Test data & credentials
- URL
- /apps/clinic
- Existing patient
- P-1001
- Video consult
- 20% off
- Closed
- Sundays
7Glossary
- Video consult
- 20% cheaper than in-clinic
- Booked slot
- Unavailable slots are disabled
- P-1001
- The only existing patient ID that the lookup finds
8Watch-outs for automation
- ⚠️Pick the first enabled day with :not([disabled]) — dates depend on today
- ⚠️Insurance fields appear only when the checkbox is ticked
- ⚠️Rescheduling must change the displayed slot
9Suggested test strategy
1 · Smoke
3
P1 positive and end-to-end cases — run on every build.
2 · Regression
15
All cases, incl. 3 negative and 3 edge — run before release.
3 · End-to-end
3
Full user journeys — run nightly.
Start with these smoke cases
- MEDICARE-01 — Book an appointment
- MEDICARE-E2E-01 — Book a video consultation
- MEDICARE-E2E-02 — Reschedule then cancel