diff --git a/clearing-parent/imdg/pom.xml b/clearing-parent/imdg/pom.xml
index 2d54dc66f..81195787b 100644
--- a/clearing-parent/imdg/pom.xml
+++ b/clearing-parent/imdg/pom.xml
@@ -65,6 +65,12 @@
${external_libraries.hazelcast.version}
+
+
+ org.testng
+ testng
+ test
+
jar/${project.artifactId}
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/AutoconfiguredMap.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/AutoconfiguredMap.java
new file mode 100644
index 000000000..23eefe7b5
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/AutoconfiguredMap.java
@@ -0,0 +1,7 @@
+package ru.spcex.clearing.imdg.base;
+
+public interface AutoconfiguredMap {
+ String getMapName();
+
+ String[] getIndexingField();
+}
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/TemplateMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/TemplateMapStore.java
new file mode 100644
index 000000000..34120e399
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/TemplateMapStore.java
@@ -0,0 +1,89 @@
+package ru.spcex.clearing.imdg.base;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+/**
+ * MapStore для шаблонных бизнес-объектов
+ * @Component
+ */
+public abstract class TemplateMapStore extends ObjectBaseMapStore implements AutoconfiguredMap {
+
+ protected final int validateSize = getFields().length;
+
+ protected final String insertStatement = DbUtilsHelper.createUpdateOrInsert(getTableName(), getFields(), "id");
+
+ public TemplateMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+// @Override
+// public String getTableName() {
+// return "COMPANY_ROLE_SET";
+// }
+//
+// @Override
+// public String[] getFields() {
+// return new String[]{"id", "roleid", "companyid"};
+// }
+
+// //todo TradingDay флаг
+// protected boolean useTradingDay() {
+// return false;
+// }
+
+ /**
+ *
+ * @return IMDGDistributedNames.*
+ */
+ public abstract String getMapName();
+
+ /**
+ * Список индексируемых полей, для быстрого поиска
+ * @return
+ */
+ public String[] getIndexingField() {
+ return null;
+ }
+
+ /**
+ * Десериализатор
+ * @param resultSet
+ * @return
+ */
+ protected abstract T objectReader(ResultSet resultSet) throws SQLException;
+
+ @Override
+ public Collection load(Collection keys) {
+ Map> paramMap = Collections.singletonMap("ids", keys);
+ return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap,
+ (resultSet, i) -> objectReader(resultSet));
+ }
+
+ /**
+ * Сериализатор
+ * @param resultSet
+ * @return Object[] args
+ */
+ protected abstract Object[] objectToField(T resultSet);
+
+ @Override
+ public void store(Map map) {
+ List