Skip to content

Commit

Permalink
Merge pull request #20 from hl7-be/master
Browse files Browse the repository at this point in the history
setup releasecandidate for version 1.2.0
  • Loading branch information
bdc-ehealth authored Oct 25, 2024
2 parents f9de8f7 + a860d95 commit 39b370e
Show file tree
Hide file tree
Showing 13 changed files with 480 additions and 9 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ Thumbs.db
# backup files #
################
*.bak
target
src
8 changes: 8 additions & 0 deletions input/fsh/codesystem/BeCSPseudonymizationType.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CodeSystem: BeCSPseudonymizationType
Id: be-cs-pseudonymization-type
Title: "Types of pseudonymization"
Description: "The technique used for pseudonymization"
* ^experimental = false
* ^caseSensitive = true
* #direct "Direct pseudonym, for text shorter than 32 bytes"
* #encrypted "Encrypted pseudonym, for text longer than 32 bytes"
9 changes: 9 additions & 0 deletions input/fsh/codesystem/BeCSPseudonymizationVersion.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
CodeSystem: BeCSPseudonymizationVersion
Id: be-cs-pseudonymization-version
Title: "BeCSPseudonymizationVersion"
Description: "List of pseudonymization versions that can be used a.o. in the Capabilities Statement"
* ^experimental = false
* ^caseSensitive = true
* #urn:be:fgov:ehealth:pseudo:v1
* #urn:be:fgov:ehealth:pseudo:v2
* #urn:be:fgov:pseudo-encrypted:v1
15 changes: 15 additions & 0 deletions input/fsh/extensions/BeExtKeyPseudonymization.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Extension: BeExtKeyPseudonymization
Id: be-ext-key-pseudonymization
Title: "Key Pseudonymization Extension"
Description: "This holds a pseudonymized key that can be used for all encrypted fields in the resource (long text pseudonymisation)"
* ^context.type = #element
* ^context.expression = "Meta"
* . ^short = "Pseudonymization key (See Blinded Pseudonymization Cookbook, Annex: Processing of input data exceeding 32
bytes)"
* id 1..1 MS
* id ^short = "kid (also available in JWE)"
* extension contains key 1..1 MS
* extension[key].value[x] only string
* extension[key].valueString 1..1 MS
* extension[key].valueString ^short = "pseudonymized key"
* extension[key].value[x].extension contains BeExtPseudonymization named pseudonymization 1..1
16 changes: 13 additions & 3 deletions input/fsh/extensions/BeExtPseudonymization.fsh
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
Extension: BeExtPseudonymization
Id: be-ext-pseudonymization
Title: "Pseudonymization Extension"
Description: "This is a marker interface. If the field is pseudonymized, the string field SHALL have this extension. The original text field SHALL contain the x, y and transitInfo in JWE encoded form. transitInfo is optional depending on the situation."
Description: "This is a marker interface. If the field is pseudonymized, the string field SHALL have this extension. "
* ^context.type = #element
* ^context.expression = "Element"
* . ^short = "Pseudonymization data"
* extension contains marker 1..1 MS
* extension contains marker 1..1 MS and
format 0..1 MS and
version 0..1 MS
* extension[marker].value[x] only boolean
* extension[marker].valueBoolean = true
* extension[marker].valueBoolean = true
* extension[format].value[x] only code
* extension[format].valueCode 0..1 MS
* extension[format].valueCode ^short = "provide encrypted only in case of Blinded Pseudonymization Cookbook, Annex: Processing of input data exceeding 32
bytes"
* extension[format].valueCode from BeVSPseudonymizationType
* extension[version].value[x] only positiveInt
* extension[version].valuePositiveInt 0..1 MS
* extension[version].valuePositiveInt ^short = "version of the pseudonym encoding"
7 changes: 7 additions & 0 deletions input/fsh/instances/bundle1.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Instance: bundle1
InstanceOf: Bundle
* type = #collection
* entry[+].resource = patient1
* entry[=].fullUrl = "urn:uuid:be78855a-2ac2-4907-a209-c018ab7bbaa5"
* entry[+].resource = patient2
* entry[=].fullUrl = "urn:uuid:2c9e9f79-1a05-4a34-ab1b-07328c53a323"
216 changes: 216 additions & 0 deletions input/fsh/instances/capabilitystatement.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
Instance: capabilitystatement
InstanceOf: CapabilityStatement
Usage: #example
* name = "RestServer"
* status = #active
* date = "2024-10-21T09:29:32.761+00:00"
* publisher = "Not provided"
* kind = #instance
* software.name = "Fictitious FHIR Server"
* implementation.description = "HAPI FHIR"
* implementation.url = "http://localhost:8080/fhir"
* fhirVersion = #4.0.1
* format[0] = #application/fhir+xml
* format[+] = #xml
* format[+] = #application/fhir+json
* format[+] = #json
* format[+] = #application/x-turtle
* format[+] = #ttl
* rest.mode = #server
* rest.security.service[+] = BeCSPseudonymizationVersion#urn:be:fgov:ehealth:pseudo:v1
* rest.security.service[+] = BeCSPseudonymizationVersion#urn:be:fgov:ehealth:pseudo:v2
* rest.security.service[+] = BeCSPseudonymizationVersion#urn:be:fgov:pseudo-encrypted:v1
* rest.resource[0].type = #CodeSystem
* rest.resource[=].profile = "http://hl7.org/fhir/StructureDefinition/CodeSystem"
* rest.resource[=].interaction[0].code = #read
* rest.resource[=].interaction[+].code = #search-type
* rest.resource[=].interaction[+].code = #delete
* rest.resource[=].searchInclude = "*"
* rest.resource[=].searchParam[0].name = "code"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "A code defined in the code system"
* rest.resource[=].searchParam[+].name = "context"
* rest.resource[=].searchParam[=].type = #token
* rest.resource[=].searchParam[=].documentation = "A use context assigned to the code system"
* rest.resource[=].searchParam[+].name = "context-quantity"
* rest.resource[=].searchParam[=].type = #quantity
* rest.resource[=].searchParam[=].documentation = "A quantity- or range-valued use context assigned to the code system"
* rest.resource[=].searchParam[+].name = "context-type"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "A type of use context assigned to the code system"
* rest.resource[=].searchParam[+].name = "date"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The code system publication date"
* rest.resource[=].searchParam[+].name = "description"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The description of the code system"
* rest.resource[=].searchParam[+].name = "id"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[+].name = "identifier"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "External identifier for the code system"
* rest.resource[=].searchParam[+].name = "jurisdiction"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Intended jurisdiction for the code system"
* rest.resource[=].searchParam[+].name = "name"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Computationally friendly name of the code system"
* rest.resource[=].searchParam[+].name = "publisher"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Name of the publisher of the code system"
* rest.resource[=].searchParam[+].name = "reference"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[+].name = "status"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The current status of the code system"
* rest.resource[=].searchParam[+].name = "title"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The human-friendly name of the code system"
* rest.resource[=].searchParam[+].name = "url"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The uri that identifies the code system"
* rest.resource[=].searchParam[+].name = "version"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The business version of the code system"
* rest.resource[=].operation[0].name = "validate-code"
* rest.resource[=].operation[=].definition = "http://localhost:8080/fhir/OperationDefinition/CodeSystemValueSet-it-validate-code"
* rest.resource[=].operation[+].name = "upload-external-code-system"
* rest.resource[=].operation[=].definition = "http://localhost:8080/fhir/OperationDefinition/CodeSystem-t-upload-external-code-system"
* rest.resource[=].operation[+].name = "subsumes"
* rest.resource[=].operation[=].definition = "http://localhost:8080/fhir/OperationDefinition/CodeSystem-it-subsumes"
* rest.resource[=].operation[+].name = "lookup"
* rest.resource[=].operation[=].definition = "http://localhost:8080/fhir/OperationDefinition/CodeSystem-it-lookup"
* rest.resource[+].type = #ConceptMap
* rest.resource[=].profile = "http://hl7.org/fhir/StructureDefinition/ConceptMap"
* rest.resource[=].interaction[0].code = #read
* rest.resource[=].interaction[+].code = #search-type
* rest.resource[=].searchInclude = "*"
* rest.resource[=].searchParam.name = "url"
* rest.resource[=].searchParam.type = #string
* rest.resource[=].searchParam.documentation = "The uri that identifies the concept map"
* rest.resource[=].operation.name = "translate"
* rest.resource[=].operation.definition = "http://localhost:8080/fhir/OperationDefinition/ConceptMap-t-translate"
* rest.resource[+].type = #Medication
* rest.resource[=].profile = "http://hl7.org/fhir/StructureDefinition/Medication"
* rest.resource[=].interaction.code = #read
* rest.resource[=].searchInclude = "*"
* rest.resource[+].type = #OperationDefinition
* rest.resource[=].profile = "http://hl7.org/fhir/StructureDefinition/OperationDefinition"
* rest.resource[=].interaction.code = #read
* rest.resource[=].searchInclude = "*"
* rest.resource[+].type = #StructureDefinition
* rest.resource[=].profile = "http://hl7.org/fhir/StructureDefinition/StructureDefinition"
* rest.resource[=].interaction[0].code = #update
* rest.resource[=].interaction[+].code = #read
* rest.resource[=].interaction[+].code = #search-type
* rest.resource[=].interaction[+].code = #delete
* rest.resource[=].interaction[+].code = #create
* rest.resource[=].searchInclude = "*"
* rest.resource[=].searchParam[0].name = "code"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[+].name = "context"
* rest.resource[=].searchParam[=].type = #token
* rest.resource[=].searchParam[=].documentation = "A use context assigned to the structure definition"
* rest.resource[=].searchParam[+].name = "context-quantity"
* rest.resource[=].searchParam[=].type = #quantity
* rest.resource[=].searchParam[=].documentation = "A quantity- or range-valued use context assigned to the structure definition"
* rest.resource[=].searchParam[+].name = "context-type"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "A type of use context assigned to the structure definition"
* rest.resource[=].searchParam[+].name = "date"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The structure definition publication date"
* rest.resource[=].searchParam[+].name = "description"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The description of the structure definition"
* rest.resource[=].searchParam[+].name = "expansion"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[+].name = "identifier"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "External identifier for the structure definition"
* rest.resource[=].searchParam[+].name = "jurisdiction"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Intended jurisdiction for the structure definition"
* rest.resource[=].searchParam[+].name = "name"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Computationally friendly name of the structure definition"
* rest.resource[=].searchParam[+].name = "publisher"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Name of the publisher of the structure definition"
* rest.resource[=].searchParam[+].name = "reference"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[+].name = "status"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The current status of the structure definition"
* rest.resource[=].searchParam[+].name = "title"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The human-friendly name of the structure definition"
* rest.resource[=].searchParam[+].name = "url"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The uri that identifies the structure definition"
* rest.resource[=].searchParam[+].name = "version"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The business version of the structure definition"
* rest.resource[+].type = #ValueSet
* rest.resource[=].profile = "http://hl7.org/fhir/StructureDefinition/ValueSet"
* rest.resource[=].interaction[0].code = #update
* rest.resource[=].interaction[+].code = #read
* rest.resource[=].interaction[+].code = #search-type
* rest.resource[=].interaction[+].code = #delete
* rest.resource[=].interaction[+].code = #create
* rest.resource[=].searchInclude = "*"
* rest.resource[=].searchParam[0].name = "_id"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The ID of the resource"
* rest.resource[=].searchParam[+].name = "code"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "This special parameter searches for codes in the value set. See additional notes on the ValueSet resource"
* rest.resource[=].searchParam[+].name = "context"
* rest.resource[=].searchParam[=].type = #token
* rest.resource[=].searchParam[=].documentation = "A use context assigned to the value set"
* rest.resource[=].searchParam[+].name = "context-quantity"
* rest.resource[=].searchParam[=].type = #quantity
* rest.resource[=].searchParam[=].documentation = "A quantity- or range-valued use context assigned to the value set"
* rest.resource[=].searchParam[+].name = "context-type"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "A type of use context assigned to the value set"
* rest.resource[=].searchParam[+].name = "date"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The value set publication date"
* rest.resource[=].searchParam[+].name = "description"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The description of the value set"
* rest.resource[=].searchParam[+].name = "expansion"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Identifies the value set expansion (business identifier)"
* rest.resource[=].searchParam[+].name = "identifier"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "External identifier for the value set"
* rest.resource[=].searchParam[+].name = "jurisdiction"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Intended jurisdiction for the value set"
* rest.resource[=].searchParam[+].name = "name"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Computationally friendly name of the value set"
* rest.resource[=].searchParam[+].name = "publisher"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "Name of the publisher of the value set"
* rest.resource[=].searchParam[+].name = "reference"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "A code system included or excluded in the value set or an imported value set"
* rest.resource[=].searchParam[+].name = "status"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The current status of the value set"
* rest.resource[=].searchParam[+].name = "title"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The human-friendly name of the value set"
* rest.resource[=].searchParam[+].name = "url"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The uri that identifies the value set"
* rest.resource[=].searchParam[+].name = "version"
* rest.resource[=].searchParam[=].type = #string
* rest.resource[=].searchParam[=].documentation = "The business version of the value set"
* rest.resource[=].operation[0].name = "validate-code"
* rest.resource[=].operation[=].definition = "http://localhost:8080/fhir/OperationDefinition/CodeSystemValueSet-it-validate-code"
* rest.resource[=].operation[+].name = "expand"
* rest.resource[=].operation[=].definition = "http://localhost:8080/fhir/OperationDefinition/ValueSet-it-expand"
5 changes: 5 additions & 0 deletions input/fsh/instances/contained1.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Instance: contained1
InstanceOf: Patient
* contained[+] = patient2
* link.other = Reference( #patient2 )
* link.type = #replaced-by
17 changes: 17 additions & 0 deletions input/fsh/instances/parameters1.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Instance: parameters1
InstanceOf: Parameters
Usage: #example
* meta.extension[+].url = "https://www.ehealth.fgov.be/standards/fhir/infsec/StructureDefinition/be-ext-key-pseudonymization"
* meta.extension[=].id = "fcc557e7-40fa-4fde-b802-12a461cd176f"
* meta.extension[=].extension[+].url = "key"
* meta.extension[=].extension[=].valueString = "urn:be:fgov:pseudo:v2:OZADJVppdeQzwgvAUjQNaLvuf94ulY6iD:OZADJVppdeQzwgvAUjQNaLvuf94ulY6iDgeip7iSHAW7TNrDBa0XMGeS6G3s/HWLSQ4eirpcox28GghzbtaiUzg=.UPOBi75XsreuYfQwyVvIaHgpzrrdS6joS8JaPlkMPxeU8FmFHRtteJp/FAq91pEllcbH4V4PRSC+QEm0C9thkO4="
* meta.extension[=].extension[=].valueString.extension[BeExtPseudonymization].extension[marker].valueBoolean = true
* meta.extension[=].extension[=].valueString.extension[BeExtPseudonymization].extension[format].valueCode = #direct
* meta.extension[=].extension[=].valueString.extension[BeExtPseudonymization].extension[version].valuePositiveInt = 2
* parameter[0].name = "name"
* parameter[=].valueString = "urn:be:fgov:pseudo-encrypted:v1:fcc557e7-40fa-4fde-b802-12a461cd176f:OZADJVppdeQzwgvAUjQNaLvuf94ulY6iD:geip7iSHAW7TNrDBa0XMGeS6G3s/HWLSQ4eirpcox28GghzbtaiUzg=.UPOBi75XsreuYfQwyVvIaHgpzrrdS6joS8JaPlkMPxeU8FmFHRtteJp/FAq91pEllcbH4V4PRSC+QEm0C9thkO4="
* parameter[=].valueString.extension[BeExtPseudonymization].extension[marker].valueBoolean = true
* parameter[=].valueString.extension[BeExtPseudonymization].extension[format].valueCode = #encrypted
* parameter[=].valueString.extension[BeExtPseudonymization].extension[version].valuePositiveInt = 1
* parameter[+].name = "version"
* parameter[=].valueString = "1.0.0"
Loading

0 comments on commit 39b370e

Please sign in to comment.