Skip to content

Commit

Permalink
some fixes and improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnMoehrke committed Dec 9, 2024
1 parent 2ee8402 commit ef67d08
Show file tree
Hide file tree
Showing 14 changed files with 63 additions and 60 deletions.
5 changes: 0 additions & 5 deletions input/examples/example-patient.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
{
"resourceType" : "Patient",
"id" : "pat1",
"meta" : {
"profile" : [
"http://hl7.org/fhir/uv/ipa/StructureDefinition/ipa-patient"
]
},
"identifier" : [
{
"use" : "usual",
Expand Down
5 changes: 0 additions & 5 deletions input/examples/example-practitioner.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
{
"resourceType": "Practitioner",
"id": "dr-y",
"meta": {
"profile": [
"http://hl7.org/fhir/uv/ipa/StructureDefinition/ipa-practitioner"
]
},
"identifier": [
{
"system": "http://hl7.org.fhir/sid/us-npi",
Expand Down
26 changes: 12 additions & 14 deletions input/fsh/capability.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,16 @@ Instance: IHE.Scheduling.client
InstanceOf: CapabilityStatement
Usage: #definition
* url = "https://profiles.ihe.net/ITI/Scheduling/CapabilityStatement/IHE.Scheduling.client"
* version = "0.8.0"
* version = "1.0.0"
* name = "IHE_Scheduling_Client"
* title = "IHE Scheduling Client"
* status = #active
* experimental = false
* date = "2024-02-05"
* date = "2024-12-12"
* publisher = "Integrating the Healthcare Enterprise (IHE)"
* contact[0].name = "IHE"
* contact[0].name = "IHE IT Infrastructure Technical Committee"
* contact[=].telecom.system = #url
* contact[=].telecom.value = "http://ihe.net"
* contact[+].name = "John Moehrke"
* contact[=].telecom.system = #email
* contact[=].telecom.value = "[email protected]"
* contact[=].telecom.value = "https://www.ihe.net/ihe_domains/it_infrastructure/"
* jurisdiction = http://unstats.un.org/unsd/methods/m49/m49.htm#001 "World"
* description = "CapabilityStatement for Client Actor in the IHE IT Infrastructure Technical Framework Supplement IHE FHIR Scheduling. See https://profiles.ihe.net/ITI/TF/Volume1/ch-38.html."
* copyright = "IHE http://www.ihe.net/Governance/#Intellectual_Property"
Expand All @@ -26,12 +23,14 @@ Usage: #definition
* format[+] = #application/fhir+json
* format[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* format[=].extension.valueCode = #SHOULD
/*
* implementationGuide[0] = "http://hl7.org/fhir/smart-app-launch/ImplementationGuide/hl7.fhir.uv.smart-app-launch"
* implementationGuide[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* implementationGuide[=].extension.valueCode = #SHOULD
* implementationGuide[+] = "http://hl7.org/fhir/uv/ipa/ImplementationGuide/hl7.fhir.uv.ipa"
* implementationGuide[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* implementationGuide[=].extension.valueCode = #SHOULD
*/
* implementationGuide[+] = "https://profiles.ihe.net/ITI/BALP/ImplementationGuide/ihe.iti.balp"
* implementationGuide[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* implementationGuide[=].extension.valueCode = #SHOULD
Expand Down Expand Up @@ -119,19 +118,16 @@ Instance: IHE.Scheduling.server
InstanceOf: CapabilityStatement
Usage: #definition
* url = "https://profiles.ihe.net/ITI/Scheduling/CapabilityStatement/IHE.Scheduling.server"
* version = "0.8.0"
* version = "1.0.0"
* name = "IHE_Scheduling_Server"
* title = "IHE Scheduling Server"
* status = #active
* experimental = false
* date = "2024-02-05"
* date = "2024-12-12"
* publisher = "Integrating the Healthcare Enterprise (IHE)"
* contact[0].name = "IHE"
* contact[0].name = "IHE IT Infrastructure Technical Committee"
* contact[=].telecom.system = #url
* contact[=].telecom.value = "http://ihe.net"
* contact[+].name = "John Moehrke"
* contact[=].telecom.system = #email
* contact[=].telecom.value = "[email protected]"
* contact[=].telecom.value = "https://www.ihe.net/ihe_domains/it_infrastructure/"
* description = "CapabilityStatement for Server Actor in the IHE IT Infrastructure Technical Framework Supplement IHE FHIR Scheduling. See https://profiles.ihe.net/ITI/TF/Volume1/ch-38.html."
* copyright = "IHE http://www.ihe.net/Governance/#Intellectual_Property"
* kind = #requirements
Expand All @@ -142,12 +138,14 @@ Usage: #definition
* format[+] = #application/fhir+json
* format[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* format[=].extension.valueCode = #SHALL
/*
* implementationGuide[0] = "http://hl7.org/fhir/smart-app-launch/ImplementationGuide/hl7.fhir.uv.smart-app-launch"
* implementationGuide[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* implementationGuide[=].extension.valueCode = #SHOULD
* implementationGuide[+] = "http://hl7.org/fhir/uv/ipa/ImplementationGuide/hl7.fhir.uv.ipa"
* implementationGuide[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* implementationGuide[=].extension.valueCode = #SHOULD
*/
* implementationGuide[+] = "https://profiles.ihe.net/ITI/BALP/ImplementationGuide/ihe.iti.balp"
* implementationGuide[=].extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation"
* implementationGuide[=].extension.valueCode = #SHOULD
Expand Down
10 changes: 8 additions & 2 deletions input/fsh/ex-audit-115.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Usage: #example
* agent[server].network.type = http://hl7.org/fhir/network-type#5 "URI"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[patient].what = Reference(Patient/pat1)
* entity[data].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[data].role = http://terminology.hl7.org/CodeSystem/object-role#4 "Domain Resource"
* entity[data].what = Reference(Appointment/appt1-1)
Expand Down Expand Up @@ -50,8 +50,14 @@ Usage: #example
* agent[client].network.type = http://hl7.org/fhir/network-type#2 "IP Address"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[patient].what = Reference(Patient/pat1)
* entity[data].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[data].role = http://terminology.hl7.org/CodeSystem/object-role#4 "Domain Resource"
* entity[data].what = Reference(Appointment/appt1-1)

Instance: ex-device
InstanceOf: Device
Title: "Dummy Device example"
Description: "Dummy Device example for completeness sake. No actual use of this resource other than an example target"
Usage: #example
* meta.security = http://terminology.hl7.org/CodeSystem/v3-ActReason#HTEST
4 changes: 2 additions & 2 deletions input/fsh/ex-audit-116.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Usage: #example
* agent[server].network.type = http://hl7.org/fhir/network-type#5 "URI"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[patient].what = Reference(Patient/pat1)
* entity[data].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[data].role = http://terminology.hl7.org/CodeSystem/object-role#4 "Domain Resource"
* entity[data].what = Reference(Appointment/appt1-1)
Expand Down Expand Up @@ -49,7 +49,7 @@ Usage: #example
* agent[client].network.type = http://hl7.org/fhir/network-type#2 "IP Address"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[patient].what = Reference(Patient/pat1)
* entity[data].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[data].role = http://terminology.hl7.org/CodeSystem/object-role#4 "Domain Resource"
* entity[data].what = Reference(Appointment/appt1-1)
Expand Down
4 changes: 2 additions & 2 deletions input/fsh/ex-audit-117.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Usage: #example
* agent[server].network.type = http://hl7.org/fhir/network-type#5 "URI"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[patient].what = Reference(Patient/pat1)
* entity[data].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[data].role = http://terminology.hl7.org/CodeSystem/object-role#4 "Domain Resource"
* entity[data].what = Reference(Appointment/appt1-1)
Expand Down Expand Up @@ -50,7 +50,7 @@ Usage: #example
* agent[client].network.type = http://hl7.org/fhir/network-type#2 "IP Address"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[patient].what = Reference(Patient/pat1)
* entity[data].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[data].role = http://terminology.hl7.org/CodeSystem/object-role#4 "Domain Resource"
* entity[data].what = Reference(Appointment/appt1-1)
Expand Down
20 changes: 12 additions & 8 deletions input/pagecontent/volume-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,14 @@ IHE Transactions can be found in the Technical Frameworks General Introduction [
Both appendices are located at <https://profiles.ihe.net/GeneralIntro/>.

- Actors

- [Scheduling Client](#client)
- [Scheduling Server](#server)

- Transactions

- Find Potential Appointments [ITI_115](ITI-115.html)
- Hold Appointment [ITI-116](ITI-116.html)
- Book Appointment [ITI-177](ITI-117.html)
- Find Existing Appointments [ITI-118](ITI-118.html)


The figure below shows the actors directly involved in the Scheduling Profile and the relevant transactions between them.

<figure>
Expand All @@ -47,7 +43,6 @@ The figure below shows the actors directly involved in the Scheduling Profile an
</figure>
<br clear="all">


Table 1:55.1-1: Profile Acronym Profile - Actors and Transactions

| Actors | Transactions | Initiator or Responder | Optionality | Reference |
Expand All @@ -63,6 +58,7 @@ Table 1:55.1-1: Profile Acronym Profile - Actors and Transactions
{: .grid}

### 1:55.1.1 Actors

The actors in this profile are described in more detail in the sections below.

<a name="client"> </a>
Expand All @@ -89,6 +85,7 @@ The Scheduling Server provides services for providing a list of available appoin
Please see the FHIR Capability Statement for [Server](CapabilityStatement-IHE.Scheduling.server.html).

### 1:55.1.2 Transaction Descriptions

The transactions in this profile are summarized in the sections below.

#### 1:55.1.2.1 Find Potential Appointments [ITI-115]
Expand Down Expand Up @@ -127,6 +124,7 @@ There are currently no options for these actors.
<a name="required-groupings"> </a>

## 1:55.3 Scheduling Required Actor Groupings

There are no required groupings for this profile.

<a name="overview"> </a>
Expand All @@ -148,6 +146,7 @@ There is wide variety of appointments that pertain to the healthcare domain. A c
For example, the Scheduling server may modify existing appointments in order to free up time for an urgent appointment. While this may change the existing `Schedule` and `Slot` resources on the server, the Scheduling Client that is attempting to book the urgent appointment only needs to know that a new appointment can be booked. Any changes to existing appointments can be detected using the [\[ITI-118\]](./ITI-118.html) transaction, or, if the ITI Scheduling profile is implemented in an environment with an existing FHIR Subscription infrastructure, via a `SubscriptionNotification` for the changed appointment(s).

The overall functionality covered by this profile is as follows:

1. The Scheduling Client identifies the patient or patients for whom the appointment will be scheduled
2. The Scheduling Client determines the available parameters for requesting a list of available appointments
3. The Find Appointments transaction is completed.
Expand All @@ -161,6 +160,7 @@ The overall functionality covered by this profile is as follows:
##### 1:55.4.2.1.1 Post-discharge PCP Visit

###### 1:55.4.2.1.1.1 Post-discharge PCP Visit Use Case Description

Ms. Philips is being discharged from Green Valley General Hospital. One of the steps of the discharge process incudes scheduling a follow-up appointment with Dr. Spears, Ms. Philip's primary care provider. Dr. Spears' practice is part of a different healthcare organization, which necessitates cross-organizational scheduling of the follow-up appointment.

Without the availability of the ITI Scheduling functionality, the hospital staff would have to contact Dr. Spears' practice to negotiate an appointment for the patient, or leave it to Ms. Philips to schedule the appointment by herself. This makes it likely that the follow-up appointment may not occur in a timely manner, or at all.
Expand All @@ -176,6 +176,7 @@ The ITI Scheduling profile would allow the two systems to communicate the reques
<br clear="all">

###### 1:55.4.2.1.2.1 Specialty Visit Scheduling Use Case Description

Dr. Brown detects that a radiology examination is recommended to proceed with the
treatment of her Patient Mr. White. Dr. Brown opens the radiology examination
scheduling in her clinical information systems and selects a radiology facility
Expand Down Expand Up @@ -229,21 +230,24 @@ dialog of the patient portal.

Actors are expected to follow the recommendations and requirements found in [Appendix Z.8 “Mobile Security Considerations”](https://profiles.ihe.net/ITI/TF/Volume2/ch-Z.html#z.8-mobile-security-considerations).

The resources exchanged in this profile could contain information which pose a privacy risk, or in some cases, a safety risk, to providers and other personnel, as well as patients. For example, practitioner or patient phone numbers and home addresses could be conveyed. Implementers need to determine what data will be exposed by the system and what level of public access there will be if any.
The resources exchanged in this profile could contain information which pose a privacy risk, or in some cases, a safety risk, to providers and other personnel, as well as patients. For example, practitioner or patient phone numbers and home addresses could be conveyed. Implementers need to determine what data will be exposed by the system and what level of public access there will be if any. Therefore the [Audit Trails and Node Authentication (ATNA)](https://profiles.ihe.net/ITI/TF/Volume1/ch-9.html) Profile is required. This mandates Access Controls, Secure Communications, and an Audit Trail capability. The use of [Basic Audit Log Patterns](https://profiles.ihe.net/ITI/BALP/index.html) is foundational to the AuditEvent profiles defined in this Implementation Guide.

Implementers need to consider this when determining the access policies for these Resources. System administrators for the underlying host systems must follow industry best practices for authentication, authorization, auditing, timely application of software patches, etc.
Implementers need to consider Privacy and Security when determining the access policies for these Resources. System administrators for the underlying host systems must follow industry best practices for authentication, authorization, auditing, timely application of software patches, etc.

There are many reasonable methods of security for interoperability transactions which can be implemented without modifying the characteristics of the transactions in the Scheduling Profile. The use of TLS is encouraged, specifically the use of the ATNA Profile (see [ITI TF-1: 9](https://profiles.ihe.net/ITI/TF/Volume1/ch-9.html)).

User authentication on mobile devices and browsers is typically handled by more lightweight authentication schemes such as HTTP Authentication, OAuth 2.0, or OpenID Connect. IHE has a set of profiles for user authentication including Internet User Authentication (IUA) for REST-based authentication. Implementers SHOULD implement the [SMART on FHIR IG](http://hl7.org/fhir/smart-app-launch/) for the corresponding use cases (patient-facing or provider-facing). The network communication security and user authentication are layered in the HTTP transport layer.
User authentication on mobile devices and browsers is typically handled by more lightweight authentication schemes such as HTTP Authentication, OAuth 2.0, or OpenID Connect. IHE has a set of profiles for user authentication including [Internet User Authentication (IUA)](https://profiles.ihe.net/ITI/TF/Volume1/ch-34.html) for REST-based authentication with [ATNA](https://profiles.ihe.net/ITI/TF/Volume1/ch-9.html) "STX: HTTPS IUA Option" that uses OAuth for client authentication while using TLS server authentication. Implementers SHOULD implement the [SMART on FHIR IG](http://hl7.org/fhir/smart-app-launch/) for the corresponding use cases (patient-facing or provider-facing). The network communication security and user authentication are layered in the HTTP transport layer.

<a name="other-grouping"> </a>

## 1:55.6 Scheduling Cross-Profile Considerations

The Scheduling Profile is intended to be used in varied settings and to satisfy multiple use cases. Some of these uses will benefit from using the Scheduling Profile together with other IHE profiles. The following cross-profile descriptions are not exclusive or exhaustive, and the list can be updated in the future.

### 1:55.6.1 mCSD - Mobile Care Services Discovery

When a patient needs to schedule an appointment outside their usual care providing environment, they could need to initially find the endpoint of the healthcare or service provider where an appointment can be requested. The [ITI-90 Find Matching Care Services](https://profiles.ihe.net/ITI/mCSD/ITI-90.html) transaction from the mCSD profile can be used for endpoint discovery prior to the use of the Find Appointments transaction.

### 1:55.6.2 360X - 360 Exchange Closed Loop Referral

The [360X Profile](https://www.ihe.net/uploadedFiles/Documents/PCC/IHE_PCC_Suppl_360X.pdf) describes cross-organizations referral workflows, and it has a scheduling option, which is not required. The ITI Scheduling Profile can be used instead of the 360X Scheduling Option when there are appropriate business agreements that allow cross-organizational scheduling. The referral and patient identifiers used in the 360X transactions must be used in the corresponding parameters of the Find Appointments transaction in order to provide the necessary link between the appointment and the referral.
2 changes: 1 addition & 1 deletion input/resources/StructureDefinition-iti-sched-bundle.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<name value="IHE_ITI_Scheduling_Bundle_Profile"/>
<title value="IHE ITI Scheduling Bundle Profile"/>
<status value="active"/>
<date value="2024-02-05"/>
<date value="2024-12-12"/>
<publisher value="IHE ITI"/>
<contact>
<name value="IHE IT Infrastructure Technical Committee"/>
Expand Down
4 changes: 2 additions & 2 deletions input/resources/codesystem-status-reason.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
<concept>
<code value="needs-tests"/>
<display value="Patient Needs Tests"/>
<definition value="An appointment for a patient was cancelled by the patient because the patient did not have the prequisite diagnostic tests performed."/>
<definition value="An appointment for a patient was cancelled by the patient because the patient did not have the prerequisite diagnostic tests performed."/>
</concept>
<concept>
<code value="new-provider"/>
Expand Down Expand Up @@ -120,7 +120,7 @@
<concept>
<code value="prep-incomplete"/>
<display value="Preparatory Requirements or Medications Incomplete"/>
<definition value="An appointment for a patient was cancelled by the provider because needed preparatory insructions and/or medications not completed."/>
<definition value="An appointment for a patient was cancelled by the provider because needed preparatory instructions and/or medications not completed."/>
</concept>
<concept>
<code value="prep-unavail"/>
Expand Down
Loading

0 comments on commit ef67d08

Please sign in to comment.