匿名化 FHIR 的示例或插件 Json
Example or plugin to anonymize FHIR Json
我有一组 FHIR json 格式的医疗保健信息。在存储此类敏感信息之前,我想将敏感信息匿名化,例如姓名、phone 号码、地址、医生联系方式等。
我在谷歌上搜索了有关匿名化 fhir json 的信息,发现存在一些安全标签,将信息分类为机密、受限等 - https://www.hl7.org/fhir/valueset-security-labels.html
https://www.hl7.org/fhir/extension-auditevent-anonymized.html - 这讨论了匿名数据的扩展和结构。
我不确定如何用安全代码替换这些变量。是否有任何 api 可以做到这一点,或者我必须找到所有敏感的标签并循环 json 并用安全代码替换标签。
谁能给我一个可以实现的例子。
我附上了我通过 synthea 生成的示例 json
{
"fullUrl": "urn:uuid:7a534e34-40a2-48ab-bc92-066d23251a8b",
"resource": {
"resourceType": "Patient",
"id": "7a534e34-40a2-48ab-bc92-066d23251a8b",
"text": {
"status": "generated",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Generated by <a href=\"https://github.com/synthetichealth/synthea\">Synthea</a>.Version identifier: v2.5.0-378-gee8c6470\n . Person seed: 6477291342685874262 Population seed: 1586936726889</div>"
},
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName",
"valueString": "Hilma831 Luettgen772"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
"valueAddress": {
"city": "Boston",
"state": "Massachusetts",
"country": "US"
}
},
{
"url": "http://synthetichealth.github.io/synthea/disability-adjusted-life-years",
"valueDecimal": 3.3178400761167306
},
{
"url": "http://synthetichealth.github.io/synthea/quality-adjusted-life-years",
"valueDecimal": 71.68215992388328
}
],
"identifier": [
{
"system": "https://github.com/synthetichealth/synthea",
"value": "7a534e34-40a2-48ab-bc92-066d23251a8b"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MR",
"display": "Medical Record Number"
}
],
"text": "Medical Record Number"
},
"system": "http://hospital.smarthealthit.org",
"value": "7a534e34-40a2-48ab-bc92-066d23251a8b"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "SS",
"display": "Social Security Number"
}
],
"text": "Social Security Number"
},
"system": "http://hl7.org/fhir/sid/us-ssn",
"value": "999-80-4232"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "DL",
"display": "Driver's License"
}
],
"text": "Driver's License"
},
"system": "urn:oid:2.16.840.1.113883.4.3.25",
"value": "S99911013"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "PPN",
"display": "Passport Number"
}
],
"text": "Passport Number"
},
"system": "http://standardhealthrecord.org/fhir/StructureDefinition/passportNumber",
"value": "X66843459X"
}
],
"name": [
{
"use": "official",
"family": "Kreiger457",
"given": [
"Anthony633"
],
"prefix": [
"Mr."
]
}
],
"telecom": [
{
"system": "phone",
"value": "555-660-2614",
"use": "home"
}
],
"gender": "male",
"birthDate": "1939-12-25",
"deceasedDateTime": "2015-02-02T22:36:55+05:30",
"address": [
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/geolocation",
"extension": [
{
"url": "latitude",
"valueDecimal": 42.11942297974089
},
{
"url": "longitude",
"valueDecimal": -71.21834679934824
}
]
}
],
"line": [
"496 Tromp Mews Unit 96"
],
"city": "Walpole",
"state": "Massachusetts",
"postalCode": "02081",
"country": "US"
}
],
"maritalStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus",
"code": "M",
"display": "M"
}
],
"text": "M"
},
"multipleBirthBoolean": false,
"communication": [
{
"language": {
"coding": [
{
"system": "urn:ietf:bcp:47",
"code": "en-US",
"display": "English"
}
],
"text": "English"
}
}
]
},
"request": {
"method": "POST",
"url": "Patient"
}
}
没有 'standard' 匿名化方法,因为匿名化是一种降低风险的方法,需要了解您要防御的威胁以及需要如何使用数据。当与其他数据结合时,任何元素都可能是 'sensitive'。它对于预期的分析也可能是必不可少的。
您正在查看的扩展程序特定于审计事件。您实际将 Patient 资源标记为匿名的方式是使用 resource.meta 中的 ANONYED 安全标签。我不相信有一个标准的扩展来标记哪些元素 应该 被匿名化。如果有这样一个元素,该元素还需要指示如何数据应该被匿名化,并且该算法通常需要考虑多个元素——甚至多个资源。例如。日期应该更改为随机值,还是只是改变日期?相关资源集中的所有日期是否应该移动相同的数量,或者是否应该单独调整。如果你在改变不同资源指向的从业者,他们是否应该保持原样,每个随机改变,同一个从业者变成同一个随机从业者?
我有一组 FHIR json 格式的医疗保健信息。在存储此类敏感信息之前,我想将敏感信息匿名化,例如姓名、phone 号码、地址、医生联系方式等。
我在谷歌上搜索了有关匿名化 fhir json 的信息,发现存在一些安全标签,将信息分类为机密、受限等 - https://www.hl7.org/fhir/valueset-security-labels.html
https://www.hl7.org/fhir/extension-auditevent-anonymized.html - 这讨论了匿名数据的扩展和结构。
我不确定如何用安全代码替换这些变量。是否有任何 api 可以做到这一点,或者我必须找到所有敏感的标签并循环 json 并用安全代码替换标签。
谁能给我一个可以实现的例子。
我附上了我通过 synthea 生成的示例 json
{
"fullUrl": "urn:uuid:7a534e34-40a2-48ab-bc92-066d23251a8b",
"resource": {
"resourceType": "Patient",
"id": "7a534e34-40a2-48ab-bc92-066d23251a8b",
"text": {
"status": "generated",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Generated by <a href=\"https://github.com/synthetichealth/synthea\">Synthea</a>.Version identifier: v2.5.0-378-gee8c6470\n . Person seed: 6477291342685874262 Population seed: 1586936726889</div>"
},
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName",
"valueString": "Hilma831 Luettgen772"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
"valueAddress": {
"city": "Boston",
"state": "Massachusetts",
"country": "US"
}
},
{
"url": "http://synthetichealth.github.io/synthea/disability-adjusted-life-years",
"valueDecimal": 3.3178400761167306
},
{
"url": "http://synthetichealth.github.io/synthea/quality-adjusted-life-years",
"valueDecimal": 71.68215992388328
}
],
"identifier": [
{
"system": "https://github.com/synthetichealth/synthea",
"value": "7a534e34-40a2-48ab-bc92-066d23251a8b"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MR",
"display": "Medical Record Number"
}
],
"text": "Medical Record Number"
},
"system": "http://hospital.smarthealthit.org",
"value": "7a534e34-40a2-48ab-bc92-066d23251a8b"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "SS",
"display": "Social Security Number"
}
],
"text": "Social Security Number"
},
"system": "http://hl7.org/fhir/sid/us-ssn",
"value": "999-80-4232"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "DL",
"display": "Driver's License"
}
],
"text": "Driver's License"
},
"system": "urn:oid:2.16.840.1.113883.4.3.25",
"value": "S99911013"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "PPN",
"display": "Passport Number"
}
],
"text": "Passport Number"
},
"system": "http://standardhealthrecord.org/fhir/StructureDefinition/passportNumber",
"value": "X66843459X"
}
],
"name": [
{
"use": "official",
"family": "Kreiger457",
"given": [
"Anthony633"
],
"prefix": [
"Mr."
]
}
],
"telecom": [
{
"system": "phone",
"value": "555-660-2614",
"use": "home"
}
],
"gender": "male",
"birthDate": "1939-12-25",
"deceasedDateTime": "2015-02-02T22:36:55+05:30",
"address": [
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/geolocation",
"extension": [
{
"url": "latitude",
"valueDecimal": 42.11942297974089
},
{
"url": "longitude",
"valueDecimal": -71.21834679934824
}
]
}
],
"line": [
"496 Tromp Mews Unit 96"
],
"city": "Walpole",
"state": "Massachusetts",
"postalCode": "02081",
"country": "US"
}
],
"maritalStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus",
"code": "M",
"display": "M"
}
],
"text": "M"
},
"multipleBirthBoolean": false,
"communication": [
{
"language": {
"coding": [
{
"system": "urn:ietf:bcp:47",
"code": "en-US",
"display": "English"
}
],
"text": "English"
}
}
]
},
"request": {
"method": "POST",
"url": "Patient"
}
}
没有 'standard' 匿名化方法,因为匿名化是一种降低风险的方法,需要了解您要防御的威胁以及需要如何使用数据。当与其他数据结合时,任何元素都可能是 'sensitive'。它对于预期的分析也可能是必不可少的。
您正在查看的扩展程序特定于审计事件。您实际将 Patient 资源标记为匿名的方式是使用 resource.meta 中的 ANONYED 安全标签。我不相信有一个标准的扩展来标记哪些元素 应该 被匿名化。如果有这样一个元素,该元素还需要指示如何数据应该被匿名化,并且该算法通常需要考虑多个元素——甚至多个资源。例如。日期应该更改为随机值,还是只是改变日期?相关资源集中的所有日期是否应该移动相同的数量,或者是否应该单独调整。如果你在改变不同资源指向的从业者,他们是否应该保持原样,每个随机改变,同一个从业者变成同一个随机从业者?