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