FHIR © HL7.org  |  FHIRsmith 4.0.1  |  Server Home  |  XIG Home  |  XIG Stats  | 

FHIR IG analytics

Packageio.health-samurai.core.r4b
Resource TypeStructureDefinition
IdStructureDefinition-de-identification.json
FHIR VersionR4B
Sourcehttps://simplifier.net/resolve?scope=io.health-samurai.core.r4b@0.2606.2&canonical=http://health-samurai.io/fhir/core/StructureDefinition/de-identification
URLhttp://health-samurai.io/fhir/core/StructureDefinition/de-identification
Version0.2606.2
Statusactive
NamedeIdentification
TitleDe-Identification
DescriptionExtension 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.
TypeExtension
Kindcomplex-type

Resources that use this resource

No resources found


Resources that this resource uses

ValueSet
io.health-samurai.core.r4b#0.2606.2de-identification-methodDe-Identification Method
io.health-samurai.core.r4b#0.2606.2perturb-range-typePerturb Range Type

Examples of Use for Extension

No extension usage examples found


Narrative

No narrative content found in resource


Source1

{
  "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"
}