Booking Flow
Request → Review → Payment → Visit
Patient browses public booking page
Selects doctor, views available slots, submits appointment request with contact details and reason for visit.
Slot lock created (24h)
The selected time slot is soft-locked to prevent concurrent booking conflicts during the review window.
Staff reviews the request
Approve (extends lock 24h for payment), reschedule (releases lock, proposes new time), or decline.
Patient receives notification
Approved → payment prompt (if fee > $0) or auto-confirm (if free). Rescheduled → accept/decline.
Payment collected via Stripe
Patient completes secure card payment. Stripe webhook fires → appointment status updated → visit created.
Visit appears in doctor's schedule
A new visit is created in the doctor's schedule with patient details. Ready to record and document.
Scheduling capabilities
Public Booking Pages
Organization and per-doctor booking pages accessible without login — share a link, patients self-book
Weekly Availability Config
Set daily hours, appointment duration, and buffer time — plus date-specific overrides for holidays or extra slots
Soft Slot Locking
24-hour concurrent slot locks prevent double-booking during the review-payment window
Request-Review Workflow
Staff review each request before confirmation — approve, reschedule, or decline with patient notification
Stripe Payment Integration
Collect appointment fees via Stripe. Zero-fee appointments auto-confirm. Webhook-driven status sync.
Expiration Handling
Stale pending requests expire automatically after 24 hours via scheduled Cloud Function
FAQ
Patient scheduling — answered.
Can patients self-book appointments without staff approval?
Patients initiate a booking request through the public booking page, but the request goes through a staff review step before being confirmed. The workflow is: Patient selects slot → request created (status: pending) → staff reviews and approves/reschedules/declines → patient pays (if applicable) → visit is created. This prevents unvetted bookings from appearing in the doctor's schedule.
How does ELLEXMED prevent double-booking?
When a patient submits a booking request for a specific time slot, a 24-hour soft lock is placed on that slot. Any subsequent booking request for the same slot returns a conflict error. The lock is released automatically if the request expires, is declined, or the patient cancels. This prevents concurrent booking collisions during the review-payment window.
Does ELLEXMED support appointment payment collection?
Yes. ELLEXMED integrates with Stripe for per-appointment payment collection. Organizations set their appointment fee (in cents) in their public profile. For paid appointments, after staff approval the patient receives a payment prompt — a Stripe PaymentIntent is created for secure card payment. Zero-fee appointments are auto-confirmed without payment. Payment status and appointment status are kept in sync via Stripe webhooks.
How do doctors configure their availability?
Doctors configure a weekly default schedule (available hours per day of the week, appointment duration in minutes) through the ELLEXMED availability dashboard. They can also set date-specific overrides — for example, blocking out a holiday or adding extra slots on a specific date. The public booking calendar reflects the configured availability in real time.
What happens if a doctor needs to reschedule a confirmed appointment?
Staff can set an approved appointment to 'rescheduled' status and propose a new time. The patient is notified and can accept or decline the new slot. If the patient accepts, the appointment moves back to approved status with the new time. If declined, the slot lock is released and the booking returns to pending or can be cancelled.
Is there a public-facing booking page for each doctor?
Yes. Each organization can have a public profile page (accessible at a custom URL slug, e.g. ellexmed.com/book/your-clinic) and each doctor within the organization has their own booking page. Patients can browse available doctors, view their specialty, and select appointment slots directly from the public page — no account required to initiate a request.