L39 FINAL PROJECT - BRIEF D
When to send appointment reminder texts
AI use: AI allowed — keep a record. Your specification, your acceptance
criteria and your evaluation set are your own work, written before you
ask an assistant for any code.

SITUATION
Pinewood Physio (invented) is a three-room physiotherapy clinic. Missed
appointments cost it about one session a day. The clinic's policy:
clients may cancel free of charge up to 48 hours before an appointment.
Cancelling later than that, or not turning up, is charged.

The clinic's texting service will send a message at any time you give
it. But the clinic manager, Dee, has set house rules after complaints:
texts only go out between 09:00 and 18:00, and never on a Sunday.

Clients book by phone or online, sometimes weeks ahead and sometimes the
same week.

WHAT DEE WANTS
A function that takes an appointment's date and time and the moment it
was booked, and returns when the reminder text should be sent.

She says: "The reminder exists so people cancel in time to avoid the
charge, and so we can offer the slot to someone else. A reminder that
arrives after they can cancel for free is worse than useless: people
are furious when they get charged after we 'reminded' them. If there's
no good time to text, tell me and the front desk will phone."

A sample of next week's bookings is supplied in L39_D_appointments.csv
(columns: client, appointment, booked_at; times like 2026-11-11 14:30).

WHAT YOU PRODUCE (details in the L39 lesson)
1. A specification with acceptance criteria, checked against the
   self-approval checklist before you build.
2. An implementation (Python, standard library only).
3. An evaluation set: test cases written from your criteria before you
   read any generated code, including cases you expect to fail. Work out
   each expected time by hand, with a calendar open.
4. A verification record: what you ran, what failed, what you changed,
   and a hand check of every row of the supplied sample.
5. An AI-use record.
