Page History
| Table of Contents |
|---|
Introduktion
Formål
Dette dokument er en vejledning til anvendelse af den Dokument Registrerings- og Opdateringsservice (DROS). På baggrund af dokumentet er det muligt at lave en teknisk implementation af de brugerhistorier der er beskrevet i DROS - Brugerhistorier.
Formålet med dette dokument er at vejlede udviklere, der skal udvikle eller vedligeholde systemer, som anvender DROS snitflader.
Læsevejledning
Dette dokument er rettet mod udviklere, der skal udvikle eller teste services, der har grænseflader mod DROS.
Læseren forudsættes at være bekendt med de involverede teknologier, som f.eks. SOAP og DGWS. Derudover forudsættes, at læseren er bekendt med IHE XDS (herunder ITI-XX services).
Referencer
| Term | Beskrivelse | Evt reference |
|---|---|---|
| DGWS | Den Gode Webservice | |
| IHE XDS | Cross Enterprise Document Sharing (IHE) | Cross-Enterprise Document Sharing |
Introduktion til DROS
DROS er en service på NSP, der udstiller snitflader til registering og opdatering af dokumenter og metadata i den nationale XDS infrastruktur.
De enkelte brugerhistorier er beskrevet i dokumentet DROS - Brugerhistorier og giver et overblik over DROS set fra anvendersystemerne.
I dette dokument er der en oversigt over snitfladebeskrivelser for DROS.
Efterfølgende gennemgås de brugerhistorier, der er beskrevet i DROS - Brugerhistorier og der gives en oversigt over, hvordan de enkelte brugerhistorier kan realiseres: Dvs. hvilke snitflader i DROS er i spil samt eksempler på requests og responses.
Snitfladebeskrivelser og endpoints
DROS udstiller en række services til registrering og opdatering af dokumenter og disses metadata. DROS snitfladerne tager udgangspunkt i de standardsnitflader, der er beskrevet som en del af IHE XDS.
Hver af DROS services udstiller 2 WSDL filer.
- En standard ITI WSDL: Denne WSDL beskriver den standardiserede snitflade som er defineret som en del af IHE XDS stanadarden
- En DGWS WSDL: Denne WSDL er tilpasset således, at kravene i forhold til DGWS fremgår af WSDL filen
| Servicenavn | Service URL | Standard WSDL | DGWS WSDL | ||
|---|---|---|---|---|---|
| ITI-41: Provide And Registre Documentset | http://<NSP miljø>/dros/iti41 | http://<NSP miljø>/dros/iti41?wsdl | http://<NSP miljø>/dros/dgws-wsdl/iti41.wsdl | ||
| ITI-42: Register Document Set | http://<NSP miljø>/dros/iti42 | http://<NSP miljø>/dros/iti42?wsdl | http://<NSP miljø>/dros/dgws-wsdl/iti42.wsdl | ||
ITI-42: Register Document Set (ingen DGWS
) | http://<NSP miljø>/dros/iti42noDgws | http://<NSP miljø>/dros/iti42noDgws?wsdl | N/A | ||
| ITI-57: Update Document Set | http://<NSP miljø>/dros/iti57 | http://<NSP miljø>/dros/iti57?wsdl | http://<NSP miljø>/dros/dgws-wsdl/iti57.wsdl | ||
| ITI-61: Register On-Demand Document Entry | http://<NSP miljø>/dros/iti61 | http://<NSP miljø>/dros/iti61?wsdl | http://<NSP miljø>/dros/dgws-wsdl/iti61.wsdl |
Aftale repository/registry via DCC
| ITI-snitflade | SOAPAction | Decoupling-url (test1) | ServiceIdentifier |
|---|---|---|---|
| ITI41 | urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/aftaler | /nspservices/aftaler |
| ITI42 | urn:ihe:iti:2007:RegisterDocumentSet-b | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/aftaler | /nspservices/aftaler |
| ITI57 | urn:ihe:iti:2010:UpdateDocumentSet | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/aftaler | /nspservices/aftaler |
| ITI61 | urn:ihe:iti:2010:RegisterOnDemandDocumentEntry | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/aftaler | /nspservices/aftaler |
...
Graviditetsmappe repository/registry via DCC
Håndterer dokumenttype PHAD (103140-0dokumenttyperne Vandrejournal, Svangerskabsjournal, Kliniske målinger (PSCR,PRF og CMR)
| ITI-snitflade | SOAPAction | Decoupling-url (test1) | ServiceIdentifier |
|---|---|---|---|
| ITI41 | urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/plindgm | /nspservices/plindgm |
| ITI42 | urn:ihe:iti:2007:RegisterDocumentSet-b | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/plindgm | /nspservices/plindgm |
| ITI57 | urn:ihe:iti:2010:UpdateDocumentSet | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/plindgm | /nspservices/plindgm |
| ITI61 | urn:ihe:iti:2010:RegisterOnDemandDocumentEntry | http://test1.ekstern-test.nspop.dk:8080/decoupling/nspservices/plindgm | /nspservices/plind |
Graviditetsmappe repository/registry via DCC
Håndterer dokumenttyperne Vandrejournal, Svangerskabsjournal, Kliniske målinger (PSCR,PRF og CMR)
...
urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b
...
urn:ihe:iti:2007:RegisterDocumentSet-b
...
urn:ihe:iti:2010:UpdateDocumentSet
...
urn:ihe:iti:2010:RegisterOnDemandDocumentEntry
...
| gm |
Understøttelse af udvikling for anvendere
Det er op til anvenderen/udvikleren selv at vælge platform og frameworks, der passer til resten af dennes løsning. Fra et udvikler perspektiv kan man enten vælge selv at generere stubkode udfra de standardiserede WSDL filer eller at anvende et tredjepartsprodukt. Her gives et forslag til, hvordan det kan gribes an med tredjepartsproduktet IPF Open eHealth Integration Platform, som forudsætter man arbejder på en java platform. Man kan med fordel inkludere biblioteket IPF Commons IHE XDS i sin kodebase. Her findes både stubbe og en masse anvendelige utilities. Andre platforme kan have tilsvarende værktøjer og muligheder.
Eksempelkoden stammer oprindeligt (er tilrettet for simplificering) fra DROS integrationstest og kan findes her: https://svn.nspop.dk/src/components/dros/trunk/
ITI snitfladerne kaldes som SOAP web services, og er i det såkaldte XML basererede "RIM format", der er specificeret af IHE XDS standarden. Open eHealth frameworket kan blandt andet mappe fra RIM formatet til en en "OpeneHealth core model", som er java klasser. Og gør det at udvikle ITI kald lettere at arbejde med.
Helt overordnet kan det at lave et ITI kald deles op i følgende trin
- Opret kald i OpeneHealth core model
- For iti41 kald indebærer det blandt andet opret/indlæs af dokument samt opret af metadata til documententry
- For iti42, 57 og 61 indebærer det oprettelse af metadata
- Udfør kald - det transformeres til RIM format på vej ud, og tilbage til core model ved returnering vha. openeHealth frameworket
- Aflæs kaldets svar og håndter eventuelle fejl returneret
Dette kan illustreres ved følgende tranformeringsdiagram, hvor man ser core modellen blive transformateret til RIM formatet, og efterfølgende et ITI kald udført. Resultatet af ITI kaldet kommer tilbage i RIM format, og transformeres til core modellen:
| Gliffy Diagram | ||||||||
|---|---|---|---|---|---|---|---|---|
|
Et eksempel på, hvordan forskellen mellem core model og RIM format kommer til udtryk, ses her for håndtering af confidentiality code og CPR nummer i forbindelse med oprettelse af et dokument.
Først OpeneHealth core model, den kode man skriver i sit program:
| Code Block | ||||
|---|---|---|---|---|
| ||||
documentEntry.getConfidentialityCodes().add(new Code("N", new LocalizedString("N"), "2.16.840.1.113883.5.25"));
AssigningAuthority patientIdAssigningAuthority = new AssigningAuthority("1.2.208.176.1.2");
Code patientCode = new Code("2512489996", new LocalizedString("CPR"), "1.2.208.176.1.2");
documentEntry.setPatientId(new Identifiable(patientCode, patientIdAssigningAuthority)); |
Og her tilsvarende RIM format, som openeHealth oversætter det til:
| Code Block | ||||
|---|---|---|---|---|
| ||||
<ns2:Classification classificationScheme="urn:uuid:f4f85eac-e6cb-4883-b524-f2705394840f" classifiedObject="urn:uuid:69d3b9f3-7919-40e0-8731-32fb339216c2" nodeRepresentation="N" |
Understøttelse af udvikling for anvendere
Det er op til anvenderen/udvikleren selv at vælge platform og frameworks, der passer til resten af dennes løsning. Fra et udvikler perspektiv kan man enten vælge selv at generere stubkode udfra de standardiserede WSDL filer eller at anvende et tredjepartsprodukt. Her gives et forslag til, hvordan det kan gribes an med tredjepartsproduktet IPF Open eHealth Integration Platform, som forudsætter man arbejder på en java platform. Man kan med fordel inkludere biblioteket IPF Commons IHE XDS i sin kodebase. Her findes både stubbe og en masse anvendelige utilities. Andre platforme kan have tilsvarende værktøjer og muligheder.
Eksempelkoden stammer oprindeligt (er tilrettet for simplificering) fra DROS integrationstest og kan findes her: https://svn.nspop.dk/src/components/dros/trunk/
ITI snitfladerne kaldes som SOAP web services, og er i det såkaldte XML basererede "RIM format", der er specificeret af IHE XDS standarden. Open eHealth frameworket kan blandt andet mappe fra RIM formatet til en en "OpeneHealth core model", som er java klasser. Og gør det at udvikle ITI kald lettere at arbejde med.
Helt overordnet kan det at lave et ITI kald deles op i følgende trin
- Opret kald i OpeneHealth core model
- For iti41 kald indebærer det blandt andet opret/indlæs af dokument samt opret af metadata til documententry
- For iti42, 57 og 61 indebærer det oprettelse af metadata
- Udfør kald - det transformeres til RIM format på vej ud, og tilbage til core model ved returnering vha. openeHealth frameworket
- Aflæs kaldets svar og håndter eventuelle fejl returneret
Dette kan illustreres ved følgende tranformeringsdiagram, hvor man ser core modellen blive transformateret til RIM formatet, og efterfølgende et ITI kald udført. Resultatet af ITI kaldet kommer tilbage i RIM format, og transformeres til core modellen:
| Gliffy Diagram | ||||||||
|---|---|---|---|---|---|---|---|---|
|
Et eksempel på, hvordan forskellen mellem core model og RIM format kommer til udtryk, ses her for håndtering af confidentiality code og CPR nummer i forbindelse med oprettelse af et dokument.
Først OpeneHealth core model, den kode man skriver i sit program:
| Code Block | ||||
|---|---|---|---|---|
| ||||
documentEntry.getConfidentialityCodes().add(new Code("N", new LocalizedString("N"), "2.16.840.1.113883.5.25"));
AssigningAuthority patientIdAssigningAuthority = new AssigningAuthority("1.2.208.176.1.2");
Code patientCode = new Code("2512489996", new LocalizedString("CPR"), "1.2.208.176.1.2");
documentEntry.setPatientId(new Identifiable(patientCode, patientIdAssigningAuthority)); |
Og her tilsvarende RIM format, som openeHealth oversætter det til:
| Code Block | ||||
|---|---|---|---|---|
| ||||
<ns2:Classification classificationScheme="urn:uuid:f4f85eac-e6cb-4883-b524-f2705394840f" classifiedObject="urn:uuid:69d3b9f3-7919-40e0-8731-32fb339216c2" nodeRepresentation="N" id="urn:uuid:9068bc2b-1717-4337-abfb-027f303b20c6">
<ns2:Slot name="codingScheme">
<ns2:ValueList>
<ns2:Value>2.16.840.1.113883.5.25</ns2:Value>
</ns2:ValueList>
</ns2:Slot>
<ns2:Name>
<ns2:LocalizedString xml:lang="en-US" charset="UTF-8" value="N"/>
</ns2:Name>
</ns2:Classification>
<ns2:ExternalIdentifier registryObject="urn:uuid:69d3b9f3-7919-40e0-8731-32fb339216c2" identificationScheme="urn:uuid:58a6f841-87b3-4a3e-92fd-a8ffeff98427" value="2512489996^^^&1.2.208.176.1.2&ISO" id="urn:uuid:6dc240d8-d871-4df1-b8c6-3414f1415022">
<ns2:Name>
<ns2:LocalizedString value="XDSDocumentEntry.patientId"/>
</ns2:Name>
</ns2:ExternalIdentifier> |
...
I afsnittene nedenfor, som omhandler understøttelse af bruger historierne "opret stable dokument", "ret stable dokument" og "slet dokument" er der vist pseudocode, som illustrerer, hvordan man kan implementere kaldene vha. ovennævnte metode. Afsnittene hænger sådan sammen, at for den givne brugerhistorie kan man se koden (OpeneHealth core model), som skaber kaldet, og hvilke request og response (rim format) det medfører. Som skrevet er der tale om pseudocode, for at illustrere principperne, og ikke fuldt implementeret logik, som kan kopieres, som det er.
Understøttelse af Brugerhistorier
Med udgangspunkt i brugerhistorierne i DROS - Brugerhistorier beskrives i det følgende, hvorledes de enkelte snitflader skal anvendes til at understøtte disse.
...
Fejl i autentificeringen (herunder whitelisting) rapporteres tilbage til brugeren som en SOAP Fault.
Understøttelse af brugerhistorie: Opret Stable Dokument
Til at oprette et stable dokument skal servicen ITI-41: Provide And Registre Documentset anvendes.
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
----------------------------
ID: 4
Response-Code: 200
Encoding: ISO-8859-1
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:bd72b204-e4ba-4cc8-86a6-9f1a1b18adfe"; start="<root.message@cxf.apache.org>"; start-info="text/xml"
Headers: {connection=[keep-alive], content-type=[multipart/related; type="application/xop+xml"; boundary="uuid:bd72b204-e4ba-4cc8-86a6-9f1a1b18adfe"; start="<root.message@cxf.apache.org>"; start-info="text/xml"], Date=[Mon, 21 Feb 2022 10:30:57 GMT], Server=[WildFly/8], transfer-encoding=[chunked], X-Powered-By=[Undertow/1]}
Payload: --uuid:bd72b204-e4ba-4cc8-86a6-9f1a1b18adfe
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
...soapheaders fjernet for overskuelighed ...
</soap:Header>
<soap:Body>
<ns3:RegistryResponse xmlns:ns6="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns:ns4="urn:ihe:iti:xds-b:2007" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"/>
</soap:Body>
</soap:Envelope>
--uuid:bd72b204-e4ba-4cc8-86a6-9f1a1b18adfe--
-------------------------------------- |
Understøttelse af brugerhistorie: Ret Stable Dokument
Til at uploade et nyt dokument, som en rettelse til et eksisterende dokument skal servicen ITI-41: Provide And Registre Documentset anvendes.
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
----------------------------
ID: 8
Response-Code: 200
Encoding: ISO-8859-1
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:72910188-7f13-44f9-8804-ea150846fa23"; start="<root.message@cxf.apache.org>"; start-info="text/xml"
Headers: {connection=[keep-alive], content-type=[multipart/related; type="application/xop+xml"; boundary="uuid:72910188-7f13-44f9-8804-ea150846fa23"; start="<root.message@cxf.apache.org>"; start-info="text/xml"], Date=[Wed, 24 Mar 2021 11:57:53 GMT], Server=[WildFly/8], transfer-encoding=[chunked], X-Powered-By=[Undertow/1]}
Payload: --uuid:72910188-7f13-44f9-8804-ea150846fa23
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns3:RegistryResponse xmlns:ns6="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns:ns4="urn:ihe:iti:xds-b:2007" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"/>
</soap:Body>
</soap:Envelope>
--uuid:72910188-7f13-44f9-8804-ea150846fa23--
-------------------------------------- |
Understøttelse af brugerhistorie: Opdater dokument metadata
Til at rette et dokument skal servicen ITI-57 Update Document Set anvendes. Man kan på NSP kun opdatere metadata for et stable dokument, og ikke et on-demand dokument.
Det er anvenderens opgave at specificere, hvilket dokument der skal opdateres ved at matche logcialId, uniqueId og objecttype (stable). Det fulde sæt af metadata skal sendes med i requestet og ikke kun, som ønskes ændret.
Helt overordnet vil et kald ITI-57 kunne laves med:
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
// Skaf documententry detaljer, som skal opdateres
DocumentEntry documentEntryToUpdate = getDocumentEntryToUpdate();
// Tildel ny entryuuid
documentEntryToUpdate.setEntryUuid(generateUUID());
// Opdater version
documentEntryToUpdate.setVersion(new Version("2"));
// Opdater det metadata som skal justeres. F.eks. practice setting
documentEntryToUpdate.setPracticeSettingCode(practiceSettingCode);
// Opret kald/ request
SubmitObjectsRequest submitObjectsRequest = createUpdateDocumentMetadataRequest(documentEntryToUpdate);
// Udfør kald
RegistryResponseType registryResponse = iti57PortType.documentRegistryUpdateDocumentSet(submitObjectsRequest);
// Aflæs kaldets svar
handleResponse(registryResponse); |
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
public Association createHasMemberAssociationWithPropagation(SubmissionSet submissionSet, DocumentEntry documentEntry, String oldVersion) {
Association association = createAssociation(submissionSet, documentEntry);
association.setPreviousVersion(oldVersion);
association.setAssociationPropagation(true);
return association;
}
public Association createAssociation(SubmissionSet submissionSet, DocumentEntry documentEntry) {
// Opret association mellem SubmissionSet og DocumentEntry
Association association = new Association();
association.setAssociationType(AssociationType.HAS_MEMBER);
association.setEntryUuid(generateUUID());
association.setSourceUuid(submissionSet.getEntryUuid());
association.setTargetUuid(documentEntry.getEntryUuid());
association.setAvailabilityStatus(AvailabilityStatus.APPROVED);
association.setLabel(AssociationLabel.ORIGINAL);
return association;
} |
I requestet nedenfor ses opdatering af metadata for et dokument.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
---------------------------
ID: 12
Address: https://drosurl/dros/iti57
Encoding: UTF-8
Http-Method: POST
Content-Type: application/soap+xml
Headers: {Accept=[*/*]}
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:medcom="http://www.medcom.dk/dgws/2006/04/dgws-1.0.xsd" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:sosi="http://www.sosi.dk/sosi/2006/04/sosi-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Envelope">
<soapenv:Header>
.... fjernet for overskueligehed...
</soapenv:Header>
<soapenv:Body>
<ns4:SubmitObjectsRequest xmlns:ns4="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns3="urn:ihe:iti:xds-b:2007" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0">
<RegistryObjectList>
<ExtrinsicObject id="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" lid="urn:uuid:8f5f66c8-321d-4fa4-b4af-890018e7719e" mimeType="text/xml" objectType="urn:uuid:7edca82f-054d-47f2-a032-9b2a5b5186c1" status="urn:oasis:names:tc:ebxml-regrep:StatusType:Approved">
<Slot name="creationTime">
<ValueList>
<Value>20240123105924</Value>
</ValueList>
</Slot>
<Slot name="languageCode">
<ValueList>
<Value>da-DK</Value>
</ValueList>
</Slot>
<Slot name="serviceStartTime">
<ValueList>
<Value>20240123105924</Value>
</ValueList>
</Slot>
<Slot name="serviceStopTime">
<ValueList>
<Value>20240123105924</Value>
</ValueList>
</Slot>
<Slot name="repositoryUniqueId">
<ValueList>
<Value>5135212154965747596.2217458485955375452.1706003967039</Value>
</ValueList>
</Slot>
<Slot name="sourcePatientId">
<ValueList>
<Value>ABCDE^^^&1.2.208.176.1.2&ISO</Value>
</ValueList>
</Slot>
<Slot name="sourcePatientInfo">
<ValueList>
<Value>PID-5|Berggren^Nancy^Ann</Value>
<Value>PID-7|19481225</Value>
<Value>PID-8|F</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="Dato og tidspunkt for møde mellem patient og sundhedsperson" xml:lang="en-US"/>
</Name>
<VersionInfo versionName="2"/>
<Classification classificationScheme="urn:uuid:93606bcf-9494-43ec-9b4e-a7748d1a838d" classifiedObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" id="urn:uuid:79698964-1396-4f08-a628-ecf428ba5c41" nodeRepresentation="">
<Slot name="authorInstitution">
<ValueList>
<Value>DROS Testafdeling^^^^^&1.2.208.176.1.1&ISO^^^^12345679999</Value>
</ValueList>
</Slot>
</Classification>
<Classification classificationScheme="urn:uuid:41a5887f-8865-4c09-adf7-e362475b143a" classifiedObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" id="urn:uuid:34424719-be1e-44de-9254-5a7bbc0839dd" nodeRepresentation="001">
<Slot name="codingScheme">
<ValueList>
<Value>1.2.208.184.100.9</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="Klinisk rapport" xml:lang="en-US"/>
</Name>
</Classification>
<Classification classificationScheme="urn:uuid:a09d5840-386c-46f2-b5ad-9c3699a4309d" classifiedObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" id="urn:uuid:a5a09b50-7dcd-4482-9af9-636cab0dfcd5" nodeRepresentation="urn:ad:dk:medcom:appointmentsummary:full">
<Slot name="codingScheme">
<ValueList>
<Value>1.2.208.184.100.10</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="DK Appointment Summary Document schema" xml:lang="en-US"/>
</Name>
</Classification>
<Classification classificationScheme="urn:uuid:f33fb8ac-18af-42cc-ae0e-ed0b0bdb91e1" classifiedObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" id="urn:uuid:d16b7aba-52cd-4e58-b9ea-e4df5f3b0a92" nodeRepresentation="22232009">
<Slot name="codingScheme">
<ValueList>
<Value>2.16.840.1.113883.6.96</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="hospital" xml:lang="en-US"/>
</Name>
</Classification>
<Classification classificationScheme="urn:uuid:cccf5598-8b07-4b77-a05e-ae952c785ead" classifiedObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" id="urn:uuid:fc652668-9956-4ee0-a8fe-845a9cf3aade" nodeRepresentation="394821009">
<Slot name="codingScheme">
<ValueList>
<Value>2.16.840.1.113883.6.96</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="arbejdsmedicin" xml:lang="en-US"/>
</Name>
</Classification>
<Classification classificationScheme="urn:uuid:f0306f51-975f-434e-a61c-c59651d33983" classifiedObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" id="urn:uuid:d712c782-4c93-45a0-9c1b-1e95bf90d90b" nodeRepresentation="39289-4">
<Slot name="codingScheme">
<ValueList>
<Value>2.16.840.1.113883.6.1</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="Follow-up (referred to) provider &or specialist, appointment date" xml:lang="en-US"/>
</Name>
</Classification>
<Classification classificationScheme="urn:uuid:f4f85eac-e6cb-4883-b524-f2705394840f" classifiedObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" id="urn:uuid:67fea015-d05e-4133-866f-d3b298b50999" nodeRepresentation="N">
<Slot name="codingScheme">
<ValueList>
<Value>2.16.840.1.113883.5.25</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="N" xml:lang="en-US"/>
</Name>
</Classification>
<ExternalIdentifier id="urn:uuid:a86b9d82-b2a2-4925-bed5-e117955d2712" identificationScheme="urn:uuid:58a6f841-87b3-4a3e-92fd-a8ffeff98427" registryObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" value="ABCDE^^^&1.2.208.176.1.2&ISO">
<Name>
<LocalizedString value="XDSDocumentEntry.patientId"/>
</Name>
</ExternalIdentifier>
<ExternalIdentifier id="urn:uuid:4f05d086-f63e-4575-9f19-bac250ee52a3" identificationScheme="urn:uuid:2e82c1f6-a085-4c72-9da3-8640a32e42ab" registryObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8" value="6264145156628305494.3484194301893954463.1706003964982">
<Name>
<LocalizedString value="XDSDocumentEntry.uniqueId"/>
</Name>
</ExternalIdentifier>
</ExtrinsicObject>
<RegistryPackage id="5044f4e8-3954-4c1f-a3f8-4f3f57136e41" lid="5044f4e8-3954-4c1f-a3f8-4f3f57136e41">
<Slot name="submissionTime">
<ValueList>
<Value>20240123095927</Value>
</ValueList>
</Slot>
<Classification classificationScheme="urn:uuid:aa543740-bdda-424e-8c96-df4873be8500" classifiedObject="5044f4e8-3954-4c1f-a3f8-4f3f57136e41" id="urn:uuid:e9431404-c820-4377-9a3c-9114a51b1849" nodeRepresentation="39289-4">
<Slot name="codingScheme">
<ValueList>
<Value>2.16.840.1.113883.6.1</Value>
</ValueList>
</Slot>
<Name>
<LocalizedString charset="UTF-8" value="Follow-up (referred to) provider &or specialist, appointment date" xml:lang="en-US"/>
</Name>
</Classification>
<ExternalIdentifier id="urn:uuid:0ef8a571-6a8f-467d-b3ce-5172fb87acfe" identificationScheme="urn:uuid:6b5aea1a-874d-4603-a4bc-96a0a7b38446" registryObject="5044f4e8-3954-4c1f-a3f8-4f3f57136e41" value="ABCDE^^^&1.2.208.176.1.2&ISO">
<Name>
<LocalizedString value="XDSSubmissionSet.patientId"/>
</Name>
</ExternalIdentifier>
<ExternalIdentifier id="urn:uuid:8b73ff55-1bfc-4797-8601-076976f5bb8f" identificationScheme="urn:uuid:96fdda7c-d067-4183-912e-bf5ee74998a8" registryObject="5044f4e8-3954-4c1f-a3f8-4f3f57136e41" value="20f04de2-d029-4490-a938-2f570e75f788">
<Name>
<LocalizedString value="XDSSubmissionSet.uniqueId"/>
</Name>
</ExternalIdentifier>
<ExternalIdentifier id="urn:uuid:072feba4-6503-4e52-8794-c544da7c09c3" identificationScheme="urn:uuid:554ac39e-e3fe-47fe-b233-965d2a147832" registryObject="5044f4e8-3954-4c1f-a3f8-4f3f57136e41" value="5135212154965747596.2217458485955375452.1706003967039">
<Name>
<LocalizedString value="XDSSubmissionSet.sourceId"/>
</Name>
</ExternalIdentifier>
</RegistryPackage>
<Classification classificationNode="urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd" classifiedObject="5044f4e8-3954-4c1f-a3f8-4f3f57136e41" id="urn:uuid:2e3d7f69-e472-4c09-9aee-60c8916f2175"/>
<Association associationType="urn:oasis:names:tc:ebxml-regrep:AssociationType:HasMember" id="057f82dc-2df2-4604-8452-dd82ca01e364" sourceObject="5044f4e8-3954-4c1f-a3f8-4f3f57136e41" status="urn:oasis:names:tc:ebxml-regrep:StatusType:Approved" targetObject="urn:uuid:cb18a01d-b5dc-4880-ae5a-09e2378f3ec8">
<Slot name="SubmissionSetStatus">
<ValueList>
<Value>Original</Value>
</ValueList>
</Slot>
<Slot name="PreviousVersion">
<ValueList>
<Value>1</Value>
</ValueList>
</Slot>
<Slot name="AssociationPropagation">
<ValueList>
<Value>yes</Value>
</ValueList>
</Slot>
</Association>
</RegistryObjectList>
</ns4:SubmitObjectsRequest>
</soapenv:Body>
</soapenv:Envelope>
-------------------------------------- |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
----------------------------
ID: 12
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {connection=[keep-alive], content-type=[text/xml;charset=UTF-8], Date=[Wed, 24 Mar 2021 12:16:48 GMT], Server=[WildFly/8], transfer-encoding=[chunked], X-Powered-By=[Undertow/1]}
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns3:RegistryResponse xmlns:ns6="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns:ns4="urn:ihe:iti:xds-b:2007" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"/>
</soap:Body>
</soap:Envelope>
--------------------------------------
|
Understøttelse af brugerhistorie: Slet Dokument
Til at slette et dokument skal servicen ITI-57: Update Document Set anvendes. Denne operation sletter ikke dokumentet fysisk, men vil registrere det med status 'deprecated' i det nationale XDS registry.
Deruodover er det anvenderens opgave at specificere, hvilket dokument der skal slettemarkeres (deprecates). Som det fremgår af nedenstående skal data fra den Document Entry, der ønskes slettemarkeret medsendes i requestet. Disse data angives i forbindelse med "Opret Stable Dokument" og har man dem derfra kan de anvendes. Alternativt kan der gennemføres en søgning mod Dokumentdelingsservicen for at finde disse data.
Helt overordnet vil et kald ITI-57 kunne laves med:
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
// Skaf documententry detaljer, som skal deprecates DocumentEntry documentEntryToDeprecate = getDocumentEntryToDeprecate(); // Opret kald/ request SubmitObjectsRequest submitObjectsRequest = createDeprecateRequest(documentEntryToDeprecate); // Udfør kald RegistryResponseType registryResponse = iti57PortType.documentRegistryUpdateDocumentSet(submitObjectsRequest); // Aflæs kaldets svar handleResponse(registryResponse); |
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
public Association createAssociateDeprecateStatus(SubmissionSet submissionSet, DocumentEntry documentEntryToDeprecate) {
Association association = new Association();
association.setAssociationType(AssociationType.UPDATE_AVAILABILITY_STATUS);
association.setSourceUuid(submissionSet.getLogicalUuid());
association.setTargetUuid(documentEntryToDeprecate.getEntryUuid());
association.setOriginalStatus(documentEntryToDeprecate.getAvailabilityStatus());
association.setNewStatus(AvailabilityStatus.DEPRECATED);
return association;
} |
I requestet nedenfor ses både ny og gammel status under <Association> ligsom også documententry fremgår her med attributten targetObject.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
---------------------------
ID: 12
Address: https://drosurl/dros/iti57
Encoding: UTF-8
Http-Method: POST
Content-Type: application/soap+xml
Headers: {Accept=[*/*]}
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
.... fjernet for overskueligehed...
</soap:Header>
<soap:Body>
<ns5:SubmitObjectsRequest xmlns:ns6="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns:ns4="urn:ihe:iti:xds-b:2007" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0">
<ns2:RegistryObjectList>
<ns2:RegistryPackage lid="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4" id="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4">
<ns2:Slot name="submissionTime">
<ns2:ValueList>
<ns2:Value>20210324121634</ns2:Value>
</ns2:ValueList>
</ns2:Slot>
<ns2:Classification classificationScheme="urn:uuid:aa543740-bdda-424e-8c96-df4873be8500" classifiedObject="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4" nodeRepresentation="39289-4" id="urn:uuid:4408bca9-abcc-415e-b00d-a8b19f067b09">
<ns2:Slot name="codingScheme">
<ns2:ValueList>
<ns2:Value>2.16.840.1.113883.6.1</ns2:Value>
</ns2:ValueList>
</ns2:Slot>
<ns2:Name> <ns2:LocalizedString xml:lang="en-US" charset="UTF-8" value="Follow-up (referred to) provider &or specialist, appointment date"/>
</ns2:Name>
</ns2:Classification>
<ns2:ExternalIdentifier registryObject="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4" identificationScheme="urn:uuid:6b5aea1a-874d-4603-a4bc-96a0a7b38446" value="2512489996^^^&1.2.208.176.1.2&ISO" id="urn:uuid:324aed91-6339-4452-8678-2aa81a3e16d9">
<ns2:Name>
<ns2:LocalizedString value="XDSSubmissionSet.patientId"/>
</ns2:Name>
</ns2:ExternalIdentifier>
<ns2:ExternalIdentifier registryObject="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4" identificationScheme="urn:uuid:96fdda7c-d067-4183-912e-bf5ee74998a8" value="urn:uuid:6fe0081c-1efb-4015-8193-2ba551e3b568" id="urn:uuid:cd6acb6f-258c-4250-b46f-1eff52490f28">
<ns2:Name>
<ns2:LocalizedString value="XDSSubmissionSet.uniqueId"/>
</ns2:Name>
</ns2:ExternalIdentifier>
<ns2:ExternalIdentifier registryObject="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4" identificationScheme="urn:uuid:554ac39e-e3fe-47fe-b233-965d2a147832" value="8085010197220234434.5099172141722846448.1616588194038" id="urn:uuid:6b60e4db-a67c-4ae3-9738-c2b1587a9e7a">
<ns2:Name>
<ns2:LocalizedString value="XDSSubmissionSet.sourceId"/>
</ns2:Name>
</ns2:ExternalIdentifier>
</ns2:RegistryPackage>
<ns2:Classification classifiedObject="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4" classificationNode="urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd" id="urn:uuid:89811458-f16e-46b1-9d2e-bd8944766f86"/>
<ns2:Association associationType="urn:ihe:iti:2010:AssociationType:UpdateAvailabilityStatus" sourceObject="d7ebbb2b-b153-45ac-93fa-f24393c6cbe4" targetObject="urn:uuid:6fe0081c-1efb-4015-8193-2ba551e3b568">
<ns2:Slot name="OriginalStatus">
<ns2:ValueList>
<ns2:Value>urn:oasis:names:tc:ebxml-regrep:StatusType:Approved</ns2:Value>
</ns2:ValueList>
</ns2:Slot>
<ns2:Slot name="NewStatus">
<ns2:ValueList>
<ns2:Value>urn:oasis:names:tc:ebxml-regrep:StatusType:Deprecated</ns2:Value>
</ns2:ValueList>
</ns2:Slot>
</ns2:Association>
</ns2:RegistryObjectList>
</ns5:SubmitObjectsRequest>
</soap:Body>
</soap:Envelope>
-------------------------------------- |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
----------------------------
ID: 12
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {connection=[keep-alive], content-type=[text/xml;charset=UTF-8], Date=[Wed, 24 Mar 2021 12:16:48 GMT], Server=[WildFly/8], transfer-encoding=[chunked], X-Powered-By=[Undertow/1]}
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns3:RegistryResponse xmlns:ns6="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns:ns4="urn:ihe:iti:xds-b:2007" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"/>
</soap:Body>
</soap:Envelope>
--------------------------------------
|
Understøttelse af brugerhistorie: Opret On-demand Entry
Til at oprette en on-demand entry i det nationale XDS registry skal servicen ITI-61: Register On-Demand Document Entry anvendes.
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
----------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {connection=[keep-alive], content-type=[text/xml;charset=UTF-8], Date=[Wed, 24 Mar 2021 12:26:05 GMT], Server=[WildFly/8], transfer-encoding=[chunked], X-Powered-By=[Undertow/1]}
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns3:RegistryResponse xmlns:ns6="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns:ns4="urn:ihe:iti:xds-b:2007" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"/>
</soap:Body>
</soap:Envelope>
-------------------------------------- |
Understøttelse af brugerhistorie: Register Document Set (med og uden DGWS)
Til at oprette document entries i det nationale XDS registry skal servicen ITI-42: Register Document Set anvendes. Selve requestene er ens uanset, om DGWS benyttes eller ej. Request nedenfor kan derfor anvendes som inspiration i begge tilfælde.
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
----------------------------
ID: 5
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {connection=[keep-alive], content-type=[text/xml;charset=UTF-8], Date=[Wed, 24 Mar 2021 12:26:49 GMT], Server=[WildFly/8], transfer-encoding=[chunked], X-Powered-By=[Undertow/1]}
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns3:RegistryResponse xmlns:ns6="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:ns5="urn:oasis:names:tc:ebxml-regrep:xsd:lcm:3.0" xmlns:ns4="urn:ihe:iti:xds-b:2007" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success"/>
</soap:Body>
</soap:Envelope>
-------------------------------------- |
Validering
Der er forskellige typer af validering i DROS. Ens for dem er, at de kan have forskellige "niveaer". Man kan får "fejl" tilbage som advarsler/warnings eller fejl/errors. Får man advarsler tilbage, vil ens request være udført. Får man fejl tilbage vil requestet være afvist og dermed ikke udført.
Man kan læse om de forskelle typer af validering i Design og arkitektur dokumentet.
Udvidet valideringsbibliotek
DROS gør brug af NSP validerings bibliotek til at validere de indkomne request. Reglerne i dette bibliotek kan læses i XDS validation - guide til anvendere
DROS har en udvidet validering som benytter samme framework, som validerings biblioteket. Reglerne i denne udvidelse beskrives i det følgende. Princippene der anvendes er beskrevet i dokumentationen for NSP validerings biblioteket.
Feltvalideringer
Hver validering beskæftiger sig med et specifikt felt i et eller flere ITI kald
Afkrydningen i tabellens 4 sidste søjler indikerer, hvilke valideringer, den enkelte validator er inkludret i.
Søjlen "felt" kan anvendes til sortering, hvis man ønsker at se valideringen for et specifik felt på tværs af entitet.
| Klasse | Felt | Validering | ITI 41 | ITI 42 | ITI 61 | ITI 57 |
|---|---|---|---|---|---|---|
DocumentEntryPatientIdExistsValidator | PatientId |
| x | x | x | x |
DocumentEntryAuthorInstitutionSorEnricher | AuthorInstitution |
| x | x | x | x |
DocumentEntryAuthorInstitutionSorTypeValidator | AuthorInstitution |
| x | x | x | x |