Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Obligatorisk parameter för vilken profil som önskas i svaret. Se TKB för beskrivning av profilerna P1-P5. Observera att profilen skall anges med versalt P.
Datatyp: String.

Exempel: P1

Valfri parameter för det datum man är intresserad av förändringar från och med baserat på fältet version i personposten.
Datatyp: LocalDateTime.Exempel:
Numbered Headings

Inledning

Om dokumentet

Denna beskrivning är ett tillägg av tjänstekontrakten i tjänstedomänen strategicresourcemanagement:persons:person. Dokumentet beskriver hur tjänstens funktionalitet för att hämta och ladda upp filer är uppbyggd. Funktionaliteten baseras på dokument ARK_0038 enligt RIV-TA standarden och där grundprincipen för att hämta filer bygger på en RIV-tjänst för att lista tillgängliga filer och en REST-tjänst för att hämta de filer som listas via RIV-tjänsten. Anrop mot tjänsterna sker med HTTPS (Mutual-TLS) och validering av certifikatet från tjänstekonsument utförs för att endast tillåta att tjänsten levererar data till tillåtna mottagare.


Konnektivitet

SOAP-tjänst för att lista tillgängliga filer är tillgängliga via Nationell Tjänsteplattform (NTjP). NTjP saknar dock stöd för REST-baserade tjänster vilket medför att REST-tjänst för att hämta filer (ladda upp/ta bort) enbart är tillgänglig genom direktaccess mot tjänsteproducent.

Info
titleVersionshantering av searchPersonsByFile i version 4.8

Vid Release 4.8 gjordes en driftsförändring som gav REST-tjänsten för searchPersonsByFile två versioner. Läs mer under 2.1.1.2 Version



Figur 1.2: Anrop först till tjänst i NTjP med SOAP och sedan direkt till tjänsten med REST för att hämta resultatet från första anropet.

Notering om HSA-id: Personuppgiftstjänstens REST-tjänster kontrollerar vid begäran om filnedladdning att det är systemet med samma HSA-id som beställt filen. Om anropande konsument använder ett mellanlager i anslutning till NTjP, såsom en lokal tjänsteplattform, är det då viktigt för konsumenten att korrekt populera headern x-rivta-originalserviceconsumer-hsaid. Denna header skall ange det ursrungliga konsumerande systemets HSA-id, i enlighet med regel "Bevara ursprunglig avsändares identitet i http header" samt RIVTA Regel 23.

Beställning av behörighet

Personuppgiftstjänstens filhanteringstjänster är REST-tjänster som inte ingår i Inera NTjP. Behörighet för att använda dessa följer därför ett separat beställningsförfarande.

Beställning av behörighet till REST-tjänster görs genom att fylla i följande beställningsformulär, vilket skickas till Ineras kundtjänst på kundservice@inera.se. Ange i mailtexten att det gäller "Beställning av REST-tjänst för Personuppgiftstjänsten – se bilaga."

View file
nameBeställning Inera PU REST-tjänst.docx
height250

HSA-id: Till skillnad från NTjP-baserade tjänstekontrakt så kommer behörighet till REST-tjänsterna alltid att utgå ifrån HSA-id hos det konsumerande systemet, inte ifrån HSA-id hos eventuellt mellanlager. Ange därför i beställningen av REST-tjänst alltid det konsumerande systemets HSA-id.

Ärendenummer för NTjP tjänstekontrakt: Godkännande av beställning av behörighet för REST-tjänster kräver att beställaren redan har en godkänd beställning av NTjP tjänstekontrakt för Personuppgiftstjänsten. I beställning av REST-tjänst anges därför ärendenumret för denna tidigare "Beställning från beställningsstödet" avseende NTjP tjänstekontrakt.

Användningsfall: Beställning av behörighet för REST-tjänsterna görs utifrån användningsfall enligt tabell nedan. Varje beställt användningsfall ger behörighet till en eller flera ingående REST-tjänster.

AnvändningsfallSyfteIngående REST-tjänster
Söka personuppgifter via filBegär en sökning på en bifogad lista med identiteter

SearchPersonsByFile

Order/Get

Hämta resultatfil från kriteriesökningHämta resultat från en sökning gjord via NTjP tjänstekontrakt som genererat en resultatfilOrder/Get
Hantering av bilagor för reservidentiteterInkludera bilagd fil som styrker en reservidentitet

Attachment/Put

Attachment/Get

Attachment/Delete

Användningsfall

Filhantering förekommer i följande användningsfall inom Personuppgiftstjänsten:

  1. Söka personuppgifter via fil: SearchPersonsByFile
  2. Hämta resultat för asynkron personsökning: SearchPersonsForProfileByOrder och SearchPersonsByFile
  3. Hantering av bilagor för reservidentiteter: Hämta, ladda upp samt ta bort

Användningsfall 2 och delvis 3 följer flödet som beskrivs i ARK_0038 Refererad bilaga, medans detta inte är applicerbart i användningsfallen 1 och delvis 3 vid uppladdning av bilagor. Flöden för samtliga användningsfall specificeras i följande avsnitt.

Söka personuppgifter via fil: SearchPersonsByFile

Funktionen finns endast som restricted-variant. Returnerar alltså inte adress m.m på sekretessmarkerade personposter.

Flödet startar med att att en lista med personidentiteter behöver uppdateras. Listan upprättas som en radbruten CSV-fil där identiteterna anges med personid och personid-typ (OID) separerade med semikolon. Ex: 191212121212;1.2.752.129.2.1.3.1

Filen laddas upp via REST-metoden SearchPersonsByFile som vid lyckad uppladdning returnerar ett Order-Id. Detta Order-Id används som inparameter till tjänsten GetFilesForOrderId som returnerar ett svar om var den resulterande filen kan hämtas.

Om ordern inte är redo för nedladdning än så returneras inget svar, försök senare. Då ordern läggs på kö så kan väntetiden variera mycket. Kontakta supporten om din order inte är redo efter 24h.

OBS: Filer skapade via personsök är garanterat tillgängliga i ett dygn, därefter rensas dom automatiskt bort från Personuppgiftstjänsten. Filer som har hämtats kan rensas bort tidigare.

Den slutgiltiga filen som hämtas är en zippad fil innehållande en XML med det urval som efterfrågats, GetPersonsForProfileResponse. Notera där följande:

  • Innehållet kommer att skilja sig från hur svaret ser ut i en GetPersonsForProfileResponse som uppkommit efter fråga mot tjänstekontraktet GetPersonsForProfile, enligt följande: I svaret som genererats via SearchPersonsByFile kommer endast en RequestedPersonRecord att levereras för de personposter som hittades i databasen. Detta i kontrast mot svaren från GetPersonsForProfile, där varje efterfrågad personpost kommer att få en RequestedPersonRecord oavsett om personposten hittades eller ej.
  • SearchPersonsByFile har ej stöd för sökning mot personposter med testIndicator=true, dvs personidentiteter som i testmiljö kallas testpersoner och i produktionsmiljö kallas valideringspersoner. En sökning mot sådan identitet kommer inte att returnera någon RequestedPersonRecord oavsett om personposten finns i databasen eller ej. För tester av SearchPersonsByFile behöver istället testpersoner med testIndicator=false användas.

Bild: Exempel på ett svar där träff ficks på ett personid.

PlantUML Macro
@startuml

'skinparam handwritten true

skinparam sequence {
	ArrowColor #9C9C9C
	ActorBorderColor #9C9C9C
	LifeLineBorderColor #9C9C9C
	LifeLineBackgroundColor #F5F5F5
	
	ParticipantBorderColor<<Consumer>> #E3B549
	ParticipantBackgroundColor<<Consumer>> #FFE6CC
	ParticipantBorderColor<<Ntjp>> #6C8EBF
	ParticipantBackgroundColor<<Ntjp>> #DAE8FC
	ParticipantBorderColor<<Producer>> #82B366
	ParticipantBackgroundColor<<Producer>> #D5E8D4
	
	StereotypeFontColor white
	StereotypeFontSize 0
	
}

participant "Tjänstekonsument" as A<<Consumer>>
participant "Virtuell tjänst (NTjP)" as tp<<Ntjp>>
participant "Tjänsteproducent - PU" as pu<<Producer>>

activate A
A -> pu : Ladda upp fil\n//SearchPersonsByFile (REST)//
activate pu
pu -> pu : (Interna operationer)
pu -> A : Resultat\n//OrderId//
deactivate pu

A -> tp : Lista tillgängliga filer\n//GetFilesForOrderId (SOAP)//
activate tp
tp -> pu: //GetFilesForOrderId (SOAP)//
activate pu
pu -> pu : (Interna operationer)
pu -> tp : Resultat\n//0..* Filreferens (URL)//
deactivate pu
tp -> A : Resultat\n//0..* Filreferens (URL)//
deactivate tp

A -> pu : Hämta fil\n//URL (REST)//
activate pu
pu -> pu : (Interna operationer)
pu -> A : Resultat\nZIP-fil
deactivate pu

deactivate A

@enduml

Parametrar

Image Added



Parametrar

NamnBeskrivning
profile

Obligatorisk parameter för vilken profil som önskas i svaret. Se TKB för beskrivning av profilerna P1-P5. Observera att profilen skall anges med versalt P.

Datatyp: String.

Exempel: P1

fromDate 

Valfri parameter för det datum man är intresserad av förändringar från och med baserat på fältet version i personposten.

Datatyp: LocalDateTime.

Exempel: 2021-10-12T00:00:00

maxResultsPerFile

Valfri parameter för max antal personposter per fil. Ej angivet så returneras alltid resultatet i endast en fil. Detta värde får ej vara lägre än 500.

Datatyp: Integer.

Exempel: 1000

primaryidentities 

Valfri parameter som om satt gör att endast personposter som är markerad som huvudidentitet inkluderas i svaret. En efterfrågad personpost som inte är en huvudidentitet kommer då varken att generera en requestedPersonalIdentity eller en personRecord i svarsfilen.

Datatyp: Boolean.

Exempel: true

 Version

REST-tjänsten SearchPersonsByFile finns i två versioner och anropas via två olika url:er. Det som skiljer versionerna åt är att de är kompatibla med olika versioner av domänen strategicresourcemanagement:persons:person.

Exempel

Via cURL

NamnBeskrivning
profilefromDate 
RequestResponse

Version 1

curl -X POST \
https://api.pu.ineratest.org:443/purest/searchPersonsByFile \
-H 'content-type: multipart/form-data;' \
-F profile=P1 \
-F fromDate=2021-10-12T00:00:00 \
-F maxResultsPerFile=1000 \
-F primaryidentity=true \
-F file=@bilagan.csv

Version 2

curl -X POST \
https://api.pu.ineratest.org:443/purest/v2/searchPersonsByFile \
-H 'content-type: multipart/form-data;' \
-F profile=P1 \
-F fromDate=

2021-10-12T00:00:00 \
-F maxResultsPerFile

Valfri parameter för max antal personposter per fil. Ej angivet så returneras alltid resultatet i endast en fil. Detta värde får ej vara lägre än 500.
Datatyp: Integer.

Exempel: 1000

primaryidentities Valfri parameter som om satt gör att endast personposter som är markerad som huvudidentitet inkluderas i svaret. En efterfrågad personpost som inte är en huvudidentitet kommer då varken att generera en requestedPersonalIdentity eller en personRecord i svarsfilen.
Datatyp: Boolean.

Exempel: true

 Version

REST-tjänsten SearchPersonsByFile finns i två versioner och anropas via två olika url:er. Det som skiljer versionerna åt är att de är kompatibla med olika versioner av domänen strategicresourcemanagement:persons:person.

Exempel

Via cURL

RequestResponse

Version 1

curl -X POST \
https://api.pu.ineratest.org:443/purest/searchPersonsByFile \
-H 'content-type: multipart/form-data;' \
-F profile=P1 \
-F fromDate=2021-10-12T00:00:00 \
-F maxResultsPerFile=1000 \
-F primaryidentity=true \
-F file=@bilagan.csv

Version 2

curl -X POST \
https://api.pu.ineratest.org:443/purest/v2/searchPersonsByFile \
-H 'content-type: multipart/form-data;' \
-F profile=P1 \
-F fromDate=2021-10-12T00:00:00 \
-F maxResultsPerFile=1000 \
-F primaryidentity=true \
-F file=@bilagan.csv

Statuskod: 201 CREATED
Content-Type: application/json; charset=ISO-8859-1
Transfer-Encoding: chunked
Content:

{
  "orderId": "1028-TO63-15133551"
}

Statuskod: 400 BAD_REQUEST
* Filen är inte av typ CSV
* Filen är tom
* De första raderna innehåller ogiltigt formaterad data
* Den angivna profilen är inte giltig
* Det angivna värdet för max antal personposter per fil är för lågt
Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänstenStatuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsett fel
* Filens storlek i MB överskrider tillåten gräns
* Felaktig datatyp angiven för parameter

Hämta resultat för personsök

Flödet startar med att ett urval för ett stort antal patienter behöver göras. Detta urval sker genom anrop till någon av de asynkron "*ByOrder-tjänsterna" eller SearchPersonsByFile som alla returnerar ett Order-Id.

FrågaSvar

Image Removed

Image Removed

Detta Order-Id används sedan som inparameter till tjänsten GetFilesForOrderId som returnerar ett svar med en eller flera länkar till resultatfilerna.

FrågaSvar

Image Removed

Image Removed

Då ordnarna som inkommer via dessa asynkrona tjänster läggs på kö så är det inte säkert att resultatet är färdigt ifall man frågar direkt efter att ordern har lagts. Tiden för orderna att bli klar varierar beroende på last på systemet och storleken på resultatet. Ett frågande system bör dock kunna förvänta sig ett svar inom fyra timmar.

Under tiden ordern inte är klar returnerar GetFilesForOrderId ett svar utan länkar/<multimedia>-stycke.

Image Removed
OBS: Resultatfilerna är garanterat tillgängliga i ett dygn. Därefter rensas dom automatiskt bort. Filen kan bara hämtas en gång då de efter hämtning rensas bort.

=1000 \
-F primaryidentity=true \
-F file=@bilagan.csv

Statuskod: 201 CREATED
Content-Type: application/json; charset=ISO-8859-1
Transfer-Encoding: chunked
Content:

{
  "orderId": "1028-TO63-15133551"
}

Statuskod: 400 BAD_REQUEST
* Filen är inte av typ CSV
* Filen är tom
* De första raderna innehåller ogiltigt formaterad data
* Den angivna profilen är inte giltig
* Det angivna värdet för max antal personposter per fil är för lågt


Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänsten


Statuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsett fel
* Filens storlek i MB överskrider tillåten gräns
* Felaktig datatyp angiven för parameter


Hämta resultat för personsök

Flödet startar med att ett urval för ett stort antal patienter behöver göras. Detta urval sker genom anrop till någon av de asynkron "*ByOrder-tjänsterna" eller SearchPersonsByFile som alla returnerar ett Order-Id.

FrågaSvar

Image Added

Image Added


Detta Order-Id används sedan som inparameter till tjänsten GetFilesForOrderId som returnerar ett svar med en eller flera länkar till resultatfilerna.


FrågaSvar

Image Added

Image Added


Då ordnarna som inkommer via dessa asynkrona tjänster läggs på kö så är det inte säkert att resultatet är färdigt ifall man frågar direkt efter att ordern har lagts. Tiden för orderna att bli klar varierar beroende på last på systemet och storleken på resultatet. Ett frågande system bör dock kunna förvänta sig ett svar inom fyra timmar.

Under tiden ordern inte är klar returnerar GetFilesForOrderId ett svar utan länkar/<multimedia>-stycke.


Image Added

OBS: Resultatfilerna är garanterat tillgängliga i ett dygn. Därefter rensas dom automatiskt bort. Filen kan bara hämtas en gång då de efter hämtning rensas bort.

Resultatfilerna är ZIP:ade och innehåller en XML-fil med det urval som efterfrågats. Formatet som specificeras i TKB och XSD för strategicresourcemanagement:persons:person.

Image Added


Exempel

SearchPersonsForProfileByOrder

RequestResponse


Code Block
languagexml
<soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:urn="urn:riv:itintegration:registry:1"
 xmlns:urn1="urn:riv:strategicresourcemanagement:persons:person:SearchPersonsForProfileByOrderResponder:3">
  <soapenv:Header>
    <urn:LogicalAddress>SE165565594230-1000</urn:LogicalAddress>
  </soapenv:Header>
  <soapenv:Body>
    <urn1:SearchPersonsForProfileByOrder>
      <urn1:query>FROM personrecord WHERE name.givenname LIKE 'Daniel%';</urn1:query>
      <urn1:queryLanguage>SimpleQL</urn1:queryLanguage>
      <urn1:profile>P5</urn1:profile>
    </urn1:SearchPersonsForProfileByOrder>
  </soapenv:Body>
</soapenv:Envelope>



Code Block
languagexml
<S:Envelope
 xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:SearchPersonsForProfileByOrderResponse
     xmlns:ns2="urn:riv:strategicresourcemanagement:persons:person:SearchPersonsForProfileByOrderResponder:3"
     xmlns:ns3="urn:riv:strategicresourcemanagement:persons:person:3"
     xmlns:ns4="urn:riv:itintegration:registry:1">
      <ns2:orderId>0622-TO17-09215997</ns2:orderId>
    </ns2:SearchPersonsForProfileByOrderResponse>
  </S:Body>
</S:Envelope>



GetFilesForOrderId

RequestResponse


Code Block
languagexml
<soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:urn="urn:riv:itintegration:registry:1"
 xmlns:urn1="urn:riv:strategicresourcemanagement:persons:person:GetFilesForOrderIdResponder:3">
  <soapenv:Header>
    <urn:LogicalAddress>SE165565594230-1000</urn:LogicalAddress>
  </soapenv:Header>
  <soapenv:Body>
    <urn1:GetFilesForOrderId>
      <urn1:orderId>0622-TO17-09215997</urn1:orderId>
    </urn1:GetFilesForOrderId>
  </soapenv:Body>
</soapenv:Envelope>


Resultat ej klart:

Code Block
languagexml
<S:Envelope
 xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:GetFilesForOrderIdResponse
     xmlns:ns2="urn:riv:strategicresourcemanagement:persons:person:GetFilesForOrderIdResponder:3"
     xmlns:ns3="urn:riv:strategicresourcemanagement:persons:person:3"
     xmlns:ns4="urn:riv:itintegration:registry:1">
    </ns2:GetFilesForOrderIdResponse>
  </S:Body>
</S:Envelope>

Resultat klart:

Code Block
languagexml
<S:Envelope
 xmlns:S

Resultatfilerna är ZIP:ade och innehåller en XML-fil med det urval som efterfrågats. Formatet som specificeras i TKB och XSD för strategicresourcemanagement:persons:person.

PlantUML Macro
@startuml

'skinparam handwritten true

skinparam sequence {
	ArrowColor #9C9C9C
	ActorBorderColor #9C9C9C
	LifeLineBorderColor #9C9C9C
	LifeLineBackgroundColor #F5F5F5
	
	ParticipantBorderColor<<Consumer>> #E3B549
	ParticipantBackgroundColor<<Consumer>> #FFE6CC
	ParticipantBorderColor<<Ntjp>> #6C8EBF
	ParticipantBackgroundColor<<Ntjp>> #DAE8FC
	ParticipantBorderColor<<Producer>> #82B366
	ParticipantBackgroundColor<<Producer>> #D5E8D4
	
	StereotypeFontColor white
	StereotypeFontSize 0
	
}

participant "Tjänstekonsument" as A<<Consumer>>
participant "Virtuell tjänst (NTjP)" as tp<<Ntjp>>
participant "Tjänsteproducent - PU" as pu<<Producer>>


activate A
A -> tp : Beställ urval\n//SearchPersonsForProfileByOrder (SOAP)//
activate tp
tp -> pu: //SearchPersonsForProfileByOrder (SOAP)//
activate pu
pu -> pu : (Interna operationer)
pu -> tp : Resultat\n//OrderId//
deactivate pu
tp -> A : Resultat\n//OrderId//
deactivate tp


A -> tp : Lista tillgängliga filer\n//GetFilesForOrderId (SOAP)//
activate tp
tp -> pu: //GetFilesForOrderId (SOAP)//
activate pu
pu -> pu : (Interna operationer)
pu -> tp : Resultat\n//0..* Filreferens (URL)//
deactivate pu
tp -> A : Resultat\n//0..* Filreferens (URL)//
deactivate tp

A -> pu : Hämta fil\n//URL (REST)//
activate pu
pu -> pu : (Interna operationer)
pu -> A : Resultat\nZIP-fil
deactivate pu

deactivate A

@enduml

Exempel

SearchPersonsForProfileByOrder

RequestResponse
code
Code Block
languagexml
<soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 xmlns:urn="urn:riv:itintegration:registry:1"
 xmlns:urn1 <S:Body>
    <ns2:GetFilesForOrderIdResponse
     xmlns:ns2="urn:riv:strategicresourcemanagement:persons:person:GetFilesForOrderIdResponder:3"
     xmlns:ns3="urn:riv:strategicresourcemanagement:persons:person:SearchPersonsForProfileByOrderResponder:3">
  <soapenv:Header>
    <urn:LogicalAddress>SE165565594230-1000</urn:LogicalAddress>
  </soapenv:Header>
  <soapenv:Body>
xmlns:ns4="urn:riv:itintegration:registry:1">
      <urn1<ns2:SearchPersonsForProfileByOrder>multimedia>
      <urn1:query>FROM personrecord WHERE name.givenname LIKE 'Daniel%';</urn1:query>  <ns3:mediaType>application/zip</ns3:mediaType>
        <ns3:reference>https://api.pu.ineratest.org:443/purest/order/get/fd6a78ee-da71-4ec6-a099-cbccc21fe468</ns3:reference>
      <urn1:queryLanguage>SimpleQL<</urn1ns2:queryLanguage>multimedia>
      <urn1:profile>P5</urn1:profile>
    </urn1:SearchPersonsForProfileByOrder></ns2:GetFilesForOrderIdResponse>
  </soapenvS:Body>
</soapenvS:Envelope>



REST

language<S:Envelope xmlns:S="http

://

schemas

api.pu.

xmlsoap

ineratest.org:443/

soap

purest/order/

envelope/"> <S:Body> <ns2:SearchPersonsForProfileByOrderResponse xmlns:ns2="urn:riv:

get/fd6a78ee-da71-4ec6-a099-cbccc21fe468

RequestResponse

https

xml

Statuskod: 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="<filnamn>"
Transfer-Encoding: chunked
Content: fil (zippat xmldata enligt strategicresourcemanagement:persons:person

:SearchPersonsForProfileByOrderResponder:3" xmlns:ns3="urn:riv:strategicresourcemanagement:persons:person:3" xmlns:ns4="urn:riv:itintegration:registry:1"> <ns2:orderId>0622-TO17-09215997</ns2:orderId> </ns2:SearchPersonsForProfileByOrderResponse> </S:Body> </S:Envelope>

GetFilesForOrderId

RequestResponse
Code Block
languagexml
<soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:urn="urn:riv:itintegration:registry:1"
 xmlns:urn1="urn:riv:strategicresourcemanagement:persons:person:GetFilesForOrderIdResponder:3">
  <soapenv:Header>
    <urn:LogicalAddress>SE165565594230-1000</urn:LogicalAddress>
  </soapenv:Header>
  <soapenv:Body>
    <urn1:GetFilesForOrderId>
      <urn1:orderId>0622-TO17-09215997</urn1:orderId>
    </urn1:GetFilesForOrderId>
  </soapenv:Body>
</soapenv:Envelope>

Resultat ej klart:

Code Block
languagexml
<S:Envelope
 xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:GetFilesForOrderIdResponse
     xmlns:ns2="urn:riv:strategicresourcemanagement:persons:person:GetFilesForOrderIdResponder:3"
     xmlns:ns3="urn:riv:strategicresourcemanagement:persons:person:3"
     xmlns:ns4="urn:riv:itintegration:registry:1">
    </ns2:GetFilesForOrderIdResponse>
  </S:Body>
</S:Envelope>

Resultat klart:

Code Block
languagexml
<S:Envelope
 xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:GetFilesForOrderIdResponse
     xmlns:ns2="urn:riv:strategicresourcemanagement:persons:person:GetFilesForOrderIdResponder:3"
     xmlns:ns3="urn:riv:strategicresourcemanagement:persons:person:3"
     xmlns:ns4="urn:riv:itintegration:registry:1">
      <ns2:multimedia>
        <ns3:mediaType>application/zip</ns3:mediaType>
        <ns3:reference>https://api.pu.ineratest.org:443/purest/order/get/fd6a78ee-da71-4ec6-a099-cbccc21fe468</ns3:reference>
      </ns2:multimedia>
    </ns2:GetFilesForOrderIdResponse>
  </S:Body>
</S:Envelope>

REST

RequestResponse

https://api.pu.ineratest.org:443/purest/order/get/fd6a78ee-da71-4ec6-a099-cbccc21fe468

Statuskod: 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="<filnamn>"
Transfer-Encoding: chunked
Content: fil (zippat xmldata enligt strategicresourcemanagement:persons:person)

Struktur för filnamn (både ZIP och XML): <orderId>_<datum>_<löpnummer>.zip (samt .xml)
Exempel: 0622-TO17-09215997_20170622_1.zip

Statuskod: 400 BAD_REQUEST
* Ogiltig context path
* HSA-id för konsument saknas
* Certifikat för OrderId matchar inte certifikat som används vid hämtning av fil
* Filen har redan hämtats
Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänstenStatuskod: 404 NOT FOUND
* Begärd referens (GUID) existerar inte
Statuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsätt fel

Bilagor för reservidentitet

En reservidentitet kan i PU-tjänsten ha 0..n bilagor. Dessa används för att styrka identiteten och kan vara exempelvis en kopia på ett pass. Bilagan kan laddas upp till reservidentiteten och senare kopplas till en specifik uppgift om styrkande av identitet. All operationer gällande bilagor görs med fördel i det av PU-tjänsten tillhandahålla GUI't, men kan vid behov hanteras av integrerande tjänster. För hantering av bilagor via GUI hänvisas till Användarhanboken för PU. Nedan beskrivs de flöden som appliceras vid integration av konsument.

Enbart exempel för REST-tjänster redovisas i följande kapitel. För information om användandet av RIV-tjänsterna hänvisas till TKB.

Ladda upp bilaga

Uppladdning av bilaga sker genom PUT och föregås av en hämtning av personpost för aktuell reservidentitet. Detta för att säkerställa att identiteten finns.

PlantUML Macro
@startuml

'skinparam handwritten true

skinparam sequence {
	ArrowColor #9C9C9C
	ActorBorderColor #9C9C9C
	LifeLineBorderColor #9C9C9C
	LifeLineBackgroundColor #F5F5F5
	
	ParticipantBorderColor<<Consumer>> #E3B549
	ParticipantBackgroundColor<<Consumer>> #FFE6CC
	ParticipantBorderColor<<Ntjp>> #6C8EBF
	ParticipantBackgroundColor<<Ntjp>> #DAE8FC
	ParticipantBorderColor<<Producer>> #82B366
	ParticipantBackgroundColor<<Producer>> #D5E8D4
	
	StereotypeFontColor white
	StereotypeFontSize 0
	
}

participant "Tjänstekonsument" as A<<Consumer>>
participant "Virtuell tjänst (NTjP)" as tp<<Ntjp>>
participant "Tjänsteproducent - PU" as pu<<Producer>>

activate A
A -> tp: //GetPersonsForProfile//\n(reservidentitet)
activate tp
tp -> pu: //GetPersonsForProfile//\n(reservidentitet)
activate pu
pu -> tp: Svar med Personpost
deactivate pu
tp -> A: Svar med Personpost
deactivate tp

A -> pu: PUT\nbilaga och parametrar
activate pu
pu -> pu: Spara bilaga och generera ID
pu -> A: Svar\nMultimediatyp som JSON
deactivate pu

deactivate A
@enduml

URL

Beror på miljö, men exempelvis: https://api.pu.ineratest.org:443/purest/attachment/put

Parametrar

NamnBeskrivningactorRootroot (OID) för aktöractorExtensionvärde för aktöractorProfessionalRootroot (OID) för aktörens organisation/vårdgivareactorProfessionalExtensionvärde för aktörens organisation/vårdgivarepatientRootroot (OID) för patientidentitetpatientExtensionvärde patientidentitetfilebilagan

Exempel

Via cURL

RequestResponse

curl -X PUT \
https://api.pu.ineratest.org:443/purest/attachment/put \
-H 'content-type: multipart/form-data; \
-F actorRoot=HSAID \
-F actorExtension=SE123456789 \
-F actorProfessionalRoot=HSAID \
-F actorProfessionalExtension=SE987654321 \
-F patientRoot=1.2.752.74.9.1 \
-F patientExtension=00002040AA11 \
-F file=@bilagan.jpg

Statuskod: 200 OK
Content-Type: application/json; charset=ISO-8859-1
Transfer-Encoding: chunked
Content:

{
"id": "36a7068d-172b-4fee-bed5-13ecbdfa7ff2",
"mediaType": "image/jpeg",
"value": null,
"reference": "https://api.pu.ineratest.org:443/purest/attachment/get/36a7068d-172b-4fee-bed5-13ecbdfa7ff2"
}

Statuskod: 400 BAD_REQUEST
* Ogiltig context path
* HSA-id för konsument saknas
* Ogiltig patientidentitet / parametrar

Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänstenStatuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsätt fel

Koppla / Koppla ifrån bilaga

Dessa operationer är rena RIV-tjänster och beskrivs i TKB.

PlantUML Macro
@startuml

'skinparam handwritten true

skinparam sequence {
	ArrowColor #9C9C9C
	ActorBorderColor #9C9C9C
	LifeLineBorderColor #9C9C9C
	LifeLineBackgroundColor #F5F5F5
	
	ParticipantBorderColor<<Consumer>> #E3B549
	ParticipantBackgroundColor<<Consumer>> #FFE6CC
	ParticipantBorderColor<<Ntjp>> #6C8EBF
	ParticipantBackgroundColor<<Ntjp>> #DAE8FC
	ParticipantBorderColor<<Producer>> #82B366
	ParticipantBackgroundColor<<Producer>> #D5E8D4
	
	StereotypeFontColor white
	StereotypeFontSize 0
	
}

participant "Tjänstekonsument" as A<<Consumer>>
participant "Virtuell tjänst (NTjP)" as tp<<Ntjp>>
participant "Tjänsteproducent - PU" as pu<<Producer>>


group Koppla bilaga
activate A
A -> tp: //GetPersonsForProfile//\n(reservidentitet)
activate tp
tp -> pu: //GetPersonsForProfile//\n(reservidentitet)
activate pu
pu -> tp: Svar med Personpost
deactivate pu
tp -> A: Svar med Personpost
deactivate tp

A -> tp: //UpdatePerson//\nmed ny "attachmentId"
activate tp
tp -> pu: //UpdatePerson//\nmed ny "attachmentId"
activate pu
pu -> pu: Interna kontroller att\nbilaga med ID finns osv.

 
pu -> tp: Svar enligt UpdatePerson
deactivate pu
tp -> A: Svar enligt UpdatePerson
deactivate tp
end

group Koppla ifrån bilaga
A -> tp: //GetPersonsForProfile//\n(reservidentitet)
activate tp
tp -> pu: //GetPersonsForProfile//\n(reservidentitet)
activate pu
pu -> tp: Svar med Personpost
deactivate pu
tp -> A: Svar med Personpost
deactivate tp
A -> tp: //UpdatePerson//\nmed "attachementId" borttagen
activate tp
tp -> pu: //UpdatePerson//\nmed "attachementId" borttagen
activate pu
pu -> pu: Koppla ifrån bilaga
pu -> tp: Svar enligt UpdatePerson
deactivate pu
tp -> A: Svar enligt UpdatePerson
deactivate tp
end

deactivate A

@enduml

Hämta bilaga

Bilagor erhålls som en referens-URL i svaret från PU-tjänstens. Dessa används sedan som GET anrop för att hämta filerna.

PlantUML Macro
@startuml

'skinparam handwritten true

skinparam sequence {
	ArrowColor #9C9C9C
	ActorBorderColor #9C9C9C
	LifeLineBorderColor #9C9C9C
	LifeLineBackgroundColor #F5F5F5
	
	ParticipantBorderColor<<Consumer>> #E3B549
	ParticipantBackgroundColor<<Consumer>> #FFE6CC
	ParticipantBorderColor<<Ntjp>> #6C8EBF
	ParticipantBackgroundColor<<Ntjp>> #DAE8FC
	ParticipantBorderColor<<Producer>> #82B366
	ParticipantBackgroundColor<<Producer>> #D5E8D4
	
	StereotypeFontColor white
	StereotypeFontSize 0
	
}

participant "Tjänstekonsument" as A<<Consumer>>
participant "Virtuell tjänst (NTjP)" as tp<<Ntjp>>
participant "Tjänsteproducent - PU" as pu<<Producer>>

activate A
A -> tp: //GetPersonsForProfile//\n(reservidentitet)
activate tp
tp -> pu: //GetPersonsForProfile//\n(reservidentitet)
activate pu
pu -> tp: Svar med Personpost\ninnehållande referenser till bilagor
deactivate pu
tp -> A: Svar med Personpost\ninnehållande referenser till bilagor
deactivate tp

A -> pu: GET (URL)
activate pu
pu -> pu: Interna kontroller
pu -> A: Svar\nEfterfrågad bilaga
deactivate pu

deactivate A
@enduml

URL

Beror på miljö, men exempelvis: https://api.pu.ineratest.org:443/purest/attachment/get/e870cddb-5842-4c72-a804-7d39fa4c5478

Parametrar

Bilagans referensID som en del av URL

Exempel

Via cURL

RequestResponse

curl -X GET \
https://api.pu.ineratest.org:443/purest/attachment/get/e870cddb-5842-4c72-a804-7d39fa4c5478

Statuskod: 200 OK
Content-Type: <aktuell MIME-type>
Content-Disposition: attachment; filename="<filnamn>"
Transfer-Encoding: chunked
Content: filen

Statuskod: 400 BAD_REQUEST
* Ogiltig context path
* HSA-id för konsument saknas
Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänstenStatuskod: 404 NOT FOUND
* Begärd referens (GUID) existerar inte
Statuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsätt fel

Ta bort bilaga

Flödet förutsätter att bilagan inte har kvar några kopplingar inom reservidentiteten. Dvs flöde för "koppla ifrån bilaga" måste genomföras då det är applicerbart.

PlantUML Macro@startuml 'skinparam handwritten true skinparam sequence { ArrowColor #9C9C9C ActorBorderColor #9C9C9C LifeLineBorderColor #9C9C9C LifeLineBackgroundColor #F5F5F5 ParticipantBorderColor<<Consumer>> #E3B549 ParticipantBackgroundColor<<Consumer>> #FFE6CC ParticipantBorderColor<<Ntjp>> #6C8EBF ParticipantBackgroundColor<<Ntjp>> #DAE8FC ParticipantBorderColor<<Producer>> #82B366 ParticipantBackgroundColor<<Producer>> #D5E8D4 StereotypeFontColor white StereotypeFontSize 0 } participant "Tjänstekonsument" as A<<Consumer>> participant "Virtuell tjänst (NTjP)" as tp<<Ntjp>> participant "Tjänsteproducent - PU" as pu<<Producer>> activate A A -> tp: //GetPersonsForProfile//\n(reservidentitet) activate tp tp -> pu: //GetPersonsForProfile//\n(reservidentitet) activate pu pu -> tp: Svar med Personpost deactivate pu tp -> A: Svar med Personpost deactivate tp A -> pu: DELETE\nmed id för bilaga och parametrar activate pu pu -> pu: Interna kontroller pu -> A: Svar\nmed resultat för begärd DELETE deactivate pu deactivate A @enduml

)

Struktur för filnamn (både ZIP och XML): <orderId>_<datum>_<löpnummer>.zip (samt .xml)
Exempel: 0622-TO17-09215997_20170622_1.zip

Statuskod: 400 BAD_REQUEST
* Ogiltig context path
* HSA-id för konsument saknas
* Certifikat för OrderId matchar inte certifikat som används vid hämtning av fil
* Filen har redan hämtats

Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänsten

Statuskod: 404 NOT FOUND
* Begärd referens (GUID) existerar inte

Statuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsätt fel


Bilagor för reservidentitet

En reservidentitet kan i PU-tjänsten ha 0..n bilagor. Dessa används för att styrka identiteten och kan vara exempelvis en kopia på ett pass. Bilagan kan laddas upp till reservidentiteten och senare kopplas till en specifik uppgift om styrkande av identitet. All operationer gällande bilagor görs med fördel i det av PU-tjänsten tillhandahålla GUI't, men kan vid behov hanteras av integrerande tjänster. För hantering av bilagor via GUI hänvisas till Användarhanboken för PU. Nedan beskrivs de flöden som appliceras vid integration av konsument.

Enbart exempel för REST-tjänster redovisas i följande kapitel. För information om användandet av RIV-tjänsterna hänvisas till TKB.

Ladda upp bilaga

Uppladdning av bilaga sker genom PUT och föregås av en hämtning av personpost för aktuell reservidentitet. Detta för att säkerställa att identiteten finns.

Image Added

URL

Beror på miljö, men exempelvis: https://api.pu.ineratest.org:443/purest/attachment/put

Parametrar

NamnBeskrivning
actorRootroot (OID) för aktör
actorExtensionvärde för aktör
actorProfessionalRootroot (OID) för aktörens organisation/vårdgivare
actorProfessionalExtensionvärde för aktörens organisation/vårdgivare
patientRootroot (OID) för patientidentitet
patientExtensionvärde patientidentitet
filebilagan

Exempel

Via cURL

RequestResponse

curl -X PUT \
https://api.pu.ineratest.org:443/purest/attachment/put \
-H 'content-type: multipart/form-data; \
-F actorRoot=HSAID \
-F actorExtension=SE123456789 \
-F actorProfessionalRoot=HSAID \
-F actorProfessionalExtension=SE987654321 \
-F patientRoot=1.2.752.74.9.1 \
-F patientExtension=00002040AA11 \
-F file=@bilagan.jpg

Statuskod: 200 OK
Content-Type: application/json; charset=ISO-8859-1
Transfer-Encoding: chunked
Content:

{
"id": "36a7068d-172b-4fee-bed5-13ecbdfa7ff2",
"mediaType": "image/jpeg",
"value": null,
"reference": "https://api.pu.ineratest.org:443/purest/attachment/get/36a7068d-172b-4fee-bed5-13ecbdfa7ff2"
}


Statuskod: 400 BAD_REQUEST
* Ogiltig context path
* HSA-id för konsument saknas
* Ogiltig patientidentitet / parametrar


Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänsten


Statuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsätt fel


Koppla / Koppla ifrån bilaga

Dessa operationer är rena RIV-tjänster och beskrivs i TKB.

Image Added

Hämta bilaga

Bilagor erhålls som en referens-URL i svaret från PU-tjänstens. Dessa används sedan som GET anrop för att hämta filerna.

Image Added

URL

Beror på miljö, men exempelvis: https://api.pu.ineratest.org:443/purest/attachment/get/e870cddb-5842-4c72-a804-7d39fa4c5478

Parametrar

Bilagans referensID som en del av URL

Exempel

Via cURL

RequestResponse

curl -X GET \
https://api.pu.ineratest.org:443/purest/attachment/get/e870cddb-5842-4c72-a804-7d39fa4c5478

Statuskod: 200 OK
Content-Type: <aktuell MIME-type>
Content-Disposition: attachment; filename="<filnamn>"
Transfer-Encoding: chunked
Content: filen


Statuskod: 400 BAD_REQUEST
* Ogiltig context path
* HSA-id för konsument saknas

Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänsten

Statuskod: 404 NOT FOUND
* Begärd referens (GUID) existerar inte

Statuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsätt fel


Ta bort bilaga

Flödet förutsätter att bilagan inte har kvar några kopplingar inom reservidentiteten. Dvs flöde för "koppla ifrån bilaga" måste genomföras då det är applicerbart.

Image Added

URL

Beror på miljö, men exempelvis: https://api.pu.ineratest.org:443/purest/attachment/delete

Parametrar

NamnBeskrivning
actorRootroot (OID) för aktör
actorExtensionvärde för aktör
actorProfessionalRootroot (OID) för aktörens organisation/vårsgivare
actorProfessionalExtensionvärde för aktörens organisation/vårsgivare
patientRootroot (OID) för patientidentitet
patientExtensionvärde patientidentitet
referenceIdbilagans id


Exempel

Via cURL.

RequestResponse

curl -X DELETE \
https://api.pu.ineratest.org:443/purest/attachment/delete \
-H 'content-type: multipart/form-data; \
-F actorRoot=HSAID \
-F actorExtension=SE123456789 \
-F actorProfessionalRoot=HSAID \
-F actorProfessionalExtension=SE987654321 \
-F patientRoot=1.2.752.74.9.1 \
-F patientExtension=00002040AA11 \
-F referenceId=e870cddb-5842-4c72-a804-7d39fa4c5478

Statuskod: 200 OK
Content-Type: text/plain; charset=iso-8859-1
Transfer-Encoding: chunked
Content:

File with id: e870cddb-5842-4c72-a804-7d39fa4c5478 was successfully deleted.


Statuskod: 400 BAD_REQUEST
* Ogiltig context path
* HSA-id för konsument saknas
* Ogiltig patientidentitet / parametrar

Statuskod: 401 UNAUTHORIZED
* Konsumenten saknar behörighet till tjänsten

Statuskod: 404 NOT FOUND
* Begärd referens (GUID) existerar inte

Statuskod: 500 INTERNAL SERVER ERROR
* Internt oförutsett fel


...