ihehpd providerInformationQueryResponse queryResponseSpec queryResponseSpec core-BatchResponse constraint_hpd_queryResponseAllowedElements A provider information query response can only constains searchResponse elements self.addResponse->size() = 0 and self.authResponse->size() = 0 and self.compareResponse->size() = 0 and self.delResponse->size() = 0 and self.extendedResponse->size() = 0 and self.modDNResponse->size() = 0 and self.modifyResponse->size() = 0 and self.errorResponse->size() = 0 ERROR searchRequest SearchRequestSpec SearchRequestSpec core-SearchRequest constraint_hpd_searchRequest_dnSyntax dn attribute SHALL be formatted as a Distinguish name string. self.matches(self.dn.oclAsType(String),'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$') ERROR constraint_hpd_searchRequest_dnValidOu Nodes that are subordinates to dc=HPD are ou=HCProfessional, ou=HCRegulatedOrganization and ou=Relationship (see section 3.58.4.1.2.1 HPD Schema Structure) self.matches(self.dn.oclAsType(String), '.*(ou=(HCProfessional|HCRegulatedOrganization|Relationship)){1}.*') ERROR searchResponse SearchResponseSpec SearchResponseSpec core-SearchResponse constraint_hpd_searchResponse_requestIDCard The Provider Information Query Response shall contain the requestID to associate the response to the Provider Information Query Request. (see section 3.58.4.2.2: Message Semantics) not self.requestID.oclIsUndefined() ERROR SearchResultEntrySpec SearchResultEntrySpec core-SearchResultEntry constraint_hpd_searchReponse_searchResultEntryDNSyntax dn attribute SHALL be formatted as a Distinguish name string. self.matches(self.dn.oclAsType(String),'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$') ERROR constraint_hpd_searchResponse_SearchResultEntryDnValidOu Nodes that are subordinates to dc=HPD are ou=HCProfessional, ou=HCRegulatedOrganization and ou=Relationship (see section 3.58.4.1.2.1 HPD Schema Structure) self.matches(self.dn.oclAsType(String), '.*(ou=(HCProfessional|HCRegulatedOrganization|Relationship)){1}.*') ERROR hpdProviderStatusAttrForHCProfessionalTemplate hpdProviderStatusAttrForHCProfessionalTemplate core-SearchResultEntry constraint_hpd_searchResultEntryHCProfessional_hpdProviderStatusValue When the returned entry is for Individual Provider, valid values for attribute hpdProviderStatus are Active, Inactive, Retired and Deceased (see Table 3.58.4.1.2.3-1: Status Code Category Values) self.attr->select(at: DsmlAttr | at.name='hpdProviderStatus' ).value->forAll(val: String | val = 'Active' or val='Inactive' or val='Retired' or val='Deceased') ERROR self.matches(self.dn.oclAsType(String), '.*(ou=HCProfessional){1}.*') and self.attr->select(at: DsmlAttr | at.name='hpdProviderStatus')->size() > 0 hpdProviderStatusAttrForHCRegulatedOrganizationTemplate hpdProviderStatusAttrForHCRegulatedOrganizationTemplate core-SearchResultEntry constraint_hpd_searchResultEntryHCRegulatedOrganization_hpdProviderStatusValue When the returned entry is for Organization Provider, valid values for attribute hpdProviderStatus are Active and Inactive (see Table 3.58.4.1.2.3-1: Status Code Category Values) self.attr->select(at: DsmlAttr | at.name='hpdProviderStatus' ).value->forAll(val: String | val = 'Active' or val='Inactive') ERROR self.matches(self.dn.oclAsType(String), '.*(ou=HCRegulatedOrganization){1}.*') and self.attr->select(at: DsmlAttr | at.name='hpdProviderStatus')->size() > 0 credentialTypeAttrForHCProfessionalTemplate credentialTypeAttrForHCProfessionalTemplate core-SearchResultEntry constraint_hpd_searchResultEntryHCProfessional_credentialTypeValue Valid values for credentialType are degree, certificate and credential (see Table 3.58.4.1.2.2.1-2: HPDProviderCredentialMandatory Attributes) self.attr->select(at: DsmlAttr | at.name='credentialType' ).value->forAll(val: String | val = 'degree' or val='certificate' or val='credential') ERROR self.matches(self.dn.oclAsType(String), '.*(ou=HCProfessional){1}.*') and self.attr->select(at: DsmlAttr | at.name='credentialType')->size() > 0 credentialTypeAttrForHCRegulatedOrganizationTemplate credentialTypeAttrForHCRegulatedOrganizationTemplate core-SearchResultEntry constraint_hpd_searchResultEntryHCRegulatedOrganization_credentialTypeValue Degree is not a valid type for Organizational Provider's credential. Valid values are certificate and credential. (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.attr->select(at: DsmlAttr | at.name='credentialType' ).value->forAll(val: String | val='certificate' or val='credential') ERROR self.matches(self.dn.oclAsType(String), '.*(ou=HCRegulatedOrganization){1}.*') and self.attr->select(at: DsmlAttr | at.name='credentialType')->size() > 0 hpdCommon hpdProviderStatusAttrTemplate hpdProviderStatusAttrTemplate core-DsmlAttr constraint_hpd_common_hpdProviderStatusValueCard hpdProviderStatus attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdproviderstatus' uidAttrTemplate uidAttrTemplate core-DsmlAttr constraint_hpd_common_uidValueCard uid attribute SHALL be single valued (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->size() <= 1 ERROR constraint_hpd_common_uidSyntax uid attribute SHALL be formatted using the RDN Format as defined by ISO21091 section 9.2: IssuingAuhorityName:ID (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '.+[:]{1}.+')) ERROR self.name.toLowerCase() = 'uid' displayNameAttrTemplate displayNameAttrTemplate core-DsmlAttr constraint_hpd_common_displayNameValueCard displayName attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.matches(self.name.toLowerCase(),'displayname((;lang\\-){1}.+)?') titleAttrTemplate titleAttrTemplate core-DsmlAttr constraint_hpd_common_titleValueCard title attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.matches(self.name.toLowerCase(),'title((;lang\\-){1}.+)?') genderAttrTemplate genderAttrTemplate core-DsmlAttr constraint_hpd_common_genderValueCard gender attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR constraint_hpd_common_genderValue gender attribute SHALL follow the Natural Person auxilary class as defined in RFC 2985, that means that only Male (M or m) and Female (F or f) values are allowed. (see Table 3.58.4.1.2.2.2-1) self.value->forAll(val : String | val='M' or val='m' or val='F' or val='f') ERROR self.name.toLowerCase() = 'gender' hpdMedicalRecordsDeliveryEmailAddressAttrTemplate hpdMedicalRecordsDeliveryEmailAddressAttrTemplate core-DsmlAttr constraint_hpd_common_hpdMedicalRecordsDeliveryEmailAddressValueCard hpdMedicalRecordsDeliveryEmailAddress attribute SHALL be single valued (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdmedicalrecordsdeliveryemailaddress' createTimestampAttrTemplate createTimestampAttrTemplate core-DsmlAttr constraint_hpd_common_createTimestampValueCard createTimestamp attribute SHALL be single valued (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'createtimestamp' modifyTimestampAttrTemplate modifyTimestampAttrTemplate core-DsmlAttr constraint_hpd_common_modifyTimestampValueCard modifyTimestamp SHALL be single valued (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'modifytimestamp' BusinessCategoryAttrTemplate BusinessCategoryAttrTemplate core-DsmlAttr constraint_hpd_common_businessCategoryCardValue businessCategory attribute SHALL be single valued (see Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'businesscategory' credentialTypeAttrTemplate credentialTypeAttrTemplate core-DsmlAttr constraint_hpd_common_credentialTypeValueCard credentialType attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialtype' credentialNameAttrTemplate credentialNameAttrTemplate core-DsmlAttr constraint_hpd_common_credentialNameValueCard credentialName attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->size() <= 1 ERROR constraint_hpd_common_credentialNameSyntax credentialName attribute SHALL follow the ISO21091 naming format as that of the HCStandardRole or credential@Locality (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->forAll(val : String | self.matches(val,'.+[@]{1}.+')) ERROR self.name.toLowerCase() = 'credentialname' credentialNumberAttrTemplate credentialNumberAttrTemplate core-DsmlAttr constraint_hpd_common_credentialNumberValueCard credentialNumber attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->size() <= 1 ERROR constraint_hpd_common_credentialNumberSyntax credentialNumber attribute follows the ISO21091 UID format: Issuing Authority OID: ID (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->forAll(val : String | self.matches(val, '^[0-2](\\.(0|[1-9][0-9]*))*[:]{1}.+')) ERROR self.name.toLowerCase() = 'credentialnumber' credentialDescriptionAttrTemplate credentialDescriptionAttrTemplate core-DsmlAttr constraint_hpd_common_credentialDescriptionValueCard credentialDescription attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialdescription' credentialIssueDateAttrTemplate credentialIssueDateAttrTemplate core-DsmlAttr constraint_hpd_common_credentialIssueDateValueCard credentialIssueDate attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialissuedate' credentialRenewalDateAttrTemplate credentialRenewalDateAttrTemplate core-DsmlAttr constraint_hpd_common_credentialRenewalDateValueCard credentialRenewalDate attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialrenewaldate' credentialStatusAttrTemplate credentialStatusAttrTemplate core-DsmlAttr constraint_hpd_common_credentialStatusValueCard credentialStatus attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR constraint_hpd_common_credentialStatusValue Valid values for credentialStatus attribute are Active, Inactive, Revoked and Suspended (see Table 3.58.4.1.2.3-1: Status Code Category Values) self.value->forAll(val : String | val = 'Active' or val = 'Inactive' or val = 'Revoked' or val = 'Suspended' ) ERROR self.name.toLowerCase() = 'credentialstatus' HcIdentifierAttrTemplate HcIdentifierAttrTemplate core-DsmlAttr constraint_hpd_common_HcIdentifierValue HcIdentifier SHALL be formatted as defined by ISO 21091 (IssuingAuthority:Type:ID:Status) where valid values for Status are Active, Inactive, Revoked and Suspended (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping, 3.58.4.1.2.2.3-1: Organizational Provider Mapping and 3.58.4.1.2.3-1: Status Code Category Values) self.value->forAll(val : String | self.matches(val, '^[0-2](\\.(0|[1-9][0-9]*))*(:.+){2}:(Active|Inactive|Revoked|Suspended)')) ERROR self.name.toLowerCase() = 'hcidentifier' userSMIMECertificateAttrTemplate userSMIMECertificateAttrTemplate core-DsmlAttr constraint_hpd_common_userSMIMECertificateSyntax LDAP Syntax to be used for userSMIMECertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'usersmimecertificate' HcSigningCertificateAttrTemplate HcSigningCertificateAttrTemplate core-DsmlAttr constraint_hpd_common_HcSigningCertificateSyntax LDAP Syntax to be used for hcSigningCertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'hcsigningcertificate' userCertificateAttrTemplate userCertificateAttrTemplate core-DsmlAttr constraint_hpd_common_userCertificateSyntax LDAP Syntax to be used for userCertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'usercertificate' HcOrganizationCertificateAttrTemplate HcOrganizationCertificateAttrTemplate core-DsmlAttr constraint_hpd_common_HcOrganizationCertificateSyntax LDAP Syntax to be used for HcSigningCertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'hcorganizationcertificates' telephoneNumberAttrTemplate telephoneNumberAttrTemplate core-DsmlAttr constraint_hpd_common_telephoneNumberSyntax telephoneNumber attribute SHALL be representing using the E.123 notation. (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '((\\+|[0-9]*|\\([0-9]+\\))[\\s\\-\\.0-9]*/?)*')) ERROR self.name.toLowerCase() = 'telephonenumber' mobileAttrTemplate mobileAttrTemplate core-DsmlAttr constraint_hpd_common_mobileSyntax mobile attribute SHALL be representing using the E.123 notation. (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '((\\+|[0-9]*|\\([0-9]+\\))[\\s\\-\\.0-9]*/?)*')) ERROR self.name.toLowerCase() = 'mobile' pagerAttrTemplate pagerAttrTemplate core-DsmlAttr constraint_hpd_common_pagerSyntax pager attribute SHALL be representing using the E.123 notation. (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '((\\+|[0-9]*|\\([0-9]+\\))[\\s\\-\\.0-9]*/?)*')) ERROR self.name.toLowerCase() = 'pager' memberOfAttrTemplate memberOfAttrTemplate core-DsmlAttr constraint_hpd_common_memberOfSyntax memberOf attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'memberof' HcPracticeLocationAttrTemplate HcPracticeLocationAttrTemplate core-DsmlAttr constraint_hpd_common_HcPracticeLocationSyntax HcPracticeLocation attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'hcpracticelocation' hpdCredentialAttrTemplate hpdCredentialAttrTemplate core-DsmlAttr constraint_hpd_common_hpdCredentialSyntax hpdCredential attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'hpdcredential' ClinicalInformationContactAttrTemplate ClinicalInformationContactAttrTemplate core-DsmlAttr constraint_hpd_common_ClinicalInformationContactSyntax ClinicalInformationContact attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'clinicalinformationcontact' hpdProviderLanguageSupportedAttrTemplate hpdProviderLanguageSupportedAttrTemplate core-DsmlAttr constraint_hpd_common_hpdProviderLanguageSupportedSyntax Values for the hpdProviderLanguageSupported attribute type MUST conform to the Accept-Language header field defined in [RFC2068] (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^[a-zA-Z\\-:]+(;q=(1|0\\.[0-9]+))?(,[a-zA-Z\\-\\s]*(;q=(1|0\\.[0-9]+))?)*')) ERROR constraint_hpd_common_hpdProviderLanguageSupportedException Values for the hpdProviderLanguageSupported attribute type MUST conform to the Accept-Language header field defined in [RFC2068] with one Exception: the sequence 'Accept-Language' ':' should be omitted (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | not self.matches(val,'Accepted-Language.*')) WARNING self.name.toLowerCase() = 'hpdproviderlanguagesupported' HcSpecialisationAttrTemplate HcSpecialisationAttrTemplate core-DsmlAttr constraint_hpd_common_HcSpecialisationSyntax HcSpecialisation attribute SHALL be formatted as follows : Issuing Authority:Code System:Code:CodeDisplayName (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '^[0-2](\\.(0|[1-9][0-9]*))*(:.+){3}')) ERROR self.name.toLowerCase() = 'hcspecialisation' PostalAddressAttrTemplate PostalAddressAttrTemplate core-DsmlAttr constraint_hpd_common_PostalAddressAddrMandatory If an address is included, then the addr is required (see section 3.58.4.1.2.2.1 Object Classes) self.value->forAll(val: String | self.matches(val, '.*(addr=){1}.*', true) ) ERROR constraint_hpd_common_PostalAddressStatus Valid values for postal address status are Primary, Secondary, Inactive (see Table 3.58.4.1.2.3-1: Status Code Category Values) self.value->forAll(val: String | self.matches(val, '.*(status=Primary|status=Secondary|status=Inactive){1}.*', true) xor not self.matches(val, '.*(status=){1}.*', true) ) ERROR constraint_hpd_common_PostalAddressSyntax PostalAddress syntax SHALL be dstring *( "$" dstring) and enforce format of "key=value" self.value->forAll(val: String | self.matches(val, '[^=\\$]*={1}[^=\\$]*(\\${1}[^=\\$]*={1}[^=\\$]*)*', true) ) ERROR self.name.toLowerCase() = 'hpdproviderlegaladdress' or self.name.toLowerCase() = 'hpdproviderbillingaddress' or self.name.toLowerCase() = 'hpdprovidermailingaddress' or self.name.toLowerCase() = 'hpdproviderpracticeaddress' hpdProviderLegalAddressAttrTemplate hpdProviderLegalAddressAttrTemplate core-DsmlAttr constraint_hpd_common_hpdProviderLegalAddressValueCard hpdProviderLegalAddress attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-1 HPDProvider Optional Attributes, CP-ITI-601-04) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdproviderlegaladdress' hpdHasAServiceAttrTemplate hpdHasAServiceAttrTemplate core-DsmlAttr constraint_hpd_common_hpdHasAServiceSyntax hpdHasAService attribute SHALL be formatted as a distinguished name (DN) (see Table 3.58.4.1.2.2.1-1: HPDProvider Optional Attributes, CP-ITI-601-04) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'hpdhasaservice' hpdMemberIdAttrTemplate hpdMemberIdAttrTemplate core-DsmlAttr constraint_hpd_common_hpdMemberIdValueCard hpdMemberId attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdmemberid' hpdHasAProviderAttrTemplate hpdHasAProviderAttrTemplate core-DsmlAttr constraint_hpd_common_hpdHasAProviderSyntax hpdHasAProvider attribute SHALL be formatted as a distinguished name (DN) (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership MandatoryAttributes) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR constraint_hpd_common_hpdHasAProviderValueCard hpdHasAProvider attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdhasaprovider' hpdHasAnOrgAttrTemplate hpdHasAnOrgAttrTemplate core-DsmlAttr constraint_hpd_common_hpdHasAnOrgSyntax hpdHasAnOrg attribute SHALL be formatted as a distinguished name (DN) (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership MandatoryAttributes) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR constraint_hpd_common_hpdHasAnOrgValueCard hpdHasAnOrg attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdhasanorg' hpdServiceIdAttrTemplate hpdServiceIdAttrTemplate core-DsmlAttr constraint_hpd_common_hpdServiceIdValueCard hpdServiceId attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-6: HPDElectronicService Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdserviceid' hpdServiceAddressAttrTemplate hpdServiceAddressAttrTemplate core-DsmlAttr constraint_hpd_common_hpdServiceAddressValueCard hpdServiceAddress attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-6: HPDElectronicService Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdserviceaddress' hpdCertificateAttrTemplate hpdCertificateAttrTemplate core-DsmlAttr constraint_hpd_common_hpdCertificateSyntax LDAP syntax to be used for hpdCertificate attribute is Binary (see Table 3.58.4.1.2.2.1-6 HPDElectronicService Mandatory Attributes) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'hpdcertificate' objectClassAttrTemplate objectClassAttrTemplate core-DsmlAttr constraint_hpd_common_objectClassValueCard The objectClass attribute is present in every entry, with at least two values. (see RFC 2256 section 5.1 objectClass) self.value->size() >= 2 ERROR constraint_hpd_common_objectClassValue objectClass attribute SHALL be present in every entry, one of the values is either "top" or "alias" (see RFC 2256 section 5.1 objectClass) self.value->select(val: String | val = 'top' or val='alias')->size() = 1 ERROR self.name.toLowerCase() = 'objectclass' GeneralizedTimeAttrTemplate GeneralizedTimeAttrTemplate core-DsmlAttr constraint_hpd_common_GeneralizedTimeSyntax attributes of type date SHALL be formatted as a Generalized time and the time zone MUST be specified (see RFC 2252 section 6.14) self.value->forAll(val : String | self.matches(val, '\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[123])((0[0-9]|[0-5][0-9])(0[0-9]|[0-5][0-9])?)?([,\\.]\\d*)?([+\\-]\\d{4}|Z)')) ERROR constraint_hpd_common_GeneralizedTimeTimeZone It is strongly recommended that GMT time be used. (see RFC 2252 section 6.14. Generalized Time) self.value->forAll(val: String | self.matches(val, '.*Z$')) WARNING self.name.toLowerCase() = 'createtimestamp' or self.name.toLowerCase() = 'modifytimestamp' or self.name.toLowerCase() = 'credentialissuedate' or self.name.toLowerCase() = 'credentialrenewaldate' nameDatatypeTemplate nameDatatypeTemplate core-DsmlAttr constraint_hpd_common_hl7XPNdatatype LDAP ‘name’ attributes marked with a language tag of “lang-x-ihe” shall be encoded using the HL7 XPN Data Type. UTF-8 shall be used for any characters outside ASCII. (see 3.24.5.2.3.1 Use of language tag and HL7 Name Data Type (XPN)) self.value->forAll(val: String | if self.matches(val, '^(lang-x-ihe){1}.*') then self.matches(val, '^(lang-x-ihe:){1}[^\\^]*(\\^[^\\^]*){1,13}') else self.matches(val, '*.') endif ) ERROR self.matches(self.name, '.*(;lang-x-ihe){1}') providerInformationFeedRequest feedRequestSpec feedRequestSpec core-BatchRequest constraint_hpd_feedRequestAllowedElements A Provider Information Feed Request only supports the following elements: addRequest, delRequest, modDNRequest and modifyRequest self.abandonRequest->size() = 0 and self.compareRequest->size() = 0 and self.extendedRequest->size() = 0 and self.searchRequest->size() = 0 ERROR LDAPResult LDAPResultSpec LDAPResultSpec core-LDAPResult constraint_hpd_ldapResult_resultCodeValue The resultCode for an acknowledgement shall be reported as '0' to imply acknowledgement. (see Session 3.59.4.2.2 Message Semantics) not self.resultCode.oclIsUndefined() and not self.resultCode.code.oclIsUndefined() and self.resultCode.code = 0 ERROR constraint_hpd_ldapResult_errorMessageCard The response shall not contain any errorMessage element as any processing errors are not in scope. (see Section 3.59.4.2.2: Message Semantics) self.errorMessage.oclIsUndefined() ERROR modifyDNRequest ModifyDNRequestSpec ModifyDNRequestSpec core-ModifyDNRequest constraint_hpd_modifyDNRequest_dnSyntax dn attribute SHALL be formatted as a Distinguish name string. self.matches(self.dn.oclAsType(String),'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$') ERROR constraint_hpd_modifyDNRequest_dnValidOu Nodes that are subordinates to dc=HPD are ou=HCProfessional, ou=HCRegulatedOrganization and ou=Relationship (see section 3.58.4.1.2.1 HPD Schema Structure) self.matches(self.dn.oclAsType(String), '.*(ou=(HCProfessional|HCRegulatedOrganization|Relationship)){1}.*') ERROR providerInformationQueryRequest queryRequestSpec queryRequestSpec core-BatchRequest constraint_hpd_queryRequestAllowedElements A Provider Information Query Request can only contains searchRequest elements. self.abandonRequest->size() = 0 and self.addRequest->size() = 0 and self.compareRequest->size() = 0 and self.delRequest->size() = 0 and self.extendedRequest->size() = 0 and self.modDNRequest->size() = 0 and self.modifyRequest->size() = 0 ERROR modifyRequest ModifyRequestSpec ModifyRequestSpec core-ModifyRequest constraint_hpd_modifyRequest_dnSyntax dn attribute SHALL be formatted as a Distinguish name string. self.matches(self.dn.oclAsType(String),'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$') ERROR constraint_hpd_modifyRequest_dnValidOu Nodes that are subordinates to dc=HPD are ou=HCProfessional, ou=HCRegulatedOrganization and ou=Relationship (see section 3.58.4.1.2.1 HPD Schema Structure) self.matches(self.dn.oclAsType(String), '.*(ou=(HCProfessional|HCRegulatedOrganization|Relationship)){1}.*') ERROR constraint_hpd_modifyRequest_modifyTimestampCard modifyTimestamp is an operation attribute that LDAP directory server maintains to capture the time when an entry was modified self.modification->select(modif: DsmlModification | modif.name.toLowerCase() = 'modifytimestamp')->size()=0 ERROR constraint_hpd_modifyRequest_createTimestampCard createTimestamp is an operation attribute that LDAP directory server maintains to capture the time when an entry was created self.modification->select(modif: DsmlModification | modif.name.toLowerCase() = 'createtimestamp')->size()=0 ERROR modifHpdProviderStatusAttrTemplate modifHpdProviderStatusAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdProviderStatusValueCard hpdProviderStatus attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdproviderstatus' modifUidAttrTemplate modifUidAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_uidValueCard uid attribute SHALL be single valued (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->size() <= 1 ERROR constraint_hpd_modifyRequest_uidSyntax uid attribute SHALL be formatted using the RDN Format as defined by ISO21091 section 9.2: IssuingAuhorityName:ID (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '.+[:]{1}.+')) ERROR self.name.toLowerCase() = 'uid' modifDisplayNameAttrTemplate modifDisplayNameAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_displayNameValueCard displayName attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.matches(self.name.toLowerCase(),'displayname((;lang\\-){1}.+)?') modifTitleAttrTemplate modifTitleAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_titleValueCard title attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.matches(self.name.toLowerCase(),'title((;lang\\-){1}.+)?') modifGenderAttrTemplate modifGenderAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_genderValueCard gender attribute SHALL be single valued (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR constraint_hpd_modifyRequest_genderValue gender attribute SHALL follow the Natural Person auxilary class as defined in RFC 2985, that means that only Male (M or m) and Female (F or f) values are allowed. (see Table 3.58.4.1.2.2.2-1) self.value->forAll(val : String | val='M' or val='m' or val='F' or val='f') ERROR self.name.toLowerCase() = 'gender' modifHpdMedicalRecordsDeliveryEmailAddressAttrTemplate modifHpdMedicalRecordsDeliveryEmailAddressAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdMedicalRecordsDeliveryEmailAddressValueCard hpdMedicalRecordsDeliveryEmailAddress attribute SHALL be single valued (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdmedicalrecordsdeliveryemailaddress' modifBusinessCategoryAttrTemplate modifBusinessCategoryAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_businessCategoryCardValue businessCategory attribute SHALL be single valued (see Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'businesscategory' modifCredentialTypeAttrTemplate modifCredentialTypeAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_credentialTypeValueCard credentialType attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialtype' modifCredentialNameAttrTemplate modifCredentialNameAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_credentialNameValueCard credentialName attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->size() <= 1 ERROR constraint_hpd_modifyRequest_credentialNameSyntax credentialName attribute SHALL follow the ISO21091 naming format as that of the HCStandardRole or credential@Locality (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->forAll(val : String | self.matches(val,'.+[@]{1}.+')) ERROR self.name.toLowerCase() = 'credentialname' modifCredentialNumberAttrTemplate modifCredentialNumberAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_credentialNumberValueCard credentialNumber attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->size() <= 1 ERROR constraint_hpd_modifyRequest_credentialNumberSyntax credentialNumber attribute follows the ISO21091 UID format: Issuing Authority OID: ID (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.value->forAll(val : String | self.matches(val, '^[0-2](\\.(0|[1-9][0-9]*))*[:]{1}.+')) ERROR self.name.toLowerCase() = 'credentialnumber' modifCredentialDescriptionAttrTemplate modifCredentialDescriptionAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_credentialDescriptionValueCard credentialDescription attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialdescription' modifCredentialIssueDateAttrTemplate modifCredentialIssueDateAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_credentialIssueDateValueCard credentialIssueDate attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialissuedate' modifCredentialRenewalDateAttrTemplate modifCredentialRenewalDateAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_credentialRenewalDateValueCard credentialRenewalDate attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'credentialrenewaldate' modifCredentialStatusAttrTemplate modifCredentialStatusAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_credentialStatusValueCard credentialStatus attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-3: HPDProviderCredential Optional Attributes) self.value->size() <= 1 ERROR constraint_hpd_modifyRequest_credentialStatusValue Valid values for credentialStatus attribute are Active, Inactive, Revoked and Suspended (see Table 3.58.4.1.2.3-1: Status Code Category Values) self.value->forAll(val : String | val = 'Active' or val = 'Inactive' or val = 'Revoked' or val = 'Suspended' ) ERROR self.name.toLowerCase() = 'credentialstatus' modifHcIdentifierAttrTemplate modifHcIdentifierAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_HcIdentifierValue HcIdentifier SHALL be formatted as defined by ISO 21091 (IssuingAuthority:Type:ID:Status) where valid values for Status are Active, Inactive, Revoked and Suspended (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping, 3.58.4.1.2.2.3-1: Organizational Provider Mapping and 3.58.4.1.2.3-1: Status Code Category Values) self.value->forAll(val : String | self.matches(val, '^[0-2](\\.(0|[1-9][0-9]*))*(:.+){2}:(Active|Inactive|Revoked|Suspended)')) ERROR self.name.toLowerCase() = 'hcidentifier' modifUserSMIMECertificateAttrTemplate modifUserSMIMECertificateAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_userSMIMECertificateSyntax LDAP Syntax to be used for userSMIMECertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'usersmimecertificate' modifHcSigningCertificateAttrTemplate modifHcSigningCertificateAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_HcSigningCertificateSyntax LDAP Syntax to be used for hcSigningCertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'hcsigningcertificate' modifUserCertificateAttrTemplate modifUserCertificateAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_userCertificateSyntax LDAP Syntax to be used for userCertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'usercertificate' modifHcOrganizationCertificateAttrTemplate modifHcOrganizationCertificateAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_HcOrganizationCertificateSyntax LDAP Syntax to be used for HcSigningCertificate attribute SHALL be Binary (see Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'hcorganizationcertificates' modifTelephoneNumberAttrTemplate modifTelephoneNumberAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_telephoneNumberSyntax telephoneNumber attribute SHALL be representing using the E.123 notation. (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping and 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '((\\+|[0-9]*|\\([0-9]+\\))[\\s\\-\\.0-9]*/?)*')) ERROR self.name.toLowerCase() = 'telephonenumber' modifMobileAttrTemplate modifMobileAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_mobileSyntax mobile attribute SHALL be representing using the E.123 notation. (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '((\\+|[0-9]*|\\([0-9]+\\))[\\s\\-\\.0-9]*/?)*')) ERROR self.name.toLowerCase() = 'mobile' modifPagerAttrTemplate modifPagerAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_pagerSyntax pager attribute SHALL be representing using the E.123 notation. (see Tables 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val, '((\\+|[0-9]*|\\([0-9]+\\))[\\s\\-\\.0-9]*/?)*')) ERROR self.name.toLowerCase() = 'pager' modifMemberOfAttrTemplate modifMemberOfAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_memberOfSyntax memberOf attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'memberof' modifHcPracticeLocationAttrTemplate modifHcPracticeLocationAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_HcPracticeLocationSyntax HcPracticeLocation attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'hcpracticelocation' modifHpdCredentialAttrTemplate modifHpdCredentialAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdCredentialSyntax hpdCredential attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'hpdcredential' modifClinicalInformationContactAttrTemplate modifClinicalInformationContactAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_ClinicalInformationContactSyntax ClinicalInformationContact attribute SHALL be formatted as a distinguish name (DN) (see Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'clinicalinformationcontact' modifHpdProviderLanguageSupportedAttrTemplate modifHpdProviderLanguageSupportedAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdProviderLanguageSupportedSyntax Values for the hpdProviderLanguageSupported attribute type MUST conform to the Accept-Language header field defined in [RFC2068] (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val,'^[a-zA-Z\\-:]+(;q=(1|0\\.[0-9]+))?(,[a-zA-Z\\-\\s]*(;q=(1|0\\.[0-9]+))?)*')) ERROR constraint_hpd_modifyRequest_hpdProviderLanguageSupportedException Values for the hpdProviderLanguageSupported attribute type MUST conform to the Accept-Language header field defined in [RFC2068] with one Exception: the sequence 'Accept-Language' ':' should be omitted (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | not self.matches(val,'Accepted-Language.*')) WARNING self.name.toLowerCase() = 'hpdproviderlanguagesupported' modifHcSpecialisationAttrTemplate modifHcSpecialisationAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_HcSpecialisationSyntax HcSpecialisation attribute SHALL be formatted as follows : Issuing Authority:Code System:Code:CodeDisplayName (see Table 3.58.4.1.2.2.2-1: Individual Provider Mapping and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.value->forAll(val : String | self.matches(val, '^[0-2](\\.(0|[1-9][0-9]*))*(:.+){3}')) ERROR self.name.toLowerCase() = 'hcspecialisation' modifPostalAddressAttrTemplate modifPostalAddressAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_PostalAddressAddrMandatory If an address is included, then the addr is required (see section 3.58.4.1.2.2.1 Object Classes) self.value->forAll(val: String | self.matches(val, '.*(addr=){1}.*', true) ) ERROR constraint_hpd_modifyRequest_PostalAddressStatus Valid values for postal address status are Primary, Secondary, Inactive (see Table 3.58.4.1.2.3-1: Status Code Category Values) self.value->forAll(val: String | self.matches(val, '.*(status=Primary|status=Secondary|status=Inactive){1}.*', true) xor not self.matches(val, '.*(status=){1}.*', true) ) ERROR constraint_hpd_modifyRequest_PostalAddressSyntax PostalAddress syntax SHALL be dstring *( "$" dstring) and enforce format of "key=value" self.value->forAll(val: String | self.matches(val, '[^=\\$]*={1}[^=\\$]*(\\${1}[^=\\$]*={1}[^=\\$]*)*', true) ) ERROR self.name.toLowerCase() = 'hpdproviderlegaladdress' or self.name.toLowerCase() = 'hpdproviderbillingaddress' or self.name.toLowerCase() = 'hpdprovidermailingaddress' or self.name.toLowerCase() = 'hpdproviderpracticeaddress' modifHpdProviderLegalAddressAttrTemplate modifHpdProviderLegalAddressAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdProviderLegalAddressValueCard hpdProviderLegalAddress attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-1 HPDProvider Optional Attributes, CP-ITI-601-04) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdproviderlegaladdress' modifHpdHasAServiceAttrTemplate modifHpdHasAServiceAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdHasAServiceSyntax hpdHasAService attribute SHALL be formatted as a distinguished name (DN) (see Table 3.58.4.1.2.2.1-1: HPDProvider Optional Attributes, CP-ITI-601-04) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR self.name.toLowerCase() = 'hpdhasaservice' modifHpdMemberIdAttrTemplate modifHpdMemberIdAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdMemberIdValueCard hpdMemberId attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdmemberid' modifHpdHasAProviderAttrTemplate modifHpdHasAProviderAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdHasAProviderSyntax hpdHasAProvider attribute SHALL be formatted as a distinguished name (DN) (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership MandatoryAttributes) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR constraint_hpd_modifyRequest_hpdHasAProviderValueCard hpdHasAProvider attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdhasaprovider' modifHpdHasAnOrgAttrTemplate modifHpdHasAnOrgAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdHasAnOrgSyntax hpdHasAnOrg attribute SHALL be formatted as a distinguished name (DN) (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership MandatoryAttributes) self.value->forAll(val : String | self.matches(val,'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$')) ERROR constraint_hpd_modifyRequest_hpdHasAnOrgValueCard hpdHasAnOrg attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdhasanorg' modifHpdServiceIdAttrTemplate modifHpdServiceIdAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdServiceIdValueCard hpdServiceId attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-6: HPDElectronicService Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdserviceid' modifHpdServiceAddressAttrTemplate modifHpdServiceAddressAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdServiceAddressValueCard hpdServiceAddress attribute SHALL be single valued (see Table 3.58.4.1.2.2.1-6: HPDElectronicService Mandatory Attributes) self.value->size() <= 1 ERROR self.name.toLowerCase() = 'hpdserviceaddress' modifHpdCertificateAttrTemplate modifHpdCertificateAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_hpdCertificateSyntax LDAP syntax to be used for hpdCertificate attribute is Binary (see Table 3.58.4.1.2.2.1-6 HPDElectronicService Mandatory Attributes) self.value->forAll(val : String | self.matches(val, '([0-9A-F]{2})*')) ERROR self.name.toLowerCase() = 'hpdcertificate' modifObjectClassAttrTemplate modifObjectClassAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_objectClassValueCard The objectClass attribute is present in every entry, with at least two values. (see RFC 2256 section 5.1 objectClass) self.value->size() >= 2 ERROR constraint_hpd_modifyRequest_objectClassValue objectClass attribute SHALL be present in every entry, one of the values is either "top" or "alias" (see RFC 2256 section 5.1 objectClass) self.value->select(val: String | val = 'top' or val='alias')->size() = 1 ERROR self.name.toLowerCase() = 'objectclass' modifGeneralizedTimeAttrTemplate modifGeneralizedTimeAttrTemplate core-DsmlModification constraint_hpd_modifyRequest_GeneralizedTimeSyntax attributes of type date SHALL be formatted as a Generalized time and the time zone MUST be specified (see RFC 2252 section 6.14) self.value->forAll(val : String | self.matches(val, '\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(0[0-9]|1[0-9]|2[123])((0[0-9]|[0-5][0-9])(0[0-9]|[0-5][0-9])?)?([,\\.]\\d*)?([+\\-]\\d{4}|Z)')) ERROR constraint_hpd_modifyRequest_GeneralizedTimeTimeZone It is strongly recommended that GMT time be used. (see RFC 2252 section 6.14. Generalized Time) self.value->forAll(val: String | self.matches(val, '.*Z$')) WARNING self.name.toLowerCase() = 'credentialissuedate' or self.name.toLowerCase() = 'credentialrenewaldate' modifNameDatatypeTemplate modifNameDatatypeTemplate core-DsmlModification constraint_hpd_modifyRequest_hl7XPNdatatype LDAP ‘name’ attributes marked with a language tag of “lang-x-ihe” shall be encoded using the HL7 XPN Data Type. UTF-8 shall be used for any characters outside ASCII. (see 3.24.5.2.3.1 Use of language tag and HL7 Name Data Type (XPN)) self.value->forAll(val: String | if self.matches(val, '^(lang-x-ihe){1}.*') then self.matches(val, '^(lang-x-ihe:){1}[^\\^]*(\\^[^\\^]*){1,13}') else self.matches(val, '*.') endif ) ERROR self.matches(self.name, '.*(;lang-x-ihe){1}') deleteRequest DelRequestSpec DelRequestSpec core-DelRequest constraint_hpd_deleteRequest_dnSyntax dn attribute SHALL be formatted as a Distinguish name string. self.matches(self.dn.oclAsType(String),'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$') ERROR constraint_hpd_deleteRequest_dnValidOu Nodes that are subordinates to dc=HPD are ou=HCProfessional, ou=HCRegulatedOrganization and ou=Relationship (see section 3.58.4.1.2.1 HPD Schema Structure) self.matches(self.dn.oclAsType(String), '.*(ou=(HCProfessional|HCRegulatedOrganization|Relationship)){1}.*') ERROR providerInformationFeedResponse feedResponseSpec feedResponseSpec core-BatchResponse constraint_hpd_feedResponseAllowedElements A Provider Information Feed Response can only contains the following elements: addResponse, delResponse, modDNResponse, modifyResponse self.authResponse->size() = 0 and self.compareResponse->size() = 0 and self.extendedResponse->size() = 0 and self.searchResponse->size() = 0 ERROR addRequest addRequestSpec addRequestSpec core-AddRequest constraint_hpd_addRequest_dnSyntax dn attribute SHALL be formatted as a Distinguish name string. self.matches(self.dn.oclAsType(String),'^(.+[=]{1}.+)([,{1}].+[=]{1}.+)*$') ERROR constraint_hpd_addRequest_dnValidOu Nodes that are subordinates to dc=HPD are ou=HCProfessional, ou=HCRegulatedOrganization and ou=Relationship (see section 3.58.4.1.2.1 HPD Schema Structure) self.matches(self.dn.oclAsType(String), '.*(ou=(HCProfessional|HCRegulatedOrganization|Relationship)){1}.*') ERROR constraint_hpd_addRequest_objectClassRequired objectClass attribute is required in each entry (see RFC 2256 section 7.1 top) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'objectclass')->size() = 1 ERROR constraint_hpd_addRequest_createTimestampCard createTimestamp is an operation attribute that LDAP directory server maintains to capture the time when an entry was created self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'createtimestamp')->size() = 0 ERROR constraint_hpd_addRequest_modifyTimestampCard modifyTimestamp is an operation attribute that LDAP directory server maintains to capture the time when an entry was modified self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'modifytimestamp')->size() = 0 ERROR addRequestForHCProfessionalTemplate addRequestForHCProfessionalTemplate core-AddRequest constraint_hpd_addRequestHCProfessional_uidRequired When the addRequest describes an Individual Provider, the uid attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'uid')->size() = 1 ERROR constraint_hpd_addRequestHCProfessional_HcIdentifierRequired When the addRequest describes an Individual Provider, the HcIdentifier attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'hcidentifier')->size() = 1 ERROR constraint_hpd_addRequestHCProfessional_HcProfessionRequired When the addRequest describes an Individual Provider, the HcProfession attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'hcprofession')->size() = 1 ERROR constraint_hpd_addRequestHCProfessional_displayNameRequired When the addRequest describes an Individual Provider, the displayName attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.attr->select(at: DsmlAttr | at.matches(at.name.toLowerCase(), 'displayname((;lang\\-){1}.+)?') )->size() = 1 ERROR constraint_hpd_addRequestHCProfessional_snRequired When the addRequest describes an Individual Provider, the sn attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.attr->select(at: DsmlAttr | at.matches(at.name.toLowerCase(),'sn((;lang\\-){1}.+)?') )->size() = 1 ERROR constraint_hpd_addRequestHCProfessional_cnRequired When the addRequest describes an Individual Provider, the cn attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.attr->select(at: DsmlAttr | at.matches(at.name.toLowerCase(), 'cn((;lang\\-){1}.+)?') )->size() = 1 ERROR constraint_hpd_addRequestHCProfessional_HcRegistrationStatusRequired When the addRequest describes an Individual Provider, the HcRegistrationStatus attribute is required (see ISO 21091 section 8.1.3 Healthcare Professional) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'hcregistrationstatus')->size() = 1 ERROR constraint_hpd_addRequestHCProfessional_descriptionRequired When the addRequest describes an Individual Provider, the description attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.2-1: Individual Provider Mapping) self.attr->select(at: DsmlAttr | at.matches(at.name.toLowerCase(), 'description') )->size() = 1 ERROR self.matches(self.dn.oclAsType(String), '.*(ou=HCProfessional){1}.*') addRequestForHCRegulatedOrganizationTemplate addRequestForHCRegulatedOrganizationTemplate core-AddRequest constraint_hpd_addRequestHCRegulatedOrganization_uidRequired When the addRequest describes an Organizational Provider, the uid attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.attr->select(at: DsmlAttr | at.name.toLowerCase()='uid')->size() = 1 ERROR constraint_hpd_addRequestHCRegulatedOrganization_HcIdentifier When the addRequest describes an Organizational Provider, the HcIdentifier attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'hcidentifier')->size() = 1 ERROR constraint_hpd_addRequestHCRegulaedOrganization_HcRegisteredNameRequired When the addRequest describes an Organizational Provider, the HcRegisteredName attribute is required (see 3.59.1 and Table 3.58.4.1.2.2.3-1: Organizational Provider Mapping) self.attr->select(at: DsmlAttr | at.name.toLowerCase()='hcregisteredname')->size() = 1 ERROR constraint_hpd_addRequestHCRegulatedOrganization_oRequired HCRegulatedOrganization SHALL have an o attribute (RFC 2556 section 7.5 describing Organization object class) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'o')->size()=1 ERROR self.matches(self.dn.oclAsType(String), '.*(ou=HCRegulatedOrganization){1}.*') addRequestForRelationshipTemplate addRequestForRelationshipTemplate core-AddRequest constraint_hpd_addRequestRelationship_cnRequired When the addRequest describes a relationship, the cn attribute is required (see ISO 21021:2013, section B.4 GroupOfNames) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'cn')->size() = 1 ERROR constraint_hpd_addRequestRelationship_memberRequired When the addRequest describes a relationship, the member attribute is required (see ISO 21021:2013, section B.4 GroupOfNames) self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'member')->size() = 1 ERROR constraint_hpd_addRequestRelationship_groupOfNamesObjectClass Relationships in HPD are represented by LDAP objects using the groupOfNames class (see section 3.58.4.1.2.2.4 Relationships) self.attr->select(at: DsmlAttr | at.name.toLowerCase()='objectclass' and at.value->select(val: String | val.toLowerCase() = 'groupofnames' )->size() = 1 )->size() = 1 ERROR self.matches(self.dn.oclAsType(String), '.*(ou=Relationship){1}.*') addRequestForHPDProviderCredentialTemplate addRequestForHPDProviderCredentialTemplate core-AddRequest constraint_hpd_addRequestHPDProviderCredential_credentialTypeMandatory credentialType is a mandatory attribute of HPDProviderCredential object class. (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name='credentialType' ) ERROR constraint_hpd_addRequestHPDProviderCredential_credentialNameMandatory credentialName is a mandatory attribute of HPDProviderCredential object class. (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name='credentialName' ) ERROR constraint_hpd_addRequestHPDProviderCredential_credentialNumberMandatory credentialNumber is a mandatory attribute of HPDProviderCredential object class. (see Table 3.58.4.1.2.2.1-2: HPDProviderCredential Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name='credentialNumber' ) ERROR self.attr->select(at: DsmlAttr |at.name='objectClass' and at.value->select(val: String | val='HPDProviderCredential')->size() > 0)->size() > 0 addRequestForHPDProviderMembershipTemplate addRequestForHPDProviderMembershipTemplate core-AddRequest constraint_hpd_addRequestForHPDProviderMembership_hpdMemberIdMandatory hpdMemberId is a mandatory attribute of HPDProviderMembership object class. (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name = 'hpdMemberId' ) ERROR constraint_hpd_addRequestForHPDProviderMembership_hpdHasAProviderMandatory hpdHasAProvider is a mandatory attribute of HPDProviderMembership object class. (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name='hpdHasAProvider' ) ERROR constraint_hpd_addRequestForHPDProviderMembership_hpdHasAnOrgMandatory hpdHasAnOrg is a mandatory attribute of HPDProviderMembership object class. (see Table 3.58.4.1.2.2.1-4: HPDProviderMembership Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name='hpdHasAnOrg' ) ERROR self.attr->select(at: DsmlAttr |at.name='objectClass' and at.value->select(val: String | val='HPDProviderMembership')->size() > 0)->size() > 0 addRequestForHPDElectronicServiceTemplate addRequestForHPDElectronicServiceTemplate core-AddRequest constraint_hpd_addRequestForHPDElectronicService_hpdServiceIdMandatory hpdServiceId is a mandatory attribute of HDPElectronicService object class. (see Table 3.58.4.1.2.2.1-6: HPDElectronicService Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name='hpdServiceId' ) ERROR constraint_hpd_addRequestForHPDElectronicService_hpdServiceAddressMandatory hpdServiceAddress is a mandatory attribute of HPDElecronicService object class. (see Table 3.58.4.1.2.2.1-6: HPDElectronicService Mandatory Attributes) self.attr->one(at: DsmlAttr | at.name='hpdServiceAddress' ) ERROR self.attr->select(at: DsmlAttr |at.name='objectClass' and at.value->select(val: String | val='HPDElectronicService')->size() > 0)->size() > 0