AORTA on FHIR specificaties (versie 0.7.x)

Transformatie Server Interfaces - 0.7.x

De Transformatie Server bestaat uit een aantal endpoints. Ieder endpoint biedt een specifiek type transformatie. De interfaces hiervoor zijn beschreven op deze pagina.

Overzicht transformaties

AOF.TS-I.OTR.100.v2

De Transformatie Server biedt de volgende transformaties:

Transformatie Algoritme ID

Input

Output

Type

Protocol

Interactie-ID

Type

Protocol

Interactie-ID

1

request

application/fhir+xml, application/fhir+json

create:Observation:1.0:request

request

application/hl7-v3+xml

ZTZM_IN000004NL01

2

response

application/hl7-v3+xml

MCCI_IN000002

response

application/fhir+xml, application/fhir+json

create:Observation:1.0:response

request

application/fhir+xml, application/fhir+json

create:Observation:1.0:request

3

request

application/fhir+xml, application/fhir+json

search:Appointment:1.0:request

request

application/hl7-v3+xml

QUAF_IN990001NL01

4

response

application/hl7-v3+xml

QUAF_IN990003NL01

response

application/fhir+xml, application/fhir+json

search:Appointment:1.0:response

TS Metadata Interface

AOF.TS-I.MDI.100.v2

De metadata van de transformatie server kan worden opgehaald via:

GET [base endpointadres]/metadata

De response bevat de volgende headers:

Cache-Control: must-revalidate, max-age=<max-age-ts-metadata>
Pragma: no-cache

Een client mag verkregen metadata conform de Cache-Control header directives, zoals beschreven in RFC 7234, cachen.

De waarde van max-age-ts-metadata is configureerbaar in de transformatie server. Initiële waarde is 14400 seconden (4 uur).


De metadata wordt in JSON formaat geretourneerd en bestaat uit een array van algoritmes, die door de transformatie server worden ondersteund. Een algoritme object heeft het volgende formaat:

Name

Cardinality

Type

Toelichting

id

1..1

String

Uniek ID van het transformatie algoritme.

input

1..n


Vereiste input voor dit algoritme

input.type

1..1

String

Type van dit input bericht.

Mogelijke waarden: "request", "response".

input.protocol

1..n

String

Protocol van dit input bericht.

Mogelijke waarden: "application/fhir+xml" of "application/fhir+json" of "application/hl7-v3+xml".

input.interaction-id

1..1

String

Interactie-id van dit input bericht.

output

1..n


Opgeleverde output bericht(en) door dit algoritme.

output.type

1..1

String

Type van dit output bericht.

Mogelijke waarden: "request", "response".

output.protocol

1..n

String

Protocol van dit output bericht.

Mogelijke waarden: "application/fhir+xml" of "application/fhir+json" of "application/hl7-v3+xml".

output.interaction-id

1..1

String

Interactie-id van dit output bericht.


Een voorbeeld metadata response is hieronder gegeven:

HTTP/1.1 200 OK
Content-Type: application/json

[

{

        "id": "2",
        "input": [{
                "type": "response",
                "protocol": ["application/hl7-v3+xml"],
                "interaction-id": "MCCI_IN000002"
            },
            {
                "type": "request",
                "protocol": ["application/fhir+json", "application/fhir+xml"],
                "interaction-id": "create:Observation:1.0:request"
            }
        ],
        "output": [{
            "type": "response",
            "protocol": ["application/fhir+json", "application/fhir+xml"],
            "interaction-id": "create:Observation:1.0:response"
        }]
    },
    {
        "id": "4",
        "input": [{
            "type": "response",
            "protocol": ["application/hl7-v3+xml"],
            "interaction-id": "QUAF_IN990003NL01"
        }],
        "output": [{
            "type": "response",
            "protocol": ["application/fhir+json", "application/fhir+xml"],
            "interaction-id": "search-type:Appointment:1.0:response"
        }]
    }
]

Transformatie Interface (Generiek)

Formaat van een transformatierequest

AOF.TS-I.FTR.100.v2

Middels één transformatierequest kan één (request of response) bericht worden getransformeerd.

Het generieke formaat is:

POST [base endpointadres]/to-xxx
Content-Type: application/json; charset=utf-8
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>

{

meta: {

format_in : "",

protocol_in : "",

protocol_out : "",

transformation-id : ""

}, 

content_in : ""

}

Het initialRequestID attribuut bevat bevat het ID van het allereerste request in de hele keten en dient te worden opgenomen in de logbestanden van alle partijen in de keten, zodat bij foutopsporing de verschillende logbestanden aan elkaar kunnen worden gerelateerd. Het requestID is voor iedere request message uniek. In requests wordt deze gegenereerd door de client. Ook het requestID dient te worden opgenomen in de verschillende logbestanden, zodat altijd duidelijk is op welk bericht een log entry van toepassing is.

Formaat van een transformatieresponse

AOF.TS-I.FOT.100.v2

Omdat een (request of response) bericht na transformatie uiteen kan vallen in meerdere berichten bevat een transformatieresponse een JSON array. Ieder object in deze array bestaat uit inhoud en metadata betreffende deze inhoud. Het generieke formaat is:

200 OK
Content-Type: application/json; charset=utf-8

[

{

meta: {

format_out : "",

protocol_out : "",

transformation-id : "",

interaction-id : ""

}, 

content_out : ""

},

{

..

}

]

Generieke parameters

AOF.TS-I.TGP.100.v3

Input voor alle type transformaties is een JSON object met de volgende inhoud:

Name

Cardinality

Type

Toelichting

meta.format_in

1..1

Lege string of een string met waarde escape of base64

Gehanteerde encodering voor(orig_)content_in

Wordt slechts gevuld wanneer de content een nadere aanduiding vereist bovenop de Content-Type aanduiding "application/json".

meta.protocol_in

1..1

String

Protocol van content_in (zie sectie Overzicht transformaties).

meta.protocol_out

1..1

Gewenst protocol van het output bericht, of van de output berichten, (zie sectie Overzicht transformaties).

meta.transformation-id    

0..1

String

Het ID van het te hanteren transformatie algoritme (zie sectie Overzicht transformaties).

Indien deze niet wordt meegestuurd, dan probeert de transformatie server zelf, o.b.v. de wel meegezonden informatie, het juiste transformatie algoritme te bepalen.

content_in

1..1

String waarop de benodigde escaping is toegepast, of die base64 geëncodeerde data bevat.

De te vertalen content.

AOF.TS-I.TGP.200.v2

Output van alle type transformaties is een set van JSON objecten met de volgende inhoud:

Name

Cardinality

Type

Toelichting

meta.format_out

1..1

Zie meta.format_in

Gehanteerde encodering voor content_out

meta.protocol_out

1..1

String

Protocol van het output bericht (zie sectie Overzicht transformaties).

meta.transformation-id

1..1

String

Het ID van het gehanteerde transformatie algoritme (zie sectie Overzicht transformaties).

meta.interaction-id

1..1

String

Het interaction-id van het output bericht.

content_out

1..1

Zie content_in

De getransformeerde content.

Transformatie Interface (transformatie tussen HL7-FHIR clients en HL7v3 servers)

Het kan hierbij gaan om transformatie van:

  1. Een enkelvoudige FHIR-search naar een v3-bericht;

  2. Een Bundle met FHIR-searches naar een set van v3-berichten;

  3. Een enkelvoudige FHIR-create naar een v3-bericht;

  4. Een Bundle met FHIR-creates naar één v3-bericht.

  5. Een Bundle met FHIR-creates naar een set van v3-berichten.

De scope van deze versie van de transformatieservice is beperkt tot

  • transformatie van responses behorende bij type 1;

  • transformatie van requests en responses behorende bij type 4.

De scope is verder beperkt tot het HL7v3-bericht, inclusief de wrappers. De SOAP laag valt buiten de scope van de transformatieservice.

Produceren van een v3-request

Aanroep

AOF.TS-I.PV3.100.v1

POST [base endpointadres]/to-v3-request

Ondersteunde transformaties

AOF.TS-I.PV3.200.v1

Ondersteunde combinaties van meta.protocol_in en meta.protocol_out voor deze transformatie zijn:

protocol_in

protocol_out

application/fhir+xml

application/hl7-v3+xml


application/fhir+json

Deze transformatie is exclusief eventueel benodigde SOAP elementen of hiervoor benodigde HTTP-headers.

Benodigde additionele parameters

AOF.TS-I.PV3.300.v1

Additionele input parameters voor transformatie van requests zijn:

Name

Cardinality

Type

Toelichting

meta.patient

1..1

String conform één van de volgende formaten

BSN van de patiënt die onderwerp is van het bericht.

meta.sender

1..1

String conform één van de volgende formaten

Applicatie-id van de initiërende applicatie

meta.receiver

1..1

Zie: sender type.

Applicatie-id van de ontvangende applicatie

meta.overseer.id

1..1

String conform één van de volgende formaten

ID van de verantwoordelijke persoon.

meta.overseer.role

0..1

String conform één van de volgende formaten

Rolcode van de verantwoordelijke persoon.

Wordt niet gebruikt wanneer user.id een nummer bevat van een systeem.

meta.overseer.org.id

1..1

String conform één van de volgende formaten

ID van de organisatie die de verantwoordelijke persoon vertegenwoordigt.

Indien de verantwoordelijke persoon een patiënt is, dan wordt deze gevuld met het organisatie-id van VZVZ (root="2.16.840.1.113883.2.4.3.11.25" extension="00004005).

meta.overseer.org.name

1..1

String

Naam van de organisatie die de verantwoordelijke persoon vertegenwoordigt.

Indien de verantwoordelijke persoon een patiënt is, dan wordt deze gevuld met "Vereniging van Zorgaanbieders voor Zorgcommunicatie".

meta.overseer.org.place

0..1

String

Vestiging locatie van de organisatie die de verantwoordelijke persoon vertegenwoordigt.

Niet verplicht wanneer  de verantwoordelijke persoon een patiënt is.

meta.author.id

0..1

Zie: overseer types

ID van de gebruiker.

Verplicht indien de gebruiker afwijkt van de verantwoordelijke persoon.

meta.author.role

0..1

Rolcode van de gebruiker.

Verplicht indien de gebruiker afwijkt van de verantwoordelijke persoon.

meta.author.org.id

0..1

ID van de organisatie die de gebruiker vertegenwoordigt.

Verplicht indien de gebruiker afwijkt van de verantwoordelijke persoon.

meta.author.org.name

0..1

Naam van de organisatie die de gebruiker vertegenwoordigt.

Verplicht indien de gebruiker afwijkt van de verantwoordelijke persoon.

meta.author.org.place

0..1

Vestiging locatie van de organisatie die de gebruiker vertegenwoordigt.

Verplicht indien de gebruiker afwijkt van de verantwoordelijke persoon.

meta.method

0..1

String met waarde GET | POST | PUT | DELETE

De gebruikte HTTP method. Verplicht wanneer het input bericht géén Bundle met een set van requests is.

meta.url

0..1

String

De gebruikte URL, inclusief eventuele (zoek)parameters. Verplicht wanneer het input bericht géén Bundle met een set van requests is.

AOF.TS-I.PV3.400.v1

Additionele output parameters voor transformatie van requests zijn:

Name

Cardinality

Type

Toelichting

meta.interactie-id

1..1

String

Het interactie-id van de geproduceerde HL7-v3 interactie.

Voorbeelden van transformaties

Voorbeeld van een te transformeren FHIR-request:

POST [base]
AORTA-Transactie: SAML2-Bearer/JWT-Bearer <transactie_token>
DigiD-Authenticatie: SAML2-Bearer <DigiD SAML Assertion>
Content-Type: application/x-www-form-urlencoded
AORTA-ID: initialRequestID=<UUID conform RFC4122>; requestID=<UUID conform RFC4122>
AORTA-Version: contentVersion=<versienummer>; acceptVersion=<versienummer>

<Bundle xmlns="http://hl7.org/fhir">

<id value="28943823489489"/>

<type value="batch"/>

<entry>

<fullUrl value="urn:uuid:61ebe359-bfdc-4613-8bf2-c5e300945f0a"/>

<resource>

<Observation>

..

</Observation>

</resource>

<request>

<method value="POST"/>

<url value="Observation"/>

</request>

</entry>

<entry>

..

</entry>

</Bundle> 


Voorbeeld van een resulterend v3-request:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-model href="../schematron/XXX.sch" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>

.. SOAP wrapper ..

<INTERACTIE-ID xsi:schemaLocation="urn:hl7-org:v3 ../schemas/INTERACTIE-ID.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:hl7-org:v3">

<!-- transmission wrapper -->

<id root="2.16.840.1.113883.2.4.6.6.1.1" extension="4384723894787"/>

<creationTime value=""/>

<versionCode code="VERSIE"/>

<interactionId root="2.16.840.1.113883.1.6" extension="INTERACTIE-ID"/>

<profileId root="2.16.840.1.113883.2.4.3.11.1" extension="810"/>

<processingCode code="P"/>

<processingModeCode code="T"/>

<acceptAckCode code="AL"/>

<attentionLine>

<keyWordText code="PATID" codeSystem="2.16.840.1.113883.2.4.15.1">Patient.id</keyWordText>

<value root="2.16.840.1.113883.2.4.6.3" extension="100197243" xsi:type="II"/>

</attentionLine>

<receiver>

<device determinerCode="INSTANCE" classCode="DEV">

<id root="2.16.840.1.113883.2.4.6.6" extension="23434323"/>

</device>

</receiver>

<sender>

<device determinerCode="INSTANCE" classCode="DEV">

<id root="2.16.840.1.113883.2.4.6.6" extension="1"/>

</device>

</sender>

<ControlActProcess moodCode="EVN">

<!-- control act wrapper -->

<authorOrPerformer typeCode="AUT">

<participant>

<AssignedPerson>

<id root="2.16.528.1.1007.3.1" extension="012345655"/>

<code code="01.016" codeSystem="2.16.840.1.113883.2.4.15.111" displayName="Internist"/>

<Organization>

<id root="2.16.528.1.1007.3.3" extension="02234567"/>

<name>Bester</name>

</Organization>

</AssignedPerson>

</participant>

</authorOrPerformer>

<overseer typeCode="RESP">

<AssignedPerson>

<id root="2.16.528.1.1007.3.1" extension="012345655"/>

<code code="01.015" codeSystem="2.16.840.1.113883.2.4.15.111" displayName="Huisarts"/>

<assignedPrincipalChoiceList>

<assignedPerson>

<name>Bester</name>

</assignedPerson>

</assignedPrincipalChoiceList>

<Organization>

<id root="2.16.528.1.1007.3.3" extension="02234567"/>

<name>Jansen</name>

<addr>

<city>Amsterdam</city>

</addr>

</Organization>

</AssignedPerson>

</overseer>

<subject>

<!-- Payload -->

<ClinicalDocument>

..

</ClinicalDocument>

</subject>

</ControlActProcess>

</INTERACTIE-ID>

Produceren van een FHIR-response

Aanroep

AOF.TS-I.FRA.100.v1

POST [base endpointadres]/to-fhir-response

Ondersteunde transformaties

AOF.TS-I.FRT.100.v1

Ondersteunde combinaties van meta.protocol_in en meta.protocol_out voor deze transformatie zijn:

protocol_in

protocol_out

application/hl7-v3+xml

application/fhir+xml

application/fhir+json

Benodigde additionele parameters

AOF.TS-I.FAP.100.v2

Additionele input parameters voor transformatie van responses zijn:

Name

Cardinality

Type

Toelichting

orig_content_in

0..1

String waarop de benodigde escaping is toegepast, of die base64 geëncodeerde data bevat.

Bevat het request bericht, voor vertaling, dat heeft geleid tot de nu te vertalen response. Deze is nodig bij de transformatie van het response bericht.

meta.interactie-id

1..1

String

Het interactie-id van de HL7-v3 interactie die de aanleiding was voor de te transformeren HL7v3-response.

meta.orig_protocol_in

0..1

String

Protocol van orig_content_in (zie sectie Overzicht transformaties).

AOF.TS-I.FAP.200.v1

Additionele output parameters voor transformatie van responses zijn:

Name

Cardinality

Type

Toelichting

meta.content-version

1..1

String

De contentVersion die moet worden gebruikt in de AORTA-Version HTTP header.

Voorbeelden van transformaties

Voorbeeld van een te transformeren v3-response:

<?xml-model href="../schematron/XXX.sch" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>

.. SOAP wrapper ..

<INTERACTIE-ID xsi:schemaLocation="urn:hl7-org:v3 ../schemas/INTERACTIE-ID.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:hl7-org:v3">

<id extension="235" root="2.16.528.1.1007.3.3.1234567.1"/>

<creationTime value="20140704155629"/>

<versionCode code="NICTIZEd2005-Okt"/>

<interactionId extension="INTERACTIE-ID" root="2.16.840.1.113883.1.6"/>

<profileId extension="810" root="2.16.840.1.113883.2.4.3.11.1"/>

<processingCode code="P"/>

<processingModeCode code="T"/>

<acceptAckCode code="NE"/>

<acknowledgement typeCode="CA">

<targetMessage>

<id extension="4384723894787" root="2.16.840.1.113883.2.4.6.6.1.1"/>

</targetMessage>

</acknowledgement>

<receiver>

<device determinerCode="INSTANCE" classCode="DEV">

<id extension="1" root="2.16.840.1.113883.2.4.6.6"/>

</device>

</receiver>

<sender>

<device determinerCode="INSTANCE" classCode="DEV">

<id extension="23434323" root="2.16.840.1.113883.2.4.6.6"/>

</device>

</sender>

</INTERACTIE-ID>


Voorbeeld van een resulterende FHIR Bundle:

<Bundle xmlns="http://hl7.org/fhir">

<id value="someidvalue123"/>

<type value="batch-response"/>

<entry>

<fullUrl value="http://example.org/fhir/Patient/12423"/>

<resource>

<!-- whether to return the result resource depends on client preference -->

<Observation>

<id value="12423"/>

..

</Observation>

</resource>

<response>

<status value="201 Created"/>

<location value="Observation/12423/_history/1"/>

<etag value="W/&quot;1&quot;"/>

<lastModified value="2014-08-18T01:43:33Z"/>

<!-- Indien van toepassing -->

<outcome>

<OperationOutcome>

..

</OperationOutcome>

</outcome>

</response>

</entry>

<entry>

..

</entry>

</Bundle>


{}