Komponenter

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

Migreringskomponenten, der migrerer opentext data til SQL scripts til indlæsning i nxrg databasen.

Konfiguration

Servicekonfiguration

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.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.

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:

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.

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

TypeIndhold
NXRG/ITI-42submissionset uniqueIdCitizenIdSensitivePersonalInformationPatientId


SubmissionSetInformationRegularPersonalInformationIdentifikation (uniqueId) af det submissionset, der indeholder informationen i iti-42 kaldet.


DoucmentEntryInformationRegularPersonalInformationEn 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.


StatusNonPersonalInformationStatus på kaldet. F.eks. OK, ERROR og WARNING


ErrorsRegularPersonalInformationHvis kaldet resulterer i fejl, angives disse her





NXRG/ITI-61Se for ITI42 - indhold er ens





NXRG/ITI-57updatedObjectUuidwriteUpdateOperationNameNonPersonalInformationTypen af opdatering


updatedObjectUuidRegularPersonalInformationUUID der er opdateret.


StatusNonPersonalInformationStatus på kaldet. F.eks. OK, ERROR og WARNING


ErrorsRegularPersonalInformationHvis kaldet resulterer i fejl, angives disse her





NXRG/ITI-18tilfældigt uuidqueryTypeNonPersonalInformationIdentifikation typen af query.


returnTypeNonPersonalInformationDefinerer, hvilken type af objekter, der returneres fra servicen


numberOfResultsNonPersonalInformationAntallet af documententries i svaret


DoucmentEntryInformationRegularPersonalInformationEn liste af entryUUid'er og uniqueId'er, der er hentet. 


StatusNonPersonalInformationStatus på kaldet. F.eks. OK, ERROR og WARNING


ErrorsRegularPersonalInformationHvis kaldet resulterer i fejl, angives disse her

*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:

{
  "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:

{
  "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:

{
  "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:

{
  "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 når fejl

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
    }
  }
}



Migrering

Migrering er ikke længere aktuelt, og indholdet der indeholder migreringstool - og relaterede tools til verification etc - er flyttet til "Yderligere dokumentation - Migration"