Security and PrivacyPublish-box (todo)
| Security Work Group | Maturity Level: N/A | Standards Status: Informative | Compartments: Device, Patient, Practitioner, RelatedPerson |
Raw Turtle (+ also see Turtle/RDF Format Specification)
Example of using Provenance as De-Identifiation linkage with security tag protection, enabling Re-Identification with authorization.
@prefix fhir: <http://hl7.org/fhir/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sct: <http://snomed.info/id/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
# - resource -------------------------------------------------------------------
[a fhir:Bundle ;
fhir:nodeRole fhir:treeRoot ;
fhir:id [ fhir:v "example-anon0"] ; #
fhir:meta [
fhir:lastUpdated [ fhir:v "2014-08-18T01:43:30Z"^^xsd:dateTime ] ;
fhir:security ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-Confidentiality"^^xsd:anyURI ] ; # Bundle confidentiality at high water mark of most sensitive
fhir:code [ fhir:v "V" ]
] [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-ObservationValue"^^xsd:anyURI ] ;
fhir:code [ fhir:v "PSEUDED" ]
] )
] ; # a search bundle on anon0 patient by a HIGHLY Priviliaged User that is authorized to see linkage
fhir:type [ fhir:v "searchset"] ; #
fhir:link ( [
fhir:relation [ fhir:v "self" ] ;
fhir:url [ fhir:v "https://example.com/fhir/Patient/anon0/$everything"^^xsd:anyURI ]
] ) ; #
fhir:entry ( [
fhir:fullUrl [ fhir:v "http://example.org/fhir/Provenance/anon0"^^xsd:anyURI ] ;
fhir:resource ( <http://example.org/fhir/Provenance/anon0> ) ;
fhir:search [
fhir:mode [ fhir:v "match" ]
]
] [
fhir:fullUrl [ fhir:v "http://example.org/fhir/Patient/anon0"^^xsd:anyURI ] ;
fhir:resource ( <http://example.org/fhir/Patient/anon0> ) ;
fhir:search [
fhir:mode [ fhir:v "match" ]
]
] [
fhir:fullUrl [ fhir:v "http://example.org/fhir/Condition/anon0"^^xsd:anyURI ] ;
fhir:resource ( <http://example.org/fhir/Condition/anon0> ) ;
fhir:search [
fhir:mode [ fhir:v "match" ]
]
] )] . #
<http://example.org/fhir/Provenance/anon0> a fhir:Provenance ;
fhir:id [ fhir:v "anon0"] ; # This Provenance shows a link between real-world and anon for a given patient
fhir:meta [
fhir:security ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-Confidentiality"^^xsd:anyURI ] ; # Provenance is the link between real-world and anon, so is highest possible confidentiality
fhir:code [ fhir:v "V" ]
] [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-ObservationValue"^^xsd:anyURI ] ;
fhir:code [ fhir:v "PSEUDED" ]
] )
] ; #
fhir:text [
fhir:status [ fhir:v "generated" ] ;
fhir:div "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p><b>Generated Narrative: Provenance</b><a name=\"anon0\"> </a></p><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\">Resource Provenance "anon0" </p><p style=\"margin-bottom: 0px\">Security Labels: <span title=\"{http://terminology.hl7.org/CodeSystem/v3-Confidentiality http://terminology.hl7.org/CodeSystem/v3-Confidentiality}\">http://terminology.hl7.org/CodeSystem/v3-Confidentiality</span>, <span title=\"{http://terminology.hl7.org/CodeSystem/v3-ObservationValue http://terminology.hl7.org/CodeSystem/v3-ObservationValue}\">http://terminology.hl7.org/CodeSystem/v3-ObservationValue</span></p></div><p><b>target</b>: <a href=\"broken-link.html\">http://example.org/fhir/Patient/anon0</a></p><p><b>recorded</b>: 27 June 2015, 8:39:24 am</p><p><b>policy</b>: <span title=\" policy would indicate the rules used for De-Identification, and appropriate purposes of use of the data \"><a href=\"http://example.org/policies/666\">http://example.org/policies/666</a></span></p><p><b>activity</b>: De-Identify (Anononymize) Record Lifecycle Event <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"http://terminology.hl7.org/5.1.0/CodeSystem-iso-21089-lifecycle.html\">ISO 21089 2017 Health Record Lifecycle Events</a>#deidentify)</span></p><h3>Agents</h3><table class=\"grid\"><tr><td>-</td><td><b>Type</b></td><td><b>Who</b></td></tr><tr><td>*</td><td>Assembler <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"http://terminology.hl7.org/5.1.0/CodeSystem-provenance-participant-type.html\">Provenance participant type</a>#assembler)</span></td><td><span>: Device/software</span></td></tr></table><h3>Entities</h3><table class=\"grid\"><tr><td>-</td><td><b>Role</b></td><td><b>What</b></td></tr><tr><td>*</td><td>source</td><td><a href=\"patient-example.html\">Patient/example</a> "Peter CHALMERS"</td></tr></table></div>"
] ; #
fhir:target ( [
fhir:link <http://example.org/fhir/Patient/anon0> ;
fhir:reference [ fhir:v "http://example.org/fhir/Patient/anon0" ]
] ) ; #
fhir:recorded [ fhir:v "2015-06-27T08:39:24+10:00"^^xsd:dateTime] ; #
fhir:policy ( [ fhir:v "http://example.org/policies/666"^^xsd:anyURI] ) ; # policy would indicate the rules used for De-Identification, and appropriate purposes of use of the data
fhir:activity [
fhir:coding ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle"^^xsd:anyURI ] ;
fhir:code [ fhir:v "deidentify" ]
] )
] ; #
fhir:agent ( [
fhir:type [
fhir:coding ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/provenance-participant-type"^^xsd:anyURI ] ;
fhir:code [ fhir:v "assembler" ]
] )
] ;
fhir:who [
fhir:display [ fhir:v "Device/software" ]
]
] ) ; # not identified in original patient compartment as should not show up there (confidentiatltyCode V protected too)
fhir:entity ( [
fhir:role [ fhir:v "source" ] ;
fhir:what [
fhir:reference [ fhir:v "Patient/example" ]
]
] ) . #
<http://example.org/fhir/Patient/anon0> a fhir:Patient ;
fhir:id [ fhir:v "anon0"] ; #
fhir:meta [
fhir:security ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-Confidentiality"^^xsd:anyURI ] ;
fhir:code [ fhir:v "L" ]
] [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-ObservationValue"^^xsd:anyURI ] ;
fhir:code [ fhir:v "PSEUDED" ]
] )
] ; # De-Identifed equivilant, removing all direct identifiers, and keeping only minimally necessary indirect identifiers
fhir:text [
fhir:status [ fhir:v "generated" ] ;
fhir:div "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p style=\"border: 1px #661aff solid; background-color: #e6e6ff; padding: 10px;\"><b>First-0 Anon-0 </b> male, DoB: 1974-12-01</p><hr/></div>"
] ; #
fhir:name ( [
fhir:family [ fhir:v "Anon-0" ] ; # some made up name
fhir:given ( [ fhir:v "First-0" ] )
] ) ; #
fhir:gender [ fhir:v "male"] ; # male/female gender is needed, and group is big enough.
fhir:birthDate [ fhir:v "1974-12-01"^^xsd:date] . # birthdate is generalized to 1st of month of the birth year
<http://example.org/fhir/Condition/anon0> a fhir:Condition ;
fhir:id [ fhir:v "anon0"] ; #
fhir:meta [
fhir:security ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-Confidentiality"^^xsd:anyURI ] ;
fhir:code [ fhir:v "L" ]
] [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/v3-ObservationValue"^^xsd:anyURI ] ;
fhir:code [ fhir:v "PSEUDED" ]
] )
] ; # De-Identified data, change reference to Patient, eliminate free-text, and fuzz dates
fhir:text [
fhir:status [ fhir:v "generated" ] ;
fhir:div "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p><b>Generated Narrative: Condition</b><a name=\"anon0\"> </a></p><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\">Resource Condition "anon0" </p><p style=\"margin-bottom: 0px\">Security Labels: <span title=\"{http://terminology.hl7.org/CodeSystem/v3-Confidentiality http://terminology.hl7.org/CodeSystem/v3-Confidentiality}\">http://terminology.hl7.org/CodeSystem/v3-Confidentiality</span>, <span title=\"{http://terminology.hl7.org/CodeSystem/v3-ObservationValue http://terminology.hl7.org/CodeSystem/v3-ObservationValue}\">http://terminology.hl7.org/CodeSystem/v3-ObservationValue</span></p></div><p><b>clinicalStatus</b>: Active <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"http://terminology.hl7.org/5.1.0/CodeSystem-condition-clinical.html\">Condition Clinical Status Codes</a>#active)</span></p><p><b>verificationStatus</b>: Confirmed <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"http://terminology.hl7.org/5.1.0/CodeSystem-condition-ver-status.html\">ConditionVerificationStatus</a>#confirmed)</span></p><p><b>category</b>: Encounter Diagnosis <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"http://terminology.hl7.org/5.1.0/CodeSystem-condition-category.html\">Condition Category Codes</a>#encounter-diagnosis; <a href=\"https://browser.ihtsdotools.org/\">SNOMED CT</a>#439401001 "Diagnosis")</span></p><p><b>severity</b>: Severe <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"https://browser.ihtsdotools.org/\">SNOMED CT</a>#24484000)</span></p><p><b>code</b>: Burn of ear <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"https://browser.ihtsdotools.org/\">SNOMED CT</a>#39065001)</span></p><p><b>bodySite</b>: Left external ear structure <span style=\"background: LightGoldenRodYellow; margin: 4px; border: 1px solid khaki\"> (<a href=\"https://browser.ihtsdotools.org/\">SNOMED CT</a>#49521004)</span></p><p><b>subject</b>: <a href=\"broken-link.html\">Patient/anon0</a></p><p><b>onset</b>: <span title=\" dates aligned to first of month \">2012-05-01</span></p></div>"
] ; #
fhir:clinicalStatus [
fhir:coding ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/condition-clinical"^^xsd:anyURI ] ;
fhir:code [ fhir:v "active" ]
] )
] ; #
fhir:verificationStatus [
fhir:coding ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/condition-ver-status"^^xsd:anyURI ] ;
fhir:code [ fhir:v "confirmed" ]
] )
] ; #
fhir:category ( [
fhir:coding ( [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/condition-category"^^xsd:anyURI ] ;
fhir:code [ fhir:v "encounter-diagnosis" ] ;
fhir:display [ fhir:v "Encounter Diagnosis" ]
] [
a sct:439401001 ;
fhir:system [ fhir:v "http://snomed.info/sct"^^xsd:anyURI ] ;
fhir:code [ fhir:v "439401001" ] ;
fhir:display [ fhir:v "Diagnosis" ]
] )
] ) ; #
fhir:severity [
fhir:coding ( [
a sct:24484000 ;
fhir:system [ fhir:v "http://snomed.info/sct"^^xsd:anyURI ] ;
fhir:code [ fhir:v "24484000" ] ;
fhir:display [ fhir:v "Severe" ]
] )
] ; #
fhir:code [
fhir:coding ( [
a sct:39065001 ;
fhir:system [ fhir:v "http://snomed.info/sct"^^xsd:anyURI ] ;
fhir:code [ fhir:v "39065001" ] ;
fhir:display [ fhir:v "Burn of ear" ]
] )
] ; #
fhir:bodySite ( [
fhir:coding ( [
a sct:49521004 ;
fhir:system [ fhir:v "http://snomed.info/sct"^^xsd:anyURI ] ;
fhir:code [ fhir:v "49521004" ] ;
fhir:display [ fhir:v "Left external ear structure" ]
] )
] ) ; #
fhir:subject [
fhir:reference [ fhir:v "Patient/anon0" ] # patient as anon0 id
] ; #
fhir:onset [ fhir:v "2012-05-01"^^xsd:date] . # dates aligned to first of month
# -------------------------------------------------------------------------------------
Usage note: every effort has been made to ensure that the examples are correct and useful, but they are not a normative part of the specification.
FHIR ®© HL7.org 2011+. FHIR R5 hl7.fhir.core#5.0.0 generated on Sun, Mar 26, 2023 15:25+1100.
Links: Search |
Version History |
Contents |
Glossary |
QA |
Compare to R4 |
Compare to R4B |
|
Propose a change