FHIR IG analytics| Package | io.health-samurai.core.r4b |
| Resource Type | StructureDefinition |
| Id | StructureDefinition-de-identification.json |
| FHIR Version | R4B |
| Source | https://simplifier.net/resolve?scope=io.health-samurai.core.r4b@0.2606.2&canonical=http://health-samurai.io/fhir/core/StructureDefinition/de-identification |
| URL | http://health-samurai.io/fhir/core/StructureDefinition/de-identification |
| Version | 0.2606.2 |
| Status | active |
| Name | deIdentification |
| Title | De-Identification |
| Description | Extension for ViewDefinition columns that specifies a de-identification method and its parameters. Applied during SQL generation to wrap column expressions with the corresponding aidbox_deident_* PostgreSQL function. |
| Type | Extension |
| Kind | complex-type |
No resources found
| ValueSet | ||
| io.health-samurai.core.r4b#0.2606.2 | de-identification-method | De-Identification Method |
| io.health-samurai.core.r4b#0.2606.2 | perturb-range-type | Perturb Range Type |
No extension usage examples found
No narrative content found in resource
{
"description": "Extension for ViewDefinition columns that specifies a de-identification method and its parameters. Applied during SQL generation to wrap column expressions with the corresponding aidbox_deident_* PostgreSQL function.",
"derivation": "constraint",
"publisher": "Health Samurai",
"fhirVersion": "4.3.0",
"name": "deIdentification",
"abstract": false,
"type": "Extension",
"resourceType": "StructureDefinition",
"title": "De-Identification",
"status": "active",
"id": "de-identification",
"kind": "complex-type",
"url": "http://health-samurai.io/fhir/core/StructureDefinition/de-identification",
"context": [
{
"type": "element",
"expression": "Element"
}
],
"version": "0.2606.2",
"differential": {
"element": [
{
"id": "Extension",
"path": "Extension",
"short": "De-identification method and parameters for a ViewDefinition column.",
"definition": "Specifies which de-identification method to apply to a ViewDefinition column expression during SQL generation, along with method-specific parameters such as cryptographic keys or noise ranges.",
"constraint": [
{
"key": "deident-1",
"severity": "error",
"human": "cryptoHash method requires cryptoHashKey",
"expression": "extension.where(url='method').value = 'cryptoHash' implies extension.where(url='cryptoHashKey').exists()"
},
{
"key": "deident-2",
"severity": "error",
"human": "dateshift method requires dateShiftKey",
"expression": "extension.where(url='method').value = 'dateshift' implies extension.where(url='dateShiftKey').exists()"
},
{
"key": "deident-3",
"severity": "error",
"human": "encrypt method requires encryptKey",
"expression": "extension.where(url='method').value = 'encrypt' implies extension.where(url='encryptKey').exists()"
},
{
"key": "deident-4",
"severity": "error",
"human": "substitute method requires replaceWith",
"expression": "extension.where(url='method').value = 'substitute' implies extension.where(url='replaceWith').exists()"
},
{
"key": "deident-5",
"severity": "error",
"human": "custom_function method requires custom_function name",
"expression": "extension.where(url='method').value = 'custom_function' implies extension.where(url='custom_function').exists()"
},
{
"key": "deident-6",
"severity": "error",
"human": "Must specify either method or custom_function",
"expression": "extension.where(url='method').exists() or extension.where(url='custom_function').exists()"
}
]
},
{
"id": "Extension.extension",
"path": "Extension.extension",
"slicing": {
"discriminator": [
{
"type": "value",
"path": "url"
}
],
"rules": "closed"
},
"min": 1
},
{
"id": "Extension.extension:method",
"path": "Extension.extension",
"sliceName": "method",
"short": "De-identification method to apply. Required unless custom_function is used.",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:method.url",
"path": "Extension.extension.url",
"fixedUri": "method"
},
{
"id": "Extension.extension:method.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "code"
}
],
"binding": {
"strength": "extensible",
"valueSet": "http://health-samurai.io/fhir/core/ValueSet/de-identification-method"
}
},
{
"id": "Extension.extension:cryptoHashKey",
"path": "Extension.extension",
"sliceName": "cryptoHashKey",
"short": "HMAC-SHA256 key for cryptoHash method.",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:cryptoHashKey.url",
"path": "Extension.extension.url",
"fixedUri": "cryptoHashKey"
},
{
"id": "Extension.extension:cryptoHashKey.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "string"
}
]
},
{
"id": "Extension.extension:dateShiftKey",
"path": "Extension.extension",
"sliceName": "dateShiftKey",
"short": "HMAC key for deterministic date shifting. Offset is derived from HMAC(key, resource.id).",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:dateShiftKey.url",
"path": "Extension.extension.url",
"fixedUri": "dateShiftKey"
},
{
"id": "Extension.extension:dateShiftKey.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "string"
}
]
},
{
"id": "Extension.extension:encryptKey",
"path": "Extension.extension",
"sliceName": "encryptKey",
"short": "AES-128-CBC encryption key as hex string (32 hex chars = 16 bytes).",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:encryptKey.url",
"path": "Extension.extension.url",
"fixedUri": "encryptKey"
},
{
"id": "Extension.extension:encryptKey.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"constraint": [
{
"key": "deident-encryptkey-1",
"severity": "error",
"human": "Encryption key must be 8-32 hex characters (0-9, a-f)",
"expression": "$this.matches('^[0-9a-fA-F]{8,32}[%content%]#39;) and ($this.length() mod 2 = 0)"
}
],
"type": [
{
"code": "string"
}
]
},
{
"id": "Extension.extension:replaceWith",
"path": "Extension.extension",
"sliceName": "replaceWith",
"short": "Fixed replacement value for substitute method.",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:replaceWith.url",
"path": "Extension.extension.url",
"fixedUri": "replaceWith"
},
{
"id": "Extension.extension:replaceWith.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "string"
}
]
},
{
"id": "Extension.extension:span",
"path": "Extension.extension",
"sliceName": "span",
"short": "Noise magnitude for perturb method.",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:span.url",
"path": "Extension.extension.url",
"fixedUri": "span"
},
{
"id": "Extension.extension:span.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "decimal"
}
]
},
{
"id": "Extension.extension:rangeType",
"path": "Extension.extension",
"sliceName": "rangeType",
"short": "Noise range type for perturb: fixed (absolute) or proportional (relative to value).",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:rangeType.url",
"path": "Extension.extension.url",
"fixedUri": "rangeType"
},
{
"id": "Extension.extension:rangeType.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "code"
}
],
"binding": {
"strength": "extensible",
"valueSet": "http://health-samurai.io/fhir/core/ValueSet/perturb-range-type"
}
},
{
"id": "Extension.extension:roundTo",
"path": "Extension.extension",
"sliceName": "roundTo",
"short": "Decimal places to round to after perturbation. 0 means round to integer.",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:roundTo.url",
"path": "Extension.extension.url",
"fixedUri": "roundTo"
},
{
"id": "Extension.extension:roundTo.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "integer"
}
]
},
{
"id": "Extension.extension:custom_function",
"path": "Extension.extension",
"sliceName": "custom_function",
"short": "Name of a custom PostgreSQL function to apply. First argument is the column value (text), optional second argument via custom_arg.",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:custom_function.url",
"path": "Extension.extension.url",
"fixedUri": "custom_function"
},
{
"id": "Extension.extension:custom_function.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"constraint": [
{
"key": "deident-customfn-1",
"severity": "error",
"human": "Function name must be a valid SQL identifier (letters, digits, underscores, dots)",
"expression": "$this.matches('^[a-zA-Z][a-zA-Z0-9_.]*[%content%]#39;)"
}
],
"type": [
{
"code": "string"
}
]
},
{
"id": "Extension.extension:custom_arg",
"path": "Extension.extension",
"sliceName": "custom_arg",
"short": "Optional second argument passed to the custom function.",
"min": 0,
"max": "1"
},
{
"id": "Extension.extension:custom_arg.url",
"path": "Extension.extension.url",
"fixedUri": "custom_arg"
},
{
"id": "Extension.extension:custom_arg.value[x]",
"path": "Extension.extension.value[x]",
"min": 1,
"type": [
{
"code": "string"
},
{
"code": "integer"
},
{
"code": "decimal"
},
{
"code": "boolean"
},
{
"code": "code"
}
]
},
{
"id": "Extension.url",
"path": "Extension.url",
"fixedUri": "http://health-samurai.io/fhir/core/StructureDefinition/de-identification"
},
{
"id": "Extension.value[x]",
"path": "Extension.value[x]",
"max": "0"
}
]
},
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Extension"
}