This wiki has undergone a migration to Confluence found Here
Difference between revisions of "Requirements-Dynamic Model"
Jump to navigation
Jump to search
Line 5: | Line 5: | ||
===Description=== | ===Description=== | ||
− | The HL7 methodology includes two parts needed for communication of information between systems, the static model (information content itself and any wrappers) and the dynamic model which describes the circumstances under which that information is sent and how that exchange fits into an overall pattern of communication. | + | The HL7 methodology includes two parts needed for communication of information between systems, the static model (information content itself and any wrappers) and the dynamic model which describes the circumstances under which that information is sent and how that exchange fits into an overall pattern of communication. "Dynamic model" refers to a set of interrelated artifacts that together define the behavioral portion of an HL7 v3 specification. The artifacts include: |
− | + | * [[Requirements-Dynamic Model#Trigger Events|Trigger Events]]: When is information exchanged? | |
− | + | * [[Requirements-Dynamic Model#Trigger Events|Application Roles]]: Who are the participants in an exchange? | |
− | + | * [[Requirements-Dynamic Model#Interactions|Interactions]]: What are the characteristics of a single exchange, including its place in an overall communication pattern? | |
− | |||
− | |||
− | |||
− | # | ||
− | # | ||
− | #What | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Requirements== | ==Requirements== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Trigger Events=== | ===Trigger Events=== | ||
{| border="2" cellspacing="0" cellpadding="3" width="600" | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
| '''Requirement''' | | '''Requirement''' | ||
− | | | + | | There needs to be a means of defining and standardizing the definition of the 'real world' occurrences that result in a need for information to be exchanged. |
|- | |- | ||
| ''Rationale'' | | ''Rationale'' | ||
− | | | + | | Part of interoperability is not only what information will get shared but also the circumstances where it will be shared. A system that does not share the appropriate information at the correct time will not achieve interoperability. |
|- | |- | ||
| ''MIF'' | | ''MIF'' | ||
− | | | + | | mif-model-dynamic.xsd/TriggerEvent |
− | |||
− | |||
|} | |} | ||
Line 56: | Line 29: | ||
|- | |- | ||
| ''Rationale'' | | ''Rationale'' | ||
− | | The trigger events must be able to be precisely referenced | + | | The trigger events must be able to be precisely referenced in human-to-human communication. |
|- | |- | ||
| ''MIF'' | | ''MIF'' | ||
Line 66: | Line 39: | ||
{| border="2" cellspacing="0" cellpadding="3" width="600" | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
| '''Requirement''' | | '''Requirement''' | ||
− | | Each trigger event must | + | | Each trigger event must identify, as formally as possible, the real-world occurrence that causes information to flow. |
|- | |- | ||
| ''Rationale'' | | ''Rationale'' | ||
− | | The trigger event | + | | The purpose of a trigger event is to give a standardized label to a particular type of real-world event so that it can be referenced. If the real-world event isn't defined or is defined only loosely, the trigger event's purpose won't be met. |
|- | |- | ||
| ''Methodology'' | | ''Methodology'' | ||
− | | There are three | + | | There are three categories: |
− | *interaction-based - An interaction caused by the receipt of another interaction. For example query response. | + | *interaction-based - An interaction caused by the receipt of another interaction. For example query response. Interaction based trigger events reference the interaction that triggers them. |
− | *state-based - An interaction caused by a change in status. For example, putting a repeating order on hold (to suspend action on that order) | + | *state transition-based - An interaction caused by a change in status. For example, putting a repeating order on hold (to suspend action on that order). State-based trigger events reference the static model, class and state transition they are associated with |
− | * | + | *environment-based - An interaction caused by a user interacting with a system or some other environmental occurrence. For example, user deciding to query a system; daily notification sent out at 2am. Environment based trigger events include a textual description of the real world event, as there is no more formal way of defining them. |
|- | |- | ||
| ''MIF'' | | ''MIF'' | ||
Line 81: | Line 54: | ||
* Interaction-based: mif-model-dynamic.xsd/TriggeringEvent/interaction | * Interaction-based: mif-model-dynamic.xsd/TriggeringEvent/interaction | ||
* State-based: mif-model-dynamic.xsd/TriggeringEvent/stateTransition | * State-based: mif-model-dynamic.xsd/TriggeringEvent/stateTransition | ||
− | * User-based: mif-model-dynamic.xsd/TriggeringEvent/environmentalOccurrence | + | * User-based: mif-model-dynamic.xsd/TriggeringEvent/environmentalOccurrence/text |
|} | |} | ||
Line 87: | Line 60: | ||
{| border="2" cellspacing="0" cellpadding="3" width="600" | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
| '''Requirement''' | | '''Requirement''' | ||
− | | EnvironmentalOccurrence may have | + | | EnvironmentalOccurrence may have a related state transition. |
|- | |- | ||
| ''Rationale'' | | ''Rationale'' | ||
− | | | + | | Some events that aren't directly caused by a state transition might still have an association to a transition. There are two common situations where this occurs: |
− | + | * Request for a state transition to occur; and | |
− | + | * Request for fulfillment of a state transition | |
− | |||
− | * | ||
− | |||
+ | In the first case, the triggering action is usually some user or system decision, but not the actual state transition (because it hasn't happened yet - it's just being asked for. For example, when a user requests info to be posted to a patient's EHR (related state transition is to 'complete' an observation) | ||
− | + | In the second case, the state transition happened some time ago (possibly seconds, possibly days). A decision has been taken to ask another system to "action" that state transition. For example, "please fill this prescription". | |
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| ''MIF'' | | ''MIF'' | ||
Line 109: | Line 75: | ||
* mif-model-dynamic.xsd/EnvironmentalOccurrence/relatedStateTransition | * mif-model-dynamic.xsd/EnvironmentalOccurrence/relatedStateTransition | ||
|} | |} | ||
− | |||
{| border="2" cellspacing="0" cellpadding="3" width="600" | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
| '''Requirement''' | | '''Requirement''' | ||
− | | | + | | Trigger Events may have a number of different types of annotations |
|- | |- | ||
| ''Rationale'' | | ''Rationale'' | ||
− | | | + | | See rationales for individual annotations types |
|- | |- | ||
− | | '' | + | | ''Implementation'' |
− | | | + | | |
− | * | + | * [[Requirements-Annotations#Usage Constraint|Usage Constraint]] |
− | | | + | * [[Requirements-Annotations#Usage Notes|Usage Notes]] |
− | + | * [[Requirements-Annotations#Rationale|Rationale]] | |
− | + | * [[Requirements-Annotations#Requirements|Requirements]] | |
− | + | * [[Requirements-Annotations#Design Comments|Design Comments]] | |
− | | | + | * [[Requirements-Annotations#Stability Remarks|Stability Remarks]] |
− | | | + | * [[Requirements-Annotations#Other Annotation|Other Annotation]] |
− | + | * [[Requirements-Annotations#Mapping|Mapping]] | |
− | | | + | * [[Requirements-Annotations#Open Issue|Open Issue]] |
− | | | + | * [[Requirements-Annotations#Ballot Comment|Ballot Comment]] |
− | + | * [[Requirements-Annotations#Change Request|Change Request]] | |
− | | | + | * [[Requirements-Annotations#Deprecation Information|Deprecation Information]] |
− | | | ||
− | * | ||
|} | |} | ||
+ | ===Interations=== | ||
{| border="2" cellspacing="0" cellpadding="3" width="600" | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
| '''Requirement''' | | '''Requirement''' | ||
− | | | + | | HL7 v3 specifications must be able to define each possible "exchange" of information including the structure and type of information to be sent, the circumstances in which it is sent and expectations on the receiver. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| ''Rationale'' | | ''Rationale'' | ||
− | | | + | | A single exchange is the lowest possible unit of actual interoperability. While an exchange is made up of multiple components, there is no interoperability without at least one successfully completed exchange. To have interoperability, the characteristics of that exchange must be fully defined and agreed to by both parties. |
|- | |- | ||
| ''MIF'' | | ''MIF'' | ||
− | | | + | | mif-model-dynamic.xsd/Interaction |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{| border="2" cellspacing="0" cellpadding="3" width="600" | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
| '''Requirement''' | | '''Requirement''' | ||
Line 223: | Line 119: | ||
|- | |- | ||
| ''Rationale'' | | ''Rationale'' | ||
− | | | + | | Interactions must be able to be referenced in human communication |
|- | |- | ||
| ''MIF'' | | ''MIF'' | ||
Line 440: | Line 336: | ||
* [[Requirements-Annotations#Deprecation Information|Deprecation Information]] | * [[Requirements-Annotations#Deprecation Information|Deprecation Information]] | ||
|} | |} | ||
+ | |||
+ | |||
+ | ===Static Model References=== | ||
+ | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
+ | | '''Requirement''' | ||
+ | | Structured documents have a document definition (static model) | ||
+ | |- | ||
+ | | ''Rationale'' | ||
+ | | Documents the primary payload model as well as any parameterized stubs within the model. | ||
+ | |- | ||
+ | | ''MIF'' | ||
+ | | | ||
+ | * mif-model-dynamic.xsd/StructuredDocument/DocumentDefinition | ||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
+ | | '''Requirement''' | ||
+ | | Structured documents may not have a dynamic model. | ||
+ | |- | ||
+ | | ''Rationale'' | ||
+ | | Documents are a point-in-time artifact and, as such, many times have no additional instruction to sending a document to a document repository other than to 'store' the document or a link to the document. In this case, there is no state transition. | ||
+ | |- | ||
+ | | ''MIF'' | ||
+ | | | ||
+ | * mif-model-dynamic.xsd/StructuredDocument | ||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
+ | | '''Requirement''' | ||
+ | | Each static model must be able to be bound to one or more interactions, and to be bound to one or more other static models. | ||
+ | |- | ||
+ | | ''Rationale'' | ||
+ | | Each interaction is bound to a specific payload model, for which is bound a specific control act wrapper model which is bound to a specific transport model. This includes the binding to an appropriate parameter model for query interactions. The parameterized models are not bound until defining the interaction so that static models can be re-used in differing interactions to provide similar business function (acknowledgements, for example). | ||
+ | |- | ||
+ | | ''MIF'' | ||
+ | | | ||
+ | * mif-model-dynamic.xsd/BoundStaticModel | ||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
+ | | '''Requirement''' | ||
+ | | Each static model has a content type. | ||
+ | |- | ||
+ | | ''Rationale'' | ||
+ | | Identifies the type of content represented by the model when entered from this entry point. The contentType determines whether the model is legitimate content for a classStub from another model. | ||
+ | |- | ||
+ | | ''MIF'' | ||
+ | | | ||
+ | * mif-model-dynamic.xsd/BoundStaticModel/@entryPointUseKind | ||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
+ | | '''Requirement''' | ||
+ | | Naming must be driven by the binding of the static models to ensure separation of the models transparent. | ||
+ | |- | ||
+ | | ''Rationale'' | ||
+ | | Naming of each static model as bound still needs demarcation from the other model content. | ||
+ | |- | ||
+ | | ''MIF'' | ||
+ | | | ||
+ | * mif-model-dynamic.xsd/BoundStaticModel/specialization | ||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
+ | | '''Requirement''' | ||
+ | | For each query interaction, an additional binding to the parameter list is required. Note this includes query requests as well as query responses. | ||
+ | |- | ||
+ | | ''Rationale'' | ||
+ | | The parameter list is required for both requests and responses. | ||
+ | |- | ||
+ | | ''MIF'' | ||
+ | | | ||
+ | * mif-model-dynamic.xsd/BoundStaticModel/parameterModel | ||
+ | * mif-model-dynamic.xsd/ParameterModel | ||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="2" cellspacing="0" cellpadding="3" width="600" | ||
+ | | '''Requirement''' | ||
+ | | A parameter model is a list of passing parameters with a query request or those used to select records in a query response. Each parameter has a parameter name and may have a traversal name. | ||
+ | |- | ||
+ | | ''Rationale'' | ||
+ | | The parameter list is required for both requests and responses. The parameter is a unique name per parameter in the same list. The traversal name is the of the element when traversing from the association end directly to this specialized class | ||
+ | |- | ||
+ | | ''MIF'' | ||
+ | | | ||
+ | * mif-model-dynamic.xsd/ParameterModel/@parameterName | ||
+ | * mif-model-dynamic.xsd/ParameterModel/@traversalName | ||
+ | |} | ||
+ | |||
===Future Requirements (not complete)=== | ===Future Requirements (not complete)=== |