Page History
...
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 specifikationen. Et 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:
- indholdet af et CDA dokument (generelt set, dvs headeren)
- 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
- indholdet af et iti41 kald (provide and register document set / registrer metadata)
- indholdet af et iti42 kald (register document set / registrer metadata)
- indholdet af et iti61 kald (register document set / regisgterr metadata on-demand)
- 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.
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
//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:
- indholdet af et CDA dokument (generelt set, dvs headeren)
- 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
- 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
- indholdet af et iti41 kald (provide and register document set / registrer metadata)
- indholdet af et iti42 kald (register document set / registrer metadata)
- indholdet af et iti61 kald (register document set / regisgterr metadata on-demand)
- 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.
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
//validering,nuværende hvoreksempel CdaDocumentApdV2ModelEnricherpå 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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
//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
- CdaDocumentApdV2ModelEnricher, CdaDocumentPhmrModelEnricher samt CdaDocumentQrdModelEnricher, der forsøger at parse dokumentet som en af typerne APD, PHMR eller QRD
- CdaDocumentHeaderModelEnricher, som forsøger at pakke input ud som et CDA dokument ved at finde en CDA header
- 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
- XDSDocumentContentModelEnricher (ModelEnricher), der pakker input ud som UTF8 bytes hvis muligt
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
//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
- CdaDocumentApdV2ModelEnricher, CdaDocumentPhmrModelEnricher samt CdaDocumentQrdModelEnricher, der forsøger at parse dokumentet som en af typerne APD, PHMR eller QRD
- AudioDocumentModelEnricher, som tjekker på om dokument er validt ift. skema
- AudioDocumentModelValidator, som tjekker at indhold af dokument er validt.
- CdaDocumentHeaderModelEnricher, som forsøger at pakke input ud som et CDA dokument ved at finde en CDA header
- 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
- XDSDocumentContentModelEnricher (ModelEnricher), der pakker input ud som UTF8 bytes hvis muligt
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
// 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:
- Oprette en instans af ProvideAndRegisterDocumentSetStarter (linie 2)
- Kalde metoden validate på denne med ITI 41 requested (ProvideAndRegisterDocumentSet) (linie 6)
- 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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
// 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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
// 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
}
|
...
| language | java |
|---|---|
| title | Iti57ValidationImpl - anvendels af XdsValidation |
| linenumbers | true |
...
}
} 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:
- Oprette en instans af ProvideAndRegisterDocumentSetStarter (linie 2)
- Kalde metoden validate på denne med ITI 41 requested (ProvideAndRegisterDocumentSet) (linie 18)
- 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.
...
| Klasse | Validering | ITI 41 | ITI 42 | ITI 61 | ITI 57 | Cda dokument | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| ProvideAndRegisterDocumentSetStarter |
| x | |||||||||
| RegisterDocumentSetStarter |
| x | x | x | |||||||
| XDSDocumentITI41StructureValidator |
| x | |||||||||
| XDSDocumentITI42StructureValidator |
| x | |||||||||
| XDSDocumentITI61StructureValidator |
| x | |||||||||
| XDSDocumentITI57StructureValidator |
| x | |||||||||
| XDSDocumentContentModelEnricher |
| x | |||||||||
| CdaDocumentHeaderModelEnricher |
| x | x | ||||||||
| CdaDocumentApdV2ModelEnricher |
| x | x | ||||||||
| CdaDocumentPhmrModelEnricher |
| x | x | ||||||||
| CdaDocumentQrdModelEnricher |
| x | x | ||||||||
| CdaDocumentPhadModelEnricher |
| x | x | ||||||||
| AudioDocumentModelEnricher |
| x | x | x | x |
| x | x | x | x | |
| AudioDocumentAudiogramModelEnricher |
| x | |||||||||
| AudioDocumentImpedanceModelEnricher |
| x | |||||||||
| AudioDocumentHearingInstrumentSelectionModelEnricher |
| x | |||||||||
| AudioDocumentAudiogramModelValidator |
| AudioDocumentAudiogramModelEnricher |
| x |
| x | |||||
| AudioDocumentImpedanceModelValidator |
| AudioDocumentAudiogramModelEnricher |
| x | |||||||
| AudioDocumentHearingInstrumentSelectionModelValidator |
| x | AudioDocumentHearingInstrumentSelectionModelEnricher |
| x |
Typevalideringer
Dette er hjælpevalideringer, som feltvalideringer gør brug af.
| Klasse | Validering |
|---|---|
ConfigCodeModelChecker |
|
AbstractElementCompare |
|
CodedModelCompare |
|
DateTimeCompare |
|
DateCompare |
|
StringCompare |
|
ConfigValuesChecker |
|
CodedValueValidationCodedValueValidator |
|
StringValidation |
|
ClassCodeValidation |
|
| ConfidentialityCodeValidation |
|
| EventCodeValidation |
|
| FormatCodeValidation |
|
| HealthcareFacilityTypeCodeValidation |
|
| LanguageCodeValidation |
|
| OrganisationCodeValidation |
|
| PatientIdCodeValidation |
|
| PracticeSettingCodeValidation |
|
| TitleValidation |
|
| TypeCodeValidation |
|
| ConfigValuesValidator |
|
| HomeCommunityIdValidation |
|
| MimeTypeValidation |
|
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å.
...
| Klasse | Validering mellem de 2 entiter nævnt i klassens navn | ITI 41 | ITI 42 | ITI 61 | ITI 57 | Cda dokument | ||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CdaHeaderCrossDocumentEntryAuthorInstitutionValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryAuthorPersonValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryConfidentialityCodeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryCreationTimeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryEventCodeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryLanguageCodeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryLegalAuthenticatorValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryPatientIdValidator |
| x | x | |||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryServiceStartTimeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryServiceStopTimeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntrySourcePatientIdValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntrySourcePatientInfoValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryLegalAuthenticatorValidatorCdaHeaderCrossDocumentEntryTitleValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryPatientIdValidatorCdaHeaderCrossDocumentEntryTypeCodeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryServiceStartTimeValidatorSubmissionSetCrossDocumentEntryAuthorInstitutionValidator |
| x |
| x | CdaHeaderCrossDocumentEntrySourcePatientIdValidator | x | xoverholder validering i CodedModelCompare | xCdaHeaderCrossDocumentEntrySourcePatientInfoValidator | ||||||||||||||||||||||||||||||||||||
| SubmissionSetCrossDocumentEntryAuthorPersonValidator |
| x | CdaHeaderCrossDocumentEntryTitleValidator |
| x | CdaHeaderCrossDocumentEntryTypeCodeValidator |
| x | SubmissionSetCrossDocumentEntryAuthorInstitutionValidator |
| x | x | x | x | SubmissionSetCrossDocumentEntryAuthorPersonValidator |
| x | x | x | x | SubmissionSetCrossDocumentEntryPatientIdValidator |
| x | x | x | x | AudioDocumentEntryFormatCodeCrossEventCodeValidator |
| x | x | x | x | AudioDocumentEntrySourcePatientIdCrossPatientIdValidator |
| x | x | x | x | AudioDocumentEntryServiceStopTimeCrossServiceStartTimeValidator |
| x | x | x | x |
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.
| x | x | x | x | ||
| SubmissionSetCrossDocumentEntryPatientIdValidator |
| x | x | x | x |
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.
| Klasse | Felt | Validering | ITI 41 | ITI 42 | ITI 61 | ITI 57 | Cda dokument | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CdaHeaderAuthorInstitutionValidator | AuthorInstitution |
| x | x | |||||||||||||||||||||||||||
CdaHeaderAuthorPersonValidator | AuthorPerson |
| x | x | |||||||||||||||||||||||||||
CdaHeaderConfidentialityCodeValidator | ConfidentialityCode |
| x | x | |||||||||||||||||||||||||||
CdaHeaderEventCodeValidator | EventCode |
| x | x | |||||||||||||||||||||||||||
CdaHeaderFormatCodeValidator | FormatCode |
| x | x | |||||||||||||||||||||||||||
CdaHeaderLanguageCodeValidator | LanguageCode | ||||||||||||||||||||||||||||||
| Klasse | Felt | Validering | ITI 41 | ITI 42 | ITI 61 | ITI 57 | Cda dokument | ||||||||||||||||||||||||
CdaHeaderAuthorInstitutionValidator | AuthorInstitution |
| x | x | |||||||||||||||||||||||||||
CdaHeaderAuthorPersonValidatorCdaHeaderPatientIdValidator | AuthorPersonPatientId |
| x | x | |||||||||||||||||||||||||||
CdaHeaderConfidentialityCodeValidatorCdaHeaderSourcePatientIdValidator | ConfidentialityCodeSourcePatientId |
| x | x | |||||||||||||||||||||||||||
CdaHeaderEventCodeValidatorCdaHeaderSourcePatientInfoValidator | EventCodeSourcePatientInfo |
| x | x | |||||||||||||||||||||||||||
CdaHeaderFormatCodeValidatorCdaHeaderTitleValidator | FormatCodeTitle |
| x | x | |||||||||||||||||||||||||||
CdaHeaderLanguageCodeValidatorCdaHeaderTypeCodeValidator | LanguageCodeTypeCode |
| x | x | |||||||||||||||||||||||||||
CdaHeaderPatientIdValidatorDocumentEntryClassCodeValidator | PatientIdClassCode |
| x | x | x | x | |||||||||||||||||||||||||
| CdaHeaderSourcePatientIdValidatorDocumentEntryAuthorInstitutionValidator | SourcePatientIdAuthorInstitution |
| x | x | x | x | |||||||||||||||||||||||||
| CdaHeaderSourcePatientInfoValidatorDocumentEntryAuthorPersonValidator | SourcePatientInfoAuthorPerson |
| x | x | x | x | |||||||||||||||||||||||||
| CdaHeaderTitleValidatorDocumentEntryAvailabilityStatusValidator | TitleAvailabilityStatus |
| x | x | CdaHeaderTypeCodeValidator | TypeCode | regel: Metadata-v096 2.2.32 typeCode | x | x | ||||||||||||||||||||||
| DocumentEntryClassCodeValidator | ClassCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryAuthorInstitutionValidatorDocumentEntryConfidentialityCodeValidator | AuthorInstitutionConfidentialityCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryAuthorPersonValidatorDocumentEntryCreationTimeValidator | AuthorPersonCreationTime |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryAvailabilityStatusValidatorDocumentEntryEntryUUIDValidator | AvailabilityStatusEntryUUID |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryClassCodeValidatorDocumentEntryEventCodeValidator | ClassCodeEventCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryConfidentialityCodeValidatorDocumentEntryFormatCodeValidator | ConfidentialityCodeFormatCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryCreationTimeValidatorDocumentEntryHashValidator | CreationTimeHash |
| x | x | x | ||||||||||||||||||||||||||
| DocumentEntryHealthcareFacilityTypeCodeValidator | HealthcareFacilityTypeCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryEntryUUIDValidatorDocumentEntryLanguageCodeValidator | EntryUUIDLanguageCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryEventCodeValidatorDocumentEntryLegalAuthenticatorValidator | EventCodeLegalAuthenticator |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryFormatCodeValidatorDocumentEntryMimeTypeValidator | FormatCodeMimeType |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryHashValidatorDocumentEntryPatientIdValidator | HashPatientId |
| x | x | x | DocumentEntryHealthcareFacilityTypeCodeValidator | HealthcareFacilityTypeCode |
| x | x | x | x | |||||||||||||||||||
| DocumentEntryLanguageCodeValidatorDocumentEntryPracticeSettingCodeValidator | LanguageCodePracticeSettingCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryLegalAuthenticatorValidatorDocumentEntryReferenceidListValidator | LegalAuthenticatorReferenceidList |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryMimeTypeValidatorDocumentEntryRepositoryUniqueIdValidator | MimeTypeRepositoryUniqueId |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryPatientIdValidatorDocumentEntrySizeValidator | PatientIdSize |
| x | x | x | ||||||||||||||||||||||||||
| DocumentEntryPracticeSettingCodeValidatorDocumentEntrySourcePatientIdValidator | PracticeSettingCodeSourcePatientId |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryReferenceidListValidatorDocumentEntrySourcePatientInfoValidator | ReferenceidListSourcePatientInfo |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryRepositoryUniqueIdValidatorDocumentEntryTitleValidator | RepositoryUniqueIdTitle |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntrySizeValidatorDocumentEntryTypeCodeValidator | SizeTypeCode |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntrySourcePatientIdValidatorDocumentEntryTypeValidator | SourcePatientIdType |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntrySourcePatientInfoValidatorDocumentEntryUniqueIdValidator | SourcePatientInfoUniqueId |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryTitleValidatorDocumentEntryURIValidator | TitleURI |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryTypeCodeValidatorDocumentEntryHomeCommunityIdValidator | TypeCodeHomeCommunityId |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryTypeValidatorSubmissionSetAuthorInstitutionValidator | TypeAuthorInstitution |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryUniqueIdValidatorSubmissionSetEntryUUIDValidator | UniqueIdEntryUUID |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryURIValidatorSubmissionSetPatientIdValidator | URIPatientId |
| x | x | x | x | |||||||||||||||||||||||||
| SubmissionSetUniqueIdValidator | UniqueId |
| x | x | x | x | |||||||||||||||||||||||||
| DocumentEntryHomeCommunityIdValidatorSubmissionSetHomeCommunityIdValidator | HomeCommunityId |
| x | x | x | x | |||||||||||||||||||||||||
| Apd2AppointmentIdValidator | AppointmentId |
| x | x | |||||||||||||||||||||||||||
| Apd2CustodianIdValidator | Custodian | x | x | SubmissionSetAuthorInstitutionValidator | AuthorInstitution |
| x | x | x | x | SubmissionSetEntryUUIDValidator | ||||||||||||||||||||
| Apd2StartStopTimeValidator | StartStopTimeEntryUUID |
| x | x | x | x | |||||||||||||||||||||||||
PhmrCustodianIdValidator | Custodian | SubmissionSetPatientIdValidator | PatientId |
| x | x x | |||||||||||||||||||||||||
| QrdCustodianIdValidator | SubmissionSetUniqueIdValidator | UniqueIdCustodian |
| x | xx | ||||||||||||||||||||||||||
| AudioDocumentEntryEventCodeValidator | SubmissionSetHomeCommunityIdValidator | HomeCommunityId | EventCodeList |
| x | x | x | x | |||||||||||||||||||||||
| Apd2AppointmentIdValidatorAudioDocumentEntryReferenceidListValidator | AppointmentId |
| x | x | Apd2CustodianIdValidator | Custodian |
| x | x | Apd2StartStopTimeValidator | StartStopTime |
| x | x | PhmrCustodianIdValidator | Custodian |
| x | x | QrdCustodianIdValidator | Custodian |
| x | x | ReferenceidList |
| x | x | x | x | |
| AudioDocumentEntryServiceStartTimeValidator | ServiceStartTime |
| x | x | x | x | |||||||||||||||||||||||||
| AudioDocumentEntryServiceStopTimeValidator | ServiceStopStime |
| x | x | x | x | |||||||||||||||||||||||||
| AudioDocumentEntryFormatCodeAndEventCodeValidator | FormatCode EventCodeList |
| AudioDocumentEntryEventCodeValidator | EventCodeList |
| x | x | x | x | ||||||||||||||||||||||
| AudioDocumentEntryReferenceidListValidatorAudioDocumentEntrySourcePatientIdAndPatientIdValidator | ReferenceidList | SourcePatientId PatientId |
| x | x | x | x | ||||||||||||||||||||||||
| AudioDocumentEntryServiceStopTimeAndServiceStartTimeValidatorAudioDocumentEntryServiceStartTimeValidator | ServiceStopTime ServiceStartTime |
| x | x | x | x | AudioDocumentEntryServiceStopTimeValidator | ServiceStopStime |
| x | x | x | x |
.
