Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Biblioteket består af en række valideringsregler/klasser, som kan sættes sammen efter behov. Det er muligt at sætte en validering sammen, som en lang kæde, eller lave en træstruktur, sådan at visse valideringer, stopper for yderligere validering i specifikt område. Sidstnævnte kan f.eks. være, at hvis et dokument ikke er en kendt CDA type, så behøver man ikke validerere yderligere på dets metadata.

Figur: kæde- eller træstruktur

...

Hver valideringsregel er implementeret som en ud af fire tre typer (Navngivning samt hvilken klasse den extender, illustrerer dette dette). Disse er beskrevet i det efterfølgende.

En valideringsregel returnerer enten null (hvis den ikke forstår det input den modtager) eller returnerer  et object ValidationResultSet. ValidationResultSet kan indholde en række fejl, hvis sådanne er fundet under valideringen.

...

En almindelig validering. Den består af en validering , samt mulighed for at angive under-validatorer samt indikation af, om disse under-validatorer skal udføres, hvis validatorens egen validering fejlersamt kald af dens under validatorer

Man kan altså med denne validator gruppere en række valideringer, som man ønsker udført efter hinanden, baseret på validatorens eget udfald. Den almindelige validator returner så, den fulde mængde af resultater/fejl fundet.

...

Code Block
languagejava
titleIti41ValidationFactory - validator eksempel
linenumberstrue
//nuværende eksempel på almindelig felt validering:
Apd2StartStopTimeValidator apd2StartStopTimeValidator = new Apd2StartStopTimeValidator();

//fremtidigt eksempel med yderligere validering:
Apd2StartStopTimeValidator apd2StartStopTimeValidator = new Apd2StartStopTimeValidator(false);
Apd2StartStopTimeSpecifikValueValidator apd2StartStopTimeSpecifikValueValidator = new Apd2StartStopTimeSpecifikValueValidator();
apd2StartStopTimeValidator.appendValidator(apd2StartStopTimeSpecifikValueValidator);

Det som kendetegner en almindelig validator er extension af klassen AbstractValidatorImpl.

AtLeastOneValidator

Denne validator har mere logik end en almindelig validator: Den kræver, at mindst een af dens under-validatorer vil kendes ved det input, den får, for at AtLeastOneValidatoren selv validerer noget ok. 

Man kan altså med denne validator gruppere en række valideringer, og forvente, at mindst een af dem vil kendes ved det input, den får. Den/de under-validatorer, som kendes ved input, forventes så at udføre relevant validering.

Et eksempel på sådan en validering er CdaDocumentTypeValidator. Den er default konfigureret med en række under-validatorer, der hver især kan håndtere en dokument type. Aktiveres CdaDocumentTypeValidator på et dokument, vil den under-validator, der kendes ved dokumenttypen, sørge for at validere specifikke regler for denne type. Kendes ingen af under-validatorerne ved dokumentindholdet/typen, vil AtLeastOneValidatoren melde en fejl retur. Se følgende eksempel:

Code Block
languagejava
titleIti41ValidationFactory - AtLeastOneValidator eksempel
linenumberstrue
//validering hvor CdaDocumentTypeValidator forventer at ens af dens under-validatorer vil kendes ved input (dokumentet)

CdaDocumentTypeValidator cdaDocumentTypeValidator = new CdaDocumentTypeValidator();

CdaDocumentApdV2ModelEnricher cdaDocumentApdV2ModelEnricher = new CdaDocumentApdV2ModelEnricher();
cdaDocumentTypeValidator.appendValidator(cdaDocumentApdV2ModelEnricher);  		

CdaDocumentPhmrModelEnricher cdaDocumentPhmrModelEnricher = new CdaDocumentPhmrModelEnricher();
cdaDocumentTypeValidator.appendValidator(cdaDocumentPhmrModelEnricher);

CdaDocumentQrdModelEnricher cdaDocumentQrdModelEnrichernew Apd2StartStopTimeValidator();
Apd2StartStopTimeSpecifikValueValidator apd2StartStopTimeSpecifikValueValidator = new CdaDocumentQrdModelEnricherApd2StartStopTimeSpecifikValueValidator();
cdaDocumentTypeValidatorapd2StartStopTimeValidator.appendValidator(cdaDocumentQrdModelEnricherapd2StartStopTimeSpecifikValueValidator);

Det som kendetegner en

...

almindelig validator er extension af klassen

...

AbstractValidatorImpl.

ModelEnricher

Dette er ikke en egentlig validator. "Valideringen" består af udpakning af input.

...

Et eksempel på sådan en ModelEnricher er CdaDocumentApdV2ModelEnricher. Den er default konfigureret på CdaDocumentTypeValidator (se ovenfor for en AtLeastOneValidator) og modtager et CDA dokument, som den forsøger at pakke ud til et aftaledokument. Lykkedes dette, Herefter kalder den sine under - validatorer som validerer aftale specikke regler.

Code Block
languagejava
titleIti41ValidationFactory - ModelEnricher eksempel
linenumberstrue
//validering, hvor CdaDocumentApdV2ModelEnricher forventes at pakke input ud og forstå at det er et aftale dokument.

CdaDocumentApdV2ModelEnricher cdaDocumentApdV2ModelEnricher = new CdaDocumentApdV2ModelEnricher();

Apd2StartStopTimeValidator apd2StartStopTimeValidator = new Apd2StartStopTimeValidator();
cdaDocumentApdV2ModelEnricher.appendValidator(apd2StartStopTimeValidator);

Apd2AppointmentIdValidator apd2AppointmentIdValidator = new Apd2AppointmentIdValidator();
cdaDocumentApdV2ModelEnricher.appendValidator(apd2AppointmentIdValidator);

Apd2CustodianIdValidator apd2CustodianIdValidator = new Apd2CustodianIdValidator(organisationCodeValidation);
cdaDocumentApdV2ModelEnricher.appendValidator(apd2CustodianIdValidator);

...

  • Start med en Starter, som forstår input
  • Berig input efterhånden som behovet opstår
  • Valider kun data, som er relevant. Dvs. anvend træstrukturer
  • Tjek relevante overordnede dele er til stede i input (sådan at øvrige senere validatorer kan tillade sig at ignorere dette)
  • Er input "uforståligt" så returner ingen tingen tom fejlliste
  • Er input "forståligt" men forkert så returner fejl

...

  • Den tilhørende starter vælges (Starter)
  • En struktur validator tilknyttes (Validator), som sikrer at et kald indeholder de komponenter, det skal (eksempel for ITI 41 documententry, assocation og selve dokumentet)
  • Alle andre relevante validatorer tilføjes. For ITI 41 drejer det sig om følgende træstruktur:
    • XDSDocumentContentModelEnricher (ModelEnricher), der pakker input ud som UTF8 bytes hvis muligt
      • XDSDocumentValidator (AtLeastOneValidator) og CdaDocumentHeaderModelEnricher, som forventer forsøger at kunne pakke input ud som et CDA dokument ved at finde en CDA header
        • CdaDocumentTypeValidator (AtLeastOneValidator) og CdaDocumentApdV2ModelEnricher, CdaDocumentPhmrModelEnricher samt CdaDocumentQrdModelEnricher, der forventer, forsøger at parse dokumentet er som en af typerne APD, PHMR eller QRD
          • Felt specifikke validatorer (Validator) for hver af de 3 dokument typer
    • Felt specifikke validatorer (Validator) for documentEntry
    • Felt specifikke validatorer (Validator) for SubmissionSet
    • Sammenlignings validatorer per felt (Validator), der sikrer DocumentEntry og SubmissionSet indeholder samme værdier
    • Sammenlignings validatorer per felt (Validator), der sikrer DocumentEntry og dokumentets CDA header indeholder samme værdier

...