feat(treatment): bind an appointment to a chosen session, and free it on cancel
Two holes in how a course's later appointments were made.
The link from the unbooked queue carried nothing — `/admin/appointments/new`
with no parameters — so the secretary retyped the patient and the service, and
which case the appointment joined was inferred from the service they happened to
pick. A patient with two open courses had no way to say which one they meant,
and picking the wrong service silently opened a third case. (The suggestion link
did pass slot_start and resource_uuid, but the create page never read either.)
POST /api/v1/my/appointment now takes an optional treatment_session_uuid.
SessionBookingLink validates it — same tenant, still unbooked, case open, same
patient — and reserves that session. Confirm-time attachment steps aside when
the appointment already holds a session. The booking form states in words which
session, which course and which patient it is about to book, read from a new
GET /api/v1/treatment-session/{uuid}.
Nothing ever detached a session from its appointment, so a cancelled booking
left the session `booked` forever, and since findNextUnbooked requires
"has no appointment", it could never return to the queue. Cancellation and
no-show now release it back to `planned`. A finished session is history and is
left alone.
The system still never books the next appointment by itself — it only suggests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -452,7 +452,11 @@ function SlotSuggestions({ sessionUuid }: { sessionUuid: string }) {
|
||||
<button type="button" className="btn secondary sm" onClick={() => setOpen(true)}>
|
||||
پیشنهاد وقت
|
||||
</button>
|
||||
<Link to="/admin/appointments/new" className="btn primary sm">ثبت نوبت این جلسه</Link>
|
||||
{/* لینک باید جلسه را ببرد، وگرنه منشی بیمار و سرویس را دستی میزند و اتصال
|
||||
به حدسِ سرویس سپرده میشود. */}
|
||||
<Link to={`/admin/appointments/new?session=${sessionUuid}`} className="btn primary sm">
|
||||
ثبت نوبت این جلسه
|
||||
</Link>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -483,7 +487,7 @@ function SlotSuggestions({ sessionUuid }: { sessionUuid: string }) {
|
||||
{day.slots.slice(0, 6).map((slot) => (
|
||||
<Link
|
||||
key={slot.start}
|
||||
to={`/admin/appointments/new?slot_start=${slot.start}&resource_uuid=${data?.data?.resource_uuid ?? ''}`}
|
||||
to={`/admin/appointments/new?session=${sessionUuid}&date=${day.date}`}
|
||||
className="btn secondary sm"
|
||||
title={formatDateTime(slot.start)}
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user