API-beskrivning: skicka prov till SBR
Version: 1.0
Integrationen är byggd med REST och skyddas av certifikat. Prover (sample), alternativt provtagningstillfällen (sampling), skickas ett och ett och och OK svar ges endast om meddelandet uppfyller såväl tekniska specifikationer som domänregler (detta dokument samt OpenAPI-specifikation).
Ansvaret för ett meddelande ligger kvar hos sändande part tills dess att ett OK-svar givits av SBR.
Information i integrationen
I sin första (nuvarande) form innehåller integrationen lite information om varje prov. Detta är någonting som kommer att utökas i framtiden i samarbete med anslutna system.
Skicka prov till SBR - meddelandestruktur
Term | Obligatoriskt | Innehåll | Syfte |
---|---|---|---|
samplingId | Ja | Id för provtagningstillfället. Unikt inom det system som skickar uppgifterna. Sträng av minst ett, max 50 tecken från ASCII 33-126 | Nyckel för att senare uppdatera eller radera informationen. |
person.personIdType | Ja | Typ av identifierare för provgivare. Någon av: “OTHER“ används för reservnummer. |
|
person.personId | Ja | Identifierare för provgivaren. Format bestäms av person.personIdType Notera att för personnummer och samordningsnummer används inte skatteverkets officiella definition. Se personidentifierare nedan |
|
person.sex | Ja | Provgivarens biologiska kön. Någon av: |
|
opposeTo | Ja | Samtyckesinformation. Lista av noll eller flera av: Om provgivaren inte har någon registrerad begränsning skickas en tom lista, alltså att provgivaren inte motsatt sig något syfte. | Anger användning som provgivaren motsätter sig. Om samtliga är angivna betraktas detta som att provet inte ska sparas och information om provet raderas i SBR |
samplingOrigin.organisationName | Ja | Sträng som identifierar den huvudman i vilkens regi proverna sparas Exempel: “Region Uppsala” | Används för att identifiera rätt provsamling |
samplingOrigin.departmentName | Ja | Sträng som identifierar den avdelning i vilkens regi proverna sparas Exempel: “Patologi/Cytologi” | |
samplingOrigin.sampleCollection | Ja | Sträng som identifierar specifik provsamling där proverna sparas. Är ofta samma som departmentName då en avdelning ofta bara har en provsamling, men kan vara olika då flera provsamlingar kan hanteras på samma enhet (labb). Exempel “Patologi/Cytologi” | |
samples |
| Lista av prover tagna vid provtagningstillfället. Noll eller flera. |
|
samples[].identifier | Ja | Identifierare för prov. Unikt per provsamling Sträng av minst ett, max 50 tecken från ASCII 33-126 |
|
samples[].label | Nej | Sträng som används för att personalen ska kunna hitta provet, alltså samma som det fysiska provet är märkt med. Sträng av minst ett, max 50 tecken från ASCII 33-126 |
|
samples[].registrationDate | Ja | Det datum då provet registrerades i LIS. Får ej vara i framtiden. |
|
samples[].sampleAnatomicalPositions | Ja om histologi eller cytologiprov | Lista av en eller flera positioner från /anatomical_positions (se nedan) |
|
samples[].sampleMaterialType | Ja | En av typerna från /material_types , se nedan |
|
samples[].samplingDate | Nej | Datum då proverna togs. Får ej vara j framtiden. | Denna är tänkt att ersätta sample.registration_date när alla LIS-system kan skicka den. |
Exempel
{
"samplingId": "12341234",
"person": {
"personIdType": "RSV704",
"personId": "191212121212",
"sex": "MALE"
},
"opposeTo": [
"RESEARCH"
],
"samplingOrigin": {
"organisationName": "Region_Uppsala",
"departmentName": "Patologi",
"sampleCollection": "Patologi"
},
"samples": [
{
"identifier": "1234",
"label": "A778",
"registrationDate": "2022-04-20",
"sampleAnatomicalPositions": [
"T02"
],
"sampleMaterialType": "Vävnad",
"samplingDate": "2022-04-20"
},
{
"identifier": "2345",
"label": "A779",
"registrationDate": "2022-04-20",
"sampleAnatomicalPositions": [
"T03"
],
"sampleMaterialType": "Vävnad",
"samplingDate": "2022-04-20"
}
]
}
Datumformat
För samtliga datum används ISO-8601 utan tidszon, t.ex. 1998-06-22.
Personidentifierare
För att identifiera en provgivare används personnummer (RSV704) , samordningsnummer (RSV707) eller reservnummer.
Personer som inte kan identifieras med någon av dessa identifierare exkuderas ur integrationen. Notera att detta även gäller barn som saknar personnummer, de ska inte registreras på mammans personnumer utan exkluderas tills dess att de fått personnummer.
Personnummer
Formatet ska vara ÅÅÅÅMMDDNNNN, det vill säga enligt det officiella formatet men med den skillnaden att “-”/”+” inte används (även om personen är äldre än 100 år) och att årtusende och århundrade alltid anges.
Se https://skatteverket.se/privat/folkbokforing/personnummer
Exempel: 191212121212
Samordningsnummer
Formatet ska vara ÅÅÅÅMMXXNNNN, det vill säga enligt det officiella formatet men med den skillnaden att “-”/”+” inte används (även om personen är äldre än 100 år) och att årtusende och århundrade alltid anges. XX är siffran för födelsedag ökad med talet 60.
Se https://skatteverket.se/offentligaaktorer/informationsutbyte/folkbokforingsamordningsnummer
Exempel: 191212721219
Reservnummer
Formatet skall vara en sträng om som mest 20 tecken ::= {A-Ö|a-ö|0-9|-+}
Anatomical Positions
Lista av giltiga anatomiska positioner (“T-koder”) finns på /anatomical_positions
Material Type
Lista av giltiga materialtyper finns på /material_types. Endast typer definerade här får användas, andra strängar ger felmeddelande.
Ett prov kan endast ha en materialtyp. De är definerade hierarkiskt så att t.ex. serum, plasma och helblod är underordnade blod.
Avsändare
För att korrekt hantera provtagningen behöver vi kunna identifiera avsändaren.
Identiteten skickas som en sträng i klartext, som mappas mot en intern identifierare i SBR, och måste därmed vara konstant över tid.
Identiteten överenskommes i förväg mellan sändande och mottagande part så att SBR kan konfigureras korrekt från start.
Notera att system inte är med då detta hämtas ur certifikatet (HSA-ID).
Url:er och endpoints
Demo-/testmiljö: https://samples.sbr.demo.biobanksverige.se/integration/sample/v1
Se nedan hur man kan ansluta till demo-miljön med ett test-certifikat.
Det finns även kopior av samtliga endpoints, utan krav på certifiktat, på https://insecure.samples.sbr.demo.biobanksverige.se/integration/sample/v1
Produktionsmiljö: https://samples.sbr.biobanksverige.se/integration/sample/v1
OpenApi specifikation finns på https://samples.sbr.demo.biobanksverige.se/integration/api-docs/sample/v1 (att ansluta dit kräver klient-certifikat, men specifikationen kan också nås utan certifikat på den öppna endpointen: https://insecure.samples.sbr.demo.biobanksverige.se/integration/api-docs/sample/v1)
Url | Metod | Syfte |
---|---|---|
/ | delete | ta bort prov identifierat av personidentifierare och provtagningsid |
/ | post | registrera eller uppdatera flera prover (eller ta bort om samtycke eller samples är tomt) |
/anatomical_positions | get | listar alla anatomiska positioner (T-kod) som vi accepteerar |
/material_types | get | lista alla provmaterial (kod) som vi accepterar |
Säkerhet och identifiering
Integrationen skyddas av certifikat och kräver att sändande system har ett av Inera utfärdat funktionscertifikat där sändande system identifieras med HSA-id.
Omvänt så identifierar sig samples.sbr.biobanksverige.se med ett ssl-certifikat där URI:n garanterar identiteten.
Ett system (HSA:id) kan kopplas till flera huvudmän, avdelningar och även provsamlingar.
För att skicka data till en provsamling (i praktiken samma som enhet/labb) behöver följande kommuniceras till SBR så att korrekt mappning kan göras:
HSA:id för sändande system (samma som i certifikatet)
Namn/id på huvudmannen som avses
Namn/id på den enhet (det laboratorium) där provet hanteras
Namn/id på den provsamling som provet ska förvaras i (i normalfallet samma som enhetsnamnet, detta finns framförallt för att i framtiden möjliggöra flera provsamlingar på samma enhet)
Dessa namn/id:n behöver kommuniceras med SBR i förväg.
Funktionscertifikatet som används behöver vara utfärdat under något av:
Rot: SITHS e-id Root CA v2
Mellanliggande: SITHS e-id Function CA v1
Rot: SITHS Root CA v1
Mellanliggande: SITHS Type 3 CA v1
Identifiering, testmiljö
För att testa att anslut till testmiljön ( https://samples.sbr.demo.biobanksverige.se/integration/sample/v1/) med ett klient-certifikat, kan man använda följande certifikat-filer. Dessa filer identifierar sändande system som ett system som kan registrera prover med “sampleOrigin”: "organisationName": "Region_Uppsala",
"departmentName": "Patologi",
"sampleCollection": "Patologi".
Följande curl-anrop fungerar och kan användas som mall för en lösning som behöver implementera klient-certifikats-identifiering:
curl -v --cert testClient.crt --key testClient.key -X POST -H "Content-Type: application/json" https://samples.sbr.demo.biobanksverige.se/integration/sample/v1/ -d @sample-import06.json
Registrera ny information
Integrationen är uppbyggd kring provtagning (sampling). Denna håller information om personen som givit prov, samtyckesinformation och själva proverna.
Provtagning är den minsta enheten att registrera och uppdatera och identifieras av ett provtagningsid (sampling_id)
För att registrera ett nytt prov behöver utöver tabellen ovan följande regler var uppfyllda (alla regler gällande krockar gäller endast inom samma provsamling/integration):
Samplingid får inte vara skickat tidigare
Samtliga datum måste vara senast dagens datum
Providentifierare måste vara unika inom ett provtagningstilfälle
Om prov är ett vävnadsprov så måste minst en korrekt formaterad t-kod finnas
Samtliga t-koder måste vara tagna ur listan med giltiga t-koder
Uppdatera befintlig information
SamplingId och person.personId identiferar tillsammans hela sampling. Om det kommer en ny tas den gamla bort och ersätts av den nya.
Om befintligt samplingId skickas med nytt personid kommer det att avvisas (se specifikt exempel Byta personidentifierare nedan).
Specifika fall och exempel
Ta bort ett provtagningstillfälle helt
För att radera ett provtagningstillfälle skickas ett anrop enligt samma format som vid nyregistrering men som inte innehåller några prover. Samtyckesinformationen kommer inte att beaktas.
Byta personidentifierare på ett provtagningstillfälle
För att byta personnummer på ett provtagningstillfälle raderas först det befintliga (se ovan), sedan skickas en ny registrering av provtagningstillfället med den nya personidentifieraren. Detta kan ske både vid misstag eller vid t.ex. byte från sammordningsnummer till svenskt personnummer.
Uppdatera samtyckesinformation
För att uppdatera samtyckesinformationen skickas hela provtagningstillfället om, inklusive prover, med den nya samtyckesinformationen.
Notera att om samtycke inte finns så kommer provtagningstillfället att raderas .
Svar
Om allt går bra svarar applikationen med 200 OK.
Om någonting inte fungerar svarar applikationen antingen med en generell felkod, eller i de fall data som skickats inte går igenom valideringen, men en specifik felkod. Se lista nedan.
Generella felkoder
HTTP-statuskod | Felmeddelande | Betydelse |
---|---|---|
400 | Standard HTTP | Klienten har inte presenterat ett betrott certifikat. |
401 | Standard HTTP | Saknad behörighet. |
500 | Standard HTTP | Internt fel hos SBR. Hanteras av SBR via loggövervakning och behöver inte rapporteras in av sändande part. |
503 | Standard HTTP | Tekniskt fel i överföringen. Detta ska rapporteras till SBRs förvaltning. |
SBR-specifika felkoder
HTTP-statuskod | Felkod | Felmeddelande | Betydelse |
---|---|---|---|
422 |
| registrationDate får inte vara tidigare än högst ett år före födelsedatum |
|
|
| registrationDate får inte vara i framtiden |
|
|
| samplingDate får inte vara i framtiden |
|
|
| The sampling identifier has already been used with different person id |
|
|
| The sample identifier has already been used with different person id |
|
|
| The sample identifier must follow the format RSV704 |
|
|
| The sample identifier must follow the format RSV707 |
|
|
| Unknown anatomical position |
|
|
| Anatomical position can not be empty for pathology/cytology |
|
|
| Unknown material description |
|
|
| Numret är inget samordningsnummer |
|
|
| Numret är inget personnummer |
|