diff --git a/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/LabelFact.java b/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/LabelFact.java
index 151d7f2..c97e1a1 100644
--- a/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/LabelFact.java
+++ b/src/main/java/eu/europa/ted/eforms/sdk/analysis/fact/LabelFact.java
@@ -16,6 +16,11 @@ public String getId() {
return label.getId();
}
+ public String getNormalizedId() {
+ String id = label.getId();
+ return id.strip().toLowerCase().replaceAll("[-_\\.]", "");
+ }
+
@Override
public String getTypeName() {
return "label";
diff --git a/src/main/resources/eu/europa/ted/eforms/sdk/analysis/drools/translationRules.drl b/src/main/resources/eu/europa/ted/eforms/sdk/analysis/drools/translationRules.drl
new file mode 100644
index 0000000..0538bf3
--- /dev/null
+++ b/src/main/resources/eu/europa/ted/eforms/sdk/analysis/drools/translationRules.drl
@@ -0,0 +1,11 @@
+package eu.europa.ted.eforms.sdk.analysis.drools;
+
+unit SdkUnit;
+
+rule "There are no labels with similar identifiers"
+when
+ /labels[ $l: this, $id: id, $normalizedId: normalizedId ];
+ /labels[ $otherId: id, $otherId < $id, normalizedId == $normalizedId ]
+then
+ results.add(new ValidationResult($l, "Identifier is similar to " + $otherId, ValidationStatusEnum.ERROR));
+end
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/auxiliary_bg.xml b/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/auxiliary_bg.xml
new file mode 100644
index 0000000..ba889af
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/auxiliary_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+auxiliary in Bulgarian. File generated from metadata database version 1.5.0 created on the 2022-12-14T11:00
+Правно основание
+Правно основание
+Роля на организацията
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/field_bg.xml b/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/field_bg.xml
new file mode 100644
index 0000000..25215bc
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/field_bg.xml
@@ -0,0 +1,16 @@
+
+
+
+field in Bulgarian. File generated from metadata database.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Видът на обявлението според законодателството за обществените поръчки.
+Видът на формуляра според законодателството за обществените поръчки.
+Европейският идентификатор на процедурите за възлагане на обществени поръчки – единен идентификатор на процедурата за възлагане. Чрез включването на този идентификатор във всички публикувани версии на настоящото обявление (напр. публикувани в TED, национални портали за публикуване, регионални портали за публикуване) се осигурява еднозначно идентифициране на процедурите за възлагане в целия Съюз.
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/translations.json b/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/translations.json
new file mode 100644
index 0000000..9ca5857
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2851/invalid/translations/translations.json
@@ -0,0 +1,18 @@
+{
+ "files" : [ {
+ "assetType" : "field",
+ "twoLetterCode" : "bg",
+ "threeLetterCode" : "bul",
+ "filename" : "field_bg.xml"
+ }, {
+ "assetType" : "auxiliary",
+ "twoLetterCode" : "bg",
+ "threeLetterCode" : "bul",
+ "filename" : "auxiliary_bg.xml"
+ } ],
+ "languages" : [ {
+ "description" : "Bulgarian",
+ "twoLetterCode" : "bg",
+ "threeLetterCode" : "bul"
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/auxiliary_bg.xml b/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/auxiliary_bg.xml
new file mode 100644
index 0000000..23d709e
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/auxiliary_bg.xml
@@ -0,0 +1,7 @@
+
+
+
+auxiliary in Bulgarian. File generated from metadata database version 1.5.0 created on the 2022-12-14T11:00
+Правно основание
+Роля на организацията
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/field_bg.xml b/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/field_bg.xml
new file mode 100644
index 0000000..784811f
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/field_bg.xml
@@ -0,0 +1,16 @@
+
+
+
+field in Bulgarian. File generated from metadata database.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Правното основание (напр. съюзен или национален нормативен акт), на което се провежда процедурата за възлагане или – при обявленията за предварителна информация – на което ще се проведе процедурата (процедурите) за възлагане.
+Видът на обявлението според законодателството за обществените поръчки.
+Видът на формуляра според законодателството за обществените поръчки.
+Европейският идентификатор на процедурите за възлагане на обществени поръчки – единен идентификатор на процедурата за възлагане. Чрез включването на този идентификатор във всички публикувани версии на настоящото обявление (напр. публикувани в TED, национални портали за публикуване, регионални портали за публикуване) се осигурява еднозначно идентифициране на процедурите за възлагане в целия Съюз.
+
diff --git a/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/translations.json b/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/translations.json
new file mode 100644
index 0000000..9ca5857
--- /dev/null
+++ b/src/test/resources/eforms-sdk-tests/tedefo-2851/valid/translations/translations.json
@@ -0,0 +1,18 @@
+{
+ "files" : [ {
+ "assetType" : "field",
+ "twoLetterCode" : "bg",
+ "threeLetterCode" : "bul",
+ "filename" : "field_bg.xml"
+ }, {
+ "assetType" : "auxiliary",
+ "twoLetterCode" : "bg",
+ "threeLetterCode" : "bul",
+ "filename" : "auxiliary_bg.xml"
+ } ],
+ "languages" : [ {
+ "description" : "Bulgarian",
+ "twoLetterCode" : "bg",
+ "threeLetterCode" : "bul"
+ } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/eu/europa/ted/eforms/sdk/analysis/cucumber/tedefo-2851.feature b/src/test/resources/eu/europa/ted/eforms/sdk/analysis/cucumber/tedefo-2851.feature
new file mode 100644
index 0000000..3285774
--- /dev/null
+++ b/src/test/resources/eu/europa/ted/eforms/sdk/analysis/cucumber/tedefo-2851.feature
@@ -0,0 +1,25 @@
+@tedefo-2851
+Feature: Translation - Check label identifiers
+ TEDEFO-2851: Check for duplicate label identifiers.
+ Test files under under "src/test/resources/eforms-sdk-tests/tedefo-2851"
+
+ Background:
+ Given The following rules
+ | There are no labels with similar identifiers |
+
+ Scenario: There are no labels with similar identifiers
+ Given A "tedefo-2851" folder with "valid" files
+ When I load all labels
+ And I execute validation
+ Then I should get 0 SDK validation errors
+
+ Scenario Outline: Some label identifiers are similar
+ Given A "tedefo-2851" folder with "invalid" files
+ When I load all labels
+ And I execute validation
+ Then Rule "" should have been fired
+ Then I should get 2 SDK validation errors
+
+ Examples:
+ | expected rule |
+ | There are no labels with similar identifiers |