arazzo: 1.0.1
info:
title: Canvas Medical Appointment Scheduling
summary: Locate a patient, find a practitioner's schedule, search for a free slot, then book and confirm an appointment.
description: >-
A FHIR scheduling flow against the Canvas FHIR R4 API, following the Argonaut
Scheduling pattern of Schedule -> Slot -> Appointment. The patient is located,
the practitioner's Schedule is found, a free Slot is searched for, an
Appointment is created against that slot, and the booked Appointment is read
back to confirm. Every step inlines its request so the flow is self-contained.
version: 1.0.0
x-realizes-capability-ids:
- BC-2800.10
- BC-2800.20
x-capability-derivation:
method: 'deterministic join: sourceDescriptions -> per-tag OpenAPI -> tag/capability edge. No classification at this step.'
min_confidence: 0.7
sources:
- capability_id: BC-2800.10
capability_name: Scheduling & Appointment Management
spec: canvas-medical-schedule-api-openapi.yml
confidence: 0.85
- capability_id: BC-2800.20
capability_name: Patient Registration Management
spec: canvas-medical-patient-api-openapi.yml
confidence: 0.75
model: Turbo EA Capabilities by Vincent Verdet — Turbo EA, https://github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0
sourceDescriptions:
- name: appointmentApi
url: ../openapi/canvas-medical-appointment-api-openapi.yml
type: openapi
- name: patientApi
url: ../openapi/canvas-medical-patient-api-openapi.yml
type: openapi
- name: practitionerApi
url: ../openapi/canvas-medical-practitioner-api-openapi.yml
type: openapi
- name: scheduleApi
url: ../openapi/canvas-medical-schedule-api-openapi.yml
type: openapi
- name: slotApi
url: ../openapi/canvas-medical-slot-api-openapi.yml
type: openapi
workflows:
- workflowId: appointment-scheduling
summary: Book an appointment into a free slot on a practitioner's schedule.
description: >-
Finds the patient and the practitioner's schedule, searches for a free slot,
creates the appointment, and reads it back to confirm.
inputs:
type: object
required:
- patientFamily
- practitionerName
- appointment
properties:
patientFamily:
type: string
description: Patient family name to locate the patient.
practitionerName:
type: string
description: Practitioner name to locate the scheduling provider.
appointment:
type: object
description: The FHIR R4 Appointment resource to book (participants, type, and timing).
steps:
- stepId: findPatient
description: Locate the patient to be scheduled.
operationId: searchPatient
parameters:
- name: family
in: query
value: $inputs.patientFamily
successCriteria:
- condition: $statusCode == 200
outputs:
patientId: $response.body#/entry/0/resource/id
- stepId: findPractitioner
description: Locate the practitioner the appointment will be booked with.
operationId: searchPractitioner
parameters:
- name: name
in: query
value: $inputs.practitionerName
successCriteria:
- condition: $statusCode == 200
outputs:
practitionerId: $response.body#/entry/0/resource/id
- stepId: findSchedule
description: Find the schedule whose actor is the selected practitioner.
operationId: searchSchedule
parameters:
- name: actor
in: query
value: $steps.findPractitioner.outputs.practitionerId
successCriteria:
- condition: $statusCode == 200
outputs:
scheduleId: $response.body#/entry/0/resource/id
- stepId: findFreeSlot
description: Search for a free slot on the practitioner's schedule.
operationId: searchSlot
parameters:
- name: schedule
in: query
value: $steps.findSchedule.outputs.scheduleId
- name: status
in: query
value: free
successCriteria:
- condition: $statusCode == 200
outputs:
slotId: $response.body#/entry/0/resource/id
- stepId: bookAppointment
description: Create the appointment against the patient, practitioner, and free slot.
operationId: createAppointment
requestBody:
contentType: application/fhir+json
payload: $inputs.appointment
successCriteria:
- condition: $statusCode == 201
outputs:
appointmentId: $response.body#/id
- stepId: confirmAppointment
description: Read the booked appointment back to confirm it was created.
operationId: readAppointment
parameters:
- name: id
in: path
value: $steps.bookAppointment.outputs.appointmentId
successCriteria:
- condition: $statusCode == 200
outputs:
appointment: $response.body
outputs:
appointmentId: $steps.bookAppointment.outputs.appointmentId
appointment: $steps.confirmAppointment.outputs.appointment
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.