The Clinical Document SHALL contain at least one [1..1] realmCode where @code='SA' [CDAH-050] OCL self.realmCode->select(ii : CS | (not ii.code.oclIsUndefined()) and ii.code='SA' )->size()>0 The Clinical Document SHALL contain exactly one [1..1] Document Identifier that SHALL NOT be null flavor [CDAH-001] OCL (not self.id.oclIsUndefined()) and self.id.nullFlavor.oclIsUndefined() The Clinical Document SHALL contain exactly one [1..1] Code that SHALL NOT be null flavor [CDAH-002] OCL (not self.code.oclIsUndefined()) and self.code.nullFlavor.oclIsUndefined() The Clinical Document SHALL contain exactly one [1..1] Title that SHALL NOT be null flavor [CDAH-003] OCL (not self.title.oclIsUndefined()) and self.title.nullFlavor.oclIsUndefined() The Clinical Document SHALL contain exactly one [1..1] Effective Time [CDAH-004] OCL (not self.effectiveTime.oclIsUndefined()) The Clinical Document SHALL contain exactly one [1..1] Confidentiality Code and SHALL NOT be null flavor [CDAH-005] OCL (not self.confidentialityCode.oclIsUndefined()) and self.confidentialityCode.nullFlavor.oclIsUndefined() The Clinical Document Confidentiality Code SHALL be set to values defined by the Saudi eHeath Security and Privacy Interoperability Specification. [CDAH-034] OCL (not self.confidentialityCode.oclIsUndefined()) and self.confidentialityCode.matchesValueSet('2.16.840.1.113883.3.3731.1.203.11.1', self.confidentialityCode.code, self.confidentialityCode.codeSystem, self.confidentialityCode.codeSystemName, null) The ClinicalDocument SHALL contain exactly one [1..1] Patient Information that SHALL NOT be null flavor [CDAH-007] OCL self.recordTarget->exists(rt : POCDMT000040RecordTarget | (not rt.patientRole.oclIsUndefined()) and (not rt.patientRole.patient.oclIsUndefined()) and rt.patientRole.patient.nullFlavor.oclIsUndefined() ) The Patient Information SHALL contain exactly one [1..1] Patient Identifier that SHALL NOT be null flavor [CDAH-008] OCL self.recordTarget->forAll(rt : POCDMT000040RecordTarget | rt.patientRole.oclIsUndefined() or (not rt.patientRole.nullFlavor.oclIsUndefined()) or rt.patientRole.patient.oclIsUndefined() or (not rt.patientRole.patient.nullFlavor.oclIsUndefined()) or ( (not rt.patientRole.patient.id.oclIsUndefined()) and rt.patientRole.patient.id.nullFlavor.oclIsUndefined() ) ) The Patient Information SHALL contain one or more [1..*] Name that SHALL NOT be null flavor [CDAH-009] OCL self.recordTarget->forAll(rt : POCDMT000040RecordTarget | rt.patientRole.oclIsUndefined() or ( (not rt.patientRole.patient.oclIsUndefined()) and rt.patientRole.patient.name->exists(pn : PN | pn.nullFlavor.oclIsUndefined() ) ) ) The Patient Information SHALL contain exactly one [1..1] Gender [CDAH-011] OCL self.recordTarget->forAll(rt : POCDMT000040RecordTarget | rt.patientRole.oclIsUndefined() or ( (not rt.patientRole.patient.oclIsUndefined()) and (not rt.patientRole.patient.administrativeGenderCode.oclIsUndefined()) and rt.patientRole.patient.administrativeGenderCode.nullFlavor.oclIsUndefined() ) ) The Gender shall contain exactly one code/@code from the KSA Gender Value Set [CDAH-032] OCL self.recordTarget->forAll(rt : POCDMT000040RecordTarget | rt.patientRole.oclIsUndefined() or rt.patientRole.patient.oclIsUndefined() or rt.patientRole.patient.administrativeGenderCode.oclIsUndefined() or ( (not rt.patientRole.patient.administrativeGenderCode.code.oclIsUndefined()) and rt.patientRole.patient.administrativeGenderCode.matchesCodeToValueSet('2.16.840.1.113883.3.3731.1.201.8', rt.patientRole.patient.administrativeGenderCode.code) ) ) The Patient Information SHALL contain exactly one [1..1] Birth Time that SHALL NOT be null flavor [CDAH-012] OCL self.recordTarget->forAll(rt : POCDMT000040RecordTarget | rt.patientRole.oclIsUndefined() or ( (not rt.patientRole.patient.oclIsUndefined()) and (not rt.patientRole.patient.birthTime.oclIsUndefined()) and rt.patientRole.patient.birthTime.nullFlavor.oclIsUndefined() ) ) The Previous Version SHALL contain exactly one [1..1] Document Identifier and SHALL NOT be null flavor [CDAH-032] OCL self.relatedDocument->select(rd : POCDMT000040RelatedDocument | (not rd.typeCode.oclIsUndefined()) and rd.typeCode=XActRelationshipDocument::RPLC )->forAll(rd : POCDMT000040RelatedDocument | (not rd.parentDocument.oclIsUndefined()) and rd.parentDocument.id->size()=1 and rd.parentDocument.id->first().nullFlavor.oclIsUndefined() ) The Patient Information SHALL contain exactly one [1..1] Patient Nationality which SHALL contain code/@code from the Nationality value set in IS0201 Saudi eHealth Laboratory Terminology Interoperability Specification. [CDAH-051] OCL self.participant->select(par : POCDMT000040Participant1 | (not par.typeCode.oclIsUndefined()) and par.typeCode=ParticipationType::SBJ and (not par.associatedEntity.oclIsUndefined()) and (not par.associatedEntity.classCode.oclIsUndefined()) and par.associatedEntity.classCode=RoleClassAssociative::CIT )->forAll(par : POCDMT000040Participant1 | (not par.associatedEntity.code.oclIsUndefined()) and par.associatedEntity.code.matchesValueSet('2.16.840.1.113883.3.3731.1.201.9', par.associatedEntity.code.code, par.associatedEntity.code.codeSystem, null, null) ) A Time Stamp Value , Start Date or End Date SHALL contain the Century and Year [CDAH-056] OCL self.value.oclIsUndefined() or self.matches(self.value, '^[0-9]{4}.*') A Time Stamp Value , Start Date or End Date SHALL contain the Month if known [CDAH-057] OCL self.value.oclIsUndefined() or self.matches(self.value, '^[0-9]{6}.*') A Time Stamp Value , Start Date or End Date SHALL contain the Date if known. [CDAH-058] OCL self.value.oclIsUndefined() or self.matches(self.value, '^[0-9]{8}.*') A Time Stamp Value , Start Date or End Date SHALL contain the Time Zone if Hours are included. [CDAH-060] OCL self.value.oclIsUndefined() or (not (self.matches(self.value, '^[0-9]{10}.*'))) or self.matches(self.value, '.*(\\+|\\-)[0-9]{4}$') The Name SHOULD have at least one and no more than two values [1..2] for Name Type. [CDAH-061] OCL self.use ->size()=1 or self.use ->size()=2 The Name SHALL have at most one [0..1] Name Prefix [CDAH-062] OCL self.prefix->size()<2 The Name SHALL have exactly one [1..1] Family Name IF KNOWN [CDAH-063] OCL not (self.family->isEmpty()) and self.family->size()=1 The Name SHALL have no more than 2 [0..2] given elements [CDAH-64] OCL self.given->size()<3 The Name SHALL have exactly one [1..1] First Name stored in the given[1] element IF KNOWN [CDAH-65] OCL not (self.given->isEmpty()) and self.given->size()>0 The Name SHALL have exactly one [1..1] Middle Name stored in the given[2] element IF KNOWN. OCL not (self.given->isEmpty()) and self.given->size()>1 The Name Type for the Name SHALL be contain the value ‘L’ when the name specified is the legal name. This value may be combined with other name type values described below [CDAH-68] OCL self.use->select(st : String | st='L')->size()>0 The Name Type SHALL have the value ‘SYL’ or 'ABC' or IDE' [CDAH-44] [CDAH-41] [CDAH-42] OCL self.use->select(st : String | st='SYL' or st='ABC' or st='IDE')->size()>0 The Assigning Authority for the patient identifier SHALL be valued with ‘2.16.840.1.113883.3.3731.1.1.100.1’ [CDAH-039] OCL self.id->exists(ii : II | (not ii.root.oclIsUndefined()) and ii.root='2.16.840.1.113883.3.3731.1.1.100.1') religiousAffiliationCode/@code SHALL be from the KSA Religious Affiliation value set in IS0202 [CDAH-054] OCL self.patient.oclIsUndefined() or self.patient.religiousAffiliationCode.oclIsUndefined() or (not self.patient.religiousAffiliationCode.nullFlavor.oclIsUndefined()) or self.patient.religiousAffiliationCode.matchesValueSet('2.16.840.1.113883.3.3731.1.202.10', self.patient.religiousAffiliationCode.code, self.patient.religiousAffiliationCode.codeSystem, null, null) The Assigning Authority for an organization identifier SHALL be valued with ‘2.16.840.1.113883.3.3731.1.2.2’ [CDAH-036] OCL self.id->exists(ii : II | (not ii.root.oclIsUndefined()) and ii.root='2.16.840.1.113883.3.3731.1.2.2') The Assigning Authority for an organization identifier SHALL be valued with ‘2.16.840.1.113883.3.3731.1.2.2’ [CDAH-036] OCL self.id->exists(ii : II | (not ii.root.oclIsUndefined()) and ii.root='2.16.840.1.113883.3.3731.1.2.2') The Author SHALL contain exactly one [1..1] Time and SHALL NOT be null flavor [CDAH-013] OCL (not self.time.oclIsUndefined()) and self.time.nullFlavor.oclIsUndefined() The Author SHALL contain exactly one [1..1] Author Identifier n that reflects the value of the Unique Entry Identifier of the provider as maintained by the provider [CDAH-014] OCL self.assignedAuthor.id->size()>0 The Author SHALL contain at least one [1..*] Author Name and SHALL NOT be null flavor. [CDAH-016] OCL (not self.assignedAuthor.oclIsUndefined()) and (not self.assignedAuthor.assignedPerson.oclIsUndefined()) and self.assignedAuthor.assignedPerson.name->size()>0 and self.assignedAuthor.assignedPerson.name->forAll(pn : PN | pn.nullFlavor.oclIsUndefined() ) The Author SHALL contain exactly one [1..1] Organization Identifier that reflects the value of the Unique Entry Identifier of the organization as maintained by the provider directory. [CDAH-018] OCL (not self.assignedAuthor.oclIsUndefined()) and (not self.assignedAuthor.representedOrganization.oclIsUndefined()) and self.assignedAuthor.representedOrganization.id->size()=1 The Author SHALL contain exactly one [1..1] Organization Name and SHALL NOT be null flavor [CDAH-019] OCL (not self.assignedAuthor.oclIsUndefined()) and (not self.assignedAuthor.representedOrganization.oclIsUndefined()) and self.assignedAuthor.representedOrganization.name->size()=1 and self.assignedAuthor.representedOrganization.name->first().nullFlavor.oclIsUndefined() The Legal Authenticator SHALL contain exactly one [1..1] Legal Authenticator Identifier that reflects the value of the Unique Entry Identifier of the Legal Authenticator as maintained by the provider directory. [CDAH-023] OCL (not self.assignedEntity.oclIsUndefined()) and self.assignedEntity.id->size()=1 Exactly one Authenticator SHALL contain at least one [1..*] Name and SHALL NOT be null flavor [CDAH-024] OCL (not self.assignedEntity.oclIsUndefined()) and (not self.assignedEntity.assignedPerson.oclIsUndefined()) and self.assignedEntity.assignedPerson.name->size()>0 and self.assignedEntity.assignedPerson.name->forAll(pn : PN | pn.nullFlavor.oclIsUndefined() ) Exactly one Name in the Legal Authenticator SHALL be marked as the legal name of the Legal Authenticator. [CDAH-052] OCL self.assignedEntity.oclIsUndefined() or self.assignedEntity.assignedPerson.oclIsUndefined() or self.assignedEntity.assignedPerson.name->forAll(pn : PN | pn.use->exists(st : String | st = 'L') ) The Authenticator SHALL contain exactly one [1..1] Author Identifier that reflects the value of the Unique Entry Identifier of the Author as maintained by the provider directory. [CDAH-027] OCL (not self.assignedEntity.oclIsUndefined()) and self.assignedEntity.id->size()=1 The Authenticator SHALL contain at least one [1..*] Name that SHALL NOT be null flavor [CDAH-029] OCL (not self.assignedEntity.oclIsUndefined()) and (not self.assignedEntity.assignedPerson.oclIsUndefined()) and self.assignedEntity.assignedPerson.name->size()>0 and self.assignedEntity.assignedPerson.name->forAll(pn : PN | pn.nullFlavor.oclIsUndefined() ) The Name in the Authenticator SHALL be marked as the legal name of the Authenticator [CDAH-053] OCL self.assignedEntity.oclIsUndefined() or self.assignedEntity.assignedPerson.oclIsUndefined() or self.assignedEntity.assignedPerson.name->forAll(pn : PN | pn.use->exists(st : String | st = 'L') )