Indhold

Komponenter

Dette dokument dækker FGVHR-servicen. Der udstilles et enkelt komponent af typen SOAP Webservice og en af typen REST-service.

  • Type: SOAP Webservice

  • Filnavn: fgvhr.war

  • Url: <serverurl>/fgvhr

  • Status-url: <serverurl>/fgvhr/status

  • DKS-config: <serverurl>/fgvhr/20230601/dksconfig

  • Type: Webservlet
  • Filnavn: fgvhr-operations.war
  • Url: <serverurl>/fgvhr-operations
  • Status-url: <serverurl>/fgvhr-operations/status

  • Version-url: <serverurl>/fgvhr-operations/version

Konfiguration

Servicekonfiguration

Grundlæggende konfiguration foregår ved redigering i filen fgvhr.properties. Den skal placeres i WildFly modul:

/pack/wildfly8/modules/dk/nsp/fgvhr/main/

Moduldefinitionen findes i kildekoden under:

/fgvhr-war/etc/modules/dk/nsp/fgvhr/configuration/main/module.xml

I fgvhr.properties kan følgende properties defineres:

Property

Beskrivelse

Påkrævet

Default værdi

fgvhr.go.live.dateDato for hvornår systemet går i drift. Før denne dato, er det ikke muligt at oprette fravalg igennem snitfladerne.
Ja

dk.nsp.fgvhr.national.rolleNational rolle bruger skal have når der kaldes på admin-service.
Ja
dk.nsp.fgvhr.whitelisted.clientkeySerialnumber fra det certifikat der benyttes ved kald til FSK snitflade.Ja
dk.nsp.fgvhr.datasource.jndiNavn på jboss datasource (defineret i fgvhr-ds.xml)Ja
dk.nsp.fgvhr.validfrom.period.daysHvornår er registrering af fravalg gyldig fra (antal dage)Nej7
dk.nsp.fgvhr.minimum.ageMinimumssalderen (år) for hvornår man kan registrere fravalg Nej60
dk.nsp.fgvhr.httpclient.pooling.totalconnectionsTotale antal HttpClients forbindelser der kan åbnesJa200
dk.nsp.fgvhr.httpclient.pooling.maxconnections.pr.routeAntal HttpClients forbindelser der kan åbnes pr. ruteJa20
personinformation.urlURL til PersonInformation servicenJa
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

dcc.endpoint.citizenAngiver det endpoint, som DCC'en skal kalde for at ramme citizen-service. Dette kommer til at fremgå af den XML, der returneres i /dksconfig.Ja
minlog.get-activity-textTekst i Minlog ved læsning af fravalgJaLæsning af Fravalg af genoplivning ved hjertestop register
minlog.register-activity-textTekst i Minlog ved oprettelse af fravalgJaOprettelse af Fravalg af genoplivning ved hjertestop register
minlog.delete-activity-textTekst i Minlog ved sletning af fravalgJaSletning af Fravalg af genoplivning ved hjertestop register
minlog.update-activity-textTekst i Minlog ved opdatering af fravalgJaOpdatering af Fravalg af genoplivning ved hjertestop register
fgvhr.nas.notification.job.max.durationDen tilladte varighed af jobbet. Angives som duration i ISO-8601 formattet; dog bør kun sekunder angives.Nej
PT15S
fgvhr.nas.notification.job.nas.bundle.sizeAntallet af adviseringer der sendes til NAS af gangen per SOAP request.
Nej
50
fgvhr.nas.notification.job.batch.sizeAntallet af adviseringer der hentes fra tabellen af gangen.
Nej
500
nas.sts.endpointEndpointet, hvor NAS-integrationen skal trække et idkort på baggrund af sts.keystoreJa
nas.sts.keystoreKeystore der indeholder funktionscertifikatet
Ja
nas.sts.keystore.passwordPassword til at åbne keystore
Ja
nas.endpointEndpointet hvor NAS skal kaldesJa
nas.idcard.subject.nameSubject name på idkortetJa
nas.idcard.subject.idSubject Id på idkortet
Ja
nas.idcard.system.nameSystemnavn på idkortet
Ja
nas.topicDet topic der skrives til på NAS
Ja

deletion.fgvhr.batchsize

Tilhører slettejobbet. Angiver den maksimale antal cpr numre, som behandles per gang 

Ja
deletion.desired.execution.duration

Tilhører slettejobbet. Angiver den maksimale udførelsestid for baggrundsjobbet. Angives som Duration i ISO-8601 formattet. 

Ja

deletion.save.deceased

Tilhører slettejobbet. Angiver periode på, hvor længe en person minimum skal være død for at blive slettet. 
Formattet er D for dage, M for måneder og Y for år.
Nogle eksempler: 2Y er 2 år, 12M er 12 måneder og 60D er 60 dage. 

Ja

deletion.save.deceased.digital.post

Tilhører slettejobbet. Angiver periode på, hvor længe en person minimum skal være død for at vedkommendes digital post skal slettes. Man vil typisk sætte den til 0 dage, da man ikke ønsker at sende digital post ud til afdøde personer. 
Formattet er D for dage, M for måneder og Y for år.
Nogle eksempler: 2Y er 2 år, 12M er 12 måneder og 60D er 60 dage. 

ja

deletion.patient.id.source.cpr

Tilhører slettejobbet. Angiver den patient id source, som cpr numre gemmes med i databasen. 

Ja

digitalpost.fgvhr.schedule.period

Tilhører digital post integrationen. Angiver, hvor lang tid scheduleret letter skal ligge inden det sendes som påmindelse.
Formattet er D for dage, M for måneder og Y for år.
Nogle eksempler: 2Y er 2 år, 12M er 12 måneder og 60D er 60 dage. 

ja1Y

digitalpost.fgvhr.url

Tilhører digital post integrationen. Dette er det endpoint, som Triforks mail komponent skal nåes på.

!! For at anvende komponenten skal man være ip whitelistet og tilgå komponenten vha. 2-vejs TLS

Ja

digitalpost.fgvhr.schedule.error.period

Tilhører digital post afsendelses baggrundsjobbet. Angiver, hvor lang tid, der lægges til afsendelsesperioden for et letter, hvis der skulle opstår en fejl i forbindelse med en afsendelse. Dvs. hvor længe der skal gå indtil letter skal forsøges afsendt igen.

Formattet er D for dage, M for måneder og Y for år.
Nogle eksempler: 2Y er 2 år, 12M er 12 måneder og 60D er 60 dage. 

Ja2D

digitalpost.fgvhr.unsent.error.period

Tilhører digital post afsendelses baggrundsjobbet. Angiver, hvor lang tid et brev, som er nået tidspunkt for afsendelse, må ligge uden at blive sendt. Dette sker, når baggrundsjobbet ikke kører eller aldrig når til brevet.

Formattet er D for dage, M for måneder og Y for år.
Nogle eksempler: 2Y er 2 år, 12M er 12 måneder og 60D er 60 dage. 

Ja

digitalpost.fgvhr.send.limit

Tilhører digital post afsendelses baggrundsjobbet. Angiver det maksimale antal records, det hentes ud fra databasen fra letter tabellen ad gangen.

Ja100

digitalpost.fgvhr.send.desired.execution.duration

Tilhører digital post afsendelses baggrundsjobbet. Angiver den maksimale udførelsestid for baggrundsjobbet. Angives som Duration i ISO-8601 formattet. 

JaPT20S

digitalpost.fgvhr.error.tolerance

Tilhører digital post afsendelsesbaggrundsjobbet. Angiver hvor mange letters der må ligge i databasen med fejl, før det meldes som en alarm.

Nej0

digitalpost.fgvhr.confirm.register.consent.digital.template

Tilhører digital post afsendelsesbaggrundsjobbet. Angiver den digitale brevskabelon der anvendes for at bekræfte registrering af fravalg.

Jahttp://pdf.nspop.dk/fgvhr/20241001/digital/BekraeftelseRegistreringFravalg

digitalpost.fgvhr.confirm.register.consent.physical.template

Tilhører digital post afsendelsesbaggrundsjobbet. Angiver den fysiske brevskabelon der anvendes for at bekræfte registrering af fravalg.

Jahttp://pdf.nspop.dk/fgvhr/20241001/physical/BekraeftelseRegistreringFravalg

digitalpost.fgvhr.confirm.delete.consent.digital.template

Tilhører digital post afsendelsesbaggrundsjobbet. Angiver den digitale brevskabelon der anvendes for at bekræfte sletning af fravalg.

Jahttp://pdf.nspop.dk/fgvhr/20241001/digital/BekraeftelseFortrydelseFravalg

digitalpost.fgvhr.confirm.delete.consent.physical.template

Tilhører digital post afsendelsesbaggrundsjobbet. Angiver den fysiske brevskabelon der anvendes for at bekræfte sletning af fravalg.

Jahttp://pdf.nspop.dk/fgvhr/20241001/physical/BekraeftelseFortrydelseFravalg

digitalpost.fgvhr.reminder.digital.template

Tilhører digital post afsendelsesbaggrundsjobbet. Angiver den digitale brevskabelon der anvendes til den årlige påmindelse om, at man har registreret et fravalg.

Jahttp://pdf.nspop.dk/fgvhr/20241001/digital/PaamindelseRegistreringFravalg

digitalpost.fgvhr.reminder.physical.template

Tilhører digital post afsendelsesbaggrundsjobbet. Angiver den fysiske brevskabelon der anvendes til den årlige påmindelse om, at man har registreret et fravalg.

Jahttp://pdf.nspop.dk/fgvhr/20241001/physical/PaamindelseRegistreringFravalg

minlogclient.properties

FGVHR anvender MinLogProvider til at registrere logninger i MinLog, og i den forbindelse skal Kafka properties for MinLog konfigureres. 

PropertyBeskrivelseDefault værdi
kafka.producer.bootstrap.serversUrl til Kafka bootstrap-server.kafka:9092
kafka.producer.client.idId der anvendes af Kafka producere i løsningen.FGVHRMinLog2-producer
kafka.producer.key.serializerSerializer key for Kafka producerorg.apache.kafka.common.serialization.StringSerializer
kafka.producer.value.serializerSerializer value for Kafka producerorg.apache.kafka.common.serialization.StringSerializer
kafka.topicNavn på Kafka topicFGVHR_TOPIC

log4j konfiguration

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

Se yderligere opsætning i installationsvejledningen.

Overvågning

Der udstilles statussider, som kan tilgås fra adresserne i afsnittet Komponenter

Fortolkning af statussider

Statussiderne returnerer enten:

  • HTTP 200, hvis servicen i øjeblikket kører fint.
  • HTTP 503, 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

FGVHRregisterConsentPersonligpatient-idBorgerens id
FGVHRregisterConsentPersonligpatient-id-sourceId'ens kilde, fx "CPR"
FGVHRregisterConsentIkke personligactor-roleAktørens rolle
FGVHRregisterConsentIkke personligactor-idAktørens id. Vil i praksis være det samme some patient-id.
FGVHRregisterConsentIkke personligactor-id-sourceId'ens kilde, fx "CPR"
FGVHRregisterConsentFølsomconsent-statusStatus på samtykke. Kan være "ACTIVE", "INACTIVE" eller "ENTERED-IN-ERROR".
FGVHRregisterConsentPersonligvalid-fromAntal dage til hvornår samtykke træder i kraft
FGVHRregisterConsentPersonligcitizen-created-dateHvornår borgeren har underskrevet blanketten, hvis registreringen kommer fra blanket.
FGVHRdeleteConsentPersonligpatient-idBorgerens id
FGVHRdeleteConsentPersonligpatient-id-sourceId'ens kilde, fx "CPR"
FGVHRdeleteConsentIkke personligactor-roleAktørens rolle
FGVHRdeleteConsentIkke personligactor-idAktørens id. Vil i praksis være det samme some patient-id.
FGVHRdeleteConsentIkke personligactor-id-sourceId'ens kilde, fx "CPR"
FGVHRdeleteConsentFølsomconsent-statusStatus på samtykke. Kan være "ACTIVE", "INACTIVE" eller "ENTERED-IN-ERROR".
FGVHRgetConsentPersonligpatient-idBorgerens id
FGVHRgetConsentPersonligpatient-id-sourceId'ens kilde, fx "CPR"
FGVHRupdateConsentPersonligpatient-idBorgerens id
FGVHRupdateConsentPersonligpatient-id-sourceId'ens kilde, fx "CPR"
FGVHRupdateConsentIkke personligactor-roleAktørens rolle
FGVHRupdateConsentIkke personligactor-idAktørens id. Vil i praksis være det samme some patient-id.
FGVHRupdateConsentIkke personligactor-id-sourceId'ens kilde, fx "CPR"
FGVHRupdateConsentFølsomconsent-statusStatus på samtykke. Kan være "ACTIVE", "INACTIVE" eller "ENTERED-IN-ERROR".
FGVHRupdateConsentPersonligvalid-fromAntal dage til hvornår samtykke træder i kraft
FGVHRdigitalPostSentPersonligpatient-idBorgerens id
FGVHRdigitalPostSentPersonligpatient-id-sourceId'ens kilde, fx "CPR"
FGVHRdigitalPostSentNonPersonalInformationdigital-post-uuidUuid der blev returneret fra Digital Post komponenten


GetConsent eksempel
{
    "time": "2023-09-07T07:32:59.492Z",
    "category": "dk.sds.nsp.audit.log.fgvhr",
    "audit": {
        "timestamp": "2023-09-07T09:32:59.429+02:00",
        "components": [
            {
                "component": "FGVHR",
                "contexts": [
                    {
                        "context": "getConsent",
                        "information": [
                            {
                                "key": "patient-id",
                                "type": "RPI",
                                "value": "0108501234"
                            },
                            {
                                "key": "patient-id-source",
                                "type": "RPI",
                                "value": "CPR"
                            }
                        ]
                    }
                ]
            }
        ]
    },
    "access": {
        "code": 200,
        "duration": 17,
        "httpHeaders": {
            "Content-Type": "text/xml;charset=UTF-8",
            "SOAPAction": "GetConsent"
        },
        "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": "0511804817",
            "dk:gov:saml:attribute:SpecVer": "DK-SAML-2.0"
        },
        "method": "POST",
        "path": "/fgvhr/20230601/service",
        "query": "",
        "port": 8080,
        "protocol": "http",
        "reqSize": 12257,
        "resSize": 642,
        "soapHeaders": {
            "Audience": "https://fsk",
            "Issuer": "TEST1-NSP-STS",
            "NameID": "dk:gov:saml:attribute:CprNumberIdentifier:0511804817",
            "w3Action": "GetConsent",
            "w3MessageID": "a0952bbd-40c2-46e4-835f-614843f48dbd"
        },
        "threadId": "default task-1",
        "time": "2023-09-07T09:32:59.429+02:00",
        "stats": {
            "handlerDuration": 44,
            "RequestContentDuration": 0,
            "ResponseContentDuration": 0,
            "SecurityProtocolRequestDuration": 8,
            "SecurityProtocolResponseDuration": 34,
            "bufferAllocated": false,
            "usedBuffers": 2,
            "activeBuffersInPool": 2,
            "idleBuffersInPool": 0
        }
    }
}

Baggrundsjobs

NAS adviseringsjob

Baggrundsjobbet har til formål at sende alle ikke-afsendte NAS-adviseringer, der er oprettet på baggrund af ændring i borgeres fravalg. Adviseringer lagres i tabellen "unsent_notifications".

Baggrundsjobbet startes med et HTTP GET kald til

<serverurl>/fgvhr-operations/nas-notification-job

Jobbet konfigureres med parametrene beskrevet i afsnittet "Servicekonfiguration".

Jobbets seneste status kan aflæses på komponentens statusside. Detaljer om de enkelte kørsler (antal rækker behandlet mm.) skrives direkte til komponentens log-fil. 

Slettejob

Detaljer omkring de forskellige trin slettejobbet har, kan findes i FGVHR Design og arkitektur dokumentet.

Servicens slettejob bliver afviklet vha. en udstillet RestController, som kaldes vha. simpelt HTTP GET kald til:

<serverurl>/fgvhr-operations/cleanup-fgvhr/start

Driften vedligeholder en cron, som kalder slettejobbets url i et fast mønster vha. curl.


Slettejobbet status kan ses, vha. HTTP GET kald til:

<serverurl>/fgvhr-operations/cleanup-fgvhr/status

Endpointet kan svare følgende

    • Httpkode 200 og Database: OK 
    • Httpkode 500 og Database: Unavailable


Slettejobbets alarmer kan ses, vha. HTTP GET kald til:

<serverurl>/fgvhr-operations/cleanup-fgvhr/alarm

Er servicens sund returneres httpkode 200 ellers 500 og en eller flere alarm linier:

    • Person Information servicen har fejlet flere gange end tilladt i en given periode.
    • Baggrundsjobbet  FGVHR Cleanup fejlede sidst det blev kørt. Problemet var:  <reason>.
    • Der er ingen forbindelse til databasen med JNDI navnet <name of jndi>


Man kan ændre styring af slettejobbet ved at ændre følgende parametre:

  • deletion.desired.execution.duration=PT20S
    Det er en max grænse for hvor lang tid jobbet må køre pr. gang. Når jobbet har kørt den tid der er angivet, så stopper udførslen. Her efter kan jobbet kaldes igen og den vil fortsætte med processeringen hvor jobbet stoppede sidst.
    Parameteren angives som en Duration i ISO-8601 format. Dvs. eksemplet viser 20 sekunder.
  • deletion.fgvhr.batchsize=1000
    Det er en max grænse for, hvor mange cpr numre, der håndteres af gangen. Blandt andet i forbindelse med kald til PersonInformation deceased og den videre sletning af fgvhr.
  • deletion.save.deceased=12M
    Angiver hvor lang tid en person skal være død for at vedkommenens fravalg bliver slettet
  • deletion.save.deceased.digital.post=0D
    Angiver hvor lang tid en person skal være død for at vedkommenens digital post bliver slettet. Typisk skal det slettes med det samme.
  • deletion.patient.id.source.cpr=urn:oid:1.2.208.176.1.2
    Anvendes til at finde de records ud, som skal kontrolleres vha. PatientInformationService om personerne er afdøde. Der skal kun undersøges af de records, som er cpr numre.

Digital post afsendelse

Detaljer omkring de forskellige trin baggrundsjobbet har, kan findes i FGVHR Design og arkitektur dokumentet.

Servicens slettejob bliver afviklet vha. en udstillet RestController, som kaldes vha. simpelt HTTP GET kald til:

<serverurl>/fgvhr-operations/fgvhr-send-digitalpost/start

Driften vedligeholder en cron, som kalder jobbets url i et fast mønster vha. curl.


Ved aktivering er en del af handlingen at kalde over til digital post komponent.

Denne komponent anvender brevskabeloner, som skal være synkroniseret mellem de 2 komponenter. 

Ved kald til den Digitale Post Komponent, er der adgangskontrol. Det sker via 2-vejs TLS samt en IP-whitelisting, som skal ske afkoblet i NSP miljøerne via netværksinfrastrukturen.

Returnerer kaldet til Digital Post Komponent en fejl opdateres letter tabellen i databasen i dens error_counter og last_error. Returnerer kaldet til Digital Post Komponent fejl, kan detaljer omkring disse ses som error log i applikationsloggen.. Returnerer kaldet til Digital Post Komponent warnings, kan disse ses som warning log i applikationsloggen.


Jobbets status kan ses, vha. HTTP GET kald til:

<serverurl>/fgvhr-operations/fgvhr-send-digitalpost/status

Endpointet kan svare følgende

    • Httpkode 200 og Database: OK 
    • Httpkode 500 og Database: Unavailable


Jobbets alarmer kan ses, vha. HTTP GET kald til:

<serverurl>/fgvhr-operations/fgvhr-send-digitalpost/alarm

Er servicens sund returneres httpkode 200 ellers 500 og en eller flere alarm linier:

    • Person Information servicen har fejlet flere gange end tilladt i en given periode.
    • Baggrundsjobbet FGVHR Digital Post forsendelse fejlede sidst det blev kørt. Problemet var <reason>
    • Der er ingen forbindelse til databasen med JNDI navnet <name of jndi>
    • Database tabellen letter har flere records med error_counter højere end tilladt. Det nuværende antal er <count>.
    • Database tabellen letter har breve som er usendte i en længere periode en tilladt. Perioden er: <period>. Det nuværende antal er: <count>
    • Følgende fejl er forekommet for letter <uuid>: <error>
    • Følgende fejl er forekommet for letter <uuid> og <count> andre: <error>*

*) hvis flere uuid'er skrives alle uuid'er til applikationsloggen.


Man kan ændre styring af jobbet ved at ændre følgende parametre:

  • digitalpost.fgvhr.schedule.error.period=2D
    Hvis der ved afsendelse af et letter opstår en fejl, rescheduleres letter med denne periode. Eksemplet viser 2 dage
  • digitalpost.fgvhr.send.limit=100
    Det antal af letters, som hentes ud af databasen ad gangen. Eksemplet henter 100.
  • digitalpost.fgvhr.send.desired.execution.duration=PT20S
    Det er en max grænse for hvor lang tid jobbet må køre pr. gang. Når jobbet har kørt den tid der er angivet, så stopper udførslen. Her efter kan jobbet kaldes igen og den vil fortsætte med processeringen hvor jobbet stoppede sidst.
    Parameteren angives som en Duration i ISO-8601 format. Dvs. eksemplet viser 20 sekunder.
  • digitalpost.fgvhr.error.tolerance=0
    Angiver hvor mange letters der må ligge i databasen med fejl, før det meldes som en alarm. Eksemplet viser, at er der bare een letter med fejl, skal der rejses en alarm
  • digitalpost.fgvhr.unsent.error.period=1D
    Angiver hvor gamle (målt på sendAt) letters må være i databasen, før det meldes som en alarm. Eksemplet viser, at et letter må ligge een dag
  • deletion.desired.execution.duration=PT20S
    Det er en max grænse for hvor lang tid jobbet må køre pr. gang. Når jobbet har kørt den tid der er angivet, så stopper udførslen. Her efter kan jobbet kaldes igen og den vil fortsætte med processeringen hvor jobbet stoppede sidst.
    Parameteren angives som en Duration i ISO-8601 format. Dvs. eksemplet viser 20 sekunder.
  • deletion.fgvhr.batchsize=1000
    Det er en max grænse for, hvor mange cpr numre, der håndteres af gangen. Blandt andet i forbindelse med kald til PersonInformation deceased og den videre sletning af fgvhr.
  • deletion.save.deceased=12M
    Angiver hvor lang tid en person skal være død for at vedkommenens fravalg bliver slettet
  • deletion.patient.id.source.cpr=urn:oid:1.2.208.176.1.2
    Anvendes til at finde de records ud, som skal kontrolleres vha. PatientInformationService om personerne er afdøde. Der skal kun undersøges af de records, som er cpr numre.


  • No labels