Provider Last Name (sn) MUST be Single-valued OCL self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'sn' and at.value-> size() = 1)->size() = 1 Value of attributes HCProfessional.HcProfession and HCProfessional.HcSpecialisation must be provided in the following format : BAG:<CodeSystem>:<Code>[:<DisplayName>] OCL self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'hcprofession').value->forAll(hcprofession : String | self.matches(hcprofession, '^BAG:[^:]*:[^:]*(:[^:]*)?') and let hcprofession2 : String = hcprofession.substring(5, hcprofession.size()) in let hcprofession3 : String = hcprofession2.substring(hcprofession2.indexOf(':') + 1,hcprofession2.size()) in ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.1.3', hcprofession3, hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) and ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.1.3', hcprofession3.substring(1, hcprofession3.indexOf(':') - 1), hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) ) and self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'hcspecialisation').value->forAll(hcprofession : String | self.matches(hcprofession, '^BAG:[^:]*:[^:]*(:[^:]*)?') and let hcprofession2 : String = hcprofession.substring(5, hcprofession.size()) in let hcprofession3 : String = hcprofession2.substring(hcprofession2.indexOf(':') + 1,hcprofession2.size()) in ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.18', hcprofession3, hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) and ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.18', hcprofession3.substring(1, hcprofession3.indexOf(':') - 1), hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) ) For "HPD Organizational provider" the parameter "Org Type" (businessCategory) is required OCL self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'businesscategory')->size() > 0 At least one value for hcidentifier must start with "RefData:OID:". OCL self.attr->forAll( attribute : DsmlAttr | attribute.name.toLowerCase() = 'hcidentifier' implies ( attribute.value->size() > 0 and (attribute.value->select(oid: String | self.matches(oid.toLowerCase(), '^refdata:oid:.*'))->size() > 0 ) ) ) Value of attributes HCRegulatedOrganization.HcSpecialisation and HCRegulatedOrganization.businessCategory must be provided in the following format : BAG:<CodeSystem>:<Code>[:<DisplayName>] OCL self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'businesscategory').value->forAll(hcprofession : String | self.matches(hcprofession, '^BAG:[^:]*:[^:]*(:[^:]*)?') and let hcprofession2 : String = hcprofession.substring(5, hcprofession.size()) in let hcprofession3 : String = hcprofession2.substring(hcprofession2.indexOf(':') + 1,hcprofession2.size()) in ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.11', hcprofession3, hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) and ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.11', hcprofession3.substring(1, hcprofession3.indexOf(':') - 1), hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) ) and self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'hcspecialisation').value->forAll(hcprofession : String | self.matches(hcprofession, '^BAG:[^:]*:[^:]*(:[^:]*)?') and let hcprofession2 : String = hcprofession.substring(5, hcprofession.size()) in let hcprofession3 : String = hcprofession2.substring(hcprofession2.indexOf(':') + 1,hcprofession2.size()) in ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.18', hcprofession3, hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) and ( self.matches(hcprofession, '^BAG:[^:]*:[^:]*:[^:]*') implies CommonOperationsStatic::matchesValueSet('2.16.756.5.30.1.127.3.10.1.18', hcprofession3.substring(1, hcprofession3.indexOf(':') - 1), hcprofession2.substring(1, hcprofession2.indexOf(':') - 1).toLowerCase(), null, null) ) ) For "HPD Organizational provider" the parameter "Organization known names" (O) is required OCL self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'o')->size() > 0 When the addRequest describes a relationship, the owner attribute is required OCL self.attr->select(at: DsmlAttr | at.name.toLowerCase() = 'owner')->size() > 0 The searchRequest is supported on the CPI root or one of its child elements: ou=CHCommunity or ou=CHEndpoint. OCL self.matches(self.dn.oclAsType(String).toLowerCase(),'.*ou=chcommunity,dc=cpi.*') or self.matches(self.dn.oclAsType(String).toLowerCase(),'.*ou=chendpoint,dc=cpi.*') or self.matches(self.dn.oclAsType(String).toLowerCase(),'.*dc=cpi.*') The CPI base distinguished name / directory root is dc=CPI,o=BAG,c=CH. OCL self.matches(self.dn.oclAsType(String).toLowerCase(),'.*,dc=cpi,o=bag,c=ch') Each community of object class “CHCommunity” has attributes that reference the corresponding gateway, assertion provider or authorization decision elements in the organisational unit “CHEndpoint”. Furthermore, each gateway element is prefixed with the shcIssuerName of its community. OCL self.matches(self.dn.oclAsType(String).toLowerCase(),'^uid=.+:.+') implies ( self.matches(self.dn.oclAsType(String).toLowerCase(),'.*ou=chcommunity,dc=cpi.*') and CommonOperationsStatic::matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.7', self.dn.oclAsType(String).toLowerCase().substring(self.dn.oclAsType(String).indexOf(':') + 1, self.dn.oclAsType(String).indexOf(',') - 1)) ) The defined attributes for the CHCommunity and CHEndpoint object classes are listed in Appendix B. LDAP Schema Overview OCL not(self.name.oclIsUndefined()) and( self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.2', self.name.toLowerCase()) or self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.3', self.name.toLowerCase()) ) The defined attributes for the CHCommunity and CHEndpoint object classes are listed in Appendix B. LDAP Schema Overview OCL not(self.name.oclIsUndefined()) and( self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.2', self.name.toLowerCase()) or self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.3', self.name.toLowerCase()) ) The defined attributes for the CHCommunity ad CHEndpoint object classes are listed in Appendix B. LDAP Schema Overview OCL not(self.name.oclIsUndefined()) and( self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.2', self.name.toLowerCase()) or self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.3', self.name.toLowerCase()) ) The defined attributes for the CHCommunity and CHEndpoint object classes are listed in Appendix B. LDAP Schema Overview OCL not(self.name.oclIsUndefined()) and( self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.2', self.name.toLowerCase()) or self.matchesCodeToValueSet('1.3.6.1.4.1.12559.11.25.1.15.3', self.name.toLowerCase()) ) The only DSML element supported is the “searchRequest” element OCL 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