NgDP: Der er et problem med MeMoLib og ContentData som indeholde CVR- og CPRnumre (december 2021)
MeMoLib - hvad er det
MeMoLib er et kodebibliotek der findes i udgaver til både .Net og i Java. Udviklet af NetCompany i forbindelse med udviklingen af platformen til det nye Digital Post (NgDP).
Her findes de to biblioteker:
Java: https://bitbucket.org/nc-dp/memo-lib-java/src/master/
Microsoft .Net: https://bitbucket.org/nc-dp/memo-lib-dot-net/src/master/
Det er en god ressource når man som udvikler skal kode en løsning der skal arbejde med Meddelelsesmodellen for Digital Post - MeMo. Med MeMoLib kan udvikleren spare en fantastisk masse tid.
Hvad er problemet med CPRnumre og CVRnumre i ContentData
Først: Hvad ContentData er i MeMo
Nedenfor ser vi den store Meddelelsemodel. ContentData er i figuren ikke fuldt illustreret - den hænger under MessageHeader.
Her nedenfor ser vi indholdet af ContentData. ContentData er en slags forsendelsesdeklaration. Hvad handler denne Meddelelse om?
Jeg har markeret cprNumber og cvrNumber. Det er her man kan skrive et cprnummer eller et cvrnummer som denne Meddelelse handler om.
Så det kunne for eksempel være at vi sender en Digital Post til nabokommunen, og i MessageHeader.ContentData.CPRdata.cprNumber skriver vi CPRnummer på en borger som vores post handler om.
Når så den Digitale Post kommer frem til modtager-kommunen, så kan de dér se hvem posten handler om. Hvis de har et godt Modtagersystem så kan de også sørge for at journalisere denne Digital Post på en ny eller en eksisterende sag i deres ESDHsystem - med den borger som vi har sendt med som part på den journaliserede Digital post. Det kunne for eksempel være Brugerklubben SBSYS med deres SBSIP-modtagersystem.
Og hvad er problemet så med MeMoLib?
Den korte udgave er: Hvis man har en MeMo-sende-løsning som er baseret på MeMoLib - som MeMoLib ser ud den 1/12-2021 - så vil CPRnumre og CVRnumre som starter med "0" få fjernet dette "0" når det skrives ind i ContentData.
Så CPRnummer "0123456789" vil i ContentData blive gemt som "123456789". Og det er jo et problem når modtageren skal finde den borger som posten handler om.
Hvad sker der med dette problem - og hvad skal du gøre ved det?
Det er indrapporteret som sag hos NetCompany 1/12-2021. Jeg kan se, at der vil blive gjort noget ved at løse problemet.
Så langt, så godt. Men vi er ikke færdige her.
Hvis du har et MeMo-sendesystem, som er bygget med MeMoLib, så skal du opdateret det, når MeMoLib er blevet opdateret. Det sker ikke af sig selv.
Det er de udviklere der vedligeholder MeMo-sendesystemet som skal sikre at de bruger en version af MeMoLib, hvor dette problem er løst.
Lige nu - den 1/12-2021 - er der ikke en publiceret MeMoLib som er baseret på det korrekte sæt af XSD.
Dokumentation for problemet
I Dafolo har vi set at der er en uoverensstemmelse mellem det officielt publicerede sæt XSD for MeMO og så det sæt XSD som MeMoLib anvender.
Uoverensstemmelsen drejer sig om to del-elementer af ContentData: cprNumber og CVRNumber.
I de officielle XSD er begge disse elementer defineret som tekst.
I de XSD som MeMoLib er bygget på er de samme elementer defineret som tal.
Dette er et stort problem, fordi Sende-systemer der er bygget ovenpå MeMoLib, når de sender cprnumre og cvrnumre i ContentData, og hvis disse numre starter med ”0”, vil sende disse værdier uden dette ”0” som første tegn. ”0” vil forsvinde.
Modtagersystemer vil derfor modtage cprnumre og cvrnumre som ikke er gyldige. Det vil sandsynligvis stoppe automatiserede processer i modtager-enden af MeMo-sende-forløbet.
De officielle XSD
De findes her:
https://www.digitaliser.dk/resource/5248921
Det er filen med navnet MeMo_XSD.zip vi åbner.
I den udpakkede mappe åbner vi:
MeMo_core.xsd.
Vi ser at ContentData henviser til grd:CPRdata og grd:CVRdata.
Vi åber nu MeMo_grd.xsd .
Vi ser at grd:CPRdata henviser til grd:cprNumber og grd:CVRdata som henviser til grd:cvrNumber.
Øverst i samme fil finder vi disse to defineret som set her:
De er begge af typen dt:memoTextType.
Vi ser nu i filen MeMo_dataTypes.xsd:
Opsummering: I det officielle sæt af XSD: CPRnummer og CVRnummer, når de optræder i ContentData, er tekststrenge.
MeMoLib og dettes XSD
MeMoLibs XSD findes her: https://bitbucket.org/nc-dp/memo-lib-java/src/release-0.7.3/src/main/resources/schemas/
Og så forfølger vi igen cpr- og CVRnummer.
Den første afvigelse finder vi i MeMo_grd.xsd. Fremhævet her:
Læg mærke til at cprNumber her henviser til dt:memoCPRType.
Og cvrNumber her henviser til dt:memoCVRType.
I den officielle XSD henvises der til dt:memoTextType fra både cprNumber og cvrNumber. Og disse var tekststrenge.
Nu kigger vi i MeMo_dataTypes.xsd i listen med XSDer i MeMoLib.
Her finder vi dt:memoCPRType og dt:memoCVRType:
Og som man kan se er de begge defineret som tal.
Opsummering for MeMoLib XSD: CPRnummer og CVRnummer, når de optræder i ContentData, er tal.