Versions Compared

Key

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

...

Indledning

På NSP deles i dag CDA dokumenter flere forskellige dokument typer vha. en XDS infrastruktur. Et CDA dokument er et struktureret XML dokument, som følger en bestemt standard for kliniske dokumenter. Der findes forskellige typer af CDA dokumenter, hvor der er lavet danske profileringer (Udgivelser), som dækker følgende:

  • Appointment Document (APD) til aftaler
  • Careplan (CPD)
  • Personal Data Card/Stamkort (PDC)
  • Personal Health Monitoring Report (PHMR) til hjemmemonitorering
  • Questionnaire Form Definition Document (QFDD) og Questionnaire Response Document (QRD) til patientrapporterede oplysninger (PRO)

Fælles for alle dokumenterne er et fælles CDA header format, der indeholder metadata om dokumentet. Denne skal overholde standarden for den danske profilering af metadata (XDS Metadata for Document Sharing. Danish profile).  Ligesom data i headeren skal findes i den fælles liste over tilladet værdisæt (DK-IHE_Metadata-Common_Code_systems-Value_sets). 

 

Metadata skal overholde standarden for den danske profilering af metadata (XDS Metadata for Document Sharing. Danish profile).  Ligesom data i headeren skal findes i den fælles liste over tilladet værdisæt (DK-IHE_Metadata-Common_Code_systems-Value_sets). 

Dokumenter, som gemmes i XDS infrasktrukturen, registreres under deres metadata - herunder dokumentid, og kan fremsøges ud fra disse igen. Det registerede metadata er underlagt samme standarder, som de indeholdte dokumenter Dokumenter, som gemmes i XDS infrasktrukturen, registreres under deres metadata - herunder dokumentid, og kan fremsøges ud fra disse igen. Det registerede metadata er underlagt samme standarder, som CDA dokumenterne selv er,  dvs. de skal overholde de danske standarder.

For at gemme eller hente et dokument, anvendet et ITI kald. ITI kald er standardiserede SOAP services, der overholder IHE XDS specifikationenEt ITI kald opererer med begreberne SubmissionSet, DocumentEntry og Association, hvis indhold lægger sig op af dokumentets metadata. Disse skal derfor også overholde standarderne.

Yderligere detaljer og introduktion til dokumentdeling kan læses i Dokumentdeling på NSP

For at lette arbejdet med at overholde/validerere for standarderne, findes XdsValidation biblioteket. Flere komponenter, bl. DROS komponenten kan gøre a. DROS, gør brug af denne validering, for at sikre, at der ikke komme ugyldige data ind i XDS infrastrukturen.  Anvendere af DROS kan selv implementere validering vha. af XdsValidation biblioteket, hvis man ønsker at finde fejl, inden det faktiske kald udføres.  Alle, der er koblet på NSP XDS infrastrukturen med enten registry eller repository eller som har sit eget affinitetsdomæne, kan med fordel anvende XdsValiderings biblioteket. Også som supplement til eventuel egen validering.

...

For at anvende XdsValidation biblioteket, skal man gøre brug af tredjepartsproduktet IPF Open eHealth Integration Platform, da interaktionen foregår vha. dette.

Da DROS, som nævnt Yderligere inspiration for implementering af validering kan findes i DROS projektet, da dette projekt allerede gør brug af XdsValidation, kan man her finde yderligere inspiration for implementering der..

Dette dokument beskriver overordnet funktionalitet af biblioteket.

API Beskrivelse og anvendelse

XdsValidation biblioteket kan overordnet validere følgende:

  1. indholdet af et CDA dokument (generelt set, dvs headeren)
  2. indholdet af et CDA dokument for en specifik type (APD v2, PHMR og QRD). Dette er stadig under udarbejdelse og anvendelsen er pt begrænset
  3. indholdet af et iti41 kald (provide and register document set / registrer metadata)
  4. indholdet af et iti42 kald (register document set / registrer metadata)
  5. indholdet af et iti61 kald (register document set / regisgterr metadata on-demand)
  6. indholdet af et iti57 kald (opdater metadata - herunder deprecate status)

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.

Image Removed

Figur: kæde- eller træstruktur

For at lette arbejdet med bibliotekt, findes der en default opsætning per område, som det anbefales at arbejde med (såkaldt factories). Se figuren "Validator overblik" i design og arkitekturdokumentet, for en overblik over disse. Hvordan disse factories anvendes er beskrevet i næste afsnit.

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

En valideringsregel returnerer  et object ValidationResultSet. ValidationResultSet kan indholde en række fejl, hvis sådanne er fundet under valideringen.

Validator

En almindelig validering. Den består af en validering samt kald af dens under validatorer. 

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

Et eksempel på sådan en validering er Apd2StartStopTimeValidator. Den tjekker om ServiceStartTime på et aftaledokument er udfyldt,  Den har ikke nogen under-validatorer i default opsætningen for ITI41 kaldet. Men på sigt kunne disse tilføjes, hvis der opstår behov for specifikke regler omkring StartTime valideringen, når den er udfyldt. Se følgende eksempel:

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

//fremtidigt eksempel med yderligere validering:
.add(branch(new Apd2StartStopTimeValidator())
        .add(new Apd2StartStopTimeSpecifikValueValidator()))

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.

Man kan se, det er en indirekte validering af, at input forstås og forbedring/berigelse af det data, der arbejdes på. Denne berigelse sættes på det indkomne objekt (deraf ModelEnricher) og senere validatorer, kan arbejde videre med dette.

Man kan på en ModelEnricher også sætte under-validatorer på, ligesom på en almindelig validator.

...

CDA

Et CDA dokument er et struktureret XML dokument, som følger en bestemt standard for kliniske dokumenter. Der findes forskellige typer af CDA dokumenter, hvor der er lavet danske profileringer (Udgivelser), som dækker følgende:

  • Appointment Document (APD) til aftaler
  • Careplan (CPD)
  • Personal Data Card/Stamkort (PDC)
  • Personal Health Monitoring Report (PHMR) til hjemmemonitorering
  • Questionnaire Form Definition Document (QFDD) og Questionnaire Response Document (QRD) til patientrapporterede oplysninger (PRO)

Fælles for alle dokumenterne er et fælles CDA header format, der indeholder metadata om dokumentet.

Audio

Et audio dokument er et struktureret XML dokument, som følger HIMSA’s Noah datastandarder. Der findes forskellige typer af audio dokumenter (Udgivelser), hvor følgende dækkes:

Hver type og version har et selvstændigt XSD skema, der skal overholdes.

API Beskrivelse og anvendelse

XdsValidation biblioteket kan overordnet validere følgende:

  1. indholdet af et CDA dokument (generelt set, dvs headeren)
  2. indholdet af et CDA dokument for en specifik type (APD v2, PHMR og QRD). Dette er stadig under udarbejdelse og anvendelsen er pt begrænset
  3. indholdet af et Audio dokument for en specifik type (Audiogram, Impedance/Admittance og HearingInstrumentSelection). Dette er stadig under udarbejdelse og anvendelsen er pt begrænset
  4. indholdet af et iti41 kald (provide and register document set / registrer metadata)
  5. indholdet af et iti42 kald (register document set / registrer metadata)
  6. indholdet af et iti61 kald (register document set / regisgterr metadata on-demand)
  7. indholdet af et iti57 kald (opdater metadata - herunder deprecate status)

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.

Image Added

Figur: kæde- eller træstruktur

For at lette arbejdet med bibliotekt, findes der en default opsætning per område, som det anbefales at arbejde med (såkaldt factories). Se figuren "Validator overblik" i design og arkitekturdokumentet, for en overblik over disse. Hvordan disse factories anvendes er beskrevet i næste afsnit.

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

En valideringsregel returnerer  et object ValidationResultSet. ValidationResultSet kan indholde en række fejl, hvis sådanne er fundet under valideringen.

Validator

En almindelig validering. Den består af en validering samt kald af dens under validatorer. 

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

Et eksempel på sådan en validering er Apd2StartStopTimeValidator. Den tjekker om ServiceStartTime på et aftaledokument er udfyldt,  Den har ikke nogen under-validatorer i default opsætningen for ITI41 kaldet. Men på sigt kunne disse tilføjes, hvis der opstår behov for specifikke regler omkring StartTime valideringen, når den er udfyldt. Se følgende eksempel:

Code Block
languagejava
titleIti41ValidationFactory - ModelEnricher validator eksempel
linenumberstrue
//validering,nuværende hvoreksempel CdaDocumentApdV2ModelEnricher forventesalmindelig at pakke input ud og forstå at det er et aftale dokument.


 .add(branch(new CdaDocumentHeaderModelEnricher(xdsConfiguration.getCdaTypeCodes()))
         ...
        .comment("APD")
        felt validering:
.add(new Apd2StartStopTimeValidator())

//fremtidigt eksempel med yderligere validering:
.add(branch(new CdaDocumentApdV2ModelEnricherApd2StartStopTimeValidator())
                .add(new Apd2StartStopTimeValidatorApd2StartStopTimeSpecifikValueValidator())
                .add(new Apd2AppointmentIdValidator())
                .add(new Apd2CustodianIdValidator(codeValidators.getOrganisationCodeValidation()))
        )
        ...
 ))

Det som kendetegner en

...

almindelig validator er extension af klassen

...

AbstractValidatorImpl.

Starter

Denne minder om en ModelEnricher, men adskiller sig ved, at den ikke modtager det fælles objekt XDSDocument, som de andre validatorer arbejder med. Den modtager en request type, som pakkes ud i et eller flere XDSDocument objekter, og Starter kører så sine under-validatorer på hver af disse objekter.

ModelEnricher

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

Man kan se, det er en indirekte validering af, at input forstås og forbedring/berigelse af det data, der arbejdes på. Denne berigelse sættes på det indkomne objekt (deraf ModelEnricher) og senere validatorer, kan arbejde videre med dette.

Man kan på en ModelEnricher også sætte under-validatorer på, ligesom på en almindelig validator.

Et eksempel på sådan en ModelEnricher er CdaDocumentApdV2ModelEnricher. Den er default konfigureret på CdaDocumentHeaderModelEnricher og modtager et CDA dokument, som den forsøger at pakke ud til et aftaledokument. Herefter kalder den sine under validatorerAlle valideringer starter derfor med en Starter validering, og al anden validering bygges herpå. Se eksempelvis ProvideAndRegisterDocumentSetStarter for et fuldt eksempel.

Code Block
languagejava
titleIti41ValidationFactory - Starter ModelEnricher eksempel
linenumberstrue
//validering, hvor det hele initiers med en Starter validering til et iti 41 kald

ValidatorBuilder<ProvideAndRegisterDocumentSetStarter> builder = new ValidatorBuilder<>(new ProvideAndRegisterDocumentSetStarter())

Det som kendetegner en Starter er extension af klassen AbstractStarterImpl.

Den gode kombination

Principperne for oprettelse af valideringsregler og sammensætning af disse i struktur, kan skitseres ved:

  • Start med en Starter, som forstår input
  • Berig input efterhånden som behovet opstår
  • Tjek relevante overordnede dele er til stede i input
  • Er input "uforståligt" så returner en tom fejlliste
  • Er input "forståligt" men forkert så returner fejl

Alle ITI kalds default valideringer, som er konfigureret i XdsValidation biblioteket, er sat op efter følgende struktur:

  • 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
      • CdaDocumentHeaderModelEnricher, som forsøger at pakke input ud som et CDA dokument ved at finde en CDA header
        • CdaDocumentApdV2ModelEnricher, CdaDocumentPhmrModelEnricher samt CdaDocumentQrdModelEnricher, der forsøger at parse dokumentet 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
 CdaDocumentApdV2ModelEnricher forventes at pakke input ud og forstå at det er et aftale dokument.


 .add(branch(new CdaDocumentHeaderModelEnricher(xdsConfiguration.getCdaTypeCodes()))
         ...
        .comment("APD")
        .add(branch(new CdaDocumentApdV2ModelEnricher())
                .add(new Apd2StartStopTimeValidator())
                .add(new Apd2AppointmentIdValidator())
                .add(new Apd2CustodianIdValidator(codeValidators.getOrganisationCodeValidation()))
        )
        ...
 )

Det som kendetegner en ModelEnricher er extension af klassen AbstractModelEnricherImpl.

Starter

Denne minder om en ModelEnricher, men adskiller sig ved, at den ikke modtager det fælles objekt XDSDocument, som de andre validatorer arbejder med. Den modtager en request type, som pakkes ud i et eller flere XDSDocument objekter, og Starter kører så sine under-validatorer på hver af disse objekter.

Alle valideringer starter derfor med en Starter validering, og al anden validering bygges herpå. Se eksempelvis ProvideAndRegisterDocumentSetStarter for et fuldt eksempel.

Code Block
languagejava
titleIti41ValidationFactory - Starter eksempel
linenumberstrue
//validering, hvor det hele initiers med en Starter validering til et iti 41 kald

ValidatorBuilder<ProvideAndRegisterDocumentSetStarter> builder = new ValidatorBuilder<>(new ProvideAndRegisterDocumentSetStarter())

Det som kendetegner en Starter er extension af klassen AbstractStarterImpl.

Den gode kombination

Principperne for oprettelse af valideringsregler og sammensætning af disse i struktur, kan skitseres ved:

  • Start med en Starter, som forstår input
  • Berig input efterhånden som behovet opstår
  • Tjek relevante overordnede dele er til stede i input
  • Er input "uforståligt" så returner en tom fejlliste
  • Er input "forståligt" men forkert så returner fejl

Alle ITI kalds default valideringer, som er konfigureret i XdsValidation biblioteket, er sat op efter følgende struktur:

  • 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
      • CdaDocumentHeaderModelEnricher, som forsøger at pakke input ud som et CDA dokument ved at finde en CDA header
        • CdaDocumentApdV2ModelEnricher, CdaDocumentPhmrModelEnricher samt CdaDocumentQrdModelEnricher, der forsøger at parse dokumentet som en af typerne APD, PHMR eller QRD
          • Felt specifikke validatorer (Validator) for hver af de 3 dokument typer
      • AudioDocumentModelEnricher, som tjekker på om dokument er validt ift. skema
        • AudioDocumentModelValidator, som tjekker at indhold af dokument er validt.
    • 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

Hver ITI kald har sin kombination, da ikke alle elementer er til stede, i de forskellige kald. F.eks, er et ITI 41 kald det eneste, som har et Hver ITI kald har sin kombination, da ikke alle elementer er til stede, i de forskellige kald. F.eks, er et ITI 41 kald det eneste, som har et faktisk dokument, der kan valideres.

...

Code Block
languagejava
titleIti41ValidationImpl - anvendels af XdsValidation
linenumberstrue
// Fra klassen Iti41ValidationImpl metode validateAndTransform
List<ErrorInfo> xdsValidationErrors = getXdsValidationErrors(provideAndRegisterDocumentSet, xdsValidatorFactory.buildIti41Validator(), xdsValidationLevel);

// Fra klassen RegistryItiValidationImpl
protected List<ErrorInfo> getXdsValidationErrors(ProvideAndRegisterDocumentSet request, ProvideAndRegisterDocumentSetStarterList<ProvideAndRegisterDocumentSetStarter> starterstarterList, XdsValidationLevel xdsValidationLevel) {
     List<ErrorInfo> return getXdsValidationErrors(() -> starter.validate(request), xdsValidationLevel);
}

private List<ErrorInfo> getXdsValidationErrors(Supplier<ValidationResultSet> validator, XdsValidationLevel xdsValidationLevel) {
     if(xdsValidationLevel == XdsValidationLevel.OFFerrors = new ArrayList<>();
     for (ProvideAndRegisterDocumentSetStarter starter : starterList) {
           List<ErrorInfo> returnvalidationErrors new= ArrayList<>(getXdsValidationErrors(request, starter, xdsValidationLevel);
     }
     List<ErrorInfo> errors = new ArrayList<>(   errors.addAll(validationErrors);
     // Perform the validation
    if (errors.size() > 0) {
        ValidationResultSet  resultSet  = validator.get() return errors;
     // Construct the  result }
     if(resultSet.hasErrors()) {}
       return errors;
}

private List<ErrorInfo> // Based on the validation level, either return a warning or an error.
          Severity severity = getSeverity(xdsValidationLevel);
    getXdsValidationErrors(ProvideAndRegisterDocumentSet request, ProvideAndRegisterDocumentSetStarter starter, XdsValidationLevel xdsValidationLevel) {
    return getXdsValidationErrors(() -> starter.validate(request), xdsValidationLevel);
}

private List<ErrorInfo> getXdsValidationErrors(Supplier<ValidationResultSet> validator, XdsValidationLevel xdsValidationLevel) {
    if(xdsValidationLevel == XdsValidationLevel.OFF) {
        for(ValidationErrorreturn ve : resultSet.getErrorsnew ArrayList<>()) {;
        }
     List<ErrorInfo>  ErrorInfo errorInfoerrors = new ErrorInfo(ErrorCode.REGISTRY_METADATA_ERROR, ve.getErrorMessage(), severity, "", "");
               errors.add(errorInfo);
          }ArrayList<>();
    // Based on the validation level, either return a warning or an error.
    Severity severity = getSeverity(xdsValidationLevel);

    try }{
      return errors;
}

  //Klassen XdsValidatorFactory
publicPerform classthe XdsValidatorFactory {validation
    public ProvideAndRegisterDocumentSetStarter buildIti41Validator() {
 ValidationResultSet resultSet      return Iti41ValidationFactory.createIti41Validator= validator.get();
    }

    public// RegisterDocumentSetStarterConstruct buildIti42Validator()the {result
        return Iti42ValidationFactory.createIti42Validator();if(resultSet.getValidationResults().size() > 0) {
    }

    public RegisterDocumentSetStarter buildIti57Validator() {
 // Based on the validation level, either return Iti57ValidationFactory.createIti57Validator();
 a warning or an error.
        }

    public RegisterDocumentSetStarter buildIti61Validatorfor(ValidationResult vr : resultSet.getValidationResults()) {
        return Iti61ValidationFactory.createIti61Validator(        ErrorInfo errorInfo = new ErrorInfo(ErrorCode.REGISTRY_METADATA_ERROR, vr.getValidationError().getErrorMessage(), severity, "", "");
                errors.add(errorInfo);
            }
}

Dvs ønsker man benytte default valideringen for ITI 41 kaldet gøres det ved at:

  1. Oprette en instans af ProvideAndRegisterDocumentSetStarter (linie 2)
  2. Kalde metoden validate på denne med ITI 41 requested (ProvideAndRegisterDocumentSet) (linie 6)
  3. Retur får man en liste over de fejl XdsValidation fandt (linie 15)

På samme måde kan man få valideret de øvrige kald, ved at vælge den rette Starter og sende requsted ind til den.

Code Block
languagejava
titleIti42ValidationImpl - anvendels af XdsValidation
linenumberstrue
// Fra klassen Iti42ValidationImpl metode validateAndTransform
List<ErrorInfo> xdsValidationErrors = getXdsValidationErrors(registerDocumentSet, xdsValidatorFactory.buildIti42Validator(), xdsValidationLevel);

// Fra klassen RegistryItiValidationImpl

protected List<ErrorInfo> getXdsValidationErrors(RegisterDocumentSet request, RegisterDocumentSetStarter starter, XdsValidationLevel xdsValidationLevel) {
    return getXdsValidationErrors(() -> starter.validate(request), xdsValidationLevel); //for getXdsValidationErrors se ovenfor
}
Code Block
languagejava
titleIti61ValidationImpl - anvendels af XdsValidation
linenumberstrue
// Fra klassen Iti57ValidationImpl metode validateAndTransform
List<ErrorInfo> xdsValidationErrors = getXdsValidationErrors(registerDocumentSet, xdsValidatorFactory.buildIti61Validator(), xdsValidationLevel);  

// Fra klassen RegistryItiValidationImpl
protected List<ErrorInfo> getXdsValidationErrors(RegisterDocumentSet request, RegisterDocumentSetStarter starter, XdsValidationLevel xdsValidationLevel) {
    return getXdsValidationErrors(() -> starter.validate(request), xdsValidationLevel); //for getXdsValidationErrors se ovenfor
}

...

languagejava
titleIti57ValidationImpl - anvendels af XdsValidation
linenumberstrue

...

        }
    } catch (Exception e) {
        // Because validation depends on validation library and builder parsers handling of exceptions we need to make sure any unstable exception handling there will not get to the caller.
        String errorMessage = "Unhandled exception in validation library or its sub dependencies.";
        LOGGER.error(errorMessage, e);
        ErrorInfo errorInfo = new ErrorInfo(ErrorCode.REGISTRY_METADATA_ERROR, errorMessage, getSeverity(xdsValidationLevel), "", "");
        errors.add(errorInfo);
    }
    return errors;
}

//Klassen XdsValidatorFactory
public class XdsValidatorFactory {
 ...
    public List<ProvideAndRegisterDocumentSetStarter> buildIti41Validator() {
        return Arrays.asList(
                Iti41ValidationFactory.createIti41Validator(xdsConfigurationFactory.buildXDSConfiguration()),
                createItiProvideAndRegisterDocumentSetStarterDrosValidator());
    }
  ... 
}


Dvs ønsker man benytte default valideringen for ITI 41 kaldet gøres det ved at:

  1. Oprette en instans af ProvideAndRegisterDocumentSetStarter (linie 2)
  2. Kalde metoden validate på denne med ITI 41 requested (ProvideAndRegisterDocumentSet) (linie 18)
  3. Retur får man en liste over de fejl XdsValidation fandt (linie 31)

På samme måde kan man få valideret de øvrige kald, ved at vælge den rette Starter og sende requsted ind til den.


Se iøvrigt praktisk anvendelse i bibliotekets egne unit test. F.eks. CdaHeaderValidatorTest der viser CDA dokument validering og  ProvideAndRegisterDocumentSetValidatorTest, der viser en række kald for iti-41.

...

KlasseValideringITI 41ITI 42ITI 61ITI 57Cda dokument
ProvideAndRegisterDocumentSetStarter
  • submissionSet pakkes ud
  • dokumenter pakkes ud
  • der er som minimum et dokument
x



RegisterDocumentSetStarter
  • submissionSet pakkes ud
  • dokumentEntries pakkes ud

xxx







XDSDocumentITI41StructureValidator
  • der findes et documentEntry
  • der findes et fysisk dokument
  • der findes et submissionSet
x



XDSDocumentITI42StructureValidator
  • der findes et documentEntry
  • der findes et submissionSet

x


XDSDocumentITI61StructureValidator
  • der findes et documentEntry
  • der findes et submissionSet


x

XDSDocumentITI57StructureValidator
  • der findes et submissionSet



x







XDSDocumentContentModelEnricher
  • indhold kan læses som bytes (UTF8)
x



CdaDocumentHeaderModelEnricher
  • der er tale om et cda dokument (typecode i documententry matcher ConfigCodeModel(configCdaTypes)
  • bytes kan parses som en CDA header
x


x
CdaDocumentApdV2ModelEnricherx


x
CdaDocumentPhmrModelEnricher
  • det er et PHMR dokument: CodeCodedValue har Codesystem "2.16.840.1.113883.6.1" og code "53576-5"
  • det er Cda Header Version 1: FormatCode er null (anvendt parser finder ikke formatCode for v1)
  • CDA dokumentet kan parses som et PHMR dokument
x


x
CdaDocumentQrdModelEnricher
  • det er et QRD dokument: CodeCodedValue har Codesystem "2.16.840.1.113883.6.1" og code "74465-6"
  • det er Cda Header Version 1: FormatCode er null (anvendt parser finder ikke formatCode for v1)
  • CDA dokumentet kan parses som et QRD dokument
x


x
CdaDocumentPhadModelEnricher
  • Denne er pt ikke aktiv, men planlagt via SDS-7229
x


x







AudioDocumentModelEnricher
  • der det er tale om et Audio dokument baseret på HIMSA’s Noah datastandarder, hvis typecode har codesystem Høremappe dokument: CodeCodedValue har Codesystem "2.16.840.1.113883.6.1", code "28615-3" og code "28615-3"
xxxx
  • displayName "Audiology Study"
xxxx
AudioDocumentAudiogramModelEnricher
  • Er formatCode et gyldigt format for Audiogram dokumenter
  • Skema for korrekt udgave af Audiogram dokument findes
  • Dokumentet valideres mod skemaet
x



AudioDocumentImpedanceModelEnricher
  • Er formatCode et gyldigt format for Impedance dokumenter
  • Skema for korrekt udgave af Impedance dokument findes
  • Dokumentet valideres mod skemaet
x



AudioDocumentHearingInstrumentSelectionModelEnricher
  • Er formatCode et gyldigt format for Hearing Instrument Selection dokumenter
  • Skema for korrekt udgave af Hearing Instrument Selection dokument findes
  • Dokumentet valideres mod skemaet
x



AudioDocumentAudiogramModelValidator
  • XML skal være indlæst som tekst
  • !forudsætning for validering: FormatCode er en af følgende:
    • codeSystem
AudioDocumentAudiogramModelEnricher
  • der er tale om et dokument med "Audiogram", hvis:
    • codesystem er "1.2.208.184.100.10" og , code "urn:ad:dk:medcom:nauf-v500:full"
    • data kan skemavalideres mod "Audiogram-1-500.xsd"
    eller
    • og displayName "Noah Audiogram format 500"
    • codeSystem
    • codesystem er "1.2.208.184.100.10" og , code "urn:ad:dk:medcom:nauf-v502:full"
    • data kan skemavalideres mod "Audiogram-1-502.xsd"
x
    • " og displayName "Noah Audiogram format 502"
  • XML skal kunne parses som et gyldigt XML dokument
  • Rod elementet skal være HIMSAAudiometricStandard
  • Der skal være mindst 1 element under rod elementet
x



AudioDocumentImpedanceModelValidator
  • XML skal være indlæst som tekst
  • !forudsætning for validering: FormatCode er en af følgende:
    • codeSystem
AudioDocumentAudiogramModelEnricher
  • der er tale om et dokument med "Refleks-/tympanometri-målinger" (Impedance/Admittance), hvis: 
    • codesystem er "1.2.208.184.100.10" og , code "urn:ad:dk:medcom:nimf-v500:full"
    • data kan skemavalideres mod "Impedance-15-16-500.xsd"
    eller
    • og displayName "Noah Impedance format 500"
    • codeSystem
    • codesystem er "1.2.208.184.100.10" og , code "urn:ad:dk:medcom:nadf-v501:full"
    • data kan skemavalideres mod "Admittance-15-16-501.xsd"
    • og displayName "Noah Admittance format 501"
  • XML skal kunne parses som et gyldigt XML dokument
  • Root element skal være AcousticImpedanceCompleteMeasurement for NOAH_IMPEDANCE_FORMAT_500 eller AcousticImmittanceAssessment for NOAH_ADMITTANCE_FORMAT_501
  • Der skal være mindst 1 element under rod elementet
x



AudioDocumentHearingInstrumentSelectionModelValidator
  • XML skal være indlæst som tekst
  • !forudsætning for validering: FormatCode er codeSystem
x
AudioDocumentHearingInstrumentSelectionModelEnricher
  • der er tale om et dokument med "Oplysninger om udleveret høreapparat" (HearingInstrumentSelection), hvis: codesystem er "1.2.208.184.100.10" og , code "urn:ad:dk:medcom:nhisf-v500:full"
  • data kan skemavalideres mod "HearingInstrumentSelection-129-130-500.xsd"
  • og displayName "Noah Hearing Instrument Selection format 500"
  • XML skal kunne parses som et gyldigt XML dokument
  • Rod elementet skal være HearingInstrumentSelection
  • Root element skal have mindst 1 InstrumentTypeName, som ikke er tom
x




Typevalideringer

Dette er hjælpevalideringer, som feltvalideringer gør brug af.

KlasseValidering

ConfigCodeModelChecker

  • Afgør om en typeCode tillades for en given ConfigCodeModel
  • ConfigCodeModel er en liste af typeCodes, hvor typeCode skal indgå med mindre man har sat MatchAll på ConfigCodeModel

AbstractElementCompare

  • sammenligning af 2 lister (hver med nul, en eller flere objekter)
  • antal af objekter i listen er ens
  • de enkelte objekter er ens på de samme pladser i listen

CodedModelCompare

  • overholder validering i AbstractElementCompare hvor følgende opfylder "objekter er ens"
    • value er ens
    • codeSystem er ens
    • displayName er ens

DateTimeCompare

  • overholder validering i AbstractElementCompare hvor følgende opfylder "objekter er ens"
    • dateTime er ens

DateCompare

  • overholder validering i AbstractElementCompare hvor følgende opfylder "objekter er ens"
    • år, måned og dag i Calender er ens

StringCompare

  • overholder validering i AbstractElementCompare hvor følgende opfylder "objekter er ens"
    • de to strenge er ens

ConfigValuesChecker

  • ConfigValuesChecker validerer ConfigValues.
    • ConfigValues baseres på ConfigInput, hvor alle værdier tillades (matchAll) eller en liste af tilladte værdier er angivet.
    • ConfigValues tillader kun typen "String"
  • Overholder valideringen som angivet i ConfigInputChecker
    • ConfigValues (ConfigInput) er angivet
    • Enten:
      • ConfigValues er isMatchAll
    • eller:
      • Value er i listen af tilladte værdier i ConfigValues



CodedValueValidationCodedValueValidator

  • regel: IHE Vol3 4.2.3.1.2 Creating Coded Attributes
  • codeSystem er udfyldt hvis krævet
  • codeSystem er gyldigt hvis krævet
  • code er udfyldt hvis krævet
  • displayName er udfyldt hvis krævet
  • yderligere kode validering som implementeret i ConfigCodeModelChecker (med evt. default værdier i XDSConfiguration)

StringValidation

  • overholder regler specificeret af anvender:
    • er udfyldt hvis påkrævet sat
    • længden på værdien er ikke  større end maksimum længde angivet
    • værdien er en af de tilladte værdier angivet

ClassCodeValidation

  • regel: IHE Vol3 4.2.3.1.2 Creating Coded Attributes
  • længden på code er ikke  større end 3 (DK_IHE_ClassCode_DE)
  • overholder validering i CodedValueValidation CodedValueValidator. Default gyldigt codeSystem angivet i XDSConfiguration. Code, CodeSystem og DisplayName er udfyldt.
ConfidentialityCodeValidation
  • regel: IHE Vol3 4.2.3.1.2 Creating Coded Attributes
  • overholder validering i CodedValueValidationCodedValueValidator. Default gyldigt codeSystem angivet i XDSConfiguration. Code og CodeSystem er udfyldt.
EventCodeValidation
  • regel IHE 4.2.3.1.2 Creating Coded Attributes
  • overholder validering i CodedValueValidationCodedValueValidator. Ingen default gyldig codeSystem.  Code, CodeSystem og DisplayName er udfyldt.
FormatCodeValidation
  • regel: IHE 4.2.3.1.2 Creating Coded Attributes
  • overholder validering i CodedValueValidationCodedValueValidator. Ingen default gyldig codeSystem. Code, CodeSystem og DisplayName er udfyldt.
HealthcareFacilityTypeCodeValidation
  • regel: IHE 4.2.3.1.2 Creating Coded Attributes
  • hvis udfyldt er værdien numerisk (DK_HealthcareFacilityType_DE)
  • overholder validering i CodedValueValidationCodedValueValidator. Ingen default gyldig codeSystem. Code, CodeSystem og DisplayName er udfyldt.
LanguageCodeValidation
  • overholder validering i StringValidation. Påkrævet og default tilladt værdi er "da-DK" (DK_IHE_LanguageCode_DE)
OrganisationCodeValidation
  • hvis codeSystem er Yder så er længden på code 6
  • hvis codeSystem er Yder er code numerisk
  • overholder validering i CodedValueValidationCodedValueValidator. Default gyldigt codeSystem angivet i XDSConfiguration. Code og CodeSystem er udfyldt.
PatientIdCodeValidation
  • overholder validering i CodedValueValidationCodedValueValidator. Default gyldigt codeSystem angivet i XDSConfiguration. Code og CodeSystem er udfyldt.
PracticeSettingCodeValidation
  • regel: IHE 4.2.3.1.2 Creating Coded Attributes
  • overholder validering i CodedValueValidationCodedValueValidator. Ingen default gyldig codeSystem. Code, CodeSystem og DisplayName er udfyldt.
TitleValidation
  • validering for StringValidation. Påkrævet og default maksimum længde er 128 (Metadata-v096 2.2.31 title)
TypeCodeValidation
  • regel: IHE 4.2.3.1.2 Creating Coded Attributes
    • validering i CodedValueValidationCodedValueValidator. Ingen default gyldig codeSystem. Code, CodeSystem og DisplayName er udfyldt.
ConfigValuesValidator
  • overholder regler specificeret af anvender:
    • længden på værdien er ikke  større end maksimum længde angivet
    • værdien er en af de tilladte værdier angivet
HomeCommunityIdValidation
  • overholder validering for i ConfigValuesValidator. Tilladte værdier angives i XDSConfigurationDefault gyldigt HomeCommunityId angivet i ConfigValues.
MimeTypeValidation
  • overholder validering for i ConfigValuesValidator. Tilladte værdier angives i XDSConfigurationDefault gyldigt MimeType angivet i ConfigValues.

Krydsvalideringer

Her sammenlignes to entiteter. Disse valideringer sikrer, at de samme felter i forskellige entiteter (documentEntry, submissionSet og Cda dokument) er ens. Hvis mindst en af entiterne kan indholde flere felter af den samme type, sammenlignes antallet af disse også.

...

KlasseValidering mellem de 2 entiter nævnt i klassens navnITI 41ITI 42ITI 61ITI 57Cda dokument
CdaHeaderCrossDocumentEntryAuthorInstitutionValidator
  • der er lige mange authors (dvs en)
  • der er lige mange AuthorInstitutions på den enkelte author
  • overholder validering i CodedModelCompare
x



CdaHeaderCrossDocumentEntryAuthorPersonValidator
  • der er lige mange authors (dvs en)
  • overholder validering i StringCompare indholdende personens navne
x



CdaHeaderCrossDocumentEntryConfidentialityCodeValidator
  • der er lige mange ConfidentialityCodes (dvs en)
  • overholder validering i CodedModelCompare
x



CdaHeaderCrossDocumentEntryCreationTimeValidator
  • overholder validering i DateTimeCompare
x



CdaHeaderCrossDocumentEntryEventCodeValidator
  • overholder validering i CodedModelCompare
x



CdaHeaderCrossDocumentEntryLanguageCodeValidator
  • overholder validering i StringCompare indeholdende languageCode værdierne
x



CdaHeaderCrossDocumentEntryLegalAuthenticatorValidator
  • overholder validering i StringCompare indeholdende legalAuthenticators navne
x



CdaHeaderCrossDocumentEntryPatientIdValidator
  • overholder validering i CodedModelCompare
xx



CdaHeaderCrossDocumentEntryServiceStartTimeValidator
  • overholder validering i DateTimeCompare
x



CdaHeaderCrossDocumentEntryServiceStopTimeValidator
  • overholder validering i DateTimeCompare
x



CdaHeaderCrossDocumentEntrySourcePatientIdValidator
  • overholder validering i CodedModelCompare
x



CdaHeaderCrossDocumentEntrySourcePatientInfoValidator
  • overholder validering i StringCompare indeholdende personens titel og navne
  • overholder validering i DateCompare med datoer, hvor datoer er fødselsdato
CdaHeaderCrossDocumentEntryLanguageCodeValidator
  • overholder validering i StringCompare indeholdende languageCode med køn værdierne
x



CdaHeaderCrossDocumentEntryLegalAuthenticatorValidatorCdaHeaderCrossDocumentEntryTitleValidator
  • overholder validering i StringCompare indeholdende legalAuthenticators navnetitel værdierne
x



CdaHeaderCrossDocumentEntryPatientIdValidatorCdaHeaderCrossDocumentEntryTypeCodeValidator
  • overholder validering i CodedModelCompare
x



CdaHeaderCrossDocumentEntryServiceStartTimeValidatorSubmissionSetCrossDocumentEntryAuthorInstitutionValidator
  • overholder validering i DateTimeCompare
x
  • ! forudsætning for validering: submissionSet har authors
  • der er lige mange authors
  • der er lige mange AuthorInstitutions på den enkelte author
CdaHeaderCrossDocumentEntryServiceStopTimeValidator
  • overholder validering i DateTimeCompareCodedModelCompare
xCdaHeaderCrossDocumentEntrySourcePatientIdValidatorxxoverholder validering i CodedModelComparexCdaHeaderCrossDocumentEntrySourcePatientInfoValidator
SubmissionSetCrossDocumentEntryAuthorPersonValidator
  • ! forudsætning for validering: submissionSet har authors
  • overholder validering i StringCompare
indeholdende personens titel og navne
  • overholder validering i DateCompare med datoer, hvor datoer er fødselsdato
  • overholder validering i StringCompare med køn værdierne
  • xCdaHeaderCrossDocumentEntryTitleValidator
    • overholder validering i StringCompare indeholdende titel værdierne
    xCdaHeaderCrossDocumentEntryTypeCodeValidator
    • overholder validering i CodedModelCompare
    xSubmissionSetCrossDocumentEntryAuthorInstitutionValidator
    • ! forudsætning for validering: submissionSet har authors
    • der er lige mange authors
    • der er lige mange AuthorInstitutions på den enkelte author
    • overholder validering i CodedModelCompare
    xxxxSubmissionSetCrossDocumentEntryAuthorPersonValidator
    • ! forudsætning for validering: submissionSet har authors
    • overholder validering i StringCompare indholdende personernes navne
    • (indirekte test af at der er lige mange authors qua listen af navne)
    xxxxSubmissionSetCrossDocumentEntryPatientIdValidator
    • value og codeSystem er ens
    xxxxAudioDocumentEntryFormatCodeCrossEventCodeValidator
    • FormatCode skal være angivet i EventCodeList, hvis EventCodeList er angivet.
    xxxxAudioDocumentEntrySourcePatientIdCrossPatientIdValidator
    • SourcePatientId må ikke være forskellig fra PatientId.
    xxxxAudioDocumentEntryServiceStopTimeCrossServiceStartTimeValidator
    • ServiceStopTime må ikke være før ServiceStartTime.
    xxxx

    Feltvalideringer

    Hver validering beskæftiger sig med et specifikt felt i enten ITI kald og/eller CDA dokumentet.

    Afkrydningen i tabellens 5 sidste søjler indikerer, hvilke default valideringer, den enkelte validator er inkludret i.

    Søjlen "felt" kan anvendes til sortering, hvis man ønsker at se valideringen for et specifik felt på tværs af entitet.

    • indholdende personernes navne
    • (indirekte test af at der er lige mange authors qua listen af navne)
    xxxx
    SubmissionSetCrossDocumentEntryPatientIdValidator
    • value og codeSystem er ens
    xxxx

    Feltvalideringer

    Hver validering beskæftiger sig med et specifikt felt i enten ITI kald og/eller CDA dokumentet.

    Afkrydningen i tabellens 5 sidste søjler indikerer, hvilke default valideringer, den enkelte validator er inkludret i.

    Søjlen "felt" kan anvendes til sortering, hvis man ønsker at se valideringen for et specifik felt på tværs af entitet.

    KlasseFeltValideringITI 41ITI 42ITI 61ITI 57Cda dokument

    CdaHeaderAuthorInstitutionValidator

    AuthorInstitution
    • regel: Metadata-v096 2.2.1.1 authorInstitution
    • author er udfyldt 
    • authorInstitution er udfyldt
    • overholder validering i OrganisationCodeValidation
    x


    x

    CdaHeaderAuthorPersonValidator

    AuthorPerson
    • regel: Metadata-v096 2.2.1.2 authorPerson
    • ! forudsætning for validering: authorPerson er udfyldt
    • der er et FamilyName og mindst et givenName
    x


    x

    CdaHeaderConfidentialityCodeValidator

    ConfidentialityCode
    • regel: Metadata-v096 2.2.5 confidentialityCode
    • confidentialityCode er udfyldt
    • overholder validering i ConfidentialityCodeValidation
    x


    x

    CdaHeaderEventCodeValidator

    EventCode
    • regel: Metadata-v096 2.2.9 eventCodeList
    • ! forudsætning for validering: EventCodeList har elementer
    • EventCode er udfyldt
    • overholder validering i EventCodeValidation
    x


    x

    CdaHeaderFormatCodeValidator

    FormatCode
    • regel: Metadata-v096 2.2.10 formatCode
    • ! forudsætning for validering: FormatCode er udfyldt
      (krav om udfyldelse varierer per dokumenttype og håndteres default af CdaDocument*type*ModelEnricher)
    • overholder validering i FormatCodeValidation
    x


    x

    CdaHeaderLanguageCodeValidator

    LanguageCode
    KlasseFeltValideringITI 41ITI 42ITI 61ITI 57Cda dokument

    CdaHeaderAuthorInstitutionValidator

    AuthorInstitution
    • regel: Metadata-v096 2.2.1.1 authorInstitution
    • author er udfyldt 
    • 15 languageCode
    • languageCode er authorInstitution er udfyldt
    • overholder validering i OrganisationCodeValidationLanguageCodeValidation
    x


    x

    CdaHeaderAuthorPersonValidatorCdaHeaderPatientIdValidator

    AuthorPersonPatientId
    • regel: Metadata-v096 2.2.1.2 authorPerson! forudsætning for validering: authorPerson er udfyldt.2.20 patientId
    • der er et FamilyName og mindst et givenNameen Patient med et PatientId
    • overholder validering i PatientIdCodeValidation
    x


    x

    CdaHeaderConfidentialityCodeValidatorCdaHeaderSourcePatientIdValidator

    ConfidentialityCodeSourcePatientId
    • regel: Metadata-v096 2.2.5 confidentialityCode28 sourcePatientId
    • confidentialityCode er udfyldtder er en sourcePatient med et PatientId
    • overholder validering i ConfidentialityCodeValidationPatientIdCodeValidation
    x


    x

    CdaHeaderEventCodeValidatorCdaHeaderSourcePatientInfoValidator

    EventCodeSourcePatientInfo
    • regel: Metadata-v096 2.2.9 eventCodeList
    • ! forudsætning for validering: EventCodeList har elementer
    • EventCode er udfyldt
    • 29 sourcePatientInfo
    • der er en patient
    • der er et familyName og mindst et givenName
    • der er en fødselsdag
    • der er et kønoverholder validering i EventCodeValidation
    x


    x

    CdaHeaderFormatCodeValidatorCdaHeaderTitleValidator

    FormatCodeTitle
    • regel: Metadata-v096 2.2.10 formatCode31 title
    • title er udfyldt! forudsætning for validering: FormatCode er udfyldt
      (krav om udfyldelse varierer per dokumenttype og håndteres default af CdaDocument*type*ModelEnricher)
    • overholder validering i FormatCodeValidationTitleValidation
    x


    x

    CdaHeaderLanguageCodeValidatorCdaHeaderTypeCodeValidator

    LanguageCodeTypeCode
    • regel: Metadata-v096 2.2.15 languageCode32 typeCode
    • TypeCode (CodeCodedValue) languageCode er udfyldt
    • overholder validering i LanguageCodeValidationTypeCodeValidation
    x


    x

    CdaHeaderPatientIdValidatorDocumentEntryClassCodeValidator

    PatientIdClassCode
    • regel: Metadata-v096 2.2.20 patientId3 classCode
    • der er en Patient med et PatientIdclassCode er udfyldt
    • overholder validering i PatientIdCodeValidationClassCodeValidation
    xxxx
    CdaHeaderSourcePatientIdValidatorDocumentEntryAuthorInstitutionValidatorSourcePatientIdAuthorInstitution
    • regel: Metadata-v096 2.2.28 sourcePatientId.1.1 authorInstitution
    • der er mindst en author
    • der er en sourcePatient med et PatientIdauthorInstitution 
    • overholder validering i PatientIdCodeValidationOrganisationCodeValidation
    xxxx
    CdaHeaderSourcePatientInfoValidatorDocumentEntryAuthorPersonValidatorSourcePatientInfoAuthorPerson
    • regel: Metadata-v096 2.2.1.29 sourcePatientInfo2 authorPerson
    • ! forudsætning for validering: authorPerson er udfyldtder er en patient
    • der er et familyName og mindst et givenName
    • der er en fødselsdag
    • der er et køn
    • prefix, suffix og degree er ikke udfyldt
    xxxx
    CdaHeaderTitleValidatorDocumentEntryAvailabilityStatusValidatorTitleAvailabilityStatus
    • regel: Metadata-v096 2.2.31 title2 availabilityStatus
    • title AvailabilityStatus er udfyldtoverholder validering i TitleValidation
    • AvailabilityStatus indeholder værdien approved eller deprecated
    xx

    CdaHeaderTypeCodeValidator

    TypeCoderegel: Metadata-v096 2.2.32 typeCode
  • TypeCode (CodeCodedValue) er udfyldt
  • overholder validering i TypeCodeValidation
  • xx
    DocumentEntryClassCodeValidatorClassCode
    • regel: Metadata-v096 2.2.3 classCode
    • classCode er udfyldt
    • overholder validering i ClassCodeValidation
    xxxx
    DocumentEntryAuthorInstitutionValidatorDocumentEntryConfidentialityCodeValidatorAuthorInstitutionConfidentialityCode
    • regel: Metadata-v096 2.2.1.1 authorInstitutionder er mindst en author5 confidentialityCode
    • der er mindst en authorInstitution confidentialityCode
    • overholder validering i OrganisationCodeValidationConfidentialityCodeValidation
    xxxx
    DocumentEntryAuthorPersonValidatorDocumentEntryCreationTimeValidatorAuthorPersonCreationTime
    • regel: Metadata-v096 2.2.1.2 authorPerson7 createTime
    • ! forudsætning for validering: authorPerson type er udfyldt
    • der er et familyName og et givenName
    • CreationTime er udfyldt for Stable
    • CreationTime prefix, suffix og degree er ikke udfyldt for onDemand
    xxxx
    DocumentEntryAvailabilityStatusValidatorDocumentEntryEntryUUIDValidatorAvailabilityStatusEntryUUID
    • regel: Metadata-v096 2.2.2 availabilityStatus8 entryUUID
    • AvailabilityStatus EntryUUID er udfyldt
    • AvailabilityStatus indeholder værdien approved eller deprecated
    xxxx
    DocumentEntryClassCodeValidatorDocumentEntryEventCodeValidatorClassCodeEventCode
    • regel: Metadata-v096 2.2.3 classCode9 eventCodeList
    • ! forudsætning for validering: EventCodeList har elementer
    • EventCode classCode er udfyldt
    • overholder validering i ClassCodeValidationEventCodeValidation
    xxxx
    DocumentEntryConfidentialityCodeValidatorDocumentEntryFormatCodeValidatorConfidentialityCodeFormatCode
    • regel: Metadata-v096 2.2.5 confidentialityCode10 formatCode
    • der FormatCode er mindst en confidentialityCodeudfyldt
    • overholder validering i ConfidentialityCodeValidationFormatCodeValidation
    xxxx
    DocumentEntryCreationTimeValidatorDocumentEntryHashValidatorCreationTimeHash
    • regel: Metadata-v096 2.2.7 createTime11 hash
    • ! forudsætning for validering: type er udfyldt
    • CreationTime Hash er udfyldt for Stable
    • CreationTime Hash er ikke udfyldt for onDemand

    xxx
    DocumentEntryHealthcareFacilityTypeCodeValidatorHealthcareFacilityTypeCode
    • regel: Metadata-v096 2.2.12 healthcareFacilityTypeCode
    • FealthcareFacilityTypeCode er udfyldt
    • overholder validering i HealthcareFacilityTypeCodeValidation
    xxxx
    DocumentEntryEntryUUIDValidatorDocumentEntryLanguageCodeValidatorEntryUUIDLanguageCode
    • regel: Metadata-v096 2.2.8 entryUUID15 languageCode
    • EntryUUID languageCode er udfyldt
    • overholder validering i LanguageCodeValidation
    xxxx
    DocumentEntryEventCodeValidatorDocumentEntryLegalAuthenticatorValidatorEventCodeLegalAuthenticator
    • regel: Metadata-v096 2.2.9 eventCodeList16 legalAuthenticator
    • ! forudsætning for validering: EventCodeList har elementer
    • EventCode er udfyldt
    • legelAuthenticator er udfyldt
    • der er et familyName og et givenName 
    • længden af personens navne overstiger ikke 256
    • prefix, suffix og degree er ikke udfyldtoverholder validering i EventCodeValidation
    xxxx
    DocumentEntryFormatCodeValidatorDocumentEntryMimeTypeValidatorFormatCodeMimeType
    • regel: Metadata-v096 2.2.10 formatCode18 mimeType
    • FormatCode MimeType er udfyldt
    • overholder validering i FormatCodeValidationMimeTypeValidation
    xxxx
    DocumentEntryHashValidatorDocumentEntryPatientIdValidatorHashPatientId
    • regel: Metadata-v096 2.2.11 hash
    • ! forudsætning for validering: type er udfyldt
    • Hash er udfyldt for Stable
    • Hash er ikke udfyldt for onDemand
    xxxDocumentEntryHealthcareFacilityTypeCodeValidatorHealthcareFacilityTypeCode
    • 20 PatientId
    • der er en PatientId
    • overholder validering i PatientIdCodeValidation
    • regel: Metadata-v096 2.2.12 healthcareFacilityTypeCode
    • FealthcareFacilityTypeCode er udfyldt
    • overholder validering i HealthcareFacilityTypeCodeValidation
    xxxx
    DocumentEntryLanguageCodeValidatorDocumentEntryPracticeSettingCodeValidatorLanguageCodePracticeSettingCode
    • regel: Metadata-v096 2.2.15 languageCode21 practiceSettingCode
    • ! forudsætning for validering: PracticeSettingCode languageCode er udfyldt
    • overholder validering i LanguageCodeValidationPracticeSettingCodeValidation
    xxxx
    DocumentEntryLegalAuthenticatorValidatorDocumentEntryReferenceidListValidatorLegalAuthenticatorReferenceidList
    • regel: Metadata-v096 2.2.16 legalAuthenticator22 referenceIdList
    • ! forudsætning for validering: legelAuthenticator ReferenceIdList har elementer
    • Id er udfyldtder er et familyName og et givenName 
    • længden af personens navne Id overstiger ikke 256prefix, suffix og degree er ikke udfyldt 256
    xxxx
    DocumentEntryMimeTypeValidatorDocumentEntryRepositoryUniqueIdValidatorMimeTypeRepositoryUniqueId
    • regel: Metadata-v096 2.2.18 mimeType23 repositoryUniqueId
    • MimeType RepositoryUniqueId er udfyldtoverholder validering i MimeTypeValidation
    xxxx
    DocumentEntryPatientIdValidatorDocumentEntrySizeValidatorPatientIdSize
    • regel: Metadata-v096 2.2.20 PatientId
    • der er en PatientId
    • overholder validering i PatientIdCodeValidation
    x
    • 26 size
    • ! forudsætning for validering: type er udfyldt
    • Size er udfyldt for Stable
    • Size er ikke udfyldt for onDemand

    xxx
    DocumentEntryPracticeSettingCodeValidatorDocumentEntrySourcePatientIdValidatorPracticeSettingCodeSourcePatientId
    • regel: Metadata-v096 2.2.21 practiceSettingCode28 sourcePatientId
    • der er en SourcePatientId! forudsætning for validering: PracticeSettingCode er udfyldt
    • overholder validering i PracticeSettingCodeValidationPatientIdCodeValidation
    xxxx
    DocumentEntryReferenceidListValidatorDocumentEntrySourcePatientInfoValidatorReferenceidListSourcePatientInfo
    • regel: Metadata-v096 2.2.22 referenceIdList
    • ! forudsætning for validering: ReferenceIdList har elementer
    • Id er udfyldt
    • 29 sourcePatientInfo
    • der er en SourcePatientInfo, hvis denne er krævet
    • der er et navn, herunder et efternavn og mindst et fornavn
    • der er en fødselsdag
    • der er et kønlængden af Id overstiger ikke 256
    xxxx
    DocumentEntryRepositoryUniqueIdValidatorDocumentEntryTitleValidatorRepositoryUniqueIdTitle
    • regel: Metadata-v096 2.2.23 repositoryUniqueId31 title
    • RepositoryUniqueId title er udfyldt
    • overholder validering i TitleValidation
    xxxx
    DocumentEntrySizeValidatorDocumentEntryTypeCodeValidatorSizeTypeCode
    • regel: Metadata-v096 2.2.26 size
    • ! forudsætning for validering: type er udfyldt
    • Size er udfyldt for Stable
    • Size er ikke udfyldt for onDemand
    • 32 typeCode
    • TypeCode er udfyldt
    • overholder validering i TypeCodeValidation
    xxxx
    DocumentEntrySourcePatientIdValidatorDocumentEntryTypeValidatorSourcePatientIdType
    • regel: Metadata-v096 2.2.28 sourcePatientId19 objectType
    • der Type er en SourcePatientIdoverholder validering i PatientIdCodeValidationudfyldt
    • Type har en forventet værdi (Default for ITI41/ITI-42 er stable og for ITI-61 er on-demand)
    xxxx
    DocumentEntrySourcePatientInfoValidatorDocumentEntryUniqueIdValidatorSourcePatientInfoUniqueId
    • regel: Metadata-v096 2.2.29 sourcePatientInfo33 uniqueId
    • der er en SourcePatientInfo, hvis denne er krævet
    • der er et navn, herunder et efternavn og mindst et fornavn
    • der er en fødselsdag
    • der er et kønUniqueId er udfyldt
    xxxx
    DocumentEntryTitleValidatorDocumentEntryURIValidatorTitleURI
    • regel: Metadata-v096 2.2.31 title35 URI
    • ! forudsætning for validering: URI title er udfyldtoverholder validering i TitleValidation
    • længden af URI overstiger ikke 256
    xxxx
    DocumentEntryTypeCodeValidatorDocumentEntryHomeCommunityIdValidatorTypeCodeHomeCommunityId
    • regel: Metadata-v096 2.2.
    32 typeCodeTypeCode er udfyldt
    • 13 homeCommunityId
    • der er en HomeCommunityId, hvis denne er krævet
    • overholder validering i
    TypeCodeValidation
    • HomeCommunityIdValidation
    xxxx
    DocumentEntryTypeValidatorSubmissionSetAuthorInstitutionValidatorTypeAuthorInstitution
    • regel: Metadata-v096 2.2.1.19 objectType
    • Type er udfyldt
    • 1 authorInstitution
    • ! forudsætning for validering: Author og AuthorInstitution er udfyldt
    • overholder validering i OrganisationCodeValidationType har en forventet værdi (Default for ITI41/ITI-42 er stable og for ITI-61 er on-demand)
    xxxx
    DocumentEntryUniqueIdValidatorSubmissionSetEntryUUIDValidatorUniqueIdEntryUUID
    • regel: Metadata-v096 2.2.33 uniqueId8 entryUUID
    • UniqueId EntryUUID er udfyldt
    xxxx
    DocumentEntryURIValidatorSubmissionSetPatientIdValidatorURIPatientId
    • regel: Metadata-v096 2.2.35 URI28 sourcePatientId
    • der er en Patient
    • overholder validering i PatientIdCodeValidation
    xxxx
    SubmissionSetUniqueIdValidatorUniqueId
    • regel: Metadata-v096 2.2.33 uniqueId
    • UniqueId er udfyldt
    • ! forudsætning for validering: URI er udfyldt
    • længden af URI overstiger ikke 256
    xxxx
    DocumentEntryHomeCommunityIdValidatorSubmissionSetHomeCommunityIdValidatorHomeCommunityId
    • regel: Metadata-v096 2.2.13 homeCommunityId
    • der er en HomeCommunityId, hvis denne er krævetoverholder validering i HomeCommunityIdValidation
    • overholder validering i HomeCommunityIdValidation
    xxxx








    Apd2AppointmentIdValidatorAppointmentId
    • regel: DK-APD-v2.0.1: 5.1 Appointment content
    • der er et appointmentId (CONF-DK-APD:7493)
    x


    x
    Apd2CustodianIdValidatorCustodianxxSubmissionSetAuthorInstitutionValidatorAuthorInstitution
    • regel: Metadata-v096 2.DK-APD-v2.0.1: 2.1.1 authorInstitution5 custodian
    • ! forudsætning for validering: Author og AuthorInstitution custodian er udfyldt
    • overholder validering i OrganisationCodeValidation
    x


    xxxSubmissionSetEntryUUIDValidator
    Apd2StartStopTimeValidatorStartStopTimeEntryUUID
    • regel: Metadata-v096 2.2.8 entryUUIDDK-APD-v2.0.1: 2.1.10.1 Appointment Date and Time
    • ServiceStartTime er udfyldt (CONF-DK-APD:592c)EntryUUID er udfyldt
    x


    xxx

    PhmrCustodianIdValidator

    Custodian

    SubmissionSetPatientIdValidatorPatientId

    • regel: Metadata-v096 PHMR-DK-v1.3 2.213.28 sourcePatientId3 Custodian
    • ! forudsætning for validering: custodian er udfyldtder er en Patient
    • overholder validering i PatientIdCodeValidationOrganisationCodeValidation
    x

     

    x




    x

    x
    QrdCustodianIdValidatorSubmissionSetUniqueIdValidatorUniqueIdCustodian
    • regel: Metadata-v096 DK-QRD-v1.3: 2.2.33 uniqueId5 Custodian
    • ! forudsætning for validering: custodian UniqueId er udfyldt
    x
    • overholder validering i OrganisationCodeValidation
    x


    xx








    AudioDocumentEntryEventCodeValidatorSubmissionSetHomeCommunityIdValidatorHomeCommunityIdEventCodeList
    • !forudsætning for validering: TypeCode har værdien codesystem "2.16.840.1.113883.6.1", code "28615-3" og displayname "Audiology Study"
    • EventCode skal være udfyldt
    • EventCode skal indeholde ét element
    • regel: Metadata-v096 2.2.13 homeCommunityId
    • der er en HomeCommunityId, hvis denne er krævet
    • overholder validering i HomeCommunityIdValidation
    xxxx
    Apd2AppointmentIdValidatorAudioDocumentEntryReferenceidListValidatorAppointmentId
    • regel: DK-APD-v2.0.1: 5.1 Appointment content
    • der er et appointmentId (CONF-DK-APD:7493)
    xxApd2CustodianIdValidatorCustodian
    • regel: DK-APD-v2.0.1: 2.1.5 custodian
    • ! forudsætning for validering: custodian er udfyldt
    • overholder validering i OrganisationCodeValidation
    xxApd2StartStopTimeValidatorStartStopTime
    • regel: DK-APD-v2.0.1: 2.1.10.1 Appointment Date and Time
    • ServiceStartTime er udfyldt (CONF-DK-APD:592c)
    xx

    PhmrCustodianIdValidator

    Custodian

    • regel: PHMR-DK-v1.3 2.13.3 Custodian
    • ! forudsætning for validering: custodian er udfyldt
    • overholder validering i OrganisationCodeValidation

     

    x

    x

    QrdCustodianIdValidatorCustodian
    • regel: DK-QRD-v1.3: 2.2.5 Custodian
    • ! forudsætning for validering: custodian er udfyldt
    • overholder validering i OrganisationCodeValidation
    xxReferenceidList
    • !forudsætning for validering: TypeCode har værdien codesystem "2.16.840.1.113883.6.1", code "28615-3" og displayname "Audiology Study"
    • ReferenceidList skal være udfyldt
    • ReferenceId skal have et gyldigt format:
      • Id skal være udfyldt og have et gyldigt UUID-format
      • AssigningAuthority må ikke være udfyldt
      • IdTypeCode skal være udfyldt og have værdien "urn:ad:dk:medcom:noah:action-uuid"
      • HomeCommunityId må ikke være udfyldt
    xxxx
    AudioDocumentEntryServiceStartTimeValidatorServiceStartTime
    • !forudsætning for validering: TypeCode har værdien codesystem "2.16.840.1.113883.6.1", code "28615-3" og displayname "Audiology Study"
    • ServiceStartTime skal være angivet
    • ServiceStartTime må ikke være før notBefore, hvis notBefore er angivet
    xxxx
    AudioDocumentEntryServiceStopTimeValidatorServiceStopStime
    • !forudsætning for validering: TypeCode har værdien codesystem "2.16.840.1.113883.6.1", code "28615-3" og displayname "Audiology Study"
    • ServiceStopTime skal være udfyldt
    xxxx
    AudioDocumentEntryFormatCodeAndEventCodeValidator

    FormatCode

    EventCodeList

    • !forudsætning for validering: TypeCode har værdien codesystem "2.16.840.1.113883.6.1", code "28615-3" og displayname "Audiology Study"
    • FormatCode skal være angivet i EventCodeList, hvis EventCodeList er angivet.
    AudioDocumentEntryEventCodeValidatorEventCodeList
    • EventCodeList skal være udfyldt
    • EventCodeList skal indeholde præcis 1 EventCode
    xxxx
    AudioDocumentEntryReferenceidListValidatorAudioDocumentEntrySourcePatientIdAndPatientIdValidatorReferenceidList

    SourcePatientId

    PatientId

    • !forudsætning for validering: TypeCode har værdien codesystem "2.16.840.1.113883.6.1", code "28615-3" og displayname "Audiology Study"
    • SourcePatientId må ikke være forskellig fra PatientId.
    • ReferenceidList skal være udfyldt
    • ReferenceidList skal indeholde præcis 1 ReferenceId
    • ReferenceId skal have Id, som er valid UUID (UUIDFormatValidation)
    • ReferenceId må ikke indeholde AssigningAuthority
    • ReferenceId skal indeholde IdTypeCode "urn:ad:dk:medcom:noah:action-uuid"
    • ReferenceId må ikke indeholde HomeCommunityId
    xxxx
    AudioDocumentEntryServiceStopTimeAndServiceStartTimeValidatorAudioDocumentEntryServiceStartTimeValidator

    ServiceStopTime

    ServiceStartTime

    • !forudsætning for validering: TypeCode har værdien codesystem "2.16.840.1.113883.6.1", code "28615-3" og displayname "Audiology Study"
    • ServiceStopTime
    • ServiceStartTime skal være angivet
    • ServiceStartTime
    • må ikke være før
    • Dato angivet vha. XDSConfiguration
    xxxxAudioDocumentEntryServiceStopTimeValidatorServiceStopStime
      ServiceStopTime skal være angivet
    • ServiceStartTime.
    xxxx


    .