Page History
...
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.
...
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
...
| 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 public class XdsValidatorFactory { Perform the validation ValidationResultSet publicresultSet ProvideAndRegisterDocumentSetStarter= buildIti41Validatorvalidator.get() {; return Iti41ValidationFactory.createIti41Validator();// Construct the result } public RegisterDocumentSetStarter buildIti42Validator(if(resultSet.getValidationResults().size() > 0) { return Iti42ValidationFactory.createIti42Validator(); // } Based on the validation publiclevel, RegisterDocumentSetStartereither buildIti57Validator() { return a warning or an error. return Iti57ValidationFactory.createIti57Validator(); } for(ValidationResult publicvr RegisterDocumentSetStarter: buildIti61ValidatorresultSet.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 | |||||||||||||||||
| CdaDocumentQrdModelEnricherCdaDocumentPhmrModelEnricher |
| x | x | |||||||||||||||||||||
| CdaDocumentPhadModelEnricher |
| x | x | AudioDocumentModelEnricherCdaDocumentQrdModelEnricher |
| x | x | x | x | AudioDocumentAudiogramModelEnricher |
| x | AudioDocumentImpedanceModelEnricher |
| x | AudioDocumentHearingInstrumentSelectionModelEnricher |
| x |
| x | x | |||
| CdaDocumentPhadModelEnricher |
| x | x | |||||||||||||||||||||
| AudioDocumentModelEnricher |
| x | x | x | x | |||||||||||||||||||
| AudioDocumentAudiogramModelEnricher |
| x | ||||||||||||||||||||||
| AudioDocumentImpedanceModelEnricher |
| x | ||||||||||||||||||||||
| AudioDocumentHearingInstrumentSelectionModelEnricher |
| x | ||||||||||||||||||||||
| AudioDocumentAudiogramModelValidator | AudioDocumentAudiogramModelValidator |
| x | AudioDocumentImpedanceModelValidator |
| x | ||||||||||||||||||
| AudioDocumentImpedanceModelValidator |
| AudioDocumentHearingInstrumentSelectionModelValidator |
| x |
Typevalideringer
Dette er hjælpevalideringer, som feltvalideringer gør brug af.
| x | |||||
| AudioDocumentHearingInstrumentSelectionModelValidator |
| x |
Typevalideringer
Dette er hjælpevalideringer, som feltvalideringer gør brug af.
| Klasse | Validering | ||||
|---|---|---|---|---|---|
ConfigCodeModelChecker |
| ||||
AbstractElementCompare |
| ||||
CodedModelCompare |
| ||||
DateTimeCompare |
| ||||
DateCompare |
| ||||
StringCompare |
| ||||
ConfigValuesChecker |
| ||||
CodedValueValidator | |||||
| Klasse | Validering | ||||
ConfigCodeModelChecker |
| ||||
AbstractElementCompare |
| ||||
CodedModelCompare |
| ||||
DateTimeCompare |
| ||||
DateCompare |
| ||||
StringCompare |
| ||||
ConfigValuesChecker |
| ||||
CodedValueValidator |
| ||||
StringValidation |
| ||||
ClassCodeValidation |
| ||||
| ConfidentialityCodeValidation |
| ||||
| EventCodeValidation |
| ||||
| FormatCodeValidation |
| ||||
| |||||
StringValidation |
| ||||
ClassCodeValidation |
| HealthcareFacilityTypeCodeValidation |
| LanguageCodeValidation |
|
| ConfidentialityCodeValidation |
| OrganisationCodeValidation |
| ||
| EventCodeValidation |
| ||||
| PracticeSettingCodeValidationFormatCodeValidation |
| ||||
| TitleValidation |
| ||||
| TypeCodeValidationHealthcareFacilityTypeCodeValidation |
| ||||
| 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å.
Afkrydningen i tabellens 5 sidste søjler indikerer, hvilke default valideringer, den enkelte validator er inkludret i.
| 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å.
Afkrydningen i tabellens 5 sidste søjler indikerer, hvilke default valideringer, den enkelte validator er inkludret i.
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryServiceStartTimeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryServiceStopTimeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntrySourcePatientIdValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntrySourcePatientInfoValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryTitleValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CdaHeaderCrossDocumentEntryTypeCodeValidator |
| x | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SubmissionSetCrossDocumentEntryAuthorInstitutionValidator |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | CdaHeaderCrossDocumentEntryServiceStartTimeValidator |
| x | CdaHeaderCrossDocumentEntryServiceStopTimeValidator |
| x | CdaHeaderCrossDocumentEntrySourcePatientIdValidator |
| x | CdaHeaderCrossDocumentEntrySourcePatientInfoValidator |
| 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 | ||
| AudioDocumentEntryServiceStopTimeCrossServiceStartTimeValidatorSubmissionSetCrossDocumentEntryAuthorPersonValidator |
| 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.
...
| 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 |
| x | x | ||||||||||||
CdaHeaderPatientIdValidator | PatientId |
| x | x | ||||||||||||
CdaHeaderSourcePatientIdValidator | SourcePatientId |
| x | x | ||||||||||||
CdaHeaderSourcePatientInfoValidator | SourcePatientInfo |
| x | x | ||||||||||||
CdaHeaderTitleValidator | Title |
| x | x | ||||||||||||
CdaHeaderTypeCodeValidator | TypeCode |
| x | x | ||||||||||||
DocumentEntryClassCodeValidator | ClassCode |
| x | x | x | x | ||||||||||
| DocumentEntryAuthorInstitutionValidator | AuthorInstitution |
| x | x | x | x | ||||||||||
| DocumentEntryAuthorPersonValidator | AuthorPerson |
| x | x | x | x | ||||||||||
| DocumentEntryAvailabilityStatusValidator | AvailabilityStatus |
| x | x | x | x | ||||||||||
| DocumentEntryClassCodeValidator | ClassCode |
| x | x | x | x | ||||||||||
| DocumentEntryConfidentialityCodeValidator | ConfidentialityCode |
| x | x | x | x | ||||||||||
| DocumentEntryCreationTimeValidator | CreationTime |
| x | x | x | x | ||||||||||
| DocumentEntryEntryUUIDValidator | EntryUUID |
| x | x | x | x | ||||||||||
| DocumentEntryEventCodeValidator | EventCode |
| x | x | x | x | ||||||||||
| DocumentEntryFormatCodeValidator | FormatCode |
| x | x | x | x | ||||||||||
| DocumentEntryHashValidator | Hash |
| x | x | x | |||||||||||
| DocumentEntryHealthcareFacilityTypeCodeValidator | HealthcareFacilityTypeCode |
| x | x | x | x | ||||||||||
| DocumentEntryLanguageCodeValidator | LanguageCode |
| x | x | x | x | ||||||||||
| DocumentEntryLegalAuthenticatorValidator | LegalAuthenticator |
| x | x | x | x | ||||||||||
| DocumentEntryMimeTypeValidator | MimeType |
| x | x | x | x | ||||||||||
| DocumentEntryPatientIdValidator | PatientId |
| x | x | x | x | ||||||||||
| DocumentEntryPracticeSettingCodeValidator | PracticeSettingCode |
| x | x | x | x | ||||||||||
| DocumentEntryReferenceidListValidator | ReferenceidList |
| x | x | x | x | ||||||||||
| DocumentEntryRepositoryUniqueIdValidator | RepositoryUniqueId |
| x | x | x | x | ||||||||||
| DocumentEntrySizeValidator | Size |
| x | x | x | |||||||||||
| DocumentEntrySourcePatientIdValidator | SourcePatientId |
| x | x | x | x | ||||||||||
| DocumentEntrySourcePatientInfoValidator | SourcePatientInfo |
| x | x | x | x | ||||||||||
| DocumentEntryTitleValidator | Title |
| x | x | x | x | ||||||||||
| DocumentEntryTypeCodeValidator | TypeCode |
| x | x | x | x | ||||||||||
| DocumentEntryTypeValidator | Type |
| x | x | x | x | ||||||||||
| DocumentEntryUniqueIdValidator | UniqueId |
| x | x | x | x | ||||||||||
| DocumentEntryURIValidator | URI |
| x | x | x | x | ||||||||||
| DocumentEntryHomeCommunityIdValidator | HomeCommunityId |
| x | x | x | x | ||||||||||
| SubmissionSetAuthorInstitutionValidator | AuthorInstitution |
| x | x | x | x | ||||||||||
| SubmissionSetEntryUUIDValidator | EntryUUID |
| x | x | x | x | ||||||||||
| SubmissionSetPatientIdValidator | PatientId |
| x | x | x | x | ||||||||||
| SubmissionSetUniqueIdValidator | UniqueId |
| x | x | x | x | ||||||||||
| SubmissionSetHomeCommunityIdValidator | HomeCommunityId |
| x | x | x | x | ||||||||||
| Apd2AppointmentIdValidator | AppointmentId |
| x | x | ||||||||||||
| Apd2CustodianIdValidator | Custodian |
| x | x | x | x | ||||||||||
| Apd2StartStopTimeValidator | StartStopTime | Apd2AppointmentIdValidator | AppointmentId |
| x | x | ||||||||||
PhmrCustodianIdValidator | Custodian |
| x | x | ||||||||||||
| Apd2CustodianIdValidatorQrdCustodianIdValidator | Custodian |
| x | x | ||||||||||||
| Apd2StartStopTimeValidatorAudioDocumentEntryEventCodeValidator | StartStopTime | EventCodeList |
| x | x | x | x | |||||||||
| PhmrCustodianIdValidatorAudioDocumentEntryReferenceidListValidator | Custodian |
| x | x | QrdCustodianIdValidator | Custodian |
| x | x | ReferenceidList |
| x | x | x | x | |
| AudioDocumentEntryServiceStartTimeValidator | ServiceStartTime | AudioDocumentEntryEventCodeValidator | EventCodeList |
| x | x | x | x | ||||||||
| AudioDocumentEntryReferenceidListValidatorAudioDocumentEntryServiceStopTimeValidator | ReferenceidListServiceStopStime |
| x | x | x | x | ||||||||||
| AudioDocumentEntryFormatCodeAndEventCodeValidator | FormatCode EventCodeList |
| x | x | x | x | ||||||||||
| AudioDocumentEntrySourcePatientIdAndPatientIdValidatorAudioDocumentEntryServiceStartTimeValidator | SourcePatientId ServiceStartTimePatientId |
| x | x | x | x | ||||||||||
| AudioDocumentEntryServiceStopTimeAndServiceStartTimeValidatorAudioDocumentEntryServiceStopTimeValidator | ServiceStopTime ServiceStopStimeServiceStartTime |
| x | x | x | x |
.