Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Navitabs
rootNSP XDS Registry/SDS Patientindex (NXRG) - Leverancebeskrivelse


Table of Contents

Komponenter

Dette dokument dækker følgende komponenter på NSP:

...

For felt migrerings servicen, se "NXRG - driftvejledning til felt migrering".

Konfiguration

Servicekonfiguration

Grundlæggende konfiguration foregår ved redigering i filen nxrg.properties,  der placeres i følgende WildFly modul:

...

Property

Beskrivelse

datasource.jndi.name

JNDI navnet på den datasource der giver adgang til NXRG databasen.

liquibase.changelog.fileAngiver 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.mimetypeTilladt MimeType på DocumentEntries i requests til ITI-42, ITI-57 og ITI-61.
iti18.request.validation.enabledAngiver om der skal foretages openehealth-validering af requestet.
iti18.response.validation.enabledAngiver om der skal foretages openehealth-validering af responset.
iti42.request.validation.enabledAngiver om der skal foretages openehealth-validering af requestet.
iti42.response.validation.enabledAngiver om der skal foretages openehealth-validering af responset.
iti57.request.validation.enabledAngiver om der skal foretages openehealth-validering af requestet.
iti57.response.validation.enabledAngiver om der skal foretages openehealth-validering af responset.
iti61.request.validation.enabledAngiver om der skal foretages openehealth-validering af requestet.
iti61.response.validation.enabledAngiver 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.objectrefAngiver, hvor mange dokumentreferencer en iti 18 søgning må hente. Overskrides antal gives en warning og status er partial success.
handled.type.codesAngiver en liste af, hvilke type codes NXRG 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
iti57.cpr.validation.enabledAngiver, om der ved ITI-57 kald (opdateringskald) skal laves validering på at patientid matcher det tidligere patientid

log4j konfiguration

Log4j konfiguration findes i samme wildfly modul som servicekonfigurationen

Se yderligere opsætning i installationsvejledningen.

Overvågning

NXRG udstiller en overvågningsside, som findes i listen af komponenter i afsnit 2.

5.1. Fortolkning af HTML overvågningsside

NXRG-overvågningssiden returnerer enten:

  • HTTP 200, hvis servicen i øjeblikket kører fint.
  • HTTP 203, hvis der er opstået en fejl der kræver indgriben.

5.2. Overvågningstyper

Det overvåges om der kan opnås forbindelse til databasen.

Eksempler på status-sider

200 OK

TODO

203 Non-authoritative Information

TODO

Audit log

NXRG laver audit log ved hvert kald af de udbudte ITI-services. I det følgende gennemgåes formaterne for hver service.

...

*1) Er nøglen null tildeles et tilfældigt uuid

Logning for ITI-42

Succesfuldt kald til service iti-42 giver anledning til en logningslinje på følgende format:

Code Block
collapsetrue
{
  "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
    }
  }
}

Logning for ITI-61

Succesfuldt kald til service iti-61 giver anledning til en logningslinje på følgende format:

Code Block
collapsetrue
{
  "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
    }
  }
}

Logning for ITI-57 - slette markering

Succesfuldt kald til service iti-57 for at slette markere et dokument, giver anledning til en logningslinje på følgende format:

Code Block
collapsetrue
{
  "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
    }
  }
}

Logning for ITI-18

Succesfuldt kald til service iti-18 giver anledning til en logningslinje på følgende format:

Code Block
collapsetrue
{
  "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
    }
  }
}

Logning for ITI-18 når ugyldige frasorterede dokumenter

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)

Code Block
collapsetrue
{
   "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
      }
   }
} 

Logning når fejl

Følgende er et eksempel på et ITI-42 kald med, fejl. Konkret mangler CPR numret i kaldet.

Code Block
collapsetrue
{
  "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
    }
  }
}



Migrering af data

Den oprindelige data migrering fra openText registry er ikke længere aktuel, og indholdet der indeholder migreringstool - og relaterede tools til verification etc - er flyttet til "Yderligere dokumentation - Migration"

...