diff --git a/pom.xml b/pom.xml
index 633c25c..6e50bc6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,17 +33,18 @@
11
+ ${java.version}
${java.version}
${java.version}
- 1.4.0-SNAPSHOT
- 2.0.0-SNAPSHOT
+ 1.4.0
+ 2.0.0-alpha.4
4.4
3.12.0
7.11.1
- 8.44.0.Final
+ 8.44.2.Final
3.0.11
2.14.1
4.0.0
@@ -58,8 +59,8 @@
2.3.0
- 3.10.1
- 3.3.0
+ 3.13.0
+ 3.6.0
@@ -384,12 +385,12 @@
org.apache.maven.plugins
maven-compiler-plugin
- ${version.compiler.version}
+ ${version.compiler.plugin}
org.apache.maven.plugins
maven-shade-plugin
- ${version.compiler.plugin}
+ ${version.shade.plugin}
org.kie
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronAssert.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronAssert.java
index 276d6da..f2b541d 100644
--- a/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronAssert.java
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronAssert.java
@@ -2,6 +2,7 @@
public class SchematronAssert {
private final String id;
+ private String diagnostics;
public SchematronAssert(String id) {
this.id = id;
@@ -10,4 +11,12 @@ public SchematronAssert(String id) {
public String getId() {
return id;
}
+
+ public String getDiagnostics() {
+ return diagnostics;
+ }
+
+ public void setDiagnostics(String diagnostics) {
+ this.diagnostics = diagnostics;
+ }
}
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronDiagnostic.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronDiagnostic.java
new file mode 100644
index 0000000..f9ac97d
--- /dev/null
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronDiagnostic.java
@@ -0,0 +1,13 @@
+package eu.europa.ted.eforms.sdk.analysis.domain.schematron;
+
+public class SchematronDiagnostic {
+ private final String id;
+
+ public SchematronDiagnostic(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronFile.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronFile.java
index 799beb3..4d209cd 100644
--- a/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronFile.java
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronFile.java
@@ -5,22 +5,48 @@
public class SchematronFile {
private final Path path;
- private final List asserts;
+ private List phases;
+ private List patterns;
+ private List diagnostics;
+ private List asserts;
public SchematronFile(Path path) {
- this(path, null);
- }
-
- public SchematronFile(Path path, List asserts) {
this.path = path;
- this.asserts = asserts;
}
public Path getPath() {
return path;
}
+ public List getPhases() {
+ return phases;
+ }
+
+ public void setPhases(List phases) {
+ this.phases = phases;
+ }
+
+ public List getPatterns() {
+ return patterns;
+ }
+
+ public void setPatterns(List patterns) {
+ this.patterns = patterns;
+ }
+
+ public List getDiagnostics() {
+ return diagnostics;
+ }
+
+ public void setDiagnostics(List diagnostics) {
+ this.diagnostics = diagnostics;
+ }
+
public List getAsserts() {
return asserts;
}
+
+ public void setAsserts(List asserts) {
+ this.asserts = asserts;
+ }
}
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronPattern.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronPattern.java
new file mode 100644
index 0000000..58a921c
--- /dev/null
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronPattern.java
@@ -0,0 +1,13 @@
+package eu.europa.ted.eforms.sdk.analysis.domain.schematron;
+
+public class SchematronPattern {
+ private final String id;
+
+ public SchematronPattern(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronPhase.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronPhase.java
new file mode 100644
index 0000000..ba9e6cc
--- /dev/null
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/domain/schematron/SchematronPhase.java
@@ -0,0 +1,25 @@
+package eu.europa.ted.eforms.sdk.analysis.domain.schematron;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SchematronPhase {
+ private final String id;
+ private final List activePatterns = new ArrayList<>();
+
+ public SchematronPhase(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public List getActivePatterns() {
+ return activePatterns;
+ }
+
+ public void addActivePattern(String patternId) {
+ activePatterns.add(patternId);
+ }
+}
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/SchematronFileFact.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/SchematronFileFact.java
index 7ac28ea..97140a7 100644
--- a/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/SchematronFileFact.java
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/SchematronFileFact.java
@@ -6,7 +6,10 @@
import java.util.stream.Collectors;
import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronAssert;
+import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronDiagnostic;
import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronFile;
+import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronPattern;
+import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronPhase;
/**
* Represents a complete set of schematron rules.
@@ -25,12 +28,41 @@ public List getAsserts() {
return schematronFile.getAsserts();
}
+ public List getDiagnostics() {
+ return schematronFile.getDiagnostics();
+ }
+
+ public List getPhases() {
+ return schematronFile.getPhases();
+ }
+
+ public List getPatterns() {
+ return schematronFile.getPatterns();
+ }
+
public List getDuplicateAssertIds() {
Set set = new HashSet();
return getAsserts().stream().map(SchematronAssert::getId).filter(id -> !set.add(id))
.collect(Collectors.toList());
}
+ /**
+ * Returns the list of diagnostic identifiers that are referenced in an assert but not defined by
+ * a diagnostic element.
+ *
+ * @return List of diagnostic identifiers missing a definition.
+ */
+ public List getMissingDiagnostics() {
+ Set definedDiagnosticIds = getDiagnostics().stream()
+ .map(SchematronDiagnostic::getId)
+ .collect(Collectors.toSet());
+
+ return getAsserts().stream()
+ .map(SchematronAssert::getDiagnostics)
+ .filter(id -> !definedDiagnosticIds.contains(id))
+ .collect(Collectors.toList());
+ }
+
@Override
public String getId() {
return schematronFile.getPath().toString();
diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/util/SchematronParser.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/util/SchematronParser.java
index 8b88582..1a2cbf9 100644
--- a/src/main/java/eu/europa/ted/eforms/sdk/analysis/util/SchematronParser.java
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/util/SchematronParser.java
@@ -4,6 +4,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -15,9 +16,13 @@
import com.helger.xml.microdom.IMicroDocument;
import com.helger.xml.microdom.IMicroElement;
import com.helger.xml.microdom.IMicroNode;
+import com.helger.xml.microdom.serialize.MicroReader;
import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronAssert;
+import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronDiagnostic;
import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronFile;
+import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronPattern;
+import eu.europa.ted.eforms.sdk.analysis.domain.schematron.SchematronPhase;
public class SchematronParser {
private static final Logger logger = LoggerFactory.getLogger(SchematronParser.class);
@@ -27,32 +32,92 @@ private SchematronParser() {}
public static SchematronFile loadSchematronFile(Path schematronFilePath) {
logger.debug("Loading Schematron file " + schematronFilePath.toString());
+ SchematronFile schematronFile = new SchematronFile(schematronFilePath);
+
IReadableResource schematron = new FileSystemResource(schematronFilePath);
+
+ final IMicroDocument doc = MicroReader.readMicroXML(schematron);
+ if (doc == null || doc.getAllChildren() == null) {
+ logger.error("Schematron file {} could not be loaded as XML", schematronFilePath);
+ return null;
+ }
+ List children = doc.getAllChildrenRecursive();
+ if (children == null) {
+ logger.error("Schematron file {} has unexpected structure", schematronFilePath);
+ return null;
+ }
+
+ // Parse phase definitions
+ List phases = new ArrayList<>();
+ children.stream()
+ .filter(node -> node.isElement() && "phase".equals(node.getNodeName()))
+ .forEach(node -> {
+ IMicroElement element = (IMicroElement)node;
+ String id = element.getAttributeValue("id");
+ SchematronPhase phase = new SchematronPhase(id);
+ List phaseRefs = element.getAllChildren();
+ if (phaseRefs == null) {
+ logger.error("Incorrect definition for phase {}", id);
+ return;
+ }
+ phaseRefs.stream()
+ .filter(n -> n.isElement() && "active".equals(n.getNodeName()))
+ .map(n -> ((IMicroElement)n).getAttributeValue("pattern"))
+ .forEach(s -> phase.addActivePattern(s));
+
+ phases.add(phase);
+ });
+
+ schematronFile.setPhases(phases);
+
+ // Parse list diagnostic definitions
+ List diagnostics = children.stream()
+ .filter(node -> node.isElement() && "diagnostic".equals(node.getNodeName()))
+ .map(n -> ((IMicroElement)n).getAttributeValue("id"))
+ .map(s -> new SchematronDiagnostic(s))
+ .collect(Collectors.toList());
+
+ schematronFile.setDiagnostics(diagnostics);
+
// Resolve all included files, so that they also get loaded.
- final IMicroDocument doc = SchematronHelper.getWithResolvedSchematronIncludes(schematron,
+ final IMicroDocument docResolved = SchematronHelper.getWithResolvedSchematronIncludes(schematron,
e -> handleError(e, schematronFilePath));
- if (doc == null) {
- logger.error("Schematron file {} could not be loaded as XML", schematronFilePath);
+ if (docResolved == null) {
+ logger.error("Schematron file {} with resolved includes could not be loaded as XML",
+ schematronFilePath);
return null;
}
- List asserts = new ArrayList<>();
- List allChildren = doc.getAllChildrenRecursive();
+ List allChildren = docResolved.getAllChildrenRecursive();
if (allChildren == null) {
logger.error("Schematron file {} does not have the expected content", schematronFilePath);
return null;
}
+
+ // Parse all patterns
+ List patterns = allChildren.stream()
+ .filter(node -> node.isElement() && "pattern".equals(node.getNodeName()))
+ .map(n -> ((IMicroElement)n).getAttributeValue("id"))
+ .map(s -> new SchematronPattern(s))
+ .collect(Collectors.toList());
- for (IMicroNode node : allChildren) {
- if (node != null && node.isElement() && "assert".equals(node.getNodeName())) {
- IMicroElement element = (IMicroElement)node;
- SchematronAssert schAssert = new SchematronAssert(element.getAttributeValue("id"));
- asserts.add(schAssert);
- }
- }
+ schematronFile.setPatterns(patterns);
+
+ // Parse all asserts
+ List asserts = new ArrayList<>();
+ allChildren.stream()
+ .filter(node -> node.isElement() && "assert".equals(node.getNodeName()))
+ .forEach(n -> {
+ IMicroElement element = (IMicroElement)n;
+ String id = element.getAttributeValue("id");
+ SchematronAssert schematronAssert = new SchematronAssert(id);
+ String diag = element.getAttributeValue("diagnostics");
+ schematronAssert.setDiagnostics(diag);
+ asserts.add(schematronAssert);
+ });
- SchematronFile schematronFile = new SchematronFile(schematronFilePath, asserts);
+ schematronFile.setAsserts(asserts);
return schematronFile;
}
diff --git a/src/main/resources/eu/europa/ted/eforms/sdk/analysis/drools/schematronRules.drl b/src/main/resources/eu/europa/ted/eforms/sdk/analysis/drools/schematronRules.drl
index f8a6af4..47d4c54 100644
--- a/src/main/resources/eu/europa/ted/eforms/sdk/analysis/drools/schematronRules.drl
+++ b/src/main/resources/eu/europa/ted/eforms/sdk/analysis/drools/schematronRules.drl
@@ -15,3 +15,27 @@ when
then
results.add(new ValidationResult($sch, "Schematron contains duplicate assert ids: " + $duplicates, ValidationStatusEnum.ERROR));
end
+
+rule "All expected phases are present"
+when
+ /schematrons[ $sch: this, $schId: id ];
+ /noticeTypes[ $expected: id ]
+ not (exists /schematrons[ id == $schId ]/phases[ id == "eforms-" + $expected ])
+then
+ results.add(new ValidationResult($sch, "Schematron is missing phase for: " + $expected, ValidationStatusEnum.ERROR));
+end
+
+rule "Every pattern is part of at least one phase"
+when
+ /schematrons[ $sch: this, $schId: id ]/patterns[ $patternId: id ]
+ not (exists /schematrons[ id == $schId ]/phases[ activePatterns contains $patternId ])
+then
+ results.add(new ValidationResult($sch, "Schematron has pattern that is not part of any phase: " + $patternId, ValidationStatusEnum.ERROR));
+end
+
+rule "Every assert diagnostics is defined in the schematron file"
+when
+ $missing : /schematrons[ $sch: this]/missingDiagnostics
+then
+ results.add(new ValidationResult($sch, "Schematron is missing diagnostic definitions for: " + $missing, ValidationStatusEnum.ERROR));
+end
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/1.json b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/1.json
new file mode 100644
index 0000000..f4a8a55
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/1.json
@@ -0,0 +1,48 @@
+{
+ "ublVersion" : "2.3",
+ "sdkVersion" : "1.10.0",
+ "metadataDatabase" : {
+ "version" : "1.10.0",
+ "createdOn" : "2023-11-15T14:00:00"
+ },
+ "noticeId" : "1",
+ "metadata" : [ {
+ "id" : "BT-02-notice",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Notice Type",
+ "_label" : "field|name|BT-02-notice",
+ "readOnly" : true
+ } ],
+ "content" : [ {
+ "id" : "GR-Buyer",
+ "contentType" : "group",
+ "displayType" : "SECTION",
+ "description" : "Contracting Party and Provider related Information",
+ "_label" : "group|name|GR-Buyer",
+ "content" : [ {
+ "id" : "GR-ContractingAuthority",
+ "contentType" : "group",
+ "nodeId" : "ND-ContractingParty",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|ND-ContractingParty",
+ "_repeatable" : true,
+ "content" : [ {
+ "id" : "GR-ContractingAuthority-Buyer",
+ "contentType" : "group",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|GR-ContractingAuthority-Buyer",
+ "content" : [ {
+ "id" : "OPT-300-Procedure-Buyer",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Buyer Technical Identifier Reference",
+ "_label" : "field|name|OPT-300-Procedure-Buyer",
+ "_idSchemes" : [ "ORG" ]
+ } ]
+ } ]
+ } ]
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/16.json b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/16.json
new file mode 100644
index 0000000..d5a465c
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/16.json
@@ -0,0 +1,48 @@
+{
+ "ublVersion" : "2.3",
+ "sdkVersion" : "1.10.0",
+ "metadataDatabase" : {
+ "version" : "1.10.0",
+ "createdOn" : "2023-11-15T14:00:00"
+ },
+ "noticeId" : "16",
+ "metadata" : [ {
+ "id" : "BT-02-notice",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Notice Type",
+ "_label" : "field|name|BT-02-notice",
+ "readOnly" : true
+ } ],
+ "content" : [ {
+ "id" : "GR-Buyer",
+ "contentType" : "group",
+ "displayType" : "SECTION",
+ "description" : "Contracting Party and Provider related Information",
+ "_label" : "group|name|GR-Buyer",
+ "content" : [ {
+ "id" : "GR-ContractingAuthority",
+ "contentType" : "group",
+ "nodeId" : "ND-ContractingParty",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|ND-ContractingParty",
+ "_repeatable" : true,
+ "content" : [ {
+ "id" : "GR-ContractingAuthority-Buyer",
+ "contentType" : "group",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|GR-ContractingAuthority-Buyer",
+ "content" : [ {
+ "id" : "OPT-300-Procedure-Buyer",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Buyer Technical Identifier Reference",
+ "_label" : "field|name|OPT-300-Procedure-Buyer",
+ "_idSchemes" : [ "ORG" ]
+ } ]
+ } ]
+ } ]
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/notice-types.json b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/notice-types.json
new file mode 100644
index 0000000..13d7343
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/notice-types/notice-types.json
@@ -0,0 +1,148 @@
+{
+ "ublVersion" : "2.3",
+ "sdkVersion" : "1.10.0",
+ "metadataDatabase" : {
+ "version" : "1.10.0",
+ "createdOn" : "2023-11-15T14:00:00"
+ },
+ "noticeSubTypes" : [ {
+ "documentType" : "PIN",
+ "legalBasis" : "32014L0024",
+ "formType" : "planning",
+ "type" : "pin-buyer",
+ "description" : "Notice of the publication of a prior information notice on a buyer profile - general directive",
+ "subTypeId" : "1",
+ "_label" : "notice|name|1",
+ "viewTemplateIds" : [ "1", "summary" ]
+ }, {
+ "documentType" : "CN",
+ "legalBasis" : "32014L0024",
+ "formType" : "competition",
+ "type" : "cn-standard",
+ "description" : "Contract notice – general directive, standard regime",
+ "subTypeId" : "16",
+ "_label" : "notice|name|16",
+ "viewTemplateIds" : [ "16", "summary" ]
+ } ],
+ "documentTypes" : [ {
+ "id" : "BRIN",
+ "namespace" : "http://data.europa.eu/p27/eforms-business-registration-information-notice/1",
+ "rootElement" : "BusinessRegistrationInformationNotice",
+ "schemaLocation" : "schemas/maindoc/EFORMS-BusinessRegistrationInformationNotice.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ }, {
+ "id" : "CAN",
+ "namespace" : "urn:oasis:names:specification:ubl:schema:xsd:ContractAwardNotice-2",
+ "rootElement" : "ContractAwardNotice",
+ "schemaLocation" : "schemas/maindoc/UBL-ContractAwardNotice-2.3.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ }, {
+ "id" : "CN",
+ "namespace" : "urn:oasis:names:specification:ubl:schema:xsd:ContractNotice-2",
+ "rootElement" : "ContractNotice",
+ "schemaLocation" : "schemas/maindoc/UBL-ContractNotice-2.3.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ }, {
+ "id" : "PIN",
+ "namespace" : "urn:oasis:names:specification:ubl:schema:xsd:PriorInformationNotice-2",
+ "rootElement" : "PriorInformationNotice",
+ "schemaLocation" : "schemas/maindoc/UBL-PriorInformationNotice-2.3.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/complete-validation.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/complete-validation.sch
new file mode 100644
index 0000000..01ac52a
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/complete-validation.sch
@@ -0,0 +1,317 @@
+
+
+
+
+ eForms schematron rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ cac:ProcessJustification
+ cac:AwardingTerms
+ cac:TechnicalCommitteePerson/cbc:FamilyName
+ cac:PostalAddress
+ cac:Contact
+ cac:BusinessParty
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'EU']/cbc:CompanyID
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'national']/cbc:CompanyID
+ cac:Party
+ cac:ServiceProviderParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:Change
+ efac:Company
+ cac:PostalAddress/cbc:Department
+ cac:PartyLegalEntity/cbc:CompanyID
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ efac:ConcessionRevenue
+ efac:Funding
+ efac:ContractModification
+ efac:Change/efac:ChangedSection/efbc:ChangedSectionIdentifier
+ cac:ContractingParty
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:SpecificTendererRequirement
+ cac:ContractExecutionRequirement
+ efac:DurationJustification
+ cac:FrameworkAgreement
+ efac:Funding
+ cac:AdditionalDocumentReference
+ cac:LotsGroup
+ cac:ProcurementProjectLotReference/cbc:ID[@schemeName='Lot']
+ efac:InterestExpressionReceptionPeriod
+ cac:PartyLegalEntity
+ cac:AwardingCriterion
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:LotDistribution
+ cac:LotsGroup/cbc:LotsGroupID
+ cac:PlannedPeriod
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ cac:NoticeDocumentReference
+ cac:CallForTendersDocumentReference
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='strategic-procurement']/cbc:ProcurementTypeCode
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='accessibility']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='environmental-impact']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='social-objective']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='innovative-acquisition']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='gpp-criteria']/cbc:ProcurementTypeCode
+ cac:TendererQualificationRequest
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ efac:LotResult
+ efac:FrameworkAgreementValues
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='irregularity-type']/efbc:StatisticsCode
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='review-type']/efbc:StatisticsCode
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsNumeric
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsCode
+ cac:FinancingParty/cac:PartyIdentification/cbc:ID
+ cac:PayerParty/cac:PartyIdentification/cbc:ID
+ efac:SettledContract/cbc:ID
+ efac:LotTender/cbc:ID
+ cac:AppealTerms
+ cac:PresentationPeriod/cbc:Description
+ efac:LotTender
+ efac:Origin
+ efac:Origin/efbc:AreaCode
+ efac:AggregatedAmounts/cbc:PaidAmount
+ efac:AggregatedAmounts/efbc:PaidAmountDescription
+ efac:AggregatedAmounts/efbc:PenaltiesAmount
+ efac:ContractTerm[not(efbc:TermCode/text()='all-rev-tic')][efbc:TermCode/@listName='contract-detail']/efbc:TermCode
+ efac:ContractTerm[efbc:TermCode/@listName='rewards-penalties']/efbc:TermCode
+ cac:TenderingProcess
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:ParticipationRequestReceptionPeriod/cbc:EndDate
+ cac:ParticipationRequestReceptionPeriod/cbc:EndTime
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndDate
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndTime
+ cac:OpenTenderEvent/cbc:OccurrenceDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:TenderRecipientParty/cbc:EndpointID
+ cac:AllowedSubcontractTerms[cbc:SubcontractingConditionsCode/@listName='subcontracting-obligation']/cbc:SubcontractingConditionsCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='einvoicing']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='esignature-submission']/cbc:ExecutionRequirementCode
+ cac:RequiredFinancialGuarantee/cbc:Description
+ cac:RequiredFinancialGuarantee/cbc:GuaranteeTypeCode[@listName='tender-guarantee-required']
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalForm
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalFormCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='ecatalog-submission']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='nda']/cbc:ExecutionRequirementCode
+ cac:Language/cbc:ID
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='conditions']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='customer-service']/cbc:ExecutionRequirementCode
+ cac:TenderRecipientParty/cac:PartyIdentification/cbc:ID
+ cac:RequestedTenderTotal
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:TenderingTerms/cac:AwardingTerms
+ cac:TenderingProcess/cac:FrameworkAgreement
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:RequestedTenderTotal
+ efac:Change
+ efac:ChangeReason
+ efac:ChangedSection
+ cac:ProcessJustification
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Funding/efbc:FinancingIdentifier
+ efac:TenderSubcontractingRequirements/efbc:TenderSubcontractingRequirementsCode
+ efac:Funding/cbc:FundingProgramCode
+ efac:SelectionCriteria/cbc:CriterionTypeCode[@listName='selection-criterion']
+ efac:DecisionReason/efac:FieldsPrivacy
+ efac:FieldsPrivacy
+ efac:NoticeResult
+ efac:GroupFramework
+ efac:NoticePurpose
+ cac:ContractExtension
+ cac:Renewal/cac:Period/cbc:Description
+ efac:Organization
+ efac:TouchPoint/cac:PartyIdentification/cbc:ID
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:Organizations
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:ContractTerm
+ efac:AnswerReceptionPeriod
+ cac:ProcurementProjectLot[cbc:ID/@schemeName='Part']
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ cac:AppealTerms
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:EconomicOperatorShortList
+ cac:PreSelectedParty/cac:PartyName/cbc:Name
+ cac:PaymentTerms
+ cac:PostAwardProcess
+ cac:Prize
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RealizedLocation
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='transport-service']/cbc:ProcurementTypeCode
+ cac:TenderingProcess
+ cac:NoticeDocumentReference/cbc:ID
+ cac:TenderingTerms
+ cac:ProcurementLegislationDocumentReference[not(cbc:ID/text()=('CrossBorderLaw','LocalLegalBasis'))]/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='LocalLegalBasis']/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='CrossBorderLaw']/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RequestedTenderTotal
+ cac:OpenTenderEvent
+ cac:OccurenceLocation/cbc:Description
+ efac:ReceivedSubmissionsStatistics
+ efac:AppealsInformation
+ efac:AppealRequestsStatistics
+ efac:AppealedItem/cbc:ID
+ efac:AppealDecision/efbc:DecisionTypeCode
+ efac:AppealIrregularity/efbc:IrregularityTypeCode
+ efac:AppealRemedy/efbc:RemedyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeCode
+ efac:AppealingParty/efbc:AppealingPartyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeDescription
+ efac:AppealProcessingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:AppealingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Publication/efbc:NoticePublicationID[@schemeName='ojs-notice-id']
+ efac:Publication/efbc:GazetteID[@schemeName='ojs-id']
+ efac:Publication/efbc:PublicationDate
+ cac:BusinessCapability/cbc:CapabilityTypeCode
+ cac:ContractingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ cac:EconomicOperatorShortList
+ efac:CriterionParameter
+ cac:SecurityClearanceTerm
+ efac:SelectionCriteria
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ cac:SenderParty/cac:Contact
+ efac:SettledContract
+ efac:LotTender/cbc:ID
+ efac:Funding/efbc:FinancingIdentifier
+ efac:Funding/cbc:FundingProgramCode
+ cac:SignatoryParty/cac:PartyIdentification/cbc:ID
+ efac:StrategicProcurement
+ efac:StrategicProcurement
+ efac:MainContractor/cbc:ID
+ efac:SubcontractingTerm
+ cac:AllowedSubcontractTerms
+ cac:TendererQualificationRequest
+ efac:Tenderer/cbc:ID
+ efac:SubContractor/cbc:ID
+ cac:PostalAddress/cbc:Department
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:ResidenceAddress/cbc:CountrySubentityCode
+ cac:ResidenceAddress/cbc:StreetName
+ cac:ResidenceAddress/cbc:AdditionalStreetName
+ cac:ResidenceAddress/cac:AddressLine/cbc:Line
+ cac:ResidenceAddress/cbc:PostalZone
+ cac:ResidenceAddress/cbc:CityName
+ cac:ResidenceAddress/cac:Country/cbc:IdentificationCode
+ efac:Nationality/cbc:NationalityID
+ cac:Contact/cbc:Telefax
+ efac:FieldsPrivacy
+
+
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/config.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/config.sch
new file mode 100644
index 0000000..bb6e87b
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/config.sch
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1a.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1a.sch
new file mode 100644
index 0000000..9ab9877
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1a.sch
@@ -0,0 +1,21 @@
+
+
+
+
+ rule|text|P-0001
+
+
+ rule|text|P-0002
+
+
+
+
+ rule|text|P-0004
+
+
+
+
+ rule|text|P-0005
+
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1b-1.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1b-1.sch
new file mode 100644
index 0000000..2ea90d9
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1b-1.sch
@@ -0,0 +1,40 @@
+
+
+
+
+ rule|text|ND-BusinessParty-1
+ rule|text|ND-ContractingParty-1
+ rule|text|ND-GazetteReference-1
+ rule|text|ND-OperationType-1
+ rule|text|ND-Part-1
+ rule|text|ND-ProcedureProcurementScope-1
+ rule|text|ND-ProcedureTenderingProcess-1
+ rule|text|ND-RootExtension-1
+ rule|text|ND-SenderContact-1
+
+
+ rule|text|ND-Buyer-1
+
+
+ rule|text|ND-ProcedureValueEstimate-1
+
+
+ rule|text|ND-LotDistribution-1
+ rule|text|ND-TendererQualificationRequest-1
+
+
+ rule|text|ND-CrossBorderLawUnpublish-1
+
+
+ rule|text|ND-ContractModification-1
+ rule|text|ND-NoticeResult-1
+ rule|text|ND-Organizations-1
+ rule|text|ND-ReviewRequests-1
+
+
+ rule|text|ND-Organization-1
+
+
+ rule|text|ND-Company-1
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1b-16.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1b-16.sch
new file mode 100644
index 0000000..67d8951
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/dynamic/validation-stage-1b-16.sch
@@ -0,0 +1,85 @@
+
+
+
+
+ rule|text|ND-BusinessParty-16
+ rule|text|ND-ContractingParty-16
+ rule|text|ND-GazetteReference-16
+ rule|text|ND-OperationType-16
+ rule|text|ND-Part-16
+ rule|text|ND-ProcedureProcurementScope-16
+ rule|text|ND-ProcedureTenderingProcess-16
+ rule|text|ND-ProcedureTerms-16
+ rule|text|ND-RootExtension-16
+ rule|text|ND-SenderContact-16
+
+
+ rule|text|ND-Buyer-16
+
+
+ rule|text|ND-LotProcurementScope-16
+ rule|text|ND-LotTenderingProcess-16
+ rule|text|ND-LotTenderingTerms-16
+
+
+ rule|text|ND-AuctionTerms-16
+
+
+ rule|text|ND-InterestExpressionReceptionPeriod-16
+ rule|text|ND-PMCAnswersDeadline-16
+
+
+ rule|text|ND-LotProcurementDocument-16
+ rule|text|ND-LotReservedParticipation-16
+ rule|text|ND-LotReviewTerms-16
+ rule|text|ND-NonUBLTenderingTerms-16
+ rule|text|ND-Participants-16
+ rule|text|ND-PostAwardProcess-16
+ rule|text|ND-SubcontractingObligation-16
+
+
+ rule|text|ND-LotAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-ProcedureTypeUnpublish-16
+
+
+ rule|text|ND-ProcedureAcceleratedUnpublish-16
+
+
+ rule|text|ND-TendererQualificationRequest-16
+
+
+ rule|text|ND-CrossBorderLawUnpublish-16
+
+
+ rule|text|ND-ExclusionGrounds-16
+
+
+ rule|text|ND-ContractModification-16
+ rule|text|ND-NoticeResult-16
+ rule|text|ND-Organizations-16
+ rule|text|ND-ReviewRequests-16
+
+
+ rule|text|ND-Organization-16
+
+
+ rule|text|ND-Company-16
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/complete-validation.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/complete-validation.sch
new file mode 100644
index 0000000..c17da2c
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/complete-validation.sch
@@ -0,0 +1,316 @@
+
+
+
+
+ eForms schematron rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ cac:ProcessJustification
+ cac:AuctionTerms
+ cac:AwardingTerms
+ cac:TechnicalCommitteePerson/cbc:FamilyName
+ cac:PostalAddress
+ cac:Contact
+ cac:BusinessParty
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'EU']/cbc:CompanyID
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'national']/cbc:CompanyID
+ cac:Party
+ cac:ServiceProviderParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:Change
+ efac:Company
+ cac:PostalAddress/cbc:Department
+ cac:PartyLegalEntity/cbc:CompanyID
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ efac:ConcessionRevenue
+ efac:Funding
+ efac:ContractModification
+ efac:Change/efac:ChangedSection/efbc:ChangedSectionIdentifier
+ cac:ContractingParty
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:SpecificTendererRequirement
+ cac:ContractExecutionRequirement
+ efac:DurationJustification
+ cac:FrameworkAgreement
+ efac:Funding
+ cac:AdditionalDocumentReference
+ cac:LotsGroup
+ cac:ProcurementProjectLotReference/cbc:ID[@schemeName='Lot']
+ efac:InterestExpressionReceptionPeriod
+ cac:PartyLegalEntity
+ cac:AwardingCriterion
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:LotDistribution
+ cac:LotsGroup/cbc:LotsGroupID
+ cac:PlannedPeriod
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ cac:NoticeDocumentReference
+ cac:CallForTendersDocumentReference
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='strategic-procurement']/cbc:ProcurementTypeCode
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='accessibility']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='environmental-impact']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='social-objective']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='innovative-acquisition']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='gpp-criteria']/cbc:ProcurementTypeCode
+ cac:TendererQualificationRequest
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ efac:LotResult
+ efac:FrameworkAgreementValues
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='irregularity-type']/efbc:StatisticsCode
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='review-type']/efbc:StatisticsCode
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsNumeric
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsCode
+ cac:FinancingParty/cac:PartyIdentification/cbc:ID
+ cac:PayerParty/cac:PartyIdentification/cbc:ID
+ efac:SettledContract/cbc:ID
+ efac:LotTender/cbc:ID
+ cac:AppealTerms
+ cac:PresentationPeriod/cbc:Description
+ efac:LotTender
+ efac:Origin
+ efac:Origin/efbc:AreaCode
+ efac:AggregatedAmounts/cbc:PaidAmount
+ efac:AggregatedAmounts/efbc:PaidAmountDescription
+ efac:AggregatedAmounts/efbc:PenaltiesAmount
+ efac:ContractTerm[not(efbc:TermCode/text()='all-rev-tic')][efbc:TermCode/@listName='contract-detail']/efbc:TermCode
+ efac:ContractTerm[efbc:TermCode/@listName='rewards-penalties']/efbc:TermCode
+ cac:TenderingProcess
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:ParticipationRequestReceptionPeriod/cbc:EndDate
+ cac:ParticipationRequestReceptionPeriod/cbc:EndTime
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndDate
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndTime
+ cac:OpenTenderEvent/cbc:OccurrenceDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:TenderRecipientParty/cbc:EndpointID
+ cac:AllowedSubcontractTerms[cbc:SubcontractingConditionsCode/@listName='subcontracting-obligation']/cbc:SubcontractingConditionsCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='einvoicing']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='esignature-submission']/cbc:ExecutionRequirementCode
+ cac:RequiredFinancialGuarantee/cbc:Description
+ cac:RequiredFinancialGuarantee/cbc:GuaranteeTypeCode[@listName='tender-guarantee-required']
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalForm
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalFormCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='ecatalog-submission']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='nda']/cbc:ExecutionRequirementCode
+ cac:Language/cbc:ID
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='conditions']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='customer-service']/cbc:ExecutionRequirementCode
+ cac:TenderRecipientParty/cac:PartyIdentification/cbc:ID
+ cac:RequestedTenderTotal
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:TenderingTerms/cac:AwardingTerms
+ cac:TenderingProcess/cac:FrameworkAgreement
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:RequestedTenderTotal
+ efac:Change
+ efac:ChangeReason
+ efac:ChangedSection
+ cac:ProcessJustification
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Funding/efbc:FinancingIdentifier
+ efac:TenderSubcontractingRequirements/efbc:TenderSubcontractingRequirementsCode
+ efac:Funding/cbc:FundingProgramCode
+ efac:SelectionCriteria/cbc:CriterionTypeCode[@listName='selection-criterion']
+ efac:DecisionReason/efac:FieldsPrivacy
+ efac:FieldsPrivacy
+ efac:NoticeResult
+ efac:GroupFramework
+ efac:NoticePurpose
+ cac:ContractExtension
+ cac:Renewal/cac:Period/cbc:Description
+ efac:Organization
+ efac:TouchPoint/cac:PartyIdentification/cbc:ID
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:Organizations
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:ContractTerm
+ efac:AnswerReceptionPeriod
+ cac:ProcurementProjectLot[cbc:ID/@schemeName='Part']
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ cac:AppealTerms
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:EconomicOperatorShortList
+ cac:PreSelectedParty/cac:PartyName/cbc:Name
+ cac:PaymentTerms
+ cac:PostAwardProcess
+ cac:Prize
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RealizedLocation
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='transport-service']/cbc:ProcurementTypeCode
+ cac:TenderingProcess
+ cac:NoticeDocumentReference/cbc:ID
+ cac:TenderingTerms
+ cac:ProcurementLegislationDocumentReference[not(cbc:ID/text()=('CrossBorderLaw','LocalLegalBasis'))]/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='LocalLegalBasis']/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='CrossBorderLaw']/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RequestedTenderTotal
+ cac:OpenTenderEvent
+ cac:OccurenceLocation/cbc:Description
+ efac:ReceivedSubmissionsStatistics
+ efac:AppealsInformation
+ efac:AppealRequestsStatistics
+ efac:AppealedItem/cbc:ID
+ efac:AppealDecision/efbc:DecisionTypeCode
+ efac:AppealIrregularity/efbc:IrregularityTypeCode
+ efac:AppealRemedy/efbc:RemedyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeCode
+ efac:AppealingParty/efbc:AppealingPartyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeDescription
+ efac:AppealProcessingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:AppealingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Publication/efbc:NoticePublicationID[@schemeName='ojs-notice-id']
+ efac:Publication/efbc:GazetteID[@schemeName='ojs-id']
+ efac:Publication/efbc:PublicationDate
+ cac:BusinessCapability/cbc:CapabilityTypeCode
+ cac:ContractingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ cac:EconomicOperatorShortList
+ efac:CriterionParameter
+ cac:SecurityClearanceTerm
+ efac:SelectionCriteria
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ cac:SenderParty/cac:Contact
+ efac:SettledContract
+ efac:LotTender/cbc:ID
+ efac:Funding/efbc:FinancingIdentifier
+ efac:Funding/cbc:FundingProgramCode
+ cac:SignatoryParty/cac:PartyIdentification/cbc:ID
+ efac:StrategicProcurement
+ efac:StrategicProcurement
+ efac:MainContractor/cbc:ID
+ efac:SubcontractingTerm
+ cac:AllowedSubcontractTerms
+ cac:TendererQualificationRequest
+ efac:Tenderer/cbc:ID
+ efac:SubContractor/cbc:ID
+ cac:PostalAddress/cbc:Department
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:ResidenceAddress/cbc:CountrySubentityCode
+ cac:ResidenceAddress/cbc:StreetName
+ cac:ResidenceAddress/cbc:AdditionalStreetName
+ cac:ResidenceAddress/cac:AddressLine/cbc:Line
+ cac:ResidenceAddress/cbc:PostalZone
+ cac:ResidenceAddress/cbc:CityName
+ cac:ResidenceAddress/cac:Country/cbc:IdentificationCode
+ efac:Nationality/cbc:NationalityID
+ cac:Contact/cbc:Telefax
+ efac:FieldsPrivacy
+
+
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1a.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1a.sch
new file mode 100644
index 0000000..9ab9877
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1a.sch
@@ -0,0 +1,21 @@
+
+
+
+
+ rule|text|P-0001
+
+
+ rule|text|P-0002
+
+
+
+
+ rule|text|P-0004
+
+
+
+
+ rule|text|P-0005
+
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1b-1.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1b-1.sch
new file mode 100644
index 0000000..1bd476f
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1b-1.sch
@@ -0,0 +1,40 @@
+
+
+
+
+ rule|text|ND-BusinessParty-1
+ rule|text|ND-ContractingParty-1
+ rule|text|ND-GazetteReference-1
+ rule|text|ND-OperationType-1
+ rule|text|ND-Part-1
+ rule|text|ND-ProcedureProcurementScope-1
+ rule|text|ND-ProcedureTenderingProcess-1
+ rule|text|ND-RootExtension-1
+ rule|text|ND-SenderContact-1
+
+
+ rule|text|ND-Buyer-1
+
+
+ rule|text|ND-ProcedureValueEstimate-1
+
+
+ rule|text|ND-LotDistribution-1
+ rule|text|ND-TendererQualificationRequest-1
+
+
+ rule|text|ND-CrossBorderLawUnpublish-1
+
+
+ rule|text|ND-ContractModification-1
+ rule|text|ND-NoticeResult-1
+ rule|text|ND-Organizations-1
+ rule|text|ND-ReviewRequests-1
+
+
+ rule|text|ND-Organization-1
+
+
+ rule|text|ND-Company-1
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1b-16.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1b-16.sch
new file mode 100644
index 0000000..67d8951
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/invalid/schematrons/static/validation-stage-1b-16.sch
@@ -0,0 +1,85 @@
+
+
+
+
+ rule|text|ND-BusinessParty-16
+ rule|text|ND-ContractingParty-16
+ rule|text|ND-GazetteReference-16
+ rule|text|ND-OperationType-16
+ rule|text|ND-Part-16
+ rule|text|ND-ProcedureProcurementScope-16
+ rule|text|ND-ProcedureTenderingProcess-16
+ rule|text|ND-ProcedureTerms-16
+ rule|text|ND-RootExtension-16
+ rule|text|ND-SenderContact-16
+
+
+ rule|text|ND-Buyer-16
+
+
+ rule|text|ND-LotProcurementScope-16
+ rule|text|ND-LotTenderingProcess-16
+ rule|text|ND-LotTenderingTerms-16
+
+
+ rule|text|ND-AuctionTerms-16
+
+
+ rule|text|ND-InterestExpressionReceptionPeriod-16
+ rule|text|ND-PMCAnswersDeadline-16
+
+
+ rule|text|ND-LotProcurementDocument-16
+ rule|text|ND-LotReservedParticipation-16
+ rule|text|ND-LotReviewTerms-16
+ rule|text|ND-NonUBLTenderingTerms-16
+ rule|text|ND-Participants-16
+ rule|text|ND-PostAwardProcess-16
+ rule|text|ND-SubcontractingObligation-16
+
+
+ rule|text|ND-LotAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-ProcedureTypeUnpublish-16
+
+
+ rule|text|ND-ProcedureAcceleratedUnpublish-16
+
+
+ rule|text|ND-TendererQualificationRequest-16
+
+
+ rule|text|ND-CrossBorderLawUnpublish-16
+
+
+ rule|text|ND-ExclusionGrounds-16
+
+
+ rule|text|ND-ContractModification-16
+ rule|text|ND-NoticeResult-16
+ rule|text|ND-Organizations-16
+ rule|text|ND-ReviewRequests-16
+
+
+ rule|text|ND-Organization-16
+
+
+ rule|text|ND-Company-16
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/1.json b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/1.json
new file mode 100644
index 0000000..f4a8a55
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/1.json
@@ -0,0 +1,48 @@
+{
+ "ublVersion" : "2.3",
+ "sdkVersion" : "1.10.0",
+ "metadataDatabase" : {
+ "version" : "1.10.0",
+ "createdOn" : "2023-11-15T14:00:00"
+ },
+ "noticeId" : "1",
+ "metadata" : [ {
+ "id" : "BT-02-notice",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Notice Type",
+ "_label" : "field|name|BT-02-notice",
+ "readOnly" : true
+ } ],
+ "content" : [ {
+ "id" : "GR-Buyer",
+ "contentType" : "group",
+ "displayType" : "SECTION",
+ "description" : "Contracting Party and Provider related Information",
+ "_label" : "group|name|GR-Buyer",
+ "content" : [ {
+ "id" : "GR-ContractingAuthority",
+ "contentType" : "group",
+ "nodeId" : "ND-ContractingParty",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|ND-ContractingParty",
+ "_repeatable" : true,
+ "content" : [ {
+ "id" : "GR-ContractingAuthority-Buyer",
+ "contentType" : "group",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|GR-ContractingAuthority-Buyer",
+ "content" : [ {
+ "id" : "OPT-300-Procedure-Buyer",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Buyer Technical Identifier Reference",
+ "_label" : "field|name|OPT-300-Procedure-Buyer",
+ "_idSchemes" : [ "ORG" ]
+ } ]
+ } ]
+ } ]
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/16.json b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/16.json
new file mode 100644
index 0000000..d5a465c
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/16.json
@@ -0,0 +1,48 @@
+{
+ "ublVersion" : "2.3",
+ "sdkVersion" : "1.10.0",
+ "metadataDatabase" : {
+ "version" : "1.10.0",
+ "createdOn" : "2023-11-15T14:00:00"
+ },
+ "noticeId" : "16",
+ "metadata" : [ {
+ "id" : "BT-02-notice",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Notice Type",
+ "_label" : "field|name|BT-02-notice",
+ "readOnly" : true
+ } ],
+ "content" : [ {
+ "id" : "GR-Buyer",
+ "contentType" : "group",
+ "displayType" : "SECTION",
+ "description" : "Contracting Party and Provider related Information",
+ "_label" : "group|name|GR-Buyer",
+ "content" : [ {
+ "id" : "GR-ContractingAuthority",
+ "contentType" : "group",
+ "nodeId" : "ND-ContractingParty",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|ND-ContractingParty",
+ "_repeatable" : true,
+ "content" : [ {
+ "id" : "GR-ContractingAuthority-Buyer",
+ "contentType" : "group",
+ "displayType" : "GROUP",
+ "description" : "Contracting Party related Information (URL, Legal Type, Contracting Type, Activity, …)",
+ "_label" : "group|name|GR-ContractingAuthority-Buyer",
+ "content" : [ {
+ "id" : "OPT-300-Procedure-Buyer",
+ "contentType" : "field",
+ "displayType" : "COMBOBOX",
+ "description" : "Buyer Technical Identifier Reference",
+ "_label" : "field|name|OPT-300-Procedure-Buyer",
+ "_idSchemes" : [ "ORG" ]
+ } ]
+ } ]
+ } ]
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/notice-types.json b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/notice-types.json
new file mode 100644
index 0000000..13d7343
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/notice-types/notice-types.json
@@ -0,0 +1,148 @@
+{
+ "ublVersion" : "2.3",
+ "sdkVersion" : "1.10.0",
+ "metadataDatabase" : {
+ "version" : "1.10.0",
+ "createdOn" : "2023-11-15T14:00:00"
+ },
+ "noticeSubTypes" : [ {
+ "documentType" : "PIN",
+ "legalBasis" : "32014L0024",
+ "formType" : "planning",
+ "type" : "pin-buyer",
+ "description" : "Notice of the publication of a prior information notice on a buyer profile - general directive",
+ "subTypeId" : "1",
+ "_label" : "notice|name|1",
+ "viewTemplateIds" : [ "1", "summary" ]
+ }, {
+ "documentType" : "CN",
+ "legalBasis" : "32014L0024",
+ "formType" : "competition",
+ "type" : "cn-standard",
+ "description" : "Contract notice – general directive, standard regime",
+ "subTypeId" : "16",
+ "_label" : "notice|name|16",
+ "viewTemplateIds" : [ "16", "summary" ]
+ } ],
+ "documentTypes" : [ {
+ "id" : "BRIN",
+ "namespace" : "http://data.europa.eu/p27/eforms-business-registration-information-notice/1",
+ "rootElement" : "BusinessRegistrationInformationNotice",
+ "schemaLocation" : "schemas/maindoc/EFORMS-BusinessRegistrationInformationNotice.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ }, {
+ "id" : "CAN",
+ "namespace" : "urn:oasis:names:specification:ubl:schema:xsd:ContractAwardNotice-2",
+ "rootElement" : "ContractAwardNotice",
+ "schemaLocation" : "schemas/maindoc/UBL-ContractAwardNotice-2.3.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ }, {
+ "id" : "CN",
+ "namespace" : "urn:oasis:names:specification:ubl:schema:xsd:ContractNotice-2",
+ "rootElement" : "ContractNotice",
+ "schemaLocation" : "schemas/maindoc/UBL-ContractNotice-2.3.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ }, {
+ "id" : "PIN",
+ "namespace" : "urn:oasis:names:specification:ubl:schema:xsd:PriorInformationNotice-2",
+ "rootElement" : "PriorInformationNotice",
+ "schemaLocation" : "schemas/maindoc/UBL-PriorInformationNotice-2.3.xsd",
+ "additionalNamespaces" : [ {
+ "prefix" : "cac",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "cbc",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonBasicComponents-2.3.xsd"
+ }, {
+ "prefix" : "ext",
+ "uri" : "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
+ "schemaLocation" : "schemas/common/UBL-CommonExtensionComponents-2.3.xsd"
+ }, {
+ "prefix" : "efext",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extensions/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionApex-2.3.xsd"
+ }, {
+ "prefix" : "efac",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-aggregate-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionAggregateComponents-2.3.xsd"
+ }, {
+ "prefix" : "efbc",
+ "uri" : "http://data.europa.eu/p27/eforms-ubl-extension-basic-components/1",
+ "schemaLocation" : "schemas/common/EFORMS-ExtensionBasicComponents-2.3.xsd"
+ } ]
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/complete-validation.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/complete-validation.sch
new file mode 100644
index 0000000..c0a36f9
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/complete-validation.sch
@@ -0,0 +1,318 @@
+
+
+
+
+ eForms schematron rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ cac:ProcessJustification
+ cac:AuctionTerms
+ cac:AwardingTerms
+ cac:TechnicalCommitteePerson/cbc:FamilyName
+ cac:PostalAddress
+ cac:Contact
+ cac:BusinessParty
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'EU']/cbc:CompanyID
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'national']/cbc:CompanyID
+ cac:Party
+ cac:ServiceProviderParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:Change
+ efac:Company
+ cac:PostalAddress/cbc:Department
+ cac:PartyLegalEntity/cbc:CompanyID
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ efac:ConcessionRevenue
+ efac:Funding
+ efac:ContractModification
+ efac:Change/efac:ChangedSection/efbc:ChangedSectionIdentifier
+ cac:ContractingParty
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:SpecificTendererRequirement
+ cac:ContractExecutionRequirement
+ efac:DurationJustification
+ cac:FrameworkAgreement
+ efac:Funding
+ cac:AdditionalDocumentReference
+ cac:LotsGroup
+ cac:ProcurementProjectLotReference/cbc:ID[@schemeName='Lot']
+ efac:InterestExpressionReceptionPeriod
+ cac:PartyLegalEntity
+ cac:AwardingCriterion
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:LotDistribution
+ cac:LotsGroup/cbc:LotsGroupID
+ cac:PlannedPeriod
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ cac:NoticeDocumentReference
+ cac:CallForTendersDocumentReference
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='strategic-procurement']/cbc:ProcurementTypeCode
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='accessibility']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='environmental-impact']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='social-objective']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='innovative-acquisition']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='gpp-criteria']/cbc:ProcurementTypeCode
+ cac:TendererQualificationRequest
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ efac:LotResult
+ efac:FrameworkAgreementValues
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='irregularity-type']/efbc:StatisticsCode
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='review-type']/efbc:StatisticsCode
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsNumeric
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsCode
+ cac:FinancingParty/cac:PartyIdentification/cbc:ID
+ cac:PayerParty/cac:PartyIdentification/cbc:ID
+ efac:SettledContract/cbc:ID
+ efac:LotTender/cbc:ID
+ cac:AppealTerms
+ cac:PresentationPeriod/cbc:Description
+ efac:LotTender
+ efac:Origin
+ efac:Origin/efbc:AreaCode
+ efac:AggregatedAmounts/cbc:PaidAmount
+ efac:AggregatedAmounts/efbc:PaidAmountDescription
+ efac:AggregatedAmounts/efbc:PenaltiesAmount
+ efac:ContractTerm[not(efbc:TermCode/text()='all-rev-tic')][efbc:TermCode/@listName='contract-detail']/efbc:TermCode
+ efac:ContractTerm[efbc:TermCode/@listName='rewards-penalties']/efbc:TermCode
+ cac:TenderingProcess
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:ParticipationRequestReceptionPeriod/cbc:EndDate
+ cac:ParticipationRequestReceptionPeriod/cbc:EndTime
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndDate
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndTime
+ cac:OpenTenderEvent/cbc:OccurrenceDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:TenderRecipientParty/cbc:EndpointID
+ cac:AllowedSubcontractTerms[cbc:SubcontractingConditionsCode/@listName='subcontracting-obligation']/cbc:SubcontractingConditionsCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='einvoicing']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='esignature-submission']/cbc:ExecutionRequirementCode
+ cac:RequiredFinancialGuarantee/cbc:Description
+ cac:RequiredFinancialGuarantee/cbc:GuaranteeTypeCode[@listName='tender-guarantee-required']
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalForm
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalFormCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='ecatalog-submission']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='nda']/cbc:ExecutionRequirementCode
+ cac:Language/cbc:ID
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='conditions']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='customer-service']/cbc:ExecutionRequirementCode
+ cac:TenderRecipientParty/cac:PartyIdentification/cbc:ID
+ cac:RequestedTenderTotal
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:TenderingTerms/cac:AwardingTerms
+ cac:TenderingProcess/cac:FrameworkAgreement
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:RequestedTenderTotal
+ efac:Change
+ efac:ChangeReason
+ efac:ChangedSection
+ cac:ProcessJustification
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Funding/efbc:FinancingIdentifier
+ efac:TenderSubcontractingRequirements/efbc:TenderSubcontractingRequirementsCode
+ efac:Funding/cbc:FundingProgramCode
+ efac:SelectionCriteria/cbc:CriterionTypeCode[@listName='selection-criterion']
+ efac:DecisionReason/efac:FieldsPrivacy
+ efac:FieldsPrivacy
+ efac:NoticeResult
+ efac:GroupFramework
+ efac:NoticePurpose
+ cac:ContractExtension
+ cac:Renewal/cac:Period/cbc:Description
+ efac:Organization
+ efac:TouchPoint/cac:PartyIdentification/cbc:ID
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:Organizations
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:ContractTerm
+ efac:AnswerReceptionPeriod
+ cac:ProcurementProjectLot[cbc:ID/@schemeName='Part']
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ cac:AppealTerms
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:EconomicOperatorShortList
+ cac:PreSelectedParty/cac:PartyName/cbc:Name
+ cac:PaymentTerms
+ cac:PostAwardProcess
+ cac:Prize
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RealizedLocation
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='transport-service']/cbc:ProcurementTypeCode
+ cac:TenderingProcess
+ cac:NoticeDocumentReference/cbc:ID
+ cac:TenderingTerms
+ cac:ProcurementLegislationDocumentReference[not(cbc:ID/text()=('CrossBorderLaw','LocalLegalBasis'))]/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='LocalLegalBasis']/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='CrossBorderLaw']/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RequestedTenderTotal
+ cac:OpenTenderEvent
+ cac:OccurenceLocation/cbc:Description
+ efac:ReceivedSubmissionsStatistics
+ efac:AppealsInformation
+ efac:AppealRequestsStatistics
+ efac:AppealedItem/cbc:ID
+ efac:AppealDecision/efbc:DecisionTypeCode
+ efac:AppealIrregularity/efbc:IrregularityTypeCode
+ efac:AppealRemedy/efbc:RemedyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeCode
+ efac:AppealingParty/efbc:AppealingPartyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeDescription
+ efac:AppealProcessingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:AppealingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Publication/efbc:NoticePublicationID[@schemeName='ojs-notice-id']
+ efac:Publication/efbc:GazetteID[@schemeName='ojs-id']
+ efac:Publication/efbc:PublicationDate
+ cac:BusinessCapability/cbc:CapabilityTypeCode
+ cac:ContractingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ cac:EconomicOperatorShortList
+ efac:CriterionParameter
+ cac:SecurityClearanceTerm
+ efac:SelectionCriteria
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ cac:SenderParty/cac:Contact
+ efac:SettledContract
+ efac:LotTender/cbc:ID
+ efac:Funding/efbc:FinancingIdentifier
+ efac:Funding/cbc:FundingProgramCode
+ cac:SignatoryParty/cac:PartyIdentification/cbc:ID
+ efac:StrategicProcurement
+ efac:StrategicProcurement
+ efac:MainContractor/cbc:ID
+ efac:SubcontractingTerm
+ cac:AllowedSubcontractTerms
+ cac:TendererQualificationRequest
+ efac:Tenderer/cbc:ID
+ efac:SubContractor/cbc:ID
+ cac:PostalAddress/cbc:Department
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:ResidenceAddress/cbc:CountrySubentityCode
+ cac:ResidenceAddress/cbc:StreetName
+ cac:ResidenceAddress/cbc:AdditionalStreetName
+ cac:ResidenceAddress/cac:AddressLine/cbc:Line
+ cac:ResidenceAddress/cbc:PostalZone
+ cac:ResidenceAddress/cbc:CityName
+ cac:ResidenceAddress/cac:Country/cbc:IdentificationCode
+ efac:Nationality/cbc:NationalityID
+ cac:Contact/cbc:Telefax
+ efac:FieldsPrivacy
+
+
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/config.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/config.sch
new file mode 100644
index 0000000..bb6e87b
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/config.sch
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1a.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1a.sch
new file mode 100644
index 0000000..9ab9877
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1a.sch
@@ -0,0 +1,21 @@
+
+
+
+
+ rule|text|P-0001
+
+
+ rule|text|P-0002
+
+
+
+
+ rule|text|P-0004
+
+
+
+
+ rule|text|P-0005
+
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1b-1.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1b-1.sch
new file mode 100644
index 0000000..e51be47
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1b-1.sch
@@ -0,0 +1,40 @@
+
+
+
+
+ rule|text|ND-BusinessParty-1
+ rule|text|ND-ContractingParty-1
+ rule|text|ND-GazetteReference-1
+ rule|text|ND-OperationType-1
+ rule|text|ND-Part-1
+ rule|text|ND-ProcedureProcurementScope-1
+ rule|text|ND-ProcedureTenderingProcess-1
+ rule|text|ND-RootExtension-1
+ rule|text|ND-SenderContact-1
+
+
+ rule|text|ND-Buyer-1
+
+
+ rule|text|ND-ProcedureValueEstimate-1
+
+
+ rule|text|ND-LotDistribution-1
+ rule|text|ND-TendererQualificationRequest-1
+
+
+ rule|text|ND-CrossBorderLawUnpublish-1
+
+
+ rule|text|ND-ContractModification-1
+ rule|text|ND-NoticeResult-1
+ rule|text|ND-Organizations-1
+ rule|text|ND-ReviewRequests-1
+
+
+ rule|text|ND-Organization-1
+
+
+ rule|text|ND-Company-1
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1b-16.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1b-16.sch
new file mode 100644
index 0000000..67d8951
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/dynamic/validation-stage-1b-16.sch
@@ -0,0 +1,85 @@
+
+
+
+
+ rule|text|ND-BusinessParty-16
+ rule|text|ND-ContractingParty-16
+ rule|text|ND-GazetteReference-16
+ rule|text|ND-OperationType-16
+ rule|text|ND-Part-16
+ rule|text|ND-ProcedureProcurementScope-16
+ rule|text|ND-ProcedureTenderingProcess-16
+ rule|text|ND-ProcedureTerms-16
+ rule|text|ND-RootExtension-16
+ rule|text|ND-SenderContact-16
+
+
+ rule|text|ND-Buyer-16
+
+
+ rule|text|ND-LotProcurementScope-16
+ rule|text|ND-LotTenderingProcess-16
+ rule|text|ND-LotTenderingTerms-16
+
+
+ rule|text|ND-AuctionTerms-16
+
+
+ rule|text|ND-InterestExpressionReceptionPeriod-16
+ rule|text|ND-PMCAnswersDeadline-16
+
+
+ rule|text|ND-LotProcurementDocument-16
+ rule|text|ND-LotReservedParticipation-16
+ rule|text|ND-LotReviewTerms-16
+ rule|text|ND-NonUBLTenderingTerms-16
+ rule|text|ND-Participants-16
+ rule|text|ND-PostAwardProcess-16
+ rule|text|ND-SubcontractingObligation-16
+
+
+ rule|text|ND-LotAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-ProcedureTypeUnpublish-16
+
+
+ rule|text|ND-ProcedureAcceleratedUnpublish-16
+
+
+ rule|text|ND-TendererQualificationRequest-16
+
+
+ rule|text|ND-CrossBorderLawUnpublish-16
+
+
+ rule|text|ND-ExclusionGrounds-16
+
+
+ rule|text|ND-ContractModification-16
+ rule|text|ND-NoticeResult-16
+ rule|text|ND-Organizations-16
+ rule|text|ND-ReviewRequests-16
+
+
+ rule|text|ND-Organization-16
+
+
+ rule|text|ND-Company-16
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/complete-validation.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/complete-validation.sch
new file mode 100644
index 0000000..4c2ca60
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/complete-validation.sch
@@ -0,0 +1,316 @@
+
+
+
+
+ eForms schematron rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ cac:ProcessJustification
+ cac:AuctionTerms
+ cac:AwardingTerms
+ cac:TechnicalCommitteePerson/cbc:FamilyName
+ cac:PostalAddress
+ cac:Contact
+ cac:BusinessParty
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'EU']/cbc:CompanyID
+ cac:PartyLegalEntity[cbc:CompanyID/@schemeName = 'national']/cbc:CompanyID
+ cac:Party
+ cac:ServiceProviderParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:Change
+ efac:Company
+ cac:PostalAddress/cbc:Department
+ cac:PartyLegalEntity/cbc:CompanyID
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ efac:ConcessionRevenue
+ efac:Funding
+ efac:ContractModification
+ efac:Change/efac:ChangedSection/efbc:ChangedSectionIdentifier
+ cac:ContractingParty
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:SpecificTendererRequirement
+ cac:ContractExecutionRequirement
+ efac:DurationJustification
+ cac:FrameworkAgreement
+ efac:Funding
+ cac:AdditionalDocumentReference
+ cac:LotsGroup
+ cac:ProcurementProjectLotReference/cbc:ID[@schemeName='Lot']
+ efac:InterestExpressionReceptionPeriod
+ cac:PartyLegalEntity
+ cac:AwardingCriterion
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:LotDistribution
+ cac:LotsGroup/cbc:LotsGroupID
+ cac:PlannedPeriod
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ cac:NoticeDocumentReference
+ cac:CallForTendersDocumentReference
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='strategic-procurement']/cbc:ProcurementTypeCode
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='accessibility']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='environmental-impact']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='social-objective']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='innovative-acquisition']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='gpp-criteria']/cbc:ProcurementTypeCode
+ cac:TendererQualificationRequest
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ efac:LotResult
+ efac:FrameworkAgreementValues
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='irregularity-type']/efbc:StatisticsCode
+ efac:AppealRequestsStatistics[efbc:StatisticsCode/@listName='review-type']/efbc:StatisticsCode
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsNumeric
+ efac:ReceivedSubmissionsStatistics/efbc:StatisticsCode
+ cac:FinancingParty/cac:PartyIdentification/cbc:ID
+ cac:PayerParty/cac:PartyIdentification/cbc:ID
+ efac:SettledContract/cbc:ID
+ efac:LotTender/cbc:ID
+ cac:AppealTerms
+ cac:PresentationPeriod/cbc:Description
+ efac:LotTender
+ efac:Origin
+ efac:Origin/efbc:AreaCode
+ efac:AggregatedAmounts/cbc:PaidAmount
+ efac:AggregatedAmounts/efbc:PaidAmountDescription
+ efac:AggregatedAmounts/efbc:PenaltiesAmount
+ efac:ContractTerm[not(efbc:TermCode/text()='all-rev-tic')][efbc:TermCode/@listName='contract-detail']/efbc:TermCode
+ efac:ContractTerm[efbc:TermCode/@listName='rewards-penalties']/efbc:TermCode
+ cac:TenderingProcess
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:ParticipationRequestReceptionPeriod/cbc:EndDate
+ cac:ParticipationRequestReceptionPeriod/cbc:EndTime
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndDate
+ cac:TenderSubmissionDeadlinePeriod/cbc:EndTime
+ cac:OpenTenderEvent/cbc:OccurrenceDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:TenderRecipientParty/cbc:EndpointID
+ cac:AllowedSubcontractTerms[cbc:SubcontractingConditionsCode/@listName='subcontracting-obligation']/cbc:SubcontractingConditionsCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='einvoicing']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='esignature-submission']/cbc:ExecutionRequirementCode
+ cac:RequiredFinancialGuarantee/cbc:Description
+ cac:RequiredFinancialGuarantee/cbc:GuaranteeTypeCode[@listName='tender-guarantee-required']
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalForm
+ cac:TendererQualificationRequest[not(cac:SpecificTendererRequirement)]/cbc:CompanyLegalFormCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='ecatalog-submission']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='nda']/cbc:ExecutionRequirementCode
+ cac:Language/cbc:ID
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='conditions']/cbc:ExecutionRequirementCode
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='customer-service']/cbc:ExecutionRequirementCode
+ cac:TenderRecipientParty/cac:PartyIdentification/cbc:ID
+ cac:RequestedTenderTotal
+ cac:SubordinateAwardingCriterion/cbc:AwardingCriterionTypeCode[@listName='award-criterion-type']
+ efac:FieldsPrivacy
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-fixed']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:AwardCriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ efac:FieldsPrivacy
+ cac:TenderingTerms/cac:AwardingTerms
+ cac:TenderingProcess/cac:FrameworkAgreement
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:RequestedTenderTotal
+ efac:Change
+ efac:ChangeReason
+ efac:ChangedSection
+ cac:ProcessJustification
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Funding/efbc:FinancingIdentifier
+ efac:TenderSubcontractingRequirements/efbc:TenderSubcontractingRequirementsCode
+ efac:Funding/cbc:FundingProgramCode
+ efac:SelectionCriteria/cbc:CriterionTypeCode[@listName='selection-criterion']
+ efac:DecisionReason/efac:FieldsPrivacy
+ efac:FieldsPrivacy
+ efac:NoticeResult
+ efac:GroupFramework
+ efac:NoticePurpose
+ cac:ContractExtension
+ cac:Renewal/cac:Period/cbc:Description
+ efac:Organization
+ efac:TouchPoint/cac:PartyIdentification/cbc:ID
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:Organizations
+ efac:UltimateBeneficialOwner/cbc:ID
+ efac:ContractTerm
+ efac:AnswerReceptionPeriod
+ cac:ProcurementProjectLot[cbc:ID/@schemeName='Part']
+ cac:EmploymentLegislationDocumentReference
+ cac:EnvironmentalLegislationDocumentReference
+ cac:FiscalLegislationDocumentReference
+ cac:Address/cbc:CountrySubentityCode
+ cac:Address/cbc:StreetName
+ cac:Address/cbc:AdditionalStreetName
+ cac:Address/cac:AddressLine/cbc:Line
+ cac:Address/cbc:PostalZone
+ cac:Address/cbc:CityName
+ cac:Address/cac:Country/cbc:IdentificationCode
+ cac:Address/cbc:Region
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:OfficialLanguages/cac:Language/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:NonOfficialLanguages/cac:Language/cbc:ID
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:SpecificTendererRequirement[cbc:TendererRequirementTypeCode/@listName='reserved-procurement']/cbc:TendererRequirementTypeCode
+ cac:AppealTerms
+ cac:NoticeDocumentReference/cbc:ReferencedDocumentInternalAddress
+ cac:AdditionalInformationRequestPeriod/cbc:EndDate
+ cac:AdditionalInformationRequestPeriod/cbc:EndTime
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='framework-agreement']/cbc:ContractingSystemTypeCode
+ cac:ContractingSystem[cbc:ContractingSystemTypeCode/@listName='dps-usage']/cbc:ContractingSystemTypeCode
+ cac:TenderingTerms
+ cac:ContractExecutionRequirement[cbc:ExecutionRequirementCode/@listName='reserved-execution']/cbc:ExecutionRequirementCode
+ cac:EconomicOperatorShortList
+ cac:PreSelectedParty/cac:PartyName/cbc:Name
+ cac:PaymentTerms
+ cac:PostAwardProcess
+ cac:Prize
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RealizedLocation
+ cac:ProcurementProject
+ cac:MainCommodityClassification/cbc:ItemClassificationCode
+ cac:AdditionalCommodityClassification/cbc:ItemClassificationCode
+ cac:RequestedTenderTotal/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efbc:FrameworkMaximumAmount
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='contract-nature']/cbc:ProcurementTypeCode
+ cac:ProcurementAdditionalType[cbc:ProcurementTypeCode/@listName='transport-service']/cbc:ProcurementTypeCode
+ cac:TenderingProcess
+ cac:NoticeDocumentReference/cbc:ID
+ cac:TenderingTerms
+ cac:ProcurementLegislationDocumentReference[not(cbc:ID/text()=('CrossBorderLaw','LocalLegalBasis'))]/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='LocalLegalBasis']/cbc:ID
+ cac:ProcurementLegislationDocumentReference[cbc:ID/text()='CrossBorderLaw']/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension/efac:FieldsPrivacy
+ cac:RequestedTenderTotal
+ cac:OpenTenderEvent
+ cac:OccurenceLocation/cbc:Description
+ efac:ReceivedSubmissionsStatistics
+ efac:AppealsInformation
+ efac:AppealRequestsStatistics
+ efac:AppealedItem/cbc:ID
+ efac:AppealDecision/efbc:DecisionTypeCode
+ efac:AppealIrregularity/efbc:IrregularityTypeCode
+ efac:AppealRemedy/efbc:RemedyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeCode
+ efac:AppealingParty/efbc:AppealingPartyTypeCode
+ efac:AppealProcessingParty/efbc:AppealProcessingPartyTypeDescription
+ efac:AppealProcessingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ efac:AppealingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/efext:EformsExtension
+ efac:Publication/efbc:NoticePublicationID[@schemeName='ojs-notice-id']
+ efac:Publication/efbc:GazetteID[@schemeName='ojs-id']
+ efac:Publication/efbc:PublicationDate
+ cac:BusinessCapability/cbc:CapabilityTypeCode
+ cac:ContractingParty/cac:Party/cac:PartyIdentification/cbc:ID
+ cac:EconomicOperatorShortList
+ efac:CriterionParameter
+ cac:SecurityClearanceTerm
+ efac:SelectionCriteria
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-threshold']/efbc:ParameterNumeric
+ efac:CriterionParameter[efbc:ParameterCode/@listName='number-weight']/efbc:ParameterNumeric
+ cac:SenderParty/cac:Contact
+ efac:SettledContract
+ efac:LotTender/cbc:ID
+ efac:Funding/efbc:FinancingIdentifier
+ efac:Funding/cbc:FundingProgramCode
+ cac:SignatoryParty/cac:PartyIdentification/cbc:ID
+ efac:StrategicProcurement
+ efac:StrategicProcurement
+ efac:MainContractor/cbc:ID
+ efac:SubcontractingTerm
+ cac:AllowedSubcontractTerms
+ cac:TendererQualificationRequest
+ efac:Tenderer/cbc:ID
+ efac:SubContractor/cbc:ID
+ cac:PostalAddress/cbc:Department
+ cac:Contact/cbc:Name
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:PostalAddress/cbc:CountrySubentityCode
+ cac:PostalAddress/cbc:StreetName
+ cac:PostalAddress/cbc:AdditionalStreetName
+ cac:PostalAddress/cac:AddressLine/cbc:Line
+ cac:PostalAddress/cbc:PostalZone
+ cac:PostalAddress/cbc:CityName
+ cac:PostalAddress/cac:Country/cbc:IdentificationCode
+ cac:Contact/cbc:Telefax
+ cac:Contact/cbc:Telephone
+ cac:Contact/cbc:ElectronicMail
+ cac:ResidenceAddress/cbc:CountrySubentityCode
+ cac:ResidenceAddress/cbc:StreetName
+ cac:ResidenceAddress/cbc:AdditionalStreetName
+ cac:ResidenceAddress/cac:AddressLine/cbc:Line
+ cac:ResidenceAddress/cbc:PostalZone
+ cac:ResidenceAddress/cbc:CityName
+ cac:ResidenceAddress/cac:Country/cbc:IdentificationCode
+ efac:Nationality/cbc:NationalityID
+ cac:Contact/cbc:Telefax
+ efac:FieldsPrivacy
+
+
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1a.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1a.sch
new file mode 100644
index 0000000..9ab9877
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1a.sch
@@ -0,0 +1,21 @@
+
+
+
+
+ rule|text|P-0001
+
+
+ rule|text|P-0002
+
+
+
+
+ rule|text|P-0004
+
+
+
+
+ rule|text|P-0005
+
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1b-1.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1b-1.sch
new file mode 100644
index 0000000..e51be47
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1b-1.sch
@@ -0,0 +1,40 @@
+
+
+
+
+ rule|text|ND-BusinessParty-1
+ rule|text|ND-ContractingParty-1
+ rule|text|ND-GazetteReference-1
+ rule|text|ND-OperationType-1
+ rule|text|ND-Part-1
+ rule|text|ND-ProcedureProcurementScope-1
+ rule|text|ND-ProcedureTenderingProcess-1
+ rule|text|ND-RootExtension-1
+ rule|text|ND-SenderContact-1
+
+
+ rule|text|ND-Buyer-1
+
+
+ rule|text|ND-ProcedureValueEstimate-1
+
+
+ rule|text|ND-LotDistribution-1
+ rule|text|ND-TendererQualificationRequest-1
+
+
+ rule|text|ND-CrossBorderLawUnpublish-1
+
+
+ rule|text|ND-ContractModification-1
+ rule|text|ND-NoticeResult-1
+ rule|text|ND-Organizations-1
+ rule|text|ND-ReviewRequests-1
+
+
+ rule|text|ND-Organization-1
+
+
+ rule|text|ND-Company-1
+
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1b-16.sch b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1b-16.sch
new file mode 100644
index 0000000..67d8951
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2768/valid/schematrons/static/validation-stage-1b-16.sch
@@ -0,0 +1,85 @@
+
+
+
+
+ rule|text|ND-BusinessParty-16
+ rule|text|ND-ContractingParty-16
+ rule|text|ND-GazetteReference-16
+ rule|text|ND-OperationType-16
+ rule|text|ND-Part-16
+ rule|text|ND-ProcedureProcurementScope-16
+ rule|text|ND-ProcedureTenderingProcess-16
+ rule|text|ND-ProcedureTerms-16
+ rule|text|ND-RootExtension-16
+ rule|text|ND-SenderContact-16
+
+
+ rule|text|ND-Buyer-16
+
+
+ rule|text|ND-LotProcurementScope-16
+ rule|text|ND-LotTenderingProcess-16
+ rule|text|ND-LotTenderingTerms-16
+
+
+ rule|text|ND-AuctionTerms-16
+
+
+ rule|text|ND-InterestExpressionReceptionPeriod-16
+ rule|text|ND-PMCAnswersDeadline-16
+
+
+ rule|text|ND-LotProcurementDocument-16
+ rule|text|ND-LotReservedParticipation-16
+ rule|text|ND-LotReviewTerms-16
+ rule|text|ND-NonUBLTenderingTerms-16
+ rule|text|ND-Participants-16
+ rule|text|ND-PostAwardProcess-16
+ rule|text|ND-SubcontractingObligation-16
+
+
+ rule|text|ND-LotAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionNumberComplicatedUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionTypeUnpublish-16
+
+
+ rule|text|ND-LotsGroupAwardCriterionFixNumberUnpublish-16
+
+
+ rule|text|ND-ProcedureTypeUnpublish-16
+
+
+ rule|text|ND-ProcedureAcceleratedUnpublish-16
+
+
+ rule|text|ND-TendererQualificationRequest-16
+
+
+ rule|text|ND-CrossBorderLawUnpublish-16
+
+
+ rule|text|ND-ExclusionGrounds-16
+
+
+ rule|text|ND-ContractModification-16
+ rule|text|ND-NoticeResult-16
+ rule|text|ND-Organizations-16
+ rule|text|ND-ReviewRequests-16
+
+
+ rule|text|ND-Organization-16
+
+
+ rule|text|ND-Company-16
+
+
diff --git a/src/test/resources/eu/europa/ted/eforms/sdk/analysis/cucumber/tedefo-2768.feature b/src/test/resources/eu/europa/ted/eforms/sdk/analysis/cucumber/tedefo-2768.feature
new file mode 100644
index 0000000..58c1ea1
--- /dev/null
+++ b/src/test/resources/eu/europa/ted/eforms/sdk/analysis/cucumber/tedefo-2768.feature
@@ -0,0 +1,31 @@
+@tedefo-2768
+Feature: Schematron files - Consistency validation
+ TEDEFO-2768: Check schematron files are complete and consistent
+ Test files under "src/test/resources/eforms-sdk-tests/tedefo-2768"
+
+ Background:
+ Given The following rules
+ | All expected phases are present |
+ | Every pattern is part of at least one phase |
+ | Every assert diagnostics is defined in the schematron file |
+
+ Scenario: All schematron files are consistent
+ Given A "tedefo-2768" folder with "valid" files
+ When I load all schematron files
+ And I load all notice types
+ And I execute validation
+ Then I should get 0 SDK validation errors
+
+ Scenario Outline: Some schematron files are inconsistent
+ Given A "tedefo-2768" folder with "invalid" files
+ When I load all schematron files
+ And I load all notice types
+ And I execute validation
+ Then Rule "" should have been fired
+ And I should get 5 SDK validation errors
+
+ Examples:
+ | expected rule |
+ | All expected phases are present |
+ | Every pattern is part of at least one phase |
+ | Every assert diagnostics is defined in the schematron file |