{% extends 'base.html' %} {% block content %}
Total Appointments{{ stats.total_appointments }}
Upcoming{{ stats.upcoming }}
Today's Queue{{ stats.today_queue }}
Pending Confirmations{{ stats.pending_confirmations }}
Completed{{ stats.completed }}
No Show{{ stats.no_show }}
Active Slots{{ stats.active_slots }}
Leave Blocks{{ stats.active_leave_blocks }}

Notifications

Stay updated on new bookings, confirmation needs, schedule changes, and appointment outcomes.

{% if notifications %}
{% for notification in notifications %}
{{ notification.title }} {{ notification.message }} {{ notification.created_at.strftime('%Y-%m-%d %H:%M') }}
{% if not notification.is_read %}
{% else %} Read {% endif %}
{% endfor %}
{% else %}

No notifications yet.

{% endif %}

Today's Queue

See your next patient and the current day’s consultation lineup.

{% if next_patient %}
Next patient {{ patient_lookup.get(next_patient.patient_id, 'Patient') }} · {{ next_patient.scheduled_time.strftime('%H:%M') }} Reason: {{ next_patient.reason or 'General consultation' }}
{% endif %} {% if today_queue %}
{% for appointment in today_queue %}
{{ patient_lookup.get(appointment.patient_id, 'Patient') }} {{ appointment.scheduled_time.strftime('%Y-%m-%d %H:%M') }} · {{ appointment.duration_minutes }} mins {{ appointment.reason or 'General consultation' }}
{{ 'Confirmed' if appointment.is_confirmed else 'Pending confirmation' }} {{ appointment.status.value.replace('_', ' ') }}
{% endfor %}
{% else %}

No appointments scheduled for today.

{% endif %}

Leave / Unavailable Days

Block off conferences, leave days, or unavailable periods so patients cannot book those windows.

{% for leave in leave_blocks %}
{{ leave.start_date.strftime('%Y-%m-%d %H:%M') }} → {{ leave.end_date.strftime('%Y-%m-%d %H:%M') }} {{ leave.reason or 'No reason supplied' }}
{{ 'Blocking bookings' if leave.is_active else 'Inactive' }}
{% else %}

No leave periods added yet.

{% endfor %}

Create Availability Slot

Publish your normal clinic hours and session length.

My Availability

{% for slot in slots %}
{{ day_names[slot.day_of_week] }}
{{ slot.start_time }} - {{ slot.end_time }} · {{ slot.duration_minutes }} min
{{ 'Active' if slot.is_active else 'Inactive' }}
{% else %}

No availability slots added yet.

{% endfor %}

Assigned Appointments

Confirm new bookings, review patient history, and capture diagnosis, prescriptions, and follow-up details.

{% for appointment in appointments %} {% set summary = patient_summaries.get(appointment.patient_id) %}
#{{ appointment.id }} · {{ patient_lookup.get(appointment.patient_id, 'Patient') }} {{ appointment.scheduled_time.strftime('%Y-%m-%d %H:%M') }} · {{ appointment.duration_minutes }} mins Reason: {{ appointment.reason or 'General consultation' }}
{{ 'Confirmed' if appointment.is_confirmed else 'Pending confirmation' }} {{ appointment.status.value.replace('_', ' ') }}
{% if summary %}
Patient medical summary Completed visits: {{ summary.completed_visits }} {% if summary.last_visit %} Last visit: {{ summary.last_visit.strftime('%Y-%m-%d %H:%M') }} {% endif %} {% if summary.last_diagnosis %} Last diagnosis: {{ summary.last_diagnosis }} {% endif %} {% if summary.last_notes %} Recent note: {{ summary.last_notes }} {% endif %}
{% endif %} {% if appointment.status.value == 'scheduled' and not appointment.is_confirmed %}
{% endif %}
{% else %}

No appointments assigned yet.

{% endfor %}
{% endblock %}