Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: SDS-5884

...

Notificeringer i NAS

I forbindelse med skriveoperationer i SKR (oprettelse, opdateringer og sletninger) sker der en notificering via NAS. Se evt. NAS 2.0 Anvenderguide.

De enkelte notificeringer indholder ikke detaljer vedr. opdateringen eller stamkortet, men udelukkende oplysninger om det cprnummer, for hvilket opdateringen har fundet sted. Det er efterfølgende op til anvenderen at hente det opdaterede stamkort ud via snitfladerne.

...


Følgende er et eksempel på en opdateringsnotificering:

...


Topic der anvendes: http://sundhedsdatastyrelsen.dk/PersonalDataCard/2020/11/01:DataCardUpdated

...

Denne snitflade muliggør at data kan opdateres asynkront på baggrund af et systemkald. Snitfladen understøtter niveau 3 ID-kort, via OCES funktionscertifikater (FOCES), samt niveau 4 ID-kort.
Snitfladen udstiller en enkelt operation, der tillader at enten oprettes borgerens stamdata, stamdata redigeres eller stamdata slettes. Det er ikke muligt at læse via denne snitflade, dertil skal eksisterende snitflader benyttes.

Opdatering:

Opdatering foregår ved at anvenderen sender sin lokale kopi indeholdene alt information fra stamkortregisteret, som anvenderen tidligere har synkroniseret, til ”savadatacard” webservicen. Bemærk, alle information fra stamkortregisteret pånær dataenterer information skal medsendes ved hvert opdateringsrequest.
Webservicen har derved til ansvar at lave hhv. de oprettelser, opdateringer og sletninger der er sket på data, ved at sammenligne det indsendte med eksisterende data i stamkortregisteret.
Det skal ikke være nødvendigt at sende "dataenterer" tilbage på de elementer der ikke er opdateret, resten af informationen skal dog kunne verificeres af servicen.

Servicen svarer ”200 ok” hvis alt er vel, eller giver en sigende fejlkode tilbage.

Opdateringstidspunkt:

Hvert element (som beskrevet i skrdatacardservice.xsd) har et opdateringstidspunkt. Serviceanvenderen skal opgive sit eget seneste synkroniseringstidspunkt for elementet i ”lastupdated” som er et datatime element i formatet yyyymmddhhmmss+zzzz. Der er ikke millisekunders præcision på dette tidsstempel.

Hvis servertidspunktet for elementet har ændret sig siden den sidste lokale synkronisering/kopi, vil en fejlkode 900 blive returneret, og information fra stamkortregisteret skal genindlæses af anvenderen. Der bliver i det tilfælde ikke opdateret nogle elementer fra stamkortregisteret.

Sletning:

Hvert element (som beskrevet i skrdatacardservice.xsd) kan slettes af borgeren, anvenderen skal udfylde ”tobeDeleted” og sætte værdien til true. Anvenderens seneste synkroniseringstidspunkt for elementet der forsøges slettet, skal ligeledes angives i ”lastupdated”.

Hvis servertidspunktet for elementet har ændret sig siden den sidste lokale kopi, vil en fejlkode 900 blive returneret, og information fra stamkortregisteret skal genindlæses. Der bliver i det tilfælde ikke slettet nogle elementer fra stamkortregisteret.

Code Block
titleSaveDataCard.xsd
collapsetrue
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema xmlns:hl7="urn:hl7-org:v3" xmlns:skr="urn:hl7-org:skr" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://sundhedsdatastyrelsen.dk/skr/2022/02/10">
    <xs:import schemaLocation="http://wsdl.nspop.dk/skr-service/schema/cda/POCD_MT000040_SDTC.xsd" namespace="urn:hl7-org:v3"/>

    <xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="SaveDataCardRequest">
        <xs:complexType>
            <xs:sequence>
                <!-- cprnr -->
                <xs:element name="id" type="hl7:II" minOccurs="1" maxOccurs="1"/>
                <xs:element name="contactInformation" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="contactInformation" type="ContactInformationType" minOccurs="1" maxOccurs="1"/>
                        </xs:sequence>     
                    </xs:complexType>
                </xs:element>
                <xs:element name="relatedPersons" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="relatedPerson" type="RelatedPersonType" minOccurs="1" maxOccurs="unbounded"/>
                        </xs:sequence>     
                    </xs:complexType>
                </xs:element>
                <xs:element name="temporaryAddress" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="temporaryAddress" type="TemporaryAddressType" minOccurs="1" maxOccurs="1"/>
                        </xs:sequence>     
                    </xs:complexType>
                </xs:element>
                <xs:element name="language" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="language" type="LanguageType" minOccurs="1" maxOccurs="1"/>
                        </xs:sequence>     
                    </xs:complexType>
                </xs:element>
                <xs:element name="healthProvider" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="healthProvider" type="HealthProviderType" minOccurs="1" maxOccurs="1"/>
                        </xs:sequence>     
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element xmlns:xs="http://www.w3.org/2001/XMLSchema" name="SaveDataCardRequestResponse">
        <xs:complexType>
            <xs:sequence></xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="NoteType">
        <xs:restriction base="xs:string">
            <xs:maxLength value="1000"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="RelatedPersonType">
        <xs:sequence>
            <!-- UUID -->
            <xs:element name="id" type="hl7:II" minOccurs="0" maxOccurs="1"/>
            <!-- Sidst opdateret dato/tid da den pårørende blev hentet fra Fælles Stamkort-->
            <xs:element name="lastupdated" type="xs:dateTime"/> 
            <xs:element name="associatedEntity" type="hl7:POCD_MT000040.AssociatedEntity" minOccurs="1" maxOccurs="1"/>
            <xs:element name="relationshipType" type="hl7:CD" minOccurs="1" maxOccurs="1"/>
            <xs:element name="note" type="NoteType" minOccurs="0" maxOccurs="1"/>
            <xs:element name="dataEnterer" type="hl7:POCD_MT000040.Author" minOccurs="0" maxOccurs="1"/>
            <xs:element name="tobeDeleted" type="xs:boolean" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="TemporaryAddressType">
        <xs:sequence>
            <!-- UUID -->
            <xs:element name="id" type="hl7:II" minOccurs="0" maxOccurs="1"/>
            <!-- Sidst opdateret dato/tid da den midlertidige adresse blev hentet fra Fælles Stamkort-->
            <xs:element name="lastupdated" type="xs:dateTime"/> 
            <xs:element name="addr" type="hl7:AD" minOccurs="1" maxOccurs="1"/>
            <xs:element name="dataEnterer" type="hl7:POCD_MT000040.Author" minOccurs="0" maxOccurs="1"/>
            <xs:element name="tobeDeleted" type="xs:boolean" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="LanguageCodeStringType">
        <xs:restriction base="xs:string">
            <xs:maxLength value="2"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="LanguageCodeType">
        <xs:simpleContent>
            <xs:extension base="LanguageCodeStringType">
                <xs:attribute name="codeSystem" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="LanguageType">
        <xs:sequence>
            <!-- UUID -->
            <xs:element name="id" type="hl7:II" minOccurs="0" maxOccurs="1"/>
            <!-- Sidst opdateret dato/tid da sprog blev hentet fra Fælles Stamkort-->
            <xs:element name="lastupdated" type="xs:dateTime"/> 
            <xs:element name="languageCode" type="LanguageCodeType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="dataEnterer" type="hl7:POCD_MT000040.Author" minOccurs="0" maxOccurs="1"/>
            <xs:element name="tobeDeleted" type="xs:boolean" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:element name="language" type="LanguageType"/>
    <xs:complexType name="ContactInformationType">
        <xs:sequence>
            <!-- Sidst opdateret dato/tid da kontaktinformation blev hentet fra Fælles Stamkort-->
            <xs:element name="lastupdated" type="xs:dateTime"/> 
            <xs:element name="telecom" type="hl7:TEL" minOccurs="0" maxOccurs="3"/>
            <xs:element name="dataEnterer" type="hl7:POCD_MT000040.Author" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="HealthProviderType">
        <xs:sequence>
            <!-- UUID -->
            <xs:element name="id" type="hl7:II" minOccurs="0" maxOccurs="1"/>
            <!-- Sidst opdateret dato/tid da tandlæge blev hentet fra Fælles Stamkort-->
            <xs:element name="lastupdated" type="xs:dateTime"/> 
            <xs:element name="providerType" type="hl7:CD" minOccurs="1" maxOccurs="1"/>
            <!-- type, f.eks. tandlæge -->
            <xs:element name="organization" type="hl7:POCD_MT000040.Organization" minOccurs="1" maxOccurs="1"/>
            <!-- tandlæge, givet ved enten ydernr eller SOR-id (institutionsejer) -->
            <xs:element name="dataEnterer" type="hl7:POCD_MT000040.Author" minOccurs="0" maxOccurs="1"/>
            <xs:element name="tobeDeleted" type="xs:boolean" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
</xs:schema>


Til SaveDatacard-snitfladen er der følgende wsdl fil:

...

WSDL-filer
Stamkortregister DGWS
<server>/skr/wsdl/dgws20190801
Stamkortregister IDWS
<server>/skr/wsdl/idws20190801
Stamkortregister DGWS<server>/skr/wsdl/dgws20200728
Stamkortregister IDWS<server>/skr/wsdl/idws20200728

...

<server>/skr/wsdl/idws20200728


Valideringsbeskeder

Fejlkoder:

Webservicen følger ”Den Gode Webservice 1.0.1” hvilket betyder at fejlkoder, erklæres i faultelementet ”dgwsfault”, som specificerer indholdet af detail elementet for soap:Fault. I DGWS er detail elementet altid en medcom:FaultCode, der indeholder fejlkoden fra ”den gode webservice” som specificeret i deres ”Response-dataliste” eller en webservicespecifik kode.

Ved valideringsfejl for et request til SKR returneres der en fejlbesked, som indeholder en kode og overdnet tekst samt detaljer for fejlen. 
Eksempel: 200: Fejl i request i forbindelse med oprettelse af pårørende, Detaljer: Påkrævet element mangler: relatedPerson.associatedEntity.associatedPerson.name.given.

Nedenfor er de mulige fejlbeskeder beskrevet. Første tabel indeholder de overordnede fejlbeskeder og tilhørende fejlkoder, mens tabellen derunder indeholder de fejlbeskeder, der beskriver detaljer for fejlen.

For webservicespecifikke koder er der følgende, som alle pakkes ind i ”skr:FaultCode”:

Valideringsbeskeder

KodeBesked
100Der opstod en fejl-
101Der opstod en fejl i forbindelse med hent stamkortDer gives en undtagelse, når du kalder tjenesten GetPersonalDataCard. Undtagelse er inkluderet i fejlmeddelelse
102Ingen data fundet-
200Fejl i request i forbindelse med oprettelse af pårørendeNår du opretter slægtninge med CreateRelatives-servicemetoden, findes den givne Uuid i serviceanmodningen for Relative ikke fundet. Undtagelse er smidt, når du kalder CreateRelatives servicemetode, undtagelse er knyttet til fejlmeddelelse
201Intern fejl i forbindelse med oprettelse af pårørendeUndtagelse er smidt, når du kalder CreateRelatives servicemetode, undtagelse er knyttet til fejlmeddelelse
210Fejl i request i forbindelse med ændring af pårørendeUndtagelse er smidt, når du kalder CreateRelatives servicemetode, undtagelse er knyttet til fejlmeddelelse
211Intern fejl i forbindelse med ændring af pårørendeUndtagelse er kastet, når du kalder UpdateRelatives servicemetode, undtagelse er knyttet til fejlmeddelelse
220Fejl i request i forbindelse med sletning af pårørendeNår du sletter pårørende med DeleteRelatives servicemetode, findes det angivne RelativeId i serviceanmodningen for Relative ikke fundet. Undtagelse er smidt, når du kalder CreateRelatives servicemetode, undtagelse er knyttet til fejlmeddelelse
221Intern fejl i forbindelse med sletning af pårørendeUndtagelse er smidt, når du kalder DeleteRelatives servicemetode, undtagelse er knyttet til fejlmeddelelse
230Fejl i request i forbindelse med oprettelse af sprogNår du opretter et sprog med CreateLanguage-tjenestemetoden, konstateres det, at den givne sprogkode ikke eksisterer i databasen
231Intern fejl i forbindelse med oprettelse af sprog

Undtagelse er kastet, når du kalder CreateLanguage servicemetode, undtagelse er knyttet til fejlmeddelelse

240Fejl i request i forbindelse
med ændring af sprog
med ændring af sprogVed opdatering af sprog med UpdateLanguage-tjenestemetoden konstateres det, at det givne sprog mangler eller allerede eksisterer for en person. Undtagelse er kastet, når du kalder UpdateLanguages servicemetode, undtagelse er knyttet til fejlmeddelelse
241Intern fejl i forbindelse med ændring af sprogUndtagelse er kastet, når du kalder UpdateLanguage service metode, undtagelse er knyttet til fejlmeddelelse
250Fejl i request i forbindelse med sletning af sprogNår du sletter Language med DeleteLanguage-tjenestemetoden, konstateres det, at det givne LanguageId mangler eller eksisterer ikke. Undtagelse kastes, når DeleteLanguage-tjenestemetoden kaldes, undtagelse er knyttet til fejlmeddelelsen
251Intern fejl i forbindelse med sletning af sprogUndtagelse kastes, når DeleteLanguage-tjenestemetoden kaldes, undtagelse er knyttet til fejlmeddelelsen
260Fejl i request i forbindelse med oprettelse af midlertidig adresseNår du opretter TempraryAddress med CreateTemporaryAddress-tjenestemetoden, konstateres det, at den givne adresse allerede eksisterer, der er en anden TemporaryAddres, eller tidsperioden for TempraryAddres er forkert. Undtagelse er kastet, når du kalder CreateTemporaryAddress-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
261Intern fejl i forbindelse med oprettelse af midlertidig adresseUndtagelse er kastet, når du kalder CreateTemporaryAddress-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
270Fejl i request i forbindelse med ændring af midlertidig adresseNår man opdaterer TempraryAddress med UpdateTemporaryAddress-tjenestemetoden, konstateres det, at den givne adresse allerede eksisterer, der er en anden TemporaryAddress, eller tidsperioden for TempraryAddress er forkert. Undtagelse er kastet, når du kalder UpdateTemporaryAddress-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
271Intern fejl i forbindelse med
ændring af midlertidig adresse
ændring af midlertidig adresseUndtagelse er kastet, når du kalder UpdateTemporaryAddress-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
280Fejl i request i forbindelse med sletning af midlertidig adresseNår du sletter TempraryAddress med DeleteTemporaryAddress-tjenestemetoden, konstateres det, at den angivne adresse er tom eller ikke eksisterer. Undtagelse er kastet, når du kalder DeleteTemporaryAddress-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
281Intern fejl i forbindelse med sletning af midlertidig adresseUndtagelse er kastet, når du kalder DeletieTemporaryAddress-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
290Fejl i request i forbindelse med oprettelse af tandlægeNår du opretter HealthProvider med CreateHealthProvider-tjenestemetoden, konstateres det, at den givne HealthProvider ikke eksisterer, eller en anden HealthProvider eksisterer allerede. Undtagelse er kastet, når DeleteLanguages servicemetode kaldes, undtagelse er knyttet til fejlmeddelelse
291Intern fejl i forbindelse med oprettelse af tandlægeUndtagelse er smidt, når du kalder CreateHealthProvider-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
300Fejl i request i forbindelse med ændring af tandlægeNår du opdaterer HealthProvider med UpdateHealthProvider-servicemetoden, konstateres det, at der ikke er nogen HealthProvider at opdatere, eller også eksisterer den HealthcareProvider, der er sendt i anmodningen, allerede. Undtagelse er kastet, når du kalder UpdateHealthProvider service metode, undtagelse er knyttet til fejlmeddelelse
301Intern fejl i forbindelse med ændring
af tandlæge310Fejl i request i forbindelse med sletning af tandlæge
af tandlægeUndtagelse er kastet, når du kalder UpdateHealthProvider service metode, undtagelse er knyttet til fejlmeddelelse
310Fejl i request i forbindelse med sletning af tandlægeNår du sletter HealthProvider med DeleteHealthProvider-tjenestemetoden, konstateres det, at det givne HealthProviderId er tomt, eller der er ingen nuværende HealthProvider at slette. Undtagelse er kastet, når du kalder DeleteHealthProvider-servicemetoden, undtagelse er knyttet til fejlmeddelelsen
311Intern fejl i forbindelse med sletning af tandlægeUndtagelse er kastet, når du kalder DeleteHealthProvider-servicemetoden, undtagelse er knyttet til fejlmeddelelsen
320Fejl i request i forbindelse med ændring af kontaktinformationNår du opdaterer ContactInformation med UpdateContactInformation-tjenestemetoden, er en af anmodningsattributterne ikke i det forventede format. For eksempel er telefonnummeret større end den maksimale længde (45 tegn)
321Intern fejl i forbindelse med ændring af kontaktinformationUndtagelse er kastet, når du kalder UpdateContactInformation service metode, undtagelse er knyttet til fejlmeddelelse
400Fejl i request i forbindelse med gem datacard

Et af følgende elementer for Relative i serviceanmodningen er tomt (Relative.ServiceActor, TempAddress.ServiceActor, Language.ServiceActor, HealthProvider.ServiceActor, ContactInformation.ServiceActor)

Den givne slægtning i anmodningen om at gemme eller opdatere tjenesten er ikke til stede.

401Intern fejl i forbindelse med gem datacardUndtagelse er kastet, når saveDataCard kaldes (undtagelse er knyttet til fejl). Hvis pårørende givet til sletning ikke er til stede
410Borgerens kontaktoplysninger eksisterer i forvejenNår du validerer mod eksisterende kontaktoplysninger, konstateres det, at de givne kontaktoplysninger i anmodningen allerede eksisterer.
420Borgerens midlertidige adresse eksisterer i forvejenVed validering mod eksisterende adresse findes den givne adresse i anmodningen allerede.
430Borgerens sprog eksisterer i forvejen
440Borgerens tandlæge eksisterer i forvejen
Når man validerer mod eksisterende sprog, konstateres det, at det givne sprog i anmodningen allerede eksisterer.
440Borgerens tandlæge eksisterer i forvejenVed validering mod eksisterende tandlæge konstateres det, at den givne tandlæge i anmodningen allerede eksisterer.
500Ugyldig sikkerhedsbilletNår du validerer SccurityTicket, konstateres det, at billetten mangler eller er ugyldig
501Adgang til CPR-nummeret ikke tilladtBrugeren har ikke tilladelse til at kalde den specifikke servicemetode
502CPR-nummer angivet som DataEnterer i request matcher ikke CPR-nummer i certifikatDet CPR-nummer, der er angivet i serviceanmodningen, stemmer ikke overens med det certifikat, der blev brugt til at ringe til tjenesten
503CVR-nummer er ikke whitelisted til DGWS niveau 3 kald på denne operationCVR-nummer er ikke whitelisted
504Delegering ikke tilladtActingUser er en HealthcareProfessional, men ingen PrincipalUser er til stede
505CVR nummer ikke fundet i sikkerhedsbillettenDer findes ingen CVR i sikkerhedsbilletten, der bruges til at ringe til tjenesten
506Bruger skal være identificeret ved CPR nummerUserIdentifier er ikke i CPR-format
507

Brugertype kunne ikke bestemmes udfra sikkerhedsbillet

-
508Forkert audience i sikkerhedsbilletDet angivne publikum har ikke tilladelse til at bruge tjenesten
509Ingen gyldig bruger type identificeretIngen ActingUser og ingen organisation er til stede i den medfølgende sikkerhedsbillet
510Delegering ikke tilladt, da ingen relation angivet mellem borgere kunne bestemmesDer er ikke fundet nogen delegationsrelation mellem den person, der er angivet i sikkerhedsbilletten og CPR for den person, der er angivet i serviceanmodningen
800Fejl i request i forbindelse med migrering af stamkortFælles Stamkort er verificeret af borgeren
801Intern fejl i forbindelse med migrering af stamkortUndtagelse er kastet, når du kalder MigratePersonalDataCard-tjenestemetoden, undtagelse er knyttet til fejlmeddelelsen
802Der opstod en fejl i forbindelse med migrering af stamkort-
810Fejl i request i forbindelse med migrering af stamkortDer eksisterer et telefonnummer af type hjemme i forvejen
820Fejl i request i forbindelse med migrering af stamkortBorgerens sprog eksisterer i forvejen
830Fejl i request i forbindelse med migrering af stamkortBorgerens TempAddress findes allerede
900Tidsstempel matcher ikke allerede gemt dataTidsstemplet i serviceanmodningen for opdatering stemmer ikke overens med det tidspunkt, hvor data sidst blev opdateret. Dette gælder elementer: ContactInfo, Pårørende, Sprog, TempAddress og HealthProvider.

Detaljer for valideringsbeskeder:

...