- Overview of Automated Processing in the Infrastructure
- Automated Processing of Submitted Measurement
- Scheduled Processing of Missing Measurements
- Periodic Creation of Reminder on Pending Measurement Activity
- Validation of SSL orders when activating a CarePlan
- Scheduled Automated Application of Planned Changes (EpisodeOfCare, CarePlan and ServiceRequest)
- Scheduled Import of Organization Data from SOR and FK Organisation
- Scheduled Check for Calibration of Equipment
- Handling of EpisodeOfCare and CarePlan Created
- Handling of Change of EpisodeOfCare and CarePlan Status, CareTeam, Scheduled Status and/or Scheduled CareTeam
- Resources Created by Automated Processing in the Infrastructure
Overview of Automated Processing in the Infrastructure
This section provides an overview of automated processing in the Infrastructure. The details of the automated processing are described below. The automated processing is either triggered by some event or actions in the Infrastructure, to timer based meaning the processing takes place at certain intervals.
Scheduled processing
Automated processing of … | Shedule *) | More info … |
---|---|---|
Create Tasks and Reminders when a citizen has not submitted measurement within time. | 1.30 every night in all environments | |
Create reminders on pending measurement activity | Every other hour that is 0.00, 2.00, 4.00 … on all environments | |
Apply planned changes | 0.05 every night in all environments | |
Import organization information from Sundhedsvæsnets Organisationsregister (SOR) | 22.00 every evening in all environments | |
Import organisation data from FK organisation | 0.00 every night in all environments | |
Check for calibration of equipment | 0.30 every night all environments | |
Creating reminders for Participation in Appointment | Every other hour that is 0.00, 2.00, 4.00 … on all environments |
*) When there is a timezone change (to daylight saving time, DST), the execution is still at local Danish time.
Event-based processing
Automated processing of … | Triggering event | More info … |
---|---|---|
Check if the measurement submitted at an unexpected time. Library rule evaluation for submitted measurements | Measurement Submitted | |
Validation of SSL orders | CarePlan activated | |
Handling of EpisodeOfCare and CarePlan Created | EpisodeOfCare and CarePlan Created | |
Handling of Change of EpisodeOfCare and CarePlan Status, CareTeam, Scheduled Status and/or Scheduled CareTeam | Change of EpisodeOfCare and CarePlan Status, CareTeam, Scheduled Status and/or Scheduled CareTeam changed | |
Handling of Automatic NemSMS Notification |
Automated Processing of Submitted Measurement
The Clinical Administrator can set u a PlanDefinition, which includes activities defined in an ActivityDefinition. They can also include a Questionnaire to be answered, and add one or more Library resources, each containing a rule. Their Libraries are specifically for automated processing and are linked to a plan that has received a measurement.
In the following, a measurement resource denotes an Observation, QuestionnaireResponse or Media which has been submitted either by itself or along with other measurement resources in a call of the submit-measurement
operation. All the measurement resource(s) submitted together are denoted as measurement.
Overall, the automated processing of a submitted measurement is asynchronous and constitutes the following handling as a response to a submitted measurement event (which contains a reference to a Provenance resource referencing the measurement resources):
For each measurement resource in the order Observation, QuestionnaireResponse and Media resources in the measurement:
The timing of the measurement resource is examined to see if was submitted timely, as described in Automated Processing of Measurements Submitted at Unexpected Time.
The automated processing rule(s) are evaluated, as described in Processing of Automated Processing Rules
The automated processing of submitted measurements is shown in the sequence diagram Automated Processing of Measurements.
Automated Processing of Measurements Submitted at Unexpected Time
Before release FUT-I 2023.5
For each measurement resource, automated processing resolves the ServiceRequest referenced by the measurement resource. The measurement submission time is then compared to the scheduled timing constructs in ServiceRequest.Timing. repeat
. The measurement submission time is either of:
Observation.meta.lastUpdated
QuestionnaireResponse.meta.lastUpdated
Media.meta.lastUpdated
A measurement has been submitted at an unexpected time when:
the scheduled timing is specified as
(Timing.repeat).dayOfWeek
and the day of week code is not identical to that corresponding to the measurement submission time, orthe scheduled timing is specified with
(Timing.repeat).timeOfDay
and(Timing.repeat).boundsDuration
and the measurement submission time is not within the period (start and end included):start of period:
(Timing.repeat).timeOfDay
end of period:
(Timing.repeat).boundsDuration
added to(Timing.repeat).timeOfDay
In case the ServiceRequest has ServiceRequest.Period
or ServiceRequest.occurenceDateTime
then it is not checked.
With the release of FUT-I 2023.5
The Infrastructure validates the measurement time of a submitted measurement for compliance with the resolvedTiming period provided in the measurement.
An unexpected measurement is determined as a submitted measurement having either:
Measurement time outside of the resolvedTiming period.
Measurement time within the resolvedTiming period but, in case of the measurement being associated with a ServiceRequest defined with occurrenceTiming, the measurement time is not within the repeat.boundsPeriod of the occurrenceTiming.
Measurement time is captured in:
Observation.effectiveDateTime or Observation.effectiveInstant
Questionnaire.authored
Media.createdDateTime
In case a measurement has been submitted at an unexpected time, automated processing produces:
A Task with
.status
set torequested
.episodeOfCare
set to the same reference to EpisodeOfCare as used in the measurement resource’s.episodeOfCare
.category
set toUnexpectedMeasurementResolving
.focus.reference
referencing the measurement resource (Observation, QuestionnaireResponse, or Media).ehealth-task-responsible
set to the same one or more CareTeams as theCarePlan.team
(CarePlan found through reverse association from measurement resources.basedOn
reference to ServiceRequest referred fromCarePlan.activity.reference
).description
set to “Uventet måling” which is Danish for unexpected measurement.for
set to the patient referenced in the EpisodeOfCare
Communication (of the ehealth-message profile) with
.status
set tocompleted
.subject
set to the same reference to Patient as used in the measurement resource’s.subject
.episodeOfCare
set to the same reference to EpisodeOfCare as used in the measurement resource’s.episodeOfCare
.category
set tonotification
.reasonCode
set toUnexpectedMeasurementResolving
.topic.reference
referencing the Task above.payload.episodeOfCare
set to “Uventet måling” which is Danish for unexpected measurement.title
set to “Uventet måling”.sender
referencing a special Device designating the automated processing service
Note that most of the above details do not constitute guaranteed content that can be used for searching for or determining whether unexpected measurement(s) has been submitted for a particular Patient. The guaranteed elements are Tasks.category
(withTask.episodeOfCare
) and Communication.reasonCode
(with Communication.subject
and Communication.episodeOfCare
).
Processing of Automated Processing Rules
When a measurement is submitted to the infrastructure, it triggers the automated processing of rules described in the following. Each submitted measurement is related to an activity in a citizen plan represented as a CarePlan where each activity is a ServiceRequest. Which rule or rules are involved depends on the PlanDefinition and its comprised ActivityDefinition resources referenced from the CarePlan and ServiceRequest resources, see https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/1661141027/Creating+Care+Plans#Applying-a-PlanDefinition-to-create-CarePlan(s).
An automated processing rule is a Library where the Library.type
is automated-processing
. The existing Library is listed in Library Resources. The automated processing rule Library eligible for a particular ServiceRequest are those zero, one, or more Library related to the ActivityDefinition referenced by the ServiceRequest.
In the Plan editor of the Clinical Administration Application (see https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/2063892483/eHealth+Applications#Clinical-Administration-Application-(Danish%3A-KAM-for-Klinisk-administrativ-modul)), it is possible to select which automated processing rule Library resources if any that shall be related to a plan template activity (ActivityDefinition).
Situation | Overrides Eligible Library? | Automated Processing Rules | Processing |
---|---|---|---|
Submitted measurement is an Observation with no value ( ServiceRequest references ActivityDefinition with no reference to Library or reference to any other than Null-rule Library | Yes | All Library are ignored and processing is performed as described | A Task is created with the |
Submitted measurement is an Observation with no value ( ServiceRequest references ActivityDefinition concerning Null-rule Library | No | Null-rule Library is evaluated and processing is performed as described | No Task is created. |
ServiceRequest references ActivityDefinition concerning Null-rule Library | No | ||
ServiceRequest references ActivityDefinition with no Library references | Yes | The Fallback Library is evaluated and processing is performed as described | A Task is created with the |
ServiceRequest references ActivityDefinition concerning Fallback Library | No | ||
ServiceRequest references ActivityDefinition concerning one or more other Library | No | Each Library is evaluated | Depends on the Library. |
One (or at least one) of the automated-processing type Library resources associated with an ActivityDefinition should create a Task that can draw adequate attention to a submitted and automatically processed measurement. The Null-rule Library is the one exception to this guideline/recommendation.
Library Rule Evaluation
For further details and to assist in understanding intended use and capabilities, please consult Example Library Resources.
For guidance in rule and Library governance and management, please consult Rule and Library Management.
Input
The Library.parameter
element specifies what resources are to be made available to the Library’s rule execution as input and what is returned as output. Typically, a measurement resource - be that an Observation, QuestionnaireResponse, or Media - is provided as input as part of the evaluate
operation.
It is possible to state further input for both calculation-type Library (where Library.type
is logic-library
) and automated processing-type Library (where Library.type
is automated-processing
). For the calculation-type, all input resources must be provided as part of the evaluate
operation.
For automated processing type, the following can be specified as input but are not provided as they are resolved by the Library service as part of establishing facts:
Resource Type | Description |
---|---|
Patient | The patient for which the measurement was applied. |
EpisodeOfCare | EpisodeOfCare to which the measurement is related. |
CarePlan | CarePlan to which the measurement is related. |
ServiceRequest | ServiceRequest referred from measurement (Observation|QuestionnaireResponse|Media) |
PlanDefinition | PlanDefinition to which the measurement is related. |
ActivityDefinition | ActivityDefinition to which the measurement is related. |
Questionnaire | Questionnaire to which a measurement of type QuestionnaireResponse is a response to. |
Establishing of Facts
If specified as an input parameter, the following resources are fetched and made available to an automated processing type Library rule by the Library service. In the rule, the resources can be accessed by adding the variable declaration to the when
part.
Resource Type | Resolved As | Variable Declaration |
---|---|---|
Patient | Fetched as Patient referenced in |
|
EpisodeOfCare | Fetched as EpisodeOfCare referenced in |
|
CarePlan | Fetched as CarePlan where |
|
ServiceRequest | Fetched as ServiceRequest referenced in |
|
PlanDefinition | Fetched as PlanDefinition referenced in |
|
ActivityDefinition | Fetched as ActivityDefinition referenced in |
|
Questionnaire | Fetched as Questionnaire referenced in |
|
Execution of rule and output
For automated processing rules, there is a structure, AutomatedProcessingDTO
, which lets the rule control aspects of the outcome of evaluating the rule. By adding to the structure, the rule controls if and in what number of ClinicalImpression, Task, and Communication resources are created. A special case is the property activateSelfTreatment which controls whether a check on certain ServiceRequest resources should be made, possibly leading to an update of the status of eligible ServiceRequest resources (see further details in Activation of suspended Self-treatment type ServiceRequest ).
AutomatedProcessingDTO
Property | Type | Description |
---|---|---|
ClinicalImpressions | List of | Each entry is an instruction to create a resource, and each entry specifies certain details. |
Tasks | List of | Each entry is an instruction to create a resource, and each entry specifies certain details. |
activateSelfTreatment | boolean | Set to true instructs that sibling ServiceRequests of self-treatment kind should be activated if currently suspended. |
ClinicalImpressionDTO
Property | Type | Description |
---|---|---|
Code |
| Used for |
Description | String | Used for |
CodeableConceptFindings | List of | Used for |
ObservationFindings | List of | Used for |
Tasks | List of | Each entry is an instruction to create a Task resource, and each entry specifies certain details. Each created Task refers to the ClinicalImpression through |
FindingBasis | List of | Used for |
TaskDTO
Property | Type | Description |
---|---|---|
Category |
| Used for |
Description | String | Used for |
Priority | String | Used for It must be ensured that the priority is entered in lower-case as defined for |
RestrictionCategories | List of | Used for |
Communications | List of | Each entry is an instruction to create a Communication resource, and each entry specifies certain details. By default, the |
QuestionnaireResponseFindingBasisDTO
Property | Type | Description |
---|---|---|
LinkId | String | Used for |
Finding |
| Used for |
ValueString | String | One of the value elements is populated and used for |
ValueDecimal | Double | |
ValueInteger | Integer | |
ValueBoolean | Boolean | |
ValueCoding |
| |
AnswerSignificance |
| Used for |
AnswerSignificanceDTO
Property | Type | Description |
---|---|---|
Significance |
| Used for |
AnswerConditions | List of | Used for Must be a list of size 1 or 2. |
AnswerConditionDTO
Property | Type | Description |
---|---|---|
Operator | String | Used for |
ValueString | String | One of the value elements is populated and used for |
ValueDecimal | Double | |
ValueInteger | Integer | |
ValueBoolean | Boolean | |
ValueCoding |
|
CommunicationDTO
Property | Type | Description |
---|---|---|
Categories | List of | Used for |
Text | String | Used for |
RestrictionCategories | List of | Used for |
CodingDTO
Property | Type | Description |
---|---|---|
system | String | Corresponds to |
code | String | Corresponds to |
display | String | Corresponds to |
It is the responsibility of the rule writer to ensure that a CodingDTO reflects a valid concept in a CodeSystem existing in the eHealth infrastructure and that the concept is part of the expanded ValueSet for which there is a binding to the particular resource element where it is used.
ObservationDTO
Property | Type | Description |
---|---|---|
Status | String | Used for |
Code |
| Used for |
ValueString | String | One of the value elements is populated and used for |
ValueBoolean | Boolean | |
ValueQuantity |
|
Output from automated processing
For each automated processing type Library evaluated, the returned GuidanceResponse typically contains an AutomatedProcessingDTO
with instructions for further processing.
The handling is shown in the sequence diagram Automated Processing of Measurements - Handling.
Resources created
When populated by the Library in the AutomatedProcessingDTO
, it results in the following resources being created. Please note that Communication resources described below are subjected to the handling described in Taking applicable CommunicationRequest into account, which further influences the number of Communication resources created and their recipient.
For every ClinicalImpressionDTO
in AutomatedProcessingDTO.ClinicalImpressions
:
Resource | Element | Value |
---|---|---|
ClinicalImpression | code |
|
status |
| |
description |
| |
investigation.code | Coding with:
| |
investigation.item | One version-less reference to the measurement, one versioned referenced to the measurement | |
finding.itemCodeableConcept | Coding added for each | |
finding.itemReference | For each
| |
date | current date/time | |
subject | Same as | |
episodeOfCare | Same as | |
effective | Same as measurement effective (which is | |
ehealth-clinicalimpression-decisionContext | A reference to a contained Parameters with:
| |
ehealth-questionnaireresponse-finding-basis | For each
| |
For every | ||
Task | ehealth-task-responsible | List of CareTeam from the CarePlan |
ehealth-restriction-category |
| |
category |
| |
status |
| |
intent |
| |
priority |
| |
description |
| |
focus | The ClinicalImpression created for the current | |
episodeOfCare | Same as | |
authoredOn | current date/time | |
For every | ||
Communication (of profile ehealth-message) | category | Coding for |
status |
| |
reasonCode | Coding for each | |
payload.content |
| |
ehealth-title |
| |
ehealth-restriction-category | Coding for each | |
subject | Same as GuidanceResponse (and CarePlan) | |
episodeOfCare | Same as GuidanceResponse (and CarePlan) | |
topic | Reference to Task created for current | |
sent | current date/time |
For every TaskDTO
in AutomatedProcessingDTO.Tasks
:
Resource | Element | Value |
---|---|---|
Task | ehealth-task-responsible | List of CareTeam from the CarePlan |
ehealth-restriction-category |
| |
category |
| |
status |
| |
intent |
| |
priority |
| |
description |
| |
focus | Reference to the measurement | |
episodeOfCare | Same as | |
authoredOn | current date/time | |
For every | ||
Communication (of profile ehealth-message) | category | Coding for |
status |
| |
reasonCode | Coding for each | |
payload.content |
| |
ehealth-title |
| |
ehealth-restriction-category | Coding for each | |
subject | Same as GuidanceResponse (and CarePlan) | |
episodeOfCare | Same as GuidanceResponse (and CarePlan) | |
topic | Reference to Task created for current | |
sent | current date/time |
Taking applicable CommunicationRequest into account
When Communication resources (of ehealth-message profile) are created by automated processing, the intended receivers would typically be one or more CareTeam designated as CarePlan.careTeam
on the involved CarePlan. As Communication can have at most a single CareTeam as the recipient (through Communication.ehealth-communication-recipientCareTeam
), this involves duplication of the original Communication where the duplicates vary by the recipient.
The recipient(s) and duplication made for Communication created by automated processing are influenced by CommunicationRequest. By creating appropriately crafted CommunicationRequest, a Practitioner can control whether:
to suppress automated processing’s default creation of a Communication for a particular CareTeam
to duplicate Communication with the Patient as the recipient
The handling is shown in the sequence diagram Automated Processing of Measurements - Create Communications.
See https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/edit-v2/2415034369 on what values to use when creating CommunicationRequest.
Activation of suspended Self-treatment type ServiceRequest
When the AutomatedProcessingDTO
specifies activation through the element activateSelfTreatment
set to true, automated processing performs a lookup for all sibling ServiceRequest resources which have:
ServiceRequest.status
set tosuspended
ServiceRequest.definition
referencing an ActivityDefinition whereActivityDefinition.topic
has valueself-treatment
.
The sibling ServiceRequest resources are those referenced fromCarePlan.activity.reference
for the same CarePlan that references the ServiceRequest referenced from the measurement (be that Observation, QuestionnaireResponse or Media).
For those ServiceRequest meeting the criteria above, the ServiceRequest.status
is updated to active
.
Automated Processing of Action Triggers and Trigger Conditions
Each submitted measurement references a ServiceRequest. As part of the automated processing of a submitted measurement, the infrastructure examines whether the measurement constitutes fulfilment of trigger conditions that may be defined as action trigger for one or more of its sibling ServiceRequest. In each case where trigger conditions are met, the defined action trigger reaction is performed.
Trigger evaluation is skipped if the submitted measurement is an Observation with .dataAbsentReason
. This means that an Observation with .dataAbsentReason
will not fire any action triggers.
In the example below, the PlanDefinition contains an action trigger where activity “action[2]” has dependencies to “action[0]” and “action[1]”. Compared to the same setup at the time of PlanDefinition$apply
(see https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/1661141027/Creating+Care+Plans#Trigger-Actions-and-Trigger-Conditions), the CarePlan and triggering ServiceRequest (SR0 and SR1 in the figure below) now have status
set to active
, presumably because all necessary adjustments and delivering of device etc. have been performed and an employee has changed the status.
When a measurement, here QuestionnaireResponse QR0, is submitted and subjected to automated processing, it is determined whether it plays any role in action triggers. In this case, the corresponding ServiceRequest SR0 is a triggering ServiceRequest, that is, its related ActivityDefinition has a trigger condition defined in the corresponding PlanDefinition. To optimize determining this, the triggering ServiceRequest SR0 (and similarly SR1) has ServiceRequest.meta.tag
set to trigger
automatically as part of PlanDefinition$apply
.
The automated processing follows this pseudo-algorithm:
On receiving a measurement:
If the measurement references a triggering ServiceRequest (if
ServiceRequest.meta.tag
is set totrigger
) continue, otherwise the check for action triggers is done.Resolve the CarePlan referencing the triggering ServiceRequest
Resolve the PlanDefinition referenced by the CarePlan
Resolve the triggering ActivityDefinition (referenced from triggering ServiceRequest) and its id in
PlanDefinition.action[y].id
Determine which depending ServiceRequest (one or more) is depending on the triggering ServiceRequest as follows:
For each
PlanDefinition.action[x].ehealth-actionTrigger
referring intriggerCondition.actionId
the triggeringPlanDefinition.action[y].id
:Resolve the depending ServiceRequest by comparing its reference to the depending ActivityDefintion which must be referenced in the depending
PlanDefinition.action[x].definition
.
For each depending ServiceRequest, determine whether conditions have been met:
If the
ServiceRequest.ehealth-trigger-enablement
is other thanTRIGGER_ENABLED
then continue to next depending ServiceRequest, otherwise perform as follows:If the
ServiceRequest.status
ison-hold
continue, continue to next depending on ServiceRequestIf the
PlanDefinition.action[x].ehealth-actionTrigger
hastriggerBehavior
set toone-or-more
Determine whether the
ehealth-triggerCondition
has been met (searching for measurements and comparing withtriggerCoundition.count
)
If the
PlanDefinition.action[x].ehealth-actionTrigger
hastriggerBehavior
set toall
or other triggering ServiceRequest may be defined for this depending on ServiceRequestDetermine whether all
ehealth-triggerCondition
have been met (searching for measurements and comparing withtriggerCoundition.count
)Optimized by continuing to next depend ServiceRequest on the first unmet condition found
For each depending ServiceRequest where conditions have been met, perform the actionTrigger’s reaction in
actionTrigger.action
This is changing
ServiceRequest.status
toactive
.The
ServiceRequest.occurrence
starting time is evaluated:If the occurrence starting time is in the past, then the starting time is set to now with possible adjustment as specified by
actionTrigger.offset
If the occurrence starting time is in the future, the starting time is kept with possible adjustment as specified by
actionTrigger.offset
Change
ServiceRequest.ehealth-trigger-enablement
toTRIGGER_DONE
The evaluation of starting time is tabulated below for the different types of ServiceRequest.occurrence
:
Type of | Criteria |
---|---|
| The |
| The duration of the The Finally the |
| If the |
Scheduled Processing of Missing Measurements
The eHealth Infrastructure regularly checks if measurements are being submitted on time based on their associated CarePlan. Here's how it works:
It looks at the time since the last check and focuses on the missing measurements during that period.
It performs missing measurement checks for the following:
All CarePlans that have been active at some point during that period (had
statusHistory
set toactive
).All EpisodeOfCare linked to these CarePlans.
All ServiceRequests linked to these CarePlans.
Among the ServiceRequests, it narrows down to those with active, historic, or current effective statuses (see https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/2524872705/Using+EpisodeOfCare+CarePlan+s+and+ServiceRequest+s#Determining-the-ServiceRequest-Effective-Status) that overlap with the occurrence of the ServiceRequest (
ServiceRequest.occurrence[x]
) within the missing measurement check period.To decide whether a specific ServiceRequest undergoes the missing measurements check, it depends on the activity type, which is taken from
ActivityDefinition.code
and copied toServiceRequest.code
during processing. The decision is controlled by an automated lookup process using the ConceptMap.If the activity type isn't found in the ConceptMap https://docs.ehealth.sundhed.dk/latest-released/ig/ConceptMap-activitydefinition-code-to-do-missing-measurement.html, the ServiceRequest is subject to the missing measurements check by default.
The criteria for a measurement found to be missing depends on how the measurement regime is specified, that is, what ServiceRequest.occurrence[x]
variant in use:
ServiceRequest.occurrence[x] Variant |
|
|
|
---|---|---|---|
Data Type | Before release FUT-I 2023.5 Timing constraints:
With the release of FUT-I 2023.5 Timing constraints:
| ||
Time Criteria |
|
| Before release FUT-I 2023.5
A lookup period (of time) for measurements is determined as follows:
With the release of FUT-I 2023.5
|
Effective Status Criteria |
|
|
|
Measurement Match Criteria | With the release of FUT-I 2023.5
|
Example of active overlap for ServiceRequest.occurrenceTiming
with repeat.period
: 6 and repeat.periodUnit
: h (and repeat.duration
: 3 and repeat.durationUnit
: h).
As described in a row “Time Criteria” for occurrenceTiming
, Timing.repeat.periodUnit
h (hours) will result in a lookup period starting from Midnight 1 day ago till the current time represented as nearest past Midnight.
The resolved timing will be every 6 hours with a duration of 3 hours starting from Timing.repeat.boundsPeriod.start
. As the time component of boundsPeriod.start
is 10 AM that means the next resolved timing is 4 PM and the next 10 PM.
The first resolved timing in the lookup period is 22-01 which shall be checked for missing measurement as EpisodeOfCare, CarePlan and ServiceRequest all had status
active
.The second resolved timing in the lookup period is 04-07 which shall be checked for missing measurement as EpisodeOfCare, CarePlan and ServiceRequest had status
active
in a partial overlap during the resolved timing.The third resolved timing in the lookup period is 10-13 and shall not be checked for missing measurement as ServiceRequest had status
on-hold
for the whole resolved timing.The fourth resolved timing in the lookup period is 16-19 which shall be checked for missing measurement as EpisodeOfCare, CarePlan and ServiceRequest had status
active
has partial active overlap during the resolved timing.The fifth resolved timing in the lookup period is 22-01 which shall not be checked for missing measurement as the end of the resolved timing is outside the lookup period, that is, the citizen still has one hour past Midnight to submit measurement(s).
With Release FUT-I 2023.5
See the diagram below. Going forward all the resolved timing (based on supported timing) ending within the window since the last job execution will be considered. This means no longer based on a fixed range eg. the last day if periodUnit: hour.
When a measurement is found to be missing, the following resources are prepared for creation:
Resource | Element | Value |
---|---|---|
Task |
| Coding for |
|
| |
|
| |
|
| |
|
| |
| List of CareTeam from the CarePlan | |
| Coding for | |
| The ServiceRequest | |
| Same as | |
| Same as episodeOfCare.patient | |
| current date/time | |
Communication (of profile ehealth-message) |
| Coding for |
|
| |
| Coding for | |
|
| |
|
| |
| Coding for | |
| Same as CarePlan | |
| Same as CarePlan | |
| About Task above | |
| current date/time |
Each Communication resource prepared for creation (with the content above), is subjected to the handling of recipients described in Taking applicable CommunicationRequest into account.
Periodic Creation of Reminder on Pending Measurement Activity
In the following, pending measurement activity is used broadly as a term for measuring and answering questionnaires that are supposed to happen.
To provide reminders to citizens on pending measurement activities, the eHealth Infrastructure performs periodic lookup. Currently, the periodic lookup is configured to be performed every second hour on the hour.
The periodic lookup for pending measurements considers two lookup time windows:
The current time window:
start datetime: calculated as the datetime of the next periodic lookup, reduced by the duration between lookups.
end datetime: calculated as the datetime of the next periodic lookup.
The previous time window:
start datetime: calculated as datetime of the current periodic lookup, reduced by the duration between lookups.
end datetime: calculated as datetime of current periodic lookup.
For example The periodic lookup runs at 08:00.
It has a current (lookup) time window of 08:00 to 10:00.
It has a previous (lookup) time window of 06:00 to 08:00.
For an activity to be considered pending, the ServiceRequest.occurrence[x]
must be within the ServiceRequest's effective active periods. The effective active periods for a ServiceRequest are the periods where it has status
set to active
at the same time as the EpisodeOfCare and CarePlan both have status
set to active
, see https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/2524872705/Using+EpisodeOfCare+CarePlan+s+and+ServiceRequest+s#Determining-the-ServiceRequest-Effective-Status. In this particular case, the effective active periods are considered for historic & current status and future status changes, that is, the effective active periods are evaluated based on the statusHistory
and statusSchedule
elements of EpisodeOfCare, CarePlan and ServiceRequest. This is elaborated in the criteria table below.
The criteria for a ServiceRequest to have a pending measurement within the lookup time window depends on the ServiceRequest.occurrence[x]
alternative used and are as given in the table below. The table’s Time Criteria and Effect Status Criteria, respectively, are elaborated and exemplified in similarly named subsections below.
Before release FUT-I 2023.5
|
|
|
|
---|---|---|---|
Data type |
|
|
|
Time Criteria |
|
|
|
Effective Status Criteria |
|
|
|
With release of FUT-I 2023.5
|
|
|
|
---|---|---|---|
Data type | Timing constraints:
Note: If the Timing expresses a recurring timing regime, the individual times an activity should be performed are called a | ||
Time Criteria |
|
|
|
Effective Status Criteria |
|
|
|
Activity Type Criteria |
| ||
Measurement Submission Criteria |
|
Time Criteria
The following three diagrams show 8 examples of ServiceRequest that use different variants of occurrenceDateTime
/occurrencePeriod
/occurrenceTiming
as the periodic lookup progresses along a timeline. This helps visualize when the above-mentioned criteria are satisfied and thus, when a reminder will be automatically generated for the pending activities.
O - Annotates a
dayOfWeek
/timeOfDay
-combinationX - Annotates the dateTime in an
occurrenceDateTime
Red - Annotates that the occurrence will not result in a reminder being generated in the current lookup time window.
Green - Annotates that the occurrence will result in a reminder being generated in the current lookup time window.
Current Time Window = t0
In the first diagram, the 1. ServiceRequest example is the only one to result in reminder generation
This is due to it being an
occurrencePeriod
with the start of the period being inside the previous time window.
Some things to note about the examples that will not result in reminder generation this lookup:
The 2. ServiceRequest example will not result in a reminder during this lookup time window as its start is after the beginning of the current time window. However, in the next lookup, its situation should be the same as for the 1. ServiceRequest example above.
While 6. ServiceRequest has a
boundsPeriod
that starts before the current window, it is anoccurrenceTiming
and therefore also needs adayOfWeek
/timeOfDay
-combination within the current or previous time windows to result in reminder generation. This is not the case for the current lookup time window. However, in a later lookup, it should result in a reminder when adayOfWeek
/timeOfDay
-combination coincides with a "current" time window.Additionally, while 7. ServiceRequest example has a
dayOfWeek
/timeOfDay
-combination within the current time window, theboundsPeriod
did not start before the current window, as is required.
Current Time Window = t+1
The periodic lookup has now progressed by one time frame and what was in the last lookup considered the “next” time window is now the current one.
In this lookup, multiple occurrences result in the generation of reminders
2. ServiceRequest example is an
occurrencePeriod
and from the perspective of the current time window the start of the period is now in the previous time window3. ServiceRequest example is an
occurrenceTiming
. TheboundsPeriod
of the timing starts before the beginning of the current window, and additionally, there is adayOfWeek
/timeOfDay
-combination within theboundsPeriod
and current time window.7. The ServiceRequest example is very much like 3. ServiceRequest example, however, the
dayOfWeek
/timeOfDay
-combination is within the previous time window.When a
boundsPeriod
of a Timing starts in the previous time window, thedayOfWeek
/timeOfDay
-combinations from the previous time window will also result in reminder generation.
8. The ServiceRequest example will also result in reminder generation during this lookup as it is now within the previous time window.
Current Time Window = t+2
The periodic lookup has now progressed by two-time frames since the lookup shown in the first diagram.
In this lookup, multiple occurrences result in the generation of reminders
4. The ServiceRequest example will result in a reminder. When an
occurrencePeriod
starts and ends in the previous time window it will generate a reminder.5. The ServiceRequest example is now in the same situation as 1. ServiceRequest example and 2. ServiceRequest examples were earlier (the period start in the previous time window and ends after the beginning of the current time window).
6. The ServiceRequest example will now result in a reminder as there is a
dayOfWeek
/timeOfDay
-combination in the current time window.
Effective Status Criteria
The following three diagrams visualize how ServiceRequest effective periods of status
set to active
are found and evaluated. The ServiceRequest, CarePlan and EpisodeOfCare all maintain a status history and schedule, which is used to find the active periods where all three related resources had/have status
value active
at the same time.
The diagram below is an example of how the active periods are found for a resource, based on the
statusHistory
and astatusSchedule
.Marked with a vertical starting line and a following horizontal line is the period of a
status
(The colour depends on status: yellow=draft, green=active, orange=on-hold)The dotted line represents an open-ended period (in
statusHistory
this means that the status is the one currently held by the resource)
Marked with X is the
statusSchedule
of the resource, marking the intended change to a given status at that time (The colour scheme is the same as for the periods).The vertical grey dotted lines show the bounds of the found active periods of the resource.
For the reminder check, a status period is considered as exclusive-end. This is because the end time of a period is the same as the start time of a new status, which at that time then takes precedence over the old status.
For the above example, the active periods for the resource are found by:
The first one is started by the ongoing active period and ended by the first scheduled
on-hold
status.The second one is entirely outlined by the
statusSchedule
as it starts when the status is scheduled to becomeactive
and ends at the time of the next scheduled status change, in this case toon-hold
.
When the active periods for the individual related resources have been found, one can find the effective active periods of the ServiceRequest, which are the active periods that it has in common with its related CarePlan and EpisodeOfCare. This is visualized in the diagram below.
Periods 6 and 7 are the found effective active periods of the ServiceRequest - The other periods represent individual resources active periods.
The grey vertical dotted lines show which resource’s active period is the bounding factor for the effective active period.
For example: For Period 6 one can see that Period 4, the ServiceRequest active period, is much bigger than the effective active period. This is because of the late start of Period 3 in the CarePlan and the early end of Period 1 in the EpisodeOfCare, which becomes the bounding factor for the effective active period.
In the diagram below are 6 examples of ServiceRequest that use different variants of occurrenceDateTime
/occurrencePeriod
/occurrenceTiming
. This helps visualize when the earlier-mentioned criteria are satisfied for both the time windows and the active periods, and thus, when a reminder will be automatically generated for the pending activities.
The two active periods shown at the top of the time windows represent the periods where the ServiceRequest, CarePlan and EpisodeOfCare are all active and thus the time that the
ServiceRequest.occurrence[x]
should to some degree overlap.
The
ServiceRequest.occurrence[x]
examples marked green are the ones that will result in reminder generation. (Note: All examples adhere to the given time window criteria for reminder generation)The
occurrenceDateTime
in example 1 will NOT result in a reminder as it is not within an active period, even though it is in the previous time window.In example 2 on the other hand the
occurrenceDateTime
upholds both being within an active period and being in the previous time window and will therefore result in a reminder.The
occurrencePeriod
in example 3 will NOT result in reminder generation as it does not overlap any active period.The
occurrencePeriod
in example 4 overlaps with an active period. Therefore, even though the active period is after the current lookup time window, it results in a reminder being generated.For
occurrenceTiming
it is thedayOfWeek
/timeOfDay
-combinations that should be in an active period. For that reason, example 5 will NOT result in reminder generation.Lastly, in example 6 the
occurrenceTiming
has adayOfWeek
/timeOfDay
-combination within an active period, which results in reminder generation.
Having identified a pending measurement, the infrastructure creates an ehealth-message type Communication with the Patient as the recipient, unless such creation has been suppressed (see Controlling Creation of Messages).
Communication Element | Value |
---|---|
| Coding for |
|
|
|
|
|
|
|
|
| current date/time |
| Coding for No medium set when the |
| The Patient |
| Device reference for eHealth Infrastructure Device |
When possible, the created Communication leads to a NemSMS text notification to the Citizen. A prerequisite to this is that the citizen has subscribed to NemSMS and that the citizen has not suppressed the generation of such messages (see https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/2415034369/Controlling+Creation+of+Messages#Controlling-Message-Creation-with-Patient-as-Recipient).
Validation of SSL orders when activating a CarePlan
When a CarePlan changes status
to active
, the infrastructure checks if any related SSL orders are still undelivered. If this is the case, then the Patient may still be missing the necessary equipment. The infrastructure creates a task with the category: OpenSSLOrder for the CareTeam to check if any equipment is missing and if necessary delay the activation of the CarePlan or adjust the measurement regime for specific measurements.
Scheduled Automated Application of Planned Changes (EpisodeOfCare, CarePlan and ServiceRequest)
Scheduled changes in EpisodeOfCare, CarePlan and ServiceRequest are applied during an automatic job which runs at regular intervals.
Upon job execution, the job finds all ServiceRequest, CarePlan and EpisodesOfCare that have unhandled
statusSchedule
orteamSchedule
entries planned for a timestamp between this execution and the previous one.The scheduled changes are then applied to the resources so that they are up to date with their latest scheduled change.
Scheduled Import of Organization Data from SOR and FK Organisation
The eHealth Infrastructure run scheduled jobs that Import of Organization Data from SOR and FK Organisation.
The import of Organization data is described in Importing and updating Organization information from SOR and FK-Organisation into eHealth Infrastructure.
Scheduled Check for Calibration of Equipment
Some equipment needs to be periodically calibrated to ensure precise measurements.
The eHealth Infrastructure runs a periodic job that checks if any devices require calibration. If that is the case then the Infrastructure created a Task with a category
set to CalibrationNeeded
. The Task is assigned to the CareTeam(s) for the CarePlan that currently uses the Device.
Handling of EpisodeOfCare and CarePlan Created
When an EpisodeOfCare is created with $create-episode-of-care
, two ehealth-message types of Communication are automatically created. These correspond to the Communication created for the change of EpisodeOfCare status and team, respectively.
When a CarePlan is created with $apply
performed on a PlanDefinition, two ehealth-message types of Communication are automatically created. These correspond to the Communication created for the change of CarePlan status and team, respectively. Such a pair of Communication is created for each sub-CarePlan.
Handling of Change of EpisodeOfCare and CarePlan Status, CareTeam, Scheduled Status and/or Scheduled CareTeam
The EpisodeOfCare and CarePlan have two elements ehealth-episodeofcare-statusschedule
and ehealth-teamschedule
which capture:
planned changes in
EpisodeOfCare.status
andEpisodeOfCare.team
planned changes in
CarePlan.status
andCarePlan.careTeam
When one of the following elements in CarePlan/EpisodeOfCare is changed, then an ehealth-message type Communication is automatically created.
status
team
ehealth-episodeofcare-statusschedule
health-teamschedule
Communication created with the Patient as the recipient
Resource | Element | Value |
---|---|---|
Communication (of profile ehealth-message) | category | Coding for |
status |
| |
payload.content | One of:
| |
ehealth-title | One of:
| |
topic | Reference to EpisodeOfCare or CarePlan, depending on the situation | |
sent | current date/time | |
recipient | The Patient | |
sender | Device reference for eHealth Infrastructure Device |
Communication created with CareTeam as the recipient
Resource | Element | Value |
---|---|---|
Communication (of profile ehealth-message) | category | Coding for |
status |
| |
payload.content | One of:
| |
ehealth-title | One of:
| |
topic | Reference to EpisodeOfCare or CarePlan, depending on the situation | |
sent | current date/time | |
ehealth-communication-recipientCareTeam | The CareTeam | |
sender | Device reference for eHealth Infrastructure Device |
Reminder for Participation in Appointment
Communication with the Patient as the recipient
Resource | Element | Value |
---|---|---|
Communication (of profile ehealth-message) | category | Coding for |
status |
| |
payload.content | One of:
(Unless otherwise stated by matching CommunicationRequest) | |
sent | current date/time | |
medium | Coding for | |
recipient | The Patient | |
sender | Device reference for eHealth Infrastructure Device |
Communication with CareTeam as the recipient
Resource | Element | Value |
---|---|---|
Communication (of profile ehealth-message) | category | Coding for |
status |
| |
payload.content | One of:
(Unless otherwise stated by matching CommunicationRequest) | |
sent | current date/time | |
medium | Coding for | |
recipient | The CareTeam | |
sender | Device reference for eHealth Infrastructure Device |
Handling of Automatic NemSMS Notification on Creation of Communication of Type message
Communication with the Patient as the recipient
Resource | Element | Value |
---|---|---|
Communication (of profile ehealth-message) | category | Coding for |
status |
| |
payload.content | “Du har modtaget en ny besked. Se den i din telemedicinske løsning.” | |
about | The Communication resource that caused this notification | |
sent | current date/time | |
recipient | The Patient | |
sender | Device reference for eHealth Infrastructure Patient |
Resources Created by Automated Processing in the Infrastructure
The Infrastructure automatically creates Task resources for profile ehealth-task and Communication resources for profile ehealth-message in different situations. An overview is provided for each resource type in the following.
Overview of Task Created by the Infrastructure
The following table provides an overview of Tasks produced by the Infrastructure. For more detailed information follow the link in the reference column.
Situation/Trigger | Task.category | Reference |
---|---|---|
Measurement submitted at an unexpected time | UnexpectedMeasurementResolving | |
Missing measurement | MissingMeasurementResolving | |
Measurement submitted with Data Absent Reason | MeasurementForAssessmentAbsentValue | |
Automated processing rule: FallbackRule | MeasurementForAssessment | |
Automated processing rule: Assessment of Absolute Reference Ranges
| MeasurementForAssessment | |
Automated processing rule: Assessment of Absolute Reference Ranges
| MeasurementForAssessment | |
Automated processing rule: Assessment of Absolute Reference Ranges
| Creates two tasks:
| |
Automated processing rule: Assessment of Absolute Reference Ranges
| Creates two tasks:
| |
Automated processing rule: Assessment of Relative Reference Ranges
| MeasurementForAssessment | |
Automated processing rule: Assessment of Relative Reference Ranges
| MeasurementForAssessmentNotTriaged | |
Automated processing rule: Assessment of Relative Reference Ranges
| Creates two tasks:
| |
Automated processing rule: Assessment of Relative Reference Ranges
| Creates two tasks:
| |
Automated processing rule: Assessment of Questionnaire Response | MeasurementForAssessment | |
Automated processing rule: Assessment of Questionnaire Response
| MeasurementForAssessmentNotTriaged | |
Automated processing rule: Assessment of TeleCare Nord COPD Questionnaire | MeasurementForAssessment | |
When a CarePlan has been activated and there is an open SSL Order | OpenSSLOrder | |
When the expiration date for device calibration has exceeded | CalibrationNeeded |
Overview of Communication Created by the Infrastructure
The following table provides an overview of Communication (of profile ehealth-message) produced by the Infrastructure and how creation and suppression of creation can be controlled with CommunicationRequest.
For information regarding how to control the creation and content of Communcations see Controlling Creation of Messages.
The table does not provide all elements of either Communication or CommunicationRequest. Please consult particular sections corresponding to the situations for details. Element <some element name> describes what values are used in Communication in a specific situation.
Situation/Trigger | Created by Default | Opt-in Supported | Opt-out Supported | Element category | Element reasonCode | Element restriction-category | Element medium | Element recipient | Element recipientCareteam |
---|---|---|---|---|---|---|---|---|---|
Measurement submitted at an unexpected time | No | Yes | No |
|
|
| One Communication for each CareTeam associated with the CarePlan and have opted in. | ||
No | Yes | No | Default: none Can be overridden with CommunicationRequest | Patient | |||||
Automated processing rule requests Communication(s) to be made. | Yes | No | Yes |
| Can vary with the automated processing rule. See execution of rule and output in https://ehealth-dk.atlassian.net/wiki/spaces/EDTW/pages/538935313/Behind+the+Scenes#Execution-of-rule-and-output . | One Communication for each CareTeam associated with the CarePlan which has not opted out. | |||
No | Yes | No | Default: none Can be overridden with CommunicationRequest | Patient | |||||
Missing measurement | Yes | No | Yes |
|
|
| One Communication for each CareTeam associated with the CarePlan which has not opted out. | ||
No | Yes | No | Default: none Can be overridden with CommunicationRequest | Patient | |||||
Creation of EpisodeOfCare | Yes | No | Yes |
|
| No value assigned | One Communication for each CareTeam associated with the CarePlan which has not opted out. | ||
No | Yes | No | Default: none Can be overridden with CommunicationRequest | Patient | |||||
Creation of CarePlan ($apply) | Yes | No | Yes |
|
| No value assigned | One Communication for each CareTeam associated with the CarePlan which has not opted out. | ||
No | Yes | No | Default: none Can be overridden with CommunicationRequest | Patient | |||||
Change in CarePlan of CareTeam, scheduled CareTeam, status or scheduled status | Yes | No | Yes |
|
| No value assigned | One Communication for each CareTeam associated with the CarePlan which has not opted out. | ||
No | Yes | No | Default: none Can be overridden with CommunicationRequest | Patient | |||||
Change in EpisodeOfCare of CareTeam, scheduled CareTeam, status or scheduled status | Yes | No | Yes |
|
| No value assigned | One Communication for each CareTeam in EpisodeOfCare.team which has not opted out. | ||
No | Yes | No | Default: none Can be overridden with CommunicationRequest | Patient | |||||
Reminder to submit measurement | Yes | No | Yes |
|
| No value assigned |
Can be overridden with CommunicationRequest | Patient | |
If a contract has a reminder days setup and a matching order/orderline has an agreedDateFrom – reminder days = current day | Yes | No | No |
|
|
|
| Patient |
Currently, there are no automated processing rules - neither ready for production nor slated for production - that specify or request the creation of Communication.