Skip to main content

Scheduling Service — Security Model

Status: populated Owner: TBD Last updated: 2026-04-17 Companion: Service Template · 13 security

1. RBAC/ABAC Matrix

RoleBook AppointmentCancelRescheduleManage SchedulesManage SlotsView WaitlistDouble-booking Override
FRONT_DESK
SCHEDULER
NURSE
PHYSICIAN
ADMIN
patientSelf-bookOwn cancel
VIEWER✓ (read)

ABAC additions:

  • Double-booking override (allowDoubleBooking=true) requires SCHEDULER or ADMIN role; audit records override actor.
  • Patient self-book (POST /appointments/self) requires JWT patientId claim; PATIENT_ID_CLAIM_REQUIRED error if missing.

2. Encryption Classes

DataClassificationEncryption
Appointment records (patientId, reason, providerId)PHI Class IIAES-256-GCM at rest (PG encrypted volume)
Reminder message contentPHI Class IITLS in transit; no PHI in reminder body by default
NATS event payloadsPHI Class IITLS in transit; minimal PII (IDs only)
Audit eventsPHI Class IIAppend-only; encrypted in audit-service

3. Audit Events

ActionAudit code
Appointment createdAPPOINTMENT_CREATED
Appointment cancelledAPPOINTMENT_CANCELLED
Appointment rescheduledAPPOINTMENT_RESCHEDULED
Check-inAPPOINTMENT_CHECKIN
No-show recordedAPPOINTMENT_NOSHOW
Double-booking overrideAPPOINTMENT_DOUBLE_BOOKING_OVERRIDE
Schedule created/updatedSCHEDULE_MODIFIED
Waitlist fulfilledWAITLIST_FULFILLED

All audit events include tenantId, actorId, patientId, appointmentId, action, timestamp.

4. GDPR Participation

RightImplementation
Right to accessAll appointments for a patient available via GET /appointments?patientId=
Right to erasureLogical deletion only; physical purge via data governance workflow
Data minimizationReminders contain only appointment date/time and facility; no clinical reason by default
Consent for remindersConsent flags from registration-service honored before dispatching SMS/email

5. Module Entitlement

All routes guarded by ModuleEntitlementGuard for ehr.scheduling. 403 with stable module error code on missing license.