From caee97732083b5f73cf58cc30c1e18fab77dc73b Mon Sep 17 00:00:00 2001 From: VHofman <vincent.hofman@kereval.com> Date: Thu, 14 Mar 2024 17:17:45 +0100 Subject: [PATCH] Add swiss mCSD validation profiles --- ...nization-GetRequest-ValidationProfile.json | 390 ++++++++++++++++++ ...titioner-GetRequest-ValidationProfile.json | 390 ++++++++++++++++++ ...onerRole-GetRequest-ValidationProfile.json | 387 +++++++++++++++++ EHS/CH_mCSD/README.md | 107 +++++ .../CH-mCSD - 010 - valid - with name.txt | 8 + 5 files changed, 1282 insertions(+) create mode 100644 EHS/CH_mCSD/CH-ITI-90-Organization-GetRequest-ValidationProfile.json create mode 100644 EHS/CH_mCSD/CH-ITI-90-Practitioner-GetRequest-ValidationProfile.json create mode 100644 EHS/CH_mCSD/CH-ITI-90-PractitionerRole-GetRequest-ValidationProfile.json create mode 100644 EHS/CH_mCSD/README.md diff --git a/EHS/CH_mCSD/CH-ITI-90-Organization-GetRequest-ValidationProfile.json b/EHS/CH_mCSD/CH-ITI-90-Organization-GetRequest-ValidationProfile.json new file mode 100644 index 0000000..c3e0a95 --- /dev/null +++ b/EHS/CH_mCSD/CH-ITI-90-Organization-GetRequest-ValidationProfile.json @@ -0,0 +1,390 @@ +{ + "profileType": "HTTPREQUEST", + "id": "CH_ITI-90_Organization_GET_mCSD_Query", + "name": "CH_ITI-90_Organization_HTTP_GET_Request", + "description": "Validation Profile for validating a Get mCSD Query.", + "context": "EPR", + "assertions": [ + { + "selector": "request.method", + "id": "GETMethodChecking", + "description": "HTTP method shall be GET", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "FIXEDVALUE", + "fixedValue": "GET" + } + ] + }, + { + "selector": "request.version", + "id": "HTTP1VersionChecking", + "description": "The HTTP version shall be HTTP/1.1", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "FIXEDVALUE", + "fixedValue": "HTTP/1.1" + } + ] + }, + { + "selector": "request.uri.path", + "id": "URIRegexChecking", + "description": "URI path of the request shall be followed by the mCSD resource", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(\\S)+(Organization|Practitioner|PractitionerRole|Location|HealthcareService|OrganizationAffiliation|Endpoint)$" + } + ] + }, + { + "selector": "request.headers('Host').values", + "id": "HostChecking", + "description": "Host Shall be a server name; Regex: ^(http[s]?:\\/\\/)?[a-zA-Z0-9.\\-\\/]+(:(\\d)+)?$", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(http[s]?:\\/\\/)?[a-zA-Z0-9.\\-\\/]+(:(\\d)+)?$" + } + ] + }, + { + "selector": "request.headers('Authorization').values", + "id": "Authorization_parameter_presence", + "description": "The Authorization parameter is mandatory.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "OCCURRENCE", + "minOccurrence": 1, + "maxOccurrence": 1 + } + ] + }, + { + "selector": "request.headers('Authorization').values", + "id": "Authorization_parameter_value", + "description": "Authorization parameter's value SHALL be Bearer, followed by the token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^Bearer\\ [-a-zA-Z0-9._~+\\/]+=*$" + } + ] + },{ + "selector": "request.headers('traceparent').values", + "id": "traceparent_parameter_presence", + "description": "The traceparent parameter is mandatory in the HTTP header.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "OCCURRENCE", + "minOccurrence": 1, + "maxOccurrence": 1 + } + ] + }, + { + "selector": "request.headers('traceparent').values", + "id": "traceparent_parameter_value", + "description": "traceparent parameter's value SHALL be as defined in fhir.ch, section tracecontext.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!f{2})([\\da-f]{2})-(?!f{32})([\\daf]{32})-(?!f{16})([\\da-f]{16})-(?!f{2})([\\da-f]{2})$" + } + ] + }, + { + "selector": "request.uri.queryParams('_id').values", + "id": "_id_parameter_presence", + "description": "_id parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "(?!.*_id=.*_id=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_id').values", + "id": "_id_parameter_value", + "description": "_id parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_id').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('_lastUpdated')", + "id": "_lastUpdated_parameter_presence", + "description": "_lastUpdated parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_lastUpdated=.*_lastUpdated=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_lastUpdated').values", + "id": "_lastUpdated_parameter_value", + "description": "_lastUpdated parameter is made of a date eventually preceded by a modifier ge or le.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_lastUpdated').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^(ge|le)?[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|1d|2[0-8]|3[01])$" + } + ] + }, + { + "selector": "request.uri.queryParams('_format').values", + "id": "_format_parameter_presence", + "description": "_format parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "(?!.*_format=.*_format=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_format').values", + "id": "_format_parameter_value", + "description": "_format parameter's value shall be either json or xml.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_format').values.size() > 0", + "checks": [ + { + "type": "CLOSEDLIST", + "values": [ + "json", + "xml" + ] + } + ] + }, + { + "selector": "request.uri.queryParams('_sort').values", + "id": "_sort_parameter_presence", + "description": "_sort parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_sort=.*_sort=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_sort').values", + "id": "_sort_parameter_value", + "description": "_sort parameter's value is made of items composed of word caracters, separated by a comma and eventually prefixed by a dash.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_sort').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "([\\w,]|(-\\w))+$" + } + ] + }, + { + "selector": "request.uri.queryParams('_count').values", + "id": "_count parameter can be used only once.", + "description": "_count parameter is a decimal.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_count=.*_count=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_count').values", + "id": "_count_parameter_value", + "description": "_count parameter is a decimal.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_count').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "\\d+$" + } + ] + }, + { + "selector": "request.uri.queryParams('active').values", + "id": "active_parameter_presence", + "description": "active parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*active=.*active=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('active').values", + "id": "active_parameter_value", + "description": "active parameter is a boolean and accept true or false values.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('active').values.size() > 0", + "checks": [ + { + "type": "CLOSEDLIST", + "values": [ + "true", + "false" + ] + } + ] + }, + { + "selector": "request.uri.queryParams('identifier').values", + "id": "identifier_parameter_presence", + "description": "identifier parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*identifier=.*identifier=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('identifier').values", + "id": "identifier_parameter_value", + "description": "identifier parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('identifier').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('name').values", + "id": "name_parameter_presence", + "description": "name parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*name=.*name=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('name').values", + "id": "name_parameter_value", + "description": "name parameter is a string.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('name').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^.+$" + } + ] + }, + { + "selector": "request.uri.queryParams('partof').values", + "id": "partof_parameter_presence", + "description": "partof parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*partof=.*partof=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('partof').values", + "id": "partof_parameter_value", + "description": "partof parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('partof').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('identifier').values", + "id": "identifier_parameter_presence", + "description": "identifier parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*identifier=.*identifier=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('type').values", + "id": "type_parameter_value", + "description": "type parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('type').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + } + ] +} \ No newline at end of file diff --git a/EHS/CH_mCSD/CH-ITI-90-Practitioner-GetRequest-ValidationProfile.json b/EHS/CH_mCSD/CH-ITI-90-Practitioner-GetRequest-ValidationProfile.json new file mode 100644 index 0000000..27c322c --- /dev/null +++ b/EHS/CH_mCSD/CH-ITI-90-Practitioner-GetRequest-ValidationProfile.json @@ -0,0 +1,390 @@ +{ + "profileType": "HTTPREQUEST", + "id": "CH_ITI-90_Practitioner_GET_mCSD_Query", + "name": "CH_ITI-90_Practitioner_HTTP_GET_Request", + "description": "Validation Profile for validating a Get mCSD Query.", + "context": "EPR", + "assertions": [ + { + "selector": "request.method", + "id": "GETMethodChecking", + "description": "HTTP method shall be GET", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "FIXEDVALUE", + "fixedValue": "GET" + } + ] + }, + { + "selector": "request.version", + "id": "HTTP1VersionChecking", + "description": "The HTTP version shall be HTTP/1.1", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "FIXEDVALUE", + "fixedValue": "HTTP/1.1" + } + ] + }, + { + "selector": "request.uri.path", + "id": "URIRegexChecking", + "description": "URI path of the request shall be followed by the mCSD resource", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(\\S)+(Organization|Practitioner|PractitionerRole|Location|HealthcareService|OrganizationAffiliation|Endpoint)$" + } + ] + }, + { + "selector": "request.headers('Host').values", + "id": "HostChecking", + "description": "Host Shall be a server name; Regex: ^(http[s]?:\\/\\/)?[a-zA-Z0-9.\\-\\/]+(:(\\d)+)?$", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(http[s]?:\\/\\/)?[a-zA-Z0-9.\\-\\/]+(:(\\d)+)?$" + } + ] + }, + { + "selector": "request.headers('Authorization').values", + "id": "Authorization_parameter_presence", + "description": "The Authorization parameter is mandatory.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "OCCURRENCE", + "minOccurrence": 1, + "maxOccurrence": 1 + } + ] + }, + { + "selector": "request.headers('Authorization').values", + "id": "Authorization_parameter_value", + "description": "Authorization parameter's value SHALL be Bearer, followed by the token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^Bearer\\ [-a-zA-Z0-9._~+\\/]+=*$" + } + ] + },{ + "selector": "request.headers('traceparent').values", + "id": "traceparent_parameter_presence", + "description": "The traceparent parameter is mandatory in the HTTP header.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "OCCURRENCE", + "minOccurrence": 1, + "maxOccurrence": 1 + } + ] + }, + { + "selector": "request.headers('traceparent').values", + "id": "traceparent_parameter_value", + "description": "traceparent parameter's value SHALL be as defined in fhir.ch, section tracecontext.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!f{2})([\\da-f]{2})-(?!f{32})([\\daf]{32})-(?!f{16})([\\da-f]{16})-(?!f{2})([\\da-f]{2})$" + } + ] + }, + { + "selector": "request.uri.queryParams('_id').values", + "id": "_id_parameter_presence", + "description": "_id parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "(?!.*_id=.*_id=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_id').values", + "id": "_id_parameter_value", + "description": "_id parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_id').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('_lastUpdated')", + "id": "_lastUpdated_parameter_presence", + "description": "_lastUpdated parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_lastUpdated=.*_lastUpdated=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_lastUpdated').values", + "id": "_lastUpdated_parameter_value", + "description": "_lastUpdated parameter is made of a date eventually preceded by a modifier ge or le.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_lastUpdated').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^(ge|le)?[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|1d|2[0-8]|3[01])$" + } + ] + }, + { + "selector": "request.uri.queryParams('_format').values", + "id": "_format_parameter_presence", + "description": "_format parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "(?!.*_format=.*_format=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_format').values", + "id": "_format_parameter_value", + "description": "_format parameter's value shall be either json or xml.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_format').values.size() > 0", + "checks": [ + { + "type": "CLOSEDLIST", + "values": [ + "json", + "xml" + ] + } + ] + }, + { + "selector": "request.uri.queryParams('_sort').values", + "id": "_sort_parameter_presence", + "description": "_sort parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_sort=.*_sort=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_sort').values", + "id": "_sort_parameter_value", + "description": "_sort parameter's value is made of items composed of word caracters, separated by a comma and eventually prefixed by a dash.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_sort').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "([\\w,]|(-\\w))+$" + } + ] + }, + { + "selector": "request.uri.queryParams('_count').values", + "id": "_count parameter can be used only once.", + "description": "_count parameter is a decimal.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_count=.*_count=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_count').values", + "id": "_count_parameter_value", + "description": "_count parameter is a decimal.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_count').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "\\d+$" + } + ] + }, + { + "selector": "request.uri.queryParams('active').values", + "id": "active_parameter_presence", + "description": "active parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*active=.*active=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('active').values", + "id": "active_parameter_value", + "description": "active parameter is a boolean and accept true or false values.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('active').values.size() > 0", + "checks": [ + { + "type": "CLOSEDLIST", + "values": [ + "true", + "false" + ] + } + ] + }, + { + "selector": "request.uri.queryParams('identifier').values", + "id": "identifier_parameter_presence", + "description": "identifier parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*identifier=.*identifier=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('identifier').values", + "id": "identifier_parameter_value", + "description": "identifier parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('identifier').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('name').values", + "id": "name_parameter_presence", + "description": "name parameter can be used only once, eventually suffixed by a modifier :contains or :exact.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*name(:contains|:exact)?=.*name(:contains|:exact)?=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('name').values", + "id": "name_parameter_value", + "description": "name parameter is a string.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('name').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^.+$" + } + ] + }, + { + "selector": "request.uri.queryParams('given').values", + "id": "given_parameter_presence", + "description": "given parameter can be used only once, eventually suffixed by a modifier :contains or :exact.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*given(:contains|:exact)?=.*given(:contains|:exact)?=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('given').values", + "id": "given_parameter_value", + "description": "given parameter is a string.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('given').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^.+$" + } + ] + }, + { + "selector": "request.uri.queryParams('family').values", + "id": "family_parameter_presence", + "description": "family parameter can be used only once, eventually suffixed by a modifier :contains or :exact.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*family(:contains|:exact)?=.*family(:contains|:exact)?=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('family').values", + "id": "family_parameter_value", + "description": "family parameter is a string.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('family').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^.+$" + } + ] + } + ] +} \ No newline at end of file diff --git a/EHS/CH_mCSD/CH-ITI-90-PractitionerRole-GetRequest-ValidationProfile.json b/EHS/CH_mCSD/CH-ITI-90-PractitionerRole-GetRequest-ValidationProfile.json new file mode 100644 index 0000000..b86dd86 --- /dev/null +++ b/EHS/CH_mCSD/CH-ITI-90-PractitionerRole-GetRequest-ValidationProfile.json @@ -0,0 +1,387 @@ +{ + "profileType": "HTTPREQUEST", + "id": "CH_ITI-90_PractitionerRole_GET_mCSD_Query", + "name": "CH_ITI-90_PractitionerRole_HTTP_GET_Request", + "description": "Validation Profile for validating a Get mCSD Query.", + "context": "EPR", + "assertions": [ + { + "selector": "request.method", + "id": "GETMethodChecking", + "description": "HTTP method shall be GET", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "FIXEDVALUE", + "fixedValue": "GET" + } + ] + }, + { + "selector": "request.version", + "id": "HTTP1VersionChecking", + "description": "The HTTP version shall be HTTP/1.1", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "FIXEDVALUE", + "fixedValue": "HTTP/1.1" + } + ] + }, + { + "selector": "request.uri.path", + "id": "URIRegexChecking", + "description": "URI path of the request shall be followed by the mCSD resource", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(\\S)+(Organization|Practitioner|PractitionerRole|Location|HealthcareService|OrganizationAffiliation|Endpoint)$" + } + ] + }, + { + "selector": "request.headers('Host').values", + "id": "HostChecking", + "description": "Host Shall be a server name; Regex: ^(http[s]?:\\/\\/)?[a-zA-Z0-9.\\-\\/]+(:(\\d)+)?$", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(http[s]?:\\/\\/)?[a-zA-Z0-9.\\-\\/]+(:(\\d)+)?$" + } + ] + }, + { + "selector": "request.headers('Authorization').values", + "id": "Authorization_parameter_presence", + "description": "The Authorization parameter is mandatory.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "OCCURRENCE", + "minOccurrence": 1, + "maxOccurrence": 1 + } + ] + }, + { + "selector": "request.headers('Authorization').values", + "id": "Authorization_parameter_value", + "description": "Authorization parameter's value SHALL be Bearer, followed by the token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^Bearer\\ [-a-zA-Z0-9._~+\\/]+=*$" + } + ] + },{ + "selector": "request.headers('traceparent').values", + "id": "traceparent_parameter_presence", + "description": "The traceparent parameter is mandatory in the HTTP header.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "OCCURRENCE", + "minOccurrence": 1, + "maxOccurrence": 1 + } + ] + }, + { + "selector": "request.headers('traceparent').values", + "id": "traceparent_parameter_value", + "description": "traceparent parameter's value SHALL be as defined in fhir.ch, section tracecontext.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!f{2})([\\da-f]{2})-(?!f{32})([\\daf]{32})-(?!f{16})([\\da-f]{16})-(?!f{2})([\\da-f]{2})$" + } + ] + }, + { + "selector": "request.uri.queryParams('_id').values", + "id": "_id_parameter_presence", + "description": "_id parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "(?!.*_id=.*_id=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_id').values", + "id": "_id_parameter_value", + "description": "_id parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_id').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('_lastUpdated')", + "id": "_lastUpdated_parameter_presence", + "description": "_lastUpdated parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_lastUpdated=.*_lastUpdated=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_lastUpdated').values", + "id": "_lastUpdated_parameter_value", + "description": "_lastUpdated parameter is made of a date eventually preceded by a modifier ge or le.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_lastUpdated').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^(ge|le)?[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|1d|2[0-8]|3[01])$" + } + ] + }, + { + "selector": "request.uri.queryParams('_format').values", + "id": "_format_parameter_presence", + "description": "_format parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "(?!.*_format=.*_format=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_format').values", + "id": "_format_parameter_value", + "description": "_format parameter's value shall be either json or xml.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_format').values.size() > 0", + "checks": [ + { + "type": "CLOSEDLIST", + "values": [ + "json", + "xml" + ] + } + ] + }, + { + "selector": "request.uri.queryParams('_sort').values", + "id": "_sort_parameter_presence", + "description": "_sort parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_sort=.*_sort=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_sort').values", + "id": "_sort_parameter_value", + "description": "_sort parameter's value is made of items composed of word caracters, separated by a comma and eventually prefixed by a dash.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_sort').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "([\\w,]|(-\\w))+$" + } + ] + }, + { + "selector": "request.uri.queryParams('_count').values", + "id": "_count parameter can be used only once.", + "description": "_count parameter is a decimal.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*_count=.*_count=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('_count').values", + "id": "_count_parameter_value", + "description": "_count parameter is a decimal.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('_count').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "\\d+$" + } + ] + }, + { + "selector": "request.uri.queryParams('organization').values", + "id": "organization_parameter_presence", + "description": "organization parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*organization=.*organization=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('organization').values", + "id": "organization_parameter_value", + "description": "organization parameter is a boolean and accept true or false values.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('organization').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('practitioner').values", + "id": "practitioner_parameter_presence", + "description": "practitioner parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*practitioner=.*practitioner=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('practitioner').values", + "id": "practitioner_parameter_value", + "description": "practitioner parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('practitioner').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('role').values", + "id": "role_parameter_presence", + "description": "role parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "(?!.*role=.*role=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('role').values", + "id": "role_parameter_value", + "description": "role parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('role').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('service').values", + "id": "service_parameter_presence", + "description": "service parameter can be used only once.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*service=.*service=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('service').values", + "id": "service_parameter_value", + "description": "service parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('service').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + }, + { + "selector": "request.uri.queryParams('speciality').values", + "id": "speciality_parameter_presence", + "description": "speciality parameter can be used only once, eventually suffixed by a modifier :contains or :exact.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "checks": [ + { + "type": "REGEX", + "regex": "^(?!.*speciality=.*speciality=).*$" + } + ] + }, + { + "selector": "request.uri.queryParams('speciality').values", + "id": "speciality_parameter_value", + "description": "speciality parameter is a token.", + "requirementPriority": "MANDATORY", + "checksComposition": "oneOf", + "applyIf": "request.uri.queryParams('speciality').values.size() > 0", + "checks": [ + { + "type": "REGEX", + "regex": "^\\S+$" + } + ] + } + ] +} \ No newline at end of file diff --git a/EHS/CH_mCSD/README.md b/EHS/CH_mCSD/README.md new file mode 100644 index 0000000..b87f175 --- /dev/null +++ b/EHS/CH_mCSD/README.md @@ -0,0 +1,107 @@ +--- +title: CH:mCSD HTTP Validation profiles' assertions +subtitle: List of all HTTP rules for CH:mCSD +authors: Vincent HOFMAN +date: 2023-03-14 +--- + +# CH:mCSD HTTP Validation profiles' assertions + +## Organization resource's assertions + +| id | Check's type | Value | Description | +|--- |--- |--- |--- | +| GETMethodChecking | FIXEDVALUE | GET | HTTP method shall be GET | +| HTTP1VersionChecking | FIXEDVALUE | HTTP/1.1 | The HTTP version shall be HTTP/1.1 | +| URIRegexChecking | REGEX | `^(\S)+Organization$` | URI path of the request shall be followed by the mCSD resource | +| HostChecking | REGEX | `^(http[s]?:\/\/)?[a-zA-Z0-9.\-\/]+(\:(\d)+)?$` | Host Shall be a server name | +| Authorization_parameter_presence | OCCURRENCE | 1..1 | The Authorization parameter is mandatory | +| Authorization_parameter_value | REGEX | `^Bearer\\ [-a-zA-Z0-9._~+\\/]+=*$` | Authorization parameter's value SHALL be Bearer, followed by the token. | +| traceparent_parameter_presence | OCCURRENCE | 1..1 | The traceparent parameter is mandatory in the HTTP header| +| traceparent_parameter_value | REGEX | `^(?!f{2})([\da-f]{2})-(?!f{32})([\da-f]{32})-(?!f{16})([\da-f]{16})-(?!f{2})([\da-f]{2})$` | traceparent parameter's value SHALL be as defined in fhir.ch, section [tracecontext](https://fhir.ch/ig/ch-epr-mhealth/tracecontext.html). | +| _id_parameter_presence | REGEX | `^(?!.*_id=.*_id=).*$` | _id parameter can be used only once. | +| _id_parameter_value | REGEX | `^\S+$` | _id parameter is a token. | +| _lastUpdated_parameter_presence | REGEX | `^(?!.*_lastUpdated=.*_lastUpdated=).*$` | _lastUpdated parameter can be used only once. | +| _lastUpdated_parameter_value | REGEX | `^(ge\|le)?[0-9]{4}-(0[1-9]\|1[0-2])-(0[1-9]\|1\d\|2[0-8]\|3[01])$` |_lastUpdated parameter is made of a date eventually preceded by a modifier ge or le. | +| _format_parameter_presence | REGEX | `^(?!.*_format=.*_format=).*$` | _format parameter can be used only once. | +| _format_parameter_value | CLOSEDLIST | [json,xml] | _format parameter's value shall be either json or xml. +| _sort_parameter_presence | REGEX | `^(?!.*_sort=.*_sort=).*$` | _sort parameter can be used only once. | +| _sort_parameter_value | REGEX | `^([\w,]\|(-\w))+$` | _sort parameter's value is made of items composed of word caracters, separated by a comma and eventually prefixed by a dash. | +| _count_parameter_presence | REGEX | `^(?!.*_count=.*_count=).*$` | _count parameter can be used only once. | +| _count_parameter_value | REGEX | `^\d+$` | _count parameter is a decimal. | +| active_parameter_presence | REGEX | `^(?!.*active=.*active=).*$` | active parameter can be used only once. | +| active_parameter_value | CLOSEDLIST | [true,false] | active parameter is a boolean and accept true or false values. | +| identifier_parameter_presence | REGEX | `^(?!.*identifier=.*identifier=).*$` | identifier parameter can be used only once. | +| identifier_parameter_value | REGEX | `^\S+$` | identifier parameter is a token. | +| name_parameter_presence | REGEX | `^(?!.*name=.*name=).*$` | name parameter can be used only once. | +| name_parameter_value | REGEX | `^.+$` | name parameter is a string. | +| partof_parameter_presence | REGEX | `^(?!.*partof=.*partof=).*$` | partof parameter can be used only once. | +| partof_parameter_value | REGEX | `^\S+$` | partof parameter is a token. | +| type_parameter_presence | REGEX | `^(?!.*_type=.*_type=).*$` | type parameter can be used only once. | +| type_parameter_value | REGEX | `^.+$` | type parameter is a token. | + +## Practitioner resource's assertions + +| id | Check's type | Value | Description | +|--- |--- |--- |--- | +| GETMethodChecking | FIXEDVALUE | GET | HTTP method shall be GET | +| HTTP1VersionChecking | FIXEDVALUE | HTTP/1.1 | The HTTP version shall be HTTP/1.1 | +| URIRegexChecking | REGEX | `^(\S)+Organization$` | URI path of the request shall be followed by the mCSD resource | +| HostChecking | REGEX | `^(http[s]?:\/\/)?[a-zA-Z0-9.\-\/]+(\:(\d)+)?$` | Host Shall be a server name | +| Authorization_parameter_presence | OCCURRENCE | 1..1 | The Authorization parameter is mandatory | +| Authorization_parameter_value | REGEX | `^Bearer\\ [-a-zA-Z0-9._~+\\/]+=*$` | Authorization parameter's value SHALL be Bearer, followed by the token. | +| traceparent_parameter_presence | OCCURRENCE | 1..1 | The traceparent parameter is mandatory in the HTTP header| +| traceparent_parameter_value | REGEX | `^(?!f{2})([\da-f]{2})-(?!f{32})([\da-f]{32})-(?!f{16})([\da-f]{16})-(?!f{2})([\da-f]{2})$` | traceparent parameter's value SHALL be as defined in fhir.ch, section [tracecontext](https://fhir.ch/ig/ch-epr-mhealth/tracecontext.html). | +| _id_parameter_presence | REGEX | `^(?!.*_id=.*_id=).*$` | _id parameter can be used only once. | +| _id_parameter_value | REGEX | `^\S+$` | _id parameter is a token. | +| _lastUpdated_parameter_presence | REGEX | `^(?!.*_lastUpdated=.*_lastUpdated=).*$` | _lastUpdated parameter can be used only once. | +| _lastUpdated_parameter_value | REGEX | `^(ge\|le)?[0-9]{4}-(0[1-9]\|1[0-2])-(0[1-9]\|1\d\|2[0-8]\|3[01])$` |_lastUpdated parameter is made of a date eventually preceded by a modifier ge or le. | +| _format_parameter_presence | REGEX | `^(?!.*_format=.*_format=).*$` | _format parameter can be used only once. | +| _format_parameter_value | CLOSEDLIST | [json,xml] | _format parameter's value shall be either json or xml. +| _sort_parameter_presence | REGEX | `^(?!.*_sort=.*_sort=).*$` | _sort parameter can be used only once. | +| _sort_parameter_value | REGEX | `^([\w,]\|(-\w))+$` | _sort parameter's value is made of items composed of word caracters, separated by a comma and eventually prefixed by a dash. | +| _count_parameter_presence | REGEX | `^(?!.*_count=.*_count=).*$` | _count parameter can be used only once. | +| _count_parameter_value | REGEX | `^\d+$` | _count parameter is a decimal. | +| active_parameter_presence | REGEX | `^(?!.*active=.*active=).*$` | active parameter can be used only once. | +| active_parameter_value | CLOSEDLIST | [true,false] | active parameter is a boolean and accept true or false values. | +| identifier_parameter_presence | REGEX | `^(?!.*identifier=.*identifier=).*$` | identifier parameter can be used only once. | +| identifier_parameter_value | REGEX | `^\S+$` | identifier parameter is a token. | +| name_parameter_presence | REGEX | `^(?!.*name(:contains\|:exact)?=.*name(:contains\|:exact)?=).*$` | name parameter can be used only once, eventually suffixed by a modifier :contains or :exact. +| name_parameter_value | REGEX | `^.+$` | name parameter is made of a string. | +| given_parameter_presence | REGEX | `^(?!.*given(:contains\|:exact)?=.*given(:contains\|:exact)?=).*$` | given parameter can be used only once, eventually suffixed by a modifier :contains or :exact. +| given_parameter_value | REGEX | `^.+$` | given parameter is made of a string. | +| family_parameter_presence | REGEX | `^(?!.*family(:contains\|:exact)?=.*family(:contains\|:exact)?=).*$` | family parameter can be used only once, eventually suffixed by a modifier :contains or :exact. +| family_parameter_value | REGEX | `^.+$` | family parameter is made of a string. | + +## PractitionerRole resource's assertions + +| id | Check's type | Value | Description | +|--- |--- |--- |--- | +| GETMethodChecking | FIXEDVALUE | GET | HTTP method shall be GET | +| HTTP1VersionChecking | FIXEDVALUE | HTTP/1.1 | The HTTP version shall be HTTP/1.1 | +| URIRegexChecking | REGEX | `^(\S)+Organization$` | URI path of the request shall be followed by the mCSD resource | +| HostChecking | REGEX | `^(http[s]?:\/\/)?[a-zA-Z0-9.\-\/]+(\:(\d)+)?$` | Host Shall be a server name | +| Authorization_parameter_presence | OCCURRENCE | 1..1 | The Authorization parameter is mandatory | +| Authorization_parameter_value | REGEX | `^Bearer\\ [-a-zA-Z0-9._~+\\/]+=*$` | Authorization parameter's value SHALL be Bearer, followed by the token. | +| traceparent_parameter_presence | OCCURRENCE | 1..1 | The traceparent parameter is mandatory in the HTTP header| +| traceparent_parameter_value | REGEX | `^(?!f{2})([\da-f]{2})-(?!f{32})([\da-f]{32})-(?!f{16})([\da-f]{16})-(?!f{2})([\da-f]{2})$` | traceparent parameter's value SHALL be as defined in fhir.ch, section [tracecontext](https://fhir.ch/ig/ch-epr-mhealth/tracecontext.html). | +| _id_parameter_presence | REGEX | `^(?!.*_id=.*_id=).*$` | _id parameter can be used only once. | +| _id_parameter_value | REGEX | `^\S+$` | _id parameter is a token. | +| _lastUpdated_parameter_presence | REGEX | `^(?!.*_lastUpdated=.*_lastUpdated=).*$` | _lastUpdated parameter can be used only once. | +| _lastUpdated_parameter_value | REGEX | `^(ge\|le)?[0-9]{4}-(0[1-9]\|1[0-2])-(0[1-9]\|1\d\|2[0-8]\|3[01])$` |_lastUpdated parameter is made of a date eventually preceded by a modifier ge or le. | +| _format_parameter_presence | REGEX | `^(?!.*_format=.*_format=).*$` | _format parameter can be used only once. | +| _format_parameter_value | CLOSEDLIST | [json,xml] | _format parameter's value shall be either json or xml. +| _sort_parameter_presence | REGEX | `^(?!.*_sort=.*_sort=).*$` | _sort parameter can be used only once. | +| _sort_parameter_value | REGEX | `^([\w,]\|(-\w))+$` | _sort parameter's value is made of items composed of word caracters, separated by a comma and eventually prefixed by a dash. | +| _count_parameter_presence | REGEX | `^(?!.*_count=.*_count=).*$` | _count parameter can be used only once. | +| _count_parameter_value | REGEX | `^\d+$` | _count parameter is a decimal. | +| organization_parameter_presence | REGEX | `^(?!.*organization=.*organization=).*$` | organization parameter can be used only once. | +| organization_parameter_value | REGEX | `^\S+$` | organization parameter is a token. | +| practitioner_parameter_presence | REGEX | `^(?!.*practitioner=.*practitioner=).*$` | practitioner parameter can be used only once. | +| practitioner_parameter_value | REGEX | `^\S+$` | practitioner parameter is a token. +| role_parameter_presence | REGEX | `^(?!.*role=.*role=).*$` | role parameter can be used only once. | +| role_parameter_value | REGEX | `^\S+$` | role parameter is a token. +| service_parameter_presence | REGEX | `^(?!.*service=.*service=).*$` | service parameter can be used only once. | +| service_parameter_value | REGEX | `^\S+$` | service parameter is a token. +| speciality_parameter_presence | REGEX | `^(?!.*speciality=.*speciality=).*$` | speciality parameter can be used only once. | +| speciality_parameter_value | REGEX | `^\S+$` | speciality parameter is a token. \ No newline at end of file diff --git a/EHS/samples/CH-mCSD/ITI-90/B - Practitioner/CH-mCSD - 010 - valid - with name.txt b/EHS/samples/CH-mCSD/ITI-90/B - Practitioner/CH-mCSD - 010 - valid - with name.txt index 7e0e997..9147d93 100644 --- a/EHS/samples/CH-mCSD/ITI-90/B - Practitioner/CH-mCSD - 010 - valid - with name.txt +++ b/EHS/samples/CH-mCSD/ITI-90/B - Practitioner/CH-mCSD - 010 - valid - with name.txt @@ -1,3 +1,11 @@ GET CareServicesSelectiveSupplier/Practitioner?name=Peter%20Pan HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJnVmd6VWtRZEtwZHVMbmF4bThKQy1JYTh0VUdNV0J1TTJZT2R3akthcEdzIn0.eyJleHAiOjE3MDgzNDg0ODUsImlhdCI6MTcwODM0ODE4NSwiYXV0aF90aW1lIjoxNzA4MzQ4MTQzLCJqdGkiOiI5OGZjZDFiNy0wZGE5LTRkZGQtODUwNy1hM2I1YmU3NmY0ZmIiLCJpc3MiOiJodHRwczovL2VoZWFsdGhzdWlzc2UuaWhlLWV1cm9wZS5uZXQvaXVhLXNzby9yZWFsbXMvY2gtaXVhIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImFjNGZkNjI2LWNiZGYtNGIzMC1hOTNhLTc0YTM2YWQyM2QwYiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImNoLWl1YS1jbGllbnQiLCJzZXNzaW9uX3N0YXRlIjoiYzUyMTE2NjItY2VhNy00ZmFmLWFkZjktNDNiNTE2MGNjYjUwIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyIvKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1jaC1pdWEiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJwdXJwb3NlX29mX3VzZT11cm46b2lkOjIuMTYuNzU2LjUuMzAuMS4xMjcuMy4xMC41fE5PUk0gcHJvZmlsZSBsYXVuY2ggZW1haWwiLCJzaWQiOiJjNTIxMTY2Mi1jZWE3LTRmYWYtYWRmOS00M2I1MTYwY2NiNTAiLCJleHRlbnNpb25zIjp7ImNoX2VwciI6eyJ1c2VyX2lkX3F1YWxpZmllciI6InVybjpnczE6Z2xuIiwidXNlcl9pZCI6Ijc2MDEwMDI0NjczNzMifSwiY2hfaXVhIjp7ImxhdW5jaCI6ImxhdW5jaCJ9LCJpaGVfaXVhIjp7InB1cnBvc2Vfb2ZfdXNlIjp7ImNvZGUiOiJOT1JNIiwic3lzdGVtIjoidXJuOm9pZDoyLjE2Ljc1Ni41LjMwLjEuMTI3LjMuMTAuNSJ9fX0sImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6InJyZXlub2xkcyBSZXlub2xkcyIsInByZWZlcnJlZF91c2VybmFtZSI6InJyZXlub2xkcyIsImdpdmVuX25hbWUiOiJycmV5bm9sZHMiLCJmYW1pbHlfbmFtZSI6IlJleW5vbGRzIn0.mT9ZTGNqTfsMBxoyGLaQlUr9PVcFItvlKmZxjY4_OAHqi4nE82S5n0mE4iy_5YL_sbYtNODI1L_LH6keBTCSbSOY5REkp_NLm4QLzdX4ynJ7Y_nMoD5H6TFqJTrllKVJ5IKtXhWv9bLQK35PLLPeNMZH4yl3ChlOlx0IH-zqHEPcOV69kN1vC7_Jjj0vx3d0RFvR_0sbfG3XnSiO3fpwwj2xYgRfZkfJqTuZ5404j9nu8TiPHtCRqQ_EPtEirUTG1ClX1DahJRKB-jwLHThxkKooUxsRAQZVhqayhLMV8sxwNkeHnNemhqreOkeDELxn2ZC-VOQLe9WRsX37QagO1g Host: ehealthsuisse.ihe-europe.net + +GET CareServicesSelectiveSupplier/Practitioner?name=contains:Peter%20Pan HTTP/1.1 +Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJnVmd6VWtRZEtwZHVMbmF4bThKQy1JYTh0VUdNV0J1TTJZT2R3akthcEdzIn0.eyJleHAiOjE3MDgzNDg0ODUsImlhdCI6MTcwODM0ODE4NSwiYXV0aF90aW1lIjoxNzA4MzQ4MTQzLCJqdGkiOiI5OGZjZDFiNy0wZGE5LTRkZGQtODUwNy1hM2I1YmU3NmY0ZmIiLCJpc3MiOiJodHRwczovL2VoZWFsdGhzdWlzc2UuaWhlLWV1cm9wZS5uZXQvaXVhLXNzby9yZWFsbXMvY2gtaXVhIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImFjNGZkNjI2LWNiZGYtNGIzMC1hOTNhLTc0YTM2YWQyM2QwYiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImNoLWl1YS1jbGllbnQiLCJzZXNzaW9uX3N0YXRlIjoiYzUyMTE2NjItY2VhNy00ZmFmLWFkZjktNDNiNTE2MGNjYjUwIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyIvKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1jaC1pdWEiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJwdXJwb3NlX29mX3VzZT11cm46b2lkOjIuMTYuNzU2LjUuMzAuMS4xMjcuMy4xMC41fE5PUk0gcHJvZmlsZSBsYXVuY2ggZW1haWwiLCJzaWQiOiJjNTIxMTY2Mi1jZWE3LTRmYWYtYWRmOS00M2I1MTYwY2NiNTAiLCJleHRlbnNpb25zIjp7ImNoX2VwciI6eyJ1c2VyX2lkX3F1YWxpZmllciI6InVybjpnczE6Z2xuIiwidXNlcl9pZCI6Ijc2MDEwMDI0NjczNzMifSwiY2hfaXVhIjp7ImxhdW5jaCI6ImxhdW5jaCJ9LCJpaGVfaXVhIjp7InB1cnBvc2Vfb2ZfdXNlIjp7ImNvZGUiOiJOT1JNIiwic3lzdGVtIjoidXJuOm9pZDoyLjE2Ljc1Ni41LjMwLjEuMTI3LjMuMTAuNSJ9fX0sImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6InJyZXlub2xkcyBSZXlub2xkcyIsInByZWZlcnJlZF91c2VybmFtZSI6InJyZXlub2xkcyIsImdpdmVuX25hbWUiOiJycmV5bm9sZHMiLCJmYW1pbHlfbmFtZSI6IlJleW5vbGRzIn0.mT9ZTGNqTfsMBxoyGLaQlUr9PVcFItvlKmZxjY4_OAHqi4nE82S5n0mE4iy_5YL_sbYtNODI1L_LH6keBTCSbSOY5REkp_NLm4QLzdX4ynJ7Y_nMoD5H6TFqJTrllKVJ5IKtXhWv9bLQK35PLLPeNMZH4yl3ChlOlx0IH-zqHEPcOV69kN1vC7_Jjj0vx3d0RFvR_0sbfG3XnSiO3fpwwj2xYgRfZkfJqTuZ5404j9nu8TiPHtCRqQ_EPtEirUTG1ClX1DahJRKB-jwLHThxkKooUxsRAQZVhqayhLMV8sxwNkeHnNemhqreOkeDELxn2ZC-VOQLe9WRsX37QagO1g +Host: ehealthsuisse.ihe-europe.net + +GET CareServicesSelectiveSupplier/Practitioner?name=exact:Peter%20Pan HTTP/1.1 +Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJnVmd6VWtRZEtwZHVMbmF4bThKQy1JYTh0VUdNV0J1TTJZT2R3akthcEdzIn0.eyJleHAiOjE3MDgzNDg0ODUsImlhdCI6MTcwODM0ODE4NSwiYXV0aF90aW1lIjoxNzA4MzQ4MTQzLCJqdGkiOiI5OGZjZDFiNy0wZGE5LTRkZGQtODUwNy1hM2I1YmU3NmY0ZmIiLCJpc3MiOiJodHRwczovL2VoZWFsdGhzdWlzc2UuaWhlLWV1cm9wZS5uZXQvaXVhLXNzby9yZWFsbXMvY2gtaXVhIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImFjNGZkNjI2LWNiZGYtNGIzMC1hOTNhLTc0YTM2YWQyM2QwYiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImNoLWl1YS1jbGllbnQiLCJzZXNzaW9uX3N0YXRlIjoiYzUyMTE2NjItY2VhNy00ZmFmLWFkZjktNDNiNTE2MGNjYjUwIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyIvKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1jaC1pdWEiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJwdXJwb3NlX29mX3VzZT11cm46b2lkOjIuMTYuNzU2LjUuMzAuMS4xMjcuMy4xMC41fE5PUk0gcHJvZmlsZSBsYXVuY2ggZW1haWwiLCJzaWQiOiJjNTIxMTY2Mi1jZWE3LTRmYWYtYWRmOS00M2I1MTYwY2NiNTAiLCJleHRlbnNpb25zIjp7ImNoX2VwciI6eyJ1c2VyX2lkX3F1YWxpZmllciI6InVybjpnczE6Z2xuIiwidXNlcl9pZCI6Ijc2MDEwMDI0NjczNzMifSwiY2hfaXVhIjp7ImxhdW5jaCI6ImxhdW5jaCJ9LCJpaGVfaXVhIjp7InB1cnBvc2Vfb2ZfdXNlIjp7ImNvZGUiOiJOT1JNIiwic3lzdGVtIjoidXJuOm9pZDoyLjE2Ljc1Ni41LjMwLjEuMTI3LjMuMTAuNSJ9fX0sImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6InJyZXlub2xkcyBSZXlub2xkcyIsInByZWZlcnJlZF91c2VybmFtZSI6InJyZXlub2xkcyIsImdpdmVuX25hbWUiOiJycmV5bm9sZHMiLCJmYW1pbHlfbmFtZSI6IlJleW5vbGRzIn0.mT9ZTGNqTfsMBxoyGLaQlUr9PVcFItvlKmZxjY4_OAHqi4nE82S5n0mE4iy_5YL_sbYtNODI1L_LH6keBTCSbSOY5REkp_NLm4QLzdX4ynJ7Y_nMoD5H6TFqJTrllKVJ5IKtXhWv9bLQK35PLLPeNMZH4yl3ChlOlx0IH-zqHEPcOV69kN1vC7_Jjj0vx3d0RFvR_0sbfG3XnSiO3fpwwj2xYgRfZkfJqTuZ5404j9nu8TiPHtCRqQ_EPtEirUTG1ClX1DahJRKB-jwLHThxkKooUxsRAQZVhqayhLMV8sxwNkeHnNemhqreOkeDELxn2ZC-VOQLe9WRsX37QagO1g +Host: ehealthsuisse.ihe-europe.net \ No newline at end of file -- GitLab