diff --git a/Dockerfile b/Dockerfile index b12b9a7..294fa7a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM node:lts-bullseye -RUN npm install -g fsh-sushi@3.1.0 +RUN npm install -g fsh-sushi@3.3.3 RUN apt-get update && apt-get -y install openjdk-17-jdk-headless ruby-full build-essential zlib1g-dev RUN gem install jekyll bundler diff --git a/README.md b/README.md index 89e727e..5913e63 100644 --- a/README.md +++ b/README.md @@ -66,14 +66,14 @@ With the above requirements installed locally, run #### On OSX, Linux, or Unix ``` bash -npm install -g fsh-sushi@3.1.0 +npm install -g fsh-sushi@3.3.3 ./_updatePublisher.sh --yes ./_genonce.sh ``` #### On Windows ``` -npm install -g fsh-sushi@3.1.0 +npm install -g fsh-sushi@3.3.3 .\_updatePublisher.bat --yes .\_genonce.bat ``` diff --git a/input/fsh/examples/provenanceCustodianIndividual.fsh b/input/fsh/examples/provenanceCustodianIndividual.fsh new file mode 100644 index 0000000..ee039d1 --- /dev/null +++ b/input/fsh/examples/provenanceCustodianIndividual.fsh @@ -0,0 +1,32 @@ +Instance: ProvenanceCustodianIndividual +InstanceOf: FiBaseInformationCustodianIndividual +Title: "Custodian of information (rekisterinpitäjä), an individual provider" +Description: "Example of Provenance that communicates a private individual healthcare provider as the custodian of information for an episode of care." +Usage: #example +* id = "custodian-individual" +* target = Reference(EpisodeOfCare/id-for-episode-1) +* recorded = "2015-02-07T13:28:17.239+02:00" +* agent[custodian] + * type + * coding[0] = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#CST "custodian" + * text = "Rekisterinpitäjä" + * role[0] + * coding[0] + * system = "urn:oid:1.2.246.537.5.40172" + * code = #2 + * display = "Yksityinen" + * text = "Yksityinen" + * who + * type = #Practitioner + * identifier + * type = http://terminology.hl7.org/CodeSystem/v2-0203#PRN + * system = "urn:oid:1.2.246.537.6.203" + * value = "urn:oid:1.2.246.537.28.10000222116" + * display = "Kalmanlehto Erkki" +* entity[registerType] + * role = #source + * what + * identifier + * system = "urn:oid:1.2.246.537.5.40150" + * value = #10 + * display = "Ammatinharjoittaja" diff --git a/input/fsh/examples/provenanceCustodianOccupationalHealthcare.fsh b/input/fsh/examples/provenanceCustodianOccupationalHealthcare.fsh new file mode 100644 index 0000000..d604667 --- /dev/null +++ b/input/fsh/examples/provenanceCustodianOccupationalHealthcare.fsh @@ -0,0 +1,42 @@ +Instance: ProvenanceCustodianOccupationalHealthcare +InstanceOf: FiBaseInformationCustodianPrivate +Title: "Custodian of information (rekisterinpitäjä), private occupational healthcare" +Description: "Example of Provenance that communicates a private occupational healthcare organization as the custodian of information for an episode of care." +Usage: #example +* id = "custodian-occupational-healthcare" +* target = Reference(EpisodeOfCare/id-for-episode-1) +* recorded = "2015-02-07T13:28:17.239+02:00" +* agent[custodian] + * type + * coding[0] = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#CST "custodian" + * text = "Rekisterinpitäjä" + * role[0] + * coding[0] + * system = "urn:oid:1.2.246.537.5.40172" + * code = #2 + * display = "Yksityinen" + * text = "Yksityinen" + * who + * type = #Organization + * identifier + * type = http://terminology.hl7.org/CodeSystem/v2-0203#XX + * system = "urn:oid:1.2.246.537.6.202" + * value = "urn:oid:1.2.246.10.32515682.10.0" + * display = "Ratinan Terveys Oy" +* entity[registerType] + * role = #source + * what + * identifier + * system = "urn:oid:1.2.246.537.5.40150" + * value = #4 + * display = "Työterveyshuolto" +* entity[registerSpecifierCompanyId] + * role = #source + * what + * identifier + * type = http://terminology.hl7.org/CodeSystem/v2-0203#TAX + * system = "urn:oid:1.2.246.10" + * value = "2606155-7" + * display = "Sensotrend Oy" + + diff --git a/input/fsh/examples/provenanceCustodianPublicHealthcare.fsh b/input/fsh/examples/provenanceCustodianPublicHealthcare.fsh new file mode 100644 index 0000000..80ed869 --- /dev/null +++ b/input/fsh/examples/provenanceCustodianPublicHealthcare.fsh @@ -0,0 +1,32 @@ +Instance: ProvenanceCustodianPublicHealthcare +InstanceOf: FiBaseInformationCustodianPublic +Title: "Custodian of information (rekisterinpitäjä), public healthcare" +Description: "Example of Provenance that communicates a public healthcare organization as the custodian of information for an episode of care." +Usage: #example +* id = "custodian-public-healthcare" +* target = Reference(EpisodeOfCare/id-for-episode-1) +* recorded = "2023-08-25T16:42:17.239+03:00" +* agent[custodian] + * type + * coding[0] = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#CST "custodian" + * text = "Rekisterinpitäjä" + * role[0] + * coding[0] + * system = "urn:oid:1.2.246.537.5.40172" + * code = #1 + * display = "Julkinen" + * text = "Julkinen" + * who + * type = #Organization + * identifier + * type = http://terminology.hl7.org/CodeSystem/v2-0203#XX + * system = "urn:oid:1.2.246.537.6.40174" + * value = "urn:oid:1.2.246.10.32213086.19.0" + * display = "Pirkanmaan hyvinvointialueen rekisterinpitäjä" +* entity[registerType] + * role = #source + * what + * identifier + * system = "urn:oid:1.2.246.537.5.40150" + * value = #2 + * display = "Julkinen terveydenhuolto" diff --git a/input/fsh/examples/provenanceWithCustodianInformation.fsh b/input/fsh/examples/provenanceWithCustodianInformation.fsh deleted file mode 100644 index 225eccb..0000000 --- a/input/fsh/examples/provenanceWithCustodianInformation.fsh +++ /dev/null @@ -1,16 +0,0 @@ -Instance: ProvenanceExample -InstanceOf: FiBaseProvenance -Title: "Custodian of information (rekisterinpitäjä)" -Description: "Example of Provenance that communicates custodian information for an episode of care." -Usage: #example -* id = "id-for-provenance-1" -* target = Reference(EpisodeOfCare/id-for-episode-1) -* recorded = "2015-02-07T13:28:17.239+02:00" -* agent[0].who.type = #Organization -* agent[0].who.identifier.value = "1.2.246.10.32213043.19.0" -* agent[0].type.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" -* agent[0].type.coding[0].code = #custodian - -* extension[RegisterTypeCode].valueCoding.system = #urn:oid:1.2.246.537.5.40150.2009 -* extension[RegisterTypeCode].valueCoding.code = #2 -* extension[RegisterTypeCode].valueCoding.display = "Julkinen terveydenhuolto" diff --git a/input/fsh/informationCustodian.fsh b/input/fsh/informationCustodian.fsh new file mode 100644 index 0000000..1275123 --- /dev/null +++ b/input/fsh/informationCustodian.fsh @@ -0,0 +1,88 @@ +Profile: FiBaseInformationCustodian +Parent: FiBaseProvenance +Id: fi-base-information-custodian +Title: "FI Base InformationCustodian" +Description: "This is a Finnish abstract base profile for the Provenance resource, used to communicate the custodian of information (*rekisterinpitäjä*)." +* ^abstract = true + +* agent ^slicing.discriminator.type = #value +* agent ^slicing.discriminator.path = "type" +* agent ^slicing.rules = #open +* agent ^slicing.description = "An agent SHALL have the `type` `CST` from http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + * ^definition = "An agent SHALL have the `type` http://terminology.hl7.org/CodeSystem/v3-ParticipationType#CST, a `role` from system `oid:1.2.246.537.5.40172` (*eArkisto - Rekisteripitäjän laji*), and an applicable provider identifier." + * ^short = "An agent with type http://terminology.hl7.org/CodeSystem/v3-ParticipationType#CST" + +* agent contains custodian 1..1 +* agent[custodian].type = http://terminology.hl7.org/CodeSystem/v3-ParticipationType#CST +* agent[custodian].role.coding.system = "urn:oid:1.2.246.537.5.40172" + * ^definition = "The status of the healthcare provider ([*eArkisto - Rekisteripitäjän laji*](https://koodistopalvelu.kanta.fi/codeserver/pages/classification-view-page.xhtml?classificationKey=268&versionKey=345)), i.e., whether the provider is a public or private actor. The value for the identifier SHALL be 1 for public, 2 for private." + * ^short = "Public or private occupational healthcare provider" + +* entity ^slicing.discriminator.type = #value +* entity ^slicing.discriminator.path = "what.identifier.system" +* entity ^slicing.rules = #open +* entity ^slicing.description = "One entity SHALL have the `.role` `source` and a `.what` with an identifier with the system `urn:oid:1.2.246.537.5.40150` (*KanTa-palvelut - Potilasasiakirjan rekisteritunnus*) that indicates the type of the registry. If the identifier has the value 4 (*työterveyshuolto*, occupational healthcare), another entity element specifies the business ID (*y-tunnus*) of the customer organization." + * ^definition = "One entity SHALL have the `.role` `source` and a `.what` with an identifier with the system `urn:oid:1.2.246.537.5.40150` (*KanTa-palvelut - Potilasasiakirjan rekisteritunnus*) that indicates the type of the registry. If the identifier has the value 4 (*työterveyshuolto*, occupational healthcare), another entity element specifies the business ID (*y-tunnus*) of the customer organization." + * ^short = "Role source and a .what with an identifier with the system urn:oid:1.2.246.537.5.40150" + +* entity contains registerType 1..1 +* entity[registerType].role = #source +* entity[registerType].what.identifier.system = #urn:oid:1.2.246.537.5.40150 + * ^definition = "The type of the information registry. From the system `oid:1.2.246.537.5.40150` ([*KanTa-palvelut - Potilasasiakirjan rekisteritunnus*](https://koodistopalvelu.kanta.fi/codeserver/pages/classification-view-page.xhtml?classificationKey=283&versionKey=360))." + * ^short = "Type of registry" + +* entity contains registerSpecifierCompanyId 0..1 +* entity[registerSpecifierCompanyId].role = #source +* entity[registerSpecifierCompanyId].what.identifier.type = http://terminology.hl7.org/CodeSystem/v2-0203#TAX +* entity[registerSpecifierCompanyId].what.identifier.system = "urn:oid:1.2.246.10" + * ^definition = "The customer company of an occupational healthcare provider, expressed with the business ID (*y-tunnus*) registered in the Finnish organization register [ytj.fi](https://ytj.fi). This is a required specifier for Kanta system when the data registry is for occupational healthcare for private companies." + * ^short = "Customer company of private occupational healthcare" + +* entity contains registerSpecifierPersonId 0..1 +* entity[registerSpecifierPersonId].role = #source +* entity[registerSpecifierPersonId].what.identifier.type = http://terminology.hl7.org/CodeSystem/v2-0203#NNFIN +* entity[registerSpecifierPersonId].what.identifier.system = "urn:oid:1.2.246.21" + * ^definition = "An individual customer of an occupational healthcare provider, expressed with the Finnish national PIC (*hetu*)." + * ^short = "Customer of private occupational healthcare" + +* entity contains registerSpecifierCustomerWithoutId 0..1 +* entity[registerSpecifierCustomerWithoutId].role = #source +* entity[registerSpecifierCustomerWithoutId].what.identifier.system = "urn:oid:1.2.246.537.30" + * ^definition = "A customer without a Finnish person or business ID as a customer of an occupational healthcare provider." + * ^short = "Customer of private occupational healthcare" + +Profile: FiBaseInformationCustodianPublic +Parent: FiBaseInformationCustodian +Id: fi-base-information-custodian-public +Title: "FI Base Information Custodian (Public Organization)" +Description: "This is the Finnish base profile for the Provenance resource, used to communicate a public organization as the custodian of information (*rekisterinpitäjä*)." + +* agent.role.coding.code = #1 +* agent.who.identifier.type = http://terminology.hl7.org/CodeSystem/v2-0203#XX +* agent.who.identifier.system = "urn:oid:1.2.246.537.6.40174" + * ^definition = "The ID of the social or healthcare provider in system `oid:1.2.246.537.6.40174` [(*eArkisto - Rekisterinpitäjärekisteri*)](https://koodistopalvelu.kanta.fi/codeserver/pages/classification-view-page.xhtml?classificationKey=419&versionKey=496)." + * ^short = "ID of the provider in Rekisterinpitäjärekisteri" + +Profile: FiBaseInformationCustodianPrivate +Parent: FiBaseInformationCustodian +Id: fi-base-information-custodian-private +Title: "FI Base Information Custodian (Private Organization)" +Description: "This is the Finnish base profile for the Provenance resource, used to communicate a private organization as the custodian of information (*rekisterinpitäjä*)." + +* agent.role.coding.code = #2 +* agent.who.identifier.type = http://terminology.hl7.org/CodeSystem/v2-0203#XX +* agent.who.identifier.system = "urn:oid:1.2.246.537.6.202" + * ^definition = "The ID of the social or healthcare provider in system `oid:1.2.246.537.6.202` [(*THL - SOTE-organisaatiorekisteri*)](https://koodistopalvelu.kanta.fi/codeserver/pages/classification-view-page.xhtml?classificationKey=421&versionKey=501)." + * ^short = "ID of the provider in SOTE-organisaatiorekisteri" + +Profile: FiBaseInformationCustodianIndividual +Parent: FiBaseInformationCustodian +Id: fi-base-information-custodian-individual +Title: "FI Base Information Custodian (Individual Provider)" +Description: "This is the Finnish base profile for the Provenance resource, used to communicate an individual practitioner as the custodian of information (*rekisterinpitäjä*)." + +* agent.role.coding.code = #2 +* agent.who.identifier.type = http://terminology.hl7.org/CodeSystem/v2-0203#PRN +* agent.who.identifier.system = "urn:oid:1.2.246.537.6.203" + * ^definition = "The ID of the social or healthcare provider in system `oid:1.2.246.537.6.203` [(*Valvira - Terveydenhuollon itsenäiset ammatinharjoittajat*)](https://koodistopalvelu.kanta.fi/codeserver/pages/classification-view-page.xhtml?classificationKey=1163&versionKey=1303)." + * ^short = "ID of the provider in Terveydenhuollon itsenäiset ammatinharjoittajat" diff --git a/input/fsh/provenance.fsh b/input/fsh/provenance.fsh index 401faa6..693ec8e 100644 --- a/input/fsh/provenance.fsh +++ b/input/fsh/provenance.fsh @@ -3,22 +3,6 @@ Parent: Provenance Id: fi-base-provenance Title: "FI Base Provenance" Description: "This is the Finnish base profile for the Provenance resource." - * location only Reference(FiBaseLocation) * agent.who only Reference(FiBasePractitioner or FiBasePractitionerRole or FiBasePatient or RelatedPerson or Device or FiBaseOrganization) * agent.onBehalfOf only Reference(FiBasePractitioner or FiBasePractitionerRole or FiBasePatient or RelatedPerson or Device or FiBaseOrganization) - -* extension contains RegisterTypeCode named registerTypeCode 0..1 -* extension contains RegisterSpecifier named registerSpecifier 0..1 - -Extension: RegisterTypeCode -Id: register-type-code -Title: "RegisterTypeCode" -Description: "Extension RegisterTypeCode. (Required for Kanta Medical Records queries) TODO what is the system?" -* value[x] only Coding - -Extension: RegisterSpecifier -Id: register-specifier -Title: "RegisterSpecifier" -Description: "Extension Register Specifier (Rekisterin tarkenne in finnish) (Required for Kanta Medical Records queries)." -* value[x] only string diff --git a/input/includes/fragment-fi-base-profiles.html b/input/includes/fragment-fi-base-profiles.html index 9e11b68..a3df20b 100644 --- a/input/includes/fragment-fi-base-profiles.html +++ b/input/includes/fragment-fi-base-profiles.html @@ -31,6 +31,8 @@ {%- assign description = description | replace: "%3A", ":" -%} {%- assign description = description | replace: "%20", "," -%} {%- assign description = description | replace: "%25", "%" -%} + {%- assign description = description | replace: "(*", "(" -%} + {%- assign description = description | replace: "*)", ")" -%}
{{ description }}
diff --git a/input/pagecontent/Provenance-id-for-provenance-1-intro.md b/input/pagecontent/Provenance-id-for-provenance-1-intro.md deleted file mode 100644 index f60d7e8..0000000 --- a/input/pagecontent/Provenance-id-for-provenance-1-intro.md +++ /dev/null @@ -1,20 +0,0 @@ -### Scope and Usage - -#### How to communicate Kanta custodian and register information - -In this example Kanta custodian information (Finnish rekisterinpitäjä) is communicated in agent. -It refers to organization via identifier, custodian registry is not part of finnish -SOTE-organization registry (it uses it's own registry 1.2.246.537.6.40174) so it might not exist as -an organization resource. - -RegisterTypeCode requires the registerTypeCode extension. It's a coded value from following code systems: - -* Code `1.2.246.537.5.40150.2009` for healthcare -* Code `1.2.246.537.6.1264.201701` for social care - -RegisterSpecifier requires the registerSpecifier extension. - -#### Use cases - -Custodian, register type code and register specifier information is required when making Kanta -Medical Records requests. diff --git a/input/pagecontent/StructureDefinition-fi-base-information-custodian-intro.md b/input/pagecontent/StructureDefinition-fi-base-information-custodian-intro.md new file mode 100644 index 0000000..94a6cae --- /dev/null +++ b/input/pagecontent/StructureDefinition-fi-base-information-custodian-intro.md @@ -0,0 +1,16 @@ +### Scope and Usage + +#### How to communicate Kanta information custodian and register information + +The Finnish national healthcare infrastructure uses the concept of the information custodian +(*rekisterinpitäjä*), also known as the data controller or register keeper. + +Most of the information in the Kanta system needs to be tagged with information of the information +custodian and of the specific register. + +For details, please refer to the +[Kanta CDA R2 Header](https://www.kanta.fi/en/jarjestelmakehittajat/potilastiedon-arkiston-cda-r2-header) +specification, version 4.66 or later, chapters 2.2.17, 2.4.21, and 2.4.22. + +These details are expressed with the Provenance resource conforming to this profile. Information +custodian is the `.agent` and the registry is specified with one or two `.entity` instances.