Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Navitabs
rootDin digitale tandlægevælger (DDTV) - Leverancebeskrivelse
includeroottrue


Indhold

Table of Contents

Komponenter

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

  • Din Digitale Tandlægevælger (DDTV)

...

  • Type: Webservlet
  • Filnavn: ddtv-batch-service.war
  • Url: <serverurl>/ddtv-batch-service
  • Status-url: <serverurl>/ddtv-batch-service/status

  • Alarm-url: <serverurl>/ddtv-batch-service/alarm

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:

URL til PersonInformation servicenstamdata-personinformation/v1

Property

Beskrivelse

Påkrævet

Default værdi

idsasdatasource.datasourceddtv.jndi-name

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

Ja

 

personinformation.url

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/

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

ddtv-citizen-service/2025/05/01/

service.contract.endpoint

Endpoint, som WSDL og XSD-schemas er udstillet på. Anvendes til substitution af relative stier til XSD-schemas ved hent af WSDL

Ja

http://test1-cnsp.ekstern-test.nspop.dk:8080/ddtv-citizen-service/service-contract

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

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

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

Ja

1,3,70

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.totalconnections
Totale 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)
ddtv.audience

Audience for IDWS kald

Ja

https://audienceidsas.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

ddtv
ddtv.powerOfAttorney.read

Fuldmagt læserettighed

Ja

urn:dk:nspop:ddtv:read
ddtv.powerOfAttorney.write

Fuldmagt skriverettighed

Ja

urn:dk:nspop:ddtv:write

application.properties for DDTV-Dentist 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-dentist-service/2025/05/01/

service.contract.endpoint

Endpoint, som WSDL og XSD-schemas er udstillet på. Anvendes til substitution af relative stier til XSD-schemas ved hent af WSDL

Ja

http://test1-cnsp.ekstern-test.nspop.dk:8080/ddtv-dentist-service/service-contract

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

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

Ja

1,3,70

I application.properties for DDTV-Batch servicen I idsas-lookup.properties kan følgende properties defineres:

Property

Beskrivelse

Påkrævet

Default værdi

idsas
datasource.
datasource
ddtv.jndi-name

Navn på jboss datasource (defineret i

idsas

ddtv-ds.xml)

Ja

 

idsas.allowed.client.system.name

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

java:jboss/datasources/ddtv-ds

sores.url

URL til SORES servicen

Ja

Nej

http://

system

test1.ekstern-test.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

:8080/sores/

sores.connectTimeout

Connection timeout i millisekunder for SORES integrationen

Ja

10000

personinformation

 

soresclient
.url

URL til

SORES

PersonInformation servicen

Ja

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

soresidsas.

stamdata-personinformation/v1

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

personinformation.connectionTimeout

Connection timeout i millisekunder for PersonInformation integrationen

Ja

10000

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
idsas.
httpclient.pooling.maxconnections.pr.routeAntal HttpClients forbindelser der kan åbnes pr. ruteNej20
idsas
scan.
lookup
citizens.
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

...

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

...

Ja

...

 

...

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

...

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

...

Ja

...

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

...

Nej

...

PT15S (15 sekunder)

...

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

...

Nej

...

10000

...

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)

...

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

...

P1Y

...

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

...

 

...

10000

...

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

...

Ja

...

kafka:9092

...

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

...

Ja

...

Idsas

...

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

...

Ja

...

Idsas

...

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

...

Ja

...

false

...

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

...

Ja

...

earliest

...

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

...

Ja

...

org.apache.kafka.common.serialization.StringDeserializer

...

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

...

Ja

...

org.apache.kafka.common.serialization.StringDeserializer

...

Det topic som IDSAS sender alle beskeder på

...

Ja

...

Idsas-Registration-Topic

...

Den timeout der anvende af consumeren ved polling

...

Ja

...

1000

...

 

...

Ja

...

Idsas Operations Consumer

...

 

...

Ja

...

idsas-operations-consumer

...

 

...

Ja

...

1.0.0

...

 

...

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

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øreJaPT10S (10 sekunder)
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øreJaPT10S (10 sekunder)
remind.citizens.reminder.limitHvor mange reminders må der sendes til samme borgerJa1
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øreJaPT10S (10 sekunder)
digital.post.endpointURL til Digital Post Adapter send servicenJahttp://test1-cnsp.ekstern-test.nspop.dk:8080/digitalpost/2024/05/29/send
digital.post.template.informationsbrevSkabelon-navn for brev der udsendes når borgeren skal informeres om at der skal vælges tandlægeJaDDTV/20250910/informationsbrev
digital.post.template.bekraeftelsesbrevSkabelon-navn for brev der udsendes når tandlægen har bekræftet borgerens valgJaDDTV/20250910/bekraeftelsesbrev
digital.post.template.paamindelsesbrevSkabelon-navn for brev der udsendes når borgeren ikke har foretaget et valg længe nokJaDDTV/20250910/paamindelsesbrev
digital.post.template.afvistbrevSkabelon-navn for brev der udsendes når tandlægen har afvist borgerens valgJaDDTV/20250910/afvisningsbrev_t1
digital.post.template.timeoutbrevSkabelon-navn for brev der udsendes når tandlægen har været for længe om at svare på borgerens valgJaDDTV/20250910/afvisningsbrev_t2
digital.post.template.kommunikationsfejlbrevSkabelon-navn for brev der udsendes når EDI-portalen giver fejlJaDDTV/20250910/afvisningsbrev_t3
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øreJaPT10S (10 sekunder)
edi.message.tokenuriURL til EDI-portalens JWT token serviceJahttps://tst-identity.nasure.dk/auth/realms/Nasure/protocol/openid-connect/token
edi.message.apiuriURL til EDI-portalens dentist APIJahttps://tst-api.ediportalen.dk/api/ddtvRequestDentist
edi.message.clientidID på klient, dvs. på DDTVJasds-ddtv
edi.message.clientsecretClient secret til udstedelse af JWT tokenJa(skjult)
cleanup.batchsizeHvor mange borgere skal oprydningsjobbet maksimalt rydde op ad gangenJa20
cleanup.deceased.retention.periodHvor lang tid skal der gå før data for en afdød person fjernes fra databasenJaP1Y (1 år)
cleanup.unresponsive.retention.periodHvor lang tid skal der gå før data for en person, der har modtaget digital post uden at reagere på det, fjernes fra databasenJaP2Y (2 år)
cleanup.execution.durationHvor længe skal cleanup jobbet køreJaPT10S (10 sekunder)
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 til Digital Post Adapteren

JaDDTV


log4j konfiguration

Log4j konfiguration for alle services findes i samme bibliotek

...

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

...

Ja

...

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

Code Block
languagejava
titleSQL-query med patientId til at genskabe hash
linenumberstrue
collapsetrue
select sha2(concat('saltprefix', '1111111118', 'saltpostfix'), 256);

Overvågning

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

...

Whitelisting

Der foretages whitelisting ved check mod databasen. En ny whitelisting kan tilføjes med følgende SQL insert:

Code Block
languagesql
INSERT INTO WHITELIST (cvr, comment)
VALUES ('some-cvr-here', 'some-reason-for-whitelisting-here');



Overvågning

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

Fortolkning af overvågningsside

Overvågningssiderne returnerer enten:

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

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

IDSAS
DDTV-Citizen
createBlurring

applyForNewDentist

Personlig

disregardApplicationForNewDentist

patient-idId på borgerenIDSAScreateBlurringPersonligpatient-id-sourceTypen af id (fx "cpr")IDSAScreateBlurringPersonlig
hashed-patient-idHashed id på borgerenIDSAScreateBlurringIkke personligactor-idId på organisationenIDSAScreateBlurringIkke personligactor-id-sourceTypen af id (fx "cvr")IDSAScreateBlurringIkke personligexpiry-date-timeUdløbsdato for slørringIDSASgetCurrentSaltIkke personligactor-idId på organisationenIDSASgetCurrentSaltIkke 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å borgerenIDSASgetBlurredOrganisationsPersonlig
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".

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.2" for CPR

Id på actor (borger eller fuldmægtig)

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

"Borger"

DDTV-Dentist

dentistAccept

dentistReject

requestID

actorID

actorIDType

actorRole

Unikt ID genereret for EDI meddelelse til tandlæge'

ID på actor

Typen af actor

"System"


Code Block
languagetext
titleapplyForNewDentist eksempel
collapsetrue
{
    "time": "2025-09-19T09:04:46.985764854Z",
    "category": "dk.sds.nsp.audit.log",
  
Code Block
languagetext
titleCreateBlurring eksempel
collapsetrue
{
  "time": "2023-06-12T11:42:23.664Z",
  "category": "dk.sds.nsp.audit.log.idsas",
  "audit": {
        "timestamp": "20232025-0609-12T1319T11:4204:2244.972736968533+02:00",
        "components": [{
      {
          "component": "IDSASDDTV",
                "contexts": [{
           {
             "context": "createBlurringapplyForNewDentist",
            "information": [
            "information":  [{
                "key": "cpr",
                "typekey": "RPIpatient-id",
                  "value": "1234567890"
              }"type": "RPI",
                {
                "keyvalue": "cvr1811804807",
                "type": "NPI",
                "value": "33257872"}, {
              }
            ]
      "key": "patient-id-source",
    }
         ]
      }
    ]
  },
  "access": {
    "codetype": 200"RPI",
    "duration": 95,
      "httpHeaders": {
      "Content-Type": "text/xml;charset=UTF-8",
      "SOAPAction": "CreateBlurring"
    },
    "httpHostvalue": "localhost",OID:1.2.208.176.1.2"
    "idCardAttributes": {
      "medcom:CareProviderID": "33257872",
      "medcom:CareProviderName": "Sundhedsdatastyrelsen",
      "medcom:ITSystemName": "Service Consumer Test"}, {
       "medcom:UserAuthorizationCode": "6QF17",
           "medcom:UserRole": "7170",
      "sosi:AuthenticationLevel": "4",
      "sosi:IDCardIDkey": "SIjvZBkfZ1yAWSpYFcLpvw==actor-role",
      "sosi:IDCardType": "user",
        "sosi:IDCardVersion": "1.0.1"
    },
    "method": "POST",
    "path": "/idsas/20230601/service",
    "querytype": "NPI",
    "port": 8080,
      "protocol": "http",
    "reqSize": 7204,
    "resSize": 211,
    "soapHeaders": {
      "FlowIDvalue": "72111931-fe3b-4956-bea3-20e8c5be9ce0","CITIZEN"
      "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,
      "RequestContentDurationkey": 41"actor-id",
       "ResponseContentDuration": 0,
      "SecurityProtocolRequestDuration": 368,
      "SecurityProtocolResponseDuration": 0,
           "bufferAllocatedtype": true,
"NPI",
                                "usedBuffersvalue": 1,
"1811804807"
                "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:

  • <serverurl>/idsas-operations/cleanup-blurrings/status
  • <serverurl>/idsas-operations/cleanup-blurrings/alarm
  • <serverurl>/idsas-operations/cleanup-blurrings-deceased/status
  • <serverurl>/idsas-operations/cleanup-blurrings-deceased/alarm

De to status-endpoints kan svare følgende

    • Http-kode 200 og Database: OK 
    • Http-kode 500 og Database: Unavailable

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:

...

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:

...

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:

                              "key": "actor-id-source",
                                "type": "NPI",
                                "value": "CPR"
                            }
                        ]
                    }
                ]
            }
        ]
    },
    "access": {
        "code": 200,
        "duration": 2247,
        "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": 12564,
        "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": "ae528b36-4715-470b-a603-bc4b150a028b"
        },
        "threadId": "default task-1",
        "time": "2025-09-19T11:04:44.736899022+02:00",
        "stats": {
            "handlerDuration": 42,
            "RequestContentDuration": 3,
            "ResponseContentDuration": 0,
            "SecurityProtocolRequestDuration": 17,
            "SecurityProtocolResponseDuration": 20,
            "bufferAllocated": false,
            "usedBuffers": 2,
            "activeBuffersInPool": 2,
            "idleBuffersInPool": 0
        },
        "reqUUID": "f6567a23-dc35-46f2-8ad9-01314fa47750"
    }
}


Baggrundsjobs

Overvågning af baggrundsjobs

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

  • <serverurl>/ddtv-batch-service/status
  • <serverurl>/ddtv-batch-service/alarm

De to status-endpoints kan svare følgende

    • Http-kode 200 og Database: OK 
    • Http-kode 500 og Database: Unavailable

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.

Job til identifikation af borgere, der fylder 22 år

Jobbet startes via et HTTP GET kald til <serverurl>/ddtv-batch-service/scan-citizens-job/start

Jobbets overordnede virkemåde er, at der hentes en liste med borgere med en relevant fødselsdato fra PersonInformation. For hver identificeret borger oprettes en record for borgeren i databasen med status NO_DENTIST (hvis ikke der allerede findes data for borgeren) samt dpStatus READY,som signalerer klar til afsendelse af digital post.

Særligt omkring dette job gælder dog, at da PersonInformation-metoden personsByBirthday kun tager én bestemt dato som parameter, er det vigtigt at jobbet ved hvor langt det er kommet, så der er mulighed for at indhente det forsømte ved at afvikle jobbet for en række datoer. Dette kunne f.eks. være relevant, hvis jobbet skulle have været sat på pause i en periode.  Til dette formål benyttes en BATCH_JOB_STATUS tabel i  databasen, som indeholder hvilken dato jobbet næste gang skal tage udgangspunkt i. 

I praksis gennemfører jobbet følgende trin:

  1. Næste dato for afvikling indlæses fra BATCH_JOB_STATUS tabellen. Hvis dette er en fremtidig dato springes afviklingen over.
  2. Ud fra dato, beregn den fødselsdato, der skal sendes til PersonInformation. Dette er 22 år før, justeret med 7 dage (konfigurerbart)
  3. Brug PersonInformation-servicens personsByBirthday-metode for at hente cprnumre for alle personer født på denne dato.
  4. Opret en DentistChoice record i databasen med status NO_DENTIST og digital post status ready (med mindre data for borgeren allerede findes). Dette signalerer at Digital Post jobbet skal sende informationsbrev til borgeren.
  5. Afslut med at opdatere BATCH_JOB_STATUS tabellen til næste dato. Normalsituationen er, at dette bliver dato for i morgen, hvis jobbet er færdig med at afvikle for dags dato.

Bemærk: Såfremt det besluttes at starte jobbet fra en fortidig dato når servicen startes første gang, er dette muligt ved på forhånd at indsætte en dato i BATCH_JOB_STATUS tabellen. Eksempel: Såfremt der ønskes initialiseret med dem, der er fyldt 22 indenfor den sidste måned, så kan der oprettes en record med JOB_NAME=ScanCitizens og NEXT_DATE=dags dato - 1 måned.

Job til afsendelse af digital post

Jobbet startes via et HTTP GET kald til <serverurl>/ddtv-batch-service/digital-post-job/start

Digital Post sendes via NSP-komponenten Digital Post Adapter.

I praksis gennemfører jobbet følgende trin:

  1. Der indlæses en liste af DentistChoice records som har dpStatus (digital post status READY).
  2. For hver gøres følgende:
    1. Send digital post via Digital Post Adapter. 
    2. Skift DentistChoice dpStatus til SENT, og marker tidspunkt for afsendelse.

Det brev der sendes kan være flere typer, afhængigt af DentistChoice status:

StatusDigital Post
NO_DENTISTIndledende brev til borger med information om ordning og link til Sundhed.dk
DENTIST_ACCEPTEDBrev til borger med bekræftelse om, at valgt tandlæge har accepteret
DENTIST_REJECTEDBrev til borger med information om, at valgt tandlæge har afvist henvendelsen.
TIMED_OUTBrev til borger med information om, at tandlæge ikke har besvaret henvendelsen inden for en givet tidsperiode
COMMUNICATION_FAILUREBrev til borger med information om, at der er opstået en teknisk fejl ved forsøg på at kontakte tandlægen.

Job til påmindelse af borger

Dette job er beregnet til at sende påmindelsesbreve til borgere, der ikke har reageret på tidligere brev indenfor en vis periode (konfigurerbart).

Jobbet startes via et HTTP GET kald til <serverurl>/ddtv-batch-service/remind-citizens-job/start

Jobbet fremsøger DentistChoice records fra i databasen, hvor følgende gælder

  • Status = NO_DENTIST (der er ikke valgt tandlæge)
  • dpStatus  = SENT (der er sendt digital post)
  • Der er sendt digital post eller reminder for et stykke tid siden (konfigurerbart)
  • Maksimalt antal reminders er endnu ikke sendt.
  • Reminders er ikke fravalgt

For disse sendes ny Digital Post i form af et påmindelsesbrev. Digital Post sendes i praksis via NSP-komponenten Digital Post Adapter, på samme måde som Digital Post jobbet gør det.

Job til afsendelse af EDI-beskeder

Jobbet startes via et HTTP GET kald til <serverurl>/ddtv-batch-service/edi-job/start

Jobbet fremsøger records fra i databasen, hvor følgende gælder

  • Status = DENTIST_CHOSEN (der er valgt tandlæge)
  • Der er ikke en nyere record for samme borger
  • ddtvMayContactDentist er true (det er ikke fravalgt at kontakte tandlægen)

For disse sendes en EDI-besked om, at en borger har valgt en specifik tandlæge. I kaldet indgår en RequestID, som genereres i forbindelse med at EDI-beskeden sendes, og lagres i databasen. Når der senere bekræftes eller afvises via DGWS-servicen til tandlæger, vi denne RequestID blive anvendt til at slå op hvem borgeren var.

EDI-beskeder sendes i praksis via EDI-portalen med en snitflade til formålet udviklet af Nasure.

I praksis gennemfører jobbet følende trin:

  1. Alle DentistChoice records med status DENTIST_CHOSEN som nyeste status for en person indlæses fra databasen (batchvist)
  2. For hver gøres følgende:
    1. Der oprettes en RequestID som identificerer EDI beskeden
    2. Opret en ny DentistChoice med status DENTIST_CONTACTED
    3. Opret en EDIStatus i en separat tabel, som holder styr på EDI beskeder, der endnu ikke er modtaget Accept eller Reject for.
    4. Send EDI besked. Der medsendes lokationsnummer.

EDI-beskeder sendes i praksis via EDI-portalen, med en snitflade til formålet udviklet af Nasure.

Bemærk:

  • Lokationsnummer skulle have været slået op i SOR, men pga. aktuelle begrænsninger i SORES-servicen bruges i stedet lokationsnummer fra DentistChoice, som er medsendt fra Sundhed.dk
  • Det vil være en fordel at begrænse afvikling af dette job til om natten, hvis dette er muligt, så en borger har mulighed for at vælge om i løbet af dagen, uden at tandlæger kontaktes unødigt.

Job til afsendelse af "se bort fra tidligere EDI"-beskeder

Jobbet startes via et HTTP GET kald til <serverurl>/ddtv-batch-service/ignore-previous-edi-job/start

Jobbet fremsøger records fra EDIStatus-tabellen databasen, som indeholder data om "udestående" EDI-beskeder. For hver afgøres om en af følgende gælder. 

  • Der er ikke nogle data for borgeren (opt out)
  • Det er ikke længere samme tandlæge, der er valgt (borgeren har valgt om i mellemtiden)

For disse sendes en EDI-besked om, at en borger har valgt om, og at der skal ses bort fra tidligere EDI. I kaldet indgår den RequestID, som blev sendt i forbindelse med den oprindelige EDI-besked.

EDI-beskeder sendes i praksis via EDI-portalen med en snitflade til formålet udviklet af Nasure.

Job til sletning af data for afdøde borgere, samt borgere, der aldrig svarede

Oprydningsjobbet startes via et HTTP GET kald til <serverurl>/ddtv-batch-service/cleanup-job/start

Jobbet kaldes for at påbegynde en oprydning af følgende:

  • Data for afdøde borgere. Alle registrerede data slettes 1 år efter borgeren personerne er afgået ved døden (konfigurerbart)
  • Data for borgere, der har fået tilsendt Digital Post, men stadig ikke har reageret efter 2 år (konfigurerbart)

...