Inera Core Implementation Guide
0.2.0 - ci-build
Sweden
Inera Core Implementation Guide - Local Development build (v0.2.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
patientSummaryHeader (äldre tjänster)JoL-kontrakten använder en gemensamt definierad uppsättning attribut för metadata i patientSummaryHeader i äldre tjänster, HeaderType i nyare JoL-tjänster.
I FHIR sprids motsvarande information ut över flera resurser (t.ex. Patient, Organization, kliniska resurser, Provenance, Consent) och över resursers egna metadata (meta.*).
Denna sida:
patientSummaryHeader.Denna sida beskriver hur metadata från TKB-tjänsternas header-strukturer mappas till FHIR-resurser. Tjänstekontrakt använder centraliserade header-strukturer för metadata (patientSummaryHeader i äldre tjänster, HeaderType i nyare JoL-tjänster), medan FHIR distribuerar metadata över flera element och resurser.
patientSummaryHeader (äldre tjänster)<patientSummaryHeader>
<!-- PatientSummaryHeaderType -->
<!-- Lokalt dokument-id i källsystemet -->
<documentId>
<root>1.2.752.129.2.1.2.1</root>
<extension>PSH-2025-11-24-0001</extension>
</documentId>
<!-- HSA-id för källsystemet -->
<sourceSystemHSAId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE5565594230-ABCD</extension>
</sourceSystemHSAId>
<!-- Titel och tidpunkt för sammanställningen -->
<documentTitle>Patientsammanfattning – vårdkontakt 2025-11-24</documentTitle>
<documentTime>2025-11-24T14:35:00</documentTime>
<!-- Patientens person-id -->
<patientId>
<root>1.2.752.129.2.1.3.1</root>
<extension>191212121212</extension>
</patientId>
<!-- Tidpunkt som används vid jämförelse av spärrar/block (NPÖ) -->
<blockComparisonTime>2025-11-24T14:35:00</blockComparisonTime>
<!-- Indikerar om uppgifterna är godkända att visas för patienten -->
<approvedForPatient>true</approvedForPatient>
<!-- Lokalt vårdkontakt-id i källsystemet -->
<careContactId>
<root>1.2.752.129.2.1.2.1</root>
<extension>CC-2025-11-24-0001</extension>
</careContactId>
<!-- Indicator för ogiltigförklarat dokument -->
<nullified>false</nullified>
<!-- nullifiedReason utelämnas när nullified = false -->
<!-- LegalAuthenticatorType -->
<legalAuthenticator>
<signatureTime>2025-11-24T14:40:00</signatureTime>
<!-- HSA-id för den som signerat -->
<legalAuthenticatorHSAId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-9999</extension>
</legalAuthenticatorHSAId>
<legalAuthenticatorName>Karin Karlsson</legalAuthenticatorName>
<legalAuthenticatorRoleCode
code="LÄK"
codeSystem="1.2.752.129.2.2.1.4"
displayName="Leg. läkare"/>
<!-- Informationsägande vårdenhet/vårdgivare i signatursammanhang -->
<careUnitHSAId>SE2321000016-A001</careUnitHSAId>
<careGiverHSAId>SE2321000016-0000</careGiverHSAId>
</legalAuthenticator>
<!-- HealthcareProfessionalType -->
<accountableHealthcareProfessional>
<authorTime>2025-11-24T14:30:00</authorTime>
<!-- HSA-id för ansvarig vårdpersonal -->
<healthcareProfessionalHSAId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-123456</extension>
</healthcareProfessionalHSAId>
<healthcareProfessionalName>Anna Andersson</healthcareProfessionalName>
<healthcareProfessionalRoleCode
code="LÄK"
codeSystem="1.2.752.129.2.2.1.4"
displayName="Leg. läkare"/>
<!-- Vårdenhet (HSA-id) -->
<healthcareProfessionalCareUnitHSAId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-A001</extension>
</healthcareProfessionalCareUnitHSAId>
<!-- Vårdgivare (HSA-id) -->
<healthcareProfessionalCareGiverHSAId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-0000</extension>
</healthcareProfessionalCareGiverHSAId>
<!-- OrgUnitType -->
<healthCareProfessionalOrgUnit>
<orgUnitHSAId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-B002</extension>
</orgUnitHSAId>
<orgUnitName>Vårdcentralen Centrum</orgUnitName>
<orgUnitTelecom>+4681234567</orgUnitTelecom>
<orgUnitEmail>vardcentralen.centrum@example.se</orgUnitEmail>
<orgUnitAddress>Exempelgatan 1, 111 11 Stockholm</orgUnitAddress>
<orgUnitLocation>Stockholm</orgUnitLocation>
</healthCareProfessionalOrgUnit>
</accountableHealthcareProfessional>
</patientSummaryHeader>
<!--
Example instance of HeaderType for JoL (Journal- och Läkemedel)
Version: JoL Header Fältregler_v2.3
-->
<header xmlns="urn:riv:clinicalprocess:healthcond:common:headers:2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- ============================= -->
<!-- Access Control Header section -->
<!-- ============================= -->
<accessControlHeader>
<!-- Accountable healthcare provider (caregiver) -->
<accountableHealthcareProviderId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-0000</extension>
</accountableHealthcareProviderId>
<!-- Accountable care unit -->
<accountableCareUnitId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-A001</extension>
</accountableCareUnitId>
<!-- Patient identifier (personnummer) -->
<patientId>
<root>1.2.752.129.2.1.3.1</root>
<extension>191212121212</extension>
</patientId>
<!-- Original patient ID (if applicable, e.g., before merge) -->
<originalPatientId>
<root>1.2.752.129.2.1.3.1</root>
<extension>191010101010</extension>
</originalPatientId>
<!-- Care process identifier (local episode or workflow id) -->
<careProcessId>
<root>1.2.752.129.2.1.2.1</root>
<extension>CP-20251124-001</extension>
</careProcessId>
<!-- Block comparison time (for access control evaluation) -->
<blockComparisonTime>20251124143000</blockComparisonTime>
<!-- Approved for patient access -->
<approvedForPatient>true</approvedForPatient>
</accessControlHeader>
<!-- ============================= -->
<!-- Source system identification -->
<!-- ============================= -->
<sourceSystemId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE5565594230-ABCD</extension>
</sourceSystemId>
<!-- ============================= -->
<!-- Record section -->
<!-- ============================= -->
<record>
<!-- Local record/document identifier -->
<id>
<root>1.2.752.129.2.1.2.1</root>
<extension>REC-20251124-0001</extension>
</id>
<!-- Time when this record was created in the source system -->
<timestamp>20251124143500</timestamp>
</record>
<!-- ============================= -->
<!-- Author (responsible person) -->
<!-- ============================= -->
<author>
<id>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-123456</extension>
</id>
<name>Anna Andersson</name>
<timestamp>20251124143000</timestamp>
<byRole>
<code>LÄK</code>
<codeSystem>1.2.752.129.2.2.1.4</codeSystem>
<displayName>Leg. läkare</displayName>
</byRole>
<orgUnit>
<orgUnitId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-A001</extension>
</orgUnitId>
<orgUnitName>Vårdcentralen Centrum</orgUnitName>
<orgUnitTelecom>+4681234567</orgUnitTelecom>
<orgUnitEmail>vardcentralen.centrum@example.se</orgUnitEmail>
<orgUnitAddress>Exempelgatan 1, 111 11 Stockholm</orgUnitAddress>
</orgUnit>
</author>
<!-- ============================= -->
<!-- Signature (legal authenticator) -->
<!-- ============================= -->
<signature>
<id>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-9999</extension>
</id>
<name>Karin Karlsson</name>
<timestamp>20251124144000</timestamp>
<byRole>
<code>LÄK</code>
<codeSystem>1.2.752.129.2.2.1.4</codeSystem>
<displayName>Leg. läkare</displayName>
</byRole>
</signature>
</header>
Tabellen nedan visar var respektive del av TKB-headrarna tas om hand i FHIR-modellen. De senare avsnitten på sidan går in i detalj.
| PatientSummaryHeader (äldre) | JoL HeaderType (nyare) | Beskrivning | FHIR-hantering (översikt) | Se avsnitt |
|---|---|---|---|---|
| documentId | record.id | Lokalt dokument-/block-id i källsystemet | identifier på överordnad Composition/DocumentReference och/eller extension source-document-id på ingående resurser | Författarskap: Resource Metadata vs Provenance |
| sourceSystemHSAId | sourceSystemId | HSA-id för källsystemet | meta.source (URI som indirekt kan leda till källsystemets identitet, t.ex. canonical URL i serverns namespace). Faktisk identifiering av system/organisation görs via Provenance.agent.who (Organization/Device) och identifier på Organization/Device | Författarskap: Resource Metadata vs Provenance |
| documentTitle | – | Rubrik för sammanställningen | Composition.title eller DocumentReference.description | Författarskap… |
| documentTime | record.timestamp | Tidpunkt då sammanställningen skapades | Composition.date, resurspecifika tidfält (t.ex. Condition.recordedDate) och Provenance.recorded | Författarskap… |
| patientId | accessControlHeader.patientId | Patientens person-id/NR-id | Patient.identifier, används som subject/patient-referens från alla kliniska resurser | Allmänt, hela sidan |
| – | accessControlHeader.originalPatientId | Ursprungligt patient-id (t.ex. före sammanslagning) | Patient.identifier med extension för ursprungligt id | Allmänt, hela sidan |
| blockComparisonTime | accessControlHeader.blockComparisonTime | Tidpunkt som är signifikant för patienten vid jämförelse mot spärrar (NPÖ-block) | Härledas från resursen eller vårdkontexten: resurspecifika tidfält (effectiveDateTime, effectivePeriod.start), Composition.event.period, Encounter.period. Används som input-parameter (occurrence) till spärrtjänstens FHIR-operation (t.ex. Consent/$evaluate-block) | Spärr och Sekretess |
| approvedForPatient | accessControlHeader.approvedForPatient | Anger om uppgifterna är godkända att visas för patienten | Styr om resurser initialt får patientåtkomst (meta.security utan NOPATIENT) eller om en Consent av typen restrict-patient-access ska skapas | Menprövningsflaggan (Spärrflagga för Patientåtkomst) |
| careContactId | accessControlHeader.careProcessId | Lokalt id för vårdkontakt/besök eller vårdprocess | Encounter.identifier samt extension care-contact-id på kliniska resurser och/eller i Provenance.entity | Författarskap… |
| nullified | – | Markering om dokumentet ogiltigförklarats | Mappas till resursstatus entered-in-error (t.ex. på Composition/DocumentReference) och en kompletterande Provenance som beskriver korrigeringen | Författarskap… |
| nullifiedReason | – | Orsak till ogiltigförklaring | Provenance.reason / extension nullified-reason kopplad till den Provenance som beskriver ändringen | Författarskap… |
| legalAuthenticator.signatureTime | signature.timestamp | Tidpunkt för juridisk autentisering | Provenance.signature.when (om resurserna är digitalt signerade) eller Provenance.occurred.start för juridisk autentisering utan digital signatur | Juridisk Autentisering av Journaluppgifter |
| legalAuthenticatorHSAId, legalAuthenticatorName, legalAuthenticatorRoleCode | signature.id, signature.name, signature.byRole | Den juridiskt ansvariga yrkesutövaren som autentiserar informationens korrekthet | Practitioner + PractitionerRole + Provenance.agent med type = legal; vid digital signatur även signature.who | Juridisk Autentisering av Journaluppgifter |
| legalAuthenticator.careUnitHSAId, careGiverHSAId | accessControlHeader.accountableCareUnitId, accountableHealthcareProviderId | Informationsägande vårdenhet/vårdgivare för den juridiskt autentiserade informationen | Organization-resurser (vårdenhet/vårdgivare) + Provenance.agent.onBehalfOf | Informationsägande Vårdenhet och Vårdgivare / Juridisk Autentisering… |
| authorTime (i accountableHealthcareProfessional) | author.timestamp | Tidpunkt då uppgifterna registrerades av ansvarig personal | Resurspecifika tidfält (recordedDate, issued etc.) + Provenance.recorded | Författarskap… |
| healthcareProfessionalHSAId, healthcareProfessionalName, healthcareProfessionalRoleCode | author.id, author.name, author.byRole | Ansvarig vårdprofessionell (författare/registrerare) | Practitioner (+ PractitionerRole), refereras från kliniska resurser (t.ex. Condition.recorder, Observation.performer) och från Provenance.agent[type=author] | Författarskap… |
| healthcareProfessionalCareUnitHSAId | accessControlHeader.accountableCareUnitId | Vårdenhet där uppgiften skapades | Organization (typ "vårdenhet"), refererad från PractitionerRole.organization, Provenance.agent.onBehalfOf och ev. extension care-unit på resurser | Informationsägande Vårdenhet och Vårdgivare |
| healthcareProfessionalCareGiverHSAId | accessControlHeader.accountableHealthcareProviderId | Vårdgivare (t.ex. region) | Organization (typ "vårdgivare"), kopplad via Organization.partOf och använd i Provenance.agent/policybedömning | Informationsägande Vårdenhet och Vårdgivare |
| healthCareProfessionalOrgUnit.orgUnitHSAId | author.orgUnit.orgUnitId | Ytterligare organisatorisk enhet (mottagning/sektion) | Egen Organization (typ "org.enhet") med HSA-id som identifier, ev. kopplad med partOf till vårdenhet/vårdgivare | Informationsägande Vårdenhet och Vårdgivare |
| orgUnitName, orgUnitTelecom, orgUnitEmail, orgUnitAddress, orgUnitLocation | author.orgUnit.orgUnitName, orgUnitTelecom, orgUnitEmail, orgUnitAddress | Namn och kontaktuppgifter för enheten | Organization.name, Organization.telecom, Organization.address och ev. Location/Endpoint beroende på detaljnivå | Informationsägande Vårdenhet och Vårdgivare |
| (implicit) uppgift om spärr/informationsägarskap i NPÖ | accessControlHeader (struktur) | I TKB/NPÖ används headern för att styra visning via inre/yttre spärr | I FHIR uttrycks spärrregler som Consent + säkerhetsetiketter + spärrtjänst; informationsägarskap kommer från Organization och Provenance | Spärr och Sekretess |
| (implicit) menprövningsflagga/patientaccess | approvedForPatient | Kan härledas från approvedForPatient eller lokala regler | Representeras som Consent av typen "restrict-patient-access" + meta.security (t.ex. NOPATIENT) på berörda resurser | Menprövningsflaggan (Spärrflagga för Patientåtkomst) |
Not: De kliniska FHIR-resurserna bär endast den metadata som behövs för normal användning (identifierare, källsystem, författare, ägande organisation, säkerhetsetiketter). Full härledning, signaturer och spLiärrregler ligger i separata resurser: Provenance och Consent.
I tjänstekontrakt uttrycks författarskap i form av:
PatientSummaryHeader (äldre): Använder accountableHealthcareProfessional och legalAuthenticator
JoL HeaderType (nyare): Strukturerar detta tydligare med:
author = den som skapar/registrerar informationensignature = den som juridiskt autentiserar informationenaccessControlHeader = informationsägare (vårdgivare/vårdenhet)Dessa roller mappas till obligatoriska Provenance.agent-poster i FHIR.
Varje FHIR-resurs har inbyggda metadatafält för grundläggande spårbarhet:
| FHIR-element | TKB-källa | Syfte |
|---|---|---|
| meta.lastUpdated | authorTime | När resursen senast uppdaterades |
| Resursspecifika element | Varierar | T.ex. Observation.performer, Condition.recorder |
Författarskap på dokumentnivå (journalanteckning som Composition):
Composition.author → PractitionerRole
PractitionerRole.practitioner = personen (healthcareProfessionalHSAId)PractitionerRole.organization = vårdenheten (healthcareProfessionalCareUnitHSAId)Composition.date = tidpunkt för dokumentation (authorTime)Exempel (Composition):
Se Composition-patient-summary-example.json
Författarskap på innehållsresurser (Observation/Condition/Procedure etc.):
Använd respektive resursfält där det finns:
Condition.recorder eller Condition.asserterObservation.performerProcedure.performer.actorExempel (Condition):
Se Condition-diagnosis-123.json
För att bevara komplett TKB-header-information skapas en separat Provenance-resurs. JoL-headern tydliggör särskilt vilka roller som ska dokumenteras:
Obligatoriska Provenance.agent-roller från JoL header:
| JoL Header-element | Provenance.agent.type | Roll | Beskrivning |
|---|---|---|---|
author |
author |
Författare | Den som skapar/registrerar informationen (author.id, author.name, author.timestamp) |
signature |
legal |
Juridisk autentiserare | Den som juridiskt autentiserar korrekthet (signature.id, signature.name, signature.timestamp) |
sourceSystemId |
transmitter |
Källsystem | Systemet som skickar informationen (sourceSystemId) |
accessControlHeader.accountableHealthcareProviderId |
custodian (i vissa fall) |
Informationsägare | Vårdgivare som äger informationen |
Exempel:
Se Provenance-prov-diagnosis-123.json
Nyckelskillnad mellan patientSummaryHeader och JoL header:
accountableHealthcareProfessional kombinerar author-rollen med ägarskapauthor (skapare) från signature (autentiserare) och accessControlHeader (ägare)Detta ger i FHIR:
När FHIR-resurser inte skapas direkt i journalsystemet utan härleds från TKB/JoL-svar via en mellanliggande tjänst (t.ex. NPÖ eller en TKB-adapter), är det viktigt att skilja på:
IHE-profilerna för Mobile Cross-Enterprise Document Data Element Extraction (mXDE) definierar en särskild Provenance-profil (IHE.ITI.mXDE.Provenance) för just denna derivation. I korthet:
target pekar på alla FHIR-resurser som härletts ur svaret (Condition, Observation, Composition m.fl.).entity.role = source och entity.what pekar på en DocumentReference som representerar TKB/JoL-svaret.activity är satt till Derivation (w3c provenance-activity-type).policy sätts till en välkänd URI (i mXDE: urn:ihe:iti:mxde:2023:document-provenance-policy) som anger att resurserna är dekomponerade ur ett dokument.agent innehåller en tydlig assembler-roll (provenance-participant-type = assembler) för den tjänst (Device/Organization) som gjort TKB/JoL → FHIR-transformen.I en svensk kontext kan detta mönster återanvändas även om infrastrukturen inte är formellt profilerad som mXDE:
author, signature, informationsägare via accessControlHeader) hanteras antingen:
agent-poster i samma Provenance, så länge mönstret ovan (policy, activity, assembler, entity) uppfylls.Exempel: mXDE-kompatibel Provenance för TKB-dekomposition
{
"resourceType": "Provenance",
"id": "prov-tkb-psh-20251124-0001",
"meta": {
"profile": [
"https://profiles.ihe.net/ITI/mXDE/StructureDefinition/IHE.ITI.mXDE.Provenance"
]
},
"policy": [
"urn:ihe:iti:mxde:2023:document-provenance-policy"
],
"activity": {
"coding": [{
"system": "http://hl7.org/fhir/w3c-provenance-activity-type",
"code": "Derivation",
"display": "Derivation"
}]
},
"recorded": "2025-11-24T14:35:00+01:00",
"target": [
{ "reference": "Composition/patient-summary-20251124" },
{ "reference": "Condition/diagnosis-123" },
{ "reference": "Observation/lab-456" }
],
"agent": [{
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
"code": "assembler",
"display": "Assembler"
}]
},
"who": {
"reference": "Device/inera-tkb-adapter",
"display": "Inera TKB→FHIR adapter"
}
}],
"entity": [{
"role": "source",
"what": {
"reference": "DocumentReference/tkb-psh-20251124-0001",
"display": "TKB patientSummaryHeader 2025-11-24"
}
}]
}
Detta mönster kan kombineras med ytterligare Provenance-resurser för kliniskt författarskap:
Derivations-Provenance (mXDE-liknande):
activity = Derivationagent:assembler = TKB-adaptertjänstenentity.what = DocumentReference för TKB-svaretKlinisk Provenance (författarskap):
agent[type=author] = ansvarig vårdpersonalagent[type=legal] = juridisk autentiserareagent[type=custodian] = informationsägande vårdgivare| Scenario | Resource Metadata | Provenance krävs? |
|---|---|---|
| Enkel read/search | recorder, performer räcker | Nej, optional |
| Full härledning behövs | Grundläggande endast | Ja, obligatorisk |
| Signerade dokument | Grundläggande endast | Ja, med signatur-extension |
| Audit trail | Grundläggande endast | Ja, fullständig kedja |
<healthcareProfessionalCareUnitHSAId>SE2321000016-A001</healthcareProfessionalCareUnitHSAId>
<healthcareProfessionalCareGiverHSAId>SE2321000016-0000</healthcareProfessionalCareGiverHSAId>
<legalAuthenticator>
<signatureTime>2025-11-24T14:35:00</signatureTime>
<careUnitHSAId>SE2321000016-A001</careUnitHSAId>
<careGiverHSAId>SE2321000016-0000</careGiverHSAId>
</legalAuthenticator>
Vårdgivare:
Se Organization-caregiver-0000.json
Vårdenhet:
Se Organization-unit-a001.json
För scenarier där en vårdgivare delar information från en annan vårdgivare (t.ex. nationell sammanhållen journalföring):
Provenance med custodian:
I TKB representerar legalAuthenticator den person som juridiskt autentiserar informationens korrekthet – t.ex. en läkare som undersöker en patient, dikterar en anteckning och sedan bekräftar dess riktighet genom att "signera" den (juridiskt sett). Detta är inte nödvändigtvis samma sak som en digital/kryptografisk signatur, även om de kan sammanfalla.
<legalAuthenticator>
<signatureTime>2025-11-24T14:40:00</signatureTime>
<legalAuthenticatorHSAId>
<root>1.2.752.129.2.1.4.1</root>
<extension>SE2321000016-9999</extension>
</legalAuthenticatorHSAId>
<legalAuthenticatorName>Karin Karlsson</legalAuthenticatorName>
<legalAuthenticatorRoleCode
code="LÄK"
codeSystem="1.2.752.129.2.2.1.4"
displayName="Leg. läkare"/>
</legalAuthenticator>
I FHIR representeras juridisk autentisering genom en Provenance-resurs med en agent av typen legal.
JoL header-mappning:
signature.id → Provenance.agent[type=legal].who (Practitioner)signature.name → Practitioner.namesignature.timestamp → Provenance.occurred eller Provenance.signature.whensignature.byRole → PractitionerRole.codeOm journaluppgiften även är digitalt signerad kan Provenance.signature användas, men det är inte ett krav för juridisk autentisering.
Exempel med digital signatur:
Se Provenance-prov-signed-diagnosis.json
Viktiga aspekter:
agent.type = legal = juridiskt ansvarig för autentiseringen (OBLIGATORISK)occurred eller recorded = tidpunkt för den juridiska autentiseringensignature.when = tidpunkt för digital signering (OM digital signatur används)signature.who = signerande person (HSA-id) (OM digital signatur används)signature.onBehalfOf = vårdenhet/vårdgivare (OM digital signatur används)signature.data = kryptografisk signatur i Base64 (OM digital signatur används)Not: En journalanteckning kan vara juridiskt autentiserad utan att vara digitalt signerad. Det juridiska ansvaret fastställs genom Provenance.agent[type=legal], medan Provenance.signature endast används när det faktiskt finns en kryptografisk signatur.
I FHIR vill vi stödja tre kompletterande mönster för spärr som motsvarar hur patientSummaryHeader används idag (inklusive t.ex. blockComparisonTime):
Spärr i producerande system
– journalsystemet tillämpar spärrreglerna och markerar resurser med säkerhetsetiketter.
Spärr som domänobjekt (Consent)
– inre och yttre spärr representeras som Consent-resurser som beskriver reglerna snarare än varje enskild resurs.
Mellanliggande spärrtjänst
– t.ex. NPÖ-liknande tjänst som, utifrån patient, informationsägare, konsument och tidpunkt (t.ex. blockComparisonTime), utvärderar alla relevanta spärrar och tillfälliga hävningar och markerar om information skall anses spärrad.
De kliniska resurserna innehåller så lite spärrinformation som möjligt (säkerhetsetikett + ev. referens till Consent). Själva regelverket ligger i spärrtjänstens logik och i de Consent-resurser som den förvaltar.
Producenten (journalsystemet) tillämpar spärrreglerna lokalt. I FHIR-API:t syns det genom:
meta.security, ochExempel:
Se Condition-blocked-diagnosis.json
Här gör journalsystemet själv bedömningen att resursen inte ska lämnas ut i vissa situationer. Vilka situationer det är framgår av en Consent som beskriver spärren.
Alla regler om inre/yttre spärr lagras som Consent. Kategorin skiljer de olika typerna:
inner-block – spärr inom vårdgivareouter-block – spärr vid sammanhållen journalföring / patientöversiktExempel:
Se Consent-block-inner-123.json
All detaljerad information (vem som beslutat, juridiskt stöd, tidsperiod, osv.) ligger i Consent. Kliniska resurser behöver bara veta att de är spärrade och, om det behövs, vilken Consent som gäller.
En mellanliggande tjänst (NPÖ eller motsvarande) gör inga egna tolkningar av lag och policy, utan använder en spärrtjänst som utvärderar alla relevanta Consent:
Input: patient, informationsägare (vårdgivare/vårdenhet), konsumerande aktör, syfte, tidpunkt (t.ex. från blockComparisonTime i headern)
Output: om informationen ska anses spärrad eller inte, samt vilka Consent som faktiskt användes
En möjlig FHIR-nära operation:
POST /Consent/$evaluate-block
Request (exempel):
{
"resourceType": "Parameters",
"parameter": [
{ "name": "patient", "valueReference": { "reference": "Patient/191212121212" } },
{ "name": "owner", "valueReference": { "reference": "Organization/caregiver-0000" } },
{ "name": "requester", "valueReference": { "reference": "Organization/npo-consumer-01" } },
{ "name": "purpose", "valueCode": "npo-view" },
{ "name": "occurrence","valueDateTime": "2025-11-24T14:35:00+01:00" }
]
}
Svar:
{
"resourceType": "Parameters",
"parameter": [
{ "name": "isBlocked", "valueBoolean": true },
{ "name": "hasTemporaryOverride", "valueBoolean": false },
{
"name": "appliedConsent",
"valueReference": { "reference": "Consent/block-outer-456" }
}
]
}
Logiken i spärrtjänsten är:
isBlocked = true,isBlocked = false för det här tillfället.Denna operation kan användas av alla konsumenter som själva inte kan eller bör tolka alla spärrregler.
Vid sökning i NPÖ eller liknande där vissa resurser spärras används en searchset-Bundle enligt FHIR-mönstret:
search.mode = "match"search.mode = "outcome" för att indikera att information har filtrerats bortBundle.extension som bara säger att spärrade uppgifter finns (inte exakt vad)Mönstret med search.mode = "outcome" och issue.code = "suppressed" följer FHIR-praxis för att indikera att information filtrerats bort utan att avslöja detaljer.
{
"resourceType": "Bundle",
"type": "searchset",
"total": 5,
"entry": [
{
"fullUrl": "https://npo.example.se/fhir/Condition/visible-condition-1",
"search": { "mode": "match" },
"resource": {
"resourceType": "Condition",
"id": "visible-condition-1"
}
},
{
"fullUrl": "https://npo.example.se/fhir/OperationOutcome/block-info",
"search": { "mode": "outcome" },
"resource": {
"resourceType": "OperationOutcome",
"id": "block-info",
"issue": [{
"severity": "information",
"code": "suppressed",
"details": {
"text": "Vissa uppgifter har spärrats för denna förfrågan."
},
"extension": [{
"url": "https://inera.se/fhir/core/StructureDefinition/applied-consent",
"valueReference": {
"reference": "Consent/block-outer-456"
}
}]
}]
}
}
],
"extension": [{
"url": "https://inera.se/fhir/core/StructureDefinition/blocked-resources-summary",
"extension": [
{ "url": "hasBlockedResources", "valueBoolean": true },
{ "url": "blockedCount", "valueUnsignedInt": 4 }
]
}]
}
Om all information spärras kan tjänsten i stället svara med HTTP 403 och ett ensamt OperationOutcome i svaret.
| Aspekt | Rekommenderat mönster |
|---|---|
| Spärr i producent | meta.security + ev. referens till Consent |
| Spärr som regel | Consent med kategori inner-block / outer-block |
| Tillfälliga hävningar | Ytterligare Consent (allow) eller provision med type = permit |
| Policybeslut (spärrtjänst) | Operation t.ex. Consent/$evaluate-block med patient/ägare/konsument |
| NPÖ-svar med delvis spärr | Bundle med matchande entries + OperationOutcome som search.outcome |
| NPÖ-svar med full spärr | HTTP 403 + OperationOutcome |
Menprövningsflaggan avser situationer där patientens åtkomst till sin egen information behöver begränsas, ofta tillfälligt, för att undvika skada eller missförstånd. Tekniskt är detta en särskild form av spärr där målgruppen är patienten (patientportal, nationell e-tjänst) snarare än andra vårdgivare.
Fältet approvedForPatient i patientSummaryHeader kan ses som ett grovt beslut: är denna sammanställning tänkt att vara synlig för patienten eller inte? I FHIR bryts detta ned till:
meta.security) på de resurser som faktiskt inte ska exponeras för patienten.Vi vill undvika att sprida detaljer om vem som fattat beslutet och varför som extensions på varje klinisk resurs. I stället:
Menprövningen dokumenteras som en Consent med en svensk kategori för "begränsa patientåtkomst" och med en tidsperiod där begränsningen gäller.
Se Consent-restrict-patient-access-123.json
Här finns alla detaljer om menprövningen samlade i en resurs som är enkel att logga, revidera och visa för behörig personal – men som inte behöver exponeras i patientportalen.
De kliniska resurser som omfattas av menprövning markeras med säkerhetsetiketter som patientportaler kan filtrera på:
NOPATIENT), ochExempel:
Se Observation-pending-cancer-diagnosis.json
En patientportal kan ha en mycket enkel regel:
meta.security innehåller NOPATIENT.Om vårdgivaren behöver se varför begränsningen finns kan den länkas tillbaka till motsvarande Consent-resurs. Detaljer om vem som satt flaggan, motivering, tidsgräns osv. ligger där – inte som spridda extensions på varje klinisk resurs.
Samma spärrtjänst som utvärderar inre/yttre spärr kan också hantera menprövning:
patient-viewTjänsten utvärderar Consent av typen restrict-patient-access och avgör om information ska döljas eller inte.
Det gör att:
| Aspekt | Rekommenderat mönster |
|---|---|
| Kanonisk källa | Consent med kategori restrict-patient-access |
| Markering på resurs | meta.security med kod NOPATIENT + ev. svensk profilkod |
| Koppling resurs ↔ menprövning | Enkel extension med valueReference till Consent |
| Tidsbegränsning | Consent.provision.period |
| Vem har beslutat | Dokumenteras i Consent.performer/provision.actor |
| Bedömning i realtid | Samma spärrtjänst/operation som för inre/yttre spärr |
| Exponering mot patient | Portalen filtrerar bort resurser med NOPATIENT utan extra logik |
Detta ger:
Separation of Concerns
Obs: AuditEvent och loggning
Denna sida beskriver semantisk härledning (Provenance) och åtkomstregler (Consent, meta.security). Tekniska loggar av vem som anropat TKB/JoL-tjänster och NPÖ rekommenderas hanteras separat med
AuditEvent(t.ex. enligt IHE Basic Audit Log Patterns). Vi försöker hålla Provenance fri från detaljer som primärt hör hemma i loggning.
Sökbarhet
Svensk kontext
| Användningsfall | Minimal implementation | Fullständig implementation |
|---|---|---|
| Läsåtkomst | Resource metadata | + Provenance |
| Sökning | Grundläggande index | + Security labels |
| Juridisk spårbarhet | – | Provenance med legal authenticator |
| Åtkomstkontroll | meta.security | + Consent-resurser |
| NPÖ-integration | HSA-id identifiers | + Disclosure tracking |