Dette dokument dækker følgende komponenter på NSP:
NSP XDS Registry
Type: Webservice
Filnavn: nxrg.war
Url: <serverurl>/nxrg
Servicecheckurl: <serverurl>/nxrg/status
Versionurl: <serverurl>/nxrg/health returnerer en json struktur med denne
Migreringskomponenten, der migrerer opentext data til SQL scripts til indlæsning i nxrg databasen.
Grundlæggende konfiguration foregår ved redigering i filen nxrg.properties, der placeres i følgende WildFly modul:
/pack/wildfly/modules/sds/nxrg/configuration/main/
Moduldefinitionen er at finde i sourcekoden til nxrg under:
/compose/configuration/module.xml
I filen skal følgende properties være definerede:
Property | Beskrivelse |
|---|---|
datasource.jndi.name | JNDI navnet på den datasource der giver adgang til NXRG databasen. |
| liquibase.changelog.file | Angiver den changelog fil som liquibase skal anvende. Property er ikke krævet. Hvis der skal afvikles integrationstest mod det miljø der installeres skal denne sættes til liquibase-changelog-test.xml. Denne kan også sættes via en environmentvariabel i formen liquibase_changelog_file. |
| nxrg.allowed.mimetype | Tilladt MimeType på DocumentEntries i requests til ITI-42, ITI-57 og ITI-61. |
| iti18.request.validation.enabled | Angiver om der skal foretages openehealth-validering af requestet. |
| iti18.response.validation.enabled | Angiver om der skal foretages openehealth-validering af responset. |
| iti42.request.validation.enabled | Angiver om der skal foretages openehealth-validering af requestet. |
| iti42.response.validation.enabled | Angiver om der skal foretages openehealth-validering af responset. |
| iti57.request.validation.enabled | Angiver om der skal foretages openehealth-validering af requestet. |
| iti57.response.validation.enabled | Angiver om der skal foretages openehealth-validering af responset. |
| iti61.request.validation.enabled | Angiver om der skal foretages openehealth-validering af requestet. |
| iti61.response.validation.enabled | Angiver om der skal foretages openehealth-validering af responset. |
iti18.request.max.documents.leafclass | Angiver, hvor mange dokumenter en iti 18 søgning må hente. Overskrides antal gives en warning og status er partial success. |
| iti18.request.max.documents.objectref | Angiver, hvor mange dokumentreferencer en iti 18 søgning må hente. Overskrides antal gives en warning og status er partial success. |
Log4j konfiguration findes i samme wildfly modul som servicekonfigurationen
Se yderligere opsætning i installationsvejledningen.
NXRG udstiller en overvågningsside, som findes i listen af komponenter i afsnit 2.
NXRG-overvågningssiden returnerer enten:
Det overvåges om der kan opnås forbindelse til databasen.
TODO
TODO
NXRG laver audit log ved hvert kald af de udbudte ITI-services. I det følgende gennemgåes formaterne for hver service.
Alle logninger ender i en dedikeret logfil audit.log.
Loglinjen er formatteret som json og alle logninger har følgende indgange:
*Komponent: NXRG/<operation>, hvor <operation> er navnet på det ITI kald som laves. F.eks. ITI-57.
For hver skrives følgende informationer
Komponent | Kontekst*1 | Felt | Type | Indhold |
|---|---|---|---|---|
| NXRG/ITI-42 | submissionset uniqueId | CitizenId | SensitivePersonalInformation | PatientId |
| SubmissionSetInformation | RegularPersonalInformation | Identifikation (uniqueId) af det submissionset, der indeholder informationen i iti-42 kaldet. | ||
| DoucmentEntryInformation | RegularPersonalInformation | En liste af entryUUid'er og uniqueId'er, der oprettes. Hvis en documentEntry i kaldet giver anledning til replace på en anden documentEntry, så angives dette uuid i egenskaben replacesEntryUuid. | ||
| Status | NonPersonalInformation | Status på kaldet. F.eks. OK, ERROR og WARNING | ||
| Errors | RegularPersonalInformation | Hvis kaldet resulterer i fejl, angives disse her | ||
| NXRG/ITI-61 | Se for ITI42 - indhold er ens | |||
| NXRG/ITI-57 | updatedObjectUuid | writeUpdateOperationName | NonPersonalInformation | Typen af opdatering |
| updatedObjectUuid | RegularPersonalInformation | UUID der er opdateret. | ||
| Status | NonPersonalInformation | Status på kaldet. F.eks. OK, ERROR og WARNING | ||
| Errors | RegularPersonalInformation | Hvis kaldet resulterer i fejl, angives disse her | ||
| NXRG/ITI-18 | tilfældigt uuid | queryType | NonPersonalInformation | Identifikation typen af query. |
| returnType | NonPersonalInformation | Definerer, hvilken type af objekter, der returneres fra servicen | ||
| numberOfResults | NonPersonalInformation | Antallet af documententries i svaret | ||
| DoucmentEntryInformation | RegularPersonalInformation | En liste af entryUUid'er og uniqueId'er, der er hentet. | ||
| Status | NonPersonalInformation | Status på kaldet. F.eks. OK, ERROR og WARNING | ||
| Errors | RegularPersonalInformation | Hvis kaldet resulterer i fejl, angives disse her | ||
*1) Er nøglen null tildeles et tilfældigt uuid
Succesfuldt kald til service iti-42 giver anledning til en logningslinje på følgende format:
{
"time": "2021-12-01T05:41:34.053Z",
"category": "dk.sds.nsp.audit.log.nxrg/iti-42",
"audit": {
"timestamp": "2021-12-01T06:41:33.552+01:00",
"components": [
{
"component": "NXRG/ITI-42",
"contexts": [
{
"context": "5829933881450595335.691505562960183089.1638337293227",
"information": [
{
"key": "CitizenId",
"type": "SPI",
"value": "0101"
},
{
"key": "SubmissionSetInformation",
"type": "RPI",
"value": "{\"uniqueId\":\"5829933881450595335.691505562960183089.1638337293227\"}"
},
{
"key": "DoucmentEntryInformation",
"type": "RPI",
"value": "{\"entryUUid\":\"urn:uuid:ef04ddc0-b086-436f-a7db-37d4bbef8af6\", \"uniqueId\":\"4654430528298460003.324281175136550912.1638337293167\", \"replacesEntryUuid\":null}"
},
{
"key": "Status",
"type": "NPI",
"value": "OK"
}
]
}
]
}
]
},
"access": {
"code": 200,
"duration": 360,
"httpHeaders": {
"Content-Type": "application/soap+xml; charset=UTF-8"
},
"httpHost": "localhost",
"method": "POST",
"path": "/nxrg/iti42",
"query": "",
"port": 8060,
"protocol": "http",
"reqSize": 8528,
"resSize": 919,
"soapHeaders": {
"w3Action": "urn:ihe:iti:2007:RegisterDocumentSet-b",
"w3MessageID": "urn:uuid:5d2b8ccb-3a7f-4b0b-becc-4330999c1021",
"w3To": "http://localhost:8060/nxrg/iti42"
},
"threadId": "default task-1",
"time": "2021-12-01T06:41:33.544+01:00",
"stats": {
"handlerDuration": 121,
"RequestContentDuration": 19,
"ResponseContentDuration": 0,
"SecurityProtocolRequestDuration": 5,
"SecurityProtocolResponseDuration": 0,
"bufferAllocated": true,
"usedBuffers": 2,
"activeBuffersInPool": 2,
"idleBuffersInPool": 0
}
}
} |
Succesfuldt kald til service iti-61 giver anledning til en logningslinje på følgende format:
{
"time": "2021-12-01T05:44:20.01Z",
"category": "dk.sds.nsp.audit.log.nxrg/iti-61",
"audit": {
"timestamp": "2021-12-01T06:44:19.821+01:00",
"components": [
{
"component": "NXRG/ITI-61",
"contexts": [
{
"context": "6943690717325663174.4847763071154435223.1638337459544",
"information": [
{
"key": "CitizenId",
"type": "SPI",
"value": "0101"
},
{
"key": "SubmissionSetInformation",
"type": "RPI",
"value": "{\"uniqueId\":\"6943690717325663174.4847763071154435223.1638337459544\"}"
},
{
"key": "DoucmentEntryInformation",
"type": "RPI",
"value": "{\"entryUUid\":\"urn:uuid:92ee0d66-a9e0-4931-a90d-d5d708fa80c5\", \"uniqueId\":\"6284022344789100604.4104933276600124364.1638337459491\", \"replacesEntryUuid\":null}"
},
{
"key": "Status",
"type": "NPI",
"value": "OK"
}
]
}
]
}
]
},
"access": {
"code": 200,
"duration": 165,
"httpHeaders": {
"Content-Type": "application/soap+xml; charset=UTF-8"
},
"httpHost": "localhost",
"method": "POST",
"path": "/nxrg/iti61",
"query": "",
"port": 8060,
"protocol": "http",
"reqSize": 8211,
"resSize": 922,
"soapHeaders": {
"w3Action": "urn:ihe:iti:2010:RegisterOnDemandDocumentEntry",
"w3MessageID": "urn:uuid:af796d78-361d-457e-89ba-df01bca340d0",
"w3To": "http://localhost:8060/nxrg/iti61"
},
"threadId": "default task-1",
"time": "2021-12-01T06:44:19.82+01:00",
"stats": {
"handlerDuration": 18,
"RequestContentDuration": 1,
"ResponseContentDuration": 0,
"SecurityProtocolRequestDuration": 0,
"SecurityProtocolResponseDuration": 0,
"bufferAllocated": false,
"usedBuffers": 2,
"activeBuffersInPool": 2,
"idleBuffersInPool": 0
}
}
} |
Succesfuldt kald til service iti-57 for at slette markere et dokument, giver anledning til en logningslinje på følgende format:
{
"time": "2021-12-01T05:46:05.636Z",
"category": "dk.sds.nsp.audit.log.nxrg/iti-57",
"audit": {
"timestamp": "2021-12-01T06:46:05.406+01:00",
"components": [
{
"component": "NXRG/ITI-57",
"contexts": [
{
"context": "urn:uuid:d324c3e0-68b4-4c3e-8988-bff2325f2edb",
"information": [
{
"key": "CitizenId",
"type": "SPI",
"value": "0102"
},
{
"key": "updatedObjectUuid",
"type": "RPI",
"value": "urn:uuid:d324c3e0-68b4-4c3e-8988-bff2325f2edb"
},
{
"key": "writeUpdateOperationName",
"type": "NPI",
"value": "UpdateDocumentEntryAvailabilityStatus"
},
{
"key": "Status",
"type": "NPI",
"value": "OK"
}
]
}
]
}
]
},
"access": {
"code": 200,
"duration": 205,
"httpHeaders": {
"Content-Type": "application/soap+xml; charset=UTF-8"
},
"httpHost": "localhost",
"method": "POST",
"path": "/nxrg/iti57",
"query": "",
"port": 8060,
"protocol": "http",
"reqSize": 3524,
"resSize": 915,
"soapHeaders": {
"w3Action": "urn:ihe:iti:2010:UpdateDocumentSet",
"w3MessageID": "urn:uuid:8cd0fb3a-cc48-4706-8b6f-025d7dd891fd",
"w3To": "http://localhost:8060/nxrg/iti57"
},
"threadId": "default task-1",
"time": "2021-12-01T06:46:05.405+01:00",
"stats": {
"handlerDuration": 4,
"RequestContentDuration": 0,
"ResponseContentDuration": 0,
"SecurityProtocolRequestDuration": 0,
"SecurityProtocolResponseDuration": 0,
"bufferAllocated": false,
"usedBuffers": 1,
"activeBuffersInPool": 1,
"idleBuffersInPool": 1
}
}
} |
Succesfuldt kald til service iti-18 giver anledning til en logningslinje på følgende format:
{
"time": "2021-12-01T05:48:42.821Z",
"category": "dk.sds.nsp.audit.log.nxrg/iti-18",
"audit": {
"timestamp": "2021-12-01T06:48:42.772+01:00",
"components": [
{
"component": "NXRG/ITI-18",
"contexts": [
{
"context": "urn:uuid:36358982-bfa1-4ad9-ba86-9b5ea33196c2",
"information": [
{
"key": "CitizenId",
"type": "SPI",
"value": "22222222"
},
{
"key": "queryType",
"type": "NPI",
"value": "urn:uuid:14d4debf-8f97-4251-9a74-a90016b0af0d"
},
{
"key": "returnType",
"type": "NPI",
"value": "LeafClass"
},
{
"key": "numberOfResults",
"type": "NPI",
"value": "2"
},
{
"key": "DoucmentEntryInformation",
"type": "RPI",
"value": "{\"entryUUid\":\"urn:uuid:268cd839-11e2-4121-8fea-3f184e5f3efa\", \"uniqueId\":\"5766156196412876102.2822196146951899395.1638337675198\", \"replacesEntryUuid\":null}"
},
{
"key": "DoucmentEntryInformation",
"type": "RPI",
"value": "{\"entryUUid\":\"urn:uuid:ccff6d0e-c2bd-4b9d-81d6-874726e9bba4\", \"uniqueId\":\"7402593388400441251.2665840693284483189.1638337722275\", \"replacesEntryUuid\":null}"
},
{
"key": "Status",
"type": "NPI",
"value": "OK"
}
]
}
]
}
]
},
"access": {
"code": 200,
"duration": 31,
"httpHeaders": {
"Content-Type": "application/soap+xml; charset=UTF-8"
},
"httpHost": "localhost",
"method": "POST",
"path": "/nxrg/iti18",
"query": "",
"port": 8060,
"protocol": "http",
"reqSize": 2123,
"resSize": 11289,
"soapHeaders": {
"w3Action": "urn:ihe:iti:2007:RegistryStoredQuery",
"w3MessageID": "urn:uuid:accc136e-1ca4-4a04-bfe1-4caef4e31328",
"w3To": "http://localhost:8060/nxrg/iti18"
},
"threadId": "default task-1",
"time": "2021-12-01T06:48:42.772+01:00",
"stats": {
"handlerDuration": 13,
"RequestContentDuration": 0,
"ResponseContentDuration": 0,
"SecurityProtocolRequestDuration": 0,
"SecurityProtocolResponseDuration": 0,
"bufferAllocated": false,
"usedBuffers": 1,
"activeBuffersInPool": 1,
"idleBuffersInPool": 1
}
}
} |
Succesfuldt kald til service iti-18 giver anledning til en logningslinje på følgende format. Her ses at der er returneret 2 dokumenter, samt et er sorteret fra pga. manglende hash værdi (der er en fejl, hvor "location" er det frasorterede documententry (entryuuid)
{
"time":"2022-04-27T08:50:38.171Z",
"category":"dk.sds.nsp.audit.log.nxrg/iti-18",
"audit":{
"timestamp":"2022-04-27T10:50:37.985+02:00",
"components":[
{
"component":"NXRG/ITI-18",
"contexts":[
{
"context":"urn:uuid:4c50a699-c757-4d72-bce0-ef0e4284d5ff",
"information":[
{
"key":"CitizenId",
"type":"SPI",
"value":"27272727"
},
{
"key":"queryType",
"type":"NPI",
"value":"urn:uuid:14d4debf-8f97-4251-9a74-a90016b0af0d"
},
{
"key":"returnType",
"type":"NPI",
"value":"LeafClass"
},
{
"key":"numberOfResults",
"type":"NPI",
"value":"2"
},
{
"key":"DoucmentEntryInformation",
"type":"RPI",
"value":"{\"entryUUid\":\"urn:uuid:b263be94-8ae8-428c-a08e-07e815e9c4f3\", \"uniqueId\":\"8232413550820834039.3966522250150692715.1651049436633\", \"replacesEntryUuid\":null}"
},
{
"key":"DoucmentEntryInformation",
"type":"RPI",
"value":"{\"entryUUid\":\"urn:uuid:3632b062-c449-4d80-9f17-92ffe033985b\", \"uniqueId\":\"8463246857834336090.1917624010876404532.1651049437586\", \"replacesEntryUuid\":null}"
},
{
"key":"DoucmentEntryInformation",
"type":"RPI",
"value":"{\"entryUUid\":\"urn:uuid:2f9ec238-55a6-48ad-baae-ca3f02783892\", \"uniqueId\":\"7463408028766553712.8751492382280798024.1651049437729\", \"replacesEntryUuid\":null}"
},
{
"key":"Status",
"type":"NPI",
"value":"WARNING"
},
{
"key":"Errors",
"type":"RPI",
"value":"{\"errorCode\":\"XDSRegistryMetadataError\", \"errorMessage\":null, \"codeContext\":\"XDSRegistryMetadataError Slot contains incorrect amount of values. Slot = hash, allowed = [ 1- 1], Was = 0\", \"location\":\"Entryuuid: urn:uuid:2f9ec238-55a6-48ad-baae-ca3f02783892\", \"severity\":\"urn:oasis:names:tc:ebxml-regrep:ErrorSeverityType:Error\"}"
}
]
}
]
}
]
},
"access":{
"code":200,
"duration":164,
"httpHeaders":{
"Content-Type":"application/soap+xml; charset=UTF-8"
},
"httpHost":"localhost",
"method":"POST",
"path":"/nxrg/iti18",
"query":"",
"port":8060,
"protocol":"http",
"reqSize":2123,
"resSize":11645,
"soapHeaders":{
"w3Action":"urn:ihe:iti:2007:RegistryStoredQuery",
"w3MessageID":"urn:uuid:b8abf188-a545-4388-ab2d-01593c51e7ff",
"w3To":"http://localhost:8060/nxrg/iti18"
},
"threadId":"default task-1",
"time":"2022-04-27T10:50:37.985+02:00",
"stats":{
"handlerDuration":5,
"RequestContentDuration":0,
"ResponseContentDuration":0,
"SecurityProtocolRequestDuration":0,
"SecurityProtocolResponseDuration":0,
"bufferAllocated":false,
"usedBuffers":1,
"activeBuffersInPool":1,
"idleBuffersInPool":1
}
}
} |
Følgende er et eksempel på et ITI-42 kald med, fejl. Konkret mangler CPR numret i kaldet.
{
"time": "2021-12-01T05:50:00.92Z",
"category": "dk.sds.nsp.audit.log.nxrg/iti-42",
"audit": {
"timestamp": "2021-12-01T06:50:00.894+01:00",
"components": [
{
"component": "NXRG/ITI-42",
"contexts": [
{
"context": "5912107379890312866.8220644980724288715.1638337800700",
"information": [
{
"key": "CitizenId",
"type": "SPI",
"value": ""
},
{
"key": "SubmissionSetInformation",
"type": "RPI",
"value": "{\"uniqueId\":\"5912107379890312866.8220644980724288715.1638337800700\"}"
},
{
"key": "DoucmentEntryInformation",
"type": "RPI",
"value": "{\"entryUUid\":\"urn:uuid:5ea9015e-75f7-4cc5-85ff-079b56f36499\", \"uniqueId\":\"6660232118599018558.1142303413219772882.1638337800625\", \"replacesEntryUuid\":null}"
},
{
"key": "Status",
"type": "NPI",
"value": "ERROR"
},
{
"key": "Errors",
"type": "RPI",
"value": "{\"errorCode\":\"XDSRegistryMetadataError\", \"errorMessage\":null, \"codeContext\":\"External identifier value is missing: urn:uuid:6b5aea1a-874d-4603-a4bc-96a0a7b3844 (patientId)\", \"location\":null, \"severity\":\"urn:oasis:names:tc:ebxml-regrep:ErrorSeverityType:Error\"}"
}
]
}
]
}
]
},
"access": {
"code": 200,
"duration": 17,
"httpHeaders": {
"Content-Type": "application/soap+xml; charset=UTF-8"
},
"httpHost": "localhost",
"method": "POST",
"path": "/nxrg/iti42",
"query": "",
"port": 8060,
"protocol": "http",
"reqSize": 8518,
"resSize": 1221,
"soapHeaders": {
"w3Action": "urn:ihe:iti:2007:RegisterDocumentSet-b",
"w3MessageID": "urn:uuid:215c930a-73c0-4a6f-84fe-0c24e3725ba7",
"w3To": "http://localhost:8060/nxrg/iti42"
},
"threadId": "default task-1",
"time": "2021-12-01T06:50:00.894+01:00",
"stats": {
"handlerDuration": 4,
"RequestContentDuration": 0,
"ResponseContentDuration": 0,
"SecurityProtocolRequestDuration": 0,
"SecurityProtocolResponseDuration": 0,
"bufferAllocated": false,
"usedBuffers": 2,
"activeBuffersInPool": 2,
"idleBuffersInPool": 0
}
}
} |
Den oprindelige data migrering fra openText registry er ikke længere aktuelt, og indholdet der indeholder migreringstool - og relaterede tools til verification etc - er flyttet til "Yderligere dokumentation - Migration"
NXRG har en selvstændig service, der kan migrere eksisterende metadata til søgbare felter. Denne service har sin egen driftvejledning som findes her: "NXRG driftvejledning for migrering af søgbare felter".