From 30152679ace480cb57a0aaffba933bed4b54da70 Mon Sep 17 00:00:00 2001 From: isuruuy429 Date: Mon, 4 Nov 2024 20:43:37 +0530 Subject: [PATCH 1/3] Add Schedule Appointment Process usecase --- .../Davinci_Coverage_Demo_app | 1 + schedule-appointment-process-API/README.md | 96 + .../aggregate-service/.choreo/endpoints.yaml | 29 + .../aggregate-service/.devcontainer.json | 4 + .../aggregate-service/Ballerina.toml | 8 + .../aggregate-service/Dependencies.toml | 399 ++++ .../aggregate-service/Readme.md | 95 + .../appointment_api_config.bal | 186 ++ .../aggregate-service/location_api_config.bal | 168 ++ .../aggregate-service/oas/AppointmentAPI.yaml | 2074 +++++++++++++++++ .../aggregate-service/oas/LocationAPI.yaml | 2061 ++++++++++++++++ .../oas/PractitionerAPI.yaml | 2068 ++++++++++++++++ .../aggregate-service/oas/SlotAPI.yaml | 1961 ++++++++++++++++ .../practitioner_api_config.bal | 186 ++ .../aggregate-service/service.bal | 158 ++ .../aggregate-service/slot_api_config.bal | 118 + .../img/appointment-booking.png | Bin 0 -> 430184 bytes 17 files changed, 9612 insertions(+) create mode 160000 schedule-appointment-process-API/Davinci_Coverage_Demo_app create mode 100644 schedule-appointment-process-API/README.md create mode 100644 schedule-appointment-process-API/aggregate-service/.choreo/endpoints.yaml create mode 100644 schedule-appointment-process-API/aggregate-service/.devcontainer.json create mode 100644 schedule-appointment-process-API/aggregate-service/Ballerina.toml create mode 100644 schedule-appointment-process-API/aggregate-service/Dependencies.toml create mode 100644 schedule-appointment-process-API/aggregate-service/Readme.md create mode 100644 schedule-appointment-process-API/aggregate-service/appointment_api_config.bal create mode 100644 schedule-appointment-process-API/aggregate-service/location_api_config.bal create mode 100644 schedule-appointment-process-API/aggregate-service/oas/AppointmentAPI.yaml create mode 100644 schedule-appointment-process-API/aggregate-service/oas/LocationAPI.yaml create mode 100644 schedule-appointment-process-API/aggregate-service/oas/PractitionerAPI.yaml create mode 100644 schedule-appointment-process-API/aggregate-service/oas/SlotAPI.yaml create mode 100644 schedule-appointment-process-API/aggregate-service/practitioner_api_config.bal create mode 100644 schedule-appointment-process-API/aggregate-service/service.bal create mode 100644 schedule-appointment-process-API/aggregate-service/slot_api_config.bal create mode 100644 schedule-appointment-process-API/img/appointment-booking.png diff --git a/schedule-appointment-process-API/Davinci_Coverage_Demo_app b/schedule-appointment-process-API/Davinci_Coverage_Demo_app new file mode 160000 index 000000000..6b015cd6f --- /dev/null +++ b/schedule-appointment-process-API/Davinci_Coverage_Demo_app @@ -0,0 +1 @@ +Subproject commit 6b015cd6f2b1910f873d148db38bcae783974a64 diff --git a/schedule-appointment-process-API/README.md b/schedule-appointment-process-API/README.md new file mode 100644 index 000000000..7ec49afbc --- /dev/null +++ b/schedule-appointment-process-API/README.md @@ -0,0 +1,96 @@ +# Use case: Schedule an Appointment + +In today’s healthcare ecosystem, practitioner information, including their schedules and available appointment slots, is often distributed across multiple Electronic Medical Record (EMR) systems. This use case outlines how appointment scheduling can be efficiently handled by aggregating data from Cerner. This allows patients to seamlessly search for healthcare practitioners, view available time slots, and book appointments—all from a single platform. + +## The Scenario Overview +### Day-to-Day Scenario - Patient’s Journey + +**Morning Health Concern:** +Glen, a 45-year-old, experiences mild chest pain in the morning. Concerned, he decides to book an appointment with the well-known cardiologist Dr. Christina Applegate. Instead of calling different hospitals to find the availability of the doctor, Glen opens the Channeling web app in the Browser. + +**Log In:** +Glen logs into the web app with his username and password. The app authenticates him using an integrated identity access management (IAM) system, providing a secure session. + +**Searching for a Practitioner:** +Glen enters ‘Dr. Christina Applegate’ in the app’s search bar. The app sends this search request to the backend system (Aggregate-backend), which aggregates data from multiple EMR Systems. +Reviewing Doctor’s Availability: Within seconds, the app returns a list of Dr. Christina Applegate's available sessions at different locations. + +**Choosing a Time Slot:** +Glen sees that Dr. Christina Applegate has an opening at CDEM Colombo on October 10th, 2024, from 4:00 PM to 4:30 PM. Since this time slot is convenient for him, he selects it. + +**Booking the Appointment:** +Glen confirms his selection, and the app creates an appointment by sending a request to the Aggregate-backend. This request is forwarded to the relevant EMR system to reserve the slot. The system marks the chosen slot as busy, ensuring no one else can book it. + +**Appointment Confirmation:** +Shortly after, Glen receives a confirmation notification within the web app, stating that his appointment with Dr. Christina Applegate is scheduled at CDEM Colombo. The appointment details include the time, date, location, and the doctor's name. + +**Peace of Mind:** +Glen feels reassured knowing he has an appointment with a cardiologist. He goes about his day, confident that he will soon receive medical care. + +## Running the App +1. Setup and run the [Aggregate-Backend](aggregate-service/Readme.md) +1. Navigate to the directory, 'Davinci_Coverage_Demo_app' +2. Execute the following command. +``` +npm run dev +``` +3. Navigate to http://localhost:5173 in your web browser. +4. Select the patient from the dropdown. +5. Once the patient is selected and clik on 'Treat Patient', you will be navigated to http://localhost:5173/dashboard +6. Click on 'Book an Appointment' +7. Search for a doctor using doctor's first and last name. Provide 'Christina' as the first name and 'Applegate' as the last name and click on 'Search Doctor' button. Then you can continue the scenario. + + + +## Behind the Scenes - Healthcare Provider’s Perspective + +![Appointment Booking Scenario](img/appointment-booking.png) + +1. Doctor Search Request (Web App → Aggregate Backend API) + + - The user, Glen, enters the doctor's first and last name (e.g., "Christina Applegate") in the search bar of the web app. + The app sends a search request to the Aggregate Backend API, which forwards the request to multiple connected EMR systems, querying each EMR's FHIR-compliant API to find matching practitioners. + + - Example query: + ``` + GET Practitioner?given=Christina&family=Applegate + ``` + - Each EMR system responds with relevant practitioner details, such as name and unique practitioner ID. + The web app displays a list of matching doctors (if multiple exist) to Glen, allowing him to select the intended practitioner. + +2. Fetching Doctor’s Availability (Web App → Aggregate Backend API → EMR Systems): + + - After selecting Dr. Christina Applegate from the search results, Glen chooses a desired appointment date and clicks "Check Availability." + - The web app sends this request to the Aggregate Backend API with the selected date and practitioner ID. + - The Aggregate Backend API constructs and sends a FHIR-compliant Slot query to each EMR system for the selected date, requesting available slots for Dr. Applegate. + - Example query: + ``` + GET Slot?serviceType=consultation&start=ge2024-11-10T06:00:00&start=lt2024-11-10T23:00:00&practitioner={practitionerId} + ``` + - Each EMR system returns a list of available time slots, including location details. + - The Aggregate Backend consolidates the responses from multiple EMR systems and returns a unified list of available time slots to the web app. + - The web app displays these slots to Glen in a user-friendly format. + +3. Displaying Available Slots (Web App) + + - Glen sees a list of available time slots for Dr. Christina Applegate, along with the respective location details. + - Each slot card displays the start time, end time, and location, allowing Glen to easily view and select his preferred slot. + +4. Selecting a Time Slot and Appointment Creation (Web App → Aggregate Backend API → EMR System): + - Glen selects a specific time slot (e.g., 4:00 PM to 4:30 PM at "Model Hospital"). + - The app packages this selection as a JSON FHIR Appointment payload, including: + ``` + Start Time and End Time: Selected appointment time + Location Reference: Hospital or clinic location + Patient Reference: Glen’s patient ID + Slot Reference: Selected slot ID + ``` + - The app sends this JSON payload to the Aggregate Backend API, which forwards it to the appropriate EMR system to create the appointment. + +5. Appointment Confirmation (EMR System → Aggregate Backend API → Web App) + - The EMR system processes the appointment request, verifies slot availability, and confirms the booking by returning a successful status. + - The Aggregate Backend API relays this confirmation to the web app, which displays a success message to Glen. + - Glen receives an appointment receipt, confirming his scheduled session with Dr. Christina Applegate, including all relevant details (date, time, location). + + + diff --git a/schedule-appointment-process-API/aggregate-service/.choreo/endpoints.yaml b/schedule-appointment-process-API/aggregate-service/.choreo/endpoints.yaml new file mode 100644 index 000000000..6b2476ade --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/.choreo/endpoints.yaml @@ -0,0 +1,29 @@ +# +required Version of the endpoint configuration YAML +version: 0.1 + +# +required List of endpoints to create +endpoints: +- name: Cerner FHIR Practitioner API + port: 8081 + type: REST + networkVisibility: Public + context: / + schemaFilePath: oas/PractitionerAPI.yaml +- name: Cerner FHIR Slot API + port: 8082 + type: REST + networkVisibility: Public + context: / + schemaFilePath: oas/SlotAPI.yaml +- name: Cerner FHIR Location API + port: 8084 + type: REST + networkVisibility: Public + context: / + schemaFilePath: oas/LocationAPI.yaml +- name: Cerner FHIR Appointment API + port: 8083 + type: REST + networkVisibility: Public + context: / + schemaFilePath: oas/AppointmentAPI.yaml diff --git a/schedule-appointment-process-API/aggregate-service/.devcontainer.json b/schedule-appointment-process-API/aggregate-service/.devcontainer.json new file mode 100644 index 000000000..099816a20 --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/.devcontainer.json @@ -0,0 +1,4 @@ +{ + "image": "ballerina/ballerina-devcontainer:2201.8.5", + "extensions": ["WSO2.ballerina"], +} diff --git a/schedule-appointment-process-API/aggregate-service/Ballerina.toml b/schedule-appointment-process-API/aggregate-service/Ballerina.toml new file mode 100644 index 000000000..5bc932973 --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/Ballerina.toml @@ -0,0 +1,8 @@ +[package] +org = "isuruuy" +name = "aggregate_service" +version = "0.1.0" +distribution = "2201.8.5" + +[build-options] +observabilityIncluded = true diff --git a/schedule-appointment-process-API/aggregate-service/Dependencies.toml b/schedule-appointment-process-API/aggregate-service/Dependencies.toml new file mode 100644 index 000000000..1837af3ff --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/Dependencies.toml @@ -0,0 +1,399 @@ +# AUTO-GENERATED FILE. DO NOT MODIFY. + +# This file is auto-generated by Ballerina for managing dependency versions. +# It should not be modified by hand. + +[ballerina] +dependencies-toml-version = "2" +distribution-version = "2201.8.8" + +[[package]] +org = "ballerina" +name = "auth" +version = "2.10.0" +dependencies = [ + {org = "ballerina", name = "crypto"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.array"}, + {org = "ballerina", name = "lang.string"}, + {org = "ballerina", name = "log"} +] + +[[package]] +org = "ballerina" +name = "cache" +version = "3.8.0" +dependencies = [ + {org = "ballerina", name = "constraint"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "task"}, + {org = "ballerina", name = "time"} +] + +[[package]] +org = "ballerina" +name = "constraint" +version = "1.5.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "crypto" +version = "2.6.3" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "time"} +] + +[[package]] +org = "ballerina" +name = "file" +version = "1.9.0" +dependencies = [ + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "os"}, + {org = "ballerina", name = "time"} +] + +[[package]] +org = "ballerina" +name = "http" +version = "2.10.17" +dependencies = [ + {org = "ballerina", name = "auth"}, + {org = "ballerina", name = "cache"}, + {org = "ballerina", name = "constraint"}, + {org = "ballerina", name = "crypto"}, + {org = "ballerina", name = "file"}, + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "jwt"}, + {org = "ballerina", name = "lang.array"}, + {org = "ballerina", name = "lang.decimal"}, + {org = "ballerina", name = "lang.int"}, + {org = "ballerina", name = "lang.regexp"}, + {org = "ballerina", name = "lang.runtime"}, + {org = "ballerina", name = "lang.string"}, + {org = "ballerina", name = "lang.value"}, + {org = "ballerina", name = "log"}, + {org = "ballerina", name = "mime"}, + {org = "ballerina", name = "oauth2"}, + {org = "ballerina", name = "observe"}, + {org = "ballerina", name = "time"}, + {org = "ballerina", name = "url"} +] + +[[package]] +org = "ballerina" +name = "io" +version = "1.6.1" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.value"} +] + +[[package]] +org = "ballerina" +name = "jballerina.java" +version = "0.0.0" + +[[package]] +org = "ballerina" +name = "jwt" +version = "2.10.0" +dependencies = [ + {org = "ballerina", name = "cache"}, + {org = "ballerina", name = "crypto"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.int"}, + {org = "ballerina", name = "lang.string"}, + {org = "ballerina", name = "log"}, + {org = "ballerina", name = "time"} +] + +[[package]] +org = "ballerina" +name = "lang.__internal" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.object"} +] + +[[package]] +org = "ballerina" +name = "lang.array" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.__internal"} +] + +[[package]] +org = "ballerina" +name = "lang.decimal" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "lang.int" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.__internal"}, + {org = "ballerina", name = "lang.object"} +] + +[[package]] +org = "ballerina" +name = "lang.object" +version = "0.0.0" + +[[package]] +org = "ballerina" +name = "lang.regexp" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "lang.runtime" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "lang.string" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.regexp"} +] + +[[package]] +org = "ballerina" +name = "lang.value" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "log" +version = "2.9.0" +dependencies = [ + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.value"}, + {org = "ballerina", name = "observe"} +] + +[[package]] +org = "ballerina" +name = "mime" +version = "2.9.0" +dependencies = [ + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.int"} +] + +[[package]] +org = "ballerina" +name = "oauth2" +version = "2.10.0" +dependencies = [ + {org = "ballerina", name = "cache"}, + {org = "ballerina", name = "crypto"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "log"}, + {org = "ballerina", name = "time"}, + {org = "ballerina", name = "url"} +] + +[[package]] +org = "ballerina" +name = "observe" +version = "1.2.3" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "os" +version = "1.8.0" +dependencies = [ + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "task" +version = "2.5.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "time"} +] + +[[package]] +org = "ballerina" +name = "time" +version = "2.5.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "url" +version = "2.4.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "uuid" +version = "1.7.0" +dependencies = [ + {org = "ballerina", name = "crypto"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.int"}, + {org = "ballerina", name = "time"} +] + +[[package]] +org = "ballerinai" +name = "observe" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "observe"} +] +modules = [ + {org = "ballerinai", packageName = "observe", moduleName = "observe"} +] + +[[package]] +org = "ballerinax" +name = "health.base" +version = "1.0.3" +dependencies = [ + {org = "ballerina", name = "http"}, + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jwt"}, + {org = "ballerina", name = "log"}, + {org = "ballerina", name = "mime"}, + {org = "ballerina", name = "time"}, + {org = "ballerina", name = "uuid"} +] + +[[package]] +org = "ballerinax" +name = "health.clients.fhir" +version = "2.0.0" +dependencies = [ + {org = "ballerina", name = "http"}, + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "log"}, + {org = "ballerina", name = "url"}, + {org = "ballerinai", name = "observe"}, + {org = "ballerinax", name = "health.base"} +] +modules = [ + {org = "ballerinax", packageName = "health.clients.fhir", moduleName = "health.clients.fhir"} +] + +[[package]] +org = "ballerinax" +name = "health.fhir.r4" +version = "5.1.1" +dependencies = [ + {org = "ballerina", name = "constraint"}, + {org = "ballerina", name = "http"}, + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jwt"}, + {org = "ballerina", name = "lang.regexp"}, + {org = "ballerina", name = "lang.value"}, + {org = "ballerina", name = "log"}, + {org = "ballerina", name = "time"}, + {org = "ballerina", name = "url"}, + {org = "ballerina", name = "uuid"}, + {org = "ballerinax", name = "health.base"} +] +modules = [ + {org = "ballerinax", packageName = "health.fhir.r4", moduleName = "health.fhir.r4"} +] + +[[package]] +org = "ballerinax" +name = "health.fhir.r4.international401" +version = "2.1.1" +dependencies = [ + {org = "ballerina", name = "constraint"}, + {org = "ballerina", name = "log"}, + {org = "ballerinax", name = "health.fhir.r4"} +] +modules = [ + {org = "ballerinax", packageName = "health.fhir.r4.international401", moduleName = "health.fhir.r4.international401"} +] + +[[package]] +org = "ballerinax" +name = "health.fhir.r4.parser" +version = "5.1.0" +dependencies = [ + {org = "ballerina", name = "http"}, + {org = "ballerina", name = "log"}, + {org = "ballerinax", name = "health.fhir.r4"}, + {org = "ballerinax", name = "health.fhir.r4.international401"} +] + +[[package]] +org = "ballerinax" +name = "health.fhirr4" +version = "1.3.5" +dependencies = [ + {org = "ballerina", name = "http"}, + {org = "ballerina", name = "io"}, + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "jwt"}, + {org = "ballerina", name = "lang.regexp"}, + {org = "ballerina", name = "log"}, + {org = "ballerinai", name = "observe"}, + {org = "ballerinax", name = "health.fhir.r4"}, + {org = "ballerinax", name = "health.fhir.r4.international401"}, + {org = "ballerinax", name = "health.fhir.r4.parser"} +] +modules = [ + {org = "ballerinax", packageName = "health.fhirr4", moduleName = "health.fhirr4"} +] + +[[package]] +org = "isuruuy" +name = "aggregate_service" +version = "0.1.0" +dependencies = [ + {org = "ballerinai", name = "observe"}, + {org = "ballerinax", name = "health.clients.fhir"}, + {org = "ballerinax", name = "health.fhir.r4"}, + {org = "ballerinax", name = "health.fhir.r4.international401"}, + {org = "ballerinax", name = "health.fhirr4"} +] +modules = [ + {org = "isuruuy", packageName = "aggregate_service", moduleName = "aggregate_service"} +] + diff --git a/schedule-appointment-process-API/aggregate-service/Readme.md b/schedule-appointment-process-API/aggregate-service/Readme.md new file mode 100644 index 000000000..563cc8f4a --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/Readme.md @@ -0,0 +1,95 @@ +# Aggregate Backend Overview +The Aggregate Backend interacts with Cerner's Pre-Built services, enabling streamlined access to essential healthcare functionalities. We can follow the below steps to run the setup locally. + +## Services Provided by Aggregate Backend +The Aggregate Backend API offers the following functionalities: + +- Practitioner Search: Retrieve practitioner details using their first and last names. +- Slot Search: Find available appointment slots for a specific day and practitioner. +- Location Lookup: Retrieve location details using the location's unique ID. +- Appointment Creation: Create a new appointment resource with the specified details. + +## Prerequisites +1. Clone [open-healthcare-prebuilt-services repository](https://github.com/wso2/open-healthcare-prebuilt-services) +2. Navigate to /ehr-connectivity/cerner-fhirr4-administration-api-service +3. Create Config.toml file and your Cerner configurations as below. +``` +baseServerHost = "http://localhost:9090" +cernerUrl = "https://fhir-ehr-code.cerner.com/r4/ec2458f2-1e24-41c8-b71b-0e701af7583d" +tokenUrl = "https://authorization.cerner.com/tenants/ec2458f2-1e24-41c8-b71b-0e701af7583d/protocols/oauth2/profiles/smart-v1/token" +clientId = "" +clientSecret = "" +scopes = ["system/Practitioner.read", "system/Practitioner.write", "system/Location.read"] +``` +4. Run the Ballerina service +``` +bal run +``` +5. Test the service by executing the following command to search a Practitioner. +``` +curl --location 'http://localhost:9092/fhir/r4/Practitioner?family=Applegate&given=Christina' +``` + +6. Now navigate to cerner-fhirr4-workflow-api-service directory and add the Config.toml. +``` +baseServerHost = "http://localhost:9090" +cernerUrl = "https://fhir-ehr-code.cerner.com/r4/ec2458f2-1e24-41c8-b71b-0e701af7583d" +tokenUrl = "https://authorization.cerner.com/tenants/ec2458f2-1e24-41c8-b71b-0e701af7583d/protocols/oauth2/profiles/smart-v1/token" +clientId = "" +clientSecret = "" +scopes = ["system/Appointment.read", "system/Appointment.write", "system/Schedule.read", "system/Slot.read", "system/Slot.write"] +``` + +7. You can test the service by executing the following command. +``` +curl --location 'http://localhost:9098/fhir/r4/Slot?service-type=https%3A%2F%2Ffhir.cerner.com%2Fec2458f2-1e24-41c8-b71b-0e701af7583d%2FcodeSet%2F14249%7C4047611&start=ge2023-01-14T06%3A00%3A00Z&start=lt2024-01-15T23%3A00%3A00Z&practitioner=593923&_count=5' +``` + +## Steps to run the Aggregate backend. +1. Navigate to the Ballerina project home and run the service +``` +bal run -- -Cballerina.http.traceLogConsole=true +``` + +2. Test the service by invoking the following command. + +- Search a Practitioner with given name and family name. +``` +curl --location 'http://localhost:8081/fhir/r4/Practitioner?family=Applegate&given=Christina' +``` + +- Search slots for a given date of a particular Practitioner. +``` +curl --location 'http://localhost:8082/fhir/r4/Slot?startDate=2024-12-24&practitioner=593923' +``` + +- Retrive location by its id. +``` +http://localhost:8084/fhir/r4/Location/32216049 +``` + +- Create an Appointment +``` +curl --location 'http://localhost:8083/fhir/r4/Appointment' \ +--header 'Content-Type: application/fhir+json' \ +--data '{ + "resourceType": "Appointment", + "status": "booked", + "slot": [ + { + "reference": "Slot/4047611-25442717-65876882-45" + } + ], + "start": "2024-12-24T06:45:00Z", + "end": "2024-12-24T07:45:00Z", + "participant": [ + { + "actor": { + "reference": "Patient/12724066" + }, + "status": "accepted" + } + ] +}' +``` +Please note that once an Appointment is created for a given Slot ID, it cannot be reused. You need to find a new Slot ID and provide its start and end date to the payload. \ No newline at end of file diff --git a/schedule-appointment-process-API/aggregate-service/appointment_api_config.bal b/schedule-appointment-process-API/aggregate-service/appointment_api_config.bal new file mode 100644 index 000000000..e627e32c0 --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/appointment_api_config.bal @@ -0,0 +1,186 @@ +// Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). All Rights Reserved. + +// This software is the property of WSO2 LLC. and its suppliers, if any. +// Dissemination of any information or reproduction of any material contained +// herein is strictly forbidden, unless permitted by WSO2 in accordance with +// the WSO2 Software License available at: https://wso2.com/licenses/eula/3.2 +// For specific language governing the permissions and limitations under +// this license, please see the license as well as any agreement you’ve +// entered into with WSO2 governing the purchase of this software and any +// associated services. +// +// +// AUTO-GENERATED FILE. DO NOT MODIFY. +// +// This file is auto-generated by WSO2 Healthcare Team for managing utility functions. +// Developers are allowed modify this file as per the requirement. + +import ballerinax/health.fhir.r4; + +final r4:ResourceAPIConfig appointmentApiConfig = { + resourceType: "Appointment", + profiles: [ + "http://hl7.org/fhir/StructureDefinition/Appointment" + ], + defaultProfile: (), + searchParameters: [ + { + name: "specialty", + active: true, + information: { + description: "The specialty of a practitioner that would be required to perform the service requested in this appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-specialty" + } + }, + { + name: "supporting-info", + active: true, + information: { + description: "Additional information to support the appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-supporting-info" + } + }, + { + name: "practitioner", + active: true, + information: { + description: "One of the individuals of the appointment is this practitioner", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-practitioner" + } + }, + { + name: "service-type", + active: true, + information: { + description: "The specific service that is to be performed during this appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-service-type" + } + }, + { + name: "reason-reference", + active: true, + information: { + description: "Reason the appointment is to take place (resource)", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-reason-reference" + } + }, + { + name: "part-status", + active: true, + information: { + description: "The Participation status of the subject, or other participant on the appointment. Can be used to locate participants that have not responded to meeting requests.", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-part-status" + } + }, + { + name: "location", + active: true, + information: { + description: "This location is listed in the participants of the appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-location" + } + }, + { + name: "appointment-type", + active: true, + information: { + description: "The style of appointment or patient that has been booked in the slot (not service type)", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-appointment-type" + } + }, + { + name: "patient", + active: true, + information: { + description: "One of the individuals of the appointment is this patient", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-patient" + } + }, + { + name: "date", + active: true, + information: { + description: "Appointment date/time.", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-date" + } + }, + { + name: "actor", + active: true, + information: { + description: "Any one of the individuals participating in the appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-actor" + } + }, + { + name: "slot", + active: true, + information: { + description: "The slots that this appointment is filling", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-slot" + } + }, + { + name: "based-on", + active: true, + information: { + description: "The service request this appointment is allocated to assess", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-based-on" + } + }, + { + name: "identifier", + active: true, + information: { + description: "An Identifier of the Appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-identifier" + } + }, + { + name: "service-category", + active: true, + information: { + description: "A broad categorization of the service that is to be performed during this appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-service-category" + } + }, + { + name: "status", + active: true, + information: { + description: "The overall status of the appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-status" + } + }, + { + name: "reason-code", + active: true, + information: { + description: "Coded reason this appointment is scheduled", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Appointment-reason-code" + } + } + ], + operations: [ + + ], + serverConfig: (), + authzConfig: () +}; diff --git a/schedule-appointment-process-API/aggregate-service/location_api_config.bal b/schedule-appointment-process-API/aggregate-service/location_api_config.bal new file mode 100644 index 000000000..1771207ac --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/location_api_config.bal @@ -0,0 +1,168 @@ +// Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). All Rights Reserved. + +// This software is the property of WSO2 LLC. and its suppliers, if any. +// Dissemination of any information or reproduction of any material contained +// herein is strictly forbidden, unless permitted by WSO2 in accordance with +// the WSO2 Software License available at: https://wso2.com/licenses/eula/3.2 +// For specific language governing the permissions and limitations under +// this license, please see the license as well as any agreement you’ve +// entered into with WSO2 governing the purchase of this software and any +// associated services. +// +// +// AUTO-GENERATED FILE. +// +// This file is auto-generated by Ballerina. +// Developers are allowed to modify this file as per the requirement. + +import ballerinax/health.fhir.r4; + +final r4:ResourceAPIConfig locationApiConfig = { + resourceType: "Location", + profiles: [ + "http://hl7.org/fhir/StructureDefinition/Location" + ], + defaultProfile: (), + searchParameters: [ + { + name: "partof", + active: true, + information: { + description: "A location of which this location is a part", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-partof" + } + }, + { + name: "organization", + active: true, + information: { + description: "Searches for locations that are managed by the provided organization", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-organization" + } + }, + { + name: "address-country", + active: true, + information: { + description: "A country specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-address-country" + } + }, + { + name: "operational-status", + active: true, + information: { + description: "Searches for locations (typically bed/room) that have an operational status (e.g. contaminated, housekeeping)", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-operational-status" + } + }, + { + name: "type", + active: true, + information: { + description: "A code for the type of location", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-type" + } + }, + { + name: "address-postalcode", + active: true, + information: { + description: "A postal code specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-address-postalcode" + } + }, + { + name: "near", + active: true, + information: { + description: "Search for locations where the location.position is near to, or within a specified distance of, the provided coordinates expressed as [latitude]|[longitude]|[distance]|[units] (using the WGS84 datum, see notes).If the units are omitted, then kms should be assumed. If the distance is omitted, then the server can use its own discretion as to what distances should be considered near (and units are irrelevant)Servers may search using various techniques that might have differing accuracies, depending on implementation efficiency.Requires the near-distance parameter to be provided also", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-near" + } + }, + { + name: "address-state", + active: true, + information: { + description: "A state specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-address-state" + } + }, + { + name: "address-city", + active: true, + information: { + description: "A city specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-address-city" + } + }, + { + name: "address", + active: true, + information: { + description: "A (part of the) address of the location", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-address" + } + }, + { + name: "name", + active: true, + information: { + description: "A portion of the location's name or alias", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-name" + } + }, + { + name: "endpoint", + active: true, + information: { + description: "Technical endpoints providing access to services operated for the location", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-endpoint" + } + }, + { + name: "status", + active: true, + information: { + description: "Searches for locations with a specific kind of status", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-status" + } + }, + { + name: "identifier", + active: true, + information: { + description: "An identifier for the location", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-identifier" + } + }, + { + name: "address-use", + active: true, + information: { + description: "A use code specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Location-address-use" + } + } + ], + operations: [ + + ], + serverConfig: (), + authzConfig: () +}; diff --git a/schedule-appointment-process-API/aggregate-service/oas/AppointmentAPI.yaml b/schedule-appointment-process-API/aggregate-service/oas/AppointmentAPI.yaml new file mode 100644 index 000000000..63e8af7e5 --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/oas/AppointmentAPI.yaml @@ -0,0 +1,2074 @@ +openapi: 3.0.1 +info: + title: AppointmentAPI + description: "A simplified version of the HL7 FHIR API for Appointment resource.\n\ + Supported Profiles: \nhttp://hl7.org/fhir/StructureDefinition/Appointment\n" + contact: + name: API Support + url: https://wso2.com/contact/ + email: info@wso2.com + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +tags: +- name: international +- name: Appointment +- name: 4.0.1 +paths: + /fhir/r4/Appointment: + get: + tags: + - GET + - Appointment + summary: search Appointment + description: This operation is used to search a Appointment + parameters: + - name: reason-code + in: query + description: Coded reason this appointment is scheduled + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: service-category + in: query + description: A broad categorization of the service that is to be performed + during this appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: patient + in: query + description: One of the individuals of the appointment is this patient + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: part-status + in: query + description: "The Participation status of the subject, or other participant\ + \ on the appointment. Can be used to locate participants that have not responded\ + \ to meeting requests." + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: location + in: query + description: This location is listed in the participants of the appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: service-type + in: query + description: The specific service that is to be performed during this appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: appointment-type + in: query + description: The style of appointment or patient that has been booked in the + slot (not service type) + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: status + in: query + description: The overall status of the appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: practitioner + in: query + description: One of the individuals of the appointment is this practitioner + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: reason-reference + in: query + description: Reason the appointment is to take place (resource) + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: slot + in: query + description: The slots that this appointment is filling + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: specialty + in: query + description: The specialty of a practitioner that would be required to perform + the service requested in this appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: date + in: query + description: Appointment date/time. + required: false + schema: + type: string + x-wso2-oh-fhirType: date + - name: actor + in: query + description: Any one of the individuals participating in the appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: identifier + in: query + description: An Identifier of the Appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: based-on + in: query + description: The service request this appointment is allocated to assess + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: supporting-info + in: query + description: Additional information to support the appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - $ref: '#/components/parameters/_lastUpdatedParam' + - $ref: '#/components/parameters/_securityParam' + - $ref: '#/components/parameters/_tagParam' + - $ref: '#/components/parameters/_idParam' + - $ref: '#/components/parameters/_sourceParam' + - $ref: '#/components/parameters/_profileParam' + responses: + "200": + description: search Appointment operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Bundle' + security: + - default: [] + post: + tags: + - POST + - Appointment + summary: create Appointment + description: This operation is used to create a Appointment + responses: + "201": + description: create Appointment operation successful + security: + - default: [] + /fhir/r4/Appointment/{id}: + get: + tags: + - GET + - Appointment + summary: read Appointment + description: This operation is used to read a Appointment + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "200": + description: read Appointment operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Appointment' + security: + - default: [] + put: + tags: + - PUT + - Appointment + summary: update Appointment + description: This operation is used to update a Appointment + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "201": + description: update Appointment operation successful + security: + - default: [] + delete: + tags: + - DELETE + - Appointment + summary: delete Appointment + description: This operation is used to delete a Appointment + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "204": + description: delete Appointment operation successful + security: + - default: [] +components: + schemas: + Resource: + required: + - resourceType + type: object + properties: + resourceType: + type: string + enum: + - Account + - ActivityDefinition + - AdverseEvent + - AllergyIntolerance + - Appointment + - AppointmentResponse + - AuditEvent + - Basic + - Binary + - BiologicallyDerivedProduct + - BodyStructure + - Bundle + - CapabilityStatement + - CarePlan + - CareTeam + - CatalogEntry + - ChargeItem + - ChargeItemDefinition + - Claim + - ClaimResponse + - ClinicalImpression + - CodeSystem + - Communication + - CommunicationRequest + - CompartmentDefinition + - Composition + - ConceptMap + - Condition + - Consent + - Contract + - Coverage + - CoverageEligibilityRequest + - CoverageEligibilityResponse + - DetectedIssue + - Device + - DeviceDefinition + - DeviceMetric + - DeviceRequest + - DeviceUseStatement + - DiagnosticReport + - DocumentManifest + - DocumentReference + - DomainResource + - EffectEvidenceSynthesis + - Encounter + - Endpoint + - EnrollmentRequest + - EnrollmentResponse + - EpisodeOfCare + - EventDefinition + - Evidence + - EvidenceVariable + - ExampleScenario + - ExplanationOfBenefit + - FamilyMemberHistory + - Flag + - Goal + - GraphDefinition + - Group + - GuidanceResponse + - HealthcareService + - ImagingStudy + - Immunization + - ImmunizationEvaluation + - ImmunizationRecommendation + - ImplementationGuide + - InsurancePlan + - Invoice + - Library + - Linkage + - List + - Location + - Measure + - MeasureReport + - Media + - Medication + - MedicationAdministration + - MedicationDispense + - MedicationKnowledge + - MedicationRequest + - MedicationStatement + - MedicinalProduct + - MedicinalProductAuthorization + - MedicinalProductContraindication + - MedicinalProductIndication + - MedicinalProductIngredient + - MedicinalProductInteraction + - MedicinalProductManufactured + - MedicinalProductPackaged + - MedicinalProductPharmaceutical + - MedicinalProductUndesirableEffect + - MessageDefinition + - MessageHeader + - MolecularSequence + - NamingSystem + - NutritionOrder + - Observation + - ObservationDefinition + - OperationDefinition + - OperationOutcome + - Organization + - OrganizationAffiliation + - Parameters + - Patient + - PaymentNotice + - PaymentReconciliation + - Person + - PlanDefinition + - Practitioner + - PractitionerRole + - Procedure + - Provenance + - Questionnaire + - QuestionnaireResponse + - RelatedPerson + - RequestGroup + - ResearchDefinition + - ResearchElementDefinition + - ResearchStudy + - ResearchSubject + - Resource + - RiskAssessment + - RiskEvidenceSynthesis + - Schedule + - SearchParameter + - ServiceRequest + - Slot + - Specimen + - SpecimenDefinition + - StructureDefinition + - StructureMap + - Subscription + - Substance + - SubstanceNucleicAcid + - SubstancePolymer + - SubstanceProtein + - SubstanceReferenceInformation + - SubstanceSourceMaterial + - SubstanceSpecification + - SupplyDelivery + - SupplyRequest + - Task + - TerminologyCapabilities + - TestReport + - TestScript + - ValueSet + - VerificationResult + - VisionPrescription + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The logical id of the resource, as used in the URL for the\ + \ resource. Once assigned, this value never changes." + meta: + $ref: '#/components/schemas/Meta' + implicitRules: + pattern: \S* + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide that\ + \ defines the special rules along with other profiles etc." + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The base language in which the resource is written. + DomainResource: + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + text: + $ref: '#/components/schemas/Narrative' + contained: + type: array + items: + $ref: '#/components/schemas/Resource' + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Bundle: + required: + - type + example: + resourceType: Bundle + meta: + versionId: exaha1GMZU + lastUpdated: 2020-03-12T00:11:47.779-04:00 + source: OscBE5P0oL + profile: + - 2t1_PYz6sb + security: + - system: __ZQLAVVwf + version: VLbtqKcbsY + code: VUlDjytwgy + display: qiSsBMDgPt + userSelected: true + tag: + - system: zjCxD2PaBs + version: rzU1dChGRU + code: T_fA90_uZ3 + display: lX3NJdEblQ + userSelected: true + - code: ibm/complete-mock + implicitRules: vor6NZfU_z + language: L2CvMvoQCf + identifier: + use: temp + type: + coding: + - system: 2KSvg9_FAi + version: gGp8DOk9J1 + code: mfTsOuaMha + display: oWF_kySdMa + userSelected: true + text: JCfLMefieh + system: OD8o0wUurR + value: rB39S_eWKm + period: + start: 2020-03-12T00:11:47.781-04:00 + end: 2020-03-12T00:11:47.781-04:00 + type: message + timestamp: 2020-03-12T00:11:47.768-04:00 + total: 253899444 + link: + - relation: 7ntmg3QgsB + url: yqZC1h4OiP + entry: + - link: + - relation: BYqAgl7fxn + url: FjYy1I_fo0 + fullUrl: jRHNMRSGoH + search: + mode: outcome + score: 215939698769 + request: + method: HEAD + url: fsGmEqxt_V + ifNoneMatch: 9Ce9vVtTEJ + ifModifiedSince: 2020-03-12T00:11:47.776-04:00 + ifMatch: PtLujM597v + ifNoneExist: thVohqaRoO + response: + status: Vz647bKzDX + location: vG6ZG5JY3n + etag: UAy7mNeNeo + lastModified: 2020-03-12T00:11:47.773-04:00 + signature: + type: + - system: UXJhVBJtsw + version: dSN1eoXw7X + code: 7n8GNkS7ty + display: Ff82O7MvgK + userSelected: true + when: 2020-03-12T00:11:47.767-04:00 + who: + reference: Practitioner/8Jt_8Rtofu + type: Practitioner + identifier: + use: secondary + type: + coding: + - system: aOvIofeYmD + version: mNBmEi5RDA + code: sM5gtqK3Xw + display: aOf6nJImxy + userSelected: true + text: zaOFAoPxBA + system: C70kG_5CcM + value: TYMT3hKJFR + period: + start: 2020-03-12T00:11:47.765-04:00 + end: 2020-03-12T00:11:47.765-04:00 + display: 5vUkPEw2_I + onBehalfOf: + reference: Practitioner/PEch7CxGIg + type: Practitioner + identifier: + use: usual + type: + coding: + - system: ixnevWoHGy + version: hJQzXghlpb + code: h6NurXxnyH + display: C0fDviMSsU + userSelected: true + text: izhrMjXk74 + system: giGNRU5rWU + value: e7_ezY1vVp + period: + start: 2020-03-12T00:11:47.767-04:00 + end: 2020-03-12T00:11:47.767-04:00 + display: nWuUixICQd + targetFormat: F93ISQKaDY + sigFormat: Qx2S3AEiMQ + data: AGxIVG4= + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + identifier: + $ref: '#/components/schemas/Identifier' + type: + type: string + description: Indicates the purpose of this bundle – how it is intended + to be used. + enum: + - document + - message + - transaction + - transaction-response + - batch + - batch-response + - history + - searchset + - collection + timestamp: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the bundle was assembled – i.e. + when the resources were placed in the bundle. + total: + type: integer + description: "If a set of search matches, this is the total number of\ + \ entries of type 'match' across all pages in the search. It does not\ + \ include search.mode = 'include' or 'outcome' entries and it does not\ + \ provide a count of the number of entries in the Bundle." + format: int32 + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + entry: + type: array + items: + $ref: '#/components/schemas/Bundle_Entry' + signature: + $ref: '#/components/schemas/Signature' + OperationOutcome: + required: + - issue + example: + resourceType: OperationOutcome + meta: + versionId: aj7xYfDKGG + lastUpdated: 2020-03-12T00:11:56.482-04:00 + source: ZqswRdBz2V + profile: + - 7MtlUHdgF3 + security: + - system: eBZLDvfQS6 + version: 3loXo6Bekk + code: fApLgubn5v + display: hGDoUOaTiY + userSelected: true + tag: + - system: d6ZKFrRy9C + version: co9wqQZDjO + code: Z2JT_ZxmeR + display: f5JMtds3fb + userSelected: true + - code: ibm/complete-mock + implicitRules: FwNANOTUkD + language: iDvESiu0cB + text: + status: extensions + div:
+ issue: + - severity: warning + code: invariant + details: + coding: + - system: 9TiBhtaNhv + version: 38XIrYkjYf + code: s4dzxZ4dsW + display: tu3Q0RYWRq + userSelected: true + text: qW3nzpKNue + diagnostics: 4zXKgm6Eae + location: + - EmMlBkbb8W + expression: + - bSBqh22fAT + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + issue: + type: array + items: + $ref: '#/components/schemas/OperationOutcome_Issue' + Bundle_Entry: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + fullUrl: + pattern: \S* + type: string + description: "The Absolute URL for the resource. The fullUrl SHALL NOT\ + \ disagree with the id in the resource – i.e. if the fullUrl is\ + \ not a urn:uuid, the URL shall be version–independent URL consistent\ + \ with the Resource.id. The fullUrl is a version independent reference\ + \ to the resource. The fullUrl element SHALL have a value except that:\ + \ \n* fullUrl can be empty on a POST (although it does not need to when\ + \ specifying a temporary id for reference in the bundle)\n* Results\ + \ from operations might involve resources that are not identified." + resource: + $ref: '#/components/schemas/Resource' + search: + $ref: '#/components/schemas/Bundle_Entry_Search' + request: + $ref: '#/components/schemas/Bundle_Entry_Request' + response: + $ref: '#/components/schemas/Bundle_Entry_Response' + Bundle_Entry_Response: + required: + - status + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + status: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The status code returned by processing this entry. The status + SHALL start with a 3 digit HTTP code (e.g. 404) and may contain the + standard HTTP description associated with the status code. + location: + pattern: \S* + type: string + description: "The location header created by processing this operation,\ + \ populated if the operation returns a location." + etag: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The Etag for the resource, if the operation for the entry\ + \ produced a versioned resource (see [Resource Metadata and Versioning](http.html#versioning)\ + \ and [Managing Resource Contention](http.html#concurrency))." + lastModified: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the resource was modified on the server. + outcome: + $ref: '#/components/schemas/Resource' + Bundle_Entry_Request: + required: + - method + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + method: + type: string + description: "In a transaction or batch, this is the HTTP action to be\ + \ executed for this entry. In a history bundle, this indicates the HTTP\ + \ action that occurred." + enum: + - GET + - HEAD + - POST + - PUT + - DELETE + - PATCH + url: + pattern: \S* + type: string + description: "The URL for this entry, relative to the root (the address\ + \ to which the request is posted)." + ifNoneMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "If the ETag values match, return a 304 Not Modified status.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifModifiedSince: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Only perform the operation if the last updated date matches.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Only perform the operation if the Etag value matches. For\ + \ more information, see the API section [\"Managing Resource Contention\"\ + ](http.html#concurrency)." + ifNoneExist: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Instruct the server not to perform the create if a specified\ + \ resource already exists. For further information, see the API documentation\ + \ for [\"Conditional Create\"](http.html#ccreate). This is just the\ + \ query portion of the URL – what follows the \"?\" (not including\ + \ the \"?\")." + Bundle_Entry_Search: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + mode: + type: string + description: "Why this entry is in the result set – whether it's\ + \ included as a match or because of an _include requirement, or to convey\ + \ information or warning information about the search process." + enum: + - match + - include + - outcome + score: + type: number + description: "When searching, the server's search ranking score for the\ + \ entry." + Bundle_Link: + required: + - relation + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + relation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A name which details the functional use for this link –\ + \ see [http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1](http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1)." + url: + pattern: \S* + type: string + description: The reference details for the link. + OperationOutcome_Issue: + required: + - code + - severity + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + severity: + type: string + description: Indicates whether the issue indicates a variation from successful + processing. + enum: + - fatal + - error + - warning + - information + code: + type: string + description: "Describes the type of the issue. The system that creates\ + \ an OperationOutcome SHALL choose the most applicable code from the\ + \ IssueType value set, and may additional provide its own code for the\ + \ error in the details element." + enum: + - invalid + - structure + - required + - value + - invariant + - security + - login + - unknown + - expired + - forbidden + - suppressed + - processing + - not-supported + - duplicate + - multiple-matches + - not-found + - deleted + - too-long + - code-invalid + - extension + - too-costly + - business-rule + - conflict + - transient + - lock-error + - no-store + - exception + - timeout + - incomplete + - throttled + - informational + details: + $ref: '#/components/schemas/CodeableConcept' + diagnostics: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Additional diagnostic information about the issue. + location: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This element is deprecated because it is XML specific.\ + \ It is replaced by issue.expression, which is format independent,\ + \ and simpler to parse. \n\nFor resource issues, this will be a simple\ + \ XPath limited to element names, repetition indicators and the default\ + \ child accessor that identifies one of the elements in the resource\ + \ that caused this issue to be raised. For HTTP errors, will be \"\ + http.\" + the parameter name." + expression: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A [simple subset of FHIRPath](fhirpath.html#simple) limited\ + \ to element names, repetition indicators and the default child accessor\ + \ that identifies one of the elements in the resource that caused\ + \ this issue to be raised." + Element: + type: object + properties: + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: Unique id for the element within a resource (for internal references). + This may be any string value that does not contain spaces. + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + BackboneElement: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Address: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this address. + enum: + - home + - work + - temp + - old + - billing + type: + type: string + description: Distinguishes between physical addresses (those you can visit) + and mailing addresses (e.g. PO Boxes and care–of addresses). Most + addresses are both. + enum: + - postal + - physical + - both + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire address as it should be displayed e.g. + on a postal label. This may be provided instead of or as well as the + specific parts. + line: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This component contains the house number, apartment number,\ + \ street name, street direction, P.O. Box number, delivery hints,\ + \ and similar address information." + city: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The name of the city, town, suburb, village or other community\ + \ or delivery center." + district: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of the administrative area (county). + state: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Sub–unit of a country with limited sovereignty in a + federally organized country. A code may be used if codes are in common + use (e.g. US 2 letter state codes). + postalCode: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A postal code designating a region defined by the postal + service. + country: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Country – a nation as commonly understood or generally + accepted. + period: + $ref: '#/components/schemas/Period' + Age: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Annotation: + required: + - text + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + authorReference: + $ref: '#/components/schemas/Reference' + authorString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The individual responsible for making the annotation. + time: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Indicates when this particular annotation was made. + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The text of the annotation in markdown format. + Attachment: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + contentType: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: Identifies the type of the data in the attachment and allows + a method to be chosen to interpret or render the data. Includes mime + type parameters such as charset where appropriate. + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The human language of the content. The value can be any valid + value according to BCP 47. + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "The actual data of the attachment – a sequence of\ + \ bytes, base64 encoded." + url: + pattern: \S* + type: string + description: A location where the data can be accessed. + size: + type: integer + description: "The number of bytes of data that make up this attachment\ + \ (before base64 encoding, if that is done)." + format: int32 + hash: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The calculated hash of the data using SHA–1. Represented + using base64. + title: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A label or set of text to display in place of the data. + creation: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The date that the attachment was first created. + CodeableConcept: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + coding: + type: array + items: + $ref: '#/components/schemas/Coding' + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human language representation of the concept as seen/selected/uttered + by the user who entered the data and/or which represents the intended + meaning of the user. + Coding: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + pattern: \S* + type: string + description: The identification of the code system that defines the meaning + of the symbol in the code. + version: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The version of the code system which was used when choosing\ + \ this code. Note that a well–maintained code system does not\ + \ need the version reported, because the meaning of codes is consistent\ + \ across versions. However this cannot consistently be assured, and\ + \ when the meaning is not guaranteed to be consistent, the version SHOULD\ + \ be exchanged." + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A symbol in syntax defined by the system. The symbol may + be a predefined code or an expression in a syntax defined by the coding + system (e.g. post–coordination). + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A representation of the meaning of the code in the system,\ + \ following the rules of the system." + userSelected: + type: boolean + description: Indicates that this coding was chosen by a user directly + – e.g. off a pick list of available items (codes or displays). + ContactPoint: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + type: string + description: Telecommunications form for contact point – what communications + system is required to make use of the contact. + enum: + - phone + - fax + - email + - pager + - url + - sms + - other + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The actual contact point details, in a form that is meaningful\ + \ to the designated communication system (i.e. phone number or email\ + \ address)." + use: + type: string + description: Identifies the purpose for the contact point. + enum: + - home + - work + - temp + - old + - mobile + rank: + type: integer + description: Specifies a preferred order in which to use a set of contacts. + ContactPoints with lower rank values are more preferred than those with + higher rank values. + format: int32 + period: + $ref: '#/components/schemas/Period' + Count: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Distance: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Duration: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + HumanName: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: Identifies the purpose for this name. + enum: + - usual + - official + - temp + - nickname + - anonymous + - old + - maiden + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire name as it should be displayed e.g. + on an application UI. This may be provided instead of or as well as + the specific parts. + family: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The part of a name that links to the genealogy. In some cultures + (e.g. Eritrea) the family name of a son is the first name of his father. + given: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Given name. + prefix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ start of the name." + suffix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ end of the name." + period: + $ref: '#/components/schemas/Period' + Identifier: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this identifier. + enum: + - usual + - official + - temp + - secondary + - old + type: + $ref: '#/components/schemas/CodeableConcept' + system: + pattern: \S* + type: string + description: "Establishes the namespace for the value – that is,\ + \ a URL that describes a set values that are unique." + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The portion of the identifier typically relevant to the user + and which is unique within the context of the system. + period: + $ref: '#/components/schemas/Period' + assigner: + $ref: '#/components/schemas/Reference' + Money: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: Numerical value (with implicit precision). + currency: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: ISO 4217 Currency Code. + MoneyQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Period: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + start: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The start of the period. The boundary is inclusive. + end: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "The end of the period. If the end of the period is missing,\ + \ it means no end was known or planned at the time the instance was\ + \ created. The start may be in the past, and the end date in the future,\ + \ which means that period is expected/planned to end at that time." + Quantity: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: The value of the measured amount. The value includes an implicit + precision in the presentation of the value. + comparator: + type: string + description: "How the value should be understood and represented –\ + \ whether the actual value is greater or less than the stated value\ + \ due to measurement issues; e.g. if the comparator is \"<\" , then\ + \ the real value is < stated value." + enum: + - < + - <= + - '>=' + - '>' + unit: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human–readable form of the unit. + system: + pattern: \S* + type: string + description: The identification of the system that provides the coded + form of the unit. + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A computer processable form of the unit in some unit representation + system. + Range: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + low: + $ref: '#/components/schemas/SimpleQuantity' + high: + $ref: '#/components/schemas/SimpleQuantity' + Ratio: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + numerator: + $ref: '#/components/schemas/Quantity' + denominator: + $ref: '#/components/schemas/Quantity' + Reference: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + reference: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a location at which the other resource is\ + \ found. The reference may be a relative reference, in which case it\ + \ is relative to the service base URL, or an absolute URL that resolves\ + \ to the location where the resource is found. The reference may be\ + \ version specific or not. If the reference is not to a FHIR RESTful\ + \ server, then it should be assumed to be version specific. Internal\ + \ fragment references (start with '#') refer to contained resources." + type: + pattern: \S* + type: string + description: "The expected type of the target of the reference. If both\ + \ Reference.type and Reference.reference are populated and Reference.reference\ + \ is a FHIR URL, both SHALL be consistent.\n\nThe type is the Canonical\ + \ URL of Resource Definition that is the type this reference refers\ + \ to. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition/\ + \ e.g. \"Patient\" is a reference to http://hl7.org/fhir/StructureDefinition/Patient.\ + \ Absolute URLs are only allowed for logical models (and can only be\ + \ used in references in logical models, not resources)." + identifier: + $ref: '#/components/schemas/Identifier' + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Plain text narrative that identifies the resource in addition + to the resource reference. + SampledData: + required: + - dimensions + - origin + - period + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + origin: + $ref: '#/components/schemas/SimpleQuantity' + period: + type: number + description: "The length of time between sampling times, measured in milliseconds." + factor: + type: number + description: A correction factor that is applied to the sampled data points + before they are added to the origin. + lowerLimit: + type: number + description: The lower limit of detection of the measured points. This + is needed if any of the data points have the value "L" (lower than detection + limit). + upperLimit: + type: number + description: The upper limit of detection of the measured points. This + is needed if any of the data points have the value "U" (higher than + detection limit). + dimensions: + type: integer + description: "The number of sample points at each time point. If this\ + \ value is greater than one, then the dimensions will be interlaced\ + \ – all the sample points for a point in time will be recorded\ + \ at once." + format: int32 + data: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A series of data points which are decimal values separated\ + \ by a single space (character u20). The special values \"E\" (error),\ + \ \"L\" (below detection limit) and \"U\" (above detection limit) can\ + \ also be used in place of a decimal value." + SimpleQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Signature: + required: + - type + - when + - who + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: array + items: + $ref: '#/components/schemas/Coding' + when: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the digital signature was signed. + who: + $ref: '#/components/schemas/Reference' + onBehalfOf: + $ref: '#/components/schemas/Reference' + targetFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A mime type that indicates the technical format of the target + resources signed by the signature. + sigFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "A mime type that indicates the technical format of the signature.\ + \ Important mime types are application/signature+xml for X ML DigSig,\ + \ application/jose for JWS, and image/* for a graphical image of a signature,\ + \ etc." + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The base64 encoding of the Signature content. When signature + is not recorded electronically this element would be empty. + Timing: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + event: + type: array + items: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Identifies specific times when the event occurs. + repeat: + $ref: '#/components/schemas/Timing_Repeat' + code: + $ref: '#/components/schemas/CodeableConcept' + Timing_Repeat: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + boundsDuration: + $ref: '#/components/schemas/Duration' + boundsRange: + $ref: '#/components/schemas/Range' + boundsPeriod: + $ref: '#/components/schemas/Period' + count: + type: integer + description: "A total count of the desired number of repetitions across\ + \ the duration of the entire timing specification. If countMax is present,\ + \ this element indicates the lower bound of the allowed range of count\ + \ values." + format: int32 + countMax: + type: integer + description: "If present, indicates that the count is a range –\ + \ so to perform the action between [count] and [countMax] times." + format: int32 + duration: + type: number + description: "How long this thing happens for when it happens. If durationMax\ + \ is present, this element indicates the lower bound of the allowed\ + \ range of the duration." + durationMax: + type: number + description: "If present, indicates that the duration is a range –\ + \ so to perform the action between [duration] and [durationMax] time\ + \ length." + durationUnit: + type: string + description: "The units of time for the duration, in UCUM units." + enum: + - s + - min + - h + - d + - wk + - mo + - a + frequency: + type: integer + description: "The number of times to repeat the action within the specified\ + \ period. If frequencyMax is present, this element indicates the lower\ + \ bound of the allowed range of the frequency." + format: int32 + frequencyMax: + type: integer + description: "If present, indicates that the frequency is a range –\ + \ so to repeat between [frequency] and [frequencyMax] times within the\ + \ period or period range." + format: int32 + period: + type: number + description: "Indicates the duration of time over which repetitions are\ + \ to occur; e.g. to express \"3 times per day\", 3 would be the frequency\ + \ and \"1 day\" would be the period. If periodMax is present, this element\ + \ indicates the lower bound of the allowed range of the period length." + periodMax: + type: number + description: "If present, indicates that the period is a range from [period]\ + \ to [periodMax], allowing expressing concepts such as \"do this once\ + \ every 3–5 days." + periodUnit: + type: string + description: The units of time for the period in UCUM units. + enum: + - s + - min + - h + - d + - wk + - mo + - a + dayOfWeek: + type: array + items: + type: string + description: "If one or more days of week is provided, then the action\ + \ happens only on the specified day(s)." + enum: + - mon + - tue + - wed + - thu + - fri + - sat + - sun + timeOfDay: + type: array + items: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: Specified time of day for action to take place. + when: + type: array + items: + type: string + description: "An approximate time period during the day, potentially\ + \ linked to an event of daily living that indicates when the action\ + \ should occur." + enum: + - MORN + - MORN.early + - MORN.late + - NOON + - AFT + - AFT.early + - AFT.late + - EVE + - EVE.early + - EVE.late + - NIGHT + - PHS + - HS + - WAKE + - C + - CM + - CD + - CV + - AC + - ACM + - ACD + - ACV + - PC + - PCM + - PCD + - PCV + offset: + type: integer + description: "The number of minutes from the event. If the event code\ + \ does not indicate whether the minutes is before or after the event,\ + \ then the offset is assumed to be after the event." + format: int32 + ContactDetail: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + name: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of an individual to contact. + telecom: + type: array + items: + $ref: '#/components/schemas/ContactPoint' + RelatedArtifact: + required: + - type + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: string + description: The type of relationship to the related artifact. + enum: + - documentation + - justification + - citation + - predecessor + - successor + - derived-from + - depends-on + - composed-of + label: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A short label that can be used to reference the citation\ + \ from elsewhere in the containing artifact, such as a footnote index." + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A brief description of the document or knowledge resource\ + \ being referenced, suitable for display to a consumer." + citation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A bibliographic citation for the related artifact. This text + SHOULD be formatted according to an accepted citation format. + url: + pattern: \S* + type: string + description: A url for the artifact that can be followed to access the + actual content. + document: + $ref: '#/components/schemas/Attachment' + resource: + pattern: \S* + type: string + description: "The related resource, such as a library, value set, profile,\ + \ or other knowledge resource." + UsageContext: + required: + - code + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + code: + $ref: '#/components/schemas/Coding' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueReference: + $ref: '#/components/schemas/Reference' + Meta: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + versionId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The version specific identifier, as it appears in the version\ + \ portion of the URL. This value changes when the resource is created,\ + \ updated, or deleted." + lastUpdated: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the resource last changed – e.g. when the version + changed. + source: + pattern: \S* + type: string + description: "A uri that identifies the source system of the resource.\ + \ This provides a minimal amount of [Provenance](provenance.html#) information\ + \ that can be used to track or differentiate the source of information\ + \ in the resource. The source may identify another FHIR server, document,\ + \ message, database, etc." + profile: + type: array + items: + pattern: \S* + type: string + description: "A list of profiles (references to [StructureDefinition](structuredefinition.html#)\ + \ resources) that this resource claims to conform to. The URL is a\ + \ reference to [StructureDefinition.url](structuredefinition–definitions.html#StructureDefinition.url)." + security: + type: array + items: + $ref: '#/components/schemas/Coding' + tag: + type: array + items: + $ref: '#/components/schemas/Coding' + Narrative: + required: + - div + - status + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + status: + type: string + description: "The status of the narrative – whether it's entirely\ + \ generated (from just the defined data or the extensions too), or whether\ + \ a human authored it and it may contain additional data." + enum: + - generated + - extensions + - additional + - empty + div: + type: string + description: "The actual narrative content, a stripped down version of\ + \ XHTML." + Extension: + required: + - url + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + url: + pattern: \S* + type: string + description: Source of the definition for the extension code – a + logical name or a URL. + valueBase64Binary: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueBoolean: + type: boolean + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCanonical: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCode: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDate: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDateTime: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDecimal: + type: number + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInstant: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInteger: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueMarkdown: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueOid: + pattern: "urn:oid:[0-2](\\.(0|[1-9][0-9]*))+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valuePositiveInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueTime: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUnsignedInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueUri: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUrl: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUuid: + pattern: "urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueAddress: + $ref: '#/components/schemas/Address' + valueAge: + $ref: '#/components/schemas/Age' + valueAnnotation: + $ref: '#/components/schemas/Annotation' + valueAttachment: + $ref: '#/components/schemas/Attachment' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueCoding: + $ref: '#/components/schemas/Coding' + valueContactPoint: + $ref: '#/components/schemas/ContactPoint' + valueCount: + $ref: '#/components/schemas/Count' + valueDistance: + $ref: '#/components/schemas/Distance' + valueDuration: + $ref: '#/components/schemas/Duration' + valueHumanName: + $ref: '#/components/schemas/HumanName' + valueIdentifier: + $ref: '#/components/schemas/Identifier' + valueMoney: + $ref: '#/components/schemas/Money' + valuePeriod: + $ref: '#/components/schemas/Period' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueRatio: + $ref: '#/components/schemas/Ratio' + valueReference: + $ref: '#/components/schemas/Reference' + valueSampledData: + $ref: '#/components/schemas/SampledData' + valueSignature: + $ref: '#/components/schemas/Signature' + valueTiming: + $ref: '#/components/schemas/Timing' + valueContactDetail: + $ref: '#/components/schemas/ContactDetail' + valueRelatedArtifact: + $ref: '#/components/schemas/RelatedArtifact' + valueUsageContext: + $ref: '#/components/schemas/UsageContext' + valueMeta: + $ref: '#/components/schemas/Meta' + Appointment: + required: + - participant + - status + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + serviceType: + $ref: '#/components/schemas/CodeableConcept' + extension: + $ref: '#/components/schemas/Extension' + specialty: + $ref: '#/components/schemas/CodeableConcept' + modifierExtension: + $ref: '#/components/schemas/Extension' + reasonReference: + $ref: '#/components/schemas/Reference' + description: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The brief description of the appointment as would be shown\ + \ on a subject line in a meeting request, or appointment list. Detailed\ + \ or expanded information should be put in the comment field." + language: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The base language in which the resource is written. + requestedPeriod: + $ref: '#/components/schemas/Period' + minutesDuration: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Number of minutes that the appointment is to take. This\ + \ can be less than the duration between the start and end times. For\ + \ example, where the actual time of appointment is only an estimate\ + \ or if a 30 minute appointment is being requested, but any time would\ + \ work. Also, if there is, for example, a planned 15 minute break in\ + \ the middle of a long appointment, the duration may be 15 minutes less\ + \ than the difference between the start and end." + slot: + $ref: '#/components/schemas/Reference' + type: + $ref: '#/components/schemas/CodeableConcept' + serviceCategory: + $ref: '#/components/schemas/CodeableConcept' + participant: + $ref: '#/components/schemas/BackboneElement' + required: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Whether this participant is required to be present at the\ + \ meeting. This covers a use-case where two doctors need to meet to\ + \ discuss the results for a specific patient, and the patient is not\ + \ required to be present." + end: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Date/Time that the appointment is to conclude. + id: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Unique id for the element within a resource (for internal + references). This may be any string value that does not contain spaces. + text: + $ref: '#/components/schemas/Narrative' + reasonCode: + $ref: '#/components/schemas/CodeableConcept' + basedOn: + $ref: '#/components/schemas/Reference' + identifier: + $ref: '#/components/schemas/Identifier' + appointmentType: + $ref: '#/components/schemas/CodeableConcept' + period: + $ref: '#/components/schemas/Period' + created: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The date that this appointment was initially created. This\ + \ could be different to the meta.lastModified value on the initial entry,\ + \ as this could have been before the resource was created on the FHIR\ + \ server, and should remain unchanged over the lifespan of the appointment." + supportingInformation: + $ref: '#/components/schemas/Reference' + start: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Date/Time that the appointment is to take place. + priority: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The priority of the appointment. Can be used to make informed\ + \ decisions if needing to re-prioritize appointments. (The iCal Standard\ + \ specifies 0 as undefined, 1 as highest, 9 as lowest priority)." + actor: + $ref: '#/components/schemas/Reference' + contained: + $ref: '#/components/schemas/Resource' + meta: + $ref: '#/components/schemas/Meta' + implicitRules: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide\ + \ that defines the special rules along with other profiles etc." + comment: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Additional comments about the appointment. + status: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Participation status of the actor. + cancelationReason: + $ref: '#/components/schemas/CodeableConcept' + patientInstruction: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "While Appointment.comment contains information for internal\ + \ use, Appointment.patientInstructions is used to capture patient facing\ + \ information about the Appointment (e.g. please bring your referral\ + \ or fast from 8pm night before)." + parameters: + _lastUpdatedParam: + name: _lastUpdated + in: query + description: When the resource version last changed + required: false + style: form + explode: true + schema: + type: string + _securityParam: + name: _security + in: query + description: Security Labels applied to this resource + required: false + style: form + explode: true + schema: + type: string + _tagParam: + name: _tag + in: query + description: Tags applied to this resource + required: false + style: form + explode: true + schema: + type: string + _idParam: + name: _id + in: query + description: Logical id of this artifact + required: false + style: form + explode: true + schema: + type: string + _sourceParam: + name: _source + in: query + description: Identifies where the resource comes from + required: false + style: form + explode: true + schema: + type: string + _profileParam: + name: _profile + in: query + description: Profiles this resource claims to conform to + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://localhost:8243/authorize + scopes: {} +x-wso2-oh-fhir-resourceType: Appointment +x-wso2-oh-fhir-profile: +- http://hl7.org/fhir/StructureDefinition/Appointment diff --git a/schedule-appointment-process-API/aggregate-service/oas/LocationAPI.yaml b/schedule-appointment-process-API/aggregate-service/oas/LocationAPI.yaml new file mode 100644 index 000000000..b13cacb6c --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/oas/LocationAPI.yaml @@ -0,0 +1,2061 @@ +openapi: 3.0.1 +info: + title: LocationAPI + description: "A simplified version of the HL7 FHIR API for Location resource.\n\ + Supported Profiles: \nhttp://hl7.org/fhir/StructureDefinition/Location\n" + contact: + name: API Support + url: https://wso2.com/contact/ + email: info@wso2.com + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +tags: +- name: international +- name: Location +- name: 4.0.1 +paths: + /fhir/r4/Location: + get: + tags: + - GET + - Location + summary: search Location + description: This operation is used to search a Location + parameters: + - name: address-postalcode + in: query + description: A postal code specified in an address + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: name + in: query + description: A portion of the location's name or alias + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: address-use + in: query + description: A use code specified in an address + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: partof + in: query + description: A location of which this location is a part + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: address-city + in: query + description: A city specified in an address + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: operational-status + in: query + description: "Searches for locations (typically bed/room) that have an operational\ + \ status (e.g. contaminated, housekeeping)" + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: address + in: query + description: A (part of the) address of the location + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: address-country + in: query + description: A country specified in an address + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: endpoint + in: query + description: Technical endpoints providing access to services operated for + the location + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: near + in: query + description: "Search for locations where the location.position is near to,\ + \ or within a specified distance of, the provided coordinates expressed\ + \ as [latitude]|[longitude]|[distance]|[units] (using the WGS84 datum, see\ + \ notes).\nIf the units are omitted, then kms should be assumed. If the\ + \ distance is omitted, then the server can use its own discretion as to\ + \ what distances should be considered near (and units are irrelevant)\n\n\ + Servers may search using various techniques that might have differing accuracies,\ + \ depending on implementation efficiency.\n\nRequires the near-distance\ + \ parameter to be provided also" + required: false + schema: + type: string + x-wso2-oh-fhirType: special + - name: identifier + in: query + description: An identifier for the location + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: organization + in: query + description: Searches for locations that are managed by the provided organization + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: status + in: query + description: Searches for locations with a specific kind of status + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: type + in: query + description: A code for the type of location + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: address-state + in: query + description: A state specified in an address + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - $ref: '#/components/parameters/_lastUpdatedParam' + - $ref: '#/components/parameters/_securityParam' + - $ref: '#/components/parameters/_tagParam' + - $ref: '#/components/parameters/_idParam' + - $ref: '#/components/parameters/_sourceParam' + - $ref: '#/components/parameters/_profileParam' + responses: + "200": + description: search Location operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Bundle' + security: + - default: [] + post: + tags: + - POST + - Location + summary: create Location + description: This operation is used to create a Location + responses: + "201": + description: create Location operation successful + security: + - default: [] + /fhir/r4/Location/{id}: + get: + tags: + - GET + - Location + summary: read Location + description: This operation is used to read a Location + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "200": + description: read Location operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Location' + security: + - default: [] + put: + tags: + - PUT + - Location + summary: update Location + description: This operation is used to update a Location + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "201": + description: update Location operation successful + security: + - default: [] + delete: + tags: + - DELETE + - Location + summary: delete Location + description: This operation is used to delete a Location + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "204": + description: delete Location operation successful + security: + - default: [] +components: + schemas: + Resource: + required: + - resourceType + type: object + properties: + resourceType: + type: string + enum: + - Account + - ActivityDefinition + - AdverseEvent + - AllergyIntolerance + - Appointment + - AppointmentResponse + - AuditEvent + - Basic + - Binary + - BiologicallyDerivedProduct + - BodyStructure + - Bundle + - CapabilityStatement + - CarePlan + - CareTeam + - CatalogEntry + - ChargeItem + - ChargeItemDefinition + - Claim + - ClaimResponse + - ClinicalImpression + - CodeSystem + - Communication + - CommunicationRequest + - CompartmentDefinition + - Composition + - ConceptMap + - Condition + - Consent + - Contract + - Coverage + - CoverageEligibilityRequest + - CoverageEligibilityResponse + - DetectedIssue + - Device + - DeviceDefinition + - DeviceMetric + - DeviceRequest + - DeviceUseStatement + - DiagnosticReport + - DocumentManifest + - DocumentReference + - DomainResource + - EffectEvidenceSynthesis + - Encounter + - Endpoint + - EnrollmentRequest + - EnrollmentResponse + - EpisodeOfCare + - EventDefinition + - Evidence + - EvidenceVariable + - ExampleScenario + - ExplanationOfBenefit + - FamilyMemberHistory + - Flag + - Goal + - GraphDefinition + - Group + - GuidanceResponse + - HealthcareService + - ImagingStudy + - Immunization + - ImmunizationEvaluation + - ImmunizationRecommendation + - ImplementationGuide + - InsurancePlan + - Invoice + - Library + - Linkage + - List + - Location + - Measure + - MeasureReport + - Media + - Medication + - MedicationAdministration + - MedicationDispense + - MedicationKnowledge + - MedicationRequest + - MedicationStatement + - MedicinalProduct + - MedicinalProductAuthorization + - MedicinalProductContraindication + - MedicinalProductIndication + - MedicinalProductIngredient + - MedicinalProductInteraction + - MedicinalProductManufactured + - MedicinalProductPackaged + - MedicinalProductPharmaceutical + - MedicinalProductUndesirableEffect + - MessageDefinition + - MessageHeader + - MolecularSequence + - NamingSystem + - NutritionOrder + - Observation + - ObservationDefinition + - OperationDefinition + - OperationOutcome + - Organization + - OrganizationAffiliation + - Parameters + - Patient + - PaymentNotice + - PaymentReconciliation + - Person + - PlanDefinition + - Practitioner + - PractitionerRole + - Procedure + - Provenance + - Questionnaire + - QuestionnaireResponse + - RelatedPerson + - RequestGroup + - ResearchDefinition + - ResearchElementDefinition + - ResearchStudy + - ResearchSubject + - Resource + - RiskAssessment + - RiskEvidenceSynthesis + - Schedule + - SearchParameter + - ServiceRequest + - Slot + - Specimen + - SpecimenDefinition + - StructureDefinition + - StructureMap + - Subscription + - Substance + - SubstanceNucleicAcid + - SubstancePolymer + - SubstanceProtein + - SubstanceReferenceInformation + - SubstanceSourceMaterial + - SubstanceSpecification + - SupplyDelivery + - SupplyRequest + - Task + - TerminologyCapabilities + - TestReport + - TestScript + - ValueSet + - VerificationResult + - VisionPrescription + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The logical id of the resource, as used in the URL for the\ + \ resource. Once assigned, this value never changes." + meta: + $ref: '#/components/schemas/Meta' + implicitRules: + pattern: \S* + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide that\ + \ defines the special rules along with other profiles etc." + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The base language in which the resource is written. + DomainResource: + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + text: + $ref: '#/components/schemas/Narrative' + contained: + type: array + items: + $ref: '#/components/schemas/Resource' + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Bundle: + required: + - type + example: + resourceType: Bundle + meta: + versionId: exaha1GMZU + lastUpdated: 2020-03-12T00:11:47.779-04:00 + source: OscBE5P0oL + profile: + - 2t1_PYz6sb + security: + - system: __ZQLAVVwf + version: VLbtqKcbsY + code: VUlDjytwgy + display: qiSsBMDgPt + userSelected: true + tag: + - system: zjCxD2PaBs + version: rzU1dChGRU + code: T_fA90_uZ3 + display: lX3NJdEblQ + userSelected: true + - code: ibm/complete-mock + implicitRules: vor6NZfU_z + language: L2CvMvoQCf + identifier: + use: temp + type: + coding: + - system: 2KSvg9_FAi + version: gGp8DOk9J1 + code: mfTsOuaMha + display: oWF_kySdMa + userSelected: true + text: JCfLMefieh + system: OD8o0wUurR + value: rB39S_eWKm + period: + start: 2020-03-12T00:11:47.781-04:00 + end: 2020-03-12T00:11:47.781-04:00 + type: message + timestamp: 2020-03-12T00:11:47.768-04:00 + total: 253899444 + link: + - relation: 7ntmg3QgsB + url: yqZC1h4OiP + entry: + - link: + - relation: BYqAgl7fxn + url: FjYy1I_fo0 + fullUrl: jRHNMRSGoH + search: + mode: outcome + score: 215939698769 + request: + method: HEAD + url: fsGmEqxt_V + ifNoneMatch: 9Ce9vVtTEJ + ifModifiedSince: 2020-03-12T00:11:47.776-04:00 + ifMatch: PtLujM597v + ifNoneExist: thVohqaRoO + response: + status: Vz647bKzDX + location: vG6ZG5JY3n + etag: UAy7mNeNeo + lastModified: 2020-03-12T00:11:47.773-04:00 + signature: + type: + - system: UXJhVBJtsw + version: dSN1eoXw7X + code: 7n8GNkS7ty + display: Ff82O7MvgK + userSelected: true + when: 2020-03-12T00:11:47.767-04:00 + who: + reference: Practitioner/8Jt_8Rtofu + type: Practitioner + identifier: + use: secondary + type: + coding: + - system: aOvIofeYmD + version: mNBmEi5RDA + code: sM5gtqK3Xw + display: aOf6nJImxy + userSelected: true + text: zaOFAoPxBA + system: C70kG_5CcM + value: TYMT3hKJFR + period: + start: 2020-03-12T00:11:47.765-04:00 + end: 2020-03-12T00:11:47.765-04:00 + display: 5vUkPEw2_I + onBehalfOf: + reference: Practitioner/PEch7CxGIg + type: Practitioner + identifier: + use: usual + type: + coding: + - system: ixnevWoHGy + version: hJQzXghlpb + code: h6NurXxnyH + display: C0fDviMSsU + userSelected: true + text: izhrMjXk74 + system: giGNRU5rWU + value: e7_ezY1vVp + period: + start: 2020-03-12T00:11:47.767-04:00 + end: 2020-03-12T00:11:47.767-04:00 + display: nWuUixICQd + targetFormat: F93ISQKaDY + sigFormat: Qx2S3AEiMQ + data: AGxIVG4= + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + identifier: + $ref: '#/components/schemas/Identifier' + type: + type: string + description: Indicates the purpose of this bundle – how it is intended + to be used. + enum: + - document + - message + - transaction + - transaction-response + - batch + - batch-response + - history + - searchset + - collection + timestamp: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the bundle was assembled – i.e. + when the resources were placed in the bundle. + total: + type: integer + description: "If a set of search matches, this is the total number of\ + \ entries of type 'match' across all pages in the search. It does not\ + \ include search.mode = 'include' or 'outcome' entries and it does not\ + \ provide a count of the number of entries in the Bundle." + format: int32 + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + entry: + type: array + items: + $ref: '#/components/schemas/Bundle_Entry' + signature: + $ref: '#/components/schemas/Signature' + OperationOutcome: + required: + - issue + example: + resourceType: OperationOutcome + meta: + versionId: aj7xYfDKGG + lastUpdated: 2020-03-12T00:11:56.482-04:00 + source: ZqswRdBz2V + profile: + - 7MtlUHdgF3 + security: + - system: eBZLDvfQS6 + version: 3loXo6Bekk + code: fApLgubn5v + display: hGDoUOaTiY + userSelected: true + tag: + - system: d6ZKFrRy9C + version: co9wqQZDjO + code: Z2JT_ZxmeR + display: f5JMtds3fb + userSelected: true + - code: ibm/complete-mock + implicitRules: FwNANOTUkD + language: iDvESiu0cB + text: + status: extensions + div:
+ issue: + - severity: warning + code: invariant + details: + coding: + - system: 9TiBhtaNhv + version: 38XIrYkjYf + code: s4dzxZ4dsW + display: tu3Q0RYWRq + userSelected: true + text: qW3nzpKNue + diagnostics: 4zXKgm6Eae + location: + - EmMlBkbb8W + expression: + - bSBqh22fAT + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + issue: + type: array + items: + $ref: '#/components/schemas/OperationOutcome_Issue' + Bundle_Entry: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + fullUrl: + pattern: \S* + type: string + description: "The Absolute URL for the resource. The fullUrl SHALL NOT\ + \ disagree with the id in the resource – i.e. if the fullUrl is\ + \ not a urn:uuid, the URL shall be version–independent URL consistent\ + \ with the Resource.id. The fullUrl is a version independent reference\ + \ to the resource. The fullUrl element SHALL have a value except that:\ + \ \n* fullUrl can be empty on a POST (although it does not need to when\ + \ specifying a temporary id for reference in the bundle)\n* Results\ + \ from operations might involve resources that are not identified." + resource: + $ref: '#/components/schemas/Resource' + search: + $ref: '#/components/schemas/Bundle_Entry_Search' + request: + $ref: '#/components/schemas/Bundle_Entry_Request' + response: + $ref: '#/components/schemas/Bundle_Entry_Response' + Bundle_Entry_Response: + required: + - status + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + status: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The status code returned by processing this entry. The status + SHALL start with a 3 digit HTTP code (e.g. 404) and may contain the + standard HTTP description associated with the status code. + location: + pattern: \S* + type: string + description: "The location header created by processing this operation,\ + \ populated if the operation returns a location." + etag: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The Etag for the resource, if the operation for the entry\ + \ produced a versioned resource (see [Resource Metadata and Versioning](http.html#versioning)\ + \ and [Managing Resource Contention](http.html#concurrency))." + lastModified: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the resource was modified on the server. + outcome: + $ref: '#/components/schemas/Resource' + Bundle_Entry_Request: + required: + - method + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + method: + type: string + description: "In a transaction or batch, this is the HTTP action to be\ + \ executed for this entry. In a history bundle, this indicates the HTTP\ + \ action that occurred." + enum: + - GET + - HEAD + - POST + - PUT + - DELETE + - PATCH + url: + pattern: \S* + type: string + description: "The URL for this entry, relative to the root (the address\ + \ to which the request is posted)." + ifNoneMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "If the ETag values match, return a 304 Not Modified status.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifModifiedSince: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Only perform the operation if the last updated date matches.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Only perform the operation if the Etag value matches. For\ + \ more information, see the API section [\"Managing Resource Contention\"\ + ](http.html#concurrency)." + ifNoneExist: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Instruct the server not to perform the create if a specified\ + \ resource already exists. For further information, see the API documentation\ + \ for [\"Conditional Create\"](http.html#ccreate). This is just the\ + \ query portion of the URL – what follows the \"?\" (not including\ + \ the \"?\")." + Bundle_Entry_Search: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + mode: + type: string + description: "Why this entry is in the result set – whether it's\ + \ included as a match or because of an _include requirement, or to convey\ + \ information or warning information about the search process." + enum: + - match + - include + - outcome + score: + type: number + description: "When searching, the server's search ranking score for the\ + \ entry." + Bundle_Link: + required: + - relation + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + relation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A name which details the functional use for this link –\ + \ see [http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1](http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1)." + url: + pattern: \S* + type: string + description: The reference details for the link. + OperationOutcome_Issue: + required: + - code + - severity + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + severity: + type: string + description: Indicates whether the issue indicates a variation from successful + processing. + enum: + - fatal + - error + - warning + - information + code: + type: string + description: "Describes the type of the issue. The system that creates\ + \ an OperationOutcome SHALL choose the most applicable code from the\ + \ IssueType value set, and may additional provide its own code for the\ + \ error in the details element." + enum: + - invalid + - structure + - required + - value + - invariant + - security + - login + - unknown + - expired + - forbidden + - suppressed + - processing + - not-supported + - duplicate + - multiple-matches + - not-found + - deleted + - too-long + - code-invalid + - extension + - too-costly + - business-rule + - conflict + - transient + - lock-error + - no-store + - exception + - timeout + - incomplete + - throttled + - informational + details: + $ref: '#/components/schemas/CodeableConcept' + diagnostics: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Additional diagnostic information about the issue. + location: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This element is deprecated because it is XML specific.\ + \ It is replaced by issue.expression, which is format independent,\ + \ and simpler to parse. \n\nFor resource issues, this will be a simple\ + \ XPath limited to element names, repetition indicators and the default\ + \ child accessor that identifies one of the elements in the resource\ + \ that caused this issue to be raised. For HTTP errors, will be \"\ + http.\" + the parameter name." + expression: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A [simple subset of FHIRPath](fhirpath.html#simple) limited\ + \ to element names, repetition indicators and the default child accessor\ + \ that identifies one of the elements in the resource that caused\ + \ this issue to be raised." + Element: + type: object + properties: + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: Unique id for the element within a resource (for internal references). + This may be any string value that does not contain spaces. + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + BackboneElement: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Address: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this address. + enum: + - home + - work + - temp + - old + - billing + type: + type: string + description: Distinguishes between physical addresses (those you can visit) + and mailing addresses (e.g. PO Boxes and care–of addresses). Most + addresses are both. + enum: + - postal + - physical + - both + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire address as it should be displayed e.g. + on a postal label. This may be provided instead of or as well as the + specific parts. + line: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This component contains the house number, apartment number,\ + \ street name, street direction, P.O. Box number, delivery hints,\ + \ and similar address information." + city: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The name of the city, town, suburb, village or other community\ + \ or delivery center." + district: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of the administrative area (county). + state: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Sub–unit of a country with limited sovereignty in a + federally organized country. A code may be used if codes are in common + use (e.g. US 2 letter state codes). + postalCode: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A postal code designating a region defined by the postal + service. + country: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Country – a nation as commonly understood or generally + accepted. + period: + $ref: '#/components/schemas/Period' + Age: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Annotation: + required: + - text + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + authorReference: + $ref: '#/components/schemas/Reference' + authorString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The individual responsible for making the annotation. + time: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Indicates when this particular annotation was made. + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The text of the annotation in markdown format. + Attachment: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + contentType: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: Identifies the type of the data in the attachment and allows + a method to be chosen to interpret or render the data. Includes mime + type parameters such as charset where appropriate. + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The human language of the content. The value can be any valid + value according to BCP 47. + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "The actual data of the attachment – a sequence of\ + \ bytes, base64 encoded." + url: + pattern: \S* + type: string + description: A location where the data can be accessed. + size: + type: integer + description: "The number of bytes of data that make up this attachment\ + \ (before base64 encoding, if that is done)." + format: int32 + hash: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The calculated hash of the data using SHA–1. Represented + using base64. + title: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A label or set of text to display in place of the data. + creation: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The date that the attachment was first created. + CodeableConcept: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + coding: + type: array + items: + $ref: '#/components/schemas/Coding' + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human language representation of the concept as seen/selected/uttered + by the user who entered the data and/or which represents the intended + meaning of the user. + Coding: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + pattern: \S* + type: string + description: The identification of the code system that defines the meaning + of the symbol in the code. + version: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The version of the code system which was used when choosing\ + \ this code. Note that a well–maintained code system does not\ + \ need the version reported, because the meaning of codes is consistent\ + \ across versions. However this cannot consistently be assured, and\ + \ when the meaning is not guaranteed to be consistent, the version SHOULD\ + \ be exchanged." + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A symbol in syntax defined by the system. The symbol may + be a predefined code or an expression in a syntax defined by the coding + system (e.g. post–coordination). + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A representation of the meaning of the code in the system,\ + \ following the rules of the system." + userSelected: + type: boolean + description: Indicates that this coding was chosen by a user directly + – e.g. off a pick list of available items (codes or displays). + ContactPoint: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + type: string + description: Telecommunications form for contact point – what communications + system is required to make use of the contact. + enum: + - phone + - fax + - email + - pager + - url + - sms + - other + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The actual contact point details, in a form that is meaningful\ + \ to the designated communication system (i.e. phone number or email\ + \ address)." + use: + type: string + description: Identifies the purpose for the contact point. + enum: + - home + - work + - temp + - old + - mobile + rank: + type: integer + description: Specifies a preferred order in which to use a set of contacts. + ContactPoints with lower rank values are more preferred than those with + higher rank values. + format: int32 + period: + $ref: '#/components/schemas/Period' + Count: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Distance: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Duration: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + HumanName: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: Identifies the purpose for this name. + enum: + - usual + - official + - temp + - nickname + - anonymous + - old + - maiden + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire name as it should be displayed e.g. + on an application UI. This may be provided instead of or as well as + the specific parts. + family: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The part of a name that links to the genealogy. In some cultures + (e.g. Eritrea) the family name of a son is the first name of his father. + given: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Given name. + prefix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ start of the name." + suffix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ end of the name." + period: + $ref: '#/components/schemas/Period' + Identifier: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this identifier. + enum: + - usual + - official + - temp + - secondary + - old + type: + $ref: '#/components/schemas/CodeableConcept' + system: + pattern: \S* + type: string + description: "Establishes the namespace for the value – that is,\ + \ a URL that describes a set values that are unique." + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The portion of the identifier typically relevant to the user + and which is unique within the context of the system. + period: + $ref: '#/components/schemas/Period' + assigner: + $ref: '#/components/schemas/Reference' + Money: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: Numerical value (with implicit precision). + currency: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: ISO 4217 Currency Code. + MoneyQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Period: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + start: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The start of the period. The boundary is inclusive. + end: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "The end of the period. If the end of the period is missing,\ + \ it means no end was known or planned at the time the instance was\ + \ created. The start may be in the past, and the end date in the future,\ + \ which means that period is expected/planned to end at that time." + Quantity: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: The value of the measured amount. The value includes an implicit + precision in the presentation of the value. + comparator: + type: string + description: "How the value should be understood and represented –\ + \ whether the actual value is greater or less than the stated value\ + \ due to measurement issues; e.g. if the comparator is \"<\" , then\ + \ the real value is < stated value." + enum: + - < + - <= + - '>=' + - '>' + unit: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human–readable form of the unit. + system: + pattern: \S* + type: string + description: The identification of the system that provides the coded + form of the unit. + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A computer processable form of the unit in some unit representation + system. + Range: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + low: + $ref: '#/components/schemas/SimpleQuantity' + high: + $ref: '#/components/schemas/SimpleQuantity' + Ratio: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + numerator: + $ref: '#/components/schemas/Quantity' + denominator: + $ref: '#/components/schemas/Quantity' + Reference: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + reference: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a location at which the other resource is\ + \ found. The reference may be a relative reference, in which case it\ + \ is relative to the service base URL, or an absolute URL that resolves\ + \ to the location where the resource is found. The reference may be\ + \ version specific or not. If the reference is not to a FHIR RESTful\ + \ server, then it should be assumed to be version specific. Internal\ + \ fragment references (start with '#') refer to contained resources." + type: + pattern: \S* + type: string + description: "The expected type of the target of the reference. If both\ + \ Reference.type and Reference.reference are populated and Reference.reference\ + \ is a FHIR URL, both SHALL be consistent.\n\nThe type is the Canonical\ + \ URL of Resource Definition that is the type this reference refers\ + \ to. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition/\ + \ e.g. \"Patient\" is a reference to http://hl7.org/fhir/StructureDefinition/Patient.\ + \ Absolute URLs are only allowed for logical models (and can only be\ + \ used in references in logical models, not resources)." + identifier: + $ref: '#/components/schemas/Identifier' + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Plain text narrative that identifies the resource in addition + to the resource reference. + SampledData: + required: + - dimensions + - origin + - period + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + origin: + $ref: '#/components/schemas/SimpleQuantity' + period: + type: number + description: "The length of time between sampling times, measured in milliseconds." + factor: + type: number + description: A correction factor that is applied to the sampled data points + before they are added to the origin. + lowerLimit: + type: number + description: The lower limit of detection of the measured points. This + is needed if any of the data points have the value "L" (lower than detection + limit). + upperLimit: + type: number + description: The upper limit of detection of the measured points. This + is needed if any of the data points have the value "U" (higher than + detection limit). + dimensions: + type: integer + description: "The number of sample points at each time point. If this\ + \ value is greater than one, then the dimensions will be interlaced\ + \ – all the sample points for a point in time will be recorded\ + \ at once." + format: int32 + data: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A series of data points which are decimal values separated\ + \ by a single space (character u20). The special values \"E\" (error),\ + \ \"L\" (below detection limit) and \"U\" (above detection limit) can\ + \ also be used in place of a decimal value." + SimpleQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Signature: + required: + - type + - when + - who + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: array + items: + $ref: '#/components/schemas/Coding' + when: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the digital signature was signed. + who: + $ref: '#/components/schemas/Reference' + onBehalfOf: + $ref: '#/components/schemas/Reference' + targetFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A mime type that indicates the technical format of the target + resources signed by the signature. + sigFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "A mime type that indicates the technical format of the signature.\ + \ Important mime types are application/signature+xml for X ML DigSig,\ + \ application/jose for JWS, and image/* for a graphical image of a signature,\ + \ etc." + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The base64 encoding of the Signature content. When signature + is not recorded electronically this element would be empty. + Timing: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + event: + type: array + items: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Identifies specific times when the event occurs. + repeat: + $ref: '#/components/schemas/Timing_Repeat' + code: + $ref: '#/components/schemas/CodeableConcept' + Timing_Repeat: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + boundsDuration: + $ref: '#/components/schemas/Duration' + boundsRange: + $ref: '#/components/schemas/Range' + boundsPeriod: + $ref: '#/components/schemas/Period' + count: + type: integer + description: "A total count of the desired number of repetitions across\ + \ the duration of the entire timing specification. If countMax is present,\ + \ this element indicates the lower bound of the allowed range of count\ + \ values." + format: int32 + countMax: + type: integer + description: "If present, indicates that the count is a range –\ + \ so to perform the action between [count] and [countMax] times." + format: int32 + duration: + type: number + description: "How long this thing happens for when it happens. If durationMax\ + \ is present, this element indicates the lower bound of the allowed\ + \ range of the duration." + durationMax: + type: number + description: "If present, indicates that the duration is a range –\ + \ so to perform the action between [duration] and [durationMax] time\ + \ length." + durationUnit: + type: string + description: "The units of time for the duration, in UCUM units." + enum: + - s + - min + - h + - d + - wk + - mo + - a + frequency: + type: integer + description: "The number of times to repeat the action within the specified\ + \ period. If frequencyMax is present, this element indicates the lower\ + \ bound of the allowed range of the frequency." + format: int32 + frequencyMax: + type: integer + description: "If present, indicates that the frequency is a range –\ + \ so to repeat between [frequency] and [frequencyMax] times within the\ + \ period or period range." + format: int32 + period: + type: number + description: "Indicates the duration of time over which repetitions are\ + \ to occur; e.g. to express \"3 times per day\", 3 would be the frequency\ + \ and \"1 day\" would be the period. If periodMax is present, this element\ + \ indicates the lower bound of the allowed range of the period length." + periodMax: + type: number + description: "If present, indicates that the period is a range from [period]\ + \ to [periodMax], allowing expressing concepts such as \"do this once\ + \ every 3–5 days." + periodUnit: + type: string + description: The units of time for the period in UCUM units. + enum: + - s + - min + - h + - d + - wk + - mo + - a + dayOfWeek: + type: array + items: + type: string + description: "If one or more days of week is provided, then the action\ + \ happens only on the specified day(s)." + enum: + - mon + - tue + - wed + - thu + - fri + - sat + - sun + timeOfDay: + type: array + items: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: Specified time of day for action to take place. + when: + type: array + items: + type: string + description: "An approximate time period during the day, potentially\ + \ linked to an event of daily living that indicates when the action\ + \ should occur." + enum: + - MORN + - MORN.early + - MORN.late + - NOON + - AFT + - AFT.early + - AFT.late + - EVE + - EVE.early + - EVE.late + - NIGHT + - PHS + - HS + - WAKE + - C + - CM + - CD + - CV + - AC + - ACM + - ACD + - ACV + - PC + - PCM + - PCD + - PCV + offset: + type: integer + description: "The number of minutes from the event. If the event code\ + \ does not indicate whether the minutes is before or after the event,\ + \ then the offset is assumed to be after the event." + format: int32 + ContactDetail: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + name: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of an individual to contact. + telecom: + type: array + items: + $ref: '#/components/schemas/ContactPoint' + RelatedArtifact: + required: + - type + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: string + description: The type of relationship to the related artifact. + enum: + - documentation + - justification + - citation + - predecessor + - successor + - derived-from + - depends-on + - composed-of + label: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A short label that can be used to reference the citation\ + \ from elsewhere in the containing artifact, such as a footnote index." + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A brief description of the document or knowledge resource\ + \ being referenced, suitable for display to a consumer." + citation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A bibliographic citation for the related artifact. This text + SHOULD be formatted according to an accepted citation format. + url: + pattern: \S* + type: string + description: A url for the artifact that can be followed to access the + actual content. + document: + $ref: '#/components/schemas/Attachment' + resource: + pattern: \S* + type: string + description: "The related resource, such as a library, value set, profile,\ + \ or other knowledge resource." + UsageContext: + required: + - code + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + code: + $ref: '#/components/schemas/Coding' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueReference: + $ref: '#/components/schemas/Reference' + Meta: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + versionId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The version specific identifier, as it appears in the version\ + \ portion of the URL. This value changes when the resource is created,\ + \ updated, or deleted." + lastUpdated: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the resource last changed – e.g. when the version + changed. + source: + pattern: \S* + type: string + description: "A uri that identifies the source system of the resource.\ + \ This provides a minimal amount of [Provenance](provenance.html#) information\ + \ that can be used to track or differentiate the source of information\ + \ in the resource. The source may identify another FHIR server, document,\ + \ message, database, etc." + profile: + type: array + items: + pattern: \S* + type: string + description: "A list of profiles (references to [StructureDefinition](structuredefinition.html#)\ + \ resources) that this resource claims to conform to. The URL is a\ + \ reference to [StructureDefinition.url](structuredefinition–definitions.html#StructureDefinition.url)." + security: + type: array + items: + $ref: '#/components/schemas/Coding' + tag: + type: array + items: + $ref: '#/components/schemas/Coding' + Narrative: + required: + - div + - status + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + status: + type: string + description: "The status of the narrative – whether it's entirely\ + \ generated (from just the defined data or the extensions too), or whether\ + \ a human authored it and it may contain additional data." + enum: + - generated + - extensions + - additional + - empty + div: + type: string + description: "The actual narrative content, a stripped down version of\ + \ XHTML." + Extension: + required: + - url + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + url: + pattern: \S* + type: string + description: Source of the definition for the extension code – a + logical name or a URL. + valueBase64Binary: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueBoolean: + type: boolean + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCanonical: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCode: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDate: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDateTime: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDecimal: + type: number + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInstant: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInteger: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueMarkdown: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueOid: + pattern: "urn:oid:[0-2](\\.(0|[1-9][0-9]*))+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valuePositiveInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueTime: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUnsignedInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueUri: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUrl: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUuid: + pattern: "urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueAddress: + $ref: '#/components/schemas/Address' + valueAge: + $ref: '#/components/schemas/Age' + valueAnnotation: + $ref: '#/components/schemas/Annotation' + valueAttachment: + $ref: '#/components/schemas/Attachment' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueCoding: + $ref: '#/components/schemas/Coding' + valueContactPoint: + $ref: '#/components/schemas/ContactPoint' + valueCount: + $ref: '#/components/schemas/Count' + valueDistance: + $ref: '#/components/schemas/Distance' + valueDuration: + $ref: '#/components/schemas/Duration' + valueHumanName: + $ref: '#/components/schemas/HumanName' + valueIdentifier: + $ref: '#/components/schemas/Identifier' + valueMoney: + $ref: '#/components/schemas/Money' + valuePeriod: + $ref: '#/components/schemas/Period' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueRatio: + $ref: '#/components/schemas/Ratio' + valueReference: + $ref: '#/components/schemas/Reference' + valueSampledData: + $ref: '#/components/schemas/SampledData' + valueSignature: + $ref: '#/components/schemas/Signature' + valueTiming: + $ref: '#/components/schemas/Timing' + valueContactDetail: + $ref: '#/components/schemas/ContactDetail' + valueRelatedArtifact: + $ref: '#/components/schemas/RelatedArtifact' + valueUsageContext: + $ref: '#/components/schemas/UsageContext' + valueMeta: + $ref: '#/components/schemas/Meta' + Location: + required: + - latitude + - longitude + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + operationalStatus: + $ref: '#/components/schemas/Coding' + altitude: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Altitude. The value domain and the interpretation are the + same as for the text of the altitude element in KML (see notes below). + partOf: + $ref: '#/components/schemas/Reference' + extension: + $ref: '#/components/schemas/Extension' + modifierExtension: + $ref: '#/components/schemas/Extension' + latitude: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Latitude. The value domain and the interpretation are the + same as for the text of the latitude element in KML (see notes below). + openingTime: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Time that the Location opens. + description: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Description of the Location, which helps in finding or referencing\ + \ the place." + language: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The base language in which the resource is written. + hoursOfOperation: + $ref: '#/components/schemas/BackboneElement' + type: + $ref: '#/components/schemas/CodeableConcept' + mode: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Indicates whether a resource instance represents a specific + location or a class of locations. + allDay: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The Location is open all day. + endpoint: + $ref: '#/components/schemas/Reference' + closingTime: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Time that the Location closes. + alias: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A list of alternate names that the location is known as,\ + \ or was known as, in the past." + telecom: + $ref: '#/components/schemas/ContactPoint' + id: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Unique id for the element within a resource (for internal + references). This may be any string value that does not contain spaces. + text: + $ref: '#/components/schemas/Narrative' + longitude: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Longitude. The value domain and the interpretation are the + same as for the text of the longitude element in KML (see notes below). + identifier: + $ref: '#/components/schemas/Identifier' + address: + $ref: '#/components/schemas/Address' + physicalType: + $ref: '#/components/schemas/CodeableConcept' + daysOfWeek: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Indicates which days of the week are available between the + start and end Times. + contained: + $ref: '#/components/schemas/Resource' + managingOrganization: + $ref: '#/components/schemas/Reference' + meta: + $ref: '#/components/schemas/Meta' + name: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Name of the location as used by humans. Does not need to + be unique. + implicitRules: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide\ + \ that defines the special rules along with other profiles etc." + position: + $ref: '#/components/schemas/BackboneElement' + availabilityExceptions: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A description of when the locations opening ours are different\ + \ to normal, e.g. public holiday availability. Succinctly describing\ + \ all possible exceptions to normal site availability as detailed in\ + \ the opening hours Times." + status: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The status property covers the general availability of the\ + \ resource, not the current value which may be covered by the operationStatus,\ + \ or by a schedule/slots if they are configured for the location." + parameters: + _lastUpdatedParam: + name: _lastUpdated + in: query + description: When the resource version last changed + required: false + style: form + explode: true + schema: + type: string + _securityParam: + name: _security + in: query + description: Security Labels applied to this resource + required: false + style: form + explode: true + schema: + type: string + _tagParam: + name: _tag + in: query + description: Tags applied to this resource + required: false + style: form + explode: true + schema: + type: string + _idParam: + name: _id + in: query + description: Logical id of this artifact + required: false + style: form + explode: true + schema: + type: string + _sourceParam: + name: _source + in: query + description: Identifies where the resource comes from + required: false + style: form + explode: true + schema: + type: string + _profileParam: + name: _profile + in: query + description: Profiles this resource claims to conform to + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://localhost:8243/authorize + scopes: {} +x-wso2-oh-fhir-resourceType: Location +x-wso2-oh-fhir-profile: +- http://hl7.org/fhir/StructureDefinition/Location diff --git a/schedule-appointment-process-API/aggregate-service/oas/PractitionerAPI.yaml b/schedule-appointment-process-API/aggregate-service/oas/PractitionerAPI.yaml new file mode 100644 index 000000000..26d680307 --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/oas/PractitionerAPI.yaml @@ -0,0 +1,2068 @@ +openapi: 3.0.1 +info: + title: PractitionerAPI + description: "A simplified version of the HL7 FHIR API for Practitioner resource.\n\ + Supported Profiles: \nhttp://hl7.org/fhir/StructureDefinition/Practitioner\n" + contact: + name: API Support + url: https://wso2.com/contact/ + email: info@wso2.com + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +tags: +- name: international +- name: Practitioner +- name: 4.0.1 +paths: + /fhir/r4/Practitioner: + get: + tags: + - GET + - Practitioner + summary: search Practitioner + description: This operation is used to search a Practitioner + parameters: + - name: phone + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A value\ + \ in a phone contact\r\n* [Person](person.html): A value in a phone contact\r\ + \n* [Practitioner](practitioner.html): A value in a phone contact\r\n* [PractitionerRole](practitionerrole.html):\ + \ A value in a phone contact\r\n* [RelatedPerson](relatedperson.html): A\ + \ value in a phone contact" + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: name + in: query + description: "A server defined search that may match any of the string fields\ + \ in the HumanName, including family, give, prefix, suffix, suffix, and/or\ + \ text" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: address-country + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A country\ + \ specified in an address\r\n* [Person](person.html): A country specified\ + \ in an address\r\n* [Practitioner](practitioner.html): A country specified\ + \ in an address\r\n* [RelatedPerson](relatedperson.html): A country specified\ + \ in an address" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: address-state + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A state\ + \ specified in an address\r\n* [Person](person.html): A state specified\ + \ in an address\r\n* [Practitioner](practitioner.html): A state specified\ + \ in an address\r\n* [RelatedPerson](relatedperson.html): A state specified\ + \ in an address" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: address-use + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A use\ + \ code specified in an address\r\n* [Person](person.html): A use code specified\ + \ in an address\r\n* [Practitioner](practitioner.html): A use code specified\ + \ in an address\r\n* [RelatedPerson](relatedperson.html): A use code specified\ + \ in an address" + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: active + in: query + description: Whether the practitioner record is active + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: address-postalcode + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A postalCode\ + \ specified in an address\r\n* [Person](person.html): A postal code specified\ + \ in an address\r\n* [Practitioner](practitioner.html): A postalCode specified\ + \ in an address\r\n* [RelatedPerson](relatedperson.html): A postal code\ + \ specified in an address" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: given + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A portion\ + \ of the given name of the patient\r\n* [Practitioner](practitioner.html):\ + \ A portion of the given name" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: address-city + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A city\ + \ specified in an address\r\n* [Person](person.html): A city specified in\ + \ an address\r\n* [Practitioner](practitioner.html): A city specified in\ + \ an address\r\n* [RelatedPerson](relatedperson.html): A city specified\ + \ in an address" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: gender + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): Gender\ + \ of the patient\r\n* [Person](person.html): The gender of the person\r\n\ + * [Practitioner](practitioner.html): Gender of the practitioner\r\n* [RelatedPerson](relatedperson.html):\ + \ Gender of the related person" + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: phonetic + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A portion\ + \ of either family or given name using some kind of phonetic matching algorithm\r\ + \n* [Person](person.html): A portion of name using some kind of phonetic\ + \ matching algorithm\r\n* [Practitioner](practitioner.html): A portion of\ + \ either family or given name using some kind of phonetic matching algorithm\r\ + \n* [RelatedPerson](relatedperson.html): A portion of name using some kind\ + \ of phonetic matching algorithm" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: family + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A portion\ + \ of the family name of the patient\r\n* [Practitioner](practitioner.html):\ + \ A portion of the family name" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: telecom + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): The value\ + \ in any kind of telecom details of the patient\r\n* [Person](person.html):\ + \ The value in any kind of contact\r\n* [Practitioner](practitioner.html):\ + \ The value in any kind of contact\r\n* [PractitionerRole](practitionerrole.html):\ + \ The value in any kind of contact\r\n* [RelatedPerson](relatedperson.html):\ + \ The value in any kind of contact" + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: email + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A value\ + \ in an email contact\r\n* [Person](person.html): A value in an email contact\r\ + \n* [Practitioner](practitioner.html): A value in an email contact\r\n*\ + \ [PractitionerRole](practitionerrole.html): A value in an email contact\r\ + \n* [RelatedPerson](relatedperson.html): A value in an email contact" + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: identifier + in: query + description: A practitioner's Identifier + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: address + in: query + description: "Multiple Resources: \r\n\r\n* [Patient](patient.html): A server\ + \ defined search that may match any of the string fields in the Address,\ + \ including line, city, district, state, country, postalCode, and/or text\r\ + \n* [Person](person.html): A server defined search that may match any of\ + \ the string fields in the Address, including line, city, district, state,\ + \ country, postalCode, and/or text\r\n* [Practitioner](practitioner.html):\ + \ A server defined search that may match any of the string fields in the\ + \ Address, including line, city, district, state, country, postalCode, and/or\ + \ text\r\n* [RelatedPerson](relatedperson.html): A server defined search\ + \ that may match any of the string fields in the Address, including line,\ + \ city, district, state, country, postalCode, and/or text" + required: false + schema: + type: string + x-wso2-oh-fhirType: string + - name: communication + in: query + description: One of the languages that the practitioner can communicate with + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - $ref: '#/components/parameters/_lastUpdatedParam' + - $ref: '#/components/parameters/_securityParam' + - $ref: '#/components/parameters/_tagParam' + - $ref: '#/components/parameters/_idParam' + - $ref: '#/components/parameters/_sourceParam' + - $ref: '#/components/parameters/_profileParam' + responses: + "200": + description: search Practitioner operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Bundle' + security: + - default: [] + post: + tags: + - POST + - Practitioner + summary: create Practitioner + description: This operation is used to create a Practitioner + responses: + "201": + description: create Practitioner operation successful + security: + - default: [] + /fhir/r4/Practitioner/{id}: + get: + tags: + - GET + - Practitioner + summary: read Practitioner + description: This operation is used to read a Practitioner + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "200": + description: read Practitioner operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Practitioner' + security: + - default: [] + put: + tags: + - PUT + - Practitioner + summary: update Practitioner + description: This operation is used to update a Practitioner + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "201": + description: update Practitioner operation successful + security: + - default: [] + delete: + tags: + - DELETE + - Practitioner + summary: delete Practitioner + description: This operation is used to delete a Practitioner + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "204": + description: delete Practitioner operation successful + security: + - default: [] +components: + schemas: + Resource: + required: + - resourceType + type: object + properties: + resourceType: + type: string + enum: + - Account + - ActivityDefinition + - AdverseEvent + - AllergyIntolerance + - Appointment + - AppointmentResponse + - AuditEvent + - Basic + - Binary + - BiologicallyDerivedProduct + - BodyStructure + - Bundle + - CapabilityStatement + - CarePlan + - CareTeam + - CatalogEntry + - ChargeItem + - ChargeItemDefinition + - Claim + - ClaimResponse + - ClinicalImpression + - CodeSystem + - Communication + - CommunicationRequest + - CompartmentDefinition + - Composition + - ConceptMap + - Condition + - Consent + - Contract + - Coverage + - CoverageEligibilityRequest + - CoverageEligibilityResponse + - DetectedIssue + - Device + - DeviceDefinition + - DeviceMetric + - DeviceRequest + - DeviceUseStatement + - DiagnosticReport + - DocumentManifest + - DocumentReference + - DomainResource + - EffectEvidenceSynthesis + - Encounter + - Endpoint + - EnrollmentRequest + - EnrollmentResponse + - EpisodeOfCare + - EventDefinition + - Evidence + - EvidenceVariable + - ExampleScenario + - ExplanationOfBenefit + - FamilyMemberHistory + - Flag + - Goal + - GraphDefinition + - Group + - GuidanceResponse + - HealthcareService + - ImagingStudy + - Immunization + - ImmunizationEvaluation + - ImmunizationRecommendation + - ImplementationGuide + - InsurancePlan + - Invoice + - Library + - Linkage + - List + - Location + - Measure + - MeasureReport + - Media + - Medication + - MedicationAdministration + - MedicationDispense + - MedicationKnowledge + - MedicationRequest + - MedicationStatement + - MedicinalProduct + - MedicinalProductAuthorization + - MedicinalProductContraindication + - MedicinalProductIndication + - MedicinalProductIngredient + - MedicinalProductInteraction + - MedicinalProductManufactured + - MedicinalProductPackaged + - MedicinalProductPharmaceutical + - MedicinalProductUndesirableEffect + - MessageDefinition + - MessageHeader + - MolecularSequence + - NamingSystem + - NutritionOrder + - Observation + - ObservationDefinition + - OperationDefinition + - OperationOutcome + - Organization + - OrganizationAffiliation + - Parameters + - Patient + - PaymentNotice + - PaymentReconciliation + - Person + - PlanDefinition + - Practitioner + - PractitionerRole + - Procedure + - Provenance + - Questionnaire + - QuestionnaireResponse + - RelatedPerson + - RequestGroup + - ResearchDefinition + - ResearchElementDefinition + - ResearchStudy + - ResearchSubject + - Resource + - RiskAssessment + - RiskEvidenceSynthesis + - Schedule + - SearchParameter + - ServiceRequest + - Slot + - Specimen + - SpecimenDefinition + - StructureDefinition + - StructureMap + - Subscription + - Substance + - SubstanceNucleicAcid + - SubstancePolymer + - SubstanceProtein + - SubstanceReferenceInformation + - SubstanceSourceMaterial + - SubstanceSpecification + - SupplyDelivery + - SupplyRequest + - Task + - TerminologyCapabilities + - TestReport + - TestScript + - ValueSet + - VerificationResult + - VisionPrescription + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The logical id of the resource, as used in the URL for the\ + \ resource. Once assigned, this value never changes." + meta: + $ref: '#/components/schemas/Meta' + implicitRules: + pattern: \S* + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide that\ + \ defines the special rules along with other profiles etc." + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The base language in which the resource is written. + DomainResource: + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + text: + $ref: '#/components/schemas/Narrative' + contained: + type: array + items: + $ref: '#/components/schemas/Resource' + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Bundle: + required: + - type + example: + resourceType: Bundle + meta: + versionId: exaha1GMZU + lastUpdated: 2020-03-12T00:11:47.779-04:00 + source: OscBE5P0oL + profile: + - 2t1_PYz6sb + security: + - system: __ZQLAVVwf + version: VLbtqKcbsY + code: VUlDjytwgy + display: qiSsBMDgPt + userSelected: true + tag: + - system: zjCxD2PaBs + version: rzU1dChGRU + code: T_fA90_uZ3 + display: lX3NJdEblQ + userSelected: true + - code: ibm/complete-mock + implicitRules: vor6NZfU_z + language: L2CvMvoQCf + identifier: + use: temp + type: + coding: + - system: 2KSvg9_FAi + version: gGp8DOk9J1 + code: mfTsOuaMha + display: oWF_kySdMa + userSelected: true + text: JCfLMefieh + system: OD8o0wUurR + value: rB39S_eWKm + period: + start: 2020-03-12T00:11:47.781-04:00 + end: 2020-03-12T00:11:47.781-04:00 + type: message + timestamp: 2020-03-12T00:11:47.768-04:00 + total: 253899444 + link: + - relation: 7ntmg3QgsB + url: yqZC1h4OiP + entry: + - link: + - relation: BYqAgl7fxn + url: FjYy1I_fo0 + fullUrl: jRHNMRSGoH + search: + mode: outcome + score: 215939698769 + request: + method: HEAD + url: fsGmEqxt_V + ifNoneMatch: 9Ce9vVtTEJ + ifModifiedSince: 2020-03-12T00:11:47.776-04:00 + ifMatch: PtLujM597v + ifNoneExist: thVohqaRoO + response: + status: Vz647bKzDX + location: vG6ZG5JY3n + etag: UAy7mNeNeo + lastModified: 2020-03-12T00:11:47.773-04:00 + signature: + type: + - system: UXJhVBJtsw + version: dSN1eoXw7X + code: 7n8GNkS7ty + display: Ff82O7MvgK + userSelected: true + when: 2020-03-12T00:11:47.767-04:00 + who: + reference: Practitioner/8Jt_8Rtofu + type: Practitioner + identifier: + use: secondary + type: + coding: + - system: aOvIofeYmD + version: mNBmEi5RDA + code: sM5gtqK3Xw + display: aOf6nJImxy + userSelected: true + text: zaOFAoPxBA + system: C70kG_5CcM + value: TYMT3hKJFR + period: + start: 2020-03-12T00:11:47.765-04:00 + end: 2020-03-12T00:11:47.765-04:00 + display: 5vUkPEw2_I + onBehalfOf: + reference: Practitioner/PEch7CxGIg + type: Practitioner + identifier: + use: usual + type: + coding: + - system: ixnevWoHGy + version: hJQzXghlpb + code: h6NurXxnyH + display: C0fDviMSsU + userSelected: true + text: izhrMjXk74 + system: giGNRU5rWU + value: e7_ezY1vVp + period: + start: 2020-03-12T00:11:47.767-04:00 + end: 2020-03-12T00:11:47.767-04:00 + display: nWuUixICQd + targetFormat: F93ISQKaDY + sigFormat: Qx2S3AEiMQ + data: AGxIVG4= + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + identifier: + $ref: '#/components/schemas/Identifier' + type: + type: string + description: Indicates the purpose of this bundle – how it is intended + to be used. + enum: + - document + - message + - transaction + - transaction-response + - batch + - batch-response + - history + - searchset + - collection + timestamp: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the bundle was assembled – i.e. + when the resources were placed in the bundle. + total: + type: integer + description: "If a set of search matches, this is the total number of\ + \ entries of type 'match' across all pages in the search. It does not\ + \ include search.mode = 'include' or 'outcome' entries and it does not\ + \ provide a count of the number of entries in the Bundle." + format: int32 + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + entry: + type: array + items: + $ref: '#/components/schemas/Bundle_Entry' + signature: + $ref: '#/components/schemas/Signature' + OperationOutcome: + required: + - issue + example: + resourceType: OperationOutcome + meta: + versionId: aj7xYfDKGG + lastUpdated: 2020-03-12T00:11:56.482-04:00 + source: ZqswRdBz2V + profile: + - 7MtlUHdgF3 + security: + - system: eBZLDvfQS6 + version: 3loXo6Bekk + code: fApLgubn5v + display: hGDoUOaTiY + userSelected: true + tag: + - system: d6ZKFrRy9C + version: co9wqQZDjO + code: Z2JT_ZxmeR + display: f5JMtds3fb + userSelected: true + - code: ibm/complete-mock + implicitRules: FwNANOTUkD + language: iDvESiu0cB + text: + status: extensions + div:
+ issue: + - severity: warning + code: invariant + details: + coding: + - system: 9TiBhtaNhv + version: 38XIrYkjYf + code: s4dzxZ4dsW + display: tu3Q0RYWRq + userSelected: true + text: qW3nzpKNue + diagnostics: 4zXKgm6Eae + location: + - EmMlBkbb8W + expression: + - bSBqh22fAT + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + issue: + type: array + items: + $ref: '#/components/schemas/OperationOutcome_Issue' + Bundle_Entry: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + fullUrl: + pattern: \S* + type: string + description: "The Absolute URL for the resource. The fullUrl SHALL NOT\ + \ disagree with the id in the resource – i.e. if the fullUrl is\ + \ not a urn:uuid, the URL shall be version–independent URL consistent\ + \ with the Resource.id. The fullUrl is a version independent reference\ + \ to the resource. The fullUrl element SHALL have a value except that:\ + \ \n* fullUrl can be empty on a POST (although it does not need to when\ + \ specifying a temporary id for reference in the bundle)\n* Results\ + \ from operations might involve resources that are not identified." + resource: + $ref: '#/components/schemas/Resource' + search: + $ref: '#/components/schemas/Bundle_Entry_Search' + request: + $ref: '#/components/schemas/Bundle_Entry_Request' + response: + $ref: '#/components/schemas/Bundle_Entry_Response' + Bundle_Entry_Response: + required: + - status + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + status: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The status code returned by processing this entry. The status + SHALL start with a 3 digit HTTP code (e.g. 404) and may contain the + standard HTTP description associated with the status code. + location: + pattern: \S* + type: string + description: "The location header created by processing this operation,\ + \ populated if the operation returns a location." + etag: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The Etag for the resource, if the operation for the entry\ + \ produced a versioned resource (see [Resource Metadata and Versioning](http.html#versioning)\ + \ and [Managing Resource Contention](http.html#concurrency))." + lastModified: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the resource was modified on the server. + outcome: + $ref: '#/components/schemas/Resource' + Bundle_Entry_Request: + required: + - method + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + method: + type: string + description: "In a transaction or batch, this is the HTTP action to be\ + \ executed for this entry. In a history bundle, this indicates the HTTP\ + \ action that occurred." + enum: + - GET + - HEAD + - POST + - PUT + - DELETE + - PATCH + url: + pattern: \S* + type: string + description: "The URL for this entry, relative to the root (the address\ + \ to which the request is posted)." + ifNoneMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "If the ETag values match, return a 304 Not Modified status.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifModifiedSince: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Only perform the operation if the last updated date matches.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Only perform the operation if the Etag value matches. For\ + \ more information, see the API section [\"Managing Resource Contention\"\ + ](http.html#concurrency)." + ifNoneExist: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Instruct the server not to perform the create if a specified\ + \ resource already exists. For further information, see the API documentation\ + \ for [\"Conditional Create\"](http.html#ccreate). This is just the\ + \ query portion of the URL – what follows the \"?\" (not including\ + \ the \"?\")." + Bundle_Entry_Search: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + mode: + type: string + description: "Why this entry is in the result set – whether it's\ + \ included as a match or because of an _include requirement, or to convey\ + \ information or warning information about the search process." + enum: + - match + - include + - outcome + score: + type: number + description: "When searching, the server's search ranking score for the\ + \ entry." + Bundle_Link: + required: + - relation + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + relation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A name which details the functional use for this link –\ + \ see [http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1](http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1)." + url: + pattern: \S* + type: string + description: The reference details for the link. + OperationOutcome_Issue: + required: + - code + - severity + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + severity: + type: string + description: Indicates whether the issue indicates a variation from successful + processing. + enum: + - fatal + - error + - warning + - information + code: + type: string + description: "Describes the type of the issue. The system that creates\ + \ an OperationOutcome SHALL choose the most applicable code from the\ + \ IssueType value set, and may additional provide its own code for the\ + \ error in the details element." + enum: + - invalid + - structure + - required + - value + - invariant + - security + - login + - unknown + - expired + - forbidden + - suppressed + - processing + - not-supported + - duplicate + - multiple-matches + - not-found + - deleted + - too-long + - code-invalid + - extension + - too-costly + - business-rule + - conflict + - transient + - lock-error + - no-store + - exception + - timeout + - incomplete + - throttled + - informational + details: + $ref: '#/components/schemas/CodeableConcept' + diagnostics: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Additional diagnostic information about the issue. + location: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This element is deprecated because it is XML specific.\ + \ It is replaced by issue.expression, which is format independent,\ + \ and simpler to parse. \n\nFor resource issues, this will be a simple\ + \ XPath limited to element names, repetition indicators and the default\ + \ child accessor that identifies one of the elements in the resource\ + \ that caused this issue to be raised. For HTTP errors, will be \"\ + http.\" + the parameter name." + expression: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A [simple subset of FHIRPath](fhirpath.html#simple) limited\ + \ to element names, repetition indicators and the default child accessor\ + \ that identifies one of the elements in the resource that caused\ + \ this issue to be raised." + Element: + type: object + properties: + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: Unique id for the element within a resource (for internal references). + This may be any string value that does not contain spaces. + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + BackboneElement: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Address: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this address. + enum: + - home + - work + - temp + - old + - billing + type: + type: string + description: Distinguishes between physical addresses (those you can visit) + and mailing addresses (e.g. PO Boxes and care–of addresses). Most + addresses are both. + enum: + - postal + - physical + - both + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire address as it should be displayed e.g. + on a postal label. This may be provided instead of or as well as the + specific parts. + line: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This component contains the house number, apartment number,\ + \ street name, street direction, P.O. Box number, delivery hints,\ + \ and similar address information." + city: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The name of the city, town, suburb, village or other community\ + \ or delivery center." + district: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of the administrative area (county). + state: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Sub–unit of a country with limited sovereignty in a + federally organized country. A code may be used if codes are in common + use (e.g. US 2 letter state codes). + postalCode: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A postal code designating a region defined by the postal + service. + country: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Country – a nation as commonly understood or generally + accepted. + period: + $ref: '#/components/schemas/Period' + Age: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Annotation: + required: + - text + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + authorReference: + $ref: '#/components/schemas/Reference' + authorString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The individual responsible for making the annotation. + time: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Indicates when this particular annotation was made. + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The text of the annotation in markdown format. + Attachment: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + contentType: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: Identifies the type of the data in the attachment and allows + a method to be chosen to interpret or render the data. Includes mime + type parameters such as charset where appropriate. + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The human language of the content. The value can be any valid + value according to BCP 47. + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "The actual data of the attachment – a sequence of\ + \ bytes, base64 encoded." + url: + pattern: \S* + type: string + description: A location where the data can be accessed. + size: + type: integer + description: "The number of bytes of data that make up this attachment\ + \ (before base64 encoding, if that is done)." + format: int32 + hash: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The calculated hash of the data using SHA–1. Represented + using base64. + title: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A label or set of text to display in place of the data. + creation: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The date that the attachment was first created. + CodeableConcept: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + coding: + type: array + items: + $ref: '#/components/schemas/Coding' + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human language representation of the concept as seen/selected/uttered + by the user who entered the data and/or which represents the intended + meaning of the user. + Coding: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + pattern: \S* + type: string + description: The identification of the code system that defines the meaning + of the symbol in the code. + version: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The version of the code system which was used when choosing\ + \ this code. Note that a well–maintained code system does not\ + \ need the version reported, because the meaning of codes is consistent\ + \ across versions. However this cannot consistently be assured, and\ + \ when the meaning is not guaranteed to be consistent, the version SHOULD\ + \ be exchanged." + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A symbol in syntax defined by the system. The symbol may + be a predefined code or an expression in a syntax defined by the coding + system (e.g. post–coordination). + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A representation of the meaning of the code in the system,\ + \ following the rules of the system." + userSelected: + type: boolean + description: Indicates that this coding was chosen by a user directly + – e.g. off a pick list of available items (codes or displays). + ContactPoint: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + type: string + description: Telecommunications form for contact point – what communications + system is required to make use of the contact. + enum: + - phone + - fax + - email + - pager + - url + - sms + - other + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The actual contact point details, in a form that is meaningful\ + \ to the designated communication system (i.e. phone number or email\ + \ address)." + use: + type: string + description: Identifies the purpose for the contact point. + enum: + - home + - work + - temp + - old + - mobile + rank: + type: integer + description: Specifies a preferred order in which to use a set of contacts. + ContactPoints with lower rank values are more preferred than those with + higher rank values. + format: int32 + period: + $ref: '#/components/schemas/Period' + Count: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Distance: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Duration: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + HumanName: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: Identifies the purpose for this name. + enum: + - usual + - official + - temp + - nickname + - anonymous + - old + - maiden + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire name as it should be displayed e.g. + on an application UI. This may be provided instead of or as well as + the specific parts. + family: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The part of a name that links to the genealogy. In some cultures + (e.g. Eritrea) the family name of a son is the first name of his father. + given: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Given name. + prefix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ start of the name." + suffix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ end of the name." + period: + $ref: '#/components/schemas/Period' + Identifier: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this identifier. + enum: + - usual + - official + - temp + - secondary + - old + type: + $ref: '#/components/schemas/CodeableConcept' + system: + pattern: \S* + type: string + description: "Establishes the namespace for the value – that is,\ + \ a URL that describes a set values that are unique." + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The portion of the identifier typically relevant to the user + and which is unique within the context of the system. + period: + $ref: '#/components/schemas/Period' + assigner: + $ref: '#/components/schemas/Reference' + Money: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: Numerical value (with implicit precision). + currency: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: ISO 4217 Currency Code. + MoneyQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Period: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + start: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The start of the period. The boundary is inclusive. + end: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "The end of the period. If the end of the period is missing,\ + \ it means no end was known or planned at the time the instance was\ + \ created. The start may be in the past, and the end date in the future,\ + \ which means that period is expected/planned to end at that time." + Quantity: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: The value of the measured amount. The value includes an implicit + precision in the presentation of the value. + comparator: + type: string + description: "How the value should be understood and represented –\ + \ whether the actual value is greater or less than the stated value\ + \ due to measurement issues; e.g. if the comparator is \"<\" , then\ + \ the real value is < stated value." + enum: + - < + - <= + - '>=' + - '>' + unit: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human–readable form of the unit. + system: + pattern: \S* + type: string + description: The identification of the system that provides the coded + form of the unit. + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A computer processable form of the unit in some unit representation + system. + Range: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + low: + $ref: '#/components/schemas/SimpleQuantity' + high: + $ref: '#/components/schemas/SimpleQuantity' + Ratio: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + numerator: + $ref: '#/components/schemas/Quantity' + denominator: + $ref: '#/components/schemas/Quantity' + Reference: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + reference: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a location at which the other resource is\ + \ found. The reference may be a relative reference, in which case it\ + \ is relative to the service base URL, or an absolute URL that resolves\ + \ to the location where the resource is found. The reference may be\ + \ version specific or not. If the reference is not to a FHIR RESTful\ + \ server, then it should be assumed to be version specific. Internal\ + \ fragment references (start with '#') refer to contained resources." + type: + pattern: \S* + type: string + description: "The expected type of the target of the reference. If both\ + \ Reference.type and Reference.reference are populated and Reference.reference\ + \ is a FHIR URL, both SHALL be consistent.\n\nThe type is the Canonical\ + \ URL of Resource Definition that is the type this reference refers\ + \ to. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition/\ + \ e.g. \"Patient\" is a reference to http://hl7.org/fhir/StructureDefinition/Patient.\ + \ Absolute URLs are only allowed for logical models (and can only be\ + \ used in references in logical models, not resources)." + identifier: + $ref: '#/components/schemas/Identifier' + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Plain text narrative that identifies the resource in addition + to the resource reference. + SampledData: + required: + - dimensions + - origin + - period + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + origin: + $ref: '#/components/schemas/SimpleQuantity' + period: + type: number + description: "The length of time between sampling times, measured in milliseconds." + factor: + type: number + description: A correction factor that is applied to the sampled data points + before they are added to the origin. + lowerLimit: + type: number + description: The lower limit of detection of the measured points. This + is needed if any of the data points have the value "L" (lower than detection + limit). + upperLimit: + type: number + description: The upper limit of detection of the measured points. This + is needed if any of the data points have the value "U" (higher than + detection limit). + dimensions: + type: integer + description: "The number of sample points at each time point. If this\ + \ value is greater than one, then the dimensions will be interlaced\ + \ – all the sample points for a point in time will be recorded\ + \ at once." + format: int32 + data: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A series of data points which are decimal values separated\ + \ by a single space (character u20). The special values \"E\" (error),\ + \ \"L\" (below detection limit) and \"U\" (above detection limit) can\ + \ also be used in place of a decimal value." + SimpleQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Signature: + required: + - type + - when + - who + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: array + items: + $ref: '#/components/schemas/Coding' + when: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the digital signature was signed. + who: + $ref: '#/components/schemas/Reference' + onBehalfOf: + $ref: '#/components/schemas/Reference' + targetFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A mime type that indicates the technical format of the target + resources signed by the signature. + sigFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "A mime type that indicates the technical format of the signature.\ + \ Important mime types are application/signature+xml for X ML DigSig,\ + \ application/jose for JWS, and image/* for a graphical image of a signature,\ + \ etc." + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The base64 encoding of the Signature content. When signature + is not recorded electronically this element would be empty. + Timing: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + event: + type: array + items: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Identifies specific times when the event occurs. + repeat: + $ref: '#/components/schemas/Timing_Repeat' + code: + $ref: '#/components/schemas/CodeableConcept' + Timing_Repeat: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + boundsDuration: + $ref: '#/components/schemas/Duration' + boundsRange: + $ref: '#/components/schemas/Range' + boundsPeriod: + $ref: '#/components/schemas/Period' + count: + type: integer + description: "A total count of the desired number of repetitions across\ + \ the duration of the entire timing specification. If countMax is present,\ + \ this element indicates the lower bound of the allowed range of count\ + \ values." + format: int32 + countMax: + type: integer + description: "If present, indicates that the count is a range –\ + \ so to perform the action between [count] and [countMax] times." + format: int32 + duration: + type: number + description: "How long this thing happens for when it happens. If durationMax\ + \ is present, this element indicates the lower bound of the allowed\ + \ range of the duration." + durationMax: + type: number + description: "If present, indicates that the duration is a range –\ + \ so to perform the action between [duration] and [durationMax] time\ + \ length." + durationUnit: + type: string + description: "The units of time for the duration, in UCUM units." + enum: + - s + - min + - h + - d + - wk + - mo + - a + frequency: + type: integer + description: "The number of times to repeat the action within the specified\ + \ period. If frequencyMax is present, this element indicates the lower\ + \ bound of the allowed range of the frequency." + format: int32 + frequencyMax: + type: integer + description: "If present, indicates that the frequency is a range –\ + \ so to repeat between [frequency] and [frequencyMax] times within the\ + \ period or period range." + format: int32 + period: + type: number + description: "Indicates the duration of time over which repetitions are\ + \ to occur; e.g. to express \"3 times per day\", 3 would be the frequency\ + \ and \"1 day\" would be the period. If periodMax is present, this element\ + \ indicates the lower bound of the allowed range of the period length." + periodMax: + type: number + description: "If present, indicates that the period is a range from [period]\ + \ to [periodMax], allowing expressing concepts such as \"do this once\ + \ every 3–5 days." + periodUnit: + type: string + description: The units of time for the period in UCUM units. + enum: + - s + - min + - h + - d + - wk + - mo + - a + dayOfWeek: + type: array + items: + type: string + description: "If one or more days of week is provided, then the action\ + \ happens only on the specified day(s)." + enum: + - mon + - tue + - wed + - thu + - fri + - sat + - sun + timeOfDay: + type: array + items: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: Specified time of day for action to take place. + when: + type: array + items: + type: string + description: "An approximate time period during the day, potentially\ + \ linked to an event of daily living that indicates when the action\ + \ should occur." + enum: + - MORN + - MORN.early + - MORN.late + - NOON + - AFT + - AFT.early + - AFT.late + - EVE + - EVE.early + - EVE.late + - NIGHT + - PHS + - HS + - WAKE + - C + - CM + - CD + - CV + - AC + - ACM + - ACD + - ACV + - PC + - PCM + - PCD + - PCV + offset: + type: integer + description: "The number of minutes from the event. If the event code\ + \ does not indicate whether the minutes is before or after the event,\ + \ then the offset is assumed to be after the event." + format: int32 + ContactDetail: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + name: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of an individual to contact. + telecom: + type: array + items: + $ref: '#/components/schemas/ContactPoint' + RelatedArtifact: + required: + - type + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: string + description: The type of relationship to the related artifact. + enum: + - documentation + - justification + - citation + - predecessor + - successor + - derived-from + - depends-on + - composed-of + label: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A short label that can be used to reference the citation\ + \ from elsewhere in the containing artifact, such as a footnote index." + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A brief description of the document or knowledge resource\ + \ being referenced, suitable for display to a consumer." + citation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A bibliographic citation for the related artifact. This text + SHOULD be formatted according to an accepted citation format. + url: + pattern: \S* + type: string + description: A url for the artifact that can be followed to access the + actual content. + document: + $ref: '#/components/schemas/Attachment' + resource: + pattern: \S* + type: string + description: "The related resource, such as a library, value set, profile,\ + \ or other knowledge resource." + UsageContext: + required: + - code + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + code: + $ref: '#/components/schemas/Coding' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueReference: + $ref: '#/components/schemas/Reference' + Meta: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + versionId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The version specific identifier, as it appears in the version\ + \ portion of the URL. This value changes when the resource is created,\ + \ updated, or deleted." + lastUpdated: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the resource last changed – e.g. when the version + changed. + source: + pattern: \S* + type: string + description: "A uri that identifies the source system of the resource.\ + \ This provides a minimal amount of [Provenance](provenance.html#) information\ + \ that can be used to track or differentiate the source of information\ + \ in the resource. The source may identify another FHIR server, document,\ + \ message, database, etc." + profile: + type: array + items: + pattern: \S* + type: string + description: "A list of profiles (references to [StructureDefinition](structuredefinition.html#)\ + \ resources) that this resource claims to conform to. The URL is a\ + \ reference to [StructureDefinition.url](structuredefinition–definitions.html#StructureDefinition.url)." + security: + type: array + items: + $ref: '#/components/schemas/Coding' + tag: + type: array + items: + $ref: '#/components/schemas/Coding' + Narrative: + required: + - div + - status + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + status: + type: string + description: "The status of the narrative – whether it's entirely\ + \ generated (from just the defined data or the extensions too), or whether\ + \ a human authored it and it may contain additional data." + enum: + - generated + - extensions + - additional + - empty + div: + type: string + description: "The actual narrative content, a stripped down version of\ + \ XHTML." + Extension: + required: + - url + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + url: + pattern: \S* + type: string + description: Source of the definition for the extension code – a + logical name or a URL. + valueBase64Binary: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueBoolean: + type: boolean + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCanonical: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCode: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDate: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDateTime: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDecimal: + type: number + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInstant: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInteger: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueMarkdown: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueOid: + pattern: "urn:oid:[0-2](\\.(0|[1-9][0-9]*))+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valuePositiveInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueTime: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUnsignedInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueUri: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUrl: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUuid: + pattern: "urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueAddress: + $ref: '#/components/schemas/Address' + valueAge: + $ref: '#/components/schemas/Age' + valueAnnotation: + $ref: '#/components/schemas/Annotation' + valueAttachment: + $ref: '#/components/schemas/Attachment' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueCoding: + $ref: '#/components/schemas/Coding' + valueContactPoint: + $ref: '#/components/schemas/ContactPoint' + valueCount: + $ref: '#/components/schemas/Count' + valueDistance: + $ref: '#/components/schemas/Distance' + valueDuration: + $ref: '#/components/schemas/Duration' + valueHumanName: + $ref: '#/components/schemas/HumanName' + valueIdentifier: + $ref: '#/components/schemas/Identifier' + valueMoney: + $ref: '#/components/schemas/Money' + valuePeriod: + $ref: '#/components/schemas/Period' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueRatio: + $ref: '#/components/schemas/Ratio' + valueReference: + $ref: '#/components/schemas/Reference' + valueSampledData: + $ref: '#/components/schemas/SampledData' + valueSignature: + $ref: '#/components/schemas/Signature' + valueTiming: + $ref: '#/components/schemas/Timing' + valueContactDetail: + $ref: '#/components/schemas/ContactDetail' + valueRelatedArtifact: + $ref: '#/components/schemas/RelatedArtifact' + valueUsageContext: + $ref: '#/components/schemas/UsageContext' + valueMeta: + $ref: '#/components/schemas/Meta' + Practitioner: + required: + - code + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + identifier: + $ref: '#/components/schemas/Identifier' + extension: + $ref: '#/components/schemas/Extension' + period: + $ref: '#/components/schemas/Period' + address: + $ref: '#/components/schemas/Address' + code: + $ref: '#/components/schemas/CodeableConcept' + gender: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Administrative Gender - the gender that the person is considered + to have for administration and record keeping purposes. + modifierExtension: + $ref: '#/components/schemas/Extension' + active: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Whether this practitioner's record is in active use. + photo: + $ref: '#/components/schemas/Attachment' + language: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The base language in which the resource is written. + birthDate: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The date of birth for the practitioner. + issuer: + $ref: '#/components/schemas/Reference' + qualification: + $ref: '#/components/schemas/BackboneElement' + contained: + $ref: '#/components/schemas/Resource' + meta: + $ref: '#/components/schemas/Meta' + name: + $ref: '#/components/schemas/HumanName' + implicitRules: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide\ + \ that defines the special rules along with other profiles etc." + telecom: + $ref: '#/components/schemas/ContactPoint' + id: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Unique id for the element within a resource (for internal + references). This may be any string value that does not contain spaces. + text: + $ref: '#/components/schemas/Narrative' + communication: + $ref: '#/components/schemas/CodeableConcept' + parameters: + _lastUpdatedParam: + name: _lastUpdated + in: query + description: When the resource version last changed + required: false + style: form + explode: true + schema: + type: string + _securityParam: + name: _security + in: query + description: Security Labels applied to this resource + required: false + style: form + explode: true + schema: + type: string + _tagParam: + name: _tag + in: query + description: Tags applied to this resource + required: false + style: form + explode: true + schema: + type: string + _idParam: + name: _id + in: query + description: Logical id of this artifact + required: false + style: form + explode: true + schema: + type: string + _sourceParam: + name: _source + in: query + description: Identifies where the resource comes from + required: false + style: form + explode: true + schema: + type: string + _profileParam: + name: _profile + in: query + description: Profiles this resource claims to conform to + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://localhost:8243/authorize + scopes: {} +x-wso2-oh-fhir-resourceType: Practitioner +x-wso2-oh-fhir-profile: +- http://hl7.org/fhir/StructureDefinition/Practitioner diff --git a/schedule-appointment-process-API/aggregate-service/oas/SlotAPI.yaml b/schedule-appointment-process-API/aggregate-service/oas/SlotAPI.yaml new file mode 100644 index 000000000..05184cd47 --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/oas/SlotAPI.yaml @@ -0,0 +1,1961 @@ +openapi: 3.0.1 +info: + title: SlotAPI + description: "A simplified version of the HL7 FHIR API for Slot resource.\nSupported\ + \ Profiles: \nhttp://hl7.org/fhir/StructureDefinition/Slot\n" + contact: + name: API Support + url: https://wso2.com/contact/ + email: info@wso2.com + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +tags: +- name: international +- name: Slot +- name: 4.0.1 +paths: + /fhir/r4/Slot: + get: + tags: + - GET + - Slot + summary: search Slot + description: This operation is used to search a Slot + parameters: + - name: specialty + in: query + description: The specialty of a practitioner that would be required to perform + the service requested in this appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: service-category + in: query + description: A broad categorization of the service that is to be performed + during this appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: status + in: query + description: The free/busy status of the appointment + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: appointment-type + in: query + description: The style of appointment or patient that may be booked in the + slot (not service type) + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: schedule + in: query + description: The Schedule Resource that we are seeking a slot within + required: false + schema: + type: string + x-wso2-oh-fhirType: reference + - name: start + in: query + description: Appointment date/time. + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: service-type + in: query + description: The type of appointments that can be booked into the slot + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: identifier + in: query + description: A Slot Identifier + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - name: practitioner + in: query + description: A Slot Identifier + required: false + schema: + type: string + x-wso2-oh-fhirType: token + - $ref: '#/components/parameters/_lastUpdatedParam' + - $ref: '#/components/parameters/_securityParam' + - $ref: '#/components/parameters/_tagParam' + - $ref: '#/components/parameters/_idParam' + - $ref: '#/components/parameters/_sourceParam' + - $ref: '#/components/parameters/_profileParam' + responses: + "200": + description: search Slot operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Bundle' + security: + - default: [] + post: + tags: + - POST + - Slot + summary: create Slot + description: This operation is used to create a Slot + responses: + "201": + description: create Slot operation successful + security: + - default: [] + /fhir/r4/Slot/{id}: + get: + tags: + - GET + - Slot + summary: read Slot + description: This operation is used to read a Slot + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "200": + description: read Slot operation successful + content: + application/fhir+json: + schema: + $ref: '#/components/schemas/Slot' + security: + - default: [] + put: + tags: + - PUT + - Slot + summary: update Slot + description: This operation is used to update a Slot + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "201": + description: update Slot operation successful + security: + - default: [] + delete: + tags: + - DELETE + - Slot + summary: delete Slot + description: This operation is used to delete a Slot + parameters: + - name: id + in: path + description: logical identifier + required: true + schema: + type: string + responses: + "204": + description: delete Slot operation successful + security: + - default: [] +components: + schemas: + Resource: + required: + - resourceType + type: object + properties: + resourceType: + type: string + enum: + - Account + - ActivityDefinition + - AdverseEvent + - AllergyIntolerance + - Appointment + - AppointmentResponse + - AuditEvent + - Basic + - Binary + - BiologicallyDerivedProduct + - BodyStructure + - Bundle + - CapabilityStatement + - CarePlan + - CareTeam + - CatalogEntry + - ChargeItem + - ChargeItemDefinition + - Claim + - ClaimResponse + - ClinicalImpression + - CodeSystem + - Communication + - CommunicationRequest + - CompartmentDefinition + - Composition + - ConceptMap + - Condition + - Consent + - Contract + - Coverage + - CoverageEligibilityRequest + - CoverageEligibilityResponse + - DetectedIssue + - Device + - DeviceDefinition + - DeviceMetric + - DeviceRequest + - DeviceUseStatement + - DiagnosticReport + - DocumentManifest + - DocumentReference + - DomainResource + - EffectEvidenceSynthesis + - Encounter + - Endpoint + - EnrollmentRequest + - EnrollmentResponse + - EpisodeOfCare + - EventDefinition + - Evidence + - EvidenceVariable + - ExampleScenario + - ExplanationOfBenefit + - FamilyMemberHistory + - Flag + - Goal + - GraphDefinition + - Group + - GuidanceResponse + - HealthcareService + - ImagingStudy + - Immunization + - ImmunizationEvaluation + - ImmunizationRecommendation + - ImplementationGuide + - InsurancePlan + - Invoice + - Library + - Linkage + - List + - Location + - Measure + - MeasureReport + - Media + - Medication + - MedicationAdministration + - MedicationDispense + - MedicationKnowledge + - MedicationRequest + - MedicationStatement + - MedicinalProduct + - MedicinalProductAuthorization + - MedicinalProductContraindication + - MedicinalProductIndication + - MedicinalProductIngredient + - MedicinalProductInteraction + - MedicinalProductManufactured + - MedicinalProductPackaged + - MedicinalProductPharmaceutical + - MedicinalProductUndesirableEffect + - MessageDefinition + - MessageHeader + - MolecularSequence + - NamingSystem + - NutritionOrder + - Observation + - ObservationDefinition + - OperationDefinition + - OperationOutcome + - Organization + - OrganizationAffiliation + - Parameters + - Patient + - PaymentNotice + - PaymentReconciliation + - Person + - PlanDefinition + - Practitioner + - PractitionerRole + - Procedure + - Provenance + - Questionnaire + - QuestionnaireResponse + - RelatedPerson + - RequestGroup + - ResearchDefinition + - ResearchElementDefinition + - ResearchStudy + - ResearchSubject + - Resource + - RiskAssessment + - RiskEvidenceSynthesis + - Schedule + - SearchParameter + - ServiceRequest + - Slot + - Specimen + - SpecimenDefinition + - StructureDefinition + - StructureMap + - Subscription + - Substance + - SubstanceNucleicAcid + - SubstancePolymer + - SubstanceProtein + - SubstanceReferenceInformation + - SubstanceSourceMaterial + - SubstanceSpecification + - SupplyDelivery + - SupplyRequest + - Task + - TerminologyCapabilities + - TestReport + - TestScript + - ValueSet + - VerificationResult + - VisionPrescription + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The logical id of the resource, as used in the URL for the\ + \ resource. Once assigned, this value never changes." + meta: + $ref: '#/components/schemas/Meta' + implicitRules: + pattern: \S* + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide that\ + \ defines the special rules along with other profiles etc." + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The base language in which the resource is written. + DomainResource: + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + text: + $ref: '#/components/schemas/Narrative' + contained: + type: array + items: + $ref: '#/components/schemas/Resource' + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Bundle: + required: + - type + example: + resourceType: Bundle + meta: + versionId: exaha1GMZU + lastUpdated: 2020-03-12T00:11:47.779-04:00 + source: OscBE5P0oL + profile: + - 2t1_PYz6sb + security: + - system: __ZQLAVVwf + version: VLbtqKcbsY + code: VUlDjytwgy + display: qiSsBMDgPt + userSelected: true + tag: + - system: zjCxD2PaBs + version: rzU1dChGRU + code: T_fA90_uZ3 + display: lX3NJdEblQ + userSelected: true + - code: ibm/complete-mock + implicitRules: vor6NZfU_z + language: L2CvMvoQCf + identifier: + use: temp + type: + coding: + - system: 2KSvg9_FAi + version: gGp8DOk9J1 + code: mfTsOuaMha + display: oWF_kySdMa + userSelected: true + text: JCfLMefieh + system: OD8o0wUurR + value: rB39S_eWKm + period: + start: 2020-03-12T00:11:47.781-04:00 + end: 2020-03-12T00:11:47.781-04:00 + type: message + timestamp: 2020-03-12T00:11:47.768-04:00 + total: 253899444 + link: + - relation: 7ntmg3QgsB + url: yqZC1h4OiP + entry: + - link: + - relation: BYqAgl7fxn + url: FjYy1I_fo0 + fullUrl: jRHNMRSGoH + search: + mode: outcome + score: 215939698769 + request: + method: HEAD + url: fsGmEqxt_V + ifNoneMatch: 9Ce9vVtTEJ + ifModifiedSince: 2020-03-12T00:11:47.776-04:00 + ifMatch: PtLujM597v + ifNoneExist: thVohqaRoO + response: + status: Vz647bKzDX + location: vG6ZG5JY3n + etag: UAy7mNeNeo + lastModified: 2020-03-12T00:11:47.773-04:00 + signature: + type: + - system: UXJhVBJtsw + version: dSN1eoXw7X + code: 7n8GNkS7ty + display: Ff82O7MvgK + userSelected: true + when: 2020-03-12T00:11:47.767-04:00 + who: + reference: Practitioner/8Jt_8Rtofu + type: Practitioner + identifier: + use: secondary + type: + coding: + - system: aOvIofeYmD + version: mNBmEi5RDA + code: sM5gtqK3Xw + display: aOf6nJImxy + userSelected: true + text: zaOFAoPxBA + system: C70kG_5CcM + value: TYMT3hKJFR + period: + start: 2020-03-12T00:11:47.765-04:00 + end: 2020-03-12T00:11:47.765-04:00 + display: 5vUkPEw2_I + onBehalfOf: + reference: Practitioner/PEch7CxGIg + type: Practitioner + identifier: + use: usual + type: + coding: + - system: ixnevWoHGy + version: hJQzXghlpb + code: h6NurXxnyH + display: C0fDviMSsU + userSelected: true + text: izhrMjXk74 + system: giGNRU5rWU + value: e7_ezY1vVp + period: + start: 2020-03-12T00:11:47.767-04:00 + end: 2020-03-12T00:11:47.767-04:00 + display: nWuUixICQd + targetFormat: F93ISQKaDY + sigFormat: Qx2S3AEiMQ + data: AGxIVG4= + allOf: + - $ref: '#/components/schemas/Resource' + - type: object + properties: + identifier: + $ref: '#/components/schemas/Identifier' + type: + type: string + description: Indicates the purpose of this bundle – how it is intended + to be used. + enum: + - document + - message + - transaction + - transaction-response + - batch + - batch-response + - history + - searchset + - collection + timestamp: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the bundle was assembled – i.e. + when the resources were placed in the bundle. + total: + type: integer + description: "If a set of search matches, this is the total number of\ + \ entries of type 'match' across all pages in the search. It does not\ + \ include search.mode = 'include' or 'outcome' entries and it does not\ + \ provide a count of the number of entries in the Bundle." + format: int32 + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + entry: + type: array + items: + $ref: '#/components/schemas/Bundle_Entry' + signature: + $ref: '#/components/schemas/Signature' + OperationOutcome: + required: + - issue + example: + resourceType: OperationOutcome + meta: + versionId: aj7xYfDKGG + lastUpdated: 2020-03-12T00:11:56.482-04:00 + source: ZqswRdBz2V + profile: + - 7MtlUHdgF3 + security: + - system: eBZLDvfQS6 + version: 3loXo6Bekk + code: fApLgubn5v + display: hGDoUOaTiY + userSelected: true + tag: + - system: d6ZKFrRy9C + version: co9wqQZDjO + code: Z2JT_ZxmeR + display: f5JMtds3fb + userSelected: true + - code: ibm/complete-mock + implicitRules: FwNANOTUkD + language: iDvESiu0cB + text: + status: extensions + div:
+ issue: + - severity: warning + code: invariant + details: + coding: + - system: 9TiBhtaNhv + version: 38XIrYkjYf + code: s4dzxZ4dsW + display: tu3Q0RYWRq + userSelected: true + text: qW3nzpKNue + diagnostics: 4zXKgm6Eae + location: + - EmMlBkbb8W + expression: + - bSBqh22fAT + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + issue: + type: array + items: + $ref: '#/components/schemas/OperationOutcome_Issue' + Bundle_Entry: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + link: + type: array + items: + $ref: '#/components/schemas/Bundle_Link' + fullUrl: + pattern: \S* + type: string + description: "The Absolute URL for the resource. The fullUrl SHALL NOT\ + \ disagree with the id in the resource – i.e. if the fullUrl is\ + \ not a urn:uuid, the URL shall be version–independent URL consistent\ + \ with the Resource.id. The fullUrl is a version independent reference\ + \ to the resource. The fullUrl element SHALL have a value except that:\ + \ \n* fullUrl can be empty on a POST (although it does not need to when\ + \ specifying a temporary id for reference in the bundle)\n* Results\ + \ from operations might involve resources that are not identified." + resource: + $ref: '#/components/schemas/Resource' + search: + $ref: '#/components/schemas/Bundle_Entry_Search' + request: + $ref: '#/components/schemas/Bundle_Entry_Request' + response: + $ref: '#/components/schemas/Bundle_Entry_Response' + Bundle_Entry_Response: + required: + - status + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + status: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The status code returned by processing this entry. The status + SHALL start with a 3 digit HTTP code (e.g. 404) and may contain the + standard HTTP description associated with the status code. + location: + pattern: \S* + type: string + description: "The location header created by processing this operation,\ + \ populated if the operation returns a location." + etag: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The Etag for the resource, if the operation for the entry\ + \ produced a versioned resource (see [Resource Metadata and Versioning](http.html#versioning)\ + \ and [Managing Resource Contention](http.html#concurrency))." + lastModified: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: The date/time that the resource was modified on the server. + outcome: + $ref: '#/components/schemas/Resource' + Bundle_Entry_Request: + required: + - method + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + method: + type: string + description: "In a transaction or batch, this is the HTTP action to be\ + \ executed for this entry. In a history bundle, this indicates the HTTP\ + \ action that occurred." + enum: + - GET + - HEAD + - POST + - PUT + - DELETE + - PATCH + url: + pattern: \S* + type: string + description: "The URL for this entry, relative to the root (the address\ + \ to which the request is posted)." + ifNoneMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "If the ETag values match, return a 304 Not Modified status.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifModifiedSince: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Only perform the operation if the last updated date matches.\ + \ See the API documentation for [\"Conditional Read\"](http.html#cread)." + ifMatch: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Only perform the operation if the Etag value matches. For\ + \ more information, see the API section [\"Managing Resource Contention\"\ + ](http.html#concurrency)." + ifNoneExist: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Instruct the server not to perform the create if a specified\ + \ resource already exists. For further information, see the API documentation\ + \ for [\"Conditional Create\"](http.html#ccreate). This is just the\ + \ query portion of the URL – what follows the \"?\" (not including\ + \ the \"?\")." + Bundle_Entry_Search: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + mode: + type: string + description: "Why this entry is in the result set – whether it's\ + \ included as a match or because of an _include requirement, or to convey\ + \ information or warning information about the search process." + enum: + - match + - include + - outcome + score: + type: number + description: "When searching, the server's search ranking score for the\ + \ entry." + Bundle_Link: + required: + - relation + - url + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + relation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A name which details the functional use for this link –\ + \ see [http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1](http://www.iana.org/assignments/link–relations/link–relations.xhtml#link–relations–1)." + url: + pattern: \S* + type: string + description: The reference details for the link. + OperationOutcome_Issue: + required: + - code + - severity + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + severity: + type: string + description: Indicates whether the issue indicates a variation from successful + processing. + enum: + - fatal + - error + - warning + - information + code: + type: string + description: "Describes the type of the issue. The system that creates\ + \ an OperationOutcome SHALL choose the most applicable code from the\ + \ IssueType value set, and may additional provide its own code for the\ + \ error in the details element." + enum: + - invalid + - structure + - required + - value + - invariant + - security + - login + - unknown + - expired + - forbidden + - suppressed + - processing + - not-supported + - duplicate + - multiple-matches + - not-found + - deleted + - too-long + - code-invalid + - extension + - too-costly + - business-rule + - conflict + - transient + - lock-error + - no-store + - exception + - timeout + - incomplete + - throttled + - informational + details: + $ref: '#/components/schemas/CodeableConcept' + diagnostics: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Additional diagnostic information about the issue. + location: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This element is deprecated because it is XML specific.\ + \ It is replaced by issue.expression, which is format independent,\ + \ and simpler to parse. \n\nFor resource issues, this will be a simple\ + \ XPath limited to element names, repetition indicators and the default\ + \ child accessor that identifies one of the elements in the resource\ + \ that caused this issue to be raised. For HTTP errors, will be \"\ + http.\" + the parameter name." + expression: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A [simple subset of FHIRPath](fhirpath.html#simple) limited\ + \ to element names, repetition indicators and the default child accessor\ + \ that identifies one of the elements in the resource that caused\ + \ this issue to be raised." + Element: + type: object + properties: + id: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: Unique id for the element within a resource (for internal references). + This may be any string value that does not contain spaces. + extension: + type: array + items: + $ref: '#/components/schemas/Extension' + BackboneElement: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + modifierExtension: + type: array + items: + $ref: '#/components/schemas/Extension' + Address: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this address. + enum: + - home + - work + - temp + - old + - billing + type: + type: string + description: Distinguishes between physical addresses (those you can visit) + and mailing addresses (e.g. PO Boxes and care–of addresses). Most + addresses are both. + enum: + - postal + - physical + - both + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire address as it should be displayed e.g. + on a postal label. This may be provided instead of or as well as the + specific parts. + line: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This component contains the house number, apartment number,\ + \ street name, street direction, P.O. Box number, delivery hints,\ + \ and similar address information." + city: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The name of the city, town, suburb, village or other community\ + \ or delivery center." + district: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of the administrative area (county). + state: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Sub–unit of a country with limited sovereignty in a + federally organized country. A code may be used if codes are in common + use (e.g. US 2 letter state codes). + postalCode: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A postal code designating a region defined by the postal + service. + country: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Country – a nation as commonly understood or generally + accepted. + period: + $ref: '#/components/schemas/Period' + Age: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Annotation: + required: + - text + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + authorReference: + $ref: '#/components/schemas/Reference' + authorString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The individual responsible for making the annotation. + time: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Indicates when this particular annotation was made. + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The text of the annotation in markdown format. + Attachment: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + contentType: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: Identifies the type of the data in the attachment and allows + a method to be chosen to interpret or render the data. Includes mime + type parameters such as charset where appropriate. + language: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: The human language of the content. The value can be any valid + value according to BCP 47. + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "The actual data of the attachment – a sequence of\ + \ bytes, base64 encoded." + url: + pattern: \S* + type: string + description: A location where the data can be accessed. + size: + type: integer + description: "The number of bytes of data that make up this attachment\ + \ (before base64 encoding, if that is done)." + format: int32 + hash: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The calculated hash of the data using SHA–1. Represented + using base64. + title: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A label or set of text to display in place of the data. + creation: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The date that the attachment was first created. + CodeableConcept: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + coding: + type: array + items: + $ref: '#/components/schemas/Coding' + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human language representation of the concept as seen/selected/uttered + by the user who entered the data and/or which represents the intended + meaning of the user. + Coding: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + pattern: \S* + type: string + description: The identification of the code system that defines the meaning + of the symbol in the code. + version: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The version of the code system which was used when choosing\ + \ this code. Note that a well–maintained code system does not\ + \ need the version reported, because the meaning of codes is consistent\ + \ across versions. However this cannot consistently be assured, and\ + \ when the meaning is not guaranteed to be consistent, the version SHOULD\ + \ be exchanged." + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A symbol in syntax defined by the system. The symbol may + be a predefined code or an expression in a syntax defined by the coding + system (e.g. post–coordination). + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A representation of the meaning of the code in the system,\ + \ following the rules of the system." + userSelected: + type: boolean + description: Indicates that this coding was chosen by a user directly + – e.g. off a pick list of available items (codes or displays). + ContactPoint: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + system: + type: string + description: Telecommunications form for contact point – what communications + system is required to make use of the contact. + enum: + - phone + - fax + - email + - pager + - url + - sms + - other + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The actual contact point details, in a form that is meaningful\ + \ to the designated communication system (i.e. phone number or email\ + \ address)." + use: + type: string + description: Identifies the purpose for the contact point. + enum: + - home + - work + - temp + - old + - mobile + rank: + type: integer + description: Specifies a preferred order in which to use a set of contacts. + ContactPoints with lower rank values are more preferred than those with + higher rank values. + format: int32 + period: + $ref: '#/components/schemas/Period' + Count: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Distance: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Duration: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + HumanName: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: Identifies the purpose for this name. + enum: + - usual + - official + - temp + - nickname + - anonymous + - old + - maiden + text: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Specifies the entire name as it should be displayed e.g. + on an application UI. This may be provided instead of or as well as + the specific parts. + family: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The part of a name that links to the genealogy. In some cultures + (e.g. Eritrea) the family name of a son is the first name of his father. + given: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Given name. + prefix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ start of the name." + suffix: + type: array + items: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Part of the name that is acquired as a title due to academic,\ + \ legal, employment or nobility status, etc. and that appears at the\ + \ end of the name." + period: + $ref: '#/components/schemas/Period' + Identifier: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + use: + type: string + description: The purpose of this identifier. + enum: + - usual + - official + - temp + - secondary + - old + type: + $ref: '#/components/schemas/CodeableConcept' + system: + pattern: \S* + type: string + description: "Establishes the namespace for the value – that is,\ + \ a URL that describes a set values that are unique." + value: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The portion of the identifier typically relevant to the user + and which is unique within the context of the system. + period: + $ref: '#/components/schemas/Period' + assigner: + $ref: '#/components/schemas/Reference' + Money: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: Numerical value (with implicit precision). + currency: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: ISO 4217 Currency Code. + MoneyQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Period: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + start: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: The start of the period. The boundary is inclusive. + end: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "The end of the period. If the end of the period is missing,\ + \ it means no end was known or planned at the time the instance was\ + \ created. The start may be in the past, and the end date in the future,\ + \ which means that period is expected/planned to end at that time." + Quantity: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + value: + type: number + description: The value of the measured amount. The value includes an implicit + precision in the presentation of the value. + comparator: + type: string + description: "How the value should be understood and represented –\ + \ whether the actual value is greater or less than the stated value\ + \ due to measurement issues; e.g. if the comparator is \"<\" , then\ + \ the real value is < stated value." + enum: + - < + - <= + - '>=' + - '>' + unit: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A human–readable form of the unit. + system: + pattern: \S* + type: string + description: The identification of the system that provides the coded + form of the unit. + code: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A computer processable form of the unit in some unit representation + system. + Range: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + low: + $ref: '#/components/schemas/SimpleQuantity' + high: + $ref: '#/components/schemas/SimpleQuantity' + Ratio: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + numerator: + $ref: '#/components/schemas/Quantity' + denominator: + $ref: '#/components/schemas/Quantity' + Reference: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + reference: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a location at which the other resource is\ + \ found. The reference may be a relative reference, in which case it\ + \ is relative to the service base URL, or an absolute URL that resolves\ + \ to the location where the resource is found. The reference may be\ + \ version specific or not. If the reference is not to a FHIR RESTful\ + \ server, then it should be assumed to be version specific. Internal\ + \ fragment references (start with '#') refer to contained resources." + type: + pattern: \S* + type: string + description: "The expected type of the target of the reference. If both\ + \ Reference.type and Reference.reference are populated and Reference.reference\ + \ is a FHIR URL, both SHALL be consistent.\n\nThe type is the Canonical\ + \ URL of Resource Definition that is the type this reference refers\ + \ to. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition/\ + \ e.g. \"Patient\" is a reference to http://hl7.org/fhir/StructureDefinition/Patient.\ + \ Absolute URLs are only allowed for logical models (and can only be\ + \ used in references in logical models, not resources)." + identifier: + $ref: '#/components/schemas/Identifier' + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Plain text narrative that identifies the resource in addition + to the resource reference. + SampledData: + required: + - dimensions + - origin + - period + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + origin: + $ref: '#/components/schemas/SimpleQuantity' + period: + type: number + description: "The length of time between sampling times, measured in milliseconds." + factor: + type: number + description: A correction factor that is applied to the sampled data points + before they are added to the origin. + lowerLimit: + type: number + description: The lower limit of detection of the measured points. This + is needed if any of the data points have the value "L" (lower than detection + limit). + upperLimit: + type: number + description: The upper limit of detection of the measured points. This + is needed if any of the data points have the value "U" (higher than + detection limit). + dimensions: + type: integer + description: "The number of sample points at each time point. If this\ + \ value is greater than one, then the dimensions will be interlaced\ + \ – all the sample points for a point in time will be recorded\ + \ at once." + format: int32 + data: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A series of data points which are decimal values separated\ + \ by a single space (character u20). The special values \"E\" (error),\ + \ \"L\" (below detection limit) and \"U\" (above detection limit) can\ + \ also be used in place of a decimal value." + SimpleQuantity: + allOf: + - $ref: '#/components/schemas/Quantity' + - type: object + properties: {} + Signature: + required: + - type + - when + - who + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: array + items: + $ref: '#/components/schemas/Coding' + when: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the digital signature was signed. + who: + $ref: '#/components/schemas/Reference' + onBehalfOf: + $ref: '#/components/schemas/Reference' + targetFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: A mime type that indicates the technical format of the target + resources signed by the signature. + sigFormat: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "A mime type that indicates the technical format of the signature.\ + \ Important mime types are application/signature+xml for X ML DigSig,\ + \ application/jose for JWS, and image/* for a graphical image of a signature,\ + \ etc." + data: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: The base64 encoding of the Signature content. When signature + is not recorded electronically this element would be empty. + Timing: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + event: + type: array + items: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: Identifies specific times when the event occurs. + repeat: + $ref: '#/components/schemas/Timing_Repeat' + code: + $ref: '#/components/schemas/CodeableConcept' + Timing_Repeat: + allOf: + - $ref: '#/components/schemas/BackboneElement' + - type: object + properties: + boundsDuration: + $ref: '#/components/schemas/Duration' + boundsRange: + $ref: '#/components/schemas/Range' + boundsPeriod: + $ref: '#/components/schemas/Period' + count: + type: integer + description: "A total count of the desired number of repetitions across\ + \ the duration of the entire timing specification. If countMax is present,\ + \ this element indicates the lower bound of the allowed range of count\ + \ values." + format: int32 + countMax: + type: integer + description: "If present, indicates that the count is a range –\ + \ so to perform the action between [count] and [countMax] times." + format: int32 + duration: + type: number + description: "How long this thing happens for when it happens. If durationMax\ + \ is present, this element indicates the lower bound of the allowed\ + \ range of the duration." + durationMax: + type: number + description: "If present, indicates that the duration is a range –\ + \ so to perform the action between [duration] and [durationMax] time\ + \ length." + durationUnit: + type: string + description: "The units of time for the duration, in UCUM units." + enum: + - s + - min + - h + - d + - wk + - mo + - a + frequency: + type: integer + description: "The number of times to repeat the action within the specified\ + \ period. If frequencyMax is present, this element indicates the lower\ + \ bound of the allowed range of the frequency." + format: int32 + frequencyMax: + type: integer + description: "If present, indicates that the frequency is a range –\ + \ so to repeat between [frequency] and [frequencyMax] times within the\ + \ period or period range." + format: int32 + period: + type: number + description: "Indicates the duration of time over which repetitions are\ + \ to occur; e.g. to express \"3 times per day\", 3 would be the frequency\ + \ and \"1 day\" would be the period. If periodMax is present, this element\ + \ indicates the lower bound of the allowed range of the period length." + periodMax: + type: number + description: "If present, indicates that the period is a range from [period]\ + \ to [periodMax], allowing expressing concepts such as \"do this once\ + \ every 3–5 days." + periodUnit: + type: string + description: The units of time for the period in UCUM units. + enum: + - s + - min + - h + - d + - wk + - mo + - a + dayOfWeek: + type: array + items: + type: string + description: "If one or more days of week is provided, then the action\ + \ happens only on the specified day(s)." + enum: + - mon + - tue + - wed + - thu + - fri + - sat + - sun + timeOfDay: + type: array + items: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: Specified time of day for action to take place. + when: + type: array + items: + type: string + description: "An approximate time period during the day, potentially\ + \ linked to an event of daily living that indicates when the action\ + \ should occur." + enum: + - MORN + - MORN.early + - MORN.late + - NOON + - AFT + - AFT.early + - AFT.late + - EVE + - EVE.early + - EVE.late + - NIGHT + - PHS + - HS + - WAKE + - C + - CM + - CD + - CV + - AC + - ACM + - ACD + - ACV + - PC + - PCM + - PCD + - PCV + offset: + type: integer + description: "The number of minutes from the event. If the event code\ + \ does not indicate whether the minutes is before or after the event,\ + \ then the offset is assumed to be after the event." + format: int32 + ContactDetail: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + name: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The name of an individual to contact. + telecom: + type: array + items: + $ref: '#/components/schemas/ContactPoint' + RelatedArtifact: + required: + - type + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + type: + type: string + description: The type of relationship to the related artifact. + enum: + - documentation + - justification + - citation + - predecessor + - successor + - derived-from + - depends-on + - composed-of + label: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A short label that can be used to reference the citation\ + \ from elsewhere in the containing artifact, such as a footnote index." + display: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A brief description of the document or knowledge resource\ + \ being referenced, suitable for display to a consumer." + citation: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: A bibliographic citation for the related artifact. This text + SHOULD be formatted according to an accepted citation format. + url: + pattern: \S* + type: string + description: A url for the artifact that can be followed to access the + actual content. + document: + $ref: '#/components/schemas/Attachment' + resource: + pattern: \S* + type: string + description: "The related resource, such as a library, value set, profile,\ + \ or other knowledge resource." + UsageContext: + required: + - code + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + code: + $ref: '#/components/schemas/Coding' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueReference: + $ref: '#/components/schemas/Reference' + Meta: + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + versionId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "The version specific identifier, as it appears in the version\ + \ portion of the URL. This value changes when the resource is created,\ + \ updated, or deleted." + lastUpdated: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: When the resource last changed – e.g. when the version + changed. + source: + pattern: \S* + type: string + description: "A uri that identifies the source system of the resource.\ + \ This provides a minimal amount of [Provenance](provenance.html#) information\ + \ that can be used to track or differentiate the source of information\ + \ in the resource. The source may identify another FHIR server, document,\ + \ message, database, etc." + profile: + type: array + items: + pattern: \S* + type: string + description: "A list of profiles (references to [StructureDefinition](structuredefinition.html#)\ + \ resources) that this resource claims to conform to. The URL is a\ + \ reference to [StructureDefinition.url](structuredefinition–definitions.html#StructureDefinition.url)." + security: + type: array + items: + $ref: '#/components/schemas/Coding' + tag: + type: array + items: + $ref: '#/components/schemas/Coding' + Narrative: + required: + - div + - status + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + status: + type: string + description: "The status of the narrative – whether it's entirely\ + \ generated (from just the defined data or the extensions too), or whether\ + \ a human authored it and it may contain additional data." + enum: + - generated + - extensions + - additional + - empty + div: + type: string + description: "The actual narrative content, a stripped down version of\ + \ XHTML." + Extension: + required: + - url + allOf: + - $ref: '#/components/schemas/Element' + - type: object + properties: + url: + pattern: \S* + type: string + description: Source of the definition for the extension code – a + logical name or a URL. + valueBase64Binary: + pattern: "(\\s*([0-9a-zA-Z\\+\\=]){4}\\s*)+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueBoolean: + type: boolean + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCanonical: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueCode: + pattern: "[^\\s]+(\\s[^\\s]+)*" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDate: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDateTime: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueDecimal: + type: number + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueId: + pattern: "[A-Za-z0-9\\-\\.]{1,64}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInstant: + pattern: "([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\\ + .[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueInteger: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueMarkdown: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueOid: + pattern: "urn:oid:[0-2](\\.(0|[1-9][0-9]*))+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valuePositiveInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueString: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueTime: + pattern: "([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUnsignedInt: + type: integer + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + format: int32 + valueUri: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUrl: + pattern: \S* + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueUuid: + pattern: "urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + type: string + description: "Value of extension – must be one of a constrained\ + \ set of the data types (see [Extensibility](extensibility.html) for\ + \ a list)." + valueAddress: + $ref: '#/components/schemas/Address' + valueAge: + $ref: '#/components/schemas/Age' + valueAnnotation: + $ref: '#/components/schemas/Annotation' + valueAttachment: + $ref: '#/components/schemas/Attachment' + valueCodeableConcept: + $ref: '#/components/schemas/CodeableConcept' + valueCoding: + $ref: '#/components/schemas/Coding' + valueContactPoint: + $ref: '#/components/schemas/ContactPoint' + valueCount: + $ref: '#/components/schemas/Count' + valueDistance: + $ref: '#/components/schemas/Distance' + valueDuration: + $ref: '#/components/schemas/Duration' + valueHumanName: + $ref: '#/components/schemas/HumanName' + valueIdentifier: + $ref: '#/components/schemas/Identifier' + valueMoney: + $ref: '#/components/schemas/Money' + valuePeriod: + $ref: '#/components/schemas/Period' + valueQuantity: + $ref: '#/components/schemas/Quantity' + valueRange: + $ref: '#/components/schemas/Range' + valueRatio: + $ref: '#/components/schemas/Ratio' + valueReference: + $ref: '#/components/schemas/Reference' + valueSampledData: + $ref: '#/components/schemas/SampledData' + valueSignature: + $ref: '#/components/schemas/Signature' + valueTiming: + $ref: '#/components/schemas/Timing' + valueContactDetail: + $ref: '#/components/schemas/ContactDetail' + valueRelatedArtifact: + $ref: '#/components/schemas/RelatedArtifact' + valueUsageContext: + $ref: '#/components/schemas/UsageContext' + valueMeta: + $ref: '#/components/schemas/Meta' + Slot: + required: + - end + - schedule + - start + - status + allOf: + - $ref: '#/components/schemas/DomainResource' + - type: object + properties: + serviceType: + $ref: '#/components/schemas/CodeableConcept' + identifier: + $ref: '#/components/schemas/Identifier' + appointmentType: + $ref: '#/components/schemas/CodeableConcept' + extension: + $ref: '#/components/schemas/Extension' + specialty: + $ref: '#/components/schemas/CodeableConcept' + modifierExtension: + $ref: '#/components/schemas/Extension' + start: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Date/Time that the slot is to begin. + language: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: The base language in which the resource is written. + serviceCategory: + $ref: '#/components/schemas/CodeableConcept' + schedule: + $ref: '#/components/schemas/Reference' + contained: + $ref: '#/components/schemas/Resource' + meta: + $ref: '#/components/schemas/Meta' + overbooked: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "This slot has already been overbooked, appointments are\ + \ unlikely to be accepted for this time." + implicitRules: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "A reference to a set of rules that were followed when the\ + \ resource was constructed, and which must be understood when processing\ + \ the content. Often, this is a reference to an implementation guide\ + \ that defines the special rules along with other profiles etc." + end: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Date/Time that the slot is to conclude. + comment: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: Comments on the slot to describe any extended information. + Such as custom constraints on the slot. + id: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: "The logical id of the resource, as used in the URL for the\ + \ resource. Once assigned, this value never changes." + text: + $ref: '#/components/schemas/Narrative' + status: + pattern: "[ \\r\\n\\t\\S]+" + type: string + description: busy | free | busy-unavailable | busy-tentative | entered-in-error. + parameters: + _lastUpdatedParam: + name: _lastUpdated + in: query + description: When the resource version last changed + required: false + style: form + explode: true + schema: + type: string + _securityParam: + name: _security + in: query + description: Security Labels applied to this resource + required: false + style: form + explode: true + schema: + type: string + _tagParam: + name: _tag + in: query + description: Tags applied to this resource + required: false + style: form + explode: true + schema: + type: string + _idParam: + name: _id + in: query + description: Logical id of this artifact + required: false + style: form + explode: true + schema: + type: string + _sourceParam: + name: _source + in: query + description: Identifies where the resource comes from + required: false + style: form + explode: true + schema: + type: string + _profileParam: + name: _profile + in: query + description: Profiles this resource claims to conform to + required: false + style: form + explode: true + schema: + type: string + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://localhost:8243/authorize + scopes: {} +x-wso2-oh-fhir-resourceType: Slot +x-wso2-oh-fhir-profile: +- http://hl7.org/fhir/StructureDefinition/Slot diff --git a/schedule-appointment-process-API/aggregate-service/practitioner_api_config.bal b/schedule-appointment-process-API/aggregate-service/practitioner_api_config.bal new file mode 100644 index 000000000..b7b282a4a --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/practitioner_api_config.bal @@ -0,0 +1,186 @@ +// Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). All Rights Reserved. + +// This software is the property of WSO2 LLC. and its suppliers, if any. +// Dissemination of any information or reproduction of any material contained +// herein is strictly forbidden, unless permitted by WSO2 in accordance with +// the WSO2 Software License available at: https://wso2.com/licenses/eula/3.2 +// For specific language governing the permissions and limitations under +// this license, please see the license as well as any agreement you’ve +// entered into with WSO2 governing the purchase of this software and any +// associated services. +// +// +// AUTO-GENERATED FILE. +// +// This file is auto-generated by Ballerina. +// Developers are allowed to modify this file as per the requirement. + +import ballerinax/health.fhir.r4; + +final r4:ResourceAPIConfig practitionerApiConfig = { + resourceType: "Practitioner", + profiles: [ + "http://hl7.org/fhir/StructureDefinition/Practitioner" + ], + defaultProfile: (), + searchParameters: [ + { + name: "communication", + active: true, + information: { + description: "One of the languages that the practitioner can communicate with", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Practitioner-communication" + } + }, + { + name: "name", + active: true, + information: { + description: "A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Practitioner-name" + } + }, + { + name: "email", + active: true, + information: { + description: "[Practitioner](practitioner.html): A value in an email contact", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-email" + } + }, + { + name: "address", + active: true, + information: { + description: "[Practitioner](practitioner.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-address" + } + }, + { + name: "active", + active: true, + information: { + description: "Whether the practitioner record is active", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Practitioner-active" + } + }, + { + name: "address-use", + active: true, + information: { + description: "[Practitioner](practitioner.html): A use code specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-address-use" + } + }, + { + name: "phonetic", + active: true, + information: { + description: "[Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-phonetic" + } + }, + { + name: "address-country", + active: true, + information: { + description: "[Practitioner](practitioner.html): A country specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-address-country" + } + }, + { + name: "phone", + active: true, + information: { + description: "[Practitioner](practitioner.html): A value in a phone contact", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-phone" + } + }, + { + name: "identifier", + active: true, + information: { + description: "A practitioner's Identifier", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Practitioner-identifier" + } + }, + { + name: "address-city", + active: true, + information: { + description: "[Practitioner](practitioner.html): A city specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-address-city" + } + }, + { + name: "gender", + active: true, + information: { + description: "[Practitioner](practitioner.html): Gender of the practitioner", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-gender" + } + }, + { + name: "telecom", + active: true, + information: { + description: "[Practitioner](practitioner.html): The value in any kind of contact", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-telecom" + } + }, + { + name: "address-state", + active: true, + information: { + description: "[Practitioner](practitioner.html): A state specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-address-state" + } + }, + { + name: "given", + active: true, + information: { + description: "[Practitioner](practitioner.html): A portion of the given name", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-given" + } + }, + { + name: "address-postalcode", + active: true, + information: { + description: "[Practitioner](practitioner.html): A postalCode specified in an address", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-address-postalcode" + } + }, + { + name: "family", + active: true, + information: { + description: "[Practitioner](practitioner.html): A portion of the family name", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/individual-family" + } + } + ], + operations: [ + + ], + serverConfig: (), + authzConfig: () +}; diff --git a/schedule-appointment-process-API/aggregate-service/service.bal b/schedule-appointment-process-API/aggregate-service/service.bal new file mode 100644 index 000000000..1fa890d6c --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/service.bal @@ -0,0 +1,158 @@ +// Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). All Rights Reserved. +// This software is the property of WSO2 LLC. and its suppliers, if any. +// Dissemination of any information or reproduction of any material contained +// herein is strictly forbidden, unless permitted by WSO2 in accordance with +// the WSO2 Software License available at: https://wso2.com/licenses/eula/3.2 +// For specific language governing the permissions and limitations under +// this license, please see the license as well as any agreement you’ve +// entered into with WSO2 governing the purchase of this software and any +// associated services. +// +// This file is auto-generated by WSO2 Healthcare Team for managing utility functions. +// Developers are allowed modify this file as per the requirement. +import ballerinax/health.clients.fhir as fhirClient; +import ballerinax/health.fhir.r4; +import ballerinax/health.fhirr4; +import ballerinax/health.fhir.r4.international401; + +public type Location international401:Location; + +public type Appointment international401:Appointment; + +string practitionerBaseUrl = "http://localhost:9092/fhir/r4"; +string slotBaseUrl = "http://localhost:9098/fhir/r4"; +string locationBaseUrl = "http://localhost:9095/fhir/r4"; +string appointmentBaseUrl = "http://localhost:9099/fhir/r4"; + +// Create a FHIR client configs for practitioner ,slot, location and appointment +fhirClient:FHIRConnectorConfig practitionerConfig = { + baseURL: practitionerBaseUrl, + mimeType: fhirClient:FHIR_JSON +}; + +fhirClient:FHIRConnectorConfig slotConfig = { + baseURL: slotBaseUrl, + mimeType: fhirClient:FHIR_JSON +}; + +fhirClient:FHIRConnectorConfig locationConfig = { + baseURL: locationBaseUrl, + mimeType: fhirClient:FHIR_JSON +}; + +fhirClient:FHIRConnectorConfig appointmentConfig = { + baseURL: appointmentBaseUrl, + mimeType: fhirClient:FHIR_JSON +}; + +final fhirClient:FHIRConnector fhirPractitionerObj = check new (practitionerConfig); +final fhirClient:FHIRConnector fhirSlotObj = check new (slotConfig); +final fhirClient:FHIRConnector fhirLocationObj = check new (locationConfig); +final fhirClient:FHIRConnector fhirAppointmentObj = check new (appointmentConfig); + +service / on new fhirr4:Listener(8081, practitionerApiConfig) { + + isolated resource function get fhir/r4/Practitioner(r4:FHIRContext fhirContext) returns r4:Bundle|error { + + map queryParams = {}; + + // Fetch the search parameter: family + r4:StringSearchParameter[]|r4:FHIRTypeError? familyArray = fhirContext.getStringSearchParameter("family"); + if familyArray is r4:StringSearchParameter[] && familyArray.length() > 0 { + queryParams["family"] = [familyArray[0].value]; + } + + // Fetch the search parameter: given + r4:StringSearchParameter[]|r4:FHIRTypeError? givenArray = fhirContext.getStringSearchParameter("given"); + if givenArray is r4:StringSearchParameter[] && givenArray.length() > 0 { + queryParams["given"] = [givenArray[0].value]; + } + + fhirClient:FHIRResponse searchResponse = check fhirPractitionerObj->search("Practitioner", queryParams); + + return searchResponse.'resource.cloneWithType(); + } + +} + +service / on new fhirr4:Listener(8082, slotApiConfig) { + isolated resource function get fhir/r4/Slot(r4:FHIRContext fhirContext) returns json[]|r4:Bundle|error|error { + map queryParams = {}; + r4:BundleEntry[] newBundleEntry = []; + + r4:StringSearchParameter[]|r4:FHIRTypeError? practitionerArray = fhirContext.getStringSearchParameter("practitioner"); + if practitionerArray is r4:StringSearchParameter[] && practitionerArray.length() > 0 { + queryParams["practitioner"] = [practitionerArray[0].value]; + } + + r4:StringSearchParameter[]|r4:FHIRTypeError? startDateArray = fhirContext.getStringSearchParameter("startDate"); + + if (startDateArray is r4:StringSearchParameter[] && startDateArray.count() > 0) { + queryParams["start"] = [string `ge${startDateArray[0].value}T06:00:00Z`, string `lt${startDateArray[0].value}T23:55:55Z`]; + } + + queryParams["service-type"] = ["https://fhir.cerner.com/ec2458f2-1e24-41c8-b71b-0e701af7583d/codeSet/14249|4047611"]; + queryParams["_count"] = ["40"]; + + fhirClient:FHIRResponse searchResponse = check fhirSlotObj->search("Slot", queryParams); + + r4:Bundle|error resourceResponse = searchResponse.'resource.cloneWithType(); + if resourceResponse is r4:Bundle { + r4:BundleEntry[]? optionalEntries = resourceResponse.entry; + if optionalEntries is r4:BundleEntry[] { + foreach var entry in optionalEntries { + json|error resourceEntry = entry["resource"].toJson(); + + if resourceEntry is json { + json|error resourceEntryExtension = check resourceEntry.extension; + + if resourceEntryExtension is json[] { + foreach var ext in resourceEntryExtension { + if ext is map { + if ext["valueReference"] is map { + json|error location = check ext["valueReference"].reference; + + if location == "Location/25442717" { + r4:BundleEntry newEntry = { + 'resource: resourceEntry + }; + newBundleEntry.push(newEntry); + } + + } + } + } + + } + } + + } + } + } + + r4:Bundle newBundle = { + resourceType: "Bundle", + entry: newBundleEntry + , + 'type: "searchset" + }; + return newBundle; + } +} + +service / on new fhirr4:Listener(8084, locationApiConfig) { + + isolated resource function get fhir/r4/Location/[string id](r4:FHIRContext fhirContext) returns Location|error { + + fhirClient:FHIRResponse readByIdResponse = check fhirLocationObj->getById("Location", id); + return readByIdResponse.'resource.cloneWithType(Location); + } +} + +service / on new fhirr4:Listener(8083, appointmentApiConfig) { + isolated resource function post fhir/r4/Appointment(r4:FHIRContext fhirContext, json appointment) returns int|error { + + fhirClient:FHIRResponse postResponse = check fhirAppointmentObj->create(appointment); + return postResponse.httpStatusCode; + } +} diff --git a/schedule-appointment-process-API/aggregate-service/slot_api_config.bal b/schedule-appointment-process-API/aggregate-service/slot_api_config.bal new file mode 100644 index 000000000..58c5b6745 --- /dev/null +++ b/schedule-appointment-process-API/aggregate-service/slot_api_config.bal @@ -0,0 +1,118 @@ +// Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com). All Rights Reserved. + +// This software is the property of WSO2 LLC. and its suppliers, if any. +// Dissemination of any information or reproduction of any material contained +// herein is strictly forbidden, unless permitted by WSO2 in accordance with +// the WSO2 Software License available at: https://wso2.com/licenses/eula/3.2 +// For specific language governing the permissions and limitations under +// this license, please see the license as well as any agreement you’ve +// entered into with WSO2 governing the purchase of this software and any +// associated services. +// +// +// AUTO-GENERATED FILE. DO NOT MODIFY. +// +// This file is auto-generated by WSO2 Healthcare Team for managing utility functions. +// Developers are allowed modify this file as per the requirement. + +import ballerinax/health.fhir.r4; + +final r4:ResourceAPIConfig slotApiConfig = { + resourceType: "Slot", + profiles: [ + "http://hl7.org/fhir/StructureDefinition/Slot" + ], + defaultProfile: (), + searchParameters: [ + { + name: "status", + active: true, + information: { + description: "The free/busy status of the appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-status" + } + }, + { + name: "identifier", + active: true, + information: { + description: "A Slot Identifier", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-identifier" + } + }, + { + name: "schedule", + active: true, + information: { + description: "The Schedule Resource that we are seeking a slot within", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-schedule" + } + }, + { + name: "start", + active: true, + information: { + description: "Appointment date/time.", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-start" + } + }, + { + name: "service-type", + active: true, + information: { + description: "The type of appointments that can be booked into the slot", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-service-type" + } + }, + { + name: "service-category", + active: true, + information: { + description: "A broad categorization of the service that is to be performed during this appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-service-category" + } + }, + { + name: "specialty", + active: true, + information: { + description: "The specialty of a practitioner that would be required to perform the service requested in this appointment", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-specialty" + } + }, + { + name: "appointment-type", + active: true, + information: { + description: "The style of appointment or patient that may be booked in the slot (not service type)", + builtin: false, + documentation: "http://hl7.org/fhir/SearchParameter/Slot-appointment-type" + } + }, + { + name: "practitioner", + active: true + }, + { + name: "startDate", + active: true + + }, + { + name: "endDate", + active: true + } + ], + operations: [ + + ], + serverConfig: (), + authzConfig: () +}; diff --git a/schedule-appointment-process-API/img/appointment-booking.png b/schedule-appointment-process-API/img/appointment-booking.png new file mode 100644 index 0000000000000000000000000000000000000000..a264935dc5707a47da9bd75944381528152fe159 GIT binary patch literal 430184 zcmeEP2OyPg`!A`KNRuLIXxlqNDOyIUWMrQtqjT`wa`gVc_x--}A8*Gq?s1LZHSX)apY28ldIAGS5A4;em%xJgbC>q& zHC&}vul}3)`oWbNzJYJypWg0E_2%@7$rk(AtCxe3$GnvuF5ashok_hU6?7QCB;{q- zklj5b73NCH%iB;W()Nxv4sJFs?$WL#54Z&PZ5&9h%m?(z8yuaTZ6xJ&m850i))ajk zJ4aU!villIg*ou|0#^@`GyDse;lGB)@Sm0N|8lZca!OVzQ{m@q3dNaZLb6@t2(9ZX zDX2&*D8uC`i{>xWUo0uF1HYXeok;MH9?8y$jJ=|>#*OR(S9Im%)ud&y|AmXjHmhyi z99f#cM!KHl=I%&#WlTn1QCdY>PK7ZCcRL$r663l8z$hyzgkwxVB-z+6|tzD|B>p%^bbwE%Mf}U1Qe1HM~t1 zZ#_2~${KyLJ)KJS-i#*XWz}Hx*aYl-7+2&}Rh1Z59Nh4ZnEhfGj2$;HMPoU>a+BGjjhh?Ui~X_HWM}5|n9opP=4`EF7mR-q zmE|!LM|%$t2TYz+m6*fBo}N!~bXbG;EGNsn<6?t9%)H>f#>SrP#dx27iIpu3LgM6f zBa@*$7Ot`0#vgL=)*(4#GKtfX*$;?L_up-srdyjz^rSf>(|L;W9wy%NoaF5187Vj{ zc5`vT#NTB8(Zay$(TrpIb)McuLydv{&uU|4IhhJO6 zDqqUX2W^;g?aB>N7E`AarAB|i&!aSdjrE`H68NxSkytI-@w6f(!}xB?m^BumhKv zOjl503Krh7JK59Cj>LTG_t;6)1ukc}xDa*eVdLgN^5CFL1u$qJM{S~wrUdh8x;S<9 zCUcx^Y)Q^WWOqjohMBg5Rxu+y2g4CZFei)K zJzz`r@F2UeJTTkY(E&5?9%KxUY?yzwwFAzLGv249yn?JOSkk%hAPkv;$*GGsI5(6v z(l#4B-AK}&?$9~i@cz9xCMBoP9>`Rsm6(XYqHJ=wyTYn%a^T1)GTj(l1^)AJ#&l0u z;7m>$bk>+;;|9VcFYDz9c3oc9$j!#igU)S?(hOIMPH+~p0|o@MRxGm9fvvcB;M{j{ zw718sR;Na)Gno8)`P-hmN~#R0Vr8uwQv%pn3$8B)VE-JpG6%%M*4YjYZX^dA50Vrp z%X&xf20A(#b8PIKz@;$8$CAu;r_`#hk;C>U}2yR$;}mq zITo#B*OGsLvnMCpjtx?n)yC9=l?|P#5q|BT!v&`Pvv6S^1-!ZT$oJ3Zfg tUOTd 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

O4Eot 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�-UWH31mb>=BpqMMS!xC)q~0e_8JBZc`AA!i((Qr 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 z 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

_3y~ZovCp>3 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 YYs?rus^wO@2>iEnvDu<~3vGV?KS04_i~s-t literal 0 HcmV?d00001 From 4e6140ec20725b5f50a369eff4eb4c85dc99f7d6 Mon Sep 17 00:00:00 2001 From: isuruuy429 Date: Tue, 5 Nov 2024 15:19:41 +0530 Subject: [PATCH 2/3] Remove calling the pre-bulilt services. --- .gitignore | 7 +++ .../aggregate-service/Dependencies.toml | 4 ++ .../aggregate-service/service.bal | 50 +++++++------------ 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 524f0963b..7c02f1f67 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,10 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* replay_pid* + +# Mac configuration file +.DS_Store + +# Ballerina +target/ +Config.toml diff --git a/schedule-appointment-process-API/aggregate-service/Dependencies.toml b/schedule-appointment-process-API/aggregate-service/Dependencies.toml index 1837af3ff..cfc70cba3 100644 --- a/schedule-appointment-process-API/aggregate-service/Dependencies.toml +++ b/schedule-appointment-process-API/aggregate-service/Dependencies.toml @@ -94,6 +94,9 @@ dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.value"} ] +modules = [ + {org = "ballerina", packageName = "io", moduleName = "io"} +] [[package]] org = "ballerina" @@ -387,6 +390,7 @@ org = "isuruuy" name = "aggregate_service" version = "0.1.0" dependencies = [ + {org = "ballerina", name = "io"}, {org = "ballerinai", name = "observe"}, {org = "ballerinax", name = "health.clients.fhir"}, {org = "ballerinax", name = "health.fhir.r4"}, diff --git a/schedule-appointment-process-API/aggregate-service/service.bal b/schedule-appointment-process-API/aggregate-service/service.bal index 1fa890d6c..e52b6d9ab 100644 --- a/schedule-appointment-process-API/aggregate-service/service.bal +++ b/schedule-appointment-process-API/aggregate-service/service.bal @@ -16,39 +16,27 @@ import ballerinax/health.fhirr4; import ballerinax/health.fhir.r4.international401; public type Location international401:Location; - public type Appointment international401:Appointment; -string practitionerBaseUrl = "http://localhost:9092/fhir/r4"; -string slotBaseUrl = "http://localhost:9098/fhir/r4"; -string locationBaseUrl = "http://localhost:9095/fhir/r4"; -string appointmentBaseUrl = "http://localhost:9099/fhir/r4"; +configurable string cernerUrl = ?; +configurable string tokenUrl = ?; +configurable string clientId = ?; +configurable string clientSecret = ?; +configurable string[] scopes = ?; // Create a FHIR client configs for practitioner ,slot, location and appointment -fhirClient:FHIRConnectorConfig practitionerConfig = { - baseURL: practitionerBaseUrl, - mimeType: fhirClient:FHIR_JSON -}; - -fhirClient:FHIRConnectorConfig slotConfig = { - baseURL: slotBaseUrl, - mimeType: fhirClient:FHIR_JSON -}; - -fhirClient:FHIRConnectorConfig locationConfig = { - baseURL: locationBaseUrl, - mimeType: fhirClient:FHIR_JSON -}; - -fhirClient:FHIRConnectorConfig appointmentConfig = { - baseURL: appointmentBaseUrl, - mimeType: fhirClient:FHIR_JSON +fhirClient:FHIRConnectorConfig cernerConfig = { + baseURL: cernerUrl, + mimeType: fhirClient:FHIR_JSON, + authConfig: { + tokenUrl: tokenUrl, + clientId: clientId, + clientSecret: clientSecret, + scopes: scopes + } }; -final fhirClient:FHIRConnector fhirPractitionerObj = check new (practitionerConfig); -final fhirClient:FHIRConnector fhirSlotObj = check new (slotConfig); -final fhirClient:FHIRConnector fhirLocationObj = check new (locationConfig); -final fhirClient:FHIRConnector fhirAppointmentObj = check new (appointmentConfig); +final fhirClient:FHIRConnector fhirConnectorObj = check new (cernerConfig); service / on new fhirr4:Listener(8081, practitionerApiConfig) { @@ -68,7 +56,7 @@ service / on new fhirr4:Listener(8081, practitionerApiConfig) { queryParams["given"] = [givenArray[0].value]; } - fhirClient:FHIRResponse searchResponse = check fhirPractitionerObj->search("Practitioner", queryParams); + fhirClient:FHIRResponse searchResponse = check fhirConnectorObj->search("Practitioner", queryParams); return searchResponse.'resource.cloneWithType(); } @@ -94,7 +82,7 @@ service / on new fhirr4:Listener(8082, slotApiConfig) { queryParams["service-type"] = ["https://fhir.cerner.com/ec2458f2-1e24-41c8-b71b-0e701af7583d/codeSet/14249|4047611"]; queryParams["_count"] = ["40"]; - fhirClient:FHIRResponse searchResponse = check fhirSlotObj->search("Slot", queryParams); + fhirClient:FHIRResponse searchResponse = check fhirConnectorObj->search("Slot", queryParams); r4:Bundle|error resourceResponse = searchResponse.'resource.cloneWithType(); if resourceResponse is r4:Bundle { @@ -144,7 +132,7 @@ service / on new fhirr4:Listener(8084, locationApiConfig) { isolated resource function get fhir/r4/Location/[string id](r4:FHIRContext fhirContext) returns Location|error { - fhirClient:FHIRResponse readByIdResponse = check fhirLocationObj->getById("Location", id); + fhirClient:FHIRResponse readByIdResponse = check fhirConnectorObj->getById("Location", id); return readByIdResponse.'resource.cloneWithType(Location); } } @@ -152,7 +140,7 @@ service / on new fhirr4:Listener(8084, locationApiConfig) { service / on new fhirr4:Listener(8083, appointmentApiConfig) { isolated resource function post fhir/r4/Appointment(r4:FHIRContext fhirContext, json appointment) returns int|error { - fhirClient:FHIRResponse postResponse = check fhirAppointmentObj->create(appointment); + fhirClient:FHIRResponse postResponse = check fhirConnectorObj->create(appointment); return postResponse.httpStatusCode; } } From 616543488eed0efdef4820eaa6223a205af193d1 Mon Sep 17 00:00:00 2001 From: isuruuy429 Date: Thu, 7 Nov 2024 16:20:35 +0530 Subject: [PATCH 3/3] Add a new route to open appointment receipt in a new page --- schedule-appointment-process-API/Davinci_Coverage_Demo_app | 2 +- .../aggregate-service/Dependencies.toml | 4 ---- .../aggregate-service/service.bal | 7 ++++++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/schedule-appointment-process-API/Davinci_Coverage_Demo_app b/schedule-appointment-process-API/Davinci_Coverage_Demo_app index 6b015cd6f..b2378b456 160000 --- a/schedule-appointment-process-API/Davinci_Coverage_Demo_app +++ b/schedule-appointment-process-API/Davinci_Coverage_Demo_app @@ -1 +1 @@ -Subproject commit 6b015cd6f2b1910f873d148db38bcae783974a64 +Subproject commit b2378b456e14b667b1e178999bbe28f5e4c0f738 diff --git a/schedule-appointment-process-API/aggregate-service/Dependencies.toml b/schedule-appointment-process-API/aggregate-service/Dependencies.toml index cfc70cba3..1837af3ff 100644 --- a/schedule-appointment-process-API/aggregate-service/Dependencies.toml +++ b/schedule-appointment-process-API/aggregate-service/Dependencies.toml @@ -94,9 +94,6 @@ dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.value"} ] -modules = [ - {org = "ballerina", packageName = "io", moduleName = "io"} -] [[package]] org = "ballerina" @@ -390,7 +387,6 @@ org = "isuruuy" name = "aggregate_service" version = "0.1.0" dependencies = [ - {org = "ballerina", name = "io"}, {org = "ballerinai", name = "observe"}, {org = "ballerinax", name = "health.clients.fhir"}, {org = "ballerinax", name = "health.fhir.r4"}, diff --git a/schedule-appointment-process-API/aggregate-service/service.bal b/schedule-appointment-process-API/aggregate-service/service.bal index e52b6d9ab..2226b6a0c 100644 --- a/schedule-appointment-process-API/aggregate-service/service.bal +++ b/schedule-appointment-process-API/aggregate-service/service.bal @@ -68,14 +68,17 @@ service / on new fhirr4:Listener(8082, slotApiConfig) { map queryParams = {}; r4:BundleEntry[] newBundleEntry = []; + // Fetch the search parameter: practitioner r4:StringSearchParameter[]|r4:FHIRTypeError? practitionerArray = fhirContext.getStringSearchParameter("practitioner"); if practitionerArray is r4:StringSearchParameter[] && practitionerArray.length() > 0 { queryParams["practitioner"] = [practitionerArray[0].value]; } + // Fetch the search parameter: startDate r4:StringSearchParameter[]|r4:FHIRTypeError? startDateArray = fhirContext.getStringSearchParameter("startDate"); if (startDateArray is r4:StringSearchParameter[] && startDateArray.count() > 0) { + //construct date to Cerner accepting format queryParams["start"] = [string `ge${startDateArray[0].value}T06:00:00Z`, string `lt${startDateArray[0].value}T23:55:55Z`]; } @@ -84,6 +87,7 @@ service / on new fhirr4:Listener(8082, slotApiConfig) { fhirClient:FHIRResponse searchResponse = check fhirConnectorObj->search("Slot", queryParams); + //From the Slot Bundle extract the slots for the selected two locations r4:Bundle|error resourceResponse = searchResponse.'resource.cloneWithType(); if resourceResponse is r4:Bundle { r4:BundleEntry[]? optionalEntries = resourceResponse.entry; @@ -100,7 +104,7 @@ service / on new fhirr4:Listener(8082, slotApiConfig) { if ext["valueReference"] is map { json|error location = check ext["valueReference"].reference; - if location == "Location/25442717" { + if location == "Location/25442717" || location == "Location/32216061"{ r4:BundleEntry newEntry = { 'resource: resourceEntry }; @@ -118,6 +122,7 @@ service / on new fhirr4:Listener(8082, slotApiConfig) { } } + // Construct a new Slot Bundle that has slots only from the selected locations r4:Bundle newBundle = { resourceType: "Bundle", entry: newBundleEntry