Meldingsutveksling
Endepunktene for meldingsutveksling:
Metode | Endepunkt | Funksjon |
---|---|---|
POST | /Messages | Send en fagmelding |
GET | /Messages | Hent meldinger NB! Ikke implementert enda |
GET | /Messages/Unread | Hent uleste meldinger |
GET | /Messages/{id} | Hent melding NB! Ikke implementert enda |
GET | /Messages/{id}/BusinessDocument | Hent fagmelding |
PUT | /Messages/{id}/Read/{herId} | Marker fagmelding som lest |
GET | /Messages/{id}/Status | Hent status på fagmelding |
POST | /Messages/{id}/Apprec/{appRecSenderHerId} | Forenklet sending av Apprec |
Når man bruker APIet til meldingsutveksling samarbeider APIet med meldingstjeneren for å ivareta denne funksjonen. Meldingstjeneren vet om mottaker er en EDI-bruker eller en annen API-bruker og kan dermed kryptere og signere for sending over EDI, eller tilgjengeliggjøre meldingen for en annen API-bruker.
Meldings-APIet er sikret med HelseID, og man kan derfor ikke sende meldinger hvor avsender ikke stemmer med autentisert klient, og man kan heller ikke laste ned meldinger som er adressert til en annen mottaker enn den som er knyttet til påloggingen. Se mer informasjon i kapittel om HelseID.
Man kan se for seg tre scenarier i en utveksling mellom API-brukere og EDI-brukere. API til EDI, EDI til API og API til API. EDI til EDI håndteres av dagens EDI-løsning og er ikke relevant for API eller Meldingstjener.
API til EDI
Figur 2 illustrerer en API-bruker A1 som sender en fagmelding til EDI-bruker E1. Meldingstjeneren står for EbXml-kommunikasjonen med E1, og tilgjengeliggjør en Applikasjonskvittering til A1.
Figur 2 API til EDI
- API-bruker bruker POST /Messages for å sende en fagmelding. Meldingstjeneren, som ved hjelp av Adresseregisteret vet at mottakeren er en EDI-bruker, starter en normal EDI meldingsutveksling med E1 med transportkvitteringer og Applikasjonskvittering.
- Fagmelding overleveres til E1 via EDI
- Meldingstjeneren mottar en transportkvittering og oppdaterer status
på fagmeldingen
- A1 kan om ønskelig spørre etter status på en melding ved å bruke GET /Messages/{id}/Status
- Applikasjonskvittering mottas og persisteres
- Transportkvittering (leveres umiddelbart)
- A1 mottar applikasjonskvittering.
- Merk at dette ikke er en push, men at API-brukeren først bruker GET /Messages/Unread for å få en liste over uleste meldinger etterfulgt av GET /Messages/{id}/BusinessDocument for å hente ned fagmeldingen. Denne bør igjen følges opp med en PUT /Messages/{id}/Read når meldingen er persistert hos A1 slik at den ikke hentes på nytt ved neste kall til GET /Messages/Unread
- API-brukeren kan velge å bare motta fagmeldinger med GET /Messages/Unread endepunktet. Status på en fagmelding (GET /Messages/{id}/Status) TEST inneholder også status på applikasjonskvitteringen og dette kan brukes som en enklere implementasjon for API-brukere som ikke ønsker å forholde seg til en XML i denne sammenhengen.
EDI til API
Figur 3 illustrerer en EDI-bruker E1 som sender en fagmelding til API-bruker A1.
Figur 3 EDI til API
- E1 sender en fagmelding til A1. Denne mottas av Meldingstjeneren ettersom A1 er endret til denne adressen i Adresseregisteret
- Meldingstjeneren svarer med transportkvittering så snart meldingen er persistert
- A1 mottar fagmeldingen ved å bruke GET /Messages/Unread for å få tilbake Id på den uleste meldingen og deretter GET /Messages/{id}/BusinessDocument for å hente fagmeldingen
- A1 leverer en applikasjonskvittering med POST /Messages, alternativt med POST /Messages/{id}/Apprec
- Meldingstjeneren videreformidler applikasjonskvitteringen
- Meldingstjeneren mottar transportkvittering og oppdaterer status på applikasjonskvitteringen
API til API
Figur 4 illustrerer en API-bruker A1 som sender en fagmelding til API-bruker A2.
Figur 4 Api til Api
- A1 sender en fagmelding med POST /Messages til A2 som persisteres i meldingstjeneren
- A2 henter ID til den uleste medlingen med GET /Messages/Unread og deretter fagmeldingen med GET /Messages/{id}/BusinessDocument
- A2 sender en applikasjonskvittering med POST /Messages til A1, alternativt med POST /Messages/{id}/Apprec
- A1 henter applikasjonskvitteringen enten
- som en XML med GET /Messages/Unread og GET /Messages/{id}/BusinessDocument
- som en Status-json med GET /Messages/{id}/Status
Sende til flere mottakere (kopimottakere)
I tillegg til å sende en fagmelding til en hovedmottaker kan man samtidig sende fagmeldingen til flere mottakere (kopimottakere), ved å legge disse til i fagmeldingen. Mottakerne kan være både API-brukere og EDI-brukere. Meldingsflyten for hver mottaker vil da være som beskrevet ovenfor, avhengig av om mottakeren er en API-bruker eller en EDI-bruker.
Kombinasjon av Objects og Messages APIene
Man kan bruke referansen som returneres fra Objects-APIet (DEFT) i fagmeldinger som har støtte for dette. Man bruker da Filereference-elementet istedenfor en Base64Container. Under visesvedlegg av begge typer, ett som filreferanse og ett som base64.
<RefDoc>
<IssueDate V="2023-10-03T08:32:13.4909691Z" />
<MsgType V="A" DN="Vedlegg" />
<MimeType>image/png</MimeType>
<Description>Capture.PNG</Description>
<FileReference>https://api.deft.prod.nhn.no/Objects/dda2fbfc-271f-4794-8ae3-191c6f75232a_trust-me-im-a-dolphin.exe.</FileReference>
</RefDoc>
<RefDoc>
<IssueDate V="2023-10-03T08:32:13.4884712Z" />
<MsgType V="A" DN="Vedlegg" />
<MimeType>image/png</MimeType>
<Description>Bounce.png</Description>
<Content>
<Base64Container
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xmlns="http://www.kith.no/xmlstds/base64container">iVBORw0KGgoAA\....uQmCC</Base64Container>
</Content>
</RefDoc>
Api-detaljer
NB! Detaljert beskrivelse av datatyper, request- og response-objekter, HTTP-statuskoder o.l. finnes i Swagger-UIet.
[POST/Messages]
Endepunktet forventer en json-body med innhold som under.
Selve fagmeldingen sendes i json-feltet BusinessDocument
. Det forventes en string som er base64-encodet XML.
Det påkreves at encodingen til XML-en er UTF-8, og at dette deklareres i første linje. Eksempel: <?xml version="1.0" encoding="UTF-8"?>
.
R = Required field
Example value | Known none-MsgHead messages | MsgHead based messages | Other messages | Description | |
---|---|---|---|---|---|
Henvisning 1.0/1.1 Epikrise 1.1/1.2 Rekvisisjon 1.5/1.6 Svarrapport 1.3/1.4 Apprec 1.0/1.1 |
Henvisning 2.0 Dialogmelding 1.0/1.1 Henvisning 2.0 PLO 1.6 Behandlerkrav Eresept and many more |
not supported | |||
BusinessDocument | "PD94bWw+" | R |
R |
Must be of type and encoding as specified in ContentType and ContentTransferEncoding. Base64Encode(ToString(XmlDocument)) | |
Properties | |||||
ContentType | "application/xml" | R |
Payload should always be a Xml document as string | ||
ContentTransferEncoding | "base64" | R |
Payload should always be base64 encoded | ||
System | |||||
ApplicationName | "EPJ Front" | R |
R |
Name of application or EPJ. HIS 1210:2018 | |
ApplicationVersion | "18.0.8" | R |
R |
Version of application or EPJ. HIS 1210:2018 | |
MiddlewareName | Some system use a middleware between application and messagehandler. Name can be provided here. HIS 1210:2018 | ||||
MiddlewareVersion | Some system use a middleware between application and messagehandler. Version can be provided here. HIS 1210:2018 | ||||
EmbxmlOverrides | Only special cases |
Only special cases |
Ebxml overrides should only be used if business process have special needs for the EBXML created when sending over EDI/SMTP. | ||
CpaId | If not set, value according to HIS 1037:2011 will be generated | ||||
ConversationId | If not set, value according to HIS 1037:2011 will be generated | ||||
Service | If not set, value according to HIS 1209:2018 will be generated | ||||
ServiceType | If not set, value according to HIS 1209:2018 will be generated | ||||
Action | If not set, value will be resolved from BusinessDocument | ||||
SenderHerId | If not set, value will be resolved from sender Service/Person HerId in BusinessDocument. HIS 1153:2017 | ||||
SenderRole | If not set, value according to HIS 1209:2018 will be generated | ||||
ReciverHerId | If not set, value will be resolved from receiver Service/Person HerId in BusinessDocument. HIS 1153:2017 | ||||
ReceiverRole | If not set, value according to HIS 1209:2018 will be generated |
Respons: Endepunktet returnerer en 201 med en referanse til den lagrede ressursen, som senere kan brukes for å hente status på meldingen.
[GET /Messages]
NB! Ikke implementert ennå
Endepunktet krever et query-objekt med ulike felter for å hente ut meldinger, samt med støtte for paginering og sortering.
Respons: Endepunktet returnerer en liste med objekter som inneholder metadata om en fagmelding.
[GET /Messages/Unread]
Endepunktet krever et query-object som definerer hvilke HerId'er meldingen(e) skal være sendt til
Respons: Endepunktet returnerer en liste med objekter som inneholder ID-er til uleste meldinger per HER-ID
[GET /Messages/{id}]
NB! Ikke implementert ennå
Endepunktet krever en referanse (Id) til en melding. Denne hentes ut ved et kall til f.eks GET /Messages/Unread
Respons: Endepunktet returnerer metadata om en fagmelding.
[GET /Messages/{id}]/BusinessDocument
Endepunktet krever en referanse (Id) til en melding. Denne hentes ut ved et kall til f.eks GET /Messages/Unread
Respons: Endepunktet returnerer fagmeldingen i XML-format.
[GET /Messages/{id}/Status]
Endepunktet krever en id-referanse (guid).
Respons: Endepunktet returnerer en liste av objekter som inneholder status på responser fra hver mottaker/kopimottaker av fagmeldingen.
//todo: Denne er under utbedring, ettersom vi har inkludert Acknowledge, men ikke MessageError. PBI er opprettet.
[PUT /Messages/{id}/Read/{herId}]
Endepunktet krever en id-referanse (guid) og herId (int).
Respons: 204 No Content
[POST /Messages/{id}/Apprec{appRecSenderHerId}]
Endepunktet krever en id-referanse (guid) og herId (int). I tillegg kreves en json-body med ønsket Apprec-resultat.
Respons: Endepunktet returnerer en 201 med en referanse til den lagrede ressursen, som senere kan brukes for å hente status på meldingen.