Skip to content

Commit

Permalink
Merge pull request #79 from IHE/remove_displaynames
Browse files Browse the repository at this point in the history
remove display names from profiling
  • Loading branch information
JohnMoehrke authored Jul 25, 2023
2 parents 6301bdf + e0ad824 commit 0b8e76e
Show file tree
Hide file tree
Showing 12 changed files with 140 additions and 100 deletions.
48 changes: 24 additions & 24 deletions input/fsh/AuthZ.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ An AduitEvent recording a permit authorization decision by a Consent Decision Se
- other data may be recorded that was used in the decision
"""
* modifierExtension 0..0
* type = DCM#110113 "Security Alert"
* type = DCM#110113 // "Security Alert"
* subtype from AuthZsubTypeVS
* action = #E
// subtype
Expand All @@ -72,7 +72,7 @@ An AduitEvent recording a permit authorization decision by a Consent Decision Se
user 1..1 and
userorg 1..1 and
authorizer 1..1
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 "Application"
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 // "Application"
* agent[client].who 1..1 // client identifier, May be an Device Resource, but more likely an identifier given the App identified in the OAuth token
* agent[client].network 1..1 // as known by TCP connection information
* agent[client].role 0..0
Expand All @@ -82,7 +82,7 @@ An AduitEvent recording a permit authorization decision by a Consent Decision Se
* agent[client].policy MS // input client token id
* agent[client].media 0..0
* agent[client].purposeOfUse 0..0
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP "information recipient"
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP // "information recipient"
* agent[user].who 1..1 // May be a Resource, but likely just an identifier from the OAuth token
* agent[user].requestor = true
* agent[user].role MS // if the OAuth token includes any roles, they are recorded here
Expand All @@ -93,7 +93,7 @@ An AduitEvent recording a permit authorization decision by a Consent Decision Se
* agent[user].media 0..0 // media is physical storage media identification
* agent[user].network 0..0 // users are not network devices
* agent[user].purposeOfUse MS // if the requested purposeOfUse is applied to just the user
* agent[userorg].type = http://terminology.hl7.org/CodeSystem/v3-RoleClass#PROV "healthcare provider"
* agent[userorg].type = http://terminology.hl7.org/CodeSystem/v3-RoleClass#PROV // "healthcare provider"
* agent[userorg].who 1..1 MS
* agent[userorg].requestor = false
* agent[userorg].role 0..0
Expand All @@ -104,7 +104,7 @@ An AduitEvent recording a permit authorization decision by a Consent Decision Se
* agent[userorg].media 0..0 // media is physical storage media identification
* agent[userorg].network 0..0 // users are not network devices
* agent[userorg].purposeOfUse MS // if the request purposeOfUse is applied to the whole organization
* agent[authorizer].type = http://terminology.hl7.org/CodeSystem/extra-security-role-type#authserver "authorization server"
* agent[authorizer].type = http://terminology.hl7.org/CodeSystem/extra-security-role-type#authserver // "authorization server"
* agent[authorizer] obeys val-audit-source
* agent[authorizer].who 1..1
* agent[authorizer].requestor = false
Expand All @@ -125,11 +125,11 @@ An AduitEvent recording a permit authorization decision by a Consent Decision Se
patient 1..1 and
consent 1..* and
token 0..1
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 // "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 // "Patient"
* entity[patient].what 1..1
* entity[patient].what only Reference(Patient)
* entity[consent].type = http://hl7.org/fhir/resource-types#Consent "Consent"
* entity[consent].type = http://hl7.org/fhir/resource-types#Consent // "Consent"
* entity[consent].what 1..1 MS // consent identifier
* entity[token].type = UserAgentTypes#UserOauthAgent
* entity[token].what 1..1
Expand All @@ -155,29 +155,29 @@ Example AuditEvent showing an authorization decision.
* action = #E
//* severity = #Informational
* recorded = 2021-12-27T09:49:00.000Z
* outcome = http://terminology.hl7.org/CodeSystem/audit-event-outcome#0 "Success"
* outcome = http://terminology.hl7.org/CodeSystem/audit-event-outcome#0 // "Success"
* source.site = "server.example.com"
* source.observer = Reference(Device/ex-authz)
* source.type = http://terminology.hl7.org/CodeSystem/security-source-type#6 "Security Server"
* agent[authorizer].type = http://terminology.hl7.org/CodeSystem/extra-security-role-type#authserver "authorization server"
* source.type = http://terminology.hl7.org/CodeSystem/security-source-type#6 // "Security Server"
* agent[authorizer].type = http://terminology.hl7.org/CodeSystem/extra-security-role-type#authserver // "authorization server"
* agent[authorizer].who = Reference(Device/ex-authz)
* agent[authorizer].requestor = false
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 "Application"
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 // "Application"
* agent[client].who = Reference(Device/ex-device)
* agent[client].network.address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
* agent[client].network.type = http://hl7.org/fhir/network-type#2 "IP Address"
* agent[client].network.type = http://hl7.org/fhir/network-type#2 // "IP Address"
* agent[client].requestor = false
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP "information recipient"
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP // "information recipient"
* agent[user].who = Reference(Practitioner/ex-practitioner)
* agent[user].purposeOfUse = http://terminology.hl7.org/CodeSystem/v3-ActReason#PATRQT
* agent[user].requestor = true
* agent[userorg].type = http://terminology.hl7.org/CodeSystem/v3-RoleClass#PROV "healthcare provider"
* agent[userorg].type = http://terminology.hl7.org/CodeSystem/v3-RoleClass#PROV // "healthcare provider"
* agent[userorg].who = Reference(Organization/ex-organization)
* agent[userorg].requestor = false
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 // "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 // "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[consent].type = http://hl7.org/fhir/resource-types#Consent "Consent"
* entity[consent].type = http://hl7.org/fhir/resource-types#Consent // "Consent"
* entity[consent].what = Reference(Consent/ex-consent)


Expand All @@ -197,23 +197,23 @@ Example AuditEvent showing an authorization decision resulting in deny.
* source.site = "server.example.com"
* source.observer = Reference(Device/ex-authz)
* source.type = http://terminology.hl7.org/CodeSystem/security-source-type#6 "Security Server"
* agent[authorizer].type = http://terminology.hl7.org/CodeSystem/extra-security-role-type#authserver "authorization server"
* agent[authorizer].type = http://terminology.hl7.org/CodeSystem/extra-security-role-type#authserver // "authorization server"
* agent[authorizer].who = Reference(Device/ex-authz)
* agent[authorizer].requestor = false
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 "Application"
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 // "Application"
* agent[client].who = Reference(Device/ex-device)
* agent[client].network.address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
* agent[client].network.type = http://hl7.org/fhir/network-type#2 "IP Address"
* agent[client].requestor = false
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP "information recipient"
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP // "information recipient"
* agent[user].who = Reference(Practitioner/ex-practitioner)
* agent[user].purposeOfUse = http://terminology.hl7.org/CodeSystem/v3-ActReason#PATRQT
* agent[user].requestor = true
* agent[userorg].type = http://terminology.hl7.org/CodeSystem/v3-RoleClass#PROV "healthcare provider"
* agent[userorg].type = http://terminology.hl7.org/CodeSystem/v3-RoleClass#PROV // "healthcare provider"
* agent[userorg].who = Reference(Organization/ex-organization)
* agent[userorg].requestor = false
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 // "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[consent].type = http://hl7.org/fhir/resource-types#Consent "Consent"
* entity[consent].type = http://hl7.org/fhir/resource-types#Consent // "Consent"
* entity[consent].what = Reference(Consent/ex-consent)
66 changes: 52 additions & 14 deletions input/fsh/Disclose.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Defines constraints on the AuditEvent Resource to record when a Privacy Disclosu
- shall have a set identity entity
"""
* modifierExtension 0..0
* type = DCM#110107 "Import"
* type = DCM#110107 // "Import"
* action = #C
* insert requireAtLeastOneMatch(subtype, disclosure, http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle#disclose )
* subtype ^slicing.description = "needs to at least be a disclosure event"
Expand All @@ -39,16 +39,16 @@ Defines constraints on the AuditEvent Resource to record when a Privacy Disclosu
authorizer 0..1
// may be many including app identity, user identity, etc
// likely do need to express WHO requested the data be disclosued, and WHO authorized the disclosure
* agent[source].type = DCM#110153 "Source Role ID"
* agent[source].type = DCM#110153 // "Source Role ID"
* agent[source].who 1..1
* agent[source].network 1..1
* agent[recipient] obeys val-audit-source
* agent[recipient].type = DCM#110152 "Destination Role ID"
* agent[recipient].type = DCM#110152 // "Destination Role ID"
* agent[recipient].who 1..1
* agent[recipient].network 1..1
* agent[custodian].type = SCT#159541003 "Record keeping/library clerk"
* agent[custodian].type = SCT#159541003 // "Record keeping/library clerk"
* agent[custodian].who 1..1
* agent[authorizer].type = SCT#429577009 "Patient Advocate"
* agent[authorizer].type = SCT#429577009 // "Patient Advocate"
* agent[authorizer].who 1..1
* entity 2..*
* entity ^slicing.discriminator.type = #pattern
Expand All @@ -57,8 +57,8 @@ Defines constraints on the AuditEvent Resource to record when a Privacy Disclosu
* entity ^slicing.description = "patient and some data involved"
* entity contains
patient 1..1
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 // "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 // "Patient"
* entity[patient].what 1..1
* entity[patient].what only Reference(Patient)

Expand Down Expand Up @@ -88,7 +88,7 @@ Defines constraints on the AuditEvent Resource to record when a Privacy Disclosu
- shall have the set of data entity(ies)
"""
* modifierExtension 0..0
* type = DCM#110106 "Export"
* type = DCM#110106 // "Export"
* action = #R
* insert requireAtLeastOneMatch(subtype, disclosure, http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle#disclose)
* subtype ^slicing.description = "needs to at least be a disclosure event"
Expand All @@ -110,16 +110,16 @@ Defines constraints on the AuditEvent Resource to record when a Privacy Disclosu
authorizer 0..1
// may be many including app identity, user identity, etc
// likely do need to express WHO requested the data be disclosued, and WHO authorized the disclosure
* agent[source].type = DCM#110153 "Source Role ID"
* agent[source].type = DCM#110153 // "Source Role ID"
* agent[source].who 1..1
* agent[source].network 1..1
* agent[source] obeys val-audit-source
* agent[recipient].type = DCM#110152 "Destination Role ID"
* agent[recipient].type = DCM#110152 // "Destination Role ID"
* agent[recipient].who 1..1
* agent[recipient].network 1..1
* agent[custodian].type = SCT#159541003 "Record keeping/library clerk"
* agent[custodian].type = SCT#159541003 // "Record keeping/library clerk"
* agent[custodian].who 1..1
* agent[authorizer].type = SCT#429577009 "Patient Advocate"
* agent[authorizer].type = SCT#429577009 // "Patient Advocate"
* agent[authorizer].who 1..1
* entity 2..*
* entity ^slicing.discriminator.type = #pattern
Expand All @@ -128,8 +128,8 @@ Defines constraints on the AuditEvent Resource to record when a Privacy Disclosu
* entity ^slicing.description = "patient and some data involved"
* entity contains
patient 1..1
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 "Patient"
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 // "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 // "Patient"
* entity[patient].what 1..1
* entity[patient].what only Reference(Patient)

Expand Down Expand Up @@ -285,3 +285,41 @@ Usage: #example
* entity[1].role = http://terminology.hl7.org/CodeSystem/object-role#3 "Report"
* entity[1].what = Reference(MeasureReport/ex-measurereport)


Instance: ex-auditPrivacyDisclosure-recipient-minCodes
InstanceOf: IHE.BasicAudit.PrivacyDisclosure.Recipient
Title: "Audit Example of Privacy Disclosure at recipient"
Description: "Audit Example for a Privacy Disclosure as recorded at the recipient"
Usage: #example
* meta.security = http://terminology.hl7.org/CodeSystem/v3-ActReason#HTEST
* type = DCM#110107 // "Import"
* action = #C
* subtype[disclosure] = http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle#disclose // "Disclose Record Lifecycle Event"
//* severity = #Informational
* recorded = 2020-04-29T09:49:00.000Z
* outcome = http://terminology.hl7.org/CodeSystem/audit-event-outcome#0 // "Success"
* purposeOfEvent = http://terminology.hl7.org/CodeSystem/v3-ActReason#PATRQT // "patient requested"
* source.site = "server.example.com"
* source.observer = Reference(Device/ex-device)
* source.type = http://terminology.hl7.org/CodeSystem/security-source-type#4 // "Application Server"
* agent[source].type = DCM#110153 // "Source Role ID"
* agent[source].requestor = false
* agent[source].who.display = "myMachine.example.org"
* agent[source].network.address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
* agent[source].network.type = http://hl7.org/fhir/network-type#2 // "IP Address"
* agent[recipient].type = DCM#110152 "Destination Role ID"
* agent[recipient].who = Reference(Device/ex-device)
* agent[recipient].requestor = false
* agent[recipient].network.address = "http://server.example.com/fhir"
* agent[recipient].network.type = http://hl7.org/fhir/network-type#5 // "URI"
* agent[authorizer].type = SCT#429577009 "Patient Advocate"
* agent[authorizer].who = Reference(Patient/ex-patient)
* agent[authorizer].requestor = true
* entity[patient].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#1 // "Person"
* entity[patient].role = http://terminology.hl7.org/CodeSystem/object-role#1 // "Patient"
* entity[patient].what = Reference(Patient/ex-patient)
* entity[1].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 // "System Object"
* entity[1].role = http://terminology.hl7.org/CodeSystem/object-role#3 // "Report"
* entity[1].what = Reference(DocumentReference/ex-documentreference)


4 changes: 2 additions & 2 deletions input/fsh/IUAaccessToken.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ A basic AuditEvent profile for when an activity was authorized by an IUA access
* agent contains
oClient 1..1 and
oUser 0..1
* agent[oClient].type = http://dicom.nema.org/resources/ontology/DCM#110150 "Application"
* agent[oClient].type = http://dicom.nema.org/resources/ontology/DCM#110150 // "Application"
* agent[oClient].who 1..1
* agent[oClient].who ^short = "May be a Resource, but likely just an identifier from the OAuth token"
* agent[oClient].who.identifier 1..1
Expand All @@ -93,7 +93,7 @@ A basic AuditEvent profile for when an activity was authorized by an IUA access
* agent[oClient].network 0..1 MS
* agent[oClient].network ^short = "The client as known by TCP connection information"
* agent[oClient].media 0..0
* agent[oUser].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP "information recipient"
* agent[oUser].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP // "information recipient"
* agent[oUser].who 1..1
* agent[oUser].who ^short = "May be a Resource, but likely just an identifier from the OAuth token"
* agent[oUser].who.display MS
Expand Down
18 changes: 9 additions & 9 deletions input/fsh/IUAgetAccessToken.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ This AuditEvent is recorded by Authorization Client and/or Authorization Server
- 1 entity
- the access token request
"""
* type = http://dicom.nema.org/resources/ontology/DCM#110114 "User Authentication"
* type = http://dicom.nema.org/resources/ontology/DCM#110114 // "User Authentication"
* subtype 1..1
* subtype = urn:ihe:event-type-code#ITI-71 "Get Access Token"
* subtype = urn:ihe:event-type-code#ITI-71 // "Get Access Token"
* action = #E
* recorded 1..1
// failures are recorded differently
* outcome = http://terminology.hl7.org/CodeSystem/audit-event-outcome#0 "Success"
* outcome = http://terminology.hl7.org/CodeSystem/audit-event-outcome#0 // "Success"
* agent ^slicing.discriminator.type = #pattern
* agent ^slicing.discriminator.path = "type"
* agent ^slicing.rules = #closed
Expand All @@ -31,15 +31,15 @@ This AuditEvent is recorded by Authorization Client and/or Authorization Server
client 1..1 and
auth-server 1..1 and
user 0..1
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 "Application"
* agent[client].type = http://dicom.nema.org/resources/ontology/DCM#110150 // "Application"
* agent[client].who 1..1 // client identifier, May be an Device Resource, but more likely an identifier given the App identified in the OAuth token
* agent[client].network 1..1 // as known by TCP connection information
* agent[client].media 0..0
* agent[auth-server].type = UserAgentTypes#AuthzOauthService
* agent[auth-server].who 1..1 // server identifier. May be a Device Resource, but likely just an identifier of the domain name
* agent[auth-server].network 1..1 // as known by TCP connection information
* agent[auth-server].media 0..0
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP "information recipient"
* agent[user].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#IRCP // "information recipient"
* agent[user].who 1..1 // May be a Resource, but likely just an identifier from the OAuth token
* agent[user].requestor = true
* agent[user].role MS // if the OAuth token includes any roles, they are recorded here
Expand All @@ -56,15 +56,15 @@ This AuditEvent is recorded by Authorization Client and/or Authorization Server
* entity contains
token-request 1..1 and
token-response 0..1
* entity[token-request].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[token-request].role = http://terminology.hl7.org/CodeSystem/object-role#24 "Query"
* entity[token-request].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 // "System Object"
* entity[token-request].role = http://terminology.hl7.org/CodeSystem/object-role#24 // "Query"
* entity[token-request].what 0..0
* entity[token-request].query 1..1
* entity[token-request].query ^short = "contains the http request in raw form, without the code_verifier value"


* entity[token-response].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 "System Object"
* entity[token-response].role = http://terminology.hl7.org/CodeSystem/object-role#13 "Security Resource"
* entity[token-response].type = http://terminology.hl7.org/CodeSystem/audit-entity-type#2 // "System Object"
* entity[token-response].role = http://terminology.hl7.org/CodeSystem/object-role#13 // "Security Resource"
* entity[token-response].what 1..1
* entity[token-response].what ^short = "holds the token id issued"
* entity[token-response].detail 1..*
Expand Down
Loading

0 comments on commit 0b8e76e

Please sign in to comment.