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