diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java index db188b615..c8bccf21a 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/ValueSetCheckerSimple.java @@ -63,6 +63,7 @@ import org.hl7.fhir.r5.model.ValueSet.ConceptSetFilterComponent; import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionContainsComponent; import org.hl7.fhir.r5.terminologies.ValueSetChecker.ValidationProcessInfo; import org.hl7.fhir.r5.terminologies.ValueSetExpander.TerminologyServiceErrorClass; +import org.hl7.fhir.r5.terminologies.ValueSetExpander.ValueSetExpansionOutcome; import org.hl7.fhir.r5.utils.ToolingExtensions; import org.hl7.fhir.r5.utils.validation.ValidationContextCarrier; import org.hl7.fhir.r5.utils.validation.ValidationContextCarrier.ValidationContextResourceProxy; @@ -207,7 +208,17 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe String system = code.hasSystem() ? code.getSystem() : getValueSetSystemOrNull(); if (options.getValueSetMode() != ValueSetMode.CHECK_MEMERSHIP_ONLY) { if (system == null && !code.hasDisplay()) { // dealing with just a plain code (enum) - system = systemForCodeInValueSet(code.getCode()); + List problems = new ArrayList<>(); + system = systemForCodeInValueSet(code.getCode(), problems); + if (system == null) { + if (problems.size() == 0) { + throw new Error("Unable to resolve systems but no reason why"); // this is an error in the java code + } else if (problems.size() == 1) { + return new ValidationResult(IssueSeverity.ERROR, problems.get(0)); + } else { + return new ValidationResult(IssueSeverity.ERROR, problems.toString()); + } + } } if (!code.hasSystem()) { if (options.isGuessSystem() && system == null && Utilities.isAbsoluteUrl(code.getCode())) { @@ -453,36 +464,6 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe } } - private String getValueSetSystem() throws FHIRException { - if (valueset == null) { - throw new FHIRException(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__NO_VALUE_SET)); - } - if (valueset.getCompose().getInclude().size() == 0) { - if (!valueset.hasExpansion() || valueset.getExpansion().getContains().size() == 0) { - throw new FHIRException(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_NO_INCLUDES_OR_EXPANSION)); - } else { - String cs = valueset.getExpansion().getContains().get(0).getSystem(); - if (cs != null && checkSystem(valueset.getExpansion().getContains(), cs)) { - return cs; - } else { - throw new FHIRException(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_EXPANSION_HAS_MULTIPLE_SYSTEMS)); - } - } - } - for (ConceptSetComponent inc : valueset.getCompose().getInclude()) { - if (inc.hasValueSet()) { - throw new FHIRException(context.formatMessagePL(inc.getValueSet().size(), I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_IMPORTS)); - } - if (!inc.hasSystem()) { - throw new FHIRException(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_INCLUDE_WITH_NO_SYSTEM)); - } - } - if (valueset.getCompose().getInclude().size() == 1) { - return valueset.getCompose().getInclude().get(0).getSystem(); - } - - return null; - } private String getValueSetSystemOrNull() throws FHIRException { if (valueset == null) { @@ -561,36 +542,41 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe } - private String systemForCodeInValueSet(String code) { + private String systemForCodeInValueSet(String code, List problems) { Set sys = new HashSet<>(); - if (!scanForCodeInValueSet(code, sys)) { + if (!scanForCodeInValueSet(code, sys, problems)) { return null; } if (sys.size() != 1) { + problems.add(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_MULTIPLE_MATCHES, sys.toString())); return null; } else { return sys.iterator().next(); } } - private boolean scanForCodeInValueSet(String code, Set sys) { + private boolean scanForCodeInValueSet(String code, Set sys, List problems) { if (valueset.hasCompose()) { - // not sure what to do with the -// if (valueset.getCompose().hasExclude()) { -// return false; -// } + // ignore excludes - they can't make any difference + if (!valueset.getCompose().hasInclude() && !valueset.getExpansion().hasContains()) { + problems.add(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_NO_INCLUDES_OR_EXPANSION, valueset.getVersionedUrl())); + } + + int i = 0; for (ConceptSetComponent vsi : valueset.getCompose().getInclude()) { if (vsi.hasValueSet()) { for (CanonicalType u : vsi.getValueSet()) { - if (!checkForCodeInValueSet(code, u.getValue(), sys)) { + if (!checkForCodeInValueSet(code, u.getValue(), sys, problems)) { return false; } } } else if (!vsi.hasSystem()) { + problems.add(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_INCLUDE_WITH_NO_SYSTEM, valueset.getVersionedUrl(), i)); return false; } if (vsi.hasSystem()) { if (vsi.hasFilter()) { + problems.add(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_INCLUDE_WITH_NO_SYSTEM, valueset.getVersionedUrl(), i, vsi.getSystem())); return false; } CodeSystem cs = resolveCodeSystem(vsi.getSystem(), vsi.getVersion()); @@ -617,35 +603,45 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe } } } else { - return false; + // we'll try to expand this one then + ValueSetExpansionOutcome vse = context.expandVS(vsi, false, false); + if (vse.isOk()) { + if (!checkSystems(vse.getValueset().getExpansion().getContains(), code, sys, problems)) { + return false; + } + } else { + problems.add(context.formatMessage(I18nConstants.UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_INCLUDE_WITH_UNKNOWN_SYSTEM, valueset.getVersionedUrl(), i, vsi.getSystem(), vse.getAllErrors().toString())); + return false; + } } } + i++; } } else if (valueset.hasExpansion()) { // Retrieve a list of all systems associated with this code in the expansion - if (!checkSystems(valueset.getExpansion().getContains(), code, sys)) { + if (!checkSystems(valueset.getExpansion().getContains(), code, sys, problems)) { return false; } } return true; } - private boolean checkForCodeInValueSet(String code, String uri, Set sys) { + private boolean checkForCodeInValueSet(String code, String uri, Set sys, List problems) { ValueSetCheckerSimple vs = getVs(uri); - return vs.scanForCodeInValueSet(code, sys); + return vs.scanForCodeInValueSet(code, sys, problems); } /* * Recursively go through all codes in the expansion and for any coding that matches the specified code, add the system for that coding * to the passed list. */ - private boolean checkSystems(List contains, String code, Set systems) { + private boolean checkSystems(List contains, String code, Set systems, List problems) { for (ValueSetExpansionContainsComponent c: contains) { if (c.getCode().equals(code)) { systems.add(c.getSystem()); } if (c.hasContains()) - checkSystems(c.getContains(), code, systems); + checkSystems(c.getContains(), code, systems, problems); } return true; } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java index 8b8f5be54..58ebadc72 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java @@ -79,7 +79,7 @@ public class I18nConstants { public static final String DOES_NOT_MATCH_SLICE_ = "Does_not_match_slice_"; public static final String DUPLICATE_ID = "DUPLICATE_ID"; public static final String DUPLICATE_RESOURCE_ = "Duplicate_Resource_"; - public static final String DUPLICATE_RESOURCE_VERSION = "DUPLICATE_RESOURCE_VERSION"; +// public static final String DUPLICATE_RESOURCE_VERSION = "DUPLICATE_RESOURCE_VERSION"; public static final String ELEMENT_CANNOT_BE_NULL = "ELEMENT_CANNOT_BE_NULL"; public static final String ELEMENT_ID__NULL__ON_ = "element_id__null__on_"; public static final String ELEMENT_MUST_HAVE_SOME_CONTENT = "Element_must_have_some_content"; @@ -132,7 +132,7 @@ public class I18nConstants { public static final String EXTENSION_EXT_VERSION_NOCHANGE = "Extension_EXT_Version_NoChange"; public static final String EXTENSION_PROF_TYPE = "Extension_PROF_Type"; public static final String FHIRPATH_ALIAS_COLLECTION = "FHIRPATH_ALIAS_COLLECTION"; - public static final String FHIRPATH_BAD_DATE = "FHIRPATH_BAD_DATE"; +// public static final String FHIRPATH_BAD_DATE = "FHIRPATH_BAD_DATE"; public static final String FHIRPATH_CANNOT_USE = "FHIRPATH_CANNOT_USE"; public static final String FHIRPATH_CANT_COMPARE = "FHIRPATH_CANT_COMPARE"; public static final String FHIRPATH_CHECK_FAILED = "FHIRPATH_CHECK_FAILED"; @@ -153,7 +153,7 @@ public class I18nConstants { public static final String FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE = "FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE"; public static final String FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE = "FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE"; public static final String FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND = "FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND"; - public static final String FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = "FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE"; +// public static final String FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = "FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE"; public static final String FHIRPATH_DISCRIMINATOR_TYPE_NONE = "FHIRPATH_DISCRIMINATOR_TYPE_NONE"; public static final String FHIRPATH_FOCUS_PLURAL = "FHIRPATH_FOCUS_PLURAL"; public static final String FHIRPATH_HO_HOST_SERVICES = "FHIRPATH_HO_HOST_SERVICES"; @@ -196,7 +196,7 @@ public class I18nConstants { public static final String ILLEGAL_PATH__IN_DIFFERENTIAL_IN__NO_UNICODE_WHITESPACE = "Illegal_path__in_differential_in__no_unicode_whitespace"; public static final String INTERNAL_ERROR___TYPE_NOT_KNOWN_ = "Internal_error___type_not_known_"; public static final String INTERNAL_INT_BAD_TYPE = "Internal_INT_Bad_Type"; - public static final String INTERNAL_RECURSION_DETECTION_FIND_LOOP_PATH_RECURSION____CHECK_PATHS_ARE_VALID_FOR_PATH_ = "Internal_recursion_detection_find_loop_path_recursion____check_paths_are_valid_for_path_"; +// public static final String INTERNAL_RECURSION_DETECTION_FIND_LOOP_PATH_RECURSION____CHECK_PATHS_ARE_VALID_FOR_PATH_ = "Internal_recursion_detection_find_loop_path_recursion____check_paths_are_valid_for_path_"; public static final String INV_FAILED = "INV_FAILED"; public static final String INVALID_SLICING__THERE_IS_MORE_THAN_ONE_TYPE_SLICE_AT__BUT_ONE_OF_THEM__HAS_MIN__1_SO_THE_OTHER_SLICES_CANNOT_EXIST = "Invalid_slicing__there_is_more_than_one_type_slice_at__but_one_of_them__has_min__1_so_the_other_slices_cannot_exist"; public static final String LANGUAGE_XHTML_LANG_DIFFERENT1 = "Language_XHTML_Lang_Different1"; @@ -211,7 +211,7 @@ public class I18nConstants { public static final String MEASURE_MR_GRP_NO_WRONG_CODE = "MEASURE_MR_GRP_NO_WRONG_CODE"; public static final String MEASURE_MR_GRP_POP_COUNT_MISMATCH = "MEASURE_MR_GRP_POP_COUNT_MISMATCH"; public static final String MEASURE_MR_GRP_POP_DUPL_CODE = "MEASURE_MR_GRP_POP_DUPL_CODE"; - public static final String MEASURE_MR_GRP_POP_MISSING_BY_CODE = "MEASURE_MR_GRP_POP_MISSING_BY_CODE"; +// public static final String MEASURE_MR_GRP_POP_MISSING_BY_CODE = "MEASURE_MR_GRP_POP_MISSING_BY_CODE"; public static final String MEASURE_MR_GRP_POP_NO_CODE = "MEASURE_MR_GRP_POP_NO_CODE"; public static final String MEASURE_MR_GRP_POP_NO_COUNT = "MEASURE_MR_GRP_POP_NO_COUNT"; public static final String MEASURE_MR_GRP_POP_NO_SUBJECTS = "MEASURE_MR_GRP_POP_NO_SUBJECTS"; @@ -228,7 +228,7 @@ public class I18nConstants { public static final String MEASURE_MR_SCORE_UNIT_REQUIRED = "MEASURE_MR_SCORE_UNIT_REQUIRED"; public static final String MEASURE_MR_SCORE_VALUE_INVALID_01 = "MEASURE_MR_SCORE_VALUE_INVALID_01"; public static final String MEASURE_MR_SCORE_VALUE_REQUIRED = "MEASURE_MR_SCORE_VALUE_REQUIRED"; - public static final String MEASURE_M_CQL_NOT_FOUND = "MEASURE_M_CQL_NOT_FOUND"; +// public static final String MEASURE_M_CQL_NOT_FOUND = "MEASURE_M_CQL_NOT_FOUND"; public static final String MEASURE_M_CRITERIA_CQL_ELM_NOT_VALID = "MEASURE_M_CRITERIA_CQL_ELM_NOT_VALID"; public static final String MEASURE_M_CRITERIA_CQL_ERROR = "MEASURE_M_CRITERIA_CQL_ERROR"; public static final String MEASURE_M_CRITERIA_CQL_LIB_DUPL = "MEASURE_M_CRITERIA_CQL_LIB_DUPL"; @@ -241,7 +241,7 @@ public class I18nConstants { public static final String MEASURE_M_GROUP_CODE = "MEASURE_M_GROUP_CODE"; public static final String MEASURE_M_GROUP_POP = "MEASURE_M_GROUP_POP"; public static final String MEASURE_M_GROUP_POP_NO_CODE = "MEASURE_M_GROUP_POP_NO_CODE"; - public static final String MEASURE_M_GROUP_STRATA = "MEASURE_M_GROUP_STRATA"; +// public static final String MEASURE_M_GROUP_STRATA = "MEASURE_M_GROUP_STRATA"; public static final String MEASURE_M_GROUP_STRATA_COMP_NO_CODE = "MEASURE_M_GROUP_STRATA_COMP_NO_CODE"; public static final String MEASURE_M_GROUP_STRATA_NO_CODE = "MEASURE_M_GROUP_STRATA_NO_CODE"; public static final String MEASURE_M_LIB_UNKNOWN = "MEASURE_M_LIB_UNKNOWN"; @@ -262,7 +262,7 @@ public class I18nConstants { public static final String NOT_DONE_YET_VALIDATORHOSTSERVICESRESOLVEFUNCTION_ = "Not_done_yet_ValidatorHostServicesresolveFunction_"; public static final String NOT_DONE_YET__RESOLVE__LOCALLY_2 = "Not_done_yet__resolve__locally_2"; public static final String NOT_HANDLED_YET_SORTELEMENTS_ = "Not_handled_yet_sortElements_"; - public static final String NOT_SUPPORTED_YET = "Not_supported_yet"; +// public static final String NOT_SUPPORTED_YET = "Not_supported_yet"; public static final String NOT_THE_RIGHT_KIND_OF_STRUCTURE_TO_GENERATE_SCHEMATRONS_FOR = "not_the_right_kind_of_structure_to_generate_schematrons_for"; public static final String NO_BASE_PROFILE_PROVIDED = "no_base_profile_provided"; public static final String NO_DERIVED_STRUCTURE_PROVIDED = "no_derived_structure_provided"; @@ -317,7 +317,7 @@ public class I18nConstants { public static final String QUESTIONNAIRE_QR_ITEM_NOOPTIONSSTRING = "Questionnaire_QR_Item_NoOptionsString"; public static final String QUESTIONNAIRE_QR_ITEM_NOOPTIONSTIME = "Questionnaire_QR_Item_NoOptionsTime"; public static final String QUESTIONNAIRE_QR_ITEM_NOSTRING = "Questionnaire_QR_Item_NoString"; - public static final String QUESTIONNAIRE_QR_ITEM_NOTENABLED = "Questionnaire_QR_Item_NotEnabled"; +// public static final String QUESTIONNAIRE_QR_ITEM_NOTENABLED = "Questionnaire_QR_Item_NotEnabled"; public static final String QUESTIONNAIRE_QR_ITEM_NOTENABLED2 = "Questionnaire_QR_Item_NotEnabled2"; public static final String QUESTIONNAIRE_QR_ITEM_NOTFOUND = "Questionnaire_QR_Item_NotFound"; public static final String QUESTIONNAIRE_QR_ITEM_NOTIME = "Questionnaire_QR_Item_NoTime"; @@ -374,7 +374,7 @@ public class I18nConstants { public static final String SD_ED_TYPE_PROFILE_NOT_MODIFIER = "SD_ED_TYPE_PROFILE_NOT_MODIFIER"; public static final String SD_ED_TYPE_PROFILE_WRONG_TARGET = "SD_ED_TYPE_PROFILE_WRONG_TARGET"; public static final String SD_ED_TYPE_NO_TARGET_PROFILE = "SD_ED_TYPE_NO_TARGET_PROFILE"; - public static final String SD_ED_SHOULD_BIND = "SD_ED_SHOULD_BIND"; +// public static final String SD_ED_SHOULD_BIND = "SD_ED_SHOULD_BIND"; public static final String SD_ED_SHOULD_BIND_WITH_VS = "SD_ED_SHOULD_BIND_WITH_VS"; public static final String SD_ED_BIND_UNKNOWN_VS = "SD_ED_BIND_UNKNOWN_VS"; public static final String SD_ED_BIND_NOT_VS = "SD_ED_BIND_NOT_VS"; @@ -416,7 +416,7 @@ public class I18nConstants { public static final String TERMINOLOGY_TX_CONFIRM_2_CC = "Terminology_TX_Confirm_2_CC"; public static final String TERMINOLOGY_TX_CONFIRM_3_CC = "Terminology_TX_Confirm_3_CC"; public static final String TERMINOLOGY_TX_CONFIRM_4a = "Terminology_TX_Confirm_4a"; - public static final String TERMINOLOGY_TX_CONFIRM_4b = "Terminology_TX_Confirm_4b"; +// public static final String TERMINOLOGY_TX_CONFIRM_4b = "Terminology_TX_Confirm_4b"; public static final String TERMINOLOGY_TX_CONFIRM_5 = "Terminology_TX_Confirm_5"; public static final String TERMINOLOGY_TX_CONFIRM_6 = "Terminology_TX_Confirm_6"; public static final String TERMINOLOGY_TX_DISPLAY_WRONG = "Terminology_TX_Display_Wrong"; @@ -562,9 +562,11 @@ public class I18nConstants { public static final String UNABLE_TO_RESOLVE_SLICE_MATCHING__SLICE_MATCHING_BY_VALUE_SET_NOT_DONE = "Unable_to_resolve_slice_matching__slice_matching_by_value_set_not_done"; public static final String UNABLE_TO_RESOLVE_SYSTEM__NO_VALUE_SET = "Unable_to_resolve_system__no_value_set"; public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_EXPANSION_HAS_MULTIPLE_SYSTEMS = "Unable_to_resolve_system__value_set_expansion_has_multiple_systems"; - public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_EXCLUDES = "Unable_to_resolve_system__value_set_has_excludes"; public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_IMPORTS = "Unable_to_resolve_system__value_set_has_imports"; + public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_MULTIPLE_MATCHES = "Unable_to_resolve_system__value_set_has_multiple_matches"; public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_INCLUDE_WITH_NO_SYSTEM = "Unable_to_resolve_system__value_set_has_include_with_no_system"; + public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_INCLUDE_WITH_UNKNOWN_SYSTEM = "Unable_to_resolve_system__value_set_has_include_with_unknown_system"; +// public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_INCLUDE_WITH_FILTER = "Unable_to_resolve_system__value_set_has_include_with_filter"; public static final String UNABLE_TO_RESOLVE_SYSTEM__VALUE_SET_HAS_NO_INCLUDES_OR_EXPANSION = "Unable_to_resolve_system__value_set_has_no_includes_or_expansion"; public static final String UNABLE_TO_RESOLVE_VALUE_SET_ = "Unable_to_resolve_value_Set_"; public static final String UNABLE_TO_VALIDATE_CODE_WITHOUT_USING_SERVER = "Unable_to_validate_code_without_using_server"; @@ -671,7 +673,7 @@ public class I18nConstants { public static final String XHTML_XHTML_NS_INVALID = "XHTML_XHTML_NS_InValid"; public static final String XML_ATTR_VALUE_INVALID = "xml_attr_value_invalid"; public static final String XML_ENCODING_INVALID = "xml_encoding_invalid"; - public static final String XML_STATED_ENCODING_INVALID = "xml_stated_encoding_invalid"; +// public static final String XML_STATED_ENCODING_INVALID = "xml_stated_encoding_invalid"; public static final String _DT_FIXED_WRONG = "_DT_Fixed_Wrong"; public static final String _HAS_CHILDREN__AND_MULTIPLE_TYPES__IN_PROFILE_ = "_has_children__and_multiple_types__in_profile_"; public static final String _HAS_CHILDREN__FOR_TYPE__IN_PROFILE__BUT_CANT_FIND_TYPE = "_has_children__for_type__in_profile__but_cant_find_type"; diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index 280c486f5..5c8b11048 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -449,11 +449,12 @@ None_of_the_provided_codes_are_in_the_value_set_ = None of the provided codes ar Coding_has_no_system__cannot_validate = Coding has no system - cannot validate Unable_to_handle_system__concept_filter_with_op__ = Unable to handle system {0} concept filter with op = {1} Unable_to_handle_system__filter_with_property__ = Unable to handle system {0} filter with property = {1} -Unable_to_resolve_system__value_set_has_include_with_no_system = Unable to resolve system - value set has include with no system +Unable_to_resolve_system__value_set_has_include_with_no_system = Unable to resolve system - value set {0} include #{1} has no system +Unable_to_resolve_system__value_set_has_include_with_unknown_system = Unable to resolve system - value set {0} include #{1} has system {2} which is unknown, and the server return error {3} +Unable_to_resolve_system__value_set_has_include_with_filter = Unable to resolve system - value set {0} include #{1} has a filter on system {2} Unable_to_resolve_system__value_set_has_imports = Unable to resolve system - value set has imports -Unable_to_resolve_system__value_set_expansion_has_multiple_systems = Unable to resolve system - value set expansion has multiple systems -Unable_to_resolve_system__value_set_has_no_includes_or_expansion = Unable to resolve system - value set has no includes or expansion -Unable_to_resolve_system__value_set_has_excludes = Unable to resolve system - value set has excludes +Unable_to_resolve_system__value_set_has_multiple_matches = Unable to resolve system - value set expansion has multiple matches: {0} +Unable_to_resolve_system__value_set_has_no_includes_or_expansion = Unable to resolve system - value set {0} has no includes or expansion Unable_to_resolve_system__no_value_set = Unable to resolve system - no value set This_base_property_must_be_an_Array_not_ = This base property must be an Array, not {0} This_property_must_be_an_Array_not_ = This property must be an Array, not {0}