Logical Record Architecture for Health and Social Care

Discharge Summary Release 0.02

The content of this release is not comprehensive and is not fully validated and must not be used in live system implementations.

Reference Model Class: ENTRYconstrainedDomainModel

A structural model artefact representing an ENTRY Domain Model constrained for use within one or more specified areas of interest within the domain of the LRA.

Specializes

LraTechnicalModelArtefact

Constraints

Type Name Specification
Each ConstrainedDomainComponentRelationship instance has a minimum of one owned end (i.e. the "source" relationship) in which the type of every instance is owned by the containing package Invariant inv: let elements: Sequence(Element) = self.packagedElement->select(Element: e | e.oclAsType(DomainModelClass).referenceClass.qualifiedName = ("lra::technical::en13606::extract::FINDING_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::PROPERTY_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::GENERAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::MATERIAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::INVESTIGATION_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::UNBOUND_DATA_ELEMENT")) in let relationships: Sequence(Element) = self.packagedElement->select(Element: e | e.oclIsTypeOf(ConstrainedDomainComponentRelationship)) in relationships->forAll(e: Element | e.oclAsType(ConstrainedDomainComponentRelationship).ownedEnd->exists(p: Property | elements->includesAll(p.oclAsType(Slot).instance->flatten())))
Instance contains an association to each of one or more ConstrainedDomainModelClass instances of kind ELEMENT Invariant inv: self.packagedElement->select(Element: e | e.oclAsType(Association).memberEnd->exists(Property: p | p.class.oclAsType(ConstrainedDomainModelClass).qualifiedName = ("lra::technical::en13606::extract::FINDING_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::PROPERTY_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::GENERAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::MATERIAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::INVESTIGATION_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::UNBOUND_DATA_ELEMENT")))->size() >= 1
Instance contains one ConstrainedDomainModelClass instance of type ENTRY Invariant inv: self.packagedElement->select(Element: e | e.oclAsType(DomainModelClass).referenceClass.qualifiedName = "lra::technical::en13606::extract::ENTRY")->size() = 1
Instance contains one or more ConstrainedDomainModelClass "Participant" instances Invariant inv: self.packagedElement->select(Element: e | e.oclAsType(ConstrainedDomainModelClass).referenceClass.qualifiedName = ("lra::technical::en13606::extract::RELATED_PARTY" or "lra::technical::en13606::extract ::FUNCTIONAL_ROLE" or "lra::technical::en13606::extended::PARTICIPATION" or "lra::technical::participations::LANGUAGE_COMMUNICATION" or "lra::technical::participations::ROLE_RELATIONSHIP" or "lra::technical::participations::PERSON_ROLE" or "lra::technical::participations::ORGANISATIONAL_ROLE" or "lra::technical::participations::DEVICE_ROLE" or "lra::technical::participations::ENVIRONMENT_ROLE" or "lra::technical::participations::PERSON_ENTITY" or "lra::technical::participations::ORGANISATION_ENTITY" or "lra::technical::participations::DEVICE_ENTITY" or "lra::technical::participations::PLACE_ENTITY"))->size() >= 1
Instance contains zero or more ConstrainedDomainComponentRelationship instances Invariant inv: self.packagedElement->select(Element: e | e.oclAsType(ConstrainedDomainComponentRelationship))->size() >= 0
The type of every instance of the owned end of any ConstrainedDomainComponentRelationship instance is owned either by the containing package or by a referenced package Invariant inv: let elements: Sequence(Element) = self.packagedElement->select(Element: e | e.oclAsType(ConstrainedDomainModelClass).referenceClass.qualifiedName = ("lra::technical::en13606::extract::FINDING_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::PROPERTY_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::GENERAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::MATERIAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::INVESTIGATION_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::UNBOUND_DATA_ELEMENT")) in let relationships: Sequence(Element) = self.packagedElement->select(Element: e | e.oclIsTypeOf(DomainComponentRelationship)) in let references: Sequence(Element) = self.referencedElement->select(Element: e | e.oclAsType(ConstrainedDomainModelClass).referenceClass.qualifiedName = ("lra::technical::en13606::extract::FINDING_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::PROPERTY_OBSERVATION_ELEMENT" or "lra::technical::en13606::extract::GENERAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::MATERIAL_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::INVESTIGATION_ACTIVITY_ELEMENT" or "lra::technical::en13606::extract::UNBOUND_DATA_ELEMENT")) in let allElements: Sequence(Element) = elements->union(references) let relationships: Sequence(Element) = self.packagedElement->select(Element: e | e.oclIsTypeOf(ConstrainedDomainComponentRelationship)) in relationships->forAll(e: Element | e.oclAsType(ConstrainedDomainComponentRelationship).ownedEnd->flatten()->forAll(p: Property | allElements->includesAll(p.oclAsType(Slot).instance->flatten())))

Reference Model Type