{
    "time": "2025-08-07T12:21:58.315019322Z",
    "category": "dk.sds.nsp.audit.log",
    "audit": {
        "timestamp": "2025-08-07T14:21:58.226219889+02:00",
        "components": []
    },
    "access": {
        "code": 200,
        "duration": 86,
        "httpHeaders": {
            "Content-Type": "text/xml;charset=UTF-8",
            "SOAPAction": "http://sundhedsdatastyrelsen.dk/ddtv/2025/05/01/#ddtvApplyForNewDentist"
        },
        "httpHost": "localhost",
        "idCardAttributes": {
            "X509Subject": "CN=NSP Test Service Consumer,SERIALNUMBER=UI:DK-O:G:8d3fa047-c77e-47e4-bdd2-e91488610ce6,O=Sundhedsdatastyrelsen,2.5.4.97=NTRDK-33257872,C=DK",
            "dk:gov:saml:attribute:AssuranceLevel": "3",
            "dk:gov:saml:attribute:CprNumberIdentifier": "1811804807",
            "dk:gov:saml:attribute:SpecVer": "DK-SAML-2.0"
        },
        "method": "POST",
        "path": "/ddtv-citizen-service/2025/05/01/",
        "query": "",
        "port": 8080,
        "protocol": "http",
        "reqSize": 12415,
        "resSize": 6493,
        "soapHeaders": {
            "Audience": "https://fsk",
            "Issuer": "TEST1-NSP-STS",
            "NameID": "dk:gov:saml:attribute:CprNumberIdentifier:1811804807",
            "w3Action": "http://sundhedsdatastyrelsen.dk/ddtv/2025/05/01/#ddtvApplyForNewDentist",
            "w3MessageID": "aeb65ded-8e92-4862-8379-c93f3b034e1a"
        },
        "threadId": "default task-1",
        "time": "2025-08-07T14:21:58.226123921+02:00",
        "stats": {
            "handlerDuration": 27,
            "RequestContentDuration": 1,
            "ResponseContentDuration": 0,
            "SecurityProtocolRequestDuration": 5,
            "SecurityProtocolResponseDuration": 18,
            "bufferAllocated": false,
            "usedBuffers": 2,
            "activeBuffersInPool": 2,
            "idleBuffersInPool": 2
        },
        "reqUUID": "310452cc-6d0f-45a5-816d-8e4a7cbcc657"
    }
}

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

datasource.ddtv.jndi-name

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

Ja

java:jboss/datasources/ddtv-ds

dcc.endpoint

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

Ja

http://test1-cnsp.ekstern-test.nspop.dk:8080/ddtv-citizen-service/2025/05/01/

sores.url

URL til SORES servicen

Ja

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

sores.connectTimeout

Connection timeout i millisekunder for SORES integrationen

Ja

10000

personinformation.url

URL til PersonInformation servicen

Ja

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

personinformation.connectionTimeout

Connection timeout i millisekunder for PersonInformation integrationen

Ja

10000

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.

Ja

PT10M (10 minutter)

personinformation.cprstatuscodes

Kommasepareret liste af statuskoder i CPR stamdata, der anses som ACTIVE

Ja

1,3,70

httpclient.pooling.totalconnectionsTotale antal HttpClients forbindelser der kan åbnesNej200
httpclient.pooling.maxconnections.pr.routeAntal HttpClients forbindelser der kan åbnes pr. ruteNej20
ddtv.audience

Audience for IDWS kald

Ja

https://audience.nspop.dk/ddtv
ddtv.powerOfAttorney.read

Fuldmagt læserettighed

Ja

minlog
ddtv.powerOfAttorney.write

Fuldmagt skriverettighed

Ja

minlog

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

Property

Beskrivelse

Påkrævet

Default værdi

idsas.datasource.jndi

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

Ja

java:jboss/datasources/ddtv-ds

dcc.endpoint

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

Ja

http://test1-cnsp.ekstern-test.nspop.dk:8080/ddtv-dentist-service/2025/05/01/

whitelisted.cvrsKommasepareret liste af whitelistede CVR-numre. Såfremt listen er blank er der ingen CVR-begrænsning.Nej33257872

application.properties for DDTV-Batch 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

 

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

datasource.ddtv.jndi-name

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

Ja

java:jboss/datasources/ddtv-ds

sores.url

URL til SORES servicen

Ja

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

sores.connectTimeout

Connection timeout i millisekunder for SORES integrationen

Ja

10000

personinformation.url

URL til PersonInformation servicen

Ja

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

personinformation.connectionTimeout

Connection timeout i millisekunder for PersonInformation integrationen

Ja

10000

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.

Ja

PT10M (10 minutter)

personinformation.cprstatuscodes

Kommasepareret liste af statuskoder i CPR stamdata, der anses som ACTIVE

Ja

1,3,70

httpclient.pooling.totalconnectionsTotale antal HttpClients forbindelser der kan åbnesNej200
httpclient.pooling.maxconnections.pr.routeAntal HttpClients forbindelser der kan åbnes pr. ruteNej20
scan.citizens.target.ageAlder i år for automatisk tilmelding af borgereJa22
scan.citizens.days.beforeAntal dage før fødselsdag for automatisk tilmelding af borgereJa7
scan.citizens.execution.durationHvor længe skal scan citizens jobbet køreJaPT10M (10 minutter)
scan.citizens.abort.durationHvor længe skal der gå fra sidste afvikling af scan citizens jobbet før det afbrydes og et nyt kan starteJaPT30M (30 minutter)
remind.citizens.batchsizeHvor mange personer skal påmindelsesjobbet maksimalt fremsøge fra databasen ad gangenJa10
remind.citizens.delay.durationHvor lang tid skal der gå fra første digital post eller sidste påmindelse til en ny påmindelse sendesJaP10D (10 dage)
remind.citizens.execution.durationHvor længe skal påmindelsesjobbet køreJaPT10M (10 minutter)
remind.citizens.reminder.limitHvor mange reminders må der sendes til samme borgerJa1
remind.citizens.abort.durationHvor længe skal der gå fra sidste afvikling af påmindelsesjobbet før det afbrydes og et nyt kan starteJaPT30M (30 minutter)
digital.post.batchsizeHvor mange personer skal digital post jobbet maksimalt fremsøge fra databasen ad gangenJa10
digital.post.execution.durationHvor længe skal digital post jobbet køreJaPT10M (10 minutter)
digital.post.endpointURL til Digital Post Adapter send servicenJahttp://test1-cnsp.ekstern-test.nspop.dk:8080/digitalpost/2024/05/29/send
edi.message.batchsizeHvor mange personer skal EDI jobbet maksimalt fremsøge fra databasen ad gangenJa10
edi.message.execution.durationHvor længe skal EDI jobbet køreJaPT10M (10 minutter)
edi.message.abort.durationHvor længe skal der gå fra sidste afvikling af EDI jobbet før det afbrydes og et nyt kan starteJaPT30M (30 minutter)
cleanup.batchsizeHvor mange borgere skal oprydningsjobbet maksimalt rydde op ad gangenJa20
cleanup.deceased.retention.daysHvor mange dage skal en person være afdød før data fjernes fra databasenJa365
cleanup.unresponsive.retention.daysHvor mange dage der gå før data slettes for en person, der har modtaget digital post, uden at reagere på detJa730
cleanup.execution.durationHvor længe skal cleanup jobbet køreJaPT10M (10 minutter)
cleanup.abort.durationHvor længe skal der gå fra sidste afvikling af cleanup jobbet før det afbrydes og et nyt kan starteJaPT30M (30 minutter)
sts.endpoint

Endpoint for STS'en. Anvendes i forbindelse med DGWS kald til Digital Post Adapteren

Jahttp://test1-cnsp.ekstern-test.nspop.dk:8080/sts/services/NewSecurityTokenService
sts.keystore

Keystore med certifikat til DGWS kald

JaNSP_Test_Service_Consumer_sds.p12
sts.keystore.password

Password til keystore med certifikat til DGWS kald

JaTest1234
idcard.subject.name

Organisation som certifikat er udstedt til

JaSundhedsdatastyrelsen
idcard.subject.id

CVR-nummer på organisation, som certifikat er udstedt til

Ja33257872
idcard.system.name

Navn på system som foretager DGWS kald ti Digital Post Adapteren

JaDDTV


log4j konfiguration

Log4j konfiguration for alle services findes i samme bibliotek som servicekonfigurationen

Se yderligere opsætning i installationsvejledningen.

Overvågning

Alle DDTV 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

Nøgle

Information

DDTV-Citizen

applyForNewDentist

disregardApplicationForNewDentist

noMoreReminders

newDentistFullStop

optOut

checkStatus

personID

personIDClass

actorID

actorIDType

actorRole

Id på borgeren

Typen af id i form af OID, f.eks. "OID:1.2.208.176.1.6.1.1" for CPR

Id på actor (borger eller fuldmægtig)

Typen af id i form af OID, f.eks. "OID:1.2.208.176.1.6.1.1" for CPR

"Borger"

DDTV-Dentist

dentistAccept

dentistReject

(todo)
DDTV-Dentist
(todo)


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


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