Indhold

Komponenter

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

Komponenten dækker 3 services som følger



Konfiguration

Servicekonfiguration

Grundlæggende konfiguration af alle services foregår ved redigering i filen application.properties. For den enkelte service placeres filen i følgende WildFly modul:

/pack/wildfly8/modules/dk/nsp/ddtv/main/

Moduldefinition, som kan anvendes for alle services, findes i kildekoden under:

/etc/wildfly/modules/dk/nsp/ddtv/main/module.xml

I application.properties for DDTV-Citizen servicen kan følgende properties defineres:

Property

Beskrivelse

Påkrævet

Default værdi

idsas.datasource.jndi

Navn på jboss datasource (defineret i idsas-ds.xml)

Ja

 

personinformation.url

URL til PersonInformation servicen

Ja

http://test1-cnsp.ekstern-test.nspop.dk:8080/stamdata-personinformation/v1

personinformation.errorcount.duration

Specificering af hvor lang tid tilbage der skal tælles fejl fra PersonInformation servicen (ifm /status endpointet). Angives som duration i ISO-8601 formattet.

Nej

PT10M (10 minutter)

personinformation.error.tolerance

Antal fejl der tolereres fra PersonInformation servicen før /status endpointet angiver servicen som ikke tilgængelig.

Nej

0

soresclient.url

URL til SORES servicen

Ja

http://test1-cnsp.ekstern-test.nspop.dk:8080/sores/

soresclient.errorcount.duration

Specificering af hvor lang tid tilbage der skal tælles fejl fra SORES servicen (ifm /status endpointet). Angives som duration i ISO-8601 formattet.

Nej

PT10M (10 minutter)

soresclient.error.tolerance

Antal fejl der tolereres fra SORES servicen før /status endpointet angiver servicen som ikke tilgængelig.

Nej

0

dcc.endpoint

Angiver det endpoint, som DCC'en skal kalde. Dette kommer til at fremgå af den XML, der returneres i /dksconfig.

Ja


 

idsas.httpclient.pooling.totalconnectionsTotale antal HttpClients forbindelser der kan åbnesNej200
idsas.httpclient.pooling.maxconnections.pr.routeAntal HttpClients forbindelser der kan åbnes pr. ruteNej20
idsas.blurring.expiry.max.daysAntal dage fremme i tiden en sløring må udløbe
Nej
P90D (90 dage)
idsas.allowed.client.system.name

Navnet på de systemer, som må kalde "listAllActiveOrgBlurrings" i "idsas-registration" (afdelingssløring). 

Nej

http://system.nspop.dk/sts,DRG

 

idsas.registration.persist.strategy

Om der skal bruges KAFKA eller DATABASE til persistering af sløringer

Ja

 

kafka.producer.bootstrap.servers

https://kafka.apache.org/documentation/#producerconfigs_bootstrap.servers

Ja

 

kafka.producer.client.id

https://kafka.apache.org/documentation/#producerconfigs_client.id

Ja

 

kafka.producer.key.serializer

https://kafka.apache.org/documentation/#producerconfigs_key.serializer

Ja

 

kafka.producer.value.serializer

https://kafka.apache.org/documentation/#producerconfigs_value.serializer

Ja

 

kafka.producer.max.block.ms

https://kafka.apache.org/documentation/#producerconfigs_max.block.ms

Nej

10000

kafka.topic

Det topic som IDSAS sender alle beskeder på

Ja

 

nsp.kafka.producer.component.name


Ja

Idsas Registration Producer Frontend

nsp.kafka.producer.component.abbreviation


Ja

idsas-producer-frontend

nsp.kafka.producer.component.version

 

Ja

1.0.0

nsp.kafka.producer.service.name

 

Ja

idsas-producer-frontend

I idsas-lookup.properties kan følgende properties defineres:

Property

Beskrivelse

Påkrævet

Default værdi

idsas.datasource.jndi

Navn på jboss datasource (defineret i idsas-ds.xml)

Ja

 

idsas.allowed.client.system.name

Navnet på de systemer, som må kalde "getBlurredOrganisations" i "idsas-lookup".

Nej

http://system.nspop.dk/sts,DRG

 

dcc.endpoint

Angiver det endpoint, som DCC'en skal kalde. Dette kommer til at fremgå af den XML, der returneres i /dksconfig.

Ja


 

soresclient.url

URL til SORES servicen

Ja

http://test1-cnsp.ekstern-test.nspop.dk:8080/sores/

soresclient.errorcount.duration

Specificering af hvor lang tid tilbage der skal tælles fejl fra SORES servicen (ifm /status endpointet). Angives som duration i ISO-8601 formattet.

Nej

PT10M (10 minutter)

soresclient.error.tolerance

Antal fejl der tolereres fra SORES servicen før /status endpointet angiver servicen som ikke tilgængelig.

Nej

0

idsas.httpclient.pooling.totalconnectionsTotale antal HttpClients forbindelser der kan åbnesNej200
idsas.httpclient.pooling.maxconnections.pr.routeAntal HttpClients forbindelser der kan åbnes pr. ruteNej20
idsas.lookup.strategyStrategien for opslag af sløringer Enten CPR, HASH eller BOTH, alt efter om man slår op på patient_id, patient_id_hashed eller begge.
Ja
 

I idsas-salt.properties kan følgende properties defineres:

Property

Beskrivelse

Påkrævet

Default værdi

idsas.datasource.jndi

Navn på jboss datasource (defineret i idsas-ds.xml)

Ja

 

idsas.allowed.client.system.name

Navnet på de systemer, som må kalde "getCurrentSalt" i "idsas-salt". 

Nej

http://system.nspop.dk/sts,DRG

 

I idsas-operations.properties kan følgende properties defineres:

Property

Beskrivelse

Påkrævet

Default værdi

idsas.datasource.jndi

Navn på jboss datasource (defineret i idsas-ds.xml)

Ja


idsas.cleanup.max.duration

Den tilladte varighed af cleanup jobbet. Angives som duration i ISO-8601 formattet; dog bør kun sekunder angives.

Nej

PT15S (15 sekunder)

idsas.cleanup.batch.size

Antal rækker der ryddes op pr. iteration i cleanup jobbet.

Nej

10000

idsas.cleanup.max.retention

Hvor mange år gammel en række skal være før den må ryddes op af cleanup jobbet. Angives som duration i ISO-8601 formattet; dog kan kun år angives.

Nej

P5Y (5 år)

idsas.cleanup.deceased.period

Her angives hvor lang tid der skal gå før sløringer for afdøde personer slettes


P1Y

idsas.cleanup.deceased.batch.size

Her angives hvor mange rækker der ryddes op pr. itegration ved oprydning af sløringer for afdøde personer.

 

10000

kafka.consumer.bootstrap.servers

https://kafka.apache.org/documentation/#producerconfigs_bootstrap.servers

Ja

kafka:9092

kafka.consumer.client.id

https://kafka.apache.org/documentation/#producerconfigs_client.id

Ja

Idsas

kafka.consumer.group.id

https://kafka.apache.org/documentation/#consumerconfigs_group.id

Ja

Idsas

kafka.consumer.enable.auto.commit

https://kafka.apache.org/documentation/#consumerconfigs_enable.auto.commit

Ja

false

kafka.consumer.auto.offset.reset

https://kafka.apache.org/documentation/#consumerconfigs_auto.offset.reset

Ja

earliest

kafka.consumer.key.deserializer

https://kafka.apache.org/documentation/#consumerconfigs_key.deserializer

Ja

org.apache.kafka.common.serialization.StringDeserializer

kafka.consumer.value.deserializer

https://kafka.apache.org/documentation/#consumerconfigs_value.deserializer

Ja

org.apache.kafka.common.serialization.StringDeserializer

kafka.topic

Det topic som IDSAS sender alle beskeder på

Ja

Idsas-Registration-Topic

kafka.poll.timeout

Den timeout der anvende af consumeren ved polling

Ja

1000

nsp.kafka.consumer.component.name

 

Ja

Idsas Operations Consumer

nsp.kafka.consumer.component.abbreviation

 

Ja

idsas-operations-consumer

nsp.kafka.consumer.component.version

 

Ja

1.0.0

nsp.kafka.consumer.service.name

 

Ja

idsas-consumer

I idsas-patient-id-salt.properties skal følgende property defineres. De bliver kun indlæst fra "lookup"-servicen (tidligere også fra registration):

Property

Beskrivelse

Påkrævet

Default værdi

idsas.patient.id.saltPrefix

Salt til hashing af patientId'ere. Se afsnittet længere nede.

Ja


idsas.patient.id.saltPostfix

Salt til hashing af patientId'ere. Se afsnittet længere nede.

Ja


log4j konfiguration

Log4j konfiguration for begge services findes i samme wildfly modul som servicekonfigurationen

Se yderligere opsætning i installationsvejledningen.

Salt til hashing af patientId'ere

Til hashing af patientId'ere i databasen, anvendes den salt som er angivet i konfigurations-filen "idsas-patient-id-salt.properties". Salten angives som to tekststrenge; en prefix og en postfix. 

Det er vigtigt, at denne salt er stabil og aldrig ændrer sig, efter at den er blevet valgt.

Servicen kan ikke starten op, hvis salten ikke er korrekt angivet.

Der er ingen særlige krav til salten, ud over at den er stabil.

Følgende SQL kan bruges til at genskabe hash-værdien givet de to salt-værdier og patientId'et (som her i eksemplet er sat til "1111111118").

select sha2(concat('saltprefix', '1111111118', 'saltpostfix'), 256);

Overvågning

Alle IDSAS services udstiller en overvågningsside, som findes i listen af komponenter.

Fortolkning af overvågningsside

Overvågningssiderne returnerer enten:

Audit-logning

Hvert servicekald medfører en ny indgang i auditloggen, som kan være udfyldt med følgende komponenter, afhængig af konteksten:

Komponent

Kontekst

Type

Nøgle

Information

IDSAScreateBlurringPersonligpatient-idId på borgeren
IDSAScreateBlurringPersonligpatient-id-sourceTypen af id (fx "cpr")
IDSAScreateBlurringPersonlig
hashed-patient-idHashed id på borgeren
IDSAScreateBlurringIkke personligactor-idId på organisationen
IDSAScreateBlurringIkke personligactor-id-sourceTypen af id (fx "cvr")
IDSAScreateBlurringIkke personligexpiry-date-timeUdløbsdato for slørring
IDSASgetCurrentSaltIkke personligactor-idId på organisationen
IDSASgetCurrentSaltIkke personlig
actor-id-sourceTypen af id (fx "cvr")
IDSASgetCurrentSaltIkke personlig
base64-encoded-saltEn base64 encoded string der indeholder den salt, der er returneret.
IDSASgetBlurredOrganisationsPersonligpatient-idId på borgeren
IDSASgetBlurredOrganisationsPersonlig
patient-id-sourceTypen af id (fx "cpr")
IDSASgetBlurredOrganisationsPersonligactive-blurrings-foundHvorvidt der blev fundet sløringer for borgeren eller ej, i det pågældende opslag. Kan være "true" eller "false".


{
  "time": "2023-06-12T11:42:23.664Z",
  "category": "dk.sds.nsp.audit.log.idsas",
  "audit": {
    "timestamp": "2023-06-12T13:42:22.972+02:00",
    "components": [
      {
        "component": "IDSAS",
        "contexts": [
          {
            "context": "createBlurring",
            "information": [
              {
                "key": "cpr",
                "type": "RPI",
                "value": "1234567890"
              },
              {
                "key": "cvr",
                "type": "NPI",
                "value": "33257872"
              }
            ]
          }
        ]
      }
    ]
  },
  "access": {
    "code": 200,
    "duration": 95,
    "httpHeaders": {
      "Content-Type": "text/xml;charset=UTF-8",
      "SOAPAction": "CreateBlurring"
    },
    "httpHost": "localhost",
    "idCardAttributes": {
      "medcom:CareProviderID": "33257872",
      "medcom:CareProviderName": "Sundhedsdatastyrelsen",
      "medcom:ITSystemName": "Service Consumer Test",
      "medcom:UserAuthorizationCode": "6QF17",
      "medcom:UserRole": "7170",
      "sosi:AuthenticationLevel": "4",
      "sosi:IDCardID": "SIjvZBkfZ1yAWSpYFcLpvw==",
      "sosi:IDCardType": "user",
      "sosi:IDCardVersion": "1.0.1"
    },
    "method": "POST",
    "path": "/idsas/20230601/service",
    "query": "",
    "port": 8080,
    "protocol": "http",
    "reqSize": 7204,
    "resSize": 211,
    "soapHeaders": {
      "FlowID": "72111931-fe3b-4956-bea3-20e8c5be9ce0",
      "Issuer": "TEST1-NSP-STS",
      "MessageID": "76315a15-0fb2-4df7-9e3e-53a3b28fb700",
      "NameID": "urn:uuid:46559bb9-d720-48b7-b9bd-c280915768d0"
    },
    "threadId": "default task-1",
    "time": "2023-06-12T13:42:22.968+02:00",
    "stats": {
      "handlerDuration": 583,
      "RequestContentDuration": 41,
      "ResponseContentDuration": 0,
      "SecurityProtocolRequestDuration": 368,
      "SecurityProtocolResponseDuration": 0,
      "bufferAllocated": true,
      "usedBuffers": 1,
      "activeBuffersInPool": 1,
      "idleBuffersInPool": 0
    }
  }
}

Whitelisting af anvendere

De enkelte anvenderes ID skal whitelistes til at bruge IDSAS. Et ID vil typisk være et CVR.

Der er pt. en type af whitelisting, BLURRING, med mulighed for at der tilføjes flere i fremtiden. For at kunne oprette en sløring, skal anvenderens CVR være whitelistet med netop denne type.

Der findes en tabel whitelist i databasen til dette formål.

SQL til at indsætte whitelisting af anvender kan se ud på følgende måde:

INSERT INTO whitelist (actor_id, type, note) VALUES ('46837428', 'BLURRING', 'Oprettet fra supportsag ASCP00155779');

Note-feltet kan fx anvendes til at referere en supportsag eller lignende for sporingshensyn. Kun actor_id og type er obligatorisk.

Oprettelse/fornyelse af salt

Oprettelse/fornyelse af salt sker via et HTTP GET kald til <serverurl>/idsas-operations/renew-salt

Dette kald skal laves for at oprette det første salt, og efterfølgende for at forny saltet, når der er behov.

Baggrundsjobs

Overvågning af baggrundsjobs

Der findes et status og et alarm-endpoint for hver baggrundsjob. De har følgende url'er:

De to status-endpoints kan svare følgende

De to alarm-endpoints er som udgangspunkt tomme og returnerer 200, men kan give en alarm-besked og status 500, hvis jobbet er i problemer.

Oprydningsjob af gamle sløringer

Oprydningsjobbet startes via et HTTP GET kald til <serverurl>/idsas-operations/cleanup-blurrings

Alarm-endpointet er som udgangspunkt tom og returnerer status 200, med mindre noget er gået galt. Status-siden rapporterer om komp

Jobbet kaldes for at påbegynde en oprydning af inaktive sløringer, og vil slette alle registrerede sløringer, som har være inaktive i mindst 5 år.

Jobbet køres i iterationer af en konfigureret størrelse, og terminerer enten når der ikke er flere inaktive sløringer der skal slettes, eller når jobbet har kørt i en konfigureret varighed.

Det vil fremgå af servicens overvågningsside om oprydningen blev færdig:

Blurring Cleanup Job StatusNOT_STARTED, NOT_FINISHED, FINISHED

Oprydningsjob af sløringer for afdøde personer

Oprydningsjobbet startes via et HTTP GET kald til <serverurl>/idsas-operations/cleanup-blurrings-deceased

Jobbet kaldes for at påbegynde en oprydning af sløringer for afdøde personer, og vil slette alle registrerede sløringer 1 år efter personerne er afgået ved døden.

Jobbet køres i iterationer af en konfigureret størrelse, og terminerer enten når der ikke er flere sløringer for afdøde der skal slettes, eller når jobbet har kørt i en konfigureret varighed.

Det vil fremgå af servicens overvågningsside om oprydningen blev færdig:

Blurring Cleanup Deceased Job StatusNOT_STARTED, NOT_FINISHED, FINISHED

Aktivering af Kafka-consumer

Jobbet startes via et HTTP GET kald til <serverurl>/idsas-operations/kafka-consume

Jobbet kaldes for at påbegynde læsning af beskeder fra Kafka-køen, og vil persistere de ændringer, der modtages.

Jobbet læser hvad der er tilgængeligt i køen med den angivne timeout (se konfigurationen), og committer nyt offset efter succesfuld persistering til databasen.

Det vil fremgå af servicens overvågningsside om jobbet kørende, er kørt færdigt eller om der er sket fejl:

Kafka Consumer Job StatusNOT_STARTED, RUNNING, FINISHED, ERROR