Page History
| Table of Contents |
|---|
Komponenter
Dette dokument dækker følgende komponenter på NSP:
Dokumentregistrerings- og oprettelsesservice
Type: Webservice
Filnavn: dros.war
Url: <serverurl>/dros
Servicecheckurl: <serverurl>/dros/status
Versionurl: <serverurl>/dros/health returnerer en json struktur med denne
- DKS config: <serverurl>/dros/<iti-snitflade>/dks se detaljer nedenfor
...
Konfiguration
Servicekonfiguration
Grundlæggende konfiguration foregår ved redigering i filen dros.properties, der placeres i følgende WildFly modul:
/pack/wildfly8/modules/sds/dros/configuration/main/
Moduldefinitionen er at finde i sourcekoden til dros under:
/dros-war/etc/modules/sds/dros/configuration/main/module.xml
I filen skal følgende properties være definerede:
Property | Beskrivelse | ||
dros.url.prefix | URL prefix der indsættes i wsdl'er og bruges af dks-servlet. | ||
| dros.app.name | Anvendes af dks-servlet til at udfylde name elementet sammen med et suffix for ITI endpointet. Eksempel: hvis dros.app.name er "DROSAFTALER" bliver det "<name>DROSAFTALERITI41</name>" ved iti-41. | ||
| dros.serviceidentifier | Anvendes af dks-servlet. Inkluderes i endpoint og action (serviceIdentifier)action som en serviceIdentifier attribut. Eksempel: hvis dros.serviceidentifier er "aftaler" bliver det "<action name="urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b" serviceIdentifier="aftaler">" ved iti-41. | ||
iti41.service.endpoint | Endpoint på ITI41-backend. | ||
| iti41.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false | ||
| iti41.service.xds.validationlevel | Angiver hvordan requestet valideres inden der kaldes videre til det bagvedliggende registry. Skal have en af værdierne OFF, WARNING, LOG og REJECT. Se dokumentet 'Design og Arkitektur' for en beskrivelse af disse værdier. | ||
| iti42.service.endpoint | Endpoint på ITI42-backend. | ||
| iti42.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false | ||
| iti42.service.xds.validationlevel | Angiver hvordan requestet valideres inden der kaldes videre til det bagvedliggende registry. Skal have en af værdierne OFF, WARNING, LOG og REJECT. Se dokumentet 'Design og Arkitektur' for en beskrivelse af disse værdier. | ||
iti57.service.endpoint | Endpoint på ITI57-backend. | ||
| iti57.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false | ||
| iti57.service.xds.validationlevel | Angiver hvordan requestet valideres inden der kaldes videre til det bagvedliggende registry. Skal have en af værdierne OFF, WARNING, LOG og REJECT. Se dokumentet 'Design og Arkitektur' for en beskrivelse af disse værdier. | ||
| iti61.service.endpoint | Endpoint på ITI61-backend. | ||
| iti61.service.security.require.person | Angiver, om der skal anvendes personlige sikkerhedsbillet i.e UserIdCard eller det er nok med SystemIdCard (true/false) Default: false | ||
| iti61.service.xds.validationlevel | Angiver hvordan requestet valideres inden der kaldes videre til det bagvedliggende registry. Skal have en af værdierne OFF, WARNING, LOG og REJECT. Se dokumentet 'Design og Arkitektur' for en beskrivelse af disse værdier. | ||
dros.backend.failure.threshold | Tærskel for, hvor mange gang i træk et kald til en backend må fejle, før denne backend betragtes som 'død' af status-siden. | ||
| dros.backend.failure.interval.minutes | Angiver antal minutter hvorefter fejlkald 'forældes'. Dermed er det kun fejlkald, der er nyere end dette, der medregnes, når det vurderes om backenden fejler. | ||
| cprexists.validationlevel | Valideringsniveau for CPR validering Eksempel: WARNING, REJECT, OFF | ||
| cprexists.personinformation.url | URL for CPR exist PersonInformation service Eksempel: http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-cprexists | ||
| cprexists.maxTotalConnections | Konfiguration af client pool til kald af CPRExists service Default: 200 | ||
| cprexists.defaultMaxConnectionsPerRoute | Konfiguration af client pool til kald af CPRExists service Default: 20 | ||
| handled.type.codes | Angiver en liste af, hvilke type codes DROS håndterer. Er listen tom (property findes, men ingen værdi efter =) accepteres alle type codes. Eksempel på liste: 39289-4,39290-2,53576-5,52460-3,81215-6 Default: tom liste | ||
For alle nedenstående properties, som starter med validation. og slutter på .codes gælder følgende: Disse properties anvendes til at konfigurerer XDS validerings biblioteket med. En kode består af 3 elementer: value, system og displayname. Disse adskilles med $. Hver sæt af koder adskilles med #. Der er muligt at angive wildcards og det kan man gøre på to niveauer:
| |||
| validation.class.codes | Angiv tilladte class koder Eksempel: null$1.2.208.184.100.9$null# | ||
| validation.confidentiality.codes | Angiv tilladte confidentiality codes. Typisk kun N Eksempel: N$2.16.840.1.113883.5.25$null# | ||
| validation.organisation.codes | Angiv tilladte organizations koder. Her angives typisk kun skema. Eksempel: null$1.2.208.176.1.4$null#null$1.2.208.176.1.1$null# | ||
| validation.patientid.codes | Angiv tilladte patientid. Her angives typisk kun skema. Eksempel: null$1.2.208.176.1.2$null# | ||
| validation.format.codes | Angive tilladte format koder Eksempel: * | ||
| validation.healthcarefacilitytype.codes | Angive tilladte healthcarefacilitytype koder Eksempel: * | ||
| validation.practicesetting.codes | Angiv tilladte practicesetting koder Eksempel: * | ||
| validation.event.codes | Angiv tilladte event koder Eksempel: null$1.2.208.176.2.4$null# | ||
| validation.type.codes | Angiv tilladte type koder Eksempel: 39289-4$2.16.840.1.113883.6.1$null# | ||
| personinformation.error.tolerance | Angiver hvor mange fejl, der må forekomme ved kald til personInformation Default: 0 | ||
| personinformation.error.interval.minutes | Angiver det tidsinterval det angivne antal fejl skal ligge indenfor ved kald til personInformation Default: 10 | ||
| sores.url | URL for Sores service | ||
| sores.cache.duration | Angiver en duration, hvor længe et Sores opslag skal gemmes i Sores cachen, inden man henter en ny værdi ved næste opslag på et givet Sor nummer Eksempel: PT24H gemmer et Sores opslag 24 timer | ||
| sores.error.tolerance | Angiver hvor mange fejl, der må forekomme ved kald til Sores Default: 0 | ||
| sores.error.interval.minutes | Angiver det tidsinterval det angivne antal fejl skal ligge indenfor ved kald til Sores Default: 10 | ||
| httpclient.pooling.totalconnections | Konfiguration af client pool til kald af personInformation og Sores Default: 200 | ||
| httpclient.pooling.maxconnections.pr.route | Konfiguration af client pool til kald af PersonInformation og Sores Default: 20 | ||
| handled.type.codes | Angiver en liste af, hvilke type codes DROS håndterer. Er listen tom (property findes, men ingen værdi efter =) accepteres alle type codes. Eksempel på liste: 39289-4,39290-2,53576-5,52460-3,81215-6,28615-3 Default: tom liste | ||
For alle nedenstående properties, som starter med validation. og slutter på .codes gælder følgende: Disse properties anvendes til at konfigurerer XDS validerings biblioteket med. En kode består af 3 elementer: value, system og displayname. Disse adskilles med $. Hver sæt af koder adskilles med #. Der er muligt at angive wildcards og det kan man gøre på to niveauer:
| |||
| validation.class.codes | Angiv tilladte class koder Eksempel: null$1.2.208.184.100.9$null# | ||
| validation.confidentiality.codes | Angiv tilladte confidentiality codes. Typisk kun N Eksempel: N$2.16.840.1.113883.5.25$null# | ||
| validation.organisation.codes | Angiv tilladte organisations koder. Her angives typisk kun skema. Eksempel: null$1.2.208.176.1.4$null#null$1.2.208.176.1.1$null# | ||
| validation.patientid.codes | Angiv tilladte patientid. Her angives typisk kun skema. Eksempel: null$1.2.208.176.1.2$null# | ||
| validation.format.codes | Angive tilladte format koder Eksempel: * | ||
| validation.healthcarefacilitytype.codes | Angive tilladte healthcarefacilitytype koder Eksempel: * | ||
| validation.practicesetting.codes | Angiv tilladte practicesetting koder Eksempel: * | ||
| validation.event.codes | Angiv tilladte event koder Eksempel: null$1.2.208.176.2.4$null#\ Alle event koder fra systemet 1.2.208.176.2.4 er tilladte og de 5 Noah koder i høremappenn. | ||
| validation.type.codes | Angiv tilladte type koder. Valideringsbiblioteket anvender denne til at tjekke om typecode i metadata (i documententry og cda dokument hvis parset) er en gyldig værdi Eksempel: 39289-4$2.16.840.1.113883.6.1$null#28615-3$2.16.840.1.113883.6.1$Audiology Study# | ||
| validation.cda.type.codes | Angiv de type koder, som er af typen CDA. Eksempel: 39289-4$2.16.840.1.113883.6.1$null# | ||
| validation.personinformation.enabled | Angiver om DocumentEntryPatientIdExistsValidator skal kalde PatientInformation for at validere at Cpr nummer findes. Default: true | ||
| validation.sores.enabled | Angiver om DocumentEntryAuthorInstitutionSorEnricher skal kalde Sores for at validere at Sor koder findes. Default: true | ||
| validation.sourcepatientinfo.required | Skal SourcePatientInfo være udfyldt. Default: true | ||
| validation.homecommunityid.required | Skal HomeCommunityId være udfyldt. Default: true | ||
validation.mimetype | Angive tilladte MimeType: Eksempel: text/xml# | ||
validation.homecommunityid | Angiv tilladte HomeCommunityId. Eksempel: 1.2.208.176.8.1# | ||
validation.map.event.codes.to.format.codes | Ifm. validering af Noah dokumenter, så er det kun format koder, som er koblet sammen med det aktuelle event kode, som er tilladte. Denne property er kun nødvendig ifm. validering af Høremappe dokumenter. Listen er opbygget parvis, så en event kode kobles sammen med en format kode. Eksempel: 1$urn:ad:dk:medcom:noah:action-categories$null$urn:ad:dk:medcom:nauf-v500:full$1.2.208.184.100.10$Noah Audiogram format 500#\ Event kode 1 tillader format Audiogram format 500 og Audiogram format 502, Event kode 15 og 16 tillader format Impedance format 500 og Admittance format 501 og Event kode 129 og 130 tillader format Hearing Instrument Selection format 500. | ||
validation.servicestarttime.notbefore | ServiceStart må ikke være før dato Denne property er kun nødvendig ifm. validering af Høremappe dokumenter. Eksempel: | ||
validation.audio.enabled | Denne værdi skal være sat til true, hvis DROS skal validere Høremappe dokumenter. | ||
validation.cda.enabled | Denne værdi skal være sat til true, hvis DROS skal validere CDA dokumenter. | validation.cda.type.codes | Angiv de type koder, som er af typen CDA. Eksempel: 39289-4$2.16.840.1.113883.6.1$null# |
log4j konfiguration
Log4j konfiguration findes i samme wildfly modul som servicekonfigurationen
Se yderligere opsætning i installationsvejledningen.
DKS snitflader
DROS har en DKS snitflade per iti kald:
...
Gør men dette indgår serviceIdentifier som en attribut i endpoint og action element, se forskellen i følgende 2 eksempler for iti-41:
...
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "0/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClientPersonInformationClient : "0/0 fejl"
SoresClient : "550/500 fejl"
Whitelisting Database : "ok"
Hvis kaldene til cprexists personInformation eller Sores backend ikke kan udføres, så returneres statuskode 203 (indenfor failure threshold (tolerance og minutter), som kan sættes op som en konfigurationsparameter, se ovenfor).
500 Internal Server Error
...
ITI41 backend : "0/50 fejl" ITI42 backend : "0/50 fejl" ITI57 backend : "55/50 fejl" ITI61 backend : "0/50 fejl" CprExistsServiceClient
PersonInformationClient : "0/50 fejl"
SoresClient : "0/0 fejl"
Whitelisting Database : "ok"
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
"time":"2021-05-03T21:54:21.875Z",
"category":"dk.sds.nsp.audit.log.dros/updatedocumentset",
"audit":{
"timestamp":"2021-05-03T23:54:21.673+02:00",
"components":[
{
"component":"DROS/UpdateDocumentSet",
"contexts":[
{
"context":"8bee75d3-9e1e-4646-b440-ffb6e13f8099",
"information":[
{
"key":"AssociationSourceId",
"type":"RPI",
"value":"8bee75d3-9e1e-4646-b440-ffb6e13f8099"
},
{
"key":"AssociationTargetId",
"type":"RPI",
"value":"urn:uuid:bf963b2e-7fd0-4b25-9c1b-b9762af656f7"
},
{
"key":"AssociationType",
"type":"RPI",
"value":"urn:ihe:iti:2010:AssociationType:UpdateAvailabilityStatus"
},
{
"key":"AssociationStatus",
"type":"RPI",
"value":"Deprecated"
}
]
}
]
}
]
},
"access":{
"code":200,
"duration":166,
"httpHeaders":{
"Content-Type":"application/soap+xml; charset=UTF-8"
},
"httpHost":"localhost",
"idCardAttributes":{
"medcom:CareProviderID":"46837428",
"medcom:CareProviderName":"Statens Serum Institut",
"medcom:ITSystemName":"Test",
"sosi:AuthenticationLevel":"3",
"sosi:IDCardID":"sTLZT4F425EnY6GleFiNcA==",
"sosi:IDCardType":"system",
"sosi:IDCardVersion":"1.0.1"
},
"method":"POST",
"path":"/dros/iti57",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":9253,
"resSize":460,
"soapHeaders":{
"Issuer":"TEST2-NSP-STS",
"MessageID":"AAABeTQ5nWIfoju4xRpdM1NPU0k=",
"NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}",
"w3Action":"urn:ihe:iti:2010:UpdateDocumentSet",
"w3MessageID":"urn:uuid:e81108e0-603e-4662-8320-689c1e64a2f9",
"w3To":"http://localhost:8060/dros/iti57"
},
"threadId":"default task-12",
"time":"2021-05-03T23:54:21.673+02:00",
"stats":{
"handlerDuration":33,
"RequestContentDuration":1,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":27,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":2,
"activeBuffersInPool":2,
"idleBuffersInPool":6
}
}
} |
Hvis Ved CPR validering kører i WARNING mode, så vil af ugyldige (ifølge CPRExits PersonInformation service) CPR numre vil dette give anledning til en linje i auditloggen. Logninger af denne type ser således ud:
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
"time":"2021-08-19T08:46:13.461Z",
"category":"dk.sds.nsp.audit.log.dros",
"audit":{
"timestamp":"2021-08-19T10:46:13.081+02:00",
"components":[
{
"component":"DROS",
"contexts":[{
"context":"iti-41",
"information":[{
"key":"dk.nsp.dk.nsp.cprperson.exists.false",
"type":"SPI","value":"ABCDE"
}]
}]
},
{
"component":"DROS/ProvideAndRegisterDocumentSetB",
"contexts":[{
"context":"urn:uuid:5e2abecf-a1aa-4059-bc67-789492ef5e49",
"information":[{
"key":"DocumentId",
"type":"RPI",
"value":"5776847426915191537.1243631302011472830.1629362773007"
},
{
"key":"DocumentType",
"type":"RPI",
"value":"39289-4"
},
{
"key":"CitizenId",
"type":"RPI",
"value":"ABCDE"
},
{
"key":"FormatCode",
"type":"RPI",
"value":"urn:ad:dk:medcom:appointment"
},
{
"key":"SubmissionSetId",
"type":"RPI",
"value":"6382716294106427493.5756439411433255780.1629362773009"
}]
}]
}
]
},
"access":{
"code":200,
"duration":350,
"httpHeaders":{
"Content-Type":"multipart/related; type=\"application/xop+xml\"; boundary=\"uuid:40d856a8-1a44-4ab2-a26a-947c1c6ec09d\"; start=\"<root.message@cxf.apache.org>\"; start-info=\"application/soap+xml\""
},
"httpHost":"localhost",
"idCardAttributes":{
"medcom:CareProviderID":"46837428",
"medcom:CareProviderName":"Statens Serum Institut",
"medcom:ITSystemName":"Test",
"sosi:AuthenticationLevel":"3",
"sosi:IDCardID":"aXDKFJ7P6UQQDfAsWEen8Q==",
"sosi:IDCardType":"system",
"sosi:IDCardVersion":"1.0.1"
},
"method":"POST",
"path":"/dros/iti41",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":24881,
"resSize":1420,
"soapHeaders":{
"Issuer":"TEST2-NSP-STS",
"MessageID":"AAABe12W3BTo9p7lAx0WMVNPU0k=",
"NameID":"SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXII CA, O=TRUST2408, C=DK},CertSerial={1495058165}",
"w3Action":"urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b",
"w3MessageID":"urn:uuid:ee979460-f7e5-4432-8604-c345eba582f9",
"w3To":"http://localhost:8060/dros/iti41"
},
"threadId":"default task-18",
"time":"2021-08-19T10:46:13.08+02:00",
"stats":{
"handlerDuration":28,
"RequestContentDuration":2,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":22,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":4,
"activeBuffersInPool":4,
"idleBuffersInPool":4
}
}
}
|
...
Organisationens CVR nummer whitelistes ved følgende SQL:
|
Certifikatets UUID id whitelistes ved følgende SQL:
|
...