Page History
TODO: titel?
links til gavn under skrivning:
Teknisk implementeringsvejledning Aftaleoversigt
https://github.com/KvalitetsIT/kih-anvendelse
https://github.com/KvalitetsIT/aftaledeling
NXRG - Design- og arkitekturbeskrivelse
Indledning
Formål
Dokumentdeling gør det muligt for aktører sundhedsvæsnet at dele relevante data om borgere, og dermed skabe et overblik over den enkelte borgers situation for de aktører som har brug for dette. Det kan være dem, som planlægger og gennemfører behandlingsforløb eller for borgerens selv og omsorgspersoner. Samtidig skal det være muligt for borgeren at bestemme, hvem han/hun vil dele disse data med gennem samtykke samt se, hvem der har læst data via MinLog. Infrastrukturen der muliggør deling af dokumenter på tværs af sundhedsaktører er baseret på IHE XDS standarden
...
- "Stable document" som bliver skabt og gemt en gang for alle
- "On-demand" som først skabes på det tidspunkt det faktisk efterspørges
...
Hvad er dokumentdeling
XDS står for Cross-Enterprise Document Sharing og er en international standard udarbejdet af Integrating the Healthcare Enterprise (IHE) for udveksling af kliniske dokumenter. En XDS infrastruktur består (mindst) af følgende to komponenter:
...
Minlog, behandlingsrelationer, minSamtykke minSpærring (filter) og værdispring
Hvordan kommer man igang
...
- For opret af dokumenter: source er submissionSet entryUuid og target er documentEntry's entryUuid
- For ret, som for opret. Men den ekstra "replace" association er source nye dokuments entryUuid og target det gamle dokument
- For slet (deprecate): source er submissionSet entryUuid og target er entryUuid for det dokument som skal slettes
...
På NSP er der 3 forskellige måder at lave en fremsøgning på:
...
En måde at fremsøge meget store datamængder på, kan derfor laves med først en fremsøgning retur type ObjektRef og efterfølgende anvende disse værdier til at lave en GetDocuments med retur typen LeafClass.
TODO: to versoiner af søgnings beskrivelse: en hvor søgning 2 udelades, og objektref resultat
problem: dds kan ikke filterer i forhold til spæringer og er det ok?
Eksempler på kald
Det følgende er eksempelkode til at illustrere et ITI-41 kald til oprettelse af et dokument
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
// Nyt kald/request ProvideAndRegisterDocumentSet provideAndRegisterDocumentSet = new ProvideAndRegisterDocumentSet(); // Opret documentEntry DocumentEntry documentEntry = new DocumentEntry(); AssigningAuthority patientIdAssigningAuthority = new AssigningAuthority("1.2.208.176.1.2"); // OID for CPR registret Identifiable patientIdentifiable = patientIdentifiable = new Identifiable("2512489996", patientIdAssigningAuthority); documentEntry.setPatientId(patientIdentifiable); ... mere metadata, se CDA profilen // Tilføj dokumentet til request provideAndRegisterDocumentSet.getDocuments().add(new Document(documentEntry, new DataHandler(new ByteArrayDataSource(documentPayload.getBytes(), documentEntry.getMimeType())))); // Opret SubmissionSet provideAndRegisterDocumentSet.setSubmissionSet(createSubmissionSet(documentEntry.getPatientId(), contentTypeCode, submissionTime)); // Opret association mellem SubmissionSet og DocumentEntry provideAndRegisterDocumentSet.getAssociations().add(createAssociation(submissionSet, documentEntry)); // Transformer request - dette laver core model om til RIM format ProvideAndRegisterDocumentSetTransformer registerDocumentSetTransformer = new ProvideAndRegisterDocumentSetTransformer(ebXMLFactory); EbXMLProvideAndRegisterDocumentSetRequest30 ebxmlRequest = (EbXMLProvideAndRegisterDocumentSetRequest30) registerDocumentSetTransformer.toEbXML(provideAndRegisterDocumentSet); ProvideAndRegisterDocumentSetRequestType provideAndRegisterDocumentSetRequestType = ebxmlRequest.getInternal(); // Udfør kald RegistryResponseType registryResponse = iti41PortType.documentRepositoryProvideAndRegisterDocumentSetB(provideAndRegisterDocumentSetRequestType); // Transformer response - dette laver RIM format til core model ResponseTransformer responseTransformer = new ResponseTransformer(ebXMLFactory); Response response = responseTransformer.fromEbXML(new EbXMLRegistryResponse30(registryResponse)); // Aflæs kaldets svar if (response.getStatus().equals(Status.SUCCESS)) { // Kaldet gik godt } else if (response.getStatus().equals(Status.PARTIAL_SUCCESS) || response.getStatus().equals(Status.FAILURE)) { // Der er warning eller fejl i kaldet, håndter dem for (ErrorInfo error : response.getErrors()) { } } |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
// Nyt kald/request FindDocumentsQuery findDocumentsQuery = new FindDocumentsQuery(); // Opret søge kriterier AssigningAuthority patientIdAssigningAuthority = new AssigningAuthority("1.2.208.176.1.2"); // OID for CPR registret Identifiable patientIdentifiable = patientIdentifiable = new Identifiable("2512489996", patientIdAssigningAuthority); findDocumentsQuery.setPatientId(patientIdentifiable); // angiv patienten dokumenterne vedrører List<AvailabilityStatus> searchStatusList = new LinkedList<AvailabilityStatus>(); searchStatusList.add(AvailabilityStatus.APPROVED); findDocumentsQuery.setStatus(searchStatusList); // søg efter dokumenter, som har status approved findDocumentsQuery.getServiceStartTime().setFrom(serviceStartTimeFrom); // søg efter specifik dato interval som start tidspunkt findDocumentsQuery.getServiceStartTime().setTo(serviceStartTimeTo); // ved at angive fra og til serviceStartTime QueryRegistry queryRegistry = new QueryRegistry(findDocumentsQuery); queryRegistry.setReturnType(QueryReturnType.LEAF_CLASS); //returner fuld metadata for de fremsøgte dokumenter // Transformer request - dette laver core model om til RIM format QueryRegistryTransformer requestTransformer = new QueryRegistryTransformer(); EbXMLAdhocQueryRequest30 ebxmlRequest = (EbXMLAdhocQueryRequest30) requestTransformer.toEbXML(queryRegistry); AdhocQueryRequest adhocQueryRequest = ebxmlRequest.getInternal(); // Udfør kald AdhocQueryResponse adhocQueryResponse = iti18PortType.documentRegistryRegistryStoredQuery(adhocQueryRequest); // Transformer response - dette laver RIM format til core model QueryResponseTransformer responseTransformer = new QueryResponseTransformer(ebXMLFactory); EbXMLQueryResponse ebXML = new EbXMLQueryResponse30(adhocQueryResponse); QueryResponse queryResponse = responseTransformer.fromEbXML(ebXML); // Aflæs kaldets svar if (queryResponse.getStatus().equals(Status.SUCCESS)) { // Kaldet gik godt, håndter de fremsøgte dokumenter metadata for (DocumentEntry documentEntry : queryResponse.getDocumentEntries()) { } } else if (queryResponse.getStatus().equals(Status.PARTIAL_SUCCESS) || queryResponse.getStatus().equals(Status.FAILURE)) { // Der er warning eller fejl i kaldet, håndter dem for (ErrorInfo error : queryResponse.getErrors()) { } } |
...