Пример или плагин для анонимизации FHIR Json - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть набор медицинской информации в формате FHIR json. Перед сохранением такой конфиденциальной информации я хотел бы анонимно передать конфиденциальную информацию, такую ​​как имя, номер телефона, адрес, контакты врача и т. Д. c.

Я гуглил по поводу анонимизации fhir json и обнаружил, что существуют некоторые метки безопасности, которые классифицируют информацию как конфиденциальную, ограниченную и т. Д. c - https://www.hl7.org/fhir/valueset-security-labels.html

https://www.hl7.org/fhir/extension-auditevent-anonymized.html - речь идет о расширении и структуре анонимизированных данных.

Я не уверен, как заменить эти переменные на коды безопасности. Есть ли API, который делает это, или я должен найти все теги, которые являются чувствительными и l oop json и заменить теги кодом безопасности.

Может кто-нибудь привести пример того, как этого можно достичь.

я приложил образец 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"
  }
}

1 Ответ

2 голосов
/ 16 апреля 2020

Не существует «стандартного» способа анонимизации, потому что анонимизация - это подход к снижению риска, который требует знания как угроз, от которых вы пытаетесь защищаться, так и способов использования данных. В сочетании с другими данными любой элемент потенциально может быть «чувствительным». Это также может быть важно для предполагаемого анализа.

Расширение, которое вы просматриваете, указывает c для аудита события. На самом деле вы бы пометили ресурс Patient как анонимный с помощью тега безопасности ANONYED в resource.meta. Я не верю, что есть стандартное расширение для обозначения того, какие элементы должны быть анонимными. Если бы существовал такой элемент, элемент также должен был бы указать , как данные должны быть анонимными, и в алгоритме обычно необходимо учитывать несколько элементов - или даже несколько ресурсов. Например, следует ли менять даты на случайные значения или просто сместить день? Если все даты в наборе связанных ресурсов будут сдвинуты на одну и ту же сумму или они будут скорректированы независимо. Если вы меняете практикующих, на которых указывают разные ресурсы, должны ли они остаться такими, как есть, каждый из них изменился случайным образом, один и тот же практик стал одним и тем же случайным практикующим?

...