Hakuoperaation HTTP vastaus (response)

Hakuoperaatio toimii synkronisesti. Hakuoperaation vastaus koostuu HTTP header-osuudesta ja body-osuudesta. Vastauksessa palautettavat reseptin yksilöintitiedot ovat HTTP body-osuudessa, samoin mahdolliset virheilmoitukset ovat HTTP body-osuudessa.

Vastauksen HTTP statuskoodit

Aluksi käytössä ovat seuraavat HTTP status koodit:

Koodi Kuvaus
200 (OK) Onnistunut hakupyyntö
400 (Bad Request) Virhetilanteeseen päätynyt hakupyyntö
500 (Internal Server Error) Sisäinen tekninen virhe

Näitä tullaan jatkossa tarkentamaan varsinkin virheisiin liittyvien statuskoodien osalta.

Vastauksen HTTP header

Vastauksessa palautuvat HTTP header-tiedot ovat seuraavat:

  • Content-Type: paluu-sanoman muoto: application/fhir+json;charset=UTF-8
  • X-Request-Id: vastaussanoman yksilöivä tunniste. esim.: 224895b7-39f0-48bb-81ce-63550d05b55d
  • X-Correlation-Id (optional): pyyntösanoman yksilöinyt tunniste, esim.: 2a844596-bee7-4173-b469-cef15b1554c0

Lisätiedot X-alkuisista FHIR custom headereista: FHIR custom headers

Vastauksen HTTP header esimerkki

HTTP/1.1 200 OK
Content-Type: application/fhir+json;charset=UTF-8
X-Request-Id: 224895b7-39f0-48bb-81ce-63550d05b55d
X-Correlation-Id: 2a844596-bee7-4173-b469-cef15b1554c0

Vastauksen HTTP body

Onnistuneen pyynnön vastaukset

Onnistuneen hakuoperaation vastauksena palautuu Bundle resurssi-instanssi, joka on tyypiltään searchset (type). Bundle resurssin tiedoissa ilmaistaan hakutulosten määrä (total) sekä varsinaiset reseptin yksilöintitiedot MedicationRequest resurssi-instansseissa. Jokainen yksittäinen resepti on oma MedicationRequest instanssinssa Bundle rakenteen sisällä (entry).

Hakuoperaatio on onnistunut myös silloin, jos vastauksena ei palaudu yhtään MedicationRequest resurssi-instanssia. Tällöin hakutulosten määrä (total) on nolla.

   

REST ok kertaa 2

   

Esimerkki Bundle resurssi-instanssista, jonka sisällä palautuu 3 MedicationRequest resurssi-instanssia

{
    "resourceType": "Bundle",
    "id": "92685db0-1b58-4cea-b1fa-289e8ab58892",
    "type": "searchset",
    "total": 3,
    "entry": [
        {
            "resource": {
                "resourceType": "MedicationRequest",
                ...
            }
        },
        {
            "resource": {
                "resourceType": "MedicationRequest",
                ...
            }
        },
        {
            "resource": {
                "resourceType": "MedicationRequest",
                ...
            }
        }
    ]
}

Esimerkki Bundle resurssi-instanssista, jonka hakutulos on nolla (esim. ei ole löytynyt hakuehtoja täyttäviä reseptin yksilöintietoja):

{
    "resourceType": "Bundle",
    "id": "073ce2b1-4c39-4cae-a479-ca59c8f74fef",
    "type": "searchset",
    "total": 0,
}

Palautuvat MedicationRequest resurssi-instanssit

Bundle resurssin sisällä palautuva yksittäinen MedicationRequest resurssi-instanssi sisältää yhden reseptin yksilöintitiedot. MedicationRequest-resurssista viitataan toisiin resursseihin. Näitä toisia resurssi-instansseja ovat Medication (lääkkeen tiedot), Patient (potilaan tiedot), Practitioner (määrääjän tiedot) ja Organization (määrääjän organisaation tiedot). Lisäksi palautuu PractitionerRole resurssi, jota tarvitaan, että voidaan ilmoittaa sekä Practitioner- että Organization-resurssit.

Hierarkia rakentuu seuraavasti:

  • MedicationRequest
    • viittaus Medication resurssiin
    • viittaus Patient resurssiin
    • viittaus PractitionerRole resurssiin
      • viittaus Practitioner resurssiin
      • viittaus Organization resurssiin

Näistä kaikista resursseista löytyy tästä implementointioppaasta profiilit, joissa on määritelty reseptin yksilöintitietojen mappaus FHIR tietoihin, profiileissa tarvittavat laajennukset (Extension) sekä tarkempia soveltamisohjeita (esim. käytettävien koodistojen sidonta koodattuihin tietotyyppeihin).

Viitattavat resurssi-instanssit palautuvat kaikki aina hakuoperaation vastauksessa MedicationRequest resurssi-instanssin sisällä contained elementissä.

resusuhteet

Esimerkki MedicationRequest resurssi-instanssista (riisuttu, josta näkyy muiden resurssien suhteet):

{
    "resourceType": "MedicationRequest",
    "id": "1.2.246.10.11587985.93.2009.17985416544561458",
    "contained": [
        {
            "resourceType": "Medication",
            "id": "1",
            ...
        },
        {
            "resourceType": "Patient",
            "id": "2",
            ...
        },
        {
            "resourceType": "PractitionerRole",
            "id": "3",
            "practitioner": {
                "reference": "#4"
            },
            "organization": {
                "reference": "#5"
            }
        },
        {
            "resourceType": "Practitioner",
            "id": "4",
            ...
        },
        {
            "resourceType": "Organization",
            "id": "5",
            ...
        }
    ],
    ...
    "status": "active",
    ...
    "medicationReference": {
        "reference": "#1"
    },
    "subject": {
        "reference": "#2"
    },
    "authoredOn": "2020-04-27T14:03:37+03:00",
    "requester": {
        "reference": "#3"
    },
    "dosageInstruction": ...
}

Virhetilanteeseen päätyneen pyynnön vastaus

Virhetilanteissa vastauksena palautuu HTTP virhestatuskoodi sekä HTTP bodyssa OperationOutcome resurssi-instanssi, jolla ilmaistaan tarkempi virhe.

REST virhe

OperationOutcome resurssista puuttuu vielä profiili. Seuraavaa kuvausta lukiessa kannattaa avata OperationOutcome-resurssi FHIR määrittelystä.

Yksittäinen virhe ilmoitetaan issue-elementissä. Severity-elementin arvo on virheissä ”error”, Code-elementtiin annetaan sopiva arvo FHIR koodistosta Issue Type ja varsinainen virhe ilmoitetaan Details-elementissä koodattuna. Details-elementin tietotyyppi on CodeableConcept, kyseinen tietotyyppi rakentuu Coding-tietotyypistä ja text-elementistä. Coding-tietotyypin elementeissä tiedot annetaan seuraavasti:

  • system elementissä ilmoitetaan käytettävä koodisto
  • code elementissä varsinainen virhekoodi
  • display elementissä virhekoodia vastaava selite.

CodeableConcept tietotyypin text elementissä annetaan virheen tarkempi selite.

Esimerkki virheilmoituksesta, joka palautuu OperationOutcome resurssi-instanssissa (huom. alla olevaa virheiden koodistoa ei ole vielä lopullisesti sovittu eikä profiloitu OperationOutcome resurssiin):

{
    "resourceType": "OperationOutcome",
    "issue": [
        {
            "severity": "error",
            "code": "processing",
            "details": {
                "coding": [
                    {
                        "system": "http://resepti.kanta.fi/fhir/prescription-errorcodes",
                        "code": "101015",
                        "display": "Virheellinen pakollinen tieto"
                    }
                ],
                "text": "clinicalDocument.code puuttuu"
            }
        }
    ]
}