Загрузка данных


diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg
index 5ea5d8df8..538d5d99a 100644
--- a/.husky/prepare-commit-msg
+++ b/.husky/prepare-commit-msg
@@ -2,7 +2,7 @@ echo ""
 echo "Checking commit message....."
 MESSAGE=$(cat $1)
 COMMITFORMAT="^(TRADERADAR)-[[:digit:]]+: "
-MERGECOMMITFORMAT="^Merge (remote-tracking )?branch '([^']+)' into (.+)$"
+MERGECOMMITFORMAT="^Merge branch '([^']+)' into (.+)$"
 if ! [[ "$MESSAGE" =~ $COMMITFORMAT ]] && ! [[ "$MESSAGE" =~ $MERGECOMMITFORMAT ]]; then
   echo "Your commit was rejected due to the commit message. Skipping..."
   echo ""
diff --git a/.storybook/main.js b/.storybook/main.js
index d25333a35..2f937b654 100644
--- a/.storybook/main.js
+++ b/.storybook/main.js
@@ -3,15 +3,8 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 
 const custom = require('../webpack.config.js');
 
-const TARGET_FOLDERS = [
-  '../src/uikit/_stories_',
-  '../src/components/_stories_',
-  '../src/_stories_',
-]
-const absoluteTargetFolders = TARGET_FOLDERS.map(f => path.resolve(__dirname, f));
-
 module.exports = {
-  stories: absoluteTargetFolders.map(f => f + '/**/*.stories.@(js|jsx|ts|tsx|mdx)'),
+  stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
   addons: [
     '@storybook/addon-links',
     '@storybook/addon-essentials',
@@ -63,6 +56,7 @@ module.exports = {
         exclude: /node_modules/,
       },
     ];
+    console.log(customConfig.plugins);
     const definePlugin = customConfig.plugins[3];
     return {
       ...config,
diff --git a/CODEOWNERS b/CODEOWNERS
deleted file mode 100644
index 0026bfac5..000000000
--- a/CODEOWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-CODEOWNERS @GumerovAR
-src\widgets\Glass @GumerovAR
-src\widgets\ntb @ShabanovAN @NikiforovOY
-src\widgets\NoTradeChat @SmirnovAS2
\ No newline at end of file
diff --git a/ci/env.config.js.template b/ci/env.config.js.template
index 9653ec460..972a2457a 100644
--- a/ci/env.config.js.template
+++ b/ci/env.config.js.template
@@ -17,4 +17,85 @@ var FEATURE_WEBPUSH = '${FEATURE_WEBPUSH_HELM}';
 var WEBPUSH_PUBLIC_KEY = '${WEBPUSH_PUBLIC_KEY_HELM}';
 var FEATURE_FLAG_1 = '${FEATURE_FLAG_1_HELM}';
 var FEATURE_FLAG_2 = '${FEATURE_FLAG_2_HELM}';
-var FEATURE_FLAG_3 = '${FEATURE_FLAG_3_HELM}';
\ No newline at end of file
+var FEATURE_FLAG_3 = '${FEATURE_FLAG_3_HELM}';
+
+
+(function refreshPageWithCacheUpdate() {
+
+  var STORAGE_KEY = 'cache_refresh_completed';
+
+  var isCompleted = false;
+  try {
+    isCompleted = localStorage.getItem(STORAGE_KEY) === 'true';
+  } catch (e) {
+    console.log('Не удалось прочитать localStorage:', e);
+  }
+
+  if (isCompleted) {
+    console.log('Обновление кеша уже выполнялось ранее');
+    return;
+  }
+
+  var reloadScheduled = false;
+
+  function safeReload() {
+    if (!reloadScheduled) {
+      reloadScheduled = true;
+      window.location.reload();
+    }
+  }
+
+  function markAsCompleted() {
+    try {
+      localStorage.setItem(STORAGE_KEY, 'true');
+      console.log('Флаг обновления сохранен в localStorage');
+    } catch (e) {
+      console.log('Не удалось сохранить в localStorage:', e);
+    }
+  }
+
+  var xhr = new XMLHttpRequest();
+
+  xhr.open('GET', '/', true);
+  xhr.withCredentials = true;
+
+  try {
+    xhr.setRequestHeader('Cache-Control', 'no-cache');
+    xhr.setRequestHeader('Pragma', 'no-cache');
+  } catch (e) {
+    console.log('Не удалось установить заголовки:', e);
+  }
+
+  xhr.onload = function() {
+    if (xhr.status >= 200 && xhr.status < 300) {
+      console.log('Кеш index.html успешно обновлен (статус: ' + xhr.status + ')');
+      markAsCompleted();
+      setTimeout(function() {
+        safeReload();
+      }, 100);
+    } else {
+      console.error('Ошибка HTTP: ' + xhr.status + ' ' + xhr.statusText);
+    }
+  };
+
+  xhr.onerror = function() {
+    console.error('Сетевая ошибка при обновлении кеша');
+  };
+
+  xhr.ontimeout = function() {
+    console.error('Таймаут при обновлении кеша');
+  };
+
+  if (xhr.timeout !== undefined) {
+    xhr.timeout = 10000;
+  }
+
+  try {
+    xhr.send();
+    console.log('Запрос на обновление кеша отправлен (обычный GET /)');
+  } catch (error) {
+    console.error('Ошибка отправки запроса:', error);
+    markAsCompleted();
+    safeReload();
+  }
+})()
\ No newline at end of file
diff --git a/ci/nginx.conf b/ci/nginx.conf
index 244c87839..c0c98d5c4 100644
--- a/ci/nginx.conf
+++ b/ci/nginx.conf
@@ -57,11 +57,6 @@ server {
     add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
   }
 
-  location /fonts {
-    expires -1;
-    add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
-  }
-
   location = / {
     add_header Cache-Control "no-cache, no-store, must-revalidate, max-age=0";
     add_header Expires -1;
diff --git a/jest.config.ts b/jest.config.ts
index 459fd85ca..afb90c13a 100644
--- a/jest.config.ts
+++ b/jest.config.ts
@@ -25,7 +25,7 @@ const config: Config.InitialOptions = {
   moduleNameMapper: {
     ...pathsToModuleNameMapper(fileContentJSON.compilerOptions.paths),
     '\\.(css|scss|module.scss)$': '<rootDir>/__mocks__/styleMock.js',
-    '\\.(gif|png|jpg|jpeg)$': '<rootDir>/__mocks__/fileMock.js',
+    '\\.(gif)$': '<rootDir>/__mocks__/fileMock.js',
     '\\.svg$': '<rootDir>/__mocks__/svgMock.js',
   },
   setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
diff --git a/package-lock.json b/package-lock.json
index a402fb0d5..342c323ae 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -34,13 +34,12 @@
         "dotenv": "^16.4.7",
         "lightweight-charts": "^4.0.0",
         "lodash": "4.17.21",
-        "lucide-react": "^1.21.0",
         "markdown-it": "^14.1.0",
         "markdown-it-ins": "^4.0.0",
         "markdown-it-link-attributes": "^4.0.1",
         "markdown-it-underline": "^1.0.1",
         "meow": "^8.1.2",
-        "moex-chart": "^0.1.12",
+        "moex-chart": "^0.1.13-dev.3",
         "rc-virtual-list": "^3.14.5",
         "react": "^18.2.0",
         "react-chartjs-2": "^5.2.0",
@@ -27546,14 +27545,6 @@
         "yallist": "^3.0.2"
       }
     },
-    "node_modules/lucide-react": {
-      "version": "1.21.0",
-      "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/lucide-react/-/lucide-react-1.21.0.tgz",
-      "integrity": "sha1-75nM81Wvm/Wux0rC8SL32hqepgg=",
-      "peerDependencies": {
-        "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
-      }
-    },
     "node_modules/luxon": {
       "version": "3.5.0",
       "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/luxon/-/luxon-3.5.0.tgz",
@@ -28818,9 +28809,9 @@
       }
     },
     "node_modules/moex-chart": {
-      "version": "0.1.12",
-      "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/moex-chart/-/moex-chart-0.1.12.tgz",
-      "integrity": "sha1-0uaftIpE4fqxiyRu7ZNEseyXAcM=",
+      "version": "0.1.13-dev.3",
+      "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/moex-chart/-/moex-chart-0.1.13-dev.3.tgz",
+      "integrity": "sha1-kj4+nJicAiTTNod5xQ1DfbdkpPc=",
       "dependencies": {
         "@dnd-kit/core": "^6.1.0",
         "@dnd-kit/modifiers": "^7.0.0",
@@ -59511,12 +59502,6 @@
         "yallist": "^3.0.2"
       }
     },
-    "lucide-react": {
-      "version": "1.21.0",
-      "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/lucide-react/-/lucide-react-1.21.0.tgz",
-      "integrity": "sha1-75nM81Wvm/Wux0rC8SL32hqepgg=",
-      "requires": {}
-    },
     "luxon": {
       "version": "3.5.0",
       "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/luxon/-/luxon-3.5.0.tgz",
@@ -60600,9 +60585,9 @@
       "dev": true
     },
     "moex-chart": {
-      "version": "0.1.12",
-      "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/moex-chart/-/moex-chart-0.1.12.tgz",
-      "integrity": "sha1-0uaftIpE4fqxiyRu7ZNEseyXAcM=",
+      "version": "0.1.13-dev.3",
+      "resolved": "https://nexus-dev.tech.moex.com/repository/trade-radar-npm-private-group/moex-chart/-/moex-chart-0.1.13-dev.3.tgz",
+      "integrity": "sha1-kj4+nJicAiTTNod5xQ1DfbdkpPc=",
       "requires": {
         "@dnd-kit/core": "^6.1.0",
         "@dnd-kit/modifiers": "^7.0.0",
diff --git a/package.json b/package.json
index 1cb6314d6..cfa42d7ee 100644
--- a/package.json
+++ b/package.json
@@ -141,13 +141,12 @@
     "dotenv": "^16.4.7",
     "lightweight-charts": "^4.0.0",
     "lodash": "4.17.21",
-    "lucide-react": "^1.21.0",
     "markdown-it": "^14.1.0",
     "markdown-it-ins": "^4.0.0",
     "markdown-it-link-attributes": "^4.0.1",
     "markdown-it-underline": "^1.0.1",
     "meow": "^8.1.2",
-    "moex-chart": "^0.1.12",
+    "moex-chart": "^0.1.13-dev.3",
     "rc-virtual-list": "^3.14.5",
     "react": "^18.2.0",
     "react-chartjs-2": "^5.2.0",
diff --git a/src/uikit/Icon/icons/migration/block/block-rounded.svg b/public/project-icons/block/block-rounded.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/block/block-rounded.svg
rename to public/project-icons/block/block-rounded.svg
diff --git a/src/uikit/Icon/icons/migration/calculate/calculate.svg b/public/project-icons/calculate/calculate.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/calculate/calculate.svg
rename to public/project-icons/calculate/calculate.svg
diff --git a/src/uikit/Icon/icons/migration/chevron-left/chevron-left-outlined.svg b/public/project-icons/chevron-left/chevron-left-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/chevron-left/chevron-left-outlined.svg
rename to public/project-icons/chevron-left/chevron-left-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/compare-arrows/compare-arrows-rounded.svg b/public/project-icons/compare-arrows/compare-arrows-rounded.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/compare-arrows/compare-arrows-rounded.svg
rename to public/project-icons/compare-arrows/compare-arrows-rounded.svg
diff --git a/src/uikit/Icon/icons/migration/email/email-outlined.svg b/public/project-icons/email/email-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/email/email-outlined.svg
rename to public/project-icons/email/email-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/file-copy/file-copy-outlined.svg b/public/project-icons/file-copy/file-copy-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/file-copy/file-copy-outlined.svg
rename to public/project-icons/file-copy/file-copy-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/forum/forum-outlined.svg b/public/project-icons/forum/forum-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/forum/forum-outlined.svg
rename to public/project-icons/forum/forum-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/headset-mic/headset-mic-outlined.svg b/public/project-icons/headset-mic/headset-mic-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/headset-mic/headset-mic-outlined.svg
rename to public/project-icons/headset-mic/headset-mic-outlined.svg
diff --git a/public/project-icons/info/info-outlined.svg b/public/project-icons/info/info-outlined.svg
deleted file mode 100644
index 7e3de4d8b..000000000
--- a/public/project-icons/info/info-outlined.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M11 7H13V9H11V7ZM11 11H13V17H11V11ZM12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20Z" fill="#C7C7D1"/>
-</svg>
diff --git a/src/uikit/Icon/icons/migration/link/link-rounded.svg b/public/project-icons/link/link-rounded.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/link/link-rounded.svg
rename to public/project-icons/link/link-rounded.svg
diff --git a/src/uikit/Icon/icons/migration/move-to-inbox/move-to-inbox-rounded.svg b/public/project-icons/move-to-inbox/move-to-inbox-rounded.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/move-to-inbox/move-to-inbox-rounded.svg
rename to public/project-icons/move-to-inbox/move-to-inbox-rounded.svg
diff --git a/src/uikit/Icon/icons/migration/my-message-state/my-message-state-delivered.svg b/public/project-icons/my-message-state/my-message-state-delivered.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/my-message-state/my-message-state-delivered.svg
rename to public/project-icons/my-message-state/my-message-state-delivered.svg
diff --git a/src/uikit/Icon/icons/migration/my-message-state/my-message-state-sent.svg b/public/project-icons/my-message-state/my-message-state-sent.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/my-message-state/my-message-state-sent.svg
rename to public/project-icons/my-message-state/my-message-state-sent.svg
diff --git a/src/uikit/Icon/icons/migration/person-add/person-add-outlined.svg b/public/project-icons/person-add/person-add-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/person-add/person-add-outlined.svg
rename to public/project-icons/person-add/person-add-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/phone/phone-outlined.svg b/public/project-icons/phone/phone-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/phone/phone-outlined.svg
rename to public/project-icons/phone/phone-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/post-add/post-add-outlined.svg b/public/project-icons/post-add/post-add-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/post-add/post-add-outlined.svg
rename to public/project-icons/post-add/post-add-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/print/print-outlined.svg b/public/project-icons/print/print-outlined.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/print/print-outlined.svg
rename to public/project-icons/print/print-outlined.svg
diff --git a/src/uikit/Icon/icons/migration/send/send-rounded.svg b/public/project-icons/send/send-rounded.svg
similarity index 100%
rename from src/uikit/Icon/icons/migration/send/send-rounded.svg
rename to public/project-icons/send/send-rounded.svg
diff --git a/public/sw.js b/public/sw.js
index e107522fe..998cefec8 100644
--- a/public/sw.js
+++ b/public/sw.js
@@ -17,6 +17,10 @@ const log = (message) => {
   console.log(`[sw]: ${message}`);
 };
 
+this.addEventListener('message', (event) => {
+  console.log('SW проснулся по сообщению:', event.data);
+});
+
 // Пример минимальной реализации service worker
 this.addEventListener('install', (event) => {
   log('install');
@@ -24,7 +28,6 @@ this.addEventListener('install', (event) => {
 });
 
 this.addEventListener('activate', (event) => {
-  log('activate');
   event.waitUntil(
     this.clients.claim().catch((err) => {
       console.error('Ошибка claim:', err);
@@ -34,14 +37,13 @@ this.addEventListener('activate', (event) => {
 
 // Подписываемся на событие получения Web Push
 self.addEventListener('push', async function (event) {
-  log('push');
   var showPush = new Promise(function (resolve) {
     try {
       // Получаем данные Web Push
       const data = event.data ? event.data.json() : null;
       resolve(data);
     } catch (error) {
-      log('error at parsing event: ', error);
+      console.log('error at parsing event: ', error);
       resolve(null);
     }
   }).then(async function (data) {
@@ -56,7 +58,6 @@ self.addEventListener('push', async function (event) {
 
 // Подписываемся на событие нажатия на уведомление
 self.addEventListener('notificationclick', function (event) {
-  log('nclick');
   // Ищем запущенное приложение и переключаемся на него или запускаем новое
   event.waitUntil(
     (async () => {
@@ -88,7 +89,7 @@ self.addEventListener('notificationclick', function (event) {
           }),
         });
       } catch (error) {
-        log(error);
+        console.log(error);
       }
     })(),
   );
@@ -96,7 +97,6 @@ self.addEventListener('notificationclick', function (event) {
 
 // Метод показа уведомления WebPush
 function showNotification(data) {
-  log('try to show');
   if (!data) return;
 
   const { title, text, messageId, pushMessageId, chatId, [ROCKET_MESSAGE_ID_PUSH_KEY]: rmid } = data;
@@ -174,7 +174,6 @@ async function getNotificationContent(data) {
 
 // Событие изменения подписки браузером
 self.addEventListener('pushsubscriptionchange', async function (event) {
-  log('pushsubscriptionchange');
   event.waitUntil(
     (async () => {
       try {
@@ -230,7 +229,7 @@ self.addEventListener('pushsubscriptionchange', async function (event) {
 function connectDB(f) {
   const request = indexedDB.open('wingsSdk', 1);
   request.onerror = function (error) {
-    log(error);
+    console.log(error);
   };
   request.onsuccess = function () {
     f(request.result);
diff --git a/public/workspaces/ntbLogistic.json b/public/workspaces/ntbLogistic.json
deleted file mode 100644
index 5615ec038..000000000
--- a/public/workspaces/ntbLogistic.json
+++ /dev/null
@@ -1 +0,0 @@
-{"workspace":{"id":1548,"name":"Логистика","isCurrent":null,"position":35,"saved":true,"pinned":null,"favorite":true,"isNew":false,"abbreviation":null,"code":null,"isAddWidgets":true,"closedAt":null,"layout":null},"widgets_properties":[{"id":null,"widgetId":9171,"properties":[{"value":"null","key":"beforeExpandParams"},{"value":"false","key":"isExpand"},{"value":"null","key":"master"},{"value":"true","key":"moved"},{"value":"","key":"name"},{"value":"0%","key":"position_maxX"},{"value":"0%","key":"position_maxY"},{"value":"0%","key":"position_widgetNumber"},{"value":"0.11773940402256867%","key":"position_x"},{"value":"0.2862592076146325%","key":"position_y"},{"value":"100","key":"sizeLimits_minHeight"},{"value":"100","key":"sizeLimits_minWidth"},{"value":"52.75719010891298%","key":"sizes_height"},{"value":"48.63731656184486%","key":"sizes_width"},{"value":"ntbLogisticAuto","key":"type"},{"value":"[{\"dataIndex\":\"dischargePortName\",\"width\":100,\"position\":1,\"align\":\"left\"},{\"dataIndex\":\"comment\",\"width\":100,\"position\":2,\"align\":\"left\"},{\"dataIndex\":\"value\",\"width\":100,\"position\":3,\"align\":\"left\"},{\"dataIndex\":\"currencyName\",\"width\":100,\"position\":4,\"align\":\"left\"},{\"dataIndex\":\"valueDate\",\"width\":100,\"position\":5,\"align\":\"left\"},{\"dataIndex\":\"partner.name\",\"width\":100,\"position\":6,\"align\":\"left\"},{\"dataIndex\":\"partySize\",\"width\":100,\"position\":7,\"align\":\"left\"},{\"dataIndex\":\"productName\",\"width\":100,\"position\":8,\"align\":\"left\"},{\"dataIndex\":\"dischargeCountryName\",\"width\":100,\"position\":9,\"align\":\"left\"},{\"dataIndex\":\"loadCountryName\",\"width\":100,\"position\":10,\"align\":\"left\"},{\"dataIndex\":\"loadPortName\",\"width\":100,\"position\":11,\"align\":\"left\"}]","key":"widgetContentProps_history_columns"},{"value":"null","key":"widgetContentProps_history_groupByField"},{"value":"desc","key":"widgetContentProps_history_sortingState_valueDate"},{"value":"[{\"dataIndex\":\"dischargePortName\",\"width\":265.35,\"position\":1,\"align\":\"left\"},{\"dataIndex\":\"comment\",\"width\":120.12,\"position\":2,\"align\":\"left\"},{\"dataIndex\":\"value\",\"width\":120.12,\"position\":3,\"align\":\"right\"},{\"dataIndex\":\"valueChange\",\"width\":120.12,\"position\":4,\"align\":\"right\"},{\"dataIndex\":\"currencyName\",\"hidden\":true,\"width\":100.29394913655516,\"position\":5,\"align\":\"left\"},{\"dataIndex\":\"valueDate\",\"width\":152.95,\"position\":6,\"align\":\"left\"},{\"dataIndex\":\"partner.name\",\"hidden\":false,\"width\":147.35,\"position\":7,\"align\":\"left\"},{\"dataIndex\":\"partySize\",\"hidden\":true,\"width\":100.29394913655516,\"position\":8,\"align\":\"left\"},{\"dataIndex\":\"productName\",\"hidden\":true,\"width\":100.29394913655516,\"position\":9,\"align\":\"left\"},{\"dataIndex\":\"dischargeCountryName\",\"hidden\":true,\"width\":100.29394913655516,\"position\":10,\"align\":\"left\"}]","key":"widgetContentProps_main_columns"},{"value":"null","key":"widgetContentProps_main_groupByField"},{"value":"asc","key":"widgetContentProps_main_sortingState_dischargePortName"},{"value":"NTBVTFC:NTBVLB:ED589935005EEB8F","key":"widgetContentProps_selectedInstrument"},{"value":"false","key":"withoutSend"},{"value":"1548","key":"workspaceId"},{"value":"40","key":"zIndex"}],"isRemoval":null},{"id":null,"widgetId":9174,"properties":[{"value":"null","key":"beforeExpandParams"},{"value":"false","key":"isExpand"},{"value":"null","key":"master"},{"value":"true","key":"moved"},{"value":"","key":"name"},{"value":"0%","key":"position_maxX"},{"value":"0%","key":"position_maxY"},{"value":"0%","key":"position_widgetNumber"},{"value":"0.15723270440251574%","key":"position_x"},{"value":"53.479496268338934%","key":"position_y"},{"value":"100","key":"sizeLimits_minHeight"},{"value":"100","key":"sizeLimits_minWidth"},{"value":"61.91860908685729%","key":"sizes_height"},{"value":"48.59782326146492%","key":"sizes_width"},{"value":"ntbLogisticFreight","key":"type"},{"value":"[{\"dataIndex\":\"dischargePortName\",\"width\":128,\"position\":1,\"align\":\"left\"},{\"dataIndex\":\"comment\",\"width\":128,\"position\":2,\"align\":\"left\"},{\"dataIndex\":\"value\",\"width\":128,\"position\":3,\"align\":\"left\"},{\"dataIndex\":\"currencyName\",\"width\":128,\"position\":4,\"align\":\"left\"},{\"dataIndex\":\"valueDate\",\"width\":128,\"position\":5,\"align\":\"left\"},{\"dataIndex\":\"partner.name\",\"width\":128,\"position\":6,\"align\":\"left\"},{\"dataIndex\":\"partySize\",\"width\":128,\"position\":7,\"align\":\"left\"},{\"dataIndex\":\"productName\",\"width\":128,\"position\":8,\"align\":\"left\"},{\"dataIndex\":\"dischargeCountryName\",\"width\":128,\"position\":9,\"align\":\"left\"},{\"dataIndex\":\"loadCountryName\",\"width\":128,\"position\":10,\"align\":\"left\"},{\"dataIndex\":\"loadPortName\",\"width\":128,\"position\":11,\"align\":\"left\"}]","key":"widgetContentProps_history_columns"},{"value":"null","key":"widgetContentProps_history_groupByField"},{"value":"desc","key":"widgetContentProps_history_sortingState_valueDate"},{"value":"[{\"dataIndex\":\"loadPortName\",\"width\":126.14733370203194,\"position\":1,\"align\":\"left\"},{\"dataIndex\":\"dischargeCountryName\",\"width\":100,\"position\":2,\"align\":\"left\"},{\"dataIndex\":\"dischargePortName\",\"width\":100,\"position\":3,\"align\":\"left\"},{\"dataIndex\":\"loadCountryName\",\"hidden\":true,\"width\":100,\"position\":4,\"align\":\"left\"},{\"dataIndex\":\"value\",\"width\":100,\"position\":5,\"align\":\"right\"},{\"dataIndex\":\"valueChange\",\"width\":100,\"position\":6,\"align\":\"right\"},{\"dataIndex\":\"currencyName\",\"hidden\":true,\"width\":100,\"position\":7,\"align\":\"left\"},{\"dataIndex\":\"valueDate\",\"width\":100,\"position\":8,\"align\":\"left\"},{\"dataIndex\":\"productName\",\"width\":100,\"position\":9,\"align\":\"left\"},{\"dataIndex\":\"partySize\",\"width\":100,\"position\":10,\"align\":\"left\"},{\"dataIndex\":\"partner.name\",\"width\":100,\"position\":11,\"align\":\"left\"}]","key":"widgetContentProps_main_columns"},{"value":"null","key":"widgetContentProps_main_groupByField"},{"value":"NTBVTFC:NTBVLB:194DCD0179EDF1A0","key":"widgetContentProps_selectedInstrument"},{"value":"false","key":"withoutSend"},{"value":"1548","key":"workspaceId"},{"value":"42","key":"zIndex"}],"isRemoval":null},{"id":null,"widgetId":9172,"properties":[{"value":"null","key":"beforeExpandParams"},{"value":"NTBVTFC:NTBVLB:ED589935005EEB8F","key":"externalProperties_0_instrId"},{"value":"false","key":"inFocus"},{"value":"false","key":"isExpand"},{"value":"9171","key":"master"},{"value":"9171","key":"masters_0"},{"value":"true","key":"moved"},{"value":"","key":"name"},{"value":"0%","key":"position_maxX"},{"value":"0%","key":"position_maxY"},{"value":"0%","key":"position_widgetNumber"},{"value":"48.912947232868184%","key":"position_x"},{"value":"0.436046511627907%","key":"position_y"},{"value":"100","key":"sizeLimits_minHeight"},{"value":"100","key":"sizeLimits_minWidth"},{"value":"52.616279069767444%","key":"sizes_height"},{"value":"50.943396226415096%","key":"sizes_width"},{"value":"graphic","key":"type"},{"value":"1","key":"widgetContentProps_chartState_interval_asString"},{"value":"{\"layout\":\"s\",\"charts\":[{\"panes\":[{\"sources\":[{\"type\":\"MainSeries\",\"id\":\"_seriesId\",\"zorder\":0,\"haStyle\":{\"studyId\":\"BarSetHeikenAshi@tv-basicstudies-60\"},\"renkoStyle\":{\"studyId\":\"BarSetRenko@tv-prostudies-64\"},\"pbStyle\":{\"studyId\":\"BarSetPriceBreak@tv-prostudies-34\"},\"kagiStyle\":{\"studyId\":\"BarSetKagi@tv-prostudies-34\"},\"pnfStyle\":{\"studyId\":\"BarSetPnF@tv-prostudies-34\"},\"rangeStyle\":{\"studyId\":\"BarSetRange@tv-basicstudies-72\"},\"formattingDeps\":{\"format\":\"volume\",\"pricescale\":8,\"minmov\":0.1},\"state\":{\"style\":1,\"esdShowDividends\":true,\"esdShowSplits\":true,\"esdShowEarnings\":true,\"esdShowBreaks\":false,\"esdFlagSize\":2,\"showContinuousContractSwitches\":true,\"showContinuousContractSwitchesBreaks\":false,\"showFuturesContractExpiration\":true,\"showLastNews\":true,\"showCountdown\":false,\"bidAsk\":{\"visible\":false,\"lineStyle\":1,\"lineWidth\":1,\"bidLineColor\":\"#2962FF\",\"askLineColor\":\"#F7525F\"},\"prePostMarket\":{\"visible\":true,\"lineStyle\":1,\"lineWidth\":1,\"preMarketColor\":\"#FB8C00\",\"postMarketColor\":\"#2962FF\"},\"highLowAvgPrice\":{\"highLowPriceLinesVisible\":false,\"highLowPriceLabelsVisible\":false,\"averageClosePriceLineVisible\":false,\"averageClosePriceLabelVisible\":false,\"highLowPriceLinesColor\":\"\",\"highLowPriceLinesWidth\":1,\"averagePriceLineColor\":\"\",\"averagePriceLineWidth\":1},\"visible\":true,\"showPriceLine\":true,\"priceLineWidth\":1,\"priceLineColor\":\"\",\"baseLineColor\":\"#5d606b\",\"showPrevClosePriceLine\":false,\"prevClosePriceLineWidth\":1,\"prevClosePriceLineColor\":\"#555555\",\"minTick\":\"default\",\"dividendsAdjustment\":{},\"backAdjustment\":false,\"settlementAsClose\":true,\"sessionId\":\"regular\",\"sessVis\":false,\"statusViewStyle\":{\"fontSize\":16,\"showExchange\":true,\"showInterval\":true,\"symbolTextSource\":\"description\"},\"candleStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"drawWick\":true,\"drawBorder\":true,\"borderColor\":\"#378658\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"wickColor\":\"#B5B5B8\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"barColorsOnPrevClose\":false,\"drawBody\":true},\"hollowCandleStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"drawWick\":true,\"drawBorder\":true,\"borderColor\":\"#378658\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"wickColor\":\"#B5B5B8\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"drawBody\":true},\"haStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"drawWick\":true,\"drawBorder\":true,\"borderColor\":\"#378658\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"wickColor\":\"#B5B5B8\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"showRealLastPrice\":false,\"barColorsOnPrevClose\":false,\"inputs\":{},\"inputInfo\":{},\"drawBody\":true},\"barStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"barColorsOnPrevClose\":false,\"dontDrawOpen\":false,\"thinBars\":true},\"hiloStyle\":{\"color\":\"#2962FF\",\"showBorders\":true,\"borderColor\":\"#2962FF\",\"showLabels\":true,\"labelColor\":\"#2962FF\",\"drawBody\":true},\"columnStyle\":{\"upColor\":\"rgba(8, 153, 129, 0.5)\",\"downColor\":\"rgba(242, 54, 69, 0.5)\",\"barColorsOnPrevClose\":true,\"priceSource\":\"close\"},\"lineStyle\":{\"color\":\"#576DDB\",\"linestyle\":0,\"linewidth\":2,\"priceSource\":\"close\",\"styleType\":2},\"areaStyle\":{\"color1\":\"rgba(41, 98, 255, 0.28)\",\"color2\":\"#2962FF\",\"linecolor\":\"#2962FF\",\"linestyle\":0,\"linewidth\":2,\"priceSource\":\"close\",\"transparency\":100},\"renkoStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"borderUpColorProjection\":\"#336854\",\"borderDownColorProjection\":\"#7f323f\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"inputs\":{\"source\":\"close\",\"sources\":\"Close\",\"boxSize\":3,\"style\":\"ATR\",\"atrLength\":14,\"wicks\":true},\"inputInfo\":{\"source\":{\"name\":\"Source\"},\"sources\":{\"name\":\"Source\"},\"boxSize\":{\"name\":\"Box size\"},\"style\":{\"name\":\"Style\"},\"atrLength\":{\"name\":\"ATR length\"},\"wicks\":{\"name\":\"Wicks\"}}},\"pbStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"borderUpColorProjection\":\"#336854\",\"borderDownColorProjection\":\"#7f323f\",\"inputs\":{\"source\":\"close\",\"lb\":3},\"inputInfo\":{\"source\":{\"name\":\"Source\"},\"lb\":{\"name\":\"Number of line\"}}},\"kagiStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"inputs\":{\"source\":\"close\",\"style\":\"ATR\",\"atrLength\":14,\"reversalAmount\":1},\"inputInfo\":{\"source\":{\"name\":\"Source\"},\"style\":{\"name\":\"Style\"},\"atrLength\":{\"name\":\"ATR length\"},\"reversalAmount\":{\"name\":\"Reversal amount\"}}},\"pnfStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"inputs\":{\"sources\":\"Close\",\"reversalAmount\":3,\"boxSize\":1,\"style\":\"ATR\",\"atrLength\":14,\"oneStepBackBuilding\":false},\"inputInfo\":{\"sources\":{\"name\":\"Source\"},\"boxSize\":{\"name\":\"Box size\"},\"reversalAmount\":{\"name\":\"Reversal amount\"},\"style\":{\"name\":\"Style\"},\"atrLength\":{\"name\":\"ATR length\"},\"oneStepBackBuilding\":{\"name\":\"One step back building\"}}},\"baselineStyle\":{\"baselineColor\":\"#758696\",\"topFillColor1\":\"rgba(8, 153, 129, 0.28)\",\"topFillColor2\":\"rgba(8, 153, 129, 0.05)\",\"bottomFillColor1\":\"rgba(242, 54, 69, 0.05)\",\"bottomFillColor2\":\"rgba(242, 54, 69, 0.28)\",\"topLineColor\":\"#089981\",\"bottomLineColor\":\"#F23645\",\"topLineWidth\":2,\"bottomLineWidth\":2,\"priceSource\":\"close\",\"transparency\":50,\"baseLevelPercentage\":50},\"rangeStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"thinBars\":true,\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"inputs\":{\"range\":10,\"phantomBars\":false},\"inputInfo\":{\"range\":{\"name\":\"Range\"},\"phantomBars\":{\"name\":\"Phantom bars\"}}},\"symbol\":\"NTBVTFC:NTBVLB:ED589935005EEB8F\",\"shortName\":\"пшеница, 100+, RUB, РФ, НЗТ (Новороссийск)\",\"timeframe\":\"\",\"onWidget\":false,\"interval\":\"1\",\"unitId\":null,\"currencyId\":null,\"showSessions\":false,\"priceAxisProperties\":{\"autoScale\":true,\"autoScaleDisabled\":false,\"lockScale\":false,\"percentage\":false,\"percentageDisabled\":false,\"log\":false,\"logDisabled\":false,\"alignLabels\":true,\"isInverted\":false,\"indexedTo100\":false}}},{\"type\":\"study_Volume\",\"id\":\"gwwPhK\",\"state\":{\"styles\":{\"vol\":{\"display\":15,\"linestyle\":0,\"linewidth\":1,\"plottype\":5,\"trackPrice\":false,\"transparency\":50,\"color\":\"#000080\",\"histogramBase\":0,\"joinPoints\":false,\"title\":\"Volume\"},\"vol_ma\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196f3\",\"histogramBase\":0,\"joinPoints\":false,\"title\":\"Volume MA\"},\"smoothedMA\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196f3\",\"histogramBase\":0,\"joinPoints\":false,\"title\":\"Smoothed MA\"}},\"palettes\":{\"volumePalette\":{\"colors\":{\"0\":{\"color\":\"#F7525F\",\"width\":1,\"style\":0,\"name\":\"Falling\"},\"1\":{\"color\":\"#22AB94\",\"width\":1,\"style\":0,\"name\":\"Growing\"}}}},\"inputs\":{\"showMA\":false,\"length\":20,\"col_prev_close\":false,\"symbol\":\"\",\"smoothingLine\":\"SMA\",\"smoothingLength\":9},\"precision\":\"default\",\"bands\":{},\"area\":{},\"graphics\":{},\"plots\":{\"0\":{\"id\":\"vol\",\"type\":\"line\"},\"1\":{\"id\":\"volumePalette\",\"palette\":\"volumePalette\",\"target\":\"vol\",\"type\":\"colorer\"},\"2\":{\"id\":\"vol_ma\",\"type\":\"line\"},\"3\":{\"id\":\"smoothedMA\",\"type\":\"line\"}},\"ohlcPlots\":{},\"filledAreasStyle\":{},\"filledAreas\":{},\"visible\":true,\"showLegendValues\":true,\"showLabelsOnPriceScale\":true,\"parentSources\":{},\"_metainfoVersion\":53,\"isTVScript\":false,\"isTVScriptStub\":false,\"is_hidden_study\":false,\"description\":\"Volume\",\"shortDescription\":\"Volume\",\"is_price_study\":false,\"id\":\"Volume@tv-basicstudies\",\"format\":{\"type\":\"volume\"},\"description_localized\":\"Объём\",\"shortId\":\"Volume\",\"packageId\":\"tv-basicstudies\",\"version\":\"1\",\"fullId\":\"Volume@tv-basicstudies-1\",\"productId\":\"tv-basicstudies\",\"_serverMetaInfoVersion\":52,\"intervalsVisibilities\":{\"ticks\":true,\"seconds\":true,\"secondsFrom\":1,\"secondsTo\":59,\"minutes\":true,\"minutesFrom\":1,\"minutesTo\":59,\"hours\":true,\"hoursFrom\":1,\"hoursTo\":24,\"days\":true,\"daysFrom\":1,\"daysTo\":366,\"weeks\":true,\"weeksFrom\":1,\"weeksTo\":52,\"months\":true,\"monthsFrom\":1,\"monthsTo\":12,\"ranges\":true}},\"zorder\":-10000,\"ownFirstValue\":null,\"metaInfo\":{\"palettes\":{\"volumePalette\":{\"colors\":{\"0\":{\"name\":\"Falling\"},\"1\":{\"name\":\"Growing\"}}}},\"inputs\":[{\"id\":\"symbol\",\"name\":\"Other Symbol\",\"defval\":\"\",\"type\":\"symbol\",\"optional\":true,\"isHidden\":false},{\"id\":\"showMA\",\"name\":\"show MA\",\"defval\":false,\"type\":\"bool\",\"isHidden\":true},{\"id\":\"length\",\"name\":\"MA Length\",\"defval\":20,\"type\":\"integer\",\"min\":1,\"max\":2000},{\"defval\":false,\"id\":\"col_prev_close\",\"name\":\"Color based on previous close\",\"type\":\"bool\"},{\"id\":\"smoothingLine\",\"name\":\"Smoothing Line\",\"defval\":\"SMA\",\"type\":\"text\",\"options\":[\"SMA\",\"EMA\",\"WMA\"]},{\"id\":\"smoothingLength\",\"name\":\"Smoothing Length\",\"defval\":9,\"type\":\"integer\",\"min\":1,\"max\":10000}],\"plots\":[{\"id\":\"vol\",\"type\":\"line\"},{\"id\":\"volumePalette\",\"palette\":\"volumePalette\",\"target\":\"vol\",\"type\":\"colorer\"},{\"id\":\"vol_ma\",\"type\":\"line\"},{\"id\":\"smoothedMA\",\"type\":\"line\"}],\"graphics\":{},\"defaults\":{\"styles\":{\"vol\":{\"display\":15,\"linestyle\":0,\"linewidth\":1,\"plottype\":5,\"trackPrice\":false,\"transparency\":50,\"color\":\"#000080\"},\"vol_ma\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196F3\"},\"smoothedMA\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196F3\"}},\"palettes\":{\"volumePalette\":{\"colors\":{\"0\":{\"color\":\"#F7525F\",\"width\":1,\"style\":0},\"1\":{\"color\":\"#22AB94\",\"width\":1,\"style\":0}}}},\"inputs\":{\"showMA\":false,\"length\":20,\"col_prev_close\":false,\"symbol\":\"\",\"smoothingLine\":\"SMA\",\"smoothingLength\":9}},\"_metainfoVersion\":53,\"isTVScript\":false,\"isTVScriptStub\":false,\"is_hidden_study\":false,\"styles\":{\"vol\":{\"title\":\"Volume\",\"histogramBase\":0},\"vol_ma\":{\"title\":\"Volume MA\",\"histogramBase\":0},\"smoothedMA\":{\"title\":\"Smoothed MA\",\"histogramBase\":0}},\"description\":\"Volume\",\"shortDescription\":\"Volume\",\"is_price_study\":false,\"id\":\"Volume@tv-basicstudies-1\",\"format\":{\"type\":\"volume\"},\"description_localized\":\"Объём\",\"shortId\":\"Volume\",\"packageId\":\"tv-basicstudies\",\"version\":\"1\",\"fullId\":\"Volume@tv-basicstudies-1\",\"productId\":\"tv-basicstudies\",\"_serverMetaInfoVersion\":52}}],\"mainSourceId\":\"_seriesId\",\"stretchFactor\":2000,\"leftAxisesState\":[],\"rightAxisesState\":[{\"state\":{\"id\":\"RhIalOJ39YJ5\",\"m_priceRange\":null,\"m_isAutoScale\":true,\"m_isPercentage\":false,\"m_isIndexedTo100\":false,\"m_isLog\":false,\"m_isLockScale\":false,\"m_isInverted\":false,\"m_height\":530,\"m_topMargin\":0.1,\"m_bottomMargin\":0.08,\"alignLabels\":true,\"logFormula\":{\"logicalOffset\":4,\"coordOffset\":0.0001}},\"sources\":[\"_seriesId\"]}],\"overlayPriceScales\":{\"gwwPhK\":{\"id\":\"NDfDMVFx4HLR\",\"m_priceRange\":null,\"m_isAutoScale\":true,\"m_isPercentage\":false,\"m_isIndexedTo100\":false,\"m_isLog\":false,\"m_isLockScale\":false,\"m_isInverted\":false,\"m_height\":530,\"m_topMargin\":0.1,\"m_bottomMargin\":0.08,\"alignLabels\":true,\"logFormula\":{\"logicalOffset\":4,\"coordOffset\":0.0001}}},\"priceScaleRatio\":null}],\"timeScale\":{\"m_barSpacing\":6,\"m_rightOffset\":10},\"chartProperties\":{\"paneProperties\":{\"backgroundType\":\"gradient\",\"background\":\"#131722\",\"backgroundGradientStartColor\":\"#181C27\",\"backgroundGradientEndColor\":\"#131722\",\"vertGridProperties\":{\"color\":\"rgba(240, 243, 250, 0.06)\",\"style\":0},\"horzGridProperties\":{\"color\":\"rgba(240, 243, 250, 0.06)\",\"style\":0},\"crossHairProperties\":{\"color\":\"#9598A1\",\"style\":2,\"transparency\":0,\"width\":1},\"topMargin\":10,\"bottomMargin\":8,\"axisProperties\":{\"autoScale\":true,\"autoScaleDisabled\":false,\"lockScale\":false,\"percentage\":false,\"percentageDisabled\":false,\"indexedTo100\":false,\"log\":false,\"logDisabled\":false,\"alignLabels\":true,\"isInverted\":false},\"legendProperties\":{\"showStudyArguments\":true,\"showStudyTitles\":true,\"showStudyValues\":true,\"showSeriesTitle\":false,\"showSeriesOHLC\":true,\"showLegend\":true,\"showBarChange\":true,\"showVolume\":false,\"showBackground\":true,\"backgroundTransparency\":50},\"separatorColor\":\"#2A2E39\"},\"scalesProperties\":{\"backgroundColor\":\"#ffffff\",\"lineColor\":\"rgba(240, 243, 250, 0)\",\"textColor\":\"#B2B5BE\",\"fontSize\":12,\"scaleSeriesOnly\":false,\"showSeriesLastValue\":true,\"seriesLastValueMode\":1,\"showSeriesPrevCloseValue\":false,\"showStudyLastValue\":true,\"showSymbolLabels\":false,\"showStudyPlotLabels\":false,\"showBidAskLabels\":false,\"showPrePostMarketPriceLabel\":true,\"showFundamentalNameLabel\":false,\"showFundamentalLastValue\":true,\"barSpacing\":6,\"axisHighlightColor\":\"rgba(41, 98, 255, 0.25)\",\"axisLineToolLabelBackgroundColorCommon\":\"#2962FF\",\"axisLineToolLabelBackgroundColorActive\":\"#143EB3\",\"showPriceScaleCrosshairLabel\":true,\"showTimeScaleCrosshairLabel\":true,\"crosshairLabelBgColorLight\":\"#131722\",\"crosshairLabelBgColorDark\":\"#363A45\"},\"chartEventsSourceProperties\":{\"visible\":true,\"futureOnly\":true,\"breaks\":{\"color\":\"#555555\",\"visible\":false,\"style\":2,\"width\":1}},\"tradingProperties\":{\"showPositions\":true,\"positionPL\":{\"visibility\":true,\"display\":0},\"bracketsPL\":{\"visibility\":true,\"display\":0},\"showOrders\":true,\"showExecutions\":true,\"showExecutionsLabels\":false,\"showReverse\":true,\"horizontalAlignment\":2,\"extendLeft\":true,\"lineLength\":5,\"lineWidth\":1,\"lineStyle\":0},\"priceScaleSelectionStrategyName\":\"auto\"},\"sessions\":{\"properties\":{\"graphics\":{\"backgrounds\":{\"outOfSession\":{\"color\":\"#2962FF\",\"transparency\":92,\"visible\":false},\"preMarket\":{\"color\":\"#FF9800\",\"transparency\":92,\"visible\":false},\"postMarket\":{\"color\":\"#2962FF\",\"transparency\":92,\"visible\":false}},\"vertlines\":{\"sessBreaks\":{\"color\":\"#4985e7\",\"style\":2,\"visible\":false,\"width\":1}}}}},\"version\":3,\"timezone\":\"Europe/Moscow\",\"shouldBeSavedEvenIfHidden\":false,\"lineToolsGroups\":{\"groups\":[]},\"chartId\":\"1\"}],\"symbolLock\":0,\"intervalLock\":0,\"trackTimeLock\":0,\"dateRangeLock\":0,\"crosshairLock\":1,\"layoutsSizes\":{\"s\":[{\"percent\":1}]}}","key":"widgetContentProps_chartState_savedData"},{"value":"NTBVTFC:NTBVLB:ED589935005EEB8F","key":"widgetContentProps_chartState_savedInstrument"},{"value":"null","key":"widgetContentProps_indicativeData"},{"value":"true","key":"widgetContentProps_isMoexChartShow"},{"value":"true","key":"widgetContentProps_isNeedToClean"},{"value":"{\"settings\":{\"timeframe\":\"1d\",\"seriesSelected\":\"Line\",\"symbol\":\"NTBVTFC:NTBVLB:ED589935005EEB8F\",\"timeFormat\":\"24h\",\"dateFormat\":\"09.29.1997 00:00:00\",\"interval\":\"1Y\"},\"charts\":[{\"panes\":[{\"isMain\":true,\"id\":0,\"indicators\":[{\"id\":\"vol-9861c2a8-ab5a-42f5-a27e-f643bd522034\",\"name\":\"Объём\",\"zIndex\":0,\"hidden\":false,\"paneId\":0,\"indicatorType\":\"vol\"}],\"drawings\":[]}],\"chartSeriesType\":\"Line\",\"timeframe\":\"1d\",\"symbol\":\"NTBVTFC:NTBVLB:ED589935005EEB8F\"}]}","key":"widgetContentProps_moexChartState_savedData"},{"value":"1d","key":"widgetContentProps_moexChartState_tf"},{"value":"false","key":"withoutSend"},{"value":"1548","key":"workspaceId"},{"value":"44","key":"zIndex"}],"isRemoval":null},{"id":null,"widgetId":9175,"properties":[{"value":"null","key":"beforeExpandParams"},{"value":"NTBVTFC:NTBVLB:194DCD0179EDF1A0","key":"externalProperties_0_instrId"},{"value":"false","key":"inFocus"},{"value":"false","key":"isExpand"},{"value":"9174","key":"master"},{"value":"9174","key":"masters_0"},{"value":"true","key":"moved"},{"value":"","key":"name"},{"value":"0%","key":"position_maxX"},{"value":"0%","key":"position_maxY"},{"value":"0%","key":"position_widgetNumber"},{"value":"48.91228867026995%","key":"position_x"},{"value":"53.479496268338934%","key":"position_y"},{"value":"100","key":"sizeLimits_minHeight"},{"value":"100","key":"sizeLimits_minWidth"},{"value":"62.9360509473224%","key":"sizes_height"},{"value":"50.37139915320359%","key":"sizes_width"},{"value":"graphic","key":"type"},{"value":"1","key":"widgetContentProps_chartState_interval_asString"},{"value":"{\"layout\":\"s\",\"charts\":[{\"panes\":[{\"sources\":[{\"type\":\"MainSeries\",\"id\":\"_seriesId\",\"zorder\":0,\"haStyle\":{\"studyId\":\"BarSetHeikenAshi@tv-basicstudies-60\"},\"renkoStyle\":{\"studyId\":\"BarSetRenko@tv-prostudies-64\"},\"pbStyle\":{\"studyId\":\"BarSetPriceBreak@tv-prostudies-34\"},\"kagiStyle\":{\"studyId\":\"BarSetKagi@tv-prostudies-34\"},\"pnfStyle\":{\"studyId\":\"BarSetPnF@tv-prostudies-34\"},\"rangeStyle\":{\"studyId\":\"BarSetRange@tv-basicstudies-72\"},\"formattingDeps\":{\"format\":\"volume\",\"pricescale\":8,\"minmov\":0.1},\"state\":{\"style\":1,\"esdShowDividends\":true,\"esdShowSplits\":true,\"esdShowEarnings\":true,\"esdShowBreaks\":false,\"esdFlagSize\":2,\"showContinuousContractSwitches\":true,\"showContinuousContractSwitchesBreaks\":false,\"showFuturesContractExpiration\":true,\"showLastNews\":true,\"showCountdown\":false,\"bidAsk\":{\"visible\":false,\"lineStyle\":1,\"lineWidth\":1,\"bidLineColor\":\"#2962FF\",\"askLineColor\":\"#F7525F\"},\"prePostMarket\":{\"visible\":true,\"lineStyle\":1,\"lineWidth\":1,\"preMarketColor\":\"#FB8C00\",\"postMarketColor\":\"#2962FF\"},\"highLowAvgPrice\":{\"highLowPriceLinesVisible\":false,\"highLowPriceLabelsVisible\":false,\"averageClosePriceLineVisible\":false,\"averageClosePriceLabelVisible\":false,\"highLowPriceLinesColor\":\"\",\"highLowPriceLinesWidth\":1,\"averagePriceLineColor\":\"\",\"averagePriceLineWidth\":1},\"visible\":true,\"showPriceLine\":true,\"priceLineWidth\":1,\"priceLineColor\":\"\",\"baseLineColor\":\"#5d606b\",\"showPrevClosePriceLine\":false,\"prevClosePriceLineWidth\":1,\"prevClosePriceLineColor\":\"#555555\",\"minTick\":\"default\",\"dividendsAdjustment\":{},\"backAdjustment\":false,\"settlementAsClose\":true,\"sessionId\":\"regular\",\"sessVis\":false,\"statusViewStyle\":{\"fontSize\":16,\"showExchange\":true,\"showInterval\":true,\"symbolTextSource\":\"description\"},\"candleStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"drawWick\":true,\"drawBorder\":true,\"borderColor\":\"#378658\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"wickColor\":\"#B5B5B8\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"barColorsOnPrevClose\":false,\"drawBody\":true},\"hollowCandleStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"drawWick\":true,\"drawBorder\":true,\"borderColor\":\"#378658\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"wickColor\":\"#B5B5B8\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"drawBody\":true},\"haStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"drawWick\":true,\"drawBorder\":true,\"borderColor\":\"#378658\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"wickColor\":\"#B5B5B8\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"showRealLastPrice\":false,\"barColorsOnPrevClose\":false,\"inputs\":{},\"inputInfo\":{},\"drawBody\":true},\"barStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"barColorsOnPrevClose\":false,\"dontDrawOpen\":false,\"thinBars\":true},\"hiloStyle\":{\"color\":\"#2962FF\",\"showBorders\":true,\"borderColor\":\"#2962FF\",\"showLabels\":true,\"labelColor\":\"#2962FF\",\"drawBody\":true},\"columnStyle\":{\"upColor\":\"rgba(8, 153, 129, 0.5)\",\"downColor\":\"rgba(242, 54, 69, 0.5)\",\"barColorsOnPrevClose\":true,\"priceSource\":\"close\"},\"lineStyle\":{\"color\":\"#576DDB\",\"linestyle\":0,\"linewidth\":2,\"priceSource\":\"close\",\"styleType\":2},\"areaStyle\":{\"color1\":\"rgba(41, 98, 255, 0.28)\",\"color2\":\"#2962FF\",\"linecolor\":\"#2962FF\",\"linestyle\":0,\"linewidth\":2,\"priceSource\":\"close\",\"transparency\":100},\"renkoStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"borderUpColorProjection\":\"#336854\",\"borderDownColorProjection\":\"#7f323f\",\"wickUpColor\":\"#089981\",\"wickDownColor\":\"#F23645\",\"inputs\":{\"source\":\"close\",\"sources\":\"Close\",\"boxSize\":3,\"style\":\"ATR\",\"atrLength\":14,\"wicks\":true},\"inputInfo\":{\"source\":{\"name\":\"Source\"},\"sources\":{\"name\":\"Source\"},\"boxSize\":{\"name\":\"Box size\"},\"style\":{\"name\":\"Style\"},\"atrLength\":{\"name\":\"ATR length\"},\"wicks\":{\"name\":\"Wicks\"}}},\"pbStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"borderUpColor\":\"#089981\",\"borderDownColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"borderUpColorProjection\":\"#336854\",\"borderDownColorProjection\":\"#7f323f\",\"inputs\":{\"source\":\"close\",\"lb\":3},\"inputInfo\":{\"source\":{\"name\":\"Source\"},\"lb\":{\"name\":\"Number of line\"}}},\"kagiStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"inputs\":{\"source\":\"close\",\"style\":\"ATR\",\"atrLength\":14,\"reversalAmount\":1},\"inputInfo\":{\"source\":{\"name\":\"Source\"},\"style\":{\"name\":\"Style\"},\"atrLength\":{\"name\":\"ATR length\"},\"reversalAmount\":{\"name\":\"Reversal amount\"}}},\"pnfStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"inputs\":{\"sources\":\"Close\",\"reversalAmount\":3,\"boxSize\":1,\"style\":\"ATR\",\"atrLength\":14,\"oneStepBackBuilding\":false},\"inputInfo\":{\"sources\":{\"name\":\"Source\"},\"boxSize\":{\"name\":\"Box size\"},\"reversalAmount\":{\"name\":\"Reversal amount\"},\"style\":{\"name\":\"Style\"},\"atrLength\":{\"name\":\"ATR length\"},\"oneStepBackBuilding\":{\"name\":\"One step back building\"}}},\"baselineStyle\":{\"baselineColor\":\"#758696\",\"topFillColor1\":\"rgba(8, 153, 129, 0.28)\",\"topFillColor2\":\"rgba(8, 153, 129, 0.05)\",\"bottomFillColor1\":\"rgba(242, 54, 69, 0.05)\",\"bottomFillColor2\":\"rgba(242, 54, 69, 0.28)\",\"topLineColor\":\"#089981\",\"bottomLineColor\":\"#F23645\",\"topLineWidth\":2,\"bottomLineWidth\":2,\"priceSource\":\"close\",\"transparency\":50,\"baseLevelPercentage\":50},\"rangeStyle\":{\"upColor\":\"#089981\",\"downColor\":\"#F23645\",\"thinBars\":true,\"upColorProjection\":\"#336854\",\"downColorProjection\":\"#7f323f\",\"inputs\":{\"range\":10,\"phantomBars\":false},\"inputInfo\":{\"range\":{\"name\":\"Range\"},\"phantomBars\":{\"name\":\"Phantom bars\"}}},\"symbol\":\"NTBVTFC:NTBVLB:194DCD0179EDF1A0\",\"shortName\":\"пшеница, 60000, USD, РФ, Новороссийск - Египет, Египет\",\"timeframe\":\"\",\"onWidget\":false,\"interval\":\"1\",\"unitId\":null,\"currencyId\":null,\"showSessions\":false,\"priceAxisProperties\":{\"autoScale\":true,\"autoScaleDisabled\":false,\"lockScale\":false,\"percentage\":false,\"percentageDisabled\":false,\"log\":false,\"logDisabled\":false,\"alignLabels\":true,\"isInverted\":false,\"indexedTo100\":false}}},{\"type\":\"study_Volume\",\"id\":\"Sm4ORL\",\"state\":{\"styles\":{\"vol\":{\"display\":15,\"linestyle\":0,\"linewidth\":1,\"plottype\":5,\"trackPrice\":false,\"transparency\":50,\"color\":\"#000080\",\"histogramBase\":0,\"joinPoints\":false,\"title\":\"Volume\"},\"vol_ma\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196f3\",\"histogramBase\":0,\"joinPoints\":false,\"title\":\"Volume MA\"},\"smoothedMA\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196f3\",\"histogramBase\":0,\"joinPoints\":false,\"title\":\"Smoothed MA\"}},\"palettes\":{\"volumePalette\":{\"colors\":{\"0\":{\"color\":\"#F7525F\",\"width\":1,\"style\":0,\"name\":\"Falling\"},\"1\":{\"color\":\"#22AB94\",\"width\":1,\"style\":0,\"name\":\"Growing\"}}}},\"inputs\":{\"showMA\":false,\"length\":20,\"col_prev_close\":false,\"symbol\":\"\",\"smoothingLine\":\"SMA\",\"smoothingLength\":9},\"precision\":\"default\",\"bands\":{},\"area\":{},\"graphics\":{},\"plots\":{\"0\":{\"id\":\"vol\",\"type\":\"line\"},\"1\":{\"id\":\"volumePalette\",\"palette\":\"volumePalette\",\"target\":\"vol\",\"type\":\"colorer\"},\"2\":{\"id\":\"vol_ma\",\"type\":\"line\"},\"3\":{\"id\":\"smoothedMA\",\"type\":\"line\"}},\"ohlcPlots\":{},\"filledAreasStyle\":{},\"filledAreas\":{},\"visible\":true,\"showLegendValues\":true,\"showLabelsOnPriceScale\":true,\"parentSources\":{},\"_metainfoVersion\":53,\"isTVScript\":false,\"isTVScriptStub\":false,\"is_hidden_study\":false,\"description\":\"Volume\",\"shortDescription\":\"Volume\",\"is_price_study\":false,\"id\":\"Volume@tv-basicstudies\",\"format\":{\"type\":\"volume\"},\"description_localized\":\"Объём\",\"shortId\":\"Volume\",\"packageId\":\"tv-basicstudies\",\"version\":\"1\",\"fullId\":\"Volume@tv-basicstudies-1\",\"productId\":\"tv-basicstudies\",\"_serverMetaInfoVersion\":52,\"intervalsVisibilities\":{\"ticks\":true,\"seconds\":true,\"secondsFrom\":1,\"secondsTo\":59,\"minutes\":true,\"minutesFrom\":1,\"minutesTo\":59,\"hours\":true,\"hoursFrom\":1,\"hoursTo\":24,\"days\":true,\"daysFrom\":1,\"daysTo\":366,\"weeks\":true,\"weeksFrom\":1,\"weeksTo\":52,\"months\":true,\"monthsFrom\":1,\"monthsTo\":12,\"ranges\":true}},\"zorder\":-10000,\"ownFirstValue\":null,\"metaInfo\":{\"palettes\":{\"volumePalette\":{\"colors\":{\"0\":{\"name\":\"Falling\"},\"1\":{\"name\":\"Growing\"}}}},\"inputs\":[{\"id\":\"symbol\",\"name\":\"Other Symbol\",\"defval\":\"\",\"type\":\"symbol\",\"optional\":true,\"isHidden\":false},{\"id\":\"showMA\",\"name\":\"show MA\",\"defval\":false,\"type\":\"bool\",\"isHidden\":true},{\"id\":\"length\",\"name\":\"MA Length\",\"defval\":20,\"type\":\"integer\",\"min\":1,\"max\":2000},{\"defval\":false,\"id\":\"col_prev_close\",\"name\":\"Color based on previous close\",\"type\":\"bool\"},{\"id\":\"smoothingLine\",\"name\":\"Smoothing Line\",\"defval\":\"SMA\",\"type\":\"text\",\"options\":[\"SMA\",\"EMA\",\"WMA\"]},{\"id\":\"smoothingLength\",\"name\":\"Smoothing Length\",\"defval\":9,\"type\":\"integer\",\"min\":1,\"max\":10000}],\"plots\":[{\"id\":\"vol\",\"type\":\"line\"},{\"id\":\"volumePalette\",\"palette\":\"volumePalette\",\"target\":\"vol\",\"type\":\"colorer\"},{\"id\":\"vol_ma\",\"type\":\"line\"},{\"id\":\"smoothedMA\",\"type\":\"line\"}],\"graphics\":{},\"defaults\":{\"styles\":{\"vol\":{\"display\":15,\"linestyle\":0,\"linewidth\":1,\"plottype\":5,\"trackPrice\":false,\"transparency\":50,\"color\":\"#000080\"},\"vol_ma\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196F3\"},\"smoothedMA\":{\"display\":0,\"linestyle\":0,\"linewidth\":1,\"plottype\":0,\"trackPrice\":false,\"transparency\":0,\"color\":\"#2196F3\"}},\"palettes\":{\"volumePalette\":{\"colors\":{\"0\":{\"color\":\"#F7525F\",\"width\":1,\"style\":0},\"1\":{\"color\":\"#22AB94\",\"width\":1,\"style\":0}}}},\"inputs\":{\"showMA\":false,\"length\":20,\"col_prev_close\":false,\"symbol\":\"\",\"smoothingLine\":\"SMA\",\"smoothingLength\":9}},\"_metainfoVersion\":53,\"isTVScript\":false,\"isTVScriptStub\":false,\"is_hidden_study\":false,\"styles\":{\"vol\":{\"title\":\"Volume\",\"histogramBase\":0},\"vol_ma\":{\"title\":\"Volume MA\",\"histogramBase\":0},\"smoothedMA\":{\"title\":\"Smoothed MA\",\"histogramBase\":0}},\"description\":\"Volume\",\"shortDescription\":\"Volume\",\"is_price_study\":false,\"id\":\"Volume@tv-basicstudies-1\",\"format\":{\"type\":\"volume\"},\"description_localized\":\"Объём\",\"shortId\":\"Volume\",\"packageId\":\"tv-basicstudies\",\"version\":\"1\",\"fullId\":\"Volume@tv-basicstudies-1\",\"productId\":\"tv-basicstudies\",\"_serverMetaInfoVersion\":52}}],\"mainSourceId\":\"_seriesId\",\"stretchFactor\":2000,\"leftAxisesState\":[],\"rightAxisesState\":[{\"state\":{\"id\":\"56ULIgaTfH0H\",\"m_priceRange\":null,\"m_isAutoScale\":true,\"m_isPercentage\":false,\"m_isIndexedTo100\":false,\"m_isLog\":false,\"m_isLockScale\":false,\"m_isInverted\":false,\"m_height\":530,\"m_topMargin\":0.1,\"m_bottomMargin\":0.08,\"alignLabels\":true,\"logFormula\":{\"logicalOffset\":4,\"coordOffset\":0.0001}},\"sources\":[\"_seriesId\"]}],\"overlayPriceScales\":{\"Sm4ORL\":{\"id\":\"TBOaGwcrfpu6\",\"m_priceRange\":null,\"m_isAutoScale\":true,\"m_isPercentage\":false,\"m_isIndexedTo100\":false,\"m_isLog\":false,\"m_isLockScale\":false,\"m_isInverted\":false,\"m_height\":530,\"m_topMargin\":0.1,\"m_bottomMargin\":0.08,\"alignLabels\":true,\"logFormula\":{\"logicalOffset\":4,\"coordOffset\":0.0001}}},\"priceScaleRatio\":null}],\"timeScale\":{\"m_barSpacing\":6,\"m_rightOffset\":10},\"chartProperties\":{\"paneProperties\":{\"backgroundType\":\"gradient\",\"background\":\"#131722\",\"backgroundGradientStartColor\":\"#181C27\",\"backgroundGradientEndColor\":\"#131722\",\"vertGridProperties\":{\"color\":\"rgba(240, 243, 250, 0.06)\",\"style\":0},\"horzGridProperties\":{\"color\":\"rgba(240, 243, 250, 0.06)\",\"style\":0},\"crossHairProperties\":{\"color\":\"#9598A1\",\"style\":2,\"transparency\":0,\"width\":1},\"topMargin\":10,\"bottomMargin\":8,\"axisProperties\":{\"autoScale\":true,\"autoScaleDisabled\":false,\"lockScale\":false,\"percentage\":false,\"percentageDisabled\":false,\"indexedTo100\":false,\"log\":false,\"logDisabled\":false,\"alignLabels\":true,\"isInverted\":false},\"legendProperties\":{\"showStudyArguments\":true,\"showStudyTitles\":true,\"showStudyValues\":true,\"showSeriesTitle\":false,\"showSeriesOHLC\":true,\"showLegend\":true,\"showBarChange\":true,\"showVolume\":false,\"showBackground\":true,\"backgroundTransparency\":50},\"separatorColor\":\"#2A2E39\"},\"scalesProperties\":{\"backgroundColor\":\"#ffffff\",\"lineColor\":\"rgba(240, 243, 250, 0)\",\"textColor\":\"#B2B5BE\",\"fontSize\":12,\"scaleSeriesOnly\":false,\"showSeriesLastValue\":true,\"seriesLastValueMode\":1,\"showSeriesPrevCloseValue\":false,\"showStudyLastValue\":true,\"showSymbolLabels\":false,\"showStudyPlotLabels\":false,\"showBidAskLabels\":false,\"showPrePostMarketPriceLabel\":true,\"showFundamentalNameLabel\":false,\"showFundamentalLastValue\":true,\"barSpacing\":6,\"axisHighlightColor\":\"rgba(41, 98, 255, 0.25)\",\"axisLineToolLabelBackgroundColorCommon\":\"#2962FF\",\"axisLineToolLabelBackgroundColorActive\":\"#143EB3\",\"showPriceScaleCrosshairLabel\":true,\"showTimeScaleCrosshairLabel\":true,\"crosshairLabelBgColorLight\":\"#131722\",\"crosshairLabelBgColorDark\":\"#363A45\"},\"chartEventsSourceProperties\":{\"visible\":true,\"futureOnly\":true,\"breaks\":{\"color\":\"#555555\",\"visible\":false,\"style\":2,\"width\":1}},\"tradingProperties\":{\"showPositions\":true,\"positionPL\":{\"visibility\":true,\"display\":0},\"bracketsPL\":{\"visibility\":true,\"display\":0},\"showOrders\":true,\"showExecutions\":true,\"showExecutionsLabels\":false,\"showReverse\":true,\"horizontalAlignment\":2,\"extendLeft\":true,\"lineLength\":5,\"lineWidth\":1,\"lineStyle\":0},\"priceScaleSelectionStrategyName\":\"auto\"},\"sessions\":{\"properties\":{\"graphics\":{\"backgrounds\":{\"outOfSession\":{\"color\":\"#2962FF\",\"transparency\":92,\"visible\":false},\"preMarket\":{\"color\":\"#FF9800\",\"transparency\":92,\"visible\":false},\"postMarket\":{\"color\":\"#2962FF\",\"transparency\":92,\"visible\":false}},\"vertlines\":{\"sessBreaks\":{\"color\":\"#4985e7\",\"style\":2,\"visible\":false,\"width\":1}}}}},\"version\":3,\"timezone\":\"Europe/Moscow\",\"shouldBeSavedEvenIfHidden\":false,\"lineToolsGroups\":{\"groups\":[]},\"chartId\":\"1\"}],\"symbolLock\":0,\"intervalLock\":0,\"trackTimeLock\":0,\"dateRangeLock\":0,\"crosshairLock\":1,\"layoutsSizes\":{\"s\":[{\"percent\":1}]}}","key":"widgetContentProps_chartState_savedData"},{"value":"NTBVTFC:NTBVLB:194DCD0179EDF1A0","key":"widgetContentProps_chartState_savedInstrument"},{"value":"null","key":"widgetContentProps_indicativeData"},{"value":"true","key":"widgetContentProps_isMoexChartShow"},{"value":"true","key":"widgetContentProps_isNeedToClean"},{"value":"{\"settings\":{\"timeframe\":\"1d\",\"seriesSelected\":\"Line\",\"symbol\":\"NTBVTFC:NTBVLB:194DCD0179EDF1A0\",\"timeFormat\":\"24h\",\"dateFormat\":\"09.29.1997 00:00:00\",\"interval\":\"1Y\"},\"charts\":[{\"panes\":[{\"isMain\":true,\"id\":0,\"indicators\":[{\"id\":\"vol-916b36d2-5b6e-4e63-9781-77fd64608499\",\"name\":\"Объём\",\"zIndex\":0,\"hidden\":false,\"paneId\":0,\"indicatorType\":\"vol\"}],\"drawings\":[]}],\"chartSeriesType\":\"Line\",\"timeframe\":\"1d\",\"symbol\":\"NTBVTFC:NTBVLB:194DCD0179EDF1A0\"}]}","key":"widgetContentProps_moexChartState_savedData"},{"value":"1d","key":"widgetContentProps_moexChartState_tf"},{"value":"false","key":"withoutSend"},{"value":"1548","key":"workspaceId"},{"value":"45","key":"zIndex"}],"isRemoval":null}]}
\ No newline at end of file
diff --git a/src/_stories_/CorpActionsBlock.stories.tsx b/src/_stories_/CorpActionsBlock.stories.tsx
deleted file mode 100644
index dc73a6c53..000000000
--- a/src/_stories_/CorpActionsBlock.stories.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import { ComponentMeta } from '@storybook/react';
-
-import { ActionsList } from '../widgets/CorpActions/components/ActionsList/ActionsList';
-
-export default {
-  title: 'Widgets/CorpActions/ActionsList',
-  component: ActionsList,
-  argTypes: {
-    backgroundColor: { control: 'color' },
-  },
-} as ComponentMeta<typeof ActionsList>;
diff --git a/src/api/controllers/draftTicketFormController.ts b/src/api/controllers/draftTicketFormController.ts
index 437b0d4d3..619f35eaa 100644
--- a/src/api/controllers/draftTicketFormController.ts
+++ b/src/api/controllers/draftTicketFormController.ts
@@ -13,9 +13,6 @@ export const draftTicketFormController = {
   createTicket: async (data: CreateTicketRequestData, signal?: AbortSignal) =>
     axiosInstanceTSB.post<null>('/api/v1/draftCreate', data, { signal }),
 
-  updateTicket: async (data: CreateTicketRequestData, signal?: AbortSignal, draftId?: number) =>
-    axiosInstanceTSB.patch<null>(`/api/v1/draft/${draftId}`, data, { signal }),
-
   getDraftById: async (draftId: number, signal?: AbortSignal) =>
     axiosInstanceTSB.get<DraftById>(`/api/v1/draft/${draftId}`, { signal }),
 };
diff --git a/src/api/controllers/ticketFormController.ts b/src/api/controllers/ticketFormController.ts
index 543b3f90b..a60773fa3 100644
--- a/src/api/controllers/ticketFormController.ts
+++ b/src/api/controllers/ticketFormController.ts
@@ -38,7 +38,6 @@ export const ticketFormController = {
   getAccountsList: async (signal?: AbortSignal) =>
     axiosInstanceSPFI.get<AccountsList>('/api/v1/accountsList', { signal }),
 
-  /** @deprecated Нигде не используется, в перспективе можно удалить */
   createTicket: async (data: CreateTicketRequestData, signal?: AbortSignal) =>
     axiosInstanceSPFI.post<null>('/api/v1/tickerCreate', data, { signal }),
 
diff --git a/src/api/controllers/tradeJournalController.ts b/src/api/controllers/tradeJournalController.ts
index dc399fde6..2cb4a7be1 100644
--- a/src/api/controllers/tradeJournalController.ts
+++ b/src/api/controllers/tradeJournalController.ts
@@ -1,13 +1,7 @@
 import { AxiosResponse } from 'axios';
 
 import { axiosInstanceTradeJournal } from '@api/axios';
-import {
-  TCreateTicketFromZero,
-  TCreateTicketFromZeroRes,
-  TOptionsResponse,
-  TPatchOfferData,
-  TQuotation,
-} from 'types/TradeJournal';
+import { TOptionsResponse, TPatchOfferData, TQuotation } from 'types/TradeJournal';
 
 export const tradeJournalController = {
   // GET
@@ -25,9 +19,6 @@ export const tradeJournalController = {
   postQuotation(data: TQuotation): Promise<AxiosResponse<{ id: number }>> {
     return axiosInstanceTradeJournal.post('/api/v1/quotation', data);
   },
-  postTicket(data: TCreateTicketFromZero): Promise<AxiosResponse<TCreateTicketFromZeroRes>> {
-    return axiosInstanceTradeJournal.post('/api/v1/ticket', data);
-  },
 
   // PATCH
   patchOffer(body: TPatchOfferData): Promise<AxiosResponse> {
diff --git a/src/api/index.ts b/src/api/index.ts
index adbe046c3..470f3acda 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -12,7 +12,6 @@ import axios, {
   axiosIndicative,
   axiosInstanceFormalization,
   axiosInstanceNews,
-  axiosInstanceNTBAnalytics,
   axiosInstanceNTPro,
   axiosInstanceSPFI,
   axiosInstanceTD,
@@ -171,9 +170,6 @@ const api = {
   getSapfirContracts() {
     return axiosInstanceSPFI.get<Contract[]>('/api/v1/contracts');
   },
-  getNtbAnalyticsContracts() {
-    return axiosInstanceNTBAnalytics.get<Contract[]>('/api/v1/contracts');
-  },
   getFixingsList(): Promise<AxiosResponse<FixingData[]>> {
     return axiosInstanceTD.get('/api/fixings/');
   },
diff --git a/src/api/utils/__tests__/getIsSpfiTrader.test.ts b/src/api/utils/__tests__/getIsSpfiTrader.test.ts
deleted file mode 100644
index 4a4f93593..000000000
--- a/src/api/utils/__tests__/getIsSpfiTrader.test.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { RootState } from '@store/store';
-import { Permissions } from 'types/User';
-
-import { getIsSpfiTrader } from '../getIsSpfiTrader';
-
-describe('getIsSpfiTrader', () => {
-  it('should return false when state is undefined', () => {
-    const result = getIsSpfiTrader(undefined);
-    expect(result).toBe(false);
-  });
-
-  it('should return false when state is undefined (explicit)', () => {
-    const result = getIsSpfiTrader();
-    expect(result).toBe(false);
-  });
-
-  it('should return false when permissions is an empty array', () => {
-    const state = {
-      userSlice: {
-        permissions: [],
-      },
-    } as unknown as RootState;
-    const result = getIsSpfiTrader(state);
-    expect(result).toBe(false);
-  });
-
-  it('should return false when permissions does not include SPFI_USER', () => {
-    const state = {
-      userSlice: {
-        permissions: [Permissions.TRADER, Permissions.CONTRIBUTOR],
-      },
-    } as unknown as RootState;
-    const result = getIsSpfiTrader(state);
-    expect(result).toBe(false);
-  });
-
-  it('should return true when permissions includes SPFI_USER', () => {
-    const state = {
-      userSlice: {
-        permissions: [Permissions.SPFI_USER],
-      },
-    } as unknown as RootState;
-    const result = getIsSpfiTrader(state);
-    expect(result).toBe(true);
-  });
-
-  it('should return true when permissions includes SPFI_USER along with other permissions', () => {
-    const state = {
-      userSlice: {
-        permissions: [Permissions.TRADER, Permissions.SPFI_USER, Permissions.CONTRIBUTOR],
-      },
-    } as unknown as RootState;
-    const result = getIsSpfiTrader(state);
-    expect(result).toBe(true);
-  });
-
-  it('should return false when permissions includes only SPFI_BROCKER but not SPFI_USER', () => {
-    const state = {
-      userSlice: {
-        permissions: [Permissions.SPFI_BROCKER],
-      },
-    } as unknown as RootState;
-    const result = getIsSpfiTrader(state);
-    expect(result).toBe(false);
-  });
-
-  it('should return true when SPFI_USER is the first permission in the array', () => {
-    const state = {
-      userSlice: {
-        permissions: [Permissions.SPFI_USER, Permissions.TRADER],
-      },
-    } as unknown as RootState;
-    const result = getIsSpfiTrader(state);
-    expect(result).toBe(true);
-  });
-
-  it('should return true when SPFI_USER is the last permission in the array', () => {
-    const state = {
-      userSlice: {
-        permissions: [Permissions.TRADER, Permissions.CONTRIBUTOR, Permissions.SPFI_USER],
-      },
-    } as unknown as RootState;
-    const result = getIsSpfiTrader(state);
-    expect(result).toBe(true);
-  });
-});
diff --git a/src/api/utils/getIsSpfiTrader.ts b/src/api/utils/getIsSpfiTrader.ts
deleted file mode 100644
index 27efebcbc..000000000
--- a/src/api/utils/getIsSpfiTrader.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { RootState } from '@store/store';
-import { Permissions } from 'types/User';
-
-export const getIsSpfiTrader = (state?: RootState) => !!state?.userSlice.permissions.includes(Permissions.SPFI_USER);
diff --git a/src/api/websokets/classes/TradeFunctionalityStompClient/quotationStompClient.ts b/src/api/websokets/classes/TradeFunctionalityStompClient/quotationStompClient.ts
index ef6a073ee..f4b465217 100644
--- a/src/api/websokets/classes/TradeFunctionalityStompClient/quotationStompClient.ts
+++ b/src/api/websokets/classes/TradeFunctionalityStompClient/quotationStompClient.ts
@@ -1,5 +1,3 @@
-// eslint-disable-next-line eslint-comments/disable-enable-pair -- Обработка исключения
-/* eslint-disable no-console -- Обработка исключения */
 import { ActivationState, type StompSubscription } from '@stomp/stompjs';
 
 import { buildWSUrl } from '@api/websokets';
@@ -17,7 +15,7 @@ class WSQuotationStompClient extends TerminalStompClient {
 
   private countOfSubscription = 0;
 
-  private subscribersForQuotation: Set<TSubscriberCb> = new Set();
+  private subscribers: Set<TSubscriberCb> = new Set();
 
   constructor() {
     super({});
@@ -34,26 +32,6 @@ class WSQuotationStompClient extends TerminalStompClient {
 
   protected activation: Promise<unknown> | null = null;
 
-  private subscribeForQuotation = () => {
-    try {
-      this.quotationId = this.stomp.subscribe('/user/queue/quotation', (msg) => {
-        try {
-          if (msg?.body) {
-            const data = JSON.parse(msg?.body);
-
-            this.subscribersForQuotation.forEach((subscriber) => {
-              subscriber({ data: data.quotation, unreadCount: data.unreadCount });
-            });
-          }
-        } catch (e) {
-          console.log('message from ws parse error: ', e);
-        }
-      });
-    } catch (e) {
-      console.log('subscribe /user/queue/quotation error: ', e);
-    }
-  };
-
   setupStompConnection() {
     this.stomp.beforeConnect = () => {
       this.stomp.brokerURL = buildWSUrl('/otc/ws-endpoint');
@@ -62,8 +40,6 @@ class WSQuotationStompClient extends TerminalStompClient {
     this.stomp.onConnect = () => {
       this.state = ActivationState.ACTIVE;
       this.callStateListeners();
-
-      this.subscribeForQuotation();
     };
 
     this.stomp.onDisconnect = () => {
@@ -79,8 +55,6 @@ class WSQuotationStompClient extends TerminalStompClient {
           this.state = ActivationState.ACTIVE;
           this.callStateListeners();
 
-          this.subscribeForQuotation();
-
           resolve(null);
         };
 
@@ -122,10 +96,28 @@ class WSQuotationStompClient extends TerminalStompClient {
       throw new Error();
     }
 
+    this.subscribers.add(cb);
+
     if (this.quotationId) {
-      this.subscribersForQuotation.add(cb);
       this.countOfSubscription += 1;
+
+      return;
     }
+
+    this.quotationId = this.stomp.subscribe('/user/queue/quotation', (msg) => {
+      try {
+        if (msg?.body) {
+          const data = JSON.parse(msg?.body);
+
+          this.subscribers.forEach((subscriber) => {
+            subscriber({ data: data.quotation, unreadCount: data.unreadCount });
+          });
+        }
+      } catch (e) {
+        // eslint-disable-next-line no-console -- Обработка исключения
+        console.log(e);
+      }
+    });
   }
 
   public unsubscribeFromQuotation(cb: TSubscriberCb | undefined) {
@@ -138,12 +130,12 @@ class WSQuotationStompClient extends TerminalStompClient {
 
         this.countOfSubscription -= 1;
       }
-    } else if (this.countOfSubscription > 0) {
+    } else {
       this.countOfSubscription -= 1;
     }
 
     if (cb) {
-      this.subscribersForQuotation.delete(cb);
+      this.subscribers.delete(cb);
     }
   }
 
diff --git a/src/api/websokets/classes/WSMXTStompClient/__mocks__/index.ts b/src/api/websokets/classes/WSMXTStompClient/__mocks__/index.ts
index fc79a1875..c7d0de165 100644
--- a/src/api/websokets/classes/WSMXTStompClient/__mocks__/index.ts
+++ b/src/api/websokets/classes/WSMXTStompClient/__mocks__/index.ts
@@ -1,53 +1,15 @@
-import { ActivationState, type IMessage, type messageCallbackType, type StompHeaders } from '@stomp/stompjs';
+import { ActivationState, IMessage, messageCallbackType, StompHeaders } from '@stomp/stompjs';
 
-import WSMXTStompClient, { type MxtMessageCallback, type MxtObject } from '../client';
+import { MxtMeta } from '@api/websokets/classes/WSMXTStompClient';
+
+import WSMXTStompClient from '../client';
 
 export class MockMxtStompClient extends WSMXTStompClient {
   subscriptions = new Map<string, messageCallbackType[]>();
 
-  activate(): Promise<void> {
+  activate(params?: { connectHeaders?: StompHeaders }): Promise<unknown> {
     this.onConnect();
-    return Promise.resolve();
-  }
-
-  subscription<T extends MxtObject>(
-    destination: string,
-    callback: MxtMessageCallback<T>,
-    headers?: StompHeaders,
-  ): () => void;
-
-  subscription<T extends MxtObject>(
-    key: string,
-    destination: string,
-    callback: MxtMessageCallback<T>,
-    headers?: StompHeaders,
-  ): () => void;
-
-  subscription<T extends MxtObject>(
-    keyOrDestination: string,
-    destinationOrCallback: string | MxtMessageCallback<T>,
-    callbackOrHeaders?: MxtMessageCallback<T> | StompHeaders,
-  ) {
-    const destination = typeof destinationOrCallback === 'string' ? destinationOrCallback : keyOrDestination;
-    const cb = typeof destinationOrCallback === 'string' ? callbackOrHeaders : destinationOrCallback;
-
-    if (typeof cb !== 'function') {
-      return () => undefined;
-    }
-
-    const wrappedCallback: messageCallbackType = (message) => {
-      cb(JSON.parse(message.body));
-    };
-
-    if (this.subscriptions.has(destination)) {
-      this.subscriptions.get(destination)?.push(wrappedCallback);
-    } else {
-      this.subscriptions.set(destination, [wrappedCallback]);
-    }
-
-    return () => {
-      this.unsubscribe(destination);
-    };
+    return Promise.resolve(params);
   }
 
   subscribeByKey(params: { key: string; destination: string; cb: messageCallbackType; headers?: StompHeaders }) {
diff --git a/src/api/websokets/classes/WSMXTStompClient/client.ts b/src/api/websokets/classes/WSMXTStompClient/client.ts
index de2cb01b0..f7fb8697b 100644
--- a/src/api/websokets/classes/WSMXTStompClient/client.ts
+++ b/src/api/websokets/classes/WSMXTStompClient/client.ts
@@ -4,19 +4,17 @@ import { v4 as uuidv4 } from 'uuid';
 
 import { prepareWSUrl } from '@api/websokets/utils/prepareWSUrl';
 
+import { MxtDataKey } from '@widgets/DepositCcpTables/const';
+
 import TerminalStompClient from '../TerminalStompClient';
 
-import type { MxtEnumMeta, MxtMeta, MxtMetaResponse, MxtObjectMeta, MxtStompMessage, MxtViewMeta } from './types';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
+import { MxtMetaResponse } from './types';
+
+import type { MxtEnumMeta, MxtMeta, MxtStompMessage, MxtViewMeta } from './types';
 
 type StateListeners = (state: ActivationState) => void;
 
 const SESSION_META = 'session.meta';
-const META_REQUEST_TIMEOUT_MS = 15000;
-
-const noop = () => {
-  /** */
-};
 
 export interface MxtObject {
   id: number;
@@ -24,87 +22,10 @@ export interface MxtObject {
   [key: string]: unknown;
 }
 
-export type MxtMessageCallback<T extends MxtObject> = (message: MxtStompMessage<T>) => void;
-
-const mapFieldsByCode = <T extends { code: string }>(fields: T[]) =>
-  Object.fromEntries(fields.map((field) => [field.code, field]));
-
-const mapEnumsMeta = (enums: MxtMetaResponse['enums']): MxtMeta['enums'] =>
-  Object.fromEntries(
-    Object.entries(enums).map(([key, enumMeta]) => [
-      key,
-      <MxtEnumMeta>{
-        ...enumMeta,
-        fields: mapFieldsByCode(enumMeta.fields),
-        values: Object.fromEntries(enumMeta.values.map((value) => [value.id, value])),
-      },
-    ]),
-  );
-
-const mapObjectsMeta = (objects: MxtMetaResponse['objects']): MxtMeta['objects'] =>
-  Object.fromEntries(
-    (<MxtDataKey[]>Object.keys(objects)).flatMap((key) => {
-      const objectMeta = objects[key];
-
-      if (!objectMeta) {
-        return [];
-      }
-
-      const { fields, actions, ...rest } = objectMeta;
-
-      return [
-        [
-          key,
-          <MxtObjectMeta>{
-            ...rest,
-            fields: mapFieldsByCode(fields),
-            actions: actions ? Object.fromEntries(actions.map((action) => [action.name, action])) : undefined,
-          },
-        ],
-      ];
-    }),
-  );
-
-const mapViewsMeta = (views: MxtMetaResponse['views']): MxtMeta['views'] =>
-  Object.fromEntries(
-    (<MxtDataKey[]>Object.keys(views)).flatMap((key) => {
-      const viewMeta = views[key];
-
-      if (!viewMeta) {
-        return [];
-      }
-
-      const { fields } = viewMeta;
-
-      return [
-        [
-          key,
-          <MxtViewMeta>{
-            ...viewMeta,
-            fields: mapFieldsByCode(fields),
-          },
-        ],
-      ];
-    }),
-  );
-
-const parseMetaResponse = (body: string) => {
-  try {
-    return (<{ data: MxtMetaResponse }>JSON.parse(body)).data;
-  } catch {
-    throw new Error('Error parsing meta response data.');
-  }
-};
-
-const normalizeMetaResponse = (data: MxtMetaResponse): MxtMeta => ({
-  ...data,
-  enums: mapEnumsMeta(data.enums),
-  objects: mapObjectsMeta(data.objects),
-  views: mapViewsMeta(data.views),
-});
+type MxtMessageCallback<T extends MxtObject> = (message: MxtStompMessage<T>) => void;
 
 /**
- * Общий STOMP-клиент для MXT-данных и команд.
+ * STOMP-клиент для форм заявок.
  * Поддерживает:
  * - отдельные endpoint'ы
  * - именованные подписки (чтобы не дублировать их повторно);
@@ -122,8 +43,6 @@ class WSMXTStompClient extends TerminalStompClient {
 
   protected subscriptionsByKey = new Map<string, string>();
 
-  private metaRequest: Promise<MxtMeta> | null = null;
-
   constructor(endpointPath: string) {
     super({ brokerURL: endpointPath });
     this.endpointPath = endpointPath;
@@ -133,57 +52,72 @@ class WSMXTStompClient extends TerminalStompClient {
   state = ActivationState.INACTIVE;
 
   get isActive() {
-    return this.stomp.connected;
+    return this.stomp.active;
   }
 
-  protected activation: Promise<void> | null = null;
+  protected activation: Promise<unknown> | null = null;
 
   public requestMeta(): Promise<MxtMeta> {
-    if (this.metaRequest) {
-      return this.metaRequest;
-    }
-
-    const request = this.createMetaRequest().finally(() => {
-      this.metaRequest = null;
-    });
-    this.metaRequest = request;
-
-    return request;
-  }
-
-  private createMetaRequest(): Promise<MxtMeta> {
-    return new Promise<MxtMeta>((resolve, reject) => {
+    return new Promise((resolve, reject) => {
       const receiptId = uuidv4();
-      const timeout = setTimeout(() => {
-        reject(new Error(`MXT meta request timeout: ${META_REQUEST_TIMEOUT_MS}ms`));
-      }, META_REQUEST_TIMEOUT_MS);
-      const rejectWithCleanup = (error: unknown) => {
-        clearTimeout(timeout);
-        reject(error);
-      };
-
       this.stomp.watchForReceipt(receiptId, (frame) => {
-        clearTimeout(timeout);
-
+        let message;
         try {
-          resolve(normalizeMetaResponse(parseMetaResponse(frame.body)));
-        } catch (error) {
-          reject(error);
+          message = <{ data: MxtMetaResponse }>JSON.parse(frame.body);
+        } catch (e) {
+          reject(new Error('Error parsing meta response data.'));
+          return;
         }
-      });
+        const { views, objects, enums } = message.data;
+        const meta = <MxtMeta>{
+          ...message.data,
+          enums: {},
+          views: {},
+          objects: {},
+        };
 
-      try {
-        this.stomp.publish({
-          destination: SESSION_META,
-          skipContentLengthHeader: false,
-          headers: {
-            request: 'query',
-            receipt: receiptId,
-          },
+        Object.keys(enums).forEach((key) => {
+          const { values, fields } = enums[key];
+          meta.enums[key] = <MxtEnumMeta>{
+            ...enums[key],
+            fields: Object.fromEntries(fields.map((v) => [v.code, v])),
+            values: Object.fromEntries(values.map((v) => [v.id, v])),
+          };
         });
-      } catch (error) {
-        rejectWithCleanup(error);
-      }
+
+        (<MxtDataKey[]>Object.keys(objects)).forEach((key) => {
+          const objectMeta = objects[key];
+          if (objectMeta) {
+            const { fields, actions, ...rest } = objectMeta;
+            meta.objects[key] = {
+              ...rest,
+              fields: Object.fromEntries(fields.map((v) => [v.code, v])),
+              actions: actions ? Object.fromEntries(actions.map((v) => [v.name, v])) : undefined,
+            };
+          }
+        });
+
+        (<MxtDataKey[]>Object.keys(views)).forEach((key) => {
+          const viewMeta = views[key];
+          if (viewMeta) {
+            const { fields } = viewMeta;
+            meta.views[key] = <MxtViewMeta>{
+              ...views[key],
+              fields: Object.fromEntries(fields.map((v) => [v.code, v])),
+            };
+          }
+        });
+
+        resolve(meta);
+      });
+      this.stomp.publish({
+        destination: SESSION_META,
+        skipContentLengthHeader: false,
+        headers: {
+          request: 'query',
+          receipt: receiptId,
+        },
+      });
     });
   }
 
@@ -196,12 +130,10 @@ class WSMXTStompClient extends TerminalStompClient {
     this.stomp.onConnect = this.onConnect;
 
     this.stomp.onDisconnect = () => {
-      this.activation = null;
       this.setState(ActivationState.INACTIVE);
     };
 
     this.stomp.onStompError = () => {
-      this.activation = null;
       this.stomp.deactivate().then(() => this.stomp.activate());
     };
   }
@@ -215,8 +147,8 @@ class WSMXTStompClient extends TerminalStompClient {
     return (message: IMessage) => {
       try {
         cb(<MxtStompMessage<T>>JSON.parse(message.body));
-      } catch {
-        /** */
+      } catch (e) {
+        console.error('Ошибка парсинга сообщения', e);
       }
     };
   }
@@ -225,16 +157,11 @@ class WSMXTStompClient extends TerminalStompClient {
     if (params?.connectHeaders) {
       this.connectHeaders = params.connectHeaders;
     }
-
-    if (this.stomp.connected) {
-      return Promise.resolve();
-    }
-
     if (!this.activation) {
       this.activation = new Promise((resolve) => {
         this.stomp.onConnect = () => {
           this.onConnect();
-          resolve();
+          resolve(null);
         };
         this.stomp.activate();
       });
@@ -262,59 +189,25 @@ class WSMXTStompClient extends TerminalStompClient {
   }
 
   /**
-   * Создает одну snapshot-подписку для указанного объекта.
+   * Подписывает обработчик на destination.
+   * Если подписка с данным key уже есть, сначала удаляет старую.
    */
-  subscription<T extends MxtObject>(
-    destination: string,
-    callback: MxtMessageCallback<T>,
-    headers?: StompHeaders,
-  ): () => void;
-
-  subscription<T extends MxtObject>(
-    key: string,
-    destination: string,
-    callback: MxtMessageCallback<T>,
-    headers?: StompHeaders,
-  ): () => void;
-
-  subscription<T extends MxtObject>(
-    keyOrDestination: string,
-    destinationOrCallback: string | MxtMessageCallback<T>,
-    callbackOrHeaders?: MxtMessageCallback<T> | StompHeaders,
-    headers?: StompHeaders,
-  ) {
-    const hasExplicitKey = typeof destinationOrCallback === 'string';
-    const key = keyOrDestination;
-    const destination = hasExplicitKey ? destinationOrCallback : keyOrDestination;
-    const callback = hasExplicitKey ? callbackOrHeaders : destinationOrCallback;
-    const subscriptionHeaders = hasExplicitKey ? headers : callbackOrHeaders;
-    const previous = this.subscriptionsByKey.get(key);
+  subscription<T extends MxtObject>(destination: string, callback: MxtMessageCallback<T>, headers?: StompHeaders) {
+    const previous = this.subscriptionsByKey.get(destination);
     if (previous) {
-      return noop;
-    }
-
-    if (typeof callback !== 'function') {
-      return noop;
+      return;
     }
 
     const subscriptionId = this.subscribe({
       destination,
       cb: WSMXTStompClient.wrapCallback(callback),
       headers: {
-        ...(subscriptionHeaders ?? {}),
+        ...headers,
         'send-snapshot': 'true',
       },
     });
-    this.subscriptionsByKey.set(key, subscriptionId);
-
-    return () => {
-      if (this.subscriptionsByKey.get(key) !== subscriptionId) {
-        return;
-      }
-
-      this.unsubscribe(subscriptionId);
-      this.subscriptionsByKey.delete(key);
-    };
+    this.subscriptionsByKey.set(destination, subscriptionId);
+    return subscriptionId;
   }
 
   /**
@@ -333,10 +226,6 @@ class WSMXTStompClient extends TerminalStompClient {
     this.subscriptionsByKey.set(key, subscriptionId);
 
     return () => {
-      if (this.subscriptionsByKey.get(key) !== subscriptionId) {
-        return;
-      }
-
       this.unsubscribe(subscriptionId);
       this.subscriptionsByKey.delete(key);
     };
@@ -375,11 +264,11 @@ export const wsMXTStompClient = new WSMXTStompClient('/session/tr/cmp/cmp_1f');
 /**
  * STOMP mxt
  */
-export const wsOrderFormsMxtStompClient = new WSMXTStompClient('/session/tr/mxt/');
+const wsOrderFormsMxtStompClient = new WSMXTStompClient('/session/tr/mxt/');
 
 /**
  * STOMP для аналитики mxt
  */
-export const wsOrderFormsMxtAnalyticsStompClient = new WSMXTStompClient('/session/tr/cmp_analytics/mxt-analytics');
+const wsOrderFormsMxtAnalyticsStompClient = new WSMXTStompClient('/session/tr/cmp_analytics/mxt-analytics');
 
 export default WSMXTStompClient;
diff --git a/src/api/websokets/classes/WSMXTStompClient/mxt-socket-destinations.md b/src/api/websokets/classes/WSMXTStompClient/mxt-socket-destinations.md
deleted file mode 100644
index 2cacde995..000000000
--- a/src/api/websokets/classes/WSMXTStompClient/mxt-socket-destinations.md
+++ /dev/null
@@ -1,200 +0,0 @@
-# Socket destinations
-## Инструменты, листинги и справочники рынка
-
-| Destination | Что это |
-|---|---|
-| `issueGCC.state` | Финансовые инструменты GCC |
-| `issueCurrency.state` | Валютные инструменты |
-| `issueCurrencyPair.state` | Валютные пары |
-| `issueFuture.state` | Фьючерсные контракты |
-| `issueOption.state` | Опционы |
-| `issueCommodity.state` | Товарные инструменты |
-| `issueComposition.state` | Состав финансовых инструментов |
-| `issueCompositionGCC.state` | Состав GCC-инструментов |
-| `issueMoneyMarketRate.state` | Ставки денежного рынка |
-| `listing.state` | Листинги |
-| `listingMMRepo.state` | Листинги MM Repo |
-| `listingFx.state` | Листинг валютного рынка |
-| `listingDeposit.state` | Листинг депозитов |
-| `listingRfsDv.state` | Листинг RFS DV |
-| `listingRfsOption.state` | Листинг RFS опционов |
-| `listingRfsFuture.state` | Листинг RFS фьючерсов |
-| `listingOption.state` | Листинг опционов |
-| `listingFuture.state` | Листинг фьючерсов |
-| `listingAumm.state` | Листинги AUMM |
-| `settleCode.state` | Коды расчётов по площадкам |
-| `settlementCurrency.state` | Валюта расчёта |
-| `moexSecSettleCode.state` | Коды расчётов по инструменту |
-| `moexSecSettleCodeLoan.state` | Коды расчётов по loan-инструментам |
-| `moexSecSettleCodeMMRepo.state` | Коды расчётов MM Repo |
-| `moexSecSettleCodeDeposit.state` | Коды расчётов для М-Депозитов |
-| `moexSettleCodesFx.state` | Коды расчётов валютного рынка |
-| `moexCurrency.state` | Валюты |
-| `moexBenchmarks.state` | Бенчмарки |
-| `moexTranTypes.state` | Типы переводов |
-
-## Участники, пользователи и доступы
-
-| Destination | Что это |
-|---|---|
-| `party.state` | Участники |
-| `clearingHouse.state` | Клиринговые организации |
-| `exchange.state` | Биржи |
-| `partyRoleSet.state` | Роли участника |
-| `partySymbols.state` | Наименования и коды участников |
-| `counterParty.state` | Контрагенты / коды участников |
-| `marketplace.state` | Торговые площадки |
-| `account.state` | Счета |
-| `accountName.state` | Псевдонимы торгово-клиринговых счетов |
-| `user.state` | Пользователи |
-| `userRoleSet.state` | Наборы ролей пользователя |
-| `userConnect.state` | Активность пользователей в системе |
-| `marketAccess.state` | Доступ к площадкам |
-| `relation.state` | Договоры |
-| `clientCode.state` | Клиентские коды |
-| `clientCodeWhiteList.state` | Разрешённые клиентские коды |
-| `accountWhiteList.state` | Разрешённые ТКС |
-| `chosenClientCodesFx.state` | Связки счёт-клиентские коды для FX |
-| `chosenClientCodesCcp.state` | Связки счёт-клиентские коды для CCP |
-| `chosenClientCodesMetals.state` | Связки счёт-клиентские коды для Metals |
-| `providerContactList.state` | Профили менеджеров поставщиков услуг |
-| `technicalParty.state` | Технические партнёры |
-| `userPrivateKeys.state` | Информация о ключах пользователя |
-
-## Заявки, сделки и исполнения
-
-| Destination | Что это |
-|---|---|
-| `orderMMRepo.state` | Заявки MM Repo |
-| `orderFx.state` | Заявки валютного рынка |
-| `orderFxSwap.state` | Заявки FX Swap |
-| `orderDeposit.state` | Заявки депозитного рынка |
-| `orderPm.state` | Заявки PM |
-| `orderPmSwap.state` | Заявки PM Swap |
-| `orderLoan.state` | Отправленные адресные заявки Loan |
-| `orderDepositRepoLoan.state` | Отправленные адресные заявки Deposit Repo Loan |
-| `orderPreset.state` | Множители для предустановленных объёмов заявки |
-| `executionMMRepo.state` | Предложения / изъятия MM Repo |
-| `executionFx.state` | Сделки валютного рынка |
-| `executionFxSwap.state` | Сделки FX Swap |
-| `executionDeposit.state` | Сделки депозитного рынка |
-| `executionPm.state` | Сделки PM |
-| `executionPmSwap.state` | Сделки PM Swap |
-| `executionLoan.state` | Сделки Loan |
-| `executionDepositRepoLoan.state` | Адресные сделки Deposit Repo Loan |
-
-## MOEX: заявки, сделки, позиции и активы
-
-| Destination | Что это |
-|---|---|
-| `moexSecurities.state` | Инструменты MOEX |
-| `moexSecuritiesFx.state` | Инструменты валютного рынка MOEX |
-| `moexSecuritiesDeposit.state` | Инструменты рынка М-Депозиты |
-| `moexOrders.state` | Заявки на MOEX |
-| `moexOrdersFX.state` | Заявки валютного рынка MOEX |
-| `moexOrdersDeposit.state` | Котировки участников по депозитам |
-| `moexTrades.state` | Сделки MOEX |
-| `moexTradesFX.state` | Сделки валютного рынка MOEX |
-| `moexUsTrades.state` | Сделки к исполнению через НКЦ |
-| `moexNegDeals.state` | Полученные адресные заявки |
-| `moexNegDealsFX.state` | Полученные внесистемные заявки FX |
-| `moexNegDealsDeposit.state` | Полученные адресные заявки М-Депозитов |
-| `moexPositions.state` | Позиции по деньгам |
-| `moexPositionsFX.state` | Позиции по лимитам |
-| `moexPositionsDeposit.state` | Лимиты на контрагентов |
-| `moexAssets.state` | Активы на MOEX |
-| `moexAssetsFx.state` | Активы валютного рынка |
-| `moexRmPosn.state` | Обязательства и требования по деньгам |
-| `moexRmPosnFx.state` | Обязательства и требования по активам |
-| `moexPartDv.state` | Позиции по деньгам DV |
-| `moexPositionDv.state` | Позиции по инструментам DV |
-| `moexSessionDv.state` | Торговые сессии срочного рынка |
-| `moexOrderbookDeposit.state` | Стакан / orderbook депозитного рынка |
-| `moexDeposits.state` | Депозиты на MOEX |
-| `moexDepositsDetl.state` | Календарь депозитов |
-
-## RFS / RFQ / котировки
-
-| Destination | Что это |
-|---|---|
-| `auctionRfsFx.state` | RFS-аукционы FX |
-| `auctionRfsDv.state` | Отправленные RFS-запросы DV |
-| `auctionRfsPm.state` | RFS-аукционы PM |
-| `orderRfsFx.state` | Отправленные котировки RFS FX |
-| `orderRfsDv.state` | Свои заявки RFS DV |
-| `orderRfsPm.state` | Отправленные котировки RFS PM |
-| `executionRfsFx.state` | Сделки RFS FX |
-| `executionRfsDv.state` | Свои сделки RFS DV |
-| `executionRfsPm.state` | Сделки RFS PM |
-| `depthRfsFx.state` | Глубина рынка RFS FX |
-| `depthRfsDv.state` | Глубина рынка RFS DV |
-| `depthRfsPm.state` | Глубина рынка RFS PM |
-| `quotationRfsDv.state` | Свои котировки RFS DV |
-| `quotationMMRepo.state` | Отправленные адресные RFQ-котировки |
-| `quotationDeposit.state` | RFQ-запросы депозитного рынка |
-| `moexQuote.state` | Отправленные квоты на MOEX |
-| `moexQuoteBook.state` | Полученные адресные RFQ-котировки |
-| `moexNegDealQuoteLink.state` | Связь квот и полученных адресных заявок |
-| `moexRejectedQuoteDeposit.state` | Отклонённые квоты рынка М-Депозитов |
-
-## Депозиты, аукционы и лимиты
-
-| Destination | Что это |
-|---|---|
-| `auctionDeposit.state` | Аукционы депозитов |
-| `auctionDepositLimit.state` | Лимиты аукционов |
-| `depositMMRepo.state` | Депозиты |
-| `partnerListDeposit.state` | Списки партнёров участника для депозитов |
-| `moexCpListFirmDeposit.state` | Списки партнёров депозитного рынка |
-| `moexCpListDeposit.state` | Списки партнёров М-Депозитов |
-| `priceNoticeSettings.state` | Настройки уведомлений отслеживания ставок |
-| `orderUserSettings.state` | Параметры контроля заявок Депозиты с ЦК |
-| `orderUserSettingsFx.state` | Параметры контроля заявок валютного рынка |
-
-## Партнёры и контрагенты
-
-| Destination | Что это |
-|---|---|
-| `partnerList.state` | Списки партнёров участника |
-| `moexCpListFirm.state` | Списки партнёров |
-| `moexCpList.state` | Списки партнёров / контрагентов |
-
-## Алго-заявки
-
-| Destination | Что это |
-|---|---|
-| `algoPackage.state` | Алго-пакеты заявок |
-| `algoPackageGCC.state` | Алго-пакеты заявок GCC |
-| `algoPropertySet.state` | Свойства алго-пакетов |
-| `algoPropertySetGCC.state` | Свойства алго-пакетов GCC |
-| `moexAlgoOrdersFX.state` | Полученные алгоритмические заявки FX |
-| `moexAlgoIterationsFX.state` | Полученные итерации алго-заявок FX |
-
-## Переводы и операции
-
-| Destination | Что это |
-|---|---|
-| `statementMMRepo.state` | Переводы MM Repo |
-| `statementFx.state` | Переводы FX |
-| `operationMMRepo.state` | Заявки на переводы MM Repo |
-| `operationFx.state` | Создание заявки перевода на валютном рынке |
-
-## Отчёты, уведомления, новости и настройки
-
-| Destination | Что это |
-|---|---|
-| `confirmReportLoan.state` | Отправленные отчёты Loan |
-| `moexReports.state` | Полученные отчёты |
-| `notice.state` | Сообщения |
-| `alert.state` | Уведомления |
-| `newsReadList.state` | Новости |
-| `noticeMessageSettings.state` | Настройки пользовательских уведомлений |
-| `noticeChannelSettings.state` | Настройки каналов уведомлений |
-| `userNoticeSettings.state` | Настройки подключенных уведомлений пользователя |
-| `userNoticeScheduleSettings.state` | Расписание пользовательских уведомлений |
-| `userSettings.state` | Настройки пользователя |
-| `limitUserSettings.state` | Настройки лимитов / заявок |
-| `comment.state` | Комментарии |
-| `userFeedback.state` | Обращения в поддержку |
-| `fullTextError.state` | Полный текст ошибки |
-| `technicalStatistic.state` | Техническая статистика действий с объектами |
diff --git a/src/api/websokets/classes/WSNTBStompClient/types.ts b/src/api/websokets/classes/WSNTBStompClient/types.ts
index 0276c0105..92b0efbfb 100644
--- a/src/api/websokets/classes/WSNTBStompClient/types.ts
+++ b/src/api/websokets/classes/WSNTBStompClient/types.ts
@@ -1,35 +1,12 @@
 import type { ORDER_DIRECTION } from '@modules/ntb/types';
 
-export type NtbOrderBook = {
+export type NtbOrderBookPrice = {
   /** Направление заявки (buy / sell) */
   buySell: ORDER_DIRECTION;
   /** Цена заявки */
   price: number;
   /** Количество лотов */
   quantity: number;
-  /** Количество ед. изм. */
-  amount: number | null;
-};
-
-export type NtbOrderQueue = {
-  /** Направление заявки (buy / sell) */
-  buySell: ORDER_DIRECTION;
-  /** Цена заявки */
-  price: number;
-  /** Количество лотов */
-  quantity: number;
-  /** Количество ед. изм. */
-  amount: number | null;
-  /** Общее кол-во, лоты */
-  sumQuantity?: number;
-  /** Общее кол-во, ед. изм. */
-  sumAmount?: number;
-  /** Делимость */
-  splittable?: boolean;
-  /** Способ поставки */
-  deliveryType?: string;
-  /** Номер заявки */
-  orderNo?: number;
 };
 
 export type OrderBookEntry = {
diff --git a/src/api/websokets/classes/WSNoTradeChatStompClient/index.ts b/src/api/websokets/classes/WSNoTradeChatStompClient/index.ts
index ff8c155b1..f14e25e2b 100644
--- a/src/api/websokets/classes/WSNoTradeChatStompClient/index.ts
+++ b/src/api/websokets/classes/WSNoTradeChatStompClient/index.ts
@@ -46,8 +46,6 @@ export const handleNoTradeChatMessage = (imessage: IMessage) => {
       NoTradeChatStompMessagesListener.changeLeader(message, 'async-leader-remove' as MessageTypesEnum),
     'async-owner-change': (message: IMessage) =>
       NoTradeChatStompMessagesListener.changeLeader(message, 'async-owner-change' as MessageTypesEnum),
-    'async-leader-confirm': (message: IMessage) =>
-      NoTradeChatStompMessagesListener.changeLeader(message, 'async-leader-confirm' as MessageTypesEnum),
   };
 
   const handler = handlers[command];
diff --git a/src/api/websokets/classes/WSNoTradeChatStompClient/noTradeChatMessagesListener.ts b/src/api/websokets/classes/WSNoTradeChatStompClient/noTradeChatMessagesListener.ts
index 4ba6b8668..9f0ba8ad2 100644
--- a/src/api/websokets/classes/WSNoTradeChatStompClient/noTradeChatMessagesListener.ts
+++ b/src/api/websokets/classes/WSNoTradeChatStompClient/noTradeChatMessagesListener.ts
@@ -21,7 +21,6 @@ import {
   setNoTradeChatMessageHistory,
   setNoTradeChatNewMessagesCount,
   setUpdatedValueInMessage,
-  setUpdatedValuesInChatById,
   updateMembersCounterNoTradeChat,
   updateNoTradeChatUpdatedAt,
   updateParticipantData,
@@ -78,23 +77,6 @@ export class NoTradeChatStompMessagesListener {
 
         const currentUserEmail = getState().userSlice.info?.email;
 
-        const openedChats = Object.values(getState().chatSlice.chatsWidgets);
-        // Если пользователь находится в чате с другим пользователем и нам приходит от него сообщение
-        // Необходимо помечать его прочитанным
-        await Promise.all(
-          openedChats.map(async (chat) => {
-            if (chat.selectedChat?.chatId === chatId) {
-              await noTradeChatController.getChatReadById(chatId);
-              dispatch(
-                setNoTradeChatNewMessagesCount({
-                  chatId,
-                  newMessagesCount: 0,
-                }),
-              );
-            }
-          }),
-        );
-
         const messageAttachments = getMessageAttachments({ attachment, attachments });
 
         const isBell = extraFields.type !== 'invite_request' && extraFields?.typeMessage === TypeMessageEnum.CALL;
@@ -158,6 +140,23 @@ export class NoTradeChatStompMessagesListener {
             });
           }
         }
+
+        const openedChats = Object.values(getState().chatSlice.chatsWidgets);
+        // Если пользователь находится в чате с другим пользователем и нам приходит от него сообщение
+        // Необходимо помечать его прочитанным
+        await Promise.all(
+          openedChats.map(async (chat) => {
+            if (chat.selectedChat?.chatId === chatId) {
+              await noTradeChatController.getChatReadById(chatId);
+              dispatch(
+                setNoTradeChatNewMessagesCount({
+                  chatId,
+                  newMessagesCount: 0,
+                }),
+              );
+            }
+          }),
+        );
       }
     } catch (e) {
       // eslint-disable-next-line no-console -- console.log
@@ -433,29 +432,25 @@ export class NoTradeChatStompMessagesListener {
   }
 
   public static async updateMessageStatus(msg: Message) {
-    try {
-      if (msg.body) {
-        const { msgId, chatId, status } = JSON.parse(msg.body);
-        const lastMessage = getState().chatSlice.noTradeChatLastMessages[chatId];
-        dispatch(
-          setUpdatedValueInMessage({
-            chatId,
-            msgId,
-            updatedData: { status },
-          }),
-        );
-        dispatch(
-          setLastMessageToNoTradeChatById({
-            chatId,
-            message: {
-              ...lastMessage,
-              status,
-            },
-          }),
-        );
-      }
-    } catch (e) {
-      console.error(e);
+    if (msg.body) {
+      const { msgId, chatId, status } = JSON.parse(msg.body);
+      const lastMessage = getState().chatSlice.noTradeChatLastMessages[chatId];
+      dispatch(
+        setUpdatedValueInMessage({
+          chatId,
+          msgId,
+          updatedData: { status },
+        }),
+      );
+      dispatch(
+        setLastMessageToNoTradeChatById({
+          chatId,
+          message: {
+            ...lastMessage,
+            status,
+          },
+        }),
+      );
     }
   }
 
@@ -520,53 +515,31 @@ export class NoTradeChatStompMessagesListener {
           },
         }),
       );
-      dispatch(
-        setUpdatedValuesInChatById({
-          chatId,
-          updatedData: {
-            ownerLogins: [newOwnerLogin],
-          },
-        }),
-      );
-    }
-
-    if (actionType === MessageTypesEnum.ASYNC_LEADER_CONFIRM) {
-      dispatch(
-        updateParticipantData({
-          chatId,
-          login: addedLeaderLogin,
-          data: {
-            role: ChatRoleVariants.ADMIN,
-          },
-        }),
-      );
     }
 
-    if (actionType !== MessageTypesEnum.ASYNC_LEADER_CONFIRM) {
-      dispatch(
-        addMessageToNoTradeChatHistory({
-          chatId: [chatId],
-          message: {
-            type: actionType,
-            text: '',
-            sender: initiatorLogin || oldOwnerLogin,
-            senderFullName: initiatorFullName || oldOwnerFullName,
-            msgId: msgId ?? customMsgId,
-            isNew: true,
-            extraFields: {
-              addedLeaderLogin,
-              removedLeaderLogin,
-              removedLeaderFullName,
-              addedLeaderFullName,
-              newOwnerFullName,
-            },
-            time: dayjs().valueOf(),
-            timestamp: dayjs().valueOf(),
-            status: null,
+    dispatch(
+      addMessageToNoTradeChatHistory({
+        chatId: [chatId],
+        message: {
+          type: actionType,
+          text: '',
+          sender: initiatorLogin || oldOwnerLogin,
+          senderFullName: initiatorFullName || oldOwnerFullName,
+          msgId: msgId ?? customMsgId,
+          isNew: true,
+          extraFields: {
+            addedLeaderLogin,
+            removedLeaderLogin,
+            removedLeaderFullName,
+            addedLeaderFullName,
+            newOwnerFullName,
           },
-        }),
-      );
-    }
+          time: dayjs().valueOf(),
+          timestamp: dayjs().valueOf(),
+          status: null,
+        },
+      }),
+    );
     return this;
   }
 }
diff --git a/src/api/websokets/classes/WSNtbMarketDepthStompClient/index.ts b/src/api/websokets/classes/WSNtbMarketDepthStompClient/index.ts
index a10f04b33..141d50222 100644
--- a/src/api/websokets/classes/WSNtbMarketDepthStompClient/index.ts
+++ b/src/api/websokets/classes/WSNtbMarketDepthStompClient/index.ts
@@ -1,25 +1,20 @@
 import { buildWSUrl } from '@api/websokets';
 import { StompConnection } from '@api/websokets/connections/StompConnection';
 
-import type { NtbOrderBook, NtbOrderQueue, OrderBookEntry } from '../WSNTBStompClient/types';
+import type { NtbOrderBookPrice, OrderBookEntry } from '../WSNTBStompClient/types';
 
 class WSNtbMarketDepthStompClient extends StompConnection {
   constructor() {
     super(buildWSUrl('/ntbagro-for-widgets/market-depth-provider/ws-endpoint'));
   }
 
-  public subscribeToOrderBook = (key: string, callback: (msg: NtbOrderBook[]) => void): VoidFunction => {
+  public subscribeToOrderBook(key: string, callback: (msg: NtbOrderBookPrice[]) => void): VoidFunction {
     const destination = `/topic/orderBook/${key.replaceAll(':', '.')}`;
     return this.subscribe(destination, (msg) => callback(JSON.parse(msg.body)), { cache: true });
-  };
-
-  public subscribeToOrderQueue = (key: string, callback: (msg: NtbOrderQueue[]) => void) => {
-    const destination = `/topic/orderQueue/${key.replaceAll(':', '.')}`;
-    return this.subscribe(destination, (msg) => callback(JSON.parse(msg.body)), { cache: true });
-  };
+  }
 
-  public subscribeToOrderEntries = (key: string, callback: (msg: OrderBookEntry[]) => void): VoidFunction =>
-    this.subscribe(
+  public subscribeToOrderEntries(key: string, callback: (msg: OrderBookEntry[]) => void): VoidFunction {
+    return this.subscribe(
       `/user/queue/orderBookEntries/${key.replaceAll(':', '.')}`,
       (msg) => {
         const data = JSON.parse(msg.body) as OrderBookEntry[] | OrderBookEntry;
@@ -28,6 +23,7 @@ class WSNtbMarketDepthStompClient extends StompConnection {
       },
       { mode: 'isolated' },
     );
+  }
 }
 
 export const wsNtbMarketDepthStompClient = new WSNtbMarketDepthStompClient();
diff --git a/src/api/websokets/classes/WSSpfiDraftsStompClient/index.ts b/src/api/websokets/classes/WSSpfiDraftsStompClient/index.ts
index d00a2f8a7..93f479c3e 100644
--- a/src/api/websokets/classes/WSSpfiDraftsStompClient/index.ts
+++ b/src/api/websokets/classes/WSSpfiDraftsStompClient/index.ts
@@ -3,7 +3,6 @@ import { ActivationState, Client } from '@stomp/stompjs';
 import { buildWSUrl } from '@api/websokets';
 
 import { getDraftsToast } from '@utils/getDraftToast';
-import { CashFlow } from '@widgets/SpfiPrices/types';
 import { SpfiDraft, SpfiDraftStatus } from 'types/spfiDrafts';
 
 import TerminalStompClient from '../TerminalStompClient';
@@ -117,7 +116,7 @@ export class WSSpfiDraftsStompClient extends TerminalStompClient {
     }
   }
 
-  changeStatus({ draftId, orderId, status }: { draftId?: number; orderId?: number; status: SpfiDraftStatus }) {
+  changeStatus({ draftId, orderId, status }: { draftId?: number; orderId: number; status: SpfiDraftStatus }) {
     this.stomp.publish({
       destination: '/user/queue/DRAFTS/changeStatus',
       body: JSON.stringify(draftId ? { draftId, orderId, status } : { orderId, status }),
@@ -131,18 +130,6 @@ export class WSSpfiDraftsStompClient extends TerminalStompClient {
   removeStateListener(listener: StateListeners) {
     this.stateListeners.delete(listener);
   }
-
-  subscribeToCashFlow(cb?: (value: CashFlow[]) => void) {
-    return this.stomp.subscribe('/topic/marketData', (msg) => {
-      try {
-        if (cb && msg?.body) {
-          cb(JSON.parse(msg?.body));
-        }
-      } catch (e) {
-        console.log(e);
-      }
-    });
-  }
 }
 
 export const wsSpfiDraftsStompClient = new WSSpfiDraftsStompClient();
diff --git a/src/api/websokets/classes/WSSpfiPricesStompClient/index.ts b/src/api/websokets/classes/WSSpfiPricesStompClient/index.ts
index 2a73d9c9e..7b834a738 100644
--- a/src/api/websokets/classes/WSSpfiPricesStompClient/index.ts
+++ b/src/api/websokets/classes/WSSpfiPricesStompClient/index.ts
@@ -1,4 +1,5 @@
-import { ActivationState, Client } from '@stomp/stompjs';
+ 
+import { ActivationState } from '@stomp/stompjs';
 
 import { buildWSUrl } from '@api/websokets';
 import { SpfiPricesData } from '@widgets/SpfiPrices/types';
@@ -12,10 +13,6 @@ class WSSpfiPricesStompClient extends TerminalStompClient {
 
   protected stateListeners = new Set<StateListeners>();
 
-  private spfiPricesSubscription: ReturnType<Client['subscribe']> | null = null;
-
-  private spfiPricesCallbacks = new Set<(prices: SpfiPricesData[]) => void>();
-
   constructor() {
     super({});
     this.setupStompConnection();
@@ -29,10 +26,6 @@ class WSSpfiPricesStompClient extends TerminalStompClient {
     this.stomp.onConnect = () => {
       this.state = ActivationState.ACTIVE;
       this.callStateListeners();
-
-      if (this.spfiPricesCallbacks.size > 0 && !this.spfiPricesSubscription) {
-        this.spfiPricesSubscription = this.createSpfiPricesSubscription();
-      }
     };
 
     const onDeactivated = () => {
@@ -48,12 +41,11 @@ class WSSpfiPricesStompClient extends TerminalStompClient {
     this.stateListeners.forEach((listener) => listener(this.state));
   }
 
-  private createSpfiPricesSubscription() {
+  subscribeToSpfiPrices(cb?: (value: SpfiPricesData[]) => void) {
     return this.stomp.subscribe('/topic/spfi-market-data', (msg) => {
       try {
-        if (msg?.body) {
-          const prices = JSON.parse(msg?.body);
-          this.spfiPricesCallbacks.forEach((callback) => callback(prices));
+        if (cb && msg?.body) {
+          cb(JSON.parse(msg?.body));
         }
       } catch (e) {
         console.log(e);
@@ -61,37 +53,6 @@ class WSSpfiPricesStompClient extends TerminalStompClient {
     });
   }
 
-  subscribeToSpfiPrices(cb?: (value: SpfiPricesData[]) => void) {
-    if (!cb) {
-      return undefined;
-    }
-
-    this.spfiPricesCallbacks.add(cb);
-
-    if (this.state === ActivationState.ACTIVE && !this.spfiPricesSubscription) {
-      this.spfiPricesSubscription = this.createSpfiPricesSubscription();
-    }
-
-    return {
-      unsubscribe: () => {
-        this.spfiPricesCallbacks.delete(cb);
-        if (this.spfiPricesCallbacks.size === 0 && this.spfiPricesSubscription) {
-          this.spfiPricesSubscription.unsubscribe();
-          this.spfiPricesSubscription = null;
-        }
-      },
-    };
-  }
-
-  resetSession() {
-    if (this.spfiPricesSubscription) {
-      this.spfiPricesSubscription.unsubscribe();
-      this.spfiPricesSubscription = null;
-    }
-    this.stomp.deactivate();
-    this.stomp.activate();
-  }
-
   addStateListener(listener: StateListeners) {
     this.stateListeners.add(listener);
   }
diff --git a/src/api/websokets/streams/tradeTimePermissionsStream/index.ts b/src/api/websokets/streams/tradeTimePermissionsStream/index.ts
deleted file mode 100644
index b7cb0b53a..000000000
--- a/src/api/websokets/streams/tradeTimePermissionsStream/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { wsNTBStompClient } from '@api/websokets/classes/WSNTBStompClient';
-
-import { StompStream } from '../StompStream';
-
-import type { TradeTimePermissionsMessage } from './types';
-
-export const tradeTimePermissionsStream = new StompStream<TradeTimePermissionsMessage>(
-  wsNTBStompClient,
-  '/topic/trade-time-permissions',
-);
diff --git a/src/api/websokets/streams/tradeTimePermissionsStream/types.ts b/src/api/websokets/streams/tradeTimePermissionsStream/types.ts
deleted file mode 100644
index 41b86a107..000000000
--- a/src/api/websokets/streams/tradeTimePermissionsStream/types.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { StompStream } from '../StompStream';
-import type { TradeTimePermission } from '@modules/ntb/types';
-
-export type TradeTimePermissionsMessage = TradeTimePermission[];
-
-export type TradeTimePermissionsStream = StompStream<TradeTimePermissionsMessage>;
diff --git a/src/api/websokets/systemNotification/__tests__/systemNotificationController_activateRestSPFI.test.ts b/src/api/websokets/systemNotification/__tests__/systemNotificationController_activateRestSPFI.test.ts
index 47d1059e1..980047299 100644
--- a/src/api/websokets/systemNotification/__tests__/systemNotificationController_activateRestSPFI.test.ts
+++ b/src/api/websokets/systemNotification/__tests__/systemNotificationController_activateRestSPFI.test.ts
@@ -5,6 +5,7 @@ import { ResponseStatusCodes } from '@api/models/responseStatusCodes';
 
 import { systemNotificationController } from '../systemNotificationController';
 
+
 jest.mock('@api/index', () => ({
   __esModule: true,
   default: {
@@ -36,47 +37,47 @@ describe('SystemNotificationController', () => {
   it('should send message when SPFI healthcheck returns UP status', async () => {
     // Мокаем успешный ответ с статусом UP
     (api.healthcheckSPFI as jest.Mock).mockResolvedValue({ data: { status: 'UP' } });
-
-    systemNotificationController.activate(true);
-
+    
+    systemNotificationController.activate();
+    
     // Выполняем функцию, которая была установлена через setInterval
     jest.advanceTimersByTime(50000);
-
+    
     // Проверяем, что был вызван healthcheckSPFI
     expect(api.healthcheckSPFI).toHaveBeenCalled();
   });
 
   it('should send service error message when SPFI healthcheck returns SERVICE_UNAVAILABLE', async () => {
     const healthcheckSPFI = api.healthcheckSPFI as jest.Mock;
-
+    
     // Мокаем ошибку с кодом SERVICE_UNAVAILABLE
     const mockError = {
-      response: { status: ResponseStatusCodes.SERVICE_UNAVAILABLE },
+      response: { status: ResponseStatusCodes.SERVICE_UNAVAILABLE }
     } as AxiosError;
     healthcheckSPFI.mockRejectedValue(mockError);
-
+    
     // Вызываем activate, который включает activateRestSPFI
-    systemNotificationController.activate(true);
-
+    systemNotificationController.activate();
+    
     // Выполняем функцию, которая была установлена через setInterval
     jest.advanceTimersByTime(50000);
-
+    
     // Проверяем, что был вызван healthcheckSPFI
     expect(healthcheckSPFI).toHaveBeenCalled();
   });
 
   it('should handle network errors gracefully', async () => {
     const healthcheckSPFI = api.healthcheckSPFI as jest.Mock;
-
+    
     // Мокаем ошибку сети
     healthcheckSPFI.mockRejectedValue(new Error('Network Error'));
-
+    
     // Вызываем activate, который включает activateRestSPFI
-    systemNotificationController.activate(true);
-
+    systemNotificationController.activate();
+    
     // Выполняем функцию, которая была установлена через setInterval
     jest.advanceTimersByTime(50000);
-
+  
     // Проверяем, что был вызван healthcheckSPFI
     expect(healthcheckSPFI).toHaveBeenCalled();
   });
diff --git a/src/api/websokets/systemNotification/systemNotificationController.ts b/src/api/websokets/systemNotification/systemNotificationController.ts
index dbbcdad0a..0cd1b60c8 100644
--- a/src/api/websokets/systemNotification/systemNotificationController.ts
+++ b/src/api/websokets/systemNotification/systemNotificationController.ts
@@ -51,11 +51,8 @@ class SystemNotificationController {
     return this;
   }
 
-  public activate(isSpfiTrader?: boolean) {
-    this.activateRestTB().activateRestTD().activateRestForm().activateConnectionCheck();
-    if (isSpfiTrader) {
-      this.activateRestSPFI();
-    }
+  public activate() {
+    this.activateRestTB().activateRestTD().activateRestSPFI().activateRestForm().activateConnectionCheck();
     return this;
   }
 
diff --git a/src/components/_stories_/CascadeDropdown.stories.tsx b/src/components/CascadeDropdown/CascadeDropdown.stories.tsx
similarity index 95%
rename from src/components/_stories_/CascadeDropdown.stories.tsx
rename to src/components/CascadeDropdown/CascadeDropdown.stories.tsx
index 34fa14052..6be546eaf 100644
--- a/src/components/_stories_/CascadeDropdown.stories.tsx
+++ b/src/components/CascadeDropdown/CascadeDropdown.stories.tsx
@@ -1,9 +1,10 @@
 import React, { useState } from 'react';
 
-import { CascadeDropdown } from '@components/CascadeDropdown';
-import { CascadeDropdownItem } from '@components/CascadeDropdown/types';
 import { Button } from '@uikit/Button';
 
+import { CascadeDropdown } from './CascadeDropdown';
+import { CascadeDropdownItem } from './types';
+
 import type { Meta, StoryObj } from '@storybook/react';
 
 const basicItems: CascadeDropdownItem[] = [
@@ -123,7 +124,7 @@ const StatefulWrapper = (args: React.ComponentProps<typeof CascadeDropdown>) =>
 };
 
 const meta: Meta<typeof CascadeDropdown> = {
-  title: 'Components/CascadeDropdown',
+  title: 'UI-Kit/CascadeDropdown',
   component: CascadeDropdown,
   tags: ['autodocs'],
   argTypes: {
diff --git a/src/components/ChatComponent/components/ChatContextMenu/index.module.scss b/src/components/ChatComponent/components/ChatContextMenu/index.module.scss
index ef429cef6..526609293 100644
--- a/src/components/ChatComponent/components/ChatContextMenu/index.module.scss
+++ b/src/components/ChatComponent/components/ChatContextMenu/index.module.scss
@@ -43,7 +43,7 @@
 
   &-enabled {
     background-color: $background-secondary;
-    color: var(--thm-text-interface-primary-primary);
+    color: $text-b-primary;
 
     &:hover {
       background-color: $states-hover !important;
diff --git a/src/components/ChatComponent/components/Footer/components/TextField/index.tsx b/src/components/ChatComponent/components/Footer/components/TextField/index.tsx
index ec82b18be..36967e08c 100644
--- a/src/components/ChatComponent/components/Footer/components/TextField/index.tsx
+++ b/src/components/ChatComponent/components/Footer/components/TextField/index.tsx
@@ -117,9 +117,9 @@ export const TextField: FC<TextFieldProps> = function (props) {
         <div className={styles.chat_component_textfield_buttons}>
           {sendMessage && (
             <button
-              onPointerDown={(e) => e.preventDefault()}
               disabled={isMessageInputDisable || !canWriteToChat}
               className={styles.chat_component_footer_send}
+              onPointerDown={(e) => e.preventDefault()}
               type="button"
               onClick={onArrowClick}
             >
diff --git a/src/components/ChatComponent/components/Footer/components/Uploader/index.module.scss b/src/components/ChatComponent/components/Footer/components/Uploader/index.module.scss
index 596392d00..d25c16fbe 100644
--- a/src/components/ChatComponent/components/Footer/components/Uploader/index.module.scss
+++ b/src/components/ChatComponent/components/Footer/components/Uploader/index.module.scss
@@ -8,7 +8,7 @@
 
 .uploaders {
   width: 260px;
-  background: $bg-base-dropdown;
+  background: #16161d;
   padding: 8px 0px;
   box-shadow: 0px 4px 14px 0px #000000cc;
 }
@@ -33,18 +33,14 @@
   }
 
   &_title {
-    color: $text-interface-primary-value;
+    color: #c7c7d1;
     font-size: 12px;
     line-height: 16px;
   }
 
-  &_icon {
-    stroke: $text-interface-primary-value;
-  }
-
   &_text {
     font-size: 10px;
     line-height: 14px;
-    color: $text-interface-secondary-label-no-value;
+    color: #8f8fa3;
   }
-}
+}
\ No newline at end of file
diff --git a/src/components/ChatComponent/components/Footer/components/Uploader/index.tsx b/src/components/ChatComponent/components/Footer/components/Uploader/index.tsx
index 14d3d4442..0650a4ac4 100644
--- a/src/components/ChatComponent/components/Footer/components/Uploader/index.tsx
+++ b/src/components/ChatComponent/components/Footer/components/Uploader/index.tsx
@@ -5,10 +5,10 @@ import React, { useState } from 'react';
 import { DOC_FORMATS, DOC_MAX_SIZE, IMG_FORMATS, IMG_MAX_SIZE } from '@components/ChatComponent/const';
 import { IconButton, IconButtonProps } from '@components/IconButton';
 import { AddFileIcon } from '@components/Icons/AddFile';
+import { FileIcon } from '@components/Icons/FileIcon';
+import { ImageIcon } from '@components/Icons/ImageIcon';
 
 import Tooltip from '@uikit/Tooltip';
-import { Icon } from '@uikit/Icon';
-
 import { FileFormat } from '@utils/validateFile';
 
 import styles from './index.module.scss';
@@ -70,10 +70,7 @@ const Uploader: React.FC<UploaderProps> = ({
             showUploadList={false}
           >
             <div className={styles.uploader}>
-              <Icon
-                className={styles.uploader_icon}
-                variant="image"
-              />
+              <ImageIcon style={{ margin: '0 2px 0 1px' }} />
               <div className={styles.uploader_info}>
                 <span className={styles.uploader_title}>Изображение</span>
                 <span className={styles.uploader_text}>
@@ -89,10 +86,7 @@ const Uploader: React.FC<UploaderProps> = ({
             showUploadList={false}
           >
             <div className={styles.uploader}>
-              <Icon
-                className={styles.uploader_icon}
-                variant="file"
-              />
+              <FileIcon />
               <div className={styles.uploader_info}>
                 <span className={styles.uploader_title}>Файл</span>
                 <span className={styles.uploader_text}>
@@ -108,6 +102,7 @@ const Uploader: React.FC<UploaderProps> = ({
         placement="top"
         title="Прикрепить файл"
         overlayInnerStyle={{
+          color: 'white',
           padding: '4px 12px',
           minHeight: '24px',
           minWidth: '139px',
diff --git a/src/components/ChatComponent/components/Footer/hooks/useTextFieldFacade.ts b/src/components/ChatComponent/components/Footer/hooks/useTextFieldFacade.ts
index ec10e146b..631572358 100644
--- a/src/components/ChatComponent/components/Footer/hooks/useTextFieldFacade.ts
+++ b/src/components/ChatComponent/components/Footer/hooks/useTextFieldFacade.ts
@@ -16,6 +16,7 @@ import { useTextAreaHeght } from './useTextAreaHeight';
 
 import type { TextFieldProps } from '../components/TextField';
 import { useDetectKeyboardOpen } from '@hooks/useDetectKeyboardOpen';
+import { isPWA } from '@modules/push/utils';
 
 export function useTextFieldFacade({ sendMessage, isUseAbbr, isNoTradeChat, chatId }: TextFieldProps) {
   const draftMessageChatId = chatId ?? 'unknownChat';
@@ -55,7 +56,7 @@ export function useTextFieldFacade({ sendMessage, isUseAbbr, isNoTradeChat, chat
     }
     updateText('');
     unlockAutoScroll();
-    if (!isMobileView) {
+    if (!isMobileView || !isPWA()) {
       focus({ ignoreForMobile: false });
       return;
     } else {
@@ -63,7 +64,6 @@ export function useTextFieldFacade({ sendMessage, isUseAbbr, isNoTradeChat, chat
         focus({ ignoreForMobile: false });
       }
     }
-
   };
 
   const { onEnterKeyDown } = useKeyboardHandler({
diff --git a/src/components/ChatComponent/components/Header/index.module.scss b/src/components/ChatComponent/components/Header/index.module.scss
index e7f0d6534..d01cfb76b 100644
--- a/src/components/ChatComponent/components/Header/index.module.scss
+++ b/src/components/ChatComponent/components/Header/index.module.scss
@@ -144,7 +144,7 @@
 .workspace-widget-content-header-dropdown-menu {
   overflow-y: auto;
   max-height: 224px;
-  outline: 1px solid $border-base-dropdown;
+  outline: 1px solid #273166;
   display: flex;
   flex-direction: column;
   background-color: $background-secondary;
diff --git a/src/components/ChatComponent/components/Header/index.tsx b/src/components/ChatComponent/components/Header/index.tsx
index 1d2529463..1a03609b6 100644
--- a/src/components/ChatComponent/components/Header/index.tsx
+++ b/src/components/ChatComponent/components/Header/index.tsx
@@ -197,6 +197,7 @@ export const Header: FC<HeaderProps> = function ({
                     dispatch(
                       openCreateTicketModal({
                         widgetId,
+                        pattern: 'NOPATTERN',
                         seller: participantDirectChat?.userLogin,
                       }),
                     );
diff --git a/src/components/ChatComponent/components/Header/logic/modals.ts b/src/components/ChatComponent/components/Header/logic/modals.ts
index f020eba9e..31f0bc5a9 100644
--- a/src/components/ChatComponent/components/Header/logic/modals.ts
+++ b/src/components/ChatComponent/components/Header/logic/modals.ts
@@ -5,7 +5,6 @@ import { useAppSelect } from '@hooks/useAppSelector';
 import { isMobileViewSelector } from '@store/selectors/core';
 import { setPreviousChatId, setSelectedChat } from '@store/slices/chatSlice';
 import { useChatUIConfig } from '@widgets/NoTradeChat/context/ChatUIConfig';
-import { useParticipants } from '@widgets/NoTradeChat/hooks/useParticipants';
 import { selectSelectedChat } from '@widgets/NoTradeChat/selectors';
 import { Participant } from 'types/NoTradeChat';
 
@@ -40,8 +39,8 @@ interface IModalsReturnType {
 export const useModals = ({ widgetId, currentWorkspaceId }: IModals): IModalsReturnType => {
   const dispatch = useDispatch();
   const selectedChat = useAppSelect(selectSelectedChat(widgetId));
+  const userInfo = useAppSelect((state) => state.userSlice.info);
   const isMobileView = useAppSelect(isMobileViewSelector);
-  const { isAdmin, isOwner } = useParticipants({ chatId: selectedChat?.chatId ?? '' });
 
   const uiConfig = useChatUIConfig();
 
@@ -49,7 +48,7 @@ export const useModals = ({ widgetId, currentWorkspaceId }: IModals): IModalsRet
   const [openContextMenu, setOpenContextMenu] = useState(false);
   const [event, setEvent] = useState<MouseEvent | null>(null);
 
-  const isChatAdmin = !!(isAdmin || isOwner);
+  const isChatAdmin = selectedChat?.creatorLogin === userInfo?.email;
 
   const handleShowMoreInfo = (e: MouseEvent) => {
     setEvent(e);
diff --git a/src/components/ChatComponent/components/MessageListNoTrade/components/MessageWrapper/index.tsx b/src/components/ChatComponent/components/MessageListNoTrade/components/MessageWrapper/index.tsx
index efb4c0f40..e5dd6bbd5 100644
--- a/src/components/ChatComponent/components/MessageListNoTrade/components/MessageWrapper/index.tsx
+++ b/src/components/ChatComponent/components/MessageListNoTrade/components/MessageWrapper/index.tsx
@@ -30,6 +30,7 @@ interface MessageWrapperProps extends MessageProps {
 export const MessageWrapper: FC<PropsWithChildren<MessageWrapperProps>> = function ({ children, ...props }) {
   const { message, isRenderFull, isShowTime = true, chatId } = props;
   const { sender, senderFullName, msgId } = message;
+  console.log(message, 'message');
 
   const { formatTime, style } = useMessageFacade(props);
 
diff --git a/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/NoTradeChatSystemMessage/index.tsx b/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/NoTradeChatSystemMessage/index.tsx
index 69323036d..cb6ac9680 100644
--- a/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/NoTradeChatSystemMessage/index.tsx
+++ b/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/NoTradeChatSystemMessage/index.tsx
@@ -2,7 +2,6 @@ import React, { FC } from 'react';
 
 import { MessageTypesEnum, TypeMessageEnum } from 'types/Chats';
 
-import { ownSelfAction } from '../../../utils/ownSelfAction';
 import styles from '../common/styles/index.module.scss';
 
 import type { MessageProps } from '../common/types';
@@ -27,10 +26,6 @@ export const NoTradeChatSystemMessage: FC<MessageProps> = function ({ message, c
   const { extraFields, msgId, sender } = message;
   const { type } = message;
 
-  if (!type) {
-    return null;
-  }
-
   const systemMessages: SystemMessages = {
     [MessageTypesEnum.ASYNC_CHAT_RENAMED]: 'чат переименован на',
     [MessageTypesEnum.ASYNC_CHAT_KICKED]: 'покинул чат',
@@ -38,13 +33,12 @@ export const NoTradeChatSystemMessage: FC<MessageProps> = function ({ message, c
     [MessageTypesEnum.ASYNC_CHAT_INVITED]: 'вступил(a) в чат',
     [MessageTypesEnum.ASYNC_CHAT_INVITE_REJECT]: 'отклонил(a) приглашение',
     [MessageTypesEnum.ASYNC_CHAT_INVITED_BY_LINK]: 'в группу по ссылке-приглашению',
-    [MessageTypesEnum.ASYNC_LEADER_ADD]: 'админом',
-    [MessageTypesEnum.ASYNC_LEADER_REMOVE]: 'админа',
-    [MessageTypesEnum.ASYNC_OWNER_CHANGE]: 'владение',
+    [MessageTypesEnum.ASYNC_LEADER_ADD]: 'назначил/а админом',
+    [MessageTypesEnum.ASYNC_LEADER_REMOVE]: 'удалил/а админов',
+    [MessageTypesEnum.ASYNC_OWNER_CHANGE]: 'передал/а владельца',
   };
 
   const ownName = currentUserEmail === sender;
-  const selfAction = ownSelfAction(ownName, type) ?? '';
 
   return (
     <div
@@ -87,7 +81,7 @@ export const NoTradeChatSystemMessage: FC<MessageProps> = function ({ message, c
             {ownName ? 'Вы' : message.senderFullName || extraFields?.invitedFullName}{' '}
           </span>
           <span className={styles.chart_component_message_system}>
-            {selfAction} {systemMessages[type]}
+            {ownName ? 'вступили' : 'вступил(а)'} {systemMessages[type]}
           </span>
         </span>
       )}
@@ -102,10 +96,7 @@ export const NoTradeChatSystemMessage: FC<MessageProps> = function ({ message, c
         extraFields?.type !== 'invite_request' && (
           <span>
             <span className={styles.chart_component_message_sender}>{ownName ? 'Вы' : message.senderFullName} </span>
-            <span className={styles.chart_component_message_system}>
-              {selfAction}
-              {` ${systemMessages[type]}`}
-            </span>
+            <span className={styles.chart_component_message_system}>{systemMessages[type]}</span>
             <span
               className={styles.chart_component_message_receiver}
             >{`${extraFields?.removedLeaderFullName || extraFields?.addedLeaderFullName} `}</span>
@@ -114,10 +105,7 @@ export const NoTradeChatSystemMessage: FC<MessageProps> = function ({ message, c
       {type === MessageTypesEnum.ASYNC_OWNER_CHANGE && extraFields?.type !== 'invite_request' && (
         <span>
           <span className={styles.chart_component_message_sender}>{ownName ? 'Вы' : message.senderFullName} </span>
-          <span className={styles.chart_component_message_system}>
-            {selfAction}
-            {` ${systemMessages[type]}`}
-          </span>
+          <span className={styles.chart_component_message_system}>{systemMessages[type]}</span>
           <span className={styles.chart_component_message_receiver}>{`${extraFields?.newOwnerFullName ?? ''} `}</span>
         </span>
       )}
diff --git a/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/common/styles/index.module.scss b/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/common/styles/index.module.scss
index b6cec2377..cd721a8c5 100644
--- a/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/common/styles/index.module.scss
+++ b/src/components/ChatComponent/components/MessageListNoTrade/components/Messages/common/styles/index.module.scss
@@ -159,9 +159,8 @@ $blue: #6c7fe0;
 .chart_component_message_member_system_notification {
   display: flex;
   flex-direction: row;
+
   justify-content: center;
-  margin: 0 8px;
-  text-align: center;
 
   &>span {
     margin-top: 10px;
diff --git a/src/components/ChatComponent/components/MessageListNoTrade/utils/ownSelfAction.ts b/src/components/ChatComponent/components/MessageListNoTrade/utils/ownSelfAction.ts
deleted file mode 100644
index 262318ab4..000000000
--- a/src/components/ChatComponent/components/MessageListNoTrade/utils/ownSelfAction.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { MessageTypesEnum } from 'types/Chats';
-
-export const ownSelfAction = (own: boolean, action: MessageTypesEnum) => {
-  const ownSelf: Partial<Record<MessageTypesEnum, string>> = {
-    [MessageTypesEnum.ASYNC_CHAT_INVITED_BY_LINK]: 'вступили',
-    [MessageTypesEnum.ASYNC_LEADER_ADD]: 'назначили',
-    [MessageTypesEnum.ASYNC_LEADER_REMOVE]: 'сняли',
-    [MessageTypesEnum.ASYNC_OWNER_CHANGE]: 'передали',
-  };
-
-  const thirdPerson: Partial<Record<MessageTypesEnum, string>> = {
-    [MessageTypesEnum.ASYNC_CHAT_INVITED_BY_LINK]: 'вступил(a)',
-    [MessageTypesEnum.ASYNC_LEADER_ADD]: 'назначил(a)',
-    [MessageTypesEnum.ASYNC_LEADER_REMOVE]: 'снял(a)',
-    [MessageTypesEnum.ASYNC_OWNER_CHANGE]: 'передал(a)',
-  };
-
-  return own ? ownSelf[action] : thirdPerson[action];
-};
diff --git a/src/components/_stories_/ComplexContextMenu.stories.tsx b/src/components/ComplexContextMenu/component.stories.tsx
similarity index 89%
rename from src/components/_stories_/ComplexContextMenu.stories.tsx
rename to src/components/ComplexContextMenu/component.stories.tsx
index fe574d41b..92d90c9c3 100644
--- a/src/components/_stories_/ComplexContextMenu.stories.tsx
+++ b/src/components/ComplexContextMenu/component.stories.tsx
@@ -1,10 +1,10 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { ComplexContextMenu } from '@components/ComplexContextMenu';
+import { ComplexContextMenu } from '.';
 
 export default {
-  title: 'Components/ComplexContextMenu',
+  title: 'ComplexContextMenu',
   component: ComplexContextMenu,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/ContextMenu/contextMenu.scss b/src/components/ContextMenu/contextMenu.scss
index 5849c8a83..df4256a46 100644
--- a/src/components/ContextMenu/contextMenu.scss
+++ b/src/components/ContextMenu/contextMenu.scss
@@ -9,7 +9,7 @@
 
   width: 260px;
   padding: 8px 0;
-  outline: 1px solid $border-base-dropdown;
+  outline: 1px solid $border-dropdown;
   border-radius: 2px;
   & > * {
     background-color: $bg-base-dropdown !important;
diff --git a/src/components/DesktopModalForm/DesktopModalForm.module.scss b/src/components/DesktopModalForm/DesktopModalForm.module.scss
index d92d33c4a..12fb29dfe 100644
--- a/src/components/DesktopModalForm/DesktopModalForm.module.scss
+++ b/src/components/DesktopModalForm/DesktopModalForm.module.scss
@@ -17,15 +17,8 @@
   }
 }
 
-.modalAutoHeight {
-  height: auto;
-  max-height: calc(100vh - 32px);
-  overflow: hidden;
-}
-
 .header {
   height: 48px;
-  flex: 0 0 48px;
   display: flex;
   justify-content: space-between;
   color: $text-interface-primary-value;
@@ -35,49 +28,16 @@
   box-sizing: border-box;
 }
 
-.headerWithSubTitle {
-  height: 72px;
-  flex: 0 0 72px;
-  padding: 8px;
-  align-items: flex-start;
-  gap: 8px;
-  border-bottom-color: $line-interface-primary-table;
-}
-
-.headerText {
-  flex: 1;
-  min-width: 0;
-}
-
-.headerTextWithSubTitle {
-  padding: 6px 8px 0;
-}
-
-.titleWithSubTitle {
-  font-size: 16px;
-  font-weight: 700;
-  line-height: 24px;
-}
-
-.subTitle {
-  margin-top: 4px;
-  color: $text-interface-secondary-label-no-value;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-.closeBtn {
+.iconBtn {
   color: $surface-icon-basis-active-primary;
 }
 
 .content {
-  flex: 1 1 auto;
+  flex-grow: 1;
   min-height: 0;
 }
 
 .footer {
-  flex: 0 0 auto;
   padding: 16px;
   border-top: 1px solid $border-base-widget-modal;
   display: flex;
diff --git a/src/components/DesktopModalForm/DesktopModalForm.tsx b/src/components/DesktopModalForm/DesktopModalForm.tsx
index 5507d6693..33a7d0bec 100644
--- a/src/components/DesktopModalForm/DesktopModalForm.tsx
+++ b/src/components/DesktopModalForm/DesktopModalForm.tsx
@@ -16,7 +16,6 @@ import { DesktopModalFormProps } from './types';
 
 export const DesktopModalForm: FC<DesktopModalFormProps> = ({
   title,
-  subTitle,
   cancelText,
   confirmText,
   confirmLoading,
@@ -26,35 +25,22 @@ export const DesktopModalForm: FC<DesktopModalFormProps> = ({
   modalClassName,
   contentClassName,
   onClose,
-  autoHeight,
   onConfirm,
   onCancel,
   informerData,
   submitBtnTooltip,
   showIconInConfirmBtn = true,
   draggable,
-  isShowOnlyCloseBtn,
 }) => {
   const isIfarameView = useAppSelect(isIfarameViewSelector);
 
   return (
-    <div
-      className={cn(styles.modal, { [styles.modalAutoHeight]: autoHeight && !isIfarameView }, modalClassName, {
-        [styles.modalIfarme]: isIfarameView,
-      })}
-    >
+    <div className={cn(styles.modal, modalClassName, { [styles.modalIfarme]: isIfarameView })}>
       <ModalDragHandle
-        className={cn(styles.header, { [styles.headerWithSubTitle]: subTitle })}
+        className={styles.header}
         disabled={!draggable}
       >
-        <div className={cn(styles.headerText, { [styles.headerTextWithSubTitle]: subTitle })}>
-          <Typography.Title.M
-            className={cn({ [styles.titleWithSubTitle]: subTitle })}
-            text={title}
-          />
-          {subTitle && <Typography.Text.S className={styles.subTitle}>{subTitle}</Typography.Text.S>}
-        </div>
-
+        <Typography.Title.M text={title} />
         <IconButton
           icon={<CloseIcon />}
           className={cn(styles.closeBtn, MODAL_DRAG_CANCEL_CLASSNAME)}
@@ -63,15 +49,12 @@ export const DesktopModalForm: FC<DesktopModalFormProps> = ({
           size="large"
         />
       </ModalDragHandle>
-
       {informerData && (
         <div className={styles.informer}>
           <Informer {...informerData} />
         </div>
       )}
-
       <div className={cn(styles.content, contentClassName)}>{children}</div>
-
       {footer === undefined ? (
         <div className={styles.footer}>
           <Button
@@ -80,18 +63,16 @@ export const DesktopModalForm: FC<DesktopModalFormProps> = ({
             text={cancelText}
           />
 
-          {!isShowOnlyCloseBtn && (
-            <Button
-              tooltipProps={{ title: submitBtnTooltip }}
-              variant="filled-primary"
-              onClick={onConfirm}
-              iconEnabled="start"
-              Icon={showIconInConfirmBtn ? CheckIcon : undefined}
-              disabled={confirmDisabled}
-              isLoading={confirmLoading}
-              text={confirmText}
-            />
-          )}
+          <Button
+            tooltipProps={{ title: submitBtnTooltip }}
+            variant="filled-primary"
+            onClick={onConfirm}
+            iconEnabled="start"
+            Icon={showIconInConfirmBtn ? CheckIcon : undefined}
+            disabled={confirmDisabled}
+            isLoading={confirmLoading}
+            text={confirmText}
+          />
         </div>
       ) : (
         footer
diff --git a/src/components/DesktopModalForm/types.ts b/src/components/DesktopModalForm/types.ts
index 6ac343937..0dd46ee43 100644
--- a/src/components/DesktopModalForm/types.ts
+++ b/src/components/DesktopModalForm/types.ts
@@ -1,14 +1,12 @@
-import { InformerProps } from '@components/Informer';
+import { PropsWithChildren, ReactNode } from 'react';
 
-import type { PropsWithChildren, ReactNode } from 'react';
+import { InformerProps } from '@components/Informer';
 
 type GeneralFormProps = PropsWithChildren<{
   title: string;
-  subTitle?: ReactNode;
   modalClassName?: string;
   contentClassName?: string;
   onClose: VoidFunction;
-  autoHeight?: boolean;
   draggable?: boolean;
   informerData?: InformerProps;
 }>;
@@ -24,12 +22,10 @@ type DesktopModalFormPropsWithCustomFooter = GeneralFormProps & {
   confirmLoading?: never;
   confirmDisabled?: never;
   submitBtnTooltip?: never;
-  isShowOnlyCloseBtn?: never;
 };
 
 type DesktopModalFormPropsWithOriginalFooter = GeneralFormProps & {
   footer?: never;
-  isShowOnlyCloseBtn?: never;
 
   showIconInConfirmBtn?: boolean;
   onConfirm?: VoidFunction;
@@ -41,21 +37,4 @@ type DesktopModalFormPropsWithOriginalFooter = GeneralFormProps & {
   submitBtnTooltip?: string;
 };
 
-type DesktopModalFormPropsWithOriginalFooterButOnlyCloseBtn = GeneralFormProps & {
-  isShowOnlyCloseBtn?: boolean;
-  onCancel?: VoidFunction;
-  cancelText?: string;
-
-  footer?: never;
-  showIconInConfirmBtn?: never;
-  onConfirm?: never;
-  confirmText?: never;
-  confirmLoading?: never;
-  confirmDisabled?: never;
-  submitBtnTooltip?: never;
-};
-
-export type DesktopModalFormProps =
-  | DesktopModalFormPropsWithOriginalFooter
-  | DesktopModalFormPropsWithCustomFooter
-  | DesktopModalFormPropsWithOriginalFooterButOnlyCloseBtn;
+export type DesktopModalFormProps = DesktopModalFormPropsWithOriginalFooter | DesktopModalFormPropsWithCustomFooter;
diff --git a/src/components/DesktopModalSmallForm/types.ts b/src/components/DesktopModalSmallForm/types.ts
index 13e08e140..434b58d09 100644
--- a/src/components/DesktopModalSmallForm/types.ts
+++ b/src/components/DesktopModalSmallForm/types.ts
@@ -1,6 +1,6 @@
 import { FC, PropsWithChildren } from 'react';
 
-import { IconLegacyProps } from '@components/Icons/IconsProps';
+import { IconProps } from '@components/Icons/IconsProps';
 
 export type GeneralSmallFormProps = PropsWithChildren<{
   cancelText?: string;
@@ -12,6 +12,6 @@ export type GeneralSmallFormProps = PropsWithChildren<{
   onClose: VoidFunction;
   onConfirm?: VoidFunction;
   onCancel?: VoidFunction;
-  confirmButtonIcon?: FC<IconLegacyProps>;
+  confirmButtonIcon?: FC<IconProps>;
   draggable?: boolean;
 }>;
diff --git a/src/components/DiagnosticPanel/hooks/useData.ts b/src/components/DiagnosticPanel/hooks/useData.ts
index 931fccce6..0de10342b 100644
--- a/src/components/DiagnosticPanel/hooks/useData.ts
+++ b/src/components/DiagnosticPanel/hooks/useData.ts
@@ -1,4 +1,4 @@
-import { useCallback, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from 'react';
 
 import { useDispatch } from 'react-redux';
 
@@ -7,7 +7,10 @@ import api from '@api/index';
 import { customersStomp } from '@api/websokets/customersData/stomp';
 import { useAppSelect } from '@hooks/useAppSelector';
 import { isDiagnosticAccessesViewedSelector } from '@store/selectors/modals';
-import { isContributorSelector, isSPFITraderSelector } from '@store/selectors/user';
+import {
+  isContributorSelector,
+  isSPFITraderSelector,
+} from '@store/selectors/user';
 
 import { setIsDiagnosticAccessError } from '@store/slices/modals';
 
@@ -87,12 +90,10 @@ export const useData = () => {
   );
 
   const checkAllLinks = useCallback(async () => {
-    const checkPromises = Object.entries(SERVICES)
-      .filter(([, { spfi }]) => !spfi || (spfi && isSpfiTrader))
-      .map(([key, { url }]) => checkSingleLink(key as ServicesTitles, url));
+    const checkPromises = Object.entries(SERVICES).map(([key, { url }]) => checkSingleLink(key as ServicesTitles, url));
     await Promise.allSettled(checkPromises);
     await customersStomp.deactivate();
-  }, [checkSingleLink, isSpfiTrader]);
+  }, [checkSingleLink]);
 
   const filteredServices = useMemo(() => {
     const copiedServices = { ...services };
diff --git a/src/components/DraftOrderButton/DraftOrderButton.tsx b/src/components/DraftOrderButton/DraftOrderButton.tsx
index fdffe5acc..71a01e9ad 100644
--- a/src/components/DraftOrderButton/DraftOrderButton.tsx
+++ b/src/components/DraftOrderButton/DraftOrderButton.tsx
@@ -3,7 +3,7 @@ import React, { FC } from 'react';
 import { IconButton } from '@components/IconButton';
 import { openCreateDraftTicketModal } from '@store/slices/modals';
 import { dispatch } from '@store/store';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 import Tooltip from '@uikit/Tooltip';
 
@@ -30,7 +30,7 @@ export const DraftOrderButton: FC<DraftOrderButtonProps> = ({ widgetId, buyer })
   >
     <IconButton
       icon={
-        <IconDeprecated
+        <Icon
           variant={IconVariants.COMPARE_ARROWS_ROUNDED}
           className={styles.icon}
         />
diff --git a/src/components/Dropdown/dropdown.scss b/src/components/Dropdown/dropdown.scss
index 3fe643005..cc784f76d 100644
--- a/src/components/Dropdown/dropdown.scss
+++ b/src/components/Dropdown/dropdown.scss
@@ -16,12 +16,6 @@
     align-items: center;
   }
 
-  &::-webkit-scrollbar-thumb {
-    background-clip: content-box;
-    background-color: $surface-scroll-default;
-    border-color: $surface-scroll-default;
-  }
-
   .users-dropdown-menu-item {
     cursor: pointer;
     padding: 16px 24px 12px;
diff --git a/src/components/EmptyData/index.tsx b/src/components/EmptyData/index.tsx
index 4b1227373..4c5325119 100644
--- a/src/components/EmptyData/index.tsx
+++ b/src/components/EmptyData/index.tsx
@@ -1,7 +1,7 @@
 import cn from 'classnames';
 import React, { FC, ReactNode } from 'react';
 
-import { IconLegacyProps } from '@components/Icons/IconsProps';
+import { IconProps } from '@components/Icons/IconsProps';
 import { TextMad } from '@components/TextMad';
 import { Button } from '@uikit/Button';
 
@@ -11,7 +11,7 @@ export interface EmptyDataProps {
   title?: string;
   icon?: ReactNode;
   secondaryText?: string;
-  btnIcon?: FC<IconLegacyProps>;
+  btnIcon?: FC<IconProps>;
   btnText?: string;
   onClickBtn?: VoidFunction;
   className?: string;
diff --git a/src/components/EmptyWidgetDisplay/index.tsx b/src/components/EmptyWidgetDisplay/index.tsx
index dd3ee9563..ce9310512 100644
--- a/src/components/EmptyWidgetDisplay/index.tsx
+++ b/src/components/EmptyWidgetDisplay/index.tsx
@@ -14,7 +14,7 @@ interface Properties {
   button?: string;
 }
 
-export interface EmptyWidgetDisplayProps {
+interface EmptyWidgetDisplayProps {
   setDropdownOpen?: React.Dispatch<React.SetStateAction<boolean>>;
   setIsOpenContextMenuFromEmptyBlock?: React.Dispatch<
     React.SetStateAction<React.MouseEvent<Element, MouseEvent> | undefined>
diff --git a/src/components/_stories_/FilePreview.stories.tsx b/src/components/FilePreview/FilePreview.stories.tsx
similarity index 93%
rename from src/components/_stories_/FilePreview.stories.tsx
rename to src/components/FilePreview/FilePreview.stories.tsx
index c0efb7e08..d06912602 100644
--- a/src/components/_stories_/FilePreview.stories.tsx
+++ b/src/components/FilePreview/FilePreview.stories.tsx
@@ -2,11 +2,12 @@ import { ComponentMeta, ComponentStory } from '@storybook/react';
 import { Upload } from 'antd';
 import React, { useState } from 'react';
 
-import { FilePreview } from '@components/FilePreview';
 import { Button } from '@uikit/Button';
 
+import { FilePreview } from './FilePreview';
+
 export default {
-  title: 'Components/FilePreview',
+  title: 'FilePreview',
   component: FilePreview,
 } as ComponentMeta<typeof FilePreview>;
 
diff --git a/src/components/IFrame/iframe.module.scss b/src/components/IFrame/iframe.module.scss
new file mode 100644
index 000000000..035320c96
--- /dev/null
+++ b/src/components/IFrame/iframe.module.scss
@@ -0,0 +1,11 @@
+.iframe-container {
+  height: 100%;
+  width: 100%;
+  position: relative;
+}
+
+.iframe-frame {
+  width: 100%;
+  height: 100%;
+  border: none;
+}
diff --git a/src/components/IFrame/index.tsx b/src/components/IFrame/index.tsx
new file mode 100644
index 000000000..8fc48e6eb
--- /dev/null
+++ b/src/components/IFrame/index.tsx
@@ -0,0 +1,48 @@
+import classNames from 'classnames';
+import React, { FC, MutableRefObject, PropsWithChildren, useRef } from 'react';
+
+import styles from './iframe.module.scss';
+
+interface IFrameProps {
+  src: string;
+  title?: string;
+  visible?: boolean;
+  onLoad?: () => void;
+  //  style?: Partial<React.CSSProperties>;
+}
+
+type IFramePropsWidthChildren = PropsWithChildren<IFrameProps>;
+
+const IFrame: FC<IFramePropsWidthChildren> = function ({
+  src,
+  title,
+  children,
+  visible = true,
+  onLoad,
+  // style
+}): JSX.Element {
+  const iframeRef = useRef<HTMLIFrameElement>() as MutableRefObject<HTMLIFrameElement>;
+
+  // style={{display:!visible?"none":"auto"}}
+  return (
+    <div
+      style={{ display: !visible ? 'none' : 'auto' }}
+      className={classNames(styles['iframe-container'], 'iframe-class')}
+    >
+      <iframe
+        className={classNames(styles['iframe-frame'], 'iframe-frame')}
+        title={title}
+        src={src}
+        sandbox="allow-scripts allow-same-origin allow-top-navigation"
+        ref={iframeRef}
+        onLoad={onLoad}
+        width="100%"
+        height="100%"
+        contentEditable
+      />
+      {children}
+    </div>
+  );
+};
+
+export default IFrame;
diff --git a/src/components/_stories_/IconButton.stories.tsx b/src/components/IconButton/IconButton.stories.tsx
similarity index 90%
rename from src/components/_stories_/IconButton.stories.tsx
rename to src/components/IconButton/IconButton.stories.tsx
index d3bfa6aac..e216a653d 100644
--- a/src/components/_stories_/IconButton.stories.tsx
+++ b/src/components/IconButton/IconButton.stories.tsx
@@ -1,11 +1,12 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { IconButton } from '@components/IconButton';
 import { ChevronRightMax } from '@components/Icons/ChevronRightMax';
 
+import { IconButton } from './IconButton';
+
 export default {
-  title: 'Components/IconButton',
+  title: 'IconButton',
   component: IconButton,
   parameters: {
     backgrounds: {
diff --git a/src/components/IconButton/IconButton.tsx b/src/components/IconButton/IconButton.tsx
index 09f702d81..224fd698d 100644
--- a/src/components/IconButton/IconButton.tsx
+++ b/src/components/IconButton/IconButton.tsx
@@ -14,7 +14,6 @@ export interface IconButtonProps extends ComponentPropsWithoutRef<'button'> {
   active?: boolean;
 }
 
-/** @deprecated Использовать @uikit/Button */
 export const IconButton = ({
   icon,
   variant = 'primary',
diff --git a/src/components/Icons/AddFile.tsx b/src/components/Icons/AddFile.tsx
index 756b84d21..8a0913e23 100644
--- a/src/components/Icons/AddFile.tsx
+++ b/src/components/Icons/AddFile.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const AddFileIcon: FC<IconLegacyProps> = function ({ className, style }) {
+export const AddFileIcon: FC<IconProps> = function ({ className, style }) {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/AddPlusIcon.tsx b/src/components/Icons/AddPlusIcon.tsx
index 20055b0a7..03c54d17a 100644
--- a/src/components/Icons/AddPlusIcon.tsx
+++ b/src/components/Icons/AddPlusIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const AddPlusIcon: FC<IconLegacyProps> = (props) => (
+export const AddPlusIcon: FC<IconProps> = (props) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/Alert.tsx b/src/components/Icons/Alert.tsx
index 5cf9023bf..d71bc4664 100644
--- a/src/components/Icons/Alert.tsx
+++ b/src/components/Icons/Alert.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const AlertIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const AlertIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/AllowClearIcon.tsx b/src/components/Icons/AllowClearIcon.tsx
index cefc8d63c..42c0675b6 100644
--- a/src/components/Icons/AllowClearIcon.tsx
+++ b/src/components/Icons/AllowClearIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const AllowClearIcon: FC<IconLegacyProps> = ({ style = {}, className = '' }) => (
+export const AllowClearIcon: FC<IconProps> = ({ style = {}, className = '' }) => (
   <svg
     style={style}
     className={className}
diff --git a/src/components/Icons/ArrowBackMini.tsx b/src/components/Icons/ArrowBackMini.tsx
index 32f5f0896..2c4f369ba 100644
--- a/src/components/Icons/ArrowBackMini.tsx
+++ b/src/components/Icons/ArrowBackMini.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowBackMini: FC<IconLegacyProps> = function ({ className, style, onClick }): JSX.Element {
+export const ArrowBackMini: FC<IconProps> = function ({ className, style, onClick }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ArrowBottom.tsx b/src/components/Icons/ArrowBottom.tsx
index 5cb1af6cd..f0ba2c699 100644
--- a/src/components/Icons/ArrowBottom.tsx
+++ b/src/components/Icons/ArrowBottom.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowBottom: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowBottom: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ArrowCollapse.tsx b/src/components/Icons/ArrowCollapse.tsx
index a00cf2936..dbe392285 100644
--- a/src/components/Icons/ArrowCollapse.tsx
+++ b/src/components/Icons/ArrowCollapse.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowCollapse: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowCollapse: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ArrowDownMad.tsx b/src/components/Icons/ArrowDownMad.tsx
index 58eccafee..f47d25325 100644
--- a/src/components/Icons/ArrowDownMad.tsx
+++ b/src/components/Icons/ArrowDownMad.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowDownMad: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowDownMad: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/ArrowForChat.tsx b/src/components/Icons/ArrowForChat.tsx
index 6bf796a25..bcdda8b0f 100644
--- a/src/components/Icons/ArrowForChat.tsx
+++ b/src/components/Icons/ArrowForChat.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowForChat: FC<IconLegacyProps> = function ({ className, style }) {
+export const ArrowForChat: FC<IconProps> = function ({ className, style }) {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ArrowForward.tsx b/src/components/Icons/ArrowForward.tsx
index 54f98c597..53edd420c 100644
--- a/src/components/Icons/ArrowForward.tsx
+++ b/src/components/Icons/ArrowForward.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowForward: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowForward: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/ArrowLeft.tsx b/src/components/Icons/ArrowLeft.tsx
index 6c311edf8..845db8ff5 100644
--- a/src/components/Icons/ArrowLeft.tsx
+++ b/src/components/Icons/ArrowLeft.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowLeft: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowLeft: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ArrowRight.tsx b/src/components/Icons/ArrowRight.tsx
index c99bcc536..9d196dede 100644
--- a/src/components/Icons/ArrowRight.tsx
+++ b/src/components/Icons/ArrowRight.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowRight: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowRight: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ArrowRightLight.tsx b/src/components/Icons/ArrowRightLight.tsx
index 175dd204e..9bc80fd96 100644
--- a/src/components/Icons/ArrowRightLight.tsx
+++ b/src/components/Icons/ArrowRightLight.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowRightLight: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowRightLight: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/ArrowUpMad.tsx b/src/components/Icons/ArrowUpMad.tsx
index ed507d303..5e3925248 100644
--- a/src/components/Icons/ArrowUpMad.tsx
+++ b/src/components/Icons/ArrowUpMad.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ArrowUpMad: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ArrowUpMad: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/BarChartIcon.tsx b/src/components/Icons/BarChartIcon.tsx
index e5152084d..24e7ae444 100644
--- a/src/components/Icons/BarChartIcon.tsx
+++ b/src/components/Icons/BarChartIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const BarChartIcon: FC<IconLegacyProps> = (props) => (
+export const BarChartIcon: FC<IconProps> = (props) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/BookmarkIcon.tsx b/src/components/Icons/BookmarkIcon.tsx
index e187b624c..c50f32d53 100644
--- a/src/components/Icons/BookmarkIcon.tsx
+++ b/src/components/Icons/BookmarkIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Bookmark: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Bookmark: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="14"
diff --git a/src/components/Icons/ButtonLoadingSpinner.tsx b/src/components/Icons/ButtonLoadingSpinner.tsx
index c588bd6c4..142d5d7c7 100644
--- a/src/components/Icons/ButtonLoadingSpinner.tsx
+++ b/src/components/Icons/ButtonLoadingSpinner.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ButtonLoadingSpinner: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ButtonLoadingSpinner: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/CalculatorIcon.tsx b/src/components/Icons/CalculatorIcon.tsx
index f2afd57c8..0c5dd4f61 100644
--- a/src/components/Icons/CalculatorIcon.tsx
+++ b/src/components/Icons/CalculatorIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CalculatorIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const CalculatorIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Calendar.tsx b/src/components/Icons/Calendar.tsx
index d6e55dedf..d736894ed 100644
--- a/src/components/Icons/Calendar.tsx
+++ b/src/components/Icons/Calendar.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CalendarIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const CalendarIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Chart2.tsx b/src/components/Icons/Chart2.tsx
index 78106c789..c8ec01b35 100644
--- a/src/components/Icons/Chart2.tsx
+++ b/src/components/Icons/Chart2.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Chart2Icon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const Chart2Icon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/ChartSquare.tsx b/src/components/Icons/ChartSquare.tsx
index f546ac906..8cae333ad 100644
--- a/src/components/Icons/ChartSquare.tsx
+++ b/src/components/Icons/ChartSquare.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChartSquareIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const ChartSquareIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ChartSquare2.tsx b/src/components/Icons/ChartSquare2.tsx
index aa6e27b52..0ebd57120 100644
--- a/src/components/Icons/ChartSquare2.tsx
+++ b/src/components/Icons/ChartSquare2.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChartSquare2Icon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const ChartSquare2Icon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/ChatBubbleOutlined.tsx b/src/components/Icons/ChatBubbleOutlined.tsx
index 8c01e3beb..4dc34e53e 100644
--- a/src/components/Icons/ChatBubbleOutlined.tsx
+++ b/src/components/Icons/ChatBubbleOutlined.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChatBubbleOutlined: FC<IconLegacyProps> = function ({ size = 18, style = {}, className = '' }): JSX.Element {
+export const ChatBubbleOutlined: FC<IconProps> = function ({ size = 18, style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/ChatGroup.tsx b/src/components/Icons/ChatGroup.tsx
index 7fa3a93f2..355d42ffd 100644
--- a/src/components/Icons/ChatGroup.tsx
+++ b/src/components/Icons/ChatGroup.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChatGroup: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const ChatGroup: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ChatSquareIcon.tsx b/src/components/Icons/ChatSquareIcon.tsx
index 88cd11e3d..27d4277b1 100644
--- a/src/components/Icons/ChatSquareIcon.tsx
+++ b/src/components/Icons/ChatSquareIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChatSquareIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const ChatSquareIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/CheckCircle2.tsx b/src/components/Icons/CheckCircle2.tsx
index 6307bd740..dc0d2545c 100644
--- a/src/components/Icons/CheckCircle2.tsx
+++ b/src/components/Icons/CheckCircle2.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CheckCircle2: FC<IconLegacyProps> = (props) => (
+export const CheckCircle2: FC<IconProps> = (props) => (
   <svg
     width="17"
     height="16"
diff --git a/src/components/Icons/CheckIcon.tsx b/src/components/Icons/CheckIcon.tsx
index 96f46799d..558c275cb 100644
--- a/src/components/Icons/CheckIcon.tsx
+++ b/src/components/Icons/CheckIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CheckIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const CheckIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/CheckIconCurrentColor.tsx b/src/components/Icons/CheckIconCurrentColor.tsx
index f2fd0e3a4..0f8367e98 100644
--- a/src/components/Icons/CheckIconCurrentColor.tsx
+++ b/src/components/Icons/CheckIconCurrentColor.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from '@components/Icons/IconsProps';
+import { IconProps } from '@components/Icons/IconsProps';
 
-export const CheckIconCurrentColor: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const CheckIconCurrentColor: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/CheckedView.tsx b/src/components/Icons/CheckedView.tsx
index 0c49b1eb0..cbf9ffac3 100644
--- a/src/components/Icons/CheckedView.tsx
+++ b/src/components/Icons/CheckedView.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CheckedView: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const CheckedView: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ChevronDown.tsx b/src/components/Icons/ChevronDown.tsx
index 9bc6cc412..1f37bc608 100644
--- a/src/components/Icons/ChevronDown.tsx
+++ b/src/components/Icons/ChevronDown.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChevronDown: FC<IconLegacyProps> = (props) => (
+export const ChevronDown: FC<IconProps> = (props) => (
   <svg
     width="8"
     height="4"
diff --git a/src/components/Icons/ChevronLeftMax.tsx b/src/components/Icons/ChevronLeftMax.tsx
index b2cf5b33a..382212123 100644
--- a/src/components/Icons/ChevronLeftMax.tsx
+++ b/src/components/Icons/ChevronLeftMax.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChevronLeftMax: FC<IconLegacyProps> = ({ style, className }) => (
+export const ChevronLeftMax: FC<IconProps> = ({ style, className }) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/ChevronLeftRounded.tsx b/src/components/Icons/ChevronLeftRounded.tsx
index 147d8a4ea..2c6984c78 100644
--- a/src/components/Icons/ChevronLeftRounded.tsx
+++ b/src/components/Icons/ChevronLeftRounded.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChevronLeftRounded: FC<IconLegacyProps> = ({ style, className }) => (
+export const ChevronLeftRounded: FC<IconProps> = ({ style, className }) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/ChevronRight.tsx b/src/components/Icons/ChevronRight.tsx
index d744d6d58..56b267afd 100644
--- a/src/components/Icons/ChevronRight.tsx
+++ b/src/components/Icons/ChevronRight.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChevronRight: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ChevronRight: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/ChevronRightMax.tsx b/src/components/Icons/ChevronRightMax.tsx
index 4aea6893a..98b552a1d 100644
--- a/src/components/Icons/ChevronRightMax.tsx
+++ b/src/components/Icons/ChevronRightMax.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChevronRightMax: FC<IconLegacyProps> = ({ style, className }) => (
+export const ChevronRightMax: FC<IconProps> = ({ style, className }) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/ChevronRightRounded.tsx b/src/components/Icons/ChevronRightRounded.tsx
index fce577ec1..ffe6ea68a 100644
--- a/src/components/Icons/ChevronRightRounded.tsx
+++ b/src/components/Icons/ChevronRightRounded.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ChevronRightRounded: FC<IconLegacyProps> = ({ style, className }) => (
+export const ChevronRightRounded: FC<IconProps> = ({ style, className }) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/ClearIcon.tsx b/src/components/Icons/ClearIcon.tsx
index 999ce24ca..9ab51c1e4 100644
--- a/src/components/Icons/ClearIcon.tsx
+++ b/src/components/Icons/ClearIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ClearIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ClearIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ClearInputIcon.tsx b/src/components/Icons/ClearInputIcon.tsx
index 4cd76e9ec..5e029c221 100644
--- a/src/components/Icons/ClearInputIcon.tsx
+++ b/src/components/Icons/ClearInputIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ClearInputIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ClearInputIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/CloseCircle.tsx b/src/components/Icons/CloseCircle.tsx
index faeee8f33..5bf4f7c24 100644
--- a/src/components/Icons/CloseCircle.tsx
+++ b/src/components/Icons/CloseCircle.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CloseCircleIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const CloseCircleIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/CloseIcon.tsx b/src/components/Icons/CloseIcon.tsx
index 4688bac8f..a09fd5c13 100644
--- a/src/components/Icons/CloseIcon.tsx
+++ b/src/components/Icons/CloseIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CloseIcon: FC<IconLegacyProps> = function ({ className, style, onClick }): JSX.Element {
+export const CloseIcon: FC<IconProps> = function ({ className, style, onClick }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/CloseMenuIcon.tsx b/src/components/Icons/CloseMenuIcon.tsx
index fee77acce..2041ffce8 100644
--- a/src/components/Icons/CloseMenuIcon.tsx
+++ b/src/components/Icons/CloseMenuIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CloseMenuIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const CloseMenuIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="20"
diff --git a/src/components/Icons/CommentMessage.tsx b/src/components/Icons/CommentMessage.tsx
index 5c3a93224..b08f784c6 100644
--- a/src/components/Icons/CommentMessage.tsx
+++ b/src/components/Icons/CommentMessage.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CommentMessage: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const CommentMessage: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/CommnetAltIcon.tsx b/src/components/Icons/CommnetAltIcon.tsx
index 4337210c7..3be07078b 100644
--- a/src/components/Icons/CommnetAltIcon.tsx
+++ b/src/components/Icons/CommnetAltIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CommentAlt: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const CommentAlt: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Copy.tsx b/src/components/Icons/Copy.tsx
index 4711b7d2d..b7e080ed2 100644
--- a/src/components/Icons/Copy.tsx
+++ b/src/components/Icons/Copy.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CopyIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const CopyIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/CopyrightIcon.tsx b/src/components/Icons/CopyrightIcon.tsx
index 3599f4e0e..f88c2a354 100644
--- a/src/components/Icons/CopyrightIcon.tsx
+++ b/src/components/Icons/CopyrightIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CopyrightIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const CopyrightIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="20"
diff --git a/src/components/Icons/CreateFolderIcon.tsx b/src/components/Icons/CreateFolderIcon.tsx
index fa15918d7..2cfc03311 100644
--- a/src/components/Icons/CreateFolderIcon.tsx
+++ b/src/components/Icons/CreateFolderIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const CreateFolderIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const CreateFolderIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/DangerIcon.tsx b/src/components/Icons/DangerIcon.tsx
index 1e5a98bac..a268bc117 100644
--- a/src/components/Icons/DangerIcon.tsx
+++ b/src/components/Icons/DangerIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const DangerIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const DangerIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/DeleteOutline.tsx b/src/components/Icons/DeleteOutline.tsx
index 2a45e8b8d..51c84edfa 100644
--- a/src/components/Icons/DeleteOutline.tsx
+++ b/src/components/Icons/DeleteOutline.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const DeleteOutline: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const DeleteOutline: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/DiagramUp.tsx b/src/components/Icons/DiagramUp.tsx
index 8d604bf06..45d8f42fd 100644
--- a/src/components/Icons/DiagramUp.tsx
+++ b/src/components/Icons/DiagramUp.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const DiagramUpIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const DiagramUpIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/DragNDropIcon.tsx b/src/components/Icons/DragNDropIcon.tsx
index cdba87385..04e2adcba 100644
--- a/src/components/Icons/DragNDropIcon.tsx
+++ b/src/components/Icons/DragNDropIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const DragNDropIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const DragNDropIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/EllipsisVerticalIcon.tsx b/src/components/Icons/EllipsisVerticalIcon.tsx
index a3cb816c6..d35d953bf 100644
--- a/src/components/Icons/EllipsisVerticalIcon.tsx
+++ b/src/components/Icons/EllipsisVerticalIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const EllipsisVerticalIcon: FC<IconLegacyProps> = ({ style = {}, className = '' }) => (
+export const EllipsisVerticalIcon: FC<IconProps> = ({ style = {}, className = '' }) => (
   <svg
     style={style}
     className={className}
diff --git a/src/components/Icons/EmptyFolderIcon.tsx b/src/components/Icons/EmptyFolderIcon.tsx
index be508f248..f4245fcff 100644
--- a/src/components/Icons/EmptyFolderIcon.tsx
+++ b/src/components/Icons/EmptyFolderIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const EmptyFolderIcon: FC<IconLegacyProps> = ({ style, className }) => (
+export const EmptyFolderIcon: FC<IconProps> = ({ style, className }) => (
   <svg
     width="27"
     height="22"
diff --git a/src/components/Icons/EmptyState.tsx b/src/components/Icons/EmptyState.tsx
index 2c8d18664..ab4962e28 100644
--- a/src/components/Icons/EmptyState.tsx
+++ b/src/components/Icons/EmptyState.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const EmptyStateIcon: FC<IconLegacyProps> = ({ style, className }) => (
+export const EmptyStateIcon: FC<IconProps> = ({ style, className }) => (
   <svg
     width="32"
     height="32"
diff --git a/src/components/Icons/Error.tsx b/src/components/Icons/Error.tsx
index 1b2ceee56..b7a23cd9c 100644
--- a/src/components/Icons/Error.tsx
+++ b/src/components/Icons/Error.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Error: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Error: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       xmlns="http://www.w3.org/2000/svg"
diff --git a/src/components/Icons/EventAvailable.tsx b/src/components/Icons/EventAvailable.tsx
index 5dead4fac..9fb649fee 100644
--- a/src/components/Icons/EventAvailable.tsx
+++ b/src/components/Icons/EventAvailable.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const EventAvailable: FC<IconLegacyProps> = (props) => (
+export const EventAvailable: FC<IconProps> = (props) => (
   <svg
     width="24"
     height="24"
diff --git a/src/components/Icons/ExcelIcon.tsx b/src/components/Icons/ExcelIcon.tsx
index 09d1142dc..3f6ebb340 100644
--- a/src/components/Icons/ExcelIcon.tsx
+++ b/src/components/Icons/ExcelIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-type ExcelIconProps = IconLegacyProps & {
+type ExcelIconProps = IconProps & {
   fill?: string;
 };
 
diff --git a/src/components/Icons/ExcelIconFilled.tsx b/src/components/Icons/ExcelIconFilled.tsx
index 1a726148d..b0aec2ace 100644
--- a/src/components/Icons/ExcelIconFilled.tsx
+++ b/src/components/Icons/ExcelIconFilled.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-type ExcelIconFilledProps = IconLegacyProps & {
+type ExcelIconFilledProps = IconProps & {
   fill?: string;
 };
 
diff --git a/src/components/Icons/ExpandMoreIcon.tsx b/src/components/Icons/ExpandMoreIcon.tsx
index f9b83cbbb..9774000d1 100644
--- a/src/components/Icons/ExpandMoreIcon.tsx
+++ b/src/components/Icons/ExpandMoreIcon.tsx
@@ -1,8 +1,8 @@
 import React from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ExpandMoreIcon = (props: IconLegacyProps) => (
+export const ExpandMoreIcon = (props: IconProps) => (
   <svg
     width="24"
     height="24"
diff --git a/src/components/Icons/ExpandTableIcon.tsx b/src/components/Icons/ExpandTableIcon.tsx
index f3ff82949..90b5043db 100644
--- a/src/components/Icons/ExpandTableIcon.tsx
+++ b/src/components/Icons/ExpandTableIcon.tsx
@@ -1,8 +1,8 @@
-import React, { FC } from 'react';
+import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ExpandTableIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ExpandTableIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ExportIcon.tsx b/src/components/Icons/ExportIcon.tsx
index d06b0d804..2de62b43a 100644
--- a/src/components/Icons/ExportIcon.tsx
+++ b/src/components/Icons/ExportIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ExportIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ExportIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/EyeHiddenIcon.tsx b/src/components/Icons/EyeHiddenIcon.tsx
index c42323367..aa177dac1 100644
--- a/src/components/Icons/EyeHiddenIcon.tsx
+++ b/src/components/Icons/EyeHiddenIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const EyeHiddenIcon: FC<IconLegacyProps> = function (): JSX.Element {
+export const EyeHiddenIcon: FC<IconProps> = function (): JSX.Element {
   return (
     <svg
       width="24"
diff --git a/src/components/Icons/FileBig.tsx b/src/components/Icons/FileBig.tsx
index 5e039a24c..0cba3c667 100644
--- a/src/components/Icons/FileBig.tsx
+++ b/src/components/Icons/FileBig.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const FileBig: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const FileBig: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/FileIcon.tsx b/src/components/Icons/FileIcon.tsx
index 31a12878e..7b45ba749 100644
--- a/src/components/Icons/FileIcon.tsx
+++ b/src/components/Icons/FileIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const FileIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const FileIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/FilterTableIcon.tsx b/src/components/Icons/FilterTableIcon.tsx
index 46511dbae..90492a696 100644
--- a/src/components/Icons/FilterTableIcon.tsx
+++ b/src/components/Icons/FilterTableIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const FilterTableIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const FilterTableIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Flags/China.tsx b/src/components/Icons/Flags/China.tsx
index 3c0ba6b39..641737df4 100644
--- a/src/components/Icons/Flags/China.tsx
+++ b/src/components/Icons/Flags/China.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from '../IconsProps';
+import { IconProps } from '../IconsProps';
 
-export const China: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const China: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Flags/Eur.tsx b/src/components/Icons/Flags/Eur.tsx
index 270fd3b9b..985b112cd 100644
--- a/src/components/Icons/Flags/Eur.tsx
+++ b/src/components/Icons/Flags/Eur.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from '../IconsProps';
+import { IconProps } from '../IconsProps';
 
-export const Eur: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Eur: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Flags/India.tsx b/src/components/Icons/Flags/India.tsx
index c81d4d9f8..07cbeba77 100644
--- a/src/components/Icons/Flags/India.tsx
+++ b/src/components/Icons/Flags/India.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from '../IconsProps';
+import { IconProps } from '../IconsProps';
 
-export const India: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const India: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Flags/Turkey.tsx b/src/components/Icons/Flags/Turkey.tsx
index a32129e9b..cc13cea57 100644
--- a/src/components/Icons/Flags/Turkey.tsx
+++ b/src/components/Icons/Flags/Turkey.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from '../IconsProps';
+import { IconProps } from '../IconsProps';
 
-export const Turkey: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Turkey: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Flags/Usa.tsx b/src/components/Icons/Flags/Usa.tsx
index a4f543138..9bf7b93c0 100644
--- a/src/components/Icons/Flags/Usa.tsx
+++ b/src/components/Icons/Flags/Usa.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from '../IconsProps';
+import { IconProps } from '../IconsProps';
 
-export const Usa: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Usa: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Flash.tsx b/src/components/Icons/Flash.tsx
index 34bc7cabf..204f82d31 100644
--- a/src/components/Icons/Flash.tsx
+++ b/src/components/Icons/Flash.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Flash: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Flash: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="40"
diff --git a/src/components/Icons/Forward.tsx b/src/components/Icons/Forward.tsx
index f3516bc00..cb209ee45 100644
--- a/src/components/Icons/Forward.tsx
+++ b/src/components/Icons/Forward.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Forward: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Forward: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/FullScreenIcon.tsx b/src/components/Icons/FullScreenIcon.tsx
index c66e72a54..a9f70a8f9 100644
--- a/src/components/Icons/FullScreenIcon.tsx
+++ b/src/components/Icons/FullScreenIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const FullScreenIcon: FC<IconLegacyProps> = function ({ size = 18, style = {}, className = '' }): JSX.Element {
+export const FullScreenIcon: FC<IconProps> = function ({ size = 18, style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Graph.tsx b/src/components/Icons/Graph.tsx
index 2cb3bab01..4b34b7c5b 100644
--- a/src/components/Icons/Graph.tsx
+++ b/src/components/Icons/Graph.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const GraphIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const GraphIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/GraphicNew.tsx b/src/components/Icons/GraphicNew.tsx
index ccc568095..02b5b9bc7 100644
--- a/src/components/Icons/GraphicNew.tsx
+++ b/src/components/Icons/GraphicNew.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const GraphicNewIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const GraphicNewIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/GraphicPieIcon.tsx b/src/components/Icons/GraphicPieIcon.tsx
index 963458b18..9798dd569 100644
--- a/src/components/Icons/GraphicPieIcon.tsx
+++ b/src/components/Icons/GraphicPieIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const GraphicPieIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const GraphicPieIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/GroupAdd.tsx b/src/components/Icons/GroupAdd.tsx
index 80a3b4668..e085eb1d2 100644
--- a/src/components/Icons/GroupAdd.tsx
+++ b/src/components/Icons/GroupAdd.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const GroupAdd: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const GroupAdd: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="24"
diff --git a/src/components/Icons/GroupChatIcon.tsx b/src/components/Icons/GroupChatIcon.tsx
index 22869e0bc..37d0a66a8 100644
--- a/src/components/Icons/GroupChatIcon.tsx
+++ b/src/components/Icons/GroupChatIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const GroupChatIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const GroupChatIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="14.000000"
diff --git a/src/components/Icons/HalfBell.tsx b/src/components/Icons/HalfBell.tsx
index ec5c264fd..14c9c7ad0 100644
--- a/src/components/Icons/HalfBell.tsx
+++ b/src/components/Icons/HalfBell.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const HalfBellIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const HalfBellIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/HelpIcon.tsx b/src/components/Icons/HelpIcon.tsx
index be8496cee..00bac927b 100644
--- a/src/components/Icons/HelpIcon.tsx
+++ b/src/components/Icons/HelpIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const HelpIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const HelpIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="20"
diff --git a/src/components/Icons/IconsProps.ts b/src/components/Icons/IconsProps.ts
index 3621b7c4a..8a8635353 100644
--- a/src/components/Icons/IconsProps.ts
+++ b/src/components/Icons/IconsProps.ts
@@ -1,6 +1,6 @@
 import { CSSProperties } from 'react';
 
-export interface IconLegacyProps {
+export interface IconProps {
   className?: string;
   style?: CSSProperties;
   size?: number;
diff --git a/src/components/Icons/ImageIcon.tsx b/src/components/Icons/ImageIcon.tsx
index ab24f93ec..8197bc52c 100644
--- a/src/components/Icons/ImageIcon.tsx
+++ b/src/components/Icons/ImageIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ImageIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const ImageIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/InfoIcon.tsx b/src/components/Icons/InfoIcon.tsx
index 613a6cf18..f65f46718 100644
--- a/src/components/Icons/InfoIcon.tsx
+++ b/src/components/Icons/InfoIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const InfoIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const InfoIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/InfoIcon2.tsx b/src/components/Icons/InfoIcon2.tsx
index c6c1dc34d..5ed60c879 100644
--- a/src/components/Icons/InfoIcon2.tsx
+++ b/src/components/Icons/InfoIcon2.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const InfoIcon2: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const InfoIcon2: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/InstallDesktop.tsx b/src/components/Icons/InstallDesktop.tsx
index 0edba82cd..2cd78456c 100644
--- a/src/components/Icons/InstallDesktop.tsx
+++ b/src/components/Icons/InstallDesktop.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const InstallDesktop: FC<IconLegacyProps> = function ({ size = 18, className, style }): JSX.Element {
+export const InstallDesktop: FC<IconProps> = function ({ size = 18, className, style }): JSX.Element {
   return (
     <svg
       width={size}
diff --git a/src/components/Icons/LaptopChromebookIcon.tsx b/src/components/Icons/LaptopChromebookIcon.tsx
index 1aa015484..6635ce18b 100644
--- a/src/components/Icons/LaptopChromebookIcon.tsx
+++ b/src/components/Icons/LaptopChromebookIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const LaptopChromebookIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const LaptopChromebookIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="20"
diff --git a/src/components/Icons/LightningIcon.tsx b/src/components/Icons/LightningIcon.tsx
index 08cc8f0a9..a15d60bea 100644
--- a/src/components/Icons/LightningIcon.tsx
+++ b/src/components/Icons/LightningIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const LightningIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const LightningIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/ListIcon.tsx b/src/components/Icons/ListIcon.tsx
index a3e299598..b8054ab57 100644
--- a/src/components/Icons/ListIcon.tsx
+++ b/src/components/Icons/ListIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ListIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const ListIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/LockClose.tsx b/src/components/Icons/LockClose.tsx
index 893bed455..62755f7a5 100644
--- a/src/components/Icons/LockClose.tsx
+++ b/src/components/Icons/LockClose.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const LockClose: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const LockClose: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       xmlns="http://www.w3.org/2000/svg"
diff --git a/src/components/Icons/LockOpen.tsx b/src/components/Icons/LockOpen.tsx
index 0c037179f..62f816084 100644
--- a/src/components/Icons/LockOpen.tsx
+++ b/src/components/Icons/LockOpen.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const LockOpenIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const LockOpenIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       xmlns="http://www.w3.org/2000/svg"
diff --git a/src/components/Icons/Logout.tsx b/src/components/Icons/Logout.tsx
index 784536ca7..17b99d6b8 100644
--- a/src/components/Icons/Logout.tsx
+++ b/src/components/Icons/Logout.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const LogoutIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const LogoutIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/MOEXLogo.tsx b/src/components/Icons/MOEXLogo.tsx
index 8399182c7..59d25b1e8 100644
--- a/src/components/Icons/MOEXLogo.tsx
+++ b/src/components/Icons/MOEXLogo.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const MOEXLogoIcon: FC<IconLegacyProps> = function (): JSX.Element {
+export const MOEXLogoIcon: FC<IconProps> = function (): JSX.Element {
   return (
     <svg
       width="619"
diff --git a/src/components/Icons/MoreVertIcon.tsx b/src/components/Icons/MoreVertIcon.tsx
index 156dd9e4d..82d452902 100644
--- a/src/components/Icons/MoreVertIcon.tsx
+++ b/src/components/Icons/MoreVertIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const MoreVertIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const MoreVertIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/MultilineChartIcon.tsx b/src/components/Icons/MultilineChartIcon.tsx
index f95d14d5c..455207b18 100644
--- a/src/components/Icons/MultilineChartIcon.tsx
+++ b/src/components/Icons/MultilineChartIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const MultilineChartIcon: FC<IconLegacyProps> = function (props): JSX.Element {
+export const MultilineChartIcon: FC<IconProps> = function (props): JSX.Element {
   return (
     <svg
       width="24"
diff --git a/src/components/Icons/NewClearInputIcon.tsx b/src/components/Icons/NewClearInputIcon.tsx
index 9014f4f51..dd8100391 100644
--- a/src/components/Icons/NewClearInputIcon.tsx
+++ b/src/components/Icons/NewClearInputIcon.tsx
@@ -1,8 +1,8 @@
-import React, { FC } from 'react';
+import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const NewClearInputIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const NewClearInputIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/NewPlusIcon.tsx b/src/components/Icons/NewPlusIcon.tsx
index ca2401b98..fecd9e7b7 100644
--- a/src/components/Icons/NewPlusIcon.tsx
+++ b/src/components/Icons/NewPlusIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const NewPlusIcon: FC<IconLegacyProps> = function ({ size = 18, className, style }) {
+export const NewPlusIcon: FC<IconProps> = function ({ size = 18, className, style }) {
   return (
     <svg
       width={size}
diff --git a/src/components/Icons/NewSearchIcon.tsx b/src/components/Icons/NewSearchIcon.tsx
index d9a3c25d4..729c38f28 100644
--- a/src/components/Icons/NewSearchIcon.tsx
+++ b/src/components/Icons/NewSearchIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const NewSearchIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const NewSearchIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="20"
diff --git a/src/components/Icons/NewSelectArrowDown.tsx b/src/components/Icons/NewSelectArrowDown.tsx
index bf4ffd878..782be82dd 100644
--- a/src/components/Icons/NewSelectArrowDown.tsx
+++ b/src/components/Icons/NewSelectArrowDown.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const NewSelectArrowDown: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const NewSelectArrowDown: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/NodeArrowDown.tsx b/src/components/Icons/NodeArrowDown.tsx
index 7547dbd61..6570561a1 100644
--- a/src/components/Icons/NodeArrowDown.tsx
+++ b/src/components/Icons/NodeArrowDown.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const NodeArrowDown: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const NodeArrowDown: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/OneColumn.tsx b/src/components/Icons/OneColumn.tsx
index 466d50b8e..a5d66db58 100644
--- a/src/components/Icons/OneColumn.tsx
+++ b/src/components/Icons/OneColumn.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const OneColumn: FC<IconLegacyProps> = (props) => (
+export const OneColumn: FC<IconProps> = (props) => (
   <svg
     width="24"
     height="24"
diff --git a/src/components/Icons/OrderIcon.tsx b/src/components/Icons/OrderIcon.tsx
index 4de49138f..a3d220b41 100644
--- a/src/components/Icons/OrderIcon.tsx
+++ b/src/components/Icons/OrderIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const OrderIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const OrderIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
@@ -15,28 +15,28 @@ export const OrderIcon: FC<IconLegacyProps> = function ({ className, style }): J
     >
       <path
         d="M3.33301 3.83337H7.33301C7.42353 3.83337 7.5 3.90984 7.5 4.00037C7.49982 4.09075 7.42342 4.16638 7.33301 4.16638H4C3.35719 4.16638 2.83301 4.69056 2.83301 5.33337V12.1469C2.83309 12.7896 3.35724 13.3138 4 13.3138H10.667C11.3096 13.3137 11.8329 12.7895 11.833 12.1469V8.66638C11.8332 8.576 11.9096 8.50037 12 8.50037C12.0904 8.50037 12.1668 8.576 12.167 8.66638V12.6664C12.167 13.1236 11.7902 13.5004 11.333 13.5004H3.33301C2.87596 13.5002 2.5 13.1235 2.5 12.6664V4.66638C2.50018 4.20945 2.87607 3.83355 3.33301 3.83337Z"
-        fill="currentColor"
-        stroke="currentColor"
+        fill="#C7C7D1"
+        stroke="#C7C7D1"
       />
       <path
         d="M11.9934 1.83337H12.0129C12.0968 1.83337 12.1663 1.90284 12.1663 1.98669V3.83337H14.0129C14.0968 3.83337 14.1663 3.90284 14.1663 3.98669V4.01306C14.1663 4.09692 14.0968 4.16638 14.0129 4.16638H12.1663V6.00623C12.1663 6.09008 12.0968 6.16052 12.0129 6.16052H11.9934V6.15955L11.9846 6.16052C11.9062 6.16195 11.8333 6.09521 11.8333 6.00623V4.16638H9.99341C9.90288 4.16638 9.83325 4.09675 9.83325 4.00623V3.99548C9.83523 3.90283 9.91144 3.83337 9.99341 3.83337H11.8333V1.98669C11.8333 1.90614 11.8996 1.83337 11.9934 1.83337Z"
-        fill="currentColor"
-        stroke="currentColor"
+        fill="#C7C7D1"
+        stroke="#C7C7D1"
       />
       <path
         d="M5.33374 6.5H9.33374C9.42412 6.50018 9.49976 6.57658 9.49976 6.66699C9.49957 6.75726 9.42401 6.83283 9.33374 6.83301H5.33374C5.24332 6.83301 5.16693 6.75737 5.16675 6.66699C5.16675 6.57647 5.24322 6.5 5.33374 6.5Z"
-        fill="currentColor"
-        stroke="currentColor"
+        fill="#C7C7D1"
+        stroke="#C7C7D1"
       />
       <path
         d="M5.33374 8.5H9.33374C9.42412 8.50018 9.49976 8.57658 9.49976 8.66699C9.49957 8.75726 9.42401 8.83283 9.33374 8.83301H5.33374C5.24332 8.83301 5.16693 8.75737 5.16675 8.66699C5.16675 8.57647 5.24322 8.5 5.33374 8.5Z"
-        fill="currentColor"
-        stroke="currentColor"
+        fill="#C7C7D1"
+        stroke="#C7C7D1"
       />
       <path
         d="M5.33374 10.5H9.33374C9.42412 10.5002 9.49976 10.5766 9.49976 10.667C9.49957 10.7573 9.42401 10.8328 9.33374 10.833H5.33374C5.24332 10.833 5.16693 10.7574 5.16675 10.667C5.16675 10.5765 5.24322 10.5 5.33374 10.5Z"
-        fill="currentColor"
-        stroke="currentColor"
+        fill="#C7C7D1"
+        stroke="#C7C7D1"
       />
     </svg>
   );
diff --git a/src/components/Icons/OutlineTrash.tsx b/src/components/Icons/OutlineTrash.tsx
index b468f3826..7170980ea 100644
--- a/src/components/Icons/OutlineTrash.tsx
+++ b/src/components/Icons/OutlineTrash.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const OutlineTrashIcon: FC<IconLegacyProps> = function ({ className, style }) {
+export const OutlineTrashIcon: FC<IconProps> = function ({ className, style }) {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/Pen.tsx b/src/components/Icons/Pen.tsx
index e98bec14d..74398e5f6 100644
--- a/src/components/Icons/Pen.tsx
+++ b/src/components/Icons/Pen.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const PenIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const PenIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/PersonAdd.tsx b/src/components/Icons/PersonAdd.tsx
index 1f5a8a4a8..ad0fcbebf 100644
--- a/src/components/Icons/PersonAdd.tsx
+++ b/src/components/Icons/PersonAdd.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const PersonAdd: FC<IconLegacyProps> = ({ className, style }) => (
+export const PersonAdd: FC<IconProps> = ({ className, style }) => (
   <svg
     width="22"
     height="16"
diff --git a/src/components/Icons/PersonIcon.tsx b/src/components/Icons/PersonIcon.tsx
index 8a05e2375..8f30c91bd 100644
--- a/src/components/Icons/PersonIcon.tsx
+++ b/src/components/Icons/PersonIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const PersonIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const PersonIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/PictureAsPdfIcon.tsx b/src/components/Icons/PictureAsPdfIcon.tsx
index aed292f5d..525189ca5 100644
--- a/src/components/Icons/PictureAsPdfIcon.tsx
+++ b/src/components/Icons/PictureAsPdfIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const PictureAsPdfIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const PictureAsPdfIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/PinIcon.tsx b/src/components/Icons/PinIcon.tsx
index c8982158f..dd3173cde 100644
--- a/src/components/Icons/PinIcon.tsx
+++ b/src/components/Icons/PinIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const PinIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const PinIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="9"
diff --git a/src/components/Icons/PircturePreview.tsx b/src/components/Icons/PircturePreview.tsx
index 6a9b1cfdf..c1a71d316 100644
--- a/src/components/Icons/PircturePreview.tsx
+++ b/src/components/Icons/PircturePreview.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const PircturePreview: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const PircturePreview: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/PlusIconRaw.tsx b/src/components/Icons/PlusIconRaw.tsx
index 389cd0417..19037112e 100644
--- a/src/components/Icons/PlusIconRaw.tsx
+++ b/src/components/Icons/PlusIconRaw.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const PlusIconRaw: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const PlusIconRaw: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/RIcon.tsx b/src/components/Icons/RIcon.tsx
index 0dba729f5..1d78154dd 100644
--- a/src/components/Icons/RIcon.tsx
+++ b/src/components/Icons/RIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const RIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const RIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/Refresh.tsx b/src/components/Icons/Refresh.tsx
index 95d0fa1c7..190c0729c 100644
--- a/src/components/Icons/Refresh.tsx
+++ b/src/components/Icons/Refresh.tsx
@@ -1,9 +1,9 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
 // название иконки из ДС
-export const Refresh: FC<IconLegacyProps> = function (props): JSX.Element {
+export const Refresh: FC<IconProps> = function (props): JSX.Element {
   return (
     <svg
       width="24"
diff --git a/src/components/Icons/RefreshIcon.tsx b/src/components/Icons/RefreshIcon.tsx
index 6d8acd28d..8d85d1ec1 100644
--- a/src/components/Icons/RefreshIcon.tsx
+++ b/src/components/Icons/RefreshIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const RefreshIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const RefreshIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/RefreshIcon2.tsx b/src/components/Icons/RefreshIcon2.tsx
index 4410842aa..b87e8659c 100644
--- a/src/components/Icons/RefreshIcon2.tsx
+++ b/src/components/Icons/RefreshIcon2.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const RefreshIcon2: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const RefreshIcon2: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/RemoveMinusIcon.tsx b/src/components/Icons/RemoveMinusIcon.tsx
index b6a567b84..a6874fa27 100644
--- a/src/components/Icons/RemoveMinusIcon.tsx
+++ b/src/components/Icons/RemoveMinusIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const RemoveMinusIcon: FC<IconLegacyProps> = (props) => (
+export const RemoveMinusIcon: FC<IconProps> = (props) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/ReplayIcon.tsx b/src/components/Icons/ReplayIcon.tsx
index e30aae7da..fa1731290 100644
--- a/src/components/Icons/ReplayIcon.tsx
+++ b/src/components/Icons/ReplayIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ReplayIcon: FC<IconLegacyProps> = (props) => (
+export const ReplayIcon: FC<IconProps> = (props) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/Reply.tsx b/src/components/Icons/Reply.tsx
index 1c6c91cfc..8059c7a50 100644
--- a/src/components/Icons/Reply.tsx
+++ b/src/components/Icons/Reply.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Reply: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const Reply: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/RoundedClose.tsx b/src/components/Icons/RoundedClose.tsx
index 6f7b29d92..b49c4f33c 100644
--- a/src/components/Icons/RoundedClose.tsx
+++ b/src/components/Icons/RoundedClose.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const RoundedClose: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const RoundedClose: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/SaveIcon.tsx b/src/components/Icons/SaveIcon.tsx
index 9ab9a86d6..d36dbe1b9 100644
--- a/src/components/Icons/SaveIcon.tsx
+++ b/src/components/Icons/SaveIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SaveIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }) {
+export const SaveIcon: FC<IconProps> = function ({ className = '', style = {} }) {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/SearchIcon.tsx b/src/components/Icons/SearchIcon.tsx
index 5246de8eb..92b594bdb 100644
--- a/src/components/Icons/SearchIcon.tsx
+++ b/src/components/Icons/SearchIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SearchIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const SearchIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/SearchIconMad.tsx b/src/components/Icons/SearchIconMad.tsx
index bcc6b51b2..54c7dcf5b 100644
--- a/src/components/Icons/SearchIconMad.tsx
+++ b/src/components/Icons/SearchIconMad.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SearchIconMad: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const SearchIconMad: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/SelectArrowDown.tsx b/src/components/Icons/SelectArrowDown.tsx
index 08f77e879..dac315adb 100644
--- a/src/components/Icons/SelectArrowDown.tsx
+++ b/src/components/Icons/SelectArrowDown.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SelectArrowDown: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const SelectArrowDown: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/Send.tsx b/src/components/Icons/Send.tsx
index 4afb72282..c1abc5e28 100644
--- a/src/components/Icons/Send.tsx
+++ b/src/components/Icons/Send.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Send: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const Send: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/SettingsButtonIcon.tsx b/src/components/Icons/SettingsButtonIcon.tsx
index a139814b0..bc9644612 100644
--- a/src/components/Icons/SettingsButtonIcon.tsx
+++ b/src/components/Icons/SettingsButtonIcon.tsx
@@ -1,8 +1,8 @@
-import React, { FC } from 'react';
+import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SettingsButtonIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const SettingsButtonIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/SettingsIcon.tsx b/src/components/Icons/SettingsIcon.tsx
index 22c2d2afc..de031d584 100644
--- a/src/components/Icons/SettingsIcon.tsx
+++ b/src/components/Icons/SettingsIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SettingsIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const SettingsIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/SettingsSlider.tsx b/src/components/Icons/SettingsSlider.tsx
index 8bb036fee..c2ee4577f 100644
--- a/src/components/Icons/SettingsSlider.tsx
+++ b/src/components/Icons/SettingsSlider.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SettingsSliderIcon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const SettingsSliderIcon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ShareForward.tsx b/src/components/Icons/ShareForward.tsx
index ddadd5871..d196475a1 100644
--- a/src/components/Icons/ShareForward.tsx
+++ b/src/components/Icons/ShareForward.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ShareForwardFilled: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ShareForwardFilled: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ShareIOS.tsx b/src/components/Icons/ShareIOS.tsx
index 519343f05..cdc39e2cf 100644
--- a/src/components/Icons/ShareIOS.tsx
+++ b/src/components/Icons/ShareIOS.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ShareIOSIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ShareIOSIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/ShowChart.tsx b/src/components/Icons/ShowChart.tsx
index d95f1082e..a61cd17bf 100644
--- a/src/components/Icons/ShowChart.tsx
+++ b/src/components/Icons/ShowChart.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ShowChart: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ShowChart: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/SortDown.tsx b/src/components/Icons/SortDown.tsx
index 8146d5c7f..9d394ee0b 100644
--- a/src/components/Icons/SortDown.tsx
+++ b/src/components/Icons/SortDown.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SortDown: FC<IconLegacyProps> = function (props): JSX.Element {
+export const SortDown: FC<IconProps> = function (props): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/SortUp.tsx b/src/components/Icons/SortUp.tsx
index 9d1cf5e72..296153179 100644
--- a/src/components/Icons/SortUp.tsx
+++ b/src/components/Icons/SortUp.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const SortUp: FC<IconLegacyProps> = function (props): JSX.Element {
+export const SortUp: FC<IconProps> = function (props): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/StartIcon.tsx b/src/components/Icons/StartIcon.tsx
index 17a08a254..c9d7b882a 100644
--- a/src/components/Icons/StartIcon.tsx
+++ b/src/components/Icons/StartIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const StartIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const StartIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       xmlns="http://www.w3.org/2000/svg"
diff --git a/src/components/Icons/StopSign.tsx b/src/components/Icons/StopSign.tsx
index ec5cbce4d..95126b0ae 100644
--- a/src/components/Icons/StopSign.tsx
+++ b/src/components/Icons/StopSign.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const StopSign: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const StopSign: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/TableChartIcon.tsx b/src/components/Icons/TableChartIcon.tsx
index 26e4c833a..d9688f5cc 100644
--- a/src/components/Icons/TableChartIcon.tsx
+++ b/src/components/Icons/TableChartIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const TableChartIcon: FC<IconLegacyProps> = (props) => (
+export const TableChartIcon: FC<IconProps> = (props) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/TechSupportIcon.tsx b/src/components/Icons/TechSupportIcon.tsx
index 4bc82b26c..ebfc0307f 100644
--- a/src/components/Icons/TechSupportIcon.tsx
+++ b/src/components/Icons/TechSupportIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const TechSupportIcon: FC<IconLegacyProps> = ({ className, style }) => (
+export const TechSupportIcon: FC<IconProps> = ({ className, style }) => (
   <svg
     className={className}
     style={style}
diff --git a/src/components/Icons/TextFormat.tsx b/src/components/Icons/TextFormat.tsx
index 11782db5b..1e6852a92 100644
--- a/src/components/Icons/TextFormat.tsx
+++ b/src/components/Icons/TextFormat.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const TextFormat: FC<IconLegacyProps> = (props) => (
+export const TextFormat: FC<IconProps> = (props) => (
   <svg
     width="24"
     height="24"
diff --git a/src/components/Icons/ThreeColumn.tsx b/src/components/Icons/ThreeColumn.tsx
index 84419ca95..644c69511 100644
--- a/src/components/Icons/ThreeColumn.tsx
+++ b/src/components/Icons/ThreeColumn.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ThreeColumn: FC<IconLegacyProps> = (props) => (
+export const ThreeColumn: FC<IconProps> = (props) => (
   <svg
     width="24"
     height="24"
diff --git a/src/components/Icons/ToBottomIcon.tsx b/src/components/Icons/ToBottomIcon.tsx
index e1401c2b2..0f3920c64 100644
--- a/src/components/Icons/ToBottomIcon.tsx
+++ b/src/components/Icons/ToBottomIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ToBottomIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const ToBottomIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/Trash.tsx b/src/components/Icons/Trash.tsx
index 033a9efe2..8cd6f07f1 100644
--- a/src/components/Icons/Trash.tsx
+++ b/src/components/Icons/Trash.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const TrashIcon: FC<IconLegacyProps> = function ({ className, style }) {
+export const TrashIcon: FC<IconProps> = function ({ className, style }) {
   return (
     <svg
       width="10"
diff --git a/src/components/Icons/Triangle.tsx b/src/components/Icons/Triangle.tsx
index 55b2466df..1e4e08ddc 100644
--- a/src/components/Icons/Triangle.tsx
+++ b/src/components/Icons/Triangle.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Triangle: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const Triangle: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/Tuning2.tsx b/src/components/Icons/Tuning2.tsx
index 6c6cc1d9f..7224ddc6b 100644
--- a/src/components/Icons/Tuning2.tsx
+++ b/src/components/Icons/Tuning2.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Tuning2Icon: FC<IconLegacyProps> = function ({ className = '', style = {} }): JSX.Element {
+export const Tuning2Icon: FC<IconProps> = function ({ className = '', style = {} }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/TwoColumns.tsx b/src/components/Icons/TwoColumns.tsx
index 2f301f0a7..5677225a3 100644
--- a/src/components/Icons/TwoColumns.tsx
+++ b/src/components/Icons/TwoColumns.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const TwoColumns: FC<IconLegacyProps> = (props) => (
+export const TwoColumns: FC<IconProps> = (props) => (
   <svg
     width="24"
     height="24"
diff --git a/src/components/Icons/UploadImage.tsx b/src/components/Icons/UploadImage.tsx
index 6fda2e6d4..c50db978a 100644
--- a/src/components/Icons/UploadImage.tsx
+++ b/src/components/Icons/UploadImage.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const UploadImage: FC<IconLegacyProps> = function ({ style, className }): JSX.Element {
+export const UploadImage: FC<IconProps> = function ({ style, className }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/UsersGroupTwoRounded.tsx b/src/components/Icons/UsersGroupTwoRounded.tsx
index f6406d450..e66fbc760 100644
--- a/src/components/Icons/UsersGroupTwoRounded.tsx
+++ b/src/components/Icons/UsersGroupTwoRounded.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const UsersGroupTwoRoundedIcon: FC<IconLegacyProps> = function ({ style, className }): JSX.Element {
+export const UsersGroupTwoRoundedIcon: FC<IconProps> = function ({ style, className }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/VerifiedUserIcon.tsx b/src/components/Icons/VerifiedUserIcon.tsx
index 35da47841..957663036 100644
--- a/src/components/Icons/VerifiedUserIcon.tsx
+++ b/src/components/Icons/VerifiedUserIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const VerifiedUserIcon: FC<IconLegacyProps> = function ({ style, className }): JSX.Element {
+export const VerifiedUserIcon: FC<IconProps> = function ({ style, className }): JSX.Element {
   return (
     <svg
       width="24"
diff --git a/src/components/Icons/VisibilityIcon.tsx b/src/components/Icons/VisibilityIcon.tsx
index 944c04fdd..d06b05406 100644
--- a/src/components/Icons/VisibilityIcon.tsx
+++ b/src/components/Icons/VisibilityIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const VisibilityIcon: FC<IconLegacyProps> = function (): JSX.Element {
+export const VisibilityIcon: FC<IconProps> = function (): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/WadOfMoneyIcon.tsx b/src/components/Icons/WadOfMoneyIcon.tsx
index 6e2450ae5..1207c68d5 100644
--- a/src/components/Icons/WadOfMoneyIcon.tsx
+++ b/src/components/Icons/WadOfMoneyIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WadOfMoneyIcon: FC<IconLegacyProps> = function ({ style, className }): JSX.Element {
+export const WadOfMoneyIcon: FC<IconProps> = function ({ style, className }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/WarnIcon.tsx b/src/components/Icons/WarnIcon.tsx
index 647123da4..9611e1e2e 100644
--- a/src/components/Icons/WarnIcon.tsx
+++ b/src/components/Icons/WarnIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WarnIcon: FC<IconLegacyProps> = function ({ style, className }): JSX.Element {
+export const WarnIcon: FC<IconProps> = function ({ style, className }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/WarnSign.tsx b/src/components/Icons/WarnSign.tsx
index e02d12df8..9650a5013 100644
--- a/src/components/Icons/WarnSign.tsx
+++ b/src/components/Icons/WarnSign.tsx
@@ -1,8 +1,8 @@
-import React, { FC } from 'react';
+import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WarnSign: FC<IconLegacyProps> = function ({ className, style }) {
+export const WarnSign: FC<IconProps> = function ({ className, style }) {
   return (
     <svg
       className={className}
diff --git a/src/components/Icons/Warning.tsx b/src/components/Icons/Warning.tsx
index 446ec9c91..2503d1387 100644
--- a/src/components/Icons/Warning.tsx
+++ b/src/components/Icons/Warning.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WarningIcon: FC<IconLegacyProps> = function ({ style = {}, className = '' }): JSX.Element {
+export const WarningIcon: FC<IconProps> = function ({ style = {}, className = '' }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/Warning2.tsx b/src/components/Icons/Warning2.tsx
index dfe6a1f44..1cbce0520 100644
--- a/src/components/Icons/Warning2.tsx
+++ b/src/components/Icons/Warning2.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const Warning2: FC<IconLegacyProps> = function ({ style, className }): JSX.Element {
+export const Warning2: FC<IconProps> = function ({ style, className }): JSX.Element {
   return (
     <svg
       width="16"
diff --git a/src/components/Icons/WarningSharpIcon.tsx b/src/components/Icons/WarningSharpIcon.tsx
index cf99f780f..792879da2 100644
--- a/src/components/Icons/WarningSharpIcon.tsx
+++ b/src/components/Icons/WarningSharpIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WarningSharpIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const WarningSharpIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/WarningTriangleIcon.tsx b/src/components/Icons/WarningTriangleIcon.tsx
index 97186b85b..2bf1b69ee 100644
--- a/src/components/Icons/WarningTriangleIcon.tsx
+++ b/src/components/Icons/WarningTriangleIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WarningTriangleIcon: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const WarningTriangleIcon: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       style={style}
diff --git "a/src/components/Icons/Warning\320\241ircleIcon.tsx" "b/src/components/Icons/Warning\320\241ircleIcon.tsx"
index 410ca76fc..8b92efbec 100644
--- "a/src/components/Icons/Warning\320\241ircleIcon.tsx"
+++ "b/src/components/Icons/Warning\320\241ircleIcon.tsx"
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WarningCircleIcon: FC<IconLegacyProps> = function ({ className, style }) {
+export const WarningCircleIcon: FC<IconProps> = function ({ className, style }) {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/WidgetBindIcon.tsx b/src/components/Icons/WidgetBindIcon.tsx
index 483f873b5..5767871f0 100644
--- a/src/components/Icons/WidgetBindIcon.tsx
+++ b/src/components/Icons/WidgetBindIcon.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WidgetBindIcon: FC<IconLegacyProps> = function ({ style, className }): JSX.Element {
+export const WidgetBindIcon: FC<IconProps> = function ({ style, className }): JSX.Element {
   return (
     <svg
       style={style}
diff --git a/src/components/Icons/WidgetPreview.tsx b/src/components/Icons/WidgetPreview.tsx
index 1ff5cd0f4..4bd771983 100644
--- a/src/components/Icons/WidgetPreview.tsx
+++ b/src/components/Icons/WidgetPreview.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const WidgetPreview: FC<IconLegacyProps> = function ({ className, style }): JSX.Element {
+export const WidgetPreview: FC<IconProps> = function ({ className, style }): JSX.Element {
   return (
     <svg
       width="32"
diff --git a/src/components/Icons/ZoomInMap.tsx b/src/components/Icons/ZoomInMap.tsx
index 526f6ad82..ec4b33dbe 100644
--- a/src/components/Icons/ZoomInMap.tsx
+++ b/src/components/Icons/ZoomInMap.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ZoomInMap: FC<IconLegacyProps> = (props) => (
+export const ZoomInMap: FC<IconProps> = (props) => (
   <svg
     width="24"
     height="24"
diff --git a/src/components/Icons/ZoomOutMap.tsx b/src/components/Icons/ZoomOutMap.tsx
index 95e6ef413..4a7384143 100644
--- a/src/components/Icons/ZoomOutMap.tsx
+++ b/src/components/Icons/ZoomOutMap.tsx
@@ -1,8 +1,8 @@
 import React, { FC } from 'react';
 
-import { IconLegacyProps } from './IconsProps';
+import { IconProps } from './IconsProps';
 
-export const ZoomOutMap: FC<IconLegacyProps> = (props) => (
+export const ZoomOutMap: FC<IconProps> = (props) => (
   <svg
     width="16"
     height="16"
diff --git a/src/components/Icons/index.tsx b/src/components/Icons/index.tsx
index 6c8db38b6..6ee17c1be 100644
--- a/src/components/Icons/index.tsx
+++ b/src/components/Icons/index.tsx
@@ -288,7 +288,7 @@ export default {
   Triangle,
   StopSign,
   ShareForwardFilled,
-  // ShareForwardSVG,
+  ShareForwardSVG,
   RoundedClose,
   Reply,
   RefreshIcon,
diff --git a/src/components/Input/InputMad.tsx b/src/components/Input/InputMad.tsx
index fe03e93b3..ab4e4b0e3 100644
--- a/src/components/Input/InputMad.tsx
+++ b/src/components/Input/InputMad.tsx
@@ -2,7 +2,7 @@ import { Input, InputProps, InputRef } from 'antd';
 import classNames from 'classnames';
 import React, { CSSProperties, FC, Ref } from 'react';
 
-import { IconLegacyProps } from '@components/Icons/IconsProps';
+import { IconProps } from '@components/Icons/IconsProps';
 
 import styles from './inputMad.module.scss';
 
@@ -14,7 +14,7 @@ export interface InputMadProps extends InputProps {
   style?: Partial<CSSProperties>;
   disabled?: boolean;
   iconEnabled?: 'not' | 'start' | 'end' | 'start-end';
-  Icon?: FC<IconLegacyProps>;
+  Icon?: FC<IconProps>;
 }
 
 /** @deprecated использовать компонент `@uikit/Input` */
diff --git a/src/components/InputNumber/InputNumberMad.tsx b/src/components/InputNumber/InputNumberMad.tsx
index 536fc780d..c44506f77 100644
--- a/src/components/InputNumber/InputNumberMad.tsx
+++ b/src/components/InputNumber/InputNumberMad.tsx
@@ -14,7 +14,6 @@ export interface InputNumberMadProps extends InputNumberProps {
   requiredError?: boolean;
 }
 
-/** @deprecated Использовать @uikit/InputNumber */
 export const InputNumberMad: FC<InputNumberMadProps> = function ({
   onChange,
   className = '',
diff --git a/src/components/_stories_/InputWithError.stories.tsx b/src/components/InputWithError/InputWithError.stories.tsx
similarity index 97%
rename from src/components/_stories_/InputWithError.stories.tsx
rename to src/components/InputWithError/InputWithError.stories.tsx
index cc6dfdf44..2fca5e2d8 100644
--- a/src/components/_stories_/InputWithError.stories.tsx
+++ b/src/components/InputWithError/InputWithError.stories.tsx
@@ -6,7 +6,7 @@ import { InputWithError } from '@components/InputWithError';
 import { SelectDark } from '@components/Select';
 
 export default {
-  title: 'Components/InputWithError',
+  title: 'InputWithError',
   component: InputWithError,
   parameters: {
     backgrounds: {
diff --git a/src/components/InstrumentSearch/components/Actions/MoexChartActions.tsx b/src/components/InstrumentSearch/components/Actions/MoexChartActions.tsx
index 4fad0da7a..63170eaae 100644
--- a/src/components/InstrumentSearch/components/Actions/MoexChartActions.tsx
+++ b/src/components/InstrumentSearch/components/Actions/MoexChartActions.tsx
@@ -6,12 +6,12 @@ import { Button } from '@uikit/Button';
 import styles from './styles.module.scss';
 
 type TMoexChartActionsProps = {
-  selectedInstrumentRows: [] | Contract[];
+  selectedInstrumentRows: Contract[];
   isNewScaleDisabled?: boolean;
   customActionsFooterHandlers: {
-    handlePercent: (symbol: string) => void;
-    handleNewScale: (symbol: string) => void;
-    handleNewPanel: (symbol: string) => void;
+    handlePercent: (instrument: Contract) => void;
+    handleNewScale: (instrument: Contract) => void;
+    handleNewPanel: (instrument: Contract) => void;
   };
 };
 
@@ -22,16 +22,16 @@ export const MoexChartActions = ({
 }: TMoexChartActionsProps) => {
   const { handlePercent, handleNewScale, handleNewPanel } = customActionsFooterHandlers;
 
-  const selectedSymbol = selectedInstrumentRows[0]?.issKey;
-  const isButtonDisabled = !selectedSymbol;
+  const selectedInstrument = selectedInstrumentRows[0];
+  const isButtonDisabled = !selectedInstrument?.issKey;
 
   return (
     <div className={styles.actionWrapper}>
       <Button
         text="%"
         onClick={() => {
-          if (selectedSymbol) {
-            handlePercent(selectedSymbol);
+          if (selectedInstrument?.issKey) {
+            handlePercent(selectedInstrument);
           }
         }}
         disabled={isButtonDisabled}
@@ -40,8 +40,8 @@ export const MoexChartActions = ({
       <Button
         text="Новая шкала"
         onClick={() => {
-          if (selectedSymbol) {
-            handleNewScale(selectedSymbol);
+          if (selectedInstrument?.issKey) {
+            handleNewScale(selectedInstrument);
           }
         }}
         disabled={isButtonDisabled || isNewScaleDisabled}
@@ -50,8 +50,8 @@ export const MoexChartActions = ({
       <Button
         text="Новая панель"
         onClick={() => {
-          if (selectedSymbol) {
-            handleNewPanel(selectedSymbol);
+          if (selectedInstrument?.issKey) {
+            handleNewPanel(selectedInstrument);
           }
         }}
         disabled={isButtonDisabled}
diff --git a/src/components/_stories_/SearchInput.stories.tsx b/src/components/InstrumentSearch/components/SearchInput/SearchInput.stories.tsx
similarity index 87%
rename from src/components/_stories_/SearchInput.stories.tsx
rename to src/components/InstrumentSearch/components/SearchInput/SearchInput.stories.tsx
index 19ed1a90d..1ac6bed94 100644
--- a/src/components/_stories_/SearchInput.stories.tsx
+++ b/src/components/InstrumentSearch/components/SearchInput/SearchInput.stories.tsx
@@ -1,11 +1,14 @@
 import { action } from '@storybook/addon-actions';
 import { Meta, StoryObj } from '@storybook/react';
 
-import { SearchInput } from '@components/InstrumentSearch/components/SearchInput';
+ 
 import { AllFiltersVariants, FilterOptionsType, FilterValueType } from '@components/InstrumentSearch/types/filters';
 
+import { SearchInput } from '.';
+
+
 const meta: Meta<typeof SearchInput> = {
-  title: 'Components/SearchInput',
+  title: 'InstrumentSearch/SearchInput',
   component: SearchInput,
 };
 
diff --git a/src/components/InstrumentSearch/types/hooks.ts b/src/components/InstrumentSearch/types/hooks.ts
index a623c5b80..d82fa0da3 100644
--- a/src/components/InstrumentSearch/types/hooks.ts
+++ b/src/components/InstrumentSearch/types/hooks.ts
@@ -74,9 +74,9 @@ export type InstrumentSearchType = {
    * TODO: убрать, когда разработаем свою модалку для moex_chart
    */
   customActionsFooterHandlers?: {
-    handlePercent: (symbol: string) => void;
-    handleNewScale: (symbol: string) => void;
-    handleNewPanel: (symbol: string) => void;
+    handlePercent: (instrument: Contract) => void;
+    handleNewScale: (instrument: Contract) => void;
+    handleNewPanel: (instrument: Contract) => void;
   };
   isNewScaleDisabled?: boolean;
 };
diff --git a/src/components/_stories_/LabeledHOC.stories.tsx b/src/components/LabeledHOC/LabeledHOC.stories.tsx
similarity index 89%
rename from src/components/_stories_/LabeledHOC.stories.tsx
rename to src/components/LabeledHOC/LabeledHOC.stories.tsx
index 6addfa1c5..7f412b89d 100644
--- a/src/components/_stories_/LabeledHOC.stories.tsx
+++ b/src/components/LabeledHOC/LabeledHOC.stories.tsx
@@ -1,13 +1,14 @@
 import React from 'react';
 
 import { InputLight } from '@components/Input';
-import { LabeledHOC } from '@components/LabeledHOC';
 import { Switch } from '@uikit/Switch';
 
+import { LabeledHOC } from './LabeledHOC';
+
 import type { Meta } from '@storybook/react';
 
 const meta: Meta<typeof LabeledHOC> = {
-  title: 'Components/LabeledHOC',
+  title: 'LabeledHOC',
   component: LabeledHOC,
   tags: ['autodocs'],
 } as any;
diff --git a/src/components/Legend/Legend.tsx b/src/components/Legend/Legend.tsx
deleted file mode 100644
index 9c2885acf..000000000
--- a/src/components/Legend/Legend.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import React from 'react';
-
-import { ColorId } from '@modules/marketMap/types/color';
-
-import { LegendItem } from './components/LegendItem';
-import styles from './Legend.module.scss';
-import { LegendItemData, LegendProps } from './types';
-import { getLegendItem } from './utils/getLegendItem';
-
-export const Legend = <T extends LegendItemData>({
-  legend,
-  legendExtensionForInstruments,
-  loading,
-  onDelete,
-  onChangeVisibility,
-  onReloadPoints,
-  getColorById,
-  getItemName,
-  getPointColor,
-  getPointOpacity,
-  getIsDisabled,
-  shouldHighlightInactive,
-  disabledTitle,
-  onHideDisabled,
-}: LegendProps<T>) => (
-  <div className={styles.legend}>
-    {legend.map((legendItem) => {
-      const colorIds = legendExtensionForInstruments
-        ? ((legendExtensionForInstruments[legendItem.key] ?? [])
-            .map((key) => getLegendItem(key, legend)?.colorId)
-            .filter(Boolean) as ColorId[])
-        : [];
-
-      return (
-        <LegendItem
-          key={legendItem.key}
-          isLoading={loading?.[legendItem.key] ?? false}
-          legendItem={legendItem}
-          extendColorIds={colorIds}
-          onChangeVisibility={onChangeVisibility}
-          onDelete={onDelete}
-          canDelete={legendItem?.canDelete ?? true}
-          canHide={legendItem?.canHide ?? true}
-          canReload={legendItem?.canReload ?? false}
-          onReloadPoints={onReloadPoints}
-          reloadTitle={legendItem?.reloadTitle ?? 'Обновить'}
-          reloadDate={legendItem?.reloadDate ?? null}
-          getColorById={getColorById}
-          getItemName={getItemName}
-          getPointColor={getPointColor}
-          getPointOpacity={getPointOpacity}
-          getIsDisabled={getIsDisabled}
-          shouldHighlightInactive={shouldHighlightInactive}
-          disabledTitle={disabledTitle}
-          onHideDisabled={onHideDisabled}
-        />
-      );
-    })}
-  </div>
-);
diff --git a/src/components/Legend/components/ItemContent.tsx b/src/components/Legend/components/ItemContent.tsx
deleted file mode 100644
index a6fd707fb..000000000
--- a/src/components/Legend/components/ItemContent.tsx
+++ /dev/null
@@ -1,153 +0,0 @@
-import cn from 'classnames';
-import React, { useState } from 'react';
-
-import { ColoredBalls } from '@components/ColoredBalls';
-import { CloseIcon } from '@components/Icons/CloseIcon';
-import { Button } from '@uikit/Button';
-import Tooltip from '@uikit/Tooltip';
-import { hexToRgb } from '@utils/colors';
-
-import styles from '../Legend.module.scss';
-import { LegendItemData } from '../types';
-
-type ItemContentProps<T extends LegendItemData> = React.PropsWithChildren<{
-  hovered?: boolean;
-  setIsHoverActive: React.Dispatch<React.SetStateAction<boolean>>;
-  childColor: string;
-  extendColorIds: string[];
-  isLoading?: boolean;
-
-  legendItem: T;
-
-  getColorById: (colorId?: string) => string;
-  getItemName: (item: T) => string;
-  getPointColor?: (colorId: string, opacity: number) => string;
-  pointColor?: string;
-  isDisabled?: boolean;
-  isInactive?: boolean;
-  disabledTitle?: (item: T, onHide: () => void) => React.ReactNode;
-  onHideDisabled?: (item: T) => void;
-}>;
-
-export const ItemContent = <T extends LegendItemData>({
-  childColor,
-  extendColorIds,
-  legendItem,
-  children,
-  hovered = false,
-  isLoading = false,
-  setIsHoverActive,
-  getColorById,
-  getItemName,
-  getPointColor,
-  pointColor,
-  isDisabled = false,
-  isInactive = false,
-  disabledTitle,
-  onHideDisabled,
-}: ItemContentProps<T>) => {
-  const [tooltipVisible, setTooltipVisible] = useState(false);
-
-  const rgbChildColor = (hexToRgb(childColor) ?? []).join(',');
-
-  const handleMouseEnter = () => {
-    if (!hovered) {
-      setIsHoverActive(true);
-    }
-    if (isDisabled) {
-      setTooltipVisible(true);
-    }
-  };
-
-  const handleMouseLeave = () => {
-    if (hovered) {
-      setIsHoverActive(false);
-    }
-    setTooltipVisible(false);
-  };
-
-  const handleHide = () => {
-    onHideDisabled?.(legendItem);
-    setTooltipVisible(false);
-  };
-
-  const defaultDisabledTitle = (
-    <div className={styles.disabledTooltipContent}>
-      Кривая больше не доступна
-      <Button
-        variant="outlined-secondary"
-        text="Скрыть с графика"
-        onClick={handleHide}
-      />
-    </div>
-  );
-
-  const tooltipContent = disabledTitle ? disabledTitle(legendItem, handleHide) : defaultDisabledTitle;
-  const colorToShow = pointColor ?? childColor;
-  const showSingleColor = getPointColor !== undefined;
-
-  const itemClasses = cn(styles.item, isLoading && styles.item_loading, styles.item_legend, {
-    [styles['item--inactive']]: isInactive,
-    [styles['item--not-allowed']]: isDisabled,
-  });
-
-  const item = (
-    <div
-      className={itemClasses}
-      style={{
-        backgroundImage: isLoading
-          ? `linear-gradient(90deg, rgba(${rgbChildColor}, 0.06) 25%, rgba(${rgbChildColor}, 0.75) 37%, rgba(${rgbChildColor}, 0.06) 63%)`
-          : undefined,
-        ...(hovered ? { position: 'absolute', zIndex: 1, display: 'flex' } : {}),
-        border: '1px solid transparent',
-      }}
-      onMouseEnter={handleMouseEnter}
-      onMouseLeave={handleMouseLeave}
-    >
-      {showSingleColor ? (
-        <div className={styles.itemColorContainer}>
-          <div
-            className={styles.itemColor}
-            style={{
-              backgroundColor: !isDisabled ? colorToShow : 'rgba(199, 199, 209, 0.16)',
-            }}
-          />
-        </div>
-      ) : (
-        <div className={styles.itemColorContainer}>
-          <ColoredBalls colors={[childColor, ...extendColorIds.map((colorId) => getColorById(colorId))]} />
-        </div>
-      )}
-      <div className={styles.label}>
-        <span className={styles.itemName}>{getItemName(legendItem)}</span>
-        {children}
-      </div>
-      {isDisabled && !hovered && (
-        <button
-          type="button"
-          onClick={handleHide}
-          className={styles.itemDeleteButton}
-          data-testid="item-delete-button"
-        >
-          <CloseIcon />
-        </button>
-      )}
-    </div>
-  );
-
-  if (isDisabled) {
-    return (
-      <Tooltip
-        title={tooltipContent}
-        onOpenChange={setTooltipVisible}
-        open={tooltipVisible}
-        mouseEnterDelay={0.15}
-        mouseLeaveDelay={0.15}
-      >
-        {item}
-      </Tooltip>
-    );
-  }
-
-  return item;
-};
diff --git a/src/components/Legend/components/LegendItem.tsx b/src/components/Legend/components/LegendItem.tsx
deleted file mode 100644
index f3b4c89f2..000000000
--- a/src/components/Legend/components/LegendItem.tsx
+++ /dev/null
@@ -1,113 +0,0 @@
-import React, { useState } from 'react';
-
-import { ColorId } from '@modules/marketMap/types/color';
-
-import { LegendIconsProps, LegendItemData } from '../types';
-
-import { IconsSection } from './IconsSection';
-import { ItemContent } from './ItemContent';
-
-type LegendItemProps<T extends LegendItemData> = LegendIconsProps & {
-  legendItem?: T;
-  isLoading: boolean;
-  extendColorIds: ColorId[];
-
-  getColorById: (colorId?: string) => string;
-  getItemName: (item: T) => string;
-  getPointColor?: (colorId: string, opacity: number) => string;
-  getPointOpacity?: (key: string) => number;
-  getIsDisabled?: (item: T) => boolean;
-  shouldHighlightInactive?: (item: T) => boolean;
-  disabledTitle?: (item: T, onHide: () => void) => React.ReactNode;
-  onHideDisabled?: (item: T) => void;
-};
-
-export const LegendItem = <T extends LegendItemData>({
-  legendItem,
-  isLoading,
-  extendColorIds,
-  onChangeVisibility,
-  onDelete,
-  canDelete,
-  canHide,
-  canReload,
-  onReloadPoints,
-  reloadTitle,
-  reloadDate,
-  getColorById,
-  getItemName,
-  getPointColor,
-  getPointOpacity,
-  getIsDisabled,
-  shouldHighlightInactive,
-  disabledTitle,
-  onHideDisabled,
-}: LegendItemProps<T>) => {
-  const [isHoverActive, setIsHoverActive] = useState(false);
-
-  if (!legendItem) {
-    return null;
-  }
-
-  const childColor = getColorById(legendItem?.colorId);
-  const opacity = getPointOpacity?.(legendItem.key);
-  const itemIsDisabled = getIsDisabled?.(legendItem) ?? false;
-  const itemIsInactive = shouldHighlightInactive?.(legendItem) ?? false;
-
-  return (
-    <div
-      style={{ position: 'relative' }}
-      data-testid={`legend-item-${legendItem.key}`}
-    >
-      {isHoverActive ? (
-        <ItemContent
-          hovered
-          setIsHoverActive={setIsHoverActive}
-          legendItem={legendItem}
-          childColor={childColor}
-          extendColorIds={extendColorIds}
-          getColorById={getColorById}
-          getItemName={getItemName}
-          getPointColor={getPointColor}
-          pointColor={
-            opacity !== undefined && legendItem?.colorId ? getPointColor?.(legendItem.colorId, opacity) : undefined
-          }
-          isDisabled={itemIsDisabled}
-          isInactive={itemIsInactive}
-          disabledTitle={disabledTitle}
-          onHideDisabled={onHideDisabled}
-        >
-          <IconsSection
-            legendItem={legendItem}
-            canDelete={canDelete}
-            canHide={canHide}
-            onDelete={onDelete}
-            onChangeVisibility={onChangeVisibility}
-            canReload={canReload}
-            onReloadPoints={onReloadPoints}
-            reloadTitle={reloadTitle}
-            reloadDate={reloadDate}
-          />
-        </ItemContent>
-      ) : null}
-
-      <ItemContent
-        setIsHoverActive={setIsHoverActive}
-        isLoading={isLoading}
-        legendItem={legendItem}
-        childColor={childColor}
-        extendColorIds={extendColorIds}
-        getColorById={getColorById}
-        getItemName={getItemName}
-        getPointColor={getPointColor}
-        pointColor={
-          opacity !== undefined && legendItem?.colorId ? getPointColor?.(legendItem.colorId, opacity) : undefined
-        }
-        isDisabled={itemIsDisabled}
-        isInactive={itemIsInactive}
-        disabledTitle={disabledTitle}
-        onHideDisabled={onHideDisabled}
-      />
-    </div>
-  );
-};
diff --git a/src/components/Legend/components/__tests__/LegendItem.test.tsx b/src/components/Legend/components/__tests__/LegendItem.test.tsx
deleted file mode 100644
index 590613df0..000000000
--- a/src/components/Legend/components/__tests__/LegendItem.test.tsx
+++ /dev/null
@@ -1,167 +0,0 @@
-import { render } from '@testing-library/react';
-import dayjs from 'dayjs';
-import React from 'react';
-import '@testing-library/jest-dom';
-
-import { hexToRgb } from '@utils/colors';
-
-import { LegendItemData } from '../../types';
-
-import { LegendItem } from '../LegendItem';
-
-jest.mock('@utils/colors', () => ({
-  hexToRgb: jest.fn().mockReturnValue([255, 0, 0]),
-}));
-
-describe('LegendItem', () => {
-  const mockLegendItem: LegendItemData = {
-    key: 'test-key',
-    isVisible: true,
-    colorId: 'color1',
-    onDelete: jest.fn(),
-    onChangeVisibility: jest.fn(),
-  };
-
-  const defaultProps = {
-    legendItem: mockLegendItem,
-    isLoading: false,
-    extendColorIds: [] as string[],
-    onDelete: jest.fn(),
-    onChangeVisibility: jest.fn(),
-    canDelete: true,
-    canHide: true,
-    canReload: false,
-    onReloadPoints: jest.fn(),
-    reloadTitle: 'Обновить',
-    reloadDate: dayjs('2025-12-12'),
-    getColorById: jest.fn().mockReturnValue('#ff0000'),
-    getItemName: jest.fn().mockReturnValue('Test Item'),
-  };
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('should render null when legendItem is undefined', () => {
-    const { container } = render(
-      <LegendItem
-        {...defaultProps}
-        legendItem={undefined}
-      />,
-    );
-
-    expect(container.firstChild).toBeNull();
-  });
-
-  it('should render without errors when legendItem is provided', () => {
-    const { getByTestId } = render(<LegendItem {...defaultProps} />);
-
-    expect(getByTestId(`legend-item-${mockLegendItem.key}`)).toBeInTheDocument();
-  });
-
-  it('should call getColorById with correct colorId', () => {
-    render(<LegendItem {...defaultProps} />);
-
-    expect(defaultProps.getColorById).toHaveBeenCalledWith(mockLegendItem.colorId);
-  });
-
-  it('should render ItemContent with correct props', () => {
-    const { getByTestId } = render(<LegendItem {...defaultProps} />);
-
-    expect(getByTestId(`legend-item-${mockLegendItem.key}`)).toBeInTheDocument();
-  });
-
-  it('should pass getPointOpacity to get opacity value', () => {
-    const getPointOpacity = jest.fn().mockReturnValue(0.5);
-    render(
-      <LegendItem
-        {...defaultProps}
-        getPointOpacity={getPointOpacity}
-      />,
-    );
-
-    expect(getPointOpacity).toHaveBeenCalledWith(mockLegendItem.key);
-  });
-
-  it('should pass getIsDisabled to determine disabled state', () => {
-    const getIsDisabled = jest.fn().mockReturnValue(true);
-    render(
-      <LegendItem
-        {...defaultProps}
-        getIsDisabled={getIsDisabled}
-      />,
-    );
-
-    expect(getIsDisabled).toHaveBeenCalledWith(mockLegendItem);
-  });
-
-  it('should pass shouldHighlightInactive to determine inactive state', () => {
-    const shouldHighlightInactive = jest.fn().mockReturnValue(true);
-    render(
-      <LegendItem
-        {...defaultProps}
-        shouldHighlightInactive={shouldHighlightInactive}
-      />,
-    );
-
-    expect(shouldHighlightInactive).toHaveBeenCalledWith(mockLegendItem);
-  });
-
-  it('should render without optional getPointColor and getPointOpacity', () => {
-    const { getByTestId } = render(
-      <LegendItem
-        {...defaultProps}
-        getPointColor={undefined}
-        getPointOpacity={undefined}
-      />,
-    );
-
-    expect(getByTestId(`legend-item-${mockLegendItem.key}`)).toBeInTheDocument();
-  });
-
-  it('should render without canDelete', () => {
-    const { getByTestId } = render(
-      <LegendItem
-        {...defaultProps}
-        canDelete={false}
-      />,
-    );
-
-    expect(getByTestId(`legend-item-${mockLegendItem.key}`)).toBeInTheDocument();
-  });
-
-  it('should render without canHide', () => {
-    const { getByTestId } = render(
-      <LegendItem
-        {...defaultProps}
-        canHide={false}
-      />,
-    );
-
-    expect(getByTestId(`legend-item-${mockLegendItem.key}`)).toBeInTheDocument();
-  });
-
-  it('should call hexToRgb with childColor', () => {
-    render(<LegendItem {...defaultProps} />);
-
-    expect(hexToRgb).toHaveBeenCalled();
-  });
-
-  it('should handle legendItem without colorId', () => {
-    const itemWithoutColor: LegendItemData = {
-      key: 'test-key-2',
-      isVisible: true,
-      onDelete: jest.fn(),
-      onChangeVisibility: jest.fn(),
-    };
-
-    const { getByTestId } = render(
-      <LegendItem
-        {...defaultProps}
-        legendItem={itemWithoutColor}
-      />,
-    );
-
-    expect(getByTestId(`legend-item-${itemWithoutColor.key}`)).toBeInTheDocument();
-  });
-});
diff --git a/src/components/LegendOld/index.module.scss b/src/components/Legend/index.module.scss
similarity index 100%
rename from src/components/LegendOld/index.module.scss
rename to src/components/Legend/index.module.scss
diff --git a/src/components/Legend/index.ts b/src/components/Legend/index.ts
deleted file mode 100644
index 1c2d02811..000000000
--- a/src/components/Legend/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from './Legend';
-export * from './types';
-export { ItemContent } from './components/ItemContent';
diff --git a/src/components/LegendOld/index.tsx b/src/components/Legend/index.tsx
similarity index 90%
rename from src/components/LegendOld/index.tsx
rename to src/components/Legend/index.tsx
index 74b36b89c..74fe009d4 100644
--- a/src/components/LegendOld/index.tsx
+++ b/src/components/Legend/index.tsx
@@ -16,10 +16,7 @@ interface ILegend {
 }
 
 /** Стандартная легенда для графика */
-/**
- * @deprecated
- */
-export const LegendOld: React.FC<ILegend> = ({ className, label, line, colors, title }) => (
+export const Legend: React.FC<ILegend> = ({ className, label, line, colors, title }) => (
   <div className={classNames(styles.metricsContainer, className)}>
     <span>{title}</span>
     <div className={styles.metricContent}>
diff --git a/src/components/LegendOld/legend.test.tsx b/src/components/Legend/legend.test.tsx
similarity index 92%
rename from src/components/LegendOld/legend.test.tsx
rename to src/components/Legend/legend.test.tsx
index c2c7c4646..28c28ecb9 100644
--- a/src/components/LegendOld/legend.test.tsx
+++ b/src/components/Legend/legend.test.tsx
@@ -1,7 +1,7 @@
 import { render, screen } from '@testing-library/react';
 import React from 'react';
 
-import { LegendOld } from './index';
+import { Legend } from './index';
 
 test('Весь текст должен быть отрендерен', () => {
   const title = 'Some Title';
@@ -10,7 +10,7 @@ test('Весь текст должен быть отрендерен', () => {
   const line2 = 'line2';
 
   render(
-    <LegendOld
+    <Legend
       colors={['red', 'white']}
       title={title}
       line={[line1, line2]}
diff --git a/src/components/Legend/types.ts b/src/components/Legend/types.ts
deleted file mode 100644
index 94807edd0..000000000
--- a/src/components/Legend/types.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { SelectProps } from 'antd';
-import { Dayjs } from 'dayjs';
-import { ReactNode } from 'react';
-
-import { ColorId } from '@modules/marketMap/types/color';
-
-type ChangeCallback = SelectProps['onChange'];
-
-export type Colorable = { colorId?: ColorId };
-export type WithColor<T> = T & Colorable;
-
-/**
- * типы для работы с видимостью графика
- * isVisible сохраняется в widgetProperty
- * может иметь 3 значения:
- * undefined или null  - сущность не добавлена на график (в легенду)
- * true - сущность добавлена в легенду и ее график виден пользователю
- * false -  сущность добавлена в легенду и спрятана пользователем
- * если isNil(legend.isVisible) === true, то сущность не добавлена на график
- */
-export type Visible = { isVisible?: boolean };
-export type WithVisible<T> = T & Visible;
-
-export type LegendProps<T extends LegendItemData> = {
-  legend: T[];
-  legendExtensionForInstruments?: Record<string, string[]>;
-  loading?: Record<string, boolean>;
-  onDelete: LegendIconsProps['onDelete'];
-  onChangeVisibility?: LegendIconsProps['onChangeVisibility'];
-  onReloadPoints?: LegendIconsProps['onReloadPoints'];
-
-  // геттеры для цветов и названия
-  getColorById: (colorId?: string) => string;
-  getItemName: (item: T) => string;
-
-  // пропсы из кривых
-  getPointColor?: (colorId: string, opacity: number) => string;
-  getPointOpacity?: (key: string) => number;
-  getIsDisabled?: (item: T) => boolean;
-  shouldHighlightInactive?: (item: T) => boolean;
-  disabledTitle?: (item: T, onHide: () => void) => ReactNode;
-  onHideDisabled?: (item: T) => void;
-};
-
-export type LegendItemData = WithVisible<
-  WithColor<
-    LegendIconsProps & {
-      key: string;
-    }
-  >
->;
-
-export type LegendIconsProps = {
-  /* Отображение иконки удаления элемента легенды */
-  canDelete?: boolean;
-  /* Отображение иконки скрытия элемента легенды */
-  canHide?: boolean;
-  /** Обработчик скрытия элемента легенды  */
-  onChangeVisibility?: ChangeCallback;
-  /** Обработчик удаления элемента легенды  */
-  onDelete?: ChangeCallback;
-
-  /* Отображение иконки перезагрузки данных */
-  canReload?: boolean;
-  /** Обработчик перезагрузки данных  */
-  onReloadPoints?: ChangeCallback;
-
-  // дополнительные данные для тултипа Reload иконки
-  /** Title для тултипа при наведении на иконки перезагрузки  */
-  reloadTitle?: string;
-  /** Время последнего обновления для тултипа при наведении на иконки перезагрузки  */
-  reloadDate?: Dayjs | null;
-};
diff --git a/src/components/Legend/utils/getLegendItem.ts b/src/components/Legend/utils/getLegendItem.ts
deleted file mode 100644
index 8e8439355..000000000
--- a/src/components/Legend/utils/getLegendItem.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { LegendItemData } from '../types';
-
-export const getLegendItem = (key: LegendItemData['key'], legend: LegendItemData[]): LegendItemData | undefined =>
-  legend.find((item) => item.key === key);
diff --git a/src/components/_stories_/List.stories.tsx b/src/components/List/List.stories.tsx
similarity index 93%
rename from src/components/_stories_/List.stories.tsx
rename to src/components/List/List.stories.tsx
index 09445b97c..4034b4c37 100644
--- a/src/components/_stories_/List.stories.tsx
+++ b/src/components/List/List.stories.tsx
@@ -1,12 +1,13 @@
 import React from 'react';
 
-import { List } from '@components/List';
-import { RowConfig } from '@components/List/List.types';
+import { RowConfig } from './List.types';
+
+import { List } from './index';
 
 import type { Meta } from '@storybook/react';
 
 const meta: Meta<typeof List> = {
-  title: 'Components/Список',
+  title: 'Список',
   component: List,
   tags: ['autodocs'],
 } as any;
diff --git a/src/components/_stories_/ModalImage.stories.tsx b/src/components/ModalImage/ModalImage.stories.tsx
similarity index 94%
rename from src/components/_stories_/ModalImage.stories.tsx
rename to src/components/ModalImage/ModalImage.stories.tsx
index 858030fec..96a7c14bf 100644
--- a/src/components/_stories_/ModalImage.stories.tsx
+++ b/src/components/ModalImage/ModalImage.stories.tsx
@@ -2,10 +2,10 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React, { ChangeEvent, useState } from 'react';
 
-import { ModalImage } from '@components/ModalImage';
+import { ModalImage } from './ModalImage';
 
 export default {
-  title: 'Components/ModalImage',
+  title: 'ModalImage',
   component: ModalImage,
 } as ComponentMeta<typeof ModalImage>;
 
diff --git a/src/components/OrderButton/OrderButton.module.scss b/src/components/OrderButton/OrderButton.module.scss
deleted file mode 100644
index a6e0150fe..000000000
--- a/src/components/OrderButton/OrderButton.module.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-.button:disabled {
-  cursor: not-allowed !important;
-}
-
-.icon {
-  color: inherit !important;
-}
diff --git a/src/components/OrderButton/OrderButton.tsx b/src/components/OrderButton/OrderButton.tsx
index b2a350c04..78a86246e 100644
--- a/src/components/OrderButton/OrderButton.tsx
+++ b/src/components/OrderButton/OrderButton.tsx
@@ -1,4 +1,3 @@
-import classNames from 'classnames';
 import React, { FC } from 'react';
 
 import { IconButton } from '@components/IconButton';
@@ -6,15 +5,12 @@ import { OrderIcon } from '@components/Icons/OrderIcon';
 import { NO_DRAG_CLASSNAME } from '@configs/appConfig';
 import Tooltip from '@uikit/Tooltip';
 
-import styles from './OrderButton.module.scss';
-
 type OrderButtonProps = {
   onClick?: VoidFunction;
   title?: string;
-  disabled?: boolean;
 };
 
-export const OrderButton: FC<OrderButtonProps> = ({ onClick, title, disabled }) => (
+export const OrderButton: FC<OrderButtonProps> = ({ onClick, title }) => (
   <Tooltip
     placement="top"
     title={title || 'Создать ордер'}
@@ -29,11 +25,10 @@ export const OrderButton: FC<OrderButtonProps> = ({ onClick, title, disabled })
     arrow={{ pointAtCenter: true }}
   >
     <IconButton
-      icon={<OrderIcon className={styles.icon} />}
-      className={classNames(NO_DRAG_CLASSNAME, styles.button)}
+      icon={<OrderIcon />}
+      className={NO_DRAG_CLASSNAME}
       size="large"
       onClick={onClick}
-      disabled={disabled}
     />
   </Tooltip>
 );
diff --git a/src/components/ProfileCardModal/hooks/useProfileCardActions.ts b/src/components/ProfileCardModal/hooks/useProfileCardActions.ts
index 11c739511..b2e4c30a0 100644
--- a/src/components/ProfileCardModal/hooks/useProfileCardActions.ts
+++ b/src/components/ProfileCardModal/hooks/useProfileCardActions.ts
@@ -26,7 +26,7 @@ export const useProfileCardActions = ({ userData, widgetId }: UseProfilecCardPro
       return;
     }
 
-    dispatch(openCreateTicketModal({ widgetId, seller: userData?.email }));
+    dispatch(openCreateTicketModal({ widgetId, pattern: 'NOPATTERN', seller: userData?.email }));
     ticketFormController.sendStatistics({ action: TicketStatisticsEvent.Open });
     dispatch(createSPFIOrderRequested());
   };
diff --git a/src/components/RangePicker/rangePickerMad.scss b/src/components/RangePicker/rangePickerMad.scss
index 3c36ad9b1..b15e33bd1 100644
--- a/src/components/RangePicker/rangePickerMad.scss
+++ b/src/components/RangePicker/rangePickerMad.scss
@@ -11,10 +11,6 @@
     border-color: $fill-accent;
   }
 
-  &:focus-within {
-    background: $surface-input-active !important;
-  }
-
   &:has(.ant-picker-input > input:placeholder-shown) {
     border-color: $fill-accent;
     background: $surface-input-active;
diff --git a/src/components/Search/search.scss b/src/components/Search/search.scss
index 705e46cd4..695438f54 100644
--- a/src/components/Search/search.scss
+++ b/src/components/Search/search.scss
@@ -16,17 +16,13 @@
   box-sizing: border-box;
 
   &.open-search-input {
-    outline: 2px solid $action-border-focused-input-active-drag;
+    outline: 3px solid $states-focus-border;
   }
 
   &::placeholder {
     color: $text-interface-secondary-label-no-value;
   }
 
-  &:hover {
-    background-color: $action-surface-hover;
-  }
-
   @media (max-width: 767px) {
     font-size: 16px;
   }
@@ -62,13 +58,12 @@
   width: 14px;
   height: 14px;
   border-radius: 14px;
-  background: transparent;
+  background: $text-b-quanteriary;
   cursor: pointer;
 
   & > svg {
     width: 8px;
     background-color: transparent;
-    color: $surface-icon-basis-active-primary;
   }
 }
 
@@ -99,6 +94,10 @@
       margin-top: 12px;
     }
 
+    &:hover {
+      background-color: rgba(156, 163, 201, 0.2);
+    }
+
     span {
       font-size: 12px;
       text-overflow: ellipsis;
diff --git a/src/components/_stories_/SkeletonInput.stories.tsx b/src/components/SkeletonInput/SkeletonInput.stories.tsx
similarity index 87%
rename from src/components/_stories_/SkeletonInput.stories.tsx
rename to src/components/SkeletonInput/SkeletonInput.stories.tsx
index 0e3d79ff8..d92f91885 100644
--- a/src/components/_stories_/SkeletonInput.stories.tsx
+++ b/src/components/SkeletonInput/SkeletonInput.stories.tsx
@@ -1,10 +1,10 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { SkeletonInput } from '@components/SkeletonInput';
+import { SkeletonInput } from './SkeletonInput';
 
 export default {
-  title: 'Components/Input',
+  title: 'Skeletons/Input',
   component: SkeletonInput,
   parameters: {
     backgrounds: {
diff --git a/src/components/_stories_/SkeletonTable.stories.tsx b/src/components/SkeletonTable/SkeletonTable.stories.tsx
similarity index 85%
rename from src/components/_stories_/SkeletonTable.stories.tsx
rename to src/components/SkeletonTable/SkeletonTable.stories.tsx
index 5e7a0990b..72c804673 100644
--- a/src/components/_stories_/SkeletonTable.stories.tsx
+++ b/src/components/SkeletonTable/SkeletonTable.stories.tsx
@@ -1,10 +1,10 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { SkeletonTable } from '@components/SkeletonTable';
+import { SkeletonTable } from './SkeletonTable';
 
 export default {
-  title: 'Components/SkeletonTable',
+  title: 'Skeletons/Table',
   component: SkeletonTable,
   parameters: {
     backgrounds: {
diff --git a/src/components/Table/components/ColumnsSettingsMenuItem/types.ts b/src/components/Table/components/ColumnsSettingsMenuItem/types.ts
index c1d8e43f9..b8ac86566 100644
--- a/src/components/Table/components/ColumnsSettingsMenuItem/types.ts
+++ b/src/components/Table/components/ColumnsSettingsMenuItem/types.ts
@@ -1,14 +1,13 @@
-import type { CheckboxValue } from '@uikit/Checkbox';
-import type { ColumnType } from 'antd/es/table';
-
-type SimpleColumn<T> = Pick<ColumnType<T>, 'key' | 'dataIndex' | 'title'>;
+import { ResizableColumnType } from '@components/Table/types/columns';
+import { CheckboxValue } from '@uikit/Checkbox';
 
+// TODO: fix any
 export type ColumnsSettingsMenuItemProps<T extends Record<string, unknown>> = {
   /** Состояние колонок */
-  columns: SimpleColumn<T>[];
+  columns: ResizableColumnType<T>[];
 
   /** Параметры названия полей */
-  renderParams?: { title: unknown; value: unknown; key: unknown }; // k
+  renderParams?: { title: any; value: any; key: any }; // k
 
   /** Стейт для чекбоксов видимости колонок */
   checkedList: CheckboxValue[] | undefined;
@@ -16,5 +15,5 @@ export type ColumnsSettingsMenuItemProps<T extends Record<string, unknown>> = {
   onChangeCheckedList: (list: CheckboxValue[]) => void;
 
   /** Коллбек для обработки нажатия на кнопку "Сохранить" */
-  onSaveColumnsHandler(newColumns: SimpleColumn<T>[]): void;
+  onSaveColumnsHandler(newColumns: ResizableColumnType<T>[]): void;
 };
diff --git a/src/components/Table/hooks/useScrollSizes.tsx b/src/components/Table/hooks/useScrollSizes.tsx
index c429068fc..53355f466 100644
--- a/src/components/Table/hooks/useScrollSizes.tsx
+++ b/src/components/Table/hooks/useScrollSizes.tsx
@@ -1,4 +1,4 @@
-import { useTableScrollSizes } from '@hooks/table/useTableScrollSizes';
+import { useEffect, useState } from 'react';
 
 import { HORIZONTAL_VIRTUAL_TABLE_SCROLL_HEIGHT, TABLE_HEADING_HEIGHT } from '../constants/styles';
 
@@ -6,7 +6,48 @@ import { HORIZONTAL_VIRTUAL_TABLE_SCROLL_HEIGHT, TABLE_HEADING_HEIGHT } from '..
 export const HORIZONTAL_SCROLLBAR_TOP_SHIFT = 5;
 
 export const useScrollSizes = () => {
-  const offsetY = TABLE_HEADING_HEIGHT + HORIZONTAL_SCROLLBAR_TOP_SHIFT + HORIZONTAL_VIRTUAL_TABLE_SCROLL_HEIGHT;
+  const [containerSizes, setContainerSizes] = useState({ x: 0, y: 0 });
+  const [containerNode, setContainerNode] = useState<HTMLDivElement | null>(null);
 
-  return useTableScrollSizes({ offsetY });
+  useEffect(() => {
+    if (!containerNode) {
+      return;
+    }
+
+    let frameId: number | null = null;
+
+    const updateTableHeight: ResizeObserverCallback = (entries) => {
+      const entry = entries[0];
+      if (!entry) {
+        return;
+      }
+
+      const heightOffset =
+        TABLE_HEADING_HEIGHT + HORIZONTAL_SCROLLBAR_TOP_SHIFT + HORIZONTAL_VIRTUAL_TABLE_SCROLL_HEIGHT;
+
+      const { height, width } = entry.contentRect;
+      const availableHeight = height - heightOffset;
+      const availableWidth = width;
+
+      if (frameId) {
+        cancelAnimationFrame(frameId);
+      }
+
+      frameId = requestAnimationFrame(() => {
+        setContainerSizes((prev) =>
+          prev.x !== availableWidth || prev.y !== availableHeight ? { y: availableHeight, x: availableWidth } : prev,
+        );
+      });
+    };
+
+    const observer = new ResizeObserver(updateTableHeight);
+
+    observer.observe(containerNode);
+
+    return () => {
+      observer.disconnect();
+    };
+  }, [containerNode]);
+
+  return { containerSizes, setContainerRef: setContainerNode };
 };
diff --git a/src/components/_stories_/Tag.stories.tsx b/src/components/Tag/Tag.stories.tsx
similarity index 93%
rename from src/components/_stories_/Tag.stories.tsx
rename to src/components/Tag/Tag.stories.tsx
index 561656e9f..99c748d5a 100644
--- a/src/components/_stories_/Tag.stories.tsx
+++ b/src/components/Tag/Tag.stories.tsx
@@ -1,11 +1,11 @@
 import React from 'react';
 
-import CustomTag from '@components/Tag';
+import CustomTag from './index';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
 const meta: Meta<typeof CustomTag> = {
-  title: 'Components/CustomTag',
+  title: 'CustomTag',
   component: CustomTag,
   tags: ['autodocs'],
 } as Meta<typeof CustomTag>;
diff --git a/src/components/TooltipWithBtn/TooltipWithBtn.module.scss b/src/components/TooltipWithBtn/TooltipWithBtn.module.scss
deleted file mode 100644
index 3c2e189a4..000000000
--- a/src/components/TooltipWithBtn/TooltipWithBtn.module.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-.container {
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-}
diff --git a/src/components/TooltipWithBtn/TooltipWithBtn.tsx b/src/components/TooltipWithBtn/TooltipWithBtn.tsx
deleted file mode 100644
index 73a3d7d2e..000000000
--- a/src/components/TooltipWithBtn/TooltipWithBtn.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import React from 'react';
-
-import { useDispatch } from 'react-redux';
-
-import { openViewCommentModalRequested } from '@store/actions/tradeJournal';
-import { Button } from '@uikit/Button';
-import Tooltip from '@uikit/Tooltip';
-
-import { TViewCommentModalPayloadProps } from 'types/TradeJournal';
-
-import styles from './TooltipWithBtn.module.scss';
-
-type TTooltipWithBtnProps = Pick<TViewCommentModalPayloadProps, 'writerTrId'> & {
-  text?: string;
-  length?: number;
-};
-
-/**
- * Тултип с кнопкой, если текст длинный, то по нажатию на кнопку открывает модалку с полным комментом.
- *
- * Используется в TradeJournal & TradeJournalDetails.
- */
-const TooltipWithBtn: React.FC<TTooltipWithBtnProps> = ({ text, writerTrId, length = 20 }) => {
-  const dispatch = useDispatch();
-
-  const isTextLengthBiggerThanMinRequiredLength = text && text?.length > length;
-  const formattedText = isTextLengthBiggerThanMinRequiredLength ? `${text.slice(0, length)}...` : text;
-
-  return (
-    <Tooltip
-      title={
-        isTextLengthBiggerThanMinRequiredLength ? (
-          <div className={styles.container}>
-            {formattedText}
-
-            <Button
-              text="Подробней"
-              onClick={() => dispatch(openViewCommentModalRequested({ comment: text, writerTrId }))}
-              variant="unfilled-secondary"
-            />
-          </div>
-        ) : null
-      }
-    >
-      {formattedText}
-    </Tooltip>
-  );
-};
-
-export { TooltipWithBtn };
diff --git a/src/components/TooltipWithBtn/index.ts b/src/components/TooltipWithBtn/index.ts
deleted file mode 100644
index 4b5d37fc3..000000000
--- a/src/components/TooltipWithBtn/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { TooltipWithBtn } from './TooltipWithBtn';
diff --git a/src/components/_stories_/ValueRangeInput.stories.tsx b/src/components/ValueRangeInput/ValueRangeInput.stories.tsx
similarity index 90%
rename from src/components/_stories_/ValueRangeInput.stories.tsx
rename to src/components/ValueRangeInput/ValueRangeInput.stories.tsx
index 51b8d50d7..936aa6d56 100644
--- a/src/components/_stories_/ValueRangeInput.stories.tsx
+++ b/src/components/ValueRangeInput/ValueRangeInput.stories.tsx
@@ -1,9 +1,11 @@
-import ValueRangeInput from '@components/ValueRangeInput';
+import React from 'react';
+
+import ValueRangeInput from './index';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
 const meta: Meta<typeof ValueRangeInput> = {
-  title: 'Components/ValueRangeInput',
+  title: 'Simple Components/ValueRangeInput',
   component: ValueRangeInput,
   tags: ['autodocs'],
 } as Meta<typeof ValueRangeInput>;
diff --git a/src/components/WidgetHeader/widgetHeader.module.scss b/src/components/WidgetHeader/widgetHeader.module.scss
index 3bb3160cc..596157d04 100644
--- a/src/components/WidgetHeader/widgetHeader.module.scss
+++ b/src/components/WidgetHeader/widgetHeader.module.scss
@@ -163,7 +163,7 @@
 
   display: flex;
   flex-direction: column;
-  background-color: $bg-base-dropdown;
+  background-color: $background-secondary;
 
   // outline: 1px solid #273166;
 
@@ -203,7 +203,7 @@
     justify-content: start;
 
     & span {
-      color: var(--thm-text-interface-primary-primary);
+      color: $text-b-primary;
       font-weight: 400;
     }
 
@@ -220,7 +220,7 @@
     }
 
     &:hover {
-      background-color: transparent;
+      background-color: $background-secondary;
     }
   }
 
diff --git a/src/components/_stories_/Icons.stories.tsx b/src/components/_stories_/Icons.stories.tsx
deleted file mode 100644
index 722d508a9..000000000
--- a/src/components/_stories_/Icons.stories.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import { ComponentStory } from '@storybook/react';
-import React from 'react';
-
-import Icons from '@components/Icons';
-
-const iconsList = Object.entries(Icons);
-
-export default {
-  title: 'Components/Icons',
-};
-
-const style = {
-  height: '48px',
-  width: '48px',
-  backgroundColor: 'antiquewhite',
-  fill: 'black',
-};
-
-export const Icons2: ComponentStory<any> = function (args) {
-  return (
-    <div>
-      {iconsList.map(([iconKey, IconComponent]) => (
-        <div
-          style={{ margin: '12px', border: '1px solid black', padding: '24px', display: 'inline-block' }}
-          key={iconKey}
-        >
-          <IconComponent {...args} />
-          <div>{iconKey}</div>
-        </div>
-      ))}
-    </div>
-  );
-};
-Icons2.args = { style };
diff --git a/src/components/renders/FormattedNumberRender/FormattedNumberRender.test.tsx b/src/components/renders/FormattedNumberRender/FormattedNumberRender.test.tsx
index 946bed03f..029742bea 100644
--- a/src/components/renders/FormattedNumberRender/FormattedNumberRender.test.tsx
+++ b/src/components/renders/FormattedNumberRender/FormattedNumberRender.test.tsx
@@ -21,7 +21,7 @@ describe('FormattedNumberRender', () => {
   it('should render number with custom fraction digits', () => {
     const result = FormattedNumberRender('1234567.891234', 4);
     const { container } = render(result as React.ReactElement);
-    expect(container.textContent).toBe(`1${SPACE_CHAR}234${SPACE_CHAR}567,8912`);
+    expect(container.textContent).toBe(`1${SPACE_CHAR}234${SPACE_CHAR}567,89123`);
   });
 
   it('should handle zero value correctly', () => {
@@ -33,12 +33,12 @@ describe('FormattedNumberRender', () => {
   it('should handle negative numbers correctly', () => {
     const result = FormattedNumberRender('-1234567.891234', 2);
     const { container } = render(result as React.ReactElement);
-    expect(container.textContent).toBe(`-1${SPACE_CHAR}234${SPACE_CHAR}567,89`);
+    expect(container.textContent).toBe(`-1${SPACE_CHAR}234${SPACE_CHAR}567,891`);
   });
 
   it('should handle decimal numbers with less fraction digits than requested', () => {
     const result = FormattedNumberRender('1234567.89', 4);
     const { container } = render(result as React.ReactElement);
-    expect(container.textContent).toBe(`1${SPACE_CHAR}234${SPACE_CHAR}567,89`);
+    expect(container.textContent).toBe(`1${SPACE_CHAR}234${SPACE_CHAR}567`);
   });
 });
diff --git a/src/components/renders/FormattedNumberRender/utils.ts b/src/components/renders/FormattedNumberRender/utils.ts
index a3615511e..9dbb1417b 100644
--- a/src/components/renders/FormattedNumberRender/utils.ts
+++ b/src/components/renders/FormattedNumberRender/utils.ts
@@ -5,10 +5,10 @@ export const splitNumber = (text: string, fractionDigits = 2) => {
     minimumFractionDigits: 0,
     maximumFractionDigits: 0,
   });
-
-  const splittedFractionDigits: string | undefined = splittedCellNumber[1]
-    ? splittedCellNumber[1].slice(0, fractionDigits)
-    : undefined;
+  const splittedFractionDigits: string | undefined =
+    splittedCellNumber[1] && splittedCellNumber[1].length >= fractionDigits
+      ? splittedCellNumber[1].slice(0, fractionDigits + 1)
+      : undefined;
 
   return { splittedNumber, splittedFractionDigits };
 };
diff --git a/src/configs/appConfig.ts b/src/configs/appConfig.ts
index 6c2198360..3aa7b5123 100644
--- a/src/configs/appConfig.ts
+++ b/src/configs/appConfig.ts
@@ -55,8 +55,6 @@ export const WIDGETS_CAN_BE_MULTIPLE_MASTERS = [
   WidgetContentType.instruments,
   WidgetContentType.ordersJournal,
   WidgetContentType.ntbIndexes,
-  WidgetContentType.ntbLogisticAuto,
-  WidgetContentType.ntbLogisticFreight,
 ];
 
 export const BIND_WIDGET_TYPES: BindWidgetOptions = {
@@ -79,8 +77,6 @@ export const BIND_OPTIONS: BindWidgetOptions<string[]> = {
   glass: ['aboutInstruments', 'graphic', 'issuerCard'],
   graphic: ['aboutInstruments', 'glass', 'issuerCard'],
   ntbIndexes: ['graphic'],
-  ntbLogisticAuto: ['graphic'],
-  ntbLogisticFreight: ['graphic'],
 };
 
 export const TRADE_PERMISSION = 'TRADE';
diff --git a/src/hooks/__tests__/useDetectKeyboardOpen.test.ts b/src/hooks/__tests__/useDetectKeyboardOpen.test.ts
deleted file mode 100644
index 78ed1a19b..000000000
--- a/src/hooks/__tests__/useDetectKeyboardOpen.test.ts
+++ /dev/null
@@ -1,144 +0,0 @@
-import { useDetectKeyboardOpen } from '@hooks/useDetectKeyboardOpen';
-import { renderHook, act } from '@testing-library/react';
-
-// Мокаем window.visualViewport
-const mockVisualViewport = {
-    height: 800,
-    addEventListener: jest.fn(),
-    removeEventListener: jest.fn(),
-};
-
-describe('useDetectKeyboardOpen', () => {
-    beforeEach(() => {
-        // Настраиваем моки перед каждым тестом
-        Object.defineProperty(window, 'innerHeight', {
-            writable: true,
-            configurable: true,
-            value: 800,
-        });
-
-        Object.defineProperty(window, 'visualViewport', {
-            writable: true,
-            configurable: true,
-            value: mockVisualViewport,
-        });
-
-        // Очищаем вызовы моков
-        jest.clearAllMocks();
-    });
-
-    afterEach(() => {
-        // Восстанавливаем оригинальный visualViewport
-        Object.defineProperty(window, 'visualViewport', {
-            writable: true,
-            configurable: true,
-            value: undefined,
-        });
-    });
-
-    it('should initialize with isKeyboardOpen as false', () => {
-        const { result } = renderHook(() => useDetectKeyboardOpen());
-
-        expect(result.current).toBe(false);
-    });
-
-    it('should return false when visualViewport is not available', () => {
-        // Удаляем visualViewport
-        Object.defineProperty(window, 'visualViewport', {
-            writable: true,
-            configurable: true,
-            value: undefined,
-        });
-
-        const { result } = renderHook(() => useDetectKeyboardOpen());
-
-        expect(result.current).toBe(false);
-    });
-
-    it('should detect keyboard open when innerHeight > visualViewport.height + 150', () => {
-        const { result } = renderHook(() => useDetectKeyboardOpen());
-
-        // Симулируем открытие клавиатуры
-        // Уменьшаем visualViewport.height (клавиатура заняла место)
-        Object.defineProperty(window, 'visualViewport', {
-            writable: true,
-            configurable: true,
-            value: {
-                ...mockVisualViewport,
-                height: 500, // visualViewport стал меньше
-            },
-        });
-
-        // Вызываем обработчик resize
-        const resizeHandler = mockVisualViewport.addEventListener.mock.calls[0][1];
-        act(() => {
-            resizeHandler();
-        });
-
-        expect(result.current).toBe(true);
-    });
-
-    it('should detect keyboard closed when innerHeight <= visualViewport.height + 150', () => {
-        const { result } = renderHook(() => useDetectKeyboardOpen());
-
-        // Симулируем закрытие клавиатуры
-        Object.defineProperty(window, 'visualViewport', {
-            writable: true,
-            configurable: true,
-            value: {
-                ...mockVisualViewport,
-                height: 700, // visualViewport почти как innerHeight
-            },
-        });
-
-        const resizeHandler = mockVisualViewport.addEventListener.mock.calls[0][1];
-        act(() => {
-            resizeHandler();
-        });
-
-        expect(result.current).toBe(true);
-    });
-
-    it('should subscribe to resize events on mount', () => {
-        renderHook(() => useDetectKeyboardOpen());
-
-        expect(mockVisualViewport.addEventListener).toHaveBeenCalledWith(
-            'resize',
-            expect.any(Function)
-        );
-    });
-
-    it('should unsubscribe from resize events on unmount', () => {
-        const { unmount } = renderHook(() => useDetectKeyboardOpen());
-
-        unmount();
-
-        expect(mockVisualViewport.removeEventListener).toHaveBeenCalledWith(
-            'resize',
-            expect.any(Function)
-        );
-    });
-
-    it('should update state when resize event is triggered', () => {
-        const { result } = renderHook(() => useDetectKeyboardOpen());
-
-        // Получаем сохраненный обработчик
-        const resizeHandler = mockVisualViewport.addEventListener.mock.calls[0][1];
-
-        // Имитируем открытие клавиатуры
-        Object.defineProperty(window, 'visualViewport', {
-            writable: true,
-            configurable: true,
-            value: {
-                ...mockVisualViewport,
-                height: 400,
-            },
-        });
-
-        act(() => {
-            resizeHandler();
-        });
-
-        expect(result.current).toBe(true);
-    });
-});
\ No newline at end of file
diff --git a/src/hooks/mxt/__tests__/useMxtData.test.ts b/src/hooks/mxt/__tests__/useMxtData.test.ts
index 7b9392507..dc43e0de7 100644
--- a/src/hooks/mxt/__tests__/useMxtData.test.ts
+++ b/src/hooks/mxt/__tests__/useMxtData.test.ts
@@ -1,11 +1,14 @@
-import { act } from '@testing-library/react';
+import { IMessage } from '@stomp/stompjs';
 
+import type { MxtMeta } from '@api/websokets/classes/WSMXTStompClient';
 import { useMxtData } from '@hooks/mxt/useMxtData';
-
-import { mxtActions } from '@store/actions/mxt';
 import { renderHookWithProviders } from '@utils/test-utils';
+import { mxtActions } from '@store/actions/mxt';
+import { act } from '@testing-library/react';
 
-import type { MxtMeta } from '@api/websokets/classes/WSMXTStompClient';
+interface MockStomp {
+  simulateMessage(destination: string, message: IMessage): void;
+}
 
 const TEST_META: MxtMeta = {
   version: 'test',
@@ -50,12 +53,15 @@ const TEST_META: MxtMeta = {
 jest.mock('@api/websokets/classes/WSMXTStompClient');
 jest.mock('@stomp/stompjs');
 
+const TEST_DATA = {
+  orderMMRepo: { 1: { id: '1', name: 'test_value', test: true } },
+};
+
 const preloadedState = {
   mxtSlice: {
     objects: {
       orderMMRepo: { 1: { id: 1, name: 'test_value', test: true } },
     },
-    objectStates: {},
     metadata: TEST_META,
   },
 };
diff --git a/src/hooks/mxt/useMxtData.ts b/src/hooks/mxt/useMxtData.ts
index 101443fcb..4e6e3ff85 100644
--- a/src/hooks/mxt/useMxtData.ts
+++ b/src/hooks/mxt/useMxtData.ts
@@ -1,67 +1,39 @@
 import { useEffect, useMemo } from 'react';
 import { useDispatch } from 'react-redux';
 
+import { MxtFieldMeta } from '@api/websokets/classes/WSMXTStompClient';
+import { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
 import { useAppSelect } from '@hooks/useAppSelector';
 import { mxtActions } from '@store/actions/mxt';
 import { mxtSelectors } from '@store/selectors/mxt';
-import { MxtObjectStatus } from '@store/slices/mxt';
+import { MxtDataKey } from '@widgets/DepositCcpTables/const';
 
-import type { MxtFieldMeta } from '@api/websokets/classes/WSMXTStompClient';
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-
-export function useMxtData(dataKeys: readonly MxtDataKey[]) {
+export function useMxtData(dataKeys: MxtDataKey[]) {
   const dispatch = useDispatch();
-  const dataKeysSignature = dataKeys.join('|');
-  const stableDataKeys = useMemo(
-    () => (dataKeysSignature ? (dataKeysSignature.split('|') as MxtDataKey[]) : []),
-    [dataKeysSignature],
-  );
-
   useEffect(() => {
     dispatch(mxtActions.fetchMetadata());
   }, [dispatch]);
 
-  const metadata = useAppSelect(mxtSelectors.metadata);
-  const viewsMetaSelector = useMemo(() => mxtSelectors.getViewsMeta(stableDataKeys), [stableDataKeys]);
-  const viewsMeta = useAppSelect(viewsMetaSelector);
+  const viewsMeta = useAppSelect(mxtSelectors.getViewsMeta(dataKeys));
 
   const sourceKeys = useMemo(
-    () =>
-      Array.from(
-        new Set(
-          stableDataKeys.flatMap((dataKey) => {
-            if (viewsMeta[dataKey]) {
-              return viewsMeta[dataKey].sources;
-            }
-
-            if (metadata?.objects[dataKey]) {
-              return dataKey;
-            }
-
-            return [];
-          }),
-        ),
-      ),
-    [metadata, stableDataKeys, viewsMeta],
+    () => dataKeys.flatMap((dataKey) => (viewsMeta[dataKey] ? viewsMeta[dataKey].sources : dataKey)),
+    [dataKeys, viewsMeta],
   );
 
-  const objectsMetaSelector = useMemo(() => mxtSelectors.getObjectsMeta(sourceKeys), [sourceKeys]);
-  const objectsMeta = useAppSelect(objectsMetaSelector);
-  const sourceObjectsSelector = useMemo(() => mxtSelectors.getObjectsData(sourceKeys), [sourceKeys]);
-  const sourceObjects = useAppSelect(sourceObjectsSelector);
-  const objectStatesSelector = useMemo(() => mxtSelectors.getObjectStates(sourceKeys), [sourceKeys]);
-  const objectStates = useAppSelect(objectStatesSelector);
+  const objectsMeta = useAppSelect(mxtSelectors.getObjectsMeta(sourceKeys));
 
   useEffect(() => {
-    if (metadata) {
-      sourceKeys.forEach((sourceKey) => dispatch(mxtActions.subscribeObjectState(sourceKey)));
-    }
-  }, [dispatch, metadata, sourceKeys]);
+    (<MxtDataKey[]>Object.keys(objectsMeta)).forEach((sourceKey) =>
+      dispatch(mxtActions.subscribeObjectState(sourceKey)),
+    );
+  }, [dispatch, objectsMeta]);
+
+  const sourceObjects = useAppSelect(mxtSelectors.getObjectsData(sourceKeys));
 
   const dataRecords = useMemo(() => {
     const records: Partial<Record<MxtDataKey, Record<number, MxtObject>>> = {};
-    stableDataKeys.forEach((dataKey) => {
+    dataKeys.forEach((dataKey) => {
       if (viewsMeta[dataKey]) {
         const { sources } = viewsMeta[dataKey];
         sources
@@ -72,16 +44,16 @@ export function useMxtData(dataKeys: readonly MxtDataKey[]) {
               ...sourceObjects[sourceKey],
             };
           });
-      } else if (sourceObjects[dataKey]) {
+      } else {
         records[dataKey] = sourceObjects[dataKey];
       }
     });
     return records;
-  }, [stableDataKeys, viewsMeta, sourceObjects]);
+  }, [dataKeys, viewsMeta, sourceObjects]);
 
   const dataFields = useMemo(() => {
     const fieldRecords: Partial<Record<MxtDataKey, Record<string, MxtFieldMeta>>> = {};
-    stableDataKeys.forEach((dataKey) => {
+    dataKeys.forEach((dataKey) => {
       if (viewsMeta[dataKey]) {
         const { sources, fields } = viewsMeta[dataKey];
         const fieldCodes = Object.keys(fields);
@@ -89,11 +61,6 @@ export function useMxtData(dataKeys: readonly MxtDataKey[]) {
           .filter((sourceKey) => sourceObjects[sourceKey])
           .forEach((sourceKey) => {
             const sourceObj = objectsMeta[sourceKey];
-
-            if (!sourceObj) {
-              return;
-            }
-
             fieldRecords[dataKey] = {
               ...fieldRecords[dataKey],
               ...Object.fromEntries(
@@ -106,22 +73,10 @@ export function useMxtData(dataKeys: readonly MxtDataKey[]) {
       }
     });
     return fieldRecords;
-  }, [stableDataKeys, viewsMeta, sourceObjects, objectsMeta]);
-
-  const errors = useMemo(
-    () =>
-      Object.fromEntries(
-        sourceKeys
-          .filter((sourceKey) => objectStates[sourceKey]?.status === MxtObjectStatus.Error)
-          .map((sourceKey) => [sourceKey, objectStates[sourceKey]?.error]),
-      ),
-    [objectStates, sourceKeys],
-  );
+  }, [dataKeys, viewsMeta, sourceObjects, objectsMeta]);
 
   return {
     dataRecords,
     dataFields,
-    isLoading: sourceKeys.some((sourceKey) => objectStates[sourceKey]?.status !== MxtObjectStatus.Loaded),
-    errors,
   };
 }
diff --git a/src/hooks/spfiDrafts/useBrokerDraftsData.ts b/src/hooks/spfiDrafts/useBrokerDraftsData.ts
index 019f1d588..d30ef4780 100644
--- a/src/hooks/spfiDrafts/useBrokerDraftsData.ts
+++ b/src/hooks/spfiDrafts/useBrokerDraftsData.ts
@@ -16,7 +16,7 @@ const IS_NEW_RESET_TIMEOUT_MS = 10000;
 
 const getProductLabel = (draft: SpfiDraft) => TicketProductLabels[draft.product] ?? draft.product;
 const getDraftDirectionLabel = (draft: SpfiDraft) => {
-  if ([TicketProduct.XCCY, TicketProduct.BASIS_XCCY].includes(draft.product)) {
+  if (draft.product === TicketProduct.XCCY) {
     return getDirectionLabel(draft.direction, draft.currency1 ?? undefined, draft.currency2 ?? undefined);
   }
 
diff --git a/src/hooks/spfiDrafts/useSuccessOrderFromDraftCreateListener.ts b/src/hooks/spfiDrafts/useSuccessOrderFromDraftCreateListener.ts
index 48d50b739..dc1772233 100644
--- a/src/hooks/spfiDrafts/useSuccessOrderFromDraftCreateListener.ts
+++ b/src/hooks/spfiDrafts/useSuccessOrderFromDraftCreateListener.ts
@@ -7,7 +7,7 @@ import { CHANGE_DRAFT_STATUS_EVENT } from '@modules/widgets/shared';
 import { TicketType } from 'types/SapfirSpfi';
 import { SpfiDraftStatus } from 'types/spfiDrafts';
 
-type CommunicatorMessagePayload = { orderId?: number; draftId?: number; type: TicketType; status?: SpfiDraftStatus };
+type CommunicatorMessagePayload = { orderId: number; draftId?: number; type: TicketType };
 
 const StatusMap: Partial<Record<TicketType, SpfiDraftStatus>> = {
   [TicketType.CreateFromDraft]: SpfiDraftStatus.EXECUTE,
@@ -20,10 +20,13 @@ const StatusMap: Partial<Record<TicketType, SpfiDraftStatus>> = {
  * Изменение статуса брокерской заявки при получении event-а после действия с ордером (создание/снятие/подтверждение)
  */
 export const useChangeDraftStatusEventListener = () => {
-  const handleDraftStatusChange = useCallback(({ draftId, orderId, type, status }: CommunicatorMessagePayload) => {
-    const newStatus = status ?? StatusMap[type];
-    if (newStatus) {
-      wsSpfiDraftsStompClient.changeStatus({ orderId, draftId, status: newStatus });
+  const handleDraftStatusChange = useCallback(({ draftId, orderId, type }: CommunicatorMessagePayload) => {
+    if (orderId && StatusMap[type]) {
+      if (draftId && type === TicketType.CreateFromDraft) {
+        wsSpfiDraftsStompClient.changeStatus({ orderId, draftId, status: StatusMap[type] });
+      } else {
+        wsSpfiDraftsStompClient.changeStatus({ orderId, status: StatusMap[type] });
+      }
     }
   }, []);
 
diff --git a/src/hooks/table/useTableScrollSizes.ts b/src/hooks/table/useTableScrollSizes.ts
deleted file mode 100644
index 2220d6c2a..000000000
--- a/src/hooks/table/useTableScrollSizes.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { useEffect, useState } from 'react';
-
-type UseScrollSizesProps = {
-  offsetX?: number;
-  offsetY?: number;
-};
-
-export const useTableScrollSizes = ({ offsetX = 0, offsetY = 0 }: UseScrollSizesProps) => {
-  const [containerSizes, setContainerSizes] = useState({ x: 0, y: 0 });
-  const [containerNode, setContainerNode] = useState<HTMLDivElement | null>(null);
-
-  useEffect(() => {
-    if (!containerNode) {
-      return;
-    }
-
-    let frameId: number | null = null;
-
-    const updateTableHeight: ResizeObserverCallback = (entries) => {
-      const entry = entries[0];
-      if (!entry) {
-        return;
-      }
-
-      const { height, width } = entry.contentRect;
-      const availableHeight = height - offsetY;
-      const availableWidth = width - offsetX;
-
-      if (frameId) {
-        cancelAnimationFrame(frameId);
-      }
-
-      frameId = requestAnimationFrame(() => {
-        setContainerSizes((prev) =>
-          prev.x !== availableWidth || prev.y !== availableHeight ? { y: availableHeight, x: availableWidth } : prev,
-        );
-      });
-    };
-
-    const observer = new ResizeObserver(updateTableHeight);
-
-    observer.observe(containerNode);
-
-    return () => {
-      observer.disconnect();
-    };
-  }, [containerNode, offsetX, offsetY]);
-
-  return { containerSizes, setContainerRef: setContainerNode, containerNode };
-};
diff --git a/src/hooks/useDetectKeyboardOpen.ts b/src/hooks/useDetectKeyboardOpen.ts
index a38876736..fa43190df 100644
--- a/src/hooks/useDetectKeyboardOpen.ts
+++ b/src/hooks/useDetectKeyboardOpen.ts
@@ -11,7 +11,8 @@ export const useDetectKeyboardOpen = () => {
         const handleResize = () => {
             // Сравниваем текущую высоту окна с полной высотой экрана
             // Если высота visualViewport значительно меньше, значит клавиатура открыта
-            const isCurrentlyOpen = window.innerHeight > (window.visualViewport?.height ?? 0 + 150);
+            const viewportHeight = window.visualViewport?.height ?? window.innerHeight;
+            const isCurrentlyOpen = window.innerHeight - viewportHeight > 150;
             setIsKeyboardOpen(isCurrentlyOpen);
         };
 
diff --git a/src/hooks/useLocalisation.ts b/src/hooks/useLocalisation.ts
index 2e7e00f46..a96355b62 100644
--- a/src/hooks/useLocalisation.ts
+++ b/src/hooks/useLocalisation.ts
@@ -1,9 +1,10 @@
-import { getLocalisation } from '../localisation/getLocalisation';
+import { en } from '../localisation/en';
+import { ru } from '../localisation/ru';
 
 import { useAppSelect } from './useAppSelector';
 
 import type { LocalisationObject } from '../localisation/ru';
 
 export function useLocalisation(): LocalisationObject {
-  return getLocalisation(useAppSelect((state) => state.localisation.localisation));
+  return useAppSelect((state) => state.localisation.localisation) === 'ru' ? ru : en;
 }
diff --git a/src/hooks/useWidgetNamePrefix.ts b/src/hooks/useWidgetNamePrefix.ts
index 3ada91d70..7fb058fe7 100644
--- a/src/hooks/useWidgetNamePrefix.ts
+++ b/src/hooks/useWidgetNamePrefix.ts
@@ -55,6 +55,7 @@ export function useWidgetNamePrefix(type?: WidgetContentType): UseWidgetNameResu
     depositCcpTradeTables: localisation.depositCcpTradeTables,
     depositCcpReferenceTables: localisation.depositCcpReferenceTables,
     depositCcpRiskTables: localisation.depositCcpRiskTables,
+    userAdministration: localisation.adminWidget,
   };
 
   const getWidgetNamePrefixByType = (widgetType: WidgetContentType): string => names[widgetType];
diff --git a/src/localisation/en.ts b/src/localisation/en.ts
index c5ad0e4a7..e1e658609 100644
--- a/src/localisation/en.ts
+++ b/src/localisation/en.ts
@@ -78,4 +78,5 @@ export const en: LocalisationObject = {
     nothingFound: 'No client codes available',
     submitError: 'The order could not be submitted. Check the parameters and try again.',
   },
+  adminWidget: 'Administration',
 };
diff --git a/src/localisation/getLocalisation.ts b/src/localisation/getLocalisation.ts
deleted file mode 100644
index caf869a55..000000000
--- a/src/localisation/getLocalisation.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { en } from './en';
-import { ru } from './ru';
-
-import type { LocalisationObject } from './ru';
-
-export type LocalisationCode = 'ru' | 'en';
-
-export const getLocalisation = (localisation: LocalisationCode): LocalisationObject =>
-  localisation === 'ru' ? ru : en;
diff --git a/src/localisation/ru.ts b/src/localisation/ru.ts
index 7381c54e9..0c8544b7e 100644
--- a/src/localisation/ru.ts
+++ b/src/localisation/ru.ts
@@ -1,3 +1,5 @@
+import TradeJournalDetails from '@widgets/TradeJournalDetails';
+
 export const ru = {
   newWorkspace: 'Новый рабочий стол',
   newWatchList: 'Избранный список инструментов',
@@ -76,6 +78,7 @@ export const ru = {
     nothingFound: 'Нет доступных кодов клиента',
     submitError: 'Не удалось отправить заявку. Проверьте параметры и попробуйте ещё раз.',
   },
+  adminWidget: 'Администрирование',
 };
 
 export type LocalisationObject = typeof ru;
diff --git a/src/modules/MXTForms/AddressDepositForm/AddressDepositForm.tsx b/src/modules/MXTForms/AddressDepositForm/AddressDepositForm.tsx
deleted file mode 100644
index a89227f57..000000000
--- a/src/modules/MXTForms/AddressDepositForm/AddressDepositForm.tsx
+++ /dev/null
@@ -1,235 +0,0 @@
-import React, { useMemo } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { AccountSelectionBlock } from '@modules/MXTForms/shared/accountSelection';
-import { CommissionField } from '@modules/MXTForms/shared/commission';
-import { DEFAULT_DIRECTION, DEFAULT_REFERENCE_PRICE_METHOD } from '@modules/MXTForms/shared/model';
-import { DepositNumericFieldsBlock } from '@modules/MXTForms/shared/numericFields';
-import {
-  depositFormStyles as styles,
-  DepositModalFrame,
-  DepositSelect,
-  FormDataBoundary,
-  FormRow,
-} from '@modules/MXTForms/shared/ui';
-import { addressDepositFormConfirmRequested, addressDepositFormSubmitReset } from '@store/actions/addressDepositForm';
-import { closeModalRequested } from '@store/actions/modal';
-import { addressDepositFormSubmitSelector } from '@store/selectors/addressDepositForm';
-
-import { getAddressDepositConfirmRows } from './model/confirmRows';
-import {
-  ADDRESS_DEPOSIT_CONFIRM_DESCRIPTION,
-  ADDRESS_DEPOSIT_CURRENCY_OPTIONS,
-  ADDRESS_DEPOSIT_DEFAULT_MODE,
-  ADDRESS_DEPOSIT_FORM_SUBTITLE,
-  ADDRESS_DEPOSIT_FUNDING_PRICE_DECIMAL_SCALE,
-} from './model/constants';
-import { useAddressDepositFormModel } from './model/useAddressDepositFormModel';
-
-import type { AddressDepositFormProps } from './types';
-
-export const AddressDepositForm = ({
-  id,
-  direction = DEFAULT_DIRECTION,
-  mode = ADDRESS_DEPOSIT_DEFAULT_MODE,
-  referencePriceMethod = DEFAULT_REFERENCE_PRICE_METHOD,
-}: AddressDepositFormProps) => {
-  const dispatch = useDispatch();
-  const { loading: isSubmitLoading } = useAppSelect(addressDepositFormSubmitSelector(id));
-
-  const formModel = useAddressDepositFormModel({
-    formId: id,
-    isSubmitLoading,
-  });
-  const {
-    accountSelection,
-    canCalculateCommission,
-    collateralIssueSelection,
-    commission,
-    commissionCurrencyRate,
-    commissionReduction,
-    counterPartySelection,
-    effectiveRate,
-    formDataError,
-    hasReturnDate,
-    isCnyCurrency,
-    isCommissionLoading,
-    isFormDataLoading,
-    isSubmitDisabled,
-    lotSize,
-    numericFields,
-    priceRange,
-    requestVolumeDecimalScale,
-    returnDateText,
-    settlementDateSelection,
-    updateAccount,
-    updateMarketplace,
-    updateValue,
-    values,
-  } = formModel;
-  const confirmRows = useMemo(
-    () =>
-      getAddressDepositConfirmRows({
-        accountOptions: accountSelection.accountOptions,
-        accountsById: accountSelection.accountsById,
-        collateralIssueOptions: collateralIssueSelection.options,
-        counterPartyOptions: counterPartySelection.options,
-        direction,
-        durationOptions: settlementDateSelection.durationOptions,
-        mode,
-        referencePriceMethod,
-        requestVolumeDecimalScale,
-        roundedRequestVolume: numericFields.roundedRequestVolumeHint,
-        values,
-      }),
-    [
-      accountSelection.accountOptions,
-      accountSelection.accountsById,
-      collateralIssueSelection.options,
-      counterPartySelection.options,
-      direction,
-      mode,
-      numericFields.roundedRequestVolumeHint,
-      referencePriceMethod,
-      requestVolumeDecimalScale,
-      settlementDateSelection.durationOptions,
-      values,
-    ],
-  );
-  const handleClose = () => {
-    dispatch(addressDepositFormSubmitReset({ formId: id }));
-    dispatch(closeModalRequested(id));
-  };
-
-  const handleSubmit = () => {
-    if (isSubmitDisabled) {
-      return;
-    }
-
-    dispatch(addressDepositFormSubmitReset({ formId: id }));
-    dispatch(
-      addressDepositFormConfirmRequested({
-        formId: id,
-        values,
-        lotSize,
-        currencyRate: commissionCurrencyRate,
-        rows: confirmRows,
-        description: ADDRESS_DEPOSIT_CONFIRM_DESCRIPTION,
-        footerText: `ПЭП: ${accountSelection.pepCode}`,
-      }),
-    );
-  };
-
-  return (
-    <DepositModalFrame
-      subtitle={ADDRESS_DEPOSIT_FORM_SUBTITLE}
-      pepCode={accountSelection.pepCode}
-      submitDisabled={isSubmitDisabled}
-      onClose={handleClose}
-      onSubmit={handleSubmit}
-    >
-      <FormDataBoundary
-        isLoading={isFormDataLoading}
-        error={formDataError}
-      >
-        <div className={styles.body}>
-          <FormRow label="Партнер *">
-            <DepositSelect
-              value={String(values.counterPartyId ?? '')}
-              values={counterPartySelection.options}
-              isLoading={counterPartySelection.isLoading}
-              placeholder="Выберите партнера"
-              onChange={(value) => updateValue('counterPartyId', Number(value))}
-            />
-          </FormRow>
-
-          <FormRow label="Инструмент *">
-            <DepositSelect
-              value={String(values.collateralIssueId ?? '')}
-              values={collateralIssueSelection.options}
-              isLoading={collateralIssueSelection.isLoading}
-              placeholder="Выберите инструмент"
-              onChange={(value) => updateValue('collateralIssueId', Number(value))}
-            />
-          </FormRow>
-
-          <FormRow label="Дата размещения *">
-            <DepositSelect
-              value={values.valueDate}
-              values={settlementDateSelection.options}
-              isLoading={settlementDateSelection.isLoading}
-              placeholder="Выберите дату"
-              allowClear
-              onClear={() => updateValue('valueDate', '')}
-              onChange={(value) => updateValue('valueDate', value)}
-            />
-          </FormRow>
-
-          <FormRow label="Срок *">
-            <DepositSelect
-              value={String(values.fundingDuration ?? '')}
-              values={settlementDateSelection.durationOptions}
-              isLoading={settlementDateSelection.isLoading}
-              width={200}
-              placeholder="Выберите срок"
-              popupClassName={styles.durationSelectPopup}
-              allowClear
-              onClear={() => updateValue('fundingDuration', undefined)}
-              onChange={(value) => updateValue('fundingDuration', Number(value))}
-            />
-          </FormRow>
-
-          <FormRow label="Дата возврата">
-            <span className={`${styles.rowValueText} ${hasReturnDate ? styles.valueText : styles.mutedText}`}>
-              {returnDateText}
-            </span>
-          </FormRow>
-
-          <FormRow label="Валюта *">
-            <DepositSelect
-              value={String(values.marketplaceId)}
-              values={ADDRESS_DEPOSIT_CURRENCY_OPTIONS}
-              width={200}
-              onChange={updateMarketplace}
-            />
-          </FormRow>
-
-          <div className={styles.separator} />
-
-          <DepositNumericFieldsBlock
-            values={values}
-            model={numericFields}
-            priceRange={priceRange}
-            effectiveRate={effectiveRate}
-            fundingPriceDecimalScale={ADDRESS_DEPOSIT_FUNDING_PRICE_DECIMAL_SCALE}
-            requestVolumeDecimalScale={requestVolumeDecimalScale}
-            required
-          />
-
-          <CommissionField
-            commission={commission}
-            loading={isCommissionLoading}
-            canCalculate={canCalculateCommission}
-            reduceDisabled={commissionReduction.isReduceDisabled}
-            showReduceButton={!isCnyCurrency}
-            onReduce={commissionReduction.handleReduce}
-          />
-
-          <div className={styles.separator} />
-
-          <AccountSelectionBlock
-            model={accountSelection}
-            accountValue={String(values.accountId ?? '')}
-            clientCodeValue={values.clientCode}
-            accountLabel="Компания и счёт"
-            accountRequired
-            isLoading={accountSelection.isLoading}
-            onAccountChange={updateAccount}
-            onClientCodeChange={(value) => updateValue('clientCode', value)}
-          />
-        </div>
-      </FormDataBoundary>
-    </DepositModalFrame>
-  );
-};
diff --git a/src/modules/MXTForms/AddressDepositForm/api/__tests__/requestAddressDepositOrder.test.ts b/src/modules/MXTForms/AddressDepositForm/api/__tests__/requestAddressDepositOrder.test.ts
deleted file mode 100644
index ca48bdf71..000000000
--- a/src/modules/MXTForms/AddressDepositForm/api/__tests__/requestAddressDepositOrder.test.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-import {
-  getMockClient,
-  getPublishedBody,
-  mockMxtResponse,
-  resetMxtClientMock,
-} from '@modules/MXTForms/shared/request/testing/mockWsMxtStompClient';
-
-import { buildAddressDepositOrderPayload, requestAddressDepositOrder } from '../requestAddressDepositOrder';
-
-import type { AddressDepositFormValues } from 'types/AddressDepositForm';
-
-const values: AddressDepositFormValues = {
-  accountId: 18839010003,
-  marketplaceId: 1010,
-  partyId: 18838510000,
-  counterPartyId: 651605,
-  collateralIssueId: 620000,
-  fundingDuration: 7,
-  fundingPrice: '14',
-  requestVolume: '1050000',
-  quantity: '10',
-  valueDate: '2026-06-09',
-  clientCode: '',
-};
-
-describe('requestAddressDepositOrder', () => {
-  beforeEach(resetMxtClientMock);
-
-  it('should build the final payload using canonical field names and lot-rounded request volume', () => {
-    expect(buildAddressDepositOrderPayload(values, 100000)).toEqual({
-      accountId: 18839010003,
-      marketplaceId: 1010,
-      partyId: 18838510000,
-      sideId: 1,
-      addressedSignId: 1,
-      counterPartyId: 651605,
-      collateralIssueId: 620000,
-      fundingDuration: 7,
-      fundingPrice: 14,
-      requestVolumeTypeId: 1,
-      priceMethodId: 1,
-      valueDate: '2026-06-09',
-      requestVolume: 1000000,
-    });
-  });
-
-  it('should build the final payload using currency rate for request volume', () => {
-    expect(buildAddressDepositOrderPayload({ ...values, marketplaceId: 1110 }, 100000, 10.8109)).toEqual({
-      accountId: 18839010003,
-      marketplaceId: 1110,
-      partyId: 18838510000,
-      sideId: 1,
-      addressedSignId: 1,
-      counterPartyId: 651605,
-      collateralIssueId: 620000,
-      fundingDuration: 7,
-      fundingPrice: 14,
-      requestVolumeTypeId: 1,
-      priceMethodId: 1,
-      valueDate: '2026-06-09',
-      requestVolume: 92499.3,
-    });
-  });
-
-  it('should publish the final payload and resolve success from message type', async () => {
-    const { client, unsubscribe } = mockMxtResponse({
-      destination: 'orderMMRepo.new',
-      messageType: 'success',
-      data: {
-        ids: [],
-        text: 'Заявка отправлена',
-      },
-    });
-
-    await expect(requestAddressDepositOrder(values, 100000)).resolves.toEqual({
-      success: true,
-      message: 'Заявка отправлена',
-    });
-
-    expect(getPublishedBody()).toEqual(buildAddressDepositOrderPayload(values, 100000));
-    expect(client.activate).toHaveBeenCalledTimes(1);
-    expect(unsubscribe).toHaveBeenCalledTimes(1);
-  });
-
-  it('should not publish when required values are invalid', async () => {
-    const client = getMockClient();
-
-    await expect(requestAddressDepositOrder({ ...values, fundingPrice: '' }, 100000)).resolves.toEqual({
-      success: false,
-    });
-
-    expect(client.publish).not.toHaveBeenCalled();
-  });
-
-  it('should resolve backend error with its message', async () => {
-    mockMxtResponse({
-      destination: 'orderMMRepo.new',
-      messageType: 'error',
-      data: {
-        ids: [123],
-        text: 'Заявка отклонена',
-      },
-    });
-
-    await expect(requestAddressDepositOrder(values, 100000)).resolves.toEqual({
-      success: false,
-      message: 'Заявка отклонена',
-    });
-  });
-});
diff --git a/src/modules/MXTForms/AddressDepositForm/api/requestAddressDepositOrder.ts b/src/modules/MXTForms/AddressDepositForm/api/requestAddressDepositOrder.ts
deleted file mode 100644
index bb2097294..000000000
--- a/src/modules/MXTForms/AddressDepositForm/api/requestAddressDepositOrder.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
-  calculateRequestVolumeByQuantity,
-  isFiniteNumber,
-  isValidCurrencyRate,
-  isValidLotSize,
-  parseOptionalNumber,
-} from '@modules/MXTForms/shared/numbers';
-import { requestActionByReceipt } from '@modules/MXTForms/shared/request/requestActionByReceipt';
-
-import type { ActionRequestResult } from '@modules/MXTForms/shared/request/requestActionByReceipt';
-import type { AddressDepositFormValues, AddressDepositOrderPayload } from 'types/AddressDepositForm';
-
-const ORDER_MM_REPO_DESTINATION = 'orderMMRepo.new';
-
-const roundRequestVolume = (value: number) => Number(value.toFixed(2));
-
-export const buildAddressDepositOrderPayload = (
-  values: AddressDepositFormValues,
-  lotSize?: number,
-  currencyRate = 1,
-): AddressDepositOrderPayload | undefined => {
-  const {
-    accountId,
-    marketplaceId,
-    partyId,
-    counterPartyId,
-    collateralIssueId,
-    fundingDuration,
-    fundingPrice: fundingPriceValue,
-    requestVolume: requestVolumeValue,
-    quantity: quantityValue,
-    valueDate,
-  } = values;
-  const fundingPrice = parseOptionalNumber(fundingPriceValue);
-  const enteredRequestVolume = parseOptionalNumber(requestVolumeValue);
-  const quantity = parseOptionalNumber(quantityValue);
-  const roundedRequestVolume = parseOptionalNumber(
-    calculateRequestVolumeByQuantity(quantityValue, lotSize, currencyRate),
-  );
-
-  if (
-    !isFiniteNumber(accountId) ||
-    !isFiniteNumber(marketplaceId) ||
-    !isFiniteNumber(partyId) ||
-    !isFiniteNumber(counterPartyId) ||
-    !isFiniteNumber(collateralIssueId) ||
-    !isFiniteNumber(fundingDuration) ||
-    fundingDuration < 0 ||
-    !isFiniteNumber(fundingPrice) ||
-    fundingPrice <= 0 ||
-    !isFiniteNumber(enteredRequestVolume) ||
-    enteredRequestVolume <= 0 ||
-    !isFiniteNumber(quantity) ||
-    quantity <= 0 ||
-    !isValidLotSize(lotSize) ||
-    !isValidCurrencyRate(currencyRate) ||
-    !isFiniteNumber(roundedRequestVolume) ||
-    roundedRequestVolume <= 0 ||
-    !valueDate
-  ) {
-    return undefined;
-  }
-
-  return {
-    accountId,
-    marketplaceId,
-    partyId,
-    sideId: 1,
-    addressedSignId: 1,
-    counterPartyId,
-    collateralIssueId,
-    fundingDuration,
-    fundingPrice,
-    requestVolumeTypeId: 1,
-    priceMethodId: 1,
-    valueDate,
-    requestVolume: roundRequestVolume(roundedRequestVolume),
-  };
-};
-
-export const requestAddressDepositOrder = async (
-  values: AddressDepositFormValues,
-  lotSize?: number,
-  currencyRate?: number,
-): Promise<ActionRequestResult> => {
-  const payload = buildAddressDepositOrderPayload(values, lotSize, currencyRate);
-
-  if (!payload) {
-    return { success: false };
-  }
-
-  return requestActionByReceipt({
-    destination: ORDER_MM_REPO_DESTINATION,
-    body: payload,
-  });
-};
diff --git a/src/modules/MXTForms/AddressDepositForm/hooks/useAddressDepositFormHotkey.ts b/src/modules/MXTForms/AddressDepositForm/hooks/useAddressDepositFormHotkey.ts
deleted file mode 100644
index b2e3a08c1..000000000
--- a/src/modules/MXTForms/AddressDepositForm/hooks/useAddressDepositFormHotkey.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useEffect } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { openAddressDepositFormRequested } from '@store/actions/addressDepositForm';
-
-export const useAddressDepositFormHotkey = () => {
-  const dispatch = useDispatch();
-
-  useEffect(() => {
-    const handleKeyDown = (event: KeyboardEvent) => {
-      if (event.repeat || !event.ctrlKey || !event.altKey || event.code !== 'KeyA') {
-        return;
-      }
-
-      event.preventDefault();
-      dispatch(openAddressDepositFormRequested());
-    };
-
-    window.addEventListener('keydown', handleKeyDown);
-
-    return () => window.removeEventListener('keydown', handleKeyDown);
-  }, [dispatch]);
-};
diff --git a/src/modules/MXTForms/AddressDepositForm/index.ts b/src/modules/MXTForms/AddressDepositForm/index.ts
deleted file mode 100644
index 0dc4b69b9..000000000
--- a/src/modules/MXTForms/AddressDepositForm/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export { AddressDepositForm } from './AddressDepositForm';
-export type {
-  AddressDepositFormOpenProps,
-  AddressDepositFormProps,
-  AddressDepositFormSubmitPayload,
-  AddressDepositFormValues,
-  AddressDepositOrderPayload,
-} from './types';
diff --git a/src/modules/MXTForms/AddressDepositForm/model/__tests__/confirmRows.test.ts b/src/modules/MXTForms/AddressDepositForm/model/__tests__/confirmRows.test.ts
deleted file mode 100644
index b2772f6ec..000000000
--- a/src/modules/MXTForms/AddressDepositForm/model/__tests__/confirmRows.test.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import { getAddressDepositConfirmRows } from '../confirmRows';
-
-import type { AccountSelectionItem } from '@modules/MXTForms/shared/accountSelection';
-import type { AddressDepositFormValues } from 'types/AddressDepositForm';
-
-const values: AddressDepositFormValues = {
-  accountId: 10,
-  partyId: 20,
-  clientCode: '',
-  collateralIssueId: 620000,
-  counterPartyId: 651605,
-  fundingDuration: 7,
-  fundingPrice: '14',
-  marketplaceId: 1010,
-  quantity: '10',
-  requestVolume: '1000000',
-  valueDate: '2026-06-09',
-};
-
-const account: AccountSelectionItem = {
-  id: 10,
-  account: 'NCC+00017664',
-  type: 'D',
-  title: 'Банк - NCC+00017664',
-  partyId: 20,
-  relationId: 30,
-  marketUserId: 'MD9042100001',
-};
-
-describe('getAddressDepositConfirmRows', () => {
-  it('should build confirm rows with account value and formatted date', () => {
-    expect(
-      getAddressDepositConfirmRows({
-        accountOptions: [{ value: '10', title: account.title }],
-        accountsById: new Map([['10', account]]),
-        collateralIssueOptions: [{ value: '620000', title: 'КСУ' }],
-        counterPartyOptions: [{ value: '651605', title: 'НОВИКОМ' }],
-        direction: 'Размещение',
-        durationOptions: [{ value: '7', title: '7 дней 16 июн 2026' }],
-        mode: 'РЕПО с ЦК с КСУ адресное',
-        referencePriceMethod: 'Фиксированная',
-        requestVolumeDecimalScale: 0,
-        roundedRequestVolume: '1000000',
-        values,
-      }),
-    ).toEqual([
-      { label: 'Направление', value: 'Размещение' },
-      { label: 'Режим', value: 'РЕПО с ЦК с КСУ адресное' },
-      { label: 'Инструмент', value: 'КСУ' },
-      { label: 'Ставка', value: '14' },
-      { label: 'Сумма депозита', value: '1 000 000' },
-      { label: 'Компания', value: 'Банк' },
-      { label: 'Счёт', value: 'NCC+00017664' },
-      { label: 'Тип заявки', value: 'Адресная' },
-      { label: 'Партнер', value: 'НОВИКОМ' },
-      { label: 'Дата размещения', value: '09.06.2026' },
-      { label: 'Срок депозита', value: '7 дней 16 июн 2026' },
-      { label: 'Способ получения референтной цены', value: 'Фиксированная' },
-    ]);
-  });
-
-  it('should use empty fallback for account and value date', () => {
-    const rows = getAddressDepositConfirmRows({
-      accountOptions: [],
-      accountsById: new Map(),
-      collateralIssueOptions: [],
-      counterPartyOptions: [],
-      direction: 'Размещение',
-      durationOptions: [],
-      mode: 'РЕПО с ЦК с КСУ адресное',
-      referencePriceMethod: 'Фиксированная',
-      requestVolumeDecimalScale: 0,
-      roundedRequestVolume: '',
-      values: {
-        ...values,
-        accountId: undefined,
-        valueDate: '',
-      },
-    });
-
-    expect(rows.find(({ label }) => label === 'Счёт')?.value).toBe('-');
-    expect(rows.find(({ label }) => label === 'Дата размещения')?.value).toBe('-');
-  });
-});
diff --git a/src/modules/MXTForms/AddressDepositForm/model/__tests__/validation.test.ts b/src/modules/MXTForms/AddressDepositForm/model/__tests__/validation.test.ts
deleted file mode 100644
index 20c06913f..000000000
--- a/src/modules/MXTForms/AddressDepositForm/model/__tests__/validation.test.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { areAddressDepositRequiredFieldsFilled } from '../validation';
-
-import type { AddressDepositFormValues } from 'types/AddressDepositForm';
-
-const createValues = (overrides: Partial<AddressDepositFormValues> = {}): AddressDepositFormValues => ({
-  counterPartyId: 651565,
-  collateralIssueId: 620000,
-  valueDate: '2026-06-10',
-  fundingDuration: 5,
-  marketplaceId: 1010,
-  fundingPrice: '15',
-  requestVolume: '1000000',
-  quantity: '1000',
-  accountId: 18839010003,
-  partyId: 18838510000,
-  clientCode: '',
-  ...overrides,
-});
-
-describe('address deposit form validation', () => {
-  it('should accept filled required fields', () => {
-    expect(areAddressDepositRequiredFieldsFilled(createValues())).toBe(true);
-  });
-
-  it('should accept zero funding duration', () => {
-    expect(areAddressDepositRequiredFieldsFilled(createValues({ fundingDuration: 0 }))).toBe(true);
-  });
-
-  it.each([
-    ['counterPartyId', undefined],
-    ['collateralIssueId', undefined],
-    ['valueDate', ''],
-    ['fundingDuration', undefined],
-    ['marketplaceId', 0],
-    ['fundingPrice', '0'],
-    ['requestVolume', ''],
-    ['quantity', '0'],
-    ['accountId', undefined],
-    ['partyId', undefined],
-  ] as const)('should reject an empty required field %s', (field, value) => {
-    expect(areAddressDepositRequiredFieldsFilled(createValues({ [field]: value }))).toBe(false);
-  });
-});
diff --git a/src/modules/MXTForms/AddressDepositForm/model/confirmRows.ts b/src/modules/MXTForms/AddressDepositForm/model/confirmRows.ts
deleted file mode 100644
index cf71387dd..000000000
--- a/src/modules/MXTForms/AddressDepositForm/model/confirmRows.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import dayjs from 'dayjs';
-
-import { commonDateFormat } from '@configs/standartDateFormat';
-import { EMPTY_CONFIRM_VALUE, formatNumberValue, getCompanyTitle, getValueTitle } from '@modules/MXTForms/shared/model';
-
-import { ADDRESS_DEPOSIT_FUNDING_PRICE_DECIMAL_SCALE } from './constants';
-
-import type { AccountSelectionItem } from '@modules/MXTForms/shared/accountSelection';
-import type { MxtFormDetailsConfirmRow } from '@modules/MXTForms/shared/confirm';
-import type { Value } from '@uikit/Select';
-import type { AddressDepositFormValues } from 'types/AddressDepositForm';
-
-type GetAddressDepositConfirmRowsParams = {
-  accountOptions: Value[];
-  accountsById: Map<string, AccountSelectionItem>;
-  collateralIssueOptions: Value[];
-  counterPartyOptions: Value[];
-  direction: string;
-  durationOptions: Value[];
-  mode: string;
-  referencePriceMethod: string;
-  requestVolumeDecimalScale: number;
-  roundedRequestVolume: string;
-  values: AddressDepositFormValues;
-};
-
-export const getAddressDepositConfirmRows = ({
-  accountOptions,
-  accountsById,
-  collateralIssueOptions,
-  counterPartyOptions,
-  direction,
-  durationOptions,
-  mode,
-  referencePriceMethod,
-  requestVolumeDecimalScale,
-  roundedRequestVolume,
-  values,
-}: GetAddressDepositConfirmRowsParams): MxtFormDetailsConfirmRow[] => {
-  const selectedAccountId = String(values.accountId ?? '');
-  const selectedAccount = accountsById.get(selectedAccountId);
-  const selectedAccountTitle = getValueTitle(accountOptions, selectedAccountId);
-
-  return [
-    { label: 'Направление', value: direction },
-    { label: 'Режим', value: mode },
-    {
-      label: 'Инструмент',
-      value: getValueTitle(collateralIssueOptions, String(values.collateralIssueId ?? '')),
-    },
-    {
-      label: 'Ставка',
-      value: formatNumberValue(values.fundingPrice, ADDRESS_DEPOSIT_FUNDING_PRICE_DECIMAL_SCALE),
-    },
-    {
-      label: 'Сумма депозита',
-      value: formatNumberValue(roundedRequestVolume, requestVolumeDecimalScale),
-    },
-    { label: 'Компания', value: getCompanyTitle(selectedAccountTitle) },
-    { label: 'Счёт', value: selectedAccount?.account ?? EMPTY_CONFIRM_VALUE },
-    { label: 'Тип заявки', value: 'Адресная' },
-    {
-      label: 'Партнер',
-      value: getValueTitle(counterPartyOptions, String(values.counterPartyId ?? '')),
-    },
-    {
-      label: 'Дата размещения',
-      value: values.valueDate ? dayjs(values.valueDate).format(commonDateFormat.dateFormat) : EMPTY_CONFIRM_VALUE,
-    },
-    {
-      label: 'Срок депозита',
-      value: getValueTitle(durationOptions, String(values.fundingDuration ?? '')),
-    },
-    { label: 'Способ получения референтной цены', value: referencePriceMethod },
-  ];
-};
diff --git a/src/modules/MXTForms/AddressDepositForm/model/constants.ts b/src/modules/MXTForms/AddressDepositForm/model/constants.ts
deleted file mode 100644
index 395daa78a..000000000
--- a/src/modules/MXTForms/AddressDepositForm/model/constants.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { Value } from '@uikit/Select';
-
-export const ADDRESS_DEPOSIT_FORM_SUBTITLE = 'Адресная заявка';
-export const ADDRESS_DEPOSIT_DEFAULT_MODE = 'РЕПО с ЦК с КСУ адресное';
-export const ADDRESS_DEPOSIT_CONFIRM_DESCRIPTION = 'Вы действительно хотите ввести заявку с данными параметрами?';
-
-export const RUB_MARKETPLACE_ID = 1010;
-export const CNY_MARKETPLACE_ID = 1110;
-export const CNY_LOT_SIZE = 100000;
-
-export const ADDRESS_DEPOSIT_FUNDING_PRICE_DECIMAL_SCALE = 3;
-export const REQUEST_VOLUME_RUB_DECIMAL_SCALE = 0;
-export const REQUEST_VOLUME_CNY_DECIMAL_SCALE = 2;
-
-export const ADDRESS_DEPOSIT_CURRENCY_OPTIONS: Value[] = [
-  { value: String(RUB_MARKETPLACE_ID), title: 'RUB' },
-  { value: String(CNY_MARKETPLACE_ID), title: 'CNY' },
-];
diff --git a/src/modules/MXTForms/AddressDepositForm/model/useAddressDepositFormModel.ts b/src/modules/MXTForms/AddressDepositForm/model/useAddressDepositFormModel.ts
deleted file mode 100644
index 9d0155b8d..000000000
--- a/src/modules/MXTForms/AddressDepositForm/model/useAddressDepositFormModel.ts
+++ /dev/null
@@ -1,293 +0,0 @@
-import { useEffect, useMemo, useState } from 'react';
-
-import { useAccountSelectionModel } from '@modules/MXTForms/shared/accountSelection';
-import { useCollateralIssueSelectionModel } from '@modules/MXTForms/shared/collateralIssueSelection';
-import { useCommission, useCommissionReductionLock } from '@modules/MXTForms/shared/commission';
-import { useCounterPartySelectionModel } from '@modules/MXTForms/shared/counterPartySelection';
-import { useCurrencyRate } from '@modules/MXTForms/shared/currencyRate';
-import { calculateEffectiveFundingRate, isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-import { getInitialNumericValues, useDepositNumericFields } from '@modules/MXTForms/shared/numericFields';
-import { usePriceRange } from '@modules/MXTForms/shared/priceRange';
-import { getReturnDateHint, useSettlementDateSelectionModel } from '@modules/MXTForms/shared/settlementDateSelection';
-
-import {
-  CNY_LOT_SIZE,
-  CNY_MARKETPLACE_ID,
-  REQUEST_VOLUME_CNY_DECIMAL_SCALE,
-  REQUEST_VOLUME_RUB_DECIMAL_SCALE,
-  RUB_MARKETPLACE_ID,
-} from './constants';
-import { areAddressDepositRequiredFieldsFilled } from './validation';
-
-import type { AccountSelectionItem } from '@modules/MXTForms/shared/accountSelection';
-import type { CollateralIssueData } from '@modules/MXTForms/shared/collateralIssueSelection';
-import type { Dispatch, SetStateAction } from 'react';
-import type { AddressDepositFormValues } from 'types/AddressDepositForm';
-
-const CNY_CURRENCY_CODE = 'CNY';
-const RUB_CURRENCY_CODE = 'RUB';
-
-type UseAddressDepositFormModelParams = {
-  formId: string;
-  isSubmitLoading: boolean;
-};
-
-const makeInitialValues = (): AddressDepositFormValues => ({
-  ...getInitialNumericValues(),
-  counterPartyId: undefined,
-  collateralIssueId: undefined,
-  valueDate: '',
-  fundingDuration: undefined,
-  marketplaceId: RUB_MARKETPLACE_ID,
-  accountId: undefined,
-  partyId: undefined,
-  clientCode: '',
-});
-
-const getCurrencyCodeByMarketplaceId = (marketplaceId: number) =>
-  marketplaceId === CNY_MARKETPLACE_ID ? CNY_CURRENCY_CODE : RUB_CURRENCY_CODE;
-
-const getSelectedCollateralIssue = (
-  collateralIssueId: number | undefined,
-  issuesById: Map<number, CollateralIssueData>,
-) => {
-  if (!isFiniteNumber(collateralIssueId)) {
-    return undefined;
-  }
-
-  return issuesById.get(collateralIssueId);
-};
-
-const getLotSize = (isCnyCurrency: boolean, selectedCollateralIssue?: CollateralIssueData) =>
-  isCnyCurrency ? CNY_LOT_SIZE : selectedCollateralIssue?.nominalValue;
-
-const getRequestVolumeDecimalScale = (isCnyCurrency: boolean) =>
-  isCnyCurrency ? REQUEST_VOLUME_CNY_DECIMAL_SCALE : REQUEST_VOLUME_RUB_DECIMAL_SCALE;
-
-const getHasReturnDate = ({ valueDate, fundingDuration }: AddressDepositFormValues) =>
-  Boolean(valueDate) && isFiniteNumber(fundingDuration) && fundingDuration >= 0;
-
-const getIsFormDataLoading = (loadingStates: boolean[]) => loadingStates.some(Boolean);
-
-const getFormDataError = (errors: (string | null | undefined)[]) => {
-  const errorMessage = errors.filter((error): error is string => Boolean(error)).join('; ');
-
-  return errorMessage.length > 0 ? errorMessage : null;
-};
-
-const getCanRequestPriceRange = (values: AddressDepositFormValues, settlementCodeId: number | undefined) =>
-  [values.marketplaceId, values.collateralIssueId, values.fundingDuration, settlementCodeId].every(isFiniteNumber);
-
-const getIsSubmitDisabled = (
-  isFormDataLoading: boolean,
-  formDataError: string | null,
-  areRequiredFieldsFilled: boolean,
-  isSubmitLoading: boolean,
-) => isFormDataLoading || Boolean(formDataError) || !areRequiredFieldsFilled || isSubmitLoading;
-
-const getCommissionReductionFieldsSignature = (values: AddressDepositFormValues) =>
-  [
-    values.collateralIssueId ?? '',
-    values.valueDate,
-    values.fundingDuration ?? '',
-    values.marketplaceId ?? '',
-    values.fundingPrice,
-    values.requestVolume,
-    values.quantity,
-    values.accountId ?? '',
-    values.partyId ?? '',
-  ].join('|');
-
-const applyDefaultCollateralIssue = (
-  setValues: Dispatch<SetStateAction<AddressDepositFormValues>>,
-  defaultCollateralIssueId: number | undefined,
-) => {
-  if (!isFiniteNumber(defaultCollateralIssueId)) {
-    return;
-  }
-
-  setValues((current) =>
-    current.collateralIssueId === undefined ? { ...current, collateralIssueId: defaultCollateralIssueId } : current,
-  );
-};
-
-const applyDefaultAccount = (
-  setValues: Dispatch<SetStateAction<AddressDepositFormValues>>,
-  defaultAccount?: AccountSelectionItem,
-) => {
-  if (!defaultAccount) {
-    return;
-  }
-
-  setValues((current) =>
-    current.accountId === undefined
-      ? {
-          ...current,
-          accountId: defaultAccount.id,
-          partyId: defaultAccount.partyId,
-          clientCode: '',
-        }
-      : current,
-  );
-};
-
-export const useAddressDepositFormModel = ({ formId, isSubmitLoading }: UseAddressDepositFormModelParams) => {
-  const [values, setValues] = useState<AddressDepositFormValues>(makeInitialValues);
-  const counterPartySelection = useCounterPartySelectionModel();
-  const collateralIssueSelection = useCollateralIssueSelectionModel();
-  const selectedCollateralIssue = getSelectedCollateralIssue(
-    values.collateralIssueId,
-    collateralIssueSelection.issuesById,
-  );
-  const defaultCollateralIssueId = collateralIssueSelection.firstIssueId;
-  const isCnyCurrency = values.marketplaceId === CNY_MARKETPLACE_ID;
-  const currencyRateState = useCurrencyRate(getCurrencyCodeByMarketplaceId(values.marketplaceId));
-  const commissionCurrencyRate = currencyRateState.rate;
-  const lotSize = getLotSize(isCnyCurrency, selectedCollateralIssue);
-  const requestVolumeDecimalScale = getRequestVolumeDecimalScale(isCnyCurrency);
-  const settlementDateSelection = useSettlementDateSelectionModel(
-    values.valueDate,
-    values.fundingDuration,
-    values.marketplaceId,
-  );
-  const accountSelection = useAccountSelectionModel(values.marketplaceId, String(values.accountId ?? ''));
-  const { defaultAccount } = accountSelection;
-  const returnDateText = getReturnDateHint(values.valueDate, values.fundingDuration);
-  const hasReturnDate = getHasReturnDate(values);
-  const isFormDataLoading = getIsFormDataLoading([
-    counterPartySelection.isLoading,
-    collateralIssueSelection.isLoading,
-    settlementDateSelection.isLoading,
-    accountSelection.isLoading,
-    currencyRateState.isLoading,
-  ]);
-  const formDataError = getFormDataError([
-    counterPartySelection.error,
-    collateralIssueSelection.error,
-    settlementDateSelection.error,
-    accountSelection.error,
-    currencyRateState.error,
-  ]);
-  const canRequestPriceRange = getCanRequestPriceRange(values, settlementDateSelection.settlementCodeId);
-  const { priceRange } = usePriceRange({
-    formId,
-    enabled: canRequestPriceRange,
-    calculationType: 'addressed',
-    marketplaceId: values.marketplaceId,
-    issueId: values.collateralIssueId,
-    fundingDuration: values.fundingDuration,
-    settlementCodeId: settlementDateSelection.settlementCodeId,
-  });
-  const areRequiredFieldsFilled = areAddressDepositRequiredFieldsFilled(values);
-  const canCalculateCommission = areRequiredFieldsFilled;
-  const { commission, loading: isCommissionLoading } = useCommission({
-    formId,
-    enabled: canCalculateCommission,
-    calculationType: 'addressed',
-    accountId: values.accountId,
-    counterPartyId: values.counterPartyId,
-    marketplaceId: values.marketplaceId,
-    partyId: values.partyId,
-    fundingDuration: values.fundingDuration,
-    issueId: values.collateralIssueId,
-    fundingPrice: values.fundingPrice,
-    quantity: values.quantity,
-    valueDate: values.valueDate,
-  });
-  const isSubmitDisabled = getIsSubmitDisabled(
-    isFormDataLoading,
-    formDataError,
-    areRequiredFieldsFilled,
-    isSubmitLoading,
-  );
-  const numericFields = useDepositNumericFields({
-    values,
-    setValues,
-    lotSize,
-    currencyRate: commissionCurrencyRate,
-  });
-  const effectiveRate = useMemo(
-    () =>
-      calculateEffectiveFundingRate({
-        requestVolume: numericFields.roundedRequestVolumeHint,
-        fundingPrice: values.fundingPrice,
-        fundingDuration: values.fundingDuration,
-        commission,
-        commissionCurrencyRate,
-      }),
-    [
-      commission,
-      commissionCurrencyRate,
-      numericFields.roundedRequestVolumeHint,
-      values.fundingDuration,
-      values.fundingPrice,
-    ],
-  );
-  const commissionReductionFieldsSignature = useMemo(() => getCommissionReductionFieldsSignature(values), [values]);
-  const commissionReduction = useCommissionReductionLock({
-    requiredFieldsSignature: commissionReductionFieldsSignature,
-    onReduce: () => numericFields.applyCommissionReduction(commission),
-  });
-
-  useEffect(() => {
-    applyDefaultCollateralIssue(setValues, defaultCollateralIssueId);
-  }, [defaultCollateralIssueId]);
-
-  useEffect(() => {
-    applyDefaultAccount(setValues, defaultAccount);
-  }, [defaultAccount]);
-
-  const updateValue = <T extends keyof AddressDepositFormValues>(key: T, value: AddressDepositFormValues[T]) => {
-    setValues((current) => ({ ...current, [key]: value }));
-  };
-
-  const updateAccount = (value: string) => {
-    const nextAccount = accountSelection.accountsById.get(value);
-
-    setValues((current) => ({
-      ...current,
-      accountId: nextAccount?.id,
-      partyId: nextAccount?.partyId,
-      clientCode: '',
-    }));
-  };
-
-  const updateMarketplace = (value: string) => {
-    setValues((current) => ({
-      ...current,
-      marketplaceId: Number(value),
-      valueDate: '',
-      fundingDuration: undefined,
-      accountId: undefined,
-      partyId: undefined,
-      clientCode: '',
-    }));
-  };
-
-  return {
-    accountSelection,
-    canCalculateCommission,
-    collateralIssueSelection,
-    commission,
-    commissionCurrencyRate,
-    commissionReduction,
-    counterPartySelection,
-    effectiveRate,
-    formDataError,
-    hasReturnDate,
-    isCnyCurrency,
-    isCommissionLoading,
-    isFormDataLoading,
-    isSubmitDisabled,
-    lotSize,
-    numericFields,
-    priceRange,
-    requestVolumeDecimalScale,
-    returnDateText,
-    settlementDateSelection,
-    updateAccount,
-    updateMarketplace,
-    updateValue,
-    values,
-  };
-};
diff --git a/src/modules/MXTForms/AddressDepositForm/model/validation.ts b/src/modules/MXTForms/AddressDepositForm/model/validation.ts
deleted file mode 100644
index 4590862b5..000000000
--- a/src/modules/MXTForms/AddressDepositForm/model/validation.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { isFiniteNumber, parseOptionalNumber } from '@modules/MXTForms/shared/numbers';
-
-import type { AddressDepositFormValues } from 'types/AddressDepositForm';
-
-const isPositiveNumber = (value?: number) => isFiniteNumber(value) && value > 0;
-const isNonNegativeNumber = (value?: number) => isFiniteNumber(value) && value >= 0;
-
-const isPositiveNumericValue = (value: string) => {
-  const numericValue = parseOptionalNumber(value);
-
-  return isFiniteNumber(numericValue) && numericValue > 0;
-};
-
-export const areAddressDepositRequiredFieldsFilled = (values: AddressDepositFormValues) =>
-  isPositiveNumber(values.counterPartyId) &&
-  isPositiveNumber(values.collateralIssueId) &&
-  Boolean(values.valueDate) &&
-  isNonNegativeNumber(values.fundingDuration) &&
-  isPositiveNumber(values.marketplaceId) &&
-  isPositiveNumericValue(values.fundingPrice) &&
-  isPositiveNumericValue(values.requestVolume) &&
-  isPositiveNumericValue(values.quantity) &&
-  isPositiveNumber(values.accountId) &&
-  isPositiveNumber(values.partyId);
diff --git a/src/modules/MXTForms/AddressDepositForm/types.ts b/src/modules/MXTForms/AddressDepositForm/types.ts
deleted file mode 100644
index 972fc6334..000000000
--- a/src/modules/MXTForms/AddressDepositForm/types.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import type { ModalBaseProps } from '@modules/ModalRoot/types';
-import type { AddressDepositFormOpenProps } from 'types/AddressDepositForm';
-
-export type AddressDepositFormProps = ModalBaseProps & AddressDepositFormOpenProps;
-
-export type {
-  AddressDepositFormOpenProps,
-  AddressDepositFormSubmitPayload,
-  AddressDepositFormValues,
-  AddressDepositOrderPayload,
-} from 'types/AddressDepositForm';
diff --git a/src/modules/MXTForms/DepositForm/DepositForm.tsx b/src/modules/MXTForms/DepositForm/DepositForm.tsx
deleted file mode 100644
index 1e9f7fa6a..000000000
--- a/src/modules/MXTForms/DepositForm/DepositForm.tsx
+++ /dev/null
@@ -1,303 +0,0 @@
-import React, { useMemo, useState } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { useLocalisation } from '@hooks/useLocalisation';
-import { AccountSelectionBlock } from '@modules/MXTForms/shared/accountSelection';
-import { CommissionField, useCommission, useCommissionReductionLock } from '@modules/MXTForms/shared/commission';
-import { calculateEffectiveFundingRate, isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-import { DepositNumericFieldsBlock } from '@modules/MXTForms/shared/numericFields';
-import {
-  depositFormStyles as styles,
-  DepositModalFrame,
-  FormDataBoundary,
-  FormRow,
-  InfoHint,
-} from '@modules/MXTForms/shared/ui';
-import { depositFormConfirmRequested, depositFormSubmitReset } from '@store/actions/depositForm';
-import { closeModalRequested } from '@store/actions/modal';
-import { depositFormSubmitSelector } from '@store/selectors/depositForm';
-import { Radio } from '@uikit/Radio';
-
-import { getDepositConfirmRows } from './model/confirmRows';
-import { useDepositFormModel } from './model/useDepositFormModel';
-import { useDepositLimitEstimation } from './model/useDepositLimitEstimation';
-
-import { SingleLimitBlock } from './ui/SingleLimitBlock';
-
-import type { RequiredField } from './model/validation';
-
-import type { DepositFormProps } from './types';
-import type { DepositFundingPriceEntryTypeId, DepositTimeInForceId } from 'types/DepositForm';
-
-const REQUIRED_ERROR_TEXT = 'Обязательное поле';
-const REQUIRED_FIELDS_HINT = 'Заполните обязательные поля';
-const CONFIRM_DESCRIPTION = 'Вы действительно хотите ввести заявку с данными параметрами?';
-const SHOW_FUNDING_PRICE_ENTRY_TYPE_FIELD = false;
-const REQUEST_VOLUME_RUB_DECIMAL_SCALE = 0;
-const REQUEST_VOLUME_CNY_DECIMAL_SCALE = 2;
-const SINGLE_LIMIT_HINT =
-  'Единый лимит показывает объём обеспечения, которое может быть использовано для совершения сделок';
-
-export const DepositForm = ({ id, isInitialLoading = false, quantity, price }: DepositFormProps) => {
-  const localisation = useLocalisation();
-  const dispatch = useDispatch();
-  const [validationTouched, setValidationTouched] = useState(false);
-  const { loading: isSubmitLoading } = useAppSelect(depositFormSubmitSelector(id));
-  const formModel = useDepositFormModel({
-    formId: id,
-    isInitialLoading,
-    price,
-    quantity,
-    isSubmitLoading,
-  });
-  const {
-    accountSelection,
-    currencyRate,
-    formDataError,
-    formSubtitle,
-    fundingDuration,
-    isFormBlocked,
-    isFormDataLoading,
-    isSubmitDisabled,
-    listingData,
-    numericFields,
-    priceRange,
-    requiredErrors,
-    returnDate,
-    setValues,
-    updateAccount,
-    updateValue,
-    values,
-  } = formModel;
-  const requestVolumeDecimalScale =
-    currencyRate === 1 ? REQUEST_VOLUME_RUB_DECIMAL_SCALE : REQUEST_VOLUME_CNY_DECIMAL_SCALE;
-  const canCalculateCommission =
-    !isFormBlocked &&
-    isFiniteNumber(values.accountId) &&
-    isFiniteNumber(values.partyId) &&
-    isFiniteNumber(listingData?.marketplaceId) &&
-    isFiniteNumber(listingData?.issueId);
-  const { commission, loading: isCommissionLoading } = useCommission({
-    formId: id,
-    enabled: canCalculateCommission,
-    calculationType: 'standard',
-    accountId: values.accountId,
-    marketplaceId: listingData?.marketplaceId,
-    partyId: values.partyId,
-    issueId: listingData?.issueId,
-    fundingPrice: values.fundingPrice,
-    quantity: values.quantity,
-  });
-  const effectiveRate = useMemo(
-    () =>
-      calculateEffectiveFundingRate({
-        requestVolume: numericFields.roundedRequestVolumeHint,
-        fundingPrice: values.fundingPrice,
-        fundingDuration,
-        commission,
-        commissionCurrencyRate: currencyRate,
-      }),
-    [commission, currencyRate, fundingDuration, numericFields.roundedRequestVolumeHint, values.fundingPrice],
-  );
-  const singleLimit = useDepositLimitEstimation({
-    formId: id,
-    values,
-    setValues,
-    listingData,
-    returnDate,
-    isSubmitDisabled,
-    commission,
-    isCommissionLoading,
-    roundedRequestVolume: numericFields.roundedRequestVolumeHint,
-    defaultErrorText: localisation.depositForms.singleLimitError,
-  });
-  const commissionReductionFieldsSignature = useMemo(
-    () =>
-      [
-        currencyRate ?? '',
-        values.fundingPrice,
-        values.requestVolume,
-        values.quantity,
-        values.accountId ?? '',
-        values.partyId ?? '',
-      ].join('|'),
-    [currencyRate, values.accountId, values.fundingPrice, values.partyId, values.quantity, values.requestVolume],
-  );
-  const commissionReduction = useCommissionReductionLock({
-    requiredFieldsSignature: commissionReductionFieldsSignature,
-    onReduce: () => numericFields.applyCommissionReduction(commission),
-  });
-
-  const confirmRows = useMemo(
-    () =>
-      getDepositConfirmRows({
-        accountsDataById: accountSelection.accountsById,
-        accountOptions: accountSelection.accountOptions,
-        formSubtitle,
-        values,
-        showFundingPriceEntryTypeField: SHOW_FUNDING_PRICE_ENTRY_TYPE_FIELD,
-      }),
-    [accountSelection.accountOptions, accountSelection.accountsById, formSubtitle, values],
-  );
-  const handleClose = () => {
-    dispatch(depositFormSubmitReset({ formId: id }));
-    dispatch(closeModalRequested(id));
-  };
-
-  const handleSubmit = () => {
-    setValidationTouched(true);
-
-    if (isSubmitDisabled) {
-      return;
-    }
-
-    dispatch(depositFormSubmitReset({ formId: id }));
-    dispatch(
-      depositFormConfirmRequested({
-        formId: id,
-        values: { ...values, listingData },
-        currencyRate,
-        rows: confirmRows,
-        description: CONFIRM_DESCRIPTION,
-        footerText: `ПЭП: ${accountSelection.pepCode}`,
-      }),
-    );
-  };
-
-  const getRequiredStatus = (field: RequiredField) =>
-    validationTouched && requiredErrors[field] ? 'error' : undefined;
-
-  const renderRequiredError = (field: RequiredField) =>
-    validationTouched && requiredErrors[field] ? <div className={styles.errorText}>{REQUIRED_ERROR_TEXT}</div> : null;
-
-  return (
-    <DepositModalFrame
-      subtitle={formSubtitle}
-      pepCode={accountSelection.pepCode}
-      submitDisabled={isSubmitDisabled}
-      onClose={handleClose}
-      onSubmit={handleSubmit}
-    >
-      <FormDataBoundary
-        isLoading={isFormDataLoading}
-        error={formDataError}
-      >
-        <div className={styles.body}>
-          <DepositNumericFieldsBlock
-            values={values}
-            model={numericFields}
-            priceRange={priceRange}
-            effectiveRate={effectiveRate}
-            requestVolumeDecimalScale={requestVolumeDecimalScale}
-            required
-            fundingPriceStatus={getRequiredStatus('fundingPrice')}
-            requestVolumeStatus={getRequiredStatus('requestVolume')}
-            quantityStatus={getRequiredStatus('quantity')}
-            fundingPriceError={renderRequiredError('fundingPrice')}
-            requestVolumeError={renderRequiredError('requestVolume')}
-            quantityError={renderRequiredError('quantity')}
-          />
-
-          <CommissionField
-            commission={commission}
-            loading={isCommissionLoading}
-            canCalculate={canCalculateCommission}
-            reduceDisabled={commissionReduction.isReduceDisabled}
-            onReduce={commissionReduction.handleReduce}
-          />
-
-          <div className={styles.separator} />
-
-          <AccountSelectionBlock
-            model={accountSelection}
-            accountValue={String(values.accountId ?? '')}
-            clientCodeValue={values.clientCode}
-            accountRequired
-            accountStatus={getRequiredStatus('accountId')}
-            accountError={renderRequiredError('accountId')}
-            isLoading={accountSelection.isLoading}
-            onAccountChange={updateAccount}
-            onClientCodeChange={(value) => updateValue('clientCode', value)}
-          />
-
-          <div className={styles.separator} />
-
-          <FormRow
-            alignTop
-            label={
-              <>
-                <span>
-                  Доп.
-                  <br />
-                  параметры
-                </span>
-                <InfoHint title={localisation.depositForms.timeInForceHint} />
-              </>
-            }
-          >
-            <Radio.Group
-              value={values.timeInForceId}
-              onChange={(event) => updateValue('timeInForceId', event.target.value as DepositTimeInForceId)}
-              className={styles.radioGroupWrap}
-            >
-              <Radio
-                value={1}
-                className={styles.radio}
-              >
-                Поставить в очередь
-              </Radio>
-              <Radio
-                value={2}
-                className={styles.radio}
-              >
-                Снять остаток
-              </Radio>
-              <Radio
-                value={3}
-                className={styles.radio}
-              >
-                Полностью или отклонить
-              </Radio>
-            </Radio.Group>
-          </FormRow>
-
-          {SHOW_FUNDING_PRICE_ENTRY_TYPE_FIELD ? (
-            <FormRow label="Тип заявки">
-              <Radio.Group
-                value={values.fundingPriceEntryTypeId}
-                onChange={(event) =>
-                  updateValue('fundingPriceEntryTypeId', event.target.value as DepositFundingPriceEntryTypeId)
-                }
-                className={styles.radioGroup}
-              >
-                <Radio
-                  value={1}
-                  className={styles.radio}
-                >
-                  Лимитная заявка
-                </Radio>
-                <Radio
-                  value={2}
-                  className={styles.radio}
-                  disabled
-                >
-                  Рыночная цена
-                </Radio>
-              </Radio.Group>
-            </FormRow>
-          ) : null}
-
-          <div className={styles.separator} />
-
-          <SingleLimitBlock
-            model={singleLimit}
-            hint={SINGLE_LIMIT_HINT}
-            requiredHint={REQUIRED_FIELDS_HINT}
-            loadingText={localisation.depositForms.singleLimitLoading}
-          />
-        </div>
-      </FormDataBoundary>
-    </DepositModalFrame>
-  );
-};
diff --git a/src/modules/MXTForms/DepositForm/api/__tests__/requestDepositOrder.test.ts b/src/modules/MXTForms/DepositForm/api/__tests__/requestDepositOrder.test.ts
deleted file mode 100644
index 202331dcb..000000000
--- a/src/modules/MXTForms/DepositForm/api/__tests__/requestDepositOrder.test.ts
+++ /dev/null
@@ -1,162 +0,0 @@
-import {
-  getMockClient,
-  getPublishedBody,
-  mockMxtResponse,
-  resetMxtClientMock,
-} from '@modules/MXTForms/shared/request/testing/mockWsMxtStompClient';
-
-import { requestDepositOrder } from '../requestDepositOrder';
-
-describe('requestDepositOrder', () => {
-  beforeEach(resetMxtClientMock);
-
-  it('should publish order body and resolve success from message type', async () => {
-    const { client, unsubscribe } = mockMxtResponse({
-      destination: 'orderMMRepo.new',
-      messageType: 'success',
-      data: {
-        ids: [],
-        text: 'Заявка отправлена',
-      },
-    });
-
-    await expect(
-      requestDepositOrder({
-        accountId: 19750891494,
-        partyId: 19750498603,
-        listingData: {
-          marketplaceId: 1102,
-          issueId: 620000,
-          lotSize: 100000,
-        },
-        fundingPrice: '6,04',
-        requestVolume: '3589190.72',
-        quantity: '35',
-        clientCode: '',
-        timeInForceId: 1,
-        fundingPriceEntryTypeId: 1,
-        calculateSingleLimit: false,
-      }),
-    ).resolves.toEqual({
-      success: true,
-      message: 'Заявка отправлена',
-    });
-
-    expect(getPublishedBody()).toEqual({
-      accountId: 19750891494,
-      marketplaceId: 1102,
-      partyId: 19750498603,
-      sideId: 1,
-      addressedSignId: 2,
-      collateralIssueId: 620000,
-      fundingPrice: 6.04,
-      fundingPriceEntryTypeId: 1,
-      requestVolumeTypeId: 1,
-      timeInForceId: 1,
-      priceMethodId: 1,
-      requestVolume: 3500000,
-    });
-    expect(client.activate).toHaveBeenCalledTimes(1);
-    expect(unsubscribe).toHaveBeenCalledTimes(1);
-  });
-
-  it('should build request volume using currency rate', async () => {
-    mockMxtResponse({
-      destination: 'orderMMRepo.new',
-      messageType: 'success',
-      data: {
-        ids: [],
-        text: 'Заявка отправлена',
-      },
-    });
-
-    await expect(
-      requestDepositOrder(
-        {
-          accountId: 19750891494,
-          partyId: 19750498603,
-          listingData: {
-            marketplaceId: 1102,
-            issueId: 620000,
-            lotSize: 100000,
-          },
-          fundingPrice: '6,04',
-          requestVolume: '323747.33',
-          quantity: '35',
-          clientCode: '',
-          timeInForceId: 1,
-          fundingPriceEntryTypeId: 1,
-          calculateSingleLimit: false,
-        },
-        10.8109,
-      ),
-    ).resolves.toEqual({
-      success: true,
-      message: 'Заявка отправлена',
-    });
-
-    expect(getPublishedBody()).toEqual(
-      expect.objectContaining({
-        requestVolume: 323747.55,
-      }),
-    );
-  });
-
-  it('should not publish order when required numeric values are invalid', async () => {
-    const client = getMockClient();
-
-    await expect(
-      requestDepositOrder({
-        accountId: 19750891494,
-        partyId: 19750498603,
-        listingData: {
-          marketplaceId: 1102,
-          issueId: 620000,
-          lotSize: 100000,
-        },
-        fundingPrice: '0',
-        requestVolume: '3589190.72',
-        quantity: '35',
-        clientCode: '',
-        timeInForceId: 1,
-        fundingPriceEntryTypeId: 1,
-        calculateSingleLimit: false,
-      }),
-    ).resolves.toEqual({ success: false });
-
-    expect(client.publish).not.toHaveBeenCalled();
-  });
-
-  it('should resolve backend error with its message', async () => {
-    mockMxtResponse({
-      destination: 'orderMMRepo.new',
-      messageType: 'error',
-      data: {
-        ids: [123],
-        text: 'Недостаточно средств',
-      },
-    });
-
-    await expect(
-      requestDepositOrder({
-        accountId: 19750891494,
-        partyId: 19750498603,
-        listingData: {
-          marketplaceId: 1102,
-          issueId: 620000,
-          lotSize: 100000,
-        },
-        fundingPrice: '6,04',
-        requestVolume: '3589190.72',
-        quantity: '35',
-        clientCode: '',
-        timeInForceId: 1,
-        fundingPriceEntryTypeId: 1,
-        calculateSingleLimit: false,
-      }),
-    ).resolves.toEqual({
-      success: false,
-      message: 'Недостаточно средств',
-    });
-  });
-});
diff --git a/src/modules/MXTForms/DepositForm/api/requestDepositOrder.ts b/src/modules/MXTForms/DepositForm/api/requestDepositOrder.ts
deleted file mode 100644
index 435e5b8ae..000000000
--- a/src/modules/MXTForms/DepositForm/api/requestDepositOrder.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import {
-  calculateRequestVolumeByQuantity,
-  isFiniteNumber,
-  isValidCurrencyRate,
-  parseOptionalNumber,
-} from '@modules/MXTForms/shared/numbers';
-import { requestActionByReceipt } from '@modules/MXTForms/shared/request/requestActionByReceipt';
-
-import type { ActionRequestResult } from '@modules/MXTForms/shared/request/requestActionByReceipt';
-import type { DepositFormValues } from 'types/DepositForm';
-
-const ORDER_MM_REPO_DESTINATION = 'orderMMRepo.new';
-
-const roundRequestVolume = (value: number) => Number(value.toFixed(2));
-
-const getRoundedRequestVolume = ({ requestVolume, quantity, listingData }: DepositFormValues, currencyRate = 1) => {
-  const parsedQuantity = parseOptionalNumber(quantity);
-  const { lotSize } = listingData ?? {};
-
-  if (isFiniteNumber(parsedQuantity) && isFiniteNumber(lotSize) && lotSize > 0 && isValidCurrencyRate(currencyRate)) {
-    const roundedRequestVolume = parseOptionalNumber(calculateRequestVolumeByQuantity(quantity, lotSize, currencyRate));
-
-    return isFiniteNumber(roundedRequestVolume) ? roundRequestVolume(roundedRequestVolume) : undefined;
-  }
-
-  const parsedRequestVolume = parseOptionalNumber(requestVolume);
-
-  return isFiniteNumber(parsedRequestVolume) ? roundRequestVolume(parsedRequestVolume) : undefined;
-};
-
-export const requestDepositOrder = async (
-  values: DepositFormValues,
-  currencyRate = 1,
-): Promise<ActionRequestResult> => {
-  const {
-    accountId,
-    listingData,
-    partyId,
-    fundingPrice: fundingPriceValue,
-    fundingPriceEntryTypeId,
-    timeInForceId,
-  } = values;
-  const marketplaceId = listingData?.marketplaceId;
-  const issueId = listingData?.issueId;
-  const fundingPrice = parseOptionalNumber(fundingPriceValue);
-  const requestVolume = getRoundedRequestVolume(values, currencyRate);
-
-  if (
-    !isFiniteNumber(accountId) ||
-    !isFiniteNumber(marketplaceId) ||
-    !isFiniteNumber(partyId) ||
-    !isFiniteNumber(issueId) ||
-    !isFiniteNumber(fundingPrice) ||
-    fundingPrice <= 0 ||
-    !isValidCurrencyRate(currencyRate) ||
-    !isFiniteNumber(requestVolume) ||
-    requestVolume <= 0
-  ) {
-    return { success: false };
-  }
-
-  return requestActionByReceipt({
-    destination: ORDER_MM_REPO_DESTINATION,
-    body: {
-      accountId,
-      marketplaceId,
-      partyId,
-      sideId: 1,
-      addressedSignId: 2,
-      collateralIssueId: issueId,
-      fundingPrice,
-      fundingPriceEntryTypeId,
-      requestVolumeTypeId: 1,
-      timeInForceId,
-      priceMethodId: 1,
-      requestVolume,
-    },
-  });
-};
diff --git a/src/modules/MXTForms/DepositForm/hooks/useDepositFormHotkey.ts b/src/modules/MXTForms/DepositForm/hooks/useDepositFormHotkey.ts
deleted file mode 100644
index 7c318be4f..000000000
--- a/src/modules/MXTForms/DepositForm/hooks/useDepositFormHotkey.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { useEffect } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { openDepositFormRequested } from '@store/actions/depositForm';
-
-const HOTKEY_DEPOSIT_BOARD = 'GCRP';
-const HOTKEY_DEPOSIT_INSTR_ISIN = 'RU000A0JW4Z1';
-
-export const useDepositFormHotkey = () => {
-  const dispatch = useDispatch();
-
-  useEffect(() => {
-    const handleKeyDown = (event: KeyboardEvent) => {
-      if (event.repeat || !event.ctrlKey || !event.altKey || event.code !== 'KeyD') {
-        return;
-      }
-
-      event.preventDefault();
-      dispatch(
-        openDepositFormRequested({
-          board: HOTKEY_DEPOSIT_BOARD,
-          instrIsin: HOTKEY_DEPOSIT_INSTR_ISIN,
-        }),
-      );
-    };
-
-    window.addEventListener('keydown', handleKeyDown);
-
-    return () => window.removeEventListener('keydown', handleKeyDown);
-  }, [dispatch]);
-};
diff --git a/src/modules/MXTForms/DepositForm/index.ts b/src/modules/MXTForms/DepositForm/index.ts
deleted file mode 100644
index ed7bbd73c..000000000
--- a/src/modules/MXTForms/DepositForm/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { DepositForm } from './DepositForm';
-export type { DepositFormProps, DepositFormValues } from './types';
diff --git a/src/modules/MXTForms/DepositForm/model/__tests__/validation.test.ts b/src/modules/MXTForms/DepositForm/model/__tests__/validation.test.ts
deleted file mode 100644
index 250850acb..000000000
--- a/src/modules/MXTForms/DepositForm/model/__tests__/validation.test.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { getRequiredErrors, isValidDepositListingData } from '../validation';
-
-import type { DepositFormValues, DepositListingData } from 'types/DepositForm';
-
-const createValues = (overrides: Partial<DepositFormValues> = {}): DepositFormValues => ({
-  fundingPrice: '10',
-  requestVolume: '1000000',
-  quantity: '10',
-  accountId: 1,
-  partyId: 2,
-  clientCode: '',
-  timeInForceId: 1,
-  fundingPriceEntryTypeId: 1,
-  calculateSingleLimit: false,
-  ...overrides,
-});
-
-describe('deposit form validation model', () => {
-  it('should treat positive required values as valid', () => {
-    expect(getRequiredErrors(createValues())).toEqual({
-      fundingPrice: false,
-      requestVolume: false,
-      quantity: false,
-      accountId: false,
-    });
-  });
-
-  it('should treat zero numeric values as invalid', () => {
-    expect(getRequiredErrors(createValues({ fundingPrice: '0', requestVolume: '0', quantity: '0' }))).toEqual({
-      fundingPrice: true,
-      requestVolume: true,
-      quantity: true,
-      accountId: false,
-    });
-  });
-
-  it('should require company account', () => {
-    expect(getRequiredErrors(createValues({ accountId: undefined })).accountId).toBe(true);
-  });
-
-  it('should validate listing data required for real requests', () => {
-    const listingData: DepositListingData = {
-      marketplaceId: 1102,
-      issueId: 620000,
-      lotSize: 100000,
-    };
-
-    expect(isValidDepositListingData(listingData)).toBe(true);
-    expect(isValidDepositListingData({ ...listingData, lotSize: 0 })).toBe(false);
-    expect(isValidDepositListingData({ ...listingData, issueId: undefined })).toBe(false);
-  });
-});
diff --git a/src/modules/MXTForms/DepositForm/model/confirmRows.ts b/src/modules/MXTForms/DepositForm/model/confirmRows.ts
deleted file mode 100644
index 21dd61a7f..000000000
--- a/src/modules/MXTForms/DepositForm/model/confirmRows.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import {
-  DEFAULT_DIRECTION,
-  DEFAULT_REFERENCE_PRICE_METHOD,
-  DEFAULT_REQUEST_KIND,
-  EMPTY_CONFIRM_VALUE,
-  formatNumberValue,
-  FUNDING_PRICE_ENTRY_TYPE_LABELS,
-  getCompanyTitle,
-  getInstrumentTitle,
-  getValueTitle,
-  TIME_IN_FORCE_LABELS,
-} from '@modules/MXTForms/shared/model';
-
-import type { AccountSelectionItem } from '@modules/MXTForms/shared/accountSelection';
-import type { MxtFormDetailsConfirmRow } from '@modules/MXTForms/shared/confirm';
-import type { Value } from '@uikit/Select';
-
-import type { DepositFormValues } from 'types/DepositForm';
-
-type GetDepositConfirmRowsParams = {
-  accountsDataById: Map<string, AccountSelectionItem>;
-  accountOptions: Value[];
-  formSubtitle: string;
-  values: DepositFormValues;
-  showFundingPriceEntryTypeField: boolean;
-};
-
-export const getDepositConfirmRows = ({
-  accountsDataById,
-  accountOptions,
-  formSubtitle,
-  values,
-  showFundingPriceEntryTypeField,
-}: GetDepositConfirmRowsParams): MxtFormDetailsConfirmRow[] => {
-  const selectedAccountId = String(values.accountId ?? '');
-  const selectedAccount = accountsDataById.get(selectedAccountId);
-  const selectedAccountTitle = selectedAccount?.title ?? getValueTitle(accountOptions, selectedAccountId);
-
-  return [
-    { label: 'Направление', value: DEFAULT_DIRECTION },
-    { label: 'Инструмент', value: getInstrumentTitle(formSubtitle) },
-    { label: 'Ставка', value: formatNumberValue(values.fundingPrice) },
-    { label: 'Сумма депозита', value: formatNumberValue(values.requestVolume) },
-    { label: 'Компания', value: getCompanyTitle(selectedAccountTitle) },
-    { label: 'Счёт', value: selectedAccount?.account ?? EMPTY_CONFIRM_VALUE },
-    ...(showFundingPriceEntryTypeField
-      ? [
-          {
-            label: 'Тип заявки',
-            value: FUNDING_PRICE_ENTRY_TYPE_LABELS[values.fundingPriceEntryTypeId],
-          },
-        ]
-      : []),
-    { label: 'Тип по остатку', value: TIME_IN_FORCE_LABELS[values.timeInForceId] },
-    { label: 'Заявка', value: DEFAULT_REQUEST_KIND },
-    { label: 'Способ получения референтной цены', value: DEFAULT_REFERENCE_PRICE_METHOD },
-  ];
-};
diff --git a/src/modules/MXTForms/DepositForm/model/useDepositFormModel.ts b/src/modules/MXTForms/DepositForm/model/useDepositFormModel.ts
deleted file mode 100644
index ac1fe406a..000000000
--- a/src/modules/MXTForms/DepositForm/model/useDepositFormModel.ts
+++ /dev/null
@@ -1,169 +0,0 @@
-import dayjs from 'dayjs';
-import { useEffect, useMemo, useRef, useState } from 'react';
-
-import { commonDateFormat } from '@configs/standartDateFormat';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { useAccountSelectionModel } from '@modules/MXTForms/shared/accountSelection';
-import { useMoexAssetRate } from '@modules/MXTForms/shared/currencyRate';
-import { getInitialNumericValues, useDepositNumericFields } from '@modules/MXTForms/shared/numericFields';
-import { usePriceRange } from '@modules/MXTForms/shared/priceRange';
-import { depositFormDataSelector } from '@store/selectors/depositForm';
-
-import { getRequiredErrors, hasRequiredErrors, isValidDepositListingData } from './validation';
-
-import type { DepositFormOpenProps } from '../types';
-import type { DepositFormValues, DepositFundingPriceEntryTypeId } from 'types/DepositForm';
-
-const FIXED_FUNDING_PRICE_ENTRY_TYPE_ID: DepositFundingPriceEntryTypeId = 1;
-
-const formatReturnDate = (value?: string) => {
-  if (!value) {
-    return '';
-  }
-
-  const date = dayjs(value);
-
-  return date.isValid() ? date.format(commonDateFormat.dateFormat) : '';
-};
-
-const getFormSubtitle = (symbolName?: string, returnDate?: string) => {
-  const formattedReturnDate = formatReturnDate(returnDate);
-
-  return [symbolName, formattedReturnDate ? `Дата возврата ${formattedReturnDate}` : ''].filter(Boolean).join(' - ');
-};
-
-const getFormDataError = (errors: (string | null | undefined)[]) => {
-  const errorMessage = errors.filter((error): error is string => Boolean(error)).join('; ');
-
-  return errorMessage.length > 0 ? errorMessage : null;
-};
-
-const makeInitialValues = (
-  fundingPrice?: number,
-  quantity?: number,
-  lotSize?: number,
-  currencyRate?: number,
-): DepositFormValues => ({
-  ...getInitialNumericValues({ fundingPrice, quantity, lotSize, currencyRate }),
-  accountId: undefined,
-  partyId: undefined,
-  clientCode: '',
-  timeInForceId: 1,
-  fundingPriceEntryTypeId: FIXED_FUNDING_PRICE_ENTRY_TYPE_ID,
-  calculateSingleLimit: false,
-});
-
-type UseDepositFormModelParams = Pick<DepositFormOpenProps, 'isInitialLoading' | 'price' | 'quantity'> & {
-  formId: string;
-  isSubmitLoading: boolean;
-};
-
-export const useDepositFormModel = ({
-  formId,
-  isInitialLoading = false,
-  price,
-  quantity,
-  isSubmitLoading,
-}: UseDepositFormModelParams) => {
-  const initialValuesAppliedRef = useRef(!isInitialLoading);
-  const formDataState = useAppSelect(depositFormDataSelector(formId));
-  const loadedFormData = formDataState.data;
-  const listingData = loadedFormData?.listingData;
-  const isListingDataReady = isValidDepositListingData(listingData);
-  const returnDate = loadedFormData?.returnDate;
-  const fundingDuration = loadedFormData?.fundingDuration;
-  const lotSize = listingData?.lotSize;
-  const formSubtitle = getFormSubtitle(listingData?.symbolName, returnDate);
-  const currencyRateState = useMoexAssetRate(listingData?.issueId, isListingDataReady);
-  const currencyRate = currencyRateState.rate ?? 1;
-  const [values, setValues] = useState<DepositFormValues>(() =>
-    makeInitialValues(price, quantity, lotSize, currencyRate),
-  );
-  const accountSelection = useAccountSelectionModel(listingData?.marketplaceId, String(values.accountId ?? ''));
-  const { defaultAccount } = accountSelection;
-  const isFormDataLoading =
-    formDataState.loading ||
-    accountSelection.isLoading ||
-    currencyRateState.isLoading ||
-    (isInitialLoading && !loadedFormData && !formDataState.error);
-  const formDataError = getFormDataError([formDataState.error, accountSelection.error, currencyRateState.error]);
-  const { priceRange } = usePriceRange({
-    formId,
-    enabled: isListingDataReady,
-    calculationType: 'standard',
-    marketplaceId: listingData?.marketplaceId,
-    issueId: listingData?.issueId,
-  });
-  const numericFields = useDepositNumericFields({
-    values,
-    setValues,
-    lotSize,
-    currencyRate,
-  });
-  const requiredErrors = useMemo(() => getRequiredErrors(values), [values]);
-  const hasValidationErrors = hasRequiredErrors(requiredErrors);
-  const isFormBlocked = isFormDataLoading || Boolean(formDataError) || !isListingDataReady || hasValidationErrors;
-  const isSubmitDisabled = isFormBlocked || isSubmitLoading;
-
-  useEffect(() => {
-    if (initialValuesAppliedRef.current || isFormDataLoading || formDataError) {
-      return;
-    }
-
-    setValues(makeInitialValues(price, quantity, lotSize, currencyRate));
-    initialValuesAppliedRef.current = true;
-  }, [currencyRate, formDataError, isFormDataLoading, lotSize, price, quantity]);
-
-  useEffect(() => {
-    if (!initialValuesAppliedRef.current || !defaultAccount) {
-      return;
-    }
-
-    setValues((current) =>
-      current.accountId === undefined
-        ? {
-            ...current,
-            accountId: defaultAccount.id,
-            partyId: defaultAccount.partyId,
-            clientCode: '',
-          }
-        : current,
-    );
-  }, [defaultAccount]);
-
-  const updateValue = <T extends keyof DepositFormValues>(key: T, value: DepositFormValues[T]) => {
-    setValues((current) => ({ ...current, [key]: value }));
-  };
-
-  const updateAccount = (value: string) => {
-    const nextAccount = accountSelection.accountsById.get(value);
-
-    setValues((current) => ({
-      ...current,
-      accountId: nextAccount?.id,
-      partyId: nextAccount?.partyId,
-      clientCode: '',
-    }));
-  };
-
-  return {
-    accountSelection,
-    currencyRate,
-    formDataError,
-    formSubtitle,
-    fundingDuration,
-    isFormBlocked,
-    isFormDataLoading,
-    isSubmitDisabled,
-    listingData,
-    lotSize,
-    numericFields,
-    priceRange,
-    requiredErrors,
-    returnDate,
-    setValues,
-    updateAccount,
-    updateValue,
-    values,
-  };
-};
diff --git a/src/modules/MXTForms/DepositForm/model/useDepositLimitEstimation.ts b/src/modules/MXTForms/DepositForm/model/useDepositLimitEstimation.ts
deleted file mode 100644
index c4ae1290d..000000000
--- a/src/modules/MXTForms/DepositForm/model/useDepositLimitEstimation.ts
+++ /dev/null
@@ -1,300 +0,0 @@
-import { useCallback, useEffect, useRef, useState } from 'react';
-
-import { useLimitEstimation } from '@modules/MXTForms/shared/limitEstimation';
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import type { LimitEstimation } from '@modules/MXTForms/shared/limitEstimation';
-import type { Dispatch, SetStateAction } from 'react';
-import type { DepositFormValues, DepositListingData } from 'types/DepositForm';
-
-type UseDepositLimitEstimationParams = {
-  formId: string;
-  values: DepositFormValues;
-  setValues: Dispatch<SetStateAction<DepositFormValues>>;
-  listingData?: DepositListingData;
-  returnDate?: string;
-  isSubmitDisabled: boolean;
-  commission?: number;
-  isCommissionLoading: boolean;
-  roundedRequestVolume: string;
-  defaultErrorText: string;
-};
-
-export type DepositLimitEstimationModel = {
-  checked: boolean;
-  disabled: boolean;
-  showRequiredHint: boolean;
-  showDetails: boolean;
-  loading: boolean;
-  error: string | null;
-  limitForRequest?: number;
-  limitWithCommission?: number;
-  onChange: (checked: boolean) => void;
-};
-
-type SignaturePart = string | number | null | undefined;
-
-type CanCalculateSingleLimitParams = {
-  isLimitCalculationConfirmed: boolean;
-  isSubmitDisabled: boolean;
-  commission?: number;
-  isCommissionReadyForLimit: boolean;
-  values: DepositFormValues;
-  listingData?: DepositListingData;
-  returnDate?: string;
-};
-
-type LimitLoadingParams = {
-  showDetails: boolean;
-  isCommissionLoading: boolean;
-  isLimitEstimationLoading: boolean;
-  canCalculateSingleLimit: boolean;
-  limitEstimation?: LimitEstimation;
-  limitEstimationError: string | null;
-};
-
-type LimitErrorParams = Pick<LimitLoadingParams, 'showDetails' | 'limitEstimation' | 'limitEstimationError'> & {
-  loading: boolean;
-  defaultErrorText: string;
-};
-
-const getSignaturePart = (value: SignaturePart) => value ?? '';
-
-const buildSignature = (parts: SignaturePart[]) => parts.map(getSignaturePart).join('|');
-
-const getCommissionCalculationSignature = (values: DepositFormValues, listingData?: DepositListingData) =>
-  buildSignature([
-    values.accountId,
-    values.partyId,
-    listingData?.marketplaceId,
-    listingData?.issueId,
-    values.fundingPrice,
-    values.quantity,
-  ]);
-
-const getLimitCalculationSignature = (
-  values: DepositFormValues,
-  listingData: DepositListingData | undefined,
-  returnDate: string | undefined,
-  roundedRequestVolume: string,
-) =>
-  buildSignature([
-    values.accountId,
-    values.partyId,
-    listingData?.marketplaceId,
-    listingData?.issueId,
-    returnDate,
-    values.fundingPrice,
-    values.requestVolume,
-    values.quantity,
-    roundedRequestVolume,
-  ]);
-
-const getCanCalculateSingleLimit = ({
-  isLimitCalculationConfirmed,
-  isSubmitDisabled,
-  commission,
-  isCommissionReadyForLimit,
-  values,
-  listingData,
-  returnDate,
-}: CanCalculateSingleLimitParams) => {
-  if (!isLimitCalculationConfirmed || isSubmitDisabled || !isCommissionReadyForLimit || !returnDate) {
-    return false;
-  }
-
-  return [commission, values.accountId, values.partyId, listingData?.marketplaceId, listingData?.issueId].every(
-    isFiniteNumber,
-  );
-};
-
-const getLimitLoading = ({
-  showDetails,
-  isCommissionLoading,
-  isLimitEstimationLoading,
-  canCalculateSingleLimit,
-  limitEstimation,
-  limitEstimationError,
-}: LimitLoadingParams) => {
-  if (!showDetails) {
-    return false;
-  }
-
-  if (isCommissionLoading || isLimitEstimationLoading) {
-    return true;
-  }
-
-  return canCalculateSingleLimit && !limitEstimation && !limitEstimationError;
-};
-
-const getLimitError = ({
-  showDetails,
-  loading,
-  limitEstimation,
-  limitEstimationError,
-  defaultErrorText,
-}: LimitErrorParams) => {
-  if (!showDetails || loading || limitEstimation) {
-    return limitEstimationError;
-  }
-
-  return limitEstimationError ?? defaultErrorText;
-};
-
-const getLimitForRequest = (limitEstimation?: LimitEstimation) => {
-  const before = limitEstimation?.before;
-  const after = limitEstimation?.after;
-
-  if (!isFiniteNumber(before) || !isFiniteNumber(after)) {
-    return undefined;
-  }
-
-  return before - after;
-};
-
-const getLimitWithCommission = (limitEstimation: LimitEstimation | undefined, commission?: number) => {
-  const after = limitEstimation?.after;
-
-  if (!isFiniteNumber(after) || !isFiniteNumber(commission)) {
-    return undefined;
-  }
-
-  return after - commission;
-};
-
-const getActiveLimitCalculationSignature = (checked: boolean, limitCalculationSignature: string) => {
-  if (!checked) {
-    return '';
-  }
-
-  return limitCalculationSignature;
-};
-
-const resetSingleLimit = (setValues: Dispatch<SetStateAction<DepositFormValues>>) => {
-  setValues((current) => {
-    if (!current.calculateSingleLimit) {
-      return current;
-    }
-
-    return {
-      ...current,
-      calculateSingleLimit: false,
-    };
-  });
-};
-
-export const useDepositLimitEstimation = ({
-  formId,
-  values,
-  setValues,
-  listingData,
-  returnDate,
-  isSubmitDisabled,
-  commission,
-  isCommissionLoading,
-  roundedRequestVolume,
-  defaultErrorText,
-}: UseDepositLimitEstimationParams): DepositLimitEstimationModel => {
-  const commissionCalculationSignature = getCommissionCalculationSignature(values, listingData);
-  const commissionCalculationSignatureRef = useRef(commissionCalculationSignature);
-  const [readyCommissionSignature, setReadyCommissionSignature] = useState('');
-  const limitCalculationSignature = getLimitCalculationSignature(values, listingData, returnDate, roundedRequestVolume);
-  const [activeLimitCalculationSignature, setActiveLimitCalculationSignature] = useState('');
-  const isLimitCalculationConfirmed =
-    values.calculateSingleLimit && activeLimitCalculationSignature === limitCalculationSignature;
-  const isCommissionReadyForLimit = readyCommissionSignature === commissionCalculationSignature;
-  const canCalculateSingleLimit = getCanCalculateSingleLimit({
-    isLimitCalculationConfirmed,
-    isSubmitDisabled,
-    commission,
-    isCommissionReadyForLimit,
-    values,
-    listingData,
-    returnDate,
-  });
-  const {
-    limitEstimation,
-    loading: isLimitEstimationLoading,
-    error: limitEstimationError,
-  } = useLimitEstimation({
-    formId,
-    enabled: canCalculateSingleLimit,
-    accountId: values.accountId,
-    commission,
-    marketplaceId: listingData?.marketplaceId,
-    partyId: values.partyId,
-    issueId: listingData?.issueId,
-    fundingPrice: values.fundingPrice,
-    quantity: values.quantity,
-    amount: roundedRequestVolume,
-    valueDate2: returnDate,
-  });
-  const showDetails = isLimitCalculationConfirmed && !isSubmitDisabled;
-  const loading = getLimitLoading({
-    showDetails,
-    isCommissionLoading,
-    isLimitEstimationLoading,
-    canCalculateSingleLimit,
-    limitEstimation,
-    limitEstimationError,
-  });
-  const error = getLimitError({
-    showDetails,
-    loading,
-    limitEstimation,
-    limitEstimationError,
-    defaultErrorText,
-  });
-  const limitForRequest = getLimitForRequest(limitEstimation);
-  const limitWithCommission = getLimitWithCommission(limitEstimation, commission);
-
-  useEffect(() => {
-    commissionCalculationSignatureRef.current = commissionCalculationSignature;
-  }, [commissionCalculationSignature]);
-
-  useEffect(() => {
-    if (isCommissionLoading || !isFiniteNumber(commission)) {
-      return;
-    }
-
-    setReadyCommissionSignature(commissionCalculationSignatureRef.current);
-  }, [commission, isCommissionLoading]);
-
-  useEffect(() => {
-    if (!values.calculateSingleLimit || activeLimitCalculationSignature === limitCalculationSignature) {
-      return;
-    }
-
-    setActiveLimitCalculationSignature('');
-    resetSingleLimit(setValues);
-  }, [activeLimitCalculationSignature, limitCalculationSignature, setValues, values.calculateSingleLimit]);
-
-  useEffect(() => {
-    if (!isSubmitDisabled || !values.calculateSingleLimit) {
-      return;
-    }
-
-    setActiveLimitCalculationSignature('');
-    resetSingleLimit(setValues);
-  }, [isSubmitDisabled, setValues, values.calculateSingleLimit]);
-
-  const handleChange = useCallback(
-    (checked: boolean) => {
-      setActiveLimitCalculationSignature(getActiveLimitCalculationSignature(checked, limitCalculationSignature));
-      setValues((current) => ({ ...current, calculateSingleLimit: checked }));
-    },
-    [limitCalculationSignature, setValues],
-  );
-
-  return {
-    checked: isLimitCalculationConfirmed,
-    disabled: isSubmitDisabled,
-    showRequiredHint: isSubmitDisabled,
-    showDetails,
-    loading,
-    error,
-    limitForRequest,
-    limitWithCommission,
-    onChange: handleChange,
-  };
-};
diff --git a/src/modules/MXTForms/DepositForm/model/validation.ts b/src/modules/MXTForms/DepositForm/model/validation.ts
deleted file mode 100644
index 3996c0979..000000000
--- a/src/modules/MXTForms/DepositForm/model/validation.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { isFiniteNumber, isValidLotSize, parseOptionalNumber } from '@modules/MXTForms/shared/numbers';
-
-import type { DepositFormValues, DepositListingData } from 'types/DepositForm';
-
-export type RequiredField = 'fundingPrice' | 'requestVolume' | 'quantity' | 'accountId';
-
-export type RequiredErrors = Record<RequiredField, boolean>;
-
-const isPositiveNumericValue = (value: string) => {
-  const numericValue = parseOptionalNumber(value);
-
-  return isFiniteNumber(numericValue) && numericValue > 0;
-};
-
-export const getRequiredErrors = (values: DepositFormValues): RequiredErrors => ({
-  fundingPrice: !isPositiveNumericValue(values.fundingPrice),
-  requestVolume: !isPositiveNumericValue(values.requestVolume),
-  quantity: !isPositiveNumericValue(values.quantity),
-  accountId: !isFiniteNumber(values.accountId) || values.accountId <= 0,
-});
-
-export const hasRequiredErrors = (errors: RequiredErrors) => Object.values(errors).some(Boolean);
-
-export const isValidDepositListingData = (
-  listingData?: DepositListingData,
-): listingData is DepositListingData & {
-  marketplaceId: number;
-  issueId: number;
-  lotSize: number;
-} =>
-  isFiniteNumber(listingData?.marketplaceId) &&
-  isFiniteNumber(listingData?.issueId) &&
-  isValidLotSize(listingData?.lotSize);
diff --git a/src/modules/MXTForms/DepositForm/types.ts b/src/modules/MXTForms/DepositForm/types.ts
deleted file mode 100644
index 9799a18ce..000000000
--- a/src/modules/MXTForms/DepositForm/types.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { ModalBaseProps } from '@modules/ModalRoot/types';
-import type { DepositFormOpenProps } from 'types/DepositForm';
-
-export type DepositFormProps = ModalBaseProps & DepositFormOpenProps;
-
-export type { DepositFormOpenProps, DepositFormValues } from 'types/DepositForm';
diff --git a/src/modules/MXTForms/DepositForm/ui/SingleLimitBlock.tsx b/src/modules/MXTForms/DepositForm/ui/SingleLimitBlock.tsx
deleted file mode 100644
index fc2cbe000..000000000
--- a/src/modules/MXTForms/DepositForm/ui/SingleLimitBlock.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import React from 'react';
-
-import { formatNumberValue } from '@modules/MXTForms/shared/model';
-import { depositFormStyles as styles, FormRow, InfoHint } from '@modules/MXTForms/shared/ui';
-import { Switch } from '@uikit/Switch';
-
-import type { DepositLimitEstimationModel } from '../model/useDepositLimitEstimation';
-
-type SingleLimitBlockProps = {
-  model: DepositLimitEstimationModel;
-  hint: string;
-  requiredHint: string;
-  loadingText: string;
-};
-
-const LIMIT_CURRENCY = 'RUB';
-
-const formatLimitValue = (value?: number) =>
-  Number.isFinite(value) ? `${formatNumberValue(String(value))} ${LIMIT_CURRENCY}` : formatNumberValue('');
-
-const renderLimitDetails = (model: DepositLimitEstimationModel, loadingText: string) => {
-  if (model.loading) {
-    return (
-      <FormRow
-        label="Единый лимит"
-        compact
-      >
-        <span className={styles.mutedText}>{loadingText}</span>
-      </FormRow>
-    );
-  }
-
-  if (model.error) {
-    return (
-      <FormRow
-        label="Единый лимит"
-        compact
-      >
-        <span className={styles.confirmError}>{model.error}</span>
-      </FormRow>
-    );
-  }
-
-  return (
-    <>
-      <FormRow
-        label="ЕЛ под заявку"
-        compact
-      >
-        <span className={styles.valueText}>{formatLimitValue(model.limitForRequest)}</span>
-      </FormRow>
-
-      <FormRow
-        label="ЕЛ с учётом заявки"
-        compact
-      >
-        <span className={styles.valueText}>{formatLimitValue(model.limitWithCommission)}</span>
-      </FormRow>
-    </>
-  );
-};
-
-export const SingleLimitBlock = ({ model, hint, requiredHint, loadingText }: SingleLimitBlockProps) => (
-  <>
-    <FormRow
-      largeGap
-      label={
-        <>
-          <span>
-            Рассчитать
-            <br />
-            единый лимит
-          </span>
-          <InfoHint title={hint} />
-        </>
-      }
-    >
-      <div className={styles.limitSwitchInfo}>
-        <Switch
-          checked={model.checked}
-          className={styles.switch}
-          disabled={model.disabled}
-          onChange={model.onChange}
-        />
-        {model.showRequiredHint ? <span className={styles.mutedText}>{requiredHint}</span> : null}
-      </div>
-    </FormRow>
-
-    {model.showDetails ? <div className={styles.limitDetails}>{renderLimitDetails(model, loadingText)}</div> : null}
-  </>
-);
diff --git a/src/modules/MXTForms/shared/DepositFormShared.module.scss b/src/modules/MXTForms/shared/DepositFormShared.module.scss
deleted file mode 100644
index 2a20e4df9..000000000
--- a/src/modules/MXTForms/shared/DepositFormShared.module.scss
+++ /dev/null
@@ -1,376 +0,0 @@
-@import 'colors.scss';
-@import 'mixins.module.scss';
-
-.modal {
-  width: 554px;
-
-  .content {
-    flex: 0 1 auto;
-  }
-
-  .body {
-    height: auto;
-    max-height: calc(100vh - 168px);
-    overflow-y: auto;
-  }
-}
-
-.content {
-  flex: 1;
-  min-height: 0;
-  overflow: hidden;
-}
-
-.body {
-  height: 100%;
-  padding: 16px;
-  box-sizing: border-box;
-  display: flex;
-  flex-direction: column;
-  gap: 16px;
-  overflow: hidden;
-}
-
-.row,
-.rowTop,
-.rowLargeGap,
-.rowCompact {
-  display: grid;
-  grid-template-columns: 120px minmax(0, 1fr);
-  gap: 8px;
-  width: 100%;
-}
-
-.row,
-.rowLargeGap,
-.rowCompact {
-  align-items: start;
-  min-height: 32px;
-}
-
-.rowCompact {
-  min-height: 24px;
-
-  .label {
-    min-height: 24px;
-  }
-}
-
-.rowLargeGap {
-  gap: 16px;
-}
-
-.rowTop {
-  align-items: start;
-
-  .label {
-    margin-top: 10px;
-  }
-}
-
-.label {
-  min-height: 32px;
-  display: flex;
-  align-items: center;
-  gap: 2px;
-  color: $text-interface-secondary-label-no-value;
-  @include font-params(400, 12px, 16px);
-}
-
-.requiredMark {
-  color: inherit;
-  font: inherit;
-  line-height: inherit;
-}
-
-.control {
-  min-width: 0;
-  color: $text-button-secondary;
-  @include font-params(400, 12px, 16px);
-}
-
-.numberInput {
-  :global {
-    .ant-input-affix-wrapper,
-    .ant-input {
-      font-feature-settings:
-        'lnum' 1,
-        'tnum' 1;
-    }
-  }
-}
-
-.select {
-  :global {
-    .ant-select-selection-item,
-    .ant-select-selection-placeholder {
-      font-feature-settings:
-        'lnum' 1,
-        'tnum' 1;
-    }
-  }
-}
-
-.durationSelectPopup {
-  :global([class*='dropdown-item-value']) {
-    max-width: none;
-    color: $text-interface-secondary-label-no-value;
-  }
-}
-
-.datePicker {
-  height: 32px;
-  font-feature-settings:
-    'lnum' 1,
-    'tnum' 1;
-}
-
-.hint {
-  width: 200px;
-  margin-top: 2px;
-  padding: 2px 0;
-  color: $text-interface-tertiary-notice;
-  @include font-params(400, 10px, 12px);
-}
-
-.errorText {
-  width: 200px;
-  margin-top: 2px;
-  padding: 2px 0;
-  color: $text-interface-wrong;
-  @include font-params(400, 10px, 12px);
-}
-
-.confirmDescription {
-  display: flex;
-  flex-direction: column;
-  gap: 4px;
-}
-
-.confirmError {
-  color: $text-interface-wrong;
-}
-
-.mutedText {
-  color: $text-interface-secondary-label-no-value;
-  @include font-params(400, 12px, 16px);
-}
-
-.valueText {
-  color: $text-interface-primary-value;
-  @include font-params(400, 12px, 16px);
-}
-
-.rowValueText {
-  min-height: 32px;
-  display: flex;
-  align-items: center;
-}
-
-.loadingBody {
-  min-height: 432px;
-  padding: 16px;
-  box-sizing: border-box;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  gap: 12px;
-}
-
-.loadingText {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  gap: 4px;
-}
-
-.loadingSpinner {
-  width: 24px;
-  height: 24px;
-  color: $text-interface-tertiary-notice;
-  animation: deposit-form-spin 1s linear infinite;
-}
-
-.commissionInfo {
-  min-height: 32px;
-  display: flex;
-  align-items: center;
-  gap: 16px;
-}
-
-.commissionPlaceholder {
-  min-height: 32px;
-  display: flex;
-  align-items: center;
-  color: $text-interface-secondary-label-no-value;
-  @include font-params(400, 12px, 16px);
-}
-
-.commissionButton {
-  height: 32px;
-  padding: 8px 0;
-}
-
-.commissionLoading {
-  min-height: 32px;
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
-
-.commissionSpinner {
-  width: 16px;
-  height: 16px;
-  color: $text-interface-tertiary-notice;
-  animation: deposit-form-spin 1s linear infinite;
-}
-
-@keyframes deposit-form-spin {
-  from {
-    transform: rotate(0deg);
-  }
-
-  to {
-    transform: rotate(360deg);
-  }
-}
-
-.limitSwitchInfo {
-  min-height: 32px;
-  display: flex;
-  align-items: center;
-  gap: 16px;
-}
-
-.limitDetails {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-}
-
-.separator {
-  width: 100%;
-  height: 16px;
-  display: flex;
-  align-items: center;
-
-  &::before {
-    content: '';
-    width: 100%;
-    height: 1px;
-    background-color: $line-interface-primary-table;
-  }
-}
-
-.radioGroup:global(.ant-radio-group),
-.radioGroupWrap:global(.ant-radio-group) {
-  display: flex;
-  align-items: center;
-  gap: 16px;
-  min-height: 24px;
-}
-
-.radioGroupWrap:global(.ant-radio-group) {
-  align-items: flex-start;
-  flex-wrap: wrap;
-  row-gap: 4px;
-}
-
-.radio:global(.ant-radio-wrapper) {
-  color: $text-button-secondary;
-  @include font-params(400, 12px, 16px);
-
-  &:global(.ant-radio-wrapper-disabled) {
-    color: $text-button-disabled;
-  }
-}
-
-.radioWithInfo {
-  display: flex;
-  align-items: flex-start;
-  gap: 2px;
-  height: 24px;
-}
-
-.infoIcon {
-  width: 24px;
-  height: 24px;
-  display: inline-flex;
-  align-items: center;
-  justify-content: center;
-  color: $surface-icon-basis-muted-secondary;
-  flex: 0 0 auto;
-
-  svg {
-    width: 16px;
-    height: 16px;
-  }
-}
-
-.infoTooltip {
-  max-width: 385px;
-
-  :global(.ant-tooltip-inner) {
-    max-width: 385px;
-    white-space: normal;
-  }
-}
-
-.switch:global(.switchMad.ant-switch) {
-  width: 40px;
-  min-width: 40px;
-  height: 20px;
-
-  :global {
-    .ant-switch-handle {
-      width: 16px;
-      height: 16px;
-      inset-inline-start: 2px;
-      top: 2px;
-    }
-  }
-}
-
-.switch:global(.switchMad.ant-switch.ant-switch-checked) {
-  :global {
-    .ant-switch-handle {
-      inset-inline-start: calc(100% - 18px);
-    }
-  }
-}
-
-.footer {
-  height: 64px;
-  flex: 0 0 64px;
-  padding: 16px;
-  box-sizing: border-box;
-  border-top: 1px solid $border-base-widget-modal;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  gap: 16px;
-}
-
-.pep {
-  color: $text-interface-tertiary-notice;
-  @include font-params(400, 10px, 12px);
-}
-
-.actions {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
-
-.cancelButton {
-  width: 91px;
-  min-width: 91px;
-  box-sizing: border-box;
-}
-
-.submitButton {
-  width: 96px;
-  min-width: 96px;
-  box-sizing: border-box;
-}
diff --git a/src/modules/MXTForms/shared/accountSelection/index.ts b/src/modules/MXTForms/shared/accountSelection/index.ts
deleted file mode 100644
index 059713b55..000000000
--- a/src/modules/MXTForms/shared/accountSelection/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export { AccountSelectionBlock } from './ui/AccountSelectionBlock';
-export { buildAccountsData } from './model/buildAccountsData';
-export { getAccountSelectionModel } from './model/getAccountSelectionModel';
-export { useAccountSelectionModel } from './model/useAccountSelectionModel';
-
-export type {
-  AccountData,
-  AccountSelectionItem,
-  AccountSelectionModel,
-  ClientCodeData,
-  MarketAccessData,
-  PartyData,
-  RelationData,
-} from './model/types';
diff --git a/src/modules/MXTForms/shared/accountSelection/model/__tests__/buildAccountsData.test.ts b/src/modules/MXTForms/shared/accountSelection/model/__tests__/buildAccountsData.test.ts
deleted file mode 100644
index 01d3ba2b7..000000000
--- a/src/modules/MXTForms/shared/accountSelection/model/__tests__/buildAccountsData.test.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { buildAccountsData } from '../buildAccountsData';
-
-describe('buildAccountsData', () => {
-  it('should aggregate accounts with party and market access data', () => {
-    expect(
-      buildAccountsData(
-        [
-          {
-            id: 10,
-            account: 'NCC+00017664',
-            relationId: 100,
-            accountType: 1,
-            serviceProductId: 3,
-            type: 'D',
-          },
-        ],
-        [
-          {
-            id: 200,
-            name: 'Банк Новый Символ',
-          },
-        ],
-        [
-          {
-            id: 100,
-            customerId: 200,
-          },
-        ],
-        [
-          {
-            marketplaceId: 1102,
-            partyId: 200,
-            marketUserId: 'MD9042100001',
-          },
-        ],
-        1102,
-      ),
-    ).toEqual([
-      {
-        id: 10,
-        account: 'NCC+00017664',
-        type: 'D',
-        title: 'Банк Новый Символ - NCC+00017664',
-        partyId: 200,
-        relationId: 100,
-        marketUserId: 'MD9042100001',
-      },
-    ]);
-  });
-
-  it('should exclude unsupported account types and products', () => {
-    expect(
-      buildAccountsData(
-        [
-          {
-            id: 10,
-            account: 'EXCLUDED',
-            relationId: 100,
-            accountType: 2,
-            serviceProductId: 3,
-            type: 'D',
-          },
-          {
-            id: 11,
-            account: 'OTHER_PRODUCT',
-            relationId: 100,
-            accountType: 1,
-            serviceProductId: 4,
-            type: 'D',
-          },
-        ],
-        [{ id: 200, name: 'Банк' }],
-        [{ id: 100, customerId: 200 }],
-        [],
-      ),
-    ).toEqual([]);
-  });
-
-  it('should skip accounts without relation or party', () => {
-    expect(
-      buildAccountsData(
-        [
-          {
-            id: 10,
-            account: 'NCC+00017664',
-            relationId: 100,
-            accountType: 1,
-            serviceProductId: 3,
-            type: 'D',
-          },
-        ],
-        [],
-        [],
-        [],
-        1102,
-      ),
-    ).toEqual([]);
-  });
-});
diff --git a/src/modules/MXTForms/shared/accountSelection/model/__tests__/getAccountSelectionModel.test.ts b/src/modules/MXTForms/shared/accountSelection/model/__tests__/getAccountSelectionModel.test.ts
deleted file mode 100644
index 2b9745e66..000000000
--- a/src/modules/MXTForms/shared/accountSelection/model/__tests__/getAccountSelectionModel.test.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { getAccountSelectionModel } from '../getAccountSelectionModel';
-
-const accountsData = [
-  {
-    id: 10,
-    account: 'NCC+00017664',
-    type: 'M',
-    title: 'Банк - NCC+00017664',
-    partyId: 200,
-    relationId: 100,
-    marketUserId: 'MD9042100001',
-  },
-  {
-    id: 11,
-    account: 'MB9141117666',
-    type: 'D',
-    title: 'Банк - MB9141117666',
-    partyId: 200,
-    relationId: 101,
-    marketUserId: 'MD9042100002',
-  },
-];
-
-describe('getAccountSelectionModel', () => {
-  it('should create account and client code options for selected relation', () => {
-    const model = getAccountSelectionModel({
-      accountsData,
-      clientCodesData: [
-        { id: 1, clientCode: 'CLIENT-1', relationId: 100 },
-        { id: 2, clientCode: 'CLIENT-1', relationId: 100 },
-        { id: 3, clientCode: 'OTHER', relationId: 101 },
-      ],
-      selectedAccountId: '10',
-    });
-
-    expect(model.accountOptions).toEqual([
-      { value: '10', title: 'Банк - NCC+00017664' },
-      { value: '11', title: 'Банк - MB9141117666' },
-    ]);
-    expect(model.clientCodeOptions).toEqual([{ value: 'CLIENT-1', title: 'CLIENT-1' }]);
-    expect(model.selectedAccount).toEqual(accountsData[0]);
-    expect(model.defaultAccount).toEqual(accountsData[1]);
-    expect(model.pepCode).toBe('MD9042100001');
-  });
-});
diff --git a/src/modules/MXTForms/shared/accountSelection/model/buildAccountsData.ts b/src/modules/MXTForms/shared/accountSelection/model/buildAccountsData.ts
deleted file mode 100644
index 7dca950ac..000000000
--- a/src/modules/MXTForms/shared/accountSelection/model/buildAccountsData.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import type { AccountData, AccountSelectionItem, MarketAccessData, PartyData, RelationData } from './types';
-
-const ACCOUNT_SERVICE_PRODUCT_ID = 3;
-const EXCLUDED_ACCOUNT_TYPE = 2;
-
-const getMarketAccessKey = (marketplaceId: number, partyId: number) => `${marketplaceId}:${partyId}`;
-
-const mapById = <T extends { id?: number }>(items: T[]) => {
-  const result = new Map<number, T>();
-
-  items.forEach((item) => {
-    if (isFiniteNumber(item.id)) {
-      result.set(item.id, item);
-    }
-  });
-
-  return result;
-};
-
-const mapMarketAccessByMarketplaceAndParty = (items: MarketAccessData[]) => {
-  const result = new Map<string, MarketAccessData>();
-
-  items.forEach((item) => {
-    if (!isFiniteNumber(item.marketplaceId) || !isFiniteNumber(item.partyId)) {
-      return;
-    }
-
-    result.set(getMarketAccessKey(item.marketplaceId, item.partyId), item);
-  });
-
-  return result;
-};
-
-const isAvailableAccount = (account: AccountData) =>
-  account.accountType !== EXCLUDED_ACCOUNT_TYPE && account.serviceProductId === ACCOUNT_SERVICE_PRODUCT_ID;
-
-export const buildAccountsData = (
-  accounts: AccountData[],
-  parties: PartyData[],
-  relations: RelationData[],
-  marketAccessItems: MarketAccessData[],
-  marketplaceId?: number,
-): AccountSelectionItem[] => {
-  const partyById = mapById(parties);
-  const relationById = mapById(relations);
-  const marketAccessByMarketplaceAndParty = mapMarketAccessByMarketplaceAndParty(marketAccessItems);
-  const accountsData: AccountSelectionItem[] = [];
-
-  accounts.forEach((account) => {
-    if (
-      !isAvailableAccount(account) ||
-      !isFiniteNumber(account.id) ||
-      !account.account ||
-      !isFiniteNumber(account.relationId)
-    ) {
-      return;
-    }
-
-    const accountRelation = relationById.get(account.relationId);
-
-    if (!accountRelation || !isFiniteNumber(accountRelation.customerId)) {
-      return;
-    }
-
-    const accountParty = partyById.get(accountRelation.customerId);
-
-    if (!accountParty || !isFiniteNumber(accountParty.id)) {
-      return;
-    }
-
-    const marketAccess = isFiniteNumber(marketplaceId)
-      ? marketAccessByMarketplaceAndParty.get(getMarketAccessKey(marketplaceId, accountParty.id))
-      : undefined;
-
-    accountsData.push({
-      id: account.id,
-      account: account.account,
-      type: account.type ?? '',
-      title: `${accountParty.name ?? ''} - ${account.account}`,
-      partyId: accountParty.id,
-      relationId: account.relationId,
-      marketUserId: typeof marketAccess?.marketUserId === 'string' ? marketAccess.marketUserId : '',
-    });
-  });
-
-  return accountsData;
-};
diff --git a/src/modules/MXTForms/shared/accountSelection/model/getAccountSelectionModel.ts b/src/modules/MXTForms/shared/accountSelection/model/getAccountSelectionModel.ts
deleted file mode 100644
index c55f12809..000000000
--- a/src/modules/MXTForms/shared/accountSelection/model/getAccountSelectionModel.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import type { AccountSelectionItem, AccountSelectionModel, ClientCodeData } from './types';
-import type { Value } from '@uikit/Select';
-
-type GetAccountSelectionModelParams = {
-  accountsData: AccountSelectionItem[];
-  clientCodesData: ClientCodeData[];
-  selectedAccountId: string;
-};
-
-export const getAccountSelectionModel = ({
-  accountsData,
-  clientCodesData,
-  selectedAccountId,
-}: GetAccountSelectionModelParams): AccountSelectionModel => {
-  const accountOptions: Value[] = accountsData.map(({ id, title }) => ({
-    value: String(id),
-    title,
-  }));
-  const accountsById = new Map(accountsData.map((item) => [String(item.id), item]));
-  const selectedAccount = accountsById.get(selectedAccountId);
-  const defaultAccount = accountsData.find((item) => item.type === 'D');
-  const usedClientCodes = new Set<string>();
-  const clientCodeOptions = clientCodesData.reduce<Value[]>((result, item) => {
-    if (item.relationId !== selectedAccount?.relationId || !item.clientCode || usedClientCodes.has(item.clientCode)) {
-      return result;
-    }
-
-    usedClientCodes.add(item.clientCode);
-    result.push({
-      value: item.clientCode,
-      title: item.clientCode,
-    });
-
-    return result;
-  }, []);
-
-  return {
-    accountOptions,
-    clientCodeOptions,
-    accountsById,
-    selectedAccount,
-    defaultAccount,
-    pepCode: selectedAccount?.marketUserId ?? '',
-  };
-};
diff --git a/src/modules/MXTForms/shared/accountSelection/model/types.ts b/src/modules/MXTForms/shared/accountSelection/model/types.ts
deleted file mode 100644
index bdd395e09..000000000
--- a/src/modules/MXTForms/shared/accountSelection/model/types.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import type { Value } from '@uikit/Select';
-
-export type AccountData = {
-  id?: number;
-  account?: string;
-  relationId?: number;
-  accountType?: number;
-  serviceProductId?: number;
-  type?: string;
-};
-
-export type PartyData = {
-  id?: number;
-  name?: string;
-};
-
-export type RelationData = {
-  id?: number;
-  customerId?: number;
-};
-
-export type MarketAccessData = {
-  marketplaceId?: number;
-  marketUserId?: string;
-  partyId?: number;
-};
-
-export type ClientCodeData = {
-  id: number;
-  clientCode: string;
-  relationId: number;
-};
-
-export type AccountSelectionItem = {
-  id: number;
-  account: string;
-  type: string;
-  title: string;
-  partyId: number;
-  relationId: number;
-  marketUserId: string;
-};
-
-export type AccountSelectionModel = {
-  accountOptions: Value[];
-  clientCodeOptions: Value[];
-  accountsById: Map<string, AccountSelectionItem>;
-  selectedAccount?: AccountSelectionItem;
-  defaultAccount?: AccountSelectionItem;
-  pepCode: string;
-};
diff --git a/src/modules/MXTForms/shared/accountSelection/model/useAccountSelectionModel.ts b/src/modules/MXTForms/shared/accountSelection/model/useAccountSelectionModel.ts
deleted file mode 100644
index ed2c39b6c..000000000
--- a/src/modules/MXTForms/shared/accountSelection/model/useAccountSelectionModel.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { useMemo } from 'react';
-
-import { useMxtData } from '@hooks/mxt/useMxtData';
-
-import { buildAccountsData } from './buildAccountsData';
-import { getAccountSelectionModel } from './getAccountSelectionModel';
-
-import type { AccountData, ClientCodeData, MarketAccessData, PartyData, RelationData } from './types';
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-
-const ACCOUNT_SELECTION_MXT_KEYS = [
-  'account',
-  'party',
-  'relation',
-  'clientCode',
-  'marketAccess',
-] as const satisfies readonly MxtDataKey[];
-
-const getItems = <T>(records?: Record<number, MxtObject>) => Object.values(records ?? {}) as unknown as T[];
-
-const getErrorMessage = (errors: Record<string, unknown>) => {
-  const errorMessage = Object.values(errors)
-    .filter((value): value is string => typeof value === 'string')
-    .join('; ');
-
-  return errorMessage.length > 0 ? errorMessage : null;
-};
-
-export const useAccountSelectionModel = (marketplaceId: number | undefined, selectedAccountId: string) => {
-  const { dataRecords, errors, isLoading } = useMxtData(ACCOUNT_SELECTION_MXT_KEYS);
-  const accountsData = useMemo(
-    () =>
-      buildAccountsData(
-        getItems<AccountData>(dataRecords.account),
-        getItems<PartyData>(dataRecords.party),
-        getItems<RelationData>(dataRecords.relation),
-        getItems<MarketAccessData>(dataRecords.marketAccess),
-        marketplaceId,
-      ),
-    [dataRecords.account, dataRecords.marketAccess, dataRecords.party, dataRecords.relation, marketplaceId],
-  );
-  const clientCodesData = useMemo(() => getItems<ClientCodeData>(dataRecords.clientCode), [dataRecords.clientCode]);
-  const model = useMemo(
-    () =>
-      getAccountSelectionModel({
-        accountsData,
-        clientCodesData,
-        selectedAccountId,
-      }),
-    [accountsData, clientCodesData, selectedAccountId],
-  );
-  const error = useMemo(() => getErrorMessage(errors), [errors]);
-
-  return {
-    ...model,
-    isLoading,
-    error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/accountSelection/ui/AccountSelectionBlock.tsx b/src/modules/MXTForms/shared/accountSelection/ui/AccountSelectionBlock.tsx
deleted file mode 100644
index aa9494d4b..000000000
--- a/src/modules/MXTForms/shared/accountSelection/ui/AccountSelectionBlock.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import React from 'react';
-
-import { useLocalisation } from '@hooks/useLocalisation';
-import { DepositSelect, FormRow, InfoHint } from '@modules/MXTForms/shared/ui';
-
-import type { AccountSelectionModel } from '../model/types';
-import type { ReactNode } from 'react';
-
-const EMPTY_CLIENT_CODE_VALUE = '__empty_client_code__';
-
-type AccountSelectionBlockProps = {
-  model: AccountSelectionModel;
-  accountValue: string;
-  clientCodeValue: string;
-  accountLabel?: string;
-  accountRequired?: boolean;
-  accountStatus?: 'error' | 'warning';
-  accountError?: ReactNode;
-  isLoading?: boolean;
-  disabled?: boolean;
-  onAccountChange: (value: string) => void;
-  onClientCodeChange: (value: string) => void;
-};
-
-export const AccountSelectionBlock = ({
-  model,
-  accountValue,
-  clientCodeValue,
-  accountLabel = 'Компания и счёт',
-  accountRequired,
-  accountStatus,
-  accountError,
-  isLoading,
-  disabled,
-  onAccountChange,
-  onClientCodeChange,
-}: AccountSelectionBlockProps) => {
-  const localisation = useLocalisation();
-  const showClientCodeEmptyOption = !!accountValue && !isLoading && model.clientCodeOptions.length === 0;
-  const isClientCodeDisabled = [disabled, !accountValue].some(Boolean);
-  const clientCodeOptions = showClientCodeEmptyOption
-    ? [
-        {
-          value: EMPTY_CLIENT_CODE_VALUE,
-          title: localisation.depositForms.nothingFound,
-          disabled: true,
-        },
-      ]
-    : model.clientCodeOptions;
-
-  return (
-    <>
-      <FormRow
-        label={accountLabel}
-        required={accountRequired}
-      >
-        <DepositSelect
-          value={accountValue}
-          values={model.accountOptions}
-          status={accountStatus}
-          isLoading={isLoading}
-          disabled={disabled}
-          onChange={onAccountChange}
-        />
-        {accountError}
-      </FormRow>
-
-      <FormRow
-        label={
-          <>
-            Код клиента
-            <InfoHint title={localisation.depositForms.clientCodeHint} />
-          </>
-        }
-      >
-        <DepositSelect
-          value={clientCodeValue}
-          values={clientCodeOptions}
-          placeholder=""
-          isLoading={isLoading}
-          disabled={isClientCodeDisabled}
-          showSearch={!showClientCodeEmptyOption}
-          onChange={onClientCodeChange}
-        />
-      </FormRow>
-    </>
-  );
-};
diff --git a/src/modules/MXTForms/shared/collateralIssueSelection/index.ts b/src/modules/MXTForms/shared/collateralIssueSelection/index.ts
deleted file mode 100644
index c9c7d4742..000000000
--- a/src/modules/MXTForms/shared/collateralIssueSelection/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export { buildCollateralIssueOptions } from './model/buildCollateralIssueOptions';
-export { useCollateralIssueSelectionModel } from './model/useCollateralIssueSelectionModel';
-
-export type { CollateralIssueData, CollateralIssueSelectionModel } from './model/types';
diff --git a/src/modules/MXTForms/shared/collateralIssueSelection/model/__tests__/buildCollateralIssueOptions.test.ts b/src/modules/MXTForms/shared/collateralIssueSelection/model/__tests__/buildCollateralIssueOptions.test.ts
deleted file mode 100644
index 98e1fd2f6..000000000
--- a/src/modules/MXTForms/shared/collateralIssueSelection/model/__tests__/buildCollateralIssueOptions.test.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import { buildCollateralIssueOptions } from '../buildCollateralIssueOptions';
-import { buildCollateralIssueSelectionData } from '../buildCollateralIssueSelectionData';
-
-describe('buildCollateralIssueOptions', () => {
-  it('should map issue id to value and issue name to title', () => {
-    expect(
-      buildCollateralIssueOptions([
-        {
-          id: 620001,
-          code: 'RU000A0JWKG5',
-          symbol: 'RU000A0JWKG5',
-          name: 'КСУ акц.',
-          nameEng: 'GCC shares',
-          registerNumber: null,
-          instrumentTypeId: 4,
-          qualifiedInvestors: false,
-          priceDimensionId: 1,
-          volume: null,
-          volumeQty: null,
-          marketStatusId: 1,
-          nominalValue: 1000,
-          nominalCurrency: 1,
-          listLevel: null,
-          updated: '2024-05-08T16:19:10+03:00',
-          created: '2019-12-20T21:43:27+03:00',
-        },
-      ]),
-    ).toEqual([
-      {
-        value: '620001',
-        title: 'КСУ акц.',
-      },
-    ]);
-  });
-
-  it('should skip invalid records and duplicate issue ids', () => {
-    expect(
-      buildCollateralIssueOptions([
-        { id: 620001, name: 'КСУ акц.' },
-        { id: 620001, name: 'Дубликат' },
-        { name: 'Без идентификатора' },
-        { id: 620002 },
-      ]),
-    ).toEqual([
-      {
-        value: '620001',
-        title: 'КСУ акц.',
-      },
-    ]);
-  });
-
-  it('should preserve issue data and select the first option by default', () => {
-    const firstIssue = {
-      id: 620001,
-      name: 'КСУ акц.',
-      nominalValue: 1000,
-    };
-    const secondIssue = {
-      id: 620002,
-      name: 'КСУ облигации',
-      nominalValue: 10,
-    };
-
-    const result = buildCollateralIssueSelectionData([firstIssue, secondIssue]);
-
-    expect(result.firstIssueId).toBe(firstIssue.id);
-    expect(result.issuesById.get(firstIssue.id)).toBe(firstIssue);
-    expect(result.issuesById.get(secondIssue.id)).toBe(secondIssue);
-  });
-});
diff --git a/src/modules/MXTForms/shared/collateralIssueSelection/model/buildCollateralIssueOptions.ts b/src/modules/MXTForms/shared/collateralIssueSelection/model/buildCollateralIssueOptions.ts
deleted file mode 100644
index 5bf0c9a54..000000000
--- a/src/modules/MXTForms/shared/collateralIssueSelection/model/buildCollateralIssueOptions.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { buildCollateralIssueSelectionData } from './buildCollateralIssueSelectionData';
-
-import type { CollateralIssueData } from './types';
-import type { Value } from '@uikit/Select';
-
-export const buildCollateralIssueOptions = (items: CollateralIssueData[]): Value[] =>
-  buildCollateralIssueSelectionData(items).options;
diff --git a/src/modules/MXTForms/shared/collateralIssueSelection/model/buildCollateralIssueSelectionData.ts b/src/modules/MXTForms/shared/collateralIssueSelection/model/buildCollateralIssueSelectionData.ts
deleted file mode 100644
index fbf780812..000000000
--- a/src/modules/MXTForms/shared/collateralIssueSelection/model/buildCollateralIssueSelectionData.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import type { CollateralIssueData } from './types';
-import type { Value } from '@uikit/Select';
-
-export type CollateralIssueSelectionData = {
-  options: Value[];
-  issuesById: Map<number, CollateralIssueData>;
-  firstIssueId?: number;
-};
-
-export const buildCollateralIssueSelectionData = (items: CollateralIssueData[]): CollateralIssueSelectionData => {
-  const options: Value[] = [];
-  const issuesById = new Map<number, CollateralIssueData>();
-  let firstIssueId: number | undefined;
-
-  items.forEach((item) => {
-    if (!isFiniteNumber(item.id) || !item.name || issuesById.has(item.id)) {
-      return;
-    }
-
-    issuesById.set(item.id, item);
-    firstIssueId ??= item.id;
-    options.push({
-      value: String(item.id),
-      title: item.name,
-    });
-  });
-
-  return {
-    options,
-    issuesById,
-    firstIssueId,
-  };
-};
diff --git a/src/modules/MXTForms/shared/collateralIssueSelection/model/types.ts b/src/modules/MXTForms/shared/collateralIssueSelection/model/types.ts
deleted file mode 100644
index d43a0c9af..000000000
--- a/src/modules/MXTForms/shared/collateralIssueSelection/model/types.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import type { Value } from '@uikit/Select';
-
-export type CollateralIssueData = {
-  id?: number;
-  code?: string;
-  symbol?: string;
-  name?: string;
-  nameEng?: string;
-  registerNumber?: string | null;
-  instrumentTypeId?: number;
-  qualifiedInvestors?: boolean;
-  priceDimensionId?: number;
-  volume?: number | null;
-  volumeQty?: number | null;
-  marketStatusId?: number;
-  nominalValue?: number;
-  nominalCurrency?: number;
-  listLevel?: number | null;
-  updated?: string;
-  created?: string;
-};
-
-export type CollateralIssueSelectionModel = {
-  options: Value[];
-  issuesById: Map<number, CollateralIssueData>;
-  firstIssueId?: number;
-  isLoading: boolean;
-  error: string | null;
-};
diff --git a/src/modules/MXTForms/shared/collateralIssueSelection/model/useCollateralIssueSelectionModel.ts b/src/modules/MXTForms/shared/collateralIssueSelection/model/useCollateralIssueSelectionModel.ts
deleted file mode 100644
index 5f48aff32..000000000
--- a/src/modules/MXTForms/shared/collateralIssueSelection/model/useCollateralIssueSelectionModel.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { useMemo } from 'react';
-
-import { useMxtData } from '@hooks/mxt/useMxtData';
-
-import { buildCollateralIssueSelectionData } from './buildCollateralIssueSelectionData';
-
-import type { CollateralIssueData, CollateralIssueSelectionModel } from './types';
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-
-const COLLATERAL_ISSUE_MXT_KEYS = ['issueGCC'] as const satisfies readonly MxtDataKey[];
-
-const getItems = (records?: Record<number, MxtObject>) =>
-  Object.values(records ?? {}) as unknown as CollateralIssueData[];
-
-export const useCollateralIssueSelectionModel = (): CollateralIssueSelectionModel => {
-  const { dataRecords, errors, isLoading } = useMxtData(COLLATERAL_ISSUE_MXT_KEYS);
-  const selectionData = useMemo(
-    () => buildCollateralIssueSelectionData(getItems(dataRecords.issueGCC)),
-    [dataRecords.issueGCC],
-  );
-  const error = typeof errors.issueGCC === 'string' ? errors.issueGCC : null;
-
-  return {
-    ...selectionData,
-    isLoading,
-    error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/commission/api/__tests__/requestCommission.test.ts b/src/modules/MXTForms/shared/commission/api/__tests__/requestCommission.test.ts
deleted file mode 100644
index d4f55658c..000000000
--- a/src/modules/MXTForms/shared/commission/api/__tests__/requestCommission.test.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import {
-  getMockClient,
-  getPublishedBody,
-  mockMxtResponse,
-  resetMxtClientMock,
-} from '@modules/MXTForms/shared/request/testing/mockWsMxtStompClient';
-
-import { requestCommission } from '../requestCommission';
-
-describe('requestCommission', () => {
-  beforeEach(resetMxtClientMock);
-
-  it('should publish numeric commission request body', async () => {
-    const client = getMockClient();
-    mockMxtResponse({
-      destination: 'chargeCalc.new',
-      messageType: 'success',
-      data: {
-        charge: 4.46,
-      },
-    });
-
-    await expect(
-      requestCommission({
-        formId: 'deposit-form',
-        requestId: 'receipt-1',
-        calculationType: 'standard',
-        accountId: 19750891494,
-        marketplaceId: 1102,
-        partyId: 19750498603,
-        issueId: 620000,
-        fundingPrice: '6,04',
-        quantity: '35',
-      }),
-    ).resolves.toBe(4.46);
-
-    expect(getPublishedBody()).toEqual({
-      accountId: 19750891494,
-      marketplaceId: 1102,
-      partyId: 19750498603,
-      sideId: 1,
-      issueId: 620000,
-      price: 6.04,
-      priceEntryTypeId: 1,
-      quantity: 35,
-      requestVolumeTypeId: 3,
-    });
-    expect(client.activate).toHaveBeenCalledTimes(1);
-  });
-
-  it('should publish addressed commission request body', async () => {
-    mockMxtResponse({
-      destination: 'chargeCalc.new',
-      messageType: 'success',
-      data: {
-        charge: 4.46,
-      },
-    });
-
-    await expect(
-      requestCommission({
-        formId: 'address-deposit-form',
-        requestId: 'receipt-2',
-        calculationType: 'addressed',
-        accountId: 18839010003,
-        counterPartyId: 651565,
-        marketplaceId: 1010,
-        partyId: 18838510000,
-        fundingDuration: 5,
-        issueId: 620000,
-        fundingPrice: '15',
-        quantity: '1000',
-        valueDate: '2026-06-10',
-      }),
-    ).resolves.toBe(4.46);
-
-    expect(getPublishedBody()).toEqual({
-      accountId: 18839010003,
-      counterPartyId: 651565,
-      marketplaceId: 1010,
-      partyId: 18838510000,
-      sideId: 1,
-      isTechnicalParty: false,
-      fundingDuration: 5,
-      issueId: 620000,
-      price: 15,
-      quantity: 1000,
-      requestVolumeTypeId: 3,
-      valueDate: '2026-06-10',
-    });
-  });
-});
diff --git a/src/modules/MXTForms/shared/commission/api/requestCommission.ts b/src/modules/MXTForms/shared/commission/api/requestCommission.ts
deleted file mode 100644
index 7d600a725..000000000
--- a/src/modules/MXTForms/shared/commission/api/requestCommission.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { isFiniteNumber, parseOptionalNumber } from '@modules/MXTForms/shared/numbers';
-import { requestByReceipt } from '@modules/MXTForms/shared/request/requestByReceipt';
-
-import type { CommissionRequestPayload } from '../model/types';
-
-const CHARGE_CALC_DESTINATION = 'chargeCalc.new';
-
-type ChargeCalcResponseBody = {
-  receiptId?: string;
-  destination?: string;
-  messageType?: string;
-  data?: {
-    charge?: number;
-  };
-};
-
-const isChargeCalcResponseBody = (body: unknown, receiptId: string): body is ChargeCalcResponseBody =>
-  typeof body === 'object' &&
-  body !== null &&
-  (body as ChargeCalcResponseBody).destination === CHARGE_CALC_DESTINATION &&
-  (body as ChargeCalcResponseBody).receiptId === receiptId;
-
-const getChargeFromResponse = (body: ChargeCalcResponseBody) => {
-  const charge = body.data?.charge;
-
-  return isFiniteNumber(charge) ? charge : undefined;
-};
-
-export const requestCommission = async (payload: CommissionRequestPayload): Promise<number | undefined> => {
-  const { calculationType, accountId, marketplaceId, partyId, issueId, fundingPrice, quantity, requestId } = payload;
-  const parsedFundingPrice = parseOptionalNumber(fundingPrice);
-  const parsedQuantity = parseOptionalNumber(quantity);
-  const isAddressed = calculationType === 'addressed';
-
-  if (
-    !isFiniteNumber(accountId) ||
-    !isFiniteNumber(marketplaceId) ||
-    !isFiniteNumber(partyId) ||
-    !isFiniteNumber(issueId) ||
-    !isFiniteNumber(parsedFundingPrice) ||
-    parsedFundingPrice <= 0 ||
-    !isFiniteNumber(parsedQuantity) ||
-    parsedQuantity <= 0
-  ) {
-    return undefined;
-  }
-
-  if (isAddressed) {
-    const { counterPartyId, fundingDuration, valueDate } = payload;
-
-    if (!isFiniteNumber(counterPartyId) || !isFiniteNumber(fundingDuration) || fundingDuration < 0 || !valueDate) {
-      return undefined;
-    }
-  }
-
-  return requestByReceipt<number | undefined>({
-    destination: CHARGE_CALC_DESTINATION,
-    receiptId: requestId,
-    body: isAddressed
-      ? {
-          accountId,
-          counterPartyId: payload.counterPartyId,
-          marketplaceId,
-          partyId,
-          sideId: 1,
-          isTechnicalParty: false,
-          fundingDuration: payload.fundingDuration,
-          issueId,
-          price: parsedFundingPrice,
-          quantity: parsedQuantity,
-          requestVolumeTypeId: 3,
-          valueDate: payload.valueDate,
-        }
-      : {
-          accountId,
-          marketplaceId,
-          partyId,
-          sideId: 1,
-          issueId,
-          price: parsedFundingPrice,
-          priceEntryTypeId: 1,
-          quantity: parsedQuantity,
-          requestVolumeTypeId: 3,
-        },
-    getResult: (body, receiptId) =>
-      isChargeCalcResponseBody(body, receiptId)
-        ? {
-            matched: true,
-            value: getChargeFromResponse(body),
-          }
-        : {
-            matched: false,
-          },
-  });
-};
diff --git a/src/modules/MXTForms/shared/commission/index.ts b/src/modules/MXTForms/shared/commission/index.ts
deleted file mode 100644
index 3d0c5ca8b..000000000
--- a/src/modules/MXTForms/shared/commission/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export { CommissionField } from './ui/CommissionField';
-export { commissionRequested, commissionReset } from './model/actions';
-export { commissionSelector } from './model/selectors';
-export { default as commissionReducer } from './model/slice';
-export { useCommission } from './model/useCommission';
-export { useCommissionReductionLock } from './model/useCommissionReductionLock';
-export { watchCommission } from './model/saga';
-
-export type { CommissionRequestParams, CommissionRequestPayload, CommissionState } from './model/types';
diff --git a/src/modules/MXTForms/shared/commission/model/__tests__/slice.test.ts b/src/modules/MXTForms/shared/commission/model/__tests__/slice.test.ts
deleted file mode 100644
index 5ee99998d..000000000
--- a/src/modules/MXTForms/shared/commission/model/__tests__/slice.test.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { commissionRequested, commissionReset } from '../actions';
-import commissionReducer, { commissionFailed, commissionSucceeded } from '../slice';
-
-describe('commission slice', () => {
-  it('should store loading and successful result by form id', () => {
-    const requestAction = commissionRequested({
-      formId: 'form-1',
-      calculationType: 'standard',
-      accountId: 10,
-      marketplaceId: 20,
-      partyId: 30,
-      issueId: 40,
-      fundingPrice: '6.04',
-      quantity: '10',
-    });
-    const loadingState = commissionReducer(undefined, requestAction);
-    const state = commissionReducer(
-      loadingState,
-      commissionSucceeded({
-        formId: 'form-1',
-        requestId: requestAction.payload.requestId,
-        value: 4.46,
-      }),
-    );
-
-    expect(state['form-1']).toEqual({
-      loading: false,
-      value: 4.46,
-      error: null,
-      requestId: requestAction.payload.requestId,
-    });
-  });
-
-  it('should ignore stale responses and reset form state', () => {
-    const requestAction = commissionRequested({
-      formId: 'form-1',
-      calculationType: 'standard',
-      fundingPrice: '6.04',
-      quantity: '10',
-    });
-    const loadingState = commissionReducer(undefined, requestAction);
-    const staleState = commissionReducer(
-      loadingState,
-      commissionFailed({
-        formId: 'form-1',
-        requestId: 'stale-request',
-        error: 'stale',
-      }),
-    );
-    const resetState = commissionReducer(staleState, commissionReset({ formId: 'form-1' }));
-
-    expect(staleState).toEqual(loadingState);
-    expect(resetState['form-1']).toBeUndefined();
-  });
-});
diff --git a/src/modules/MXTForms/shared/commission/model/actions.ts b/src/modules/MXTForms/shared/commission/model/actions.ts
deleted file mode 100644
index 526e8e181..000000000
--- a/src/modules/MXTForms/shared/commission/model/actions.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { createAction } from '@reduxjs/toolkit';
-
-import { createRequestId } from '@modules/MXTForms/shared/request/createRequestId';
-
-import type { CommissionRequestParams, CommissionRequestPayload } from './types';
-
-export const commissionRequested = createAction(
-  'formCommission/requested',
-  (payload: CommissionRequestParams): { payload: CommissionRequestPayload } => ({
-    payload: {
-      ...payload,
-      requestId: createRequestId(),
-    },
-  }),
-);
-
-export const commissionReset = createAction<{ formId: string }>('formCommission/reset');
diff --git a/src/modules/MXTForms/shared/commission/model/saga.ts b/src/modules/MXTForms/shared/commission/model/saga.ts
deleted file mode 100644
index 2e48267ae..000000000
--- a/src/modules/MXTForms/shared/commission/model/saga.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { call, cancel, delay, fork, put, take } from 'typed-redux-saga';
-
-import { requestCommission } from '../api/requestCommission';
-
-import { commissionRequested, commissionReset } from './actions';
-import { commissionFailed, commissionSucceeded } from './slice';
-
-import type { Action } from 'redux';
-import type { Task } from 'redux-saga';
-
-const COMMISSION_REQUEST_DEBOUNCE_MS = 300;
-
-const getErrorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));
-
-function* requestCommissionFlow(action: ReturnType<typeof commissionRequested>) {
-  const { payload } = action;
-
-  yield* delay(COMMISSION_REQUEST_DEBOUNCE_MS);
-
-  try {
-    const value = yield* call(requestCommission, payload);
-
-    yield* put(
-      commissionSucceeded({
-        formId: payload.formId,
-        requestId: payload.requestId,
-        value,
-      }),
-    );
-  } catch (error) {
-    yield* put(
-      commissionFailed({
-        formId: payload.formId,
-        requestId: payload.requestId,
-        error: getErrorMessage(error),
-      }),
-    );
-  }
-}
-
-export function* watchCommission() {
-  const tasks = new Map<string, Task>();
-
-  while (true) {
-    const action: Action = yield* take([commissionRequested.type, commissionReset.type]);
-
-    if (commissionReset.match(action)) {
-      const currentTask = tasks.get(action.payload.formId);
-
-      if (currentTask) {
-        yield* cancel(currentTask);
-        tasks.delete(action.payload.formId);
-      }
-    } else if (commissionRequested.match(action)) {
-      const currentTask = tasks.get(action.payload.formId);
-
-      if (currentTask) {
-        yield* cancel(currentTask);
-      }
-
-      const task = yield* fork(requestCommissionFlow, action);
-      tasks.set(action.payload.formId, task);
-    }
-  }
-}
diff --git a/src/modules/MXTForms/shared/commission/model/selectors.ts b/src/modules/MXTForms/shared/commission/model/selectors.ts
deleted file mode 100644
index 5136598bc..000000000
--- a/src/modules/MXTForms/shared/commission/model/selectors.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { RootState } from '@store/setupStore';
-
-const DEFAULT_COMMISSION_STATE = {
-  loading: false,
-  value: undefined,
-  error: null,
-};
-
-export const commissionSelector = (formId: string) => (state: RootState) =>
-  state.formCommission[formId] ?? DEFAULT_COMMISSION_STATE;
diff --git a/src/modules/MXTForms/shared/commission/model/slice.ts b/src/modules/MXTForms/shared/commission/model/slice.ts
deleted file mode 100644
index 300e27aa7..000000000
--- a/src/modules/MXTForms/shared/commission/model/slice.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { createSlice, PayloadAction } from '@reduxjs/toolkit';
-
-import { commissionRequested, commissionReset } from './actions';
-
-import type { CommissionSliceState } from './types';
-
-type CommissionResultPayload = {
-  formId: string;
-  requestId: string;
-  value?: number;
-};
-
-type CommissionFailurePayload = {
-  formId: string;
-  requestId: string;
-  error: string;
-};
-
-export const initialCommissionState: CommissionSliceState = {};
-
-const commissionSlice = createSlice({
-  name: 'formCommission',
-  initialState: initialCommissionState,
-  reducers: {
-    commissionSucceeded: (state, { payload }: PayloadAction<CommissionResultPayload>) => {
-      const current = state[payload.formId];
-
-      if (!current || current.requestId !== payload.requestId) {
-        return;
-      }
-
-      state[payload.formId] = {
-        loading: false,
-        value: payload.value,
-        error: null,
-        requestId: payload.requestId,
-      };
-    },
-    commissionFailed: (state, { payload }: PayloadAction<CommissionFailurePayload>) => {
-      const current = state[payload.formId];
-
-      if (!current || current.requestId !== payload.requestId) {
-        return;
-      }
-
-      state[payload.formId] = {
-        loading: false,
-        error: payload.error,
-        requestId: payload.requestId,
-      };
-    },
-  },
-  extraReducers: (builder) => {
-    builder
-      .addCase(commissionRequested, (state, { payload }) => {
-        state[payload.formId] = {
-          loading: true,
-          error: null,
-          requestId: payload.requestId,
-        };
-      })
-      .addCase(commissionReset, (state, { payload }) => {
-        delete state[payload.formId];
-      });
-  },
-});
-
-export const { commissionFailed, commissionSucceeded } = commissionSlice.actions;
-export default commissionSlice.reducer;
diff --git a/src/modules/MXTForms/shared/commission/model/types.ts b/src/modules/MXTForms/shared/commission/model/types.ts
deleted file mode 100644
index f011943f1..000000000
--- a/src/modules/MXTForms/shared/commission/model/types.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-type CommissionRequestBaseParams = {
-  formId: string;
-  accountId?: number;
-  marketplaceId?: number;
-  partyId?: number;
-  issueId?: number;
-  fundingPrice: string;
-  quantity: string;
-};
-
-export type StandardCommissionRequestParams = CommissionRequestBaseParams & {
-  calculationType: 'standard';
-};
-
-export type AddressedCommissionRequestParams = CommissionRequestBaseParams & {
-  calculationType: 'addressed';
-  counterPartyId?: number;
-  fundingDuration?: number;
-  valueDate: string;
-};
-
-export type CommissionRequestParams = StandardCommissionRequestParams | AddressedCommissionRequestParams;
-
-export type CommissionRequestPayload = CommissionRequestParams & {
-  requestId: string;
-};
-
-export type CommissionState = {
-  loading: boolean;
-  value?: number;
-  error: string | null;
-  requestId?: string;
-};
-
-export type CommissionSliceState = Record<string, CommissionState>;
diff --git a/src/modules/MXTForms/shared/commission/model/useCommission.ts b/src/modules/MXTForms/shared/commission/model/useCommission.ts
deleted file mode 100644
index 324756b51..000000000
--- a/src/modules/MXTForms/shared/commission/model/useCommission.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { useEffect } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-
-import { commissionRequested, commissionReset } from './actions';
-import { commissionSelector } from './selectors';
-
-import type {
-  AddressedCommissionRequestParams,
-  CommissionRequestParams,
-  StandardCommissionRequestParams,
-} from './types';
-
-type UseStandardCommissionParams = Omit<StandardCommissionRequestParams, 'formId'> & {
-  formId: string;
-  enabled: boolean;
-};
-
-type UseAddressedCommissionParams = Omit<AddressedCommissionRequestParams, 'formId'> & {
-  formId: string;
-  enabled: boolean;
-};
-
-type UseCommissionParams = UseStandardCommissionParams | UseAddressedCommissionParams;
-
-export const useCommission = (params: UseCommissionParams) => {
-  const { formId, enabled, calculationType, accountId, marketplaceId, partyId, issueId, fundingPrice, quantity } =
-    params;
-  const counterPartyId = calculationType === 'addressed' ? params.counterPartyId : undefined;
-  const fundingDuration = calculationType === 'addressed' ? params.fundingDuration : undefined;
-  const valueDate = calculationType === 'addressed' ? params.valueDate : undefined;
-  const dispatch = useDispatch();
-  const state = useAppSelect(commissionSelector(formId));
-
-  useEffect(() => {
-    if (!enabled) {
-      dispatch(commissionReset({ formId }));
-
-      return;
-    }
-
-    const requestParams: CommissionRequestParams =
-      calculationType === 'addressed'
-        ? {
-            formId,
-            calculationType,
-            accountId,
-            counterPartyId,
-            marketplaceId,
-            partyId,
-            fundingDuration,
-            issueId,
-            fundingPrice,
-            quantity,
-            valueDate: valueDate ?? '',
-          }
-        : {
-            formId,
-            calculationType,
-            accountId,
-            marketplaceId,
-            partyId,
-            issueId,
-            fundingPrice,
-            quantity,
-          };
-
-    dispatch(commissionRequested(requestParams));
-
-    return () => {
-      dispatch(commissionReset({ formId }));
-    };
-  }, [
-    accountId,
-    calculationType,
-    counterPartyId,
-    dispatch,
-    enabled,
-    formId,
-    fundingDuration,
-    issueId,
-    marketplaceId,
-    partyId,
-    fundingPrice,
-    quantity,
-    valueDate,
-  ]);
-
-  return {
-    commission: state.value,
-    loading: state.loading,
-    error: state.error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/commission/model/useCommissionReductionLock.ts b/src/modules/MXTForms/shared/commission/model/useCommissionReductionLock.ts
deleted file mode 100644
index 296f0eda3..000000000
--- a/src/modules/MXTForms/shared/commission/model/useCommissionReductionLock.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { useCallback, useEffect, useRef, useState } from 'react';
-
-type UseCommissionReductionLockParams = {
-  requiredFieldsSignature: string;
-  onReduce: VoidFunction;
-};
-
-export const useCommissionReductionLock = ({ requiredFieldsSignature, onReduce }: UseCommissionReductionLockParams) => {
-  const [isReduceDisabled, setIsReduceDisabled] = useState(false);
-  const pendingReductionRef = useRef(false);
-  const trackedFieldsSignatureRef = useRef(requiredFieldsSignature);
-
-  useEffect(() => {
-    if (!isReduceDisabled) {
-      trackedFieldsSignatureRef.current = requiredFieldsSignature;
-
-      return;
-    }
-
-    if (pendingReductionRef.current) {
-      pendingReductionRef.current = false;
-      trackedFieldsSignatureRef.current = requiredFieldsSignature;
-
-      return;
-    }
-
-    if (trackedFieldsSignatureRef.current !== requiredFieldsSignature) {
-      trackedFieldsSignatureRef.current = requiredFieldsSignature;
-      setIsReduceDisabled(false);
-    }
-  }, [isReduceDisabled, requiredFieldsSignature]);
-
-  const handleReduce = useCallback(() => {
-    if (isReduceDisabled) {
-      return;
-    }
-
-    pendingReductionRef.current = true;
-    setIsReduceDisabled(true);
-    onReduce();
-  }, [isReduceDisabled, onReduce]);
-
-  return {
-    isReduceDisabled,
-    handleReduce,
-  };
-};
diff --git a/src/modules/MXTForms/shared/commission/ui/CommissionField.tsx b/src/modules/MXTForms/shared/commission/ui/CommissionField.tsx
deleted file mode 100644
index 8cbef1438..000000000
--- a/src/modules/MXTForms/shared/commission/ui/CommissionField.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import React from 'react';
-
-import { ButtonLoadingSpinner } from '@components/Icons/ButtonLoadingSpinner';
-import { formatNumberValue } from '@modules/MXTForms/shared/model';
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-import { FormRow } from '@modules/MXTForms/shared/ui';
-import { Button } from '@uikit/Button';
-
-import styles from '../../DepositFormShared.module.scss';
-
-const COMMISSION_EMPTY_HINT = 'Заполните обязательные поля для расчёта комиссии';
-const COMMISSION_LOADING_HINT = 'Расчёт комиссии...';
-const COMMISSION_UNAVAILABLE_HINT = 'Комиссия не рассчитана';
-
-type CommissionFieldProps = {
-  commission?: number;
-  loading: boolean;
-  canCalculate: boolean;
-  reduceDisabled?: boolean;
-  showReduceButton?: boolean;
-  required?: boolean;
-  onReduce: VoidFunction;
-};
-
-export const CommissionField = ({
-  commission,
-  loading,
-  canCalculate,
-  reduceDisabled,
-  showReduceButton = true,
-  required,
-  onReduce,
-}: CommissionFieldProps) => {
-  const renderContent = () => {
-    if (loading) {
-      return (
-        <span className={styles.commissionLoading}>
-          <ButtonLoadingSpinner className={styles.commissionSpinner} />
-          <span className={styles.mutedText}>{COMMISSION_LOADING_HINT}</span>
-        </span>
-      );
-    }
-
-    if (isFiniteNumber(commission)) {
-      return (
-        <div className={styles.commissionInfo}>
-          <span className={styles.valueText}>{formatNumberValue(String(commission))} RUB</span>
-          {showReduceButton ? (
-            <Button
-              variant="unfilled-secondary"
-              text="Уменьшить на размер комиссии"
-              className={styles.commissionButton}
-              disabled={reduceDisabled}
-              onClick={onReduce}
-            />
-          ) : null}
-        </div>
-      );
-    }
-
-    return (
-      <span className={styles.commissionPlaceholder}>
-        {canCalculate ? COMMISSION_UNAVAILABLE_HINT : COMMISSION_EMPTY_HINT}
-      </span>
-    );
-  };
-
-  return (
-    <FormRow
-      label="Комиссия"
-      required={required}
-    >
-      {renderContent()}
-    </FormRow>
-  );
-};
diff --git a/src/modules/MXTForms/shared/confirm/MxtFormConfirmModal.tsx b/src/modules/MXTForms/shared/confirm/MxtFormConfirmModal.tsx
deleted file mode 100644
index bfd406cd7..000000000
--- a/src/modules/MXTForms/shared/confirm/MxtFormConfirmModal.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React from 'react';
-import { useDispatch } from 'react-redux';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { ConfirmDescription } from '@modules/MXTForms/shared/ui';
-import { closeModalRequested } from '@store/actions/modal';
-import { mxtFormConfirmAccepted } from '@store/actions/mxtFormConfirm';
-import { addressDepositFormSubmitSelector } from '@store/selectors/addressDepositForm';
-import { depositFormSubmitSelector } from '@store/selectors/depositForm';
-
-import { MxtFormDetailsConfirm } from './MxtFormDetailsConfirm';
-
-import type { MxtFormDetailsConfirmRow } from './types';
-import type { ModalBaseProps } from '@modules/ModalRoot/types';
-
-export type MxtFormConfirmKind = 'deposit' | 'addressDeposit';
-
-export type MxtFormConfirmModalProps = ModalBaseProps & {
-  formKind: MxtFormConfirmKind;
-  formId: string;
-  rows: MxtFormDetailsConfirmRow[];
-  description: string;
-  footerText?: string;
-};
-
-const getSubmitSelector = (formKind: MxtFormConfirmKind, formId: string) =>
-  formKind === 'deposit' ? depositFormSubmitSelector(formId) : addressDepositFormSubmitSelector(formId);
-
-export const MxtFormConfirmModal = ({
-  id,
-  formKind,
-  formId,
-  rows,
-  description,
-  footerText,
-}: MxtFormConfirmModalProps) => {
-  const dispatch = useDispatch();
-  const { loading, error } = useAppSelect(getSubmitSelector(formKind, formId));
-
-  const handleClose = () => {
-    dispatch(closeModalRequested(id));
-  };
-
-  const handleConfirm = () => {
-    if (loading) {
-      return;
-    }
-
-    dispatch(mxtFormConfirmAccepted({ modalId: id, formId }));
-  };
-
-  return (
-    <MxtFormDetailsConfirm
-      rows={rows}
-      description={
-        <ConfirmDescription
-          description={description}
-          error={error}
-        />
-      }
-      footerText={footerText}
-      confirmText={loading ? 'Отправка...' : 'Подтвердить'}
-      confirmDisabled={loading}
-      onClose={handleClose}
-      onConfirm={handleConfirm}
-    />
-  );
-};
diff --git a/src/modules/MXTForms/shared/confirm/MxtFormDetailsConfirm.module.scss b/src/modules/MXTForms/shared/confirm/MxtFormDetailsConfirm.module.scss
deleted file mode 100644
index 58ccad0ad..000000000
--- a/src/modules/MXTForms/shared/confirm/MxtFormDetailsConfirm.module.scss
+++ /dev/null
@@ -1,121 +0,0 @@
-@import 'colors.scss';
-@import 'mixins.module.scss';
-
-.modal {
-  width: 480px;
-  max-height: calc(100dvh - 32px);
-  background-color: $bg-base-modal;
-  border: 1px solid $border-base-widget-modal;
-  border-radius: 4px;
-  box-shadow: 0 0 20px 0 #000000;
-  overflow: hidden;
-  display: flex;
-  flex-direction: column;
-}
-
-.header {
-  min-height: 72px;
-  padding: 8px;
-  box-sizing: border-box;
-  border-bottom: 1px solid $line-interface-primary-table;
-  display: flex;
-  align-items: flex-start;
-  justify-content: space-between;
-  gap: 8px;
-  flex: 0 0 72px;
-}
-
-.headerText {
-  flex: 1 1 auto;
-  min-width: 0;
-}
-
-.title {
-  margin: 0;
-  padding: 6px 8px;
-  color: $text-interface-primary-value;
-  @include font-params(700, 16px, 24px);
-}
-
-.subtitle {
-  margin: 0;
-  padding: 0 8px 4px;
-  color: $text-interface-secondary-label-no-value;
-  font-feature-settings:
-    'lnum' 1,
-    'tnum' 1;
-  @include font-params(400, 12px, 16px);
-}
-
-.closeButton {
-  color: $surface-icon-basis-active-primary;
-  flex: 0 0 auto;
-}
-
-.content {
-  padding: 16px;
-  overflow-y: auto;
-  min-height: 0;
-}
-
-.rows {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-}
-
-.row {
-  min-height: 24px;
-  box-sizing: border-box;
-  display: grid;
-  grid-template-columns: 160px 262px;
-  align-items: center;
-}
-
-.label {
-  color: $text-interface-secondary-label-no-value;
-  font-feature-settings:
-    'lnum' 1,
-    'tnum' 1;
-  @include font-params(400, 12px, 16px);
-}
-
-.value {
-  color: $text-interface-primary-value;
-  text-align: left;
-  overflow-wrap: anywhere;
-  font-feature-settings:
-    'lnum' 1,
-    'tnum' 1;
-  @include font-params(400, 12px, 16px);
-}
-
-.footer {
-  height: 64px;
-  padding: 16px;
-  box-sizing: border-box;
-  border-top: 1px solid $border-base-widget-modal;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  gap: 10px;
-  flex: 0 0 64px;
-}
-
-.footerWithoutText {
-  justify-content: flex-end;
-}
-
-.footerText {
-  color: $text-interface-tertiary-notice;
-  font-feature-settings:
-    'lnum' 1,
-    'tnum' 1;
-  @include font-params(400, 10px, 12px);
-}
-
-.actions {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
diff --git a/src/modules/MXTForms/shared/confirm/MxtFormDetailsConfirm.tsx b/src/modules/MXTForms/shared/confirm/MxtFormDetailsConfirm.tsx
deleted file mode 100644
index d5d021c03..000000000
--- a/src/modules/MXTForms/shared/confirm/MxtFormDetailsConfirm.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import cn from 'classnames';
-import React from 'react';
-
-import { IconButton } from '@components/IconButton';
-import { CloseIcon } from '@components/Icons/CloseIcon';
-import { Button } from '@uikit/Button';
-import { MODAL_DRAG_CANCEL_CLASSNAME, ModalDragHandle } from '@uikit/Modal';
-
-import styles from './MxtFormDetailsConfirm.module.scss';
-
-import type { MxtFormDetailsConfirmProps } from './types';
-
-const DEFAULT_DESCRIPTION = 'Вы действительно хотите ввести заявку с данными параметрами?';
-
-export const MxtFormDetailsConfirm = ({
-  rows,
-  title = 'Подтверждение заявки',
-  description = DEFAULT_DESCRIPTION,
-  footerText,
-  cancelText = 'Отмена',
-  confirmText = 'Подтвердить',
-  confirmVariant = 'filled-red',
-  confirmDisabled,
-  onClose,
-  onConfirm,
-}: MxtFormDetailsConfirmProps) => (
-  <div className={styles.modal}>
-    <ModalDragHandle className={styles.header}>
-      <div className={styles.headerText}>
-        <h2 className={styles.title}>{title}</h2>
-        {description && <p className={styles.subtitle}>{description}</p>}
-      </div>
-      <IconButton
-        icon={<CloseIcon />}
-        className={`${styles.closeButton} ${MODAL_DRAG_CANCEL_CLASSNAME}`}
-        onClick={onClose}
-        noEffects
-        size="large"
-      />
-    </ModalDragHandle>
-
-    <div className={styles.content}>
-      <div className={styles.rows}>
-        {rows.map(({ key, label, value }, index) => (
-          <div
-            className={styles.row}
-            key={key ?? index}
-          >
-            <div className={styles.label}>{label}</div>
-            <div className={styles.value}>{value}</div>
-          </div>
-        ))}
-      </div>
-    </div>
-
-    <div className={cn(styles.footer, !footerText && styles.footerWithoutText)}>
-      {footerText && <div className={styles.footerText}>{footerText}</div>}
-
-      <div className={styles.actions}>
-        <Button
-          variant="filled-secondary"
-          text={cancelText}
-          onClick={onClose}
-        />
-        <Button
-          variant={confirmVariant}
-          text={confirmText}
-          disabled={confirmDisabled}
-          onClick={onConfirm}
-        />
-      </div>
-    </div>
-  </div>
-);
diff --git a/src/modules/MXTForms/shared/confirm/index.ts b/src/modules/MXTForms/shared/confirm/index.ts
deleted file mode 100644
index 49a256232..000000000
--- a/src/modules/MXTForms/shared/confirm/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export { MxtFormDetailsConfirm } from './MxtFormDetailsConfirm';
-export { MxtFormConfirmModal } from './MxtFormConfirmModal';
-export type { MxtFormConfirmKind, MxtFormConfirmModalProps } from './MxtFormConfirmModal';
-export type { MxtFormDetailsConfirmProps, MxtFormDetailsConfirmRow } from './types';
diff --git a/src/modules/MXTForms/shared/confirm/types.ts b/src/modules/MXTForms/shared/confirm/types.ts
deleted file mode 100644
index efb6bd6dd..000000000
--- a/src/modules/MXTForms/shared/confirm/types.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import type { ButtonVariant } from '@uikit/Button/types';
-import type { Key, ReactNode } from 'react';
-
-export type MxtFormDetailsConfirmRow = {
-  key?: Key;
-  label: ReactNode;
-  value: ReactNode;
-};
-
-export type MxtFormDetailsConfirmProps = {
-  rows: MxtFormDetailsConfirmRow[];
-  title?: ReactNode;
-  description?: ReactNode;
-  footerText?: ReactNode;
-  cancelText?: string;
-  confirmText?: string;
-  confirmVariant?: ButtonVariant;
-  confirmDisabled?: boolean;
-  onClose: VoidFunction;
-  onConfirm: VoidFunction;
-};
diff --git a/src/modules/MXTForms/shared/counterPartySelection/index.ts b/src/modules/MXTForms/shared/counterPartySelection/index.ts
deleted file mode 100644
index dc328aa14..000000000
--- a/src/modules/MXTForms/shared/counterPartySelection/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export { buildCounterPartyOptions } from './model/buildCounterPartyOptions';
-export { useCounterPartySelectionModel } from './model/useCounterPartySelectionModel';
-
-export type { CounterPartyData, CounterPartySelectionModel } from './model/types';
diff --git a/src/modules/MXTForms/shared/counterPartySelection/model/__tests__/buildCounterPartyOptions.test.ts b/src/modules/MXTForms/shared/counterPartySelection/model/__tests__/buildCounterPartyOptions.test.ts
deleted file mode 100644
index 582c3ea78..000000000
--- a/src/modules/MXTForms/shared/counterPartySelection/model/__tests__/buildCounterPartyOptions.test.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { buildCounterPartyOptions } from '../buildCounterPartyOptions';
-
-describe('buildCounterPartyOptions', () => {
-  it('should map party id to value and party name to title', () => {
-    expect(
-      buildCounterPartyOptions([
-        {
-          id: 19629860011,
-          partyId: 651020,
-          partySymbolId: 1,
-          partySymbol: 'MC0076700000',
-          partyName: 'НОВИКОМ',
-          partyNameEng: null,
-        },
-      ]),
-    ).toEqual([
-      {
-        value: '651020',
-        title: 'НОВИКОМ',
-      },
-    ]);
-  });
-
-  it('should skip invalid records and duplicate party ids', () => {
-    expect(
-      buildCounterPartyOptions([
-        { partyId: 651020, partySymbolId: 1, partyName: 'НОВИКОМ' },
-        { partyId: 651020, partySymbolId: 1, partyName: 'Дубликат' },
-        { partySymbolId: 1, partyName: 'Без идентификатора' },
-        { partyId: 651021, partySymbolId: 1 },
-        { partyId: 651022, partySymbolId: 2, partyName: 'Неверный тип символа' },
-      ]),
-    ).toEqual([
-      {
-        value: '651020',
-        title: 'НОВИКОМ',
-      },
-    ]);
-  });
-
-  it('should sort options by party name', () => {
-    expect(
-      buildCounterPartyOptions([
-        { partyId: 3, partySymbolId: 1, partyName: 'Центр' },
-        { partyId: 1, partySymbolId: 1, partyName: 'Альфа' },
-        { partyId: 2, partySymbolId: 1, partyName: 'Бета' },
-      ]),
-    ).toEqual([
-      { value: '1', title: 'Альфа' },
-      { value: '2', title: 'Бета' },
-      { value: '3', title: 'Центр' },
-    ]);
-  });
-});
diff --git a/src/modules/MXTForms/shared/counterPartySelection/model/buildCounterPartyOptions.ts b/src/modules/MXTForms/shared/counterPartySelection/model/buildCounterPartyOptions.ts
deleted file mode 100644
index 8ecc85634..000000000
--- a/src/modules/MXTForms/shared/counterPartySelection/model/buildCounterPartyOptions.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import type { CounterPartyData } from './types';
-import type { Value } from '@uikit/Select';
-
-const PARTY_SYMBOL_ID = 1;
-
-export const buildCounterPartyOptions = (items: CounterPartyData[]): Value[] => {
-  const usedPartyIds = new Set<number>();
-
-  const options = items.reduce<{ value: string; title: string }[]>((result, item) => {
-    if (
-      item.partySymbolId !== PARTY_SYMBOL_ID ||
-      !isFiniteNumber(item.partyId) ||
-      !item.partyName ||
-      usedPartyIds.has(item.partyId)
-    ) {
-      return result;
-    }
-
-    usedPartyIds.add(item.partyId);
-    result.push({
-      value: String(item.partyId),
-      title: item.partyName,
-    });
-
-    return result;
-  }, []);
-
-  return options.sort((left, right) => left.title.localeCompare(right.title, 'ru'));
-};
diff --git a/src/modules/MXTForms/shared/counterPartySelection/model/types.ts b/src/modules/MXTForms/shared/counterPartySelection/model/types.ts
deleted file mode 100644
index 58b4443f6..000000000
--- a/src/modules/MXTForms/shared/counterPartySelection/model/types.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { Value } from '@uikit/Select';
-
-export type CounterPartyData = {
-  id?: number;
-  partyId?: number;
-  partySymbolId?: number;
-  partySymbol?: string;
-  partyName?: string;
-  partyNameEng?: string | null;
-};
-
-export type CounterPartySelectionModel = {
-  options: Value[];
-  isLoading: boolean;
-  error: string | null;
-};
diff --git a/src/modules/MXTForms/shared/counterPartySelection/model/useCounterPartySelectionModel.ts b/src/modules/MXTForms/shared/counterPartySelection/model/useCounterPartySelectionModel.ts
deleted file mode 100644
index 7d88b70b8..000000000
--- a/src/modules/MXTForms/shared/counterPartySelection/model/useCounterPartySelectionModel.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useMemo } from 'react';
-
-import { useMxtData } from '@hooks/mxt/useMxtData';
-
-import { buildCounterPartyOptions } from './buildCounterPartyOptions';
-
-import type { CounterPartyData, CounterPartySelectionModel } from './types';
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-
-const COUNTER_PARTY_MXT_KEYS = ['counterParty'] as const satisfies readonly MxtDataKey[];
-
-const getItems = (records?: Record<number, MxtObject>) => Object.values(records ?? {}) as unknown as CounterPartyData[];
-
-export const useCounterPartySelectionModel = (): CounterPartySelectionModel => {
-  const { dataRecords, errors, isLoading } = useMxtData(COUNTER_PARTY_MXT_KEYS);
-  const options = useMemo(
-    () => buildCounterPartyOptions(getItems(dataRecords.counterParty)),
-    [dataRecords.counterParty],
-  );
-  const error = typeof errors.counterParty === 'string' ? errors.counterParty : null;
-
-  return {
-    options,
-    isLoading,
-    error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/currencyRate/index.ts b/src/modules/MXTForms/shared/currencyRate/index.ts
deleted file mode 100644
index 0abdac335..000000000
--- a/src/modules/MXTForms/shared/currencyRate/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { useCurrencyRate } from './model/useCurrencyRate';
-export { useMoexAssetRate } from './model/useMoexAssetRate';
diff --git a/src/modules/MXTForms/shared/currencyRate/model/useCurrencyRate.ts b/src/modules/MXTForms/shared/currencyRate/model/useCurrencyRate.ts
deleted file mode 100644
index 85ec3d44d..000000000
--- a/src/modules/MXTForms/shared/currencyRate/model/useCurrencyRate.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { useMemo } from 'react';
-
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import { useMoexAssetRate } from './useMoexAssetRate';
-
-const DEFAULT_CURRENCY_RATE = 1;
-const CNY_ASSET_ISSUE_ID = 600000;
-const CNY_CURRENCY_CODE = 'CNY';
-const RUB_CURRENCY_CODE = 'RUB';
-
-const normalizeCurrencyCode = (currencyCode?: string | null) => {
-  const normalizedCurrencyCode = currencyCode?.trim().toUpperCase();
-
-  if (!normalizedCurrencyCode) {
-    return undefined;
-  }
-
-  return normalizedCurrencyCode;
-};
-
-const getCurrencyRateIssueId = (currencyCode?: string) =>
-  currencyCode === CNY_CURRENCY_CODE ? CNY_ASSET_ISSUE_ID : undefined;
-
-const isRubCurrencyCode = (currencyCode?: string) => !currencyCode || currencyCode === RUB_CURRENCY_CODE;
-
-export const useCurrencyRate = (currencyCode?: string | null) => {
-  const normalizedCurrencyCode = normalizeCurrencyCode(currencyCode);
-  const issueId = getCurrencyRateIssueId(normalizedCurrencyCode);
-  const shouldLoadAssetRate = isFiniteNumber(issueId);
-  const assetRate = useMoexAssetRate(issueId, shouldLoadAssetRate);
-  const isUnsupportedCurrency = !isRubCurrencyCode(normalizedCurrencyCode) && !shouldLoadAssetRate;
-  const rate = shouldLoadAssetRate ? assetRate.rate : DEFAULT_CURRENCY_RATE;
-  const error = useMemo(() => {
-    if (isUnsupportedCurrency) {
-      return `Не удалось определить курс валюты ${normalizedCurrencyCode}`;
-    }
-
-    if (!shouldLoadAssetRate) {
-      return null;
-    }
-
-    if (assetRate.error) {
-      return assetRate.error;
-    }
-
-    if (!assetRate.isLoading && !isFiniteNumber(assetRate.rate)) {
-      return `Не удалось получить курс ${normalizedCurrencyCode}`;
-    }
-
-    return null;
-  }, [
-    assetRate.error,
-    assetRate.isLoading,
-    assetRate.rate,
-    isUnsupportedCurrency,
-    normalizedCurrencyCode,
-    shouldLoadAssetRate,
-  ]);
-
-  return {
-    currencyCode: normalizedCurrencyCode,
-    rate,
-    isLoading: shouldLoadAssetRate && assetRate.isLoading,
-    error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/currencyRate/model/useMoexAssetRate.ts b/src/modules/MXTForms/shared/currencyRate/model/useMoexAssetRate.ts
deleted file mode 100644
index a1b956d16..000000000
--- a/src/modules/MXTForms/shared/currencyRate/model/useMoexAssetRate.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { useMemo } from 'react';
-
-import { useMxtData } from '@hooks/mxt/useMxtData';
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-
-const MOEX_ASSET_RATE_MXT_KEYS = ['moexAssets'] as const satisfies readonly MxtDataKey[];
-
-type MoexAssetRateData = {
-  id?: number;
-  issueId?: number;
-  rcRub?: number;
-  [key: string]: unknown;
-};
-
-const getItems = (records?: Record<number, MxtObject>) =>
-  Object.values(records ?? {}) as unknown as MoexAssetRateData[];
-
-export const useMoexAssetRate = (issueId?: number, enabled = true) => {
-  const mxtKeys = enabled ? MOEX_ASSET_RATE_MXT_KEYS : [];
-  const { dataRecords, errors, isLoading } = useMxtData(mxtKeys);
-  const items = useMemo(() => getItems(dataRecords.moexAssets), [dataRecords.moexAssets]);
-  const rate = useMemo(() => {
-    if (!isFiniteNumber(issueId)) {
-      return undefined;
-    }
-
-    const asset = items.find((item) => item.issueId === issueId);
-
-    return isFiniteNumber(asset?.rcRub) ? asset.rcRub : undefined;
-  }, [items, issueId]);
-  const error = typeof errors.moexAssets === 'string' ? errors.moexAssets : null;
-
-  return {
-    rate,
-    isLoading,
-    error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/limitEstimation/api/__tests__/requestLimitEstimation.test.ts b/src/modules/MXTForms/shared/limitEstimation/api/__tests__/requestLimitEstimation.test.ts
deleted file mode 100644
index c5c2dee19..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/api/__tests__/requestLimitEstimation.test.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import {
-  getPublishedBody,
-  mockMxtResponse,
-  resetMxtClientMock,
-} from '@modules/MXTForms/shared/request/testing/mockWsMxtStompClient';
-
-import { requestLimitEstimation } from '../requestLimitEstimation';
-
-describe('requestLimitEstimation', () => {
-  beforeEach(resetMxtClientMock);
-
-  it('should publish request body and return limit values', async () => {
-    mockMxtResponse({
-      destination: 'limitEstimation.new',
-      messageType: 'success',
-      data: {
-        before: 1984827290.79,
-        after: 1984806376.59,
-      },
-    });
-
-    await expect(
-      requestLimitEstimation({
-        formId: 'deposit-form',
-        requestId: 'receipt-1',
-        accountId: 18839010002,
-        commission: 4.46,
-        marketplaceId: 1000,
-        partyId: 18838860000,
-        issueId: 620001,
-        fundingPrice: '14',
-        quantity: '1000',
-        amount: '1000000',
-        valueDate2: '2026-06-17T00:00:00+03:00',
-      }),
-    ).resolves.toEqual({
-      value: {
-        before: 1984827290.79,
-        after: 1984806376.59,
-      },
-    });
-
-    expect(getPublishedBody()).toEqual({
-      accountId: 18839010002,
-      commission: 4.46,
-      marketplaceId: 1000,
-      partyId: 18838860000,
-      sideId: 1,
-      issueId: 620001,
-      price: 14,
-      quantity: 1000,
-      amount: 1000000,
-      valueDate2: '2026-06-17',
-    });
-  });
-
-  it('should return error text from failed response', async () => {
-    mockMxtResponse({
-      destination: 'limitEstimation.new',
-      messageType: 'error',
-      data: [
-        {
-          code: 210008,
-          text: '210008 (210 008) Сервис расчета единого лимита недоступен.',
-        },
-      ],
-    });
-
-    await expect(
-      requestLimitEstimation({
-        formId: 'deposit-form',
-        requestId: 'receipt-2',
-        accountId: 18839010002,
-        commission: 4.46,
-        marketplaceId: 1000,
-        partyId: 18838860000,
-        issueId: 620001,
-        fundingPrice: '14',
-        quantity: '1000',
-        amount: '1000000',
-        valueDate2: '2026-06-17',
-      }),
-    ).resolves.toEqual({
-      error: '210008 (210 008) Сервис расчета единого лимита недоступен.',
-    });
-  });
-});
diff --git a/src/modules/MXTForms/shared/limitEstimation/api/requestLimitEstimation.ts b/src/modules/MXTForms/shared/limitEstimation/api/requestLimitEstimation.ts
deleted file mode 100644
index 60e04b1d5..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/api/requestLimitEstimation.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import { isFiniteNumber, parseOptionalNumber } from '@modules/MXTForms/shared/numbers';
-import { requestByReceipt } from '@modules/MXTForms/shared/request/requestByReceipt';
-
-import type { LimitEstimation, LimitEstimationRequestPayload, LimitEstimationResult } from '../model/types';
-
-const LIMIT_ESTIMATION_DESTINATION = 'limitEstimation.new';
-const DEFAULT_LIMIT_ESTIMATION_ERROR = 'Не удалось рассчитать единый лимит';
-
-type LimitEstimationErrorItem = {
-  text?: unknown;
-};
-
-type LimitEstimationResponseBody = {
-  receiptId?: string;
-  destination?: string;
-  messageType?: string;
-  data?:
-    | {
-        before?: number;
-        after?: number;
-        text?: unknown;
-      }
-    | LimitEstimationErrorItem[];
-};
-
-const isLimitEstimationResponseBody = (body: unknown, receiptId: string): body is LimitEstimationResponseBody =>
-  typeof body === 'object' &&
-  body !== null &&
-  (body as LimitEstimationResponseBody).destination === LIMIT_ESTIMATION_DESTINATION &&
-  (body as LimitEstimationResponseBody).receiptId === receiptId;
-
-const getLimitEstimationFromResponse = (body: LimitEstimationResponseBody): LimitEstimation | undefined => {
-  if (!body.data || Array.isArray(body.data)) {
-    return undefined;
-  }
-
-  const { before, after } = body.data;
-
-  if (!isFiniteNumber(before) || !isFiniteNumber(after)) {
-    return undefined;
-  }
-
-  return {
-    before,
-    after,
-  };
-};
-
-const getLimitEstimationError = (body: LimitEstimationResponseBody) => {
-  if (Array.isArray(body.data)) {
-    const messages = body.data.map(({ text }) => (typeof text === 'string' ? text : '')).filter(Boolean);
-    const errorMessage = messages.join('; ');
-
-    return errorMessage.length > 0 ? errorMessage : DEFAULT_LIMIT_ESTIMATION_ERROR;
-  }
-
-  return typeof body.data?.text === 'string' ? body.data.text : DEFAULT_LIMIT_ESTIMATION_ERROR;
-};
-
-const normalizeValueDate = (valueDate?: string) => {
-  if (!valueDate) {
-    return '';
-  }
-
-  return valueDate.slice(0, 10);
-};
-
-export const requestLimitEstimation = async (
-  payload: LimitEstimationRequestPayload,
-): Promise<LimitEstimationResult | undefined> => {
-  const {
-    accountId,
-    commission,
-    marketplaceId,
-    partyId,
-    issueId,
-    fundingPrice,
-    quantity,
-    amount,
-    valueDate2,
-    requestId,
-  } = payload;
-  const parsedFundingPrice = parseOptionalNumber(fundingPrice);
-  const parsedQuantity = parseOptionalNumber(quantity);
-  const parsedAmount = parseOptionalNumber(amount);
-  const normalizedValueDate2 = normalizeValueDate(valueDate2);
-
-  if (
-    !isFiniteNumber(accountId) ||
-    !isFiniteNumber(commission) ||
-    !isFiniteNumber(marketplaceId) ||
-    !isFiniteNumber(partyId) ||
-    !isFiniteNumber(issueId) ||
-    !isFiniteNumber(parsedFundingPrice) ||
-    parsedFundingPrice <= 0 ||
-    !isFiniteNumber(parsedQuantity) ||
-    parsedQuantity <= 0 ||
-    !isFiniteNumber(parsedAmount) ||
-    parsedAmount <= 0 ||
-    !normalizedValueDate2
-  ) {
-    return undefined;
-  }
-
-  return requestByReceipt<LimitEstimationResult | undefined>({
-    destination: LIMIT_ESTIMATION_DESTINATION,
-    receiptId: requestId,
-    body: {
-      accountId,
-      commission,
-      marketplaceId,
-      partyId,
-      sideId: 1,
-      issueId,
-      price: parsedFundingPrice,
-      quantity: parsedQuantity,
-      amount: parsedAmount,
-      valueDate2: normalizedValueDate2,
-    },
-    getResult: (body, receiptId) => {
-      if (!isLimitEstimationResponseBody(body, receiptId)) {
-        return {
-          matched: false,
-        };
-      }
-
-      if (body.messageType === 'error') {
-        return {
-          matched: true,
-          value: {
-            error: getLimitEstimationError(body),
-          },
-        };
-      }
-
-      if (body.messageType === 'success') {
-        return {
-          matched: true,
-          value: {
-            value: getLimitEstimationFromResponse(body),
-          },
-        };
-      }
-
-      return {
-        matched: false,
-      };
-    },
-  });
-};
diff --git a/src/modules/MXTForms/shared/limitEstimation/index.ts b/src/modules/MXTForms/shared/limitEstimation/index.ts
deleted file mode 100644
index c58f2d5ff..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export { useLimitEstimation } from './model/useLimitEstimation';
-export { default as limitEstimationReducer } from './model/slice';
-export { watchLimitEstimation } from './model/saga';
-
-export type { LimitEstimation } from './model/types';
diff --git a/src/modules/MXTForms/shared/limitEstimation/model/actions.ts b/src/modules/MXTForms/shared/limitEstimation/model/actions.ts
deleted file mode 100644
index 235f2e673..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/model/actions.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { createAction } from '@reduxjs/toolkit';
-
-import { createRequestId } from '@modules/MXTForms/shared/request/createRequestId';
-
-import type { LimitEstimationRequestParams, LimitEstimationRequestPayload } from './types';
-
-export const limitEstimationRequested = createAction(
-  'formLimitEstimation/requested',
-  (payload: LimitEstimationRequestParams): { payload: LimitEstimationRequestPayload } => ({
-    payload: {
-      ...payload,
-      requestId: createRequestId(),
-    },
-  }),
-);
-
-export const limitEstimationReset = createAction<{ formId: string }>('formLimitEstimation/reset');
diff --git a/src/modules/MXTForms/shared/limitEstimation/model/saga.ts b/src/modules/MXTForms/shared/limitEstimation/model/saga.ts
deleted file mode 100644
index 5cc61f407..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/model/saga.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { call, cancel, delay, fork, put, take } from 'typed-redux-saga';
-
-import { requestLimitEstimation } from '../api/requestLimitEstimation';
-
-import { limitEstimationRequested, limitEstimationReset } from './actions';
-import { limitEstimationFailed, limitEstimationSucceeded } from './slice';
-
-import type { Action } from 'redux';
-import type { Task } from 'redux-saga';
-
-const LIMIT_ESTIMATION_REQUEST_DEBOUNCE_MS = 300;
-const LIMIT_ESTIMATION_EMPTY_ERROR = 'Не удалось рассчитать единый лимит';
-
-const getErrorMessage = (error: unknown) => {
-  const message = error instanceof Error ? error.message : String(error);
-
-  return message.length > 0 ? message : LIMIT_ESTIMATION_EMPTY_ERROR;
-};
-
-function* requestLimitEstimationFlow(action: ReturnType<typeof limitEstimationRequested>) {
-  const { payload } = action;
-
-  yield* delay(LIMIT_ESTIMATION_REQUEST_DEBOUNCE_MS);
-
-  try {
-    const result = yield* call(requestLimitEstimation, payload);
-
-    if (!result) {
-      yield* put(
-        limitEstimationFailed({
-          formId: payload.formId,
-          requestId: payload.requestId,
-          error: LIMIT_ESTIMATION_EMPTY_ERROR,
-        }),
-      );
-
-      return;
-    }
-
-    if (result?.error) {
-      yield* put(
-        limitEstimationFailed({
-          formId: payload.formId,
-          requestId: payload.requestId,
-          error: result.error,
-        }),
-      );
-
-      return;
-    }
-
-    yield* put(
-      limitEstimationSucceeded({
-        formId: payload.formId,
-        requestId: payload.requestId,
-        value: result.value,
-      }),
-    );
-  } catch (error) {
-    yield* put(
-      limitEstimationFailed({
-        formId: payload.formId,
-        requestId: payload.requestId,
-        error: getErrorMessage(error),
-      }),
-    );
-  }
-}
-
-export function* watchLimitEstimation() {
-  const tasks = new Map<string, Task>();
-
-  while (true) {
-    const action: Action = yield* take([limitEstimationRequested.type, limitEstimationReset.type]);
-
-    if (limitEstimationReset.match(action)) {
-      const currentTask = tasks.get(action.payload.formId);
-
-      if (currentTask) {
-        yield* cancel(currentTask);
-        tasks.delete(action.payload.formId);
-      }
-    } else if (limitEstimationRequested.match(action)) {
-      const currentTask = tasks.get(action.payload.formId);
-
-      if (currentTask) {
-        yield* cancel(currentTask);
-      }
-
-      const task = yield* fork(requestLimitEstimationFlow, action);
-      tasks.set(action.payload.formId, task);
-    }
-  }
-}
diff --git a/src/modules/MXTForms/shared/limitEstimation/model/selectors.ts b/src/modules/MXTForms/shared/limitEstimation/model/selectors.ts
deleted file mode 100644
index c4140c005..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/model/selectors.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { RootState } from '@store/setupStore';
-
-const DEFAULT_LIMIT_ESTIMATION_STATE = {
-  loading: false,
-  value: undefined,
-  error: null,
-};
-
-export const limitEstimationSelector = (formId: string) => (state: RootState) =>
-  state.formLimitEstimation[formId] ?? DEFAULT_LIMIT_ESTIMATION_STATE;
diff --git a/src/modules/MXTForms/shared/limitEstimation/model/slice.ts b/src/modules/MXTForms/shared/limitEstimation/model/slice.ts
deleted file mode 100644
index ca17db2ec..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/model/slice.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { createSlice, PayloadAction } from '@reduxjs/toolkit';
-
-import { limitEstimationRequested, limitEstimationReset } from './actions';
-
-import type { LimitEstimation, LimitEstimationSliceState } from './types';
-
-type LimitEstimationResultPayload = {
-  formId: string;
-  requestId: string;
-  value?: LimitEstimation;
-};
-
-type LimitEstimationFailurePayload = {
-  formId: string;
-  requestId: string;
-  error: string;
-};
-
-export const initialLimitEstimationState: LimitEstimationSliceState = {};
-
-const limitEstimationSlice = createSlice({
-  name: 'formLimitEstimation',
-  initialState: initialLimitEstimationState,
-  reducers: {
-    limitEstimationSucceeded: (state, { payload }: PayloadAction<LimitEstimationResultPayload>) => {
-      const current = state[payload.formId];
-
-      if (!current || current.requestId !== payload.requestId) {
-        return;
-      }
-
-      state[payload.formId] = {
-        loading: false,
-        value: payload.value,
-        error: null,
-        requestId: payload.requestId,
-      };
-    },
-    limitEstimationFailed: (state, { payload }: PayloadAction<LimitEstimationFailurePayload>) => {
-      const current = state[payload.formId];
-
-      if (!current || current.requestId !== payload.requestId) {
-        return;
-      }
-
-      state[payload.formId] = {
-        loading: false,
-        error: payload.error,
-        requestId: payload.requestId,
-      };
-    },
-  },
-  extraReducers: (builder) => {
-    builder
-      .addCase(limitEstimationRequested, (state, { payload }) => {
-        state[payload.formId] = {
-          loading: true,
-          error: null,
-          requestId: payload.requestId,
-        };
-      })
-      .addCase(limitEstimationReset, (state, { payload }) => {
-        delete state[payload.formId];
-      });
-  },
-});
-
-export const { limitEstimationFailed, limitEstimationSucceeded } = limitEstimationSlice.actions;
-export default limitEstimationSlice.reducer;
diff --git a/src/modules/MXTForms/shared/limitEstimation/model/types.ts b/src/modules/MXTForms/shared/limitEstimation/model/types.ts
deleted file mode 100644
index 40842ec6f..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/model/types.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-export type LimitEstimation = {
-  before: number;
-  after: number;
-};
-
-export type LimitEstimationRequestParams = {
-  formId: string;
-  accountId?: number;
-  commission?: number;
-  marketplaceId?: number;
-  partyId?: number;
-  issueId?: number;
-  fundingPrice: string;
-  quantity: string;
-  amount: string;
-  valueDate2?: string;
-};
-
-export type LimitEstimationRequestPayload = LimitEstimationRequestParams & {
-  requestId: string;
-};
-
-export type LimitEstimationResult = {
-  value?: LimitEstimation;
-  error?: string;
-};
-
-export type LimitEstimationState = {
-  loading: boolean;
-  value?: LimitEstimation;
-  error: string | null;
-  requestId?: string;
-};
-
-export type LimitEstimationSliceState = Record<string, LimitEstimationState>;
diff --git a/src/modules/MXTForms/shared/limitEstimation/model/useLimitEstimation.ts b/src/modules/MXTForms/shared/limitEstimation/model/useLimitEstimation.ts
deleted file mode 100644
index bf1e526e2..000000000
--- a/src/modules/MXTForms/shared/limitEstimation/model/useLimitEstimation.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { useEffect } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-
-import { limitEstimationRequested, limitEstimationReset } from './actions';
-import { limitEstimationSelector } from './selectors';
-
-import type { LimitEstimationRequestParams } from './types';
-
-type UseLimitEstimationParams = Omit<LimitEstimationRequestParams, 'formId'> & {
-  formId: string;
-  enabled: boolean;
-};
-
-export const useLimitEstimation = ({
-  formId,
-  enabled,
-  accountId,
-  commission,
-  marketplaceId,
-  partyId,
-  issueId,
-  fundingPrice,
-  quantity,
-  amount,
-  valueDate2,
-}: UseLimitEstimationParams) => {
-  const dispatch = useDispatch();
-  const state = useAppSelect(limitEstimationSelector(formId));
-
-  useEffect(() => {
-    if (!enabled) {
-      dispatch(limitEstimationReset({ formId }));
-
-      return;
-    }
-
-    dispatch(
-      limitEstimationRequested({
-        formId,
-        accountId,
-        commission,
-        marketplaceId,
-        partyId,
-        issueId,
-        fundingPrice,
-        quantity,
-        amount,
-        valueDate2,
-      }),
-    );
-
-    return () => {
-      dispatch(limitEstimationReset({ formId }));
-    };
-  }, [
-    accountId,
-    amount,
-    commission,
-    dispatch,
-    enabled,
-    formId,
-    fundingPrice,
-    issueId,
-    marketplaceId,
-    partyId,
-    quantity,
-    valueDate2,
-  ]);
-
-  return {
-    limitEstimation: state.value,
-    loading: state.loading,
-    error: state.error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/model/form.ts b/src/modules/MXTForms/shared/model/form.ts
deleted file mode 100644
index 7f746236d..000000000
--- a/src/modules/MXTForms/shared/model/form.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import type { DepositFundingPriceEntryTypeId, DepositTimeInForceId } from 'types/DepositForm';
-
-export const DEFAULT_DIRECTION = 'Размещение';
-export const DEFAULT_REQUEST_KIND = 'Безадресная';
-export const DEFAULT_REFERENCE_PRICE_METHOD = 'Фиксированная';
-export const EMPTY_CONFIRM_VALUE = '-';
-
-export const TIME_IN_FORCE_LABELS: Record<DepositTimeInForceId, string> = {
-  1: 'Поставить в очередь',
-  2: 'Снять остаток',
-  3: 'Полностью или отклонить',
-};
-
-export const FUNDING_PRICE_ENTRY_TYPE_LABELS: Record<DepositFundingPriceEntryTypeId, string> = {
-  1: 'Лимитная заявка',
-  2: 'Рыночная цена',
-};
-
-const getNonEmptyValue = (...values: (string | undefined)[]) =>
-  values.find((value): value is string => Boolean(value)) ?? EMPTY_CONFIRM_VALUE;
-
-export const getValueTitle = (options: (string | { value: string; title?: string })[], value: string) => {
-  const option = options.find((item) => (typeof item === 'string' ? item : item.value) === value);
-
-  if (!option) {
-    return getNonEmptyValue(value);
-  }
-
-  return typeof option === 'string' ? getNonEmptyValue(option) : getNonEmptyValue(option.title, option.value);
-};
-
-export const getInstrumentTitle = (subtitle: string) => getNonEmptyValue(subtitle.split(' - ')[0], subtitle);
-
-export const getCompanyTitle = (accountTitle: string) => getNonEmptyValue(accountTitle.split(' - ')[0], accountTitle);
-
-export const formatNumberValue = (value: string, maximumFractionDigits = 2) => {
-  if (!value) {
-    return EMPTY_CONFIRM_VALUE;
-  }
-
-  const numberValue = Number(value);
-
-  if (Number.isNaN(numberValue)) {
-    return value;
-  }
-
-  return numberValue.toLocaleString('ru-RU', {
-    maximumFractionDigits,
-  });
-};
diff --git a/src/modules/MXTForms/shared/model/index.ts b/src/modules/MXTForms/shared/model/index.ts
deleted file mode 100644
index 64766bcb6..000000000
--- a/src/modules/MXTForms/shared/model/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export {
-  DEFAULT_DIRECTION,
-  DEFAULT_REFERENCE_PRICE_METHOD,
-  DEFAULT_REQUEST_KIND,
-  EMPTY_CONFIRM_VALUE,
-  formatNumberValue,
-  FUNDING_PRICE_ENTRY_TYPE_LABELS,
-  getCompanyTitle,
-  getInstrumentTitle,
-  getValueTitle,
-  TIME_IN_FORCE_LABELS,
-} from './form';
diff --git a/src/modules/MXTForms/shared/numbers/__tests__/calculations.test.ts b/src/modules/MXTForms/shared/numbers/__tests__/calculations.test.ts
deleted file mode 100644
index 1021adb29..000000000
--- a/src/modules/MXTForms/shared/numbers/__tests__/calculations.test.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-import {
-  calculateCommissionAdjustedValues,
-  calculateEffectiveFundingRate,
-  calculateQuantityByRequestVolume,
-  calculateRequestVolumeByQuantity,
-  parseOptionalNumber,
-} from '../calculations';
-
-describe('form number calculations', () => {
-  it('should parse values with spaces and comma decimal separator', () => {
-    expect(parseOptionalNumber('1 234,56')).toBe(1234.56);
-  });
-
-  it('should calculate request volume by quantity and lot size', () => {
-    expect(calculateRequestVolumeByQuantity('12', 100000)).toBe('1200000');
-  });
-
-  it('should calculate quantity by request volume using floor rounding for manual input', () => {
-    expect(calculateQuantityByRequestVolume('250000', 100000)).toBe('2');
-  });
-
-  it('should calculate quantity by request volume using currency rate', () => {
-    expect(calculateQuantityByRequestVolume('987654', 100000, 10.77225)).toBe('106');
-  });
-
-  it('should calculate request volume by rounded lot price and quantity', () => {
-    expect(calculateRequestVolumeByQuantity('1063', 100000, 10.77225)).toBe('9867956.56');
-  });
-
-  it('should calculate quantity by request volume using rounded lot price', () => {
-    expect(calculateQuantityByRequestVolume('9249.92', 100000, 10.8109)).toBe('');
-    expect(calculateQuantityByRequestVolume('9249.93', 100000, 10.8109)).toBe('1');
-  });
-
-  it('should reduce request volume by commission and calculate quantity using downward rounding', () => {
-    expect(calculateCommissionAdjustedValues('950000', 100000, 100000)).toEqual({
-      requestVolume: '850000',
-      quantity: '8',
-    });
-  });
-
-  it('should reduce request volume by commission as backend RUB value', () => {
-    expect(calculateCommissionAdjustedValues('987654', 141.72, 100000, 10.77225)).toEqual({
-      requestVolume: '987512.28',
-      quantity: '106',
-    });
-  });
-
-  it('should remove a lot when commission makes the remainder smaller than the lot size', () => {
-    expect(calculateCommissionAdjustedValues('1000000', 4.46, 100000)).toEqual({
-      requestVolume: '999995.54',
-      quantity: '9',
-    });
-  });
-
-  it('should clear request volume and quantity when commission is greater than or equal to request volume', () => {
-    expect(calculateCommissionAdjustedValues('100000', 100000, 100000)).toEqual({
-      requestVolume: '',
-      quantity: '',
-    });
-  });
-
-  it('should reduce request volume and preserve quantity when lot size is unavailable', () => {
-    expect(calculateCommissionAdjustedValues('1000000', 4.46)).toEqual({
-      requestVolume: '999995.54',
-      quantity: undefined,
-    });
-  });
-
-  it('should calculate effective funding rate for RUB commission', () => {
-    expect(
-      calculateEffectiveFundingRate({
-        requestVolume: '1234567',
-        fundingPrice: '8',
-        fundingDuration: 1,
-        commission: 6.54,
-        commissionCurrencyRate: 1,
-      }),
-    ).toBeCloseTo(7.807, 3);
-  });
-
-  it('should calculate effective funding rate with commission currency conversion', () => {
-    expect(
-      calculateEffectiveFundingRate({
-        requestVolume: '987654',
-        fundingPrice: '5',
-        fundingDuration: 3,
-        commission: 141.72,
-        commissionCurrencyRate: 10.77225,
-      }),
-    ).toBeCloseTo(4.838, 3);
-  });
-
-  it('should not calculate effective funding rate without commission currency rate', () => {
-    expect(
-      calculateEffectiveFundingRate({
-        requestVolume: '987654',
-        fundingPrice: '5',
-        fundingDuration: 3,
-        commission: 141.72,
-      }),
-    ).toBeUndefined();
-  });
-});
diff --git a/src/modules/MXTForms/shared/numbers/calculations.ts b/src/modules/MXTForms/shared/numbers/calculations.ts
deleted file mode 100644
index d5ad8056f..000000000
--- a/src/modules/MXTForms/shared/numbers/calculations.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-export const isFiniteNumber = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value);
-
-export const isValidLotSize = (lotSize?: number): lotSize is number => isFiniteNumber(lotSize) && lotSize > 0;
-
-export const isValidCurrencyRate = (currencyRate?: number): currencyRate is number =>
-  isFiniteNumber(currencyRate) && currencyRate > 0;
-
-export const normalizeNumericString = (value: string) => value.replace(/\s/g, '').replace(',', '.');
-
-export const parseOptionalNumber = (value?: string) => {
-  if (!value) {
-    return undefined;
-  }
-
-  const numericValue = Number(normalizeNumericString(value));
-
-  return Number.isFinite(numericValue) ? numericValue : undefined;
-};
-
-export const parseNumericValue = (value: string) => parseOptionalNumber(value) ?? 0;
-
-export const formatAmountValue = (value: number) => {
-  if (!Number.isFinite(value) || value <= 0) {
-    return '';
-  }
-
-  return Number.isInteger(value) ? String(value) : value.toFixed(2);
-};
-
-const roundAmountUp = (value: number, fractionDigits = 2) => {
-  const multiplier = 10 ** fractionDigits;
-
-  return Math.ceil((value - Number.EPSILON) * multiplier) / multiplier;
-};
-
-const calculateRoundedLotPrice = (lotSize: number, currencyRate: number) => roundAmountUp(lotSize / currencyRate);
-
-const calculateQuantityValueByRequestVolume = (requestVolume: number, lotSize?: number, currencyRate = 1) => {
-  if (!isValidLotSize(lotSize) || !isValidCurrencyRate(currencyRate)) {
-    return undefined;
-  }
-
-  const quantity = Math.floor(requestVolume / calculateRoundedLotPrice(lotSize, currencyRate));
-
-  return quantity > 0 ? quantity : undefined;
-};
-
-export const calculateRequestVolumeByQuantity = (quantity: string, lotSize?: number, currencyRate = 1) => {
-  if (!quantity || !isValidLotSize(lotSize) || !isValidCurrencyRate(currencyRate)) {
-    return '';
-  }
-
-  return formatAmountValue(parseNumericValue(quantity) * calculateRoundedLotPrice(lotSize, currencyRate));
-};
-
-export const calculateQuantityByRequestVolume = (requestVolume: string, lotSize?: number, currencyRate = 1) => {
-  if (!requestVolume || !isValidLotSize(lotSize) || !isValidCurrencyRate(currencyRate)) {
-    return '';
-  }
-
-  const quantity = calculateQuantityValueByRequestVolume(parseNumericValue(requestVolume), lotSize, currencyRate);
-
-  return isFiniteNumber(quantity) ? String(quantity) : '';
-};
-
-export const calculateCommissionAdjustedValues = (
-  requestVolume: string,
-  commission: number,
-  lotSize?: number,
-  currencyRate = 1,
-) => {
-  const reducedRequestVolume = parseNumericValue(requestVolume) - commission;
-
-  if (reducedRequestVolume <= 0) {
-    return {
-      requestVolume: '',
-      quantity: '',
-    };
-  }
-
-  if (!isValidLotSize(lotSize) || !isValidCurrencyRate(currencyRate)) {
-    return {
-      requestVolume: formatAmountValue(reducedRequestVolume),
-      quantity: undefined,
-    };
-  }
-
-  const quantity = calculateQuantityValueByRequestVolume(reducedRequestVolume, lotSize, currencyRate);
-
-  return {
-    requestVolume: formatAmountValue(reducedRequestVolume),
-    quantity: isFiniteNumber(quantity) ? String(quantity) : '',
-  };
-};
-
-type CalculateEffectiveFundingRateParams = {
-  requestVolume: string;
-  fundingPrice: string;
-  fundingDuration?: number;
-  commission?: number;
-  commissionCurrencyRate?: number;
-};
-
-export const calculateEffectiveFundingRate = ({
-  requestVolume,
-  fundingPrice,
-  fundingDuration,
-  commission,
-  commissionCurrencyRate,
-}: CalculateEffectiveFundingRateParams) => {
-  const amount = parseOptionalNumber(requestVolume);
-  const price = parseOptionalNumber(fundingPrice);
-
-  if (
-    !isFiniteNumber(amount) ||
-    amount <= 0 ||
-    !isFiniteNumber(price) ||
-    price <= 0 ||
-    !isFiniteNumber(fundingDuration) ||
-    fundingDuration <= 0 ||
-    !isFiniteNumber(commission) ||
-    commission < 0 ||
-    !isFiniteNumber(commissionCurrencyRate) ||
-    commissionCurrencyRate <= 0
-  ) {
-    return undefined;
-  }
-
-  const periodIncome = (amount * price * fundingDuration) / 365 / 100;
-  const commissionInRequestCurrency = commission / commissionCurrencyRate;
-  const effectiveRate = ((periodIncome - commissionInRequestCurrency) / fundingDuration / amount) * 365 * 100;
-
-  return Number.isFinite(effectiveRate) ? effectiveRate : undefined;
-};
diff --git a/src/modules/MXTForms/shared/numbers/index.ts b/src/modules/MXTForms/shared/numbers/index.ts
deleted file mode 100644
index 2357c5bb5..000000000
--- a/src/modules/MXTForms/shared/numbers/index.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-export {
-  calculateCommissionAdjustedValues,
-  calculateEffectiveFundingRate,
-  calculateQuantityByRequestVolume,
-  calculateRequestVolumeByQuantity,
-  formatAmountValue,
-  isFiniteNumber,
-  isValidCurrencyRate,
-  isValidLotSize,
-  normalizeNumericString,
-  parseNumericValue,
-  parseOptionalNumber,
-} from './calculations';
diff --git a/src/modules/MXTForms/shared/numericFields/index.ts b/src/modules/MXTForms/shared/numericFields/index.ts
deleted file mode 100644
index c3b5211ba..000000000
--- a/src/modules/MXTForms/shared/numericFields/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export { getInitialNumericValues } from './model/getInitialNumericValues';
-export { useDepositNumericFields } from './model/useDepositNumericFields';
-export { DepositNumericFieldsBlock } from './ui/DepositNumericFieldsBlock';
-
-export type { DepositNumericValues } from './model/getInitialNumericValues';
-export type { DepositNumericFieldsModel } from './model/useDepositNumericFields';
diff --git a/src/modules/MXTForms/shared/numericFields/model/__tests__/getInitialNumericValues.test.ts b/src/modules/MXTForms/shared/numericFields/model/__tests__/getInitialNumericValues.test.ts
deleted file mode 100644
index 347ee1d7b..000000000
--- a/src/modules/MXTForms/shared/numericFields/model/__tests__/getInitialNumericValues.test.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { getInitialNumericValues } from '../getInitialNumericValues';
-
-describe('getInitialNumericValues', () => {
-  it('should return empty values without initial params', () => {
-    expect(getInitialNumericValues()).toEqual({
-      fundingPrice: '',
-      requestVolume: '',
-      quantity: '',
-    });
-  });
-
-  it('should initialize funding price, quantity and request volume from props', () => {
-    expect(
-      getInitialNumericValues({
-        fundingPrice: 6.04,
-        quantity: 10,
-        lotSize: 100000,
-      }),
-    ).toEqual({
-      fundingPrice: '6.04',
-      requestVolume: '1000000',
-      quantity: '10',
-    });
-  });
-
-  it('should leave request volume empty without valid lot size', () => {
-    expect(
-      getInitialNumericValues({
-        quantity: 10,
-      }),
-    ).toEqual({
-      fundingPrice: '',
-      requestVolume: '',
-      quantity: '10',
-    });
-  });
-
-  it('should initialize request volume using currency rate', () => {
-    expect(
-      getInitialNumericValues({
-        quantity: 10,
-        lotSize: 100000,
-        currencyRate: 10.8109,
-      }),
-    ).toEqual({
-      fundingPrice: '',
-      requestVolume: '92499.30',
-      quantity: '10',
-    });
-  });
-});
diff --git a/src/modules/MXTForms/shared/numericFields/model/getInitialNumericValues.ts b/src/modules/MXTForms/shared/numericFields/model/getInitialNumericValues.ts
deleted file mode 100644
index 4cf680e96..000000000
--- a/src/modules/MXTForms/shared/numericFields/model/getInitialNumericValues.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { calculateRequestVolumeByQuantity, isValidLotSize } from '@modules/MXTForms/shared/numbers';
-
-export type DepositNumericValues = {
-  fundingPrice: string;
-  requestVolume: string;
-  quantity: string;
-};
-
-type GetInitialNumericValuesParams = {
-  fundingPrice?: number;
-  quantity?: number;
-  lotSize?: number;
-  currencyRate?: number;
-};
-
-export const getInitialNumericValues = ({
-  fundingPrice,
-  quantity,
-  lotSize,
-  currencyRate,
-}: GetInitialNumericValuesParams = {}): DepositNumericValues => {
-  const hasQuantity = typeof quantity === 'number';
-  const quantityValue = hasQuantity ? String(quantity) : '';
-  const requestVolume =
-    hasQuantity && isValidLotSize(lotSize)
-      ? calculateRequestVolumeByQuantity(quantityValue, lotSize, currencyRate)
-      : '';
-
-  return {
-    fundingPrice: typeof fundingPrice === 'number' ? String(fundingPrice) : '',
-    requestVolume,
-    quantity: quantityValue,
-  };
-};
diff --git a/src/modules/MXTForms/shared/numericFields/model/useDepositNumericFields.ts b/src/modules/MXTForms/shared/numericFields/model/useDepositNumericFields.ts
deleted file mode 100644
index 0eee3f267..000000000
--- a/src/modules/MXTForms/shared/numericFields/model/useDepositNumericFields.ts
+++ /dev/null
@@ -1,213 +0,0 @@
-import { useEffect, useMemo, useRef } from 'react';
-
-import {
-  calculateCommissionAdjustedValues,
-  calculateQuantityByRequestVolume,
-  calculateRequestVolumeByQuantity,
-  isFiniteNumber,
-  isValidCurrencyRate,
-  isValidLotSize,
-} from '@modules/MXTForms/shared/numbers';
-
-import type { DepositNumericValues } from './getInitialNumericValues';
-import type { Dispatch, SetStateAction } from 'react';
-
-type NumericField = 'requestVolume' | 'quantity';
-
-type LotParams = {
-  lotSize?: number;
-  currencyRate: number;
-};
-
-type UseDepositNumericFieldsParams<T extends DepositNumericValues> = {
-  values: T;
-  setValues: Dispatch<SetStateAction<T>>;
-  lotSize?: number;
-  currencyRate?: number;
-};
-
-export type DepositNumericFieldsModel = {
-  roundedRequestVolumeHint: string;
-  updateFundingPrice: (fundingPrice: string) => void;
-  updateRequestVolume: (requestVolume: string) => void;
-  updateQuantity: (quantity: string) => void;
-  applyCommissionReduction: (commission?: number) => void;
-  handleNumericFieldFocus: (field: NumericField) => void;
-  handleNumericFieldBlur: VoidFunction;
-};
-
-const getFallbackNumericField = (values: DepositNumericValues): NumericField | null => {
-  if (values.quantity) {
-    return 'quantity';
-  }
-
-  if (values.requestVolume) {
-    return 'requestVolume';
-  }
-
-  return null;
-};
-
-const areSameLotParams = (current: LotParams, next: LotParams) =>
-  current.lotSize === next.lotSize && current.currencyRate === next.currencyRate;
-
-const areValidLotParams = ({ lotSize, currencyRate }: LotParams) =>
-  isValidLotSize(lotSize) && isValidCurrencyRate(currencyRate);
-
-const updateRequestVolumeIfChanged = <T extends DepositNumericValues>(current: T, requestVolume: string) => {
-  if (current.requestVolume === requestVolume) {
-    return current;
-  }
-
-  return { ...current, requestVolume };
-};
-
-const updateQuantityIfChanged = <T extends DepositNumericValues>(current: T, quantity: string) => {
-  if (current.quantity === quantity) {
-    return current;
-  }
-
-  return { ...current, quantity };
-};
-
-const recalculateByLotParams = <T extends DepositNumericValues>(
-  current: T,
-  sourceField: NumericField | null,
-  { lotSize, currencyRate }: LotParams,
-) => {
-  if (sourceField === 'quantity' && current.quantity) {
-    return updateRequestVolumeIfChanged(
-      current,
-      calculateRequestVolumeByQuantity(current.quantity, lotSize, currencyRate),
-    );
-  }
-
-  if (sourceField === 'requestVolume' && current.requestVolume) {
-    return updateQuantityIfChanged(
-      current,
-      calculateQuantityByRequestVolume(current.requestVolume, lotSize, currencyRate),
-    );
-  }
-
-  return current;
-};
-
-export const useDepositNumericFields = <T extends DepositNumericValues>({
-  values,
-  setValues,
-  lotSize,
-  currencyRate = 1,
-}: UseDepositNumericFieldsParams<T>): DepositNumericFieldsModel => {
-  const activeNumericFieldRef = useRef<NumericField | null>(null);
-  const lastEditedNumericFieldRef = useRef<NumericField | null>(getFallbackNumericField(values));
-  const lotParamsRef = useRef({ lotSize, currencyRate });
-  const roundedRequestVolumeHint = useMemo(() => {
-    const roundedRequestVolume = calculateRequestVolumeByQuantity(values.quantity, lotSize, currencyRate);
-
-    if (roundedRequestVolume) {
-      return roundedRequestVolume;
-    }
-
-    return isValidLotSize(lotSize) && isValidCurrencyRate(currencyRate) ? '' : values.requestVolume;
-  }, [currencyRate, lotSize, values.quantity, values.requestVolume]);
-
-  useEffect(() => {
-    const nextLotParams = { lotSize, currencyRate };
-
-    if (areSameLotParams(lotParamsRef.current, nextLotParams)) {
-      return;
-    }
-
-    lotParamsRef.current = nextLotParams;
-
-    if (!areValidLotParams(nextLotParams)) {
-      return;
-    }
-
-    setValues((current) => {
-      const sourceField = lastEditedNumericFieldRef.current ?? getFallbackNumericField(current);
-
-      return recalculateByLotParams(current, sourceField, nextLotParams);
-    });
-  }, [currencyRate, lotSize, setValues]);
-
-  const updateFundingPrice = (fundingPrice: string) => {
-    setValues((current) => (current.fundingPrice === fundingPrice ? current : { ...current, fundingPrice }));
-  };
-
-  const updateRequestVolume = (requestVolume: string) => {
-    if (activeNumericFieldRef.current !== 'requestVolume') {
-      return;
-    }
-
-    lastEditedNumericFieldRef.current = 'requestVolume';
-
-    setValues((current) => {
-      const quantity =
-        isValidLotSize(lotSize) && isValidCurrencyRate(currencyRate)
-          ? calculateQuantityByRequestVolume(requestVolume, lotSize, currencyRate)
-          : current.quantity;
-
-      return current.requestVolume === requestVolume && current.quantity === quantity
-        ? current
-        : { ...current, requestVolume, quantity };
-    });
-  };
-
-  const updateQuantity = (quantity: string) => {
-    if (activeNumericFieldRef.current !== 'quantity') {
-      return;
-    }
-
-    lastEditedNumericFieldRef.current = 'quantity';
-
-    setValues((current) => {
-      const requestVolume =
-        isValidLotSize(lotSize) && isValidCurrencyRate(currencyRate)
-          ? calculateRequestVolumeByQuantity(quantity, lotSize, currencyRate)
-          : current.requestVolume;
-
-      return current.requestVolume === requestVolume && current.quantity === quantity
-        ? current
-        : { ...current, requestVolume, quantity };
-    });
-  };
-
-  const applyCommissionReduction = (commission?: number) => {
-    if (!isFiniteNumber(commission)) {
-      return;
-    }
-
-    setValues((current) => {
-      const adjustedValues = calculateCommissionAdjustedValues(
-        current.requestVolume,
-        commission,
-        lotSize,
-        currencyRate,
-      );
-      const quantity = adjustedValues.quantity ?? current.quantity;
-
-      return adjustedValues.requestVolume === current.requestVolume && quantity === current.quantity
-        ? current
-        : { ...current, requestVolume: adjustedValues.requestVolume, quantity };
-    });
-  };
-
-  const handleNumericFieldFocus = (field: NumericField) => {
-    activeNumericFieldRef.current = field;
-  };
-
-  const handleNumericFieldBlur = () => {
-    activeNumericFieldRef.current = null;
-  };
-
-  return {
-    roundedRequestVolumeHint,
-    updateFundingPrice,
-    updateRequestVolume,
-    updateQuantity,
-    applyCommissionReduction,
-    handleNumericFieldFocus,
-    handleNumericFieldBlur,
-  };
-};
diff --git a/src/modules/MXTForms/shared/numericFields/ui/DepositNumericFieldsBlock.tsx b/src/modules/MXTForms/shared/numericFields/ui/DepositNumericFieldsBlock.tsx
deleted file mode 100644
index a92dc8676..000000000
--- a/src/modules/MXTForms/shared/numericFields/ui/DepositNumericFieldsBlock.tsx
+++ /dev/null
@@ -1,138 +0,0 @@
-import React from 'react';
-import { NumericFormat } from 'react-number-format';
-
-import { formatNumberValue } from '@modules/MXTForms/shared/model';
-import { PriceRangeHint } from '@modules/MXTForms/shared/priceRange';
-import { depositFormStyles as styles, FormRow, NumericBaseInput, PercentBaseInput } from '@modules/MXTForms/shared/ui';
-
-import type { DepositNumericValues } from '../model/getInitialNumericValues';
-import type { DepositNumericFieldsModel } from '../model/useDepositNumericFields';
-import type { PriceRange } from '@modules/MXTForms/shared/priceRange';
-import type { InputProps } from '@uikit/Input';
-import type { ReactNode } from 'react';
-import type { NumberFormatValues } from 'react-number-format';
-
-type DepositNumericFieldsBlockProps = {
-  values: DepositNumericValues;
-  model: DepositNumericFieldsModel;
-  priceRange?: PriceRange;
-  effectiveRate?: number;
-  required?: boolean;
-  fundingPriceDecimalScale?: number;
-  requestVolumeDecimalScale?: number;
-  fundingPriceStatus?: InputProps['status'];
-  requestVolumeStatus?: InputProps['status'];
-  quantityStatus?: InputProps['status'];
-  fundingPriceError?: ReactNode;
-  requestVolumeError?: ReactNode;
-  quantityError?: ReactNode;
-};
-
-const formatRequestVolumeHint = (value: string, fractionDigits: number) => {
-  if (!value || fractionDigits <= 0) {
-    return formatNumberValue(value, fractionDigits);
-  }
-
-  const numberValue = Number(value);
-
-  return Number.isNaN(numberValue)
-    ? value
-    : numberValue.toLocaleString('ru-RU', {
-        maximumFractionDigits: fractionDigits,
-        minimumFractionDigits: fractionDigits,
-      });
-};
-
-export const DepositNumericFieldsBlock = ({
-  values,
-  model,
-  priceRange,
-  effectiveRate,
-  required,
-  fundingPriceDecimalScale = 2,
-  requestVolumeDecimalScale = 0,
-  fundingPriceStatus,
-  requestVolumeStatus,
-  quantityStatus,
-  fundingPriceError,
-  requestVolumeError,
-  quantityError,
-}: DepositNumericFieldsBlockProps) => (
-  <>
-    <FormRow
-      label="Ставка"
-      required={required}
-    >
-      <NumericFormat
-        customInput={PercentBaseInput}
-        className={styles.numberInput}
-        value={values.fundingPrice}
-        status={fundingPriceStatus}
-        valueIsNumericString
-        thousandSeparator=" "
-        decimalSeparator=","
-        allowedDecimalSeparators={[',', '.']}
-        decimalScale={fundingPriceDecimalScale}
-        fixedDecimalScale
-        allowNegative={false}
-        onValueChange={(formatValues: NumberFormatValues) => model.updateFundingPrice(formatValues.value)}
-      />
-      {fundingPriceError ?? (
-        <PriceRangeHint
-          priceRange={priceRange}
-          effectiveRate={effectiveRate}
-          maximumFractionDigits={fundingPriceDecimalScale}
-        />
-      )}
-    </FormRow>
-
-    <FormRow
-      label="Сумма депозита"
-      required={required}
-    >
-      <NumericFormat
-        customInput={NumericBaseInput}
-        className={styles.numberInput}
-        value={values.requestVolume}
-        status={requestVolumeStatus}
-        valueIsNumericString
-        thousandSeparator=" "
-        decimalSeparator=","
-        allowedDecimalSeparators={[',', '.']}
-        decimalScale={requestVolumeDecimalScale}
-        fixedDecimalScale={requestVolumeDecimalScale > 0}
-        allowNegative={false}
-        onFocus={() => model.handleNumericFieldFocus('requestVolume')}
-        onBlur={model.handleNumericFieldBlur}
-        onValueChange={(formatValues: NumberFormatValues) => model.updateRequestVolume(formatValues.value)}
-      />
-      {requestVolumeError ??
-        (model.roundedRequestVolumeHint ? (
-          <div className={styles.hint}>
-            Сумма с учётом округления до лотов{' '}
-            {formatRequestVolumeHint(model.roundedRequestVolumeHint, requestVolumeDecimalScale)}
-          </div>
-        ) : null)}
-    </FormRow>
-
-    <FormRow
-      label="Лоты"
-      required={required}
-    >
-      <NumericFormat
-        customInput={NumericBaseInput}
-        className={styles.numberInput}
-        value={values.quantity}
-        status={quantityStatus}
-        valueIsNumericString
-        thousandSeparator=" "
-        decimalScale={0}
-        allowNegative={false}
-        onFocus={() => model.handleNumericFieldFocus('quantity')}
-        onBlur={model.handleNumericFieldBlur}
-        onValueChange={(formatValues: NumberFormatValues) => model.updateQuantity(formatValues.value)}
-      />
-      {quantityError}
-    </FormRow>
-  </>
-);
diff --git a/src/modules/MXTForms/shared/priceRange/api/__tests__/requestPriceRange.test.ts b/src/modules/MXTForms/shared/priceRange/api/__tests__/requestPriceRange.test.ts
deleted file mode 100644
index 8f4eb3680..000000000
--- a/src/modules/MXTForms/shared/priceRange/api/__tests__/requestPriceRange.test.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import {
-  getPublishedBody,
-  mockMxtResponse,
-  resetMxtClientMock,
-} from '@modules/MXTForms/shared/request/testing/mockWsMxtStompClient';
-
-import { requestPriceRange } from '../requestPriceRange';
-
-describe('requestPriceRange', () => {
-  beforeEach(resetMxtClientMock);
-
-  it('should publish request and return matched price range', async () => {
-    mockMxtResponse({
-      destination: 'priceRange.new',
-      messageType: 'success',
-      data: {
-        minLimit: -19.97,
-        maxLimit: 17.3,
-      },
-    });
-
-    await expect(
-      requestPriceRange({
-        formId: 'form-1',
-        requestId: 'receipt-1',
-        calculationType: 'standard',
-        marketplaceId: 1102,
-        issueId: 620000,
-      }),
-    ).resolves.toEqual({
-      minLimit: -19.97,
-      maxLimit: 17.3,
-    });
-
-    expect(getPublishedBody()).toEqual({
-      marketplaceId: 1102,
-      issueId: 620000,
-    });
-  });
-
-  it('should publish addressed price range request', async () => {
-    mockMxtResponse({
-      destination: 'priceRange.new',
-      messageType: 'success',
-      data: {
-        minLimit: -19.97,
-        maxLimit: 17.3,
-      },
-    });
-
-    await expect(
-      requestPriceRange({
-        formId: 'address-form-1',
-        requestId: 'receipt-2',
-        calculationType: 'addressed',
-        marketplaceId: 1010,
-        issueId: 620000,
-        fundingDuration: 5,
-        settlementCodeId: 34,
-      }),
-    ).resolves.toEqual({
-      minLimit: -19.97,
-      maxLimit: 17.3,
-    });
-
-    expect(getPublishedBody()).toEqual({
-      marketplaceId: 1010,
-      issueId: 620000,
-      fundingDuration: 5,
-      settlementCodeId: 34,
-    });
-  });
-});
diff --git a/src/modules/MXTForms/shared/priceRange/api/requestPriceRange.ts b/src/modules/MXTForms/shared/priceRange/api/requestPriceRange.ts
deleted file mode 100644
index 12bf4b212..000000000
--- a/src/modules/MXTForms/shared/priceRange/api/requestPriceRange.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-import { requestByReceipt } from '@modules/MXTForms/shared/request/requestByReceipt';
-
-import type { PriceRange, PriceRangeRequestPayload } from '../model/types';
-
-const PRICE_RANGE_DESTINATION = 'priceRange.new';
-
-type PriceRangeResponseBody = {
-  receiptId?: string;
-  destination?: string;
-  messageType?: string;
-  data?: PriceRange;
-};
-
-const isPriceRangeResponseBody = (body: unknown, receiptId: string): body is PriceRangeResponseBody =>
-  typeof body === 'object' &&
-  body !== null &&
-  (body as PriceRangeResponseBody).destination === PRICE_RANGE_DESTINATION &&
-  (body as PriceRangeResponseBody).receiptId === receiptId;
-
-const getPriceRangeFromResponse = (body: PriceRangeResponseBody): PriceRange | undefined => {
-  const { data } = body;
-
-  if (!data || !isFiniteNumber(data.minLimit) || !isFiniteNumber(data.maxLimit)) {
-    return undefined;
-  }
-
-  return {
-    minLimit: data.minLimit,
-    maxLimit: data.maxLimit,
-  };
-};
-
-export const requestPriceRange = (payload: PriceRangeRequestPayload): Promise<PriceRange | undefined> => {
-  const { calculationType, marketplaceId, issueId, requestId } = payload;
-
-  if (!isFiniteNumber(marketplaceId) || !isFiniteNumber(issueId)) {
-    return Promise.resolve(undefined);
-  }
-
-  if (
-    calculationType === 'addressed' &&
-    (!isFiniteNumber(payload.fundingDuration) ||
-      payload.fundingDuration < 0 ||
-      !isFiniteNumber(payload.settlementCodeId))
-  ) {
-    return Promise.resolve(undefined);
-  }
-
-  return requestByReceipt<PriceRange | undefined>({
-    destination: PRICE_RANGE_DESTINATION,
-    receiptId: requestId,
-    body:
-      calculationType === 'addressed'
-        ? {
-            marketplaceId,
-            issueId,
-            fundingDuration: payload.fundingDuration,
-            settlementCodeId: payload.settlementCodeId,
-          }
-        : {
-            marketplaceId,
-            issueId,
-          },
-    getResult: (body, receiptId) =>
-      isPriceRangeResponseBody(body, receiptId)
-        ? {
-            matched: true,
-            value: getPriceRangeFromResponse(body),
-          }
-        : {
-            matched: false,
-          },
-  });
-};
diff --git a/src/modules/MXTForms/shared/priceRange/index.ts b/src/modules/MXTForms/shared/priceRange/index.ts
deleted file mode 100644
index 80e0c8d85..000000000
--- a/src/modules/MXTForms/shared/priceRange/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export { PriceRangeHint } from './ui/PriceRangeHint';
-export { priceRangeRequested, priceRangeReset } from './model/actions';
-export { priceRangeSelector } from './model/selectors';
-export { default as priceRangeReducer } from './model/slice';
-export { usePriceRange } from './model/usePriceRange';
-export { watchPriceRange } from './model/saga';
-
-export type {
-  AddressedPriceRangeRequestParams,
-  PriceRange,
-  PriceRangeRequestParams,
-  PriceRangeState,
-  StandardPriceRangeRequestParams,
-} from './model/types';
diff --git a/src/modules/MXTForms/shared/priceRange/model/__tests__/slice.test.ts b/src/modules/MXTForms/shared/priceRange/model/__tests__/slice.test.ts
deleted file mode 100644
index a401256ec..000000000
--- a/src/modules/MXTForms/shared/priceRange/model/__tests__/slice.test.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { priceRangeRequested, priceRangeReset } from '../actions';
-import priceRangeReducer, { priceRangeSucceeded } from '../slice';
-
-describe('price range slice', () => {
-  it('should store result by form id and ignore another request id', () => {
-    const requestAction = priceRangeRequested({
-      formId: 'form-1',
-      calculationType: 'standard',
-      marketplaceId: 1102,
-      issueId: 620000,
-    });
-    const loadingState = priceRangeReducer(undefined, requestAction);
-    const staleState = priceRangeReducer(
-      loadingState,
-      priceRangeSucceeded({
-        formId: 'form-1',
-        requestId: 'stale-request',
-        data: {
-          minLimit: 1,
-          maxLimit: 2,
-        },
-      }),
-    );
-    const successState = priceRangeReducer(
-      staleState,
-      priceRangeSucceeded({
-        formId: 'form-1',
-        requestId: requestAction.payload.requestId,
-        data: {
-          minLimit: -19.97,
-          maxLimit: 17.3,
-        },
-      }),
-    );
-
-    expect(staleState).toEqual(loadingState);
-    expect(successState['form-1']?.data).toEqual({
-      minLimit: -19.97,
-      maxLimit: 17.3,
-    });
-    expect(priceRangeReducer(successState, priceRangeReset({ formId: 'form-1' }))['form-1']).toBeUndefined();
-  });
-});
diff --git a/src/modules/MXTForms/shared/priceRange/model/actions.ts b/src/modules/MXTForms/shared/priceRange/model/actions.ts
deleted file mode 100644
index 23fe66e8e..000000000
--- a/src/modules/MXTForms/shared/priceRange/model/actions.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { createAction } from '@reduxjs/toolkit';
-
-import { createRequestId } from '@modules/MXTForms/shared/request/createRequestId';
-
-import type { PriceRangeRequestParams, PriceRangeRequestPayload } from './types';
-
-export const priceRangeRequested = createAction(
-  'formPriceRange/requested',
-  (payload: PriceRangeRequestParams): { payload: PriceRangeRequestPayload } => ({
-    payload: {
-      ...payload,
-      requestId: createRequestId(),
-    },
-  }),
-);
-
-export const priceRangeReset = createAction<{ formId: string }>('formPriceRange/reset');
diff --git a/src/modules/MXTForms/shared/priceRange/model/saga.ts b/src/modules/MXTForms/shared/priceRange/model/saga.ts
deleted file mode 100644
index 252bee3d0..000000000
--- a/src/modules/MXTForms/shared/priceRange/model/saga.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { call, put, takeEvery } from 'typed-redux-saga';
-
-import { requestPriceRange } from '../api/requestPriceRange';
-
-import { priceRangeRequested } from './actions';
-import { priceRangeFailed, priceRangeSucceeded } from './slice';
-
-const getErrorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));
-
-function* requestPriceRangeFlow(action: ReturnType<typeof priceRangeRequested>) {
-  const { payload } = action;
-
-  try {
-    const data = yield* call(requestPriceRange, payload);
-
-    yield* put(
-      priceRangeSucceeded({
-        formId: payload.formId,
-        requestId: payload.requestId,
-        data,
-      }),
-    );
-  } catch (error) {
-    yield* put(
-      priceRangeFailed({
-        formId: payload.formId,
-        requestId: payload.requestId,
-        error: getErrorMessage(error),
-      }),
-    );
-  }
-}
-
-export function* watchPriceRange() {
-  yield* takeEvery(priceRangeRequested, requestPriceRangeFlow);
-}
diff --git a/src/modules/MXTForms/shared/priceRange/model/selectors.ts b/src/modules/MXTForms/shared/priceRange/model/selectors.ts
deleted file mode 100644
index 71168bfa5..000000000
--- a/src/modules/MXTForms/shared/priceRange/model/selectors.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { RootState } from '@store/setupStore';
-
-const DEFAULT_PRICE_RANGE_STATE = {
-  loading: false,
-  data: undefined,
-  error: null,
-};
-
-export const priceRangeSelector = (formId: string) => (state: RootState) =>
-  state.formPriceRange[formId] ?? DEFAULT_PRICE_RANGE_STATE;
diff --git a/src/modules/MXTForms/shared/priceRange/model/slice.ts b/src/modules/MXTForms/shared/priceRange/model/slice.ts
deleted file mode 100644
index a1e3128f6..000000000
--- a/src/modules/MXTForms/shared/priceRange/model/slice.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { createSlice, PayloadAction } from '@reduxjs/toolkit';
-
-import { priceRangeRequested, priceRangeReset } from './actions';
-
-import type { PriceRange, PriceRangeSliceState } from './types';
-
-type PriceRangeResultPayload = {
-  formId: string;
-  requestId: string;
-  data?: PriceRange;
-};
-
-type PriceRangeFailurePayload = {
-  formId: string;
-  requestId: string;
-  error: string;
-};
-
-export const initialPriceRangeState: PriceRangeSliceState = {};
-
-const priceRangeSlice = createSlice({
-  name: 'formPriceRange',
-  initialState: initialPriceRangeState,
-  reducers: {
-    priceRangeSucceeded: (state, { payload }: PayloadAction<PriceRangeResultPayload>) => {
-      const current = state[payload.formId];
-
-      if (!current || current.requestId !== payload.requestId) {
-        return;
-      }
-
-      state[payload.formId] = {
-        loading: false,
-        data: payload.data,
-        error: null,
-        requestId: payload.requestId,
-      };
-    },
-    priceRangeFailed: (state, { payload }: PayloadAction<PriceRangeFailurePayload>) => {
-      const current = state[payload.formId];
-
-      if (!current || current.requestId !== payload.requestId) {
-        return;
-      }
-
-      state[payload.formId] = {
-        loading: false,
-        error: payload.error,
-        requestId: payload.requestId,
-      };
-    },
-  },
-  extraReducers: (builder) => {
-    builder
-      .addCase(priceRangeRequested, (state, { payload }) => {
-        state[payload.formId] = {
-          loading: true,
-          error: null,
-          requestId: payload.requestId,
-        };
-      })
-      .addCase(priceRangeReset, (state, { payload }) => {
-        delete state[payload.formId];
-      });
-  },
-});
-
-export const { priceRangeFailed, priceRangeSucceeded } = priceRangeSlice.actions;
-export default priceRangeSlice.reducer;
diff --git a/src/modules/MXTForms/shared/priceRange/model/types.ts b/src/modules/MXTForms/shared/priceRange/model/types.ts
deleted file mode 100644
index b00a066e9..000000000
--- a/src/modules/MXTForms/shared/priceRange/model/types.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-export type PriceRange = {
-  minLimit?: number;
-  maxLimit?: number;
-};
-
-type PriceRangeRequestBaseParams = {
-  formId: string;
-  marketplaceId?: number;
-  issueId?: number;
-};
-
-export type StandardPriceRangeRequestParams = PriceRangeRequestBaseParams & {
-  calculationType: 'standard';
-};
-
-export type AddressedPriceRangeRequestParams = PriceRangeRequestBaseParams & {
-  calculationType: 'addressed';
-  fundingDuration?: number;
-  settlementCodeId?: number;
-};
-
-export type PriceRangeRequestParams = StandardPriceRangeRequestParams | AddressedPriceRangeRequestParams;
-
-export type PriceRangeRequestPayload = PriceRangeRequestParams & {
-  requestId: string;
-};
-
-export type PriceRangeState = {
-  loading: boolean;
-  data?: PriceRange;
-  error: string | null;
-  requestId?: string;
-};
-
-export type PriceRangeSliceState = Record<string, PriceRangeState>;
diff --git a/src/modules/MXTForms/shared/priceRange/model/usePriceRange.ts b/src/modules/MXTForms/shared/priceRange/model/usePriceRange.ts
deleted file mode 100644
index abb5a2bbd..000000000
--- a/src/modules/MXTForms/shared/priceRange/model/usePriceRange.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import { useEffect } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-
-import { priceRangeRequested, priceRangeReset } from './actions';
-import { priceRangeSelector } from './selectors';
-
-import type {
-  AddressedPriceRangeRequestParams,
-  PriceRangeRequestParams,
-  StandardPriceRangeRequestParams,
-} from './types';
-
-type UseStandardPriceRangeParams = Omit<StandardPriceRangeRequestParams, 'formId'> & {
-  formId: string;
-  enabled: boolean;
-};
-
-type UseAddressedPriceRangeParams = Omit<AddressedPriceRangeRequestParams, 'formId'> & {
-  formId: string;
-  enabled: boolean;
-};
-
-type UsePriceRangeParams = UseStandardPriceRangeParams | UseAddressedPriceRangeParams;
-
-export const usePriceRange = (params: UsePriceRangeParams) => {
-  const { formId, enabled, calculationType, marketplaceId, issueId } = params;
-  const fundingDuration = calculationType === 'addressed' ? params.fundingDuration : undefined;
-  const settlementCodeId = calculationType === 'addressed' ? params.settlementCodeId : undefined;
-  const dispatch = useDispatch();
-  const state = useAppSelect(priceRangeSelector(formId));
-
-  useEffect(() => {
-    if (!enabled) {
-      dispatch(priceRangeReset({ formId }));
-
-      return;
-    }
-
-    const requestParams: PriceRangeRequestParams =
-      calculationType === 'addressed'
-        ? {
-            formId,
-            calculationType,
-            marketplaceId,
-            issueId,
-            fundingDuration,
-            settlementCodeId,
-          }
-        : {
-            formId,
-            calculationType,
-            marketplaceId,
-            issueId,
-          };
-
-    dispatch(priceRangeRequested(requestParams));
-
-    return () => {
-      dispatch(priceRangeReset({ formId }));
-    };
-  }, [calculationType, dispatch, enabled, formId, fundingDuration, issueId, marketplaceId, settlementCodeId]);
-
-  return {
-    priceRange: state.data,
-    loading: state.loading,
-    error: state.error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/priceRange/ui/PriceRangeHint.tsx b/src/modules/MXTForms/shared/priceRange/ui/PriceRangeHint.tsx
deleted file mode 100644
index 3a8a571e9..000000000
--- a/src/modules/MXTForms/shared/priceRange/ui/PriceRangeHint.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from 'react';
-
-import styles from '../../DepositFormShared.module.scss';
-
-import type { PriceRange } from '../model/types';
-
-const DEFAULT_RATE_DECIMAL_SCALE = 2;
-
-const formatRateLimitValue = (value: number, maximumFractionDigits = DEFAULT_RATE_DECIMAL_SCALE) =>
-  value.toLocaleString('ru-RU', {
-    maximumFractionDigits,
-  });
-
-const formatEffectiveRateValue = (value: number) =>
-  value.toLocaleString('ru-RU', {
-    maximumFractionDigits: 3,
-    minimumFractionDigits: 3,
-  });
-
-const getRateHint = (priceRange: PriceRange | undefined, maximumFractionDigits: number) => {
-  const { minLimit, maxLimit } = priceRange ?? {};
-
-  if (
-    typeof minLimit !== 'number' ||
-    typeof maxLimit !== 'number' ||
-    !Number.isFinite(minLimit) ||
-    !Number.isFinite(maxLimit)
-  ) {
-    return '';
-  }
-
-  return `Макс. ${formatRateLimitValue(maxLimit, maximumFractionDigits)} Мин. ${formatRateLimitValue(
-    minLimit,
-    maximumFractionDigits,
-  )}`;
-};
-
-export const PriceRangeHint = ({
-  priceRange,
-  effectiveRate,
-  maximumFractionDigits = DEFAULT_RATE_DECIMAL_SCALE,
-}: {
-  priceRange?: PriceRange;
-  effectiveRate?: number;
-  maximumFractionDigits?: number;
-}) => {
-  const rateHint = getRateHint(priceRange, maximumFractionDigits);
-  const formattedEffectiveRate =
-    typeof effectiveRate === 'number' && Number.isFinite(effectiveRate) ? formatEffectiveRateValue(effectiveRate) : '';
-  const effectiveRateHint = formattedEffectiveRate
-    ? `Эффективная ставка ~${formattedEffectiveRate}% с учётом комиссии`
-    : '';
-  const hints = [rateHint, effectiveRateHint].filter(Boolean);
-
-  return hints.length ? (
-    <div className={styles.hint}>
-      {hints.map((hint) => (
-        <div key={hint}>{hint}</div>
-      ))}
-    </div>
-  ) : null;
-};
diff --git a/src/modules/MXTForms/shared/request/createRequestId.ts b/src/modules/MXTForms/shared/request/createRequestId.ts
deleted file mode 100644
index 4ce044465..000000000
--- a/src/modules/MXTForms/shared/request/createRequestId.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { v4 as uuidv4 } from 'uuid';
-
-export const createRequestId = () => uuidv4();
diff --git a/src/modules/MXTForms/shared/request/requestActionByReceipt.ts b/src/modules/MXTForms/shared/request/requestActionByReceipt.ts
deleted file mode 100644
index 0cbd29b47..000000000
--- a/src/modules/MXTForms/shared/request/requestActionByReceipt.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { MxtMessageType } from '@api/websokets/classes/WSMXTStompClient/types';
-
-import { requestByReceipt } from './requestByReceipt';
-
-export type ActionRequestResult = {
-  success: boolean;
-  message?: string;
-};
-
-type ActionResponseBody = {
-  receiptId?: string;
-  destination?: string;
-  messageType?: string;
-  data?: {
-    text?: unknown;
-  };
-};
-
-type RequestActionByReceiptParams = {
-  destination: string;
-  body: unknown;
-};
-
-const isActionResponseBody = (body: unknown, destination: string, receiptId: string): body is ActionResponseBody =>
-  typeof body === 'object' &&
-  body !== null &&
-  (body as ActionResponseBody).destination === destination &&
-  (body as ActionResponseBody).receiptId === receiptId;
-
-const getResponseMessage = (body: ActionResponseBody) => {
-  const message = body.data?.text;
-
-  return typeof message === 'string' && message.trim() ? message : undefined;
-};
-
-export const requestActionByReceipt = async ({
-  destination,
-  body,
-}: RequestActionByReceiptParams): Promise<ActionRequestResult> => {
-  const result = await requestByReceipt<ActionRequestResult>({
-    destination,
-    body,
-    getResult: (responseBody, receiptId) =>
-      isActionResponseBody(responseBody, destination, receiptId)
-        ? {
-            matched: true,
-            value: {
-              success: responseBody.messageType === MxtMessageType.SUCCESS,
-              message: getResponseMessage(responseBody),
-            },
-          }
-        : {
-            matched: false,
-          },
-  });
-
-  return result ?? { success: false };
-};
diff --git a/src/modules/MXTForms/shared/request/requestByReceipt.ts b/src/modules/MXTForms/shared/request/requestByReceipt.ts
deleted file mode 100644
index 2dc02a4f8..000000000
--- a/src/modules/MXTForms/shared/request/requestByReceipt.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-import { wsMXTStompClient } from '@api/websokets/classes/WSMXTStompClient';
-
-import { createRequestId } from './createRequestId';
-
-const SESSION_RESPONSE_DESTINATION = 'session.response';
-const FORM_REQUEST_TIMEOUT_MS = 5000;
-
-const noop = () => {
-  /** */
-};
-
-type StompMessage = {
-  body: string;
-};
-
-const parseMessageBody = (body: string) => {
-  try {
-    return JSON.parse(body);
-  } catch {
-    return body;
-  }
-};
-
-export type ReceiptResult<TResult> =
-  | {
-      matched: false;
-    }
-  | {
-      matched: true;
-      value: TResult;
-    };
-
-type RequestByReceiptParams<TResult> = {
-  destination: string;
-  body: unknown;
-  getResult: (body: unknown, receiptId: string) => ReceiptResult<TResult>;
-  responseDestination?: string;
-  receiptId?: string;
-};
-
-export const requestByReceipt = async <TResult>({
-  destination,
-  body,
-  getResult,
-  responseDestination = SESSION_RESPONSE_DESTINATION,
-  receiptId = createRequestId(),
-}: RequestByReceiptParams<TResult>): Promise<TResult | undefined> => {
-  try {
-    await wsMXTStompClient.activate();
-  } catch {
-    return undefined;
-  }
-
-  return new Promise((resolve) => {
-    let isResolved = false;
-    let unsubscribe = noop;
-    let timeout: ReturnType<typeof setTimeout>;
-    const resolveOnce = (result?: TResult) => {
-      if (isResolved) {
-        return;
-      }
-
-      isResolved = true;
-      clearTimeout(timeout);
-      unsubscribe();
-      resolve(result);
-    };
-
-    timeout = setTimeout(() => {
-      resolveOnce();
-    }, FORM_REQUEST_TIMEOUT_MS);
-
-    try {
-      unsubscribe = wsMXTStompClient.subscribeByKey({
-        key: `${responseDestination}:${destination}:${receiptId}`,
-        destination: responseDestination,
-        cb: (message: StompMessage) => {
-          const result = getResult(parseMessageBody(message.body), receiptId);
-
-          if (!result.matched) {
-            return;
-          }
-
-          resolveOnce(result.value);
-        },
-      });
-
-      wsMXTStompClient.publish({
-        destination,
-        body: JSON.stringify(body),
-        skipContentLengthHeader: false,
-        headers: {
-          request: 'action',
-          receipt: receiptId,
-        },
-      });
-    } catch {
-      resolveOnce();
-    }
-  });
-};
diff --git a/src/modules/MXTForms/shared/request/testing/mockWsMxtStompClient.ts b/src/modules/MXTForms/shared/request/testing/mockWsMxtStompClient.ts
deleted file mode 100644
index b2fbe5dcf..000000000
--- a/src/modules/MXTForms/shared/request/testing/mockWsMxtStompClient.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { wsMXTStompClient } from '@api/websokets/classes/WSMXTStompClient';
-
-jest.mock('@api/websokets/classes/WSMXTStompClient', () => ({
-  wsMXTStompClient: {
-    activate: jest.fn(),
-    subscribeByKey: jest.fn(),
-    publish: jest.fn(),
-  },
-}));
-
-type MockMxtClient = {
-  activate: jest.Mock;
-  subscribeByKey: jest.Mock;
-  publish: jest.Mock;
-};
-
-type MxtMessage = {
-  body: string;
-};
-
-type SubscribeParams = {
-  cb: (message: MxtMessage) => void;
-};
-
-type PublishParams = {
-  body?: string;
-  headers: {
-    receipt: string;
-  };
-};
-
-export const getMockClient = () => wsMXTStompClient as unknown as MockMxtClient;
-
-export const resetMxtClientMock = () => {
-  const client = getMockClient();
-
-  client.activate.mockReset();
-  client.subscribeByKey.mockReset();
-  client.publish.mockReset();
-};
-
-export const mockMxtResponse = (responseBody: Record<string, unknown>, unsubscribe = jest.fn()) => {
-  const client = getMockClient();
-  let responseCallback: ((message: MxtMessage) => void) | undefined;
-
-  client.subscribeByKey.mockImplementation(({ cb }: SubscribeParams) => {
-    responseCallback = cb;
-
-    return unsubscribe;
-  });
-  client.publish.mockImplementation(({ headers }: PublishParams) => {
-    responseCallback?.({
-      body: JSON.stringify({
-        receiptId: headers.receipt,
-        ...responseBody,
-      }),
-    });
-  });
-
-  return { client, unsubscribe };
-};
-
-export const getPublishedBody = () => JSON.parse(getMockClient().publish.mock.calls[0][0].body);
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/index.ts b/src/modules/MXTForms/shared/settlementDateSelection/index.ts
deleted file mode 100644
index bd346ac10..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export { buildFundingDurationOptions } from './model/buildFundingDurationOptions';
-export { buildSettlementDateOptions } from './model/buildSettlementDateOptions';
-export { buildSettlementSelectionOptions } from './model/buildSettlementSelectionOptions';
-export { getReturnDateHint } from './model/getReturnDateHint';
-export { getSettlementCodeId } from './model/getSettlementCodeId';
-export { useSettlementDateSelectionModel } from './model/useSettlementDateSelectionModel';
-
-export type { MoexSettleCodeData, SettlementDateData, SettlementDateSelectionModel } from './model/types';
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildFundingDurationOptions.test.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildFundingDurationOptions.test.ts
deleted file mode 100644
index 57eedd798..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildFundingDurationOptions.test.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { buildFundingDurationOptions } from '../buildFundingDurationOptions';
-
-describe('buildFundingDurationOptions', () => {
-  it('should build unique funding duration options sorted by duration', () => {
-    expect(
-      buildFundingDurationOptions([
-        { repoterm: 30 },
-        { repoterm: 2 },
-        { repoterm: 1 },
-        { repoterm: 2 },
-        { repoterm: 5 },
-      ]),
-    ).toEqual([
-      {
-        value: '1',
-        title: '1 день',
-      },
-      {
-        value: '2',
-        title: '2 дня',
-      },
-      {
-        value: '5',
-        title: '5 дней',
-      },
-      {
-        value: '30',
-        title: '30 дней',
-      },
-    ]);
-  });
-
-  it('should skip empty, invalid and negative durations', () => {
-    expect(
-      buildFundingDurationOptions([
-        {},
-        { repoterm: Number.NaN },
-        { repoterm: Number.POSITIVE_INFINITY },
-        { repoterm: -1 },
-      ]),
-    ).toEqual([]);
-  });
-
-  it('should append return date when placement date is selected', () => {
-    expect(buildFundingDurationOptions([{ repoterm: 4 }, { repoterm: 11 }], '2026-06-15')).toEqual([
-      {
-        value: '4',
-        title: '4 дня',
-        subtitle: '19 июн 2026',
-      },
-      {
-        value: '11',
-        title: '11 дней',
-        subtitle: '26 июн 2026',
-      },
-    ]);
-  });
-});
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildSettlementDateOptions.test.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildSettlementDateOptions.test.ts
deleted file mode 100644
index 425576303..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildSettlementDateOptions.test.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { buildSettlementDateOptions } from '../buildSettlementDateOptions';
-
-describe('buildSettlementDateOptions', () => {
-  it('should build unique settlement date options sorted chronologically', () => {
-    expect(
-      buildSettlementDateOptions([
-        { settledate: '2026-06-08T00:00:00+03:00' },
-        { settledate: '2026-04-15T00:00:00+03:00' },
-        { settledate: '2026-06-08T10:13:49+03:00' },
-      ]),
-    ).toEqual([
-      {
-        value: '2026-04-15',
-        title: '15 апр 2026',
-      },
-      {
-        value: '2026-06-08',
-        title: '8 июн 2026',
-      },
-    ]);
-  });
-
-  it('should skip empty and invalid dates', () => {
-    expect(
-      buildSettlementDateOptions([
-        {},
-        { settledate: '' },
-        { settledate: 'invalid-date' },
-        { settledate: '2026-02-31T00:00:00+03:00' },
-      ]),
-    ).toEqual([]);
-  });
-});
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildSettlementSelectionOptions.test.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildSettlementSelectionOptions.test.ts
deleted file mode 100644
index 37bea319b..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/buildSettlementSelectionOptions.test.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { buildSettlementSelectionOptions } from '../buildSettlementSelectionOptions';
-
-const items = [
-  { settledate: '2026-04-15T00:00:00+03:00', repoterm: 1, marketplaceid: 1010 },
-  { settledate: '2026-04-15T00:00:00+03:00', repoterm: 2, marketplaceid: 1010 },
-  { settledate: '2026-04-16T00:00:00+03:00', repoterm: 2, marketplaceid: 1010 },
-  { settledate: '2026-04-17T00:00:00+03:00', repoterm: 5, marketplaceid: 1010 },
-  { settledate: '2026-05-01T00:00:00+03:00', repoterm: 30, marketplaceid: 1110 },
-];
-
-describe('buildSettlementSelectionOptions', () => {
-  it('should return all options when date and duration are not selected', () => {
-    expect(
-      buildSettlementSelectionOptions({
-        items,
-        valueDate: '',
-        marketplaceId: 1010,
-      }),
-    ).toEqual({
-      options: [
-        { value: '2026-04-15', title: '15 апр 2026' },
-        { value: '2026-04-16', title: '16 апр 2026' },
-        { value: '2026-04-17', title: '17 апр 2026' },
-      ],
-      durationOptions: [
-        { value: '1', title: '1 день' },
-        { value: '2', title: '2 дня' },
-        { value: '5', title: '5 дней' },
-      ],
-    });
-  });
-
-  it('should filter durations by selected settlement date', () => {
-    expect(
-      buildSettlementSelectionOptions({
-        items,
-        valueDate: '2026-04-15',
-        marketplaceId: 1010,
-      }).durationOptions,
-    ).toEqual([
-      { value: '1', title: '1 день', subtitle: '16 апр 2026' },
-      { value: '2', title: '2 дня', subtitle: '17 апр 2026' },
-    ]);
-  });
-
-  it('should filter settlement dates by selected funding duration', () => {
-    expect(
-      buildSettlementSelectionOptions({
-        items,
-        valueDate: '',
-        fundingDuration: 2,
-        marketplaceId: 1010,
-      }).options,
-    ).toEqual([
-      { value: '2026-04-15', title: '15 апр 2026' },
-      { value: '2026-04-16', title: '16 апр 2026' },
-    ]);
-  });
-
-  it('should keep both lists linked when both values are selected', () => {
-    expect(
-      buildSettlementSelectionOptions({
-        items,
-        valueDate: '2026-04-15',
-        fundingDuration: 2,
-        marketplaceId: 1010,
-      }),
-    ).toEqual({
-      options: [
-        { value: '2026-04-15', title: '15 апр 2026' },
-        { value: '2026-04-16', title: '16 апр 2026' },
-      ],
-      durationOptions: [
-        { value: '1', title: '1 день', subtitle: '16 апр 2026' },
-        { value: '2', title: '2 дня', subtitle: '17 апр 2026' },
-      ],
-    });
-  });
-
-  it('should filter dates and durations by marketplace', () => {
-    expect(
-      buildSettlementSelectionOptions({
-        items,
-        valueDate: '',
-        marketplaceId: 1110,
-      }),
-    ).toEqual({
-      options: [{ value: '2026-05-01', title: '1 май 2026' }],
-      durationOptions: [{ value: '30', title: '30 дней' }],
-    });
-  });
-});
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/getReturnDateHint.test.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/getReturnDateHint.test.ts
deleted file mode 100644
index 493c91de9..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/getReturnDateHint.test.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { getReturnDateHint } from '../getReturnDateHint';
-
-describe('getReturnDateHint', () => {
-  it('should calculate and format return date', () => {
-    expect(getReturnDateHint('2026-04-15', 2)).toBe('17 апр 2026');
-  });
-
-  it('should support zero funding duration', () => {
-    expect(getReturnDateHint('2026-04-15', 0)).toBe('15 апр 2026');
-  });
-
-  it.each<[string, number | undefined]>([
-    ['', 2],
-    ['invalid-date', 2],
-    ['2026-02-31', 2],
-    ['2026-04-15', undefined],
-    ['2026-04-15', Number.NaN],
-    ['2026-04-15', -1],
-  ])('should return placeholder for invalid params', (valueDate, fundingDuration) => {
-    expect(getReturnDateHint(valueDate, fundingDuration)).toBe('Заполните обязательные поля для расчёта даты');
-  });
-});
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/getSettlementCodeId.test.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/getSettlementCodeId.test.ts
deleted file mode 100644
index 6fd301822..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/__tests__/getSettlementCodeId.test.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { getSettlementCodeId } from '../getSettlementCodeId';
-
-describe('getSettlementCodeId', () => {
-  const items = [
-    {
-      id: 20045967108,
-      settledate: '2026-06-10T00:00:00+03:00',
-      repoterm: 5,
-      marketplaceid: 1010,
-      settlecode: 'T0',
-    },
-    {
-      id: 20045967109,
-      settledate: '2026-06-10T00:00:00+03:00',
-      repoterm: 5,
-      marketplaceid: 1110,
-      settlecode: 'CNY0',
-    },
-  ];
-  const settleCodes = [
-    { id: 34, name: 'T0', settleCode: 'T0' },
-    { id: 35, name: 'CNY0', settleCode: 'CNY0' },
-  ];
-
-  it('should resolve enum id by date, duration, marketplace and settle code', () => {
-    expect(
-      getSettlementCodeId({
-        items,
-        settleCodes,
-        valueDate: '2026-06-10',
-        fundingDuration: 5,
-        marketplaceId: 1010,
-      }),
-    ).toBe(34);
-  });
-
-  it('should use marketplace when records have the same date and duration', () => {
-    expect(
-      getSettlementCodeId({
-        items,
-        settleCodes,
-        valueDate: '2026-06-10',
-        fundingDuration: 5,
-        marketplaceId: 1110,
-      }),
-    ).toBe(35);
-  });
-
-  it('should return undefined when required selection is incomplete', () => {
-    expect(
-      getSettlementCodeId({
-        items,
-        settleCodes,
-        valueDate: '',
-        fundingDuration: 5,
-        marketplaceId: 1010,
-      }),
-    ).toBeUndefined();
-  });
-});
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/buildFundingDurationOptions.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/buildFundingDurationOptions.ts
deleted file mode 100644
index 592e7ef15..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/buildFundingDurationOptions.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import dayjs from 'dayjs';
-
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-import { pluralizeDays } from '@utils/dates/pluralizeDays';
-
-import { formatSettlementDateTitle } from './buildSettlementDateOptions';
-
-import type { SettlementDateData } from './types';
-import type { Value } from '@uikit/Select';
-
-const getReturnDateTitle = (valueDate: string | undefined, duration: number) => {
-  const date = dayjs(valueDate);
-
-  if (!valueDate || !date.isValid() || date.format('YYYY-MM-DD') !== valueDate) {
-    return '';
-  }
-
-  return formatSettlementDateTitle(date.add(duration, 'day').format('YYYY-MM-DD'));
-};
-
-export const buildFundingDurationOptions = (items: SettlementDateData[], valueDate?: string): Value[] => {
-  const durations = new Set<number>();
-
-  items.forEach((item) => {
-    if (isFiniteNumber(item.repoterm) && item.repoterm >= 0) {
-      durations.add(item.repoterm);
-    }
-  });
-
-  return Array.from(durations)
-    .sort((left, right) => left - right)
-    .map((duration) => {
-      const returnDateTitle = getReturnDateTitle(valueDate, duration);
-
-      return {
-        value: String(duration),
-        title: pluralizeDays(duration),
-        ...(returnDateTitle ? { subtitle: returnDateTitle } : {}),
-      };
-    });
-};
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/buildSettlementDateOptions.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/buildSettlementDateOptions.ts
deleted file mode 100644
index 4cfb7c206..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/buildSettlementDateOptions.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import dayjs from 'dayjs';
-
-import type { SettlementDateData } from './types';
-import type { Value } from '@uikit/Select';
-
-const SHORT_MONTHS = ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'];
-
-export const normalizeSettlementDate = (settlementDate?: string) => {
-  const value = settlementDate?.slice(0, 10) ?? '';
-  const date = dayjs(value);
-
-  return date.isValid() && date.format('YYYY-MM-DD') === value ? value : null;
-};
-
-export const formatSettlementDateTitle = (value: string) => {
-  const date = dayjs(value);
-
-  return `${date.date()} ${SHORT_MONTHS[date.month()]} ${date.year()}`;
-};
-
-const compareSettlementDates = (left: string, right: string) => dayjs(left).valueOf() - dayjs(right).valueOf();
-
-export const buildSettlementDateOptions = (items: SettlementDateData[]): Value[] => {
-  const dates = new Set<string>();
-
-  items.forEach((item) => {
-    const value = normalizeSettlementDate(item.settledate);
-
-    if (value) {
-      dates.add(value);
-    }
-  });
-
-  return Array.from(dates)
-    .sort(compareSettlementDates)
-    .map((value) => ({
-      value,
-      title: formatSettlementDateTitle(value),
-    }));
-};
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/buildSettlementSelectionOptions.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/buildSettlementSelectionOptions.ts
deleted file mode 100644
index fa2d08472..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/buildSettlementSelectionOptions.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import { buildFundingDurationOptions } from './buildFundingDurationOptions';
-import { buildSettlementDateOptions, normalizeSettlementDate } from './buildSettlementDateOptions';
-
-import type { SettlementDateData } from './types';
-
-type BuildSettlementSelectionOptionsParams = {
-  items: SettlementDateData[];
-  valueDate: string;
-  fundingDuration?: number;
-  marketplaceId?: number;
-};
-
-export const buildSettlementSelectionOptions = ({
-  items,
-  valueDate,
-  fundingDuration,
-  marketplaceId,
-}: BuildSettlementSelectionOptionsParams) => {
-  const marketplaceItems = isFiniteNumber(marketplaceId)
-    ? items.filter((item) => item.marketplaceid === marketplaceId)
-    : items;
-  const dateItems = isFiniteNumber(fundingDuration)
-    ? marketplaceItems.filter((item) => item.repoterm === fundingDuration)
-    : marketplaceItems;
-  const durationItems = valueDate
-    ? marketplaceItems.filter((item) => normalizeSettlementDate(item.settledate) === valueDate)
-    : marketplaceItems;
-
-  return {
-    options: buildSettlementDateOptions(dateItems),
-    durationOptions: buildFundingDurationOptions(durationItems, valueDate),
-  };
-};
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/getReturnDateHint.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/getReturnDateHint.ts
deleted file mode 100644
index a76c608b2..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/getReturnDateHint.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import dayjs from 'dayjs';
-
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import { formatSettlementDateTitle } from './buildSettlementDateOptions';
-
-const RETURN_DATE_NOT_SET = 'Заполните обязательные поля для расчёта даты';
-
-export const getReturnDateHint = (valueDate: string, fundingDuration?: number) => {
-  const placementDate = dayjs(valueDate);
-
-  if (
-    !valueDate ||
-    !placementDate.isValid() ||
-    placementDate.format('YYYY-MM-DD') !== valueDate ||
-    !isFiniteNumber(fundingDuration) ||
-    fundingDuration < 0
-  ) {
-    return RETURN_DATE_NOT_SET;
-  }
-
-  const returnDate = placementDate.add(fundingDuration, 'day').format('YYYY-MM-DD');
-
-  return formatSettlementDateTitle(returnDate);
-};
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/getSettlementCodeId.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/getSettlementCodeId.ts
deleted file mode 100644
index 91bf393b1..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/getSettlementCodeId.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-
-import { normalizeSettlementDate } from './buildSettlementDateOptions';
-
-import type { MoexSettleCodeData, SettlementDateData } from './types';
-
-type GetSettlementCodeIdParams = {
-  items: SettlementDateData[];
-  settleCodes: MoexSettleCodeData[];
-  valueDate: string;
-  fundingDuration?: number;
-  marketplaceId?: number;
-};
-
-type GetSelectedSettlementParams = Omit<GetSettlementCodeIdParams, 'settleCodes'>;
-
-export const getSelectedSettlement = ({
-  items,
-  valueDate,
-  fundingDuration,
-  marketplaceId,
-}: GetSelectedSettlementParams) => {
-  if (!valueDate || !isFiniteNumber(fundingDuration) || !isFiniteNumber(marketplaceId)) {
-    return undefined;
-  }
-
-  return items.find(
-    (item) =>
-      item.marketplaceid === marketplaceId &&
-      item.repoterm === fundingDuration &&
-      normalizeSettlementDate(item.settledate) === valueDate,
-  );
-};
-
-export const getSettlementCodeId = ({
-  items,
-  settleCodes,
-  valueDate,
-  fundingDuration,
-  marketplaceId,
-}: GetSettlementCodeIdParams) => {
-  const settlement = getSelectedSettlement({
-    items,
-    valueDate,
-    fundingDuration,
-    marketplaceId,
-  });
-
-  if (!settlement?.settlecode) {
-    return undefined;
-  }
-
-  const settleCode = settleCodes.find((item) => item.settleCode === settlement.settlecode);
-
-  return isFiniteNumber(settleCode?.id) ? settleCode.id : undefined;
-};
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/types.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/types.ts
deleted file mode 100644
index 4062b78cc..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/types.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import type { Value } from '@uikit/Select';
-
-export type SettlementDateData = {
-  id?: number;
-  secboard?: string;
-  seccode?: string;
-  settlecode?: string;
-  accruedint?: number;
-  accruedint2?: number;
-  price2?: number | null;
-  reporate?: number | null;
-  settledate?: string;
-  settledate2?: string;
-  repoterm?: number;
-  transfersonly?: string;
-  marketplaceid?: number;
-  tradingday?: string;
-};
-
-export type MoexSettleCodeData = {
-  id?: number;
-  name?: string;
-  settleCode?: string;
-  [key: string]: unknown;
-};
-
-export type SettlementDateSelectionModel = {
-  options: Value[];
-  durationOptions: Value[];
-  settlementCodeId?: number;
-  isLoading: boolean;
-  error: string | null;
-};
diff --git a/src/modules/MXTForms/shared/settlementDateSelection/model/useSettlementDateSelectionModel.ts b/src/modules/MXTForms/shared/settlementDateSelection/model/useSettlementDateSelectionModel.ts
deleted file mode 100644
index 86f95f943..000000000
--- a/src/modules/MXTForms/shared/settlementDateSelection/model/useSettlementDateSelectionModel.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { useMemo } from 'react';
-
-import { useMxtData } from '@hooks/mxt/useMxtData';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { mxtSelectors } from '@store/selectors/mxt';
-
-import { buildSettlementSelectionOptions } from './buildSettlementSelectionOptions';
-import { getSettlementCodeId } from './getSettlementCodeId';
-
-import type { MoexSettleCodeData, SettlementDateData, SettlementDateSelectionModel } from './types';
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-
-const SETTLEMENT_DATE_MXT_KEYS = ['moexSecSettleCodeMMRepo'] as const satisfies readonly MxtDataKey[];
-const moexSettleCodeSelector = mxtSelectors.getEnum('moexSettleCode');
-
-const getItems = (records?: Record<number, MxtObject>) =>
-  Object.values(records ?? {}) as unknown as SettlementDateData[];
-
-export const useSettlementDateSelectionModel = (
-  valueDate: string,
-  fundingDuration?: number,
-  marketplaceId?: number,
-): SettlementDateSelectionModel => {
-  const { dataRecords, errors, isLoading } = useMxtData(SETTLEMENT_DATE_MXT_KEYS);
-  const settleCodeEnum = useAppSelect(moexSettleCodeSelector);
-  const items = useMemo(() => getItems(dataRecords.moexSecSettleCodeMMRepo), [dataRecords.moexSecSettleCodeMMRepo]);
-  const { options, durationOptions } = useMemo(
-    () =>
-      buildSettlementSelectionOptions({
-        items,
-        valueDate,
-        fundingDuration,
-        marketplaceId,
-      }),
-    [fundingDuration, items, marketplaceId, valueDate],
-  );
-  const settlementCodeId = useMemo(
-    () =>
-      getSettlementCodeId({
-        items,
-        settleCodes: Object.values(settleCodeEnum?.values ?? {}) as unknown as MoexSettleCodeData[],
-        valueDate,
-        fundingDuration,
-        marketplaceId,
-      }),
-    [fundingDuration, items, marketplaceId, settleCodeEnum, valueDate],
-  );
-  const error = typeof errors.moexSecSettleCodeMMRepo === 'string' ? errors.moexSecSettleCodeMMRepo : null;
-
-  return {
-    options,
-    durationOptions,
-    settlementCodeId,
-    isLoading,
-    error,
-  };
-};
diff --git a/src/modules/MXTForms/shared/ui/ConfirmDescription.tsx b/src/modules/MXTForms/shared/ui/ConfirmDescription.tsx
deleted file mode 100644
index 3b55399dc..000000000
--- a/src/modules/MXTForms/shared/ui/ConfirmDescription.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from 'react';
-
-import styles from '../DepositFormShared.module.scss';
-
-type ConfirmDescriptionProps = {
-  description: string;
-  error?: string | null;
-};
-
-export const ConfirmDescription = ({ description, error }: ConfirmDescriptionProps) =>
-  error ? (
-    <span className={styles.confirmDescription}>
-      <span>{description}</span>
-      <span className={styles.confirmError}>{error}</span>
-    </span>
-  ) : (
-    <span>{description}</span>
-  );
diff --git a/src/modules/MXTForms/shared/ui/DepositModalFrame.tsx b/src/modules/MXTForms/shared/ui/DepositModalFrame.tsx
deleted file mode 100644
index ba890d2e5..000000000
--- a/src/modules/MXTForms/shared/ui/DepositModalFrame.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import React from 'react';
-
-import { DesktopModalForm } from '@components/DesktopModalForm';
-import { Button } from '@uikit/Button';
-
-import styles from '../DepositFormShared.module.scss';
-
-import type { ReactNode } from 'react';
-
-type DepositModalFrameProps = {
-  children: ReactNode;
-  subtitle: string;
-  pepCode: string;
-  modalClassName?: string;
-  submitDisabled?: boolean;
-  onClose: VoidFunction;
-  onSubmit: VoidFunction;
-};
-
-export const DepositModalFrame = ({
-  children,
-  subtitle,
-  pepCode,
-  modalClassName = styles.modal,
-  submitDisabled,
-  onClose,
-  onSubmit,
-}: DepositModalFrameProps) => (
-  <DesktopModalForm
-    title="Разместить депозит"
-    subTitle={subtitle}
-    onClose={onClose}
-    modalClassName={modalClassName}
-    contentClassName={styles.content}
-    autoHeight
-    draggable
-    footer={
-      <div className={styles.footer}>
-        <span className={styles.pep}>ПЭП: {pepCode}</span>
-
-        <div className={styles.actions}>
-          <Button
-            variant="filled-secondary"
-            text="Отменить"
-            className={styles.cancelButton}
-            onClick={onClose}
-          />
-          <Button
-            variant="filled-primary"
-            text="Отправить"
-            className={styles.submitButton}
-            disabled={submitDisabled}
-            onClick={onSubmit}
-          />
-        </div>
-      </div>
-    }
-  >
-    {children}
-  </DesktopModalForm>
-);
diff --git a/src/modules/MXTForms/shared/ui/DepositSelect.tsx b/src/modules/MXTForms/shared/ui/DepositSelect.tsx
deleted file mode 100644
index 63745b483..000000000
--- a/src/modules/MXTForms/shared/ui/DepositSelect.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import React from 'react';
-
-import { Select } from '@uikit/Select';
-
-import styles from '../DepositFormShared.module.scss';
-
-import type { Value } from '@uikit/Select';
-
-const getSelectPopupContainer = (triggerNode: HTMLElement) => triggerNode.parentElement ?? document.body;
-
-type DepositSelectProps = {
-  value: string;
-  values: Value[];
-  width?: number | string;
-  placeholder?: string;
-  status?: 'error' | 'warning';
-  isLoading?: boolean;
-  disabled?: boolean;
-  allowClear?: boolean;
-  showSearch?: boolean;
-  popupClassName?: string;
-  onClear?: VoidFunction;
-  onChange: (value: string) => void;
-};
-
-export const DepositSelect = ({
-  value,
-  values,
-  width = '100%',
-  placeholder,
-  status,
-  isLoading,
-  disabled,
-  allowClear = false,
-  showSearch,
-  popupClassName,
-  onClear,
-  onChange,
-}: DepositSelectProps) => (
-  <Select
-    value={value}
-    values={values}
-    width={width}
-    className={styles.select}
-    status={status}
-    isLoading={isLoading}
-    disabled={disabled}
-    labelInValue
-    selectPlaceholder={placeholder}
-    allowClear={allowClear}
-    showSearch={showSearch}
-    popupClassName={popupClassName}
-    onClearValue={onClear}
-    getPopupContainer={getSelectPopupContainer}
-    onChange={onChange}
-  />
-);
diff --git a/src/modules/MXTForms/shared/ui/FormDataBoundary.tsx b/src/modules/MXTForms/shared/ui/FormDataBoundary.tsx
deleted file mode 100644
index 992f6c266..000000000
--- a/src/modules/MXTForms/shared/ui/FormDataBoundary.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from 'react';
-
-import { ButtonLoadingSpinner } from '@components/Icons/ButtonLoadingSpinner';
-
-import styles from '../DepositFormShared.module.scss';
-
-import type { ReactElement } from 'react';
-
-type FormDataBoundaryProps = {
-  children: ReactElement;
-  isLoading: boolean;
-  error?: string | null;
-  loadingTitle?: string;
-  loadingDescription?: string;
-  errorTitle?: string;
-};
-
-export const FormDataBoundary = ({
-  children,
-  isLoading,
-  error,
-  loadingTitle = 'Загрузка данных формы',
-  loadingDescription = 'Пожалуйста, подождите',
-  errorTitle = 'Не удалось загрузить данные формы',
-}: FormDataBoundaryProps) => {
-  if (isLoading) {
-    return (
-      <div className={styles.loadingBody}>
-        <ButtonLoadingSpinner className={styles.loadingSpinner} />
-        <div className={styles.loadingText}>
-          <span className={styles.valueText}>{loadingTitle}</span>
-          <span className={styles.mutedText}>{loadingDescription}</span>
-        </div>
-      </div>
-    );
-  }
-
-  if (error) {
-    return (
-      <div className={styles.loadingBody}>
-        <span className={styles.valueText}>{errorTitle}</span>
-        <span className={styles.mutedText}>{error}</span>
-      </div>
-    );
-  }
-
-  return children;
-};
diff --git a/src/modules/MXTForms/shared/ui/FormRow.tsx b/src/modules/MXTForms/shared/ui/FormRow.tsx
deleted file mode 100644
index 7087a1e58..000000000
--- a/src/modules/MXTForms/shared/ui/FormRow.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react';
-
-import styles from '../DepositFormShared.module.scss';
-
-import type { ReactNode } from 'react';
-
-type FormRowProps = {
-  label: ReactNode;
-  children: ReactNode;
-  alignTop?: boolean;
-  largeGap?: boolean;
-  compact?: boolean;
-  required?: boolean;
-};
-
-const getFormRowClassName = ({
-  alignTop,
-  largeGap,
-  compact,
-}: Pick<FormRowProps, 'alignTop' | 'largeGap' | 'compact'>) => {
-  if (compact) {
-    return styles.rowCompact;
-  }
-
-  if (largeGap) {
-    return styles.rowLargeGap;
-  }
-
-  if (alignTop) {
-    return styles.rowTop;
-  }
-
-  return styles.row;
-};
-
-export const FormRow = ({ label, children, alignTop, largeGap, compact, required }: FormRowProps) => (
-  <div className={getFormRowClassName({ alignTop, largeGap, compact })}>
-    <div className={styles.label}>
-      {label}
-      {required ? <span className={styles.requiredMark}>*</span> : null}
-    </div>
-    <div className={styles.control}>{children}</div>
-  </div>
-);
diff --git a/src/modules/MXTForms/shared/ui/InfoHint.tsx b/src/modules/MXTForms/shared/ui/InfoHint.tsx
deleted file mode 100644
index 2cc1d3eb1..000000000
--- a/src/modules/MXTForms/shared/ui/InfoHint.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-
-import { InfoIcon2 } from '@components/Icons/InfoIcon2';
-import Tooltip from '@uikit/Tooltip';
-
-import styles from '../DepositFormShared.module.scss';
-
-export const InfoHint = ({ title }: { title: string }) => (
-  <Tooltip
-    title={title}
-    className={styles.infoTooltip}
-  >
-    <span className={styles.infoIcon}>
-      <InfoIcon2 />
-    </span>
-  </Tooltip>
-);
diff --git a/src/modules/MXTForms/shared/ui/NumericInputs.tsx b/src/modules/MXTForms/shared/ui/NumericInputs.tsx
deleted file mode 100644
index 56881b68f..000000000
--- a/src/modules/MXTForms/shared/ui/NumericInputs.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-
-import { Input } from '@uikit/Input';
-
-import type { InputProps } from '@uikit/Input';
-
-export const NumericBaseInput = (props: InputProps) => (
-  <Input
-    {...props}
-    width={200}
-  />
-);
-
-export const PercentBaseInput = (props: InputProps) => (
-  <Input
-    {...props}
-    width={200}
-    suffix="%"
-  />
-);
diff --git a/src/modules/MXTForms/shared/ui/index.ts b/src/modules/MXTForms/shared/ui/index.ts
deleted file mode 100644
index 642df82f9..000000000
--- a/src/modules/MXTForms/shared/ui/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export { ConfirmDescription } from './ConfirmDescription';
-export { DepositModalFrame } from './DepositModalFrame';
-export { DepositSelect } from './DepositSelect';
-export { FormDataBoundary } from './FormDataBoundary';
-export { FormRow } from './FormRow';
-export { InfoHint } from './InfoHint';
-export { NumericBaseInput, PercentBaseInput } from './NumericInputs';
-
-export { default as depositFormStyles } from '../DepositFormShared.module.scss';
diff --git a/src/modules/ModalRoot/README.md b/src/modules/ModalRoot/README.md
deleted file mode 100644
index e50f41d86..000000000
--- a/src/modules/ModalRoot/README.md
+++ /dev/null
@@ -1,442 +0,0 @@
-# Создание и подключение новых модальных форм
-
-Документ описывает актуальный механизм модальных форм, которые открываются через `openModal`, `ModalRoot`, `modalRegistry` и saga-flow. Старый контейнер `ModalsContainer` оставлен для легаси-модалок и помечен как deprecated, новые формы нужно подключать через `ModalRoot`.
-
-## Короткая схема
-
-```text
-UI action
-  -> dispatch(openSomethingRequested()) или dispatch(openModal(...))
-  -> modalsSlice.stack
-  -> ModalRoot
-  -> modalRegistry.get(type)
-  -> <Modal><RegisteredComponent id={id} {...props} /></Modal>
-```
-
-Основные файлы:
-
-- `src/store/slices/modals.ts` - хранит `stack`, содержит `openModal`, `closeModal`, `closeAllModals`.
-- `src/modules/ModalRoot/ModalRoot.tsx` - рендерит стек модалок.
-- `src/modules/ModalRoot/initModalRegistry.ts` - регистрирует соответствие `type -> Component`.
-- `src/modules/ModalRoot/types.ts` - описывает все допустимые типы модалок и их props.
-- `src/modules/ModalService/modalCore.ts` - низкоуровневый контроллер стека.
-- `src/modules/ModalService/modalFlowService.ts` - API для saga-flow.
-- `src/store/sagas/utils/modals.ts` - helper-ы `runFlow` и `runModal`.
-- `src/store/actions/modal.ts` - общие события `closeModalRequested` и `confirmModalRequested`.
-
-## Как работает `openModal`
-
-`openModal` принимает объект состояния модалки и добавляет его в `modalsSlice.stack`:
-
-```ts
-dispatch(
-  openModal({
-    id: 'unique-modal-id',
-    type: 'SomeModal',
-    props: {
-      someValue: 123,
-    },
-  }),
-);
-```
-
-`ModalRoot` читает стек, берет компонент из `modalRegistry` по `type`, оборачивает его в общий `Modal` и прокидывает в компонент:
-
-```tsx
-<Component
-  id={modal.id}
-  {...modal.props}
-/>
-```
-
-Поэтому у каждой модалки есть обязательный `id`. В `props` при открытии его передавать не нужно: `id` добавляется на уровне `ModalRoot`.
-
-## Сценарий подключения
-
-### Форма с бизнес-логикой и submit через saga
-
-Это предпочтительный вариант для новых форм, которые сохраняют данные, делают API-запросы, показывают загрузку, ошибки или должны закрываться только после успешного submit.
-
-Поток:
-
-```text
-UI
-  -> dispatch(openNewFormRequested(payload))
-  -> watcher saga
-  -> runFlow(...)
-  -> runModal(...)
-  -> modalFlowService.open(...)
-  -> openModal(...)
-  -> форма dispatch(newFormSave(values))
-  -> saga делает request
-  -> success: SagaResult.Close
-  -> runModal закрывает верхнюю модалку
-  -> runFlow очищает flow
-```
-
-Так устроены `CreateRFQModal`, `CreateFolder`, `EditFolder` и другие формы.
-
-## Пошаговое подключение новой формы через saga-flow
-
-Ниже пример для условной формы `NewFormModal`.
-
-### Шаг 1. Создать компонент формы
-
-Компонент должен принимать `id`, потому что закрытие и submit привязаны к конкретной модалке.
-
-```tsx
-import React from 'react';
-
-import { ModalBaseProps } from '@modules/ModalRoot/types';
-import { closeModalRequested } from '@store/actions/modal';
-import { newFormSave } from '@store/actions/newForm';
-import { dispatch } from '@store/store';
-
-type NewFormModalProps = ModalBaseProps & {
-  widgetId: number;
-  initialName?: string;
-};
-
-export const NewFormModal = ({ id, widgetId, initialName }: NewFormModalProps) => {
-  const handleClose = () => {
-    dispatch(closeModalRequested(id));
-  };
-
-  const handleSubmit = () => {
-    dispatch(
-      newFormSave({
-        widgetId,
-        name: initialName ?? '',
-      }),
-    );
-  };
-
-  return (
-    <DesktopModalForm
-      title="Новая форма"
-      cancelText="Отмена"
-      confirmText="Сохранить"
-      onClose={handleClose}
-      onCancel={handleClose}
-      onConfirm={handleSubmit}
-    >
-      {/* content */}
-    </DesktopModalForm>
-  );
-};
-```
-
-Если форма имеет разные desktop/mobile представления, используйте тот же паттерн, что в чатах:
-
-```tsx
-const isMobileView = useAppSelect(isMobileViewSelector);
-const ModalComponent = isMobileView ? NewFormMobileModal : NewFormDesktopModal;
-```
-
-### Шаг 2. Добавить тип props в `ModalPropsMap`
-
-Файл: `src/modules/ModalRoot/types.ts`
-
-```ts
-import type { NewFormModalProps } from '@widgets/SomeWidget/components/NewFormModal/types';
-
-export type ModalPropsMap = {
-  // ...
-  NewFormModal: NewFormModalProps;
-};
-```
-
-Важно: `ModalPropsMap` должен описывать props компонента вместе с `id`, то есть тип обычно расширяет `ModalBaseProps`.
-
-### Шаг 3. Зарегистрировать модалку
-
-Файл: `src/modules/ModalRoot/initModalRegistry.ts`
-
-```ts
-import { NewFormModal } from '@widgets/SomeWidget/components/NewFormModal';
-
-export const initModalRegistry = () => {
-  // ...
-  modalRegistry.register('NewFormModal', {
-    Component: NewFormModal,
-    modalProps: { watchClickOutside: true },
-  });
-};
-```
-
-`modalProps` передаются в общий `@uikit/Modal`. Сейчас в registry типизирован только `watchClickOutside`.
-
-Используйте `watchClickOutside: true`, если клик вне модалки должен инициировать `closeModalRequested(id)`. Не включайте это для форм, где случайное закрытие может привести к потере введенных данных без подтверждения.
-
-### Шаг 4. Создать actions
-
-Файл можно разместить рядом с доменной областью, например `src/store/actions/newForm.ts`.
-
-```ts
-import { createAction } from '@reduxjs/toolkit';
-
-export type OpenNewFormPayload = {
-  widgetId: number;
-  initialName?: string;
-};
-
-export type NewFormSavePayload = {
-  widgetId: number;
-  name: string;
-};
-
-export const openNewFormRequested = createAction<OpenNewFormPayload>('newForm/openRequested');
-
-export const newFormSave = createAction<NewFormSavePayload>('newForm/save');
-```
-
-### Шаг 5. Создать saga
-
-```ts
-import { call, put, takeLeading } from 'typed-redux-saga';
-
-import { closeModalRequested } from '@store/actions/modal';
-import { newFormSave, openNewFormRequested } from '@store/actions/newForm';
-import { requestFinish, requestStart } from '@store/slices/requestStatus';
-
-import { SagaHandlers, SagaResult } from '../types/modals';
-import { closeHandler, runFlow, runModal } from '../utils/modals';
-
-function* saveNewFormRequest(payload: ReturnType<typeof newFormSave>['payload']) {
-  yield put(requestStart('newForm'));
-
-  try {
-    // yield call(() => api.saveNewForm(payload));
-    yield put(requestFinish('newForm'));
-    return true;
-  } catch (error) {
-    console.error(error);
-    yield put(requestFinish('newForm'));
-    return false;
-  }
-}
-
-const handlers: SagaHandlers = {
-  [closeModalRequested.type]: closeHandler,
-
-  *[newFormSave.type](action) {
-    if (newFormSave.match(action)) {
-      const success = yield* saveNewFormRequest(action.payload);
-      return success ? SagaResult.Close : SagaResult.Continue;
-    }
-
-    return SagaResult.Continue;
-  },
-};
-
-function* newFormSaga(flowId: string, payload: ReturnType<typeof openNewFormRequested>['payload']) {
-  yield* runModal(handlers, flowId, {
-    type: 'NewFormModal',
-    props: payload,
-  });
-}
-
-function* newFormFlow({ payload }: ReturnType<typeof openNewFormRequested>) {
-  yield* runFlow(newFormSaga, payload);
-}
-
-export function* watchNewForm() {
-  yield takeLeading(openNewFormRequested, newFormFlow);
-}
-```
-
-### Шаг 6. Подключить watcher в root saga
-
-Добавьте watcher в saga доменной области или напрямую в `rootSaga`, если подходящего модуля еще нет.
-
-Пример для доменной saga:
-
-```ts
-export function* someWidgetSaga() {
-  yield all([
-    fork(watchNewForm),
-    // другие watchers
-  ]);
-}
-```
-
-### Шаг 7. Открыть форму из UI
-
-```ts
-import { openNewFormRequested } from '@store/actions/newForm';
-import { dispatch } from '@store/store';
-
-const handleOpen = () => {
-  dispatch(
-    openNewFormRequested({
-      widgetId,
-      initialName: 'Название',
-    }),
-  );
-};
-```
-
-## Закрытие формы
-
-Для saga-flow форм используйте:
-
-```ts
-dispatch(closeModalRequested(id));
-```
-
-Почему не `closeModal()` напрямую:
-
-- `closeModalRequested(id)` попадает в `runModal`;
-- `runModal` проверяет, что закрывается именно текущая модалка;
-- saga корректно возвращает `SagaResult.Close`;
-- `runFlow` гарантированно вызывает `closeFlow` и очищает стек.
-
-## Submit формы
-
-Компонент формы не должен сам закрывать saga-flow модалку после submit. Он должен отправить доменный action:
-
-```ts
-dispatch(newFormSave(values));
-```
-
-Saga решает, закрывать форму или оставить ее открытой:
-
-```ts
-return success ? SagaResult.Close : SagaResult.Continue;
-```
-
-Это позволяет:
-
-- показывать loader через `requestStatus`;
-- оставить форму открытой при ошибке;
-- централизовать API-запросы;
-- не смешивать UI и бизнес-логику.
-
-## Loader и ошибки
-
-Для загрузки обычно используется `requestStatus`:
-
-```ts
-const loading = useAppSelect(requestLoadingSelector('newForm'));
-const error = useAppSelect(requestErrorSelector('newForm'));
-```
-
-Перед запросом:
-
-```ts
-yield put(requestStart('newForm'));
-```
-
-После запроса:
-
-```ts
-yield put(requestFinish('newForm'));
-```
-
-Если нужно показать ошибку внутри формы, передавайте ее в UI через selector и отображайте в `Informer`, как это сделано в `CreateRFQModal`.
-
-## Каскадные модалки
-
-Если один сценарий открывает несколько модалок подряд или поверх друг друга, используйте один `flowId` и `modalFlowService.open` / `runModal`.
-
-`ModalCore` захватывает стек через owner id:
-
-- `startFlow()` создает `flowId` и вызывает `acquire`;
-- `open(flowId, props)` пушит модалку в стек;
-- `close(flowId)` закрывает верхнюю модалку;
-- `closeFlow(flowId)` очищает весь стек и освобождает owner.
-
-Это защищает стек от параллельных flow. Если открыть второй flow, пока первый активен, `ModalCore` выбросит ошибку `Modal stack already owned by ...`.
-
-## Типовые ошибки
-
-### Модалка не отображается
-
-Проверьте:
-
-- `type` добавлен в `ModalPropsMap`;
-- `type` зарегистрирован в `initModalRegistry`;
-- компонент экспортирован из нужного `index.ts`;
-- `ModalRoot` есть в текущем layout;
-- в `props` нет лишнего `id`;
-- action открытия действительно dispatch-ится.
-
-### TypeScript ругается на `props`
-
-`ModalOpenProps` берет тип из `ModalPropsMap` и удаляет `id`:
-
-```ts
-export type ModalStateProps = { [K in ModalType]: Omit<ModalPropsMap[K], 'id'> };
-```
-
-Значит, если компонент ожидает:
-
-```ts
-type NewFormModalProps = ModalBaseProps & {
-  widgetId: number;
-};
-```
-
-открывать надо так:
-
-```ts
-props: { widgetId }
-```
-
-а не так:
-
-```ts
-props: { id, widgetId }
-```
-
-### Форма закрывается, но flow остается активным
-
-Скорее всего, компонент dispatch-ит `closeModal()` вместо `closeModalRequested(id)`. Для saga-flow модалок закрывайте через `closeModalRequested(id)`.
-
-### Submit action срабатывает не на ту модалку
-
-Если потенциально может быть несколько одинаковых форм, добавьте `modalId` в save payload и проверяйте его в saga. Сейчас многие формы полагаются на один активный flow, но для параллельных или повторяемых сценариев лучше явно связать submit с `id`.
-
-```ts
-dispatch(newFormSave({ modalId: id, values }));
-```
-
-```ts
-if (newFormSave.match(action) && action.payload.modalId === modalId) {
-  // save
-}
-```
-
-### Нужно подтвердить закрытие с несохраненными изменениями
-
-Не вызывайте `closeModalRequested(id)` сразу. Сначала откройте подтверждающую модалку в том же flow или обработайте состояние dirty внутри формы. Для такого сценария лучше использовать saga-flow, а не прямой `openModal`.
-
-## Чеклист перед merge
-
-- Тип модалки добавлен в `ModalPropsMap`.
-- Компонент зарегистрирован в `initModalRegistry`.
-- Открытие идет через `openXRequested` и saga-flow, если есть submit/API.
-- Для saga-flow закрытие идет через `closeModalRequested(id)`.
-- Submit dispatch-ит доменный `save` action, а не закрывает форму вручную.
-- Loader и ошибки берутся из `requestStatus` или локального состояния, если запрос локальный.
-- Для desktop/mobile формы выбран существующий паттерн проекта.
-- `watchX` подключен в нужную root/domain saga.
-- Добавлены или обновлены тесты на hook/saga, если форма содержит бизнес-логику.
-
-## Минимальный шаблон файлов
-
-```text
-src/widgets/SomeWidget/components/NewFormModal/
-  index.ts
-  NewFormModal.tsx
-  types.ts
-  hooks/
-    useNewFormModal.ts
-  components/
-    NewFormDesktopModal.tsx
-    NewFormMobileModal.tsx
-
-src/store/actions/newForm.ts
-src/store/sagas/someWidget/newForm.ts
-```
-
diff --git a/src/modules/ModalRoot/initModalRegistry.ts b/src/modules/ModalRoot/initModalRegistry.ts
index 79d28668e..66c6a58b7 100644
--- a/src/modules/ModalRoot/initModalRegistry.ts
+++ b/src/modules/ModalRoot/initModalRegistry.ts
@@ -1,7 +1,4 @@
 import { ProfileCardModal } from '@components/ProfileCardModal';
-import { AddressDepositForm } from '@modules/MXTForms/AddressDepositForm';
-import { DepositForm } from '@modules/MXTForms/DepositForm';
-import { MxtFormConfirmModal } from '@modules/MXTForms/shared/confirm';
 import { DeleteOrderModalConfirm } from '@modules/ntb/DeleteOrderConfirmModal';
 import { AddUserFolderModal } from '@widgets/NoTradeChat/components/AddUserFolderModal';
 import { AddUsersModal } from '@widgets/NoTradeChat/components/AddUsersModal';
@@ -18,13 +15,7 @@ import { InviteChatViaLinkModal } from '@widgets/NoTradeChat/components/InviteCh
 import { JoinGroupChatModal } from '@widgets/NoTradeChat/components/JoinGroupChat';
 import { ManageFolders } from '@widgets/NoTradeChat/components/ManageFolders';
 
-import {
-  CreateRFQModal,
-  CreateTicketModal,
-  RejectModal,
-  ViewCommentModal,
-  ViewDetailsModal,
-} from '@widgets/TradeJournal';
+import { CreateRFQModal, RejectModal, ViewDetailsModal, CreateTicketModal } from '@widgets/TradeJournal';
 
 import { modalRegistry } from './modalRegistry';
 
@@ -53,17 +44,10 @@ export const initModalRegistry = () => {
   modalRegistry.register('ProfileCardModal', { Component: ProfileCardModal, modalProps: { watchClickOutside: true } });
 
   // Trade Functionality
-  modalRegistry.register('DepositForm', { Component: DepositForm });
-  modalRegistry.register('AddressDepositForm', { Component: AddressDepositForm });
-  modalRegistry.register('MxtFormConfirmModal', {
-    Component: MxtFormConfirmModal,
-    modalProps: { watchClickOutside: true },
-  });
   modalRegistry.register('CreateRFQModal', { Component: CreateRFQModal });
   modalRegistry.register('ViewDetailsModal', { Component: ViewDetailsModal });
   modalRegistry.register('RejectModal', { Component: RejectModal });
   modalRegistry.register('CreateTicketModal', { Component: CreateTicketModal });
-  modalRegistry.register('ViewCommentModal', { Component: ViewCommentModal });
 
   modalRegistry.register('InviteChatViaLink', {
     Component: InviteChatViaLinkModal,
diff --git a/src/modules/ModalRoot/types.ts b/src/modules/ModalRoot/types.ts
index 383a92343..0bde6761c 100644
--- a/src/modules/ModalRoot/types.ts
+++ b/src/modules/ModalRoot/types.ts
@@ -3,9 +3,6 @@ import { FC } from 'react';
 import { AppointAnAdminModalProps } from '@widgets/NoTradeChat/components/AppointAnAdminModal/types';
 
 import type { ProfileCardModalProps } from '@components/ProfileCardModal/types';
-import type { AddressDepositFormProps } from '@modules/MXTForms/AddressDepositForm/types';
-import type { DepositFormProps } from '@modules/MXTForms/DepositForm/types';
-import type { MxtFormConfirmModalProps } from '@modules/MXTForms/shared/confirm';
 import type { DeleteOrderModalConfirmProps } from '@modules/ntb/DeleteOrderConfirmModal/DeleteOrderConfirmModal';
 import type { ModalProps } from '@uikit/Modal';
 import type { AddUsersToFolderProps } from '@widgets/NoTradeChat/components/AddUserFolderModal/types';
@@ -20,7 +17,7 @@ import type { GroupChatModalProps } from '@widgets/NoTradeChat/components/GroupC
 import type { InviteChatViaLinkModalProps } from '@widgets/NoTradeChat/components/InviteChatViaLinkModal/types';
 import type { JoinGroupChatModalProps } from '@widgets/NoTradeChat/components/JoinGroupChat/types';
 import type { ManageFoldersProps } from '@widgets/NoTradeChat/components/ManageFolders/types';
-import type { TRejectModalProps, TViewCommentModalProps, TViewDetailsModalProps } from 'types/TradeJournal';
+import type { TRejectModalProps, TViewDetailsModalProps } from 'types/TradeJournal';
 
 export type ModalType = keyof ModalPropsMap;
 
@@ -40,16 +37,11 @@ export type ModalPropsMap = {
   ProfileCardModal: ProfileCardModalProps;
   InviteChatViaLink: InviteChatViaLinkModalProps;
   JoinGroupChatModal: JoinGroupChatModalProps;
-
   // Trade Functionality
-  DepositForm: DepositFormProps;
-  AddressDepositForm: AddressDepositFormProps;
-  MxtFormConfirmModal: MxtFormConfirmModalProps;
   CreateRFQModal: ModalBaseProps;
   ViewDetailsModal: TViewDetailsModalProps;
   RejectModal: TRejectModalProps;
   CreateTicketModal: ModalBaseProps;
-  ViewCommentModal: TViewCommentModalProps;
 
   // NTB
   DeleteOrderModalConfirm: DeleteOrderModalConfirmProps;
diff --git a/src/modules/contracts/contractsService.ts b/src/modules/contracts/contractsService.ts
index 856ae0d68..48429e4f8 100644
--- a/src/modules/contracts/contractsService.ts
+++ b/src/modules/contracts/contractsService.ts
@@ -1,8 +1,6 @@
 import api from '@api/index';
 import { indexDBService, STORES } from '@modules/indexDB';
 
-import { isNtbUserSelector } from '@store/selectors/user';
-import { getState, store } from '@store/store';
 import { robustRequest } from '@utils/robustRequest';
 
 import { Contract } from './types';
@@ -121,26 +119,14 @@ class ContractsServiceClass {
   }
 
   private async loadContracts(tryToUseCache = true) {
-    // Контракты СПФИ можем получить только после авторизации в Сапфире
-    const getSapfirContracts = store.getState().auth.isSpfiAuth
-      ? api.getSapfirContracts()
-      : Promise.resolve({ data: [] });
-
-    const isNtbUser = isNtbUserSelector(getState());
-    const getNtbAnalyticsContracts = isNtbUser ? api.getNtbAnalyticsContracts() : Promise.resolve({ data: [] });
-
     return Promise.allSettled([
       ContractsServiceClass.loadIssContracts(tryToUseCache),
-      Promise.allSettled([
-        api.getIndicativeContracts(),
-        api.getNtProContracts(),
-        getSapfirContracts,
-        getNtbAnalyticsContracts,
-      ]).then((res) =>
-        res
-          ?.filter((p) => p.status === 'fulfilled')
-          .filter((p) => p.value)
-          .flatMap((p) => p.value.data),
+      Promise.allSettled([api.getIndicativeContracts(), api.getNtProContracts(), api.getSapfirContracts()]).then(
+        (res) =>
+          res
+            ?.filter((p) => p.status === 'fulfilled')
+            .filter((p) => p.value)
+            .flatMap((p) => p.value.data),
       ),
       ContractsServiceClass.loadDictionaries(),
     ]).then((promises) => {
diff --git a/src/modules/ntb/FormOrderConfirmModal/index.tsx b/src/modules/ntb/FormOrderConfirmModal/index.tsx
index 8a8c86ba4..58f65e348 100644
--- a/src/modules/ntb/FormOrderConfirmModal/index.tsx
+++ b/src/modules/ntb/FormOrderConfirmModal/index.tsx
@@ -138,18 +138,6 @@ export const NTBFormOrderConfirmModal: React.FC<FormOrderConfirmModalProps> = ({
               />
             </Typography.Paragraph.S>
           </div>
-          {confirmModalData.splittable && (
-            <div className={styles.formConfirmOrderModal__row}>
-              <Typography.Paragraph.S
-                className={styles.formConfirmOrderModal__label}
-                text="Делимость"
-              />
-              <Typography.Paragraph.S
-                className={styles.formConfirmOrderModal__value}
-                text={confirmModalData.splittable}
-              />
-            </div>
-          )}
           <div className={styles.formConfirmOrderModal__row}>
             <Typography.Paragraph.S
               className={styles.formConfirmOrderModal__label}
diff --git a/src/modules/ntb/FormOrderModal/__tests__/FormOrderModal.test.tsx b/src/modules/ntb/FormOrderModal/__tests__/FormOrderModal.test.tsx
index 7305edb32..2e1c6b6bf 100644
--- a/src/modules/ntb/FormOrderModal/__tests__/FormOrderModal.test.tsx
+++ b/src/modules/ntb/FormOrderModal/__tests__/FormOrderModal.test.tsx
@@ -134,7 +134,6 @@ describe('NTBFormOrderModal', () => {
       accountNumber: '',
       deliveryType: '',
       comment: '',
-      splittable: true,
     },
     onClose: mockOnClose,
     onRestore: mockOnRestore,
diff --git a/src/modules/ntb/FormOrderModal/types.ts b/src/modules/ntb/FormOrderModal/types.ts
index c1b425838..4cac65117 100644
--- a/src/modules/ntb/FormOrderModal/types.ts
+++ b/src/modules/ntb/FormOrderModal/types.ts
@@ -25,7 +25,6 @@ export interface OrderFormData {
   accountNumber: string;
   deliveryType: string;
   comment: string;
-  splittable: boolean;
 }
 
 export interface OrderCommissionData {
diff --git a/src/modules/ntb/FormOrderModalContainer/createOrderRequest.ts b/src/modules/ntb/FormOrderModalContainer/createOrderRequest.ts
new file mode 100644
index 000000000..fb23f1467
--- /dev/null
+++ b/src/modules/ntb/FormOrderModalContainer/createOrderRequest.ts
@@ -0,0 +1,9 @@
+import { CreateOrderPayload } from '../types';
+
+export const createOrderRequest = (formData: Partial<CreateOrderPayload>): CreateOrderPayload =>
+  ({
+    // splitable для пшеницы всегда true, для зерна должен выбираться на форме заявки, но это пока еще не делали
+    splittable: true,
+    // данные из формы
+    ...formData,
+  }) as CreateOrderPayload;
diff --git a/src/modules/ntb/FormOrderModalContainer/index.tsx b/src/modules/ntb/FormOrderModalContainer/index.tsx
index 084b384c9..14ed7a4d8 100644
--- a/src/modules/ntb/FormOrderModalContainer/index.tsx
+++ b/src/modules/ntb/FormOrderModalContainer/index.tsx
@@ -23,14 +23,13 @@ import { useSecurities } from '../hooks/useSecurities';
 import { useTradingData } from '../hooks/useTradingData';
 import { useTradingDirectionAvailability } from '../hooks/useTradingDirectionAvailability';
 import { CreateOrderPayload, ORDER_DIRECTION, OrderConfirmModalData, PriceParams, QuantityParams } from '../types';
-import { getSplittableText, hasSplitAvailable } from '../utils/splittable';
+
+import { createOrderRequest } from './createOrderRequest';
 
 interface NTBFormOrderModalContainerProps {
   _?: OrderFormAction;
 }
 
-const DEFAULT_SPLITTABLE = true;
-
 const INITIAL_FORM_DATA: OrderFormData = {
   direction: ORDER_DIRECTION.SELL,
   boardId: '',
@@ -41,7 +40,6 @@ const INITIAL_FORM_DATA: OrderFormData = {
   amount: undefined,
   quantity: undefined,
   price: undefined,
-  splittable: DEFAULT_SPLITTABLE,
 };
 
 /**
@@ -316,9 +314,8 @@ export const NTBFormOrderModalContainer: React.FC<NTBFormOrderModalContainerProp
       setConfirmModalData(undefined);
       return;
     }
-    const currentSecurity = securities.find((s) => formData.securityId === s.code) ?? { name: '', code: '', key: null };
+    const currentSecurity = securities.find((s) => formData.securityId === s.code) ?? { name: '', code: '' };
     const currentBoard = boards.find((b) => b.code === formData.boardId) ?? { name: '', code: '' };
-
     setConfirmModalData({
       direction: orderDirectionKey === ORDER_DIRECTION.BUY ? 'Покупка' : 'Продажа',
       accountNumber: formData.accountNumber,
@@ -336,7 +333,6 @@ export const NTBFormOrderModalContainer: React.FC<NTBFormOrderModalContainerProp
           ? Math.floor(formData.amount / quantityParams.min) * quantityParams.min * formData.price
           : commisionData.orderSize,
       faceUnitName: tradingData.faceUnitName,
-      splittable: getSplittableText(formData.splittable, formData.boardId, formData.direction),
     });
   }, [tradingData, formData, commisionData, securities, boards, orderDirectionKey, quantityParams?.min]);
 
@@ -478,8 +474,7 @@ export const NTBFormOrderModalContainer: React.FC<NTBFormOrderModalContainerProp
    * Обработчик отправки формы
    */
   const handleSubmitConfirmModal = useCallback(async () => {
-    const { boardId, securityId, amount, price, accountNumber, comment, deliveryType, splittable, direction } =
-      formData;
+    const { boardId, securityId, amount, price, accountNumber, comment, deliveryType } = formData;
     try {
       if (!boardId || !securityId || !amount || !price || !accountNumber) {
         return;
@@ -488,17 +483,16 @@ export const NTBFormOrderModalContainer: React.FC<NTBFormOrderModalContainerProp
       if (!quantityParams?.min) {
         throw new Error('Не удалось получить размер лота');
       }
-      const newOrderRequest: CreateOrderPayload = {
+      const newOrderRequest: CreateOrderPayload = createOrderRequest({
         direction: orderDirectionKey,
         boardCode: boardId, // contract.board
         securityCode: securityId, // contract.symbol
         quantity: Math.floor(amount / quantityParams.min), // пересчитываем ед. тонн в количетво лотов
         price,
-        deliveryType: tradingData?.deliveryTypes?.find((data) => data?.name === deliveryType)?.code ?? '',
+        deliveryType: tradingData ? tradingData?.deliveryTypes?.find((data) => data?.name === deliveryType)?.code : '',
         accountNumber,
         brokerRef: comment,
-        splittable: hasSplitAvailable(boardId, direction) ? splittable : DEFAULT_SPLITTABLE,
-      };
+      });
 
       const { data } = await ntbTradingRequestsController.createOrder(newOrderRequest);
       restoreOrderRef.current = null;
diff --git a/src/modules/ntb/components/OrderFormMainSection/index.tsx b/src/modules/ntb/components/OrderFormMainSection/index.tsx
index 7998626fd..47be102f7 100644
--- a/src/modules/ntb/components/OrderFormMainSection/index.tsx
+++ b/src/modules/ntb/components/OrderFormMainSection/index.tsx
@@ -3,17 +3,15 @@ import React from 'react';
 import { NumericFormat } from 'react-number-format';
 
 import { OrderFormChangeHandler, OrderFormData } from '@modules/ntb/FormOrderModal/types';
-import { hasSplitAvailable } from '@modules/ntb/utils/splittable';
-import { Checkbox } from '@uikit/Checkbox';
 import { Input } from '@uikit/Input';
 import { Select } from '@uikit/Select';
 import Typography from '@uikit/Typography';
 
-import { type QuantityParams, type TradingData } from '../../types';
-
 import styles from './OrderFormMainSection.module.scss';
 import { buildQuantityLimitsText, getQuantityMax } from './utils';
 
+import type { QuantityParams, TradingData } from '../../types';
+
 interface OrderFormMainSectionProps {
   modalRef: React.RefObject<HTMLDivElement>;
   accountNumbers: TradingData['accountNumbers'];
@@ -96,18 +94,6 @@ export const OrderFormMainSection: React.FC<OrderFormMainSectionProps> = ({
             )}
           </div>
         </div>
-        {hasSplitAvailable(formData.boardId, formData.direction) && (
-          <div className={styles.orderFormMainSection__section}>
-            <Typography.Paragraph.S
-              className={styles.orderFormMainSection__label}
-              text="Делимость"
-            />
-            <Checkbox
-              checked={formData.splittable}
-              onChange={(e) => onFormChange('splittable', e.target.checked)}
-            />
-          </div>
-        )}
         <div className={styles.orderFormMainSection__orderField}>
           <Typography.Paragraph.S
             className={styles.orderFormMainSection__label}
diff --git a/src/modules/ntb/components/OrderFormModeSection/index.tsx b/src/modules/ntb/components/OrderFormModeSection/index.tsx
index 611cbe228..b251db85c 100644
--- a/src/modules/ntb/components/OrderFormModeSection/index.tsx
+++ b/src/modules/ntb/components/OrderFormModeSection/index.tsx
@@ -5,10 +5,9 @@ import Typography from '@uikit/Typography';
 
 import { OrderFormAction, OrderFormChangeHandler, OrderFormData } from '../../FormOrderModal/types';
 
-import styles from './OrderFormModeSection.module.scss';
-import { useSecurityValues } from './useSecurityValues';
+import { Board, Security } from '../../types';
 
-import type { Board, Security } from '../../types';
+import styles from './OrderFormModeSection.module.scss';
 
 interface OrderFormModeSectionProps {
   action?: OrderFormAction;
@@ -34,8 +33,6 @@ export const OrderFormModeSection: React.FC<OrderFormModeSectionProps> = ({
 }) => {
   const [board, setBoard] = useState<Board>();
 
-  const { securityValues } = useSecurityValues({ securityId, securities, onFormChange });
-
   useEffect(() => {
     const currentBoard = boards.find((b) => b.code === formData.boardId);
     if (currentBoard) {
@@ -69,7 +66,7 @@ export const OrderFormModeSection: React.FC<OrderFormModeSectionProps> = ({
           }}
           allowClear={false}
           getPopupContainer={() => modalRef.current || document.body}
-          values={securityValues}
+          values={securities.map((s) => ({ title: s.name, value: s.code }))}
           value={securityId ?? ''}
           status={!securityId && validationTouched ? 'error' : ''}
           width="100%"
diff --git a/src/modules/ntb/components/OrderFormModeSection/useSecurityValues.ts b/src/modules/ntb/components/OrderFormModeSection/useSecurityValues.ts
deleted file mode 100644
index b18af38b5..000000000
--- a/src/modules/ntb/components/OrderFormModeSection/useSecurityValues.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { useEffect, useMemo } from 'react';
-
-import { useTradeTimePermissions } from '@modules/ntb/hooks/useTradeTimePermissions';
-
-import type { OrderFormChangeHandler } from '@modules/ntb/FormOrderModal/types';
-import type { Security } from '@modules/ntb/types';
-
-type UseSecurityValuesProps = {
-  securityId: string | undefined;
-  securities: Security[];
-  onFormChange: OrderFormChangeHandler;
-};
-
-export const useSecurityValues = ({ securityId, securities, onFormChange }: UseSecurityValuesProps) => {
-  const { getPermission } = useTradeTimePermissions();
-
-  const securityValues = useMemo(
-    () =>
-      securities.map((s) => {
-        const tradeTimePermission = getPermission(s.key ?? undefined);
-
-        return {
-          title: s.name,
-          value: s.code,
-          disabled: !tradeTimePermission.active,
-          tooltipTitle: tradeTimePermission.hint,
-        };
-      }),
-    [getPermission, securities],
-  );
-
-  useEffect(() => {
-    const securityKey = securities.find((s) => s.code === securityId)?.key ?? undefined;
-    const isSecurityAvailable = getPermission(securityKey).active;
-
-    if (!isSecurityAvailable) {
-      onFormChange('securityId', '');
-    }
-  }, [getPermission, onFormChange, securities, securityId]);
-
-  return { securityValues };
-};
diff --git a/src/modules/ntb/constants.ts b/src/modules/ntb/constants.ts
index ba391d6e8..5fa32b894 100644
--- a/src/modules/ntb/constants.ts
+++ b/src/modules/ntb/constants.ts
@@ -1,7 +1,2 @@
-import { NtbBoards } from './types';
-
 /* 403 - у пользователя нет торговых прав, ретраи не делаем */
 export const USER_TRADING_ACCESSES_VALID_ERROR_CODES = [403];
-
-/** Режимы инструментов НТБ, по которым данные для стакана берутся из ТКС */
-export const TKS_NTB_BOARDS = [NtbBoards.Sugar, NtbBoards.Zern];
diff --git a/src/modules/ntb/hooks/useSecurities.ts b/src/modules/ntb/hooks/useSecurities.ts
index 2a2896051..f771c571b 100644
--- a/src/modules/ntb/hooks/useSecurities.ts
+++ b/src/modules/ntb/hooks/useSecurities.ts
@@ -10,9 +10,7 @@ export function useSecurities(boardCode: string) {
     if (!agroContracts) {
       return [];
     }
-    return agroContracts
-      .filter((i) => i.board === boardCode)
-      .map((i) => ({ key: i.issKey, code: i.symbol, name: i.displayName }));
+    return agroContracts.filter((i) => i.board === boardCode).map((i) => ({ code: i.symbol, name: i.displayName }));
   }, [agroContracts, boardCode]);
   return { securities };
 }
diff --git a/src/modules/ntb/hooks/useTradeTimePermissions.ts b/src/modules/ntb/hooks/useTradeTimePermissions.ts
deleted file mode 100644
index 1371ef14b..000000000
--- a/src/modules/ntb/hooks/useTradeTimePermissions.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useCallback, useMemo } from 'react';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { tradeTimePermissionsMapSelector } from '@store/selectors/user';
-
-import { getTradeTimePermissions } from '../utils/getTradeTimePermissions';
-
-import type { TradeTimePermissionInfo } from '../types';
-
-export type UseTradeTimePermissionsReturn = {
-  permission: TradeTimePermissionInfo;
-  getPermission: (key?: string) => TradeTimePermissionInfo;
-};
-
-/** Предоставляет информацию о статусе и времени торгов в удобном формате
- * - Если передан `key` - статус и время торгов по конкретному инструменту.
- * - Если `key` не передан - статус и время торгов по всем инструментам рынка НТБ.
- * Если доступны торги хотя бы по одному инструменту, возвращается статус 'активен'.
- */
-export const useTradeTimePermissions = (key?: string): UseTradeTimePermissionsReturn => {
-  const tradeTimePermissionsMap = useAppSelect(tradeTimePermissionsMapSelector);
-
-  const permission = useMemo(
-    () => getTradeTimePermissions(tradeTimePermissionsMap, key),
-    [key, tradeTimePermissionsMap],
-  );
-
-  const getPermission = useCallback(
-    (instrumentKey?: string) => getTradeTimePermissions(tradeTimePermissionsMap, instrumentKey),
-    [tradeTimePermissionsMap],
-  );
-
-  return { permission, getPermission };
-};
diff --git a/src/modules/ntb/plugins/__tests__/ntbAboutInstrumentPlugin.test.ts b/src/modules/ntb/plugins/__tests__/ntbAboutInstrumentPlugin.test.ts
deleted file mode 100644
index 0a567670d..000000000
--- a/src/modules/ntb/plugins/__tests__/ntbAboutInstrumentPlugin.test.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { ntbAboutInstrumentPlugin } from '../ntbAboutInstrumentPlugin';
-
-import type { AboutInstrumentTabs } from '@widgets/AboutInstrument/plugins/types';
-
-const tabs: AboutInstrumentTabs = [
-  { key: 'aboutInstrument', label: 'Об инструменте' },
-  { key: 'composition', label: 'Состав' },
-  { key: 'growthLeaders', label: 'Лидеры роста и падения' },
-];
-
-describe('ntbAboutInstrumentPlugin', () => {
-  it('check() === true для NTB issKey', () => {
-    expect(ntbAboutInstrumentPlugin({ instrumentType: 'stock_index', issKey: 'MXAGRO:AGRO:SIGVOL' }).check()).toBe(
-      true,
-    );
-  });
-
-  it('check() === false для не-NTB issKey', () => {
-    expect(ntbAboutInstrumentPlugin({ instrumentType: 'stock_index', issKey: 'TQBR:SBER' }).check()).toBe(false);
-  });
-
-  it('check() === false без issKey', () => {
-    expect(ntbAboutInstrumentPlugin({ instrumentType: 'stock_index' }).check()).toBe(false);
-  });
-
-  it('getTabs() скрывает composition и growthLeaders', () => {
-    const result = ntbAboutInstrumentPlugin({ instrumentType: 'stock_index', issKey: 'MXAGRO:AGRO:WH5GR' }).getTabs(
-      tabs,
-    );
-
-    expect(result.map((tab) => tab.key)).toEqual(['aboutInstrument']);
-  });
-});
diff --git a/src/modules/ntb/plugins/ntbAboutInstrumentPlugin.ts b/src/modules/ntb/plugins/ntbAboutInstrumentPlugin.ts
deleted file mode 100644
index a04ffaafc..000000000
--- a/src/modules/ntb/plugins/ntbAboutInstrumentPlugin.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { TabValues } from '@widgets/AboutInstrument/ExtraInfo/components/Tabs/constants';
-
-import { isNtbInstrument } from '../utils/isNtbInstrument';
-
-import type { AboutInstrumentPluginFactory } from '@widgets/AboutInstrument/plugins/types';
-
-const NTB_HIDDEN_TAB_KEYS: string[] = [TabValues.composition, TabValues.growthLeaders];
-
-export const ntbAboutInstrumentPlugin: AboutInstrumentPluginFactory = ({ issKey }) => ({
-  name: 'ntbAboutInstrumentPlugin',
-  check: () => isNtbInstrument(issKey),
-  getTabs: (tabs) => tabs.filter((tab) => !NTB_HIDDEN_TAB_KEYS.includes(tab.key)),
-});
diff --git a/src/modules/ntb/services/__tests__/createOrderActions.test.ts b/src/modules/ntb/services/__tests__/createOrderActions.test.ts
index 30f1d3a40..67dc1b204 100644
--- a/src/modules/ntb/services/__tests__/createOrderActions.test.ts
+++ b/src/modules/ntb/services/__tests__/createOrderActions.test.ts
@@ -122,7 +122,6 @@ describe('createOrderActions', () => {
         direction: ORDER_DIRECTION.BUY,
         price: 1000,
         quantity: 100,
-        splittable: true,
         restoreOrderRequest: {
           direction: ORDER_DIRECTION.BUY,
           boardCode: 'BOARD1',
diff --git a/src/modules/ntb/services/createOrderActions.ts b/src/modules/ntb/services/createOrderActions.ts
index e6b0c3be3..995b1c464 100644
--- a/src/modules/ntb/services/createOrderActions.ts
+++ b/src/modules/ntb/services/createOrderActions.ts
@@ -50,7 +50,6 @@ export const createOrderActions = ({ dispatch }: CreateOrderActionsProps) => {
           direction: order.direction?.code,
           price: order.price,
           quantity: order.quantity,
-          splittable: order.splittable,
           restoreOrderRequest,
         }),
       );
diff --git a/src/modules/ntb/types/logistic.ts b/src/modules/ntb/types/logistic.ts
index 6e8f49223..476364430 100644
--- a/src/modules/ntb/types/logistic.ts
+++ b/src/modules/ntb/types/logistic.ts
@@ -1,12 +1,19 @@
 export type GetLogisticRequest = {
   groupName?: string;
-  securityId?: string;
+  partnerCode?: number;
+  loadPortName?: string | null;
+  dischargePortName?: string;
+  dischargeCountryName?: string;
+  productName?: string;
+  currencyName?: string;
+  comment?: string;
+  partySize?: string;
+  loadCountryName?: string | null;
 };
 
 export type Logistic = {
   /** Дата создания записи (ISO строка) */
   created: string;
-  securityId: string;
   /** Информация о контрагенте */
   partner: {
     /** Внутренний код партнёра */
diff --git a/src/modules/ntb/types/orderModalPayload.ts b/src/modules/ntb/types/orderModalPayload.ts
index cd0d0ae38..fe879e1e2 100644
--- a/src/modules/ntb/types/orderModalPayload.ts
+++ b/src/modules/ntb/types/orderModalPayload.ts
@@ -20,8 +20,6 @@ export type OrderModalPayload = {
   showTabs?: boolean;
   /** Идентификатор выбранного инструмента */
   choosenInstrumentFromSearch?: Contract['issKey'];
-  /** Признак делимости заявки */
-  splittable?: boolean;
   restoreOrderRequest?: CreateOrderPayload;
 };
 
@@ -49,6 +47,4 @@ export type OrderConfirmModalData = {
   orderSize: number | string;
   /** Название единицы измерения */
   faceUnitName: string;
-  /** Делимость заявки */
-  splittable?: string;
 };
diff --git a/src/modules/ntb/types/permissions.ts b/src/modules/ntb/types/permissions.ts
index d00cd7c97..f73c7a2c0 100644
--- a/src/modules/ntb/types/permissions.ts
+++ b/src/modules/ntb/types/permissions.ts
@@ -18,10 +18,3 @@ export const PERMISSION_TO_SIDES: Record<PERMISSIONS_CODES, readonly Key[]> = {
 export enum OrderEntryStatus {
   Active = 'O',
 }
-
-export type TradeTimePermissionInfo = {
-  /** Торги активны/неактивны */
-  active: boolean;
-  /** Текст подсказки, если торги неактивны */
-  hint?: string;
-};
diff --git a/src/modules/ntb/types/plugin.ts b/src/modules/ntb/types/plugin.ts
index 5e890035a..d7613629f 100644
--- a/src/modules/ntb/types/plugin.ts
+++ b/src/modules/ntb/types/plugin.ts
@@ -2,17 +2,4 @@
 export enum MARKET_SEGMENT_CODES {
   /** Агро-сегмент MXAGRO */
   MX_AGRO = 'MXAGRO',
-  /** Аналитические инструменты NTBVTFC */
-  NTB_VTFC = 'NTBVTFC',
-  INDICES = 'INDICES',
-}
-
-export enum MARKET_BOARD_CODES {
-  AGRO = 'AGRO',
-}
-
-/** Коды режимов */
-export enum NtbBoards {
-  Zern = 'ZERN',
-  Sugar = 'SUGR',
-}
+}
\ No newline at end of file
diff --git a/src/modules/ntb/types/tradingData.ts b/src/modules/ntb/types/tradingData.ts
index 78e59f80b..453b85310 100644
--- a/src/modules/ntb/types/tradingData.ts
+++ b/src/modules/ntb/types/tradingData.ts
@@ -8,7 +8,6 @@ export interface Board {
   name: string;
 }
 export interface Security {
-  key: string | null;
   code: string;
   name: string;
 }
diff --git a/src/modules/ntb/types/userTradingAccesses.ts b/src/modules/ntb/types/userTradingAccesses.ts
index c3ec652ab..a7ba261a3 100644
--- a/src/modules/ntb/types/userTradingAccesses.ts
+++ b/src/modules/ntb/types/userTradingAccesses.ts
@@ -6,25 +6,6 @@ interface TradingAccessSecurity {
   boardCode: string;
 }
 
-export enum TradeTimePermissionStatus {
-  Active = 1,
-  Inactive = 2,
-}
-
-export type TradeTimePermission = {
-  /** Ключ инструмента */
-  key: string;
-  /** Время начала торгов */
-  startTime: string;
-  /** Время окончания торгов */
-  endTime: string;
-  /** Текущий статус торгов
-   * - 1 - активно
-   * - 2 - не активно
-   * */
-  currentStatus: TradeTimePermissionStatus;
-};
-
 /** Разрешённые направления торгов для инструментов рынка */
 export interface UserTradingAccesses {
   /** Доступные пользователю режимы торгов */
@@ -49,6 +30,4 @@ export interface UserTradingAccesses {
     sell: string[];
   };
   userCode?: string;
-  /** Время и статус торгов по каждому инструменту */
-  tradeTimePermissions: TradeTimePermission[];
 }
diff --git a/src/modules/ntb/utils/__tests__/isNtbInstrument.test.ts b/src/modules/ntb/utils/__tests__/isNtbInstrument.test.ts
deleted file mode 100644
index 02db935a7..000000000
--- a/src/modules/ntb/utils/__tests__/isNtbInstrument.test.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { isNtbInstrument } from '../isNtbInstrument';
-
-describe('isNtbInstrument', () => {
-  it('возвращает false для пустого issKey', () => {
-    expect(isNtbInstrument(undefined)).toBe(false);
-    expect(isNtbInstrument(null)).toBe(false);
-    expect(isNtbInstrument('')).toBe(false);
-  });
-  it('распознаёт агро-сегмент MXAGRO по префиксу source', () => {
-    expect(isNtbInstrument('MXAGRO:AGRO:WH5GR')).toBe(true);
-  });
-  it('распознаёт аналитический сегмент NTBVTFC по префиксу source', () => {
-    expect(isNtbInstrument('NTBVTFC:AGRO:WH3GR_UFO_SKFO')).toBe(true);
-    expect(isNtbInstrument('NTBVTFC.AGRO.WH3GR_UFO_SKFO')).toBe(true);
-  });
-  it('не считает NTB инструменты с source INDICES', () => {
-    expect(isNtbInstrument('INDICES:AGRO:SUGVOL')).toBe(false);
-    expect(isNtbInstrument('INDICES:SNDX:IMOEX')).toBe(false);
-  });
-  it('не считает NTB обычный биржевой инструмент', () => {
-    expect(isNtbInstrument('TQBR:SBER')).toBe(false);
-  });
-});
diff --git a/src/modules/ntb/utils/__tests__/registerNtbBarsResolver.test.ts b/src/modules/ntb/utils/__tests__/registerNtbBarsResolver.test.ts
deleted file mode 100644
index b6a415d34..000000000
--- a/src/modules/ntb/utils/__tests__/registerNtbBarsResolver.test.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-import { registerBarsResolver } from '@widgets/Chart/requestBars';
-
-import { registerNtbBarsResolver } from '../registerNtbBarsResolver';
-
-import type { NtbBarPoint } from '../registerNtbBarsResolver';
-import type { Candle } from 'moex-chart';
-
-jest.mock('@widgets/Chart/requestBars', () => ({
-  registerBarsResolver: jest.fn(),
-}));
-
-const mockRegisterBarsResolver = registerBarsResolver as jest.Mock;
-
-type BarsResolver = (args: { ticker?: string }) => Promise<Candle[]>;
-
-const registerAndGetResolver = (fetchBars: (securityId: string) => Promise<NtbBarPoint[]>): BarsResolver => {
-  registerNtbBarsResolver('TEST_BOARD', fetchBars);
-
-  return mockRegisterBarsResolver.mock.calls[0][1] as BarsResolver;
-};
-
-describe('registerNtbBarsResolver', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('регистрирует резолвер под переданный борд', () => {
-    registerNtbBarsResolver('TEST_BOARD', jest.fn());
-
-    expect(mockRegisterBarsResolver).toHaveBeenCalledWith('TEST_BOARD', expect.any(Function));
-  });
-
-  it('достаёт securityId из тикера (3-й сегмент) и передаёт его в fetchBars', async () => {
-    const fetchBars = jest.fn().mockResolvedValue([]);
-    const resolver = registerAndGetResolver(fetchBars);
-
-    await resolver({ ticker: 'PREFIX:BOARD:SEC123' });
-
-    expect(fetchBars).toHaveBeenCalledWith('SEC123');
-  });
-
-  it('маппит точки в плоские свечи: value → OHLC, date → время, volume', async () => {
-    const resolver = registerAndGetResolver(async () => [{ date: '2026-05-19', value: 40, volume: 5 }]);
-
-    const bars = await resolver({ ticker: 'P:B:SEC' });
-
-    expect(bars).toEqual([{ time: Date.parse('2026-05-19'), open: 40, high: 40, low: 40, close: 40, volume: 5 }]);
-  });
-
-  it('подставляет volume=0, если объёма нет', async () => {
-    const resolver = registerAndGetResolver(async () => [{ date: '2026-05-19', value: 40 }]);
-
-    const bars = await resolver({ ticker: 'P:B:SEC' });
-
-    expect(bars[0].volume).toBe(0);
-  });
-
-  it('сортирует бары по возрастанию времени', async () => {
-    const resolver = registerAndGetResolver(async () => [
-      { date: '2026-05-20', value: 2 },
-      { date: '2026-05-19', value: 1 },
-    ]);
-
-    const bars = await resolver({ ticker: 'P:B:SEC' });
-
-    expect(bars.map((bar) => bar.time)).toEqual([Date.parse('2026-05-19'), Date.parse('2026-05-20')]);
-  });
-
-  it('схлопывает дубли по дате — побеждает последнее значение', async () => {
-    const resolver = registerAndGetResolver(async () => [
-      { date: '2026-05-19', value: 10 },
-      { date: '2026-05-19', value: 99 },
-    ]);
-
-    const bars = await resolver({ ticker: 'P:B:SEC' });
-
-    expect(bars).toHaveLength(1);
-    expect(bars[0].close).toBe(99);
-  });
-
-  it('пропускает точки без числового value или без даты', async () => {
-    const resolver = registerAndGetResolver(async () => [
-      { date: '2026-05-19' },
-      { date: '', value: 5 },
-      { date: '2026-05-20', value: 7 },
-    ]);
-
-    const bars = await resolver({ ticker: 'P:B:SEC' });
-
-    expect(bars).toEqual([{ time: Date.parse('2026-05-20'), open: 7, high: 7, low: 7, close: 7, volume: 0 }]);
-  });
-
-  it('парсит дату в формате dd.mm.yyyy через fallback', async () => {
-    const resolver = registerAndGetResolver(async () => [{ date: '15.03.2025', value: 3 }]);
-
-    const bars = await resolver({ ticker: 'P:B:SEC' });
-
-    expect(bars[0].time).toBe(Date.UTC(2025, 2, 15));
-  });
-
-  it('возвращает [] и не вызывает fetchBars, если securityId в тикере нет', async () => {
-    const fetchBars = jest.fn();
-    const resolver = registerAndGetResolver(fetchBars);
-
-    const bars = await resolver({ ticker: 'PREFIX:BOARD' });
-
-    expect(bars).toEqual([]);
-    expect(fetchBars).not.toHaveBeenCalled();
-  });
-
-  it('возвращает [] при undefined ticker', async () => {
-    const fetchBars = jest.fn();
-    const resolver = registerAndGetResolver(fetchBars);
-
-    const bars = await resolver({ ticker: undefined });
-
-    expect(bars).toEqual([]);
-    expect(fetchBars).not.toHaveBeenCalled();
-  });
-});
diff --git a/src/modules/ntb/utils/getTradeTimePermissions.ts b/src/modules/ntb/utils/getTradeTimePermissions.ts
deleted file mode 100644
index b9ddcf649..000000000
--- a/src/modules/ntb/utils/getTradeTimePermissions.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { TradeTimePermission, TradeTimePermissionInfo, TradeTimePermissionStatus } from '../types';
-
-const getHint = (startTime?: string, endTime?: string) =>
-  startTime && endTime ? `Время проведения торгов с ${startTime} до ${endTime}.` : 'Торги недоступны';
-
-export const getTradeTimePermissions = (
-  tradeTimePermissionsMap: Map<string, TradeTimePermission>,
-  key?: string,
-): TradeTimePermissionInfo => {
-  const tradeTimePermissions = [...tradeTimePermissionsMap.values()];
-
-  if (key) {
-    const permission = tradeTimePermissionsMap.get(key);
-
-    if (!permission) {
-      return { active: false, hint: getHint() };
-    }
-
-    if (permission.currentStatus === TradeTimePermissionStatus.Active) {
-      return { active: true };
-    }
-    return {
-      active: false,
-      hint: getHint(permission.startTime, permission.endTime),
-    };
-  }
-
-  const permitted = tradeTimePermissions?.filter((p) => p.currentStatus === TradeTimePermissionStatus.Active);
-  if (permitted && permitted.length > 0) {
-    return { active: true };
-  }
-
-  const minStartTime =
-    tradeTimePermissions.length > 0
-      ? tradeTimePermissions.reduce((a, b) => (a.startTime < b.startTime ? a : b)).startTime
-      : undefined;
-
-  const maxEndTime =
-    tradeTimePermissions.length > 0
-      ? tradeTimePermissions.reduce((a, b) => (a.endTime > b.endTime ? a : b)).endTime
-      : undefined;
-
-  return { active: false, hint: getHint(minStartTime, maxEndTime) };
-};
diff --git a/src/modules/ntb/utils/isNtbInstrument.ts b/src/modules/ntb/utils/isNtbInstrument.ts
deleted file mode 100644
index 8f1472d29..000000000
--- a/src/modules/ntb/utils/isNtbInstrument.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { MARKET_SEGMENT_CODES } from '../types/plugin';
-
-const NTB_ISS_KEY_PREFIXES: string[] = [MARKET_SEGMENT_CODES.MX_AGRO, MARKET_SEGMENT_CODES.NTB_VTFC];
-
-export const isNtbInstrument = (issKey: string | null | undefined): boolean => {
-  if (!issKey) {
-    return false;
-  }
-  const [source] = issKey.split(/[:.]/);
-
-  return NTB_ISS_KEY_PREFIXES.includes(source);
-};
diff --git a/src/modules/ntb/utils/registerNtbBarsResolver.ts b/src/modules/ntb/utils/registerNtbBarsResolver.ts
deleted file mode 100644
index 338eed7cd..000000000
--- a/src/modules/ntb/utils/registerNtbBarsResolver.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { registerBarsResolver } from '@widgets/Chart/requestBars';
-
-import type { Candle } from 'moex-chart';
-
-export type NtbBarPoint = {
-  date?: string;
-  value?: number;
-  volume?: number;
-};
-
-export type FetchNtbBars = (securityId: string) => Promise<NtbBarPoint[]>;
-
-const parseChartDate = (date: string): number => {
-  const parsed = Date.parse(date);
-  if (!Number.isNaN(parsed)) {
-    return parsed;
-  }
-
-  const [day, month, fullYear] = date.split('.');
-  return Date.UTC(Number(fullYear), Number(month) - 1, Number(day));
-};
-
-const mapPointsToFlatBars = (points: NtbBarPoint[]): Candle[] => {
-  const barByTime = new Map<number, Candle>();
-
-  points.forEach((point) => {
-    if (typeof point.value === 'number' && point.date) {
-      const time = parseChartDate(point.date);
-
-      barByTime.set(time, {
-        time,
-        open: point.value,
-        high: point.value,
-        low: point.value,
-        close: point.value,
-        volume: point.volume ?? 0,
-      });
-    }
-  });
-
-  return Array.from(barByTime.values()).sort((a, b) => a.time - b.time);
-};
-
-export const registerNtbBarsResolver = (board: string, fetchBars: FetchNtbBars) => {
-  registerBarsResolver(board, async ({ ticker }) => {
-    const securityId = ticker?.split(/[:.]/)[2];
-
-    if (!securityId) {
-      return [];
-    }
-
-    const points = await fetchBars(securityId);
-
-    return mapPointsToFlatBars(points);
-  });
-};
diff --git a/src/modules/ntb/utils/splittable.ts b/src/modules/ntb/utils/splittable.ts
deleted file mode 100644
index a81ca26b1..000000000
--- a/src/modules/ntb/utils/splittable.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { uiConfig } from '@configs/manager';
-
-import { TKS_NTB_BOARDS } from '../constants';
-import { ORDER_DIRECTION } from '../types';
-
-export const hasSplitAvailable = (boardId: string, direction: string) =>
-  uiConfig.featureFlag1 !== 'ntbGlassOldApiEnable' &&
-  TKS_NTB_BOARDS.some((b) => b === boardId) &&
-  direction === ORDER_DIRECTION.SELL;
-
-export const getSplittableText = (splittable: boolean | undefined, boardId: string, direction: string) => {
-  if (!hasSplitAvailable(boardId, direction)) {
-    return;
-  }
-  return splittable ? 'Да' : 'Нет';
-};
diff --git a/src/modules/push/manager.ts b/src/modules/push/manager.ts
index 7eb553337..74bc6f8bc 100644
--- a/src/modules/push/manager.ts
+++ b/src/modules/push/manager.ts
@@ -5,6 +5,7 @@ import { Settings } from './types';
 import { wingsSdk } from './wings';
 
 export class WebPushManager {
+
   public static async initServiceWorker(): Promise<boolean> {
     return new Promise((resolve, reject) => {
       if ('serviceWorker' in navigator) {
@@ -38,6 +39,22 @@ export class WebPushManager {
     }
   }
 
+  public static async wakeUpSW() {
+    try {
+      const registration = await navigator?.serviceWorker?.getRegistration(LONG_SCOPE);
+      if (registration) {
+        await registration?.update();
+        if (registration?.active) {
+          registration.active.postMessage({
+            type: 'WAKE_UP',
+          });
+        }
+      }
+    } catch (error) {
+      console.log(error);
+    }
+  }
+
   public static async checkPushDeviceRealSubcription() {
     let hasSubscription = false;
     try {
diff --git a/src/modules/pushDates/logic/types.ts b/src/modules/pushDates/logic/types.ts
deleted file mode 100644
index 2b3594fe1..000000000
--- a/src/modules/pushDates/logic/types.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { SecondLegConvention } from '@widgets/SwapCalculator/types/table';
-
-export type BaseData = {
-  /** Идентификатор элемента массива. Служебное поле. Если не указан, то генерируется */
-  id?: number;
-  /** Срок который прибавляется к дате начала для получения расчетной даты окончания */
-  term: string;
-  /** Дата заключение сделки для конкретной даты */
-  sendingTime: string;
-  symbol?: string;
-  // конвенция даты начала. Если не указана, то берется BaseFilterValues.secondLegConvention
-  convention?: keyof typeof SecondLegConvention;
-};
-
-export type BaseFilterValues = {
-  // конвенция даты окончания
-  secondLegConvention: SecondLegConvention;
-  currency?: string;
-  faceUnit?: string | null;
-  /** Дата заключение сделки для конкретной даты */
-  transactionDate?: string | null;
-};
-
-export type EnrichBySecondDateResult<T extends BaseData = BaseData> = T & {
-  date?: string;
-  secondDate?: string;
-  dayCount?: number;
-  transactionDate?: string;
-};
diff --git a/src/modules/pushDates/logic/utils/enrichBySecondDate.utils.ts b/src/modules/pushDates/logic/utils/enrichBySecondDate.utils.ts
index b09c4a062..448438e4c 100644
--- a/src/modules/pushDates/logic/utils/enrichBySecondDate.utils.ts
+++ b/src/modules/pushDates/logic/utils/enrichBySecondDate.utils.ts
@@ -7,14 +7,26 @@ import { CalendarDates, CalendarPost, SecondLegConvention } from '@widgets/SwapC
 
 import { addTerm, concatEndDateValues, concatStartDateValues } from './utils';
 
-import type { BaseData, BaseFilterValues, EnrichBySecondDateResult } from '../types';
+export type BaseData = {
+  id?: number;
+  term: string;
+  sendingTime: string;
+  symbol?: string;
+  convention?: keyof typeof SecondLegConvention;
+  transactionDate?: string;
+};
+
+export type BaseFilterValues = {
+  secondLegConvention: SecondLegConvention;
+  currency?: string;
+  faceUnit?: string;
+  transactionDate?: string;
+};
 
 export const enrichBySecondDate = async <T extends BaseData, F extends BaseFilterValues>(
   preData: T[],
   filters: F,
-  enrichOnlyStartDates?: boolean,
-  enrichOnlyEndDates?: boolean,
-): Promise<EnrichBySecondDateResult<T>[]> => {
+): Promise<T[]> => {
   if (preData.length === 0) {
     return [];
   }
@@ -25,11 +37,10 @@ export const enrichBySecondDate = async <T extends BaseData, F extends BaseFilte
       currency: filters.currency ?? 'RUB',
       faceUnit: filters.faceUnit ?? 'CNY',
       conventions: filters.secondLegConvention,
-      /** Дата заключение сделки для конкретной даты. Это обязательное поле */
       transactionDate: filters.transactionDate ?? dayjs().format(commonDateFormat.backendDateFormat),
     };
 
-    const dataWithIds: EnrichBySecondDateResult<T>[] = preData.map((d) => ({
+    const dataWithIds: T[] = preData.map((d) => ({
       ...d,
       id: d.id ?? getRandomId(),
       transactionDate: d.sendingTime && dayjs(d.sendingTime).add(1, 'd').format(commonDateFormat.backendDateFormat),
@@ -45,19 +56,14 @@ export const enrichBySecondDate = async <T extends BaseData, F extends BaseFilte
       }));
 
     // Если даты начала (даты сделки) есть, то их тоже переносим через выходные/праздничные дни
-    const startDateResponse =
-      startDateDates.length && !enrichOnlyEndDates
-        ? await swapCalcController.postWeekendStatus({
-            ...defaultReqData,
-            dates: startDateDates,
-          })
-        : { data: { dates: [] } };
+    const startDateResponse = startDateDates.length
+      ? await swapCalcController.postWeekendStatus({
+          ...defaultReqData,
+          dates: startDateDates,
+        })
+      : { data: { dates: [] } };
 
-    const dataWithStartDates: EnrichBySecondDateResult<T>[] = concatStartDateValues(
-      dataWithIds,
-      startDateResponse.data,
-      defaultReqData,
-    );
+    const dataWithStartDates = concatStartDateValues(dataWithIds, startDateResponse.data, defaultReqData);
 
     // Даты окончания (даты второй ноги) всегда переносим через выходные
     const endDateDates: CalendarDates[] = dataWithStartDates.map((d) => ({
@@ -67,10 +73,9 @@ export const enrichBySecondDate = async <T extends BaseData, F extends BaseFilte
       conventions: d.convention ? SecondLegConvention[d.convention] : undefined,
     }));
 
-    const endDateResponse =
-      endDateDates.length && !enrichOnlyStartDates
-        ? await swapCalcController.postWeekendStatus({ ...defaultReqData, dates: endDateDates })
-        : { data: { dates: [] } };
+    const endDateResponse = endDateDates.length
+      ? await swapCalcController.postWeekendStatus({ ...defaultReqData, dates: endDateDates })
+      : { data: { dates: [] } };
 
     return concatEndDateValues(dataWithStartDates, endDateResponse.data);
   } catch (e) {
diff --git a/src/modules/pushDates/logic/utils/utils.ts b/src/modules/pushDates/logic/utils/utils.ts
index b1ade97ef..343c4da59 100644
--- a/src/modules/pushDates/logic/utils/utils.ts
+++ b/src/modules/pushDates/logic/utils/utils.ts
@@ -5,10 +5,9 @@ import { CalendarDateObj, CalendarPost, CalendarSpfiResponse } from '@widgets/Sw
 
 import { termToDayjsMap } from '../consts';
 
-import type { BaseData } from '../types';
+import { BaseData } from './enrichBySecondDate.utils';
 
-export function addTerm(dateToIncrement: string, inc?: string | null): Dayjs {
-  const incrementation: string = inc ?? '';
+export function addTerm(dateToIncrement: string, incrementation: string): Dayjs {
   const specificValue = termToDayjsMap[incrementation.toUpperCase()];
 
   let unit = '';
@@ -44,7 +43,7 @@ export function concatStartDateValues<T extends BaseData>(
   data: T[],
   enrichedData: CalendarSpfiResponse,
   defaultReqData: Readonly<CalendarPost>,
-): T[] {
+): (T & Partial<CalendarDateObj>)[] {
   return data.map((d) => {
     const correspondingValue: Partial<CalendarDateObj & { id: number; days: number }> =
       enrichedData.dates.find((e) => d.id === e.id) ?? {};
diff --git a/src/store/actions/addressDepositForm.ts b/src/store/actions/addressDepositForm.ts
deleted file mode 100644
index 214ad15b4..000000000
--- a/src/store/actions/addressDepositForm.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { createAction } from '@reduxjs/toolkit';
-
-import type { MxtFormDetailsConfirmRow } from '@modules/MXTForms/shared/confirm';
-import type { AddressDepositFormOpenProps, AddressDepositFormSubmitPayload } from 'types/AddressDepositForm';
-
-export type AddressDepositFormConfirmPayload = AddressDepositFormSubmitPayload & {
-  rows: MxtFormDetailsConfirmRow[];
-  description: string;
-  footerText?: string;
-};
-
-export const openAddressDepositFormRequested = createAction<AddressDepositFormOpenProps | undefined>(
-  'addressDepositForm/openRequested',
-);
-export const addressDepositFormConfirmRequested = createAction<AddressDepositFormConfirmPayload>(
-  'addressDepositForm/confirmRequested',
-);
-export const addressDepositFormSubmit = createAction<AddressDepositFormSubmitPayload>('addressDepositForm/submit');
-export const addressDepositFormSubmitReset = createAction<{ formId: string }>('addressDepositForm/submitReset');
diff --git a/src/store/actions/chats.ts b/src/store/actions/chats.ts
index b34a3ac16..dec2642f6 100644
--- a/src/store/actions/chats.ts
+++ b/src/store/actions/chats.ts
@@ -67,7 +67,7 @@ export const requestLastReceivedMessages = createAction('chats/requestLastReceiv
 export const openAppointAnAdminRequested = createAction<{
   customerLogin: string;
   chatId: string;
-  action: 'admin' | 'owner' | 'remove_admin';
+  action: 'admin' | 'owner';
 }>('chats/openAppointAnAdminRequested');
 
 export const appointAndAdminSaveStep = createAction<{
diff --git a/src/store/actions/customers.ts b/src/store/actions/customers.ts
index 988f06255..65489cdea 100644
--- a/src/store/actions/customers.ts
+++ b/src/store/actions/customers.ts
@@ -21,5 +21,5 @@ export const createSPFIOrderRequested = createAction('customers/createSPFIOrderR
 export const appointAnAdminStep = createAction<{
   chatId: string;
   customerLogin: string;
-  action: 'owner' | 'admin' | 'remove_admin';
+  action: 'owner' | 'admin';
 }>('customers/appointAnAdminStep');
diff --git a/src/store/actions/depositForm.ts b/src/store/actions/depositForm.ts
deleted file mode 100644
index cbd3a0e8a..000000000
--- a/src/store/actions/depositForm.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { createAction } from '@reduxjs/toolkit';
-
-import type { MxtFormDetailsConfirmRow } from '@modules/MXTForms/shared/confirm';
-import type { DepositFormOpenProps, DepositFormSubmitPayload } from 'types/DepositForm';
-
-export type DepositFormConfirmPayload = DepositFormSubmitPayload & {
-  rows: MxtFormDetailsConfirmRow[];
-  description: string;
-  footerText?: string;
-};
-
-export const openDepositFormRequested = createAction<DepositFormOpenProps | undefined>('depositForm/openRequested');
-export const depositFormConfirmRequested = createAction<DepositFormConfirmPayload>('depositForm/confirmRequested');
-export const depositFormSubmit = createAction<DepositFormSubmitPayload>('depositForm/submit');
-export const depositFormSubmitReset = createAction<{ formId: string }>('depositForm/submitReset');
diff --git a/src/store/actions/mxt.ts b/src/store/actions/mxt.ts
index ebcb4f898..39afc329a 100644
--- a/src/store/actions/mxt.ts
+++ b/src/store/actions/mxt.ts
@@ -1,5 +1,6 @@
 import { createAction } from '@reduxjs/toolkit';
 
+import { unsubscribeObjectState } from '@store/sagas/mxt';
 import { MxtDataKey } from '@widgets/DepositCcpTables/const';
 
 export const mxtActions = {
diff --git a/src/store/actions/mxtFormConfirm.ts b/src/store/actions/mxtFormConfirm.ts
deleted file mode 100644
index 94cf3f5a4..000000000
--- a/src/store/actions/mxtFormConfirm.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { createAction } from '@reduxjs/toolkit';
-
-export const mxtFormConfirmAccepted = createAction<{ modalId: string; formId: string }>('mxtFormConfirm/accepted');
diff --git a/src/store/actions/tradeJournal.ts b/src/store/actions/tradeJournal.ts
index 257c83eeb..600022b85 100644
--- a/src/store/actions/tradeJournal.ts
+++ b/src/store/actions/tradeJournal.ts
@@ -1,14 +1,6 @@
 import { createAction } from '@reduxjs/toolkit';
 
-import {
-  TCreateTicketFromZero,
-  TDirection,
-  TPatchOfferData,
-  TProduct,
-  TQuotation,
-  TSagaProps,
-  TViewCommentModalPayloadProps,
-} from 'types/TradeJournal';
+import { TDirection, TPatchOfferData, TProduct, TQuotation, TSagaProps } from 'types/TradeJournal';
 
 // RFQ Modal
 export const openCreateRFQModalRequested = createAction('tradeJournal/openCreateRFQModalRequested');
@@ -41,9 +33,4 @@ export const openRejectModalStep = createAction<TSagaProps>('tradeJournal/openRe
 // Create Ticket Modal
 export const openCreateTicketModalRequested = createAction('tradeJournal/openCreateTicketModalRequested');
 
-export const createTicketModalSave = createAction<TCreateTicketFromZero>('tradeJournal/createTicketModalSave');
-
-// View Comment Modal
-export const openViewCommentModalRequested = createAction<TViewCommentModalPayloadProps>(
-  'tradeJournal/openViewCommentModalRequested',
-);
+export const createTicketModalSave = createAction('tradeJournal/createTicketModalSave');
diff --git a/src/store/sagas/__tests__/mxt.test.ts b/src/store/sagas/__tests__/mxt.test.ts
index 82c18db00..1eed082f1 100644
--- a/src/store/sagas/__tests__/mxt.test.ts
+++ b/src/store/sagas/__tests__/mxt.test.ts
@@ -12,13 +12,7 @@ import {
   subscribeObjectState,
   unsubscribeObjectState,
 } from '@store/sagas/mxt';
-import {
-  handleMessage,
-  MxtDataState,
-  objectSubscriptionFailed,
-  objectSubscriptionStarted,
-  setMetadata,
-} from '@store/slices/mxt';
+import { handleMessage, MxtDataState, setMetadata } from '@store/slices/mxt';
 
 jest.mock('@api/websokets/classes/WSMXTStompClient', () => ({
   wsMXTStompClient: <Partial<WSMXTStompClient>>{
@@ -31,6 +25,8 @@ jest.mock('@api/websokets/classes/WSMXTStompClient', () => ({
 
 const mockRequestMeta = wsMXTStompClient.requestMeta as jest.MockedFunction<typeof wsMXTStompClient.requestMeta>;
 const mockActivate = wsMXTStompClient.activate as jest.MockedFunction<typeof wsMXTStompClient.activate>;
+const mockSubscribe = wsMXTStompClient.subscription as jest.MockedFunction<typeof wsMXTStompClient.subscription>;
+const mockUnsubscribe = wsMXTStompClient.unsubscribeByKey as jest.MockedFunction<typeof wsMXTStompClient.unsubscribe>;
 
 const TEST_META: MxtMeta = {
   version: 'test',
@@ -85,37 +81,33 @@ describe('mxt', () => {
   };
 
   it('when fetchMetadata when state empty should should request', async () => {
-    mockActivate.mockResolvedValue(undefined);
+    mockActivate.mockResolvedValue(true);
     mockRequestMeta.mockResolvedValue(TEST_META);
 
-    const result = await expectSaga(fetchMetadata)
+    await expectSaga(fetchMetadata)
       .withState({
         mxtSlice: <MxtDataState>{
           objects: {},
-          objectStates: {},
         },
       })
       .put(setMetadata(TEST_META))
+      .returns(TEST_META)
       .run(10000);
-
-    expect(result.returnValue).toEqual(TEST_META);
   });
 
   it('when fetchMetadata if has state should return from state', async () => {
-    const result = await expectSaga(fetchMetadata)
+    await expectSaga(fetchMetadata)
       .withState({
         mxtSlice: <MxtDataState>{
           objects: {},
-          objectStates: {},
           metadata: TEST_META,
         },
       })
       .not.put.actionType(setMetadata.type)
       .not.call([wsMXTStompClient, wsMXTStompClient.activate])
       .not.call([wsMXTStompClient, wsMXTStompClient.requestMeta])
+      .returns(TEST_META)
       .run();
-
-    expect(result.returnValue).toEqual(TEST_META);
   });
 
   it('when subscribeObjectState expect subscribe called', async () => {
@@ -124,33 +116,23 @@ describe('mxt', () => {
         [call(fetchMetadata), TEST_META],
         [take(mockCancelChannel), 'orderMMRepo'],
       ])
-      .put(objectSubscriptionStarted('orderMMRepo'))
       .silentRun(500);
-    expect(wsMXTStompClient.subscription).toHaveBeenCalledWith('orderMMRepo', 'order.state', expect.any(Function));
+    expect(wsMXTStompClient.subscription).toHaveBeenCalledWith('order.state', expect.any(Function));
     expect(wsMXTStompClient.unsubscribeByKey).toHaveBeenCalledWith('orderMMRepo');
   });
 
   it('when subscribeObjectState unknown expect error', async () => {
-    await expectSaga(subscribeObjectState, { payload: 'account' }, mockCancelChannel)
-      .provide([[call(fetchMetadata), TEST_META]])
-      .put(objectSubscriptionStarted('account'))
-      .put(
-        objectSubscriptionFailed({
-          objectKey: 'account',
-          error: 'MXT destination absent for account.',
-        }),
-      )
-      .run();
-
-    expect(wsMXTStompClient.subscription).not.toHaveBeenCalled();
+    await expect(
+      expectSaga(subscribeObjectState, { payload: 'account' }, mockCancelChannel)
+        .provide([[call(fetchMetadata), TEST_META]])
+        .run(),
+    ).rejects.toThrow();
   });
 
   it('when unsubscribe expect put to cancel channel', async () => {
-    await expectSaga(unsubscribeObjectState, { payload: 'orderMMRepo' }, mockCancelChannel)
+    expectSaga(unsubscribeObjectState, { payload: 'orderMMRepo' }, mockCancelChannel)
       .call(mockCancelChannel.put, 'orderMMRepo')
       .run();
-
-    expect(mockCancelChannel.put).toHaveBeenCalledWith('orderMMRepo');
   });
 
   it('when subscribeObjectState expect handle message', async () => {
diff --git a/src/store/sagas/addressDepositForm.ts b/src/store/sagas/addressDepositForm.ts
deleted file mode 100644
index 6f20b6883..000000000
--- a/src/store/sagas/addressDepositForm.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import { call, put, select, takeLeading } from 'typed-redux-saga';
-
-import { getLocalisation } from '@localisation/getLocalisation';
-import { requestAddressDepositOrder } from '@modules/MXTForms/AddressDepositForm/api/requestAddressDepositOrder';
-import {
-  addressDepositFormConfirmRequested,
-  addressDepositFormSubmit,
-  addressDepositFormSubmitReset,
-  openAddressDepositFormRequested,
-} from '@store/actions/addressDepositForm';
-import { addressDepositFormSubmitFailed, addressDepositFormSubmitSucceeded } from '@store/slices/addressDepositForm';
-
-import { SagaHandlers, SagaResult } from './types/modals';
-import { runFlow, runModal } from './utils/modals';
-import { runMxtFormConfirm } from './utils/mxtFormConfirm';
-
-import type { RootState } from '@store/store';
-import type { AddressDepositFormOpenProps, AddressDepositFormSubmitPayload } from 'types/AddressDepositForm';
-
-const localisationSelector = (state: RootState) => state.localisation.localisation;
-
-function* submitAddressDepositForm({ formId, values, lotSize, currencyRate }: AddressDepositFormSubmitPayload) {
-  yield* put(addressDepositFormSubmit({ formId, values, lotSize, currencyRate }));
-
-  const submitResult = yield* call(requestAddressDepositOrder, values, lotSize, currencyRate);
-
-  if (submitResult.success) {
-    yield* put(addressDepositFormSubmitSucceeded({ formId }));
-    yield* put(addressDepositFormSubmitReset({ formId }));
-    return SagaResult.Close;
-  }
-
-  const localisation = getLocalisation(yield* select(localisationSelector));
-
-  yield* put(
-    addressDepositFormSubmitFailed({
-      formId,
-      error: submitResult.message ?? localisation.depositForms.submitError,
-    }),
-  );
-
-  return SagaResult.Continue;
-}
-
-const handlers: SagaHandlers = {
-  *[addressDepositFormConfirmRequested.type](action, flowId, modalId) {
-    if (!addressDepositFormConfirmRequested.match(action) || action.payload.formId !== modalId) {
-      return SagaResult.Continue;
-    }
-
-    const { rows, description, footerText, ...submitPayload } = action.payload;
-
-    return yield* runMxtFormConfirm({
-      flowId,
-      modalProps: {
-        formKind: 'addressDeposit',
-        formId: modalId,
-        rows,
-        description,
-        footerText,
-      },
-      submitPayload,
-      resetAction: addressDepositFormSubmitReset({ formId: modalId }),
-      submit: submitAddressDepositForm,
-    });
-  },
-};
-
-function* addressDepositFormSaga(flowId: string, payload?: AddressDepositFormOpenProps) {
-  yield* runModal(handlers, flowId, { type: 'AddressDepositForm', props: payload ?? {} });
-}
-
-function* addressDepositFormFlow({ payload }: ReturnType<typeof openAddressDepositFormRequested>) {
-  yield* runFlow(addressDepositFormSaga, payload);
-}
-
-export function* watchAddressDepositForm() {
-  yield takeLeading(openAddressDepositFormRequested, addressDepositFormFlow);
-}
diff --git a/src/store/sagas/core/desktop.ts b/src/store/sagas/core/desktop.ts
index 849d94cf5..8a37458fc 100644
--- a/src/store/sagas/core/desktop.ts
+++ b/src/store/sagas/core/desktop.ts
@@ -3,7 +3,6 @@ import { all, call, fork, join, put, select } from 'typed-redux-saga';
 import { instrumentListsController } from '@api/controllers/instrumentLists';
 import { profileController } from '@api/controllers/profileController';
 import api from '@api/index';
-import { getIsSpfiTrader } from '@api/utils/getIsSpfiTrader';
 import { wsEndpointStompClient } from '@api/websokets/classes/WSEndpointStompClient';
 import { systemNotificationController } from '@api/websokets/systemNotification/systemNotificationController';
 
@@ -52,8 +51,7 @@ export function* criticalDesktopReceiverSaga() {
   wsEndpointStompClient.activate();
 
   // Активация контроллера системных уведомлений
-  const isSpfiTrader = yield* select(getIsSpfiTrader);
-  systemNotificationController.activate(isSpfiTrader);
+  systemNotificationController.activate();
 
   const customersAndChatsFork = yield* fork(customersAndChatsSaga);
   const workspacesFork = yield* fork(fullWorkspacesUploadSaga);
diff --git a/src/store/sagas/depositForm.ts b/src/store/sagas/depositForm.ts
deleted file mode 100644
index 8f4a3c919..000000000
--- a/src/store/sagas/depositForm.ts
+++ /dev/null
@@ -1,203 +0,0 @@
-import { call, cancel, fork, put, select, take, takeLeading } from 'typed-redux-saga';
-
-import { getLocalisation } from '@localisation/getLocalisation';
-import { modalFlowService } from '@modules/ModalService/modalFlowService';
-import { requestDepositOrder } from '@modules/MXTForms/DepositForm/api/requestDepositOrder';
-import { isValidDepositListingData } from '@modules/MXTForms/DepositForm/model/validation';
-import { isFiniteNumber } from '@modules/MXTForms/shared/numbers';
-import {
-  depositFormConfirmRequested,
-  depositFormSubmit,
-  depositFormSubmitReset,
-  openDepositFormRequested,
-} from '@store/actions/depositForm';
-import { closeModalRequested } from '@store/actions/modal';
-import {
-  depositFormDataFailed,
-  depositFormDataRequested,
-  depositFormDataReset,
-  depositFormDataSucceeded,
-  depositFormSubmitFailed,
-  depositFormSubmitSucceeded,
-} from '@store/slices/depositForm';
-
-import { ensureMxtObjectsLoaded } from './mxt';
-import { SagaHandlers, SagaResult } from './types/modals';
-import { closeHandler, runFlow } from './utils/modals';
-import { runMxtFormConfirm } from './utils/mxtFormConfirm';
-
-import type { MxtObjectsState } from '@store/slices/mxt';
-import type { RootState } from '@store/store';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-import type {
-  DepositFormOpenProps,
-  DepositFormSubmitPayload,
-  DepositListingData,
-  DepositMarketplaceData,
-  DepositMoexSecurityData,
-} from 'types/DepositForm';
-
-const DEPOSIT_MXT_OBJECT_KEYS = [
-  'marketplace',
-  'listingMMRepo',
-  'moexSecurities',
-] as const satisfies readonly MxtDataKey[];
-const LISTING_DATA_ERROR = 'Не удалось получить данные инструмента';
-const localisationSelector = (state: RootState) => state.localisation.localisation;
-
-const getMxtItems = <T>(objects: MxtObjectsState, objectKey: MxtDataKey): T[] =>
-  Object.values(objects[objectKey] ?? {}) as unknown as T[];
-
-const findMarketplaceItemByBoard = (items: DepositMarketplaceData[], board?: string) => {
-  if (!board) {
-    return undefined;
-  }
-
-  return items.find((item) => item.board === board);
-};
-
-const findListingMMRepoItem = (items: DepositListingData[], marketplaceId?: number, instrIsin?: string | null) => {
-  if (!isFiniteNumber(marketplaceId) || !instrIsin) {
-    return undefined;
-  }
-
-  return items.find((item) => item.marketplaceId === marketplaceId && item.symbolCode === instrIsin);
-};
-
-const findMoexSecurityItem = (items: DepositMoexSecurityData[], marketplaceId?: number, issueId?: number) => {
-  if (!isFiniteNumber(marketplaceId) || !isFiniteNumber(issueId)) {
-    return undefined;
-  }
-
-  return items.find((item) => item.marketplaceId === marketplaceId && item.issueId === issueId);
-};
-
-const getErrorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));
-
-function* submitDepositForm({ formId, values, currencyRate }: DepositFormSubmitPayload) {
-  yield* put(depositFormSubmit({ formId, values, currencyRate }));
-
-  const submitResult = yield* call(requestDepositOrder, values, currencyRate);
-
-  if (submitResult.success) {
-    yield* put(depositFormSubmitSucceeded({ formId }));
-    return SagaResult.Close;
-  }
-
-  const localisation = getLocalisation(yield* select(localisationSelector));
-
-  yield* put(
-    depositFormSubmitFailed({
-      formId,
-      error: submitResult.message ?? localisation.depositForms.submitError,
-    }),
-  );
-
-  return SagaResult.Continue;
-}
-
-const handlers: SagaHandlers = {
-  *[depositFormConfirmRequested.type](action, flowId, modalId) {
-    if (!depositFormConfirmRequested.match(action) || action.payload.formId !== modalId) {
-      return SagaResult.Continue;
-    }
-
-    const { rows, description, footerText, ...submitPayload } = action.payload;
-
-    return yield* runMxtFormConfirm({
-      flowId,
-      modalProps: {
-        formKind: 'deposit',
-        formId: modalId,
-        rows,
-        description,
-        footerText,
-      },
-      submitPayload,
-      resetAction: depositFormSubmitReset({ formId: modalId }),
-      submit: submitDepositForm,
-    });
-  },
-};
-
-function* loadDepositFormData(formId: string, payload?: DepositFormOpenProps) {
-  yield* put(depositFormDataRequested({ formId }));
-
-  try {
-    const mxtObjects = yield* call(ensureMxtObjectsLoaded, DEPOSIT_MXT_OBJECT_KEYS);
-    const marketplace = findMarketplaceItemByBoard(
-      getMxtItems<DepositMarketplaceData>(mxtObjects, 'marketplace'),
-      payload?.board,
-    );
-    const listingData = findListingMMRepoItem(
-      getMxtItems<DepositListingData>(mxtObjects, 'listingMMRepo'),
-      marketplace?.id,
-      payload?.instrIsin,
-    );
-
-    if (!isValidDepositListingData(listingData)) {
-      throw new Error(LISTING_DATA_ERROR);
-    }
-
-    const moexSecurity = findMoexSecurityItem(
-      getMxtItems<DepositMoexSecurityData>(mxtObjects, 'moexSecurities'),
-      listingData.marketplaceId,
-      listingData.issueId,
-    );
-
-    yield* put(
-      depositFormDataSucceeded({
-        formId,
-        data: {
-          listingData,
-          returnDate: moexSecurity?.settleDate2,
-          fundingDuration: marketplace?.duration,
-        },
-      }),
-    );
-  } catch (error) {
-    yield* put(
-      depositFormDataFailed({
-        formId,
-        error: getErrorMessage(error),
-      }),
-    );
-  }
-}
-
-function* depositFormSaga(flowId: string, payload?: DepositFormOpenProps) {
-  const modalId = yield* call(() =>
-    modalFlowService.open(flowId, {
-      type: 'DepositForm',
-      props: {
-        ...(payload ?? {}),
-        isInitialLoading: true,
-      },
-    }),
-  );
-  const loadTask = yield* fork(loadDepositFormData, modalId, payload);
-  const handlersWithClose = { [closeModalRequested.type]: closeHandler, ...handlers };
-  let result = SagaResult.Continue;
-
-  try {
-    while (result === SagaResult.Continue) {
-      const action = yield* take(Object.keys(handlersWithClose));
-      const handler = handlersWithClose[action.type];
-
-      result = yield* handler(action, flowId, modalId);
-    }
-  } finally {
-    yield* cancel(loadTask);
-    yield* put(depositFormDataReset({ formId: modalId }));
-    yield* put(depositFormSubmitReset({ formId: modalId }));
-    yield* call(modalFlowService.close, flowId);
-  }
-}
-
-function* depositFormFlow({ payload }: ReturnType<typeof openDepositFormRequested>) {
-  yield* runFlow(depositFormSaga, payload);
-}
-
-export function* watchDepositForm() {
-  yield* takeLeading(openDepositFormRequested, depositFormFlow);
-}
diff --git a/src/store/sagas/index.ts b/src/store/sagas/index.ts
index b9bea1cd4..bd184ea80 100644
--- a/src/store/sagas/index.ts
+++ b/src/store/sagas/index.ts
@@ -1,18 +1,13 @@
 import { all } from 'redux-saga/effects';
 
-import { watchCommission } from '@modules/MXTForms/shared/commission/model/saga';
-import { watchLimitEstimation } from '@modules/MXTForms/shared/limitEstimation/model/saga';
-import { watchPriceRange } from '@modules/MXTForms/shared/priceRange/model/saga';
 import { mxtSagas } from '@store/sagas/mxt';
 
-import { watchAddressDepositForm } from './addressDepositForm';
 import { authSaga } from './auth';
 import avatarsSagas from './avatars';
 import { chatsSaga } from './chats';
 import { coreSagas } from './core';
 import { curvesSaga } from './curves';
 import { customersSaga } from './customers';
-import { watchDepositForm } from './depositForm';
 import { notificationsSaga } from './notifications';
 import { oidSaga } from './oids';
 import { profileSaga } from './profile';
@@ -27,11 +22,6 @@ export default function* rootSaga() {
     authSaga(),
     notificationsSaga(),
     customersSaga(),
-    watchAddressDepositForm(),
-    watchDepositForm(),
-    watchCommission(),
-    watchLimitEstimation(),
-    watchPriceRange(),
     tradeJournalSaga(),
     oidSaga(),
     curvesSaga(),
diff --git a/src/store/sagas/mxt.ts b/src/store/sagas/mxt.ts
index 610cb9d77..fc2c956e2 100644
--- a/src/store/sagas/mxt.ts
+++ b/src/store/sagas/mxt.ts
@@ -1,183 +1,88 @@
-import { channel, eventChannel } from 'redux-saga';
-import { all, call, delay, put, race, select, take, takeEvery } from 'typed-redux-saga';
+import { channel, Channel, eventChannel } from 'redux-saga';
+// import { actionChannel } from 'redux-saga/effects';
+import { all, call, FixedTask, fork, join, put, race, select, take, takeEvery } from 'typed-redux-saga';
 
-import { wsMXTStompClient } from '@api/websokets/classes/WSMXTStompClient';
-import { MxtMessageType } from '@api/websokets/classes/WSMXTStompClient/types';
+import { MxtMeta, wsMXTStompClient } from '@api/websokets/classes/WSMXTStompClient';
+import { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
+import { MxtStompMessage } from '@api/websokets/classes/WSMXTStompClient/types';
 import { mxtActions } from '@store/actions/mxt';
 import { mxtSelectors } from '@store/selectors/mxt';
-import {
-  handleMessage,
-  MxtObjectStatus,
-  objectSubscriptionFailed,
-  objectSubscriptionStarted,
-  setMetadata,
-} from '@store/slices/mxt';
+import { handleMessage, setMetadata } from '@store/slices/mxt';
+import { MxtDataKey } from '@widgets/DepositCcpTables/const';
 
-import type { MxtMeta } from '@api/websokets/classes/WSMXTStompClient';
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtStompMessage } from '@api/websokets/classes/WSMXTStompClient/types';
-import type { MxtObjectsState } from '@store/slices/mxt';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-import type { Channel } from 'redux-saga';
-import type { SagaGenerator } from 'typed-redux-saga';
+let activeTask: FixedTask<MxtMeta>;
 
-type MxtObjectAction = {
-  payload: MxtDataKey;
-};
-
-const MXT_OBJECTS_LOAD_TIMEOUT_MS = 15000;
-const activeObjectSubscriptions = new Set<MxtDataKey>();
-const defaultCancelChannel = channel<MxtDataKey>();
-
-const getErrorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));
-
-export function* fetchMetadata(): SagaGenerator<MxtMeta> {
-  let metadata = yield* select(mxtSelectors.metadata);
-  yield* call(wsMXTStompClient.activate.bind(wsMXTStompClient));
-
-  if (!metadata) {
-    metadata = yield* call(wsMXTStompClient.requestMeta.bind(wsMXTStompClient));
-    yield* put(setMetadata(metadata));
+function* fetchMetadataWorker() {
+  if (!wsMXTStompClient.isActive) {
+    yield call([wsMXTStompClient, wsMXTStompClient.activate]);
   }
-
-  return metadata;
+  return (yield call([wsMXTStompClient, wsMXTStompClient.requestMeta])) as MxtMeta;
 }
 
-export function* connect() {
-  if (!wsMXTStompClient.isActive) {
-    yield* call(wsMXTStompClient.activate.bind(wsMXTStompClient));
+export function* fetchMetadata() {
+  let metadata = yield* select(mxtSelectors.metadata);
+  if (metadata) {
+    return metadata;
+  }
+  if (!activeTask) {
+    activeTask = yield* fork(fetchMetadataWorker);
   }
+  metadata = yield* join(activeTask);
+  yield* put(setMetadata(metadata));
+  return metadata;
 }
 
-export const createSubscriptionChannel = (objectKey: MxtDataKey, destination: string) =>
-  eventChannel<MxtStompMessage<MxtObject>>((emit) => {
-    const unsubscribe = wsMXTStompClient.subscription(objectKey, destination, emit);
-
+export function createSubscriptionChannel(objectKey: MxtDataKey, destination: string) {
+  return eventChannel<MxtStompMessage<MxtObject>>((emit) => {
+    wsMXTStompClient.subscription(destination, emit);
     return () => {
-      if (typeof unsubscribe === 'function') {
-        unsubscribe();
-      }
       wsMXTStompClient.unsubscribeByKey(objectKey);
     };
   });
+}
+
+const defaultCancelChannel = channel<MxtDataKey>();
 
-export function* unsubscribeObjectState(
-  { payload }: MxtObjectAction,
-  cancelChannel: Channel<MxtDataKey> = defaultCancelChannel,
-) {
+export function* unsubscribeObjectState({ payload }: { payload: MxtDataKey }, cancelChannel: Channel<MxtDataKey>) {
   yield* call(cancelChannel.put, payload);
 }
 
-export function* subscribeObjectState(
-  { payload: objectKey }: MxtObjectAction,
-  cancelChannel: Channel<MxtDataKey> = defaultCancelChannel,
-) {
-  if (activeObjectSubscriptions.has(objectKey)) {
-    return;
+export function* subscribeObjectState({ payload }: { payload: MxtDataKey }, cancelChannel: Channel<MxtDataKey>) {
+  const objectKey = payload;
+  const metadata = yield* call(fetchMetadata);
+  const destination = metadata?.objects[objectKey]?.subscription.destination;
+  if (!destination) {
+    return Promise.reject(new Error(`MXT destination absent for ${objectKey}.`));
   }
-
-  activeObjectSubscriptions.add(objectKey);
-  yield* put(objectSubscriptionStarted(objectKey));
-
-  let messageChannel: ReturnType<typeof eventChannel<MxtStompMessage<MxtObject>>> | undefined;
-
+  const messageChannel = yield* call(createSubscriptionChannel, objectKey, destination);
   try {
-    const metadata = yield* call(fetchMetadata);
-    const destination = metadata.objects[objectKey]?.subscription.destination;
-
-    if (!destination) {
-      throw new Error(`MXT destination absent for ${objectKey}.`);
-    }
-
-    messageChannel = yield* call(createSubscriptionChannel, objectKey, destination);
-
     while (true) {
-      const { cancelKey, message } = yield* race({
+      const { message, cancelKey } = yield* race({
         message: take(messageChannel),
         cancelKey: take(cancelChannel),
       });
-
       if (cancelKey === objectKey) {
         break;
       }
-
       if (message) {
         yield* put(handleMessage({ objectKey, message }));
-
-        if (message.messageType === MxtMessageType.ERROR) {
-          throw new Error(`MXT subscription failed: ${objectKey}`);
-        }
       }
     }
-  } catch (error) {
-    yield* put(
-      objectSubscriptionFailed({
-        objectKey,
-        error: getErrorMessage(error),
-      }),
-    );
   } finally {
-    messageChannel?.close();
-    activeObjectSubscriptions.delete(objectKey);
-  }
-}
-
-export function* ensureMxtObjectsLoaded(
-  objectKeys: readonly MxtDataKey[],
-  timeoutMs = MXT_OBJECTS_LOAD_TIMEOUT_MS,
-): SagaGenerator<MxtObjectsState> {
-  yield* call(fetchMetadata);
-
-  const objectStatesSelector = mxtSelectors.getObjectStates(objectKeys);
-  const objectsSelector = mxtSelectors.getObjectsData([...objectKeys]);
-  const initialStates = yield* select(objectStatesSelector);
-  const objectKeysToSubscribe = objectKeys.filter((objectKey) => {
-    const status = initialStates[objectKey]?.status;
-
-    return status !== MxtObjectStatus.Loading && status !== MxtObjectStatus.Loaded;
-  });
-
-  yield* all(objectKeysToSubscribe.map((objectKey) => put(mxtActions.subscribeObjectState(objectKey))));
-
-  const deadline = Date.now() + timeoutMs;
-
-  while (true) {
-    const objectStates = yield* select(objectStatesSelector);
-    const failedObjectKey = objectKeys.find((objectKey) => objectStates[objectKey]?.status === MxtObjectStatus.Error);
-
-    if (failedObjectKey) {
-      throw new Error(objectStates[failedObjectKey]?.error ?? `MXT subscription failed: ${failedObjectKey}`);
-    }
-
-    if (objectKeys.every((objectKey) => objectStates[objectKey]?.status === MxtObjectStatus.Loaded)) {
-      return yield* select(objectsSelector);
-    }
-
-    const remainingTime = deadline - Date.now();
-
-    if (remainingTime <= 0) {
-      throw new Error(`MXT objects load timeout: ${objectKeys.join(', ')}`);
-    }
-
-    const result = yield* race({
-      stateChanged: take([handleMessage.type, objectSubscriptionFailed.type]),
-      timeout: delay(remainingTime),
-    });
-
-    if (result.timeout) {
-      throw new Error(`MXT objects load timeout: ${objectKeys.join(', ')}`);
+    if (messageChannel) {
+      messageChannel.close();
     }
   }
 }
 
 export function* mxtSagas() {
-  yield* all([
+  yield all([
     takeEvery(mxtActions.fetchMetadata, fetchMetadata),
-    takeEvery(mxtActions.subscribeObjectState, function* subscribeObjectStateWorker(action) {
-      yield* subscribeObjectState(action, defaultCancelChannel);
-    }),
-    takeEvery(mxtActions.unsubscribeObjectState, function* unsubscribeObjectStateWorker(action) {
-      yield* unsubscribeObjectState(action, defaultCancelChannel);
-    }),
+    takeEvery(mxtActions.subscribeObjectState, (action) =>
+      subscribeObjectState({ payload: action.payload }, defaultCancelChannel),
+    ),
+    takeEvery(mxtActions.unsubscribeObjectState, (action) =>
+      unsubscribeObjectState({ payload: action.payload }, defaultCancelChannel),
+    ),
   ]);
 }
diff --git a/src/store/sagas/notifications.ts b/src/store/sagas/notifications.ts
index a55baa48c..396e4937f 100644
--- a/src/store/sagas/notifications.ts
+++ b/src/store/sagas/notifications.ts
@@ -199,20 +199,26 @@ function* processSubscriptionsSaga() {
     yield call(unsubscribe);
   }
 
+  yield* call(WebPushManager.wakeUpSW);
+
   const haveRealSubscription = yield* call(WebPushManager.checkPushDeviceRealSubcription);
 
-  const isAllOkWithSubscription = haveRealSubscription && deviceHaveWebPushSubscription;
+  const isAllOkWithSubscription = haveRealSubscription && deviceHaveWebPushSubscription && false;
 
   // Если есть разрешения браузера на показ, пользователь разрешил и у него нет подписки то подписываемся
   const needToInitSubscription =
     Notification.permission === 'granted' && userAllowNotifications && !isAllOkWithSubscription;
 
+  const silentNotification = Notification.permission === 'granted' && userAllowNotifications
+
   if (needToInitSubscription) {
     const clientId: string | null = yield* select(userTRIdSelector);
     if (clientId) {
       try {
         yield call(WebPushManager.subscribe, clientId);
-        toast.success('Теперь вам доступны пуши');
+        if (!silentNotification) {
+          toast.success('Теперь вам доступны пуши');
+        }
       } catch (error) {
         // eslint-disable-next-line no-console -- тестирование
         console.log(error);
diff --git a/src/store/sagas/tradeJournal/__tests__/tradeJournalApiRequests.test.ts b/src/store/sagas/tradeJournal/__tests__/tradeJournalApiRequests.test.ts
index 806a7c39f..5ac3b0f85 100644
--- a/src/store/sagas/tradeJournal/__tests__/tradeJournalApiRequests.test.ts
+++ b/src/store/sagas/tradeJournal/__tests__/tradeJournalApiRequests.test.ts
@@ -3,43 +3,22 @@
 import { expectSaga } from 'redux-saga-test-plan';
 
 import { tradeJournalController } from '@api/controllers/tradeJournalController';
-import { toaster } from '@components/Toast';
 import { closeModalRequested } from '@store/actions/modal';
 import { requestFailure, requestFinish, requestStart } from '@store/slices/requestStatus';
-import {
-  TCreateTicketFromZero,
-  TPatchOfferData,
-  TQuotation,
-  TRejectOfferOrQuotationRequestProps,
-  TSagaProps,
-} from 'types/TradeJournal';
-
-import {
-  createRFQModalRequest,
-  createTicketRequest,
-  rejectOfferOrQuotationRequest,
-  sendOfferRequest,
-} from '../tradeJournalApiRequests';
+import { TPatchOfferData, TQuotation, TRejectOfferOrQuotationRequestProps, TSagaProps } from 'types/TradeJournal';
+
+import { createRFQModalRequest, rejectOfferOrQuotationRequest, sendOfferRequest } from '../tradeJournalApiRequests';
 
 jest.mock('@api/controllers/tradeJournalController', () => ({
   tradeJournalController: {
     postQuotation: jest.fn(),
-    postTicket: jest.fn(),
     patchOffer: jest.fn(),
     patchRejectOffer: jest.fn(),
     patchRejectQuotation: jest.fn(),
   },
 }));
 
-jest.mock('@components/Toast', () => ({
-  toaster: {
-    success: jest.fn(),
-    error: jest.fn(),
-  },
-}));
-
 const mockedTradeJournalController = tradeJournalController as jest.Mocked<typeof tradeJournalController>;
-const mockedToaster = toaster as jest.Mocked<typeof toaster>;
 
 describe('tradeJournalApiRequests', () => {
   beforeEach(() => {
@@ -68,8 +47,6 @@ describe('tradeJournalApiRequests', () => {
         offer: [],
       },
       createdAt: '2026-04-16T10:00:00',
-      comment1: null,
-      comment2: null,
     };
 
     it('should return false when body is falsy', () => {
@@ -88,41 +65,20 @@ describe('tradeJournalApiRequests', () => {
       expect(gen.next().done).toBe(true);
     });
 
-    it('should return false when body is empty object', () => {
-      const gen = createRFQModalRequest({} as TQuotation);
-      const result = gen.next();
-
-      expect(result.value).not.toBeNull();
-      expect(gen.next().done).toBe(false);
-    });
-
     it('should dispatch requestStart with createRFQModal', () => {
-      mockedTradeJournalController.postQuotation.mockResolvedValue({ data: { id: 1 } } as never);
+      mockedTradeJournalController.postQuotation.mockResolvedValue({} as never);
 
       expectSaga(createRFQModalRequest, mockQuotation).put(requestStart('createRFQModal')).run();
     });
 
     it('should dispatch requestFinish on success', () => {
-      mockedTradeJournalController.postQuotation.mockResolvedValue({ data: { id: 1 } } as never);
+      mockedTradeJournalController.postQuotation.mockResolvedValue({} as never);
 
       expectSaga(createRFQModalRequest, mockQuotation).put(requestFinish('createRFQModal')).run();
     });
 
-    it('should call toaster.success with correct message on success', () => {
-      mockedTradeJournalController.postQuotation.mockResolvedValue({ data: { id: 123 } } as never);
-
-      return expectSaga(createRFQModalRequest, mockQuotation)
-        .run()
-        .then(() => {
-          expect(mockedToaster.success).toHaveBeenCalledWith({
-            title: 'Котировка №123 успешно создана',
-            message: 'Вы можете посмотреть ее на вкладке "Запросы котировок" виджета "Журнал торговых операций"',
-          });
-        });
-    });
-
     it('should return true on success', () => {
-      mockedTradeJournalController.postQuotation.mockResolvedValue({ data: { id: 1 } } as never);
+      mockedTradeJournalController.postQuotation.mockResolvedValue({} as never);
 
       expectSaga(createRFQModalRequest, mockQuotation).returns(true).run();
     });
@@ -145,143 +101,6 @@ describe('tradeJournalApiRequests', () => {
 
       expectSaga(createRFQModalRequest, mockQuotation).returns(false).run();
     });
-
-    it('should not call toaster on error', () => {
-      mockedTradeJournalController.postQuotation.mockRejectedValue(new Error('API Error'));
-
-      return expectSaga(createRFQModalRequest, mockQuotation)
-        .run()
-        .then(() => {
-          expect(mockedToaster.success).not.toHaveBeenCalled();
-        });
-    });
-
-    it('should handle different quotation ids in toaster message', () => {
-      mockedTradeJournalController.postQuotation.mockResolvedValue({ data: { id: 999 } } as never);
-
-      return expectSaga(createRFQModalRequest, mockQuotation)
-        .run()
-        .then(() => {
-          expect(mockedToaster.success).toHaveBeenCalledWith(
-            expect.objectContaining({
-              title: expect.stringContaining('999'),
-            }),
-          );
-        });
-    });
-  });
-
-  describe('createTicketRequest', () => {
-    const mockTicketData: TCreateTicketFromZero = {
-      product: 'deposit',
-      direction: 'INWARD',
-      volume: '500000',
-      currency1: 'USD',
-      startDate: '2026-04-16',
-      endDate: '2026-04-20',
-      account: 'account-123',
-      contacts: ['contact1', 'contact2'],
-      baseRate: 4.5,
-      minRateStep: 0.01,
-    };
-
-    it('should return false when body is falsy', () => {
-      const gen = createTicketRequest(null as unknown as TCreateTicketFromZero);
-      const result = gen.next();
-
-      expect(result.value).toBe(false);
-      expect(gen.next().done).toBe(true);
-    });
-
-    it('should return false when body is undefined', () => {
-      const gen = createTicketRequest(undefined as unknown as TCreateTicketFromZero);
-      const result = gen.next();
-
-      expect(result.value).toBe(false);
-      expect(gen.next().done).toBe(true);
-    });
-
-    it('should return false when body is empty object', () => {
-      const gen = createTicketRequest({} as TCreateTicketFromZero);
-      const result = gen.next();
-
-      expect(result.value).not.toBeNull();
-      expect(gen.next().done).toBe(false);
-    });
-
-    it('should dispatch requestStart with createTicketModal', () => {
-      mockedTradeJournalController.postTicket.mockResolvedValue({ data: { serial: 1 } } as never);
-
-      expectSaga(createTicketRequest, mockTicketData).put(requestStart('createTicketModal')).run();
-    });
-
-    it('should dispatch requestFinish on success', () => {
-      mockedTradeJournalController.postTicket.mockResolvedValue({ data: { serial: 1 } } as never);
-
-      expectSaga(createTicketRequest, mockTicketData).put(requestFinish('createTicketModal')).run();
-    });
-
-    it('should call toaster.success with correct message on success', () => {
-      mockedTradeJournalController.postTicket.mockResolvedValue({ data: { serial: 456 } } as never);
-
-      return expectSaga(createTicketRequest, mockTicketData)
-        .run()
-        .then(() => {
-          expect(mockedToaster.success).toHaveBeenCalledWith({
-            title: 'Тикет №456 успешно создан',
-            message: 'Вы можете посмотреть его на вкладке "Тикеты" виджета "Журнал торговых операций"',
-          });
-        });
-    });
-
-    it('should return true on success', () => {
-      mockedTradeJournalController.postTicket.mockResolvedValue({ data: { serial: 1 } } as never);
-
-      expectSaga(createTicketRequest, mockTicketData).returns(true).run();
-    });
-
-    it('should dispatch requestFailure on error', () => {
-      mockedTradeJournalController.postTicket.mockRejectedValue(new Error('API Error'));
-
-      expectSaga(createTicketRequest, mockTicketData)
-        .put(
-          requestFailure({
-            error: 'Не удалось создать Тикет. Пожалуйста, попробуйте еще раз.',
-            request: 'createTicketModal',
-          }),
-        )
-        .run();
-    });
-
-    it('should return false on error', () => {
-      mockedTradeJournalController.postTicket.mockRejectedValue(new Error('API Error'));
-
-      expectSaga(createTicketRequest, mockTicketData).returns(false).run();
-    });
-
-    it('should not call toaster on error', () => {
-      mockedTradeJournalController.postTicket.mockRejectedValue(new Error('API Error'));
-
-      return expectSaga(createTicketRequest, mockTicketData)
-        .run()
-        .then(() => {
-          expect(mockedToaster.success).not.toHaveBeenCalled();
-        });
-    });
-
-    it('should handle different ticket serials in toaster message', () => {
-      mockedTradeJournalController.postTicket.mockResolvedValue({ data: { serial: 789 } } as never);
-
-      return expectSaga(createTicketRequest, mockTicketData)
-        .run()
-        .then(() => {
-          expect(mockedToaster.success).toHaveBeenCalledWith(
-            expect.objectContaining({
-              title: expect.stringContaining('789'),
-            }),
-          );
-        });
-    });
   });
 
   describe('sendOfferRequest', () => {
@@ -289,8 +108,6 @@ describe('tradeJournalApiRequests', () => {
       id: 1,
       volume: 1000000,
       baseRate: 5.5,
-      comment1: null,
-      comment2: null,
     };
 
     it('should return false when body is falsy', () => {
@@ -309,14 +126,6 @@ describe('tradeJournalApiRequests', () => {
       expect(gen.next().done).toBe(true);
     });
 
-    it('should return false when body is empty object', () => {
-      const gen = sendOfferRequest({} as TPatchOfferData);
-      const result = gen.next();
-
-      expect(result.value).not.toBeNull();
-      expect(gen.next().done).toBe(false);
-    });
-
     it('should dispatch requestStart with viewDetailsModal', () => {
       mockedTradeJournalController.patchOffer.mockResolvedValue({} as never);
 
@@ -381,7 +190,7 @@ describe('tradeJournalApiRequests', () => {
       quotationCurrency: 'string',
     };
 
-    describe('input validation', () => {
+    describe('offer type', () => {
       it('should return false when body is falsy', () => {
         const gen = rejectOfferOrQuotationRequest(null as unknown as TRejectOfferOrQuotationRequestProps);
         const result = gen.next();
@@ -397,9 +206,7 @@ describe('tradeJournalApiRequests', () => {
         expect(result.value).toBe(false);
         expect(gen.next().done).toBe(true);
       });
-    });
 
-    describe('offer type', () => {
       it('should dispatch requestStart with rejectModal', () => {
         mockedTradeJournalController.patchRejectOffer.mockResolvedValue({} as never);
 
@@ -483,41 +290,12 @@ describe('tradeJournalApiRequests', () => {
     });
 
     describe('quotation type', () => {
-      it('should dispatch requestStart with rejectModal', () => {
-        mockedTradeJournalController.patchRejectQuotation.mockResolvedValue({} as never);
-
-        expectSaga(rejectOfferOrQuotationRequest, mockQuotationProps).put(requestStart('rejectModal')).run();
-      });
-
-      it('should dispatch requestFinish on success', () => {
-        mockedTradeJournalController.patchRejectQuotation.mockResolvedValue({} as never);
-
-        expectSaga(rejectOfferOrQuotationRequest, mockQuotationProps).put(requestFinish('rejectModal')).run();
-      });
-
       it('should call closeModalRequested when modalId is provided', () => {
         mockedTradeJournalController.patchRejectQuotation.mockResolvedValue({} as never);
 
         expectSaga(rejectOfferOrQuotationRequest, mockQuotationProps).call(closeModalRequested, 'modal-2').run();
       });
 
-      it('should not call closeModalRequested when modalId is not provided', () => {
-        mockedTradeJournalController.patchRejectQuotation.mockResolvedValue({} as never);
-
-        const propsWithoutModalId: TSagaProps = {
-          quotationId: 456,
-          widgetId: 1,
-          type: 'quotation',
-          instrName: 'string',
-          quotationCreatedAt: 'string',
-          direction: 'INWARD',
-          quotationVolume: 'string',
-          quotationCurrency: 'string',
-        };
-
-        expectSaga(rejectOfferOrQuotationRequest, propsWithoutModalId).not.call(closeModalRequested, 'modal-2').run();
-      });
-
       it('should return true on success', () => {
         mockedTradeJournalController.patchRejectQuotation.mockResolvedValue({} as never);
 
@@ -542,12 +320,6 @@ describe('tradeJournalApiRequests', () => {
 
         expectSaga(rejectOfferOrQuotationRequest, mockQuotationProps).returns(false).run();
       });
-
-      it('should not call closeModalRequested when API call fails', () => {
-        mockedTradeJournalController.patchRejectQuotation.mockRejectedValue(new Error('API Error'));
-
-        expectSaga(rejectOfferOrQuotationRequest, mockQuotationProps).not.call(closeModalRequested, 'modal-2').run();
-      });
     });
 
     describe('without modalId', () => {
diff --git a/src/store/sagas/tradeJournal/__tests__/viewDetailsModalSaga.test.ts b/src/store/sagas/tradeJournal/__tests__/viewDetailsModalSaga.test.ts
index 94eda4e86..16a60834a 100644
--- a/src/store/sagas/tradeJournal/__tests__/viewDetailsModalSaga.test.ts
+++ b/src/store/sagas/tradeJournal/__tests__/viewDetailsModalSaga.test.ts
@@ -75,13 +75,7 @@ describe('viewDetailsModalSaga', () => {
 describe('viewDetailsModalSave action', () => {
   it('should match viewDetailsModalSave action', () => {
     const action = viewDetailsModalSave({
-      offer: {
-        id: 1,
-        volume: 1000000,
-        baseRate: 5.5,
-        comment1: null,
-        comment2: null,
-      },
+      offer: { id: 1, volume: 1000000, baseRate: 5.5 },
       quotationData: {
         id: 123,
         currency: 'RUB',
@@ -93,20 +87,14 @@ describe('viewDetailsModalSave action', () => {
 
     expect(viewDetailsModalSave.match(action)).toBe(true);
     expect(action.payload).toEqual({
-      offer: { id: 1, volume: 1000000, baseRate: 5.5, comment1: null, comment2: null },
+      offer: { id: 1, volume: 1000000, baseRate: 5.5 },
       quotationData: { id: 123, currency: 'RUB', direction: 'INWARD', instrName: 'deposit', quotationOwnerTrId: '' },
     });
   });
 
   it('should include offer with all fields', () => {
     const action = viewDetailsModalSave({
-      offer: {
-        id: 1,
-        volume: 500000,
-        baseRate: 4.2,
-        comment1: null,
-        comment2: null,
-      },
+      offer: { id: 1, volume: 500000, baseRate: 4.2 },
       quotationData: {
         id: 456,
         currency: 'USD',
@@ -127,8 +115,6 @@ describe('viewDetailsModalSave action', () => {
         id: 1,
         volume: 1000000,
         baseRate: null,
-        comment1: null,
-        comment2: null,
       },
       quotationData: {
         id: 789,
@@ -242,7 +228,7 @@ describe('sendOfferRequest', () => {
   });
 
   it('should be called with correct offer data', () => {
-    const offerData = { id: 1, volume: 1000000, baseRate: 5.5, comment1: null, comment2: null };
+    const offerData = { id: 1, volume: 1000000, baseRate: 5.5 };
     mockSendOfferRequest.mockResolvedValue(true as never);
 
     mockSendOfferRequest(offerData);
@@ -251,7 +237,7 @@ describe('sendOfferRequest', () => {
   });
 
   it('should be called with offer without baseRate', () => {
-    const offerData = { id: 1, volume: 500000, baseRate: null, comment1: null, comment2: null };
+    const offerData = { id: 1, volume: 500000, baseRate: null };
     mockSendOfferRequest.mockResolvedValue(true as never);
 
     mockSendOfferRequest(offerData);
diff --git a/src/store/sagas/tradeJournal/createTicketModalSaga.ts b/src/store/sagas/tradeJournal/createTicketModalSaga.ts
index 69c8a5cad..a9277826d 100644
--- a/src/store/sagas/tradeJournal/createTicketModalSaga.ts
+++ b/src/store/sagas/tradeJournal/createTicketModalSaga.ts
@@ -4,17 +4,19 @@ import { closeModalRequested } from '@store/actions/modal';
 
 import { createTicketModalSave, openCreateTicketModalRequested } from '@store/actions/tradeJournal';
 
+import { TQuotation } from 'types/TradeJournal';
+
 import { SagaHandlers, SagaResult } from '../types/modals';
 import { closeHandler, runFlow, runModal } from '../utils/modals';
 
-import { createTicketRequest } from './tradeJournalApiRequests';
+import { createRFQModalRequest } from './tradeJournalApiRequests';
 
 const handlers: SagaHandlers = {
   [closeModalRequested.type]: closeHandler,
   *[createTicketModalSave.type](action) {
     if (createTicketModalSave.match(action)) {
       const body = action.payload;
-      const success = yield* createTicketRequest(body);
+      const success = yield* createRFQModalRequest(body as unknown as TQuotation);
 
       return success ? SagaResult.Close : SagaResult.Continue;
     }
diff --git a/src/store/sagas/tradeJournal/index.ts b/src/store/sagas/tradeJournal/index.ts
index 7908576ca..57e6bcf32 100644
--- a/src/store/sagas/tradeJournal/index.ts
+++ b/src/store/sagas/tradeJournal/index.ts
@@ -3,7 +3,6 @@ import { all, fork } from 'typed-redux-saga';
 import { watchCreateRFQModal } from './createRFQModalSaga';
 import { watchCreateTicketModal } from './createTicketModalSaga';
 import { watchRejectModal } from './RejectModalSaga';
-import { watchViewCommentModal } from './viewCommentModalSaga';
 import { watchViewDetailsModal } from './viewDetailsModalSaga';
 
 export function* tradeJournalSaga() {
@@ -12,6 +11,5 @@ export function* tradeJournalSaga() {
     fork(watchViewDetailsModal),
     fork(watchRejectModal),
     fork(watchCreateTicketModal),
-    fork(watchViewCommentModal),
   ]);
 }
diff --git a/src/store/sagas/tradeJournal/tradeJournalApiRequests.ts b/src/store/sagas/tradeJournal/tradeJournalApiRequests.ts
index 1f9f13201..034496b63 100644
--- a/src/store/sagas/tradeJournal/tradeJournalApiRequests.ts
+++ b/src/store/sagas/tradeJournal/tradeJournalApiRequests.ts
@@ -4,12 +4,7 @@ import { tradeJournalController } from '@api/controllers/tradeJournalController'
 import { toaster } from '@components/Toast';
 import { closeModalRequested } from '@store/actions/modal';
 import { requestFailure, requestFinish, requestStart } from '@store/slices/requestStatus';
-import {
-  TCreateTicketFromZero,
-  TPatchOfferData,
-  TQuotation,
-  TRejectOfferOrQuotationRequestProps,
-} from 'types/TradeJournal';
+import { TPatchOfferData, TQuotation, TRejectOfferOrQuotationRequestProps } from 'types/TradeJournal';
 
 export function* createRFQModalRequest(body: TQuotation) {
   if (!body) {
@@ -43,38 +38,6 @@ export function* createRFQModalRequest(body: TQuotation) {
   }
 }
 
-export function* createTicketRequest(body: TCreateTicketFromZero) {
-  if (!body) {
-    return false;
-  }
-
-  yield put(requestStart('createTicketModal'));
-
-  try {
-    const {
-      data: { serial },
-    } = yield* call(() => tradeJournalController.postTicket(body));
-
-    yield put(requestFinish('createTicketModal'));
-
-    toaster.success({
-      title: `Тикет №${serial} успешно создан`,
-      message: 'Вы можете посмотреть его на вкладке "Тикеты" виджета "Журнал торговых операций"',
-    });
-
-    return true;
-  } catch (error) {
-    yield put(
-      requestFailure({
-        error: 'Не удалось создать Тикет. Пожалуйста, попробуйте еще раз.',
-        request: 'createTicketModal',
-      }),
-    );
-
-    return false;
-  }
-}
-
 export function* sendOfferRequest(body: TPatchOfferData) {
   if (!body) {
     return false;
diff --git a/src/store/sagas/tradeJournal/viewCommentModalSaga.ts b/src/store/sagas/tradeJournal/viewCommentModalSaga.ts
deleted file mode 100644
index be99e06dd..000000000
--- a/src/store/sagas/tradeJournal/viewCommentModalSaga.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { takeLeading } from 'typed-redux-saga';
-
-import { closeModalRequested } from '@store/actions/modal';
-
-import { openViewCommentModalRequested } from '@store/actions/tradeJournal';
-
-import { SagaHandlers } from '../types/modals';
-import { closeHandler, runFlow, runModal } from '../utils/modals';
-
-const handlers: SagaHandlers = {
-  [closeModalRequested.type]: closeHandler,
-};
-
-function* ViewCommentModalSaga(flowId: string, payload: ReturnType<typeof openViewCommentModalRequested>['payload']) {
-  yield* runModal(handlers, flowId, { type: 'ViewCommentModal', props: payload });
-}
-
-function* ViewCommentModalFlow({ payload }: ReturnType<typeof openViewCommentModalRequested>) {
-  yield* runFlow(ViewCommentModalSaga, payload);
-}
-
-export function* watchViewCommentModal() {
-  yield takeLeading(openViewCommentModalRequested, ViewCommentModalFlow);
-}
diff --git a/src/store/sagas/user/index.ts b/src/store/sagas/user/index.ts
index 404e133fd..bcaf95ce2 100644
--- a/src/store/sagas/user/index.ts
+++ b/src/store/sagas/user/index.ts
@@ -1,8 +1,7 @@
-import { call, fork, put, select } from 'typed-redux-saga';
+import { call, put, select } from 'typed-redux-saga';
 
 import { ntbTradingRequestsController } from '@api/controllers/ntbController';
 import api from '@api/index';
-import { tradeTimePermissionsStream } from '@api/websokets/streams/tradeTimePermissionsStream';
 import features from '@features';
 import { USER_TRADING_ACCESSES_VALID_ERROR_CODES } from '@modules/ntb/constants';
 import { isNtbUserSelector } from '@store/selectors/user';
@@ -10,8 +9,6 @@ import { setIsClampedSidebar, setSidebarOpen } from '@store/slices/sidebarConfig
 import { setUserInfo, setUserPermissions, setUserSettings, setUserTradingAccess } from '@store/slices/user';
 import { robustRequest } from '@utils/robustRequest';
 
-import { tradeTimePermissionsSaga } from './tradeTimePermissionsSaga';
-
 export function* requestUserInfoAndSettingsSaga() {
   // TODO: нужно отслеживать что у пользователя нет прав. Бэк присылает 500
   const userInfoResult = yield* call(() => robustRequest(api.getCurrentUserInfo));
@@ -44,7 +41,6 @@ export function* requestUserTradingAccessesSaga() {
         robustRequest(ntbTradingRequestsController.getUserTradingAccesses, USER_TRADING_ACCESSES_VALID_ERROR_CODES),
       );
       yield* put(setUserTradingAccess(response.data));
-      yield* fork(tradeTimePermissionsSaga, tradeTimePermissionsStream);
     } catch {
       /** */
     }
diff --git a/src/store/sagas/user/tradeTimePermissionsSaga.ts b/src/store/sagas/user/tradeTimePermissionsSaga.ts
deleted file mode 100644
index 372c2bd91..000000000
--- a/src/store/sagas/user/tradeTimePermissionsSaga.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { call, put, take } from 'typed-redux-saga';
-
-import { updateTradeTimePermissions } from '@store/slices/user';
-
-import { createStompChannel } from '../utils/createStompChannel';
-
-import type {
-  TradeTimePermissionsMessage,
-  TradeTimePermissionsStream,
-} from '@api/websokets/streams/tradeTimePermissionsStream/types';
-import type { EventChannel } from 'redux-saga';
-
-export function* tradeTimePermissionsListenSaga(channel: EventChannel<TradeTimePermissionsMessage>) {
-  while (true) {
-    try {
-      const message = yield* take(channel);
-      yield* put(updateTradeTimePermissions(message));
-    } catch (error) {
-      console.error(error);
-    }
-  }
-}
-
-export function* tradeTimePermissionsSaga(stream: TradeTimePermissionsStream) {
-  const channel = yield* call(createStompChannel<TradeTimePermissionsMessage>, stream);
-  try {
-    yield call(tradeTimePermissionsListenSaga, channel);
-  } finally {
-    channel.close();
-  }
-}
diff --git a/src/store/sagas/utils/mxtFormConfirm.ts b/src/store/sagas/utils/mxtFormConfirm.ts
deleted file mode 100644
index 6a3bd4b55..000000000
--- a/src/store/sagas/utils/mxtFormConfirm.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { AnyAction } from '@reduxjs/toolkit';
-import { call, put, take } from 'typed-redux-saga';
-
-import { modalFlowService } from '@modules/ModalService/modalFlowService';
-import { closeModalRequested } from '@store/actions/modal';
-import { mxtFormConfirmAccepted } from '@store/actions/mxtFormConfirm';
-
-import { SagaResult } from '../types/modals';
-
-import type { MxtFormConfirmModalProps } from '@modules/MXTForms/shared/confirm';
-
-type MxtFormConfirmModalState = Omit<MxtFormConfirmModalProps, 'id' | 'onClose' | 'onConfirm' | 'onCancel'>;
-
-type SubmitHandler<TPayload> = (payload: TPayload) => Generator<unknown, SagaResult, unknown>;
-
-type RunMxtFormConfirmParams<TPayload> = {
-  flowId: string;
-  modalProps: MxtFormConfirmModalState;
-  submitPayload: TPayload;
-  resetAction: AnyAction;
-  submit: SubmitHandler<TPayload>;
-};
-
-const isConfirmCloseAction = (action: AnyAction, modalId: string) =>
-  closeModalRequested.match(action) && action.payload === modalId;
-
-const isParentCloseAction = (action: AnyAction, formId: string) =>
-  closeModalRequested.match(action) && action.payload === formId;
-
-const isConfirmAcceptedAction = (action: AnyAction, modalId: string, formId: string) =>
-  mxtFormConfirmAccepted.match(action) && action.payload.modalId === modalId && action.payload.formId === formId;
-
-export function* runMxtFormConfirm<TPayload>({
-  flowId,
-  modalProps,
-  submitPayload,
-  resetAction,
-  submit,
-}: RunMxtFormConfirmParams<TPayload>) {
-  const confirmModalId = yield* call(() =>
-    modalFlowService.open(flowId, {
-      type: 'MxtFormConfirmModal',
-      props: modalProps,
-    }),
-  );
-
-  while (true) {
-    const action = yield* take([closeModalRequested.type, mxtFormConfirmAccepted.type]);
-
-    if (isConfirmCloseAction(action, confirmModalId)) {
-      yield* put(resetAction);
-      yield* call(modalFlowService.close, flowId);
-
-      return SagaResult.Continue;
-    }
-
-    if (isParentCloseAction(action, modalProps.formId)) {
-      yield* call(modalFlowService.close, flowId);
-
-      return SagaResult.Close;
-    }
-
-    if (isConfirmAcceptedAction(action, confirmModalId, modalProps.formId)) {
-      const result = yield* submit(submitPayload);
-
-      if (result === SagaResult.Close) {
-        yield* call(modalFlowService.close, flowId);
-
-        return SagaResult.Close;
-      }
-    }
-  }
-}
diff --git a/src/store/selectors/addressDepositForm.ts b/src/store/selectors/addressDepositForm.ts
deleted file mode 100644
index 00380860e..000000000
--- a/src/store/selectors/addressDepositForm.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { RootState } from '@store/store';
-
-const DEFAULT_SUBMIT_STATE = {
-  loading: false,
-  error: null,
-};
-
-export const addressDepositFormSubmitSelector = (formId: string) => (state: RootState) =>
-  state.addressDepositForm.submit[formId] ?? DEFAULT_SUBMIT_STATE;
diff --git a/src/store/selectors/depositForm.ts b/src/store/selectors/depositForm.ts
deleted file mode 100644
index 3c35b82dc..000000000
--- a/src/store/selectors/depositForm.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { RootState } from '@store/store';
-
-const DEFAULT_DATA_STATE = {
-  loading: false,
-  error: null,
-  data: undefined,
-};
-
-const DEFAULT_SUBMIT_STATE = {
-  loading: false,
-  error: null,
-};
-
-export const depositFormDataSelector = (formId: string) => (state: RootState) =>
-  state.depositForm.data[formId] ?? DEFAULT_DATA_STATE;
-
-export const depositFormSubmitSelector = (formId: string) => (state: RootState) =>
-  state.depositForm.submit[formId] ?? DEFAULT_SUBMIT_STATE;
diff --git a/src/store/selectors/mxt.ts b/src/store/selectors/mxt.ts
index 1b03bc625..92e6b8436 100644
--- a/src/store/selectors/mxt.ts
+++ b/src/store/selectors/mxt.ts
@@ -1,18 +1,12 @@
 import { createSelector } from '@reduxjs/toolkit';
 
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type {
-  MxtEnumMeta,
-  MxtEnumValue,
-  MxtObjectMeta,
-  MxtViewMeta,
-} from '@api/websokets/classes/WSMXTStompClient/types';
-import type { RootState } from '@store/setupStore';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
+import { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
+import { MxtEnumMeta, MxtEnumValue, MxtObjectMeta, MxtViewMeta } from '@api/websokets/classes/WSMXTStompClient/types';
+import { RootState } from '@store/setupStore';
+import { MxtDataKey } from '@widgets/DepositCcpTables/const';
 
 const metadata = (state: RootState) => state.mxtSlice.metadata;
 const objects = (state: RootState) => state.mxtSlice.objects;
-const objectStates = (state: RootState) => state.mxtSlice.objectStates ?? {};
 const metaViews = (state: RootState) => state.mxtSlice.metadata?.views ?? ({} as Record<MxtDataKey, MxtViewMeta>);
 const metaEnums = (state: RootState) => state.mxtSlice.metadata?.enums ?? ({} as Record<string, MxtEnumMeta>);
 const metaObjects = (state: RootState) => state.mxtSlice.metadata?.objects ?? ({} as Record<string, MxtObjectMeta>);
@@ -20,9 +14,6 @@ const metaObjects = (state: RootState) => state.mxtSlice.metadata?.objects ?? ({
 const getObjectData = (objectKey: MxtDataKey) => (state: RootState) => state.mxtSlice.objects[objectKey];
 const getObjectById = (objectKey: MxtDataKey, id: number) => (state: RootState) =>
   state.mxtSlice.objects[objectKey]?.[id];
-const getObjectState = (objectKey: MxtDataKey) => (state: RootState) => state.mxtSlice.objectStates?.[objectKey];
-const getObjectStates = (keys: readonly MxtDataKey[]) =>
-  createSelector([objectStates], (states) => Object.fromEntries(keys.map((key) => [key, states[key]])));
 const getObjectsData = (keys: MxtDataKey[]) =>
   createSelector(
     [objects],
@@ -63,8 +54,6 @@ export const mxtSelectors = {
   metadata,
   getObjectData,
   getObjectById,
-  getObjectState,
-  getObjectStates,
   getObjectsData,
   getViewsMeta,
   getObjectsMeta,
diff --git a/src/store/selectors/user.ts b/src/store/selectors/user.ts
index 328e1f453..2c043333b 100644
--- a/src/store/selectors/user.ts
+++ b/src/store/selectors/user.ts
@@ -1,5 +1,3 @@
-import { createSelector } from '@reduxjs/toolkit';
-
 import { RootState } from '@store/store';
 import { createFieldSelector } from '@store/utils/createFieldSelector';
 import { Permissions } from 'types/User';
@@ -49,12 +47,3 @@ const isTradePermission = (state: RootState) => state.userSlice.info?.isTradePer
 export const formOptionsSelector = createFieldSelector((state) => state.userSlice.formOptions);
 
 export const userTradingAccessesSelector = (state: RootState) => state.userSlice.userTradingAccesses;
-
-export const tradeTimePermissionsSelector = (state: RootState) =>
-  state.userSlice.userTradingAccesses?.tradeTimePermissions;
-
-/** Map, где ключ - key инструмента, а значение - информация о торгах (статус, время) */
-export const tradeTimePermissionsMapSelector = createSelector(
-  [tradeTimePermissionsSelector],
-  (permissions) => new Map(permissions?.map((p) => [p.key, p])),
-);
diff --git a/src/store/setupStore.ts b/src/store/setupStore.ts
index 4b8eaf36c..5b123dfe3 100644
--- a/src/store/setupStore.ts
+++ b/src/store/setupStore.ts
@@ -3,20 +3,15 @@ import { combineReducers, configureStore } from '@reduxjs/toolkit';
 import createSagaMiddleware from 'redux-saga';
 
 // Нужно так для мока саг в тестах
-import commissionReducer from '@modules/MXTForms/shared/commission/model/slice';
-import limitEstimationReducer from '@modules/MXTForms/shared/limitEstimation/model/slice';
-import priceRangeReducer from '@modules/MXTForms/shared/priceRange/model/slice';
 import rootSaga from '@store/sagas';
 
 import { chatSliceMiddleware } from './middlewares/chatSliceMiddleware';
-import addressDepositForm from './slices/addressDepositForm';
 import alertsSlice from './slices/alerts';
 import auth from './slices/auth';
 import cashedData from './slices/cashedData';
 import chatSlice from './slices/chatSlice';
 import coreSlice from './slices/core';
 import curvesSlice from './slices/curves';
-import depositForm from './slices/depositForm';
 import firmsSlice from './slices/firms';
 import glassSlice from './slices/glass';
 import instrumentLists from './slices/instrumentLists';
@@ -50,11 +45,6 @@ const rootReducer = combineReducers({
   localisation,
   widgets,
   rcauth,
-  depositForm,
-  addressDepositForm,
-  formCommission: commissionReducer,
-  formLimitEstimation: limitEstimationReducer,
-  formPriceRange: priceRangeReducer,
   cashedData,
   curvesSlice,
   userSlice,
diff --git a/src/store/slices/__tests__/addressDepositForm.test.ts b/src/store/slices/__tests__/addressDepositForm.test.ts
deleted file mode 100644
index 616f2a0dc..000000000
--- a/src/store/slices/__tests__/addressDepositForm.test.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { addressDepositFormSubmit, addressDepositFormSubmitReset } from '@store/actions/addressDepositForm';
-import addressDepositFormReducer, {
-  addressDepositFormSubmitFailed,
-  addressDepositFormSubmitSucceeded,
-} from '@store/slices/addressDepositForm';
-
-const submitPayload = {
-  formId: 'address-deposit-form-1',
-  lotSize: 100000,
-  values: {
-    accountId: 18839010003,
-    marketplaceId: 1010,
-    partyId: 18838510000,
-    counterPartyId: 651605,
-    collateralIssueId: 620000,
-    fundingDuration: 7,
-    fundingPrice: '14',
-    requestVolume: '1000000',
-    quantity: '10',
-    valueDate: '2026-06-09',
-    clientCode: '',
-  },
-};
-
-describe('addressDepositFormSlice', () => {
-  it('should store submit loading state', () => {
-    const state = addressDepositFormReducer(undefined, addressDepositFormSubmit(submitPayload));
-
-    expect(state.submit['address-deposit-form-1']).toEqual({
-      loading: true,
-      error: null,
-    });
-  });
-
-  it('should store submit result and reset it', () => {
-    const loadingState = addressDepositFormReducer(undefined, addressDepositFormSubmit(submitPayload));
-    const failedState = addressDepositFormReducer(
-      loadingState,
-      addressDepositFormSubmitFailed({
-        formId: 'address-deposit-form-1',
-        error: 'Не удалось отправить заявку',
-      }),
-    );
-    const succeededState = addressDepositFormReducer(
-      failedState,
-      addressDepositFormSubmitSucceeded({ formId: 'address-deposit-form-1' }),
-    );
-    const resetState = addressDepositFormReducer(
-      succeededState,
-      addressDepositFormSubmitReset({ formId: 'address-deposit-form-1' }),
-    );
-
-    expect(failedState.submit['address-deposit-form-1']).toEqual({
-      loading: false,
-      error: 'Не удалось отправить заявку',
-    });
-    expect(succeededState.submit['address-deposit-form-1']).toEqual({
-      loading: false,
-      error: null,
-    });
-    expect(resetState.submit['address-deposit-form-1']).toBeUndefined();
-  });
-});
diff --git a/src/store/slices/__tests__/depositForm.test.ts b/src/store/slices/__tests__/depositForm.test.ts
deleted file mode 100644
index 1daca2be4..000000000
--- a/src/store/slices/__tests__/depositForm.test.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { depositFormSubmit, depositFormSubmitReset } from '@store/actions/depositForm';
-import depositFormReducer, { depositFormSubmitFailed, depositFormSubmitSucceeded } from '@store/slices/depositForm';
-
-describe('depositFormSlice', () => {
-  const submitPayload = {
-    formId: 'deposit-form-1',
-    values: {
-      fundingPrice: '6.04',
-      requestVolume: '1000000',
-      quantity: '10',
-      clientCode: '',
-      timeInForceId: 1 as const,
-      fundingPriceEntryTypeId: 1 as const,
-      calculateSingleLimit: false,
-    },
-  };
-
-  it('should store submit loading state', () => {
-    const state = depositFormReducer(undefined, depositFormSubmit(submitPayload));
-
-    expect(state.submit['deposit-form-1']).toEqual({
-      loading: true,
-      error: null,
-    });
-  });
-
-  it('should store submit error', () => {
-    const loadingState = depositFormReducer(undefined, depositFormSubmit(submitPayload));
-    const state = depositFormReducer(
-      loadingState,
-      depositFormSubmitFailed({
-        formId: 'deposit-form-1',
-        error: 'Не удалось отправить заявку',
-      }),
-    );
-
-    expect(state.submit['deposit-form-1']).toEqual({
-      loading: false,
-      error: 'Не удалось отправить заявку',
-    });
-  });
-
-  it('should clear submit state on success and reset', () => {
-    const loadingState = depositFormReducer(undefined, depositFormSubmit(submitPayload));
-    const successState = depositFormReducer(loadingState, depositFormSubmitSucceeded({ formId: 'deposit-form-1' }));
-    const resetState = depositFormReducer(successState, depositFormSubmitReset({ formId: 'deposit-form-1' }));
-
-    expect(successState.submit['deposit-form-1']).toEqual({
-      loading: false,
-      error: null,
-    });
-    expect(resetState.submit['deposit-form-1']).toBeUndefined();
-  });
-});
diff --git a/src/store/slices/__tests__/mxt.test.ts b/src/store/slices/__tests__/mxt.test.ts
index 436d1891f..3d9edbb8e 100644
--- a/src/store/slices/__tests__/mxt.test.ts
+++ b/src/store/slices/__tests__/mxt.test.ts
@@ -1,112 +1,134 @@
+import { MxtMeta } from '@api/websokets/classes/WSMXTStompClient';
 import { MxtMessageType } from '@api/websokets/classes/WSMXTStompClient/types';
-import reducer, {
-  handleMessage,
-  MxtObjectStatus,
-  objectSubscriptionFailed,
-  objectSubscriptionStarted,
-} from '@store/slices/mxt';
 
-describe('mxt slice', () => {
-  it('accumulates multipart snapshots and marks the object as loaded', () => {
-    let state = reducer(undefined, objectSubscriptionStarted('account'));
+import mxtReducer, { handleMessage, MxtDataState, setMetadata } from '../mxt';
 
-    state = reducer(
-      state,
-      handleMessage({
-        objectKey: 'account',
-        message: {
-          messageType: MxtMessageType.SNAPSHOT,
-          part: 0,
-          partLast: false,
-          data: [{ id: 1, account: 'ACCOUNT-1' }],
-        },
-      }),
-    );
+const TEST_META: MxtMeta = {
+  version: 'test',
+  types: [],
+  views: {},
+  enums: {},
+  objects: {
+    orderMMRepo: {
+      name: 'Orders',
+      nameEng: 'orders_eng',
+      actions: {},
+      fields: {},
+      subscription: {
+        destination: 'order.state',
+        enabled: true,
+        partSize: 123,
+      },
+      subscriptionHistory: {
+        destination: 'order.history',
+        enabled: true,
+        partSize: 123,
+      },
+    },
+  },
+};
 
-    expect(state.objectStates.account?.status).toBe(MxtObjectStatus.Loading);
-
-    state = reducer(
-      state,
-      handleMessage({
-        objectKey: 'account',
-        message: {
-          messageType: MxtMessageType.SNAPSHOT,
-          part: 1,
-          partLast: true,
-          data: [{ id: 2, account: 'ACCOUNT-2' }],
-        },
-      }),
-    );
-
-    expect(state.objectStates.account?.status).toBe(MxtObjectStatus.Loaded);
-    expect(state.objects.account).toEqual({
-      1: { id: 1, account: 'ACCOUNT-1' },
-      2: { id: 2, account: 'ACCOUNT-2' },
+describe('mxtSlice', () => {
+  describe('setMetadata', () => {
+    const state: MxtDataState = {
+      objects: {},
+    };
+    it('when setMetadata expect set', () => {
+      const updatedState = mxtReducer(state, setMetadata(TEST_META));
+      expect(updatedState.metadata).toEqual(TEST_META);
     });
   });
 
-  it('replaces the previous data when a new snapshot starts', () => {
-    let state = reducer(undefined, objectSubscriptionStarted('account'));
+  describe('handleMessage', () => {
+    const TEST_DATA = {
+      1: { id: 1, name: 'test' },
+      2: { id: 2, name: 'test2' },
+    };
 
-    state = reducer(
-      state,
-      handleMessage({
-        objectKey: 'account',
-        message: {
-          messageType: MxtMessageType.SNAPSHOT,
-          part: 0,
-          partLast: true,
-          data: [{ id: 1, account: 'OLD' }],
-        },
-      }),
-    );
-    state = reducer(
-      state,
-      handleMessage({
-        objectKey: 'account',
-        message: {
-          messageType: MxtMessageType.SNAPSHOT,
-          part: 0,
-          partLast: true,
-          data: [{ id: 2, account: 'NEW' }],
-        },
-      }),
-    );
+    const initialState: MxtDataState = {
+      objects: {
+        orderMMRepo: TEST_DATA,
+      },
+    };
 
-    expect(state.objects.account).toEqual({
-      2: { id: 2, account: 'NEW' },
+    it('when SNAPSHOT message expect replace', () => {
+      const updatedState = mxtReducer(
+        initialState,
+        handleMessage({
+          objectKey: 'orderMMRepo',
+          message: {
+            data: [{ id: 1, name: 'snapshot data' }],
+            messageType: MxtMessageType.SNAPSHOT,
+          },
+        }),
+      );
+      expect(updatedState.objects.orderMMRepo).toEqual({
+        1: { id: 1, name: 'snapshot data' },
+      });
     });
-  });
 
-  it('initializes an object collection when an update arrives before a snapshot', () => {
-    const state = reducer(
-      undefined,
-      handleMessage({
-        objectKey: 'account',
-        message: {
-          messageType: MxtMessageType.UPDATE,
-          data: [{ id: 1, account: 'ACCOUNT-1' }],
-        },
-      }),
-    );
+    it('when NEW message expect add', () => {
+      const updatedState = mxtReducer(
+        initialState,
+        handleMessage({
+          objectKey: 'orderMMRepo',
+          message: {
+            data: [{ id: 3, name: 'new data' }],
+            messageType: MxtMessageType.NEW,
+          },
+        }),
+      );
+      expect(updatedState.objects.orderMMRepo).toEqual({
+        ...TEST_DATA,
+        ...{ 3: { id: 3, name: 'new data' } },
+      });
+    });
 
-    expect(state.objects.account).toEqual({
-      1: { id: 1, account: 'ACCOUNT-1' },
+    it('when UPDATE message expect update', () => {
+      const updatedState = mxtReducer(
+        initialState,
+        handleMessage({
+          objectKey: 'orderMMRepo',
+          message: {
+            data: [{ id: 1, name: 'UPDATED' }],
+            messageType: MxtMessageType.UPDATE,
+          },
+        }),
+      );
+      expect(updatedState.objects.orderMMRepo).toEqual({
+        ...TEST_DATA,
+        ...{ 1: { id: 1, name: 'UPDATED' } },
+      });
     });
-  });
 
-  it('stores a subscription error for the requested object', () => {
-    const state = reducer(
-      undefined,
-      objectSubscriptionFailed({
-        objectKey: 'account',
-        error: 'Subscription failed',
-      }),
-    );
+    it('when REMOVE message expect removed', () => {
+      const updatedState = mxtReducer(
+        initialState,
+        handleMessage({
+          objectKey: 'orderMMRepo',
+          message: {
+            data: [{ id: 1, name: 'UPDATED' }],
+            messageType: MxtMessageType.REMOVE,
+          },
+        }),
+      );
+      expect(updatedState.objects.orderMMRepo).toEqual({
+        2: TEST_DATA['2'],
+      });
+    });
 
-    expect(state.objectStates.account).toEqual({
-      status: MxtObjectStatus.Error,
-      error: 'Subscription failed',
+    it('when unknown message do nothing', () => {
+      const updatedState = mxtReducer(
+        initialState,
+        handleMessage({
+          objectKey: 'orderMMRepo',
+          message: {
+            data: [{ id: 1, name: 'UPDATED' }],
+            messageType: 'unknown' as MxtMessageType,
+          },
+        }),
+      );
+      expect(updatedState).toEqual(initialState);
     });
   });
 });
diff --git a/src/store/slices/addressDepositForm.ts b/src/store/slices/addressDepositForm.ts
deleted file mode 100644
index 07f6f7813..000000000
--- a/src/store/slices/addressDepositForm.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { createSlice, PayloadAction } from '@reduxjs/toolkit';
-
-import { addressDepositFormSubmit, addressDepositFormSubmitReset } from '@store/actions/addressDepositForm';
-
-type AddressDepositFormSubmitState = {
-  loading: boolean;
-  error: string | null;
-};
-
-type AddressDepositFormState = {
-  submit: Record<string, AddressDepositFormSubmitState>;
-};
-
-type AddressDepositFormSubmitFailurePayload = {
-  formId: string;
-  error: string;
-};
-
-const initialState: AddressDepositFormState = {
-  submit: {},
-};
-
-const addressDepositFormSlice = createSlice({
-  name: 'addressDepositForm',
-  initialState,
-  reducers: {
-    addressDepositFormSubmitSucceeded: (state, { payload }: PayloadAction<{ formId: string }>) => {
-      state.submit[payload.formId] = {
-        loading: false,
-        error: null,
-      };
-    },
-    addressDepositFormSubmitFailed: (state, { payload }: PayloadAction<AddressDepositFormSubmitFailurePayload>) => {
-      state.submit[payload.formId] = {
-        loading: false,
-        error: payload.error,
-      };
-    },
-  },
-  extraReducers: (builder) => {
-    builder
-      .addCase(addressDepositFormSubmit, (state, { payload }) => {
-        state.submit[payload.formId] = {
-          loading: true,
-          error: null,
-        };
-      })
-      .addCase(addressDepositFormSubmitReset, (state, { payload }) => {
-        delete state.submit[payload.formId];
-      });
-  },
-});
-
-export const { addressDepositFormSubmitFailed, addressDepositFormSubmitSucceeded } = addressDepositFormSlice.actions;
-export default addressDepositFormSlice.reducer;
diff --git a/src/store/slices/chatSlice.ts b/src/store/slices/chatSlice.ts
index efb1abcf5..24c7507a4 100644
--- a/src/store/slices/chatSlice.ts
+++ b/src/store/slices/chatSlice.ts
@@ -732,16 +732,6 @@ const chatSlice = createSlice({
         ...updatedData,
       };
     },
-    setUpdatedValuesInChatById: (
-      state,
-      { payload }: PayloadAction<{ chatId: string; updatedData: Partial<ExtendedChat> }>,
-    ) => {
-      const { chatId, updatedData } = payload;
-      state.noTradeChatChats[chatId] = {
-        ...state.noTradeChatChats[chatId],
-        ...updatedData,
-      };
-    },
   },
 });
 
@@ -796,7 +786,6 @@ export const {
   scrollToChatFinished,
   setUpdatedValueInMessage,
   updateParticipantData,
-  setUpdatedValuesInChatById,
 } = chatSlice.actions;
 
 export { initialState as initialChatState };
diff --git a/src/store/slices/depositForm.ts b/src/store/slices/depositForm.ts
deleted file mode 100644
index 37b4c1daa..000000000
--- a/src/store/slices/depositForm.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-import { createSlice, PayloadAction } from '@reduxjs/toolkit';
-
-import { depositFormSubmit, depositFormSubmitReset } from '@store/actions/depositForm';
-
-import type { DepositFormData } from 'types/DepositForm';
-
-type DepositFormDataState = {
-  loading: boolean;
-  error: string | null;
-  data?: DepositFormData;
-};
-
-type DepositFormSubmitState = {
-  loading: boolean;
-  error: string | null;
-};
-
-type DepositFormState = {
-  data: Record<string, DepositFormDataState>;
-  submit: Record<string, DepositFormSubmitState>;
-};
-
-type DepositFormDataResultPayload = {
-  formId: string;
-  data: DepositFormData;
-};
-
-type DepositFormDataFailurePayload = {
-  formId: string;
-  error: string;
-};
-
-type DepositFormSubmitFailurePayload = {
-  formId: string;
-  error: string;
-};
-
-const initialState: DepositFormState = {
-  data: {},
-  submit: {},
-};
-
-const depositFormSlice = createSlice({
-  name: 'depositForm',
-  initialState,
-  reducers: {
-    depositFormDataRequested: (state, { payload }: PayloadAction<{ formId: string }>) => {
-      state.data[payload.formId] = {
-        loading: true,
-        error: null,
-      };
-    },
-    depositFormDataSucceeded: (state, { payload }: PayloadAction<DepositFormDataResultPayload>) => {
-      state.data[payload.formId] = {
-        loading: false,
-        error: null,
-        data: payload.data,
-      };
-    },
-    depositFormDataFailed: (state, { payload }: PayloadAction<DepositFormDataFailurePayload>) => {
-      state.data[payload.formId] = {
-        loading: false,
-        error: payload.error,
-      };
-    },
-    depositFormDataReset: (state, { payload }: PayloadAction<{ formId: string }>) => {
-      delete state.data[payload.formId];
-    },
-    depositFormSubmitSucceeded: (state, { payload }: PayloadAction<{ formId: string }>) => {
-      state.submit[payload.formId] = {
-        loading: false,
-        error: null,
-      };
-    },
-    depositFormSubmitFailed: (state, { payload }: PayloadAction<DepositFormSubmitFailurePayload>) => {
-      state.submit[payload.formId] = {
-        loading: false,
-        error: payload.error,
-      };
-    },
-  },
-  extraReducers: (builder) => {
-    builder
-      .addCase(depositFormSubmit, (state, { payload }) => {
-        state.submit[payload.formId] = {
-          loading: true,
-          error: null,
-        };
-      })
-      .addCase(depositFormSubmitReset, (state, { payload }) => {
-        delete state.submit[payload.formId];
-      });
-  },
-});
-
-export const {
-  depositFormDataRequested,
-  depositFormDataSucceeded,
-  depositFormDataFailed,
-  depositFormDataReset,
-  depositFormSubmitSucceeded,
-  depositFormSubmitFailed,
-} = depositFormSlice.actions;
-export default depositFormSlice.reducer;
diff --git a/src/store/slices/modals.ts b/src/store/slices/modals.ts
index f52b3879b..6d90c0ed4 100644
--- a/src/store/slices/modals.ts
+++ b/src/store/slices/modals.ts
@@ -7,6 +7,7 @@ import { StartPageModal } from '@terminal/desktop/components/StartPage/component
 
 import {
   AcceptTicketParams,
+  BaseTicketParams,
   CreateDepthEqualTicketParams,
   CreateDepthTicketParams,
   CreateDraftTicketParams,
@@ -74,7 +75,7 @@ const modalsSlice = createSlice({
     // Открытие модалки для создания ордера СПФИ вручную
     openCreateTicketModal: (
       state,
-      { payload }: PayloadAction<Omit<CreateTicketParams, 'type'> & { widgetId?: number }>,
+      { payload }: PayloadAction<Omit<BaseTicketParams & CreateTicketParams, 'type'> & { widgetId?: number }>,
     ) => {
       state.ticketModal = { isOpen: true, type: TicketType.Create, ...payload };
     },
@@ -86,6 +87,7 @@ const modalsSlice = createSlice({
       state.ticketModal = {
         isOpen: true,
         type: TicketType.Accept,
+        pattern: 'NOPATTERN',
         ...payload,
       };
     },
@@ -94,7 +96,7 @@ const modalsSlice = createSlice({
       state,
       { payload }: PayloadAction<Omit<AcceptTicketParams, 'type'> & { widgetId?: number }>,
     ) => {
-      state.ticketModal = { isOpen: true, type: TicketType.Cancel, ...payload };
+      state.ticketModal = { isOpen: true, type: TicketType.Cancel, pattern: 'NOPATTERN', ...payload };
     },
     // Открытие модалки для создания ордера СПФИ с предзаполнением из эндпоинта createDepth
     openCreateDepthTicketModal: (
@@ -122,7 +124,7 @@ const modalsSlice = createSlice({
       state,
       { payload }: PayloadAction<Omit<CreateDraftTicketParams, 'type'> & { widgetId?: number }>,
     ) => {
-      state.ticketModal = { isOpen: true, type: TicketType.CreateDraft, ...payload };
+      state.ticketModal = { isOpen: true, type: TicketType.CreateDraft, pattern: 'NOPATTERN', ...payload };
     },
     // Открытие модалки для создания ордера СПФИ из брокерской заявки
     openCreateFromDraftTicketModal: (
@@ -132,6 +134,7 @@ const modalsSlice = createSlice({
       state.ticketModal = {
         isOpen: true,
         type: TicketType.CreateFromDraft,
+        pattern: 'NOPATTERN',
         ...payload,
       };
     },
@@ -143,6 +146,7 @@ const modalsSlice = createSlice({
       state.ticketModal = {
         isOpen: true,
         type: TicketType.OpenDraft,
+        pattern: 'NOPATTERN',
         ...payload,
       };
     },
@@ -259,7 +263,7 @@ const modalsSlice = createSlice({
       state.stack.pop();
     },
     closeModalUntil: (state, action: PayloadAction<ModalType>) => {
-      while (state.stack.length && state.stack[state.stack.length - 1]?.type !== action.payload) {
+      while (state.stack.length && state.stack.at(-1)?.type !== action.payload) {
         state.stack.pop();
       }
     },
diff --git a/src/store/slices/mxt.ts b/src/store/slices/mxt.ts
index b1a82e0f6..42a1456f7 100644
--- a/src/store/slices/mxt.ts
+++ b/src/store/slices/mxt.ts
@@ -1,58 +1,26 @@
 import { createSlice, PayloadAction } from '@reduxjs/toolkit';
 
-import { MxtMessageType } from '@api/websokets/classes/WSMXTStompClient/types';
-
-import type { MxtMeta } from '@api/websokets/classes/WSMXTStompClient';
-import type { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
-import type { MxtStompMessage } from '@api/websokets/classes/WSMXTStompClient/types';
-import type { MxtDataKey } from '@widgets/DepositCcpTables/const';
-
-export enum MxtObjectStatus {
-  Loading = 'loading',
-  Loaded = 'loaded',
-  Error = 'error',
-}
-
-export type MxtObjectLoadState = {
-  status: MxtObjectStatus;
-  error?: string;
-  lastSnapshotPart?: number;
-};
-
-export type MxtObjectsState = Partial<Record<MxtDataKey, Record<number, MxtObject>>>;
+import { MxtMeta } from '@api/websokets/classes/WSMXTStompClient';
+import { MxtObject } from '@api/websokets/classes/WSMXTStompClient/client';
+import { MxtMessageType, MxtStompMessage } from '@api/websokets/classes/WSMXTStompClient/types';
+import { MxtDataKey } from '@widgets/DepositCcpTables/const';
 
 export interface MxtDataState {
   metadata?: MxtMeta;
-  objects: MxtObjectsState;
-  objectStates: Partial<Record<MxtDataKey, MxtObjectLoadState>>;
+  objects: Partial<Record<MxtDataKey, Record<number, MxtObject>>>;
 }
 
-export const initialMxtState: MxtDataState = {
+const initialState = <MxtDataState>{
   objects: {},
-  objectStates: {},
 };
 
-export const mxt = createSlice({
+const mxt = createSlice({
   name: 'mxt',
-  initialState: initialMxtState,
+  initialState,
   reducers: {
     setMetadata: (state: MxtDataState, action: PayloadAction<MxtMeta>) => {
       state.metadata = action.payload;
     },
-    objectSubscriptionStarted: (state: MxtDataState, action: PayloadAction<MxtDataKey>) => {
-      state.objectStates[action.payload] = {
-        status: MxtObjectStatus.Loading,
-      };
-    },
-    objectSubscriptionFailed: (
-      state: MxtDataState,
-      action: PayloadAction<{ objectKey: MxtDataKey; error: string }>,
-    ) => {
-      state.objectStates[action.payload.objectKey] = {
-        status: MxtObjectStatus.Error,
-        error: action.payload.error,
-      };
-    },
     handleMessage: (
       state: MxtDataState,
       action: PayloadAction<{
@@ -61,54 +29,34 @@ export const mxt = createSlice({
       }>,
     ) => {
       const { objectKey, message } = action.payload;
-      const objectState = state.objectStates[objectKey];
-
       switch (message.messageType) {
-        case MxtMessageType.SNAPSHOT: {
-          const lastSnapshotPart = objectState?.lastSnapshotPart;
-          const isNewSnapshot =
-            objectState?.status !== MxtObjectStatus.Loading ||
-            lastSnapshotPart === undefined ||
-            (message.part !== undefined && message.part <= lastSnapshotPart);
-          const currentObjects = isNewSnapshot ? {} : (state.objects[objectKey] ?? {});
-
-          state.objects[objectKey] = {
-            ...currentObjects,
-            ...Object.fromEntries(message.data.map((item) => [item.id, item])),
-          };
-          state.objectStates[objectKey] = {
-            status: message.partLast === false ? MxtObjectStatus.Loading : MxtObjectStatus.Loaded,
-            lastSnapshotPart: message.part ?? 0,
-          };
+        case MxtMessageType.SNAPSHOT:
+          state.objects[objectKey] = Object.fromEntries(message.data.map((o) => [o.id, o]));
           break;
-        }
         case MxtMessageType.NEW:
-        case MxtMessageType.UPDATE: {
-          const objectItems = state.objects[objectKey] ?? {};
-
-          message.data.forEach((item) => {
-            objectItems[item.id] = item;
+        case MxtMessageType.UPDATE:
+          message.data.forEach((o) => {
+            const objects = state.objects[objectKey];
+            if (objects) {
+              objects[o.id] = o;
+            }
           });
-          state.objects[objectKey] = objectItems;
           break;
-        }
         case MxtMessageType.REMOVE:
-          message.data.forEach((item) => {
-            delete state.objects[objectKey]?.[item.id];
+          message.data.forEach((o) => {
+            const objects = state.objects[objectKey];
+            if (objects) {
+              delete objects[o.id];
+            }
           });
           break;
-        case MxtMessageType.ERROR:
-          state.objectStates[objectKey] = {
-            status: MxtObjectStatus.Error,
-            error: `MXT subscription error: ${objectKey}`,
-          };
-          break;
         default:
+          console.warn(`Unknown or unhandled message type: ${message.messageType}`);
           break;
       }
     },
   },
 });
 
-export const { setMetadata, objectSubscriptionStarted, objectSubscriptionFailed, handleMessage } = mxt.actions;
+export const { setMetadata, handleMessage } = mxt.actions;
 export default mxt.reducer;
diff --git a/src/store/slices/ordersJournalSlice.ts b/src/store/slices/ordersJournalSlice.ts
index 40dd47d43..dfeeefa4a 100644
--- a/src/store/slices/ordersJournalSlice.ts
+++ b/src/store/slices/ordersJournalSlice.ts
@@ -1,7 +1,6 @@
 import { createSlice, PayloadAction } from '@reduxjs/toolkit';
 
-import { BaseData } from '@modules/pushDates/logic/types';
-
+import { BaseData } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 import { prepareMarketDataAsyncThunk } from '@store/thunks/ordersJounalThunks';
 import { SpfiMarketData } from 'types/OrdersJournal.types';
 
diff --git a/src/store/slices/user.ts b/src/store/slices/user.ts
index aeae993bf..aef453d37 100644
--- a/src/store/slices/user.ts
+++ b/src/store/slices/user.ts
@@ -1,12 +1,12 @@
 import { createSlice, PayloadAction } from '@reduxjs/toolkit';
 
-import type { TradeTimePermission, UserTradingAccesses } from '@modules/ntb/types';
+import type { UserTradingAccesses } from '@modules/ntb/types';
 import type { ProfileFormValues } from '@terminal/desktop/components/Profile/Tabs/PersonalData/types';
 import type { Abbrevation } from 'types/Abbrevations';
 import type { PersonalDataAssetsType, PersonalDataOccupationsType } from 'types/ProfileFormsData';
 import type { PersonalData, PrivacySettings, User, UserSettings } from 'types/User';
 
-export interface UserState {
+interface UserState {
   permissions: string[];
   info: User | undefined;
   settings: UserSettings | undefined;
@@ -95,11 +95,6 @@ const userSlice = createSlice({
     setUserTradingAccess: (state, { payload }: PayloadAction<UserTradingAccesses>) => {
       state.userTradingAccesses = payload;
     },
-    updateTradeTimePermissions: (state, { payload }: PayloadAction<TradeTimePermission[]>) => {
-      if (state.userTradingAccesses) {
-        state.userTradingAccesses.tradeTimePermissions = payload;
-      }
-    },
   },
 });
 
@@ -119,7 +114,6 @@ export const {
   setOccupations,
   setAssets,
   setUserTradingAccess,
-  updateTradeTimePermissions,
 } = userSlice.actions;
 export default userSlice.reducer;
 export { initialState as initialUserState };
diff --git a/src/store/utils/__tests__/formatMarketData.test.ts b/src/store/utils/__tests__/formatMarketData.test.ts
index 7a4d566f0..9cf1870b7 100644
--- a/src/store/utils/__tests__/formatMarketData.test.ts
+++ b/src/store/utils/__tests__/formatMarketData.test.ts
@@ -1,10 +1,8 @@
-import { enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
+import { BaseData, enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 import { SpfiMarketData } from 'types/OrdersJournal.types';
 
 import { formatMarketData } from '../formatMarketData';
 
-import type { BaseData } from '@modules/pushDates/logic/types';
-
 // Mock the enrichBySecondDate function
 jest.mock('@modules/pushDates/logic/utils/enrichBySecondDate.utils', () => ({
   enrichBySecondDate: jest.fn(),
diff --git a/src/store/utils/formatMarketData.ts b/src/store/utils/formatMarketData.ts
index f3912d532..dff6a4690 100644
--- a/src/store/utils/formatMarketData.ts
+++ b/src/store/utils/formatMarketData.ts
@@ -1,21 +1,25 @@
 import dayjs from 'dayjs';
 
 import { commonDateFormat } from '@configs/standartDateFormat';
-
-import { enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
+import { BaseData, enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 import { SecondLegConvention } from '@widgets/SwapCalculator/types/table';
 import { SpfiMarketData } from 'types/OrdersJournal.types';
 
-import type { EnrichBySecondDateResult } from '@modules/pushDates/logic/types';
-
-export type TFormatMarketDataReturnValue = (SpfiMarketData & EnrichBySecondDateResult)[] | undefined;
+export type TFormatMarketDataReturnValue =
+  | (SpfiMarketData &
+      BaseData & {
+        date?: string;
+        secondDate?: string;
+        dayCount?: number;
+      })[]
+  | undefined;
 
 const getDateForEnrich = (newValue: SpfiMarketData, date?: string) =>
   newValue.bid || newValue.offer ? date : undefined;
 
 export const formatMarketData = async (
   value: SpfiMarketData[],
-  enrichedData: (SpfiMarketData & EnrichBySecondDateResult)[],
+  enrichedData: (SpfiMarketData & BaseData)[],
 ): Promise<TFormatMarketDataReturnValue> => {
   let isChangedForCalendar = false;
 
@@ -23,14 +27,14 @@ export const formatMarketData = async (
     // сначала записываем все уникальные ранее подгруженные инструменты (без вновь пришедших)
     const newValuesMap: Map<
       string,
-      SpfiMarketData & EnrichBySecondDateResult & { date?: string; secondDate?: string; dayCount?: number }
+      SpfiMarketData & BaseData & { date?: string; secondDate?: string; dayCount?: number }
     > = new Map(
       enrichedData.filter(({ instr }) => !value.some((val) => val.instr === instr)).map((item) => [item.instr, item]),
     );
 
     value.forEach((newValue) => {
       const prevValue:
-        | (SpfiMarketData & EnrichBySecondDateResult & { date?: string; secondDate?: string; dayCount?: number })
+        | (SpfiMarketData & BaseData & { date?: string; secondDate?: string; dayCount?: number })
         | undefined = enrichedData.find(({ instr }) => instr === newValue.instr);
 
       if (
diff --git a/src/stories/AboutInstrumnet.stories.tsx b/src/stories/AboutInstrumnet.stories.tsx
new file mode 100644
index 000000000..acd8c6874
--- /dev/null
+++ b/src/stories/AboutInstrumnet.stories.tsx
@@ -0,0 +1,52 @@
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import React from 'react';
+import { Provider } from 'react-redux';
+
+import AboutInstrument from '@widgets/AboutInstrument/AboutInstrument';
+
+const state = {
+  localisation: {
+    localisation: 'ru',
+  },
+  widgets: {
+    widgets: [
+      {
+        id: 0,
+        widgetContentProps: {
+          aboutInstrumentState: {
+            instrumentId: 0,
+          },
+        },
+      },
+    ],
+  },
+};
+
+const store = {
+  getState() {
+    return state;
+  },
+  subscribe() {
+    return undefined;
+  },
+};
+
+export default {
+  title: 'Widgets/AboutInstrument',
+  component: AboutInstrument,
+  argTypes: {
+    backgroundColor: { control: 'color' },
+  },
+} as ComponentMeta<typeof AboutInstrument>;
+
+export const Template: ComponentStory<typeof AboutInstrument> = function (args) {
+  return (
+    <Provider store={store as any}>
+      <AboutInstrument {...args} />
+    </Provider>
+  );
+};
+
+Template.args = {
+  widgetId: 0,
+};
diff --git a/src/_stories_/CheckboxSelect.stories.tsx b/src/stories/CheckboxSelect.stories.tsx
similarity index 91%
rename from src/_stories_/CheckboxSelect.stories.tsx
rename to src/stories/CheckboxSelect.stories.tsx
index 5d962869d..cd6705294 100644
--- a/src/_stories_/CheckboxSelect.stories.tsx
+++ b/src/stories/CheckboxSelect.stories.tsx
@@ -4,6 +4,10 @@ import React, { useState } from 'react';
 import { CheckboxSelect } from '@widgets/IndicativeQuotes/components/CheckboxSelect';
 
 type OptionValue = string;
+type Option = {
+  label: string;
+  value: OptionValue;
+};
 
 const DEMO_OPTIONS: { value: string; label: string }[] = [1, 2, 3, 4, 5, 6, 7, 8].map((item) => ({
   value: String(item),
@@ -11,7 +15,7 @@ const DEMO_OPTIONS: { value: string; label: string }[] = [1, 2, 3, 4, 5, 6, 7, 8
 }));
 
 export default {
-  title: 'Widgets/IndicativeQuotes/CheckboxSelect',
+  title: 'Simple Components/CheckboxSelect',
   component: CheckboxSelect,
 } as ComponentMeta<typeof CheckboxSelect>;
 
diff --git a/src/components/_stories_/ContextMenu/ContextMenu.stories.tsx b/src/stories/ContextMenu/ContextMenu.stories.tsx
similarity index 81%
rename from src/components/_stories_/ContextMenu/ContextMenu.stories.tsx
rename to src/stories/ContextMenu/ContextMenu.stories.tsx
index ecbf4c301..0e6b9fccf 100644
--- a/src/components/_stories_/ContextMenu/ContextMenu.stories.tsx
+++ b/src/stories/ContextMenu/ContextMenu.stories.tsx
@@ -2,9 +2,10 @@ import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
 import { ContextMenu } from '@components/ContextMenu';
+import { DatePickerMad } from '@components/DatePicker';
 
 export default {
-  title: 'Components/ContextMenu',
+  title: 'Simple Components/ContextMenu',
   component: ContextMenu,
 } as ComponentMeta<typeof ContextMenu>;
 
diff --git a/src/stories/CorpActionsBlock.stories.tsx b/src/stories/CorpActionsBlock.stories.tsx
new file mode 100644
index 000000000..fed1dc2e2
--- /dev/null
+++ b/src/stories/CorpActionsBlock.stories.tsx
@@ -0,0 +1,125 @@
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import React, { useState } from 'react';
+
+import { ActionsList } from '../widgets/CorpActions/components/ActionsList/ActionsList';
+
+const actionsBlocks = [
+  {
+    dateLabel: '2024-07-24T19:48:02.000+03:00',
+    breaking: false,
+    actions: [
+      {
+        id: '408203',
+        timeText: '2024-04-23T19:48:02.000+03:00',
+        text: 'Итоги торгов акциями на основном рынке Московской биржи',
+        breaking: false,
+        isRead: false,
+      },
+      {
+        id: '408205',
+        timeText: '2024-04-23T19:48:02.000+03:00',
+        text: 'Суммарные итоги операций акциями на Московской бирже в режиме основных торгов',
+        breaking: false,
+        isRead: false,
+      },
+      {
+        id: '408204',
+        timeText: '2024-04-23T19:48:00.000+03:00',
+        text: 'Итоги торгов инвестиционными паями на основном рынке Московской биржи',
+        breaking: false,
+        isRead: true,
+      },
+      {
+        id: '408202',
+        timeText: '2024-04-23T19:46:55.000+03:00',
+        text: 'Выручка ГК "Солар" в 2023 году выросла на 36%, до 17,3 млрд рублей',
+        breaking: false,
+        isRead: false,
+      },
+      {
+        id: '408201',
+        timeText: '2024-04-23T19:45:40.000+03:00',
+        text: 'Kering ожидает падения операционной прибыли в I полугодии на 40-45%',
+        breaking: true,
+        isRead: false,
+      },
+      {
+        id: '408200',
+        timeText: '2024-04-23T19:45:37.000+03:00',
+        text: 'Законодатели подготовили к внесению в ГД проект об обороте метанола - сенатор',
+        breaking: true,
+        isRead: false,
+      },
+    ],
+  },
+  {
+    dateLabel: '2024-03-24T19:48:02.000+03:00',
+    breaking: false,
+    actions: [
+      {
+        id: '408233',
+        timeText: '2024-04-23T19:48:02.000+03:00',
+        text: 'Итоги торгов акциями на основном рынке Московской биржи',
+        breaking: false,
+        isRead: false,
+      },
+      {
+        id: '408225',
+        timeText: '2024-04-23T19:48:02.000+03:00',
+        text: 'Суммарные итоги операций акциями на Московской бирже в режиме основных торгов',
+        breaking: false,
+        isRead: false,
+      },
+      {
+        id: '408214',
+        timeText: '2024-04-23T19:48:00.000+03:00',
+        text: 'Итоги торгов инвестиционными паями на основном рынке Московской биржи',
+        breaking: false,
+        isRead: true,
+      },
+      {
+        id: '408272',
+        timeText: '2024-04-23T19:46:55.000+03:00',
+        text: 'Выручка ГК "Солар" в 2023 году выросла на 36%, до 17,3 млрд рублей',
+        breaking: false,
+        isRead: false,
+      },
+      {
+        id: '408281',
+        timeText: '2024-04-23T19:45:40.000+03:00',
+        text: 'Kering ожидает падения операционной прибыли в I полугодии на 40-45%',
+        breaking: true,
+        isRead: false,
+      },
+      {
+        id: '408209',
+        timeText: '2024-04-23T19:45:37.000+03:00',
+        text: 'Законодатели подготовили к внесению в ГД проект об обороте метанола - сенатор',
+        breaking: true,
+        isRead: false,
+      },
+    ],
+  },
+];
+
+export default {
+  title: 'Simple Components/ActionsList',
+  component: ActionsList,
+  argTypes: {
+    backgroundColor: { control: 'color' },
+  },
+} as ComponentMeta<typeof ActionsList>;
+
+// export const Template: ComponentStory<typeof ActionsList> = function (args) {
+//   const [activeActionId, setActionId] = useState<string | null>(null);
+//   const onReadAction = (id: string) => {
+//     setActionId(id);
+//   };
+//   return (
+//     <ActionsList
+//       actionBlocks={actionsBlocks}
+//       activeActionId={activeActionId}
+//       onReadAction={onReadAction}
+//     />
+//   );
+// };
diff --git a/src/stories/Curves.stories.tsx b/src/stories/Curves.stories.tsx
new file mode 100644
index 000000000..bade16849
--- /dev/null
+++ b/src/stories/Curves.stories.tsx
@@ -0,0 +1,47 @@
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import React from 'react';
+import { Provider } from 'react-redux';
+
+import { Curves } from '@widgets/Curves';
+
+const state = {
+  localisation: {
+    localisation: 'ru',
+  },
+  widgets: {
+    widgets: [
+      {
+        id: 0,
+      },
+    ],
+  },
+};
+
+const store = {
+  getState() {
+    return state;
+  },
+  subscribe() {
+    return undefined;
+  },
+};
+
+export default {
+  title: 'Widgets/Curves',
+  component: Curves,
+  argTypes: {
+    backgroundColor: { control: 'color' },
+  },
+} as ComponentMeta<typeof Curves>;
+
+export const Template: ComponentStory<typeof Curves> = function (args) {
+  return (
+    <Provider store={store as any}>
+      <Curves {...args} />
+    </Provider>
+  );
+};
+
+Template.args = {
+  widgetId: 0,
+};
diff --git a/src/components/_stories_/DatePicker.stories.tsx b/src/stories/DatePicker/DatePicker.stories.tsx
similarity index 83%
rename from src/components/_stories_/DatePicker.stories.tsx
rename to src/stories/DatePicker/DatePicker.stories.tsx
index eec45235b..5350b785e 100644
--- a/src/components/_stories_/DatePicker.stories.tsx
+++ b/src/stories/DatePicker/DatePicker.stories.tsx
@@ -4,10 +4,10 @@ import React from 'react';
 import { DatePickerMad } from '@components/DatePicker';
 
 export default {
-  title: 'Components/DatePicker',
+  title: 'Simple Components/DatePicker',
   component: DatePickerMad,
 } as ComponentMeta<typeof DatePickerMad>;
 
-export const DatepickerComponent: ComponentStory<typeof DatePickerMad> = function () {
+export const DatepickerComponent: ComponentStory<typeof DatePickerMad> = function (args) {
   return <DatePickerMad />;
 };
diff --git a/src/_stories_/DropdownUI/BigDropdown.stories.tsx b/src/stories/DropdownUI/BigDropdown.stories.tsx
similarity index 95%
rename from src/_stories_/DropdownUI/BigDropdown.stories.tsx
rename to src/stories/DropdownUI/BigDropdown.stories.tsx
index f233bc071..439043e33 100644
--- a/src/_stories_/DropdownUI/BigDropdown.stories.tsx
+++ b/src/stories/DropdownUI/BigDropdown.stories.tsx
@@ -4,7 +4,7 @@ import React from 'react';
 import { BigDropdown } from '@widgets/TradingResult/components/BigDropdown';
 
 export default {
-  title: 'Widgets/TradingResult/BigDropdown',
+  title: 'Simple Components/Dropdown/BigDropdown',
   component: BigDropdown,
 } as ComponentMeta<typeof BigDropdown>;
 
diff --git a/src/components/_stories_/Dropdown.stories.tsx b/src/stories/DropdownUI/Dropdown.stories.tsx
similarity index 82%
rename from src/components/_stories_/Dropdown.stories.tsx
rename to src/stories/DropdownUI/Dropdown.stories.tsx
index 52566b550..385e3a2c7 100644
--- a/src/components/_stories_/Dropdown.stories.tsx
+++ b/src/stories/DropdownUI/Dropdown.stories.tsx
@@ -2,9 +2,10 @@ import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
 import Dropwdown from '@components/Dropdown';
+import { InputMad } from '@components/Input';
 
 export default {
-  title: 'Components/Dropdown',
+  title: 'Simple Components/Dropdown/DefaulDropdown',
   component: Dropwdown,
 } as ComponentMeta<typeof Dropwdown>;
 
diff --git a/src/stories/Fixings.stories.tsx b/src/stories/Fixings.stories.tsx
new file mode 100644
index 000000000..a7d6bf2bb
--- /dev/null
+++ b/src/stories/Fixings.stories.tsx
@@ -0,0 +1,54 @@
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import React from 'react';
+import { Provider } from 'react-redux';
+
+import { Fixings } from '@widgets/Fixings';
+import { WidgetContentType } from 'types/Widgets';
+
+const state = {
+  localisation: {
+    localisation: 'ru',
+  },
+  widgets: {
+    widgets: [
+      {
+        id: 0,
+        name: '',
+        type: WidgetContentType.fixings,
+        isExpand: false,
+        position: { x: 0, y: 0 },
+        sizes: { width: '0px', height: '0px' },
+        beforeExpandParams: null,
+      },
+    ],
+  },
+};
+
+const store = {
+  getState() {
+    return state;
+  },
+  subscribe() {
+    return undefined;
+  },
+};
+
+export default {
+  title: 'Widgets/Fixings',
+  component: Fixings,
+  argTypes: {
+    backgroundColor: { control: 'color' },
+  },
+} as ComponentMeta<typeof Fixings>;
+
+export const Template: ComponentStory<typeof Fixings> = function (args) {
+  return (
+    <Provider store={store as any}>
+      <Fixings {...args} />
+    </Provider>
+  );
+};
+
+Template.args = {
+  widgetId: 0,
+};
diff --git a/src/stories/Icons.stories.tsx b/src/stories/Icons.stories.tsx
new file mode 100644
index 000000000..3d2a9d147
--- /dev/null
+++ b/src/stories/Icons.stories.tsx
@@ -0,0 +1,43 @@
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import React from 'react';
+
+import Icons from '@components/Icons';
+import { Icon } from '@uikit/Icon';
+import { IconVariants } from '@uikit/Icon/types';
+
+const iconsList = Object.entries(Icons);
+
+export default {
+  title: 'Simple Components/Icons',
+  // component: GraphicIcon,
+};
+
+const style = {
+  height: '48px',
+  width: '48px',
+  backgroundColor: 'antiquewhite',
+  fill: 'black'
+};
+
+
+export const Icons2: ComponentStory<any> = function (args) {
+  return (
+    <div>
+      { iconsList.map(([iconKey, IconComponent]) => (
+        <div style={{ margin: '12px', border: '1px solid black', padding: '24px', display: 'inline-block' }} key={iconKey}>
+          <IconComponent {...args} />
+          <div>{iconKey}</div>
+        </div>
+      )) }
+      <div>------</div>
+    { Object.entries(IconVariants).map(([iconKey, IconValue]) => (
+        <div style={{ margin: '12px', border: '1px solid black', padding: '24px', display: 'inline-block' }} key={iconKey}>
+          <Icon variant={IconValue} {...args} />
+          <div>{iconKey}</div>
+        </div>
+    )) }
+    </div>
+  );
+};
+Icons2.args = { style };
+
diff --git a/src/components/_stories_/InputUI/DefaultInput.stories.tsx b/src/stories/InputUI/DefaultInput.stories.tsx
similarity index 93%
rename from src/components/_stories_/InputUI/DefaultInput.stories.tsx
rename to src/stories/InputUI/DefaultInput.stories.tsx
index 454bbf635..b6085104c 100644
--- a/src/components/_stories_/InputUI/DefaultInput.stories.tsx
+++ b/src/stories/InputUI/DefaultInput.stories.tsx
@@ -4,7 +4,7 @@ import React from 'react';
 import { InputMad } from '@components/Input';
 
 export default {
-  title: 'Components/InputUI',
+  title: 'Simple Components/InputUI',
   component: InputMad,
 } as ComponentMeta<typeof InputMad>;
 
diff --git a/src/components/_stories_/InputUI/InputNumber.stories.tsx b/src/stories/InputUI/InputNumber.stories.tsx
similarity index 91%
rename from src/components/_stories_/InputUI/InputNumber.stories.tsx
rename to src/stories/InputUI/InputNumber.stories.tsx
index c1c62fcea..883080a80 100644
--- a/src/components/_stories_/InputUI/InputNumber.stories.tsx
+++ b/src/stories/InputUI/InputNumber.stories.tsx
@@ -4,7 +4,7 @@ import React from 'react';
 import { InputNumberMad } from '@components/InputNumber';
 
 export default {
-  title: 'Components/InputUI',
+  title: 'Simple Components/InputUI',
   component: InputNumberMad,
 } as ComponentMeta<typeof InputNumberMad>;
 
diff --git a/src/components/_stories_/RadioGroup.stories.tsx b/src/stories/RadioGroup.stories.tsx
similarity index 85%
rename from src/components/_stories_/RadioGroup.stories.tsx
rename to src/stories/RadioGroup.stories.tsx
index 557020f5f..790a8d5ef 100644
--- a/src/components/_stories_/RadioGroup.stories.tsx
+++ b/src/stories/RadioGroup.stories.tsx
@@ -1,7 +1,7 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { RadioGroupMad } from '@components/RadioGroup/RadioGroupMad';
+import { RadioGroupMad } from '../components/RadioGroup/RadioGroupMad';
 
 const demoOptions = [
   {
@@ -27,7 +27,7 @@ const demoOptions = [
 ];
 
 export default {
-  title: 'Components/RadioGroup',
+  title: 'Simple Components/RadioGroup',
   component: RadioGroupMad,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/_stories_/Select.stories.tsx b/src/stories/Select.stories.tsx
similarity index 88%
rename from src/components/_stories_/Select.stories.tsx
rename to src/stories/Select.stories.tsx
index 8bfdd9c32..d7fdc6540 100644
--- a/src/components/_stories_/Select.stories.tsx
+++ b/src/stories/Select.stories.tsx
@@ -1,7 +1,7 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { SelectLight } from '@components/Select';
+import { SelectLight } from '../components/Select';
 
 const demoOptions = [
   {
@@ -27,7 +27,7 @@ const demoOptions = [
 ];
 
 export default {
-  title: 'Components/Select',
+  title: 'Simple Components/Select',
   component: SelectLight,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/_stories_/SkeletonMad/SkeletonMad.tsx b/src/stories/SkeletonMad/SkeletonMad.tsx
similarity index 82%
rename from src/components/_stories_/SkeletonMad/SkeletonMad.tsx
rename to src/stories/SkeletonMad/SkeletonMad.tsx
index b16d581fc..78d6efca4 100644
--- a/src/components/_stories_/SkeletonMad/SkeletonMad.tsx
+++ b/src/stories/SkeletonMad/SkeletonMad.tsx
@@ -4,11 +4,11 @@ import React from 'react';
 import { SkeletonLoading } from '@components/Skeleton';
 
 export default {
-  title: 'Components/SkeletonLoading',
+  title: 'Simple Components/Skeleton/SkeletonLoading',
   component: SkeletonLoading,
 } as ComponentMeta<typeof SkeletonLoading>;
 
-export const SkeletonComponent: ComponentStory<typeof SkeletonLoading> = function () {
+export const SkeletonComponent: ComponentStory<typeof SkeletonLoading> = function (args) {
   return <SkeletonLoading />;
 };
 
diff --git a/src/components/_stories_/OldTable/Table.stories.tsx b/src/stories/Table/Table.stories.tsx
similarity index 96%
rename from src/components/_stories_/OldTable/Table.stories.tsx
rename to src/stories/Table/Table.stories.tsx
index 5b6fa5090..56551f958 100644
--- a/src/components/_stories_/OldTable/Table.stories.tsx
+++ b/src/stories/Table/Table.stories.tsx
@@ -19,7 +19,7 @@ const dataSource = [
 ];
 
 export default {
-  title: 'Components/VirtualTable',
+  title: 'Simple Components/VirtualTable',
   component: Table,
 } as ComponentMeta<typeof Table>;
 
diff --git a/src/components/_stories_/TextUI.stories.tsx b/src/stories/TextUI.stories.tsx
similarity index 92%
rename from src/components/_stories_/TextUI.stories.tsx
rename to src/stories/TextUI.stories.tsx
index 0cab01942..05f875284 100644
--- a/src/components/_stories_/TextUI.stories.tsx
+++ b/src/stories/TextUI.stories.tsx
@@ -4,7 +4,7 @@ import React from 'react';
 import { TextUI } from '@components/TextUI';
 
 export default {
-  title: 'Components/TextUI',
+  title: 'Simple Components/TextUI',
   component: TextUI,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/_stories_/TextUI/DefaultText.stories.tsx b/src/stories/TextUI/DefaultText.stories.tsx
similarity index 85%
rename from src/components/_stories_/TextUI/DefaultText.stories.tsx
rename to src/stories/TextUI/DefaultText.stories.tsx
index 46f244657..e7b37c1ca 100644
--- a/src/components/_stories_/TextUI/DefaultText.stories.tsx
+++ b/src/stories/TextUI/DefaultText.stories.tsx
@@ -1,12 +1,12 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
-import React from 'react';
+import React, { Children } from 'react';
 
 import { Text } from '@components/Text';
 
 import { textChildren } from './utils/constants';
 
 export default {
-  title: 'Components/TextUI',
+  title: 'Simple Components/TextUI',
   component: Text,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/_stories_/TextUI/TextAreaMad.stories.tsx b/src/stories/TextUI/TextAreaMad.stories.tsx
similarity index 69%
rename from src/components/_stories_/TextUI/TextAreaMad.stories.tsx
rename to src/stories/TextUI/TextAreaMad.stories.tsx
index 498b08e6f..e63baeb01 100644
--- a/src/components/_stories_/TextUI/TextAreaMad.stories.tsx
+++ b/src/stories/TextUI/TextAreaMad.stories.tsx
@@ -1,10 +1,13 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
-import React from 'react';
+import React, { Children } from 'react';
 
 import { TextAreaMad } from '@components/TextArea';
+import { TextUI } from '@components/TextUI';
+
+import { textChildren } from './utils/constants';
 
 export default {
-  title: 'Components/TextUI',
+  title: 'Simple Components/TextUI',
   component: TextAreaMad,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/_stories_/TextUI/TextMad.stories.tsx b/src/stories/TextUI/TextMad.stories.tsx
similarity index 83%
rename from src/components/_stories_/TextUI/TextMad.stories.tsx
rename to src/stories/TextUI/TextMad.stories.tsx
index ee02fd3d5..d502dee36 100644
--- a/src/components/_stories_/TextUI/TextMad.stories.tsx
+++ b/src/stories/TextUI/TextMad.stories.tsx
@@ -1,12 +1,13 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
+import { TextAreaMad, TextAreaMadProps } from '@components/TextArea';
 import { TextMad } from '@components/TextMad';
 
 import { textChildren } from './utils/constants';
 
 export default {
-  title: 'Components/TextUI',
+  title: 'Simple Components/TextUI',
   component: TextMad,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/_stories_/TextUI/TextUI.stories.tsx b/src/stories/TextUI/TextUI.stories.tsx
similarity index 76%
rename from src/components/_stories_/TextUI/TextUI.stories.tsx
rename to src/stories/TextUI/TextUI.stories.tsx
index dad32cd4d..3b98a227f 100644
--- a/src/components/_stories_/TextUI/TextUI.stories.tsx
+++ b/src/stories/TextUI/TextUI.stories.tsx
@@ -1,12 +1,14 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
+import { TextAreaMad, TextAreaMadProps } from '@components/TextArea';
+import { TextMad } from '@components/TextMad';
 import { TextUI } from '@components/TextUI';
 
 import { textChildren } from './utils/constants';
 
 export default {
-  title: 'Components/TextUI',
+  title: 'Simple Components/TextUI',
   component: TextUI,
   argTypes: {
     backgroundColor: { control: 'color' },
diff --git a/src/components/_stories_/TextUI/utils/constants.ts b/src/stories/TextUI/utils/constants.ts
similarity index 100%
rename from src/components/_stories_/TextUI/utils/constants.ts
rename to src/stories/TextUI/utils/constants.ts
diff --git a/src/components/_stories_/Toast/Toast.stories.tsx b/src/stories/Toast/Toast.stories.tsx
similarity index 97%
rename from src/components/_stories_/Toast/Toast.stories.tsx
rename to src/stories/Toast/Toast.stories.tsx
index ed4e96fe1..63739e19a 100644
--- a/src/components/_stories_/Toast/Toast.stories.tsx
+++ b/src/stories/Toast/Toast.stories.tsx
@@ -1,6 +1,7 @@
 import { ComponentMeta } from '@storybook/react';
 import React, { useState } from 'react';
 
+
 import { TypeOptions } from 'react-toastify';
 
 import { SelectMad } from '@components/Select';
@@ -8,7 +9,7 @@ import { Toast, ToastContainer, toaster, toasterWithAction } from '@components/T
 import { Button } from '@uikit/Button';
 
 export default {
-  title: 'Components/Toast',
+  title: 'Simple Components/Toast',
   component: Toast,
   parameters: {
     backgrounds: {
diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index f85566bbf..58314fd05 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -108,7 +108,6 @@ $surface-chart-candle-decrease: var(--thm-shared-emotion-wrong-normal);
 $surface-chart-bottom-bar-candle-increase: var(--thm-shared-emotion-positive-light);
 $surface-chart-bottom-bar-candle-decrease: var(--thm-shared-emotion-wrong-light);
 $surface-table-zebra: var(--thm-shared-accent-penta);
-$surface-table-my-order: $semantic-multicolored-yellow-opacity28;
 $surface-control-cursor-hand-and-type: var(--thm-shared-cursor-white);
 $surface-control-cursor-arrow-and-scale: var(--thm-shared-cursor-black);
 $surface-control-toggle-on-circle: var(--thm-shared-element-on-color-primary);
diff --git a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMail/SendMail.tsx b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMail/SendMail.tsx
index 7522f8f24..e4585b029 100644
--- a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMail/SendMail.tsx
+++ b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMail/SendMail.tsx
@@ -2,7 +2,7 @@ import React, { MouseEventHandler } from 'react';
 
 import { IconButton } from '@components/IconButton';
 import { SUPPORT_EMAIL } from '@terminal/desktop/components/Header/const';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 import Tooltip from '@uikit/Tooltip';
 import Typography from '@uikit/Typography';
@@ -25,7 +25,7 @@ export const SendMail = () => {
       className={styles.container}
     >
       <div className={styles.mainTitle}>
-        <IconDeprecated variant={IconVariants.EMAIL_OUTLINED} />
+        <Icon variant={IconVariants.EMAIL_OUTLINED} />
         <Typography.Text.S
           className={styles.title}
           text="Написать на почту"
@@ -39,7 +39,7 @@ export const SendMail = () => {
           onClick={handleCopy}
           size="medium"
           variant="primary"
-          icon={<IconDeprecated variant={IconVariants.FILE_COPY_OUTLINED} />}
+          icon={<Icon variant={IconVariants.FILE_COPY_OUTLINED} />}
         />
       </Tooltip>
     </div>
diff --git a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/SendMessage.tsx b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/SendMessage.tsx
index d7c517c87..6e6919fb4 100644
--- a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/SendMessage.tsx
+++ b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/SendMessage.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 
 import { useOpenDirectChatWidget } from '@hooks/useOpenDirectChatWidget';
 import { SUPPORT_EMAIL } from '@terminal/desktop/components/Header/const';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 import Typography from '@uikit/Typography';
 
@@ -15,7 +15,7 @@ export const SendMessage = () => {
       onClick={openNoTradeChat}
       className={styles.container}
     >
-      <IconDeprecated variant={IconVariants.FORUM_OUTLINED} />
+      <Icon variant={IconVariants.FORUM_OUTLINED} />
       <Typography.Text.S
         className={styles.title}
         text="Написать в чат"
diff --git a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/__tests__/SendMessage.test.tsx b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/__tests__/SendMessage.test.tsx
index fbe81218b..af2379ba3 100644
--- a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/__tests__/SendMessage.test.tsx
+++ b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterButtons/SendMessage/__tests__/SendMessage.test.tsx
@@ -14,7 +14,7 @@ jest.mock('@hooks/useOpenDirectChatWidget', () => ({
 }));
 
 jest.mock('@uikit/Icon', () => ({
-  IconDeprecated: ({ variant, ...props }: any) => (
+  Icon: ({ variant, ...props }: any) => (
     <span
       data-mock-icon
       variant={variant}
diff --git a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterFooter/HelpCenterFooter.tsx b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterFooter/HelpCenterFooter.tsx
index cde1c5cde..5160ad6c6 100644
--- a/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterFooter/HelpCenterFooter.tsx
+++ b/src/terminal/desktop/components/Header/components/HelpCenter/HelpCenterFooter/HelpCenterFooter.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 import Typography from '@uikit/Typography';
 
@@ -8,7 +8,7 @@ import styles from './HelpCenterFooter.module.scss';
 
 export const HelpCenterFooter = () => (
   <div className={styles.container}>
-    <IconDeprecated
+    <Icon
       className={styles.icon}
       variant={IconVariants.PHONE_OUTLINED}
     />
diff --git a/src/terminal/desktop/components/Header/index.tsx b/src/terminal/desktop/components/Header/index.tsx
index b8716bee8..8c682e6ea 100644
--- a/src/terminal/desktop/components/Header/index.tsx
+++ b/src/terminal/desktop/components/Header/index.tsx
@@ -7,7 +7,7 @@ import { IconButton } from '@components/IconButton';
 import Icons from '@components/Icons';
 import { ChatBubbleOutlined } from '@components/Icons/ChatBubbleOutlined';
 import { FullScreenIcon } from '@components/Icons/FullScreenIcon';
-import { IconLegacyProps } from '@components/Icons/IconsProps';
+import { IconProps } from '@components/Icons/IconsProps';
 import { InstallDesktop } from '@components/Icons/InstallDesktop';
 import { NewSearchIcon } from '@components/Icons/NewSearchIcon';
 import StartNotification from '@components/StartNotification';
@@ -59,14 +59,14 @@ import { HelpCenterHeader } from './components/HelpCenter/HelpCenterHeader';
 import { HelpCenterFooter } from './components/HelpCenter/HelpCenterFooter';
 import { HelpCenterBody } from './components/HelpCenter/HelpCenterBody';
 
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 
 import { useWorkspaceCreate } from '../StartPage/hooks/useWorkspaceCreate';
 
 const { NewPlusIcon, MOEXLogoIcon } = Icons;
 
-const UserAvatarIcon: FC<IconLegacyProps> = () => <UserAvatar size="S" />;
+const UserAvatarIcon: FC<IconProps> = () => <UserAvatar size="S" />;
 
 interface HeaderProps {
   toggleIntrumentPanel(): void;
@@ -245,7 +245,7 @@ export const Header: FC<HeaderProps & UseIsClampedSidebarFacadeReturnType> = fun
                   }}
                   className={styles['nav-item']}
                   onClick={handleChatOpen}
-                  Icon="message-square"
+                  Icon={ChatBubbleOutlined}
                   iconEnabled="start"
                   variant="unfilled-primary"
                 />
@@ -265,7 +265,7 @@ export const Header: FC<HeaderProps & UseIsClampedSidebarFacadeReturnType> = fun
             >
               <Button
                 className={styles['nav-item']}
-                Icon="headset"
+                Icon={() => <Icon variant={IconVariants.HEADSET_MIC_OUTLINED} />}
                 iconEnabled="start"
                 variant="unfilled-primary"
                 data-intro-tour={TOURS_DATA[0].steps[5].target.split('-')[1]}
diff --git a/src/terminal/desktop/components/Sidebar/components/MenuItems/WorkspaceItem/DropdownMenu/DropdownItem/dropdownitem.module.scss b/src/terminal/desktop/components/Sidebar/components/MenuItems/WorkspaceItem/DropdownMenu/DropdownItem/dropdownitem.module.scss
index 2159abab7..3d29e7150 100644
--- a/src/terminal/desktop/components/Sidebar/components/MenuItems/WorkspaceItem/DropdownMenu/DropdownItem/dropdownitem.module.scss
+++ b/src/terminal/desktop/components/Sidebar/components/MenuItems/WorkspaceItem/DropdownMenu/DropdownItem/dropdownitem.module.scss
@@ -18,7 +18,7 @@
     background: $states-hover;
 
     .menu-item-name {
-      color: var(--thm-text-interface-primary-primary);
+      color: $text-b-primary;
     }
   }
 
@@ -87,4 +87,4 @@
   height: 1px;
   width: 100%;
   background-color: #33334d !important;
-}
+}
\ No newline at end of file
diff --git a/src/terminal/desktop/components/Sidebar/const.tsx b/src/terminal/desktop/components/Sidebar/const.tsx
index c4bcb9e80..c2ba76c11 100644
--- a/src/terminal/desktop/components/Sidebar/const.tsx
+++ b/src/terminal/desktop/components/Sidebar/const.tsx
@@ -35,6 +35,13 @@ export const widgetsMap: WidgetCreateStruct[] = [
     type: WidgetContentType.testIFrame,
     groupType: WidgetGroupTypes.COMMUNITY,
   },
+  {
+    name: 'Админка',
+    description: 'Админка',
+    Icon: ChatIcon,
+    type: WidgetContentType.userAdministration,
+    groupType: WidgetGroupTypes.COMMUNITY,
+  },
   {
     name: 'Контакты',
     description: 'Пользователи Радара',
diff --git a/src/terminal/desktop/components/SidebarContent/hooks/useWidgetCreate.ts b/src/terminal/desktop/components/SidebarContent/hooks/useWidgetCreate.ts
index a45d6c624..f8954f873 100644
--- a/src/terminal/desktop/components/SidebarContent/hooks/useWidgetCreate.ts
+++ b/src/terminal/desktop/components/SidebarContent/hooks/useWidgetCreate.ts
@@ -3,6 +3,7 @@ import { useCallback, useMemo } from 'react';
 import { CREATE_NEW_WORKSPACE_ID } from '@configs/appConfig';
 import { useAppSelect } from '@hooks/useAppSelector';
 import { useLocalisation } from '@hooks/useLocalisation';
+import { hasAtleastOneNoTradeChatSelector } from '@store/selectors/noTradeChat';
 import { currentWorkspaceIdSelector } from '@store/selectors/workspaces';
 import { createNameForNewWorkspace } from '@terminal/desktop/components/Header/utils';
 import createWidget from '@utils/createWidget';
@@ -10,6 +11,7 @@ import createWorkspace from '@utils/createWorkspace';
 import { WidgetContentType } from 'types/Widgets';
 
 export const useWidgetCreate = () => {
+  const hasAtleastOneNoTradeChat = useAppSelect(hasAtleastOneNoTradeChatSelector);
   const workspaceId = useAppSelect(currentWorkspaceIdSelector);
   const workspaces = useAppSelect((state) => state.workspaces.workspaces);
 
@@ -22,6 +24,10 @@ export const useWidgetCreate = () => {
         return;
       }
 
+      if (type === WidgetContentType.noTradeChat && hasAtleastOneNoTradeChat) {
+        return;
+      }
+
       if (workspaceId === CREATE_NEW_WORKSPACE_ID) {
         createWorkspace({
           name: createNameForNewWorkspace(newWorkspace, workspacesNames),
@@ -34,7 +40,7 @@ export const useWidgetCreate = () => {
         createWidget([{ type, workspaceId }]);
       }
     },
-    [workspaceId, newWorkspace, workspacesNames],
+    [workspaceId, hasAtleastOneNoTradeChat, newWorkspace, workspacesNames],
   );
 
   return {
diff --git a/src/terminal/desktop/components/StartPage/useStartPage.tsx b/src/terminal/desktop/components/StartPage/useStartPage.tsx
index 06405d06b..11427f4a8 100644
--- a/src/terminal/desktop/components/StartPage/useStartPage.tsx
+++ b/src/terminal/desktop/components/StartPage/useStartPage.tsx
@@ -49,12 +49,6 @@ export function useStartPage() {
       empty: false,
       variant: 'rightTripleBlock',
     },
-    isAvailableWorkspaceByWorkspaceType('NTBStock') && {
-      label: 'Логистика',
-      onClick: () => createWorkspaceFromJson('ntbLogistic'),
-      empty: false,
-      variant: 'rightTripleBlock',
-    },
     isAvailableWorkspaceByWorkspaceType('Stocks') && {
       label: 'Акции',
       onClick: () => createWorkspaceFromConfig('stocks', 'Акции'),
diff --git a/src/terminal/desktop/content.tsx b/src/terminal/desktop/content.tsx
index eca8fa878..52c89ffbe 100644
--- a/src/terminal/desktop/content.tsx
+++ b/src/terminal/desktop/content.tsx
@@ -8,8 +8,6 @@ import { useLocalisation } from '@hooks/useLocalisation';
 import { HelpCenter } from '@modules/HelpCenter';
 import { ModalRoot } from '@modules/ModalRoot';
 import { ModalsContainer } from '@modules/ModalsContainer';
-import { useAddressDepositFormHotkey } from '@modules/MXTForms/AddressDepositForm/hooks/useAddressDepositFormHotkey';
-import { useDepositFormHotkey } from '@modules/MXTForms/DepositForm/hooks/useDepositFormHotkey';
 import { NewsWorkspace } from '@modules/NewsWorkspace/NewsWorkspace';
 import { isSidebarOpenSelector } from '@store/selectors/modals';
 import { savedWorkspacesSelector, workspaceWidgetsSelector } from '@store/selectors/workspaces';
@@ -35,8 +33,6 @@ export const DesktopContent: React.FC = () => {
 
   const isSidebarOpen = useAppSelect(isSidebarOpenSelector);
   const dispatch = useDispatch();
-  useDepositFormHotkey();
-  useAddressDepositFormHotkey();
 
   const onCloseSidebar = () => {
     dispatch(closeSidebarModal());
diff --git a/src/terminal/desktop/workspaces/default/components/Widget/widgetsMap.tsx b/src/terminal/desktop/workspaces/default/components/Widget/widgetsMap.tsx
index 931358caa..0eed00cf2 100644
--- a/src/terminal/desktop/workspaces/default/components/Widget/widgetsMap.tsx
+++ b/src/terminal/desktop/workspaces/default/components/Widget/widgetsMap.tsx
@@ -1,24 +1,29 @@
 import React, { lazy } from 'react';
 
 import { AboutInstrumentProps } from '@widgets/AboutInstrument/types';
+import { Admin } from '@widgets/Admin';
 import { BondScreenerProps } from '@widgets/BondScreener';
 import { WidgetProperties as ChartWidgetProperties } from '@widgets/Chart/properties/types';
 import { ContactsProps } from '@widgets/Contacts';
-import { DepositCcpTables, DepositsCcpTablesProps } from '@widgets/DepositCcpTables';
 import { FixingsProps } from '@widgets/Fixings';
 import { MarketMapPropsBasic } from '@widgets/MarketMap/types';
 import { LogisticAuto, LogisticFreight } from '@widgets/ntb/Logistic';
 import { OrdersJournalProps } from '@widgets/OrdersJournal/types';
+
 import { QuotesNTProProps } from '@widgets/QuotesNTPro';
+
 import { TestIFrame } from '@widgets/TestIFrame';
+
 import { TWidgetProps } from '@widgets/TradeJournalDetails/types';
 import { TradingResultProps } from '@widgets/TradingResult';
 import { TurnoversProps } from '@widgets/Turnovers';
+
+import { GlassProps } from 'types/Glass/GlassState';
 import { WidgetContentBasicProps, WidgetContentType } from 'types/Widgets';
 
 import { ChoiserValue } from './types';
-
-import type { GlassWidgetProperties } from '@widgets/Glass/properties/types';
+// const DepositCcpTables = lazy(() => );
+import { DepositCcpTables, DepositsCcpTablesProps } from '@widgets/DepositCcpTables';
 
 const HHI = lazy(() => import('@widgets/HHI/widget'));
 const IndicativeQuotes = lazy(() => import('@widgets/IndicativeQuotes/widget'));
@@ -93,7 +98,7 @@ export const WIDGETS_MAP: Record<WidgetContentType, ChoiserValue> = {
     <Glass
       widgetId={id}
       onWidgetContentClick={onWidgetContentClick}
-      widgetContentProps={properties as GlassWidgetProperties}
+      widgetContentProps={properties as GlassProps}
     />
   ),
   instruments: ({ id, properties, onWidgetContentClick }) => (
@@ -349,4 +354,11 @@ export const WIDGETS_MAP: Record<WidgetContentType, ChoiserValue> = {
   ),
   review: <div>222</div>,
   helpCenter: <HelpCenter />,
+  userAdministration: ({ id, onWidgetContentClick, properties }) => (
+    <Admin
+      widgetId={id}
+      onWidgetContentClick={onWidgetContentClick}
+      widgetContentProps={properties}
+    />
+  ),
 };
diff --git a/src/terminal/desktop/workspaces/mesh/WidgetDashboard/widgetsMap.tsx b/src/terminal/desktop/workspaces/mesh/WidgetDashboard/widgetsMap.tsx
index 21ced06ff..f5e3d2524 100644
--- a/src/terminal/desktop/workspaces/mesh/WidgetDashboard/widgetsMap.tsx
+++ b/src/terminal/desktop/workspaces/mesh/WidgetDashboard/widgetsMap.tsx
@@ -5,18 +5,18 @@ import { Instruction } from '@modules/Instruction';
 import { HelpWidget } from '@modules/WidgetHelp/components';
 import AboutInstrument from '@widgets/AboutInstrument/AboutInstrument';
 import { AboutInstrumentProps } from '@widgets/AboutInstrument/types';
+import { Admin } from '@widgets/Admin';
 import { BondScreener, BondScreenerProps } from '@widgets/BondScreener';
 import { Chart } from '@widgets/Chart';
 import { WidgetProperties as ChartWidgetProperties } from '@widgets/Chart/properties/types';
 import { Contacts, ContactsProps } from '@widgets/Contacts';
 import { CorpActions } from '@widgets/CorpActions';
 import { Curves } from '@widgets/Curves';
-import { DepositCcpTables, DepositsCcpTablesProps } from '@widgets/DepositCcpTables';
 import { DraftBrokerSpfi } from '@widgets/DraftBrokerSpfi';
+import { DepositCcpTables, DepositsCcpTablesProps } from '@widgets/DepositCcpTables';
 import { Fixings, FixingsProps } from '@widgets/Fixings';
 import { Futoi } from '@widgets/Futoi';
 import { Glass } from '@widgets/Glass';
-
 import { HHI } from '@widgets/HHI';
 import { IndicativeQuotes } from '@widgets/IndicativeQuotes';
 import { IssuerCard } from '@widgets/IssuerCard';
@@ -42,12 +42,11 @@ import TradeJournalDetails from '@widgets/TradeJournalDetails';
 import { TWidgetProps } from '@widgets/TradeJournalDetails/types';
 import { TradingResult, TradingResultProps } from '@widgets/TradingResult';
 import { TurnoversProps, WidgetTurnovers } from '@widgets/Turnovers';
+import { GlassProps } from 'types/Glass/GlassState';
 import { WidgetContentBasicProps, WidgetContentType } from 'types/Widgets';
 
 import { ChoiserValue } from './types';
 
-import type { GlassWidgetProperties } from '@widgets/Glass/properties/types';
-
 export const WIDGETS_MAP: Record<WidgetContentType, ChoiserValue> = {
   testIFrame: ({ id, properties, onWidgetContentClick }) => (
     <TestIFrame
@@ -80,7 +79,7 @@ export const WIDGETS_MAP: Record<WidgetContentType, ChoiserValue> = {
     <Glass
       widgetId={id}
       onWidgetContentClick={onWidgetContentClick}
-      widgetContentProps={properties as GlassWidgetProperties}
+      widgetContentProps={properties as GlassProps}
     />
   ),
   instruments: ({ id, properties, onWidgetContentClick }) => (
@@ -336,4 +335,11 @@ export const WIDGETS_MAP: Record<WidgetContentType, ChoiserValue> = {
   ),
   review: <div>222</div>,
   helpCenter: <HelpCenter />,
+  userAdministration: ({ id, onWidgetContentClick, properties }) => (
+    <Admin
+      widgetId={id}
+      onWidgetContentClick={onWidgetContentClick}
+      widgetContentProps={properties}
+    />
+  ),
 };
diff --git a/src/terminal/mobile/components/MobileModalConfirm/MobileModalConfirm.tsx b/src/terminal/mobile/components/MobileModalConfirm/MobileModalConfirm.tsx
index 5117ed21e..a86775116 100644
--- a/src/terminal/mobile/components/MobileModalConfirm/MobileModalConfirm.tsx
+++ b/src/terminal/mobile/components/MobileModalConfirm/MobileModalConfirm.tsx
@@ -1,7 +1,7 @@
 import { isString } from 'lodash';
 import React, { FC, ReactNode } from 'react';
 
-import { IconLegacyProps } from '@components/Icons/IconsProps';
+import { IconProps } from '@components/Icons/IconsProps';
 import { Button } from '@uikit/Button';
 import { ButtonVariant } from '@uikit/Button/types';
 import Typography from '@uikit/Typography';
@@ -19,7 +19,7 @@ type MobileModalConfirmProps = {
   onCancel?: VoidFunction;
   onConfirm?: VoidFunction;
   onClose?: VoidFunction;
-  confirmTextIcon?: FC<IconLegacyProps>;
+  confirmTextIcon?: FC<IconProps>;
 };
 
 export const MobileModalConfirm: FC<MobileModalConfirmProps> = ({
diff --git a/src/types/AddressDepositForm.ts b/src/types/AddressDepositForm.ts
deleted file mode 100644
index 54068806b..000000000
--- a/src/types/AddressDepositForm.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-export type AddressDepositFormValues = {
-  counterPartyId?: number;
-  collateralIssueId?: number;
-  valueDate: string;
-  fundingDuration?: number;
-  marketplaceId: number;
-  fundingPrice: string;
-  requestVolume: string;
-  quantity: string;
-  accountId?: number;
-  partyId?: number;
-  clientCode: string;
-};
-
-export type AddressDepositOrderPayload = {
-  accountId: number;
-  marketplaceId: number;
-  partyId: number;
-  sideId: 1;
-  addressedSignId: 1;
-  counterPartyId: number;
-  collateralIssueId: number;
-  fundingDuration: number;
-  fundingPrice: number;
-  requestVolumeTypeId: 1;
-  priceMethodId: 1;
-  valueDate: string;
-  requestVolume: number;
-};
-
-export type AddressDepositFormSubmitPayload = {
-  formId: string;
-  values: AddressDepositFormValues;
-  lotSize?: number;
-  currencyRate?: number;
-};
-
-export type AddressDepositFormOpenProps = {
-  direction?: string;
-  mode?: string;
-  referencePriceMethod?: string;
-};
diff --git a/src/types/BondsScreener.ts b/src/types/BondsScreener.ts
index beb73b9bf..04758c64c 100644
--- a/src/types/BondsScreener.ts
+++ b/src/types/BondsScreener.ts
@@ -159,8 +159,6 @@ export type BondsScreenerDataType = {
   duration: number | null;
   endDistDate: string | null;
   faceValueScr: number | null;
-  yieldClose: number | null;
-  yieldDiff: number | null;
   gSpread: number | null;
   isin: string | null;
   issuerId: number | null;
diff --git a/src/types/Chats.ts b/src/types/Chats.ts
index f991e6521..e34327571 100644
--- a/src/types/Chats.ts
+++ b/src/types/Chats.ts
@@ -10,7 +10,6 @@ export enum MessageTypesEnum {
   ASYNC_LEADER_ADD = 'async-leader-add',
   ASYNC_LEADER_REMOVE = 'async-leader-remove',
   ASYNC_OWNER_CHANGE = 'async-owner-change',
-  ASYNC_LEADER_CONFIRM = 'async-leader-confirm',
 }
 
 export enum TypeMessageEnum {
diff --git a/src/types/DepositForm.ts b/src/types/DepositForm.ts
deleted file mode 100644
index ddec655fc..000000000
--- a/src/types/DepositForm.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-export type DepositTimeInForceId = 1 | 2 | 3;
-export type DepositFundingPriceEntryTypeId = 1 | 2;
-
-export type DepositListingData = {
-  id?: number;
-  marketplaceId?: number;
-  symbolCode?: string;
-  symbolName?: string;
-  symbolNameEng?: string;
-  marketStatusId?: number;
-  issueId?: number;
-  tradingCurrencyId?: number;
-  lotSize?: number;
-  minStep?: number;
-  precision?: number;
-  listLevel?: number | null;
-  issueMode?: string;
-  updated?: string;
-  created?: string;
-  minOrderSize?: number;
-  executionStyleId?: number | null;
-  orderPresetAmount?: number;
-  orderPresetId?: number;
-  [key: string]: unknown;
-};
-
-export type DepositMarketplaceData = {
-  id?: number;
-  exchangeId?: number;
-  name?: string;
-  nameEng?: string;
-  anonymous?: boolean;
-  settlementCurrencyId?: number;
-  addressedSignId?: number;
-  duration?: number;
-  sectorId?: number;
-  board?: string;
-  settleType?: string | null;
-  multiLegSignId?: number | null;
-  marketTypeId?: number | null;
-  benchmark?: string | null;
-  [key: string]: unknown;
-};
-
-export type DepositMoexSecurityData = {
-  id?: number;
-  settleDate1?: string;
-  settleDate2?: string;
-  issueId?: number;
-  marketplaceId?: number;
-  [key: string]: unknown;
-};
-
-export type DepositFormData = {
-  listingData?: DepositListingData;
-  returnDate?: string;
-  fundingDuration?: number;
-};
-
-export type DepositFormValues = {
-  listingData?: DepositListingData;
-  fundingPrice: string;
-  requestVolume: string;
-  quantity: string;
-  accountId?: number;
-  partyId?: number;
-  clientCode: string;
-  timeInForceId: DepositTimeInForceId;
-  fundingPriceEntryTypeId: DepositFundingPriceEntryTypeId;
-  calculateSingleLimit: boolean;
-};
-
-export type DepositFormSubmitPayload = {
-  formId: string;
-  values: DepositFormValues;
-  currencyRate?: number;
-};
-
-export type DepositFormOpenProps = {
-  isInitialLoading?: boolean;
-  board?: string;
-  instrIsin?: string | null;
-  quantity?: number;
-  price?: number;
-};
diff --git a/src/types/Glass/GlassState.ts b/src/types/Glass/GlassState.ts
new file mode 100644
index 000000000..aeeac825d
--- /dev/null
+++ b/src/types/Glass/GlassState.ts
@@ -0,0 +1,14 @@
+export type GlassProps = {
+  glassState: {
+    view: 'four-col-1' | 'four-col-2' | 'four-col-3';
+    showSpread: boolean;
+    showPlot: boolean;
+    showYield: boolean;
+    depthCount: number;
+    bestPriceIndication: boolean;
+    displayMyFirmOrders: boolean;
+    choosenInstrument: string;
+  };
+};
+
+export type GlassState = Partial<GlassProps['glassState']>;
diff --git a/src/types/Requests/BondsDuration.ts b/src/types/Requests/BondsDuration.ts
new file mode 100644
index 000000000..9acb8dce6
--- /dev/null
+++ b/src/types/Requests/BondsDuration.ts
@@ -0,0 +1,14 @@
+import { Colorable } from '@widgets/MarketMap/types';
+import { SearchScreenerInstrument } from 'types/BondsScreener';
+
+/**
+ * @deprecated
+ */
+export type BondsDuration = {
+  secCode: SearchScreenerInstrument['isin'];
+  title: SearchScreenerInstrument['shortName'];
+  /**
+   * @deprecated
+   */
+  duration?: number;
+} & Colorable;
diff --git a/src/types/Requests/Emitter.ts b/src/types/Requests/Emitter.ts
new file mode 100644
index 000000000..f5376f949
--- /dev/null
+++ b/src/types/Requests/Emitter.ts
@@ -0,0 +1,10 @@
+import { Colorable } from '@widgets/MarketMap/types';
+
+/**
+ * @deprecated
+ */
+export type Emitter = {
+  externalId: number;
+  title: string;
+  inn?: string;
+} & Colorable;
diff --git a/src/types/SapfirSpfi.ts b/src/types/SapfirSpfi.ts
index d3103d447..b843a75b0 100644
--- a/src/types/SapfirSpfi.ts
+++ b/src/types/SapfirSpfi.ts
@@ -48,19 +48,17 @@ export enum DealXCCYDirection {
   Sell = 'RECIEVE_PAY',
 }
 
-/** Лэйблы продкутов СПФИ */
 export enum TicketProductLabels {
   IRS_OIS = 'IRS/OIS',
   FX_SWAP = 'FX Swap',
   XCCY = 'XCCY',
-  BASIS_XCCY = 'BASIS (XCCY)',
 }
 
+// Инвертированный enum к TicketProductKeys
 export enum TicketProduct {
-  IRS_OIS = 'IRS_OIS',
-  FX_SWAP = 'FX_SWAP',
+  'IRS_OIS' = 'IRS_OIS',
+  'FX_SWAP' = 'FX_SWAP',
   XCCY = 'XCCY',
-  BASIS_XCCY = 'BASIS_XCCY',
 }
 
 export enum TicketType {
diff --git a/src/types/TradeJournal/dataTypes.ts b/src/types/TradeJournal/dataTypes.ts
index a4a11c934..93fbec4ff 100644
--- a/src/types/TradeJournal/dataTypes.ts
+++ b/src/types/TradeJournal/dataTypes.ts
@@ -12,6 +12,7 @@ type TStatuses = 'OFFERED' | 'CREATED' | 'REJECTED' | 'IN_PROGRESS';
 
 type TOffer = {
   baseRate: string | number | null;
+  comment: string | null;
   id: number;
   isRead: boolean;
   /** trId */
@@ -19,10 +20,6 @@ type TOffer = {
   status: TStatuses;
   actualAmount?: number;
   volume: string | number | null;
-  /** Общий комментарий. */
-  comment1: string | null;
-  /** Внутренний комментарий. */
-  comment2: string | null;
 };
 
 type TQuotation = {
@@ -45,10 +42,7 @@ type TQuotation = {
   account?: string;
   /** Дата и время размещения сбора заявок */
   collectionAt: string; // datetime 2026-04-19 18:00:00
-  /** Общий комментарий. */
-  comment1: string | null;
-  /** Внутренний комментарий. */
-  comment2: string | null;
+  comment?: string | null;
   /** Список контрагентов */
   contacts: string[];
   status: TStatuses;
@@ -66,11 +60,11 @@ type TQuotation = {
   };
 };
 
-type TPatchOfferData = Pick<TOffer, 'id' | 'volume' | 'baseRate' | 'comment1' | 'comment2'>;
+type TPatchOfferData = Pick<TOffer, 'id' | 'volume' | 'baseRate'>;
 
 type TCollectionTimeOptionValue = '5m' | '15m' | '30m' | '1h' | '3h' | '5h' | 'until';
 
-type TQuotationFormValues = Omit<TQuotation, 'currency2' | 'startDate' | 'endDate' | 'collectionAt'> & {
+type TFormValues = Omit<TQuotation, 'currency2' | 'startDate' | 'endDate' | 'collectionAt'> & {
   applicationCollectionTime: string;
   calculationOfDays: number;
   placementPeriod: string;
@@ -82,12 +76,12 @@ type TQuotationFormValues = Omit<TQuotation, 'currency2' | 'startDate' | 'endDat
 export {
   TCollectionTimeOptionValue,
   TDirection,
+  TFormValues,
   TOffer,
   TOptionsResponse,
   TPatchOfferData,
   TPlacementPeriod,
   TProduct,
   TQuotation,
-  TQuotationFormValues,
   TStatuses,
 };
diff --git a/src/types/TradeJournal/index.ts b/src/types/TradeJournal/index.ts
index 0e15efa61..a2764f0c7 100644
--- a/src/types/TradeJournal/index.ts
+++ b/src/types/TradeJournal/index.ts
@@ -1,4 +1,3 @@
 export * from './dataTypes';
 export * from './tableTypes';
 export * from './sagaTypes';
-export * from './ticketTypes';
diff --git a/src/types/TradeJournal/sagaTypes.ts b/src/types/TradeJournal/sagaTypes.ts
index 1b9d0a265..8fe70ce48 100644
--- a/src/types/TradeJournal/sagaTypes.ts
+++ b/src/types/TradeJournal/sagaTypes.ts
@@ -46,16 +46,11 @@ type TViewDetailsModalProps = ModalBaseProps & { quotationId: number };
 
 type TRejectModalProps = ModalBaseProps & TSagaProps;
 
-type TViewCommentModalPayloadProps = { comment: string; writerTrId: string };
-type TViewCommentModalProps = ModalBaseProps & TViewCommentModalPayloadProps;
-
 export {
   TOfferReject,
   TQuotationReject,
   TRejectModalProps,
   TRejectOfferOrQuotationRequestProps,
   TSagaProps,
-  TViewCommentModalPayloadProps,
-  TViewCommentModalProps,
   TViewDetailsModalProps,
 };
diff --git a/src/types/TradeJournal/ticketTypes.ts b/src/types/TradeJournal/ticketTypes.ts
deleted file mode 100644
index 1cf4cb8bd..000000000
--- a/src/types/TradeJournal/ticketTypes.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { Dayjs } from 'dayjs';
-
-import { TDirection, TProduct } from './dataTypes';
-
-type TTicketFromBackEnd = {
-  offerId: number | null;
-  quotationId: number | null;
-  /** UUID */
-  ticketId: string;
-  product: TProduct;
-  direction: TDirection;
-  volume: string;
-  minRateStep: number | null;
-  /** Только для депозита/МБК */
-  currency1: string;
-  /** Если тип сделки= fx/fx swap */
-  currency2: string | null;
-  /** Дата начала */
-  startDate: string;
-  /** Дата окончания и время сбора заявок */
-  endDate: string; // datetime 2026-04-19 18:00:00
-  /** Торговый счет */
-  account: string | null;
-  /** Список контрагентов */
-  contacts: string[];
-  baseRate: number | null;
-  createdAt: string; // datetime 2026-06-30T14:57:51.522845
-  offer: string[] | null;
-  status: string;
-  serial: number;
-};
-
-type TCreateTicketFromZero = Pick<
-  TTicketFromBackEnd,
-  | 'account'
-  | 'baseRate'
-  | 'contacts'
-  | 'currency1'
-  | 'direction'
-  | 'endDate'
-  | 'minRateStep'
-  | 'product'
-  | 'startDate'
-  | 'volume'
->;
-
-type TCreateTicketFromZeroRes = TCreateTicketFromZero & Pick<TTicketFromBackEnd, 'serial' | 'createdAt' | 'ticketId'>;
-
-type TTicketFormValues = Omit<TCreateTicketFromZero, 'startDate' | 'endDate'> & {
-  calculationOfDays: number;
-  placementPeriod: string;
-  startDate: Dayjs;
-  endDate: Dayjs;
-};
-
-export { TCreateTicketFromZero, TCreateTicketFromZeroRes, TTicketFormValues, TTicketFromBackEnd };
diff --git a/src/types/Widgets.ts b/src/types/Widgets.ts
index f65c1ad38..f1c95cea4 100644
--- a/src/types/Widgets.ts
+++ b/src/types/Widgets.ts
@@ -1,6 +1,5 @@
-import type { Position } from 'react-rnd';
 import type { Workspace } from './Workspace';
-import type { ViewType } from '@widgets/Glass/types';
+import type { Position } from 'react-rnd';
 
 export interface WidgetPosition {
   x: number;
@@ -56,6 +55,7 @@ export enum WidgetContentType {
   depositCcpTradeTables = 'depositCcpTradeTables',
   depositCcpReferenceTables = 'depositCcpReferenceTables',
   depositCcpRiskTables = 'depositCcpRiskTables',
+  userAdministration = 'userAdministration',
 }
 
 export interface WidgetSizes {
@@ -140,7 +140,7 @@ export interface WidgetPackedProps {
 }
 
 export interface GlassWidgetConfig {
-  view: ViewType;
+  view: 'four-col-1' | 'four-col-2' | 'four-col-3';
   showYield: boolean;
   showSpread: boolean;
   choosenInstrument: string;
diff --git a/src/types/Workspace.ts b/src/types/Workspace.ts
index 7a2e43fd6..8118834ed 100644
--- a/src/types/Workspace.ts
+++ b/src/types/Workspace.ts
@@ -73,7 +73,6 @@ export type LibraryWorkspaceType =
   | 'repoMidSizeScreen'
   | 'ntb'
   | 'ntbIndexes'
-  | 'ntbLogistic'
   | 'allQoutesOpenFirst'
   | 'marketsOverviewLargeScreen'
   | 'marketsOverviewMidSizeScreen'
diff --git a/src/types/spfiDrafts.ts b/src/types/spfiDrafts.ts
index d97382182..abf75cff5 100644
--- a/src/types/spfiDrafts.ts
+++ b/src/types/spfiDrafts.ts
@@ -8,16 +8,14 @@ export enum SpfiDraftStatus {
   REVIEW = 'REVIEW',
   REMOVED = 'REMOVED',
   COMPLETED = 'COMPLETED',
-  ARCHIVED = 'ARCHIVED',
 }
 
-export const SpfiDraftStatusLabels: Record<SpfiDraftStatus, string> = {
+export const SpfiDraftStatusLabels = {
   [SpfiDraftStatus.APPROVE]: 'На утверждение',
   [SpfiDraftStatus.EXECUTE]: 'Исполняется',
   [SpfiDraftStatus.REVIEW]: 'На доработке',
   [SpfiDraftStatus.REMOVED]: 'Снят',
   [SpfiDraftStatus.COMPLETED]: 'Завершён',
-  [SpfiDraftStatus.ARCHIVED]: 'Архив',
 };
 
 export enum DraftDirectionToLabel {
diff --git a/src/types/utilityTypes.ts b/src/types/utilityTypes.ts
index 711d4171e..4f1bcb1ca 100644
--- a/src/types/utilityTypes.ts
+++ b/src/types/utilityTypes.ts
@@ -4,7 +4,7 @@ export type RangeValue<T> = [T | null, T | null] | null;
 
 export type PartialWithRequired<T, K extends keyof T> = Partial<Omit<T, K>> & Pick<T, K>;
 
-export type RequiredWithPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
+export type RequeiredWithPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
 
 export type DatesRange = RangeValue<Dayjs>;
 
diff --git a/src/uikit/_stories_/Accordion.stories.tsx b/src/uikit/Accordion/Accordion.stories.tsx
similarity index 95%
rename from src/uikit/_stories_/Accordion.stories.tsx
rename to src/uikit/Accordion/Accordion.stories.tsx
index 81a3ddff6..ab3097b69 100644
--- a/src/uikit/_stories_/Accordion.stories.tsx
+++ b/src/uikit/Accordion/Accordion.stories.tsx
@@ -1,9 +1,9 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { Accordion } from '@uikit/Accordion';
 import { Switch } from '@uikit/Switch';
 
+import { Accordion } from './Accordion';
 
 export default {
   title: 'uikit/Accordion',
diff --git a/src/uikit/_stories_/Button.stories.tsx b/src/uikit/Button/Button.stories.tsx
similarity index 100%
rename from src/uikit/_stories_/Button.stories.tsx
rename to src/uikit/Button/Button.stories.tsx
diff --git a/src/uikit/Button/index.tsx b/src/uikit/Button/index.tsx
index 1d2eca4c1..10a7061cc 100644
--- a/src/uikit/Button/index.tsx
+++ b/src/uikit/Button/index.tsx
@@ -3,10 +3,8 @@ import cn from 'classnames';
 import React, { ComponentProps, FC, forwardRef } from 'react';
 
 import { ButtonLoadingSpinner } from '@components/Icons/ButtonLoadingSpinner';
-import { IconLegacyProps } from '@components/Icons/IconsProps';
-import { type IconVariant } from '@uikit/Icon';
+import { IconProps } from '@components/Icons/IconsProps';
 
-import { Icon as UikitIcon } from '@uikit/Icon';
 import Tooltip from '@uikit/Tooltip';
 
 import styles from './button.module.scss';
@@ -17,7 +15,7 @@ export interface IButton extends ComponentProps<'button'> {
   size?: 'M' | 'S';
   isLoading?: boolean;
   iconEnabled?: 'start' | 'end' | 'start-end';
-  Icon?: FC<IconLegacyProps> | IconVariant;
+  Icon?: FC<IconProps>;
   text?: string;
   tooltipProps?: TooltipProps;
   classNames?: { icon?: string };
@@ -64,28 +62,10 @@ export const Button = forwardRef<HTMLButtonElement, IButton>(
           ref={ref}
           {...props}
         >
-          {Icon &&
-            withStartIcon &&
-            (typeof Icon === 'string' ? (
-              <UikitIcon
-                variant={Icon}
-                className={cn(styles.icon, classNames?.icon)}
-              />
-            ) : (
-              <Icon className={cn(styles.icon, classNames?.icon)} />
-            ))}
+          {Icon && withStartIcon && <Icon className={cn(styles.icon, classNames?.icon)} />}
           {text && <span className={styles.text}>{text}</span>}
           <ButtonLoadingSpinner className={styles.spinner} />
-          {Icon &&
-            withEndIcon &&
-            (typeof Icon === 'string' ? (
-              <UikitIcon
-                variant={Icon}
-                className={cn(styles.icon, classNames?.icon)}
-              />
-            ) : (
-              <Icon className={cn(styles.icon, classNames?.icon)} />
-            ))}
+          {Icon && withEndIcon && <Icon className={cn(styles.icon, classNames?.icon)} />}
         </button>
       </Tooltip>
     );
diff --git a/src/uikit/_stories_/CheckableTag.mdx b/src/uikit/CheckableTag/CheckableTag.mdx
similarity index 100%
rename from src/uikit/_stories_/CheckableTag.mdx
rename to src/uikit/CheckableTag/CheckableTag.mdx
diff --git a/src/uikit/_stories_/CheckableTag.stories.tsx b/src/uikit/CheckableTag/CheckableTag.stories.tsx
similarity index 90%
rename from src/uikit/_stories_/CheckableTag.stories.tsx
rename to src/uikit/CheckableTag/CheckableTag.stories.tsx
index 78a35f870..ad1654c8a 100644
--- a/src/uikit/_stories_/CheckableTag.stories.tsx
+++ b/src/uikit/CheckableTag/CheckableTag.stories.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { CheckableTag } from '@uikit/CheckableTag';
+import { CheckableTag } from './CheckableTag';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/CheckableTag/checkableTag.module.scss b/src/uikit/CheckableTag/checkableTag.module.scss
index 4a0ef7c61..47aed8ba4 100644
--- a/src/uikit/CheckableTag/checkableTag.module.scss
+++ b/src/uikit/CheckableTag/checkableTag.module.scss
@@ -1,55 +1,52 @@
 @import 'colors.scss';
 
+
 .checkableTag {
-  height: 32px;
-  background-color: $surface-button-basis-secondary;
-  border-radius: 4px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  padding: 0 8px;
-  width: fit-content;
-  cursor: pointer;
-  font-family: $font-base;
-  transition: background-color 0.3s ease;
-
-  &:hover {
-    background-color: $action-button-secondary-hover;
-  }
-
-  :active {
-    background-color: $action-button-primary-pressed;
-  }
-
-  &-active {
-    background-color: $surface-button-basis-primary;
-
-    &:focus {
-      background-color: $action-button-primary-pressed;
-    }
+    height: 32px;
+    background-color: $surface-button-basis-secondary;
+    border-radius: 4px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    padding: 0 8px;
+    width: fit-content;
+    cursor: pointer;
+    font-family: $font-base;
+    transition: background-color 0.3s ease;
 
-    &:active {
-      background-color: $action-button-primary-hover;
+    &:hover {
+        background-color: $action-button-secondary-hover;
     }
 
-    .checkableTag_typography {
-      color: $text-interface-on-color;
+    :active {
+        background-color: $action-button-primary-pressed;
     }
-  }
 
-  &-unfilled:not(.checkableTag-active) {
-    background-color: transparent;
+    &-active {
+        background-color: $surface-button-basis-primary;
 
-    &:hover {
-      background-color: $action-button-secondary-hover;
+        &:focus {
+            background-color: $action-button-primary-pressed;
+        }
+
+        &:active {
+            background-color: $action-button-primary-hover;
+        }
     }
 
-    &:active {
-      background-color: $action-button-primary-pressed;
+    &-unfilled:not(.checkableTag-active) {
+        background-color: transparent;
+
+        &:hover {
+            background-color: $action-button-secondary-hover;
+        }
+
+        &:active {
+            background-color: $action-button-primary-pressed;
+        }
     }
-  }
 
-  &_typography {
-    color: $text-interface-primary-value;
-  }
-}
+    &_typography {
+        color: $text-interface-primary-value;
+    }
+}
\ No newline at end of file
diff --git a/src/uikit/_stories_/Checkbox.stories.tsx b/src/uikit/Checkbox/Checkbox/Checkbox.stories.tsx
similarity index 93%
rename from src/uikit/_stories_/Checkbox.stories.tsx
rename to src/uikit/Checkbox/Checkbox/Checkbox.stories.tsx
index 0c8b95ce4..44753fa17 100644
--- a/src/uikit/_stories_/Checkbox.stories.tsx
+++ b/src/uikit/Checkbox/Checkbox/Checkbox.stories.tsx
@@ -1,6 +1,6 @@
 import React, { useState } from 'react';
 
-import { Checkbox } from '@uikit/Checkbox';
+import { Checkbox } from './index';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/Chip.stories.tsx b/src/uikit/Chip/Chip.stories.tsx
similarity index 92%
rename from src/uikit/_stories_/Chip.stories.tsx
rename to src/uikit/Chip/Chip.stories.tsx
index e28642b7b..54f89f939 100644
--- a/src/uikit/_stories_/Chip.stories.tsx
+++ b/src/uikit/Chip/Chip.stories.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { Chip } from '@uikit/Chip';
+import { Chip } from './Chip';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/ContextMenu.stories.tsx b/src/uikit/ContextMenu/ContextMenu.stories.tsx
similarity index 91%
rename from src/uikit/_stories_/ContextMenu.stories.tsx
rename to src/uikit/ContextMenu/ContextMenu.stories.tsx
index 8674375e5..91cd8c4fa 100644
--- a/src/uikit/_stories_/ContextMenu.stories.tsx
+++ b/src/uikit/ContextMenu/ContextMenu.stories.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { ContextMenu } from '@uikit/ContextMenu';
+import { ContextMenu } from './ContextMenu';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/ContextMenuOverlay.stories.tsx b/src/uikit/ContextMenuOverlay/ContextMenuOverlay.stories.tsx
similarity index 90%
rename from src/uikit/_stories_/ContextMenuOverlay.stories.tsx
rename to src/uikit/ContextMenuOverlay/ContextMenuOverlay.stories.tsx
index c59f0a097..874d06f45 100644
--- a/src/uikit/_stories_/ContextMenuOverlay.stories.tsx
+++ b/src/uikit/ContextMenuOverlay/ContextMenuOverlay.stories.tsx
@@ -1,7 +1,7 @@
 import React from 'react';
 
-import { ContextMenuOverlay } from '@uikit/ContextMenuOverlay';
-import { useContextMenuOverlay } from '@uikit/ContextMenuOverlay/hooks/useContextMenuOverlay';
+import { ContextMenuOverlay } from './ContextMenuOverlay';
+import { useContextMenuOverlay } from './hooks/useContextMenuOverlay';
 
 import type { Meta, StoryObj } from '@storybook/react';
 import type { ContextMenuItem } from '@uikit/ContextMenu/types';
diff --git a/src/uikit/_stories_/Counter.stories.tsx b/src/uikit/Counter/Counter.stories.tsx
similarity index 97%
rename from src/uikit/_stories_/Counter.stories.tsx
rename to src/uikit/Counter/Counter.stories.tsx
index b6f5cf826..7513121e5 100644
--- a/src/uikit/_stories_/Counter.stories.tsx
+++ b/src/uikit/Counter/Counter.stories.tsx
@@ -1,7 +1,7 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { Counter } from '@uikit/Counter';
+import { Counter } from './Counter';
 
 export default {
   title: 'UIKit/Counter',
diff --git a/src/uikit/_stories_/Divider.stories.tsx b/src/uikit/Divider/Divider.stories.tsx
similarity index 94%
rename from src/uikit/_stories_/Divider.stories.tsx
rename to src/uikit/Divider/Divider.stories.tsx
index 9700fc5f3..9bd3817cd 100644
--- a/src/uikit/_stories_/Divider.stories.tsx
+++ b/src/uikit/Divider/Divider.stories.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { Divider } from '@uikit/Divider';
+import { Divider } from './Divider';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/FilterButton.stories.tsx b/src/uikit/FilterButton/FilterButton.stories.tsx
similarity index 94%
rename from src/uikit/_stories_/FilterButton.stories.tsx
rename to src/uikit/FilterButton/FilterButton.stories.tsx
index 7dc41125b..6db47a64f 100644
--- a/src/uikit/_stories_/FilterButton.stories.tsx
+++ b/src/uikit/FilterButton/FilterButton.stories.tsx
@@ -1,7 +1,7 @@
 import React, { useState } from 'react';
 
-import { FilterButton } from '@uikit/FilterButton';
-import { ValueType } from '@uikit/FilterButton/types';
+import { FilterButton } from './FilterButton';
+import { ValueType } from './types';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/Icon/Icon.tsx b/src/uikit/Icon/Icon.tsx
index c867b49d3..1fe8520f5 100644
--- a/src/uikit/Icon/Icon.tsx
+++ b/src/uikit/Icon/Icon.tsx
@@ -3,18 +3,13 @@ import React from 'react';
 import { ICON_MAP } from './const';
 import { IconProps } from './types';
 
-export const Icon: React.FC<IconProps> = ({ variant, className = '', style, size = 16, ...restProps }) => {
+export const Icon: React.FC<IconProps> = ({ variant, className = '', style, ...restProps }) => {
   const IconComponent = ICON_MAP[variant];
 
-  const sizeProps = size === 'original'
-    ? {}
-    : { width: size, height: size }
-
   return (
     <IconComponent
       className={className}
       style={style}
-      {...sizeProps}
       {...restProps}
     />
   );
diff --git a/src/uikit/Icon/IconL.tsx b/src/uikit/Icon/IconL.tsx
deleted file mode 100644
index 2f39128ee..000000000
--- a/src/uikit/Icon/IconL.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import React, { CSSProperties } from 'react';
-
-import { ICON_MAP_LEGACY } from './const';
-import { IconVariants } from './types';
-
-export interface IconDeprecatedProps {
-  variant: IconVariants;
-  size?: 16 | 24 | 'original';
-  className?: string;
-  style?: CSSProperties;
-  onClick?: (e: React.MouseEvent) => void;
-}
-
-export const IconDeprecated: React.FC<IconDeprecatedProps> = ({ variant, className = '', style, ...restProps }) => {
-  const IconComponent = ICON_MAP_LEGACY[variant];
-
-  return (
-    <IconComponent
-      className={className}
-      style={style}
-      {...restProps}
-    />
-  );
-};
diff --git a/src/uikit/Icon/const.ts b/src/uikit/Icon/const.ts
index 10c93779d..20f985186 100644
--- a/src/uikit/Icon/const.ts
+++ b/src/uikit/Icon/const.ts
@@ -1,222 +1,24 @@
-import {
-  ArrowLeft,
-  ArrowRightLeft,
-  Ban,
-  Bell,
-  Bookmark,
-  Calculator,
-  Calendar,
-  CalendarCheck,
-  ChartColumnDecreasing,
-  ChartLine,
-  ChartNoAxesColumnIncreasing,
-  ChartNoAxesCombined,
-  ChartPie,
-  Check,
-  ChevronDown,
-  ChevronLeft,
-  ChevronRight,
-  ChevronUp,
-  CircleAlert,
-  CircleArrowRight,
-  CircleCheck,
-  CircleChevronLeft,
-  CircleChevronRight,
-  CircleMinus,
-  CircleQuestionMark,
-  CircleX,
-  Columns2,
-  Columns3,
-  Copy,
-  Copyright,
-  EllipsisVertical,
-  Expand,
-  Eye,
-  EyeClosed,
-  File,
-  FilePlusCorner,
-  FileUp,
-  FileX,
-  FolderPlus,
-  Forward,
-  Fullscreen,
-  Headset,
-  Image,
-  ImagePlus,
-  Inbox,
-  Info,
-  LaptopMinimal,
-  Link,
-  List,
-  ListFilter,
-  ListSortAscending,
-  ListSortDescending,
-  LoaderCircle,
-  Lock,
-  LockOpen,
-  LogOut,
-  Mail,
-  Menu,
-  MessageSquare,
-  MessageSquareText,
-  MessagesSquare,
-  Minus,
-  MonitorDown,
-  MoveDown,
-  MoveUp,
-  Paperclip,
-  Pencil,
-  Phone,
-  Pin,
-  Plus,
-  Printer,
-  RefreshCw,
-  Reply,
-  RotateCcw,
-  RotateCw,
-  Save,
-  Search,
-  SendHorizontal,
-  Settings,
-  Share,
-  ShieldCheck,
-  Shrink,
-  Square,
-  SquareSplitHorizontal,
-  Table2,
-  Trash2,
-  TriangleAlert,
-  Underline,
-  UserPlus,
-  UserRound,
-  Users,
-  X,
-  Zap,
-} from 'lucide-react';
+import { ReactComponent as BlockRounded } from '../../../public/project-icons/block/block-rounded.svg';
+import { ReactComponent as Calculate } from '../../../public/project-icons/calculate/calculate.svg';
+import { ReactComponent as ChevronLeftOutlined } from '../../../public/project-icons/chevron-left/chevron-left-outlined.svg';
+import { ReactComponent as EmailOutLined } from '../../../public/project-icons/email/email-outlined.svg';
+import { ReactComponent as FileCopyOutlined } from '../../../public/project-icons/file-copy/file-copy-outlined.svg';
+import { ReactComponent as CompareArrowsRounded } from '../../../public/project-icons/compare-arrows/compare-arrows-rounded.svg';
+import { ReactComponent as ForumOutlined } from '../../../public/project-icons/forum/forum-outlined.svg';
+import { ReactComponent as HeadsetMicOutlined } from '../../../public/project-icons/headset-mic/headset-mic-outlined.svg';
+import { ReactComponent as LinkRounded } from '../../../public/project-icons/link/link-rounded.svg';
+import { ReactComponent as MoveToInboxRounded } from '../../../public/project-icons/move-to-inbox/move-to-inbox-rounded.svg';
+import { ReactComponent as MyMessageStateSent } from '../../../public/project-icons/my-message-state/my-message-state-sent.svg';
+import { ReactComponent as MyMessageStateDelivered } from '../../../public/project-icons/my-message-state/my-message-state-delivered.svg';
+import { ReactComponent as PersonAddOutlined } from '../../../public/project-icons/person-add/person-add-outlined.svg';
+import { ReactComponent as PhoneOutlined } from '../../../public/project-icons/phone/phone-outlined.svg';
+import { ReactComponent as PostAddOutlined } from '../../../public/project-icons/post-add/post-add-outlined.svg';
+import { ReactComponent as PrintOutlined } from '../../../public/project-icons/print/print-outlined.svg';
+import { ReactComponent as SendRounded } from '../../../public/project-icons/send/send-rounded.svg';
 
-import { ReactComponent as InfoOutlined } from '../../../public/project-icons/info/info-outlined.svg';
+import { IconVariants } from './types';
 
-import { ReactComponent as BlockRounded } from './icons/migration/block/block-rounded.svg';
-import { ReactComponent as Calculate } from './icons/migration/calculate/calculate.svg';
-import { ReactComponent as ChevronLeftOutlined } from './icons/migration/chevron-left/chevron-left-outlined.svg';
-import { ReactComponent as CompareArrowsRounded } from './icons/migration/compare-arrows/compare-arrows-rounded.svg';
-import { ReactComponent as EmailOutLined } from './icons/migration/email/email-outlined.svg';
-import { ReactComponent as FileCopyOutlined } from './icons/migration/file-copy/file-copy-outlined.svg';
-import { ReactComponent as ForumOutlined } from './icons/migration/forum/forum-outlined.svg';
-import { ReactComponent as HeadsetMicOutlined } from './icons/migration/headset-mic/headset-mic-outlined.svg';
-import { ReactComponent as LinkRounded } from './icons/migration/link/link-rounded.svg';
-import { ReactComponent as MoveToInboxRounded } from './icons/migration/move-to-inbox/move-to-inbox-rounded.svg';
-import { ReactComponent as MyMsgStateDlvrd } from './icons/migration/my-message-state/my-message-state-delivered.svg';
-import { ReactComponent as MyMessageStateSent } from './icons/migration/my-message-state/my-message-state-sent.svg';
-import { ReactComponent as PersonAddOutlined } from './icons/migration/person-add/person-add-outlined.svg';
-import { ReactComponent as PhoneOutlined } from './icons/migration/phone/phone-outlined.svg';
-import { ReactComponent as PostAddOutlined } from './icons/migration/post-add/post-add-outlined.svg';
-import { ReactComponent as PrintOutlined } from './icons/migration/print/print-outlined.svg';
-import { ReactComponent as SendRounded } from './icons/migration/send/send-rounded.svg';
-
-import { ReactComponent as UserGroupPlus } from './icons/user-group-plus.svg';
-
-import { IconVariant, IconVariants } from './types';
-
-export const ICON_MAP: Record<IconVariant, React.FC<React.SVGProps<SVGSVGElement>>> = {
-  'chart-column-decreasing': ChartColumnDecreasing,
-  bell: Bell,
-  ban: Ban,
-  bookmark: Bookmark,
-  calculator: Calculator,
-  'calendar-check-2': CalendarCheck,
-  calendar: Calendar,
-  'chart-line': ChartLine,
-  'chart-pie': ChartPie,
-  check: Check,
-  'chevron-down': ChevronDown,
-  'chevron-up': ChevronUp,
-  'chevron-left': ChevronLeft,
-  'chevron-right': ChevronRight,
-  'circle-minus': CircleMinus,
-  'circle-question-mark': CircleQuestionMark,
-  'circle-x': CircleX,
-  'columns-2': Columns2,
-  'columns-3': Columns3,
-  copy: Copy,
-  copyright: Copyright,
-  'ellipsis-vertical': EllipsisVertical,
-  expand: Expand,
-  'eye-closed': EyeClosed,
-  eye: Eye,
-  'file-plus-corner': FilePlusCorner,
-  'file-up': FileUp,
-  'file-x': FileX,
-  file: File,
-  'folder-plus': FolderPlus,
-  forward: Forward,
-  fullscreen: Fullscreen,
-  headset: Headset,
-  image: Image,
-  inbox: Inbox,
-  info: Info,
-  'laptop-minimal': LaptopMinimal,
-  'link-2': Link,
-  list: List,
-  'lock-open': LockOpen,
-  lock: Lock,
-  'log-out': LogOut,
-  mail: Mail,
-  'message-square-text': MessageSquareText,
-  'message-square': MessageSquare,
-  'messages-square': MessagesSquare,
-  'monitor-down': MonitorDown,
-  pencil: Pencil,
-  phone: Phone,
-  pin: Pin,
-  plus: Plus,
-  printer: Printer,
-  'refresh-cw': RefreshCw,
-  reply: Reply,
-  'rotate-ccw': RotateCcw,
-  'rotate-cw': RotateCw,
-  search: Search,
-  'send-horizontal': SendHorizontal,
-  settings: Settings,
-  share: Share,
-  'shield-check': ShieldCheck,
-  shrink: Shrink,
-  'square-split-horizontal': SquareSplitHorizontal,
-  square: Square,
-  'table-2': Table2,
-  'trash-2': Trash2,
-  'triangle-alert': TriangleAlert,
-  underline: Underline,
-  'user-group-plus': UserGroupPlus,
-  'user-plus': UserPlus,
-  'user-round': UserRound,
-  users: Users,
-  x: X,
-  zap: Zap,
-  'arrow-right-left': ArrowRightLeft,
-
-  'arrow-left': ArrowLeft,
-  'chart-no-axes-column-increasing': ChartNoAxesColumnIncreasing,
-  'chart-no-axes-combined': ChartNoAxesCombined,
-  'circle-alert': CircleAlert,
-  'circle-arrow-right': CircleArrowRight,
-  'circle-check': CircleCheck,
-  'circle-chevron-left': CircleChevronLeft,
-  'circle-chevron-right': CircleChevronRight,
-  'image-plus': ImagePlus,
-  'list-filter': ListFilter,
-  'list-sort-ascending': ListSortAscending,
-  'list-sort-descending': ListSortDescending,
-  'loader-circle': LoaderCircle,
-  menu: Menu,
-  minus: Minus,
-  'move-down': MoveDown,
-  'move-up': MoveUp,
-  paperclip: Paperclip,
-  save: Save,
-};
-
-export const ICON_MAP_LEGACY: Record<IconVariants, React.FC<React.SVGProps<SVGSVGElement>>> = {
+export const ICON_MAP: Record<IconVariants, React.FC<React.SVGProps<SVGSVGElement>>> = {
   [IconVariants.EMAIL_OUTLINED]: EmailOutLined,
   [IconVariants.FORUM_OUTLINED]: ForumOutlined,
   [IconVariants.FILE_COPY_OUTLINED]: FileCopyOutlined,
@@ -233,6 +35,5 @@ export const ICON_MAP_LEGACY: Record<IconVariants, React.FC<React.SVGProps<SVGSV
   [IconVariants.CALCULATE]: Calculate,
   [IconVariants.CHEVRON_LEFT_OUTLINED]: ChevronLeftOutlined,
   [IconVariants.MY_MESSAGE_STATE_SENT]: MyMessageStateSent,
-  [IconVariants.MY_MESSAGE_STATE_DELIVERED]: MyMsgStateDlvrd,
-  [IconVariants.INFO_OUTLINED]: InfoOutlined,
+  [IconVariants.MY_MESSAGE_STATE_DELIVERED]: MyMessageStateDelivered,
 };
diff --git a/src/uikit/Icon/icons/user-group-plus.svg b/src/uikit/Icon/icons/user-group-plus.svg
deleted file mode 100644
index beda33469..000000000
--- a/src/uikit/Icon/icons/user-group-plus.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M10.5 14V12.6667C10.5 11.9594 10.2893 11.2811 9.91421 10.781C9.53914 10.281 9.03043 10 8.5 10H5.5C4.96957 10 4.46086 10.281 4.08579 10.781C3.71071 11.2811 3.5 11.9594 3.5 12.6667V14" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M2.5 10C2 10 1.66081 10.281 1.28574 10.781C0.910665 11.2811 0.699951 11.9594 0.699951 12.6667V14" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M7 7C8.38071 7 9.5 5.88071 9.5 4.5C9.5 3.11929 8.38071 2 7 2C5.61929 2 4.5 3.11929 4.5 4.5C4.5 5.88071 5.61929 7 7 7Z" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M13 5.33337V9.33337" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15 7.33337H11" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M2.04783 7.09202C1.60462 6.78943 1.25022 6.39208 1.01598 5.93513C0.781745 5.47819 0.674896 4.97575 0.704892 4.47227C0.734888 3.96879 0.900803 3.47981 1.18795 3.04859C1.47511 2.61737 1.87464 2.25722 2.3512 2" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
-</svg>
diff --git a/src/uikit/Icon/index.ts b/src/uikit/Icon/index.ts
index dac7d8406..3f20921be 100644
--- a/src/uikit/Icon/index.ts
+++ b/src/uikit/Icon/index.ts
@@ -1,3 +1 @@
 export { Icon } from './Icon';
-export { IconDeprecated, type IconDeprecatedProps } from './IconL';
-export type { IconVariant, IconVariants } from './types';
\ No newline at end of file
diff --git a/src/uikit/Icon/types.ts b/src/uikit/Icon/types.ts
index 9c4b93241..9cf3a6622 100644
--- a/src/uikit/Icon/types.ts
+++ b/src/uikit/Icon/types.ts
@@ -1,6 +1,5 @@
 import { CSSProperties } from 'react';
 
-/** deprecated */
 export enum IconVariants {
   EMAIL_OUTLINED = 'email-outlined',
   FILE_COPY_OUTLINED = 'file-copy-outlined',
@@ -19,108 +18,10 @@ export enum IconVariants {
   CHEVRON_LEFT_OUTLINED = 'chevron-left-outlined',
   MY_MESSAGE_STATE_SENT = 'my-message-state-sent',
   MY_MESSAGE_STATE_DELIVERED = 'my-message-state-delivered',
-  INFO_OUTLINED = 'info-outlined',
 }
 
-export type IconVariant =
-  | 'chart-column-decreasing'
-  | 'ban'
-  | 'bell'
-  | 'bookmark'
-  | 'calculator'
-  | 'calendar-check-2'
-  | 'calendar'
-  | 'chart-line'
-  | 'chart-pie'
-  | 'check'
-  | 'chevron-up'
-  | 'chevron-down'
-  | 'chevron-left'
-  | 'chevron-right'
-  | 'circle-minus'
-  | 'circle-question-mark'
-  | 'columns-2'
-  | 'columns-3'
-  | 'circle-x'
-  | 'copy'
-  | 'copyright'
-  | 'ellipsis-vertical'
-  | 'expand'
-  | 'eye-closed'
-  | 'eye'
-  | 'file-plus-corner'
-  | 'file-up'
-  | 'file-x'
-  | 'file'
-  | 'folder-plus'
-  | 'forward'
-  | 'fullscreen'
-  | 'headset'
-  | 'image'
-  | 'inbox'
-  | 'info'
-  | 'laptop-minimal'
-  | 'link-2'
-  | 'list'
-  | 'lock-open'
-  | 'lock'
-  | 'log-out'
-  | 'mail'
-  | 'message-square-text'
-  | 'message-square'
-  | 'messages-square'
-  | 'monitor-down'
-  | 'pencil'
-  | 'phone'
-  | 'pin'
-  | 'plus'
-  | 'printer'
-  | 'refresh-cw'
-  | 'reply'
-  | 'rotate-ccw'
-  | 'rotate-cw'
-  | 'search'
-  | 'send-horizontal'
-  | 'settings'
-  | 'share'
-  | 'shield-check'
-  | 'shrink'
-  | 'square-split-horizontal'
-  | 'square'
-  | 'table-2'
-  | 'trash-2'
-  | 'triangle-alert'
-  | 'underline'
-  | 'user-group-plus'
-  | 'user-plus'
-  | 'user-round'
-  | 'users'
-  | 'x'
-  | 'zap'
-  | 'arrow-right-left'
-  | 'arrow-left'
-  | 'chart-no-axes-column-increasing'
-  | 'chart-no-axes-combined'
-  | 'circle-alert'
-  | 'circle-arrow-right'
-  | 'circle-check'
-  | 'circle-chevron-left'
-  | 'circle-chevron-right'
-  | 'image-plus'
-  | 'list-filter'
-  | 'list-sort-ascending'
-  | 'list-sort-descending'
-  | 'loader-circle'
-  | 'menu'
-  | 'minus'
-  | 'move-down'
-  | 'move-up'
-  | 'paperclip'
-  | 'save';
-
 export interface IconProps {
-  variant: IconVariant;
-  size?: 16 | 24 | 'original';
+  variant: IconVariants;
   className?: string;
   style?: CSSProperties;
   onClick?: (e: React.MouseEvent) => void;
diff --git a/src/uikit/_stories_/InfoBadge.stories.tsx b/src/uikit/InfoBadge/InfoBadge.stories.tsx
similarity index 90%
rename from src/uikit/_stories_/InfoBadge.stories.tsx
rename to src/uikit/InfoBadge/InfoBadge.stories.tsx
index f8a837cc6..95c48e68f 100644
--- a/src/uikit/_stories_/InfoBadge.stories.tsx
+++ b/src/uikit/InfoBadge/InfoBadge.stories.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { InfoBadge } from '@uikit/InfoBadge';
+import { InfoBadge } from './InfoBadge';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/Input/Input.module.scss b/src/uikit/Input/Input.module.scss
index 374865454..32aeda860 100644
--- a/src/uikit/Input/Input.module.scss
+++ b/src/uikit/Input/Input.module.scss
@@ -25,9 +25,9 @@
     background-color: $surface-input-active;
   }
 
-  &:focus-within:not(:hover) {
+  &:focus-within {
     background-color: $surface-input-active;
-    outline: 2px solid $action-border-focused-input-active-drag;
+    outline: 3px solid $action-border-focused-input-active-drag;
   }
 
   &-value {
@@ -43,7 +43,7 @@
 
     &:focus-within {
       border-color: $action-border-warning;
-      outline: 2px solid $action-border-warning;
+      outline: 3px solid $action-border-warning;
     }
   }
 
@@ -56,7 +56,7 @@
 
     &:focus-within {
       border-color: $action-border-critical;
-      outline: 2px solid $action-border-critical;
+      outline: 3px solid $action-border-critical;
     }
   }
 }
diff --git a/src/uikit/_stories_/Input.stories.tsx b/src/uikit/Input/Input.stories.tsx
similarity index 94%
rename from src/uikit/_stories_/Input.stories.tsx
rename to src/uikit/Input/Input.stories.tsx
index 659c656df..1e4f8a0f1 100644
--- a/src/uikit/_stories_/Input.stories.tsx
+++ b/src/uikit/Input/Input.stories.tsx
@@ -1,7 +1,7 @@
 import { Meta, StoryFn } from '@storybook/react';
 import React, { useState } from 'react';
 
-import { Input, InputProps } from '@uikit/Input';
+import { Input, InputProps } from './Input';
 
 export default {
   title: 'uikit/Input',
diff --git a/src/uikit/Input/Input.tsx b/src/uikit/Input/Input.tsx
index a71460ccc..74f1b49aa 100644
--- a/src/uikit/Input/Input.tsx
+++ b/src/uikit/Input/Input.tsx
@@ -1,4 +1,4 @@
-import { Input as AntInput, InputProps as AntInputProps } from 'antd';
+import { Input as AntInput } from 'antd';
 import cn from 'classnames';
 import React, { ChangeEventHandler, FC, ReactNode } from 'react';
 
@@ -7,7 +7,7 @@ import { Notice, NoticeProps } from '@uikit/Notice';
 
 import styles from './Input.module.scss';
 
-export type InputProps = Pick<AntInputProps, 'min' | 'max' | 'step'> & {
+export type InputProps = {
   value?: string | number;
   onChange?: ChangeEventHandler<HTMLInputElement>;
   placeholder?: string;
@@ -21,8 +21,6 @@ export type InputProps = Pick<AntInputProps, 'min' | 'max' | 'step'> & {
   prefix?: ReactNode;
   disabled?: boolean;
   className?: string;
-  /** Имя css класса для AntInput */
-  wrapperClassName?: string;
   /** Ширина инпута. Если не передана, инпут занимает все доступное пространство */
   width?: string | number;
   autoFocus?: boolean;
@@ -42,7 +40,6 @@ export const Input: FC<InputProps> = ({
   disabled,
   width,
   className,
-  wrapperClassName,
   inputType,
   prefix,
   maxLength,
@@ -62,7 +59,6 @@ export const Input: FC<InputProps> = ({
           disabled && styles['input-disabled'],
           status && styles[`input-${status}`],
           !emptyValue && styles['input-value'],
-          wrapperClassName,
         )}
         classNames={{
           input: styles.innerInput,
diff --git a/src/uikit/InputNumber/InputNumber.test.tsx b/src/uikit/InputNumber/InputNumber.test.tsx
deleted file mode 100644
index 7769e0ac4..000000000
--- a/src/uikit/InputNumber/InputNumber.test.tsx
+++ /dev/null
@@ -1,436 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react';
-import React from 'react';
-
-import { InputNumber } from './InputNumber';
-import { getFormInputNumberValue } from './utils/getFormInputNumberValue';
-
-describe('InputNumber', () => {
-  describe('getFormInputNumberValue', () => {
-    it('should return empty string for null value', () => {
-      expect(getFormInputNumberValue(null, undefined)).toBe('');
-    });
-
-    it('should return empty string for undefined value', () => {
-      expect(getFormInputNumberValue(undefined, undefined)).toBe('');
-    });
-
-    it('should return empty string for empty string value', () => {
-      expect(getFormInputNumberValue('', undefined)).toBe('');
-    });
-
-    it('should return empty string for whitespace only value', () => {
-      expect(getFormInputNumberValue('   ', undefined)).toBe('');
-    });
-
-    it('should return empty string for non-numeric value', () => {
-      expect(getFormInputNumberValue('abc', undefined)).toBe('');
-    });
-
-    it('should return number as string without decimalScale', () => {
-      expect(getFormInputNumberValue(123, undefined)).toBe('123');
-    });
-
-    it('should return number as string from string input without decimalScale', () => {
-      expect(getFormInputNumberValue('456', undefined)).toBe('456');
-    });
-
-    it('should apply decimalScale to format value', () => {
-      expect(getFormInputNumberValue(123.456, 2)).toBe('123.46');
-    });
-
-    it('should apply decimalScale to format string value', () => {
-      expect(getFormInputNumberValue('789.1234', 3)).toBe('789.123');
-    });
-
-    it('should handle negative numbers', () => {
-      expect(getFormInputNumberValue(-50.5, 1)).toBe('-50.5');
-    });
-
-    it('should handle zero value', () => {
-      expect(getFormInputNumberValue(0, 2)).toBe('0');
-    });
-
-    it('should handle zero string value', () => {
-      expect(getFormInputNumberValue('0', 2)).toBe('0');
-    });
-  });
-
-  describe('InputNumber component', () => {
-    it('should render with default props', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-        />,
-      );
-
-      const input = screen.getByRole('textbox');
-      expect(input).toBeInTheDocument();
-    });
-
-    it('should render with initial value', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={100}
-          onChange={onChange}
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input.value).toBe('100');
-    });
-
-    it('should render with decimal value and decimalScale', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={123.456}
-          onChange={onChange}
-          decimalScale={2}
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input.value).toBe('123.46');
-    });
-
-    it('should call onChange when value changes', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-        />,
-      );
-
-      const input = screen.getByRole('textbox');
-      fireEvent.change(input, { target: { value: '50' } });
-
-      expect(onChange).toHaveBeenCalledWith(50);
-    });
-
-    it('should call onChange with null when input is cleared', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={100}
-          onChange={onChange}
-        />,
-      );
-
-      const input = screen.getByRole('textbox');
-      fireEvent.change(input, { target: { value: '' } });
-
-      expect(onChange).toHaveBeenCalledWith(null);
-    });
-
-    it('should render with suffix', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-          suffix="USD"
-        />,
-      );
-
-      expect(screen.getByText('USD')).toBeInTheDocument();
-    });
-
-    it('should render stepper buttons when step prop is provided', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10}
-          onChange={onChange}
-          step={5}
-        />,
-      );
-
-      const buttons = screen.getAllByRole('button');
-      expect(buttons).toHaveLength(2);
-    });
-
-    it('should not render stepper buttons when step prop is not provided', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10}
-          onChange={onChange}
-        />,
-      );
-
-      const buttons = screen.queryAllByRole('button');
-      expect(buttons).toHaveLength(0);
-    });
-
-    it('should increment value by step when increment button is clicked', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10}
-          onChange={onChange}
-          step={5}
-        />,
-      );
-
-      const buttons = screen.getAllByRole('button');
-      const incrementButton = buttons[0];
-      fireEvent.click(incrementButton);
-
-      expect(onChange).toHaveBeenCalledWith(15);
-    });
-
-    it('should decrement value by step when decrement button is clicked', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10}
-          onChange={onChange}
-          step={5}
-        />,
-      );
-
-      const buttons = screen.getAllByRole('button');
-      const decrementButton = buttons[1];
-      fireEvent.click(decrementButton);
-
-      expect(onChange).toHaveBeenCalledWith(5);
-    });
-
-    it('should use default step of 1 when step is not provided', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10}
-          onChange={onChange}
-        />,
-      );
-
-      // This test verifies the component renders without step prop
-      // The increment/decrement functionality is tested via the stepper buttons
-      const input = screen.getByRole('textbox');
-      expect(input).toBeInTheDocument();
-    });
-
-    it('should not increment when disabled', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10}
-          onChange={onChange}
-          step={5}
-          disabled
-        />,
-      );
-
-      const buttons = screen.getAllByRole('button');
-      const incrementButton = buttons[0];
-      fireEvent.click(incrementButton);
-
-      expect(onChange).not.toHaveBeenCalled();
-    });
-
-    it('should not decrement when disabled', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10}
-          onChange={onChange}
-          step={5}
-          disabled
-        />,
-      );
-
-      const buttons = screen.getAllByRole('button');
-      const decrementButton = buttons[1];
-      fireEvent.click(decrementButton);
-
-      expect(onChange).not.toHaveBeenCalled();
-    });
-
-    it('should handle increment from null value', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-          step={1}
-        />,
-      );
-
-      const buttons = screen.getAllByRole('button');
-      const incrementButton = buttons[0];
-      fireEvent.click(incrementButton);
-
-      expect(onChange).toHaveBeenCalledWith(1);
-    });
-
-    it('should handle decrement from null value', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-          step={1}
-        />,
-      );
-
-      const buttons = screen.getAllByRole('button');
-      const decrementButton = buttons[1];
-      fireEvent.click(decrementButton);
-
-      expect(onChange).toHaveBeenCalledWith(-1);
-    });
-
-    it('should apply className prop', () => {
-      const onChange = jest.fn();
-      const { container } = render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-          className="test-class"
-        />,
-      );
-
-      expect(container.firstChild).toHaveClass('test-class');
-    });
-
-    it('should render with placeholder', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-          placeholder="Enter number"
-        />,
-      );
-
-      const input = screen.getByPlaceholderText('Enter number');
-      expect(input).toBeInTheDocument();
-    });
-
-    it('should handle decimal values with decimalScale', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10.556}
-          onChange={onChange}
-          decimalScale={2}
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input.value).toBe('10.56');
-    });
-
-    it('should update internal value when prop value changes', () => {
-      const { rerender } = render(
-        <InputNumber
-          value={10}
-          onChange={jest.fn()}
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input.value).toBe('10');
-
-      rerender(
-        <InputNumber
-          value={20}
-          onChange={jest.fn()}
-        />,
-      );
-
-      expect(input.value).toBe('20');
-    });
-
-    it('should handle negative values', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={-50}
-          onChange={onChange}
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input.value).toBe('-50');
-    });
-
-    it('should allow negative prop when set', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-          allowNegative
-        />,
-      );
-
-      const input = screen.getByRole('textbox');
-      fireEvent.change(input, { target: { value: '-100' } });
-
-      expect(onChange).toHaveBeenCalledWith(-100);
-    });
-
-    it('should handle thousandSeparator', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={1000}
-          onChange={onChange}
-          thousandSeparator=","
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input.value).toBe('1,000');
-    });
-
-    it('should handle decimalSeparator', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={10.5}
-          onChange={onChange}
-          decimalSeparator=","
-          decimalScale={2}
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      // react-number-format may not format trailing zeros, so we check for the comma separator
-      expect(input.value).toContain(',');
-    });
-
-    it('should pass autoComplete prop', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-          autoComplete="on"
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input).toHaveAttribute('autocomplete', 'on');
-    });
-
-    it('should use default autoComplete value of off', () => {
-      const onChange = jest.fn();
-      render(
-        <InputNumber
-          value={null}
-          onChange={onChange}
-        />,
-      );
-
-      const input = screen.getByRole('textbox') as HTMLInputElement;
-      expect(input).toHaveAttribute('autocomplete', 'off');
-    });
-  });
-});
diff --git a/src/uikit/InputNumber/InputNumber.tsx b/src/uikit/InputNumber/InputNumber.tsx
deleted file mode 100644
index bb7893ce9..000000000
--- a/src/uikit/InputNumber/InputNumber.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import React, { FC, useEffect, useState } from 'react';
-import { NumberFormatValues, NumericFormat, NumericFormatProps } from 'react-number-format';
-
-import { IconProps } from '@uikit/Icon/types';
-import { InputProps } from '@uikit/Input/Input';
-
-import { InputWithSuffix } from './components/InputWithSuffix';
-import { getFormInputNumberValue } from './utils/getFormInputNumberValue';
-
-export type InputNumberProps = Pick<
-  NumericFormatProps,
-  | 'allowNegative'
-  | 'allowedDecimalSeparators'
-  | 'decimalScale'
-  | 'decimalSeparator'
-  | 'thousandSeparator'
-  | 'value'
-  | 'name'
-  | 'onBlur'
-  | 'className'
-  | 'autoComplete'
-> &
-  Pick<InputProps, 'suffix' | 'min' | 'max' | 'step' | 'disabled' | 'placeholder' | 'status'> & {
-    onChange?: (value: number | null) => void;
-    value: number | null;
-  };
-export const InputNumber: FC<InputNumberProps> = ({
-  disabled,
-  step,
-  onChange,
-  value,
-  suffix,
-  autoComplete = 'off',
-  ...inputProps
-}) => {
-  const [internalValue, setInternalValue] = useState<string>(() =>
-    getFormInputNumberValue(value, inputProps.decimalScale),
-  );
-
-  // решение проблемы с удалением нулей после запятой после стирания
-  // https://github.com/s-yadav/react-number-format/issues/835
-  useEffect(() => {
-    if (value !== Number(internalValue)) {
-      setInternalValue(getFormInputNumberValue(value, inputProps.decimalScale));
-    }
-  }, [value, internalValue, inputProps.decimalScale]);
-
-  const onChangeInternal = (newValue: NumberFormatValues) => {
-    setInternalValue(String(newValue.floatValue));
-    onChange?.(newValue.floatValue ?? null);
-  };
-
-  // Блокируем ввод '00', оставляем только один '0'
-  const isAllowed = (newValue: NumberFormatValues) => newValue.value !== '00';
-
-  const onIncrement: IconProps['onClick'] = () => {
-    if (disabled) {
-      return;
-    }
-    const stepValue = (step ? Number(step) : 1) ?? 1;
-    const newValue = Number(value ?? 0) + stepValue;
-    onChangeInternal({ value: newValue.toString(), floatValue: newValue, formattedValue: newValue.toString() });
-  };
-
-  const onDecrement: IconProps['onClick'] = () => {
-    if (disabled) {
-      return;
-    }
-    const stepValue = (step ? Number(step) : 1) ?? 1;
-    const newValue = Number(value ?? 0) - stepValue;
-    onChangeInternal({ value: newValue.toString(), floatValue: newValue, formattedValue: newValue.toString() });
-  };
-
-  return (
-    <NumericFormat
-      {...inputProps}
-      disabled={disabled}
-      customInput={InputWithSuffix}
-      value={internalValue}
-      onValueChange={onChangeInternal}
-      onIncrement={onIncrement}
-      onDecrement={onDecrement}
-      nativeSuffix={suffix}
-      step={step}
-      autoComplete={autoComplete}
-      isAllowed={isAllowed}
-    />
-  );
-};
diff --git a/src/uikit/InputNumber/components/InputWithSuffix/InputWithSuffix.module.scss b/src/uikit/InputNumber/components/InputWithSuffix/InputWithSuffix.module.scss
deleted file mode 100644
index 3f7905452..000000000
--- a/src/uikit/InputNumber/components/InputWithSuffix/InputWithSuffix.module.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-@import 'colors.scss';
-
-.stepperButtons {
-  margin-inline-start: 4px;
-  display: flex;
-  flex-direction: column;
-}
-
-.stepperButton {
-  height: 15px;
-  background: transparent;
-  border: none;
-  padding: 0;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  color: $surface-icon-basis-active-primary;
-
-  &:focus, &:focus-visible {
-    outline: none;
-  }
-
-  &_disabled {
-    opacity: 0.8;
-    cursor: not-allowed;
-  }
-
-  &_last {
-    display: flex;
-  }
-}
-
-.icon {
-  width: 12px;
-  height: 8px;
-}
-
-.input {
-  padding: 0 6px 0 12px;
-}
diff --git a/src/uikit/InputNumber/components/InputWithSuffix/InputWithSuffix.tsx b/src/uikit/InputNumber/components/InputWithSuffix/InputWithSuffix.tsx
deleted file mode 100644
index 3122402e8..000000000
--- a/src/uikit/InputNumber/components/InputWithSuffix/InputWithSuffix.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import cn from 'classnames';
-import React, { FC } from 'react';
-
-import { Icon } from '@uikit/Icon';
-import { IconProps } from '@uikit/Icon/types';
-import { Input, InputProps } from '@uikit/Input/Input';
-
-import styles from './InputWithSuffix.module.scss';
-
-type InputWithSuffixProps = InputProps & {
-  nativeSuffix?: InputProps['suffix'];
-  onIncrement: IconProps['onClick'];
-  onDecrement: IconProps['onClick'];
-};
-
-export const InputWithSuffix: FC<InputWithSuffixProps> = ({
-  nativeSuffix,
-  step,
-  value,
-  disabled,
-  className,
-  onIncrement,
-  onDecrement,
-  ...restProps
-}) => (
-  <div className={cn(styles.stepperContainer, className)}>
-    <Input
-      {...restProps}
-      wrapperClassName={styles.input}
-      value={value}
-      suffix={
-        <>
-          {nativeSuffix}
-          {step && (
-            <div className={styles.stepperButtons}>
-              <button
-                type="button"
-                className={cn(styles.stepperButton, disabled && styles.stepperButton_disabled)}
-                onClick={onIncrement}
-              >
-                <Icon
-                  className={styles.icon}
-                  variant="chevron-up"
-                />
-              </button>
-              <button
-                type="button"
-                className={cn(
-                  styles.stepperButton,
-                  styles.stepperButton_last,
-                  disabled && styles.stepperButton_disabled,
-                )}
-                onClick={onDecrement}
-              >
-                <Icon
-                  className={styles.icon}
-                  variant="chevron-down"
-                />
-              </button>
-            </div>
-          )}
-        </>
-      }
-    />
-  </div>
-);
diff --git a/src/uikit/InputNumber/components/InputWithSuffix/index.ts b/src/uikit/InputNumber/components/InputWithSuffix/index.ts
deleted file mode 100644
index 7f0f83877..000000000
--- a/src/uikit/InputNumber/components/InputWithSuffix/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { InputWithSuffix } from './InputWithSuffix';
diff --git a/src/uikit/InputNumber/index.ts b/src/uikit/InputNumber/index.ts
deleted file mode 100644
index 718e3ecf7..000000000
--- a/src/uikit/InputNumber/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { InputNumber } from './InputNumber';
-export { getFormInputNumberResult } from './utils/getFormInputNumberResult';
diff --git a/src/uikit/InputNumber/utils/__tests__/getFormInputNumberResult.test.ts b/src/uikit/InputNumber/utils/__tests__/getFormInputNumberResult.test.ts
deleted file mode 100644
index 366f5cc3e..000000000
--- a/src/uikit/InputNumber/utils/__tests__/getFormInputNumberResult.test.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import { getFormInputNumberResult } from '../getFormInputNumberResult';
-
-describe('getFormInputNumberResult', () => {
-  it('should return original value when value is empty string', () => {
-    expect(getFormInputNumberResult(null, 0, 100)).toBe('');
-  });
-
-  it('should return original value when min and max are undefined', () => {
-    expect(getFormInputNumberResult('50', undefined, undefined)).toBe('50');
-  });
-
-  it('should return original value when value is within min and max bounds', () => {
-    expect(getFormInputNumberResult('50', 0, 100)).toBe('50');
-  });
-
-  it('should return min when value is less than min', () => {
-    expect(getFormInputNumberResult('5', 10, 100)).toBe('10');
-  });
-
-  it('should return max when value is greater than max', () => {
-    expect(getFormInputNumberResult('150', 0, 100)).toBe('100');
-  });
-
-  it('should return min when value equals min boundary', () => {
-    expect(getFormInputNumberResult('10', 10, 100)).toBe('10');
-  });
-
-  it('should return max when value equals max boundary', () => {
-    expect(getFormInputNumberResult('100', 0, 100)).toBe('100');
-  });
-
-  it('should handle negative numbers within bounds', () => {
-    expect(getFormInputNumberResult('-50', -100, 100)).toBe('-50');
-  });
-
-  it('should return min when negative value is less than min', () => {
-    expect(getFormInputNumberResult('-150', -100, 100)).toBe('-100');
-  });
-
-  it('should return max when value exceeds max with negative bounds', () => {
-    expect(getFormInputNumberResult('150', -100, 100)).toBe('100');
-  });
-
-  it('should handle decimal values within bounds', () => {
-    expect(getFormInputNumberResult('50.5', 0, 100)).toBe('50.5');
-  });
-
-  it('should return min when decimal value is less than min', () => {
-    expect(getFormInputNumberResult('5.5', 10, 100)).toBe('10');
-  });
-
-  it('should return max when decimal value is greater than max', () => {
-    expect(getFormInputNumberResult('100.5', 0, 100)).toBe('100');
-  });
-
-  it('should handle string min and max values', () => {
-    expect(getFormInputNumberResult('50', '0', '100')).toBe('50');
-  });
-
-  it('should return min when value is less than string min', () => {
-    expect(getFormInputNumberResult('5', '10', '100')).toBe('10');
-  });
-
-  it('should return max when value is greater than string max', () => {
-    expect(getFormInputNumberResult('150', '0', '100')).toBe('100');
-  });
-
-  it('should handle only min bound defined', () => {
-    expect(getFormInputNumberResult('5', 10, undefined)).toBe('10');
-  });
-
-  it('should handle only max bound defined', () => {
-    expect(getFormInputNumberResult('150', undefined, 100)).toBe('100');
-  });
-
-  it('should return original value when only min is defined and value is within bounds', () => {
-    expect(getFormInputNumberResult('50', 10, undefined)).toBe('50');
-  });
-
-  it('should return original value when only max is defined and value is within bounds', () => {
-    expect(getFormInputNumberResult('50', undefined, 100)).toBe('50');
-  });
-
-  it('should handle zero value within bounds', () => {
-    expect(getFormInputNumberResult('0', -10, 10)).toBe('0');
-  });
-
-  it('should return min when zero value is less than min', () => {
-    expect(getFormInputNumberResult('0', 5, 10)).toBe('5');
-  });
-
-  it('should return max when zero value is greater than max', () => {
-    expect(getFormInputNumberResult('0', -10, -5)).toBe('-5');
-  });
-
-  it('should handle large numbers within bounds', () => {
-    expect(getFormInputNumberResult('1000000', 0, 9999999)).toBe('1000000');
-  });
-
-  it('should return min when large number is less than min', () => {
-    expect(getFormInputNumberResult('100', 1000, 9999999)).toBe('1000');
-  });
-
-  it('should return max when large number exceeds max', () => {
-    expect(getFormInputNumberResult('10000000', 0, 9999999)).toBe('9999999');
-  });
-});
diff --git a/src/uikit/InputNumber/utils/__tests__/getFormInputNumberValue.test.ts b/src/uikit/InputNumber/utils/__tests__/getFormInputNumberValue.test.ts
deleted file mode 100644
index c3e92af72..000000000
--- a/src/uikit/InputNumber/utils/__tests__/getFormInputNumberValue.test.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { getFormInputNumberValue } from '../getFormInputNumberValue';
-
-describe('getFormInputNumberValue', () => {
-  it('should return empty string when value is undefined', () => {
-    expect(getFormInputNumberValue(undefined, undefined)).toBe('');
-  });
-
-  it('should return empty string when value is null', () => {
-    expect(getFormInputNumberValue(null, undefined)).toBe('');
-  });
-
-  it('should return empty string when value is NaN', () => {
-    expect(getFormInputNumberValue(NaN, undefined)).toBe('');
-  });
-
-  it('should return empty string when value is a string that converts to NaN', () => {
-    expect(getFormInputNumberValue('abc', undefined)).toBe('');
-  });
-
-  it('should return empty string when value is an empty string', () => {
-    expect(getFormInputNumberValue('', undefined)).toBe('');
-  });
-
-  it('should return empty string when value is a string with only spaces', () => {
-    expect(getFormInputNumberValue('   ', undefined)).toBe('');
-  });
-
-  it('should return string representation when value is a valid number string', () => {
-    expect(getFormInputNumberValue('123', undefined)).toBe('123');
-  });
-
-  it('should return string representation when value is a valid negative number string', () => {
-    expect(getFormInputNumberValue('-456', undefined)).toBe('-456');
-  });
-
-  it('should return string representation when value is a decimal number string', () => {
-    expect(getFormInputNumberValue('123.45', undefined)).toBe('123.45');
-  });
-
-  it('should return string representation when value is a number', () => {
-    expect(getFormInputNumberValue(789, undefined)).toBe('789');
-  });
-
-  it('should return string representation when value is a negative number', () => {
-    expect(getFormInputNumberValue(-100, undefined)).toBe('-100');
-  });
-
-  it('should return string representation when value is a decimal number', () => {
-    expect(getFormInputNumberValue(99.99, undefined)).toBe('99.99');
-  });
-
-  it('should return string representation when value is zero', () => {
-    expect(getFormInputNumberValue(0, undefined)).toBe('0');
-  });
-
-  it('should return string representation when value is string zero', () => {
-    expect(getFormInputNumberValue('0', undefined)).toBe('0');
-  });
-
-  it('should apply decimal scale when provided', () => {
-    expect(getFormInputNumberValue(99.999, 2)).toBe('100');
-  });
-
-  it('should apply decimal scale to string value', () => {
-    expect(getFormInputNumberValue('99.999', 2)).toBe('100');
-  });
-});
diff --git a/src/uikit/InputNumber/utils/getFormInputNumberValue.ts b/src/uikit/InputNumber/utils/getFormInputNumberValue.ts
deleted file mode 100644
index 00c22ce90..000000000
--- a/src/uikit/InputNumber/utils/getFormInputNumberValue.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { NumericFormatProps } from 'react-number-format';
-
-export const getFormInputNumberValue = (
-  value: NumericFormatProps['value'],
-  decimalScale: NumericFormatProps['decimalScale'],
-): string => {
-  const trimedValue = value?.toString().trim();
-  const numberValue = Number(trimedValue);
-
-  if (!trimedValue || Number.isNaN(numberValue)) {
-    return '';
-  }
-
-  if (!decimalScale) {
-    return numberValue.toString();
-  }
-
-  return Number(numberValue.toFixed(decimalScale)).toString();
-};
diff --git a/src/uikit/_stories_/Multiselect.stories.tsx b/src/uikit/Multiselect/Multiselect.stories.tsx
similarity index 100%
rename from src/uikit/_stories_/Multiselect.stories.tsx
rename to src/uikit/Multiselect/Multiselect.stories.tsx
diff --git a/src/uikit/_stories_/Segmented.stories.tsx b/src/uikit/Segmented/Segmented.stories.tsx
similarity index 96%
rename from src/uikit/_stories_/Segmented.stories.tsx
rename to src/uikit/Segmented/Segmented.stories.tsx
index 9d062fe6e..bf1b0d363 100644
--- a/src/uikit/_stories_/Segmented.stories.tsx
+++ b/src/uikit/Segmented/Segmented.stories.tsx
@@ -3,7 +3,7 @@ import React from 'react';
 
 import { CheckIcon } from '@components/Icons/CheckIcon';
 
-import { Segmented } from '@uikit/Segmented';
+import { Segmented } from './Segmented';
 
 export default {
   title: 'uikit/Segmented',
diff --git a/src/uikit/Segmented/Segmented.tsx b/src/uikit/Segmented/Segmented.tsx
index ea1fb2be1..aef39bf9b 100644
--- a/src/uikit/Segmented/Segmented.tsx
+++ b/src/uikit/Segmented/Segmented.tsx
@@ -8,7 +8,7 @@ import styles from './Segmented.module.scss';
 import { SegmentedItem, SegmentVariant } from './types';
 import { isSegmentedItem } from './utils';
 
-export type SegmentedProps = {
+type SegmentedProps = {
   options: string[] | number[] | SegmentedItem[];
   /** Текущее выбранное значение */
   value?: string | number;
diff --git a/src/uikit/Select/Dropdown/index.tsx b/src/uikit/Select/Dropdown/index.tsx
index d0c9f1b10..7bbd89218 100644
--- a/src/uikit/Select/Dropdown/index.tsx
+++ b/src/uikit/Select/Dropdown/index.tsx
@@ -27,7 +27,6 @@ const DropdownBase: FC<DropdownProps> = ({
   onChangedSearchValue,
   loading,
   showSearch,
-  dropdownRef,
 }) => {
   const { inputValue, handleSelect, selectedItem, handleSearch, searchedDataItems } = useSearch(
     items,
@@ -41,10 +40,7 @@ const DropdownBase: FC<DropdownProps> = ({
   const ref = useScrollToBotomDetector<HTMLDivElement>(onScrolledToBottom);
 
   return (
-    <div
-      className={styles.container}
-      ref={dropdownRef}
-    >
+    <div className={styles.container}>
       {showSearch && (
         <Input
           value={inputValue}
diff --git a/src/uikit/Select/Dropdown/types.ts b/src/uikit/Select/Dropdown/types.ts
index 35806623c..54f51e112 100644
--- a/src/uikit/Select/Dropdown/types.ts
+++ b/src/uikit/Select/Dropdown/types.ts
@@ -1,5 +1,3 @@
-import { LegacyRef } from 'react';
-
 import { InputProps } from '@uikit/Input';
 
 import { ShowTooltipOptionType } from '../types';
@@ -32,7 +30,6 @@ export interface DropdownProps {
   /** Индикатор загрузки элементов выпадающего списка */
   loading?: boolean;
   showSearch?: boolean;
-  dropdownRef?: LegacyRef<HTMLDivElement>;
 }
 
 export interface DropdownItemComponentProps {
diff --git a/src/uikit/_stories_/Select.stories.tsx b/src/uikit/Select/Select.stories.tsx
similarity index 97%
rename from src/uikit/_stories_/Select.stories.tsx
rename to src/uikit/Select/Select.stories.tsx
index 46d068a91..20db80379 100644
--- a/src/uikit/_stories_/Select.stories.tsx
+++ b/src/uikit/Select/Select.stories.tsx
@@ -2,7 +2,7 @@
 import { action } from '@storybook/addon-actions';
 import React, { useState } from 'react';
 
-import { Select } from '@uikit/Select';
+import { Select } from './index';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/Select/Select/__tests__/logic.test.ts b/src/uikit/Select/Select/__tests__/logic.test.ts
deleted file mode 100644
index 618ea5524..000000000
--- a/src/uikit/Select/Select/__tests__/logic.test.ts
+++ /dev/null
@@ -1,232 +0,0 @@
-import { act, renderHook } from '@testing-library/react';
-
-import { useSelect } from '../logic';
-
-describe('useSelect', () => {
-  const mockOnChange = jest.fn();
-  const mockOnDropdownVisibleChange = jest.fn();
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  describe('initial state', () => {
-    it('should have isOpen equal to false by default', () => {
-      const { result } = renderHook(() => useSelect());
-      expect(result.current.isOpen).toBe(false);
-    });
-  });
-
-  describe('handleToggleDropdown', () => {
-    it('should set isOpen to true when called with true', () => {
-      const { result } = renderHook(() => useSelect());
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(result.current.isOpen).toBe(true);
-    });
-
-    it('should set isOpen to false when called with false', () => {
-      const { result } = renderHook(() => useSelect());
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(result.current.isOpen).toBe(true);
-
-      act(() => {
-        result.current.handleToggleDropdown(false);
-      });
-      expect(result.current.isOpen).toBe(false);
-    });
-
-    it('should call onDropdownVisibleChange with true when opening', () => {
-      const { result } = renderHook(() => useSelect(undefined, mockOnDropdownVisibleChange));
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(mockOnDropdownVisibleChange).toHaveBeenCalledWith(true);
-    });
-
-    it('should call onDropdownVisibleChange with false when closing', () => {
-      const { result } = renderHook(() => useSelect(undefined, mockOnDropdownVisibleChange));
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      act(() => {
-        result.current.handleToggleDropdown(false);
-      });
-      expect(mockOnDropdownVisibleChange).toHaveBeenCalledWith(false);
-    });
-
-    it('should not call onDropdownVisibleChange if it is not provided', () => {
-      const { result } = renderHook(() => useSelect());
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(mockOnDropdownVisibleChange).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('onElementClick', () => {
-    it('should set isOpen to false', () => {
-      const { result } = renderHook(() => useSelect());
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(result.current.isOpen).toBe(true);
-
-      act(() => {
-        result.current.onElementClick('test-value');
-      });
-      expect(result.current.isOpen).toBe(false);
-    });
-
-    it('should call onChange with the provided value', () => {
-      const { result } = renderHook(() => useSelect(mockOnChange));
-      act(() => {
-        result.current.onElementClick('test-value');
-      });
-      expect(mockOnChange).toHaveBeenCalledWith('test-value');
-    });
-
-    it('should call onDropdownVisibleChange with false', () => {
-      const { result } = renderHook(() => useSelect(mockOnChange, mockOnDropdownVisibleChange));
-      act(() => {
-        result.current.onElementClick('test-value');
-      });
-      expect(mockOnDropdownVisibleChange).toHaveBeenCalledWith(false);
-    });
-
-    it('should not call onChange if it is not provided', () => {
-      const { result } = renderHook(() => useSelect(undefined, mockOnDropdownVisibleChange));
-      act(() => {
-        result.current.onElementClick('test-value');
-      });
-      expect(mockOnChange).not.toHaveBeenCalled();
-    });
-
-    it('should not call onDropdownVisibleChange if it is not provided', () => {
-      const { result } = renderHook(() => useSelect(mockOnChange));
-      act(() => {
-        result.current.onElementClick('test-value');
-      });
-      expect(mockOnDropdownVisibleChange).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('scroll handling', () => {
-    it('should close dropdown on scroll when hideDropdownonScroll is true', () => {
-      const addEventListenerSpy = jest.spyOn(document.body, 'addEventListener');
-      const removeEventListenerSpy = jest.spyOn(document.body, 'removeEventListener');
-
-      const { result } = renderHook(() => useSelect(undefined, undefined, true));
-
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(result.current.isOpen).toBe(true);
-
-      // Simulate scroll event
-      const scrollEvent = new Event('scroll');
-      act(() => {
-        document.body.dispatchEvent(scrollEvent);
-      });
-
-      expect(result.current.isOpen).toBe(false);
-
-      addEventListenerSpy.mockRestore();
-      removeEventListenerSpy.mockRestore();
-    });
-
-    it('should not close dropdown on scroll when hideDropdownonScroll is false', () => {
-      const { result } = renderHook(() => useSelect(undefined, undefined, false));
-
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(result.current.isOpen).toBe(true);
-
-      const scrollEvent = new Event('scroll');
-      act(() => {
-        document.body.dispatchEvent(scrollEvent);
-      });
-
-      expect(result.current.isOpen).toBe(true);
-    });
-
-    it('should not close dropdown on scroll when dropdown is not open', () => {
-      const addEventListenerSpy = jest.spyOn(document.body, 'addEventListener');
-
-      const { result } = renderHook(() => useSelect(undefined, undefined, true));
-
-      expect(result.current.isOpen).toBe(false);
-
-      const scrollEvent = new Event('scroll');
-      act(() => {
-        document.body.dispatchEvent(scrollEvent);
-      });
-
-      expect(result.current.isOpen).toBe(false);
-      expect(addEventListenerSpy).not.toHaveBeenCalled();
-
-      addEventListenerSpy.mockRestore();
-    });
-
-    it('should use custom container if provided', () => {
-      const mockContainer = {
-        addEventListener: jest.fn(),
-        removeEventListener: jest.fn(),
-      } as unknown as HTMLElement;
-
-      const addEventListenerSpy = jest.spyOn(mockContainer, 'addEventListener');
-      const removeEventListenerSpy = jest.spyOn(mockContainer, 'removeEventListener');
-
-      const { result, unmount } = renderHook(() => useSelect(undefined, undefined, true, mockContainer));
-
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-
-      expect(addEventListenerSpy).toHaveBeenCalledWith('scroll', expect.any(Function), true);
-
-      unmount();
-
-      expect(removeEventListenerSpy).toHaveBeenCalledWith('scroll', expect.any(Function), true);
-
-      addEventListenerSpy.mockRestore();
-      removeEventListenerSpy.mockRestore();
-    });
-
-    it('should call onDropdownVisibleChange when closing on scroll', () => {
-      const { result } = renderHook(() => useSelect(undefined, mockOnDropdownVisibleChange, true));
-
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-
-      const scrollEvent = new Event('scroll');
-      act(() => {
-        document.body.dispatchEvent(scrollEvent);
-      });
-
-      expect(mockOnDropdownVisibleChange).toHaveBeenCalledWith(false);
-    });
-  });
-
-  describe('closeDropdown', () => {
-    it('should close dropdown and call onDropdownVisibleChange', () => {
-      const { result } = renderHook(() => useSelect(undefined, mockOnDropdownVisibleChange));
-
-      act(() => {
-        result.current.handleToggleDropdown(true);
-      });
-      expect(result.current.isOpen).toBe(true);
-
-      act(() => {
-        result.current.handleToggleDropdown(false);
-      });
-      expect(result.current.isOpen).toBe(false);
-      expect(mockOnDropdownVisibleChange).toHaveBeenCalledWith(false);
-    });
-  });
-});
diff --git a/src/uikit/Select/Select/index.tsx b/src/uikit/Select/Select/index.tsx
index 4d8bf9883..21274fbe5 100644
--- a/src/uikit/Select/Select/index.tsx
+++ b/src/uikit/Select/Select/index.tsx
@@ -49,15 +49,8 @@ export interface ISelect
   showSearch?: boolean;
   /** Задает ширину селекта. Если не указано, определяется шириной контента */
   width?: number | string;
-  /** Показывать тултипы в дропдауне  */
+  /** Показывать тултипы в дропдауне или Опции тултипа элемента дропдауна */
   showOptionTooltip?: ShowTooltipOptionType;
-  /** Прятать дропдаун при скролле (по умолчанию выключено) */
-  hideDropdownonScroll?: boolean;
-  /**
-   * Контейнер для отслеживания события скролла (только если используется hideDropdownonScroll=true)
-   * Если не указан, то используется document.body
-   */
-  container?: HTMLElement | null;
 }
 
 export const Select: React.FC<ISelect> = ({
@@ -83,16 +76,9 @@ export const Select: React.FC<ISelect> = ({
   allowClear = true,
   popupClassName,
   showOptionTooltip,
-  hideDropdownonScroll,
-  container,
   ...selectProps
 }) => {
-  const { handleToggleDropdown, onElementClick, isOpen } = useSelect(
-    onChange,
-    onDropdownVisibleChange,
-    hideDropdownonScroll,
-    container,
-  );
+  const { handleToggleDropdown, onElementClick, isOpen } = useSelect(onChange, onDropdownVisibleChange);
 
   const selectedValue = useMemo(
     () => (labelInValue ? getLabeledValue(values, value) : value),
diff --git a/src/uikit/Select/Select/logic.ts b/src/uikit/Select/Select/logic.ts
index 5a019cc2b..3129b1c88 100644
--- a/src/uikit/Select/Select/logic.ts
+++ b/src/uikit/Select/Select/logic.ts
@@ -1,49 +1,12 @@
-import { useCallback, useEffect, useRef, useState } from 'react';
+import { useCallback, useState } from 'react';
 
 import { ISelect } from '.';
 
 export const useSelect = (
   onChange?: ISelect['onChange'],
   onDropdownVisibleChange?: ISelect['onDropdownVisibleChange'],
-  hideDropdownonScroll?: boolean,
-  container?: HTMLElement | null,
 ) => {
   const [isOpen, setIsOpen] = useState(false);
-  const dropdownRef = useRef<HTMLDivElement>(null);
-
-  const closeDropdown = useCallback(() => {
-    setIsOpen(false);
-    onDropdownVisibleChange?.(false);
-  }, [onDropdownVisibleChange]);
-
-  const handleScroll = useCallback(
-    (e: Event) => {
-      if (!isOpen) {
-        return;
-      }
-
-      const target = e.target as HTMLElement;
-      const dropdown = dropdownRef.current;
-
-      // Проверяем, произошел ли скролл внутри дропдауна
-      if (dropdown?.contains(target)) {
-        return;
-      }
-
-      closeDropdown();
-    },
-    [isOpen, closeDropdown],
-  );
-
-  useEffect(() => {
-    if (isOpen && hideDropdownonScroll) {
-      const element = container ?? document.body;
-      element.addEventListener('scroll', handleScroll, true);
-      return () => {
-        element.removeEventListener('scroll', handleScroll, true);
-      };
-    }
-  }, [isOpen, handleScroll, hideDropdownonScroll, container]);
 
   const handleToggleDropdown = useCallback(
     (open: boolean) => {
diff --git a/src/uikit/_stories_/Sidebar.stories.tsx b/src/uikit/Sidebar/Sidebar.stories.tsx
similarity index 95%
rename from src/uikit/_stories_/Sidebar.stories.tsx
rename to src/uikit/Sidebar/Sidebar.stories.tsx
index f95b0041b..fb7b2ee68 100644
--- a/src/uikit/_stories_/Sidebar.stories.tsx
+++ b/src/uikit/Sidebar/Sidebar.stories.tsx
@@ -1,6 +1,6 @@
 import React, { useState } from 'react';
 
-import { Sidebar } from '@uikit/Sidebar';
+import { Sidebar } from './Sidebar';
 
 import type { ComponentStory, Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/Switch.stories.tsx b/src/uikit/Switch/Switch.stories.tsx
similarity index 90%
rename from src/uikit/_stories_/Switch.stories.tsx
rename to src/uikit/Switch/Switch.stories.tsx
index f2be859da..afa49b188 100644
--- a/src/uikit/_stories_/Switch.stories.tsx
+++ b/src/uikit/Switch/Switch.stories.tsx
@@ -1,7 +1,7 @@
 import { ComponentMeta, ComponentStory } from '@storybook/react';
 import React from 'react';
 
-import { Switch } from '@uikit/Switch';
+import { Switch } from './Switch';
 
 export default {
   title: 'uikit/Switch',
diff --git a/src/uikit/Tabs/Tabs.module.scss b/src/uikit/Tabs/Tabs.module.scss
index 23b467b69..54cfa6194 100644
--- a/src/uikit/Tabs/Tabs.module.scss
+++ b/src/uikit/Tabs/Tabs.module.scss
@@ -14,7 +14,7 @@
         background-color: $action-surface-hover;
       }
 
-      + .ant-tabs-tab {
+      +.ant-tabs-tab {
         margin-left: 8px;
       }
 
@@ -38,6 +38,7 @@
     }
 
     .ant-tabs-tab .ant-tabs-tab-btn {
+
       &:active,
       &:focus {
         color: $text-interface-secondary-label-no-value;
@@ -50,7 +51,7 @@
       }
 
       &:hover {
-        background: $action-surface-hover;
+        background: none;
       }
     }
 
@@ -109,4 +110,4 @@
       padding-block: 8px;
     }
   }
-}
+}
\ No newline at end of file
diff --git a/src/uikit/_stories_/Tabs.stories.tsx b/src/uikit/Tabs/Tabs.stories.tsx
similarity index 93%
rename from src/uikit/_stories_/Tabs.stories.tsx
rename to src/uikit/Tabs/Tabs.stories.tsx
index 5034398c0..1911a08d6 100644
--- a/src/uikit/_stories_/Tabs.stories.tsx
+++ b/src/uikit/Tabs/Tabs.stories.tsx
@@ -1,4 +1,4 @@
-import { Tabs, TabsItems } from '@uikit/Tabs';
+import { Tabs, TabsItems } from '.';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/Tabs/Tabs.tsx b/src/uikit/Tabs/Tabs.tsx
index a1e97b384..1b523eae7 100644
--- a/src/uikit/Tabs/Tabs.tsx
+++ b/src/uikit/Tabs/Tabs.tsx
@@ -7,16 +7,14 @@ import React, { FC, useEffect, useState } from 'react';
 import { DraggableTabNode, DraggableTabPaneProps } from './DraggableTabNode';
 import styles from './Tabs.module.scss';
 
-import { Tab, TabsProps } from './types';
+import { TabsProps } from './types';
 
 import type { DragEndEvent } from '@dnd-kit/core';
 
-const EMPTY_TABS: Tab[] = [];
-
 export const Tabs: FC<TabsProps> = ({
   className,
   size = 'middle',
-  items = EMPTY_TABS,
+  items = [],
   isDraggable = false,
   onTabsDragEnd,
   disabledDragIndex,
diff --git a/src/uikit/_stories_/TagInput.stories.tsx b/src/uikit/TagInput/TagInput.stories.tsx
similarity index 95%
rename from src/uikit/_stories_/TagInput.stories.tsx
rename to src/uikit/TagInput/TagInput.stories.tsx
index 0d2e45ac0..2732f5711 100644
--- a/src/uikit/_stories_/TagInput.stories.tsx
+++ b/src/uikit/TagInput/TagInput.stories.tsx
@@ -1,6 +1,6 @@
 import React, { useState } from 'react';
 
-import { TagInput } from '@uikit/TagInput';
+import { TagInput } from './TagInput';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/TagSearch/TagSearch.module.scss b/src/uikit/TagSearch/TagSearch.module.scss
index f57b4e362..e59b645a7 100644
--- a/src/uikit/TagSearch/TagSearch.module.scss
+++ b/src/uikit/TagSearch/TagSearch.module.scss
@@ -16,7 +16,7 @@
   @include scrollbar;
 
   &:has(.input:focus) {
-    outline: 2px solid $action-border-focused-input-active-drag;
+    border-color: $action-border-focused-input-active-drag;
   }
 
   .searchIcon {
@@ -24,10 +24,6 @@
     padding: 6px;
     margin-right: 4px;
   }
-
-  &:hover {
-    background-color: $action-surface-hover;
-  }
 }
 
 .input {
diff --git a/src/uikit/_stories_/TagSearch.stories.tsx b/src/uikit/TagSearch/TagSearch.stories.tsx
similarity index 91%
rename from src/uikit/_stories_/TagSearch.stories.tsx
rename to src/uikit/TagSearch/TagSearch.stories.tsx
index f3f54f7d9..002b92ad9 100644
--- a/src/uikit/_stories_/TagSearch.stories.tsx
+++ b/src/uikit/TagSearch/TagSearch.stories.tsx
@@ -1,7 +1,7 @@
 import React, { useEffect, useState } from 'react';
 
-import { TagSearch } from '@uikit/TagSearch';
-import { TagSearchProps, TagType } from '@uikit/TagSearch/types';
+import { TagSearch } from './TagSearch';
+import { TagSearchProps, TagType } from './types';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/TextArea.stories.tsx b/src/uikit/TextArea/TextArea.stories.tsx
similarity index 95%
rename from src/uikit/_stories_/TextArea.stories.tsx
rename to src/uikit/TextArea/TextArea.stories.tsx
index b1ad2d04b..bfad73e37 100644
--- a/src/uikit/_stories_/TextArea.stories.tsx
+++ b/src/uikit/TextArea/TextArea.stories.tsx
@@ -1,6 +1,6 @@
 import React, { useState } from 'react';
 
-import { TextArea } from '@uikit/TextArea';
+import { TextArea } from './TextArea';
 
 import type { Meta, StoryObj } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/typography.stories.tsx b/src/uikit/Typography/typography.stories.tsx
similarity index 97%
rename from src/uikit/_stories_/typography.stories.tsx
rename to src/uikit/Typography/typography.stories.tsx
index 1a4debe6d..e7d04c76e 100644
--- a/src/uikit/_stories_/typography.stories.tsx
+++ b/src/uikit/Typography/typography.stories.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 
-import Typography from '@uikit/Typography';
+import Typography from '.';
 
 import type { Meta } from '@storybook/react';
 
diff --git a/src/uikit/_stories_/Icons.stories.tsx b/src/uikit/_stories_/Icons.stories.tsx
deleted file mode 100644
index 7a53a8cf3..000000000
--- a/src/uikit/_stories_/Icons.stories.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { ComponentStory } from '@storybook/react';
-import React from 'react';
-
-import { Icon, IconDeprecated } from '@uikit/Icon';
-import { ICON_MAP, ICON_MAP_LEGACY } from '@uikit/Icon/const';
-
-export default {
-  title: 'uikit/Icons',
-};
-
-const style = {
-  // height: '48px',
-  // width: '48px',
-  // fill: 'black'
-  // viewBox: "0 0 16 16",
-  display: 'block',
-};
-
-export const NewIcons: ComponentStory<any> = function (args) {
-  return (
-    <div>
-      {Object.entries(ICON_MAP).map(([iconKey]) => (
-        <div
-          style={{
-            margin: '8px',
-            border: '1px solid black',
-            padding: '8px',
-            display: 'inline-flex',
-            flexDirection: 'column',
-            alignItems: 'center',
-          }}
-          key={iconKey}
-        >
-          <span
-            style={{
-              display: 'inline-block',
-              backgroundColor: 'antiquewhite',
-              color: 'red',
-            }}
-          >
-            <Icon
-              variant={iconKey}
-              {...args}
-              // После того как заменим все иконки на новый компонент нужно будет доработать
-              // svgr/webpack
-              // viewBox="0 0 16 16"
-            />
-          </span>
-          <div>{iconKey}</div>
-        </div>
-      ))}
-    </div>
-  );
-};
-
-export const IconLegacy: ComponentStory<any> = (args) => (
-  <div>
-    {Object.entries(ICON_MAP_LEGACY).map(([iconKey]) => (
-      <div
-        style={{
-          margin: '8px',
-          border: '1px solid black',
-          padding: '8px',
-          display: 'inline-flex',
-          flexDirection: 'column',
-          alignItems: 'center',
-        }}
-        key={iconKey}
-      >
-        <span
-          style={{
-            display: 'inline-block',
-            backgroundColor: 'antiquewhite',
-            color: 'red',
-          }}
-        >
-          <IconDeprecated
-            variant={iconKey}
-            {...args}
-            // После того как заменим все иконки на новый компонент нужно будет доработать
-            // svgr/webpack
-            // viewBox="0 0 16 16"
-          />
-        </span>
-        <div>{iconKey}</div>
-      </div>
-    ))}
-  </div>
-);
-
-NewIcons.args = { style, size: 16 };
diff --git a/src/uikit/_stories_/InputNumber.stories.tsx b/src/uikit/_stories_/InputNumber.stories.tsx
deleted file mode 100644
index ba9f8ae61..000000000
--- a/src/uikit/_stories_/InputNumber.stories.tsx
+++ /dev/null
@@ -1,157 +0,0 @@
-import { ComponentMeta, ComponentStory } from '@storybook/react';
-import React, { useState } from 'react';
-
-import { InputNumber } from '@uikit/InputNumber/InputNumber';
-
-export default {
-  title: 'uikit/InputNumber',
-  component: InputNumber,
-  argTypes: {
-    value: {
-      control: { type: 'number' },
-    },
-    suffix: {
-      control: { type: 'text' },
-    },
-    step: {
-      control: { type: 'number' },
-    },
-    decimalScale: {
-      control: { type: 'number' },
-    },
-    min: {
-      control: { type: 'number' },
-    },
-    max: {
-      control: { type: 'number' },
-    },
-    disabled: {
-      control: { type: 'boolean' },
-    },
-    allowNegative: {
-      control: { type: 'boolean' },
-    },
-    status: {
-      control: { type: 'select' },
-      options: [undefined, 'error', 'warning'],
-    },
-    placeholder: {
-      control: { type: 'text' },
-    },
-  },
-} as ComponentMeta<typeof InputNumber>;
-
-const Template: ComponentStory<typeof InputNumber> = (args) => {
-  const [value, setValue] = useState<number | null>(args.value ?? null);
-
-  return (
-    <div style={{ width: '300px', display: 'flex', flexDirection: 'column', gap: '16px' }}>
-      <InputNumber
-        {...args}
-        value={value}
-        onChange={setValue}
-      />
-      <div style={{ fontSize: '12px', color: '#666' }}>Current value: {value === null ? 'null' : value}</div>
-    </div>
-  );
-};
-
-export const Default = Template.bind({});
-Default.args = {
-  value: 1000,
-  placeholder: 'Enter number',
-};
-
-export const WithSuffix = Template.bind({});
-WithSuffix.args = {
-  value: 5.25,
-  suffix: '%',
-  decimalScale: 2,
-  placeholder: 'Enter percentage',
-};
-
-export const WithStep = Template.bind({});
-WithStep.args = {
-  value: 10,
-  step: 5,
-  placeholder: 'Enter value',
-};
-
-export const WithStepAndSuffix = Template.bind({});
-WithStepAndSuffix.args = {
-  value: 100,
-  suffix: '₽',
-  step: 10,
-  placeholder: 'Enter amount',
-};
-
-export const Disabled = Template.bind({});
-Disabled.args = {
-  value: 42,
-  disabled: true,
-  placeholder: 'Disabled input',
-};
-
-export const WithDecimalScale = Template.bind({});
-WithDecimalScale.args = {
-  value: 3.14159,
-  decimalScale: 2,
-  placeholder: 'Enter decimal value',
-};
-
-export const WithMinMax = Template.bind({});
-WithMinMax.args = {
-  value: 50,
-  min: 0,
-  max: 100,
-  step: 10,
-  placeholder: 'Value between 0 and 100',
-};
-
-export const WithNegative = Template.bind({});
-WithNegative.args = {
-  value: -25,
-  allowNegative: true,
-  step: 5,
-  placeholder: 'Negative values allowed',
-};
-
-export const EmptyValue = Template.bind({});
-EmptyValue.args = {
-  value: null,
-  placeholder: 'Empty value',
-};
-
-export const ErrorStatus = Template.bind({});
-ErrorStatus.args = {
-  value: 100,
-  status: 'error',
-  placeholder: 'Error state',
-};
-
-export const WarningStatus = Template.bind({});
-WarningStatus.args = {
-  value: 100,
-  status: 'warning',
-  placeholder: 'Warning state',
-};
-
-export const CurrencyInput = Template.bind({});
-CurrencyInput.args = {
-  value: 1500000,
-  suffix: '$',
-  thousandSeparator: ',',
-  decimalScale: 0,
-  placeholder: 'Enter amount',
-};
-
-export const PercentInput = Template.bind({});
-PercentInput.args = {
-  value: 75.5,
-  suffix: '%',
-  decimalScale: 2,
-  min: 0,
-  max: 100,
-  step: 0.5,
-  placeholder: 'Enter percentage',
-};
diff --git a/src/useAppFacade.tsx b/src/useAppFacade.tsx
index 020d7450a..ff67e7608 100644
--- a/src/useAppFacade.tsx
+++ b/src/useAppFacade.tsx
@@ -1,27 +1,66 @@
-import { useEffect, useState } from 'react';
+import { useEffect, useState, useRef, useCallback } from 'react';
 
 import { authController } from '@api/controllers/authController';
 import { gotToMainAuth } from '@utils/goToMainAuth';
 
 import type { AuthStatusResponse } from 'types/Auth';
 
+const POLL_INTERVAL_MS = 6000;
+const RETRY_DELAY_MS = 1500;
+
 export const useAppFacade = () => {
   const [authData, setAuthData] = useState<AuthStatusResponse | null>(null);
+  const intervalRef = useRef<ReturnType<typeof setInterval> | undefined>(undefined);
+
+  const checkAuth = useCallback(async () => {
+    try {
+      const { data } = await authController.checkAuth();
+      if (!data['sso-moex']) {
+        gotToMainAuth();
+        return;
+      }
+      setAuthData(data);
+    } catch (e) {
+      gotToMainAuth();
+    }
+  }, []);
 
   useEffect(() => {
+    let cancelled = false;
+
     (async () => {
-      try {
-        const { data } = await authController.checkAuth();
-        if (!data['sso-moex']) {
-          gotToMainAuth();
+      // первоначальный запрос
+      await checkAuth();
+
+      if (cancelled) {
+        return;
+      }
+
+      setTimeout(() => {
+        if (cancelled) {
           return;
         }
-        setAuthData(data);
-      } catch (e) {
-        gotToMainAuth();
-      }
+        // повторный запрос для получения sso-base, т.к. при начальном запросе его быть не может
+        // логика на бэке отрабатывает асинхронно
+        checkAuth();
+      }, RETRY_DELAY_MS);
     })();
-  }, []);
+
+    intervalRef.current = setInterval(() => {
+      if (cancelled) {
+        return;
+      }
+      // интервальные health-check запросы
+      checkAuth();
+    }, POLL_INTERVAL_MS);
+
+    return () => {
+      cancelled = true;
+      if (intervalRef.current) {
+        clearInterval(intervalRef.current);
+      }
+    };
+  }, [checkAuth]);
 
   return authData;
 };
diff --git a/src/utils/__tests__/getIssKeyFromWidgets.ai.test.ts b/src/utils/__tests__/getIssKeyFromWidgets.ai.test.ts
index 949dc7793..cc8b896d3 100644
--- a/src/utils/__tests__/getIssKeyFromWidgets.ai.test.ts
+++ b/src/utils/__tests__/getIssKeyFromWidgets.ai.test.ts
@@ -83,28 +83,6 @@ describe('getIssKeyFromWidgets', () => {
     const result = getIssKeyFromWidgets(mockWidget);
     expect(result).toBe('TEST_ISS_KEY_7');
   });
-  it('should return selectedInstrument for ntbLogisticAuto type', () => {
-    const mockWidget: Widget = {
-      type: WidgetContentType.ntbLogisticAuto,
-      widgetContentProps: {
-        selectedInstrument: 'NTBVTFC.NTBVLB.111222333',
-      },
-    } as any;
-    const result = getIssKeyFromWidgets(mockWidget);
-    expect(result).toBe('NTBVTFC.NTBVLB.111222333');
-  });
-
-  it('should return selectedInstrument for ntbLogisticFreight type', () => {
-    const mockWidget: Widget = {
-      type: WidgetContentType.ntbLogisticFreight,
-      widgetContentProps: {
-        selectedInstrument: 'NTBVTFC.NTBVLB.444555666',
-      },
-    } as any;
-    const result = getIssKeyFromWidgets(mockWidget);
-    expect(result).toBe('NTBVTFC.NTBVLB.444555666');
-  });
-
   // Тест для неизвестного типа
   it('should return empty string for unknown type', () => {
     const mockWidget: Widget = {
diff --git a/src/utils/createWorkspace.ts b/src/utils/createWorkspace.ts
index a0068c016..43f5d0812 100644
--- a/src/utils/createWorkspace.ts
+++ b/src/utils/createWorkspace.ts
@@ -3,10 +3,10 @@ import { setWidgetParentWorkspaceId } from '@store/slices/widgets';
 import { addWorkspace, setCurrentWorkspace } from '@store/slices/workspaces';
 import { dispatch, store } from '@store/store';
 
-import type { RequiredWithPartial } from 'types/utilityTypes';
+import type { RequeiredWithPartial } from 'types/utilityTypes';
 import type { Workspace } from 'types/Workspace';
 
-type CreateWorkspaceArgs = RequiredWithPartial<Omit<Workspace, 'id' | 'isCurrent' | 'position'>, 'isAddWidgets'>;
+type CreateWorkspaceArgs = RequeiredWithPartial<Omit<Workspace, 'id' | 'isCurrent' | 'position'>, 'isAddWidgets'>;
 type CreateWorkspaceResult = Pick<Workspace, 'id'>;
 
 export default async function createWorkspace(params: CreateWorkspaceArgs): Promise<CreateWorkspaceResult> {
diff --git a/src/utils/customScrollIntoView.ts b/src/utils/customScrollIntoView.ts
index 7145ab7da..d6f0ab132 100644
--- a/src/utils/customScrollIntoView.ts
+++ b/src/utils/customScrollIntoView.ts
@@ -22,10 +22,6 @@ function findScrollableParent(el: Element) {
   return null;
 }
 
-/**
- * Улучшенный scrollIntoView
- * - В отличие от нативного scrollIntoView не вызывает прокрутку всей страницы,
- * когда элемент находится за границами экрана */
 export function customScrollIntoView(
   element: Element | undefined | null,
   { container, block = 'start', inline = 'nearest', behavior = 'auto' }: CustomScrollIntoViewOptions = {},
diff --git a/src/utils/decimalNumberFormatter.tsx b/src/utils/decimalNumberFormatter.tsx
index 3ed899e1c..9b25f6a15 100644
--- a/src/utils/decimalNumberFormatter.tsx
+++ b/src/utils/decimalNumberFormatter.tsx
@@ -2,11 +2,7 @@ import React from 'react';
 
 import { numberWithSpaces } from './numberWithSpaces';
 
-export function decimalNumbersFormatter(
-  text: string | number | null,
-  textPostfix?: string,
-  disableTextColors?: boolean,
-) {
+export function decimalNumbersFormatter(text: string | number | null, textPostfix?: string) {
   const val = Number(text);
   if (Number.isNaN(val)) {
     return text;
@@ -18,11 +14,7 @@ export function decimalNumbersFormatter(
   return (
     <span>
       {valueSplit[0] && <span style={{ letterSpacing: '1px' }}>{numberWithSpaces(valueSplit[0])}</span>}
-      {valueSplit[1] && (
-        <span
-          style={{ color: !disableTextColors ? '#868479' : undefined, letterSpacing: '1px' }}
-        >{`,${valueSplit[1]}`}</span>
-      )}
+      {valueSplit[1] && <span style={{ color: '#868479', letterSpacing: '1px' }}>{`,${valueSplit[1]}`}</span>}
       {textPostfix}
     </span>
   );
diff --git a/src/utils/getDraftToast.tsx b/src/utils/getDraftToast.tsx
index ce8f02dba..7ef630ae4 100644
--- a/src/utils/getDraftToast.tsx
+++ b/src/utils/getDraftToast.tsx
@@ -28,10 +28,6 @@ const getCommonStatusMessages = (orderId: number) => ({
     title: 'По ордеру совершена сделка',
     message: `По ордеру №${orderId}, созданному из брокерской заявки, совершена сделка`,
   },
-  [SpfiDraftStatus.ARCHIVED]: {
-    title: 'Брокерская заявка перенесена в архив',
-    message: '',
-  },
 });
 
 const getBrokerDraftStatusMap = (draftNotification: SpfiDraftNotification): StatusMap => ({
diff --git a/src/utils/getIssKeyFromWidgets.ts b/src/utils/getIssKeyFromWidgets.ts
index 1be1cf617..f8cd452ce 100644
--- a/src/utils/getIssKeyFromWidgets.ts
+++ b/src/utils/getIssKeyFromWidgets.ts
@@ -20,9 +20,6 @@ export const getIssKeyFromWidgets = (widget?: Widget): string => {
       return widgetContentProps?.state?.lastAddedInstrument.split(':')[2];
     case WidgetContentType.ntbIndexes:
       return widgetContentProps?.selectedInstrument;
-    case WidgetContentType.ntbLogisticAuto:
-    case WidgetContentType.ntbLogisticFreight:
-      return widgetContentProps?.selectedInstrument;
     default:
       return '';
   }
diff --git a/src/utils/hooks/useGlassState.ts b/src/utils/hooks/useGlassState.ts
index cf68e5917..efc46fd66 100644
--- a/src/utils/hooks/useGlassState.ts
+++ b/src/utils/hooks/useGlassState.ts
@@ -1,29 +1,42 @@
-import { useCallback } from 'react';
-
-import { useChangeProperties, useSelectProperties } from '@modules/widgetProperties';
-
-import type { GlassWidgetProperties } from '@widgets/Glass/properties/types';
-
-type GlassState = GlassWidgetProperties['glassState'];
-
-const DEFAULT_GLASS_STATE: Partial<GlassState> = {};
+import { createSelector } from '@reduxjs/toolkit';
+import { useCallback, useMemo } from 'react';
+import { useDispatch } from 'react-redux';
+
+import { useAppSelect } from '@hooks/useAppSelector';
+import { addContentPropsToWidget } from '@store/slices/widgets';
+import { RootState } from '@store/store';
+import { GlassState } from 'types/Glass/GlassState';
+import { Widget } from 'types/Widgets';
+
+const DEFAULT_GLASS_STATE: GlassState = {};
+
+const createGlassStateSelector = (widgetId: number) =>
+  createSelector(
+    (state: RootState) => state.widgets.widgets,
+    (widgets: Widget[]) => {
+      const widget = widgets.find(({ id }) => id === widgetId);
+      return (widget?.widgetContentProps?.glassState as GlassState) || DEFAULT_GLASS_STATE;
+    },
+  );
 
-export const useGlassState = () => {
-  const glassState =
-    useSelectProperties((state: Partial<GlassWidgetProperties>) => state.glassState) ?? DEFAULT_GLASS_STATE;
+export const useGlassState = (widgetId: number) => {
+  const dispatch = useDispatch();
 
-  const { updateProperties } = useChangeProperties<GlassWidgetProperties>();
+  const glassStateSelector = useMemo(() => createGlassStateSelector(widgetId), [widgetId]);
+  const glassState = useAppSelect(glassStateSelector);
 
   const changeGlassState = useCallback(
-    (updated: Partial<GlassState>) => {
-      updateProperties((state) => {
-        if (!state.glassState) {
-          state.glassState = DEFAULT_GLASS_STATE as GlassState;
-        }
-        state.glassState = { ...state.glassState, ...updated };
-      });
+    (changes: Partial<GlassState>) => {
+      dispatch(
+        addContentPropsToWidget({
+          id: widgetId,
+          widgetContentProps: {
+            glassState: { ...glassState, ...changes },
+          },
+        }),
+      );
     },
-    [updateProperties],
+    [dispatch, widgetId, glassState],
   );
 
   return { glassState, changeGlassState };
diff --git a/src/utils/hooks/useUpdateSlaveWidgets.ts b/src/utils/hooks/useUpdateSlaveWidgets.ts
index d808d36e8..93b45eba2 100644
--- a/src/utils/hooks/useUpdateSlaveWidgets.ts
+++ b/src/utils/hooks/useUpdateSlaveWidgets.ts
@@ -40,8 +40,6 @@ export const useUpdateSlaveWidgetsEffect = (
         case WidgetContentType.graphic:
           return wcp?.chartState?.savedInstrument;
         case WidgetContentType.ntbIndexes:
-        case WidgetContentType.ntbLogisticAuto:
-        case WidgetContentType.ntbLogisticFreight:
           return wcp?.selectedInstrument;
         default:
           break;
diff --git a/src/utils/hooks/useWidgetsBind.ts b/src/utils/hooks/useWidgetsBind.ts
index 69e05749d..fd20459d4 100644
--- a/src/utils/hooks/useWidgetsBind.ts
+++ b/src/utils/hooks/useWidgetsBind.ts
@@ -22,7 +22,7 @@ type WidgetsBindPropsReturnType = {
 export const useWidgetsBind = ({ widgetId }: WidgetsBindProps): WidgetsBindPropsReturnType => {
   const widget = useAppSelect(widgetByIdSelector(widgetId));
   const publicContext = useAppSelect<PublicContextItem[]>((state) => state.publicContext.publicContext);
-  const { glassState } = useGlassState();
+  const { glassState } = useGlassState(widgetId);
 
   /** Обновляет Дочерние виджеты при изменении родительского */
   const triggerRelatedWidgetsToUpdate = (issKey: string) => {
diff --git a/src/utils/mergeSavedWithInitialColumns.ts b/src/utils/mergeSavedWithInitialColumns.ts
index e0f2faac8..4a3a2969c 100644
--- a/src/utils/mergeSavedWithInitialColumns.ts
+++ b/src/utils/mergeSavedWithInitialColumns.ts
@@ -4,20 +4,18 @@ import { isDefined } from 'types/utils';
  * Восстанаваливает из конфига свойства колонок, которые не хранятся на бэке
  * @param savedColumns - колонки, сохраненные на бэке
  * @param initialColumns - конфиг колонок
- * @param key - ключ по которому будут объединяться сохраненные колонки и конфиг (по умолчанию `"dataIndex"`)
  * @returns Колонки для передачи в таблицу
  */
 export const mergeSavedWithInitialColumns = <T extends { dataIndex?: unknown }>(
   savedColumns: T[] | null | undefined,
   initialColumns: T[],
-  key: keyof T = 'dataIndex',
 ): T[] => {
   if (!savedColumns) {
     return initialColumns;
   }
   const restoredColumns = savedColumns
     ?.map((savedCol) => {
-      const initCol = initialColumns.find((col) => col[key] === savedCol[key]);
+      const initCol = initialColumns.find((col) => col.dataIndex === savedCol.dataIndex);
       return initCol ? { ...initCol, ...savedCol } : null;
     })
     .filter(isDefined);
@@ -27,7 +25,7 @@ export const mergeSavedWithInitialColumns = <T extends { dataIndex?: unknown }>(
 
   for (let i = 0; i < resultColumns.length; i += 1) {
     const initCol = resultColumns[i];
-    if (restoredColumns.some((restoredCol) => restoredCol[key] === initCol[key])) {
+    if (restoredColumns.some((restoredCol) => restoredCol.dataIndex === initCol.dataIndex)) {
       resultColumns[i] = restoredColumns[pointer];
       pointer += 1;
     }
diff --git a/src/utils/sortUtils/__tests__/dateSortWithSymbolAndTermSort.test.ts b/src/utils/sortUtils/__tests__/dateSortWithSymbolAndTermSort.test.ts
index e584c5e95..210bd6935 100644
--- a/src/utils/sortUtils/__tests__/dateSortWithSymbolAndTermSort.test.ts
+++ b/src/utils/sortUtils/__tests__/dateSortWithSymbolAndTermSort.test.ts
@@ -1,167 +1,71 @@
-import { dateSortWithSymbolAndTermSort } from '../dateSortWithSymbolAndTermSort';
-
-describe('dateSortWithSymbolAndTermSort', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  const row = (date: string, symbol: string, term: string) => ({ date, symbol, term });
-
-  const rowABC1M = row('2023-01-01', 'ABC', '1M');
-  const rowDEF2M = row('2023-01-01', 'DEF', '2M');
-  const rowJan = row('2023-01-01', 'ABC', '1M');
-  const rowDec = row('2023-12-31', 'DEF', '2M');
-  const rowNull = row(null as unknown as string, 'ABC', '1M');
-  const rowUndefined = row(undefined as unknown as string, 'ABC', '1M');
-  const rowApple1M = row('2023-01-01', 'APPLE', '1M');
-  const rowApple3M = row('2023-01-01', 'APPLE', '3M');
-  const rowZebra = row('2023-01-01', 'ZEBRA', '1M');
-
-  const sortAsc = () => dateSortWithSymbolAndTermSort('asc');
-  const sortDesc = () => dateSortWithSymbolAndTermSort('desc');
-
-  describe('basic date sorting', () => {
-    it('should sort by date in ascending order when dates are different', () => {
-      const result = sortAsc()(rowJan, row('2023-01-02', 'DEF', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should sort by date in descending order when dates are different', () => {
-      const result = sortDesc()(rowJan, row('2023-01-02', 'DEF', '2M'));
-      expect(result).toBeGreaterThan(0);
-    });
-  });
-
-  describe('equal dates - fallback to symbol/term sorting', () => {
-    it('should return 0 when dates and symbols are equal', () => {
-      const result = sortAsc()(rowABC1M, rowABC1M);
-      expect(result).toBe(0);
-    });
-
-    it('should sort by symbol when dates are equal in asc order', () => {
-      const result = sortAsc()(rowZebra, rowApple1M);
-      expect(result).toBeGreaterThan(0);
-    });
-
-    it('should sort by symbol when dates are equal in desc order', () => {
-      const result = sortDesc()(rowZebra, rowApple1M);
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should sort by term when dates and symbols are equal', () => {
-      const result = sortAsc()(rowApple3M, rowApple1M);
-      expect(result).toBeGreaterThan(0);
-    });
-  });
-
-  describe('null/undefined/invalid dates', () => {
-    it('should handle null date as first row', () => {
-      const result = sortAsc()(rowNull, rowDEF2M);
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle null date as second row', () => {
-      const result = sortAsc()(rowABC1M, rowNull);
-      expect(result).toBeGreaterThan(0);
-    });
-
-    it('should handle both null dates', () => {
-      const result = sortAsc()(rowNull, row(null as unknown as string, 'DEF', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle undefined date', () => {
-      const result = sortAsc()(rowUndefined, rowDEF2M);
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle empty string date', () => {
-      const result = sortAsc()(row('', 'ABC', '1M'), rowDEF2M);
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle invalid date string', () => {
-      const result = sortAsc()(row('not-a-date', 'ABC', '1M'), rowDEF2M);
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle both invalid dates', () => {
-      const result = sortAsc()(row('invalid', 'ABC', '1M'), row('also-invalid', 'DEF', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-  });
-
-  describe('null/undefined symbols', () => {
-    it('should handle null symbol', () => {
-      const result = sortAsc()(row('2023-01-01', null as unknown as string, '1M'), row('2023-01-02', 'DEF', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle undefined symbol', () => {
-      const result = sortAsc()(row('2023-01-01', undefined as unknown as string, '1M'), row('2023-01-02', 'DEF', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-  });
-
-  describe('various date formats', () => {
-    it('should handle ISO date format (YYYY-MM-DD)', () => {
-      const result = sortAsc()(rowJan, rowDec);
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle US date format (MM/DD/YYYY)', () => {
-      const result = sortAsc()(row('01/01/2023', 'ABC', '1M'), row('12/31/2023', 'DEF', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle date with time', () => {
-      const result = sortAsc()(row('2023-01-01T10:30:00Z', 'ABC', '1M'), row('2023-01-02T08:00:00Z', 'DEF', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle descending order with string dates', () => {
-      const result = sortDesc()(rowDec, rowJan);
-      expect(result).toBeLessThan(0);
-    });
-  });
-
-  describe('symbol with rate fallback sorting', () => {
-    it('should normalize symbols with rates and then sort by term', () => {
-      const result = sortAsc()(
-        row('2023-01-01', 'CAP KEYRATE R 14.5', '1M'),
-        row('2023-01-01', 'CAP KEYRATE R 13.75', '2M'),
-      );
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should sort normalized symbols correctly', () => {
-      const result = sortAsc()(row('2023-01-01', 'ZEBRA R 1.0', '1M'), row('2023-01-01', 'APPLE R 2.0', '2M'));
-      expect(result).toBeGreaterThan(0);
-    });
-
-    it('should sort by normalized symbol when terms are equal', () => {
-      const result = sortAsc()(
-        row('2023-01-01', 'CAP KEYRATE R 14.5', '1M'),
-        row('2023-01-01', 'CAP KEYRATE R 13.75', '1M'),
-      );
-      expect(result).toBe(0);
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should handle equal rows', () => {
-      const result = sortAsc()(rowABC1M, rowABC1M);
-      expect(result).toBe(0);
-    });
-
-    it('should handle dates at boundary (same day different times)', () => {
-      const result = sortAsc()(rowABC1M, rowDEF2M);
-      expect(result).toBeLessThan(0);
-    });
-
-    it('should handle numeric-looking strings', () => {
-      const result = sortAsc()(row('2023-01-01', '123', '1M'), row('2023-01-01', '456', '2M'));
-      expect(result).toBeLessThan(0);
-    });
-  });
-});
+import { dateSortWithSymbolAndTermSort } from '../dateSortWithSymbolAndTermSort';
+import { symbolSortWithTermSort } from '../symbolSortWithTermSort';
+
+// Mock the symbolSortWithTermSort to isolate our tests
+jest.mock('../symbolSortWithTermSort', () => ({
+  symbolSortWithTermSort: jest.fn(),
+}));
+
+describe('dateSortWithSymbolAndTermSort', () => {
+  const mockSymbolSortWithTermSort = symbolSortWithTermSort as jest.Mock;
+
+  beforeEach(() => {
+    jest.clearAllMocks();
+  });
+
+  it('should sort by date in ascending order when dates are different', () => {
+    const sorter = dateSortWithSymbolAndTermSort('asc');
+
+    const row1 = { date: '2023-01-01', symbol: 'ABC', term: '1M' };
+    const row2 = { date: '2023-01-02', symbol: 'DEF', term: '2M' };
+
+    const result = sorter(row1, row2);
+
+    expect(result).toBeLessThan(0); // row1 should come before row2
+  });
+
+  it('should sort by date in descending order when dates are different', () => {
+    const sorter = dateSortWithSymbolAndTermSort('desc');
+
+    const row1 = { date: '2023-01-01', symbol: 'ABC', term: '1M' };
+    const row2 = { date: '2023-01-02', symbol: 'DEF', term: '2M' };
+
+    const result = sorter(row1, row2);
+
+    expect(result).toBeGreaterThan(0); // row1 should come after row2
+  });
+
+  it('should handle null/undefined dates', () => {
+    const sorter = dateSortWithSymbolAndTermSort('asc');
+
+    const row1 = { date: null, symbol: 'ABC', term: '1M' };
+    const row2 = { date: '2023-01-01', symbol: 'DEF', term: '2M' };
+
+    const result = sorter(row1, row2);
+
+    // null date should be sorted after valid dates
+    expect(result).toBeLessThan(0);
+  });
+
+  it('should handle null/undefined symbols', () => {
+    const sorter = dateSortWithSymbolAndTermSort('asc');
+
+    const row1 = { date: '2023-01-01', symbol: null, term: '1M' };
+    const row2 = { date: '2023-01-02', symbol: 'DEF', term: '2M' };
+
+    const result = sorter(row1, row2);
+
+    expect(result).toBeLessThan(0); // row1 should come before row2
+  });
+
+  it('should handle string dates with different formats', () => {
+    const sorter = dateSortWithSymbolAndTermSort('desc');
+
+    const row1 = { date: '2023-12-31', symbol: 'ABC', term: '1M' };
+    const row2 = { date: '2023-01-01', symbol: 'DEF', term: '2M' };
+
+    const result = sorter(row1, row2);
+
+    expect(result).toBeLessThan(0); // row1 should come after row2 in descending order
+  });
+});
diff --git a/src/utils/sortUtils/__tests__/numberSort.test.ts b/src/utils/sortUtils/__tests__/numberSort.test.ts
deleted file mode 100644
index a02e87817..000000000
--- a/src/utils/sortUtils/__tests__/numberSort.test.ts
+++ /dev/null
@@ -1,248 +0,0 @@
-import {
-  askQtySort,
-  askSort,
-  bidQtySort,
-  bidSort,
-  nearLegRateSort,
-  numberSort,
-  offerSort,
-  strikeSort,
-} from '../numberSort';
-
-type TestRow = Record<string, unknown>;
-
-describe('numberSort', () => {
-  const getField = (field: string) => (row: TestRow) => row[field] as number | null;
-  const row = (value: number | null) => ({ value });
-
-  describe('ascending order', () => {
-    it('should return negative when value1 is less than value2', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(1), row(5))).toBeLessThan(0);
-    });
-
-    it('should return positive when value1 is greater than value2', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(10), row(5))).toBeGreaterThan(0);
-    });
-
-    it('should return 0 for equal values', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(5), row(5))).toBe(0);
-    });
-  });
-
-  describe('descending order', () => {
-    it('should return positive when value1 is less than value2', () => {
-      const sortFn = numberSort(getField('value'), 'desc');
-      expect(sortFn(row(1), row(5))).toBeGreaterThan(0);
-    });
-
-    it('should return negative when value1 is greater than value2', () => {
-      const sortFn = numberSort(getField('value'), 'desc');
-      expect(sortFn(row(10), row(5))).toBeLessThan(0);
-    });
-
-    it('should return 0 for equal values', () => {
-      const sortFn = numberSort(getField('value'), 'desc');
-      expect(sortFn(row(5), row(5)) === 0).toBe(true);
-    });
-  });
-
-  describe('null handling', () => {
-    it('should treat null as empty and push to end', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(null), row(5))).toBeGreaterThan(0);
-      expect(sortFn(row(5), row(null))).toBeLessThan(0);
-    });
-
-    it('should treat undefined as empty and push to end', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(undefined as unknown as number | null), row(5))).toBeGreaterThan(0);
-      expect(sortFn(row(5), row(undefined as unknown as number | null))).toBeLessThan(0);
-    });
-
-    it('should treat 0 as empty and push to end', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(0), row(5))).toBeGreaterThan(0);
-      expect(sortFn(row(5), row(0))).toBeLessThan(0);
-    });
-
-    it('should return 0 when both values are null', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(null), row(null))).toBe(0);
-    });
-
-    it('should return 0 when both values are undefined', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(undefined as unknown as number | null), row(undefined as unknown as number | null))).toBe(0);
-    });
-
-    it('should return 0 when both values are 0', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(0), row(0))).toBe(0);
-    });
-  });
-
-  describe('negative numbers', () => {
-    it('should handle negative numbers ascending', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(-10), row(-5))).toBeLessThan(0);
-    });
-
-    it('should handle negative numbers descending', () => {
-      const sortFn = numberSort(getField('value'), 'desc');
-      expect(sortFn(row(-10), row(-5))).toBeGreaterThan(0);
-    });
-  });
-
-  describe('decimal numbers', () => {
-    it('should correctly sort decimal numbers ascending', () => {
-      const sortFn = numberSort(getField('value'), 'asc');
-      expect(sortFn(row(1.5), row(1.55))).toBeLessThan(0);
-    });
-
-    it('should correctly sort decimal numbers descending', () => {
-      const sortFn = numberSort(getField('value'), 'desc');
-      expect(sortFn(row(1.5), row(1.55))).toBeGreaterThan(0);
-    });
-  });
-});
-
-describe('bidSort', () => {
-  const row = (bid: number | null) => ({ bid });
-
-  it('should sort bid in ascending order', () => {
-    const sortFn = bidSort('asc');
-    expect(sortFn(row(10), row(20))).toBeLessThan(0);
-  });
-
-  it('should sort bid in descending order', () => {
-    const sortFn = bidSort('desc');
-    expect(sortFn(row(10), row(20))).toBeGreaterThan(0);
-  });
-
-  it('should treat null bid as empty', () => {
-    const sortFn = bidSort('asc');
-    expect(sortFn(row(null), row(5))).toBeGreaterThan(0);
-  });
-
-  it('should treat 0 bid as empty', () => {
-    const sortFn = bidSort('asc');
-    expect(sortFn(row(0), row(5))).toBeGreaterThan(0);
-  });
-});
-
-describe('askSort', () => {
-  const row = (ask: number | null) => ({ ask });
-
-  it('should sort ask in ascending order', () => {
-    const sortFn = askSort('asc');
-    expect(sortFn(row(10), row(20))).toBeLessThan(0);
-  });
-
-  it('should sort ask in descending order', () => {
-    const sortFn = askSort('desc');
-    expect(sortFn(row(10), row(20))).toBeGreaterThan(0);
-  });
-
-  it('should treat null ask as empty', () => {
-    const sortFn = askSort('asc');
-    expect(sortFn(row(null), row(5))).toBeGreaterThan(0);
-  });
-});
-
-describe('offerSort', () => {
-  const row = (offer: number | null) => ({ offer });
-
-  it('should sort offer in ascending order', () => {
-    const sortFn = offerSort('asc');
-    expect(sortFn(row(10), row(20))).toBeLessThan(0);
-  });
-
-  it('should sort offer in descending order', () => {
-    const sortFn = offerSort('desc');
-    expect(sortFn(row(10), row(20))).toBeGreaterThan(0);
-  });
-
-  it('should treat null offer as empty', () => {
-    const sortFn = offerSort('asc');
-    expect(sortFn(row(null), row(5))).toBeGreaterThan(0);
-  });
-});
-
-describe('strikeSort', () => {
-  const row = (strike: number | null) => ({ strike });
-
-  it('should sort strike in ascending order', () => {
-    const sortFn = strikeSort('asc');
-    expect(sortFn(row(100), row(150))).toBeLessThan(0);
-  });
-
-  it('should sort strike in descending order', () => {
-    const sortFn = strikeSort('desc');
-    expect(sortFn(row(100), row(150))).toBeGreaterThan(0);
-  });
-
-  it('should treat null strike as empty', () => {
-    const sortFn = strikeSort('asc');
-    expect(sortFn(row(null), row(100))).toBeGreaterThan(0);
-  });
-});
-
-describe('bidQtySort', () => {
-  const row = (bidQty: number | null) => ({ bidQty });
-
-  it('should sort bidQty in ascending order', () => {
-    const sortFn = bidQtySort('asc');
-    expect(sortFn(row(5), row(10))).toBeLessThan(0);
-  });
-
-  it('should sort bidQty in descending order', () => {
-    const sortFn = bidQtySort('desc');
-    expect(sortFn(row(5), row(10))).toBeGreaterThan(0);
-  });
-
-  it('should treat null bidQty as empty', () => {
-    const sortFn = bidQtySort('asc');
-    expect(sortFn(row(null), row(5))).toBeGreaterThan(0);
-  });
-});
-
-describe('askQtySort', () => {
-  const row = (askQty: number | null) => ({ askQty });
-
-  it('should sort askQty in ascending order', () => {
-    const sortFn = askQtySort('asc');
-    expect(sortFn(row(5), row(10))).toBeLessThan(0);
-  });
-
-  it('should sort askQty in descending order', () => {
-    const sortFn = askQtySort('desc');
-    expect(sortFn(row(5), row(10))).toBeGreaterThan(0);
-  });
-
-  it('should treat null askQty as empty', () => {
-    const sortFn = askQtySort('asc');
-    expect(sortFn(row(null), row(5))).toBeGreaterThan(0);
-  });
-});
-
-describe('nearLegRateSort', () => {
-  const row = (nearLegRate: number | null) => ({ nearLegRate });
-
-  it('should sort nearLegRate in ascending order', () => {
-    const sortFn = nearLegRateSort('asc');
-    expect(sortFn(row(1.5), row(2.5))).toBeLessThan(0);
-  });
-
-  it('should sort nearLegRate in descending order', () => {
-    const sortFn = nearLegRateSort('desc');
-    expect(sortFn(row(1.5), row(2.5))).toBeGreaterThan(0);
-  });
-
-  it('should treat null nearLegRate as empty', () => {
-    const sortFn = nearLegRateSort('asc');
-    expect(sortFn(row(null), row(1.5))).toBeGreaterThan(0);
-  });
-});
diff --git a/src/utils/sortUtils/__tests__/symbolSortWithTermSort.test.ts b/src/utils/sortUtils/__tests__/symbolSortWithTermSort.test.ts
index b8cea27f8..fa8f26f50 100644
--- a/src/utils/sortUtils/__tests__/symbolSortWithTermSort.test.ts
+++ b/src/utils/sortUtils/__tests__/symbolSortWithTermSort.test.ts
@@ -1,256 +1,208 @@
-import { parseDateToMs } from '@utils/parseDateToMs';
-
-import {
-  normalizeSymbol,
-  shortNameSortWithTermSort,
-  stringWithTermSort,
-  symbolSortWithTermSort,
-} from '../columnsSortWithTermSort';
-
-jest.mock('@utils/parseDateToMs', () => ({
-  parseDateToMs: jest.fn(),
-}));
-
-const mockParseDateToMs = parseDateToMs as jest.MockedFunction<typeof parseDateToMs>;
-
-describe('normalizeSymbol', () => {
-  it('should remove numeric suffix from symbol', () => {
-    expect(normalizeSymbol('CAP KEYRATE R 14.5')).toBe('CAP KEYRATE R');
-  });
-
-  it('should return same symbol if no numeric suffix', () => {
-    expect(normalizeSymbol('CAP KEYRATE R')).toBe('CAP KEYRATE R');
-  });
-
-  it('should handle single word symbol', () => {
-    expect(normalizeSymbol('AAPL')).toBe('AAPL');
-  });
-
-  it('should handle symbol with multiple numeric parts', () => {
-    expect(normalizeSymbol('TEST 13.75')).toBe('TEST');
-  });
-
-  it('should handle string numbers', () => {
-    expect(normalizeSymbol('BOND 15')).toBe('BOND');
-  });
-
-  it('should handle empty string', () => {
-    expect(normalizeSymbol('')).toBe('');
-  });
-
-  it('should handle null', () => {
-    expect(normalizeSymbol(null)).toBe('null');
-  });
-
-  it('should handle undefined', () => {
-    expect(normalizeSymbol(undefined)).toBe('undefined');
-  });
-
-  it('should handle number', () => {
-    expect(normalizeSymbol(123)).toBe('123');
-  });
-
-  it('should trim whitespace', () => {
-    expect(normalizeSymbol('  TEST 14.5  ')).toBe('TEST');
-  });
-});
-
-describe('stringWithTermSort', () => {
-  beforeEach(() => {
-    mockParseDateToMs.mockClear();
-  });
-
-  it('should sort by string value in ascending order', () => {
-    const sorter = stringWithTermSort<{ name: string; term: string }>((row) => row.name, 'asc');
-
-    const row1 = { name: 'AAPL', term: '1D' };
-    const row2 = { name: 'GOOG', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeLessThan(0);
-  });
-
-  it('should sort by string value in descending order', () => {
-    const sorter = stringWithTermSort<{ name: string; term: string }>((row) => row.name, 'desc');
-
-    const row1 = { name: 'AAPL', term: '1D' };
-    const row2 = { name: 'GOOG', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeGreaterThan(0);
-  });
-
-  it('should sort by term when string values are equal', () => {
-    const sorter = stringWithTermSort<{ name: string; term: string }>((row) => row.name, 'asc');
-
-    const row1 = { name: 'AAPL', term: '2D' };
-    const row2 = { name: 'AAPL', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(172800000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeGreaterThan(0);
-  });
-
-  it('should return 0 when both string and term are equal', () => {
-    const sorter = stringWithTermSort<{ name: string; term: string }>((row) => row.name, 'asc');
-
-    const row1 = { name: 'AAPL', term: '1D' };
-    const row2 = { name: 'AAPL', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBe(0);
-  });
-});
-
-describe('symbolSortWithTermSort', () => {
-  beforeEach(() => {
-    mockParseDateToMs.mockClear();
-  });
-
-  it('should normalize and sort by symbol in ascending order', () => {
-    const sorter = symbolSortWithTermSort('asc');
-
-    const row1 = { symbol: 'AAPL', term: '1D' };
-    const row2 = { symbol: 'GOOG', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeLessThan(0);
-  });
-
-  it('should sort by term when normalized symbols are equal', () => {
-    const sorter = symbolSortWithTermSort('asc');
-
-    const row1 = { symbol: 'CAP KEYRATE R 14.5', term: '1D' };
-    const row2 = { symbol: 'CAP KEYRATE R 13.75', term: '2D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(172800000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeLessThan(0);
-  });
-
-  it('should return 0 when both symbols normalize to same value and terms are equal', () => {
-    const sorter = symbolSortWithTermSort('asc');
-
-    const row1 = { symbol: 'CAP KEYRATE R 14.5', term: '1D' };
-    const row2 = { symbol: 'CAP KEYRATE R 13.75', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBe(0);
-  });
-});
-
-describe('shortNameSortWithTermSort', () => {
-  beforeEach(() => {
-    mockParseDateToMs.mockClear();
-  });
-
-  it('should sort by shortName in ascending order', () => {
-    const sorter = shortNameSortWithTermSort('asc');
-
-    const row1 = { shortName: 'Apple', term: '1D' };
-    const row2 = { shortName: 'Google', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeLessThan(0);
-  });
-
-  it('should sort by shortName in descending order', () => {
-    const sorter = shortNameSortWithTermSort('desc');
-
-    const row1 = { shortName: 'Apple', term: '1D' };
-    const row2 = { shortName: 'Google', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeGreaterThan(0);
-  });
-
-  it('should sort by term when shortNames are equal', () => {
-    const sorter = shortNameSortWithTermSort('asc');
-
-    const row1 = { shortName: 'Apple', term: '2D' };
-    const row2 = { shortName: 'Apple', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(172800000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeGreaterThan(0);
-  });
-
-  it('should return 0 when both shortName and term are equal', () => {
-    const sorter = shortNameSortWithTermSort('asc');
-
-    const row1 = { shortName: 'Apple', term: '1D' };
-    const row2 = { shortName: 'Apple', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBe(0);
-  });
-
-  it('should handle undefined shortName', () => {
-    const sorter = shortNameSortWithTermSort('asc');
-
-    const row1 = { shortName: undefined, term: '1D' };
-    const row2 = { shortName: 'Apple', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeLessThan(0);
-  });
-
-  it('should handle null shortName', () => {
-    const sorter = shortNameSortWithTermSort('asc');
-
-    const row1 = { shortName: null, term: '1D' };
-    const row2 = { shortName: 'Apple', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeLessThan(0);
-  });
-
-  it('should not normalize shortName', () => {
-    const sorter = shortNameSortWithTermSort('asc');
-
-    const row1 = { shortName: 'TEST 14.5', term: '1D' };
-    const row2 = { shortName: 'TEST', term: '1D' };
-
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-    mockParseDateToMs.mockReturnValueOnce(86400000);
-
-    const result = sorter(row1, row2);
-    expect(result).toBeGreaterThan(0);
-  });
-});
+import { parseDateToMs } from '@utils/parseDateToMs';
+
+import { symbolSortWithTermSort } from '../symbolSortWithTermSort';
+
+// Mock the parseDateToMs function to control its behavior in tests
+jest.mock('@utils/parseDateToMs', () => ({
+  parseDateToMs: jest.fn(),
+}));
+
+describe('symbolSortWithTermSort', () => {
+  const mockParseDateToMs = parseDateToMs as jest.MockedFunction<typeof parseDateToMs>;
+
+  beforeEach(() => {
+    mockParseDateToMs.mockClear();
+  });
+
+  it('should sort by symbol in ascending order when sortOrder is "asc"', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: 'AAPL', term: '1D' };
+    const row2 = { symbol: 'GOOG', term: '2D' };
+
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+    mockParseDateToMs.mockReturnValueOnce(172800000); // 2D in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBeLessThan(0); // AAPL should come before GOOG
+  });
+
+  it('should sort by symbol in descending order when sortOrder is "desc"', () => {
+    const sorter = symbolSortWithTermSort('desc');
+
+    const row1 = { symbol: 'AAPL', term: '1D' };
+    const row2 = { symbol: 'GOOG', term: '2D' };
+
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+    mockParseDateToMs.mockReturnValueOnce(172800000); // 2D in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBeGreaterThan(0); // GOOG should come before AAPL
+  });
+
+  it('should sort by term when symbols are equal', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: 'AAPL', term: '2D' };
+    const row2 = { symbol: 'AAPL', term: '1D' };
+
+    mockParseDateToMs.mockReturnValueOnce(172800000); // 2D in ms
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBeGreaterThan(0); // 2D should come after 1D
+  });
+
+  it('should sort by symbol when symbols are different regardless of term values', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: 'ZZZ', term: '1Y' };
+    const row2 = { symbol: 'AAA', term: '1D' };
+
+    // Mock parseDateToMs to return values that would interfere with sorting if not handled properly
+    mockParseDateToMs.mockReturnValueOnce(31536000000); // 1Y in ms
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBeGreaterThan(0); // ZZZ should come after AAA
+  });
+
+  it('should handle equal symbols and equal terms correctly', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: 'AAPL', term: '1D' };
+    const row2 = { symbol: 'AAPL', term: '1D' };
+
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBe(0); // Equal rows should return 0
+  });
+
+  it('should sort symbols with invalid term formats correctly', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: 'AAPL', term: 'invalid-term' };
+    const row2 = { symbol: 'GOOG', term: 'another-invalid' };
+
+    // Mock parseDateToMs to return Infinity for invalid terms
+    mockParseDateToMs.mockReturnValueOnce(Infinity);
+    mockParseDateToMs.mockReturnValueOnce(Infinity);
+
+    const result = sorter(row1, row2);
+    expect(result).toBeLessThan(0); // Invalid terms should be sorted after valid ones
+  });
+
+  it('should sort symbols with valid term formats correctly', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: 'AAPL', term: '1D' };
+    const row2 = { symbol: 'GOOG', term: '1W' };
+
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+    mockParseDateToMs.mockReturnValueOnce(604800000); // 1W in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBeLessThan(0); // AAPL should come before GOOG
+  });
+
+  it('should handle reserved values correctly', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: 'AAPL', term: 'TOD' };
+    const row2 = { symbol: 'GOOG', term: '1D' };
+
+    mockParseDateToMs.mockReturnValueOnce(-Infinity); // TOD should return -Infinity
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBeLessThan(0); // TOD should come before 1D
+  });
+
+  it('should handle numeric symbols correctly', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: '123', term: '1D' };
+    const row2 = { symbol: '456', term: '2D' };
+
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+    mockParseDateToMs.mockReturnValueOnce(172800000); // 2D in ms
+
+    const result = sorter(row1, row2);
+    expect(result).toBeLessThan(0); // 123 should come before 456
+  });
+
+  it('should handle null/undefined symbols correctly', () => {
+    const sorter = symbolSortWithTermSort('asc');
+
+    const row1 = { symbol: null, term: '1D' };
+    const row2 = { symbol: undefined, term: '2D' };
+
+    mockParseDateToMs.mockReturnValueOnce(86400000); // 1D in ms
+    mockParseDateToMs.mockReturnValueOnce(172800000); // 2D in ms
+
+    const result = sorter(row1, row2);
+    // Should compare null vs undefined using localeCompare, which will return 1
+    expect(result).toBeLessThan(0);
+  });
+
+  const symbolNormalizationCases = [
+    {
+      symbol1: 'CAP KEYRATE R 13',
+      term1: '1D',
+      symbol2: 'CAP KEYRATE R 13.75',
+      term2: '2D',
+      term1Ms: 86400000,
+      term2Ms: 172800000,
+      comparisonFn: 'less',
+    },
+    {
+      symbol1: 'CAP KEYRATE R 14',
+      term1: '2D',
+      symbol2: 'CAP KEYRATE R 15.5',
+      term2: '1D',
+      term1Ms: 172800000,
+      term2Ms: 86400000,
+      comparisonFn: 'greater',
+    },
+    {
+      symbol1: '13',
+      term1: '1D',
+      symbol2: '14',
+      term2: '2D',
+      term1Ms: 86400000,
+      term2Ms: 172800000,
+      comparisonFn: 'less',
+    },
+    {
+      symbol1: 'AAPL',
+      term1: '1D',
+      symbol2: 'GOOG',
+      term2: '2D',
+      term1Ms: 86400000,
+      term2Ms: 172800000,
+      comparisonFn: 'less',
+    },
+  ];
+
+  describe.each(symbolNormalizationCases)(
+    'symbol normalization: $symbol1 vs $symbol2',
+    ({ symbol1, term1, symbol2, term2, term1Ms, term2Ms, comparisonFn }) => {
+      it('should sort correctly', () => {
+        const sorter = symbolSortWithTermSort('asc');
+
+        const row1 = { symbol: symbol1, term: term1 };
+        const row2 = { symbol: symbol2, term: term2 };
+
+        mockParseDateToMs.mockReturnValueOnce(term1Ms);
+        mockParseDateToMs.mockReturnValueOnce(term2Ms);
+
+        const result = sorter(row1, row2);
+
+        expect(result < 0).toBe(comparisonFn === 'less');
+        expect(result > 0).toBe(comparisonFn === 'greater');
+      });
+    },
+  );
+});
diff --git a/src/utils/sortUtils/columnsSortWithTermSort.ts b/src/utils/sortUtils/columnsSortWithTermSort.ts
deleted file mode 100644
index 19d2fbbb1..000000000
--- a/src/utils/sortUtils/columnsSortWithTermSort.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { SortingType } from '@components/Table/types/sorting';
-
-import { parseDateToMs } from '@utils/parseDateToMs';
-
-// Инструменты "CAP KEYRATE R 14.5" и "CAP KEYRATE R 13.75"
-// должны считаться одним инструментам и сортироваться в рамках term
-export const normalizeSymbol = (symbol: unknown) => {
-  const str = String(symbol).trim();
-  const parts = str.split(' ');
-  const lastPart = parts[parts.length - 1];
-  if (parts.length > 1 && !Number.isNaN(Number(lastPart))) {
-    parts.pop();
-  }
-  return parts.join(' ');
-};
-
-const compareByTerm = (term1: unknown, term2: unknown) => {
-  const term1Ms = parseDateToMs(String(term1));
-  const term2Ms = parseDateToMs(String(term2));
-  return term1Ms - term2Ms;
-};
-
-export const stringWithTermSort =
-  <T extends Record<string, unknown>>(getStringValue: (row: T) => string, sortOrder: SortingType) =>
-  (row1: T, row2: T) => {
-    const string1 = getStringValue(row1);
-    const string2 = getStringValue(row2);
-
-    if (string1 !== string2) {
-      return (sortOrder === 'asc' ? 1 : -1) * (string1.localeCompare(string2) || 1);
-    }
-
-    return compareByTerm(row1.term, row2.term);
-  };
-
-export const symbolSortWithTermSort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  stringWithTermSort<T>((row) => normalizeSymbol(row.symbol as string), sortOrder);
-
-export const shortNameSortWithTermSort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  stringWithTermSort<T>((row) => String(row.shortName ?? '').trim(), sortOrder);
diff --git a/src/utils/sortUtils/dateSortWithSymbolAndTermSort.ts b/src/utils/sortUtils/dateSortWithSymbolAndTermSort.ts
index 01927ee12..251281457 100644
--- a/src/utils/sortUtils/dateSortWithSymbolAndTermSort.ts
+++ b/src/utils/sortUtils/dateSortWithSymbolAndTermSort.ts
@@ -1,6 +1,6 @@
 import { SortingType } from '@components/Table/types/sorting';
 
-import { normalizeSymbol, stringWithTermSort } from './columnsSortWithTermSort';
+import { symbolSortWithTermSort } from './symbolSortWithTermSort';
 
 export const dateSortWithSymbolAndTermSort =
   <T extends Record<string, unknown>>(sortOrder: SortingType) =>
@@ -18,5 +18,5 @@ export const dateSortWithSymbolAndTermSort =
       }
     }
 
-    return stringWithTermSort<T>((row) => normalizeSymbol(row.symbol as string), sortOrder)(row1, row2);
+    return symbolSortWithTermSort(sortOrder)(row1, row2);
   };
diff --git a/src/utils/sortUtils/index.ts b/src/utils/sortUtils/index.ts
index b95cdf85a..4c8236e9a 100644
--- a/src/utils/sortUtils/index.ts
+++ b/src/utils/sortUtils/index.ts
@@ -1,4 +1,3 @@
 export * from './dateSortWithSymbolAndTermSort';
-export * from './columnsSortWithTermSort';
+export * from './symbolSortWithTermSort';
 export * from './termSorter';
-export * from './numberSort';
diff --git a/src/utils/sortUtils/numberSort.ts b/src/utils/sortUtils/numberSort.ts
deleted file mode 100644
index 0b6266996..000000000
--- a/src/utils/sortUtils/numberSort.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { SortingType } from '@components/Table/types/sorting';
-
-export const numberSort =
-  <T extends Record<string, unknown>>(getFieldValue: (row: T) => number | null, sortOrder: SortingType) =>
-  (row1: T, row2: T) => {
-    const value1 = getFieldValue(row1);
-    const value2 = getFieldValue(row2);
-
-    // 0 считаем пустым значением
-    const isNull1 = value1 === null || value1 === undefined || value1 === 0;
-    const isNull2 = value2 === null || value2 === undefined || value2 === 0;
-
-    if (isNull1 && isNull2) {
-      return 0;
-    }
-
-    if (isNull1) {
-      return 1;
-    }
-
-    if (isNull2) {
-      return -1;
-    }
-
-    const diff = value1 - value2;
-    return sortOrder === 'asc' ? diff : -diff;
-  };
-
-export const bidSort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  numberSort<T>((row) => row.bid as number | null, sortOrder);
-
-export const askSort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  numberSort<T>((row) => row.ask as number | null, sortOrder);
-
-export const offerSort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  numberSort<T>((row) => row.offer as number | null, sortOrder);
-
-export const strikeSort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  numberSort<T>((row) => row.strike as number | null, sortOrder);
-
-export const bidQtySort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  numberSort<T>((row) => row.bidQty as number | null, sortOrder);
-
-export const askQtySort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  numberSort<T>((row) => row.askQty as number | null, sortOrder);
-
-export const nearLegRateSort = <T extends Record<string, unknown>>(sortOrder: SortingType) =>
-  numberSort<T>((row) => row.nearLegRate as number | null, sortOrder);
diff --git a/src/utils/sortUtils/symbolSortWithTermSort.ts b/src/utils/sortUtils/symbolSortWithTermSort.ts
new file mode 100644
index 000000000..190a76493
--- /dev/null
+++ b/src/utils/sortUtils/symbolSortWithTermSort.ts
@@ -0,0 +1,34 @@
+import { SortingType } from '@components/Table/types/sorting';
+
+import { parseDateToMs } from '@utils/parseDateToMs';
+
+export const symbolSortWithTermSort =
+  <T extends Record<string, unknown>>(sortOrder: SortingType) =>
+  (row1: T, row2: T) => {
+    const { symbol: symbol1, term: term1 } = row1;
+    const { symbol: symbol2, term: term2 } = row2;
+
+    // Инструменты "CAP KEYRATE R 14.5" и "CAP KEYRATE R 13.75"
+    // должны считаться одним инструментам и сортироваться в рамках term
+    const normalizeSymbol = (symbol: unknown) => {
+      const str = String(symbol).trim();
+      const parts = str.split(' ');
+      const lastPart = parts[parts.length - 1];
+      if (parts.length > 1 && !Number.isNaN(Number(lastPart))) {
+        parts.pop();
+      }
+      return parts.join(' ');
+    };
+
+    const normalized1 = normalizeSymbol(symbol1);
+    const normalized2 = normalizeSymbol(symbol2);
+
+    if (normalized1 !== normalized2) {
+      return (sortOrder === 'asc' ? 1 : -1) * (normalized1.localeCompare(normalized2) || 1);
+    }
+
+    const row1Term = parseDateToMs(String(term1));
+    const row2Term = parseDateToMs(String(term2));
+
+    return row1Term - row2Term;
+  };
diff --git a/src/utils/test-utils.tsx b/src/utils/test-utils.tsx
index 1fbf93167..ab780a3f2 100644
--- a/src/utils/test-utils.tsx
+++ b/src/utils/test-utils.tsx
@@ -17,8 +17,6 @@ interface ExtendedRenderHookOptions<Props> extends Omit<RenderHookOptions<Props>
   store?: AppStore;
   /** Если true, `dispatch` будет замокан */
   mockDispatch?: boolean;
-  /** Внешняя обертка (например, для тем, локализации или других провайдеров) */
-  wrapper?: React.ComponentType<{ children: React.ReactNode }>;
 }
 
 /** Ренедерит компонент внутри обертки с тестовым store */
@@ -49,15 +47,11 @@ export const renderHookWithProviders = <Result, Props>(
     preloadedState = {},
     store: defaultStore = setupStore(preloadedState),
     mockDispatch,
-    wrapper: ExternalWrapper,
     ...renderHookOptions
   } = extendedRenderOptions;
   const mockedDispatch = jest.fn();
   const store = mockDispatch ? { ...defaultStore, dispatch: mockedDispatch } : defaultStore;
-  const ProviderWrapper = ({ children }: PropsWithChildren) => <Provider store={store}>{children}</Provider>;
-  const Wrapper = ({ children }: PropsWithChildren) => (
-    <ProviderWrapper>{ExternalWrapper ? <ExternalWrapper>{children}</ExternalWrapper> : children}</ProviderWrapper>
-  );
+  const Wrapper = ({ children }: PropsWithChildren) => <Provider store={store}>{children}</Provider>;
 
   return { store, ...renderHook(renderHookFn, { wrapper: Wrapper, ...renderHookOptions }) };
 };
diff --git a/src/utils/testUtils/createMockRootState.ts b/src/utils/testUtils/createMockRootState.ts
index d38661211..0444c1022 100644
--- a/src/utils/testUtils/createMockRootState.ts
+++ b/src/utils/testUtils/createMockRootState.ts
@@ -1,5 +1,5 @@
 import { RootState } from '@store/setupStore';
-import { initialMxtState } from '@store/slices/mxt';
+import { MxtDataState } from '@store/slices/mxt';
 import { initialRequestStatusState } from '@store/slices/requestStatus';
 import { SaveWorkspaceActionType } from '@terminal/desktop/components/SaveWorkspaceModal/types';
 import { SidbarContentType } from '@terminal/desktop/components/SidebarContent/types';
@@ -46,16 +46,6 @@ export const createMockRootState = (overrides?: Partial<RootState>): RootState =
     rcauth: false,
     isLogoutAction: false,
   },
-  depositForm: {
-    data: {},
-    submit: {},
-  },
-  addressDepositForm: {
-    submit: {},
-  },
-  formCommission: {},
-  formLimitEstimation: {},
-  formPriceRange: {},
   cashedData: {
     customers: [],
     // Отключено в рамках TRADERADAR-12666 Отключение источника НРД
@@ -291,10 +281,8 @@ export const createMockRootState = (overrides?: Partial<RootState>): RootState =
     sides: {},
   },
   requestStatus: initialRequestStatusState,
-  mxtSlice: {
-    ...initialMxtState,
+  mxtSlice: <MxtDataState>{
     objects: {},
-    objectStates: {},
   },
   ...overrides,
 });
diff --git a/src/widgets/AboutInstrument/ExtraInfo/index.tsx b/src/widgets/AboutInstrument/ExtraInfo/index.tsx
index 9c54af800..e5d07d871 100644
--- a/src/widgets/AboutInstrument/ExtraInfo/index.tsx
+++ b/src/widgets/AboutInstrument/ExtraInfo/index.tsx
@@ -50,7 +50,6 @@ export const ExtraInfo: React.FC<ExtraInfoProps> = ({
   const { availableTabs, activeTab, onTabChange } = useTabs(
     aboutInstrumentInfo?.group ? aboutInstrumentInfo?.group : (aboutInstrumentInfoAnotherInstrTypes?.instrType ?? ''),
     dividends,
-    selectedTicketIssKey,
   );
 
   return (
diff --git a/src/widgets/AboutInstrument/hooks/useTabs.ts b/src/widgets/AboutInstrument/hooks/useTabs.ts
index b225f0a26..65f156181 100644
--- a/src/widgets/AboutInstrument/hooks/useTabs.ts
+++ b/src/widgets/AboutInstrument/hooks/useTabs.ts
@@ -1,28 +1,14 @@
-import { useEffect, useMemo, useState } from 'react';
-
-import { Payment } from 'types/Payment';
+import { useEffect, useState } from 'react';
 
 import { instrumentTabsByTypeMap, TabValues } from '../ExtraInfo/components/Tabs/constants';
-import { ABOUT_INSTRUMENT_PLUGINS } from '../plugins';
-import { defaultAboutInstrumentPlugin } from '../plugins/defaultPlugin';
+import { Payment } from 'types/Payment';
 
-export const useTabs = (instrumentType: string, dividends: Payment[], issKey?: string | null) => {
+export const useTabs = (instrumentType: string, dividends: Payment[]) => {
   const isDividendsTabAvailable = dividends.length !== 0;
-
-  const availableTabs = useMemo(() => {
-    const baseTabs =
-      instrumentTabsByTypeMap[instrumentType]?.filter(
-        (item) => isDividendsTabAvailable || item.key !== TabValues.dividendsTab,
-      ) ?? [];
-
-    const pluginProps = { instrumentType, issKey };
-    // TODO: вынести из availableTabs на уровень выше, тк в будущем может понадобиться скрывать не только табы
-    const pluginFactory =
-      ABOUT_INSTRUMENT_PLUGINS.find((plugin) => plugin(pluginProps).check()) ?? defaultAboutInstrumentPlugin;
-
-    return pluginFactory(pluginProps).getTabs(baseTabs);
-  }, [instrumentType, isDividendsTabAvailable, issKey]);
-  const firstAvailableTabKey = availableTabs[0]?.key;
+  const availableTabs = instrumentTabsByTypeMap[instrumentType]?.filter(
+    (item) => isDividendsTabAvailable || item.key !== TabValues.dividendsTab,
+  );
+  const firstAvailableTabKey = availableTabs?.[0]?.key;
 
   const [activeTab, setActiveTab] = useState(firstAvailableTabKey);
 
diff --git a/src/widgets/AboutInstrument/plugins/defaultPlugin.ts b/src/widgets/AboutInstrument/plugins/defaultPlugin.ts
deleted file mode 100644
index 00bb4fcc1..000000000
--- a/src/widgets/AboutInstrument/plugins/defaultPlugin.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { AboutInstrumentPluginFactory } from './types';
-
-export const defaultAboutInstrumentPlugin: AboutInstrumentPluginFactory = () => ({
-  name: 'defaultAboutInstrumentPlugin',
-  check: () => true,
-  getTabs: (tabs) => tabs,
-});
diff --git a/src/widgets/AboutInstrument/plugins/index.ts b/src/widgets/AboutInstrument/plugins/index.ts
deleted file mode 100644
index 1df83564f..000000000
--- a/src/widgets/AboutInstrument/plugins/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { ntbAboutInstrumentPlugin } from '@modules/ntb/plugins/ntbAboutInstrumentPlugin';
-
-import type { AboutInstrumentPluginFactory } from './types';
-
-export const ABOUT_INSTRUMENT_PLUGINS: AboutInstrumentPluginFactory[] = [ntbAboutInstrumentPlugin];
diff --git a/src/widgets/AboutInstrument/plugins/types.ts b/src/widgets/AboutInstrument/plugins/types.ts
deleted file mode 100644
index 90fdddfa5..000000000
--- a/src/widgets/AboutInstrument/plugins/types.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { TabsProps } from 'antd';
-
-export type AboutInstrumentTabs = NonNullable<TabsProps['items']>;
-
-export type AboutInstrumentPluginProps = {
-  instrumentType: string;
-  issKey?: string | null;
-};
-
-export type AboutInstrumentPluginFactory = (props: AboutInstrumentPluginProps) => {
-  name: string;
-  check: () => boolean;
-  getTabs: (tabs: AboutInstrumentTabs) => AboutInstrumentTabs;
-};
-
-export type AboutInstrumentPlugin = ReturnType<AboutInstrumentPluginFactory>;
diff --git a/src/widgets/Admin/index.tsx b/src/widgets/Admin/index.tsx
new file mode 100644
index 000000000..abe57ea27
--- /dev/null
+++ b/src/widgets/Admin/index.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+
+import IFrame from '@components/IFrame';
+import WidgetContentWrapper from '@components/WidgetContentWrapper';
+import WidgetHeader from '@components/WidgetHeader';
+import { WidgetContentBasicProps } from 'types/Widgets';
+
+type AdminProps = WidgetContentBasicProps;
+
+export const Admin: React.FC<AdminProps> = (props) => (
+  <>
+    <WidgetHeader {...props} />
+    <WidgetContentWrapper
+      {...props}
+      scrollable={false}
+    >
+      <IFrame src="/admin" />
+    </WidgetContentWrapper>
+  </>
+);
diff --git a/src/widgets/BondScreener/__tests__/config.test.tsx b/src/widgets/BondScreener/__tests__/config.test.tsx
index 89b6bd883..689cc9ee6 100644
--- a/src/widgets/BondScreener/__tests__/config.test.tsx
+++ b/src/widgets/BondScreener/__tests__/config.test.tsx
@@ -5,7 +5,7 @@ import { bondScreenerColumns } from '../config';
 
 describe('BondScreenerColumns', () => {
   it('should have correct number of columns', () => {
-    expect(bondScreenerColumns).toHaveLength(66);
+    expect(bondScreenerColumns).toHaveLength(64);
   });
 
   it('should have unique keys for all columns', () => {
@@ -31,8 +31,6 @@ describe('BondScreenerColumns', () => {
       'Доходность (эффект.)',
       'Доходность (эффект. средневзвеш.)',
       'Режим торгов',
-      'Доходность (посл. сделка вчер.)',
-      'Изм. дох., бп.',
       'G-Спред',
       'Z-спред',
       'Тип ставки',
@@ -110,8 +108,6 @@ describe('BondScreenerColumns', () => {
       'effectiveYield',
       'effectiveYieldWaprice',
       'boardName',
-      'yieldClose',
-      'yieldDiff',
       'gSpread',
       'zSpread',
       'couponType',
@@ -212,7 +208,7 @@ describe('BondScreenerColumns', () => {
     const rightAlignedColumns = bondScreenerColumns.filter((column) => column.align === 'right');
     const leftAlignedColumns = bondScreenerColumns.filter((column) => column.align === 'left');
 
-    expect(rightAlignedColumns).toHaveLength(41);
+    expect(rightAlignedColumns).toHaveLength(39);
     expect(leftAlignedColumns).toHaveLength(25);
   });
 });
diff --git a/src/widgets/BondScreener/__tests__/utils.test.ts b/src/widgets/BondScreener/__tests__/utils.test.ts
index e65c93b0c..c70bd2c02 100644
--- a/src/widgets/BondScreener/__tests__/utils.test.ts
+++ b/src/widgets/BondScreener/__tests__/utils.test.ts
@@ -70,8 +70,6 @@ const mockBond: BondsScreenerDataType = {
   yieldAtPrevWaprice: 3.4,
   effectiveYield: 5,
   effectiveYieldWaprice: 5.1,
-  yieldClose: 5.2,
-  yieldDiff: 0.1,
 };
 
 const mockQuote = {
diff --git a/src/widgets/BondScreener/config.tsx b/src/widgets/BondScreener/config.tsx
index d1bcaa1e0..a94d9b045 100644
--- a/src/widgets/BondScreener/config.tsx
+++ b/src/widgets/BondScreener/config.tsx
@@ -2,12 +2,13 @@ import React from 'react';
 
 import { NumberCell } from '@components/NumberCell';
 import { CountryFlagRender } from '@components/renders/CountryFlagRender/CountryFlagRender';
+import { FormattedNumberRender } from '@components/renders/FormattedNumberRender/FormattedNumberRender';
 import { ValueForCopy } from '@components/ValueForCopy/ValueForCopy';
 import { renderDate } from '@utils/renderDateTime';
 import { AgencyNames } from 'types/IssuerCard';
 
 import { FILTER_NAMES_MAP, GROUP_NAMES_MAP } from './const';
-import { renderChangeCellHighlight } from './logic/utils/renderChangeCellHighlight';
+import { gradientColorByValue } from './logic/utils/gradientColorByValue';
 import { renderNumber } from './renders/renderNumber';
 import { RatingColumnNames } from './types/columns';
 import { BondScreenerTableColumns, QuotesFieldsWithUndefined } from './types/components';
@@ -206,30 +207,6 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     position: 14,
   },
-  {
-    title: 'Доходность (посл. сделка вчер.)',
-    dataIndex: 'yieldClose',
-    key: 'yieldClose',
-    align: 'right',
-    filterSearch: true,
-    hidden: false,
-    render: renderNumber,
-    width: 100,
-    minWidth: 100,
-    position: 15,
-  },
-  {
-    title: 'Изм. дох., бп.',
-    dataIndex: 'yieldDiff',
-    key: 'yieldDiff',
-    align: 'right',
-    filterSearch: true,
-    hidden: false,
-    render: renderChangeCellHighlight,
-    width: 100,
-    minWidth: 100,
-    position: 16,
-  },
   {
     title: 'G-Спред',
     dataIndex: 'gSpread',
@@ -240,7 +217,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 17,
+    position: 15,
   },
   {
     title: 'Z-спред',
@@ -252,7 +229,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 18,
+    position: 16,
   },
   {
     title: 'Тип ставки',
@@ -263,7 +240,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: false,
     width: 100,
     minWidth: 100,
-    position: 19,
+    position: 17,
   },
   {
     title: 'Ставка купона',
@@ -280,7 +257,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: false,
     width: 100,
     minWidth: 100,
-    position: 20,
+    position: 18,
   },
   {
     title: 'Периодичность выплаты купона',
@@ -292,7 +269,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: false,
     width: 100,
     minWidth: 100,
-    position: 21,
+    position: 19,
   },
   {
     title: 'НКД',
@@ -309,7 +286,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 22,
+    position: 20,
   },
   {
     title: 'Дюрация',
@@ -326,7 +303,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: false,
     width: 100,
     minWidth: 100,
-    position: 23,
+    position: 21,
   },
   {
     title: 'Срок до погашения/оферты',
@@ -336,7 +313,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     filterSearch: true,
     hidden: false,
     render: renderNumber,
-    position: 24,
+    position: 22,
   },
   {
     title: 'Объём торгов за день',
@@ -348,7 +325,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 25,
+    position: 23,
   },
   {
     title: 'Последняя',
@@ -365,7 +342,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 26,
+    position: 24,
   },
   // Отключено в рамках TRADERADAR-12666 Отключение источника НРД
   // {
@@ -395,7 +372,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderDate,
     width: 100,
     minWidth: 100,
-    position: 27,
+    position: 25,
   },
   {
     title: 'Дата погашения',
@@ -407,7 +384,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderDate,
     width: 100,
     minWidth: 100,
-    position: 28,
+    position: 26,
   },
   {
     title: 'Дата оферты',
@@ -419,7 +396,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderDate,
     width: 100,
     minWidth: 100,
-    position: 29,
+    position: 27,
   },
   {
     title: 'ISIN',
@@ -430,7 +407,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: (text: string) => <ValueForCopy value={text} />,
     width: 150,
     minWidth: 150,
-    position: 30,
+    position: 28,
   },
   {
     title: 'Эмитент',
@@ -441,7 +418,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 31,
+    position: 29,
   },
   {
     title: 'Отрасль',
@@ -452,7 +429,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 32,
+    position: 30,
   },
   {
     title: 'Тикер',
@@ -462,7 +439,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 33,
+    position: 31,
   },
   {
     title: 'Тип',
@@ -472,7 +449,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 34,
+    position: 32,
   },
   {
     title: 'Сектор',
@@ -482,7 +459,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 35,
+    position: 33,
   },
   {
     title: 'Доп. классификатор',
@@ -492,7 +469,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 36,
+    position: 34,
   },
   {
     title: 'Площадка',
@@ -502,7 +479,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 37,
+    position: 35,
   },
   {
     title: 'Код режима торгов',
@@ -512,7 +489,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 38,
+    position: 36,
   },
   {
     title: 'Бид',
@@ -528,7 +505,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 39,
+    position: 37,
   },
   {
     title: 'Бид количество',
@@ -539,7 +516,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 40,
+    position: 38,
   },
   {
     title: 'Аск',
@@ -555,7 +532,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 41,
+    position: 39,
   },
   {
     title: 'Аск количество',
@@ -567,7 +544,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 42,
+    position: 40,
   },
   {
     title: 'Максимальный бид',
@@ -584,7 +561,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 43,
+    position: 41,
   },
   {
     title: 'Минимальный аск',
@@ -601,7 +578,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 44,
+    position: 42,
   },
 
   {
@@ -619,7 +596,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 45,
+    position: 43,
   },
 
   {
@@ -637,7 +614,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 46,
+    position: 44,
   },
   {
     title: 'Минимум',
@@ -654,7 +631,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 47,
+    position: 45,
   },
   {
     title: 'Максимум',
@@ -671,7 +648,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 48,
+    position: 46,
   },
   {
     title: 'Изм',
@@ -679,7 +656,15 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     key: 'change',
     align: 'right',
     hidden: true,
-    render: renderChangeCellHighlight,
+    render: (text: string) => ({
+      props: {
+        style: {
+          color: Number(text) >= 0 ? '#85B87A' : '#CC6666',
+          background: gradientColorByValue(Number(text)),
+        },
+      },
+      children: FormattedNumberRender(text, 3),
+    }),
     width: 100,
     minWidth: 100,
     position: 49,
@@ -690,8 +675,16 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     key: 'changePct',
     align: 'right',
     hidden: true,
-    position: 50,
-    render: renderChangeCellHighlight,
+    position: 47,
+    render: (text: string) => ({
+      props: {
+        style: {
+          color: Number(text) >= 0 ? '#85B87A' : '#CC6666',
+          background: gradientColorByValue(Number(text)),
+        },
+      },
+      children: text ? FormattedNumberRender(text, 2) : null,
+    }),
     width: 100,
     minWidth: 100,
   },
@@ -705,7 +698,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 51,
+    position: 48,
   },
   {
     title: 'Оборот торгов за день',
@@ -717,7 +710,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 52,
+    position: 49,
   },
   {
     title: 'Время',
@@ -728,7 +721,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 53,
+    position: 50,
     render: (text: string) => ({
       children: (
         <div>
@@ -752,7 +745,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 54,
+    position: 51,
   },
   {
     title: 'Номинал',
@@ -768,7 +761,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     ),
     width: 100,
     minWidth: 100,
-    position: 55,
+    position: 52,
   },
   // Отключено в рамках TRADERADAR-12666 Отключение источника НРД
   // {
@@ -802,7 +795,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderDate,
     width: 100,
     minWidth: 100,
-    position: 56,
+    position: 53,
   },
   {
     title: 'Страна',
@@ -814,7 +807,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: CountryFlagRender,
     width: 100,
     minWidth: 100,
-    position: 57,
+    position: 54,
   },
   {
     title: 'Статус',
@@ -825,7 +818,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 58,
+    position: 55,
   },
   {
     title: 'Размещение по',
@@ -837,7 +830,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderDate,
     width: 100,
     minWidth: 100,
-    position: 59,
+    position: 56,
   },
   {
     title: 'Объем эмиссии',
@@ -849,7 +842,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 60,
+    position: 57,
   },
   {
     title: 'Объем в обращении',
@@ -861,7 +854,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 61,
+    position: 58,
   },
   {
     title: 'Листинг',
@@ -873,7 +866,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     render: renderNumber,
     width: 100,
     minWidth: 100,
-    position: 62,
+    position: 59,
   },
   {
     title: `${AgencyNames.AKRA} Эмиссия`,
@@ -883,7 +876,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 63,
+    position: 60,
   },
   {
     title: `${AgencyNames.EXPERT_RA} Эмиссия`,
@@ -893,7 +886,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 64,
+    position: 61,
   },
   {
     title: `${AgencyNames.NKR} Эмиссия`,
@@ -903,7 +896,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 65,
+    position: 62,
   },
   {
     title: `${AgencyNames.NRA} Эмиссия`,
@@ -913,7 +906,7 @@ export const bondScreenerColumns: BondScreenerTableColumns[] = [
     hidden: true,
     width: 100,
     minWidth: 100,
-    position: 66,
+    position: 63,
   },
 ];
 
diff --git a/src/widgets/BondScreener/const.ts b/src/widgets/BondScreener/const.ts
index 28c15d34d..04d49ef45 100644
--- a/src/widgets/BondScreener/const.ts
+++ b/src/widgets/BondScreener/const.ts
@@ -149,8 +149,6 @@ export const BOND_SCREENER_ALL_FIELDS: (keyof BondScreenerTableDataItem)[] = [
   'duration',
   'endDistDate',
   'faceValueScr',
-  'yieldClose',
-  'yieldDiff',
   'gSpread',
   'isin',
   'issuerId',
diff --git a/src/widgets/BondScreener/logic/hooks/__tests__/useTableDataLoad.ai.test.tsx b/src/widgets/BondScreener/logic/hooks/__tests__/useTableDataLoad.ai.test.tsx
index f064fa55d..d66d06279 100644
--- a/src/widgets/BondScreener/logic/hooks/__tests__/useTableDataLoad.ai.test.tsx
+++ b/src/widgets/BondScreener/logic/hooks/__tests__/useTableDataLoad.ai.test.tsx
@@ -46,8 +46,6 @@ const mockData: BondsScreenerDataType[] = [
     yieldAtPrevWaprice: null,
     effectiveYield: null,
     effectiveYieldWaprice: null,
-    yieldClose: null,
-    yieldDiff: null,
     zSpread: null,
     maturityYear: null,
     boardName: null,
diff --git a/src/widgets/BondScreener/logic/utils/renderChangeCellHighlight.tsx b/src/widgets/BondScreener/logic/utils/renderChangeCellHighlight.tsx
deleted file mode 100644
index f4f2268ce..000000000
--- a/src/widgets/BondScreener/logic/utils/renderChangeCellHighlight.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { FormattedNumberRender } from '@components/renders/FormattedNumberRender';
-
-import { gradientColorByValue } from './gradientColorByValue';
-
-export const renderChangeCellHighlight = (text: string) => ({
-  props: {
-    style: {
-      color: Number(text) >= 0 ? '#85B87A' : '#CC6666',
-      background: gradientColorByValue(Number(text)),
-    },
-  },
-  children: FormattedNumberRender(text, 3),
-});
diff --git a/src/widgets/Chart/__tests__/CompareModal.test.tsx b/src/widgets/Chart/__tests__/CompareModal.test.tsx
new file mode 100644
index 000000000..0f8455831
--- /dev/null
+++ b/src/widgets/Chart/__tests__/CompareModal.test.tsx
@@ -0,0 +1,256 @@
+import { act, render } from '@testing-library/react';
+
+import { CompareMode } from 'moex-chart';
+import React from 'react';
+
+import { InstrumentSearch } from '@components/InstrumentSearch';
+
+import { CompareModal } from '../components/MoexChart/components/CompareModal';
+
+import type { Contract } from '@modules/contracts';
+import type { __CompareManager__ } from 'moex-chart';
+import type { MutableRefObject } from 'react';
+
+jest.mock('moex-chart', () => ({
+  __esModule: true,
+  CompareMode: {
+    Percentage: 'PCT',
+    NewScale: 'SCALE',
+    NewPane: 'PANE',
+  },
+}));
+
+jest.mock('@components/InstrumentSearch', () => ({
+  InstrumentSearch: jest.fn(() => null),
+}));
+
+interface CompareActions {
+  handlePercent: (instrument: Contract) => void;
+  handleNewScale: (instrument: Contract) => void;
+  handleNewPanel: (instrument: Contract) => void;
+}
+
+interface InstrumentSearchMockProps {
+  widgetId: number;
+  variant: string;
+  isOpen: boolean;
+  setOpen: (isOpen: boolean) => void;
+  isNewScaleDisabled: boolean;
+  customActionsFooterHandlers: CompareActions;
+}
+
+describe('CompareModal', () => {
+  const mockInstrumentSearch = InstrumentSearch as jest.Mock;
+
+  const mockSetOpen = jest.fn();
+  const mockSetSymbolMode = jest.fn();
+  const mockIsNewScaleDisabled = jest.fn();
+  const mockIsNewScaleDisabledObservable = jest.fn();
+  const mockSubscribe = jest.fn();
+  const mockUnsubscribe = jest.fn();
+
+  let newScaleDisabledListener: ((disabled: boolean) => void) | null;
+  let compareManager: __CompareManager__;
+  let compareManagerRef: MutableRefObject<__CompareManager__ | null>;
+
+  const getInstrumentSearchProps = (): InstrumentSearchMockProps => {
+    const lastCall = mockInstrumentSearch.mock.calls[mockInstrumentSearch.mock.calls.length - 1];
+
+    return lastCall?.[0] as InstrumentSearchMockProps;
+  };
+
+  const renderComponent = (isOpen = true) =>
+    render(
+      <CompareModal
+        onClose={jest.fn()}
+        widgetId={42}
+        compareManager={compareManagerRef}
+        isOpen={isOpen}
+        setOpen={mockSetOpen}
+      />,
+    );
+
+  beforeEach(() => {
+    jest.clearAllMocks();
+
+    newScaleDisabledListener = null;
+
+    mockIsNewScaleDisabled.mockReturnValue(false);
+    mockSetSymbolMode.mockResolvedValue(undefined);
+
+    mockSubscribe.mockImplementation((listener: (disabled: boolean) => void) => {
+      newScaleDisabledListener = listener;
+
+      return {
+        unsubscribe: mockUnsubscribe,
+      };
+    });
+
+    mockIsNewScaleDisabledObservable.mockReturnValue({
+      subscribe: mockSubscribe,
+    });
+
+    compareManager = {
+      setSymbolMode: mockSetSymbolMode,
+      isNewScaleDisabled: mockIsNewScaleDisabled,
+      isNewScaleDisabledObservable: mockIsNewScaleDisabledObservable,
+    } as unknown as __CompareManager__;
+
+    compareManagerRef = {
+      current: compareManager,
+    };
+  });
+
+  it('should pass modal properties and current scale state to instrument search', () => {
+    // Arrange
+    mockIsNewScaleDisabled.mockReturnValue(true);
+
+    // Act
+    renderComponent();
+
+    const instrumentSearchProps = getInstrumentSearchProps();
+
+    // Assert
+    expect(instrumentSearchProps.widgetId).toBe(42);
+    expect(instrumentSearchProps.variant).toBe('single');
+    expect(instrumentSearchProps.isOpen).toBe(true);
+    expect(instrumentSearchProps.setOpen).toBe(mockSetOpen);
+    expect(instrumentSearchProps.isNewScaleDisabled).toBe(true);
+    expect(instrumentSearchProps.customActionsFooterHandlers).toEqual({
+      handlePercent: expect.any(Function),
+      handleNewScale: expect.any(Function),
+      handleNewPanel: expect.any(Function),
+    });
+  });
+
+  it('should subscribe to new scale disabled state', () => {
+    // Arrange & Act
+    renderComponent();
+
+    // Assert
+    expect(mockIsNewScaleDisabled).toHaveBeenCalledTimes(1);
+    expect(mockIsNewScaleDisabledObservable).toHaveBeenCalledTimes(1);
+    expect(mockSubscribe).toHaveBeenCalledTimes(1);
+  });
+
+  it('should update new scale disabled state from manager observable', () => {
+    // Arrange
+    renderComponent();
+
+    // Act
+    act(() => {
+      newScaleDisabledListener?.(true);
+    });
+
+    // Assert
+    expect(getInstrumentSearchProps().isNewScaleDisabled).toBe(true);
+  });
+
+  it('should unsubscribe from manager observable on unmount', () => {
+    // Arrange
+    const { unmount } = renderComponent();
+
+    // Act
+    unmount();
+
+    // Assert
+    expect(mockUnsubscribe).toHaveBeenCalledTimes(1);
+  });
+
+  it('should not subscribe when modal is closed', () => {
+    // Arrange & Act
+    renderComponent(false);
+
+    // Assert
+    expect(mockIsNewScaleDisabled).not.toHaveBeenCalled();
+    expect(mockIsNewScaleDisabledObservable).not.toHaveBeenCalled();
+    expect(getInstrumentSearchProps().isNewScaleDisabled).toBe(false);
+  });
+
+  it('should not subscribe when compare manager is unavailable', () => {
+    // Arrange
+    compareManagerRef.current = null;
+
+    // Act
+    renderComponent();
+
+    // Assert
+    expect(mockIsNewScaleDisabled).not.toHaveBeenCalled();
+    expect(mockIsNewScaleDisabledObservable).not.toHaveBeenCalled();
+    expect(getInstrumentSearchProps().isNewScaleDisabled).toBe(false);
+  });
+
+  it.each([
+    ['handlePercent', CompareMode.Percentage],
+    ['handleNewScale', CompareMode.NewScale],
+    ['handleNewPanel', CompareMode.NewPane],
+  ] as const)('should add compare instrument using %s action', (handlerName, mode) => {
+    // Arrange
+    renderComponent();
+
+    const instrument = {
+      issKey: 'MXSE:TQBR:SBER',
+      displayName: 'Сбербанк',
+      symbol: 'SBER',
+    } as Contract;
+
+    const handlers = getInstrumentSearchProps().customActionsFooterHandlers;
+
+    // Act
+    handlers[handlerName](instrument);
+
+    // Assert
+    expect(mockSetSymbolMode).toHaveBeenCalledTimes(1);
+    expect(mockSetSymbolMode).toHaveBeenCalledWith(
+      'Line',
+      {
+        symbol: 'MXSE:TQBR:SBER',
+        instrumentName: 'Сбербанк',
+        instrumentTicker: 'SBER',
+      },
+      mode,
+    );
+  });
+
+  it('should delegate missing instrument metadata fallback to moex-chart', () => {
+    // Arrange
+    renderComponent();
+
+    const instrument = {
+      issKey: 'MXSE:TQBR:SBER',
+      displayName: '',
+      symbol: '',
+    } as Contract;
+
+    // Act
+    getInstrumentSearchProps().customActionsFooterHandlers.handlePercent(instrument);
+
+    // Assert
+    expect(mockSetSymbolMode).toHaveBeenCalledWith(
+      'Line',
+      {
+        symbol: 'MXSE:TQBR:SBER',
+        instrumentName: undefined,
+        instrumentTicker: undefined,
+      },
+      CompareMode.Percentage,
+    );
+  });
+
+  it('should not add compare instrument without issKey', () => {
+    // Arrange
+    renderComponent();
+
+    const instrument = {
+      issKey: '',
+      displayName: 'Сбербанк',
+      symbol: 'SBER',
+    } as Contract;
+
+    // Act
+    getInstrumentSearchProps().customActionsFooterHandlers.handlePercent(instrument);
+
+    // Assert
+    expect(mockSetSymbolMode).not.toHaveBeenCalled();
+  });
+});
diff --git a/src/widgets/Chart/__tests__/MoexChart.test.tsx b/src/widgets/Chart/__tests__/MoexChart.test.tsx
new file mode 100644
index 000000000..f64efaadf
--- /dev/null
+++ b/src/widgets/Chart/__tests__/MoexChart.test.tsx
@@ -0,0 +1,230 @@
+import { act, render } from '@testing-library/react';
+
+import React from 'react';
+
+import { CompareModal } from '../components/MoexChart/components/CompareModal';
+import { SymbolSearchModal } from '../components/MoexChart/components/SymbolSearchModal';
+import { useMoexChart } from '../components/MoexChart/hooks';
+import MoexChartComponent from '../components/MoexChart/MoexChart';
+
+import type { Contract } from '@modules/contracts';
+import type { __CompareManager__ } from 'moex-chart';
+import type { MutableRefObject } from 'react';
+
+jest.mock('../components/MoexChart/hooks', () => ({
+  useMoexChart: jest.fn(),
+}));
+
+jest.mock('../components/MoexChart/components/CompareModal', () => ({
+  CompareModal: jest.fn(() => null),
+}));
+
+jest.mock('../components/MoexChart/components/SymbolSearchModal', () => ({
+  SymbolSearchModal: jest.fn(() => null),
+}));
+
+interface CompareModalMockProps {
+  widgetId: number;
+  isOpen: boolean;
+  setOpen: (isOpen: boolean) => void;
+  onClose: () => void;
+  compareManager: MutableRefObject<__CompareManager__ | null>;
+}
+
+interface SymbolSearchModalMockProps {
+  widgetId: number;
+  isOpen: boolean;
+  setOpen: (isOpen: boolean) => void;
+  onSymbolChange: (instrument: Contract) => void;
+}
+
+describe('MoexChart', () => {
+  const mockUseMoexChart = useMoexChart as jest.Mock;
+  const mockCompareModal = CompareModal as jest.Mock;
+  const mockSymbolSearchModal = SymbolSearchModal as jest.Mock;
+
+  const mockSetIsCompareOpen = jest.fn();
+  const mockSetIsSymbolSearchOpen = jest.fn();
+  const mockAddInstrumentFromModal = jest.fn();
+
+  let containerRef: MutableRefObject<HTMLDivElement | null>;
+  let compareManagerRef: MutableRefObject<__CompareManager__ | null>;
+
+  const renderComponent = () =>
+    render(
+      <MoexChartComponent
+        symbol="MXSE:TQBR:SBER"
+        instrumentName="Сбербанк"
+        instrumentTicker="SBER"
+        widgetId={42}
+        addInstrumentFromModal={mockAddInstrumentFromModal}
+      />,
+    );
+
+  beforeEach(() => {
+    jest.clearAllMocks();
+
+    containerRef = {
+      current: null,
+    };
+
+    compareManagerRef = {
+      current: null,
+    };
+
+    mockUseMoexChart.mockReturnValue({
+      containerRef,
+      isCompareOpen: false,
+      isSymbolSearchOpen: false,
+      compareManagerRef,
+      setIsCompareOpen: mockSetIsCompareOpen,
+      setIsSymbolSearchOpen: mockSetIsSymbolSearchOpen,
+      saveSnapshot: jest.fn(),
+      applySnapshot: jest.fn(),
+      hasSavedSnapshot: false,
+    });
+  });
+
+  it('should initialize chart hook with symbol, name and ticker', () => {
+    // Arrange & Act
+    renderComponent();
+
+    // Assert
+    expect(mockUseMoexChart).toHaveBeenCalledTimes(1);
+    expect(mockUseMoexChart).toHaveBeenCalledWith({
+      symbol: 'MXSE:TQBR:SBER',
+      instrumentName: 'Сбербанк',
+      instrumentTicker: 'SBER',
+      indicativeData: undefined,
+    });
+  });
+
+  it('should attach chart container ref', () => {
+    // Arrange & Act
+    renderComponent();
+
+    // Assert
+    expect(containerRef.current).toBeInstanceOf(HTMLDivElement);
+  });
+
+  it('should not render modals when they are closed', () => {
+    // Arrange & Act
+    renderComponent();
+
+    // Assert
+    expect(mockCompareModal).not.toHaveBeenCalled();
+    expect(mockSymbolSearchModal).not.toHaveBeenCalled();
+  });
+
+  it('should render compare modal with chart manager', () => {
+    // Arrange
+    mockUseMoexChart.mockReturnValue({
+      containerRef,
+      isCompareOpen: true,
+      isSymbolSearchOpen: false,
+      compareManagerRef,
+      setIsCompareOpen: mockSetIsCompareOpen,
+      setIsSymbolSearchOpen: mockSetIsSymbolSearchOpen,
+      saveSnapshot: jest.fn(),
+      applySnapshot: jest.fn(),
+      hasSavedSnapshot: false,
+    });
+
+    // Act
+    renderComponent();
+
+    const compareModalProps = mockCompareModal.mock.calls[0]?.[0] as CompareModalMockProps;
+
+    // Assert
+    expect(compareModalProps.widgetId).toBe(42);
+    expect(compareModalProps.isOpen).toBe(true);
+    expect(compareModalProps.setOpen).toBe(mockSetIsCompareOpen);
+    expect(compareModalProps.compareManager).toBe(compareManagerRef);
+  });
+
+  it('should close compare modal through onClose callback', () => {
+    // Arrange
+    mockUseMoexChart.mockReturnValue({
+      containerRef,
+      isCompareOpen: true,
+      isSymbolSearchOpen: false,
+      compareManagerRef,
+      setIsCompareOpen: mockSetIsCompareOpen,
+      setIsSymbolSearchOpen: mockSetIsSymbolSearchOpen,
+      saveSnapshot: jest.fn(),
+      applySnapshot: jest.fn(),
+      hasSavedSnapshot: false,
+    });
+
+    renderComponent();
+
+    const compareModalProps = mockCompareModal.mock.calls[0]?.[0] as CompareModalMockProps;
+
+    // Act
+    act(() => {
+      compareModalProps.onClose();
+    });
+
+    // Assert
+    expect(mockSetIsCompareOpen).toHaveBeenCalledWith(false);
+  });
+
+  it('should render symbol search modal', () => {
+    // Arrange
+    mockUseMoexChart.mockReturnValue({
+      containerRef,
+      isCompareOpen: false,
+      isSymbolSearchOpen: true,
+      compareManagerRef,
+      setIsCompareOpen: mockSetIsCompareOpen,
+      setIsSymbolSearchOpen: mockSetIsSymbolSearchOpen,
+      saveSnapshot: jest.fn(),
+      applySnapshot: jest.fn(),
+      hasSavedSnapshot: false,
+    });
+
+    // Act
+    renderComponent();
+
+    const symbolSearchModalProps = mockSymbolSearchModal.mock.calls[0]?.[0] as SymbolSearchModalMockProps;
+
+    // Assert
+    expect(symbolSearchModalProps.widgetId).toBe(42);
+    expect(symbolSearchModalProps.isOpen).toBe(true);
+    expect(symbolSearchModalProps.setOpen).toBe(mockSetIsSymbolSearchOpen);
+  });
+
+  it('should pass selected instrument from symbol search modal', () => {
+    // Arrange
+    mockUseMoexChart.mockReturnValue({
+      containerRef,
+      isCompareOpen: false,
+      isSymbolSearchOpen: true,
+      compareManagerRef,
+      setIsCompareOpen: mockSetIsCompareOpen,
+      setIsSymbolSearchOpen: mockSetIsSymbolSearchOpen,
+      saveSnapshot: jest.fn(),
+      applySnapshot: jest.fn(),
+      hasSavedSnapshot: false,
+    });
+
+    renderComponent();
+
+    const symbolSearchModalProps = mockSymbolSearchModal.mock.calls[0]?.[0] as SymbolSearchModalMockProps;
+
+    const instrument = {
+      issKey: 'MXSE:TQBR:GAZP',
+      displayName: 'Газпром',
+      symbol: 'GAZP',
+    } as Contract;
+
+    // Act
+    act(() => {
+      symbolSearchModalProps.onSymbolChange(instrument);
+    });
+
+    // Assert
+    expect(mockAddInstrumentFromModal).toHaveBeenCalledTimes(1);
+    expect(mockAddInstrumentFromModal).toHaveBeenCalledWith([instrument]);
+  });
+});
diff --git a/src/widgets/Chart/__tests__/SymbolSearchModal.test.tsx b/src/widgets/Chart/__tests__/SymbolSearchModal.test.tsx
index b61b7fc18..543d392cb 100644
--- a/src/widgets/Chart/__tests__/SymbolSearchModal.test.tsx
+++ b/src/widgets/Chart/__tests__/SymbolSearchModal.test.tsx
@@ -1,128 +1,275 @@
-import { render } from '@testing-library/react';
-import React from 'react';
+import { renderHook } from '@testing-library/react';
 
-import { InstrumentSearch } from '@components/InstrumentSearch';
+import { useAppSelect } from '@hooks/useAppSelector';
+import { useContracts } from '@modules/contracts';
+import { filterByUniqIssKey } from '@utils/filterByUniqIssKey';
+import { DEFAULT_SYMBOL } from '@widgets/Chart/const';
 
-import { SymbolSearchModal } from '../components/MoexChart/components/SymbolSearchModal';
+import { useChartPublicContext } from '../hooks/useChartPublicContext';
 
 import type { Contract } from '@modules/contracts';
 
-jest.mock('@components/InstrumentSearch', () => ({
-  InstrumentSearch: jest.fn(() => null),
+// Mock the dependencies
+jest.mock('@hooks/useAppSelector');
+jest.mock('@modules/contracts');
+jest.mock('@utils/filterByUniqIssKey');
+
+jest.mock('@api/index', () => ({
+  updateMenuLocked: jest.fn(),
+  widgetsController: {
+    delete: jest.fn(),
+  },
+  widgetPropertiesController: {
+    update: jest.fn(),
+  },
+  workspaceController: {
+    update: jest.fn(),
+  },
 }));
 
-interface InstrumentSearchMockProps {
-  widgetId: number;
-  variant: string;
-  isOpen: boolean;
-  setOpen: (isOpen: boolean) => void;
-  addInstruments: (instruments: Contract[]) => void;
-}
-
-describe('SymbolSearchModal', () => {
-  const mockInstrumentSearch = InstrumentSearch as jest.Mock;
-
-  const mockSetOpen = jest.fn();
-  const mockOnSymbolChange = jest.fn();
-
-  const renderComponent = (): InstrumentSearchMockProps => {
-    render(
-      <SymbolSearchModal
-        widgetId={42}
-        isOpen
-        setOpen={mockSetOpen}
-        onSymbolChange={mockOnSymbolChange}
-      />,
-    );
+jest.mock('@api/controllers/workspace', () => ({
+  workspaceController: {
+    update: jest.fn(),
+  },
+}));
+
+describe('useChartPublicContext', () => {
+  const mockUseAppSelect = useAppSelect as jest.Mock;
+  const mockUseContracts = useContracts as jest.Mock;
+  const mockFilterByUniqIssKey = filterByUniqIssKey as jest.Mock;
+
+  const mockContracts = [
+    {
+      issKey: DEFAULT_SYMBOL,
+      displayName: 'Инструмент по умолчанию',
+      symbol: 'DEFAULT',
+      // ... other contract properties
+    },
+    {
+      issKey: 'MOEX:TEST1',
+      displayName: 'Test Instrument 1',
+      symbol: 'TEST1',
+      // ... other contract properties
+    },
+    {
+      issKey: 'MOEX:TEST2',
+      displayName: 'Test Instrument 2',
+      symbol: 'TEST2',
+      // ... other contract properties
+    },
+    {
+      issKey: 'MOEX:TEST3',
+      displayName: 'Test Instrument 3',
+      symbol: 'TEST3',
+      // ... other contract properties
+    },
+  ] as Contract[];
 
-    return mockInstrumentSearch.mock.calls[0]?.[0] as InstrumentSearchMockProps;
+  const mockWidget = {
+    id: 1,
+    name: 'Test Widget',
+    type: 'graphic',
+    master: 123,
+    externalProperties: [
+      {
+        key: 'instrument',
+        value: 'MOEX:TEST1',
+      },
+    ],
+    // ... other widget properties
+  };
+
+  const mockPublicContext = {
+    instrument: 'MOEX:TEST1',
   };
 
   beforeEach(() => {
     jest.clearAllMocks();
+
+    // Mock the useAppSelect to return our test data
+    mockUseAppSelect.mockImplementation((selector) => {
+      if (selector.toString().includes('publicContext')) {
+        return mockPublicContext;
+      }
+
+      if (selector.toString().includes('widgets')) {
+        return mockWidget;
+      }
+
+      return {};
+    });
+
+    // Mock useContracts to return our test contracts
+    mockUseContracts.mockReturnValue({
+      contracts: mockContracts,
+    });
+
+    // Mock filterByUniqIssKey to return the same contracts
+    mockFilterByUniqIssKey.mockImplementation((contracts: Contract[]) => contracts);
   });
 
-  it('should pass modal properties to instrument search', () => {
-    // Arrange & Act
-    const instrumentSearchProps = renderComponent();
+  it('should return the correct issKey when a matching instrument is found', () => {
+    // Arrange
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:TEST1');
+
+    // Act
+    const { result } = renderHook(() =>
+      useChartPublicContext({
+        widgetId: 1,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
 
     // Assert
-    expect(instrumentSearchProps.widgetId).toBe(42);
-    expect(instrumentSearchProps.variant).toBe('single');
-    expect(instrumentSearchProps.isOpen).toBe(true);
-    expect(instrumentSearchProps.setOpen).toBe(mockSetOpen);
-    expect(instrumentSearchProps.addInstruments).toEqual(expect.any(Function));
+    expect(result.current.issKey).toBe('MOEX:TEST1');
   });
 
-  it('should change symbol after instrument selection', () => {
+  it('should pass instrument id, display name and ticker when a matching instrument is found', () => {
     // Arrange
-    const instrumentSearchProps = renderComponent();
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:TEST2');
+
+    // Act
+    renderHook(() =>
+      useChartPublicContext({
+        widgetId: 1,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
 
-    const instrument = {
-      issKey: 'MOEX:SBER',
-    } as Contract;
+    // Assert
+    expect(mockSetCurrInstrument).toHaveBeenCalledTimes(1);
+    expect(mockSetCurrInstrument).toHaveBeenCalledWith('MOEX:TEST2', 'Test Instrument 2', 'TEST2');
+  });
+
+  it('should return undefined when no matching instrument is found', () => {
+    // Arrange
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:NONEXISTENT');
 
     // Act
-    instrumentSearchProps.addInstruments([instrument]);
+    const { result } = renderHook(() =>
+      useChartPublicContext({
+        widgetId: 1,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
 
     // Assert
-    expect(mockOnSymbolChange).toHaveBeenCalledTimes(1);
-    expect(mockOnSymbolChange).toHaveBeenCalledWith('MOEX:SBER');
+    expect(result.current.issKey).toBeUndefined();
+    expect(mockSetCurrInstrument).not.toHaveBeenCalled();
   });
 
-  it('should close modal after instrument selection', () => {
+  it('should return undefined when getMasterInstrumentFromPublicContext returns null', () => {
     // Arrange
-    const instrumentSearchProps = renderComponent();
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(null);
 
-    const instrument = {
-      issKey: 'MOEX:SBER',
-    } as Contract;
+    // Act
+    const { result } = renderHook(() =>
+      useChartPublicContext({
+        widgetId: 1,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
+
+    // Assert
+    expect(result.current.issKey).toBeUndefined();
+  });
+
+  it('should return undefined when getMasterInstrumentFromPublicContext returns undefined', () => {
+    // Arrange
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(undefined);
 
     // Act
-    instrumentSearchProps.addInstruments([instrument]);
+    const { result } = renderHook(() =>
+      useChartPublicContext({
+        widgetId: 1,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
 
     // Assert
-    expect(mockSetOpen).toHaveBeenCalledTimes(1);
-    expect(mockSetOpen).toHaveBeenCalledWith(false);
+    expect(result.current.issKey).toBeUndefined();
   });
 
-  it('should not change symbol when instruments list is empty', () => {
+  it('should set default instrument with display name and ticker when context value is empty', () => {
     // Arrange
-    const instrumentSearchProps = renderComponent();
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(null);
 
     // Act
-    instrumentSearchProps.addInstruments([]);
+    renderHook(() =>
+      useChartPublicContext({
+        widgetId: 1,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
 
     // Assert
-    expect(mockOnSymbolChange).not.toHaveBeenCalled();
-    expect(mockSetOpen).not.toHaveBeenCalled();
+    expect(mockSetCurrInstrument).toHaveBeenCalledTimes(1);
+    expect(mockSetCurrInstrument).toHaveBeenCalledWith(DEFAULT_SYMBOL, 'Инструмент по умолчанию', 'DEFAULT');
   });
 
-  it('should not change symbol when selected instrument has no issKey', () => {
+  it('should resolve instrument when widget is not found', () => {
     // Arrange
-    const instrumentSearchProps = renderComponent();
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:TEST1');
+
+    mockUseAppSelect.mockImplementation((selector) => {
+      if (selector.toString().includes('publicContext')) {
+        return mockPublicContext;
+      }
+
+      if (selector.toString().includes('widgets')) {
+        return null;
+      }
+
+      return {};
+    });
 
     // Act
-    instrumentSearchProps.addInstruments([{} as Contract]);
+    const { result } = renderHook(() =>
+      useChartPublicContext({
+        widgetId: 999,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
 
     // Assert
-    expect(mockOnSymbolChange).not.toHaveBeenCalled();
-    expect(mockSetOpen).not.toHaveBeenCalled();
+    expect(result.current.issKey).toBe('MOEX:TEST1');
+    expect(mockSetCurrInstrument).toHaveBeenCalledWith('MOEX:TEST1', 'Test Instrument 1', 'TEST1');
   });
 
-  it('should not change symbol when selected instrument has empty issKey', () => {
+  it('should not set instrument when contracts array is empty', () => {
     // Arrange
-    const instrumentSearchProps = renderComponent();
+    const mockSetCurrInstrument = jest.fn();
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:TEST1');
 
-    const instrument = {
-      issKey: '',
-    } as Contract;
+    mockUseContracts.mockReturnValue({
+      contracts: [],
+    });
 
     // Act
-    instrumentSearchProps.addInstruments([instrument]);
+    const { result } = renderHook(() =>
+      useChartPublicContext({
+        widgetId: 1,
+        setCurrInstrument: mockSetCurrInstrument,
+        getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+      }),
+    );
 
     // Assert
-    expect(mockOnSymbolChange).not.toHaveBeenCalled();
-    expect(mockSetOpen).not.toHaveBeenCalled();
+    expect(result.current.issKey).toBeUndefined();
+    expect(mockSetCurrInstrument).not.toHaveBeenCalled();
   });
 });
diff --git a/src/widgets/Chart/__tests__/requestBars.test.ts b/src/widgets/Chart/__tests__/requestBars.test.ts
index 38d2b5447..001594049 100644
--- a/src/widgets/Chart/__tests__/requestBars.test.ts
+++ b/src/widgets/Chart/__tests__/requestBars.test.ts
@@ -81,7 +81,7 @@ describe('requestBars', () => {
 
     // Act
     const result = await requestBars({
-      currencyPair: 'USD.RUB.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       periodParams: mockPeriodParams,
       ticker: 'test-ticker',
@@ -91,7 +91,7 @@ describe('requestBars', () => {
     // Assert
     expect(indicativeQuotesController.getCandles).toHaveBeenCalledWith({
       count: mockPeriodParams.countBack,
-      key: 'USD.RUB.indicative_spot',
+      key: 'USD/RUB',
       date: '2022-01-01T00:00:00',
       interval: '1',
     });
@@ -115,7 +115,7 @@ describe('requestBars', () => {
 
     // Act
     const result = await requestBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       periodParams: mockPeriodParams,
       ticker: 'TEST.indicative_spot',
@@ -124,7 +124,7 @@ describe('requestBars', () => {
     // Assert
     expect(indicativeQuotesController.getCandles).toHaveBeenCalledWith({
       count: mockPeriodParams.countBack,
-      key: 'TEST.indicative_spot',
+      key: 'USD/RUB',
       date: '2022-01-01T00:00:00',
       interval: '1',
     });
@@ -180,7 +180,7 @@ describe('requestBars', () => {
 
     // Act
     await requestBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       periodParams: mockPeriodParams,
       onHistoryCallback: mockHistoryCallback,
@@ -203,7 +203,7 @@ describe('requestBars', () => {
 
     // Act
     const result = await requestBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       periodParams: mockPeriodParams,
       onHistoryCallback: mockHistoryCallback,
@@ -262,7 +262,7 @@ describe('requestBars', () => {
 
     // Act
     const result = await requestBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       periodParams: mockPeriodParams,
       ticker: 'TEST.indicative_spot',
@@ -271,7 +271,7 @@ describe('requestBars', () => {
     // Assert
     expect(indicativeQuotesController.getCandles).toHaveBeenCalledWith({
       count: mockPeriodParams.countBack,
-      key: 'TEST.indicative_spot',
+      key: 'USD/RUB',
       date: '2022-01-01T00:00:00',
       interval: '1',
     });
@@ -334,7 +334,7 @@ describe('requestBars', () => {
 
     // Act
     const result = await requestBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       periodParams: mockPeriodParams,
       onHistoryCallback: mockHistoryCallback,
@@ -415,7 +415,7 @@ describe('requestRealtimeBars', () => {
 
     // Act
     const result = await requestRealtimeBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       ticker: 'TEST.indicative_spot',
     });
@@ -423,8 +423,8 @@ describe('requestRealtimeBars', () => {
     // Assert
     expect(indicativeQuotesController.getCandles).toHaveBeenCalledWith({
       count: 1,
-      key: 'TEST.indicative_spot',
-      date: expect.any(String),
+      key: 'USD/RUB',
+      date: expect.any(String), // We can't predict the exact date string
       interval: '1',
     });
     expect(candleToBar).toHaveBeenCalledWith(mockCandle);
@@ -477,7 +477,7 @@ describe('requestRealtimeBars', () => {
 
     // Act
     const result = await requestRealtimeBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       ticker: 'TEST.indicative_spot',
     });
@@ -526,7 +526,7 @@ describe('requestRealtimeBars', () => {
 
     // Act
     await requestRealtimeBars({
-      currencyPair: 'TEST.INDICATIVE-SPOT',
+      currencyPair: 'USD/RUB',
       interval: '1',
       ticker: 'TEST.indicative_spot',
       onRealtimeCallback: mockRealtimeCallback,
@@ -574,7 +574,7 @@ describe('requestRealtimeBars', () => {
     // Act & Assert
     await expect(
       requestRealtimeBars({
-        currencyPair: 'TEST.INDICATIVE-SPOT',
+        currencyPair: 'USD/RUB',
         interval: '1',
         ticker: 'TEST.indicative_spot',
         onRealtimeCallback: mockRealtimeCallback,
diff --git a/src/widgets/Chart/__tests__/transformKeyToLowerCase.test.ts b/src/widgets/Chart/__tests__/transformKeyToLowerCase.test.ts
deleted file mode 100644
index 178db2fea..000000000
--- a/src/widgets/Chart/__tests__/transformKeyToLowerCase.test.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { INDICATIVE_BOARDS } from '@modules/quotes';
-
-import { transformKeyToLowerCase } from '../utils/transformKeyToLowerCase';
-
-describe('transformKeyToLowerCase', () => {
-  const boardTestCases = [
-    { key: 'G90054.INDICATIVE-SPOT.KZTRUB.TOM', expected: 'G90054.indicative_spot.KZTRUB.TOM' },
-    { key: 'TEST.INDICATIVE-SWAP.USD.RUB', expected: 'TEST.indicative_swap.USD.RUB' },
-    { key: 'SEC.INDICATIVE-FWD.EURUSD.1M', expected: 'SEC.indicative_fwd.EURUSD.1M' },
-    { key: 'BOND.INDICATIVE-DEP.RUB.1W', expected: 'BOND.indicative_dep.RUB.1W' },
-    { key: 'SHARE.INDICATIVE-SP.AAPL', expected: 'SHARE.indicative_sp.AAPL' },
-  ];
-
-  boardTestCases.forEach(({ key, expected }) => {
-    it(`should transform key with ${key.split('.')[1]} board to lowercase`, () => {
-      const result = transformKeyToLowerCase(key);
-      expect(result).toBe(expected);
-    });
-  });
-
-  it.each(INDICATIVE_BOARDS)('should handle key already in lowercase for board %s', (board) => {
-    const key = `TEST.${board}.RUBUSD`;
-    const result = transformKeyToLowerCase(key);
-    expect(result).toBe(key);
-  });
-
-  it('should return null when no indicative board found', () => {
-    const key = 'USD/RUB';
-    const result = transformKeyToLowerCase(key);
-    expect(result).toBeNull();
-  });
-
-  it('should return null when key has no dots', () => {
-    const key = 'USDRUB';
-    const result = transformKeyToLowerCase(key);
-    expect(result).toBeNull();
-  });
-
-  it('should return null for empty string', () => {
-    const key = '';
-    const result = transformKeyToLowerCase(key);
-    expect(result).toBeNull();
-  });
-
-  it('should handle board in first position', () => {
-    const key = 'INDICATIVE-SPOT.SECID.1M';
-    const result = transformKeyToLowerCase(key);
-    expect(result).toBe('indicative_spot.SECID.1M');
-  });
-
-  it('should preserve other parts of the key', () => {
-    const key = 'SECID.INDICATIVE-SPOT.TRADES.PERPETUAL';
-    const result = transformKeyToLowerCase(key);
-    expect(result).toBe('SECID.indicative_spot.TRADES.PERPETUAL');
-  });
-});
\ No newline at end of file
diff --git a/src/widgets/Chart/__tests__/useChartComponentFacade.test.tsx b/src/widgets/Chart/__tests__/useChartComponentFacade.test.tsx
new file mode 100644
index 000000000..665259bf8
--- /dev/null
+++ b/src/widgets/Chart/__tests__/useChartComponentFacade.test.tsx
@@ -0,0 +1,376 @@
+import { act, renderHook } from '@testing-library/react';
+
+import { useDispatch } from 'react-redux';
+
+import { communicator } from '@core/comm';
+import { useAppSelect } from '@hooks/useAppSelector';
+import { CORPACTIONS_OPEN_EXESTED_WIDGET_EVENT, HIGHLIGHT_WIDGET_EVENT } from '@modules/widgets/shared';
+import { addContentPropsToWidget, unbindWidgets } from '@store/slices/widgets';
+import { getState } from '@store/store';
+import { useWidgetsBind } from '@utils/hooks/useWidgetsBind';
+
+import useChartComponentFacade from '../hooks/useChartComponentFacade';
+import { useChartPublicContext } from '../hooks/useChartPublicContext';
+
+import type { WidgetProperties } from '../properties/types';
+import type { ChartContainerProps } from '../types';
+
+jest.mock('@store/store', () => ({
+  getState: jest.fn(),
+}));
+
+jest.mock('@store/slices/widgets', () => ({
+  addContentPropsToWidget: jest.fn(),
+  unbindWidgets: jest.fn(),
+}));
+
+jest.mock('react-redux', () => ({
+  useDispatch: jest.fn(),
+}));
+
+jest.mock('@core/comm', () => ({
+  communicator: {
+    listen: jest.fn(),
+  },
+}));
+
+jest.mock('@hooks/useAppSelector', () => ({
+  useAppSelect: jest.fn(),
+}));
+
+jest.mock('@utils/hooks/useWidgetsBind', () => ({
+  useWidgetsBind: jest.fn(),
+}));
+
+jest.mock('../hooks/useChartPublicContext', () => ({
+  useChartPublicContext: jest.fn(),
+}));
+
+interface PublicContextMockParams {
+  setCurrInstrument: (instrumentId: string, instrumentName?: string, instrumentTicker?: string) => void;
+}
+
+describe('useChartComponentFacade', () => {
+  const mockUseDispatch = useDispatch as jest.Mock;
+  const mockUseAppSelect = useAppSelect as jest.Mock;
+  const mockAddContentPropsToWidget = addContentPropsToWidget as unknown as jest.Mock;
+  const mockUnbindWidgets = unbindWidgets as unknown as jest.Mock;
+  const mockGetState = getState as jest.Mock;
+  const mockUseWidgetsBind = useWidgetsBind as jest.Mock;
+  const mockUseChartPublicContext = useChartPublicContext as jest.Mock;
+  const mockCommunicatorListen = communicator.listen as jest.Mock;
+
+  const mockDispatch = jest.fn();
+  const mockTriggerRelatedWidgetsToUpdate = jest.fn();
+  const mockGetMasterInstrumentFromPublicContext = jest.fn();
+
+  const mockUnsubscribeCorpActions = jest.fn();
+  const mockUnsubscribeHighlighter = jest.fn();
+
+  const widgetProperties = {
+    chartState: {
+      savedInstrument: 'MOEX:SBER',
+      savedInstrumentName: 'Сбербанк',
+      savedInstrumentTicker: 'SBER',
+      interval: '1m',
+    },
+    indicativeData: {
+      id: 1,
+      key: 'INDICATIVE',
+      secId: 'INAV',
+      instrumentName: 'Индикатив',
+      settlement: 'Расчётный',
+      firmName: 'Тестовая фирма',
+    },
+  } as WidgetProperties;
+
+  const renderFacade = () =>
+    renderHook(() =>
+      useChartComponentFacade({
+        widgetId: 42,
+      } as ChartContainerProps),
+    );
+
+  beforeEach(() => {
+    jest.clearAllMocks();
+
+    mockUseDispatch.mockReturnValue(mockDispatch);
+    mockUseAppSelect.mockReturnValue(widgetProperties);
+
+    mockGetState.mockReturnValue({
+      widgets: {
+        widgets: [
+          {
+            id: 42,
+            widgetContentProps: widgetProperties,
+          },
+        ],
+      },
+    });
+
+    mockUseWidgetsBind.mockReturnValue({
+      triggerRelatedWidgetsToUpdate: mockTriggerRelatedWidgetsToUpdate,
+      getMasterInstrumentFromPublicContext: mockGetMasterInstrumentFromPublicContext,
+    });
+
+    mockUseChartPublicContext.mockReturnValue({
+      issKey: undefined,
+    });
+
+    mockAddContentPropsToWidget.mockImplementation((payload) => ({
+      type: 'widgets/addContentPropsToWidget',
+      payload,
+    }));
+
+    mockUnbindWidgets.mockImplementation((payload) => ({
+      type: 'widgets/unbindWidgets',
+      payload,
+    }));
+
+    mockCommunicatorListen.mockImplementation(({ messageType }, listener) => {
+      if (messageType === CORPACTIONS_OPEN_EXESTED_WIDGET_EVENT) {
+        return mockUnsubscribeCorpActions;
+      }
+
+      if (messageType === HIGHLIGHT_WIDGET_EVENT) {
+        return mockUnsubscribeHighlighter;
+      }
+
+      return jest.fn();
+    });
+  });
+
+  it('should initialize symbol, display name and ticker from widget properties', () => {
+    // Arrange & Act
+    const { result } = renderFacade();
+
+    // Assert
+    expect(result.current.currentInstrument).toBe('MOEX:SBER');
+    expect(result.current.currentInstrumentName).toBe('Сбербанк');
+    expect(result.current.currentInstrumentTicker).toBe('SBER');
+  });
+
+  it('should update and save instrument selected from modal', () => {
+    // Arrange
+    const { result } = renderFacade();
+
+    jest.clearAllMocks();
+
+    // Act
+    act(() => {
+      result.current.addInstrumentFromModal([
+        {
+          issKey: 'MOEX:GAZP',
+          displayName: 'Газпром',
+          symbol: 'GAZP',
+        },
+      ]);
+    });
+
+    // Assert
+    expect(result.current.currentInstrument).toBe('MOEX:GAZP');
+    expect(result.current.currentInstrumentName).toBe('Газпром');
+    expect(result.current.currentInstrumentTicker).toBe('GAZP');
+
+    expect(mockUnbindWidgets).toHaveBeenCalledWith({
+      widgetId: 42,
+    });
+
+    expect(mockAddContentPropsToWidget).toHaveBeenCalledWith({
+      id: 42,
+      withoutSend: true,
+      widgetContentProps: {
+        chartState: {
+          ...widgetProperties.chartState,
+          savedInstrument: 'MOEX:GAZP',
+          savedInstrumentName: 'Газпром',
+          savedInstrumentTicker: 'GAZP',
+        },
+        indicativeData: undefined,
+      },
+    });
+
+    expect(mockTriggerRelatedWidgetsToUpdate).toHaveBeenCalledWith('MOEX:GAZP');
+  });
+
+  it('should update name and ticker without unbinding when symbol is unchanged', () => {
+    // Arrange
+    const { result } = renderFacade();
+
+    jest.clearAllMocks();
+
+    // Act
+    act(() => {
+      result.current.addInstrumentFromModal([
+        {
+          issKey: 'MOEX:SBER',
+          displayName: 'Сбербанк ПАО',
+          symbol: 'SBERP',
+        },
+      ]);
+    });
+
+    // Assert
+    expect(result.current.currentInstrument).toBe('MOEX:SBER');
+    expect(result.current.currentInstrumentName).toBe('Сбербанк ПАО');
+    expect(result.current.currentInstrumentTicker).toBe('SBERP');
+
+    expect(mockUnbindWidgets).not.toHaveBeenCalled();
+    expect(mockTriggerRelatedWidgetsToUpdate).not.toHaveBeenCalled();
+
+    expect(mockAddContentPropsToWidget).toHaveBeenCalledWith({
+      id: 42,
+      withoutSend: true,
+      widgetContentProps: {
+        chartState: {
+          ...widgetProperties.chartState,
+          savedInstrument: 'MOEX:SBER',
+          savedInstrumentName: 'Сбербанк ПАО',
+          savedInstrumentTicker: 'SBERP',
+        },
+        indicativeData: widgetProperties.indicativeData,
+      },
+    });
+  });
+
+  it('should send dropped instrument update immediately', () => {
+    // Arrange
+    const { result } = renderFacade();
+
+    jest.clearAllMocks();
+
+    // Act
+    act(() => {
+      result.current.onDropInstruments(
+        {
+          issKey: 'MOEX:LKOH',
+          displayName: 'Лукойл',
+          symbol: 'LKOH',
+        },
+        true,
+      );
+    });
+
+    // Assert
+    expect(mockAddContentPropsToWidget).toHaveBeenCalledWith(
+      expect.objectContaining({
+        id: 42,
+        withoutSend: false,
+        widgetContentProps: expect.objectContaining({
+          chartState: expect.objectContaining({
+            savedInstrument: 'MOEX:LKOH',
+            savedInstrumentName: 'Лукойл',
+            savedInstrumentTicker: 'LKOH',
+          }),
+        }),
+      }),
+    );
+  });
+
+  it('should update instrument from public context without unbinding widget', () => {
+    // Arrange
+    renderFacade();
+
+    const publicContextParams = mockUseChartPublicContext.mock.calls[0]?.[0] as PublicContextMockParams;
+
+    jest.clearAllMocks();
+
+    // Act
+    act(() => {
+      publicContextParams.setCurrInstrument('MOEX:ROSN', 'Роснефть', 'ROSN');
+    });
+
+    // Assert
+    expect(mockUnbindWidgets).not.toHaveBeenCalled();
+
+    expect(mockAddContentPropsToWidget).toHaveBeenCalledWith(
+      expect.objectContaining({
+        withoutSend: false,
+        widgetContentProps: expect.objectContaining({
+          chartState: expect.objectContaining({
+            savedInstrument: 'MOEX:ROSN',
+            savedInstrumentName: 'Роснефть',
+            savedInstrumentTicker: 'ROSN',
+          }),
+        }),
+      }),
+    );
+  });
+
+  it('should use ticker extracted from instrument id when metadata is unavailable', () => {
+    // Arrange
+    renderFacade();
+
+    const corpActionsListener = mockCommunicatorListen.mock.calls.find(
+      ([options]) => options.messageType === CORPACTIONS_OPEN_EXESTED_WIDGET_EVENT,
+    )?.[1] as (message: Record<number, string>) => void;
+
+    // Act
+    act(() => {
+      corpActionsListener({
+        42: 'MOEX:UNKNOWN',
+      });
+    });
+
+    // Assert
+    expect(mockAddContentPropsToWidget).toHaveBeenCalledWith(
+      expect.objectContaining({
+        widgetContentProps: expect.objectContaining({
+          chartState: expect.objectContaining({
+            savedInstrument: 'MOEX:UNKNOWN',
+            savedInstrumentName: 'UNKNOWN',
+            savedInstrumentTicker: 'UNKNOWN',
+          }),
+        }),
+      }),
+    );
+  });
+
+  it('should not update instrument when modal selection is empty', () => {
+    // Arrange
+    const { result } = renderFacade();
+
+    jest.clearAllMocks();
+
+    // Act
+    act(() => {
+      result.current.addInstrumentFromModal([]);
+    });
+
+    // Assert
+    expect(mockAddContentPropsToWidget).not.toHaveBeenCalled();
+    expect(mockUnbindWidgets).not.toHaveBeenCalled();
+    expect(mockTriggerRelatedWidgetsToUpdate).not.toHaveBeenCalled();
+  });
+
+  it('should update widget highlight state', () => {
+    // Arrange
+    const { result } = renderFacade();
+
+    const highlighterListener = mockCommunicatorListen.mock.calls.find(
+      ([options]) => options.messageType === HIGHLIGHT_WIDGET_EVENT,
+    )?.[1] as (message: Record<number, boolean>) => void;
+
+    // Act
+    act(() => {
+      highlighterListener({
+        42: true,
+      });
+    });
+
+    // Assert
+    expect(result.current.isOver).toBe(true);
+  });
+
+  it('should unsubscribe communicator listeners on unmount', () => {
+    // Arrange
+    const { unmount } = renderFacade();
+
+    // Act
+    unmount();
+
+    // Assert
+    expect(mockUnsubscribeCorpActions).toHaveBeenCalledTimes(1);
+    expect(mockUnsubscribeHighlighter).toHaveBeenCalledTimes(1);
+  });
+});
diff --git a/src/widgets/Chart/__tests__/useChartPublicContext.test.tsx b/src/widgets/Chart/__tests__/useChartPublicContext.test.tsx
index 666aa3073..bf2e80ff0 100644
--- a/src/widgets/Chart/__tests__/useChartPublicContext.test.tsx
+++ b/src/widgets/Chart/__tests__/useChartPublicContext.test.tsx
@@ -7,6 +7,8 @@ import { DEFAULT_SYMBOL } from '@widgets/Chart/const';
 
 import { useChartPublicContext } from '../hooks/useChartPublicContext';
 
+import type { Contract } from '@modules/contracts';
+
 // Mock the dependencies
 jest.mock('@hooks/useAppSelector');
 jest.mock('@modules/contracts');
@@ -24,6 +26,7 @@ jest.mock('@api/index', () => ({
     update: jest.fn(),
   },
 }));
+
 jest.mock('@api/controllers/workspace', () => ({
   workspaceController: {
     update: jest.fn(),
@@ -36,32 +39,43 @@ describe('useChartPublicContext', () => {
   const mockFilterByUniqIssKey = filterByUniqIssKey as jest.Mock;
 
   const mockContracts = [
+    {
+      issKey: DEFAULT_SYMBOL,
+      displayName: 'Инструмент по умолчанию',
+      symbol: 'DEFAULT',
+      // ... other contract properties
+    },
     {
       issKey: 'MOEX:TEST1',
-      instrName: 'Test Instrument 1',
+      displayName: 'Test Instrument 1',
       symbol: 'TEST1',
       // ... other contract properties
     },
     {
       issKey: 'MOEX:TEST2',
-      instrName: 'Test Instrument 2',
+      displayName: 'Test Instrument 2',
       symbol: 'TEST2',
       // ... other contract properties
     },
     {
       issKey: 'MOEX:TEST3',
-      instrName: 'Test Instrument 3',
+      displayName: 'Test Instrument 3',
       symbol: 'TEST3',
       // ... other contract properties
     },
-  ];
+  ] as Contract[];
 
   const mockWidget = {
     id: 1,
     name: 'Test Widget',
     type: 'graphic',
     master: 123,
-    externalProperties: [{ key: 'instrument', value: 'MOEX:TEST1' }],
+    externalProperties: [
+      {
+        key: 'instrument',
+        value: 'MOEX:TEST1',
+      },
+    ],
     // ... other widget properties
   };
 
@@ -77,9 +91,11 @@ describe('useChartPublicContext', () => {
       if (selector.toString().includes('publicContext')) {
         return mockPublicContext;
       }
+
       if (selector.toString().includes('widgets')) {
         return mockWidget;
       }
+
       return {};
     });
 
@@ -89,7 +105,7 @@ describe('useChartPublicContext', () => {
     });
 
     // Mock filterByUniqIssKey to return the same contracts
-    mockFilterByUniqIssKey.mockImplementation((contracts, keys) => contracts);
+    mockFilterByUniqIssKey.mockImplementation((contracts: Contract[]) => contracts);
   });
 
   it('should return the correct issKey when a matching instrument is found', () => {
@@ -110,13 +126,13 @@ describe('useChartPublicContext', () => {
     expect(result.current.issKey).toBe('MOEX:TEST1');
   });
 
-  it('should return undefined when no matching instrument is found', () => {
+  it('should pass instrument id and display name when a matching instrument is found', () => {
     // Arrange
     const mockSetCurrInstrument = jest.fn();
-    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:NONEXISTENT');
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:TEST2');
 
     // Act
-    const { result } = renderHook(() =>
+    renderHook(() =>
       useChartPublicContext({
         widgetId: 1,
         setCurrInstrument: mockSetCurrInstrument,
@@ -125,13 +141,14 @@ describe('useChartPublicContext', () => {
     );
 
     // Assert
-    expect(result.current.issKey).toBeUndefined();
+    expect(mockSetCurrInstrument).toHaveBeenCalledTimes(1);
+    expect(mockSetCurrInstrument).toHaveBeenCalledWith('MOEX:TEST2', 'Test Instrument 2', 'TEST2');
   });
 
-  it('should return undefined when getMasterInstrumentFromPublicContext returns null', () => {
+  it('should return undefined when no matching instrument is found', () => {
     // Arrange
     const mockSetCurrInstrument = jest.fn();
-    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(null);
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:NONEXISTENT');
 
     // Act
     const { result } = renderHook(() =>
@@ -144,12 +161,13 @@ describe('useChartPublicContext', () => {
 
     // Assert
     expect(result.current.issKey).toBeUndefined();
+    expect(mockSetCurrInstrument).not.toHaveBeenCalled();
   });
 
-  it('should return undefined when getMasterInstrumentFromPublicContext returns undefined', () => {
+  it('should return undefined when getMasterInstrumentFromPublicContext returns null', () => {
     // Arrange
     const mockSetCurrInstrument = jest.fn();
-    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(undefined);
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(null);
 
     // Act
     const { result } = renderHook(() =>
@@ -164,13 +182,13 @@ describe('useChartPublicContext', () => {
     expect(result.current.issKey).toBeUndefined();
   });
 
-  it('should set current instrument to DEFAULT_SYMBOL when no field value and widget has master', () => {
+  it('should return undefined when getMasterInstrumentFromPublicContext returns undefined', () => {
     // Arrange
     const mockSetCurrInstrument = jest.fn();
-    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(null);
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(undefined);
 
     // Act
-    renderHook(() =>
+    const { result } = renderHook(() =>
       useChartPublicContext({
         widgetId: 1,
         setCurrInstrument: mockSetCurrInstrument,
@@ -179,13 +197,13 @@ describe('useChartPublicContext', () => {
     );
 
     // Assert
-    expect(mockSetCurrInstrument).toHaveBeenCalledWith(DEFAULT_SYMBOL);
+    expect(result.current.issKey).toBeUndefined();
   });
 
-  it('should set current instrument to the found issKey when a matching instrument exists', () => {
+  it('should set current instrument to DEFAULT_SYMBOL with display name when no field value and widget has master', () => {
     // Arrange
     const mockSetCurrInstrument = jest.fn();
-    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:TEST2');
+    const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue(null);
 
     // Act
     renderHook(() =>
@@ -197,7 +215,8 @@ describe('useChartPublicContext', () => {
     );
 
     // Assert
-    expect(mockSetCurrInstrument).toHaveBeenCalledWith('MOEX:TEST2');
+    expect(mockSetCurrInstrument).toHaveBeenCalledTimes(1);
+    expect(mockSetCurrInstrument).toHaveBeenCalledWith(DEFAULT_SYMBOL, 'Инструмент по умолчанию', 'DEFAULT');
   });
 
   it('should handle case when widget is not found in widgets array', () => {
@@ -205,14 +224,16 @@ describe('useChartPublicContext', () => {
     const mockSetCurrInstrument = jest.fn();
     const mockGetMasterInstrumentFromPublicContext = jest.fn().mockReturnValue('MOEX:TEST1');
 
-    // Mock useAppSelect to return null for widget (widget not found)
+    // Mock useAppSelect to return null for widget
     mockUseAppSelect.mockImplementation((selector) => {
       if (selector.toString().includes('publicContext')) {
         return mockPublicContext;
       }
+
       if (selector.toString().includes('widgets')) {
         return null; // Widget not found
       }
+
       return {};
     });
 
@@ -227,6 +248,7 @@ describe('useChartPublicContext', () => {
 
     // Assert
     expect(result.current.issKey).toBe('MOEX:TEST1');
+    expect(mockSetCurrInstrument).toHaveBeenCalledWith('MOEX:TEST1', 'Test Instrument 1', 'TEST1');
   });
 
   it('should handle case when contracts array is empty', () => {
@@ -250,5 +272,6 @@ describe('useChartPublicContext', () => {
 
     // Assert
     expect(result.current.issKey).toBeUndefined();
+    expect(mockSetCurrInstrument).not.toHaveBeenCalled();
   });
 });
diff --git a/src/widgets/Chart/__tests__/useMoexchart.test.tsx b/src/widgets/Chart/__tests__/useMoexchart.test.tsx
index 2b2c5c5d7..354b394b2 100644
--- a/src/widgets/Chart/__tests__/useMoexchart.test.tsx
+++ b/src/widgets/Chart/__tests__/useMoexchart.test.tsx
@@ -4,11 +4,11 @@ import { MoexChart, Timeframes } from 'moex-chart';
 import React from 'react';
 
 import { useChangeProperties, useSelectProperties } from '@modules/widgetProperties';
-import { ChartIndicativeData } from '@widgets/Chart/types';
 
 import { useMoexChart } from '../components/MoexChart/hooks';
 
-// Mock the dependencies
+import type { ChartIndicativeData } from '@widgets/Chart/types';
+
 jest.mock('@modules/widgetProperties');
 
 jest.mock('../components/MoexChart/dataSourceProvide', () => ({
@@ -59,13 +59,39 @@ const mockedDataSourceProvide = jest.requireMock('../components/MoexChart/dataSo
 
 type TimeframeValue = (typeof Timeframes)[keyof typeof Timeframes];
 
+interface MockCompareSeries {
+  name: string;
+  seriesOptions?: {
+    priceScaleId?: string;
+    color?: string;
+  };
+}
+
+interface MockIndicatorConfig {
+  symbol?: string;
+  instrumentName?: string;
+  instrumentTicker?: string;
+  label?: string;
+  newPane?: boolean;
+  series: MockCompareSeries[];
+}
+
+interface MockIndicatorSnapshot {
+  id?: string;
+  indicatorType?: string;
+  dataSource?: unknown;
+  config?: MockIndicatorConfig;
+}
+
 interface MockPaneSnapshot {
-  indicators: unknown[];
+  indicators: MockIndicatorSnapshot[];
 }
 
 interface MockChartSnapshot {
   charts: {
     symbol: string;
+    instrumentName?: string;
+    instrumentTicker?: string;
     timeframe: TimeframeValue;
     chartSeriesType: string;
     panes: MockPaneSnapshot[];
@@ -88,7 +114,7 @@ interface MockMoexChartConfig {
 }
 
 interface MockMoexChartState {
-  timeframe?: TimeframeValue;
+  timeframe: TimeframeValue;
   initialInterval?: string;
   savedData?: string;
 }
@@ -103,6 +129,9 @@ type TimeframeChangeCallback = (timeframe: TimeframeValue) => void;
 
 interface TestComponentProps {
   symbol?: string;
+  instrumentName?: string;
+  instrumentTicker?: string;
+  indicativeData?: ChartIndicativeData;
 }
 
 describe('useMoexChart', () => {
@@ -133,6 +162,8 @@ describe('useMoexChart', () => {
     charts: [
       {
         symbol: 'OLD:SYMBOL',
+        instrumentName: 'Old instrument',
+        instrumentTicker: 'OLD',
         timeframe: Timeframes['5m'],
         chartSeriesType: 'Candlestick',
         panes: [
@@ -148,10 +179,17 @@ describe('useMoexChart', () => {
   let lastMoexChartConfig: MockMoexChartConfig | null = null;
   let mockMoexChartState: MockMoexChartState | undefined;
 
-  const TestComponent = ({ symbol = 'MOEX:SBER' }: TestComponentProps): React.ReactElement => {
+  const TestComponent = ({
+    symbol = 'MOEX:SBER',
+    instrumentName = 'Сбербанк',
+    instrumentTicker = 'SBER',
+    indicativeData,
+  }: TestComponentProps): React.ReactElement => {
     hookResult = useMoexChart({
       symbol,
-      indicativeData: undefined,
+      instrumentName,
+      instrumentTicker,
+      indicativeData,
     });
 
     return <div ref={hookResult.containerRef} />;
@@ -159,6 +197,7 @@ describe('useMoexChart', () => {
 
   beforeEach(() => {
     jest.clearAllMocks();
+    jest.useFakeTimers();
 
     hookResult = null;
     lastMoexChartConfig = null;
@@ -179,8 +218,8 @@ describe('useMoexChart', () => {
     });
 
     mockGetDataSource.mockImplementation(
-      (_indicativeData?: ChartIndicativeData, callback?: (timeframe: Timeframes) => void) =>
-        (timeframe: Timeframes) => {
+      (_indicativeData?: ChartIndicativeData, callback?: (timeframe: TimeframeValue) => void) =>
+        (timeframe: TimeframeValue) => {
           callback?.(timeframe);
 
           return mockDataSource();
@@ -205,28 +244,40 @@ describe('useMoexChart', () => {
         getSnapshot: mockGetSnapshot,
         setSnapshot: mockSetSnapshot,
         setSymbol: mockSetSymbol,
-        getCompareManager: mockGetCompareManager,
         setSettings: mockSetSettings,
+        getCompareManager: mockGetCompareManager,
       };
     });
   });
 
-  it('should create moex chart with current symbol and timeframe', () => {
+  afterEach(() => {
+    jest.clearAllTimers();
+    jest.useRealTimers();
+  });
+
+  it('should create moex chart with current symbol, name, ticker and timeframe', () => {
     // Arrange & Act
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(
+      <TestComponent
+        symbol="MOEX:SBER"
+        instrumentName="Сбербанк"
+        instrumentTicker="SBER"
+      />,
+    );
 
     // Assert
     expect(mockMoexChart).toHaveBeenCalledTimes(1);
     expect(mockDataSourceProvider).toHaveBeenCalledTimes(1);
-
     expect(lastMoexChartConfig?.container).toBeInstanceOf(HTMLDivElement);
     expect(lastMoexChartConfig?.snapshot.charts[0]?.symbol).toBe('MOEX:SBER');
+    expect(lastMoexChartConfig?.snapshot.charts[0]?.instrumentName).toBe('Сбербанк');
+    expect(lastMoexChartConfig?.snapshot.charts[0]?.instrumentTicker).toBe('SBER');
     expect(lastMoexChartConfig?.snapshot.charts[0]?.timeframe).toBe(Timeframes['1m']);
-
     expect(hookResult?.compareManagerRef.current).toBe(mockCompareManager);
+    expect(hookResult?.hasSavedSnapshot).toBe(false);
   });
 
-  it('should create chart with saved snapshot when saved data exists', () => {
+  it('should create chart with saved snapshot and current instrument data', () => {
     // Arrange
     mockMoexChartState = {
       timeframe: Timeframes['5m'],
@@ -234,18 +285,25 @@ describe('useMoexChart', () => {
     };
 
     // Act
-    render(<TestComponent symbol="MOEX:GAZP" />);
+    render(
+      <TestComponent
+        symbol="MOEX:GAZP"
+        instrumentName="Газпром"
+        instrumentTicker="GAZP"
+      />,
+    );
 
     // Assert
     expect(lastMoexChartConfig?.snapshot.charts[0]?.symbol).toBe('MOEX:GAZP');
+    expect(lastMoexChartConfig?.snapshot.charts[0]?.instrumentName).toBe('Газпром');
+    expect(lastMoexChartConfig?.snapshot.charts[0]?.instrumentTicker).toBe('GAZP');
     expect(lastMoexChartConfig?.snapshot.charts[0]?.timeframe).toBe(Timeframes['5m']);
-
     expect(hookResult?.hasSavedSnapshot).toBe(true);
   });
 
   it('should save chart snapshot to widget properties', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     // Act
     act(() => {
@@ -272,11 +330,121 @@ describe('useMoexChart', () => {
     });
   });
 
+  it('should serialize compare symbol, display name and ticker in snapshot', () => {
+    // Arrange
+    const snapshotWithIndicators: MockChartSnapshot = {
+      charts: [
+        {
+          symbol: 'MOEX:SBER',
+          instrumentName: 'Сбербанк',
+          instrumentTicker: 'SBER',
+          timeframe: Timeframes['1m'],
+          chartSeriesType: 'Candlestick',
+          panes: [
+            {
+              indicators: [
+                {
+                  id: 'compare-gazp',
+                  indicatorType: undefined,
+                  dataSource: {
+                    subscription: {},
+                  },
+                  config: {
+                    symbol: 'MOEX:GAZP',
+                    instrumentName: 'Газпром',
+                    instrumentTicker: 'GAZP',
+                    label: 'Газпром',
+                    newPane: false,
+                    series: [
+                      {
+                        name: 'Line',
+                        seriesOptions: {
+                          priceScaleId: 'left',
+                          color: '#FFFFFF',
+                        },
+                      },
+                    ],
+                  },
+                },
+                {
+                  id: 'rsi',
+                  indicatorType: 'RSI',
+                  dataSource: {
+                    subscription: {},
+                  },
+                  config: {
+                    label: 'RSI',
+                    newPane: true,
+                    series: [
+                      {
+                        name: 'Line',
+                        seriesOptions: {
+                          priceScaleId: 'right',
+                        },
+                      },
+                    ],
+                  },
+                },
+              ],
+            },
+          ],
+        },
+      ],
+    };
+
+    mockGetSnapshot.mockReturnValue(snapshotWithIndicators);
+
+    render(<TestComponent />);
+
+    // Act
+    act(() => {
+      hookResult?.saveSnapshot();
+    });
+
+    const updateCallback = mockUpdateProperties.mock.calls[0]?.[0] as UpdatePropertiesCallback;
+
+    const mockState: MockPropertiesState = {
+      moexChartState: {
+        timeframe: Timeframes['1m'],
+      },
+    };
+
+    updateCallback(mockState);
+
+    const savedSnapshot = JSON.parse(mockState.moexChartState?.savedData ?? '{}') as MockChartSnapshot;
+    const [compareIndicator, regularIndicator] = savedSnapshot.charts[0]?.panes[0]?.indicators ?? [];
+
+    // Assert
+    expect(compareIndicator).toEqual({
+      id: 'compare-gazp',
+      config: {
+        symbol: 'MOEX:GAZP',
+        instrumentName: 'Газпром',
+        instrumentTicker: 'GAZP',
+        label: 'Газпром',
+        newPane: false,
+        series: [
+          {
+            name: 'Line',
+            seriesOptions: {
+              priceScaleId: 'left',
+            },
+          },
+        ],
+      },
+    });
+
+    expect(regularIndicator).toEqual({
+      id: 'rsi',
+      indicatorType: 'RSI',
+    });
+  });
+
   it('should not save snapshot when chart does not return snapshot', () => {
     // Arrange
     mockGetSnapshot.mockReturnValue(undefined);
 
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     // Act
     act(() => {
@@ -288,14 +456,20 @@ describe('useMoexChart', () => {
     expect(mockUpdateProperties).not.toHaveBeenCalled();
   });
 
-  it('should apply saved snapshot with current symbol and timeframe', () => {
+  it('should apply saved snapshot with current instrument data and timeframe', () => {
     // Arrange
     mockMoexChartState = {
       timeframe: Timeframes['5m'],
       savedData: JSON.stringify(mockSnapshot),
     };
 
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(
+      <TestComponent
+        symbol="MOEX:SBER"
+        instrumentName="Сбербанк"
+        instrumentTicker="SBER"
+      />,
+    );
 
     // Act
     act(() => {
@@ -309,6 +483,8 @@ describe('useMoexChart', () => {
         {
           ...mockSnapshot.charts[0],
           symbol: 'MOEX:SBER',
+          instrumentName: 'Сбербанк',
+          instrumentTicker: 'SBER',
           timeframe: Timeframes['5m'],
         },
       ],
@@ -319,7 +495,7 @@ describe('useMoexChart', () => {
 
   it('should update compare modal state', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     // Act
     act(() => {
@@ -332,7 +508,7 @@ describe('useMoexChart', () => {
 
   it('should open compare modal from chart preset callback', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     // Act
     act(() => {
@@ -345,7 +521,7 @@ describe('useMoexChart', () => {
 
   it('should update symbol search modal state', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     // Act
     act(() => {
@@ -358,7 +534,7 @@ describe('useMoexChart', () => {
 
   it('should open symbol search modal from chart preset callback', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     // Act
     act(() => {
@@ -369,82 +545,157 @@ describe('useMoexChart', () => {
     expect(hookResult?.isSymbolSearchOpen).toBe(true);
   });
 
-  it('should normalize and change main symbol', () => {
+  it('should update chart when external instrument changes', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    const { rerender } = render(<TestComponent />);
 
     // Act
-    act(() => {
-      hookResult?.setMainSymbol('  MOEX:GAZP  ');
-    });
+    rerender(
+      <TestComponent
+        symbol="MOEX:GAZP"
+        instrumentName="Газпром"
+        instrumentTicker="GAZP"
+      />,
+    );
 
     // Assert
     expect(mockSetSymbol).toHaveBeenCalledTimes(1);
-    expect(mockSetSymbol).toHaveBeenCalledWith('MOEX:GAZP');
+    expect(mockSetSymbol).toHaveBeenCalledWith('MOEX:GAZP', 'Газпром', 'GAZP');
   });
 
-  it('should not change main symbol when value is empty', () => {
+  it('should update chart when only external instrument name changes', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    const { rerender } = render(<TestComponent />);
 
     // Act
-    act(() => {
-      hookResult?.setMainSymbol('');
-      hookResult?.setMainSymbol('   ');
-    });
+    rerender(
+      <TestComponent
+        symbol="MOEX:SBER"
+        instrumentName="Сбербанк ПАО"
+        instrumentTicker="SBER"
+      />,
+    );
 
     // Assert
-    expect(mockSetSymbol).not.toHaveBeenCalled();
+    expect(mockSetSymbol).toHaveBeenCalledTimes(1);
+    expect(mockSetSymbol).toHaveBeenCalledWith('MOEX:SBER', 'Сбербанк ПАО', 'SBER');
   });
 
-  it('should not change main symbol when it is already selected', () => {
+  it('should update chart when only external instrument ticker changes', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    const { rerender } = render(<TestComponent />);
 
     // Act
-    act(() => {
-      hookResult?.setMainSymbol('MOEX:SBER');
-    });
+    rerender(
+      <TestComponent
+        symbol="MOEX:SBER"
+        instrumentName="Сбербанк"
+        instrumentTicker="SBERP"
+      />,
+    );
 
     // Assert
-    expect(mockSetSymbol).not.toHaveBeenCalled();
+    expect(mockSetSymbol).toHaveBeenCalledTimes(1);
+    expect(mockSetSymbol).toHaveBeenCalledWith('MOEX:SBER', 'Сбербанк', 'SBERP');
+  });
+
+  it('should delegate empty instrument name fallback to moex-chart', () => {
+    // Arrange
+    const { rerender } = render(<TestComponent />);
+
+    // Act
+    rerender(
+      <TestComponent
+        symbol="MOEX:SBER"
+        instrumentName=""
+        instrumentTicker="SBER"
+      />,
+    );
+
+    // Assert
+    expect(mockSetSymbol).toHaveBeenCalledTimes(1);
+    expect(mockSetSymbol).toHaveBeenCalledWith('MOEX:SBER', undefined, 'SBER');
   });
 
-  it('should update chart when external symbol changes', () => {
+  it('should delegate empty instrument ticker fallback to moex-chart', () => {
     // Arrange
-    const { rerender } = render(<TestComponent symbol="MOEX:SBER" />);
+    const { rerender } = render(<TestComponent />);
 
     // Act
-    rerender(<TestComponent symbol="MOEX:GAZP" />);
+    rerender(
+      <TestComponent
+        symbol="MOEX:SBER"
+        instrumentName="Сбербанк"
+        instrumentTicker=""
+      />,
+    );
 
     // Assert
     expect(mockSetSymbol).toHaveBeenCalledTimes(1);
-    expect(mockSetSymbol).toHaveBeenCalledWith('MOEX:GAZP');
+    expect(mockSetSymbol).toHaveBeenCalledWith('MOEX:SBER', 'Сбербанк', undefined);
   });
 
-  it('should not recreate chart when external symbol changes', () => {
+  it('should not update chart when symbol, name and ticker are unchanged', () => {
     // Arrange
-    const { rerender } = render(<TestComponent symbol="MOEX:SBER" />);
+    const { rerender } = render(<TestComponent />);
 
     // Act
-    rerender(<TestComponent symbol="MOEX:GAZP" />);
+    rerender(<TestComponent />);
+
+    // Assert
+    expect(mockSetSymbol).not.toHaveBeenCalled();
+  });
+
+  it('should not update chart when external symbol is empty', () => {
+    // Arrange
+    const { rerender } = render(<TestComponent />);
+
+    // Act
+    rerender(
+      <TestComponent
+        symbol=""
+        instrumentName="Пустой инструмент"
+        instrumentTicker="EMPTY"
+      />,
+    );
+
+    // Assert
+    expect(mockSetSymbol).not.toHaveBeenCalled();
+  });
+
+  it('should not recreate chart when external instrument changes', () => {
+    // Arrange
+    const { rerender } = render(<TestComponent />);
+
+    // Act
+    rerender(
+      <TestComponent
+        symbol="MOEX:GAZP"
+        instrumentName="Газпром"
+        instrumentTicker="GAZP"
+      />,
+    );
 
     // Assert
     expect(mockMoexChart).toHaveBeenCalledTimes(1);
   });
 
-  it('should apply saved snapshot with symbol selected from search modal', () => {
+  it('should apply saved snapshot with externally selected instrument', () => {
     // Arrange
     mockMoexChartState = {
       timeframe: Timeframes['5m'],
       savedData: JSON.stringify(mockSnapshot),
     };
 
-    render(<TestComponent symbol="MOEX:SBER" />);
+    const { rerender } = render(<TestComponent />);
 
-    act(() => {
-      hookResult?.setMainSymbol('MOEX:GAZP');
-    });
+    rerender(
+      <TestComponent
+        symbol="MOEX:GAZP"
+        instrumentName="Газпром"
+        instrumentTicker="GAZP"
+      />,
+    );
 
     // Act
     act(() => {
@@ -458,15 +709,50 @@ describe('useMoexChart', () => {
         {
           ...mockSnapshot.charts[0],
           symbol: 'MOEX:GAZP',
+          instrumentName: 'Газпром',
+          instrumentTicker: 'GAZP',
           timeframe: Timeframes['5m'],
         },
       ],
     });
   });
 
+  it('should initialize indicative instrument with id, name and ticker', () => {
+    // Arrange
+    const indicativeData: ChartIndicativeData = {
+      id: 1,
+      title: 'Indicative instrument',
+      secId: 'INAV',
+      instrumentName: 'Индикатив',
+      settlement: 'Расчётный',
+      firmName: 'Тестовая фирма',
+      key: '2xOFZ:INAV',
+    };
+
+    // Act
+    render(
+      <TestComponent
+        symbol="2xOFZ:INAV"
+        instrumentName="Индикатив Расчётный"
+        instrumentTicker="INAV"
+        indicativeData={indicativeData}
+      />,
+    );
+
+    // Assert
+    expect(mockGetDataSource).toHaveBeenCalledWith(indicativeData, expect.any(Function));
+    expect(lastMoexChartConfig?.snapshot.charts[0]).toEqual(
+      expect.objectContaining({
+        symbol: '2xOFZ:INAV',
+        instrumentName: 'Индикатив Расчётный',
+        instrumentTicker: 'INAV',
+      }),
+    );
+  });
+
   it('should pass realtime params to data source provider', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     const getSymbols = jest.fn(() => ['MOEX:SBER']);
     const getTimeframe = jest.fn(() => Timeframes['1m']);
@@ -481,13 +767,12 @@ describe('useMoexChart', () => {
       getTimeframe,
       update,
     });
-
     expect(unsubscribe).toBe(mockRealtimeUnsubscribe);
   });
 
   it('should update timeframe from data source callback', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     const timeframeChangeCallback = mockGetDataSource.mock.calls[0]?.[1] as TimeframeChangeCallback;
 
@@ -514,7 +799,7 @@ describe('useMoexChart', () => {
 
   it('should not update timeframe when it is the same as current timeframe', () => {
     // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
+    render(<TestComponent />);
 
     const timeframeChangeCallback = mockGetDataSource.mock.calls[0]?.[1] as TimeframeChangeCallback;
 
@@ -529,7 +814,7 @@ describe('useMoexChart', () => {
 
   it('should destroy chart on unmount', () => {
     // Arrange
-    const { unmount } = render(<TestComponent symbol="MOEX:SBER" />);
+    const { unmount } = render(<TestComponent />);
 
     // Act
     unmount();
@@ -537,55 +822,4 @@ describe('useMoexChart', () => {
     // Assert
     expect(mockDestroy).toHaveBeenCalledTimes(1);
   });
-  it('should apply initial interval on chart creation', () => {
-    // Arrange
-    mockMoexChartState = {
-      timeframe: Timeframes['1m'],
-      savedData: undefined,
-      initialInterval: '1Y',
-    };
-    // Act
-    render(<TestComponent symbol="MOEX:SBER" />);
-    // Assert
-    expect(mockSetSettings).toHaveBeenCalledWith({ interval: '1Y' });
-  });
-  it('should apply initial interval even when saved data exists', () => {
-    // Arrange
-    mockMoexChartState = {
-      timeframe: Timeframes['5m'],
-      savedData: JSON.stringify(mockSnapshot),
-      initialInterval: '1Y',
-    };
-    // Act
-    render(<TestComponent symbol="MOEX:SBER" />);
-    // Assert
-    expect(mockSetSettings).toHaveBeenCalledWith({ interval: '1Y' });
-  });
-  it('should clear initial interval in widget properties after applying', () => {
-    // Arrange
-    mockMoexChartState = {
-      timeframe: Timeframes['1m'],
-      savedData: undefined,
-      initialInterval: '1Y',
-    };
-    // Act
-    render(<TestComponent symbol="MOEX:SBER" />);
-    // Assert
-    expect(mockUpdateProperties).toHaveBeenCalledTimes(1);
-    const updateCallback = mockUpdateProperties.mock.calls[0]?.[0] as UpdatePropertiesCallback;
-    const mockState: MockPropertiesState = {
-      moexChartState: {
-        timeframe: Timeframes['1m'],
-        initialInterval: '1Y',
-      },
-    };
-    updateCallback(mockState);
-    expect(mockState.moexChartState?.initialInterval).toBeUndefined();
-  });
-  it('should not apply interval when initial interval is not set', () => {
-    // Arrange
-    render(<TestComponent symbol="MOEX:SBER" />);
-    // Assert
-    expect(mockSetSettings).not.toHaveBeenCalled();
-  });
 });
diff --git a/src/widgets/Chart/components/MoexChart/MoexChart.tsx b/src/widgets/Chart/components/MoexChart/MoexChart.tsx
index 86e7bb981..35255d54f 100644
--- a/src/widgets/Chart/components/MoexChart/MoexChart.tsx
+++ b/src/widgets/Chart/components/MoexChart/MoexChart.tsx
@@ -1,69 +1,72 @@
 import React from 'react';
 
-import { Contract } from '@modules/contracts';
 import { SymbolSearchModal } from '@widgets/Chart/components/MoexChart/components/SymbolSearchModal';
 
-import { ChartIndicativeData } from '../../types';
+import { ChartIndicativeData, SelectedInstrument } from '../../types';
 
 import { CompareModal } from './components/CompareModal';
 import { useMoexChart } from './hooks';
 
 import 'moex-chart/dist/styles.css';
 
-type TRProps = {
-  fullName: string;
+interface TRProps {
+  symbol: string;
+  instrumentName?: string;
+  instrumentTicker?: string;
   indicativeData?: ChartIndicativeData | undefined;
   widgetId: number;
-  addInstrumentFromModal: (instruments: Pick<Contract, 'issKey'>[]) => void;
-};
+  addInstrumentFromModal: (instruments: SelectedInstrument[]) => void;
+}
 
-export default React.memo(({ fullName, indicativeData, widgetId, addInstrumentFromModal }: TRProps) => {
-  const {
-    containerRef,
-    isCompareOpen,
-    isSymbolSearchOpen,
-    compareManagerRef,
-    setIsCompareOpen,
-    setIsSymbolSearchOpen,
-    setMainSymbol,
-  } = useMoexChart({
-    indicativeData,
-    symbol: fullName,
-  });
+export default React.memo(
+  ({ symbol, instrumentName, instrumentTicker, indicativeData, widgetId, addInstrumentFromModal }: TRProps) => {
+    const {
+      containerRef,
+      isCompareOpen,
+      isSymbolSearchOpen,
+      compareManagerRef,
+      setIsCompareOpen,
+      setIsSymbolSearchOpen,
+    } = useMoexChart({
+      indicativeData,
+      symbol,
+      instrumentName,
+      instrumentTicker,
+    });
 
-  const handleSymbolChange = (symbol: string): void => {
-    addInstrumentFromModal([{ issKey: symbol }]);
-    setMainSymbol(symbol);
-  };
+    const handleSymbolChange = (instrument: SelectedInstrument): void => {
+      addInstrumentFromModal([instrument]);
+    };
 
-  return (
-    <div
-      style={{
-        flex: '1 1 0',
-        minHeight: 0,
-        minWidth: 0,
-      }}
-    >
-      <div ref={containerRef} />
+    return (
+      <div
+        style={{
+          flex: '1 1 0',
+          minHeight: 0,
+          minWidth: 0,
+        }}
+      >
+        <div ref={containerRef} />
 
-      {isCompareOpen && (
-        <CompareModal
-          onClose={() => setIsCompareOpen(false)}
-          compareManager={compareManagerRef}
-          widgetId={widgetId}
-          isOpen={isCompareOpen}
-          setOpen={setIsCompareOpen}
-        />
-      )}
+        {isCompareOpen && (
+          <CompareModal
+            onClose={() => setIsCompareOpen(false)}
+            compareManager={compareManagerRef}
+            widgetId={widgetId}
+            isOpen={isCompareOpen}
+            setOpen={setIsCompareOpen}
+          />
+        )}
 
-      {isSymbolSearchOpen && (
-        <SymbolSearchModal
-          widgetId={widgetId}
-          isOpen={isSymbolSearchOpen}
-          setOpen={setIsSymbolSearchOpen}
-          onSymbolChange={handleSymbolChange}
-        />
-      )}
-    </div>
-  );
-});
+        {isSymbolSearchOpen && (
+          <SymbolSearchModal
+            widgetId={widgetId}
+            isOpen={isSymbolSearchOpen}
+            setOpen={setIsSymbolSearchOpen}
+            onSymbolChange={handleSymbolChange}
+          />
+        )}
+      </div>
+    );
+  },
+);
diff --git a/src/widgets/Chart/components/MoexChart/components/CompareModal.tsx b/src/widgets/Chart/components/MoexChart/components/CompareModal.tsx
index 092f6df1a..4c829425a 100644
--- a/src/widgets/Chart/components/MoexChart/components/CompareModal.tsx
+++ b/src/widgets/Chart/components/MoexChart/components/CompareModal.tsx
@@ -2,6 +2,7 @@ import { __CompareManager__, CompareMode } from 'moex-chart';
 import React, { MutableRefObject, useEffect, useState } from 'react';
 
 import { InstrumentSearch } from '@components/InstrumentSearch';
+import { Contract } from '@modules/contracts';
 
 export const CompareModal = ({
   compareManager,
@@ -33,16 +34,34 @@ export const CompareModal = ({
     return () => subscription.unsubscribe();
   }, [compareManager, isOpen]);
 
-  const handlePercent = (symbol: string) => {
-    compareManager?.current?.setSymbolMode('Line', symbol, CompareMode.Percentage);
+  const setCompareMode = (instrument: Contract, mode: CompareMode): void => {
+    const symbol = instrument.issKey;
+
+    if (!symbol) {
+      return;
+    }
+
+    compareManager.current?.setSymbolMode(
+      'Line',
+      {
+        symbol,
+        instrumentName: instrument.displayName || symbol,
+        instrumentTicker: instrument.symbol || symbol,
+      },
+      mode,
+    );
+  };
+
+  const handlePercent = (instrument: Contract): void => {
+    setCompareMode(instrument, CompareMode.Percentage);
   };
 
-  const handleNewScale = (symbol: string) => {
-    compareManager?.current?.setSymbolMode('Line', symbol, CompareMode.NewScale);
+  const handleNewScale = (instrument: Contract): void => {
+    setCompareMode(instrument, CompareMode.NewScale);
   };
 
-  const handleNewPanel = (symbol: string) => {
-    compareManager?.current?.setSymbolMode('Line', symbol, CompareMode.NewPane);
+  const handleNewPanel = (instrument: Contract): void => {
+    setCompareMode(instrument, CompareMode.NewPane);
   };
 
   return (
diff --git a/src/widgets/Chart/components/MoexChart/components/SymbolSearchModal.tsx b/src/widgets/Chart/components/MoexChart/components/SymbolSearchModal.tsx
index efb08af16..10347dfc3 100644
--- a/src/widgets/Chart/components/MoexChart/components/SymbolSearchModal.tsx
+++ b/src/widgets/Chart/components/MoexChart/components/SymbolSearchModal.tsx
@@ -8,18 +8,18 @@ interface SymbolSearchModalProps {
   widgetId: number;
   isOpen: boolean;
   setOpen: (isOpen: boolean) => void;
-  onSymbolChange: (symbol: string) => void;
+  onSymbolChange: (instrument: Contract) => void;
 }
 
 export const SymbolSearchModal = ({ widgetId, isOpen, setOpen, onSymbolChange }: SymbolSearchModalProps) => {
   const handleAddInstruments = (instruments: Contract[]) => {
-    const symbol = instruments[0]?.issKey;
+    const selectedInstrument = instruments[0];
 
-    if (!symbol) {
+    if (!selectedInstrument?.issKey) {
       return;
     }
 
-    onSymbolChange(symbol);
+    onSymbolChange(selectedInstrument);
     setOpen(false);
   };
 
diff --git a/src/widgets/Chart/components/MoexChart/constants.ts b/src/widgets/Chart/components/MoexChart/constants.ts
index 288036c50..87836b1b1 100644
--- a/src/widgets/Chart/components/MoexChart/constants.ts
+++ b/src/widgets/Chart/components/MoexChart/constants.ts
@@ -3,7 +3,10 @@ import { DateFormat, IndicatorsIds, Locale, Timeframes } from 'moex-chart';
 import type { ChartCollectionPreset, IMoexChart, MoexChartSnapshot } from 'moex-chart';
 
 type ChartCollectionPresetConfig = Omit<ChartCollectionPreset, 'getDataSource' | 'startRealtime'>;
-type ChartSnapshotItemConfig = Omit<MoexChartSnapshot['charts'][number], 'symbol'>;
+type ChartSnapshotItemConfig = Omit<
+  MoexChartSnapshot['charts'][number],
+  'symbol' | 'instrumentName' | 'instrumentTicker'
+>;
 type MoexChartSnapshotConfig = Omit<MoexChartSnapshot, 'charts'> & {
   charts: ChartSnapshotItemConfig[];
 };
diff --git a/src/widgets/Chart/components/MoexChart/hooks/useMoexchart.ts b/src/widgets/Chart/components/MoexChart/hooks/useMoexchart.ts
index 217abab0f..109f461b7 100644
--- a/src/widgets/Chart/components/MoexChart/hooks/useMoexchart.ts
+++ b/src/widgets/Chart/components/MoexChart/hooks/useMoexchart.ts
@@ -1,14 +1,11 @@
-import isNil from 'lodash/isNil';
-
-import { Intervals, MoexChart, Timeframes } from 'moex-chart';
+import { MoexChart, Timeframes } from 'moex-chart';
 
 import { useEffect, useRef, useState } from 'react';
 
 import { useChangeProperties, useSelectProperties } from '@modules/widgetProperties';
+import { WidgetProperties } from '@widgets/Chart/properties/types';
 import { ChartIndicativeData } from '@widgets/Chart/types';
 
-import { WidgetProperties } from '../../../properties/types';
-
 import { MOEX_CHART_CONFIG } from '../constants';
 import { DataSourceProvider } from '../dataSourceProvide';
 
@@ -16,10 +13,12 @@ import type { __CompareManager__, IMoexChart } from 'moex-chart';
 
 interface TUseMoexChartProps {
   symbol: string;
+  instrumentName?: string;
+  instrumentTicker?: string;
   indicativeData?: ChartIndicativeData;
 }
 
-export const useMoexChart = ({ symbol, indicativeData }: TUseMoexChartProps) => {
+export const useMoexChart = ({ symbol, instrumentName, instrumentTicker, indicativeData }: TUseMoexChartProps) => {
   const moexChartState = useSelectProperties((wProps: Partial<WidgetProperties>) => wProps.moexChartState);
 
   const { updateProperties } = useChangeProperties<WidgetProperties>();
@@ -31,31 +30,35 @@ export const useMoexChart = ({ symbol, indicativeData }: TUseMoexChartProps) =>
   const chartRef = useRef<MoexChart | null>(null);
   const compareManagerRef = useRef<null | __CompareManager__>(null);
   const currentSymbolRef = useRef(symbol);
+  const currentInstrumentNameRef = useRef(instrumentName || undefined);
+  const currentInstrumentTickerRef = useRef(instrumentTicker || undefined);
 
   const timeframeRef = useRef<Timeframes | undefined>(moexChartState?.timeframe);
   const savedDataRef = useRef<string | undefined>(moexChartState?.savedData);
-  const initialIntervalRef = useRef<Intervals | undefined>(moexChartState?.initialInterval);
   const updateTimeframeRef = useRef<((tf: Timeframes) => void) | null>(null);
 
   useEffect(() => {
-    if (!symbol || currentSymbolRef.current === symbol) {
+    if (!symbol) {
       return;
     }
 
-    currentSymbolRef.current = symbol;
-    chartRef.current?.setSymbol(symbol);
-  }, [symbol]);
+    const nextInstrumentName = instrumentName?.trim() || undefined;
+    const nextInstrumentTicker = instrumentTicker?.trim() || undefined;
 
-  const setMainSymbol = (nextSymbol: string) => {
-    const normalizedSymbol = nextSymbol.trim();
+    const symbolChanged = currentSymbolRef.current !== symbol;
+    const instrumentNameChanged = currentInstrumentNameRef.current !== nextInstrumentName;
+    const instrumentTickerChanged = currentInstrumentTickerRef.current !== nextInstrumentTicker;
 
-    if (!normalizedSymbol || currentSymbolRef.current === normalizedSymbol) {
+    if (!symbolChanged && !instrumentNameChanged && !instrumentTickerChanged) {
       return;
     }
 
-    currentSymbolRef.current = normalizedSymbol;
-    chartRef.current?.setSymbol(normalizedSymbol);
-  };
+    currentSymbolRef.current = symbol;
+    currentInstrumentNameRef.current = nextInstrumentName;
+    currentInstrumentTickerRef.current = nextInstrumentTicker;
+
+    chartRef.current?.setSymbol(symbol, nextInstrumentName, nextInstrumentTicker);
+  }, [symbol, instrumentName, instrumentTicker]);
 
   useEffect(() => {
     timeframeRef.current = moexChartState?.timeframe;
@@ -99,6 +102,9 @@ export const useMoexChart = ({ symbol, indicativeData }: TUseMoexChartProps) =>
               config:
                 indicator.indicatorType === undefined && indicator.config?.label && compareSeries
                   ? {
+                      symbol: indicator.config.symbol,
+                      instrumentName: indicator.config.instrumentName,
+                      instrumentTicker: indicator.config.instrumentTicker,
                       label: indicator.config.label,
                       newPane: indicator.config.newPane,
                       series: [
@@ -141,6 +147,8 @@ export const useMoexChart = ({ symbol, indicativeData }: TUseMoexChartProps) =>
       charts: savedSnapshot.charts.map((chartSnapshot) => ({
         ...chartSnapshot,
         symbol: currentSymbolRef.current,
+        instrumentName: currentInstrumentNameRef.current,
+        instrumentTicker: currentInstrumentTickerRef.current,
         timeframe,
       })),
     });
@@ -169,6 +177,8 @@ export const useMoexChart = ({ symbol, indicativeData }: TUseMoexChartProps) =>
         charts: savedSnapshot.charts.map((chartSnapshot) => ({
           ...chartSnapshot,
           symbol: currentSymbolRef.current,
+          instrumentName: currentInstrumentNameRef.current,
+          instrumentTicker: currentInstrumentTickerRef.current,
           timeframe,
         })),
       },
@@ -190,28 +200,9 @@ export const useMoexChart = ({ symbol, indicativeData }: TUseMoexChartProps) =>
 
     chartRef.current = chart;
     compareManagerRef.current = chart.getCompareManager();
-
-    if (initialIntervalRef.current) {
-      chart.setSettings({ interval: initialIntervalRef.current });
-
-      updateProperties((state) => {
-        state.moexChartState = {
-          ...state.moexChartState,
-          initialInterval: undefined,
-        };
-      });
-      initialIntervalRef.current = undefined;
-    }
-
     const intervalId = setInterval(() => {
       saveSnapshot();
     }, 1000);
-
-    // явная инициализация индикативных данных в график
-    if (!isNil(indicativeData)) {
-      chartRef.current?.setSymbol(indicativeData.key);
-    }
-
     return () => {
       clearInterval(intervalId);
       saveSnapshot();
@@ -230,7 +221,6 @@ export const useMoexChart = ({ symbol, indicativeData }: TUseMoexChartProps) =>
     compareManagerRef,
     setIsCompareOpen,
     setIsSymbolSearchOpen,
-    setMainSymbol,
     saveSnapshot,
     applySnapshot,
     hasSavedSnapshot: Boolean(moexChartState?.savedData),
diff --git a/src/widgets/Chart/hooks/useChartComponentFacade.tsx b/src/widgets/Chart/hooks/useChartComponentFacade.tsx
index ece1436b8..15b3d7c7a 100644
--- a/src/widgets/Chart/hooks/useChartComponentFacade.tsx
+++ b/src/widgets/Chart/hooks/useChartComponentFacade.tsx
@@ -13,9 +13,8 @@ import { DEFAULT_SYMBOL } from '../const';
 import { useChartPublicContext } from './useChartPublicContext';
 
 import type { WidgetProperties } from '../properties/types';
-import type { ChartContainerProps } from '../types';
+import type { ChartContainerProps, SelectedInstrument } from '../types';
 
-import type { Contract } from '@modules/contracts';
 import type { Dispatch, SetStateAction } from 'react';
 import type { Widget } from 'types/Widgets';
 
@@ -23,10 +22,12 @@ interface UseChartComponentFacadeReturn {
   dropDownOpen: boolean;
   setDropdownOpen: Dispatch<SetStateAction<boolean>>;
   currentInstrument: string;
+  currentInstrumentName: string;
+  currentInstrumentTicker: string;
   isWidgetHeaderContextMenuOpen: boolean;
   setIsWidgetHeaderContextMenuOpen: Dispatch<SetStateAction<boolean>>;
-  onDropInstruments: (val: string, withUpdate?: boolean) => void;
-  addInstrumentFromModal: (instruments: Pick<Contract, 'issKey'>[]) => void;
+  onDropInstruments: (instrument: SelectedInstrument, withUpdate?: boolean) => void;
+  addInstrumentFromModal: (instruments: SelectedInstrument[]) => void;
   isOver: boolean;
 }
 
@@ -49,11 +50,18 @@ export default function useChartComponentFacade(props: ChartContainerProps): Use
   ) as WidgetProperties | undefined;
 
   const initialInstrument = widgetProperties?.chartState?.savedInstrument ?? DEFAULT_SYMBOL;
+  const initialInstrumentName = widgetProperties?.chartState?.savedInstrumentName ?? initialInstrument;
+  const initialInstrumentTicker = widgetProperties?.chartState?.savedInstrumentTicker ?? initialInstrument;
 
   // TODO временно реф из-за непредсказуемого изменения если используется useState,
   // нужен рефакторинг и вернуть обратно useState
   const currentInstrumentRef = useRef(initialInstrument);
+  const currentInstrumentNameRef = useRef(initialInstrumentName);
+  const currentInstrumentTickerRef = useRef(initialInstrumentTicker);
+
   const [currentInstrument, setCurrentInstrument] = useState(initialInstrument);
+  const [currentInstrumentName, setCurrentInstrumentName] = useState(initialInstrumentName);
+  const [currentInstrumentTicker, setCurrentInstrumentTicker] = useState(initialInstrumentTicker);
 
   const { triggerRelatedWidgetsToUpdate, getMasterInstrumentFromPublicContext } = useWidgetsBind({
     widgetId,
@@ -95,60 +103,98 @@ export default function useChartComponentFacade(props: ChartContainerProps): Use
   );
 
   const onInstrumentChange = useCallback(
-    (newVal: string, withUpdate?: boolean, unbind = true): void => {
-      if (!newVal) {
+    (
+      instrumentId: string,
+      instrumentName?: string,
+      instrumentTicker?: string,
+      withUpdate?: boolean,
+      unbind = true,
+    ): void => {
+      if (!instrumentId) {
         return;
       }
 
       setIsWidgetHeaderContextMenuOpen(false);
 
-      if (currentInstrumentRef.current === newVal) {
+      const symbolChanged = currentInstrumentRef.current !== instrumentId;
+
+      const normalizedName = instrumentName?.trim();
+      const normalizedTicker = instrumentTicker?.trim();
+
+      const nextInstrumentName = normalizedName || (symbolChanged ? instrumentId : currentInstrumentNameRef.current);
+      const nextInstrumentTicker =
+        normalizedTicker || (symbolChanged ? instrumentId : currentInstrumentTickerRef.current);
+
+      const nameChanged = currentInstrumentNameRef.current !== nextInstrumentName;
+      const tickerChanged = currentInstrumentTickerRef.current !== nextInstrumentTicker;
+
+      if (!symbolChanged && !nameChanged && !tickerChanged) {
         return;
       }
 
-      currentInstrumentRef.current = newVal;
-      setCurrentInstrument(newVal);
+      if (symbolChanged) {
+        currentInstrumentRef.current = instrumentId;
+        setCurrentInstrument(instrumentId);
+
+        if (unbind) {
+          dispatch(unbindWidgets({ widgetId }));
+        }
+      }
+
+      if (nameChanged) {
+        currentInstrumentNameRef.current = nextInstrumentName;
+        setCurrentInstrumentName(nextInstrumentName);
+      }
 
-      if (unbind) {
-        dispatch(unbindWidgets({ widgetId }));
+      if (tickerChanged) {
+        currentInstrumentTickerRef.current = nextInstrumentTicker;
+        setCurrentInstrumentTicker(nextInstrumentTicker);
       }
 
       // при смене инструмента очищаем индикативные данные виджета график
       // т.к. логика для графика индикатива построена на наличии в widgetContentProps данных indicativeData
       saveContentProps({
-        savedInstrument: newVal,
+        savedInstrument: instrumentId,
+        savedInstrumentName: nextInstrumentName,
+        savedInstrumentTicker: nextInstrumentTicker,
         withUpdate,
-        cleanIndicativeData: true,
+        cleanIndicativeData: symbolChanged,
       });
 
-      triggerRelatedWidgetsToUpdateRef.current(newVal);
+      if (symbolChanged) {
+        triggerRelatedWidgetsToUpdateRef.current(instrumentId);
+      }
     },
     [dispatch, saveContentProps, widgetId],
   );
 
   const addInstrumentFromModal = useCallback(
-    (instruments: Pick<Contract, 'issKey'>[]) => {
-      const issKey = instruments[0]?.issKey;
+    (instruments: SelectedInstrument[]): void => {
+      const instrument = instruments[0];
 
-      if (!issKey) {
+      if (!instrument?.issKey) {
         return;
       }
 
-      onInstrumentChange(issKey);
+      onInstrumentChange(instrument.issKey, instrument.displayName, instrument.symbol);
     },
     [onInstrumentChange],
   );
 
   const onInstrumentChangeFromBind = useCallback(
-    (instrumentId: string) => {
-      onInstrumentChange(instrumentId, true, false);
+    (instrumentId: string, instrumentName?: string, instrumentTicker?: string): void => {
+      onInstrumentChange(instrumentId, instrumentName, instrumentTicker, true, false);
     },
     [onInstrumentChange],
   );
 
   const onDropInstruments = useCallback(
-    (val: string, withUpdate?: boolean): void => {
-      onInstrumentChange(val, withUpdate);
+    (instrument: SelectedInstrument, withUpdate?: boolean): void => {
+      if (!instrument.issKey) {
+        return;
+      }
+
+      onInstrumentChange(instrument.issKey, instrument.displayName, instrument.symbol, withUpdate);
     },
     [onInstrumentChange],
   );
@@ -172,7 +218,7 @@ export default function useChartComponentFacade(props: ChartContainerProps): Use
         const issKey = (message as Record<number, string>)[widgetId];
 
         if (issKey) {
-          addInstrumentFromModal([{ issKey }]);
+          onInstrumentChange(issKey);
         }
       },
     );
@@ -194,12 +240,14 @@ export default function useChartComponentFacade(props: ChartContainerProps): Use
       unsubscribe();
       unsubscribeHighlighter();
     };
-  }, [addInstrumentFromModal, widgetId]);
+  }, [onInstrumentChange, widgetId]);
 
   return {
     dropDownOpen,
     setDropdownOpen,
     currentInstrument,
+    currentInstrumentName,
+    currentInstrumentTicker,
     isWidgetHeaderContextMenuOpen,
     setIsWidgetHeaderContextMenuOpen,
     onDropInstruments,
diff --git a/src/widgets/Chart/hooks/useChartPublicContext.ts b/src/widgets/Chart/hooks/useChartPublicContext.ts
index 0edfadcae..e8999c74d 100644
--- a/src/widgets/Chart/hooks/useChartPublicContext.ts
+++ b/src/widgets/Chart/hooks/useChartPublicContext.ts
@@ -8,7 +8,7 @@ import { DEFAULT_SYMBOL } from '@widgets/Chart/const';
 import { Widget } from 'types/Widgets';
 
 interface UseChartPublicContextArg {
-  setCurrInstrument: (instrumentId: string) => void;
+  setCurrInstrument: (instrumentId: string, instrumentName?: string, instrumentTicker?: string) => void;
   widgetId: Widget['id'];
   getMasterInstrumentFromPublicContext: () => string | number | null | undefined;
 }
@@ -39,12 +39,13 @@ export function useChartPublicContext({
   useEffect(() => {
     const fieldValue = getMasterInstrumentFromPublicContext();
     if (!fieldValue && widget?.master) {
-      setCurrInstrument(DEFAULT_SYMBOL);
+      const defaultInstrument = instruments.find((item) => item.issKey === DEFAULT_SYMBOL);
+      setCurrInstrument(DEFAULT_SYMBOL, defaultInstrument?.displayName, defaultInstrument?.symbol);
       return;
     }
-    const instrKey = instruments.find((item) => item.issKey === fieldValue)?.issKey;
-    if (instrKey) {
-      setCurrInstrument(instrKey);
+    const instrument = instruments.find((item) => item.issKey === fieldValue);
+    if (instrument?.issKey) {
+      setCurrInstrument(instrument.issKey, instrument.displayName, instrument.symbol);
     }
     // eslint-disable-next-line react-hooks/exhaustive-deps -- Посмотреть этот момент.
   }, [publicContext, instruments, widget?.externalProperties, setCurrInstrument]);
diff --git a/src/widgets/Chart/index.tsx b/src/widgets/Chart/index.tsx
index e38b1552a..911a1d5e0 100644
--- a/src/widgets/Chart/index.tsx
+++ b/src/widgets/Chart/index.tsx
@@ -22,6 +22,8 @@ export const Chart: FC<ChartContainerProps> = function (props): JSX.Element {
     dropDownOpen,
     setDropdownOpen,
     currentInstrument,
+    currentInstrumentName,
+    currentInstrumentTicker,
     setIsWidgetHeaderContextMenuOpen,
     isWidgetHeaderContextMenuOpen,
     onDropInstruments,
@@ -49,7 +51,8 @@ export const Chart: FC<ChartContainerProps> = function (props): JSX.Element {
 
   const instrumentName = indicativeData
     ? `${indicativeData.instrumentName} ${indicativeData.settlement} - ${indicativeData.firmName}`
-    : contractsInstrumentName;
+    : currentInstrumentName || contractsInstrumentName || currentInstrument;
+  const instrumentTicker = indicativeData ? indicativeData.secId : currentInstrumentTicker || currentInstrument;
 
   return (
     <DNDWrapper
@@ -78,7 +81,9 @@ export const Chart: FC<ChartContainerProps> = function (props): JSX.Element {
           }}
         >
           <MoexChart
-            fullName={currentInstrument}
+            symbol={currentInstrument}
+            instrumentName={instrumentName}
+            instrumentTicker={instrumentTicker}
             indicativeData={indicativeData}
             widgetId={props.widgetId}
             addInstrumentFromModal={addInstrumentFromModal}
diff --git a/src/widgets/Chart/properties/types.ts b/src/widgets/Chart/properties/types.ts
index f7bd3eedb..3a5cc442d 100644
--- a/src/widgets/Chart/properties/types.ts
+++ b/src/widgets/Chart/properties/types.ts
@@ -2,18 +2,21 @@ import { Contract } from '@modules/contracts/types';
 
 import { ChartIndicativeData } from '../types';
 
-import type { Intervals, Timeframes } from 'moex-chart';
+import type { WidgetProperties as BaseWidgetProperties } from '@modules/widgetProperties/types';
 
-export type WidgetProperties = {
+import type { Timeframes } from 'moex-chart';
+
+export interface WidgetProperties extends BaseWidgetProperties {
   chartState: {
     savedInstrument: Contract['issKey'] | null;
+    savedInstrumentName?: string;
+    savedInstrumentTicker?: string;
     interval: string;
     savedData?: string;
   };
   indicativeData?: ChartIndicativeData;
   moexChartState?: {
-    initialInterval?: Intervals;
-    timeframe?: Timeframes;
+    timeframe: Timeframes;
     savedData?: string;
   };
-};
+}
diff --git a/src/widgets/Chart/requestBars.ts b/src/widgets/Chart/requestBars.ts
index 59a3f3fa7..6810a0422 100644
--- a/src/widgets/Chart/requestBars.ts
+++ b/src/widgets/Chart/requestBars.ts
@@ -3,17 +3,14 @@ import utc from 'dayjs/plugin/utc';
 
 import { indicativeQuotesController } from '@api/controllers/indicativeQuotesController';
 import api from '@api/index';
-
 import { candleToBar } from '@utils/candleToBar';
 
 import { ChartIndicativeData } from './types';
 import { isIndicativeTicker } from './utils/isIndicativeTicker';
-import { transformKeyToLowerCase } from './utils/transformKeyToLowerCase';
 
 import type { Candle } from 'moex-chart';
 
 dayjs.extend(utc);
-
 export interface PeriodParams {
   from: number;
   to: number;
@@ -43,23 +40,6 @@ interface RequestRealtimeBarsArgs {
   onRealtimeCallback?: SubscribeBarsCallback;
 }
 
-export type CustomBarsResolver = (args: {
-  ticker?: string;
-  currencyPair: string;
-  periodParams: PeriodParams;
-  interval: string;
-}) => Promise<Candle[]>;
-
-const barsResolvers = new Map<string, CustomBarsResolver>();
-
-export const registerBarsResolver = (boardKey: string, resolver: CustomBarsResolver) => {
-  barsResolvers.set(boardKey, resolver);
-};
-
-const getBoardFromTicker = (ticker?: string) => ticker?.split(/[:.]/)[1];
-
-const getBarsResolver = (ticker?: string) => barsResolvers.get(getBoardFromTicker(ticker) ?? '');
-
 export async function requestBars({
   currencyPair,
   interval,
@@ -68,20 +48,6 @@ export async function requestBars({
   ticker,
   indicativeData,
 }: RequestBarsArgs): Promise<Candle[]> {
-  const customResolver = getBarsResolver(ticker);
-  if (customResolver) {
-    try {
-      const customBars = await customResolver({ ticker, currencyPair, periodParams, interval });
-      const toMs = periodParams.to * 1000;
-      const olderBars = customBars.filter((bar) => bar.time < toMs);
-      onHistoryCallback?.(olderBars, { noData: olderBars.length === 0 });
-      return olderBars;
-    } catch (e) {
-      onHistoryCallback?.([], { noData: true });
-      return [];
-    }
-  }
-
   const date = new Date(periodParams.to * 1000);
   const year = date.getUTCFullYear();
   const month = `0${date.getUTCMonth() + 1}`.slice(-2);
@@ -100,17 +66,10 @@ export async function requestBars({
   if (isIndicativeInstrument) {
     const dateStr = `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;
 
-    const lowerCaseKey = transformKeyToLowerCase(currencyPair);
-
-    if (!lowerCaseKey) {
-      onHistoryCallback?.([], { noData: true });
-      return [];
-    }
-
     try {
       const { data } = await indicativeQuotesController.getCandles({
         count: periodParams.countBack,
-        key: lowerCaseKey,
+        key: currencyPair,
         date: dateStr,
         interval,
       });
@@ -165,10 +124,6 @@ export async function requestRealtimeBars({
   onRealtimeCallback,
   indicativeData,
 }: RequestRealtimeBarsArgs): Promise<Candle | undefined> {
-  if (getBarsResolver(ticker)) {
-    return;
-  }
-
   const hasIndicativeBoardInTicker = isIndicativeTicker(ticker);
 
   // если при инициализации графика были данные indicativeData и текущий инструмент совпадает
@@ -177,16 +132,10 @@ export async function requestRealtimeBars({
   const isIndicativeInstrument = (indicativeData && indicativeData.key === ticker) || hasIndicativeBoardInTicker;
 
   if (isIndicativeInstrument) {
-    const lowerCaseKey = transformKeyToLowerCase(currencyPair);
-
-    if (!lowerCaseKey) {
-      return undefined;
-    }
-
     try {
       const { data } = await indicativeQuotesController.getCandles({
         count: 1,
-        key: lowerCaseKey,
+        key: currencyPair,
         date: dayjs().utc().add(1, 'minute').format('YYYY-MM-DDTHH:mm:ss'),
         interval,
       });
diff --git a/src/widgets/Chart/types.ts b/src/widgets/Chart/types.ts
index bbc0155d5..519b47289 100644
--- a/src/widgets/Chart/types.ts
+++ b/src/widgets/Chart/types.ts
@@ -1,12 +1,22 @@
-import type { WidgetContentBasicProps } from 'types/Widgets';
+import { Contract } from '@modules/contracts';
+
 import type { WidgetProperties } from './properties/types';
 
-export type ChartIndicativeData = {
+import type { WidgetProperties as BaseWidgetProperties } from '@modules/widgetProperties/types';
+import type { WidgetContentBasicProps } from 'types/Widgets';
+
+export interface ChartIndicativeData extends BaseWidgetProperties {
   secId: string;
   instrumentName: string;
   settlement: string;
   firmName: string;
   key: string;
-};
+}
+
+export interface SelectedInstrument {
+  issKey: Contract['issKey'];
+  displayName: Contract['displayName'];
+  symbol: Contract['symbol'];
+}
 
 export type ChartContainerProps = WidgetContentBasicProps<WidgetProperties>;
diff --git a/src/widgets/Chart/utils/transformKeyToLowerCase.ts b/src/widgets/Chart/utils/transformKeyToLowerCase.ts
deleted file mode 100644
index 765d04625..000000000
--- a/src/widgets/Chart/utils/transformKeyToLowerCase.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { INDICATIVE_BOARDS } from '@modules/quotes';
-
-export const transformKeyToLowerCase = (key: string): string | null => {
-  const keyParts = key.split('.');
-  const boardIndex = keyParts.findIndex((part) =>
-    INDICATIVE_BOARDS.some((board) => part.toLowerCase().replace('-', '_') === board),
-  );
-
-  if (boardIndex === -1) {
-    return null;
-  }
-
-  keyParts[boardIndex] =
-    INDICATIVE_BOARDS.find((board) => keyParts[boardIndex].toLowerCase().replace('-', '_') === board) ||
-    keyParts[boardIndex];
-
-  return keyParts.join('.');
-};
\ No newline at end of file
diff --git a/src/widgets/Curves/Chart/__tests__/plugins.test.ts b/src/widgets/Curves/Chart/__tests__/plugins.test.ts
deleted file mode 100644
index 016523a56..000000000
--- a/src/widgets/Curves/Chart/__tests__/plugins.test.ts
+++ /dev/null
@@ -1,304 +0,0 @@
-import { gradientPlugin } from '../plugins';
-
-import type { ExtraData } from '../plugins';
-import type { Chart } from 'chart.js';
-
-class MockImage {
-  src = '';
-
-  onload: (() => void) | null = null;
-}
-
-global.Image = MockImage as unknown as typeof Image;
-
-type MockCtx = {
-  createLinearGradient: jest.Mock;
-  save: jest.Mock;
-  restore: jest.Mock;
-  beginPath: jest.Mock;
-  moveTo: jest.Mock;
-  lineTo: jest.Mock;
-  lineWidth: number;
-  strokeStyle: string;
-  stroke: jest.Mock;
-  setLineDash: jest.Mock;
-  drawImage: jest.Mock;
-};
-
-function createMockCtx(): MockCtx {
-  return {
-    createLinearGradient: jest.fn(() => ({
-      addColorStop: jest.fn(),
-    })),
-    save: jest.fn(),
-    restore: jest.fn(),
-    beginPath: jest.fn(),
-    moveTo: jest.fn(),
-    lineTo: jest.fn(),
-    lineWidth: 0,
-    strokeStyle: '',
-    stroke: jest.fn(),
-    setLineDash: jest.fn(),
-    drawImage: jest.fn(),
-  };
-}
-
-const createMockChart = (
-  overrides: {
-    datasets?: { extraData?: ExtraData; backgroundColor?: unknown }[];
-    chartArea?: { top: number; bottom: number; left: number; right: number } | null;
-  } = {},
-): Chart<'line'> =>
-  ({
-    data: {
-      datasets: overrides.datasets || [],
-    },
-    chartArea: overrides.chartArea !== undefined ? overrides.chartArea : { top: 10, bottom: 500, left: 50, right: 900 },
-    ctx: createMockCtx() as unknown as CanvasRenderingContext2D,
-  }) as unknown as Chart<'line'>;
-
-function invokeBeforeDatasetsDraw(chart: Chart<'line'>) {
-  (chart.data.datasets as { extraData?: ExtraData; backgroundColor?: unknown }[]) = chart.data.datasets;
-  gradientPlugin.beforeDatasetsDraw?.(chart, { cancelable: true }, {} as never);
-}
-
-describe('gradientPlugin', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  describe('id', () => {
-    it('должен иметь правильный идентификатор', () => {
-      expect(gradientPlugin.id).toBe('dynamicGradient');
-    });
-  });
-
-  describe('beforeDatasetsDraw', () => {
-    it('должен установить backgroundColor для датасета с extraData', () => {
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: {
-              gradientColor: [255, 128, 64],
-              gradientOpacity: 0.8,
-            },
-          },
-        ],
-      });
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect((chart.data.datasets[0] as any).backgroundColor).toBeDefined();
-    });
-
-    it('должен создать градиент с правильными координатами по Y', () => {
-      const mockCtx = createMockCtx();
-      const chartArea = { top: 20, bottom: 480, left: 0, right: 1000 };
-
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: {
-              gradientColor: [100, 200, 50],
-              gradientOpacity: 0.6,
-            },
-          },
-        ],
-        chartArea,
-      });
-      (chart.ctx as unknown as MockCtx) = mockCtx;
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect(mockCtx.createLinearGradient).toHaveBeenCalledWith(0, chartArea.top, 0, chartArea.bottom);
-    });
-
-    it('должен использовать RGB значения из gradientColor', () => {
-      const mockCtx = createMockCtx();
-      let capturedColorStart = '';
-      let capturedColorEnd = '';
-
-      mockCtx.createLinearGradient = jest.fn(() => ({
-        addColorStop: jest.fn((offset: number, color: string) => {
-          if (offset === 0) {
-            capturedColorStart = color;
-          } else {
-            capturedColorEnd = color;
-          }
-        }),
-      }));
-
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: {
-              gradientColor: [123, 45, 67],
-              gradientOpacity: 0.9,
-            },
-          },
-        ],
-      });
-      (chart.ctx as unknown as MockCtx) = mockCtx;
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect(capturedColorStart).toBe('rgba(123, 45, 67, 0.9)');
-      expect(capturedColorEnd).toBe('rgba(123, 45, 67, 0)');
-    });
-
-    it('должен пропустить датасет без extraData', () => {
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: undefined,
-          },
-        ],
-      });
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect((chart.data.datasets[0] as any).backgroundColor).toBeUndefined();
-    });
-
-    it('должен пропустить датасет с null gradientColor', () => {
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: {
-              gradientColor: null,
-              gradientOpacity: 0.5,
-            },
-          },
-        ],
-      });
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect((chart.data.datasets[0] as any).backgroundColor).toBeUndefined();
-    });
-
-    it('должен пропустить датасет, если gradientOpacity === undefined', () => {
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: {
-              gradientColor: [255, 0, 0],
-            },
-          },
-        ],
-      });
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect((chart.data.datasets[0] as any).backgroundColor).toBeUndefined();
-    });
-
-    it('должен обработать несколько датасетов с extraData', () => {
-      const mockCtx = createMockCtx();
-      mockCtx.createLinearGradient = jest.fn(() => ({
-        addColorStop: jest.fn(),
-      }));
-
-      const chart = createMockChart({
-        datasets: [
-          { extraData: { gradientColor: [255, 0, 0], gradientOpacity: 1 } },
-          { extraData: { gradientColor: [0, 255, 0], gradientOpacity: 0.5 } },
-          { extraData: undefined },
-          { extraData: { gradientColor: [0, 0, 255], gradientOpacity: 0.8 } },
-        ],
-      });
-      (chart.ctx as unknown as MockCtx) = mockCtx;
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect((chart.data.datasets[0] as any).backgroundColor).toBeDefined();
-      expect((chart.data.datasets[1] as any).backgroundColor).toBeDefined();
-      expect((chart.data.datasets[2] as any).backgroundColor).toBeUndefined();
-      expect((chart.data.datasets[3] as any).backgroundColor).toBeDefined();
-    });
-
-    it('должен быстро завершиться при отсутствии chartArea', () => {
-      const chart = createMockChart({
-        chartArea: null,
-        datasets: [
-          {
-            extraData: {
-              gradientColor: [255, 0, 0],
-              gradientOpacity: 1,
-            },
-          },
-        ],
-      });
-
-      expect(() => {
-        invokeBeforeDatasetsDraw(chart);
-      }).not.toThrow();
-
-      expect((chart.data.datasets[0] as any).backgroundColor).toBeUndefined();
-    });
-
-    it('должен перезаписывать существующий backgroundColor', () => {
-      const mockCtx = createMockCtx();
-      mockCtx.createLinearGradient = jest.fn(() => ({
-        addColorStop: jest.fn(),
-      }));
-
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: {
-              gradientColor: [255, 100, 50],
-              gradientOpacity: 0.75,
-            },
-            backgroundColor: 'rgb(0, 0, 0)',
-          },
-        ],
-      });
-      (chart.ctx as unknown as MockCtx) = mockCtx;
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect((chart.data.datasets[0] as any).backgroundColor).toBeDefined();
-      expect((chart.data.datasets[0] as any).backgroundColor).not.toBe('rgb(0, 0, 0)');
-    });
-
-    it('должен обрабатывать пустой массив датасетов', () => {
-      const chart = createMockChart({
-        datasets: [],
-      });
-
-      expect(() => {
-        invokeBeforeDatasetsDraw(chart);
-      }).not.toThrow();
-    });
-
-    it('должен корректно обрабатывать максимальную непрозрачность (1)', () => {
-      const mockCtx = createMockCtx();
-      let capturedColorStart = '';
-
-      mockCtx.createLinearGradient = jest.fn(() => ({
-        addColorStop: jest.fn((offset: number, color: string) => {
-          if (offset === 0) {
-            capturedColorStart = color;
-          }
-        }),
-      }));
-
-      const chart = createMockChart({
-        datasets: [
-          {
-            extraData: {
-              gradientColor: [0, 0, 0],
-              gradientOpacity: 1,
-            },
-          },
-        ],
-      });
-      (chart.ctx as unknown as MockCtx) = mockCtx;
-
-      invokeBeforeDatasetsDraw(chart);
-
-      expect(capturedColorStart).toBe('rgba(0, 0, 0, 1)');
-    });
-  });
-});
diff --git a/src/widgets/Curves/Chart/plugins.ts b/src/widgets/Curves/Chart/plugins.ts
index 1f6d77dc7..a047e5309 100644
--- a/src/widgets/Curves/Chart/plugins.ts
+++ b/src/widgets/Curves/Chart/plugins.ts
@@ -7,43 +7,12 @@ import country from '../../../../public/images/curves/Country.png';
 
 import { SittingCBPointPositionArrayType } from './types';
 
-export type ExtraData = {
-  gradientColor?: [number, number, number] | null;
-  gradientOpacity?: number;
-};
-
-export const gradientPlugin: Plugin<'line'> = {
-  id: 'dynamicGradient',
-  beforeDatasetsDraw: (chart) => {
-    const { ctx, chartArea } = chart;
-    if (!chartArea) {
-      return;
-    }
-
-    chart.data.datasets.forEach((dataset) => {
-      const { extraData } = dataset as { extraData?: ExtraData };
-      if (!extraData?.gradientColor || extraData.gradientOpacity === undefined) {
-        return;
-      }
-
-      const gradient = ctx.createLinearGradient(0, chartArea.top, 0, chartArea.bottom);
-      const [red, green, blue] = extraData.gradientColor;
-      gradient.addColorStop(0, `rgba(${red}, ${green}, ${blue}, ${extraData.gradientOpacity})`);
-      gradient.addColorStop(1, `rgba(${red}, ${green}, ${blue}, 0)`);
-
-      // eslint-disable-next-line no-param-reassign -- мутация данных плагина
-      dataset.backgroundColor = gradient;
-    });
-  },
-};
-
 const COUNTRY_IMAGE = new Image();
 COUNTRY_IMAGE.src = country;
 
 const ICON_COUNTRY_SIZE = 20;
 
 export const PLUGINS: Plugin<'line'>[] = [
-  gradientPlugin,
   {
     id: 'tooltipLine',
     beforeTooltipDraw: (
@@ -67,7 +36,7 @@ export const PLUGINS: Plugin<'line'>[] = [
         ctx.moveTo(x, yAxis.top);
         ctx.lineTo(x, yAxis.bottom);
         ctx.lineWidth = 0.5;
-        ctx.strokeStyle = '#FFFFFFAD'; // colors['line-charts-base-crossing'];
+        ctx.strokeStyle = colors['line-charts-base-crossing'];
         ctx.stroke();
         ctx.restore();
       }
diff --git a/src/widgets/Curves/Chart/useData.tsx b/src/widgets/Curves/Chart/useData.tsx
index 9db89a443..8bd79bd19 100644
--- a/src/widgets/Curves/Chart/useData.tsx
+++ b/src/widgets/Curves/Chart/useData.tsx
@@ -1,7 +1,7 @@
 import { ChartData, ChartDataset } from 'chart.js';
 import { useMemo } from 'react';
 
-import { addOpacityToHex, hexToRgb } from '@utils/colors';
+import { addOpacityToHex, getGradient, hexToRgb } from '@utils/colors';
 
 import { useGroupedOpacityMap } from '../hooks/useGroupedOpacityMap';
 import { useColors } from '../logic/context/ColorsContext';
@@ -15,65 +15,65 @@ export const useData = ({ dataSource, tenors, activeCurveKey }: ChartProps) => {
   // Группировка кривых по ID для распределения прозрачности
   const groupedData = useGroupedOpacityMap({ dataSource });
 
-  const datasets = useMemo<ChartDataset<'line', Data>[]>(
-    () =>
-      dataSource.map((item) => {
-        // Проверяем, есть ли уже цвет для этой кривой
-        const existingColorId = getColorForCurveId(item.id.toString());
+  const datasets = useMemo<ChartDataset<'line', Data>[]>(() => {
+    const context = document.createElement('canvas').getContext('2d');
 
-        // Если цвет уже назначен, используем его, иначе используем colorId из item
-        const colorId = existingColorId || item.colorId;
+    return dataSource.map((item) => {
+      // Проверяем, есть ли уже цвет для этой кривой
+      const existingColorId = getColorForCurveId(item.id.toString());
 
-        // Для градиента используем только hex цвет, но преобразуем его в rgb массив
-        const hexColor = getHexById(colorId);
-        const hexColorWithOpacity = addOpacityToHex(hexColor, groupedData.colorOpacityMap[getCurveKey(item)]);
-        const rgbColor = hexToRgb(hexColor);
-        const gradientOpacity = groupedData.gradientOpacityMap[getCurveKey(item)];
+      // Если цвет уже назначен, используем его, иначе используем colorId из item
+      const colorId = existingColorId || item.colorId;
 
-        const tenorToValue = item.value.reduce<Record<string, string>>((previousValue, curveValue) => {
-          const tenor = tenors.find((tenorItem) => tenorItem.value === curveValue.tenor);
-          if (!tenor?.label) {
-            return previousValue;
-          }
-          return {
-            ...previousValue,
-            [tenor.label]: curveValue.value,
-          };
-        }, {});
+      // Для градиента используем только hex цвет, но преобразуем его в rgb массив
+      const hexColor = getHexById(colorId);
+      const hexColorWithOpacity = addOpacityToHex(hexColor, groupedData.colorOpacityMap[getCurveKey(item)]);
+      const rgbColor = hexToRgb(hexColor);
+      const startOpacity = groupedData.gradientOpacityMap[getCurveKey(item)];
 
-        const data = tenors.reduce<Data>(
-          (previousValue, tenor) => ({
-            ...previousValue,
-            [tenor.label]: tenorToValue[tenor.label] || undefined,
-          }),
-          {},
-        );
-
-        const isActive = activeCurveKey !== null && activeCurveKey === getCurveKey(item);
+      const gradientColor =
+        context && rgbColor && startOpacity !== undefined
+          ? getGradient({ ctx: context, color: rgbColor, height: 600, startOpacity })
+          : undefined;
 
+      const tenorToValue = item.value.reduce<Record<string, string>>((previousValue, curveValue) => {
+        const tenor = tenors.find((tenorItem) => tenorItem.value === curveValue.tenor);
+        if (!tenor?.label) {
+          return previousValue;
+        }
         return {
-          label: item.name,
-          data,
-          extraData: {
-            ...item,
-            gradientColor: rgbColor,
-            gradientOpacity,
-          },
-          fill: true,
-          borderColor: hexColorWithOpacity,
-          borderWidth: isActive ? 2 : 1,
-          borderDash: isActive ? [6, 2] : undefined,
-          cubicInterpolationMode: 'monotone',
-          pointBorderColor: hexColorWithOpacity,
-          pointBackgroundColor: hexColorWithOpacity,
-          pointHoverBackgroundColor: hexColorWithOpacity,
-          pointHoverBorderColor: hexColorWithOpacity,
-          pointRadius: 2,
-          spanGaps: true,
+          ...previousValue,
+          [tenor.label]: curveValue.value,
         };
-      }),
-    [dataSource, getColorForCurveId, getHexById, groupedData, tenors, activeCurveKey],
-  );
+      }, {});
+      const data = tenors.reduce<Data>(
+        (previousValue, tenor) => ({
+          ...previousValue,
+          [tenor.label]: tenorToValue[tenor.label] || undefined,
+        }),
+        {},
+      );
+      const isActive = activeCurveKey !== null && activeCurveKey === getCurveKey(item);
+
+      return {
+        label: item.name,
+        data,
+        extraData: item,
+        fill: true,
+        backgroundColor: gradientColor,
+        borderColor: hexColorWithOpacity,
+        borderWidth: isActive ? 2 : 1,
+        borderDash: isActive ? [6, 2] : undefined,
+        cubicInterpolationMode: 'monotone',
+        pointBorderColor: hexColorWithOpacity,
+        pointBackgroundColor: hexColorWithOpacity,
+        pointHoverBackgroundColor: hexColorWithOpacity,
+        pointHoverBorderColor: hexColorWithOpacity,
+        pointRadius: 2,
+        spanGaps: true,
+      };
+    });
+  }, [dataSource, getColorForCurveId, getHexById, groupedData, tenors, activeCurveKey]);
 
   return useMemo<ChartData<'line', Data>>(
     () => ({
diff --git a/src/widgets/Curves/components/Legend/Legend.tsx b/src/widgets/Curves/components/Legend/Legend.tsx
new file mode 100644
index 000000000..7f56c6b7b
--- /dev/null
+++ b/src/widgets/Curves/components/Legend/Legend.tsx
@@ -0,0 +1,55 @@
+import React from 'react';
+
+import { useGroupedOpacityMap } from '@widgets/Curves/hooks/useGroupedOpacityMap';
+import { getCurveKey } from '@widgets/Curves/utils/curve';
+
+import { CurveType, DataSourceItem } from '../../types';
+
+import styles from './index.module.scss';
+import { LegendItem } from './LegendItem';
+
+type LegendProps = {
+  onDelete(curve: DataSourceItem): void;
+  // дата начала отсчета построения шкалы заседаний ЦБ
+  xAxisTopStartDate: Date | null;
+  isVisibleSittingCBPoint: boolean;
+  curveTypesMapByKey: Record<string, CurveType>;
+  dataSource: DataSourceItem[];
+  unSubscribeFromGroupOnDelete: (groupCurveId: number, curveId: string) => void;
+};
+
+export const Legend = ({
+  onDelete,
+  xAxisTopStartDate,
+  isVisibleSittingCBPoint,
+  curveTypesMapByKey,
+  dataSource,
+  unSubscribeFromGroupOnDelete,
+}: LegendProps) => {
+  const handleDeleteAppliedCurve = (curve: DataSourceItem) => {
+    onDelete(curve);
+    unSubscribeFromGroupOnDelete(curve.groupCurveId, curve.id.toString());
+  };
+
+  const groupedData = useGroupedOpacityMap({ dataSource });
+
+  if (dataSource.length === 0) {
+    return null;
+  }
+
+  return (
+    <div className={styles.legend}>
+      {dataSource.map((item) => (
+        <LegendItem
+          key={getCurveKey(item)}
+          curveTypesMapByKey={curveTypesMapByKey}
+          legend={item}
+          onDelete={handleDeleteAppliedCurve}
+          xAxisTopStartDate={xAxisTopStartDate}
+          isVisibleSittingCBPoint={isVisibleSittingCBPoint}
+          pointOpacity={groupedData.colorOpacityMap[getCurveKey(item)]}
+        />
+      ))}
+    </div>
+  );
+};
diff --git a/src/widgets/Curves/components/Legend/LegendItem.tsx b/src/widgets/Curves/components/Legend/LegendItem.tsx
new file mode 100644
index 000000000..ea8f046f5
--- /dev/null
+++ b/src/widgets/Curves/components/Legend/LegendItem.tsx
@@ -0,0 +1,135 @@
+import cn from 'classnames';
+import React from 'react';
+
+import { CloseIcon } from '@components/Icons/CloseIcon';
+import { commonDateFormat } from '@configs/standartDateFormat';
+import { useCurveGroups } from '@hooks/curves/useCurveGroups';
+import { Button } from '@uikit/Button';
+import Tooltip from '@uikit/Tooltip';
+
+import { addOpacityToHex } from '@utils/colors';
+import { CurveSource } from '@widgets/Curves/constants';
+import { useColors } from '@widgets/Curves/logic/context/ColorsContext';
+
+import { getTimeOfUpdatingCurve } from '@widgets/Curves/utils/date';
+
+import { getCurveDisplayName } from '@widgets/Curves/utils/getCurveDisplayName';
+
+import { CurveType, DataSourceItem } from '../../types';
+
+import styles from './index.module.scss';
+type TLegendItemProps = {
+  legend: DataSourceItem;
+
+  onDelete(curve: DataSourceItem): void;
+  isVisibleSittingCBPoint: boolean;
+  xAxisTopStartDate: Date | null;
+  curveTypesMapByKey: Record<string, CurveType>;
+  pointOpacity: number;
+};
+
+export const LegendItem = ({
+  legend,
+  onDelete,
+  isVisibleSittingCBPoint,
+  xAxisTopStartDate,
+  curveTypesMapByKey,
+  pointOpacity,
+}: TLegendItemProps) => {
+  // Нужен для того, чтобы когда курсор уходил на тултип, то с легенды не пропадали ховеред стили.
+  const [isHovered, setIsHovered] = React.useState(false);
+  const [tooltipVisible, setTooltipVisible] = React.useState(false);
+
+  const { curvesGroupAtUpdatedTime } = useCurveGroups();
+  const { getHexById } = useColors();
+
+  const isBasePaket = legend.source === CurveSource.Iss ? legend.isBasePaket : undefined;
+
+  const disabled = !curveTypesMapByKey[legend.key] || isBasePaket === false;
+
+  const tooltipTitle = () => (
+    <div className={styles.center}>
+      Кривая больше не доступна
+      <Button
+        variant="outlined-secondary"
+        text="Скрыть с графика"
+        onClick={() => onDelete(legend)}
+      />
+    </div>
+  );
+
+  const hideTimeoutRef = React.useRef<NodeJS.Timeout>();
+
+  const clearHideTimeout = () => {
+    if (hideTimeoutRef.current) {
+      clearTimeout(hideTimeoutRef.current);
+      hideTimeoutRef.current = undefined;
+    }
+  };
+
+  const handleMouseEnter = () => {
+    clearHideTimeout();
+    setIsHovered(true);
+    if (disabled) {
+      setTooltipVisible(true);
+    }
+  };
+
+  // Костыль, чтобы у нас при переходе с легенды на тултип не происходило моргание.
+  // Моргание - тултип пропадает, а потом снова появляется.
+  const handleMouseLeave = () => {
+    hideTimeoutRef.current = setTimeout(() => {
+      setIsHovered(false);
+      setTooltipVisible(false);
+    }, 150);
+  };
+
+  React.useEffect(() => () => clearHideTimeout(), []);
+
+  const pointColor = addOpacityToHex(getHexById?.(legend.colorId), pointOpacity);
+
+  return (
+    <div
+      style={{ position: 'relative' }}
+      className={cn({ [styles['item--hover']]: isHovered })}
+      data-testid="curve-item"
+      onMouseEnter={handleMouseEnter}
+      onMouseLeave={handleMouseLeave}
+    >
+      <Tooltip
+        title={tooltipTitle}
+        onOpenChange={setTooltipVisible}
+        open={tooltipVisible && disabled}
+        mouseEnterDelay={0.15}
+        mouseLeaveDelay={0.15}
+      >
+        <div
+          className={cn(styles.item, {
+            // выделить неактивные кривые, не равные дате начала построения заседаний ЦБ
+            [styles['item--inactive']]: isVisibleSittingCBPoint && !legend.date.isSame(xAxisTopStartDate),
+            [styles['item--not-allowed']]: disabled,
+          })}
+        >
+          <div className={styles['item-color-container']}>
+            <div
+              className={styles['item-color']}
+              style={{
+                backgroundColor: !disabled ? pointColor : 'rgba(199, 199, 209, 0.16)',
+              }}
+            />
+          </div>
+          {getCurveDisplayName(legend)}-{legend.date.format(commonDateFormat.shortYearFormat)}
+          {getTimeOfUpdatingCurve({ legend, curvesGroupAtUpdatedTime })}
+          <button
+            type="button"
+            onClick={() => onDelete(legend)}
+            className={styles['item-delete-button']}
+            data-testid="item-delete-button"
+          >
+            <CloseIcon />
+          </button>
+        </div>
+      </Tooltip>
+    </div>
+  );
+};
diff --git a/src/widgets/Curves/components/Legend/__tests__/Legend.test.tsx b/src/widgets/Curves/components/Legend/__tests__/Legend.test.tsx
new file mode 100644
index 000000000..a00206435
--- /dev/null
+++ b/src/widgets/Curves/components/Legend/__tests__/Legend.test.tsx
@@ -0,0 +1,293 @@
+import { fireEvent, render, screen } from '@testing-library/react';
+import dayjs from 'dayjs';
+import React from 'react';
+import '@testing-library/jest-dom';
+import { useDispatch } from 'react-redux';
+
+import { useAppSelect } from '@hooks/useAppSelector';
+
+import { CurveSource } from '@widgets/Curves/constants';
+
+import { CurveType, DataSourceItem } from '../../../types';
+import { Legend } from '../Legend';
+
+// Mock the Tooltip component
+jest.mock('@uikit/Tooltip', () => ({
+  __esModule: true,
+  default: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
+}));
+
+// Mock the Icons component
+jest.mock('@components/Icons/CloseIcon', () => ({
+  __esModule: true,
+  CloseIcon: () => <div data-testid="close-icon">Close</div>,
+}));
+
+// Mock the useAppSelect hook to prevent Redux context error
+jest.mock('@hooks/useAppSelector', () => ({
+  useAppSelect: jest.fn(),
+}));
+
+// Mock useDispatch
+jest.mock('react-redux', () => ({
+  __esModule: true,
+  useDispatch: jest.fn(),
+}));
+
+describe('Legend Component', () => {
+  const mockDelete = jest.fn();
+  const mockDeleteAll = jest.fn();
+  const mockCurvesByKey = {
+    curve1: {
+      id: 1,
+      name: 'Curve 1',
+      groupCurveId: 1,
+      unit: 'unit1',
+      key: 'curve1',
+      source: CurveSource.Iss,
+      currencyId: null,
+      quoteCurrency: '',
+      baseCurrency: '',
+      isBasePaket: true,
+    },
+    curve2: {
+      id: 2,
+      name: 'Curve 2',
+      groupCurveId: 2,
+      unit: 'unit2',
+      key: 'curve2',
+      source: CurveSource.Iss,
+      currencyId: null,
+      quoteCurrency: '',
+      baseCurrency: '',
+      isBasePaket: true,
+    },
+  } as Record<string, CurveType>;
+
+  const mockDataSource: DataSourceItem[] = [
+    {
+      groupCurveId: 11,
+      id: 1,
+      key: 'curve1',
+      name: 'Curve 1',
+      value: [],
+      date: dayjs('2023-01-01'),
+      colorId: '1',
+      unit: 'unit1',
+      currencyId: null,
+      quoteCurrency: '',
+      baseCurrency: '',
+      source: CurveSource.Iss,
+      isBasePaket: true,
+    },
+    {
+      id: 2,
+      key: 'curve2',
+      name: 'Curve 2',
+      groupCurveId: 12,
+      value: [],
+      date: dayjs('2023-01-02'),
+      colorId: '2',
+      unit: 'unit2',
+      currencyId: null,
+      quoteCurrency: '',
+      baseCurrency: '',
+      source: CurveSource.Iss,
+      isBasePaket: true,
+    },
+  ];
+
+  beforeEach(() => {
+    mockDelete.mockClear();
+    mockDeleteAll.mockClear();
+    // Mock the useAppSelect hook to return a default value for the selector
+    (useAppSelect as jest.Mock).mockReturnValue(null);
+    (useDispatch as jest.Mock).mockReturnValue(jest.fn());
+  });
+
+  it('should return null when no applied curves', () => {
+    const result = render(
+      <Legend
+        dataSource={[]}
+        onDelete={mockDelete}
+        xAxisTopStartDate={null}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={mockCurvesByKey}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    expect(result.container.firstChild).toBeNull();
+  });
+
+  it('should render legend items for applied curves', () => {
+    render(
+      <Legend
+        dataSource={mockDataSource}
+        onDelete={mockDelete}
+        xAxisTopStartDate={null}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={mockCurvesByKey}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    expect(screen.getByText('Curve 1-01.01.23')).toBeInTheDocument();
+    expect(screen.getByText('Curve 2-02.01.23')).toBeInTheDocument();
+    expect(screen.queryByText('Curve 3-03.01.23')).not.toBeInTheDocument();
+  });
+
+  it('should render delete button for each legend item', () => {
+    render(
+      <Legend
+        dataSource={mockDataSource}
+        onDelete={mockDelete}
+        xAxisTopStartDate={null}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={mockCurvesByKey}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    const deleteButtons = screen.getAllByTestId('item-delete-button');
+    expect(deleteButtons).toHaveLength(2);
+  });
+
+  it('should call onDelete when delete button is clicked', () => {
+    render(
+      <Legend
+        dataSource={mockDataSource}
+        onDelete={mockDelete}
+        xAxisTopStartDate={null}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={mockCurvesByKey}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    const deleteButton = screen.getAllByTestId('item-delete-button')[0];
+    fireEvent.click(deleteButton);
+
+    expect(mockDelete).toHaveBeenCalledWith(mockDataSource[0]);
+  });
+
+  it(`should show inactive class when isVisibleSittingCBPoint 
+    is true and date is different from xAxisTopStartDate`, () => {
+    const startDate = dayjs('2023-01-01');
+    const dataSourceWithInactive = [
+      {
+        ...mockDataSource[0],
+        date: dayjs('2023-01-01'),
+      },
+      {
+        ...mockDataSource[1],
+        date: dayjs('2023-01-02'), // Different date
+      },
+    ];
+
+    render(
+      <Legend
+        dataSource={dataSourceWithInactive}
+        onDelete={mockDelete}
+        xAxisTopStartDate={startDate.toDate()}
+        isVisibleSittingCBPoint
+        curveTypesMapByKey={mockCurvesByKey}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    // We can't directly test classes in this way, but we can verify the component renders
+    expect(screen.getByText('Curve 1-01.01.23')).toBeInTheDocument();
+    expect(screen.getByText('Curve 2-02.01.23')).toBeInTheDocument();
+  });
+
+  it('should not show inactive class when isVisibleSittingCBPoint is false', () => {
+    const startDate = dayjs('2023-01-01');
+    const dataSourceWithInactive = [
+      {
+        ...mockDataSource[0],
+        date: dayjs('2023-01-01'),
+      },
+      {
+        ...mockDataSource[1],
+        date: dayjs('2023-01-02'), // Different date
+      },
+    ];
+
+    render(
+      <Legend
+        dataSource={dataSourceWithInactive}
+        onDelete={mockDelete}
+        xAxisTopStartDate={startDate.toDate()}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={mockCurvesByKey}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    expect(screen.getByText('Curve 1-01.01.23')).toBeInTheDocument();
+    expect(screen.getByText('Curve 2-02.01.23')).toBeInTheDocument();
+  });
+
+  it('should show not allowed class when curve is not in curveTypesMapByKey', () => {
+    const dataSourceWithNotAllowed = [
+      {
+        ...mockDataSource[0],
+        key: 'nonexistent',
+      },
+    ];
+
+    render(
+      <Legend
+        dataSource={dataSourceWithNotAllowed}
+        onDelete={mockDelete}
+        xAxisTopStartDate={null}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={{
+          curve1: mockCurvesByKey.curve1,
+        }}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    expect(screen.getByText('Curve 1-01.01.23')).toBeInTheDocument();
+  });
+
+  it('should render with correct styling for active curves', () => {
+    render(
+      <Legend
+        dataSource={mockDataSource}
+        onDelete={mockDelete}
+        xAxisTopStartDate={null}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={mockCurvesByKey}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    const activeItems = screen.getAllByTestId('curve-item');
+    expect(activeItems).toHaveLength(2);
+  });
+
+  it('should handle case when curveTypesMapByKey does not contain a curve key', () => {
+    const dataSourceWithoutKey = [
+      {
+        ...mockDataSource[0],
+        key: 'missing-key',
+      },
+    ];
+
+    render(
+      <Legend
+        dataSource={dataSourceWithoutKey}
+        onDelete={mockDelete}
+        xAxisTopStartDate={null}
+        isVisibleSittingCBPoint={false}
+        curveTypesMapByKey={{}}
+        unSubscribeFromGroupOnDelete={jest.fn()}
+      />,
+    );
+
+    expect(screen.getByText('Curve 1-01.01.23')).toBeInTheDocument();
+  });
+});
diff --git a/src/widgets/Curves/components/Legend/index.module.scss b/src/widgets/Curves/components/Legend/index.module.scss
new file mode 100644
index 000000000..79f1d4594
--- /dev/null
+++ b/src/widgets/Curves/components/Legend/index.module.scss
@@ -0,0 +1,89 @@
+@import 'colors.scss';
+
+.center {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  row-gap: 8px;
+}
+
+.legend {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  gap: 8px;
+  padding: 4px 16px;
+}
+
+.item {
+  position: relative;
+  display: flex;
+  align-items: center;
+  height: 24px;
+  border-radius: 4px;
+  color: $text-b-primary;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 16px;
+  white-space: nowrap;
+
+  &--inactive {
+    opacity: 50%;
+  }
+
+  &--not-allowed {
+    color: rgba($text-interface-secondary-label-no-value, 0.52);
+  }
+
+  &--hover {
+    background-color: $icon-btn-hover;
+
+    .item--not-allowed {
+      color: rgba($text-interface-primary-value, 0.84);
+    }
+
+    .item-delete-button {
+      display: inline-block;
+    }
+  }
+}
+
+.item-color-container {
+  padding: 5px;
+}
+
+.item-color {
+  width: 6px;
+  height: 6px;
+  border-radius: 50%;
+}
+
+.item-delete-button {
+  display: none;
+  width: 24px;
+  height: 24px;
+  background: none;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+  color: $text-b-primary;
+
+  &:hover {
+    background-color: $icon-btn-hover;
+  }
+}
+
+.delete-all-button {
+  height: 32px;
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  margin-left: auto;
+  color: $text-b-primary;
+  background: none;
+  border: none;
+  cursor: pointer;
+  font-size: 12px;
+  line-height: 16px;
+  font-weight: 400;
+}
\ No newline at end of file
diff --git a/src/widgets/Curves/components/Legend/index.tsx b/src/widgets/Curves/components/Legend/index.tsx
new file mode 100644
index 000000000..6adb3cc7d
--- /dev/null
+++ b/src/widgets/Curves/components/Legend/index.tsx
@@ -0,0 +1 @@
+export * from './Legend';
diff --git a/src/widgets/Curves/hooks/__tests__/useGroupedOpacityMap.test.ts b/src/widgets/Curves/hooks/__tests__/useGroupedOpacityMap.test.ts
index 3c888af7c..bf931dca3 100644
--- a/src/widgets/Curves/hooks/__tests__/useGroupedOpacityMap.test.ts
+++ b/src/widgets/Curves/hooks/__tests__/useGroupedOpacityMap.test.ts
@@ -10,11 +10,6 @@ jest.mock('../../utils/curve', () => ({
   getCurveKey: jest.fn(),
 }));
 
-const COLOR_OPACITY_TOP = 1;
-const COLOR_OPACITY_BOTTOM = 0.3;
-const GRADIENT_OPACITY_TOP = 0.5;
-const GRADIENT_OPACITY_BOTTOM = 0.1;
-
 describe('useGroupedOpacityMap hook', () => {
   beforeEach(() => {
     jest.clearAllMocks();
@@ -38,7 +33,7 @@ describe('useGroupedOpacityMap hook', () => {
     const expectedKey = '1:2023-01-01';
 
     expect(result.current.colorOpacityMap[expectedKey]).toBe(1);
-    expect(result.current.gradientOpacityMap[expectedKey]).toBe(GRADIENT_OPACITY_TOP);
+    expect(result.current.gradientOpacityMap[expectedKey]).toBe(0.3);
     expect(result.current.groups['1']).toHaveLength(1);
   });
 
@@ -53,12 +48,12 @@ describe('useGroupedOpacityMap hook', () => {
     const keyOld = '1:2023-01-01';
     const keyNew = '1:2023-01-02';
 
-    expect(result.current.colorOpacityMap[keyOld]).toBe(COLOR_OPACITY_BOTTOM);
-    expect(result.current.gradientOpacityMap[keyOld]).toBe(GRADIENT_OPACITY_BOTTOM);
+    expect(result.current.colorOpacityMap[keyOld]).toBe(0.5);
+    expect(result.current.gradientOpacityMap[keyOld]).toBe(0.1);
 
     // Проверяем новую дату (должна получить значения TOP)
     expect(result.current.colorOpacityMap[keyNew]).toBe(1);
-    expect(result.current.gradientOpacityMap[keyNew]).toBe(GRADIENT_OPACITY_TOP);
+    expect(result.current.gradientOpacityMap[keyNew]).toBe(0.3);
   });
 
   it('должен равномерно распределять прозрачность для группы из 3 элементов', () => {
@@ -74,11 +69,13 @@ describe('useGroupedOpacityMap hook', () => {
     const key1 = '1:2023-01-02';
     const key2 = '1:2023-01-03';
 
-    expect(result.current.colorOpacityMap[key0]).toBe(COLOR_OPACITY_BOTTOM);
-    expect(result.current.colorOpacityMap[key2]).toBe(COLOR_OPACITY_TOP);
+    expect(result.current.colorOpacityMap[key0]).toBe(0.5);
+    expect(result.current.colorOpacityMap[key1]).toBe(0.75);
+    expect(result.current.colorOpacityMap[key2]).toBe(1);
 
-    expect(result.current.gradientOpacityMap[key0]).toBe(GRADIENT_OPACITY_BOTTOM);
-    expect(result.current.gradientOpacityMap[key2]).toBe(GRADIENT_OPACITY_TOP);
+    expect(result.current.gradientOpacityMap[key0]).toBe(0.1);
+    expect(result.current.gradientOpacityMap[key1]).toBe(0.2);
+    expect(result.current.gradientOpacityMap[key2]).toBe(0.3);
   });
 
   it('должен изолированно обрабатывать несколько разных групп (по id)', () => {
@@ -96,8 +93,8 @@ describe('useGroupedOpacityMap hook', () => {
 
     expect(result.current.colorOpacityMap[keyGroup1]).toBe(1);
 
-    expect(result.current.colorOpacityMap[keyGroup2Old]).toBe(COLOR_OPACITY_BOTTOM);
-    expect(result.current.colorOpacityMap[keyGroup2New]).toBe(COLOR_OPACITY_TOP);
+    expect(result.current.colorOpacityMap[keyGroup2Old]).toBe(0.5);
+    expect(result.current.colorOpacityMap[keyGroup2New]).toBe(1);
 
     expect(Object.keys(result.current.groups)).toEqual(['1', '2']);
     expect(result.current.groups['1']).toHaveLength(1);
diff --git a/src/widgets/Curves/hooks/index.ts b/src/widgets/Curves/hooks/index.ts
index 2612d42ea..a92912203 100644
--- a/src/widgets/Curves/hooks/index.ts
+++ b/src/widgets/Curves/hooks/index.ts
@@ -1,3 +1,2 @@
 export { useCurveWS } from './useCurveWS';
 export { useCurveToast } from './useCurveToast';
-export { useGroupedOpacityMap } from './useGroupedOpacityMap';
diff --git a/src/widgets/Curves/hooks/useGroupedOpacityMap.ts b/src/widgets/Curves/hooks/useGroupedOpacityMap.ts
index a8ef2e2e4..10e6e960b 100644
--- a/src/widgets/Curves/hooks/useGroupedOpacityMap.ts
+++ b/src/widgets/Curves/hooks/useGroupedOpacityMap.ts
@@ -9,10 +9,10 @@ type UseGroupedOpacityMapParams = {
 
 // Константы для прозрачности линий/точек (от 0.5 до 1)
 const COLOR_OPACITY_TOP = 1;
-const COLOR_OPACITY_BOTTOM = 0.3;
+const COLOR_OPACITY_BOTTOM = 0.5;
 
 // Константы для прозрачности градиента (от 0.1 до 0.3)
-const GRADIENT_OPACITY_TOP = 0.5;
+const GRADIENT_OPACITY_TOP = 0.3;
 const GRADIENT_OPACITY_BOTTOM = 0.1;
 
 export const useGroupedOpacityMap = ({ dataSource }: UseGroupedOpacityMapParams) =>
diff --git a/src/widgets/Curves/hooks/useLegendHandlers.ts b/src/widgets/Curves/hooks/useLegendHandlers.ts
deleted file mode 100644
index fdadb56ad..000000000
--- a/src/widgets/Curves/hooks/useLegendHandlers.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import { useCallback } from 'react';
-
-import { commonDateFormat } from '@configs/standartDateFormat';
-
-import { addOpacityToHex } from '@utils/colors';
-
-import { useColors } from '../logic/context/ColorsContext';
-import { CurveType, DataSourceItem, LegendItem } from '../types';
-import { getCurveKey } from '../utils/curve';
-import { getCurveDisplayName } from '../utils/getCurveDisplayName';
-
-import { useGroupedOpacityMap } from './useGroupedOpacityMap';
-
-type UseLegendHandlersParams = {
-  dataSource: DataSourceItem[];
-  onDeleteAppliedCurve: (tableCurve: DataSourceItem) => void;
-  unSubscribeFromGroupOnDelete: (groupCurveId: number, curveId: string) => void;
-  curveTypesMapByKey: Record<string, CurveType>;
-  isVisibleSittingCBPoint: boolean;
-  xAxisTopStartDate: Date | null;
-};
-
-export const useLegendHandlers = ({
-  dataSource,
-  onDeleteAppliedCurve,
-  unSubscribeFromGroupOnDelete,
-  curveTypesMapByKey,
-  isVisibleSittingCBPoint,
-  xAxisTopStartDate,
-}: UseLegendHandlersParams) => {
-  const { getHexById } = useColors();
-  const groupedData = useGroupedOpacityMap({ dataSource });
-
-  const onDelete = useCallback(
-    (key: string) => {
-      const item = dataSource.find((dsItem) => getCurveKey(dsItem) === key);
-
-      if (item) {
-        onDeleteAppliedCurve(item);
-        unSubscribeFromGroupOnDelete(item.groupCurveId, item.id.toString());
-      }
-    },
-    [dataSource, onDeleteAppliedCurve, unSubscribeFromGroupOnDelete],
-  );
-
-  const getItemName = useCallback(
-    (legendItem: LegendItem) => {
-      const dataSourceItem = dataSource?.find((dsItem) => getCurveKey(dsItem) === legendItem.key);
-
-      return dataSourceItem
-        ? `${getCurveDisplayName(dataSourceItem)}-${legendItem.date.format(commonDateFormat.shortYearFormat)}`
-        : '';
-    },
-    [dataSource],
-  );
-
-  const getColorById = useCallback((colorId?: string | undefined) => getHexById(colorId), [getHexById]);
-
-  const getIsDisabled = useCallback(
-    (legendItem: LegendItem) => {
-      const dataSourceItem = dataSource?.find((dsItem) => getCurveKey(dsItem) === legendItem.key);
-      const curveItem = curveTypesMapByKey[dataSourceItem?.key ?? ''];
-
-      // проверка на старость - есть ли у нас кривая во всем списке кривых
-      if (!curveItem) {
-        return true;
-      }
-
-      const isBasePaket = dataSourceItem?.source === 'iss' ? dataSourceItem.isBasePaket : undefined;
-      return !curveItem || isBasePaket === false;
-    },
-    [curveTypesMapByKey, dataSource],
-  );
-
-  const shouldHighlightInactive = useCallback(
-    (legendItem: LegendItem) => isVisibleSittingCBPoint && !legendItem.date.isSame(xAxisTopStartDate),
-    [isVisibleSittingCBPoint, xAxisTopStartDate],
-  );
-
-  const getPointColor = useCallback(
-    (colorId: string, opacity: number) => addOpacityToHex(getHexById(colorId), opacity),
-    [getHexById],
-  );
-
-  const getPointOpacity = useCallback((key: string) => groupedData.colorOpacityMap[key], [groupedData]);
-
-  return {
-    onDelete,
-    getItemName,
-    getColorById,
-    getIsDisabled,
-    shouldHighlightInactive,
-    getPointColor,
-    getPointOpacity,
-  };
-};
diff --git a/src/widgets/Curves/index.tsx b/src/widgets/Curves/index.tsx
index 1e07cc895..516e9d670 100644
--- a/src/widgets/Curves/index.tsx
+++ b/src/widgets/Curves/index.tsx
@@ -1,22 +1,20 @@
-import React, { FC, useCallback, useEffect, useMemo } from 'react';
+import React, { FC, useCallback, useEffect } from 'react';
 
 import { useBeforeUnload } from 'react-router-dom';
 
-import { Legend } from '@components/Legend';
 import WidgetContentWrapper from '@components/WidgetContentWrapper';
 import WidgetHeader from '@components/WidgetHeader';
 
 import { Chart } from './Chart';
 import { HeaderButtons } from './components/HeaderButtons';
+import { Legend } from './components/Legend';
 import { Header } from './Header';
 import { useCurveToast, useCurveWS } from './hooks';
-import { useLegendHandlers } from './hooks/useLegendHandlers';
 import styles from './index.module.scss';
 import { ColorsContextProvider } from './logic/context/ColorsContext';
 import { CurvesTable } from './Table';
-import { CurvesProps, LegendItem } from './types';
+import { CurvesProps } from './types';
 import { useCurvesFacade } from './useCurvesFacade';
-import { mapDataSourceToLegend } from './utils/mapDataSourceToLegend';
 
 const CurvesComponent: FC<CurvesProps> = (props) => {
   const {
@@ -83,25 +81,6 @@ const CurvesComponent: FC<CurvesProps> = (props) => {
     });
   }, [dataSource, handleProcessNewCurvesDataFromWS, subscribeToGroupId]);
 
-  const legend = useMemo(() => mapDataSourceToLegend(dataSource), [dataSource]);
-
-  const {
-    onDelete: onLegendItemDelete,
-    getItemName: getLegendItemName,
-    getColorById: getLegendColorById,
-    getIsDisabled: getIsLegendItemDisabled,
-    shouldHighlightInactive,
-    getPointColor: getLegendItemColor,
-    getPointOpacity: getLegendItemPointOpacity,
-  } = useLegendHandlers({
-    dataSource,
-    onDeleteAppliedCurve,
-    unSubscribeFromGroupOnDelete,
-    curveTypesMapByKey,
-    isVisibleSittingCBPoint,
-    xAxisTopStartDate,
-  });
-
   return (
     <>
       <WidgetHeader
@@ -138,15 +117,13 @@ const CurvesComponent: FC<CurvesProps> = (props) => {
             onResetFilters={onResetFilters}
           />
 
-          <Legend<LegendItem>
-            legend={legend}
-            onDelete={onLegendItemDelete}
-            getItemName={getLegendItemName}
-            getColorById={getLegendColorById}
-            getPointColor={getLegendItemColor}
-            getPointOpacity={getLegendItemPointOpacity}
-            getIsDisabled={getIsLegendItemDisabled}
-            shouldHighlightInactive={shouldHighlightInactive}
+          <Legend
+            unSubscribeFromGroupOnDelete={unSubscribeFromGroupOnDelete}
+            dataSource={dataSource}
+            curveTypesMapByKey={curveTypesMapByKey}
+            onDelete={onDeleteAppliedCurve}
+            xAxisTopStartDate={xAxisTopStartDate}
+            isVisibleSittingCBPoint={isVisibleSittingCBPoint}
           />
 
           {view === 'table' && (
diff --git a/src/widgets/Curves/types.ts b/src/widgets/Curves/types.ts
index 11b3c8126..8754c798d 100644
--- a/src/widgets/Curves/types.ts
+++ b/src/widgets/Curves/types.ts
@@ -81,13 +81,3 @@ export type CurveFiltersData = {
   isLoaded: boolean;
 };
 
-export type LegendItem = {
-  key: DataSourceItem['key'];
-  colorId: DataSourceItem['colorId'];
-  date: DataSourceItem['date'];
-
-  canDelete: boolean;
-  canHide: boolean;
-  canReload: boolean;
-  visible: boolean;
-};
diff --git a/src/widgets/Curves/utils/mapDataSourceToLegend.tsx b/src/widgets/Curves/utils/mapDataSourceToLegend.tsx
deleted file mode 100644
index 0cafed5ea..000000000
--- a/src/widgets/Curves/utils/mapDataSourceToLegend.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { DataSourceItem, LegendItem } from '../types';
-
-import { getCurveKey } from './curve';
-
-export const mapDataSourceToLegend = (dataSource: DataSourceItem[]): LegendItem[] =>
-  dataSource?.map((item) => ({
-    key: getCurveKey(item),
-    colorId: item.colorId,
-    date: item.date,
-
-    canDelete: true,
-    canHide: false,
-    canReload: false,
-    visible: true,
-  }));
diff --git a/src/widgets/DepositCcpTables/hooks/__tests__/useMxtTableData.test.ts b/src/widgets/DepositCcpTables/hooks/__tests__/useMxtTableData.test.ts
index 009b09728..a455d0b47 100644
--- a/src/widgets/DepositCcpTables/hooks/__tests__/useMxtTableData.test.ts
+++ b/src/widgets/DepositCcpTables/hooks/__tests__/useMxtTableData.test.ts
@@ -131,8 +131,6 @@ describe('useMxtTableData', () => {
     mockUseMxtData.mockImplementation((keys) => ({
       dataRecords: Object.fromEntries(keys.map((key) => [key, TEST_DATA[key]])),
       dataFields: Object.fromEntries(keys.map((key) => [key, TEST_META.objects[key]?.fields])),
-      isLoading: false,
-      errors: {},
     }));
 
     mockUseAppSelect.mockImplementation((selector) =>
@@ -145,8 +143,6 @@ describe('useMxtTableData', () => {
     mockUseMxtData.mockReturnValue({
       dataRecords: {},
       dataFields: {},
-      isLoading: false,
-      errors: {},
     });
     mockUseAppSelect.mockReturnValue({}); // enums, views, objects пустые
 
diff --git a/src/widgets/DraftBrokerSpfi/hooks/useBrokerDraftsTable.ts b/src/widgets/DraftBrokerSpfi/hooks/useBrokerDraftsTable.ts
index dab39828d..e4969ee85 100644
--- a/src/widgets/DraftBrokerSpfi/hooks/useBrokerDraftsTable.ts
+++ b/src/widgets/DraftBrokerSpfi/hooks/useBrokerDraftsTable.ts
@@ -3,7 +3,7 @@
 import { openOpenDraftTicketModal } from '@store/slices/modals';
 import { dispatch } from '@store/store';
 import { brokerDraftsColumnsConfig } from '@widgets/DraftBrokerSpfi/configs/tableColumns';
-import { SpfiDraft } from 'types/spfiDrafts';
+import { SpfiDraft, SpfiDraftStatusLabels } from 'types/spfiDrafts';
 import { WidgetContentBasicProps } from 'types/Widgets';
 
 export const useBrokerDraftsTable = ({ props }: { props: WidgetContentBasicProps }) => {
@@ -14,7 +14,7 @@ export const useBrokerDraftsTable = ({ props }: { props: WidgetContentBasicProps
       openOpenDraftTicketModal({
         draftId: row.draftId,
         widgetId: props.widgetId,
-        status: row.status ? row.status : undefined,
+        status: row.status ? SpfiDraftStatusLabels[row.status] : undefined,
         orderId: row.orderId ?? undefined,
       }),
     );
diff --git a/src/widgets/Glass/Glass.tsx b/src/widgets/Glass/Glass.tsx
index 73c484ddc..2b210f610 100644
--- a/src/widgets/Glass/Glass.tsx
+++ b/src/widgets/Glass/Glass.tsx
@@ -1,43 +1,119 @@
 import React, { FC } from 'react';
 
-import { useContracts } from '@modules/contracts';
-import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-
-import { GlassBase } from './GlassBase';
-import { usePluginDefinition } from './logic/hooks/usePluginDefinition';
-import { useSelectedInstrument } from './logic/hooks/useSelectedInstrument';
-
-import type { GlassWidgetProperties } from './properties/types';
-import type { WidgetContentBasicProps } from 'types/Widgets';
-
-export const Glass: FC<WidgetContentBasicProps<GlassWidgetProperties>> = (props) => {
-  const { selectedInstrument, updateSelectedInstrument } = useSelectedInstrument();
-  const widgetId = useWidgetIdContext();
-  const { contractsMap } = useContracts();
-  const contract = selectedInstrument ? contractsMap.get(selectedInstrument) : undefined;
-
-  const GlassComponent = (
-    <GlassBase
-      {...props}
-      selectedInstrument={selectedInstrument}
-      updateSelectedInstrument={updateSelectedInstrument}
-    />
-  );
+import { DNDWrapper } from '@components/DNDWrapper';
+import { InstrumentSearch } from '@components/InstrumentSearch';
+import { OrderButton } from '@components/OrderButton';
+import WidgetContentWrapper from '@components/WidgetContentWrapper';
+import WidgetHeader from '@components/WidgetHeader';
+import { useDropInstrument } from '@hooks/dnd';
+import { ContextMenuOverlay } from '@uikit/ContextMenuOverlay';
+import { useWidgetHeaderName } from '@utils/useWidgetName';
+import { GlassProps } from 'types/Glass/GlassState';
+import { WidgetContentBasicProps } from 'types/Widgets';
+
+import { useGlassFacade, useWidgetGlassFormFacade } from './logic/hooks';
+import { useGlassView } from './logic/hooks/useGlassView';
+import './widgetGlass.scss';
+
+export const Glass: FC<WidgetContentBasicProps<GlassProps>> = (props) => {
+  const {
+    dropdownOpen,
+    choosenInstrumentFromSearch,
+    refWrapper,
+    changeInstrumentByDnd,
+    choosenInstrumentFromSearchHandler,
+    isOver,
+    choosenOption,
+    isSapfirInstrument,
+    menuItems,
+    isOpenContextMenuFromWidget,
+    setIsOpenContextMenuFromWidget,
+    depthCount,
+    bestPriceIndication,
+    displayMyFirmOrders,
+    view,
+    activePlugin,
+  } = useWidgetGlassFormFacade(props);
+
+  const { dropRef } = useDropInstrument((data) => {
+    if (data.properties.issKey) {
+      changeInstrumentByDnd(data.properties.issKey);
+    }
+  });
+  const { widgetId } = props;
+
+  const { sides, editWidget } = useGlassFacade({
+    choosenInstrumentFromSearch,
+    widgetId,
+    choosenOption,
+    depthCount,
+    bestPriceIndication,
+    displayMyFirmOrders,
+    activePlugin,
+  });
 
-  const { Provider } = usePluginDefinition({ tickerId: selectedInstrument, contract }) ?? {};
+  const {
+    isSettingsOpen,
+    setIsSettingsOpen,
+    openInstrumentModal,
+    renderContent,
+    isOpenEmptyAction,
+    setIsOpenEmptyAction,
+    contextMenuProps,
+  } = useGlassView({
+    sides,
+    depthCount,
+    bestPriceIndication,
+    displayMyFirmOrders,
+    activePlugin,
+    choosenInstrumentFromSearch,
+    view,
+    refWrapper,
+    widgetId,
+    isSapfirInstrument,
+  });
+  const instrumentNameForHeader = useWidgetHeaderName(choosenInstrumentFromSearch);
 
-  if (!Provider || !selectedInstrument) {
-    return GlassComponent;
-  }
+  const { actions: { orderBtnClick } = {}, uiConfig: { showOrderButton } = {} } = activePlugin ?? {};
 
   return (
-    <Provider
-      key={selectedInstrument}
-      widgetId={widgetId}
-      tickerId={selectedInstrument}
-      contract={contract}
+    <DNDWrapper
+      ref={dropRef}
+      isOver={isOver}
+      canDrop
     >
-      {GlassComponent}
-    </Provider>
+      <WidgetHeader
+        widgetId={widgetId}
+        menuItems={menuItems}
+        visible={isSettingsOpen}
+        setVisible={setIsSettingsOpen}
+        editWidget={editWidget}
+        itemsSearchIcon={[true]}
+        addToWidgetNamePrefix={instrumentNameForHeader}
+        dropdownOpen={dropdownOpen}
+        setDropdownOpen={setIsOpenContextMenuFromWidget}
+        showWidgetSetting={false}
+        isOpenContextMenuFromWidget={isOpenContextMenuFromWidget}
+        setIsOpenContextMenuFromWidget={setIsOpenContextMenuFromWidget}
+        openInstrumentsModal={openInstrumentModal}
+        rightBtns={showOrderButton && <OrderButton onClick={orderBtnClick} />}
+      />
+      <WidgetContentWrapper
+        refWrapper={refWrapper}
+        {...props}
+      >
+        {renderContent()}
+        {isOpenEmptyAction && (
+          <InstrumentSearch
+            setOpen={setIsOpenEmptyAction}
+            isOpen={isOpenEmptyAction}
+            variant="single"
+            widgetId={widgetId}
+            addInstruments={choosenInstrumentFromSearchHandler}
+          />
+        )}
+        <ContextMenuOverlay {...contextMenuProps} />
+      </WidgetContentWrapper>
+    </DNDWrapper>
   );
 };
diff --git a/src/widgets/Glass/GlassBase.tsx b/src/widgets/Glass/GlassBase.tsx
deleted file mode 100644
index 333d9edf3..000000000
--- a/src/widgets/Glass/GlassBase.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-import React, { FC } from 'react';
-
-import { DNDWrapper } from '@components/DNDWrapper';
-import { InstrumentSearch } from '@components/InstrumentSearch';
-import { OrderButton } from '@components/OrderButton';
-import WidgetContentWrapper from '@components/WidgetContentWrapper';
-import WidgetHeader from '@components/WidgetHeader';
-import { useDropInstrument } from '@hooks/dnd';
-import { ContextMenuOverlay } from '@uikit/ContextMenuOverlay';
-import { useWidgetHeaderName } from '@utils/useWidgetName';
-
-import { GlassContent } from './GlassContent';
-import { useGlassFacade, useWidgetGlassFormFacade } from './logic/hooks';
-import { useColumns } from './logic/hooks/useColumns';
-import { useGlassView } from './logic/hooks/useGlassView';
-import { usePlugin } from './plugins/PluginContext';
-
-import type { SelectedInstrument } from './logic/hooks/useSelectedInstrument';
-import type { GlassWidgetProperties } from './properties/types';
-import type { WidgetContentBasicProps } from 'types/Widgets';
-
-import './widgetGlass.scss';
-
-export const GlassBase: FC<WidgetContentBasicProps<GlassWidgetProperties> & SelectedInstrument> = (props) => {
-  const {
-    dropdownOpen,
-    choosenInstrumentFromSearch,
-    refWrapper,
-    changeInstrumentByDnd,
-    choosenInstrumentFromSearchHandler,
-    isOver,
-    choosenOption,
-    isSapfirInstrument,
-    menuItems,
-    isOpenContextMenuFromWidget,
-    setIsOpenContextMenuFromWidget,
-    depthCount,
-    bestPriceIndication,
-    displayMyFirmOrders,
-    view,
-  } = useWidgetGlassFormFacade(props);
-
-  const { dropRef } = useDropInstrument((data) => {
-    if (data.properties.issKey) {
-      changeInstrumentByDnd(data.properties.issKey);
-    }
-  });
-  const { widgetId } = props;
-
-  const { sides, editWidget } = useGlassFacade({
-    choosenInstrumentFromSearch,
-    choosenOption,
-    depthCount,
-    bestPriceIndication,
-    displayMyFirmOrders,
-  });
-
-  const {
-    isSettingsOpen,
-    setIsSettingsOpen,
-    openInstrumentModal,
-    isOpenEmptyAction,
-    setIsOpenEmptyAction,
-    contextMenuProps,
-    onRow,
-  } = useGlassView({ choosenInstrumentFromSearch });
-
-  const instrumentNameForHeader = useWidgetHeaderName(choosenInstrumentFromSearch);
-
-  const { uiConfig, actions, tableView } = usePlugin() ?? {};
-
-  const { columns, settingsItems } = useColumns({ columnsConfig: tableView?.columns });
-
-  return (
-    <DNDWrapper
-      ref={dropRef}
-      isOver={isOver}
-      canDrop
-    >
-      <WidgetHeader
-        widgetId={widgetId}
-        menuItems={menuItems}
-        visible={isSettingsOpen}
-        setVisible={setIsSettingsOpen}
-        editWidget={editWidget}
-        itemsSearchIcon={[true]}
-        addToWidgetNamePrefix={instrumentNameForHeader}
-        dropdownOpen={dropdownOpen}
-        setDropdownOpen={setIsOpenContextMenuFromWidget}
-        isOpenContextMenuFromWidget={isOpenContextMenuFromWidget}
-        setIsOpenContextMenuFromWidget={setIsOpenContextMenuFromWidget}
-        openInstrumentsModal={openInstrumentModal}
-        items={settingsItems}
-        showWidgetSetting={view === 'table'}
-        rightBtns={
-          uiConfig?.orderButton?.visible && (
-            <OrderButton
-              onClick={actions?.orderBtnClick}
-              title={uiConfig.orderButton.tooltipTitle}
-              disabled={uiConfig.orderButton.disabled}
-            />
-          )
-        }
-      />
-      <WidgetContentWrapper
-        refWrapper={refWrapper}
-        {...props}
-      >
-        <GlassContent
-          sides={sides}
-          tableViewColumns={columns}
-          depthCount={depthCount}
-          bestPriceIndication={bestPriceIndication}
-          displayMyFirmOrders={displayMyFirmOrders}
-          view={view}
-          containerRef={refWrapper}
-          choosenInstrumentFromSearch={choosenInstrumentFromSearch}
-          isSapfirInstrument={isSapfirInstrument}
-          onRow={onRow}
-        />
-        {isOpenEmptyAction && (
-          <InstrumentSearch
-            setOpen={setIsOpenEmptyAction}
-            isOpen={isOpenEmptyAction}
-            variant="single"
-            widgetId={widgetId}
-            addInstruments={choosenInstrumentFromSearchHandler}
-          />
-        )}
-        <ContextMenuOverlay {...contextMenuProps} />
-      </WidgetContentWrapper>
-    </DNDWrapper>
-  );
-};
diff --git a/src/widgets/Glass/GlassContent.tsx b/src/widgets/Glass/GlassContent.tsx
deleted file mode 100644
index 821f26bdf..000000000
--- a/src/widgets/Glass/GlassContent.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import React, { FC, MutableRefObject } from 'react';
-
-import EmptyWidgetDisplay from '@components/EmptyWidgetDisplay';
-import { Contract } from '@modules/contracts';
-import { usePlugin } from '@widgets/Glass/plugins/PluginContext';
-import { BaseViewProps, Price, ViewType } from '@widgets/Glass/types';
-
-import { CommonView } from './components/CommonView';
-import { TableView } from './components/TableView';
-import { ViewColumn } from './components/TableView/types';
-
-export type GlassContentProps = {
-  /** Массив объектов с данными о ценах и объемах для каждой стороны стакана */
-  sides: Price[];
-  /** Конфиг колонок для режима отображения `table` */
-  tableViewColumns: ViewColumn<Price>[];
-  /** Ключ выбранного инструмента из поиска (issKey контракта) */
-  choosenInstrumentFromSearch: Contract['issKey'];
-  /** Тип отображения компонента (например, 'four-col-1', 'table' и т.д.) */
-  view: ViewType;
-  /** Реф на родительский контейнер компонента для отслеживания его размеров */
-  containerRef: MutableRefObject<HTMLDivElement | null>;
-  /** Флаг, указывающий является ли инструмент инструментом Сапфир */
-  isSapfirInstrument: boolean;
-} & BaseViewProps;
-
-export const GlassContent: FC<GlassContentProps> = ({
-  view,
-  sides,
-  choosenInstrumentFromSearch,
-  containerRef,
-  tableViewColumns,
-  ...props
-}) => {
-  const { uiConfig } = usePlugin() ?? {};
-
-  if (!choosenInstrumentFromSearch) {
-    return (
-      <EmptyWidgetDisplay
-        customErrorFields={uiConfig?.noData}
-        widgetType="glass"
-      />
-    );
-  }
-
-  if (sides.length > 0) {
-    switch (view) {
-      case 'four-col-1':
-      case 'four-col-2':
-      case 'four-col-3':
-        return (
-          <CommonView
-            type={view}
-            sides={sides}
-            choosenInstrumentFromSearch={choosenInstrumentFromSearch}
-            containerRef={containerRef}
-            {...props}
-          />
-        );
-      case 'table':
-        return (
-          <TableView
-            columns={tableViewColumns}
-            data={sides}
-            {...props}
-          />
-        );
-      default:
-        return null;
-    }
-  }
-
-  return (
-    <EmptyWidgetDisplay
-      customErrorFields={uiConfig?.noData}
-      widgetType="glassNoData"
-    />
-  );
-};
diff --git a/src/widgets/Glass/components/CommonView/CommonView.module.scss b/src/widgets/Glass/components/CommonView/CommonView.module.scss
deleted file mode 100644
index 93577525a..000000000
--- a/src/widgets/Glass/components/CommonView/CommonView.module.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-@import 'colors.scss';
-@import 'mixins.module.scss';
-
-.table-container {
-  display: flex;
-  width: 100%;
-
-  &_vertical {
-    @extend .table-container;
-
-    flex-direction: column-reverse;
-  }
-
-  &_horizontal {
-    @extend .table-container;
-
-    flex-direction: row;
-  }
-}
diff --git a/src/widgets/Glass/components/CommonView/CommonView.tsx b/src/widgets/Glass/components/CommonView/CommonView.tsx
deleted file mode 100644
index d9de0c326..000000000
--- a/src/widgets/Glass/components/CommonView/CommonView.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React, { MutableRefObject } from 'react';
-
-import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-import { useScrollToBestPrice } from '@widgets/Glass/logic/hooks/useScrollToBestPrice';
-
-import { GlassTable } from '../GlassTable';
-import { Header } from '../Header';
-import { HeaderCell } from '../HeaderCell';
-
-import styles from './CommonView.module.scss';
-import { config } from './config';
-import { useTable } from './useTable';
-
-import type { CommonViewType } from './types';
-import type { Contract } from '@modules/contracts';
-import type { BaseViewProps, Price } from '@widgets/Glass/types';
-
-export type CommonViewProps = {
-  sides: Price[];
-  containerRef: MutableRefObject<HTMLDivElement | null>;
-  choosenInstrumentFromSearch: Contract['issKey'];
-  isSapfirInstrument: boolean;
-  type: CommonViewType;
-} & BaseViewProps;
-
-export const CommonView = ({ type, sides, containerRef, onRow, ...props }: CommonViewProps) => {
-  const { headerCells, scrollStrategy, orientation } = config[type];
-
-  const widgetId = useWidgetIdContext();
-
-  const { bidColumns, bidDataSource, askColumns, askDataSource } = useTable({
-    ...props,
-    data: sides,
-    view: type,
-    widgetId,
-  });
-
-  const { anchorRef } = useScrollToBestPrice({ containerRef, scrollStrategy });
-
-  return (
-    <>
-      <Header>
-        {headerCells.map((cell) => (
-          <HeaderCell
-            key={cell.title}
-            align={cell.align}
-          >
-            {cell.title}
-          </HeaderCell>
-        ))}
-      </Header>
-      <div className={styles[`table-container_${orientation}`]}>
-        <GlassTable
-          dataSource={bidDataSource}
-          columns={bidColumns}
-          onRow={onRow}
-        />
-        <div ref={anchorRef} />
-        <GlassTable
-          dataSource={type === 'four-col-1' ? askDataSource : [...askDataSource].reverse()}
-          columns={askColumns}
-          onRow={onRow}
-        />
-      </div>
-    </>
-  );
-};
diff --git a/src/widgets/Glass/components/CommonView/config.ts b/src/widgets/Glass/components/CommonView/config.ts
deleted file mode 100644
index 6edeea7e5..000000000
--- a/src/widgets/Glass/components/CommonView/config.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import type { CommonViewType, ViewConfig } from './types';
-
-export const config: Record<CommonViewType, ViewConfig> = {
-  'four-col-1': {
-    headerCells: [{ title: 'Бид' }, { title: 'Аск', align: 'right' }],
-    scrollStrategy: 'top',
-    orientation: 'horizontal',
-  },
-  'four-col-2': {
-    headerCells: [{ title: 'Бид / Аск' }, { title: 'Цена', align: 'right' }],
-    scrollStrategy: 'best',
-    orientation: 'vertical',
-  },
-  'four-col-3': {
-    headerCells: [{ title: 'Бид' }, { title: 'Цена', align: 'center' }, { title: 'Аск', align: 'right' }],
-    scrollStrategy: 'best',
-    orientation: 'vertical',
-  },
-};
diff --git a/src/widgets/Glass/components/CommonView/index.ts b/src/widgets/Glass/components/CommonView/index.ts
deleted file mode 100644
index 3e0180ab8..000000000
--- a/src/widgets/Glass/components/CommonView/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { CommonView, type CommonViewProps } from './CommonView';
diff --git a/src/widgets/Glass/components/CommonView/types.ts b/src/widgets/Glass/components/CommonView/types.ts
deleted file mode 100644
index 563b0b811..000000000
--- a/src/widgets/Glass/components/CommonView/types.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import type { HeaderCellProps } from '../HeaderCell';
-import type { ViewType } from '@widgets/Glass/types';
-
-export type CommonViewType = Exclude<ViewType, 'table'>;
-
-export type HeaderCellItem = {
-  title: string;
-  align?: HeaderCellProps['align'];
-};
-
-export type ScrollStrategy = 'top' | 'best';
-
-export type ViewConfig = {
-  headerCells: HeaderCellItem[];
-  scrollStrategy: ScrollStrategy;
-  orientation: 'horizontal' | 'vertical';
-};
diff --git a/src/widgets/Glass/components/CommonView/useTable.tsx b/src/widgets/Glass/components/CommonView/useTable.tsx
deleted file mode 100644
index 3a05bcebb..000000000
--- a/src/widgets/Glass/components/CommonView/useTable.tsx
+++ /dev/null
@@ -1,131 +0,0 @@
-import React, { useMemo } from 'react';
-
-import { Contract } from '@modules/contracts';
-import Tooltip from '@uikit/Tooltip';
-import { getPercentage } from '@widgets/Glass/logic/utils/getPercentage';
-import { getAskPricePosition, getBidPricePosition } from '@widgets/Glass/logic/utils/getPricePosition';
-import { toAntdFourColumnsFormat } from '@widgets/Glass/logic/utils/toAntdFourColumnsFormat.util';
-import { usePlugin } from '@widgets/Glass/plugins/PluginContext';
-
-import { OrderBookCell } from '../OrderBookCell';
-
-import { CommonViewType } from './types';
-
-import type { IBuyAntdData, ISellAntdData, Price, TableColumn } from '@widgets/Glass/types';
-
-type UseTableProps = {
-  data: Price[];
-  bestPriceIndication: boolean;
-  displayMyFirmOrders: boolean;
-  depthCount: number;
-  widgetId: number;
-  choosenInstrumentFromSearch: Contract['issKey'];
-  isSapfirInstrument: boolean;
-  view: CommonViewType;
-};
-
-export function useTable({
-  data,
-  bestPriceIndication,
-  displayMyFirmOrders,
-  depthCount,
-  widgetId,
-  choosenInstrumentFromSearch,
-  isSapfirInstrument,
-  view,
-}: UseTableProps) {
-  const { uiConfig } = usePlugin() ?? {};
-
-  const bidColumns: TableColumn<IBuyAntdData>[] = useMemo(
-    () => [
-      {
-        title: 'Бид',
-        dataIndex: 'buy',
-        key: 'buy',
-        render: (text: string, record) => (
-          <Tooltip title={uiConfig?.cellTooltip}>
-            <div>
-              <OrderBookCell
-                type="bid"
-                record={record}
-                percentage={getPercentage(data, record)}
-                selfPercentage={getPercentage(data, record, 'selfQuantity')}
-                bestPriceIndication={bestPriceIndication}
-                displayMyFirmOrders={displayMyFirmOrders}
-                pricePosition={getBidPricePosition(view)}
-                choosenInstrumentFromSearch={choosenInstrumentFromSearch}
-                widgetId={widgetId}
-                canCreateOrder={!data.some((item) => item.buysell.toLowerCase() === 'sell' && item.isSelfOrder)}
-                isSapfirInstrument={isSapfirInstrument}
-              />
-            </div>
-          </Tooltip>
-        ),
-      },
-    ],
-    [
-      bestPriceIndication,
-      choosenInstrumentFromSearch,
-      data,
-      displayMyFirmOrders,
-      isSapfirInstrument,
-      uiConfig?.cellTooltip,
-      view,
-      widgetId,
-    ],
-  );
-  const bidDataSource = useMemo(
-    () => toAntdFourColumnsFormat('buy', data, bidColumns).slice(0, depthCount),
-    [bidColumns, data, depthCount],
-  );
-
-  const askColumns: TableColumn<ISellAntdData>[] = useMemo(
-    () => [
-      {
-        title: 'Аск',
-        dataIndex: 'sell',
-        key: 'sell',
-        render: (text: string, record) => (
-          <Tooltip title={uiConfig?.cellTooltip}>
-            <div>
-              <OrderBookCell
-                type="ask"
-                record={record}
-                percentage={getPercentage(data, record)}
-                selfPercentage={getPercentage(data, record, 'selfQuantity')}
-                bestPriceIndication={bestPriceIndication}
-                displayMyFirmOrders={displayMyFirmOrders}
-                choosenInstrumentFromSearch={choosenInstrumentFromSearch}
-                pricePosition={getAskPricePosition(view)}
-                widgetId={widgetId}
-                canCreateOrder={!data.some((item) => item.buysell.toLowerCase() === 'buy' && item.isSelfOrder)}
-                isSapfirInstrument={isSapfirInstrument}
-              />
-            </div>
-          </Tooltip>
-        ),
-      },
-    ],
-    [
-      bestPriceIndication,
-      choosenInstrumentFromSearch,
-      data,
-      displayMyFirmOrders,
-      isSapfirInstrument,
-      uiConfig?.cellTooltip,
-      view,
-      widgetId,
-    ],
-  );
-  const askDataSource = useMemo(
-    () => toAntdFourColumnsFormat('sell', data, askColumns).reverse().slice(0, depthCount),
-    [askColumns, data, depthCount],
-  );
-
-  return {
-    bidColumns,
-    bidDataSource,
-    askColumns,
-    askDataSource,
-  };
-}
diff --git a/src/widgets/Glass/components/GlassTable/GlassTable.tsx b/src/widgets/Glass/components/GlassTable/GlassTable.tsx
deleted file mode 100644
index 61c314a79..000000000
--- a/src/widgets/Glass/components/GlassTable/GlassTable.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Table, TableProps } from 'antd';
-import { ColumnType } from 'antd/es/table';
-import React from 'react';
-
-import { EMPTY_TEXT } from '@widgets/Glass/constants';
-
-import styles from './GlassTable.module.scss';
-
-export type GlassTableProps<T> = {
-  columns: ColumnType<T>[];
-  dataSource: T[];
-} & Pick<TableProps<T>, 'onRow'>;
-
-export const GlassTable = <T,>({ columns, dataSource, onRow }: GlassTableProps<T>) => (
-  <Table
-    columns={columns}
-    dataSource={dataSource}
-    className={styles.table}
-    pagination={false}
-    locale={{ emptyText: EMPTY_TEXT }}
-    onRow={onRow}
-  />
-);
diff --git a/src/widgets/Glass/components/GlassTable/index.ts b/src/widgets/Glass/components/GlassTable/index.ts
deleted file mode 100644
index 656493aca..000000000
--- a/src/widgets/Glass/components/GlassTable/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { GlassTable } from './GlassTable';
diff --git a/src/widgets/Glass/components/HeaderCell/index.tsx b/src/widgets/Glass/components/HeaderCell/index.tsx
index c23ad2dd0..4952f9fa7 100644
--- a/src/widgets/Glass/components/HeaderCell/index.tsx
+++ b/src/widgets/Glass/components/HeaderCell/index.tsx
@@ -4,7 +4,7 @@ import React from 'react';
 
 import styles from './index.module.scss';
 
-export type HeaderCellProps = ColProps & {
+type HeaderCellProps = ColProps & {
   align?: 'left' | 'center' | 'right';
 };
 
diff --git a/src/widgets/Glass/components/OrderBookCell/getFillDirection.ts b/src/widgets/Glass/components/OrderBookCell/getFillDirection.ts
deleted file mode 100644
index 3f7cf4b00..000000000
--- a/src/widgets/Glass/components/OrderBookCell/getFillDirection.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import type { CellProps } from '@widgets/Glass/types';
-
-export const getFillDirection = (type: CellProps['type'], pricePosition: CellProps['pricePosition']) => {
-  if (pricePosition === 'left') {
-    return 'right';
-  }
-  if (pricePosition === 'right') {
-    return 'left';
-  }
-  return type === 'ask' ? 'right' : 'left';
-};
diff --git a/src/widgets/Glass/components/OrderBookCell/index.ts b/src/widgets/Glass/components/OrderBookCell/index.ts
deleted file mode 100644
index e5e441eb4..000000000
--- a/src/widgets/Glass/components/OrderBookCell/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { OrderBookCell } from './OrderBookCell';
diff --git a/src/widgets/Glass/components/TableView/TableView.module.scss b/src/widgets/Glass/components/TableView/TableView.module.scss
deleted file mode 100644
index 1ec162314..000000000
--- a/src/widgets/Glass/components/TableView/TableView.module.scss
+++ /dev/null
@@ -1,96 +0,0 @@
-@import 'colors.scss';
-@import 'mixins.module.scss';
-
-$scrollbar-size: 5px;
-
-@mixin table-scrollbar {
-  scrollbar-width: auto;
-  scrollbar-color: auto;
-
-  &::-webkit-scrollbar {
-    width: $scrollbar-size;
-    height: $scrollbar-size;
-  }
-
-  &::-webkit-scrollbar-thumb {
-    background: $surface-scroll-default;
-    border-radius: 999px;
-  }
-
-  &::-webkit-scrollbar-track {
-    background: transparent;
-  }
-}
-
-.tableWrapper {
-  height: 100%;
-  min-height: 0;
-  overflow: auto hidden;
-
-  @include table-scrollbar;
-}
-
-.table {
-  background-color: $bg-widget-analytics-data;
-
-  :global {
-    .ant-table {
-      background-color: $bg-widget-analytics-data;
-
-      .ant-table-header {
-        background-color: $bg-widget-analytics-data;
-        border-radius: 0;
-        border-bottom: 1px solid $line-interface-primary-table;
-      }
-
-      .ant-table-thead {
-        background-color: $bg-widget-analytics-data;
-
-        .ant-table-cell {
-          background: $bg-base-non-transparent;
-          color: $text-interface-tertiary-notice;
-          padding: 8px 16px;
-          white-space: nowrap;
-          overflow: hidden;
-          text-overflow: ellipsis;
-          border-start-start-radius: 0 !important;
-
-          &::before {
-            display: none;
-          }
-
-          @include font-params(500, 12px, 16px);
-        }
-      }
-
-      .ant-table-cell {
-        padding: 0;
-        border: none;
-      }
-
-      .ant-table-cell-scrollbar {
-        background: $bg-base-non-transparent;
-        border: none;
-        outline: none;
-        border-radius: 0;
-        border-start-end-radius: 0 !important;
-        box-shadow: none;
-      }
-
-      .ant-table-row > .ant-table-cell-row-hover {
-        border: none;
-        background: $bg-widget-analytics-data;
-      }
-
-      .ant-table-container {
-        border-radius: 0;
-        background: $bg-widget-analytics-data;
-      }
-
-      .ant-table-content,
-      .ant-table-body {
-        @include table-scrollbar;
-      }
-    }
-  }
-}
diff --git a/src/widgets/Glass/components/TableView/TableView.tsx b/src/widgets/Glass/components/TableView/TableView.tsx
deleted file mode 100644
index cd889aec9..000000000
--- a/src/widgets/Glass/components/TableView/TableView.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { Table } from 'antd';
-import { TableRef } from 'antd/es/table';
-import React, { useMemo, useRef } from 'react';
-
-import { useTableScrollSizes } from '@hooks/table/useTableScrollSizes';
-import { EMPTY_TEXT } from '@widgets/Glass/constants';
-import { usePlugin } from '@widgets/Glass/plugins/PluginContext';
-
-import { SCROLLBAR_SIZE, TABLE_HEADER_HEIGHT, TABLE_ROW_HEIGHT } from './const';
-import { useScrollToBestPrice } from './hooks/useScrollToBestPrice';
-import styles from './TableView.module.scss';
-import { createRenderCell } from './utils/createRenderCell';
-
-import type { ViewColumn } from './types';
-import type { BaseViewProps, Price } from '@widgets/Glass/types';
-
-type TableViewProps<T> = {
-  columns: ViewColumn<T>[];
-  data: T[];
-} & BaseViewProps;
-
-export const TableView = <T extends Price>({
-  columns,
-  data,
-  bestPriceIndication,
-  displayMyFirmOrders,
-  depthCount,
-  onRow,
-}: TableViewProps<T>) => {
-  const tableRef = useRef<TableRef>(null);
-
-  const { uiConfig } = usePlugin() ?? {};
-
-  const {
-    setContainerRef: setTableWrapperRef,
-    containerSizes,
-    containerNode: wrapperNode,
-  } = useTableScrollSizes({
-    offsetY: TABLE_HEADER_HEIGHT,
-    offsetX: SCROLLBAR_SIZE,
-  });
-
-  const cols = useMemo(
-    () =>
-      columns.map((col) => ({
-        width: 100,
-        ...col,
-        render: createRenderCell(col, {
-          showBestPrice: bestPriceIndication,
-          showOwnOrders: displayMyFirmOrders,
-          tooltip: uiConfig?.cellTooltip,
-        }),
-      })),
-    [bestPriceIndication, columns, displayMyFirmOrders, uiConfig?.cellTooltip],
-  );
-
-  const { groupedData, bestPriceIndex } = useMemo(() => {
-    const sorted = [...data].sort((a, b) => b.price - a.price);
-    const ask = sorted.filter((p) => p.buysell.toLowerCase() === 'sell').slice(-depthCount);
-    const bid = sorted.filter((p) => p.buysell.toLowerCase() === 'buy').slice(0, depthCount);
-
-    return { groupedData: [...ask, ...bid], bestPriceIndex: ask.length };
-  }, [data, depthCount]);
-
-  const hasHorizontalScroll = useMemo(
-    () => cols.reduce((acc, col) => acc + col.width, 0) > containerSizes.x,
-    [cols, containerSizes.x],
-  );
-
-  const hasVerticalScroll = useMemo(
-    () => groupedData.length * TABLE_ROW_HEIGHT > containerSizes.y,
-    [containerSizes.y, groupedData.length],
-  );
-
-  useScrollToBestPrice({
-    wrapperNode,
-    tableRef,
-    containerSizes,
-    bestPriceIndex,
-    hasHorizontalScroll,
-  });
-
-  const scroll = useMemo(
-    () => ({ y: hasVerticalScroll ? containerSizes.y : undefined }),
-    [containerSizes.y, hasVerticalScroll],
-  );
-
-  return (
-    <div
-      className={styles.tableWrapper}
-      ref={setTableWrapperRef}
-    >
-      <Table
-        tableLayout="fixed"
-        className={styles.table}
-        ref={tableRef}
-        dataSource={groupedData}
-        columns={cols}
-        onRow={onRow}
-        showHeader
-        rowKey={(record) => record.extra?.key ?? `${record.buysell}-${record.price}-${record.quantity}`}
-        scroll={scroll}
-        pagination={false}
-        locale={{ emptyText: EMPTY_TEXT }}
-      />
-    </div>
-  );
-};
diff --git a/src/widgets/Glass/components/TableView/components/TableViewCell/TableViewCell.module.scss b/src/widgets/Glass/components/TableView/components/TableViewCell/TableViewCell.module.scss
deleted file mode 100644
index e12477d03..000000000
--- a/src/widgets/Glass/components/TableView/components/TableViewCell/TableViewCell.module.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-@import 'colors.scss';
-
-$row-height: 32px;
-
-.cell {
-  padding: 8px 16px;
-  height: $row-height;
-  box-sizing: border-box;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  font-weight: 500;
-
-  &_bid {
-    @extend .cell;
-
-    background-color: $surface-chart-change-increase-secondary;
-    border-bottom: 1px solid $surface-chart-graph-increase-quanteriary;
-    color: $text-changes-increase-on-color-primary;
-  }
-
-  &_ask {
-    @extend .cell;
-
-    background-color: $surface-chart-change-decrease-secondary;
-    border-bottom: 1px solid $surface-chart-graph-decrease-quanteriary;
-    color: $text-changes-decrease-on-color-primary;
-  }
-
-  &_own {
-    // TODO: заменить на актуальный токен (TRADERADAR-12304)
-    background-color: $surface-table-my-order;
-    color: $text-interface-primary-value;
-    border-bottom: 1px solid $multicolored-yellow-07;
-  }
-
-  .value {
-    width: min-content;
-
-    &_best {
-      &_bid {
-        background-color: $surface-chart-graph-increase-secondary;
-        color: $text-interface-primary-value;
-        border-radius: 2px;
-      }
-      &_ask {
-        background-color: $text-changes-decrease-primary;
-        color: $text-interface-primary-value;
-        border-radius: 2px;
-      }
-    }
-  }
-}
diff --git a/src/widgets/Glass/components/TableView/components/TableViewCell/TableViewCell.tsx b/src/widgets/Glass/components/TableView/components/TableViewCell/TableViewCell.tsx
deleted file mode 100644
index 3e2ed6519..000000000
--- a/src/widgets/Glass/components/TableView/components/TableViewCell/TableViewCell.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import classNames from 'classnames';
-import React, { FC } from 'react';
-
-import Typography from '@uikit/Typography';
-import { decimalNumbersFormatter } from '@utils/decimalNumberFormatter';
-import { CellType } from '@widgets/Glass/types';
-
-import styles from './TableViewCell.module.scss';
-
-type TableViewCellprops = {
-  type: CellType;
-  value: unknown;
-  isBest?: boolean;
-  isOwn?: boolean;
-  formatNumber?: boolean;
-};
-
-export const TableViewCell: FC<TableViewCellprops> = ({ type, value, isOwn, isBest, formatNumber }) => (
-  <Typography.Title.S
-    bold={false}
-    className={classNames(styles[`cell_${type}`], isOwn && styles.cell_own)}
-  >
-    <span className={classNames(styles.value, isBest && styles[`value_best_${type}`])}>
-      {(typeof value === 'number' || typeof value === 'string') && formatNumber
-        ? decimalNumbersFormatter(value, undefined, true)
-        : String(value ?? '')}
-    </span>
-  </Typography.Title.S>
-);
diff --git a/src/widgets/Glass/components/TableView/components/TableViewCell/index.ts b/src/widgets/Glass/components/TableView/components/TableViewCell/index.ts
deleted file mode 100644
index 54641e1cf..000000000
--- a/src/widgets/Glass/components/TableView/components/TableViewCell/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { TableViewCell } from './TableViewCell';
diff --git a/src/widgets/Glass/components/TableView/const.ts b/src/widgets/Glass/components/TableView/const.ts
deleted file mode 100644
index 05ef4ecc0..000000000
--- a/src/widgets/Glass/components/TableView/const.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export const TABLE_HEADER_HEIGHT = 32;
-
-export const SCROLLBAR_SIZE = 5;
-
-export const TABLE_ROW_HEIGHT = 32;
diff --git a/src/widgets/Glass/components/TableView/hooks/useScrollToBestPrice.ts b/src/widgets/Glass/components/TableView/hooks/useScrollToBestPrice.ts
deleted file mode 100644
index fbc409271..000000000
--- a/src/widgets/Glass/components/TableView/hooks/useScrollToBestPrice.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { TableRef } from 'antd/es/table';
-import { debounce } from 'lodash';
-import { RefObject, useEffect, useRef } from 'react';
-
-import { SCROLLBAR_SIZE, TABLE_ROW_HEIGHT } from '../const';
-
-type UseScrollToBestPriceProps = {
-  wrapperNode: HTMLDivElement | null;
-  tableRef: RefObject<TableRef>;
-  bestPriceIndex: number;
-  containerSizes: { x: number; y: number };
-  hasHorizontalScroll: boolean;
-};
-
-export const useScrollToBestPrice = ({
-  wrapperNode,
-  tableRef,
-  bestPriceIndex,
-  containerSizes,
-  hasHorizontalScroll,
-}: UseScrollToBestPriceProps) => {
-  const paramsRef = useRef({
-    bestPriceIndex,
-    containerSizes,
-    hasHorizontalScroll,
-  });
-
-  useEffect(() => {
-    paramsRef.current = {
-      bestPriceIndex,
-      containerSizes,
-      hasHorizontalScroll,
-    };
-  }, [bestPriceIndex, containerSizes, hasHorizontalScroll]);
-
-  useEffect(() => {
-    if (!wrapperNode) {
-      return;
-    }
-
-    const scrollToBestPrice = debounce(() => {
-      const params = paramsRef.current;
-      const scrollbarOffset = params.hasHorizontalScroll ? SCROLLBAR_SIZE / 2 : 0;
-      const top = params.bestPriceIndex * TABLE_ROW_HEIGHT - params.containerSizes.y / 2 + scrollbarOffset;
-      tableRef.current?.scrollTo({
-        top,
-      });
-    }, 300);
-
-    const resizeObserver = new ResizeObserver(scrollToBestPrice);
-    resizeObserver.observe(wrapperNode);
-
-    scrollToBestPrice();
-
-    return () => {
-      resizeObserver.disconnect();
-    };
-  }, [wrapperNode, tableRef]);
-};
diff --git a/src/widgets/Glass/components/TableView/index.ts b/src/widgets/Glass/components/TableView/index.ts
deleted file mode 100644
index b8868353b..000000000
--- a/src/widgets/Glass/components/TableView/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { TableView } from './TableView';
diff --git a/src/widgets/Glass/components/TableView/types.ts b/src/widgets/Glass/components/TableView/types.ts
deleted file mode 100644
index 24a533fd2..000000000
--- a/src/widgets/Glass/components/TableView/types.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { ColumnType } from 'antd/es/table';
-import type { ReactNode } from 'react';
-
-export type ViewColumn<T> = Pick<ColumnType<T>, 'hidden' | 'dataIndex' | 'align'> & {
-  key: string;
-  title: string;
-  render?: (value: unknown, record: T, defaultRender: (value: unknown) => ReactNode) => ReactNode;
-  formatNumber?: boolean;
-  width?: number;
-};
diff --git a/src/widgets/Glass/components/TableView/utils/createRenderCell.tsx b/src/widgets/Glass/components/TableView/utils/createRenderCell.tsx
deleted file mode 100644
index 515fe89a1..000000000
--- a/src/widgets/Glass/components/TableView/utils/createRenderCell.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from 'react';
-
-import Tooltip from '@uikit/Tooltip';
-
-import { Price } from '@widgets/Glass/types';
-
-import { TableViewCell } from '../components/TableViewCell';
-import { ViewColumn } from '../types';
-
-type RenderCellOptions = {
-  showBestPrice?: boolean;
-  showOwnOrders?: boolean;
-  tooltip?: string;
-};
-
-export const createRenderCell =
-  <T extends Price>(col: ViewColumn<T>, { showBestPrice, showOwnOrders, tooltip }: RenderCellOptions) =>
-  (value: unknown, record: T) => {
-    const defaultRender = (v: unknown) => {
-      const isBid = record.buysell.toLowerCase() === 'buy';
-      return (
-        <Tooltip title={tooltip}>
-          <div>
-            <TableViewCell
-              type={isBid ? 'bid' : 'ask'}
-              value={v}
-              isBest={col.dataIndex === 'price' && record.isBestPrice && showBestPrice}
-              isOwn={col.dataIndex !== 'buysell' && record.isSelfOrder && showOwnOrders}
-              formatNumber={col.formatNumber}
-            />
-          </div>
-        </Tooltip>
-      );
-    };
-
-    return col.render ? col.render(value, record, defaultRender) : defaultRender(value);
-  };
diff --git a/src/widgets/Glass/components/SideDropdown/index.module.scss b/src/widgets/Glass/components/ViewTypeDropdown/index.module.scss
similarity index 100%
rename from src/widgets/Glass/components/SideDropdown/index.module.scss
rename to src/widgets/Glass/components/ViewTypeDropdown/index.module.scss
diff --git a/src/widgets/Glass/components/SideDropdown/index.tsx b/src/widgets/Glass/components/ViewTypeDropdown/index.tsx
similarity index 56%
rename from src/widgets/Glass/components/SideDropdown/index.tsx
rename to src/widgets/Glass/components/ViewTypeDropdown/index.tsx
index 34a7d2354..72898c8a5 100644
--- a/src/widgets/Glass/components/SideDropdown/index.tsx
+++ b/src/widgets/Glass/components/ViewTypeDropdown/index.tsx
@@ -4,45 +4,48 @@ import React, { ReactNode, useState } from 'react';
 
 import { ArrowRightLight } from '@components/Icons/ArrowRightLight';
 import { CheckedView } from '@components/Icons/CheckedView';
+import { OneColumn } from '@components/Icons/OneColumn';
+import { ThreeColumn } from '@components/Icons/ThreeColumn';
+import { TwoColumns } from '@components/Icons/TwoColumns';
 import { TextMedium } from '@components/TextMad';
 import widgetHeaderStyles from '@components/WidgetHeader/widgetHeader.module.scss';
 
+import { ViewType } from '../../types';
+
 import styles from './index.module.scss';
 
-export type ItemsType<T extends string | number = string> = {
-  value: T;
+type ItemsTypeViewConfig = {
+  value: ViewType;
   label: string;
-  icon?: ReactNode;
+  icon: ReactNode;
 };
 
-export type SideDropdownProps<T extends string | number = string> = {
-  title: string;
-  items: ItemsType<T>[];
-  value: T;
-  onChange(view: T): void;
-  isLeftView: boolean;
+const VIEW_TYPES: ItemsTypeViewConfig[] = [
+  { value: 'four-col-1', label: 'Горизонтальный', icon: <OneColumn /> },
+  { value: 'four-col-2', label: 'Вертикальный (2 колонки)', icon: <TwoColumns /> },
+  { value: 'four-col-3', label: 'Вертикальный (3 колонки)', icon: <ThreeColumn /> },
+];
+
+type ViewTypeDropdownProps = {
+  view: ViewType;
+  onViewChange(view: ViewType): void;
+  leftViewTypeDropdown: boolean;
 };
 
-export const SideDropdown = <T extends string | number = string>({
-  title,
-  value,
-  items,
-  onChange: onViewChange,
-  isLeftView,
-}: SideDropdownProps<T>) => {
+export const ViewTypeDropdown = ({ view, onViewChange, leftViewTypeDropdown }: ViewTypeDropdownProps) => {
   const [isOpen, setIsOpen] = useState(false);
 
-  const handleViewChange = (nextView: T) => {
+  const handleViewChange = (nextView: ViewType) => {
     setIsOpen(false);
     onViewChange(nextView);
   };
 
   const dropdownRender = () => (
     <div
-      style={isLeftView ? { transform: 'translateX(-100%)' } : {}}
+      style={leftViewTypeDropdown ? { transform: 'translateX(-100%)' } : {}}
       className={styles.menu}
     >
-      {items.map((item) => (
+      {VIEW_TYPES.map((item) => (
         <button
           type="button"
           key={item.value}
@@ -53,7 +56,7 @@ export const SideDropdown = <T extends string | number = string>({
 
           {item.label}
 
-          {item.value === value && <CheckedView className={styles['selected-menu-item-icon']} />}
+          {item.value === view && <CheckedView className={styles['selected-menu-item-icon']} />}
         </button>
       ))}
     </div>
@@ -78,7 +81,7 @@ export const SideDropdown = <T extends string | number = string>({
           width: '100%',
         }}
       >
-        <TextMedium>{title}</TextMedium>
+        <TextMedium>Тип отображения</TextMedium>
         <ArrowRightLight className={widgetHeaderStyles.arrowRight} />
       </button>
     </Dropdown>
diff --git a/src/widgets/Glass/components/cells/AskCell/AskCell.tsx b/src/widgets/Glass/components/cells/AskCell/AskCell.tsx
new file mode 100644
index 000000000..0e41ad968
--- /dev/null
+++ b/src/widgets/Glass/components/cells/AskCell/AskCell.tsx
@@ -0,0 +1,82 @@
+import cn from 'classnames';
+import React, { FC, useRef } from 'react';
+
+import { decimalNumbersGlassFormatter } from '@utils/decimalNumberFormatter';
+import { CellProps } from '@widgets/Glass/types';
+
+import styles from '../Cells.module.scss';
+import { CellDropdown } from '../components/CellDropdown/CellDropdown';
+
+export const AskCell: FC<CellProps> = ({
+  record,
+  percentage,
+  selfPercentage,
+  bestPriceIndication,
+  displayMyFirmOrders,
+  pricePosition = 'center',
+  choosenInstrumentFromSearch,
+  widgetId,
+  canCreateOrder,
+  isSapfirInstrument,
+}) => {
+  const rowRef = useRef<HTMLDivElement>(null);
+
+  return (
+    <div
+      ref={rowRef}
+      className={cn(
+        styles.rowWrapper,
+        pricePosition === 'right' && styles.rowWrapper_rightPricePosition,
+        pricePosition === 'left' && styles.rowWrapper_leftPricePosition,
+        pricePosition === 'center' && styles.rowWrapper_askCenterPricePosition,
+      )}
+    >
+      <div
+        className={cn(
+          styles.background,
+          styles.background_ask,
+          pricePosition === 'right' && styles.background_rightPricePosition,
+          pricePosition === 'left' && styles.background_leftPricePosition,
+        )}
+        style={{
+          width: `${percentage}%`,
+        }}
+      />
+      {displayMyFirmOrders && (
+        <div
+          className={cn(
+            styles.backgroundSelf,
+            styles.backgroundSelf_ask,
+            pricePosition === 'right' && styles.backgroundSelf_rightPricePosition,
+            pricePosition === 'left' && styles.backgroundSelf_lefttPricePosition,
+          )}
+          style={{
+            width: `${selfPercentage}%`,
+          }}
+        />
+      )}
+      <div
+        className={cn(
+          styles.price,
+          record.isSelfOrder && displayMyFirmOrders && styles.price_hightlighted,
+          record.isBestPrice && bestPriceIndication && styles.price_askBest,
+          pricePosition === 'center' && styles.price_askCenter,
+        )}
+      >
+        {decimalNumbersGlassFormatter(record.price)}
+      </div>
+      <div className={styles.ask}>{record.quantity.toLocaleString('ru-Ru')}</div>
+      {isSapfirInstrument && (
+        <CellDropdown
+          rowRef={rowRef}
+          record={record}
+          pricePosition={pricePosition}
+          choosenInstrumentFromSearch={choosenInstrumentFromSearch}
+          widgetId={widgetId}
+          canCreateOrder={canCreateOrder}
+          cellType="ask"
+        />
+      )}
+    </div>
+  );
+};
diff --git a/src/widgets/Glass/components/cells/AskCell/index.ts b/src/widgets/Glass/components/cells/AskCell/index.ts
new file mode 100644
index 000000000..a7adeb8aa
--- /dev/null
+++ b/src/widgets/Glass/components/cells/AskCell/index.ts
@@ -0,0 +1 @@
+export { AskCell } from './AskCell';
diff --git a/src/widgets/Glass/components/OrderBookCell/OrderBookCell.tsx b/src/widgets/Glass/components/cells/BidCell/BidCell.tsx
similarity index 63%
rename from src/widgets/Glass/components/OrderBookCell/OrderBookCell.tsx
rename to src/widgets/Glass/components/cells/BidCell/BidCell.tsx
index 4f3aeba9a..5adcc9841 100644
--- a/src/widgets/Glass/components/OrderBookCell/OrderBookCell.tsx
+++ b/src/widgets/Glass/components/cells/BidCell/BidCell.tsx
@@ -4,12 +4,10 @@ import React, { FC, useRef } from 'react';
 import { decimalNumbersGlassFormatter } from '@utils/decimalNumberFormatter';
 import { CellProps } from '@widgets/Glass/types';
 
-import { CellDropdown } from '../CellDropdown/CellDropdown';
+import styles from '../Cells.module.scss';
+import { CellDropdown } from '../components/CellDropdown/CellDropdown';
 
-import { getFillDirection } from './getFillDirection';
-import styles from './OrderBookCell.module.scss';
-
-export const OrderBookCell: FC<CellProps> = ({
+export const BidCell: FC<CellProps> = ({
   record,
   percentage,
   selfPercentage,
@@ -20,24 +18,25 @@ export const OrderBookCell: FC<CellProps> = ({
   widgetId,
   canCreateOrder,
   isSapfirInstrument,
-  type,
 }) => {
   const rowRef = useRef<HTMLDivElement>(null);
 
-  const fillDirection = getFillDirection(type, pricePosition);
-
   return (
     <div
       ref={rowRef}
       className={cn(
         styles.rowWrapper,
-        pricePosition === 'center' && styles[`rowWrapper_${type}CenterPricePosition`],
-        pricePosition === 'left' && styles.rowWrapper_leftPricePosition,
         pricePosition === 'right' && styles.rowWrapper_rightPricePosition,
+        pricePosition === 'left' && styles.rowWrapper_leftPricePosition,
+        pricePosition === 'center' && styles.rowWrapper_bidCenterPricePosition,
       )}
     >
       <div
-        className={cn(styles.background, styles[`background_${type}`], styles[`background_${fillDirection}`])}
+        className={cn(
+          styles.background,
+          ['right', 'center'].includes(pricePosition) && styles.background_rightPricePosition,
+          pricePosition === 'left' && styles.background_leftPricePosition,
+        )}
         style={{
           width: `${percentage}%`,
         }}
@@ -46,8 +45,8 @@ export const OrderBookCell: FC<CellProps> = ({
         <div
           className={cn(
             styles.backgroundSelf,
-            styles[`backgroundSelf_${type}`],
-            styles[`backgroundSelf_${fillDirection}`],
+            ['right', 'center'].includes(pricePosition) && styles.backgroundSelf_rightPricePosition,
+            pricePosition === 'left' && styles.backgroundSelf_lefttPricePosition,
           )}
           style={{
             width: `${selfPercentage}%`,
@@ -58,13 +57,13 @@ export const OrderBookCell: FC<CellProps> = ({
         className={cn(
           styles.price,
           record.isSelfOrder && displayMyFirmOrders && styles.price_hightlighted,
-          record.isBestPrice && bestPriceIndication && styles[`price_${type}Best`],
-          pricePosition === 'center' && styles[`price_${type}Center`],
+          record.isBestPrice && bestPriceIndication && styles.price_bidBest,
+          pricePosition === 'center' && styles.price_bidCenter,
         )}
       >
         {decimalNumbersGlassFormatter(record.price)}
       </div>
-      <div className={styles[type]}>{record.quantity.toLocaleString('ru-Ru')}</div>
+      <div className={styles.bid}>{record.quantity.toLocaleString('ru-Ru')}</div>
       {isSapfirInstrument && (
         <CellDropdown
           rowRef={rowRef}
@@ -73,7 +72,6 @@ export const OrderBookCell: FC<CellProps> = ({
           choosenInstrumentFromSearch={choosenInstrumentFromSearch}
           widgetId={widgetId}
           canCreateOrder={canCreateOrder}
-          cellType={type}
         />
       )}
     </div>
diff --git a/src/widgets/Glass/components/cells/BidCell/index.ts b/src/widgets/Glass/components/cells/BidCell/index.ts
new file mode 100644
index 000000000..68ebcaef4
--- /dev/null
+++ b/src/widgets/Glass/components/cells/BidCell/index.ts
@@ -0,0 +1 @@
+export { BidCell } from './BidCell';
diff --git a/src/widgets/Glass/components/OrderBookCell/OrderBookCell.module.scss b/src/widgets/Glass/components/cells/Cells.module.scss
similarity index 82%
rename from src/widgets/Glass/components/OrderBookCell/OrderBookCell.module.scss
rename to src/widgets/Glass/components/cells/Cells.module.scss
index 3dd739cfa..a0284006b 100644
--- a/src/widgets/Glass/components/OrderBookCell/OrderBookCell.module.scss
+++ b/src/widgets/Glass/components/cells/Cells.module.scss
@@ -12,6 +12,11 @@
   background: $background-primary !important;
   border-bottom: 1px solid $background-bottom;
 
+  &_ask {
+    padding-right: 16px;
+    padding-left: 8px;
+  }
+
   &_askCenterPricePosition {
     flex-direction: row;
     padding: 6px 8px;
@@ -78,27 +83,25 @@
 
 .background {
   position: absolute;
+  right: 0;
   top: 0;
   height: 100%;
   opacity: 50%;
+  background-color: $surface-chart-graph-increase-under-the-line;
+  border-bottom: 1px solid $text-changes-increase-primary;
   z-index: 0;
 
-  &_bid {
-    background-color: $surface-chart-graph-increase-under-the-line;
-    border-bottom: 1px solid $text-changes-increase-primary;
-  }
-
   &_ask {
     background-color: $surface-chart-graph-decrease-under-the-line;
     border-bottom: 1px solid $text-changes-decrease-primary;
   }
 
-  &_left {
+  &_rightPricePosition {
     left: 0;
     right: auto;
   }
 
-  &_right {
+  &_leftPricePosition {
     left: auto;
     right: 0;
   }
@@ -109,23 +112,20 @@
   right: 0;
   top: 0;
   height: 100%;
+  background-color: $surface-chart-graph-increase-under-the-line;
   z-index: 0;
 
-  &_bid {
-    background-color: $surface-chart-graph-increase-under-the-line;
-  }
-
   &_ask {
     background-color: $surface-chart-graph-decrease-under-the-line;
   }
 
-  &_left {
+  &_rightPricePosition {
     left: 0;
     right: auto;
   }
 
-  &_right {
-    left: auto;
-    right: 0;
+  &_leftPricePosition {
+    left: 0;
+    right: auto;
   }
 }
diff --git a/src/widgets/Glass/components/CellDropdown/CellDropdown.module.scss b/src/widgets/Glass/components/cells/components/CellDropdown/CellDropdown.module.scss
similarity index 100%
rename from src/widgets/Glass/components/CellDropdown/CellDropdown.module.scss
rename to src/widgets/Glass/components/cells/components/CellDropdown/CellDropdown.module.scss
diff --git a/src/widgets/Glass/components/CellDropdown/CellDropdown.tsx b/src/widgets/Glass/components/cells/components/CellDropdown/CellDropdown.tsx
similarity index 96%
rename from src/widgets/Glass/components/CellDropdown/CellDropdown.tsx
rename to src/widgets/Glass/components/cells/components/CellDropdown/CellDropdown.tsx
index 123a254b6..a4acb9158 100644
--- a/src/widgets/Glass/components/CellDropdown/CellDropdown.tsx
+++ b/src/widgets/Glass/components/cells/components/CellDropdown/CellDropdown.tsx
@@ -9,7 +9,7 @@ import { MIN_WIDGET_WIDTH } from '@widgets/Glass/constants';
 
 import { CellProps } from '@widgets/Glass/types';
 
-import { useDropdown } from './hooks/useDropdown/useDropdown';
+import { useDropdown } from '../../hooks/useDropdown/useDropdown';
 
 import styles from './CellDropdown.module.scss';
 
diff --git a/src/widgets/Glass/components/CellDropdown/__tests__/CellDropdown.test.tsx b/src/widgets/Glass/components/cells/components/CellDropdown/__tests__/CellDropdown.test.tsx
similarity index 100%
rename from src/widgets/Glass/components/CellDropdown/__tests__/CellDropdown.test.tsx
rename to src/widgets/Glass/components/cells/components/CellDropdown/__tests__/CellDropdown.test.tsx
diff --git a/src/widgets/Glass/components/CellDropdown/hooks/useDropdown/useDropdown.module.scss b/src/widgets/Glass/components/cells/hooks/useDropdown/useDropdown.module.scss
similarity index 94%
rename from src/widgets/Glass/components/CellDropdown/hooks/useDropdown/useDropdown.module.scss
rename to src/widgets/Glass/components/cells/hooks/useDropdown/useDropdown.module.scss
index 53c83540c..8551a0648 100644
--- a/src/widgets/Glass/components/CellDropdown/hooks/useDropdown/useDropdown.module.scss
+++ b/src/widgets/Glass/components/cells/hooks/useDropdown/useDropdown.module.scss
@@ -1,82 +1,82 @@
-@import 'colors.scss';
-@import 'mixins.module.scss';
-
-.dropdown {
-  @include font-params(400, 12px, 16px);
-  cursor: default;
-  min-width: 193px;
-  max-width: 512px;
-  background-color: var(--thm-bg-tertiary);
-  color: $text-interface-primary-value;
-  text-align: start;
-  padding: 4px 0;
-  box-shadow: 0px 4px 14px 0px $semantic-black-opacity84;
-  position: relative;
-  border: 1px solid $border-dropdown-default;
-  overflow-y: auto;
-
-  &::before {
-    content: '';
-    display: block;
-    position: absolute;
-    top: -4px;
-    left: 0;
-    right: 0;
-    height: 4px;
-    background-color: transparent;
-  }
-}
-
-.title {
-  @include font-params(400, 10px, 14px);
-  padding: 8px;
-
-  color: $text-interface-secondary-label-no-value;
-}
-
-.create {
-  cursor: pointer;
-  display: flex;
-  align-items: center;
-  color: $text-interface-primary-value;
-  padding: 8px;
-  margin-top: 8px;
-  position: relative;
-
-  & > svg {
-    margin-right: 2px;
-  }
-
-  &_disabled {
-    color: $text-interface-disabled;
-    cursor: not-allowed;
-  }
-
-  &_bordered {
-    &::before {
-      content: '';
-      display: block;
-      height: 1px;
-      width: 100%;
-
-      position: absolute;
-      top: -4px;
-      left: 0;
-      border-top: 1px solid $line-interface-primary-table;
-    }
-  }
-
-  &:hover:not(.create_disabled) {
-    background-color: $action-surface-hover;
-  }
-}
-
-.tooltip {
-  max-width: 317px;
-  text-align: center;
-}
-
-.info {
-  cursor: pointer;
-  margin-left: auto;
-}
+@import 'colors.scss';
+@import 'mixins.module.scss';
+
+.dropdown {
+  @include font-params(400, 12px, 16px);
+  cursor: default;
+  min-width: 193px;
+  max-width: 512px;
+  background-color: var(--thm-bg-tertiary);
+  color: $text-interface-primary-value;
+  text-align: start;
+  padding: 4px 0;
+  box-shadow: 0px 4px 14px 0px $semantic-black-opacity84;
+  position: relative;
+  border: 1px solid $border-dropdown-default;
+  overflow-y: auto;
+
+  &::before {
+    content: '';
+    display: block;
+    position: absolute;
+    top: -4px;
+    left: 0;
+    right: 0;
+    height: 4px;
+    background-color: transparent;
+  }
+}
+
+.title {
+  @include font-params(400, 10px, 14px);
+  padding: 8px;
+
+  color: $text-interface-secondary-label-no-value;
+}
+
+.create {
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+  color: $text-interface-primary-value;
+  padding: 8px;
+  margin-top: 8px;
+  position: relative;
+
+  & > svg {
+    margin-right: 2px;
+  }
+
+  &_disabled {
+    color: $text-interface-disabled;
+    cursor: not-allowed;
+  }
+
+  &_bordered {
+    &::before {
+      content: '';
+      display: block;
+      height: 1px;
+      width: 100%;
+
+      position: absolute;
+      top: -4px;
+      left: 0;
+      border-top: 1px solid $line-interface-primary-table;
+    }
+  }
+
+  &:hover:not(.create_disabled) {
+    background-color: $action-surface-hover;
+  }
+}
+
+.tooltip {
+  max-width: 317px;
+  text-align: center;
+}
+
+.info {
+  cursor: pointer;
+  margin-left: auto;
+}
diff --git a/src/widgets/Glass/components/CellDropdown/hooks/useDropdown/useDropdown.tsx b/src/widgets/Glass/components/cells/hooks/useDropdown/useDropdown.tsx
similarity index 97%
rename from src/widgets/Glass/components/CellDropdown/hooks/useDropdown/useDropdown.tsx
rename to src/widgets/Glass/components/cells/hooks/useDropdown/useDropdown.tsx
index 9bfcaf41b..739a917e5 100644
--- a/src/widgets/Glass/components/CellDropdown/hooks/useDropdown/useDropdown.tsx
+++ b/src/widgets/Glass/components/cells/hooks/useDropdown/useDropdown.tsx
@@ -1,134 +1,134 @@
-import cn from 'classnames';
-import React, { useCallback, useRef, useState } from 'react';
-
-import { AddPlusIcon } from '@components/Icons/AddPlusIcon';
-import { InfoIcon2 } from '@components/Icons/InfoIcon2';
-import { Contract, useContracts } from '@modules/contracts';
-import { openAcceptTicketModal, openCancelTicketModal, openCreateDepthTicketModal } from '@store/slices/modals';
-import { dispatch } from '@store/store';
-import Tooltip from '@uikit/Tooltip';
-import { getAcceptDescription } from '@widgets/Glass/logic/utils/getAcceptDescription';
-import { getCreateDescription } from '@widgets/Glass/logic/utils/getCreateDescription';
-import { getInstrumentTitle } from '@widgets/Glass/logic/utils/getInstrumentTitle';
-import { getIsCreateDisabled } from '@widgets/Glass/logic/utils/getIsCreateDisabled';
-import { getOrderItems } from '@widgets/Glass/logic/utils/getOrderItems';
-import { getOrderType } from '@widgets/Glass/logic/utils/getOrderType';
-import { Price } from '@widgets/Glass/types';
-
-import styles from './useDropdown.module.scss';
-
-type UseDropdownProps = {
-  record: Price;
-  choosenInstrumentFromSearch?: Contract['issKey'];
-  widgetId: number;
-  canCreateOrder: boolean;
-};
-
-export const useDropdown = ({ record, choosenInstrumentFromSearch, widgetId, canCreateOrder }: UseDropdownProps) => {
-  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
-  const dropdownRef = useRef<HTMLDivElement | null>(null);
-  const { contractsMap } = useContracts();
-
-  const dropdownRender: (originNode: React.ReactNode) => React.ReactNode = useCallback(() => {
-    const instrument = contractsMap.get(choosenInstrumentFromSearch ?? '');
-
-    const items = getOrderItems(record.origin?.firmNames);
-    const hasSelfOrder = !!items?.some((order) => order.selfOrder);
-
-    const dropdownOffset = 20 + Number((dropdownRef.current?.offsetParent as HTMLDivElement)?.offsetTop);
-
-    return (
-      <div
-        ref={dropdownRef}
-        className={styles.dropdown}
-        style={{ maxHeight: `calc(100vh - ${dropdownOffset}px)` }}
-      >
-        <div className={styles.title}>Ордера ({getInstrumentTitle(record.buysell, instrument?.shortName)})</div>
-        <div>
-          {items?.map((order) => {
-            const isCreateDisabled = getIsCreateDisabled(hasSelfOrder, order.selfOrder);
-            return (
-              <div
-                key={order.key}
-                className={cn(styles.create, { [styles.create_disabled]: isCreateDisabled })}
-                onClick={() => {
-                  if (order.selfOrder) {
-                    dispatch(
-                      openCancelTicketModal({
-                        widgetId,
-                        orderId: order.key,
-                      }),
-                    );
-                  } else if (!hasSelfOrder) {
-                    dispatch(
-                      openAcceptTicketModal({
-                        widgetId,
-                        orderId: order.key,
-                      }),
-                    );
-                  }
-                }}
-              >
-                {order.label}
-                {isCreateDisabled && (
-                  <Tooltip
-                    className={styles.tooltip}
-                    title={getAcceptDescription(record.buysell)}
-                  >
-                    <div className={styles.info}>
-                      <InfoIcon2 />
-                    </div>
-                  </Tooltip>
-                )}
-              </div>
-            );
-          })}
-        </div>
-        <div
-          className={cn(styles.create, styles.create_bordered, { [styles.create_disabled]: !canCreateOrder })}
-          onClick={() => {
-            if (canCreateOrder) {
-              const type = getOrderType(record.buysell);
-              dispatch(
-                openCreateDepthTicketModal({
-                  instr: instrument?.shortName ?? '',
-                  term: instrument?.termName ?? '',
-                  widgetId,
-                  key: type,
-                  bidPrice: type === 'bid' ? record.price : undefined,
-                  askPrice: type === 'ask' ? record.price : undefined,
-                }),
-              );
-            }
-          }}
-        >
-          <AddPlusIcon /> Создать ордер
-          {!canCreateOrder && (
-            <Tooltip
-              className={styles.tooltip}
-              title={getCreateDescription(record.buysell)}
-            >
-              <div className={styles.info}>
-                <InfoIcon2 />
-              </div>
-            </Tooltip>
-          )}
-        </div>
-      </div>
-    );
-  }, [
-    canCreateOrder,
-    choosenInstrumentFromSearch,
-    contractsMap,
-    record.buysell,
-    record.origin?.firmNames,
-    record.price,
-    widgetId,
-  ]);
-
-  return {
-    isDropdownOpen,
-    setIsDropdownOpen,
-    dropdownRender,
-  };
-};
+import cn from 'classnames';
+import React, { useCallback, useRef, useState } from 'react';
+
+import { AddPlusIcon } from '@components/Icons/AddPlusIcon';
+import { InfoIcon2 } from '@components/Icons/InfoIcon2';
+import { Contract, useContracts } from '@modules/contracts';
+import { openAcceptTicketModal, openCancelTicketModal, openCreateDepthTicketModal } from '@store/slices/modals';
+import { dispatch } from '@store/store';
+import Tooltip from '@uikit/Tooltip';
+import { getAcceptDescription } from '@widgets/Glass/logic/utils/getAcceptDescription';
+import { getCreateDescription } from '@widgets/Glass/logic/utils/getCreateDescription';
+import { getInstrumentTitle } from '@widgets/Glass/logic/utils/getInstrumentTitle';
+import { getIsCreateDisabled } from '@widgets/Glass/logic/utils/getIsCreateDisabled';
+import { getOrderItems } from '@widgets/Glass/logic/utils/getOrderItems';
+import { getOrderType } from '@widgets/Glass/logic/utils/getOrderType';
+import { Price } from '@widgets/Glass/types';
+
+import styles from './useDropdown.module.scss';
+
+type UseDropdownProps = {
+  record: Price;
+  choosenInstrumentFromSearch?: Contract['issKey'];
+  widgetId: number;
+  canCreateOrder: boolean;
+};
+
+export const useDropdown = ({ record, choosenInstrumentFromSearch, widgetId, canCreateOrder }: UseDropdownProps) => {
+  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
+  const dropdownRef = useRef<HTMLDivElement | null>(null);
+  const { contractsMap } = useContracts();
+
+  const dropdownRender: (originNode: React.ReactNode) => React.ReactNode = useCallback(() => {
+    const instrument = contractsMap.get(choosenInstrumentFromSearch ?? '');
+
+    const items = getOrderItems(record.origin?.firmNames);
+    const hasSelfOrder = !!items?.some((order) => order.selfOrder);
+
+    const dropdownOffset = 20 + Number((dropdownRef.current?.offsetParent as HTMLDivElement)?.offsetTop);
+
+    return (
+      <div
+        ref={dropdownRef}
+        className={styles.dropdown}
+        style={{ maxHeight: `calc(100vh - ${dropdownOffset}px)` }}
+      >
+        <div className={styles.title}>Ордера ({getInstrumentTitle(record.buysell, instrument?.shortName)})</div>
+        <div>
+          {items?.map((order) => {
+            const isCreateDisabled = getIsCreateDisabled(hasSelfOrder, order.selfOrder);
+            return (
+              <div
+                key={order.key}
+                className={cn(styles.create, { [styles.create_disabled]: isCreateDisabled })}
+                onClick={() => {
+                  if (order.selfOrder) {
+                    dispatch(
+                      openCancelTicketModal({
+                        widgetId,
+                        orderId: order.key,
+                      }),
+                    );
+                  } else if (!hasSelfOrder) {
+                    dispatch(
+                      openAcceptTicketModal({
+                        widgetId,
+                        orderId: order.key,
+                      }),
+                    );
+                  }
+                }}
+              >
+                {order.label}
+                {isCreateDisabled && (
+                  <Tooltip
+                    className={styles.tooltip}
+                    title={getAcceptDescription(record.buysell)}
+                  >
+                    <div className={styles.info}>
+                      <InfoIcon2 />
+                    </div>
+                  </Tooltip>
+                )}
+              </div>
+            );
+          })}
+        </div>
+        <div
+          className={cn(styles.create, styles.create_bordered, { [styles.create_disabled]: !canCreateOrder })}
+          onClick={() => {
+            if (canCreateOrder) {
+              const type = getOrderType(record.buysell);
+              dispatch(
+                openCreateDepthTicketModal({
+                  instr: instrument?.shortName ?? '',
+                  term: instrument?.termName ?? '',
+                  widgetId,
+                  key: type,
+                  bidPrice: type === 'bid' ? record.price : undefined,
+                  askPrice: type === 'ask' ? record.price : undefined,
+                }),
+              );
+            }
+          }}
+        >
+          <AddPlusIcon /> Создать ордер
+          {!canCreateOrder && (
+            <Tooltip
+              className={styles.tooltip}
+              title={getCreateDescription(record.buysell)}
+            >
+              <div className={styles.info}>
+                <InfoIcon2 />
+              </div>
+            </Tooltip>
+          )}
+        </div>
+      </div>
+    );
+  }, [
+    canCreateOrder,
+    choosenInstrumentFromSearch,
+    contractsMap,
+    record.buysell,
+    record.origin?.firmNames,
+    record.price,
+    widgetId,
+  ]);
+
+  return {
+    isDropdownOpen,
+    setIsDropdownOpen,
+    dropdownRender,
+  };
+};
diff --git a/src/widgets/Glass/components/index.ts b/src/widgets/Glass/components/index.ts
index d63ee6536..cdc2a54b3 100644
--- a/src/widgets/Glass/components/index.ts
+++ b/src/widgets/Glass/components/index.ts
@@ -1,3 +1,3 @@
 export { Header } from './Header';
 export { HeaderCell } from './HeaderCell';
-export { SideDropdown } from './SideDropdown';
+export { ViewTypeDropdown } from './ViewTypeDropdown';
diff --git a/src/widgets/Glass/components/views/HorizontalView/HorizontalView.tsx b/src/widgets/Glass/components/views/HorizontalView/HorizontalView.tsx
new file mode 100644
index 000000000..6cace6a9b
--- /dev/null
+++ b/src/widgets/Glass/components/views/HorizontalView/HorizontalView.tsx
@@ -0,0 +1,90 @@
+import { Table, TableProps } from 'antd';
+import cn from 'classnames';
+
+import debounce from 'lodash/debounce';
+import React, { FC, RefObject, useEffect } from 'react';
+
+import { Contract } from '@modules/contracts';
+import { Header, HeaderCell } from '@widgets/Glass/components';
+import { EMPTY_TEXT } from '@widgets/Glass/constants';
+import { ModifiedFourColAntdData, Price } from '@widgets/Glass/types';
+
+import { useTable } from '../useTable';
+import styles from '../View.module.scss';
+
+type HorizontalViewProps = {
+  choosenInstrumentFromSearch: Contract['issKey'];
+  data: Price[];
+  depthCount: number;
+  bestPriceIndication: boolean;
+  displayMyFirmOrders: boolean;
+  containerRef: RefObject<HTMLElement>;
+  widgetId: number;
+  isSapfirInstrument: boolean;
+  setScrollToBestPrice(scrollToBestPrice: () => void): void;
+} & TableProps<ModifiedFourColAntdData>;
+
+export const HorizontalView: FC<HorizontalViewProps> = ({
+  choosenInstrumentFromSearch,
+  data,
+  depthCount,
+  bestPriceIndication,
+  displayMyFirmOrders,
+  containerRef,
+  setScrollToBestPrice,
+  widgetId,
+  isSapfirInstrument,
+  ...tableProps
+}) => {
+  const { bidColumns, bidDataSource, askColumns, askDataSource } = useTable({
+    data,
+    bestPriceIndication,
+    displayMyFirmOrders,
+    depthCount,
+    widgetId,
+    choosenInstrumentFromSearch,
+    isSapfirInstrument,
+    view: 'four-col-1',
+  });
+
+  useEffect(() => {
+    const scrollToBestPrice = debounce(() => {
+      const container = containerRef.current;
+      if (!container) {
+        return;
+      }
+      container.scrollTo({ top: 0, behavior: 'smooth' });
+    }, 300);
+    setScrollToBestPrice(scrollToBestPrice);
+    scrollToBestPrice();
+    // eslint-disable-next-line react-hooks/exhaustive-deps -- Такие зависимости и должны быть
+  }, []);
+
+  return (
+    <>
+      <Header>
+        <HeaderCell>Бид</HeaderCell>
+        <HeaderCell align="right">Аск</HeaderCell>
+      </Header>
+
+      <div className={cn(styles['table-container'], styles['table-container_horizontal'])}>
+        <Table
+          className={cn(styles.table, styles.table_hprizontal)}
+          columns={bidColumns}
+          dataSource={bidDataSource}
+          pagination={false}
+          locale={{ emptyText: EMPTY_TEXT }}
+          {...tableProps}
+        />
+        <Table
+          className={cn(styles.table, styles.table_hprizontal)}
+          columns={askColumns}
+          dataSource={askDataSource}
+          pagination={false}
+          locale={{ emptyText: EMPTY_TEXT }}
+          {...tableProps}
+        />
+      </div>
+    </>
+  );
+};
diff --git a/src/widgets/Glass/components/views/HorizontalView/index.ts b/src/widgets/Glass/components/views/HorizontalView/index.ts
new file mode 100644
index 000000000..884f284bb
--- /dev/null
+++ b/src/widgets/Glass/components/views/HorizontalView/index.ts
@@ -0,0 +1 @@
+export { HorizontalView } from './HorizontalView';
diff --git a/src/widgets/Glass/components/views/ThreeColumnVerticalView/ThreeColumnVerticalView.tsx b/src/widgets/Glass/components/views/ThreeColumnVerticalView/ThreeColumnVerticalView.tsx
new file mode 100644
index 000000000..900c1c05d
--- /dev/null
+++ b/src/widgets/Glass/components/views/ThreeColumnVerticalView/ThreeColumnVerticalView.tsx
@@ -0,0 +1,92 @@
+import { Table, TableProps } from 'antd';
+import debounce from 'lodash/debounce';
+import React, { useEffect, useRef } from 'react';
+
+import { Contract } from '@modules/contracts';
+import { customScrollIntoView } from '@utils/customScrollIntoView';
+import { EMPTY_TEXT } from '@widgets/Glass/constants';
+import { ModifiedFourColAntdData, Price } from '@widgets/Glass/types';
+
+import { Header, HeaderCell } from '../..';
+
+import { useTable } from '../useTable';
+import styles from '../View.module.scss';
+
+type ThreeColumnVerticalViewProps = {
+  data: Price[];
+  depthCount: number;
+  bestPriceIndication: boolean;
+  displayMyFirmOrders: boolean;
+  widgetId: number;
+  choosenInstrumentFromSearch: Contract['issKey'];
+  isSapfirInstrument: boolean;
+  setScrollToBestPrice(scrollToBestPrice: () => void): void;
+} & TableProps<ModifiedFourColAntdData>;
+
+export const ThreeColumnVerticalView = ({
+  data,
+  depthCount,
+  bestPriceIndication,
+  displayMyFirmOrders,
+  widgetId,
+  choosenInstrumentFromSearch,
+  isSapfirInstrument,
+  setScrollToBestPrice,
+  ...tableProps
+}: ThreeColumnVerticalViewProps) => {
+  const hookRef = useRef<HTMLDivElement | null>(null);
+  const { bidColumns, bidDataSource, askColumns, askDataSource } = useTable({
+    data,
+    bestPriceIndication,
+    displayMyFirmOrders,
+    depthCount,
+    widgetId,
+    choosenInstrumentFromSearch,
+    isSapfirInstrument,
+    view: 'four-col-3',
+  });
+
+  useEffect(() => {
+    const scrollToBestPrice = debounce(() => {
+      const hook = hookRef.current;
+      if (!hook) {
+        return;
+      }
+      customScrollIntoView(hook, { block: 'center', behavior: 'smooth' });
+    }, 300);
+    setScrollToBestPrice(scrollToBestPrice);
+    scrollToBestPrice();
+  }, [setScrollToBestPrice]);
+
+  return (
+    <>
+      <Header>
+        <HeaderCell>Бид</HeaderCell>
+        <HeaderCell align="center">Цена</HeaderCell>
+        <HeaderCell align="right">Аск</HeaderCell>
+      </Header>
+
+      <div className={styles['table-container']}>
+        <Table
+          className={styles.table}
+          columns={bidColumns}
+          dataSource={bidDataSource}
+          pagination={false}
+          locale={{ emptyText: EMPTY_TEXT }}
+          {...tableProps}
+        />
+
+        <div ref={hookRef} />
+
+        <Table
+          className={styles.table}
+          columns={askColumns}
+          dataSource={askDataSource.reverse()}
+          pagination={false}
+          locale={{ emptyText: EMPTY_TEXT }}
+          {...tableProps}
+        />
+      </div>
+    </>
+  );
+};
diff --git a/src/widgets/Glass/components/views/ThreeColumnVerticalView/index.ts b/src/widgets/Glass/components/views/ThreeColumnVerticalView/index.ts
new file mode 100644
index 000000000..44c099e82
--- /dev/null
+++ b/src/widgets/Glass/components/views/ThreeColumnVerticalView/index.ts
@@ -0,0 +1 @@
+export { ThreeColumnVerticalView } from './ThreeColumnVerticalView';
diff --git a/src/widgets/Glass/components/views/TwoColumnVerticalView/TwoColumnVerticalView.tsx b/src/widgets/Glass/components/views/TwoColumnVerticalView/TwoColumnVerticalView.tsx
new file mode 100644
index 000000000..6d40301bd
--- /dev/null
+++ b/src/widgets/Glass/components/views/TwoColumnVerticalView/TwoColumnVerticalView.tsx
@@ -0,0 +1,91 @@
+import { Table, TableProps } from 'antd';
+import debounce from 'lodash/debounce';
+import React, { useEffect, useRef } from 'react';
+
+import { Contract } from '@modules/contracts';
+import { customScrollIntoView } from '@utils/customScrollIntoView';
+
+import { Header, HeaderCell } from '@widgets/Glass/components';
+import { EMPTY_TEXT } from '@widgets/Glass/constants';
+import { ModifiedFourColAntdData, Price } from '@widgets/Glass/types';
+
+import { useTable } from '../useTable';
+import styles from '../View.module.scss';
+
+type TwoColumnVerticalViewProps = {
+  data: Price[];
+  depthCount: number;
+  bestPriceIndication: boolean;
+  displayMyFirmOrders: boolean;
+  choosenInstrumentFromSearch: Contract['issKey'];
+  widgetId: number;
+  isSapfirInstrument: boolean;
+  setScrollToBestPrice(scrollToBestPrice: () => void): void;
+} & TableProps<ModifiedFourColAntdData>;
+
+export const TwoColumnVerticalView = ({
+  data,
+  depthCount,
+  bestPriceIndication,
+  displayMyFirmOrders,
+  choosenInstrumentFromSearch,
+  widgetId,
+  setScrollToBestPrice,
+  isSapfirInstrument,
+  ...tableProps
+}: TwoColumnVerticalViewProps) => {
+  const hookRef = useRef<HTMLDivElement | null>(null);
+  const { bidColumns, bidDataSource, askColumns, askDataSource } = useTable({
+    data,
+    bestPriceIndication,
+    displayMyFirmOrders,
+    depthCount,
+    widgetId,
+    choosenInstrumentFromSearch,
+    isSapfirInstrument,
+    view: 'four-col-2',
+  });
+
+  useEffect(() => {
+    const scrollToBestPrice = debounce(() => {
+      const hook = hookRef.current;
+      if (!hook) {
+        return;
+      }
+      customScrollIntoView(hook, { block: 'center', behavior: 'smooth' });
+    }, 300);
+    setScrollToBestPrice(scrollToBestPrice);
+    scrollToBestPrice();
+  }, [setScrollToBestPrice]);
+
+  return (
+    <>
+      <Header>
+        <HeaderCell>Бид / Аск</HeaderCell>
+        <HeaderCell align="right">Цена</HeaderCell>
+      </Header>
+
+      <div className={styles['table-container']}>
+        <Table
+          className={styles.table}
+          columns={bidColumns}
+          dataSource={bidDataSource}
+          pagination={false}
+          locale={{ emptyText: EMPTY_TEXT }}
+          {...tableProps}
+        />
+
+        <div ref={hookRef} />
+
+        <Table
+          className={styles.table}
+          columns={askColumns}
+          dataSource={askDataSource.reverse()}
+          pagination={false}
+          locale={{ emptyText: EMPTY_TEXT }}
+          {...tableProps}
+        />
+      </div>
+    </>
+  );
+};
diff --git a/src/widgets/Glass/components/views/TwoColumnVerticalView/index.ts b/src/widgets/Glass/components/views/TwoColumnVerticalView/index.ts
new file mode 100644
index 000000000..292dcf1b5
--- /dev/null
+++ b/src/widgets/Glass/components/views/TwoColumnVerticalView/index.ts
@@ -0,0 +1 @@
+export { TwoColumnVerticalView } from './TwoColumnVerticalView';
diff --git a/src/widgets/Glass/components/GlassTable/GlassTable.module.scss b/src/widgets/Glass/components/views/View.module.scss
similarity index 88%
rename from src/widgets/Glass/components/GlassTable/GlassTable.module.scss
rename to src/widgets/Glass/components/views/View.module.scss
index 526e77007..625998f07 100644
--- a/src/widgets/Glass/components/GlassTable/GlassTable.module.scss
+++ b/src/widgets/Glass/components/views/View.module.scss
@@ -1,6 +1,16 @@
 @import 'colors.scss';
 @import 'mixins.module.scss';
 
+.table-container {
+  display: flex;
+  width: 100%;
+  flex-direction: column-reverse;
+
+  &_horizontal {
+    flex-direction: row;
+  }
+}
+
 .table {
   border-radius: 0 !important;
   width: 100%;
diff --git a/src/widgets/Glass/components/views/useTable.tsx b/src/widgets/Glass/components/views/useTable.tsx
new file mode 100644
index 000000000..b2dbfd91d
--- /dev/null
+++ b/src/widgets/Glass/components/views/useTable.tsx
@@ -0,0 +1,101 @@
+import React, { useMemo } from 'react';
+
+import { Contract } from '@modules/contracts';
+import { getPercentage } from '@widgets/Glass/logic/utils/getPercentage';
+
+import { getAskPricePosition, getBidPricePosition } from '@widgets/Glass/logic/utils/getPricePosition';
+import { toAntdFourColumnsFormat } from '@widgets/Glass/logic/utils/toAntdFourColumnsFormat.util';
+
+import { GlassWidgetConfig } from 'types/Widgets';
+
+import { AskCell } from '../cells/AskCell';
+import { BidCell } from '../cells/BidCell';
+
+import type { FourColAntdData, Price, TableColumn } from '@widgets/Glass/types';
+
+type UseTableProps = {
+  data: Price[];
+  bestPriceIndication: boolean;
+  displayMyFirmOrders: boolean;
+  depthCount: number;
+  widgetId: number;
+  choosenInstrumentFromSearch: Contract['issKey'];
+  isSapfirInstrument: boolean;
+  view: GlassWidgetConfig['view'];
+};
+
+export function useTable({
+  data,
+  bestPriceIndication,
+  displayMyFirmOrders,
+  depthCount,
+  widgetId,
+  choosenInstrumentFromSearch,
+  isSapfirInstrument,
+  view,
+}: UseTableProps) {
+  const bidColumns: TableColumn[] = useMemo(
+    () => [
+      {
+        title: 'Бид',
+        dataIndex: 'buy',
+        key: 'buy',
+        render: (text: string, record: FourColAntdData) => (
+          <BidCell
+            record={record}
+            percentage={getPercentage(data, record)}
+            selfPercentage={getPercentage(data, record, 'selfQuantity')}
+            bestPriceIndication={bestPriceIndication}
+            displayMyFirmOrders={displayMyFirmOrders}
+            pricePosition={getBidPricePosition(view)}
+            choosenInstrumentFromSearch={choosenInstrumentFromSearch}
+            widgetId={widgetId}
+            canCreateOrder={!data.some((item) => item.buysell.toLowerCase() === 'sell' && item.isSelfOrder)}
+            isSapfirInstrument={isSapfirInstrument}
+          />
+        ),
+      },
+    ],
+    [bestPriceIndication, choosenInstrumentFromSearch, data, displayMyFirmOrders, isSapfirInstrument, view, widgetId],
+  );
+  const bidDataSource = useMemo(
+    () => toAntdFourColumnsFormat('buy', data, bidColumns).slice(0, depthCount),
+    [bidColumns, data, depthCount],
+  );
+
+  const askColumns: TableColumn[] = useMemo(
+    () => [
+      {
+        title: 'Аск',
+        dataIndex: 'sell',
+        key: 'sell',
+        render: (text: string, record: FourColAntdData) => (
+          <AskCell
+            record={record}
+            percentage={getPercentage(data, record)}
+            selfPercentage={getPercentage(data, record, 'selfQuantity')}
+            bestPriceIndication={bestPriceIndication}
+            displayMyFirmOrders={displayMyFirmOrders}
+            choosenInstrumentFromSearch={choosenInstrumentFromSearch}
+            pricePosition={getAskPricePosition(view)}
+            widgetId={widgetId}
+            canCreateOrder={!data.some((item) => item.buysell.toLowerCase() === 'buy' && item.isSelfOrder)}
+            isSapfirInstrument={isSapfirInstrument}
+          />
+        ),
+      },
+    ],
+    [bestPriceIndication, choosenInstrumentFromSearch, data, displayMyFirmOrders, isSapfirInstrument, view, widgetId],
+  );
+  const askDataSource = useMemo(
+    () => toAntdFourColumnsFormat('sell', data, askColumns).reverse().slice(0, depthCount),
+    [askColumns, data, depthCount],
+  );
+
+  return {
+    bidColumns,
+    bidDataSource,
+    askColumns,
+    askDataSource,
+  };
+}
diff --git a/src/widgets/Glass/config.tsx b/src/widgets/Glass/config.tsx
deleted file mode 100644
index b9384b1d0..000000000
--- a/src/widgets/Glass/config.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import React from 'react';
-
-import { OneColumn } from '@components/Icons/OneColumn';
-import { ThreeColumn } from '@components/Icons/ThreeColumn';
-import { TwoColumns } from '@components/Icons/TwoColumns';
-
-import { ItemsType } from './components/SideDropdown';
-import { ViewType } from './types';
-
-export const defaultViewTypeConfig: Record<ViewType, Omit<ItemsType<ViewType>, 'value'>> = {
-  'four-col-1': { label: 'Горизонтальный', icon: <OneColumn /> },
-  'four-col-2': { label: 'Вертикальный (2 колонки)', icon: <TwoColumns /> },
-  'four-col-3': { label: 'Вертикальный (3 колонки)', icon: <ThreeColumn /> },
-  table: { label: 'Котировки', icon: <ThreeColumn /> },
-};
diff --git a/src/widgets/Glass/logic/__tests__/useGlassView.test.tsx b/src/widgets/Glass/logic/__tests__/useGlassView.test.tsx
index ea238dd6e..0a8f270f3 100644
--- a/src/widgets/Glass/logic/__tests__/useGlassView.test.tsx
+++ b/src/widgets/Glass/logic/__tests__/useGlassView.test.tsx
@@ -1,17 +1,18 @@
-import { act, renderHook } from '@testing-library/react';
+import { act, render, renderHook, screen } from '@testing-library/react';
 
 import React, { MutableRefObject } from 'react';
 
-import { EmptyWidgetDisplayProps } from '@components/EmptyWidgetDisplay';
-import { Price } from '@widgets/Glass/types';
+import { OrderModalPayload } from '@modules/ntb/types';
 import { GlassWidgetConfig } from 'types/Widgets';
 
-import { OrderBookPlugin } from '../../plugins/types';
+import { ModifiedFourColAntdData, Price } from '../..';
+
+import { OrderBookPluginActions, OrderBookPlugin } from '../../plugins/types';
 import { useGlassView } from '../hooks/useGlassView';
 
 jest.mock('@components/EmptyWidgetDisplay', () => ({
   __esModule: true,
-  default: ({ widgetType }: EmptyWidgetDisplayProps) => (
+  default: ({ customErrorFields, widgetType }: any) => (
     <div
       data-testid="empty-widget"
       data-widget-type={widgetType}
@@ -21,7 +22,35 @@ jest.mock('@components/EmptyWidgetDisplay', () => ({
   ),
 }));
 
+jest.mock('../../components/views/HorizontalView', () => ({
+  HorizontalView: (props: any) => (
+    <div
+      data-testid="horizontal-view"
+      {...props}
+    />
+  ),
+}));
+
+jest.mock('../../components/views/TwoColumnVerticalView', () => ({
+  TwoColumnVerticalView: (props: any) => (
+    <div
+      data-testid="two-col-view"
+      {...props}
+    />
+  ),
+}));
+
+jest.mock('../../components/views/ThreeColumnVerticalView', () => ({
+  ThreeColumnVerticalView: (props: any) => (
+    <div
+      data-testid="three-col-view"
+      {...props}
+    />
+  ),
+}));
+
 // ---------- test helpers ----------
+let resizeObserverCallback: ResizeObserverCallback | null;
 let mockObserve: jest.Mock;
 let mockDisconnect: jest.Mock;
 let ResizeObserverMock: jest.Mock;
@@ -29,11 +58,15 @@ let ResizeObserverMock: jest.Mock;
 beforeEach(() => {
   mockObserve = jest.fn();
   mockDisconnect = jest.fn();
-  ResizeObserverMock = jest.fn().mockImplementation(() => ({
-    observe: mockObserve,
-    disconnect: mockDisconnect,
-  }));
-  global.ResizeObserver = ResizeObserverMock;
+  resizeObserverCallback = null;
+  ResizeObserverMock = jest.fn().mockImplementation((callback: ResizeObserverCallback) => {
+    resizeObserverCallback = callback;
+    return {
+      observe: mockObserve,
+      disconnect: mockDisconnect,
+    };
+  });
+  (global as any).ResizeObserver = ResizeObserverMock;
 });
 
 afterEach(() => {
@@ -50,7 +83,7 @@ const defaultProps = (overrides: Partial<Parameters<typeof useGlassView>[0]> = {
   depthCount: 5,
   bestPriceIndication: true,
   displayMyFirmOrders: true,
-  activePlugin: null as OrderBookPlugin | null,
+  activePlugin: null as OrderBookPlugin | null | undefined,
   choosenInstrumentFromSearch: '',
   view: 'four-col-1' as GlassWidgetConfig['view'],
   refWrapper: createRefWrapper(),
@@ -93,4 +126,80 @@ describe('useGlassView', () => {
     });
     expect(result.current.isOpenEmptyAction).toBe(true);
   });
+
+  // --- renderContent ---
+  describe('renderContent', () => {
+    it('shows EmptyWidgetDisplay (glass) when no instrument is selected', () => {
+      const { result } = renderHook(() => useGlassView(defaultProps({ choosenInstrumentFromSearch: '' })));
+      render(result.current.renderContent() as React.ReactElement);
+      expect(screen.getByTestId('empty-widget')).toHaveAttribute('data-widget-type', 'glass');
+    });
+
+    it('shows EmptyWidgetDisplay (glassNoData) when instrument exists but sides are empty', () => {
+      const { result } = renderHook(() =>
+        useGlassView(defaultProps({ choosenInstrumentFromSearch: 'AAPL', sides: [] })),
+      );
+      render(result.current.renderContent() as React.ReactElement);
+      expect(screen.getByTestId('empty-widget')).toHaveAttribute('data-widget-type', 'glassNoData');
+    });
+
+    it('renders HorizontalView for view "four-col-1" with data', () => {
+      const sides = [{ price: '100', quantity: '10', buysell: 'BUY' }] as unknown as Price[];
+      const { result } = renderHook(() =>
+        useGlassView(defaultProps({ choosenInstrumentFromSearch: 'AAPL', sides, view: 'four-col-1' })),
+      );
+      render(result.current.renderContent() as React.ReactElement);
+      expect(screen.getByTestId('horizontal-view')).toBeInTheDocument();
+    });
+
+    it('renders TwoColumnVerticalView for view "four-col-2" with data', () => {
+      const sides = [{ price: '100', quantity: '10', buysell: 'BUY' }] as unknown as Price[];
+      const { result } = renderHook(() =>
+        useGlassView(defaultProps({ choosenInstrumentFromSearch: 'AAPL', sides, view: 'four-col-2' })),
+      );
+      render(result.current.renderContent() as React.ReactElement);
+      expect(screen.getByTestId('two-col-view')).toBeInTheDocument();
+    });
+
+    it('renders ThreeColumnVerticalView for view "four-col-3" with data', () => {
+      const sides = [{ price: '100', quantity: '10', buysell: 'BUY' }] as unknown as Price[];
+      const { result } = renderHook(() =>
+        useGlassView(defaultProps({ choosenInstrumentFromSearch: 'AAPL', sides, view: 'four-col-3' })),
+      );
+      render(result.current.renderContent() as React.ReactElement);
+      expect(screen.getByTestId('three-col-view')).toBeInTheDocument();
+    });
+
+    it('returns null for an unknown view', () => {
+      const sides = [{ price: '100', quantity: '10', buysell: 'BUY' }] as unknown as Price[];
+      const { result } = renderHook(() =>
+        useGlassView(
+          defaultProps({
+            choosenInstrumentFromSearch: 'AAPL',
+            sides,
+            view: 'unknown' as any,
+          }),
+        ),
+      );
+      expect(result.current.renderContent()).toBeNull();
+    });
+  });
+
+  describe('ResizeObserver', () => {
+    it('cleans up ResizeObserver on unmount', () => {
+      const sides = [{ price: '100', quantity: '10', buysell: 'BUY' }] as unknown as Price[];
+      const { result, unmount } = renderHook(() =>
+        useGlassView(defaultProps({ choosenInstrumentFromSearch: 'AAPL', sides, view: 'four-col-1' })),
+      );
+      render(result.current.renderContent() as React.ReactElement);
+      unmount();
+      expect(mockDisconnect).toHaveBeenCalled();
+    });
+
+    it('does nothing when refWrapper.current is null', () => {
+      const nullRef = { current: null };
+      renderHook(() => useGlassView(defaultProps({ refWrapper: nullRef })));
+      expect(ResizeObserverMock).not.toHaveBeenCalled();
+    });
+  });
 });
diff --git a/src/widgets/Glass/logic/__tests__/usePlugin.test.ts b/src/widgets/Glass/logic/__tests__/usePlugin.test.ts
new file mode 100644
index 000000000..33bba363c
--- /dev/null
+++ b/src/widgets/Glass/logic/__tests__/usePlugin.test.ts
@@ -0,0 +1,97 @@
+import { Contract, useContracts } from '@modules/contracts';
+import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
+import { renderHookWithProviders } from '@utils/test-utils';
+import { ORDER_BOOK_PLUGINS } from '@widgets/Glass/plugins';
+import { OrderBookPluginProps } from '@widgets/Glass/plugins/types';
+
+import { usePlugin } from '../hooks/usePlugin';
+
+jest.mock('@modules/contracts', () => ({
+  useContracts: jest.fn(),
+}));
+
+jest.mock('@terminal/desktop/workspaces/default/components/Widget/context', () => ({
+  useWidgetIdContext: jest.fn(),
+}));
+
+jest.mock('@widgets/Glass/plugins', () => ({
+  ORDER_BOOK_PLUGINS: [jest.fn(), jest.fn()],
+}));
+
+jest.mock('@widgets/Glass/plugins/defaultPlugin', () => ({
+  defaultOrderBookPlugin: jest.fn(),
+}));
+
+describe('usePlugin', () => {
+  const mockContract = { issKey: 'test-ticker' };
+  const suitablePlugin = { check: () => true };
+  const mockSelector = jest.fn();
+
+  beforeEach(() => {
+    (useWidgetIdContext as jest.Mock).mockReturnValue(1);
+    (useContracts as jest.Mock).mockImplementation(() => ({
+      contractsMap: new Map([[mockContract.issKey, mockContract]]),
+    }));
+
+    (ORDER_BOOK_PLUGINS[0] as jest.Mock).mockImplementation(() => ({ check: () => false }));
+    (ORDER_BOOK_PLUGINS[1] as jest.Mock).mockImplementation(({ select }) => {
+      select(mockSelector);
+      return suitablePlugin;
+    });
+  });
+
+  it('should return plugin if matched', () => {
+    const { result } = renderHookWithProviders(usePlugin, { initialProps: mockContract.issKey });
+
+    expect(result.current.activePlugin).toEqual(suitablePlugin);
+  });
+
+  it('should call plugin with correct props', () => {
+    const { store } = renderHookWithProviders(usePlugin, { initialProps: mockContract.issKey });
+
+    const expectedProps: OrderBookPluginProps = {
+      widgetId: 1,
+      tickerId: mockContract.issKey,
+      contract: mockContract as Contract,
+      dispatch: store.dispatch,
+      select: expect.any(Function),
+    };
+
+    expect(ORDER_BOOK_PLUGINS[1]).toHaveBeenCalledWith(expectedProps);
+  });
+
+  it('should call plugin with undefined contract if contracts dont contain provide ticker', () => {
+    const { store } = renderHookWithProviders(usePlugin, { initialProps: 'unknown ticker' });
+
+    const expectedProps: OrderBookPluginProps = {
+      widgetId: 1,
+      tickerId: 'unknown ticker',
+      contract: undefined,
+      dispatch: store.dispatch,
+      select: expect.any(Function),
+    };
+
+    expect(ORDER_BOOK_PLUGINS[1]).toHaveBeenCalledWith(expectedProps);
+  });
+
+  it('should provide store root state for selector of plugin', () => {
+    const { store } = renderHookWithProviders(usePlugin, { initialProps: mockContract.issKey });
+
+    expect(mockSelector).toHaveBeenCalledWith(store.getState());
+  });
+
+  it('should return null if no ticker provided', () => {
+    const { result } = renderHookWithProviders(usePlugin, { initialProps: null });
+
+    expect(result.current.activePlugin).toBeNull();
+  });
+
+  it('should return null if no plugin found', () => {
+    ORDER_BOOK_PLUGINS.forEach((p) => {
+      (p as jest.Mock).mockImplementation(() => ({ check: () => false }));
+    });
+    const { result } = renderHookWithProviders(usePlugin, { initialProps: null });
+
+    expect(result.current.activePlugin).toBeNull();
+  });
+});
diff --git a/src/widgets/Glass/logic/__tests__/usePluginDefinition.test.ts b/src/widgets/Glass/logic/__tests__/usePluginDefinition.test.ts
deleted file mode 100644
index c463d6638..000000000
--- a/src/widgets/Glass/logic/__tests__/usePluginDefinition.test.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { useContracts } from '@modules/contracts';
-import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-import { renderHookWithProviders } from '@utils/test-utils';
-import { ORDER_BOOK_PLUGINS } from '@widgets/Glass/plugins';
-
-import { defaultOrderBookPlugin } from '@widgets/Glass/plugins/defaultPlugin';
-import { OrderBookPluginDefinition } from '@widgets/Glass/plugins/types';
-
-import { usePluginDefinition } from '../hooks/usePluginDefinition';
-
-jest.mock('@modules/contracts', () => ({
-  useContracts: jest.fn(),
-}));
-
-jest.mock('@terminal/desktop/workspaces/default/components/Widget/context', () => ({
-  useWidgetIdContext: jest.fn(),
-}));
-
-jest.mock('@widgets/Glass/plugins', () => ({
-  ORDER_BOOK_PLUGINS: [{}, {}],
-}));
-
-jest.mock('@widgets/Glass/plugins/defaultPlugin', () => ({
-  defaultOrderBookPlugin: {
-    check: jest.fn(),
-  },
-}));
-
-describe('usePluginDefinition', () => {
-  const mockContract = { issKey: 'test-ticker' };
-  const suitablePlugin = { check: () => true };
-
-  beforeEach(() => {
-    (useWidgetIdContext as jest.Mock).mockReturnValue(1);
-    (useContracts as jest.Mock).mockImplementation(() => ({
-      contractsMap: new Map([[mockContract.issKey, mockContract]]),
-    }));
-
-    ORDER_BOOK_PLUGINS[0] = { check: () => false } as unknown as OrderBookPluginDefinition;
-    ORDER_BOOK_PLUGINS[1] = suitablePlugin as unknown as OrderBookPluginDefinition;
-  });
-
-  it('should return plugin if matched', () => {
-    const { result } = renderHookWithProviders(usePluginDefinition, {
-      initialProps: { tickerId: mockContract.issKey },
-    });
-
-    expect(result.current).toEqual(suitablePlugin);
-  });
-
-  it('should return null if no ticker provided', () => {
-    const { result } = renderHookWithProviders(usePluginDefinition, {
-      initialProps: { tickerId: null },
-    });
-
-    expect(result.current).toBeNull();
-  });
-
-  it('should return defaultPlugin if no plugin found', () => {
-    ORDER_BOOK_PLUGINS[0] = { check: () => false } as unknown as OrderBookPluginDefinition;
-    ORDER_BOOK_PLUGINS[1] = { check: () => false } as unknown as OrderBookPluginDefinition;
-
-    const { result } = renderHookWithProviders(usePluginDefinition, {
-      initialProps: { tickerId: mockContract.issKey },
-    });
-
-    expect(result.current).toEqual(defaultOrderBookPlugin);
-  });
-});
diff --git a/src/widgets/Glass/logic/hooks/__tests__/useColumns.test.tsx b/src/widgets/Glass/logic/hooks/__tests__/useColumns.test.tsx
deleted file mode 100644
index 29c4947b4..000000000
--- a/src/widgets/Glass/logic/hooks/__tests__/useColumns.test.tsx
+++ /dev/null
@@ -1,379 +0,0 @@
-import { act, renderHook } from '@testing-library/react';
-import React from 'react';
-
-import { useChangeProperties, useSelectProperties } from '@modules/widgetProperties';
-import { mergeSavedWithInitialColumns } from '@utils/mergeSavedWithInitialColumns';
-
-import { useColumns } from '../useColumns';
-
-import type { ViewColumn } from '../../../components/TableView/types';
-import type { ColumnsSettingsMenuItemProps } from '@components/Table/components/ColumnsSettingsMenuItem/types';
-import type { GlassWidgetProperties } from '@widgets/Glass/properties/types';
-
-type TestRecord = {
-  key: string;
-  dataIndex?: string;
-  title: string;
-  hidden?: boolean;
-  align?: 'left' | 'center' | 'right';
-};
-
-jest.mock('@modules/widgetProperties', () => ({
-  useSelectProperties: jest.fn(),
-  useChangeProperties: jest.fn(),
-}));
-
-jest.mock('@components/Table/components/ColumnsSettingsMenuItem', () => ({
-  ColumnsSettingsMenuItem: jest.fn(),
-}));
-
-jest.mock('@utils/mergeSavedWithInitialColumns', () => ({
-  mergeSavedWithInitialColumns: jest.fn(),
-}));
-
-const mockUseSelectProperties = useSelectProperties as jest.MockedFunction<typeof useSelectProperties>;
-const mockUseChangeProperties = useChangeProperties as jest.MockedFunction<typeof useChangeProperties>;
-const mockMergeSavedWithInitialColumns = mergeSavedWithInitialColumns as jest.MockedFunction<
-  typeof mergeSavedWithInitialColumns
->;
-
-type MockProperties = {
-  view?: string;
-  savedColumns?: ViewColumn<TestRecord>[] | null;
-  mergedColumns?: ViewColumn<TestRecord>[];
-};
-
-const createColumn = (key: string, dataIndex: string, title: string, hidden = false): ViewColumn<TestRecord> => ({
-  key,
-  dataIndex,
-  title,
-  hidden,
-});
-
-const setupPropertiesMock = (overrideMock: MockProperties = {}) => {
-  const { view, savedColumns } = { view: 'four-col-1', savedColumns: null, ...overrideMock };
-  mockUseSelectProperties.mockImplementationOnce(() => view).mockImplementationOnce(() => savedColumns);
-};
-
-const renderTestHook = (columnsConfig?: ViewColumn<TestRecord>[]) => renderHook(() => useColumns({ columnsConfig }));
-
-const getColumnsSettingsMenuItemProps = <T extends Record<string, unknown> = TestRecord>(
-  settingsItems: ReturnType<typeof useColumns<T>>['settingsItems'],
-) => {
-  const settingsItem = settingsItems[0];
-  const columnsSettingsMenuItem = settingsItem.label as React.ReactElement<ColumnsSettingsMenuItemProps<T>>;
-  return columnsSettingsMenuItem.props;
-};
-
-const getCheckedColumns = (columns: ViewColumn<TestRecord>[]) =>
-  columns.filter((c) => !c.hidden).map((c) => c.dataIndex);
-
-describe('useColumns', () => {
-  const mockUpdateProperties = jest.fn();
-  const mockWriteProperties = jest.fn();
-
-  const updateWidgetProps = (overrides?: Partial<GlassWidgetProperties>) => {
-    const updateFn = mockUpdateProperties.mock.calls[0][0];
-    const mockState: Partial<GlassWidgetProperties> = {
-      glassState: { view: 'four-col-1' } as GlassWidgetProperties['glassState'],
-      ...overrides,
-    };
-    updateFn(mockState);
-    return mockState;
-  };
-
-  const initialColumns: ViewColumn<TestRecord>[] = [
-    createColumn('col1', 'price', 'Price', false),
-    createColumn('col2', 'volume', 'Volume', false),
-    createColumn('col3', 'yield', 'Yield', true),
-  ];
-
-  const savedColumns: ViewColumn<TestRecord>[] = [
-    createColumn('col1', 'price', 'Price', true),
-    createColumn('col2', 'volume', 'Volume', false),
-  ];
-
-  beforeEach(() => {
-    mockUseChangeProperties.mockReturnValue({
-      updateProperties: mockUpdateProperties,
-      writeProperties: mockWriteProperties,
-    });
-  });
-
-  describe('columns initialization', () => {
-    it('should return initial columns if savedColumns does not exist', () => {
-      setupPropertiesMock({ savedColumns: null });
-      mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-      const { result } = renderTestHook(initialColumns);
-
-      expect(result.current.columns).toEqual(initialColumns);
-    });
-
-    it('should return merged columns if savedColumns exist', () => {
-      setupPropertiesMock({ savedColumns });
-      mockMergeSavedWithInitialColumns.mockReturnValue(savedColumns);
-
-      const { result } = renderTestHook(initialColumns);
-
-      expect(result.current.columns).toEqual(savedColumns);
-    });
-
-    it('should return empty array if columnsConfig is not provided', () => {
-      setupPropertiesMock({ savedColumns: null });
-      mockMergeSavedWithInitialColumns.mockReturnValue([]);
-
-      const { result } = renderTestHook();
-
-      expect(result.current.columns).toEqual([]);
-    });
-  });
-
-  describe('checkedList', () => {
-    it('should return list of checked columns (dataIndex for visible columns)', () => {
-      const visibleColumns: ViewColumn<TestRecord>[] = [
-        createColumn('col1', 'price', 'Price', false),
-        createColumn('col2', 'volume', 'Volume', false),
-        createColumn('col3', 'yield', 'Yield', true),
-      ];
-
-      setupPropertiesMock({ savedColumns: null });
-      mockMergeSavedWithInitialColumns.mockReturnValue(visibleColumns);
-
-      const { result } = renderTestHook(initialColumns);
-
-      expect(result.current.columns).toEqual(visibleColumns);
-    });
-  });
-
-  describe('settingsItems', () => {
-    it('should return array with one settings element', () => {
-      setupPropertiesMock({ savedColumns: null });
-      mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-      const { result } = renderTestHook(initialColumns);
-
-      expect(result.current.settingsItems).toHaveLength(1);
-      expect(result.current.settingsItems[0]).toHaveProperty('key', '1');
-      expect(result.current.settingsItems[0]).toHaveProperty('label');
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should handle columns without dataIndex', () => {
-      const columnsWithoutDataIndex: ViewColumn<TestRecord>[] = [
-        { key: 'col1', title: 'Price', hidden: false },
-        { key: 'col2', title: 'Volume', hidden: false },
-      ];
-
-      setupPropertiesMock({ savedColumns: null });
-      mockMergeSavedWithInitialColumns.mockReturnValue(columnsWithoutDataIndex);
-
-      const { result } = renderTestHook(columnsWithoutDataIndex);
-
-      expect(result.current.columns).toEqual(columnsWithoutDataIndex);
-    });
-
-    it('should handle empty columns array', () => {
-      setupPropertiesMock({ savedColumns: null });
-      mockMergeSavedWithInitialColumns.mockReturnValue([]);
-
-      const { result } = renderTestHook([]);
-
-      expect(result.current.columns).toEqual([]);
-      expect(result.current.settingsItems).toHaveLength(1);
-    });
-  });
-
-  describe('update columns logic', () => {
-    describe('handleCheck', () => {
-      it('should hide column when unchecked', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        expect(getCheckedColumns(result.current.columns)).toEqual(['price', 'volume']);
-
-        act(() => {
-          const { onChangeCheckedList } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onChangeCheckedList(['price']);
-        });
-
-        expect(getCheckedColumns(result.current.columns)).toEqual(['price']);
-      });
-
-      it('should show column when checked', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        expect(getCheckedColumns(result.current.columns)).toEqual(['price', 'volume']);
-
-        act(() => {
-          const { onChangeCheckedList } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onChangeCheckedList(['price', 'volume', 'yield']);
-        });
-
-        expect(getCheckedColumns(result.current.columns)).toEqual(['price', 'volume', 'yield']);
-      });
-
-      it('should update columns state when checkedList changes', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        act(() => {
-          const { onChangeCheckedList } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onChangeCheckedList(['price']);
-        });
-
-        expect(mockUpdateProperties).toHaveBeenCalledTimes(1);
-
-        const mockState = updateWidgetProps();
-
-        expect(mockState.tableViewColumns?.['four-col-1']).toEqual([
-          { key: 'col1', hidden: false },
-          { key: 'col2', hidden: true },
-          { key: 'col3', hidden: true },
-        ]);
-      });
-    });
-
-    describe('handleSaveColumns', () => {
-      it('should call updateProperties with new columns order', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        const reorderedColumns: ViewColumn<TestRecord>[] = [
-          createColumn('col2', 'volume', 'Volume', false),
-          createColumn('col1', 'price', 'Price', false),
-          createColumn('col3', 'yield', 'Yield', true),
-        ];
-
-        act(() => {
-          const { onSaveColumnsHandler } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onSaveColumnsHandler(reorderedColumns);
-        });
-
-        expect(mockUpdateProperties).toHaveBeenCalledWith(expect.any(Function));
-
-        const mockState = updateWidgetProps();
-
-        expect(mockState.tableViewColumns?.['four-col-1']).toEqual([
-          { key: 'col2', hidden: false },
-          { key: 'col1', hidden: false },
-          { key: 'col3', hidden: true },
-        ]);
-      });
-
-      it('should update columns state after save', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        const reorderedColumns: ViewColumn<TestRecord>[] = [
-          createColumn('col3', 'yield', 'Yield', false),
-          createColumn('col1', 'price', 'Price', false),
-          createColumn('col2', 'volume', 'Volume', false),
-        ];
-
-        act(() => {
-          const { onSaveColumnsHandler } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onSaveColumnsHandler(reorderedColumns);
-        });
-
-        expect(mockUpdateProperties).toHaveBeenCalledTimes(1);
-      });
-    });
-
-    describe('updateColumns', () => {
-      it('should update columns and save to properties', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        const newColumns: ViewColumn<TestRecord>[] = [
-          createColumn('col1', 'price', 'Price', true),
-          createColumn('col2', 'volume', 'Volume', false),
-        ];
-
-        act(() => {
-          const { onSaveColumnsHandler } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onSaveColumnsHandler(newColumns);
-        });
-
-        expect(mockUpdateProperties).toHaveBeenCalledTimes(1);
-      });
-
-      it('should initialize tableViewColumns if not exists', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        const newColumns: ViewColumn<TestRecord>[] = [createColumn('col1', 'price', 'Price', false)];
-
-        act(() => {
-          const { onSaveColumnsHandler } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onSaveColumnsHandler(newColumns);
-        });
-
-        const mockState = updateWidgetProps();
-
-        expect(mockState.tableViewColumns).toEqual({ 'four-col-1': [{ key: 'col1', hidden: false }] });
-      });
-    });
-
-    describe('updateProperties callback', () => {
-      it('should not update if view is not defined', () => {
-        setupPropertiesMock({ view: undefined, savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        const newColumns: ViewColumn<TestRecord>[] = [createColumn('col1', 'price', 'Price', false)];
-
-        act(() => {
-          const { onSaveColumnsHandler } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onSaveColumnsHandler(newColumns);
-        });
-
-        const mockState = updateWidgetProps({
-          glassState: { view: undefined } as unknown as GlassWidgetProperties['glassState'],
-        });
-
-        expect(mockState?.tableViewColumns).toBeUndefined();
-      });
-
-      it('should save only key and hidden properties', () => {
-        setupPropertiesMock({ savedColumns: null });
-        mockMergeSavedWithInitialColumns.mockReturnValue(initialColumns);
-
-        const { result } = renderTestHook(initialColumns);
-
-        const newColumns: ViewColumn<TestRecord>[] = [
-          { key: 'col1', dataIndex: 'price', title: 'Price', hidden: false, align: 'right' },
-        ];
-
-        act(() => {
-          const { onSaveColumnsHandler } = getColumnsSettingsMenuItemProps(result.current.settingsItems);
-          onSaveColumnsHandler(newColumns);
-        });
-
-        const mockState = updateWidgetProps();
-        const firstColumn = mockState.tableViewColumns?.['four-col-1']?.[0];
-
-        expect(firstColumn).toEqual({ key: 'col1', hidden: false });
-        expect(firstColumn).not.toHaveProperty('dataIndex');
-        expect(firstColumn).not.toHaveProperty('title');
-      });
-    });
-  });
-});
diff --git a/src/widgets/Glass/logic/hooks/__tests__/useViewType.test.tsx b/src/widgets/Glass/logic/hooks/__tests__/useViewType.test.tsx
deleted file mode 100644
index 6c39e8945..000000000
--- a/src/widgets/Glass/logic/hooks/__tests__/useViewType.test.tsx
+++ /dev/null
@@ -1,204 +0,0 @@
-import { act } from '@testing-library/react';
-import React from 'react';
-
-import { WidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-import { renderHookWithProviders } from '@utils/test-utils';
-import { PluginContext } from '@widgets/Glass/plugins/PluginContext';
-import { OrderBookPlugin } from '@widgets/Glass/plugins/types';
-import { ViewType, ViewTypeItem } from '@widgets/Glass/types';
-import { GlassWidgetConfig, Widget, WidgetContentType } from 'types/Widgets';
-
-import { useViewType } from '../useViewType';
-
-const createMockWidget = (widgetContentProps?: Partial<Widget['widgetContentProps']>): Widget => ({
-  id: 1,
-  name: 'Test Widget',
-  type: WidgetContentType.glass,
-  widgetContentProps: widgetContentProps || {},
-  zIndex: 1,
-  position: { x: 0, y: 0 },
-  sizes: { width: '100%', height: '100%' },
-  workspaceId: 1,
-  masters: [],
-  master: null,
-  inFocus: false,
-  isExpand: false,
-  beforeExpandParams: null,
-});
-
-const createWidgetState = (view?: ViewType, widgetConfig?: Partial<GlassWidgetConfig>) => {
-  const widgetContentProps = view ? { glassState: { view } } : {};
-  return {
-    widgets: {
-      widgets: [createMockWidget(widgetContentProps)],
-      widgetsConfig: {
-        glass: {
-          view: 'four-col-3' as ViewType,
-          showYield: false,
-          showSpread: false,
-          choosenInstrument: '',
-          ...widgetConfig,
-        },
-      },
-    },
-  };
-};
-
-const createPluginValue = (
-  uiConfig: Partial<OrderBookPlugin['uiConfig']> = {
-    views: ['four-col-1', 'four-col-2', 'four-col-3'] as ViewTypeItem[],
-  },
-): OrderBookPlugin =>
-  ({
-    actions: {},
-    subscribe: jest.fn(),
-    uiConfig,
-  }) as OrderBookPlugin;
-
-const renderUseViewTypeHook = (
-  preloadedState: Record<string, unknown> = createWidgetState(),
-  pluginValue: OrderBookPlugin = createPluginValue(),
-) => {
-  const wrapper = ({ children }: { children: React.ReactNode }) => (
-    <WidgetIdContext.Provider value={1}>
-      <PluginContext.Provider value={pluginValue}>{children}</PluginContext.Provider>
-    </WidgetIdContext.Provider>
-  );
-
-  return renderHookWithProviders(() => useViewType(), {
-    preloadedState,
-    wrapper,
-  });
-};
-
-describe('useViewType', () => {
-  describe('initial view', () => {
-    it('should return default view from widgetsConfig when no widget properties exist', () => {
-      const { result } = renderUseViewTypeHook();
-
-      expect(result.current.view).toBe('four-col-3');
-    });
-
-    it('should return view from widget properties when it exists', () => {
-      const preloadedState = createWidgetState('four-col-1');
-
-      const { result } = renderUseViewTypeHook(preloadedState);
-
-      expect(result.current.view).toBe('four-col-1');
-    });
-
-    it('should return default viewItems when no plugin config', () => {
-      const { result } = renderUseViewTypeHook();
-
-      expect(result.current.viewItems).toHaveLength(3);
-      expect(result.current.viewItems[0].value).toBe('four-col-1');
-      expect(result.current.viewItems[1].value).toBe('four-col-2');
-      expect(result.current.viewItems[2].value).toBe('four-col-3');
-    });
-  });
-
-  describe('updateView', () => {
-    it('should call updateProperties with new view', () => {
-      const { result, store } = renderUseViewTypeHook();
-
-      act(() => {
-        result.current.updateView('four-col-2');
-      });
-
-      const widget = store.getState().widgets.widgets[0];
-      expect(widget.widgetContentProps?.glassState?.view).toBe('four-col-2');
-    });
-
-    it('should initialize glassState if it does not exist', () => {
-      const preloadedState = {
-        widgets: {
-          widgets: [createMockWidget({})],
-          widgetsConfig: {
-            glass: {
-              view: 'four-col-3' as ViewType,
-              showYield: false,
-              showSpread: false,
-              choosenInstrument: '',
-            },
-          },
-        },
-      };
-
-      const { result, store } = renderUseViewTypeHook(preloadedState);
-
-      act(() => {
-        result.current.updateView('four-col-1');
-      });
-
-      const widget = store.getState().widgets.widgets[0];
-      expect(widget.widgetContentProps?.glassState?.view).toBe('four-col-1');
-    });
-  });
-
-  describe('viewItems with plugin config', () => {
-    it('should return custom viewItems when plugin provides uiConfig.views', () => {
-      const pluginValue = createPluginValue({
-        views: ['four-col-1', 'table'] as ViewTypeItem[],
-      });
-
-      const { result } = renderUseViewTypeHook(undefined, pluginValue);
-
-      expect(result.current.viewItems).toHaveLength(2);
-      expect(result.current.viewItems[0].value).toBe('four-col-1');
-      expect(result.current.viewItems[1].value).toBe('table');
-    });
-  });
-
-  describe('resolveView effect', () => {
-    it('should keep current view when it is valid', () => {
-      const preloadedState = createWidgetState('four-col-1');
-
-      const { result } = renderUseViewTypeHook(preloadedState);
-
-      expect(result.current.view).toBe('four-col-1');
-    });
-
-    it('should resolve to plugin default view when current view is not available', () => {
-      const pluginValue = createPluginValue({
-        defaultView: 'four-col-3',
-        views: ['four-col-2', 'four-col-3'] as ViewTypeItem[],
-      });
-
-      const preloadedState = createWidgetState('four-col-1');
-
-      const { result, rerender } = renderUseViewTypeHook(preloadedState, pluginValue);
-
-      rerender();
-
-      expect(result.current.view).toBe('four-col-3');
-    });
-
-    it('should resolve to widget config view when current view is not in plugin views', () => {
-      const pluginValue = createPluginValue({
-        views: ['four-col-2', 'four-col-3'] as ViewTypeItem[],
-      });
-
-      const preloadedState = createWidgetState('four-col-1', { view: 'four-col-3' });
-
-      const { result, rerender } = renderUseViewTypeHook(preloadedState, pluginValue);
-
-      rerender();
-
-      expect(result.current.view).toBe('four-col-3');
-    });
-
-    it('should resolve to first plugin view current and default view are not available', () => {
-      const pluginValue = createPluginValue({
-        views: ['four-col-2', 'four-col-3'] as ViewTypeItem[],
-      });
-
-      const preloadedState = createWidgetState('four-col-1', { view: 'table' });
-
-      const { result, rerender } = renderUseViewTypeHook(preloadedState, pluginValue);
-
-      rerender();
-
-      expect(result.current.view).toBe('four-col-2');
-    });
-  });
-});
diff --git a/src/widgets/Glass/logic/hooks/useColumns.tsx b/src/widgets/Glass/logic/hooks/useColumns.tsx
deleted file mode 100644
index f8fc6f6ba..000000000
--- a/src/widgets/Glass/logic/hooks/useColumns.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import React, { useCallback, useMemo, useRef, useState } from 'react';
-
-import { ColumnsSettingsMenuItem } from '@components/Table/components/ColumnsSettingsMenuItem';
-import { useChangeProperties, useSelectProperties } from '@modules/widgetProperties';
-import { mergeSavedWithInitialColumns } from '@utils/mergeSavedWithInitialColumns';
-import { GlassWidgetProperties } from '@widgets/Glass/properties/types';
-
-import type { ViewColumn } from '../../components/TableView/types';
-import type { CheckboxValue } from '@uikit/Checkbox';
-
-type UseColumnsProps<T> = {
-  columnsConfig: ViewColumn<T>[] | undefined;
-};
-
-export const useColumns = <T,>({ columnsConfig }: UseColumnsProps<T>) => {
-  const view = useSelectProperties((state: Partial<GlassWidgetProperties>) => state.glassState?.view);
-  const savedColumns = useSelectProperties((state: Partial<GlassWidgetProperties>) =>
-    view ? (state.tableViewColumns?.[view] as ViewColumn<T>[]) : null,
-  );
-
-  const mergedColumns = useMemo(
-    () => mergeSavedWithInitialColumns(savedColumns, columnsConfig ?? [], 'key'),
-    [columnsConfig, savedColumns],
-  );
-
-  const [columns, setColumns] = useState(mergedColumns);
-  const columnsRef = useRef(columns);
-
-  const { updateProperties } = useChangeProperties<GlassWidgetProperties>();
-
-  const checkedList: CheckboxValue[] = useMemo(
-    () => columns?.filter((c) => !c.hidden).map((c) => c.dataIndex),
-    [columns],
-  );
-
-  const updateColumns = useCallback(
-    (newColumns: ViewColumn<T>[]) => {
-      columnsRef.current = newColumns;
-      setColumns(newColumns);
-      updateProperties((state) => {
-        if (!view) {
-          return;
-        }
-        if (!state.tableViewColumns) {
-          state.tableViewColumns = {};
-        }
-        state.tableViewColumns[view] = newColumns.map(({ key, hidden }) => ({ key, hidden }));
-      });
-    },
-    [updateProperties, view],
-  );
-
-  const handleCheck = useCallback(
-    (checked: CheckboxValue[]) => {
-      const newColumns = columnsRef.current.map((c) => ({
-        ...c,
-        hidden: c.dataIndex ? !checked.includes(c.dataIndex) : true,
-      }));
-      updateColumns(newColumns);
-    },
-    [updateColumns],
-  );
-
-  const handleSaveColumns = useCallback(
-    (newColumns: ViewColumn<T>[]) => {
-      updateColumns(newColumns);
-    },
-    [updateColumns],
-  );
-
-  const settingsItems = useMemo(
-    () => [
-      {
-        key: '1',
-        label: (
-          <ColumnsSettingsMenuItem
-            columns={columns}
-            checkedList={checkedList}
-            onChangeCheckedList={handleCheck}
-            onSaveColumnsHandler={handleSaveColumns}
-          />
-        ),
-      },
-    ],
-    [checkedList, columns, handleCheck, handleSaveColumns],
-  );
-
-  return { columns, settingsItems };
-};
diff --git a/src/widgets/Glass/logic/hooks/useGlassFacade.ts b/src/widgets/Glass/logic/hooks/useGlassFacade.ts
index 1050ff5e9..4da6a7b23 100644
--- a/src/widgets/Glass/logic/hooks/useGlassFacade.ts
+++ b/src/widgets/Glass/logic/hooks/useGlassFacade.ts
@@ -2,15 +2,15 @@ import { MouseEvent, useEffect } from 'react';
 import { useDispatch } from 'react-redux';
 
 import { useAppSelect } from '@hooks/useAppSelector';
+import { Contract } from '@modules/contracts';
 import { getGlassSidesByInstrumentSelector } from '@store/selectors/glass';
 import { setGlassSides } from '@store/slices/glass';
 import { useGlassState } from '@utils/hooks/useGlassState';
-import { usePlugin } from '@widgets/Glass/plugins/PluginContext';
 
 import { addBestPrice } from '../utils/addBestPrice';
 
 import type { Price } from '../../types';
-import type { Contract } from '@modules/contracts';
+import type { OrderBookPlugin } from '@widgets/Glass/plugins/types';
 
 type UseGlassFacadeResult = {
   sides: Price[];
@@ -19,29 +19,31 @@ type UseGlassFacadeResult = {
 
 type UseGlassFacadeProps = {
   choosenInstrumentFromSearch: Contract['key'];
+  widgetId: number;
   choosenOption?: Contract;
   depthCount: number;
   bestPriceIndication: boolean;
   displayMyFirmOrders: boolean;
+  activePlugin: OrderBookPlugin | null;
 };
 
 export function useGlassFacade({
   choosenInstrumentFromSearch,
+  widgetId,
   depthCount,
   bestPriceIndication,
   displayMyFirmOrders,
+  activePlugin,
 }: UseGlassFacadeProps): UseGlassFacadeResult {
   const sides = useAppSelect(getGlassSidesByInstrumentSelector(choosenInstrumentFromSearch));
 
   const dispatch = useDispatch();
 
-  const { subscribe } = usePlugin() ?? {};
-
   useEffect(() => {
     if (!choosenInstrumentFromSearch) {
       return;
     }
-    const unsubscribe = subscribe?.((newSides) => {
+    const unsubscribe = activePlugin?.subscribe((newSides) => {
       dispatch(
         setGlassSides({
           instrument: choosenInstrumentFromSearch,
@@ -51,9 +53,9 @@ export function useGlassFacade({
     });
 
     return () => unsubscribe?.();
-  }, [choosenInstrumentFromSearch, dispatch, subscribe]);
+  }, [activePlugin, choosenInstrumentFromSearch, dispatch]);
 
-  const { changeGlassState } = useGlassState();
+  const { changeGlassState } = useGlassState(widgetId);
 
   useEffect(() => {
     changeGlassState({
diff --git a/src/widgets/Glass/logic/hooks/useGlassRowContextMenu.ts b/src/widgets/Glass/logic/hooks/useGlassRowContextMenu.ts
index acfc8dd8c..0ae6a5230 100644
--- a/src/widgets/Glass/logic/hooks/useGlassRowContextMenu.ts
+++ b/src/widgets/Glass/logic/hooks/useGlassRowContextMenu.ts
@@ -4,16 +4,18 @@ import { useContextMenuOverlay } from '@uikit/ContextMenuOverlay';
 
 import type { ContextMenuItem } from '@uikit/ContextMenu/types';
 import type { ContextMenuOverlayProps } from '@uikit/ContextMenuOverlay/types';
+import type { ModifiedFourColAntdData } from '@widgets/Glass/types';
 
-type UseGlassRowContextMenuProps<T> = {
-  getContextMenuItems?: (payload: T) => ContextMenuItem[];
+type UseGlassRowContextMenuProps = {
+  getContextMenuItems?: (payload: ModifiedFourColAntdData) => ContextMenuItem[];
 };
 
-export const useGlassRowContextMenu = <T>({ getContextMenuItems }: UseGlassRowContextMenuProps<T>) => {
+export const useGlassRowContextMenu = ({ getContextMenuItems }: UseGlassRowContextMenuProps) => {
   const ignoreNextClickRef = useRef<boolean>(false);
 
   const getItems = useCallback(
-    (payload: T | undefined) => (payload && getContextMenuItems ? getContextMenuItems(payload) : []),
+    (payload: ModifiedFourColAntdData | undefined) =>
+      payload && getContextMenuItems ? getContextMenuItems(payload) : [],
     [getContextMenuItems],
   );
 
@@ -21,7 +23,7 @@ export const useGlassRowContextMenu = <T>({ getContextMenuItems }: UseGlassRowCo
     onContextMenu,
     payload: contextMenuPayload,
     menuProps: { onClose, coords },
-  } = useContextMenuOverlay<T>({ shouldOpen: (p) => getItems(p).length > 0 });
+  } = useContextMenuOverlay<ModifiedFourColAntdData>({ shouldOpen: (p) => getItems(p).length > 0 });
 
   const handleClose: ContextMenuOverlayProps['onClose'] = (source) => {
     onClose();
diff --git a/src/widgets/Glass/logic/hooks/useGlassView.tsx b/src/widgets/Glass/logic/hooks/useGlassView.tsx
index 0c8fac752..96ba3f26e 100644
--- a/src/widgets/Glass/logic/hooks/useGlassView.tsx
+++ b/src/widgets/Glass/logic/hooks/useGlassView.tsx
@@ -1,23 +1,48 @@
-import { useState } from 'react';
+import React, { MutableRefObject, useCallback, useEffect, useRef, useState } from 'react';
 
+import EmptyWidgetDisplay from '@components/EmptyWidgetDisplay';
 import { Contract } from '@modules/contracts';
-import { usePlugin } from '@widgets/Glass/plugins/PluginContext';
+import { OrderBookPlugin } from '@widgets/Glass/plugins/types';
+import { GlassWidgetConfig } from 'types/Widgets';
 
-import { Price } from '../..';
+import { ModifiedFourColAntdData, Price } from '../..';
+import { HorizontalView } from '../../components/views/HorizontalView';
+import { ThreeColumnVerticalView } from '../../components/views/ThreeColumnVerticalView';
+import { TwoColumnVerticalView } from '../../components/views/TwoColumnVerticalView';
 
 import { useGlassRowContextMenu } from './useGlassRowContextMenu';
 
 import type { TableProps } from 'antd';
 
 type UseGlassViewParams = {
+  sides: Price[];
+  depthCount: number;
+  bestPriceIndication: boolean;
+  displayMyFirmOrders: boolean;
+  activePlugin: OrderBookPlugin | null | undefined;
   choosenInstrumentFromSearch: Contract['issKey'];
+  view: GlassWidgetConfig['view'];
+  refWrapper: MutableRefObject<HTMLDivElement | null>;
+  widgetId: number;
+  isSapfirInstrument: boolean;
 };
 
-export const useGlassView = ({ choosenInstrumentFromSearch }: UseGlassViewParams) => {
+export const useGlassView = ({
+  sides,
+  depthCount,
+  bestPriceIndication,
+  displayMyFirmOrders,
+  activePlugin,
+  choosenInstrumentFromSearch,
+  view,
+  refWrapper,
+  widgetId,
+  isSapfirInstrument,
+}: UseGlassViewParams) => {
   const [isSettingsOpen, setIsSettingsOpen] = useState(false);
   const [isOpenEmptyAction, setIsOpenEmptyAction] = useState<boolean>(false);
 
-  const { actions, getContextMenuItems } = usePlugin() ?? {};
+  const { actions: { rowClick } = {}, getContextMenuItems, uiConfig: { noData } = {} } = activePlugin ?? {};
 
   const { ignoreRowClick, onContextMenu, contextMenuProps } = useGlassRowContextMenu({
     getContextMenuItems,
@@ -27,13 +52,18 @@ export const useGlassView = ({ choosenInstrumentFromSearch }: UseGlassViewParams
     setIsOpenEmptyAction(true);
     setIsSettingsOpen(false);
   };
+  const scrollToBestPriceRef = useRef<(() => void) | null>(null);
 
-  const onRow: TableProps<Price>['onRow'] = (result) => ({
+  const setScrollToBestPrice = useCallback((scrollToBestPrice: () => void) => {
+    scrollToBestPriceRef.current = scrollToBestPrice;
+  }, []);
+
+  const onRowClick: TableProps<ModifiedFourColAntdData>['onRow'] = (result: ModifiedFourColAntdData) => ({
     onClick: () => {
       if (ignoreRowClick()) {
         return;
       }
-      actions?.rowClick?.({
+      rowClick?.({
         direction: result.buysell?.toLowerCase(),
         quantity: result.quantity,
         price: result.price,
@@ -43,13 +73,98 @@ export const useGlassView = ({ choosenInstrumentFromSearch }: UseGlassViewParams
     onContextMenu: (e) => onContextMenu(e, result),
   });
 
+  const renderContent = () => {
+    if (!choosenInstrumentFromSearch) {
+      return (
+        <EmptyWidgetDisplay
+          customErrorFields={noData}
+          widgetType="glass"
+        />
+      );
+    }
+
+    if (sides.length > 0) {
+      switch (view) {
+        case 'four-col-1':
+          return (
+            <HorizontalView
+              choosenInstrumentFromSearch={choosenInstrumentFromSearch}
+              data={sides}
+              depthCount={depthCount}
+              bestPriceIndication={bestPriceIndication}
+              displayMyFirmOrders={displayMyFirmOrders}
+              containerRef={refWrapper}
+              setScrollToBestPrice={setScrollToBestPrice}
+              onRow={onRowClick}
+              widgetId={widgetId}
+              isSapfirInstrument={isSapfirInstrument}
+            />
+          );
+        case 'four-col-2':
+          return (
+            <TwoColumnVerticalView
+              choosenInstrumentFromSearch={choosenInstrumentFromSearch}
+              data={sides}
+              depthCount={depthCount}
+              bestPriceIndication={bestPriceIndication}
+              displayMyFirmOrders={displayMyFirmOrders}
+              setScrollToBestPrice={setScrollToBestPrice}
+              onRow={onRowClick}
+              widgetId={widgetId}
+              isSapfirInstrument={isSapfirInstrument}
+            />
+          );
+        case 'four-col-3':
+          return (
+            <ThreeColumnVerticalView
+              choosenInstrumentFromSearch={choosenInstrumentFromSearch}
+              data={sides}
+              depthCount={depthCount}
+              bestPriceIndication={bestPriceIndication}
+              displayMyFirmOrders={displayMyFirmOrders}
+              setScrollToBestPrice={setScrollToBestPrice}
+              onRow={onRowClick}
+              widgetId={widgetId}
+              isSapfirInstrument={isSapfirInstrument}
+            />
+          );
+        default:
+          return null;
+      }
+    }
+
+    return (
+      <EmptyWidgetDisplay
+        customErrorFields={noData}
+        widgetType="glassNoData"
+      />
+    );
+  };
+
+  useEffect(() => {
+    const wrapper = refWrapper.current;
+
+    if (!wrapper) {
+      return;
+    }
+
+    const callback = () => scrollToBestPriceRef.current?.();
+    const resizeObserver = new ResizeObserver(callback);
+    resizeObserver.observe(wrapper);
+
+    return () => {
+      resizeObserver.disconnect();
+    };
+    // eslint-disable-next-line react-hooks/exhaustive-deps -- отлючено в TRADERADAR-7418
+  }, []);
+
   return {
     isSettingsOpen,
     setIsSettingsOpen,
     openInstrumentModal,
+    renderContent,
     isOpenEmptyAction,
     setIsOpenEmptyAction,
     contextMenuProps,
-    onRow,
   };
 };
diff --git a/src/widgets/Glass/logic/hooks/useHeaderMenu.tsx b/src/widgets/Glass/logic/hooks/useHeaderMenu.tsx
deleted file mode 100644
index c58473e84..000000000
--- a/src/widgets/Glass/logic/hooks/useHeaderMenu.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import React, { ReactNode, useState } from 'react';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { useChangeProperties, useSelectProperties } from '@modules/widgetProperties';
-import { widgetByIdSelector } from '@store/selectors/widgets';
-import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-import { DispayDepth } from '@widgets/Glass/components/DispayDepth';
-import { DisplaySwitch } from '@widgets/Glass/components/DisplaySwitch';
-import { SideDropdown } from '@widgets/Glass/components/SideDropdown';
-import { DEFAULT_DEPTH_COUNT } from '@widgets/Glass/constants';
-import { usePlugin } from '@widgets/Glass/plugins/PluginContext';
-
-import { useViewType } from './useViewType';
-
-import type { GlassWidgetProperties } from '@widgets/Glass/properties/types';
-import type { ViewType, VolumeType } from '@widgets/Glass/types';
-
-export const useHeaderMenu = () => {
-  const widgetId = useWidgetIdContext();
-  const currentWidget = useAppSelect(widgetByIdSelector(widgetId));
-
-  const glassState = useSelectProperties((wProps: Partial<GlassWidgetProperties>) => wProps.glassState);
-  const { updateProperties } = useChangeProperties<GlassWidgetProperties>();
-
-  const [dropdownOpen, setDropdownOpen] = useState(false);
-  const [isOpenContextMenuFromWidget, setIsOpenContextMenuFromWidget] = useState(false);
-  const [depthCount, setDepthCount] = useState(glassState?.depthCount ?? DEFAULT_DEPTH_COUNT);
-  const [bestPriceIndication, setBestPriceIndication] = useState(glassState?.bestPriceIndication ?? false);
-  const [displayMyFirmOrders, setDisplayMyFirmOrders] = useState(glassState?.displayMyFirmOrders ?? false);
-
-  const { uiConfig } = usePlugin() ?? {};
-
-  const { view, viewItems, updateView } = useViewType();
-
-  const volume = glassState?.volume ?? uiConfig?.volumeType?.defaultValue ?? 'lots';
-
-  const isLeftView: boolean = (() => {
-    const widgetWidth = Number(currentWidget?.sizes?.width.split('px')[0]);
-
-    if (!currentWidget?.position?.x || Number.isNaN(widgetWidth)) {
-      return false;
-    }
-
-    return window.innerWidth - currentWidget.position.x - widgetWidth < 520;
-  })();
-
-  const handleViewChange = (nextView: ViewType) => {
-    updateView(nextView);
-    setIsOpenContextMenuFromWidget(false);
-  };
-
-  const handleVolumeTypeChange = (nextValue: VolumeType) => {
-    updateProperties((state) => {
-      if (state.glassState) {
-        state.glassState.volume = nextValue;
-      }
-    });
-    setIsOpenContextMenuFromWidget(false);
-  };
-
-  const menuItems: ReactNode[] = [
-    <SideDropdown<ViewType>
-      title="Тип отображения"
-      key="viewTypeDropdown"
-      value={view}
-      onChange={handleViewChange}
-      isLeftView={isLeftView}
-      items={viewItems}
-    />,
-    uiConfig?.volumeType?.visible && (
-      <SideDropdown
-        title="Отображение объема"
-        key="volumeTypeDropdown"
-        value={volume}
-        onChange={handleVolumeTypeChange}
-        isLeftView={isLeftView}
-        items={[
-          { value: 'units', label: uiConfig.volumeType.labels?.units ?? 'Ед. изм.' },
-          { value: 'lots', label: uiConfig.volumeType.labels?.lots ?? 'Лоты' },
-        ]}
-      />
-    ),
-    <DispayDepth
-      key="dispayDepth"
-      depthCount={depthCount}
-      setDepthCount={setDepthCount}
-    />,
-    <DisplaySwitch
-      key="bestPriceIndication"
-      visible
-      displayMyFirmOrders={bestPriceIndication}
-      setDisplayMyFirmOrders={setBestPriceIndication}
-      title="Индикация лучшей цены"
-    />,
-    <DisplaySwitch
-      key="dispayMyFirmOrders"
-      visible={!!uiConfig?.displayMyOrders}
-      displayMyFirmOrders={displayMyFirmOrders}
-      setDisplayMyFirmOrders={setDisplayMyFirmOrders}
-      title="Показывать ордера моей фирмы"
-    />,
-  ];
-
-  return {
-    menuItems,
-    view,
-    depthCount,
-    bestPriceIndication,
-    displayMyFirmOrders,
-    dropdownOpen,
-    setDropdownOpen,
-    isOpenContextMenuFromWidget,
-    setIsOpenContextMenuFromWidget,
-  };
-};
diff --git a/src/widgets/Glass/logic/hooks/usePlugin.ts b/src/widgets/Glass/logic/hooks/usePlugin.ts
new file mode 100644
index 000000000..2874e2571
--- /dev/null
+++ b/src/widgets/Glass/logic/hooks/usePlugin.ts
@@ -0,0 +1,40 @@
+import { useMemo } from 'react';
+import { useDispatch, useStore } from 'react-redux';
+
+import { useContracts } from '@modules/contracts';
+import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
+import { ORDER_BOOK_PLUGINS } from '@widgets/Glass/plugins';
+import { defaultOrderBookPlugin } from '@widgets/Glass/plugins/defaultPlugin';
+
+import type { RootState } from '@store/setupStore';
+import type { OrderBookPluginProps } from '@widgets/Glass/plugins/types';
+
+export const usePlugin = (tickerId: string | null) => {
+  const dispatch = useDispatch();
+  const store = useStore<RootState>();
+
+  const widgetId = useWidgetIdContext();
+
+  const { contractsMap } = useContracts();
+
+  /** Активный плагин стакана */
+  const activePlugin = useMemo(() => {
+    if (!tickerId) {
+      return null;
+    }
+
+    const pluginProps: OrderBookPluginProps = {
+      widgetId,
+      tickerId,
+      contract: tickerId ? contractsMap.get(tickerId) : undefined,
+      dispatch,
+      select: (selector) => selector(store.getState()),
+    };
+
+    const pluginFactory = ORDER_BOOK_PLUGINS.find((plugin) => plugin(pluginProps).check()) ?? defaultOrderBookPlugin;
+
+    return pluginFactory?.(pluginProps);
+  }, [tickerId, widgetId, contractsMap, dispatch, store]);
+
+  return { activePlugin };
+};
diff --git a/src/widgets/Glass/logic/hooks/usePluginDefinition.ts b/src/widgets/Glass/logic/hooks/usePluginDefinition.ts
deleted file mode 100644
index b9e98b891..000000000
--- a/src/widgets/Glass/logic/hooks/usePluginDefinition.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { ORDER_BOOK_PLUGINS } from '@widgets/Glass/plugins';
-import { defaultOrderBookPlugin } from '@widgets/Glass/plugins/defaultPlugin';
-
-import type { Contract } from '@modules/contracts';
-
-type UsePluginDefinitionProps = { tickerId: string | null; contract?: Contract };
-
-export const usePluginDefinition = ({ tickerId, contract }: UsePluginDefinitionProps) =>
-  tickerId ? (ORDER_BOOK_PLUGINS.find((plugin) => plugin.check(tickerId, contract)) ?? defaultOrderBookPlugin) : null;
diff --git a/src/widgets/Glass/logic/hooks/useScrollToBestPrice.ts b/src/widgets/Glass/logic/hooks/useScrollToBestPrice.ts
deleted file mode 100644
index a59441194..000000000
--- a/src/widgets/Glass/logic/hooks/useScrollToBestPrice.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import debounce from 'lodash/debounce';
-
-import { RefObject, useEffect, useRef } from 'react';
-
-import { customScrollIntoView } from '@utils/customScrollIntoView';
-import { ScrollStrategy } from '@widgets/Glass/components/CommonView/types';
-
-export type UseScrollToBestPriceProps = {
-  scrollStrategy: ScrollStrategy;
-  containerRef: RefObject<HTMLDivElement>;
-  enabled?: boolean;
-};
-
-export const useScrollToBestPrice = ({ containerRef, scrollStrategy, enabled = true }: UseScrollToBestPriceProps) => {
-  const anchorRef = useRef<HTMLDivElement>(null);
-
-  useEffect(() => {
-    const container = containerRef.current;
-
-    if (!container || !enabled) {
-      return;
-    }
-
-    const scrollToBestPrice = debounce(() => {
-      if (scrollStrategy === 'top') {
-        container.scrollTo({ top: 0, behavior: 'smooth' });
-      }
-      if (scrollStrategy === 'best') {
-        customScrollIntoView(anchorRef.current, { block: 'center', behavior: 'smooth' });
-      }
-    }, 300);
-
-    const resizeObserver = new ResizeObserver(scrollToBestPrice);
-    resizeObserver.observe(container);
-
-    scrollToBestPrice();
-
-    return () => {
-      resizeObserver.disconnect();
-    };
-  }, [containerRef, enabled, scrollStrategy]);
-
-  return { anchorRef };
-};
diff --git a/src/widgets/Glass/logic/hooks/useSelectedInstrument.ts b/src/widgets/Glass/logic/hooks/useSelectedInstrument.ts
deleted file mode 100644
index 73bf42610..000000000
--- a/src/widgets/Glass/logic/hooks/useSelectedInstrument.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { useState } from 'react';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { Contract } from '@modules/contracts';
-import { widgetConfigGlassSelector } from '@store/selectors/widgetsConfig';
-import { useGlassState } from '@utils/hooks/useGlassState';
-
-export type SelectedInstrument = {
-  selectedInstrument: string | null;
-  updateSelectedInstrument: (key: string | null) => void;
-};
-
-export const useSelectedInstrument = (): SelectedInstrument => {
-  const glassDefaultSettings = useAppSelect(widgetConfigGlassSelector);
-  const { glassState } = useGlassState();
-  const [selectedInstrument, setSelectedInstrument] = useState<Contract['issKey']>(
-    glassState.choosenInstrument ?? glassDefaultSettings.choosenInstrument,
-  );
-
-  return { selectedInstrument, updateSelectedInstrument: setSelectedInstrument };
-};
diff --git a/src/widgets/Glass/logic/hooks/useViewType.ts b/src/widgets/Glass/logic/hooks/useViewType.ts
deleted file mode 100644
index e716b4a57..000000000
--- a/src/widgets/Glass/logic/hooks/useViewType.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { useCallback, useEffect, useMemo } from 'react';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { useChangeProperties, useSelectProperties } from '@modules/widgetProperties';
-import { widgetConfigGlassSelector } from '@store/selectors/widgetsConfig';
-import { ItemsType } from '@widgets/Glass/components/SideDropdown';
-import { defaultViewTypeConfig } from '@widgets/Glass/config';
-import { usePlugin } from '@widgets/Glass/plugins/PluginContext';
-import { GlassWidgetProperties } from '@widgets/Glass/properties/types';
-import { ViewType } from '@widgets/Glass/types';
-
-import { getViewTypeItems } from '../utils/getViewTypeItems';
-import { resolveView } from '../utils/resolveDefaultView';
-
-const DEFAULT_VIEW_TYPES: ViewType[] = ['four-col-1', 'four-col-2', 'four-col-3'] as const;
-
-const DEFAULT_VIEW_TYPE_ITEMS: ItemsType<ViewType>[] = getViewTypeItems(DEFAULT_VIEW_TYPES, defaultViewTypeConfig);
-
-export const useViewType = () => {
-  const glassDefaultSettings = useAppSelect(widgetConfigGlassSelector);
-
-  const viewFromStore = useSelectProperties((wProps: Partial<GlassWidgetProperties>) => wProps.glassState?.view);
-  const { updateProperties } = useChangeProperties<GlassWidgetProperties>();
-
-  const { uiConfig } = usePlugin() ?? {};
-
-  const view = viewFromStore ?? glassDefaultSettings.view;
-
-  const updateView = useCallback(
-    (nextValue: ViewType) => {
-      updateProperties((state) => {
-        if (!state.glassState) {
-          state.glassState = {} as GlassWidgetProperties['glassState'];
-        }
-        state.glassState.view = nextValue;
-      });
-    },
-    [updateProperties],
-  );
-
-  useEffect(() => {
-    const resolvedView = resolveView({
-      view,
-      pluginDefaultView: uiConfig?.defaultView,
-      widgetDefaultView: glassDefaultSettings.view,
-      pluginViews: uiConfig?.views,
-      defaultViews: DEFAULT_VIEW_TYPE_ITEMS,
-    });
-
-    if (resolvedView !== view) {
-      updateView(resolvedView);
-    }
-  }, [glassDefaultSettings.view, uiConfig?.defaultView, uiConfig?.views, updateView, view]);
-
-  const viewItems = useMemo(
-    () => (uiConfig?.views ? getViewTypeItems(uiConfig.views, defaultViewTypeConfig) : DEFAULT_VIEW_TYPE_ITEMS),
-    [uiConfig?.views],
-  );
-
-  return { view, updateView, viewItems };
-};
diff --git a/src/widgets/Glass/logic/hooks/useWidgetGlassFormFacade/useWidgetGlassFormFacade.tsx b/src/widgets/Glass/logic/hooks/useWidgetGlassFormFacade/useWidgetGlassFormFacade.tsx
index b67877c6a..84edb8f26 100644
--- a/src/widgets/Glass/logic/hooks/useWidgetGlassFormFacade/useWidgetGlassFormFacade.tsx
+++ b/src/widgets/Glass/logic/hooks/useWidgetGlassFormFacade/useWidgetGlassFormFacade.tsx
@@ -1,4 +1,5 @@
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import React, { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';
+
 import { useDispatch } from 'react-redux';
 
 import { communicator } from '@core/comm';
@@ -12,17 +13,18 @@ import { unbindWidgets } from '@store/slices/widgets';
 import { filterByUniqIssKey } from '@utils/filterByUniqIssKey';
 import { useGlassState } from '@utils/hooks/useGlassState';
 import { useWidgetsBind } from '@utils/hooks/useWidgetsBind';
-import { GlassWidgetProperties } from '@widgets/Glass/properties/types';
+import { ViewTypeDropdown } from '@widgets/Glass/components';
+import { DispayDepth } from '@widgets/Glass/components/DispayDepth/DispayDepth';
+import { DisplaySwitch } from '@widgets/Glass/components/DisplaySwitch';
+import { DEFAULT_DEPTH_COUNT } from '@widgets/Glass/constants';
+import { GlassProps } from 'types/Glass/GlassState';
 import { WidgetContentBasicProps } from 'types/Widgets';
 
+import { ViewType } from '../../../types';
 import { getIsSapfirInstrument } from '../../utils/getIsSapfirInstrument';
-import { useHeaderMenu } from '../useHeaderMenu';
-import { SelectedInstrument } from '../useSelectedInstrument';
+import { usePlugin } from '../usePlugin';
 
-export const useWidgetGlassFormFacade = (
-  props: WidgetContentBasicProps<GlassWidgetProperties> & SelectedInstrument,
-) => {
-  const { selectedInstrument, updateSelectedInstrument } = props;
+export const useWidgetGlassFormFacade = (props: WidgetContentBasicProps<GlassProps>) => {
   const [isOver, setIsOver] = useState<boolean>(false);
 
   const dispatch = useDispatch();
@@ -35,9 +37,16 @@ export const useWidgetGlassFormFacade = (
   );
 
   const glassDefaultSettings = useAppSelect(widgetConfigGlassSelector);
-  const { glassState } = useGlassState();
+  const { glassState, changeGlassState } = useGlassState(props.widgetId);
+
+  const view = glassState?.view ?? glassDefaultSettings.view;
 
+  const [dropdownOpen, setDropdownOpen] = useState(false);
+  const [isOpenContextMenuFromWidget, setIsOpenContextMenuFromWidget] = useState(false);
   const [chosenInstrumentName, setChosenIntrumentName] = useState('');
+  const [choosenInstrumentFromSearch, setChoosenInstrumentFromSearch] = useState<Contract['issKey']>(
+    glassState.choosenInstrument ?? glassDefaultSettings.choosenInstrument,
+  );
 
   const { contracts, contractsMap } = useContracts();
   const [choosenOption, setChoosenOption] = useState<Contract | undefined>();
@@ -46,25 +55,67 @@ export const useWidgetGlassFormFacade = (
   const currentWidget = useAppSelect(widgetByIdSelector(props.widgetId));
   const publicContext = useAppSelect<PublicContextItem[]>((state) => state.publicContext.publicContext);
 
-  const {
-    menuItems,
-    view,
-    depthCount,
-    bestPriceIndication,
-    displayMyFirmOrders,
-    dropdownOpen,
-    setDropdownOpen,
-    isOpenContextMenuFromWidget,
-    setIsOpenContextMenuFromWidget,
-  } = useHeaderMenu();
+  const { activePlugin } = usePlugin(choosenInstrumentFromSearch);
+
+  const isLeftViewTypeDropdown: boolean = (() => {
+    const widgetWidth = Number(currentWidget?.sizes?.width.split('px')[0]);
+
+    if (!currentWidget?.position?.x || Number.isNaN(widgetWidth)) {
+      return false;
+    }
+
+    return window.innerWidth - currentWidget.position.x - widgetWidth < 520;
+  })();
+
+  const handleViewChange = (nextView: ViewType) => {
+    changeGlassState({ view: nextView });
+    setIsOpenContextMenuFromWidget(false);
+  };
+  const [depthCount, setDepthCount] = useState(props.widgetContentProps?.glassState?.depthCount ?? DEFAULT_DEPTH_COUNT);
+  const [bestPriceIndication, setBestPriceIndication] = useState(
+    props.widgetContentProps?.glassState?.bestPriceIndication ?? false,
+  );
+  const [displayMyFirmOrders, setDisplayMyFirmOrders] = useState(
+    props.widgetContentProps?.glassState?.displayMyFirmOrders ?? false,
+  );
+
+  const menuItems: ReactNode[] = [
+    <ViewTypeDropdown
+      key="viewTypeDropdown"
+      view={view}
+      onViewChange={handleViewChange}
+      leftViewTypeDropdown={isLeftViewTypeDropdown}
+    />,
+    <DispayDepth
+      key="dispayDepth"
+      depthCount={depthCount}
+      setDepthCount={setDepthCount}
+    />,
+    <DisplaySwitch
+      key="bestPriceIndication"
+      visible
+      displayMyFirmOrders={bestPriceIndication}
+      setDisplayMyFirmOrders={setBestPriceIndication}
+      title="Индикация лучшей цены"
+    />,
+    <DisplaySwitch
+      key="dispayMyFirmOrders"
+      visible={!!activePlugin?.uiConfig.displayMyOrders}
+      displayMyFirmOrders={displayMyFirmOrders}
+      setDisplayMyFirmOrders={setDisplayMyFirmOrders}
+      title="Показывать ордера моей фирмы"
+    />,
+  ];
 
   useEffect(() => {
-    if (selectedInstrument && contractsMap.get(selectedInstrument)) {
+    if (choosenInstrumentFromSearch && contractsMap.get(choosenInstrumentFromSearch)) {
       setChoosenOption(() =>
-        contractsMap.get(selectedInstrument ?? glassState.choosenInstrument ?? glassDefaultSettings.choosenInstrument),
+        contractsMap.get(
+          choosenInstrumentFromSearch ?? glassState.choosenInstrument ?? glassDefaultSettings.choosenInstrument,
+        ),
       );
     }
-  }, [selectedInstrument, contractsMap, glassState.choosenInstrument, glassDefaultSettings.choosenInstrument]);
+  }, [choosenInstrumentFromSearch, contractsMap, glassState.choosenInstrument, glassDefaultSettings.choosenInstrument]);
 
   const instruments = useMemo(() => [...(contracts && filterByUniqIssKey(contracts, ['issKey']))], [contracts]);
 
@@ -72,22 +123,22 @@ export const useWidgetGlassFormFacade = (
   // тригернуть смену значений у всех привязанный виджетов
 
   useEffect(() => {
-    if (selectedInstrument) {
-      triggerRelatedWidgetsToUpdate(selectedInstrument);
+    if (choosenInstrumentFromSearch) {
+      triggerRelatedWidgetsToUpdate(choosenInstrumentFromSearch);
     }
     // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO Разобраться с зависимостями
-  }, [selectedInstrument]);
+  }, [choosenInstrumentFromSearch]);
 
   const choosenInstrumentFromSearchHandler = useCallback(
     (options: Contract[]) => {
       const option = options[0];
 
-      updateSelectedInstrument(option?.issKey ?? null);
-      setChosenIntrumentName(option?.instrName ?? '');
+      setChoosenInstrumentFromSearch(option?.issKey || null);
+      setChosenIntrumentName(option?.instrName || '');
       setChoosenOption(option);
-      saveWidgetKeyProperty(option?.issKey ?? null, currentWidget, true);
+      saveWidgetKeyProperty(option?.issKey || null, currentWidget, true);
     },
-    [currentWidget, saveWidgetKeyProperty, updateSelectedInstrument],
+    [currentWidget, saveWidgetKeyProperty],
   );
 
   const changeInstrumentByDnd = useCallback(
@@ -100,8 +151,8 @@ export const useWidgetGlassFormFacade = (
       // и использовать
       const contactItem = instruments.find(({ issKey }) => issKey === key);
       if (contactItem) {
-        updateSelectedInstrument(key);
-        setChosenIntrumentName(contactItem.instrName ?? '');
+        setChoosenInstrumentFromSearch(key);
+        setChosenIntrumentName(contactItem.instrName || '');
         saveWidgetKeyProperty(key, currentWidget, true);
         // после этого сработает useEffect
         // и через секунду будет запрос на update widget property
@@ -136,15 +187,15 @@ export const useWidgetGlassFormFacade = (
   useEffect(() => {
     const fieldValue = getMasterInstrumentFromPublicContext();
     if (!fieldValue && masterWidgetId) {
-      updateSelectedInstrument(null);
+      setChoosenInstrumentFromSearch(null);
       setChosenIntrumentName('');
       return;
     }
     const instr = instruments.find((item) => (item.issKey === fieldValue || item.key === fieldValue) && fieldValue);
 
     if (instr) {
-      updateSelectedInstrument(instr.issKey);
-      setChosenIntrumentName(instr.instrName ?? '');
+      setChoosenInstrumentFromSearch(instr.issKey);
+      setChosenIntrumentName(instr.instrName || '');
     }
     // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO Разобраться с зависимостями
   }, [currentWidget?.externalProperties, instruments, masterWidgetId, publicContext]);
@@ -156,7 +207,7 @@ export const useWidgetGlassFormFacade = (
       for (let i = 0; i < instruments.length; i += 1) {
         const item = instruments[i];
         if (item?.issKey === chosenIntrIssKey) {
-          setChosenIntrumentName(item.instrName ?? '');
+          setChosenIntrumentName(item.instrName || '');
           break;
         }
       }
@@ -169,7 +220,7 @@ export const useWidgetGlassFormFacade = (
     view,
     dropdownOpen,
     setDropdownOpen,
-    choosenInstrumentFromSearch: selectedInstrument,
+    choosenInstrumentFromSearch,
     chosenInstrumentName,
     refWrapper,
     changeInstrumentByDnd,
@@ -182,5 +233,6 @@ export const useWidgetGlassFormFacade = (
     bestPriceIndication,
     displayMyFirmOrders,
     isSapfirInstrument,
+    activePlugin,
   };
 };
diff --git a/src/widgets/Glass/logic/utils/getViewTypeItems.ts b/src/widgets/Glass/logic/utils/getViewTypeItems.ts
deleted file mode 100644
index 0098e6b2f..000000000
--- a/src/widgets/Glass/logic/utils/getViewTypeItems.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import type { ItemsType } from '@widgets/Glass/components/SideDropdown';
-import type { ViewType, ViewTypeConfig, ViewTypeItem } from '@widgets/Glass/types';
-
-export const getViewTypeItems = (types: ViewTypeItem[], defaultConfig: ViewTypeConfig): ItemsType<ViewType>[] =>
-  types.map((type) => {
-    if (typeof type === 'string') {
-      return {
-        value: type,
-        ...defaultConfig[type],
-      };
-    }
-
-    const { value, ...config } = type;
-
-    return {
-      value,
-      ...defaultConfig[type.value],
-      ...config,
-    };
-  });
diff --git a/src/widgets/Glass/logic/utils/resolveDefaultView.ts b/src/widgets/Glass/logic/utils/resolveDefaultView.ts
deleted file mode 100644
index 6301c3076..000000000
--- a/src/widgets/Glass/logic/utils/resolveDefaultView.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ViewType, ViewTypeItem } from '@widgets/Glass/types';
-
-type ResolveViewProps = {
-  view: ViewType;
-  pluginDefaultView: ViewType | undefined;
-  widgetDefaultView: ViewType | undefined;
-  pluginViews: ViewTypeItem[] | undefined;
-  defaultViews: ViewTypeItem[];
-};
-
-export const resolveView = ({
-  view,
-  pluginDefaultView,
-  widgetDefaultView,
-  pluginViews,
-  defaultViews,
-}: ResolveViewProps): ViewType => {
-  const availableViews = (pluginViews ?? defaultViews)?.map((v) => (typeof v === 'string' ? v : v.value));
-
-  const resolvedView = [view, pluginDefaultView, widgetDefaultView].find((v) => v && availableViews.includes(v));
-
-  return resolvedView ?? availableViews[0];
-};
diff --git a/src/widgets/Glass/logic/utils/toAntdFourColumnsFormat.util.ts b/src/widgets/Glass/logic/utils/toAntdFourColumnsFormat.util.ts
index 811e2628f..2ad787558 100644
--- a/src/widgets/Glass/logic/utils/toAntdFourColumnsFormat.util.ts
+++ b/src/widgets/Glass/logic/utils/toAntdFourColumnsFormat.util.ts
@@ -3,10 +3,10 @@ import { ColumnsFormatResult, Key, Price, TableColumn } from '@widgets/Glass/typ
 /**
  * @param Утилита получения dataSource для bid или ask (полного массива данных, без учета глубины отображения)
  */
-export const toAntdFourColumnsFormat = <T extends Key, D>(
+export const toAntdFourColumnsFormat = <T extends Key>(
   key: T,
   sides: Price[],
-  columns: TableColumn<D>[],
+  columns: TableColumn[],
 ): ColumnsFormatResult<T>[] => {
   const result = sides
     .filter((item) => item.buysell.toLowerCase() === key)
diff --git a/src/widgets/Glass/plugins/PluginContext.ts b/src/widgets/Glass/plugins/PluginContext.ts
deleted file mode 100644
index 109f86e8d..000000000
--- a/src/widgets/Glass/plugins/PluginContext.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { createContext, useContext } from 'react';
-
-import { OrderBookPlugin } from './types';
-
-export const PluginContext = createContext<OrderBookPlugin | null>(null);
-
-export const usePlugin = () => useContext(PluginContext);
diff --git a/src/widgets/Glass/plugins/__tests__/depositFormOrderBookPlugin.test.ts b/src/widgets/Glass/plugins/__tests__/depositFormOrderBookPlugin.test.ts
deleted file mode 100644
index cfd5ec556..000000000
--- a/src/widgets/Glass/plugins/__tests__/depositFormOrderBookPlugin.test.ts
+++ /dev/null
@@ -1,173 +0,0 @@
-import React, { useContext, useEffect } from 'react';
-
-import { wsGlassStompClient } from '@api/websokets/classes/WSGlassStompClient';
-import { openDepositFormRequested } from '@store/actions/depositForm';
-import { RootState } from '@store/setupStore';
-import { renderWithProviders } from '@utils/test-utils';
-
-import { depositFormOrderBookPlugin, DepositFormOrderBookPluginProvider } from '../depositFormOrderBookPlugin';
-import { PluginContext } from '../PluginContext';
-
-import type { OrderBookPlugin, OrderBookPluginProviderProps } from '../types';
-import type { Contract } from '@modules/contracts';
-
-const mockDispatch = jest.fn();
-jest.mock('react-redux', () => ({
-  ...jest.requireActual('react-redux'),
-  useDispatch: () => mockDispatch,
-}));
-
-jest.mock('@api/websokets/classes/WSGlassStompClient', () => ({
-  wsGlassStompClient: {
-    subscribeToOrderBook: jest.fn(),
-  },
-}));
-
-describe('depositFormOrderBookPlugin', () => {
-  const mockContract = {
-    issKey: 'MOEX:GCRP:TEST',
-    board: 'GCRP',
-    ccy: 'RUB',
-    instrIsin: 'RU000A0JW4Z1',
-    symbol: 'TEST',
-    displayName: 'КСУ все - 1 день, RUB',
-  } as Contract;
-
-  const mockTickerId = 'MXSEBB.GCRP.RU000A0JW4Z1';
-  const defaultPreloadedState = {
-    userSlice: {
-      info: {
-        bookbuilderRoles: ['Участник МХТ'],
-      },
-    },
-  } as Partial<RootState>;
-
-  beforeEach(() => {
-    mockDispatch.mockClear();
-    (wsGlassStompClient.subscribeToOrderBook as jest.Mock).mockReset();
-  });
-
-  describe('plugin structure', () => {
-    it('should have correct plugin structure', () => {
-      expect(depositFormOrderBookPlugin).toEqual({
-        name: 'depositFormOrderBookPlugin',
-        check: expect.any(Function),
-        Provider: DepositFormOrderBookPluginProvider,
-      });
-    });
-  });
-
-  describe('check', () => {
-    it('should be active for deposit board', () => {
-      expect(depositFormOrderBookPlugin.check(mockTickerId, mockContract)).toBe(true);
-    });
-
-    it('should be inactive for deposit-like instrument type without deposit board', () => {
-      expect(
-        depositFormOrderBookPlugin.check('MOEX:TQBR:TEST', {
-          ...mockContract,
-          board: 'TQBR',
-          instrType: 'GC',
-        } as Contract),
-      ).toBe(false);
-    });
-
-    it('should be inactive for non-deposit instrument', () => {
-      expect(
-        depositFormOrderBookPlugin.check('MOEX:TQBR:SBER', {
-          ...mockContract,
-          board: 'TQBR',
-          instrType: 'EQ',
-          instrGroupType: 'Акции',
-        } as Contract),
-      ).toBe(false);
-    });
-  });
-
-  describe('Provider', () => {
-    const pluginValueRef: { current: OrderBookPlugin | null } = { current: null };
-
-    const renderPluginProvider = (
-      overrideProps?: Partial<OrderBookPluginProviderProps>,
-      preloadedState: Partial<RootState> = defaultPreloadedState,
-    ) => {
-      const TestComponent = () => {
-        const context = useContext(PluginContext);
-
-        useEffect(() => {
-          pluginValueRef.current = context;
-        }, [context]);
-
-        return React.createElement('div', { 'data-testid': 'test' }, 'test');
-      };
-
-      return renderWithProviders(
-        React.createElement(
-          DepositFormOrderBookPluginProvider,
-          {
-            widgetId: 1,
-            tickerId: mockTickerId,
-            contract: mockContract,
-            ...overrideProps,
-          },
-          React.createElement(TestComponent),
-        ),
-        { preloadedState },
-      );
-    };
-
-    beforeEach(() => {
-      pluginValueRef.current = null;
-    });
-
-    it('should provide plugin context with rowClick action for MXT participant', () => {
-      renderPluginProvider();
-
-      expect(pluginValueRef.current).toBeDefined();
-      expect(pluginValueRef.current?.actions.rowClick).toBeDefined();
-    });
-
-    it('should provide empty actions without MXT participant role', () => {
-      renderPluginProvider({}, {
-        userSlice: {
-          info: {
-            bookbuilderRoles: ['Контрибьютор'],
-          },
-        },
-      } as Partial<RootState>);
-
-      expect(pluginValueRef.current).toBeDefined();
-      expect(pluginValueRef.current?.actions).toEqual({});
-    });
-
-    it('should open deposit form with row payload', () => {
-      renderPluginProvider();
-
-      pluginValueRef.current?.actions.rowClick?.({
-        direction: 'buy',
-        quantity: 1000,
-        price: 17.25,
-        choosenInstrumentFromSearch: 'MOEX:GCRP:TEST',
-      });
-
-      expect(mockDispatch).toHaveBeenCalledWith(
-        openDepositFormRequested({
-          board: 'GCRP',
-          instrIsin: 'RU000A0JW4Z1',
-          quantity: 1000,
-          price: 17.25,
-        }),
-      );
-    });
-
-    it('should subscribe to standard order book', () => {
-      const callback = jest.fn();
-      const unsubscribe = jest.fn();
-      (wsGlassStompClient.subscribeToOrderBook as jest.Mock).mockReturnValue(unsubscribe);
-      renderPluginProvider();
-
-      expect(pluginValueRef.current?.subscribe(callback)).toBe(unsubscribe);
-      expect(wsGlassStompClient.subscribeToOrderBook).toHaveBeenCalledWith(mockTickerId, callback);
-    });
-  });
-});
diff --git a/src/widgets/Glass/plugins/defaultPlugin.ts b/src/widgets/Glass/plugins/defaultPlugin.ts
new file mode 100644
index 000000000..03f2b27d8
--- /dev/null
+++ b/src/widgets/Glass/plugins/defaultPlugin.ts
@@ -0,0 +1,12 @@
+import { wsGlassStompClient } from '@api/websokets/classes/WSGlassStompClient';
+
+import type { OrderBookPluginFactory } from './types';
+
+/** Плагин стакана по-умочанию */
+export const defaultOrderBookPlugin: OrderBookPluginFactory = ({ tickerId }) => ({
+  name: 'defaultOrderBookPlugin',
+  check: () => true,
+  actions: {},
+  subscribe: (callback) => wsGlassStompClient.subscribeToOrderBook(tickerId, callback),
+  uiConfig: {},
+});
diff --git a/src/widgets/Glass/plugins/defaultPlugin.tsx b/src/widgets/Glass/plugins/defaultPlugin.tsx
deleted file mode 100644
index f439b4fd0..000000000
--- a/src/widgets/Glass/plugins/defaultPlugin.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import React, { useMemo } from 'react';
-
-import { wsGlassStompClient } from '@api/websokets/classes/WSGlassStompClient';
-
-import { PluginContext } from './PluginContext';
-
-import type { OrderBookPlugin, OrderBookPluginDefinition, PluginProvider } from './types';
-
-const Provider: PluginProvider = ({ tickerId, children }) => {
-  const plugin: OrderBookPlugin = useMemo(
-    () => ({
-      actions: {},
-      subscribe: (callback) => wsGlassStompClient.subscribeToOrderBook(tickerId, callback),
-      uiConfig: {},
-    }),
-    [tickerId],
-  );
-
-  return <PluginContext.Provider value={plugin}>{children}</PluginContext.Provider>;
-};
-
-/** Плагин стакана по-умочанию */
-export const defaultOrderBookPlugin: OrderBookPluginDefinition = {
-  name: 'defaultOrderBookPlugin',
-  check: () => true,
-  Provider,
-};
diff --git a/src/widgets/Glass/plugins/depositFormOrderBookPlugin.ts b/src/widgets/Glass/plugins/depositFormOrderBookPlugin.ts
deleted file mode 100644
index 5fd64a72f..000000000
--- a/src/widgets/Glass/plugins/depositFormOrderBookPlugin.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import React, { useCallback, useMemo } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { wsGlassStompClient } from '@api/websokets/classes/WSGlassStompClient';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { openDepositFormRequested } from '@store/actions/depositForm';
-import { userInfoSelector } from '@store/selectors/user';
-
-import { PluginContext } from './PluginContext';
-
-import type { OrderBookPlugin, OrderBookPluginDefinition, PluginProvider, RowClickPayload } from './types';
-import type { Contract } from '@modules/contracts';
-import type { DepositFormOpenProps } from 'types/DepositForm';
-
-const MXT_PARTICIPANT_ROLE = 'Участник МХТ';
-const DEPOSIT_BOARDS = new Set([
-  'GCRP',
-  'GCSM',
-  'GCOW',
-  'GCSW',
-  'GCOM',
-  'GCTM',
-  'GCUM',
-  'GCOY',
-  'GCNM',
-  'GYRP',
-  'GYOW',
-  'GYSW',
-  'GYOM',
-  'GYSM',
-  'GYTM',
-  'GYUM',
-  'GYNM',
-  'GYOY',
-]);
-
-const hasMxtParticipantRole = (bookbuilderRoles?: string[]) =>
-  bookbuilderRoles?.includes(MXT_PARTICIPANT_ROLE) ?? false;
-
-const isDepositContract = (contract?: Contract) => DEPOSIT_BOARDS.has(contract?.board ?? '');
-
-const getDepositFormPayload = (contract: Contract, { quantity, price }: RowClickPayload): DepositFormOpenProps => ({
-  board: contract.board,
-  instrIsin: contract.instrIsin,
-  quantity,
-  price,
-});
-
-export const DepositFormOrderBookPluginProvider: PluginProvider = ({ tickerId, contract, children }) => {
-  const dispatch = useDispatch();
-  const bookbuilderRoles = useAppSelect(userInfoSelector('bookbuilderRoles'));
-  const canOpenDepositForm = isDepositContract(contract) && hasMxtParticipantRole(bookbuilderRoles);
-
-  const rowClick = useCallback(
-    (payload: RowClickPayload) => {
-      if (!contract || !canOpenDepositForm) {
-        return;
-      }
-
-      dispatch(openDepositFormRequested(getDepositFormPayload(contract, payload)));
-    },
-    [canOpenDepositForm, contract, dispatch],
-  );
-
-  const plugin: OrderBookPlugin = useMemo(
-    () => ({
-      actions: canOpenDepositForm ? { rowClick } : {},
-      subscribe: (callback) => wsGlassStompClient.subscribeToOrderBook(tickerId, callback),
-      uiConfig: {},
-    }),
-    [canOpenDepositForm, rowClick, tickerId],
-  );
-
-  return React.createElement(PluginContext.Provider, { value: plugin }, children);
-};
-
-export const depositFormOrderBookPlugin: OrderBookPluginDefinition = {
-  name: 'depositFormOrderBookPlugin',
-  check: (_tickerId, contract) => isDepositContract(contract),
-  Provider: DepositFormOrderBookPluginProvider,
-};
diff --git a/src/widgets/Glass/plugins/index.ts b/src/widgets/Glass/plugins/index.ts
index ba436b454..567a3fdfe 100644
--- a/src/widgets/Glass/plugins/index.ts
+++ b/src/widgets/Glass/plugins/index.ts
@@ -1,7 +1,7 @@
 import features from '@features';
+
 import { isTruthy } from 'types/utils/isTruthy';
 
-import { depositFormOrderBookPlugin } from './depositFormOrderBookPlugin';
 import { ntbOrderBookPlugin } from './ntb/ntbOrderBookPlugin';
 import { spfiOrderBookPlugin } from './spfi/spfiPlugin';
 
@@ -11,6 +11,5 @@ import { spfiOrderBookPlugin } from './spfi/spfiPlugin';
  */
 export const ORDER_BOOK_PLUGINS = [
   !features.disableOrderBookGlassClick && ntbOrderBookPlugin,
-  !features.disableOrderBookGlassClick && depositFormOrderBookPlugin,
   spfiOrderBookPlugin,
 ].filter(isTruthy);
diff --git a/src/widgets/Glass/plugins/ntb/NtbOrderBookPluginProvider.tsx b/src/widgets/Glass/plugins/ntb/NtbOrderBookPluginProvider.tsx
deleted file mode 100644
index 6a8bf30e1..000000000
--- a/src/widgets/Glass/plugins/ntb/NtbOrderBookPluginProvider.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-import React, { useCallback, useMemo } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { wsGlassStompClient } from '@api/websokets/classes/WSGlassStompClient';
-import { uiConfig } from '@configs/manager';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { useTradeTimePermissions } from '@modules/ntb/hooks/useTradeTimePermissions';
-import { ORDER_DIRECTION, PERMISSIONS_CODES } from '@modules/ntb/types';
-import { useSelectProperties } from '@modules/widgetProperties';
-import { isAgroTraderSelector, userTradingAccessesSelector } from '@store/selectors/user';
-import { openNTBFormOrderModal } from '@store/slices/modals';
-
-import { PluginContext } from '../PluginContext';
-
-import { tableViewColumnsConfig } from './columnsConfig';
-import { useOrderBookSubscriptions } from './hooks/useOrderBookSubscriptions';
-import { createGetContextMenuItems } from './services/createGetContextMenuItems';
-import { defaultStrategy, instrumentStrategies } from './strategies';
-import { InstrumentStrategy } from './strategies/types';
-import { createRowClickHandler } from './utils/createRowClickHandler';
-import { getOrderBookPermission } from './utils/getOrderBookPermission';
-
-import type { OrderBookPlugin, PluginProvider } from '../types';
-import type { NtbOrderBook, NtbOrderQueue } from '@api/websokets/classes/WSNTBStompClient/types';
-import type { GlassWidgetProperties } from '@widgets/Glass/properties/types';
-
-export const NtbOrderBookPluginProvider: PluginProvider = ({ contract, tickerId, children }) => {
-  const oldApiEnabled = uiConfig.featureFlag1 === 'ntbGlassOldApiEnable';
-  const { orderBooks } = useAppSelect(userTradingAccessesSelector) ?? {};
-  const isAgroTrader = useAppSelect(isAgroTraderSelector);
-  const dispatch = useDispatch();
-
-  const volume = useSelectProperties((wProps: Partial<GlassWidgetProperties>) => wProps.glassState?.volume);
-  const view = useSelectProperties((wProps: Partial<GlassWidgetProperties>) => wProps.glassState?.view);
-
-  const enableVolumeSwitch = !oldApiEnabled && view !== 'table';
-
-  const subOptions = useMemo(() => ({ volumeType: volume, enableVolumeSwitch }), [enableVolumeSwitch, volume]);
-
-  const strategy = (instrumentStrategies.find((s) => s.check(tickerId)) ?? defaultStrategy) as InstrumentStrategy;
-
-  const { orderEntries, subscribe } = useOrderBookSubscriptions({
-    tickerId,
-    options: subOptions,
-    strategy,
-  });
-
-  const { permission: tradeTimePermission } = useTradeTimePermissions(tickerId);
-
-  const permission = getOrderBookPermission(tickerId, orderBooks);
-
-  const rowClick = useMemo(
-    () => createRowClickHandler({ permission, contract, dispatch }),
-    [contract, dispatch, permission],
-  );
-
-  const orderBtnClick = useCallback(() => {
-    dispatch(
-      openNTBFormOrderModal({
-        direction: permission === PERMISSIONS_CODES.BUY_PERMISSION ? ORDER_DIRECTION.BUY : ORDER_DIRECTION.SELL,
-        showTabs: permission === PERMISSIONS_CODES.BOTH_PERMISSION,
-        choosenInstrumentFromSearch: tickerId,
-        securityId: contract?.symbol,
-      }),
-    );
-  }, [contract?.symbol, dispatch, permission, tickerId]);
-
-  const getContextMenuItems = useMemo(
-    () =>
-      createGetContextMenuItems({
-        tickerId,
-        orderEntries,
-        getOwnOrders: strategy.getOwnOrders,
-        tradeTimePermission,
-        permission,
-        dispatch,
-      }),
-    [dispatch, orderEntries, permission, strategy.getOwnOrders, tickerId, tradeTimePermission],
-  );
-
-  const pluginValue: OrderBookPlugin<NtbOrderBook | NtbOrderQueue> = useMemo(
-    () => ({
-      actions: isAgroTrader && tradeTimePermission.active ? { rowClick, orderBtnClick } : {},
-      getContextMenuItems: isAgroTrader ? getContextMenuItems : undefined,
-      subscribe: oldApiEnabled ? (callback) => wsGlassStompClient.subscribeToOrderBook(tickerId, callback) : subscribe,
-      uiConfig: {
-        displayMyOrders: !oldApiEnabled && isAgroTrader,
-        orderButton: {
-          visible: isAgroTrader && !!permission,
-          disabled: !tradeTimePermission.active,
-          tooltipTitle: tradeTimePermission.hint,
-        },
-        volumeType: {
-          visible: enableVolumeSwitch,
-          defaultValue: 'units',
-          // Временно хардкод "Тонны". Доработать, когда label units будет приходить с бэкенда
-          labels: { units: 'Тонны' },
-        },
-        noData: {
-          title: 'Нет выставленных заявок',
-        },
-        cellTooltip: isAgroTrader ? tradeTimePermission.hint : undefined,
-        views: oldApiEnabled ? undefined : strategy.views,
-      },
-      tableView: {
-        columns: tableViewColumnsConfig,
-      },
-    }),
-    [
-      enableVolumeSwitch,
-      getContextMenuItems,
-      isAgroTrader,
-      oldApiEnabled,
-      orderBtnClick,
-      permission,
-      rowClick,
-      strategy.views,
-      subscribe,
-      tickerId,
-      tradeTimePermission.active,
-      tradeTimePermission.hint,
-    ],
-  );
-
-  return <PluginContext.Provider value={pluginValue as unknown as OrderBookPlugin}>{children}</PluginContext.Provider>;
-};
diff --git a/src/widgets/Glass/plugins/ntb/__tests__/ntbOrderBookPlugin.test.ts b/src/widgets/Glass/plugins/ntb/__tests__/ntbOrderBookPlugin.test.ts
new file mode 100644
index 000000000..f747ee0b2
--- /dev/null
+++ b/src/widgets/Glass/plugins/ntb/__tests__/ntbOrderBookPlugin.test.ts
@@ -0,0 +1,321 @@
+import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
+import { ORDER_DIRECTION } from '@modules/ntb/types';
+import { openNTBFormOrderModal } from '@store/slices/modals';
+import { Permissions } from 'types/User';
+
+import { ntbOrderBookPlugin } from '../ntbOrderBookPlugin';
+
+import type { Contract } from '@modules/contracts';
+
+jest.mock('@api/websokets/classes/WSNtbMarketDepthStompClient', () => ({
+  wsNtbMarketDepthStompClient: {
+    subscribeToOrderBook: jest.fn(),
+    subscribeToOrderEntries: jest.fn(),
+  },
+}));
+
+describe('ntbOrderBookPlugin', () => {
+  const mockContract = { issKey: 'MXAGRO:ZERN:SP_WHA_NOVO', board: 'test-board', symbol: 'test-symbol' } as Contract;
+  const mockOrderBooks = {
+    buy: ['MXAGRO:ZERN:SP_WHA_NOVO', 'MXAGRO:ZERN:SP_WHR_NOVO'],
+    sell: ['MXAGRO:ZERN:SP_WHA_NOVO', 'MXAGRO:ZERN:SP_WHR1_NOVO'],
+  };
+
+  const createSelectMock = (userSlice?: Record<string, unknown>) => {
+    const state = {
+      userSlice: {
+        permissions: [Permissions.AGRO_TRADER],
+        userTradingAccesses: {
+          orderBooks: mockOrderBooks,
+        },
+        ...userSlice,
+      },
+    };
+    return jest.fn((selector) => selector(state));
+  };
+
+  const createPluginProps = (overrides = {}) => ({
+    widgetId: 1,
+    tickerId: 'MXAGRO:ZERN:SP_WHA_NOVO',
+    contract: mockContract,
+    dispatch: jest.fn(),
+    select: createSelectMock(),
+    ...overrides,
+  });
+
+  describe('plugin structure', () => {
+    it('should return correct plugin structure', () => {
+      const props = createPluginProps();
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin).toEqual({
+        name: 'ntbOrderBookPlugin',
+        check: expect.any(Function),
+        actions: {
+          rowClick: expect.any(Function),
+          orderBtnClick: expect.any(Function),
+        },
+        getContextMenuItems: expect.any(Function),
+        uiConfig: expect.any(Object),
+        subscribe: expect.any(Function),
+      });
+    });
+
+    it('should return empty actions when user is not agro trader', () => {
+      const selectMock = createSelectMock({ permissions: [] });
+      const props = createPluginProps({ select: selectMock });
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin.actions).toEqual({});
+      expect(plugin.actions.rowClick).toBeUndefined();
+      expect(plugin.actions.orderBtnClick).toBeUndefined();
+    });
+  });
+
+  describe('check', () => {
+    it.each([
+      ['true if tickerId includes MX_AGRO segment code', 'MXAGRO:ZERN:SP_WHA_NOVO', [Permissions.AGRO_TRADER], true],
+      ['false if tickerId does not include MX_AGRO segment code', 'unknown-ticker', [Permissions.AGRO_TRADER], false],
+      ['true if tickerId includes MX_AGRO regardless of user role', 'MXAGRO:ZERN:SP_WHA_NOVO', [], true],
+    ])('should return %s', (_description, tickerId, permissions, expected) => {
+      const selectMock = createSelectMock({ permissions });
+      const props = createPluginProps({ tickerId, select: selectMock });
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin.check()).toBe(expected);
+    });
+  });
+
+  describe('rowClick', () => {
+    const baseRowClickPayload = {
+      quantity: 6,
+      price: 12000,
+      choosenInstrumentFromSearch: 'MXAGRO:ZERN:SP_WHA_NOVO',
+    };
+
+    it.each([
+      [
+        'user has both permissions and clicks buy',
+        'MXAGRO:ZERN:SP_WHA_NOVO',
+        'buy',
+        { direction: ORDER_DIRECTION.SELL, showTabs: true },
+      ],
+      [
+        'user has both permissions and clicks sell',
+        'MXAGRO:ZERN:SP_WHA_NOVO',
+        'sell',
+        { direction: ORDER_DIRECTION.BUY, showTabs: true },
+      ],
+      [
+        'user has only buy permission',
+        'MXAGRO:ZERN:SP_WHR_NOVO',
+        'sell',
+        { direction: ORDER_DIRECTION.BUY, showTabs: false },
+      ],
+      [
+        'user has only sell permission',
+        'MXAGRO:ZERN:SP_WHR1_NOVO',
+        'buy',
+        { direction: ORDER_DIRECTION.SELL, showTabs: false },
+      ],
+    ])('should call dispatch with correct props when %s', (_description, tickerId, direction, expected) => {
+      const props = createPluginProps({ tickerId });
+      const plugin = ntbOrderBookPlugin(props);
+
+      plugin.actions.rowClick?.({ ...baseRowClickPayload, direction });
+
+      expect(props.dispatch).toHaveBeenCalledWith(
+        openNTBFormOrderModal({
+          ...baseRowClickPayload,
+          boardId: mockContract?.board,
+          securityId: mockContract?.symbol,
+          ...expected,
+        }),
+      );
+    });
+
+    it.each([
+      ['no permission for the ticker', { tickerId: 'MXAGRO:ZERN:TEST', direction: 'buy' }],
+      ['provided direction is not valid', { tickerId: 'MXAGRO:ZERN:SP_WHA_NOVO', direction: 'buy1' }],
+      ['permission and direction do not match', { tickerId: 'MXAGRO:ZERN:SP_WHR_NOVO', direction: 'buy' }],
+    ])('should not call dispatch if %s', (_, { tickerId, direction }) => {
+      const props = createPluginProps({ tickerId });
+      const plugin = ntbOrderBookPlugin(props);
+
+      plugin.actions.rowClick?.({ ...baseRowClickPayload, direction });
+
+      expect(props.dispatch).not.toHaveBeenCalled();
+    });
+
+    it('should not call dispatch when user is not agro trader', () => {
+      const selectMock = createSelectMock({ permissions: [] });
+      const props = createPluginProps({ select: selectMock });
+
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin.actions.rowClick).toBeUndefined();
+    });
+
+    it('should handle undefined contract gracefully', () => {
+      const props = createPluginProps({ contract: undefined });
+      const plugin = ntbOrderBookPlugin(props);
+
+      plugin.actions.rowClick?.({ ...baseRowClickPayload, direction: 'buy' });
+
+      expect(props.dispatch).toHaveBeenCalledWith(
+        openNTBFormOrderModal({
+          ...baseRowClickPayload,
+          boardId: undefined,
+          securityId: undefined,
+          direction: ORDER_DIRECTION.SELL,
+          showTabs: true,
+        }),
+      );
+    });
+  });
+
+  describe('orderBtnClick', () => {
+    it.each([
+      ['user has both permissions', 'MXAGRO:ZERN:SP_WHA_NOVO', { direction: ORDER_DIRECTION.SELL, showTabs: true }],
+      ['user has only buy permission', 'MXAGRO:ZERN:SP_WHR_NOVO', { direction: ORDER_DIRECTION.BUY, showTabs: false }],
+      [
+        'user has only sell permission',
+        'MXAGRO:ZERN:SP_WHR1_NOVO',
+        { direction: ORDER_DIRECTION.SELL, showTabs: false },
+      ],
+    ])('should call dispatch with correct props when %s', (_description, tickerId, expected) => {
+      const props = createPluginProps({ tickerId });
+      const plugin = ntbOrderBookPlugin(props);
+
+      plugin.actions.orderBtnClick?.();
+
+      expect(props.dispatch).toHaveBeenCalledWith(
+        openNTBFormOrderModal({
+          choosenInstrumentFromSearch: tickerId,
+          securityId: mockContract?.symbol,
+          ...expected,
+        }),
+      );
+    });
+
+    it('should not have orderBtnClick when user is not agro trader', () => {
+      const selectMock = createSelectMock({ permissions: [] });
+      const props = createPluginProps({ select: selectMock });
+
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin.actions.orderBtnClick).toBeUndefined();
+    });
+
+    it('should handle undefined contract gracefully', () => {
+      const props = createPluginProps({ contract: undefined });
+      const plugin = ntbOrderBookPlugin(props);
+
+      plugin.actions.orderBtnClick?.();
+
+      expect(props.dispatch).toHaveBeenCalledWith(
+        openNTBFormOrderModal({
+          choosenInstrumentFromSearch: 'MXAGRO:ZERN:SP_WHA_NOVO',
+          securityId: undefined,
+          direction: ORDER_DIRECTION.SELL,
+          showTabs: true,
+        }),
+      );
+    });
+  });
+
+  describe('uiConfig', () => {
+    it.each([
+      ['true if user is agro trader with permission', 'MXAGRO:ZERN:SP_WHA_NOVO', [Permissions.AGRO_TRADER], true],
+      [
+        'false if user is agro trader without permission',
+        'MXAGRO:ZERN:NO_PERMISSION',
+        [Permissions.AGRO_TRADER],
+        false,
+      ],
+      ['false if user is not agro trader', 'MXAGRO:ZERN:SP_WHA_NOVO', [], false],
+    ])('should set showOrderButton %s', (_description, tickerId, permissions, expected) => {
+      const selectMock = createSelectMock({ permissions });
+      const props = createPluginProps({ tickerId, select: selectMock });
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin.uiConfig.showOrderButton).toBe(expected);
+    });
+
+    it.each([
+      ['true when user is agro trader', [Permissions.AGRO_TRADER], true],
+      ['false when user is not agro trader', [], false],
+    ])('should set displayMyOrders to %s', (_description, permissions, expected) => {
+      const selectMock = createSelectMock({ permissions });
+      const props = createPluginProps({ select: selectMock });
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin.uiConfig.displayMyOrders).toBe(expected);
+    });
+  });
+
+  describe('subscribe', () => {
+    it.each([['MXAGRO:ZERN:SP_WHA_NOVO'], ['MXAGRO:ZERN:SP_WHR_NOVO']])(
+      'should call subscribe ws methods with tickerId %s',
+      (tickerId) => {
+        const props = createPluginProps({ tickerId });
+        const callback = jest.fn();
+        const plugin = ntbOrderBookPlugin(props);
+
+        plugin.subscribe(callback);
+
+        expect(wsNtbMarketDepthStompClient.subscribeToOrderBook).toHaveBeenCalled();
+        expect(wsNtbMarketDepthStompClient.subscribeToOrderEntries).toHaveBeenCalled();
+      },
+    );
+  });
+
+  describe('permission mapping', () => {
+    const rowClickPayload = {
+      quantity: 6,
+      price: 12000,
+      choosenInstrumentFromSearch: 'MXAGRO:ZERN:SP_WHA_NOVO',
+    };
+
+    it.each([
+      [
+        'BOTH_PERMISSION (both buy and sell lists)',
+        'MXAGRO:ZERN:SP_WHA_NOVO',
+        'rowClick',
+        { direction: ORDER_DIRECTION.SELL, showTabs: true },
+      ],
+      [
+        'BUY_PERMISSION (buy list only)',
+        'MXAGRO:ZERN:SP_WHR_NOVO',
+        'orderBtnClick',
+        { direction: ORDER_DIRECTION.BUY, showTabs: false },
+      ],
+      [
+        'SELL_PERMISSION (sell list only)',
+        'MXAGRO:ZERN:SP_WHR1_NOVO',
+        'orderBtnClick',
+        { direction: ORDER_DIRECTION.SELL, showTabs: false },
+      ],
+    ])('should correctly map %s', (_, tickerId, action, expected) => {
+      const props = createPluginProps({ tickerId });
+      const plugin = ntbOrderBookPlugin(props);
+
+      if (action === 'rowClick') {
+        plugin.actions.rowClick?.({ ...rowClickPayload, direction: 'buy' });
+      } else {
+        plugin.actions.orderBtnClick?.();
+      }
+
+      const dispatchedAction = props.dispatch.mock.calls[0][0];
+      expect(dispatchedAction.payload.direction).toBe(expected.direction);
+      expect(dispatchedAction.payload.showTabs).toBe(expected.showTabs);
+    });
+
+    it('should return null permission when ticker is in neither list', () => {
+      const props = createPluginProps({ tickerId: 'MXAGRO:ZERN:NOT_LISTED' });
+      const plugin = ntbOrderBookPlugin(props);
+
+      expect(plugin.uiConfig.showOrderButton).toBe(false);
+    });
+  });
+});
diff --git a/src/widgets/Glass/plugins/ntb/__tests__/ntbOrderBookPlugin.test.tsx b/src/widgets/Glass/plugins/ntb/__tests__/ntbOrderBookPlugin.test.tsx
deleted file mode 100644
index 4f9bef84c..000000000
--- a/src/widgets/Glass/plugins/ntb/__tests__/ntbOrderBookPlugin.test.tsx
+++ /dev/null
@@ -1,202 +0,0 @@
-import { waitFor } from '@testing-library/react';
-import React, { useContext, useEffect } from 'react';
-
-import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
-import { ORDER_DIRECTION } from '@modules/ntb/types';
-import { RootState } from '@store/setupStore';
-import { openNTBFormOrderModal } from '@store/slices/modals';
-import { WidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-import { renderWithProviders } from '@utils/test-utils';
-import { Permissions } from 'types/User';
-
-import { PluginContext } from '../../PluginContext';
-import { ntbOrderBookPlugin } from '../ntbOrderBookPlugin';
-import { NtbOrderBookPluginProvider } from '../NtbOrderBookPluginProvider';
-
-import type { OrderBookPlugin, OrderBookPluginProviderProps } from '../../types';
-import type { Contract } from '@modules/contracts';
-
-const mockDispatch = jest.fn();
-jest.mock('react-redux', () => ({
-  ...jest.requireActual('react-redux'),
-  useDispatch: () => mockDispatch,
-}));
-
-jest.mock('@api/websokets/classes/WSNtbMarketDepthStompClient', () => ({
-  wsNtbMarketDepthStompClient: {
-    subscribeToOrderBook: jest.fn(),
-    subscribeToOrderEntries: jest.fn(),
-  },
-}));
-
-jest.mock('@api/websokets/classes/WSGlassStompClient', () => ({
-  wsGlassStompClient: {
-    subscribeToOrderBook: jest.fn(),
-  },
-}));
-
-describe('ntbOrderBookPlugin', () => {
-  const mockContract = { issKey: 'MXAGRO:ZERN:SP_WHA_NOVO', board: 'test-board', symbol: 'test-symbol' } as Contract;
-  const mockOrderBooks = {
-    buy: ['MXAGRO:ZERN:SP_WHA_NOVO', 'MXAGRO:ZERN:SP_WHR_NOVO'],
-    sell: ['MXAGRO:ZERN:SP_WHA_NOVO', 'MXAGRO:ZERN:SP_WHR1_NOVO'],
-  };
-  const mockTickerId = 'MXAGRO:ZERN:SP_WHA_NOVO';
-
-  const defaultPreloadedState = {
-    userSlice: {
-      permissions: [Permissions.AGRO_TRADER],
-      userTradingAccesses: {
-        orderBooks: mockOrderBooks,
-        tradeTimePermissions: [{ key: mockTickerId, currentStatus: 1 }],
-      },
-    },
-  } as Partial<RootState>;
-
-  describe('plugin structure', () => {
-    it('should have correct plugin structure', () => {
-      expect(ntbOrderBookPlugin).toEqual({
-        name: 'ntbOrderBookPlugin',
-        check: expect.any(Function),
-        Provider: NtbOrderBookPluginProvider,
-      });
-    });
-  });
-
-  describe('check', () => {
-    it.each([
-      ['true if tickerId includes MX_AGRO segment code', 'MXAGRO:ZERN:SP_WHA_NOVO', true],
-      ['false if tickerId does not include MX_AGRO segment code', 'unknown-ticker', false],
-    ])('should return %s', (_description, tickerId, expected) => {
-      expect(ntbOrderBookPlugin.check(tickerId)).toBe(expected);
-    });
-  });
-
-  describe('Provider', () => {
-    const pluginValueRef: { current: OrderBookPlugin | null } = { current: null };
-
-    const renderPluginProvider = (
-      overrideProps?: Partial<OrderBookPluginProviderProps>,
-      preloadedState: Partial<RootState> = defaultPreloadedState,
-    ) => {
-      const TestComponent = () => {
-        const context = useContext(PluginContext);
-        useEffect(() => {
-          pluginValueRef.current = context;
-        }, [context]);
-        return <div data-testid="test">test</div>;
-      };
-
-      return renderWithProviders(
-        <WidgetIdContext.Provider value={1}>
-          <NtbOrderBookPluginProvider
-            widgetId={1}
-            tickerId={mockTickerId}
-            contract={mockContract}
-            {...overrideProps}
-          >
-            <TestComponent />
-          </NtbOrderBookPluginProvider>
-        </WidgetIdContext.Provider>,
-
-        { preloadedState },
-      );
-    };
-
-    beforeEach(() => {
-      pluginValueRef.current = null;
-    });
-
-    it('should provide plugin context with actions for agro trader with both permissions', () => {
-      renderPluginProvider();
-      expect(pluginValueRef.current).toBeDefined();
-      expect(pluginValueRef.current?.actions.rowClick).toBeDefined();
-      expect(pluginValueRef.current?.actions.orderBtnClick).toBeDefined();
-    });
-
-    it('should provide empty actions for non-agro trader', () => {
-      const nonAgroState = {
-        userSlice: {
-          permissions: [],
-          userTradingAccesses: {
-            orderBooks: mockOrderBooks,
-          },
-        },
-      } as Partial<Record<string, unknown>>;
-
-      renderPluginProvider({}, nonAgroState);
-
-      expect(pluginValueRef.current).toBeDefined();
-      expect(pluginValueRef.current?.actions).toEqual({});
-    });
-
-    it('should provide uiConfig with orderButton visible for agro trader with permission', () => {
-      renderPluginProvider();
-
-      expect(pluginValueRef.current?.uiConfig.orderButton?.visible).toBe(true);
-      expect(pluginValueRef.current?.uiConfig.displayMyOrders).toBe(true);
-    });
-
-    it('should provide uiConfig with orderButton hidden for non-agro trader', () => {
-      const nonAgroState = {
-        userSlice: {
-          permissions: [],
-          userTradingAccesses: {
-            orderBooks: mockOrderBooks,
-          },
-        },
-      } as Partial<Record<string, unknown>>;
-
-      renderPluginProvider({}, nonAgroState);
-
-      expect(pluginValueRef.current?.uiConfig.orderButton?.visible).toBe(false);
-      expect(pluginValueRef.current?.uiConfig.displayMyOrders).toBe(false);
-    });
-
-    it('should call dispatch with correct props on rowClick for buy direction', async () => {
-      renderPluginProvider();
-
-      await waitFor(() => {
-        expect(pluginValueRef.current).toBeDefined();
-      });
-
-      pluginValueRef.current?.actions.rowClick?.({
-        quantity: 6,
-        price: 12000,
-        choosenInstrumentFromSearch: 'MXAGRO:ZERN:SP_WHA_NOVO',
-        direction: 'buy',
-      });
-
-      expect(mockDispatch).toHaveBeenCalledWith(
-        openNTBFormOrderModal({
-          quantity: 6,
-          price: 12000,
-          choosenInstrumentFromSearch: 'MXAGRO:ZERN:SP_WHA_NOVO',
-          direction: ORDER_DIRECTION.SELL,
-          showTabs: true,
-          boardId: mockContract?.board,
-          securityId: mockContract?.symbol,
-        }),
-      );
-    });
-
-    it('should call dispatch with correct props on orderBtnClick', async () => {
-      renderPluginProvider();
-
-      await waitFor(() => {
-        expect(pluginValueRef.current).toBeDefined();
-      });
-
-      pluginValueRef.current?.actions.orderBtnClick?.();
-
-      expect(mockDispatch).toHaveBeenCalledWith(
-        openNTBFormOrderModal({
-          choosenInstrumentFromSearch: 'MXAGRO:ZERN:SP_WHA_NOVO',
-          securityId: mockContract?.symbol,
-          direction: ORDER_DIRECTION.SELL,
-          showTabs: true,
-        }),
-      );
-    });
-  });
-});
diff --git a/src/widgets/Glass/plugins/ntb/columnsConfig.ts b/src/widgets/Glass/plugins/ntb/columnsConfig.ts
deleted file mode 100644
index 86fd2847c..000000000
--- a/src/widgets/Glass/plugins/ntb/columnsConfig.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import type { NtbOrderQueuePrice } from './types';
-import type { ViewColumn } from '@widgets/Glass/components/TableView/types';
-
-export const tableViewColumnsConfig: ViewColumn<NtbOrderQueuePrice>[] = [
-  {
-    key: 'buysell',
-    title: 'Направление',
-    dataIndex: 'buysell',
-    render: (value, _, defaultRender) => defaultRender(value === 'BUY' ? 'Покупка' : 'Продажа'),
-  },
-  {
-    key: 'price',
-    title: 'Цена',
-    dataIndex: 'price',
-    align: 'right',
-    formatNumber: true,
-  },
-  {
-    key: 'quantity',
-    title: 'Кол-во, лотов',
-    dataIndex: 'quantity',
-    hidden: true,
-    align: 'right',
-    formatNumber: true,
-  },
-  {
-    key: 'amount',
-    title: 'Кол-во, ед. изм.',
-    dataIndex: ['extra', 'amount'],
-    align: 'right',
-    formatNumber: true,
-  },
-  {
-    key: 'sumQuantity',
-    title: 'Общее кол-во, лотов',
-    dataIndex: ['extra', 'sumQuantity'],
-    hidden: true,
-    align: 'right',
-    formatNumber: true,
-    width: 120,
-  },
-  {
-    key: 'sumAmount',
-    title: 'Общее кол-во, ед. изм.',
-    dataIndex: ['extra', 'sumAmount'],
-    align: 'right',
-    formatNumber: true,
-    width: 120,
-  },
-  {
-    key: 'splittable',
-    title: 'Делимость',
-    dataIndex: ['extra', 'splittable'],
-    render: (value, _, defaultRender) => defaultRender(value ? 'Да' : 'Нет'),
-  },
-  {
-    key: 'deliveryType',
-    title: 'Способ поставки',
-    dataIndex: ['extra', 'deliveryType'],
-    hidden: true,
-  },
-  {
-    key: 'orderNo',
-    title: 'Номер заявки',
-    dataIndex: ['extra', 'orderNo'],
-    hidden: true,
-  },
-];
diff --git a/src/widgets/Glass/plugins/ntb/hooks/__tests__/useOrderBookSubscriptions.test.ts b/src/widgets/Glass/plugins/ntb/hooks/__tests__/useOrderBookSubscriptions.test.ts
deleted file mode 100644
index 8f01b0982..000000000
--- a/src/widgets/Glass/plugins/ntb/hooks/__tests__/useOrderBookSubscriptions.test.ts
+++ /dev/null
@@ -1,336 +0,0 @@
-import { act, renderHook } from '@testing-library/react';
-
-import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
-import { ORDER_DIRECTION } from '@modules/ntb/types';
-import { OrderEntryStatus } from '@modules/ntb/types/permissions';
-
-import { defaultStrategy } from '../../strategies';
-import { useOrderBookSubscriptions } from '../useOrderBookSubscriptions';
-
-import type { PriceOptions } from '../../strategies/types';
-import type { NtbOrderBook, OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
-
-jest.mock('@api/websokets/classes/WSNtbMarketDepthStompClient', () => ({
-  wsNtbMarketDepthStompClient: {
-    subscribeToOrderBook: jest.fn(),
-    subscribeToOrderEntries: jest.fn(),
-  },
-}));
-
-describe('useOrderBookSubscriptions', () => {
-  const tickerId = 'TEST:TICKER';
-  const mockCallback = jest.fn();
-  let mockSubscribeToOrderBook: jest.Mock;
-  let mockSubscribeToOrderEntries: jest.Mock;
-  const mockUnsubscribeFromOrderBook = jest.fn();
-  const mockUnsubscribeFromOrderEntries = jest.fn();
-
-  beforeEach(() => {
-    mockSubscribeToOrderBook = wsNtbMarketDepthStompClient.subscribeToOrderBook as jest.Mock;
-    mockSubscribeToOrderEntries = wsNtbMarketDepthStompClient.subscribeToOrderEntries as jest.Mock;
-    mockSubscribeToOrderBook.mockReturnValue(mockUnsubscribeFromOrderBook);
-    mockSubscribeToOrderEntries.mockReturnValue(mockUnsubscribeFromOrderEntries);
-  });
-
-  const createOrderEntry = (overrides: Partial<OrderBookEntry> = {}): OrderBookEntry => ({
-    buySell: ORDER_DIRECTION.BUY,
-    price: 100,
-    status: OrderEntryStatus.Active,
-    key: tickerId,
-    orderId: 1,
-    orderNumber: 1,
-    isOwnOrder: true,
-    ...overrides,
-  });
-
-  const createOrderBookItem = (overrides: Partial<NtbOrderBook> = {}): NtbOrderBook => ({
-    buySell: ORDER_DIRECTION.BUY,
-    price: 100,
-    quantity: 50,
-    amount: 1500,
-    ...overrides,
-  });
-
-  const renderHookAndSubscribe = (options: PriceOptions = {}, strategy = defaultStrategy) => {
-    const { result } = renderHook(() => useOrderBookSubscriptions({ tickerId, strategy, options }));
-    const unsubscribe = result.current.subscribe(mockCallback);
-    return { result, unsubscribe };
-  };
-
-  const triggerOrderBookCallback = (data: NtbOrderBook[]) => {
-    const orderBookCallback = mockSubscribeToOrderBook.mock.calls[0][1];
-    orderBookCallback(data);
-  };
-
-  const triggerOrderEntriesCallback = (data: OrderBookEntry[]) => {
-    const orderBookEntryCallback = mockSubscribeToOrderEntries.mock.calls[0][1];
-    act(() => orderBookEntryCallback(data));
-  };
-
-  describe('subscription', () => {
-    it('should subscribe to order book with correct tickerId', () => {
-      renderHookAndSubscribe();
-
-      expect(mockSubscribeToOrderBook).toHaveBeenCalledWith(tickerId, expect.any(Function));
-    });
-
-    it('should subscribe to order entries with correct tickerId', () => {
-      renderHookAndSubscribe();
-
-      expect(mockSubscribeToOrderEntries).toHaveBeenCalledWith(tickerId, expect.any(Function));
-    });
-
-    it('should return unsubscribe function', () => {
-      const { unsubscribe } = renderHookAndSubscribe();
-
-      expect(typeof unsubscribe).toBe('function');
-    });
-  });
-
-  describe('order book data handling', () => {
-    it('should not call callback when order book data is not received yet', () => {
-      renderHookAndSubscribe();
-
-      triggerOrderEntriesCallback([createOrderEntry()]);
-
-      expect(mockCallback).not.toHaveBeenCalled();
-    });
-
-    it('should call callback with prices when order book data is received', () => {
-      renderHookAndSubscribe();
-
-      const orderBookData: NtbOrderBook[] = [
-        createOrderBookItem({ buySell: ORDER_DIRECTION.BUY, price: 100 }),
-        createOrderBookItem({ buySell: ORDER_DIRECTION.SELL, price: 105, quantity: 30, amount: 900 }),
-      ];
-
-      triggerOrderBookCallback(orderBookData);
-
-      expect(mockCallback).toHaveBeenCalledTimes(1);
-      expect(mockCallback).toHaveBeenCalledWith([
-        {
-          buysell: 'BUY',
-          price: 100,
-          quantity: 50,
-          repovalue: null,
-          isSelfOrder: false,
-          selfQuantity: 0,
-          extra: expect.objectContaining(orderBookData[0]),
-        },
-        {
-          buysell: 'SELL',
-          price: 105,
-          quantity: 30,
-          repovalue: null,
-          isSelfOrder: false,
-          selfQuantity: 0,
-          extra: expect.objectContaining(orderBookData[1]),
-        },
-      ]);
-    });
-
-    it('should mark prices as self orders when order entries exist for that price', () => {
-      renderHookAndSubscribe();
-
-      const orderBookData: NtbOrderBook[] = [
-        createOrderBookItem({ buySell: ORDER_DIRECTION.BUY, price: 100 }),
-        createOrderBookItem({ buySell: ORDER_DIRECTION.SELL, price: 105, quantity: 30, amount: 900 }),
-      ];
-
-      triggerOrderBookCallback(orderBookData);
-      triggerOrderEntriesCallback([createOrderEntry()]);
-
-      expect(mockCallback).toHaveBeenLastCalledWith([
-        {
-          buysell: 'BUY',
-          price: 100,
-          quantity: 50,
-          repovalue: null,
-          isSelfOrder: true,
-          selfQuantity: 0,
-          extra: expect.objectContaining(orderBookData[0]),
-        },
-        {
-          buysell: 'SELL',
-          price: 105,
-          quantity: 30,
-          repovalue: null,
-          isSelfOrder: false,
-          selfQuantity: 0,
-          extra: expect.objectContaining(orderBookData[1]),
-        },
-      ]);
-    });
-  });
-
-  describe('order entries handling', () => {
-    it('should add new active order to entries', () => {
-      const { result } = renderHookAndSubscribe();
-
-      triggerOrderBookCallback([createOrderBookItem()]);
-      mockCallback.mockClear();
-      triggerOrderEntriesCallback([createOrderEntry()]);
-
-      expect(result.current.orderEntries?.get(100)).toHaveLength(1);
-      expect(mockCallback).toHaveBeenCalledTimes(1);
-    });
-
-    it('should update existing active order', () => {
-      const { result } = renderHookAndSubscribe();
-
-      triggerOrderEntriesCallback([createOrderEntry()]);
-      expect(result.current.orderEntries?.get(100)).toHaveLength(1);
-
-      triggerOrderEntriesCallback([createOrderEntry()]);
-      expect(result.current.orderEntries?.get(100)).toHaveLength(1);
-    });
-
-    it('should remove inactive order from entries', () => {
-      const { result } = renderHookAndSubscribe();
-
-      triggerOrderEntriesCallback([
-        createOrderEntry({ orderId: 1, orderNumber: 1 }),
-        createOrderEntry({ orderId: 2, orderNumber: 2 }),
-      ]);
-      expect(result.current.orderEntries?.get(100)).toHaveLength(2);
-
-      triggerOrderEntriesCallback([
-        createOrderEntry({ orderId: 1, orderNumber: 1, status: 'CANCELLED' as OrderEntryStatus }),
-      ]);
-      expect(result.current.orderEntries?.get(100)).toHaveLength(1);
-      expect(result.current.orderEntries?.get(100)?.find((e) => e.orderNumber === 1)).toBeUndefined();
-    });
-
-    it('should remove price entry when all orders at that price are removed', async () => {
-      const { result } = renderHookAndSubscribe();
-
-      triggerOrderEntriesCallback([createOrderEntry()]);
-      expect(result.current.orderEntries?.has(100)).toBe(true);
-
-      triggerOrderEntriesCallback([
-        createOrderEntry({ orderId: 1, orderNumber: 1, status: 'CANCELLED' as OrderEntryStatus }),
-      ]);
-      expect(result.current.orderEntries?.has(100)).toBe(false);
-    });
-  });
-
-  describe('unsubscribe', () => {
-    it('should call both unsubscribe functions', () => {
-      const { unsubscribe } = renderHookAndSubscribe();
-
-      act(() => {
-        unsubscribe();
-      });
-
-      expect(mockUnsubscribeFromOrderBook).toHaveBeenCalledTimes(1);
-      expect(mockUnsubscribeFromOrderEntries).toHaveBeenCalledTimes(1);
-    });
-  });
-
-  describe('createPrice helper', () => {
-    it('should create price with correct buy direction', () => {
-      const orderBookItem = createOrderBookItem();
-
-      renderHookAndSubscribe();
-      triggerOrderBookCallback([orderBookItem]);
-
-      const price = mockCallback.mock.calls[0][0][0];
-      expect(price.buysell).toBe('BUY');
-      expect(price.price).toBe(100);
-      expect(price.quantity).toBe(50);
-      expect(price.repovalue).toBe(null);
-    });
-
-    it('should create price with correct sell direction', () => {
-      const orderBookItem = createOrderBookItem({
-        buySell: ORDER_DIRECTION.SELL,
-        price: 105,
-        quantity: 30,
-        amount: 1500,
-      });
-
-      renderHookAndSubscribe();
-      triggerOrderBookCallback([orderBookItem]);
-
-      const price = mockCallback.mock.calls[0][0][0];
-      expect(price.buysell).toBe('SELL');
-    });
-  });
-
-  describe('multiple order entries at same price', () => {
-    it('should correctly identify self order when multiple entries exist', () => {
-      renderHookAndSubscribe();
-
-      triggerOrderEntriesCallback([
-        createOrderEntry(),
-        createOrderEntry({ orderId: 2, orderNumber: 2, buySell: ORDER_DIRECTION.SELL }),
-      ]);
-      triggerOrderBookCallback([createOrderBookItem()]);
-
-      const price = mockCallback.mock.calls[0][0][0];
-      expect(price.isSelfOrder).toBe(true);
-    });
-  });
-
-  describe('options parameter', () => {
-    describe('enableVolumeSwitch', () => {
-      it('should use quantity when enableVolumeSwitch is false or undefined', () => {
-        renderHookAndSubscribe();
-        triggerOrderBookCallback([createOrderBookItem()]);
-
-        const price = mockCallback.mock.calls[0][0][0];
-        expect(price.quantity).toBe(50);
-      });
-
-      it('should use amount when enableVolumeSwitch is true and volumeType is not "lots"', () => {
-        renderHookAndSubscribe({ enableVolumeSwitch: true, volumeType: 'units' });
-        triggerOrderBookCallback([createOrderBookItem()]);
-
-        const price = mockCallback.mock.calls[0][0][0];
-        expect(price.quantity).toBe(1500);
-      });
-    });
-
-    describe('volumeType', () => {
-      it('should use quantity when volumeType is "lots"', () => {
-        renderHookAndSubscribe({ enableVolumeSwitch: true, volumeType: 'lots' });
-        triggerOrderBookCallback([createOrderBookItem()]);
-
-        const price = mockCallback.mock.calls[0][0][0];
-        expect(price.quantity).toBe(50);
-      });
-
-      it('should use quantity when volumeType is undefined and enableVolumeSwitch is false', () => {
-        renderHookAndSubscribe({ enableVolumeSwitch: false });
-        triggerOrderBookCallback([createOrderBookItem()]);
-
-        const price = mockCallback.mock.calls[0][0][0];
-        expect(price.quantity).toBe(50);
-      });
-    });
-
-    describe('options update', () => {
-      it('should re-emit prices when options change', () => {
-        const { result, rerender } = renderHook(
-          (options: PriceOptions) => useOrderBookSubscriptions({ tickerId, strategy: defaultStrategy, options }),
-          {
-            initialProps: { volumeType: 'lots' },
-          },
-        );
-        result.current.subscribe(mockCallback);
-
-        triggerOrderBookCallback([createOrderBookItem()]);
-
-        expect(mockCallback).toHaveBeenCalledTimes(1);
-        expect(mockCallback.mock.calls[0][0][0].quantity).toBe(50);
-
-        mockCallback.mockClear();
-
-        rerender({ enableVolumeSwitch: true, volumeType: 'units' });
-
-        expect(mockCallback).toHaveBeenCalledTimes(1);
-        expect(mockCallback.mock.calls[0][0][0].quantity).toBe(1500);
-      });
-    });
-  });
-});
diff --git a/src/widgets/Glass/plugins/ntb/hooks/useOrderBookSubscriptions.ts b/src/widgets/Glass/plugins/ntb/hooks/useOrderBookSubscriptions.ts
deleted file mode 100644
index 0043d374c..000000000
--- a/src/widgets/Glass/plugins/ntb/hooks/useOrderBookSubscriptions.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { useCallback, useEffect, useRef, useState } from 'react';
-
-import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
-
-import { InstrumentStrategy, PriceOptions } from '../strategies/types';
-
-import type { OrderBookPlugin } from '../../types';
-import type { NtbOrderBook } from '@api/websokets/classes/WSNTBStompClient/types';
-import type { Price } from '@widgets/Glass/types';
-
-type SubscribeCallback<Data> = (msg: Price<Data>[]) => void;
-
-type SubscriptionRuntime<TData, TOrders> = {
-  prices: TData[] | null;
-  orders: TOrders | null;
-  options?: PriceOptions;
-  listener: SubscribeCallback<TData> | null;
-};
-
-type OrderBookSubscriptions<TData, TOrders> = {
-  subscribe: OrderBookPlugin<TData>['subscribe'];
-  orderEntries: TOrders | null;
-};
-
-type UseOrderBookSubscriptionsProps<TData, TOrders> = {
-  tickerId: string;
-  strategy: InstrumentStrategy<TData, TOrders>;
-  options?: PriceOptions;
-};
-
-export const useOrderBookSubscriptions = <TData extends NtbOrderBook, TOrders>({
-  tickerId,
-  strategy,
-  options,
-}: UseOrderBookSubscriptionsProps<TData, TOrders>): OrderBookSubscriptions<TData, TOrders> => {
-  const runtimeRef = useRef<SubscriptionRuntime<TData, TOrders>>({
-    prices: null,
-    orders: null,
-    listener: null,
-    options,
-  });
-
-  const [orderEntries, setOrderEntries] = useState<TOrders | null>(null);
-
-  const { subscribeToOrderBook, updateOrders, createPrice } = strategy;
-
-  const emitCombined = useCallback(() => {
-    const { prices, orders: entries, listener, options: subOptions } = runtimeRef.current;
-    if (!prices) {
-      return;
-    }
-
-    const newPrices = prices.map((item) => createPrice(entries, item, subOptions));
-
-    listener?.(newPrices);
-  }, [createPrice]);
-
-  const subscribe: OrderBookPlugin<TData>['subscribe'] = useCallback(
-    (callback) => {
-      runtimeRef.current.listener = callback;
-      const unsubscribeFromOrderBook = subscribeToOrderBook(tickerId, (prices) => {
-        runtimeRef.current.prices = prices;
-        emitCombined();
-      });
-
-      const unsubscribeFromOrderEntries = wsNtbMarketDepthStompClient.subscribeToOrderEntries(tickerId, (orders) => {
-        const next = updateOrders(runtimeRef.current.orders, orders);
-
-        runtimeRef.current.orders = next;
-        setOrderEntries(next);
-        emitCombined();
-      });
-
-      return () => {
-        runtimeRef.current.prices = null;
-        runtimeRef.current.orders = null;
-        setOrderEntries(null);
-        unsubscribeFromOrderBook();
-        unsubscribeFromOrderEntries();
-      };
-    },
-    [emitCombined, subscribeToOrderBook, tickerId, updateOrders],
-  );
-
-  // При изменении параметров формирования позиции в стакане пересчитываем prices и уведомляем подписчика
-  useEffect(() => {
-    runtimeRef.current.options = options;
-
-    emitCombined();
-  }, [emitCombined, options]);
-
-  return { orderEntries, subscribe };
-};
diff --git a/src/widgets/Glass/plugins/ntb/ntbOrderBookPlugin.ts b/src/widgets/Glass/plugins/ntb/ntbOrderBookPlugin.ts
index 96c33ff43..a9e21fc24 100644
--- a/src/widgets/Glass/plugins/ntb/ntbOrderBookPlugin.ts
+++ b/src/widgets/Glass/plugins/ntb/ntbOrderBookPlugin.ts
@@ -1,12 +1,57 @@
-import { MARKET_SEGMENT_CODES } from '@modules/ntb/types';
+import { wsGlassStompClient } from '@api/websokets/classes/WSGlassStompClient';
+import { uiConfig } from '@configs/manager';
+import { MARKET_SEGMENT_CODES, ORDER_DIRECTION, PERMISSIONS_CODES } from '@modules/ntb/types';
+import { isAgroTraderSelector, userTradingAccessesSelector } from '@store/selectors/user';
+import { openNTBFormOrderModal } from '@store/slices/modals';
 
-import { NtbOrderBookPluginProvider } from './NtbOrderBookPluginProvider';
+import { createGetContextMenuItems } from './services/createGetContextMenuItems';
+import { createSubscribeToOrderBook } from './services/createSubscribeToOrderBook';
+import { createRowClickHandler } from './utils/createRowClickHandler';
+import { getOrderBookPermission } from './utils/getOrderBookPermission';
 
-import type { OrderBookPluginDefinition } from '../types';
+import type { OrderBookPluginFactory } from '../types';
+import type { OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
 
 /** NTB-плагин стакана */
-export const ntbOrderBookPlugin: OrderBookPluginDefinition = {
-  name: 'ntbOrderBookPlugin',
-  check: (tickerId) => !!tickerId?.includes(MARKET_SEGMENT_CODES.MX_AGRO),
-  Provider: NtbOrderBookPluginProvider,
+export const ntbOrderBookPlugin: OrderBookPluginFactory = ({ tickerId, contract, dispatch, select }) => {
+  const { orderBooks } = select(userTradingAccessesSelector) ?? {};
+  const isAgroTrader = select(isAgroTraderSelector);
+
+  const permission = getOrderBookPermission(tickerId, orderBooks);
+
+  const orderEntries: Map<number, OrderBookEntry[]> = new Map();
+
+  return {
+    name: 'ntbOrderBookPlugin',
+    check: () => !!tickerId?.includes(MARKET_SEGMENT_CODES.MX_AGRO),
+    actions: isAgroTrader
+      ? {
+          rowClick: createRowClickHandler({ permission, contract, dispatch }),
+          orderBtnClick: () => {
+            dispatch(
+              openNTBFormOrderModal({
+                direction: permission === PERMISSIONS_CODES.BUY_PERMISSION ? ORDER_DIRECTION.BUY : ORDER_DIRECTION.SELL,
+                showTabs: permission === PERMISSIONS_CODES.BOTH_PERMISSION,
+                choosenInstrumentFromSearch: tickerId,
+                securityId: contract?.symbol,
+              }),
+            );
+          },
+        }
+      : {},
+    getContextMenuItems: isAgroTrader
+      ? createGetContextMenuItems({ tickerId, orderEntries, permission, dispatch })
+      : undefined,
+    subscribe:
+      uiConfig.featureFlag1 === 'ntbGlassOldApiEnable'
+        ? (callback) => wsGlassStompClient.subscribeToOrderBook(tickerId, callback)
+        : createSubscribeToOrderBook(tickerId, orderEntries),
+    uiConfig: {
+      displayMyOrders: isAgroTrader,
+      showOrderButton: isAgroTrader && !!permission,
+      noData: {
+        title: 'Нет выставленных заявок',
+      },
+    },
+  };
 };
diff --git a/src/widgets/Glass/plugins/ntb/services/__tests__/createSubscribeToOrderBook.test.ts b/src/widgets/Glass/plugins/ntb/services/__tests__/createSubscribeToOrderBook.test.ts
new file mode 100644
index 000000000..8c0d2c744
--- /dev/null
+++ b/src/widgets/Glass/plugins/ntb/services/__tests__/createSubscribeToOrderBook.test.ts
@@ -0,0 +1,378 @@
+import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
+import { ORDER_DIRECTION } from '@modules/ntb/types';
+import { OrderEntryStatus } from '@modules/ntb/types/permissions';
+
+import { createSubscribeToOrderBook } from '../createSubscribeToOrderBook';
+
+import type { NtbOrderBookPrice, OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
+
+jest.mock('@api/websokets/classes/WSNtbMarketDepthStompClient', () => ({
+  wsNtbMarketDepthStompClient: {
+    subscribeToOrderBook: jest.fn(),
+    subscribeToOrderEntries: jest.fn(),
+  },
+}));
+
+describe('createSubscribeToOrderBook', () => {
+  const tickerId = 'TEST:TICKER';
+  let orderEntries: Map<number, OrderBookEntry[]>;
+  const mockCallback = jest.fn();
+  let mockSubscribeToOrderBook: jest.Mock;
+  let mockSubscribeToOrderEntries: jest.Mock;
+  const mockUnsubscribeFromOrderBook = jest.fn();
+  const mockUnsubscribeFromOrderEntries = jest.fn();
+
+  beforeEach(() => {
+    orderEntries = new Map();
+    mockSubscribeToOrderBook = wsNtbMarketDepthStompClient.subscribeToOrderBook as jest.Mock;
+    mockSubscribeToOrderEntries = wsNtbMarketDepthStompClient.subscribeToOrderEntries as jest.Mock;
+    mockSubscribeToOrderBook.mockReturnValue(mockUnsubscribeFromOrderBook);
+    mockSubscribeToOrderEntries.mockReturnValue(mockUnsubscribeFromOrderEntries);
+  });
+
+  describe('subscription', () => {
+    it('should subscribe to order book with correct tickerId', () => {
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      expect(mockSubscribeToOrderBook).toHaveBeenCalledWith(tickerId, expect.any(Function));
+    });
+
+    it('should subscribe to order entries with correct tickerId', () => {
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      expect(mockSubscribeToOrderEntries).toHaveBeenCalledWith(tickerId, expect.any(Function));
+    });
+
+    it('should return unsubscribe function', () => {
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      const unsubscribe = subscribe(mockCallback);
+
+      expect(typeof unsubscribe).toBe('function');
+    });
+  });
+
+  describe('order book data handling', () => {
+    it('should not call callback when order book data is not received yet', () => {
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookEntryCallback = mockSubscribeToOrderEntries.mock.calls[0][1];
+      orderBookEntryCallback([
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      expect(mockCallback).not.toHaveBeenCalled();
+    });
+
+    it('should call callback with prices when order book data is received', () => {
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookData: NtbOrderBookPrice[] = [
+        { buySell: ORDER_DIRECTION.BUY, price: 100, quantity: 50 },
+        { buySell: ORDER_DIRECTION.SELL, price: 105, quantity: 30 },
+      ];
+
+      const orderBookCallback = mockSubscribeToOrderBook.mock.calls[0][1];
+      orderBookCallback(orderBookData);
+
+      expect(mockCallback).toHaveBeenCalledTimes(1);
+      expect(mockCallback).toHaveBeenCalledWith([
+        {
+          buysell: 'BUY',
+          price: 100,
+          quantity: 50,
+          repovalue: null,
+          isSelfOrder: false,
+          selfQuantity: 0,
+        },
+        {
+          buysell: 'SELL',
+          price: 105,
+          quantity: 30,
+          repovalue: null,
+          isSelfOrder: false,
+          selfQuantity: 0,
+        },
+      ]);
+    });
+
+    it('should mark prices as self orders when order entries exist for that price', () => {
+      orderEntries.set(100, [
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookData: NtbOrderBookPrice[] = [
+        { buySell: ORDER_DIRECTION.BUY, price: 100, quantity: 50 },
+        { buySell: ORDER_DIRECTION.SELL, price: 105, quantity: 30 },
+      ];
+
+      const orderBookCallback = mockSubscribeToOrderBook.mock.calls[0][1];
+      orderBookCallback(orderBookData);
+
+      expect(mockCallback).toHaveBeenCalledWith([
+        {
+          buysell: 'BUY',
+          price: 100,
+          quantity: 50,
+          repovalue: null,
+          isSelfOrder: true,
+          selfQuantity: 0,
+        },
+        {
+          buysell: 'SELL',
+          price: 105,
+          quantity: 30,
+          repovalue: null,
+          isSelfOrder: false,
+          selfQuantity: 0,
+        },
+      ]);
+    });
+  });
+
+  describe('order entries handling', () => {
+    it('should add new active order to entries', () => {
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookData: NtbOrderBookPrice[] = [{ buySell: ORDER_DIRECTION.BUY, price: 100, quantity: 50 }];
+      const orderBookCallback = mockSubscribeToOrderBook.mock.calls[0][1];
+      orderBookCallback(orderBookData);
+
+      mockCallback.mockClear();
+
+      const orderBookEntryCallback = mockSubscribeToOrderEntries.mock.calls[0][1];
+      orderBookEntryCallback([
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      expect(orderEntries.get(100)).toHaveLength(1);
+      expect(mockCallback).toHaveBeenCalledTimes(1);
+    });
+
+    it('should update existing active order', () => {
+      orderEntries.set(100, [
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookEntryCallback = mockSubscribeToOrderEntries.mock.calls[0][1];
+      orderBookEntryCallback([
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      expect(orderEntries.get(100)).toHaveLength(1);
+    });
+
+    it('should remove inactive order from entries', () => {
+      orderEntries.set(100, [
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 2,
+          orderNumber: 2,
+          isOwnOrder: true,
+        },
+      ]);
+
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookEntryCallback = mockSubscribeToOrderEntries.mock.calls[0][1];
+      orderBookEntryCallback([
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: 'CANCELLED' as OrderEntryStatus,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      expect(orderEntries.get(100)?.length).toBe(1);
+      expect(orderEntries.get(100)?.find((e) => e.orderNumber === 1)).toBeUndefined();
+    });
+
+    it('should remove price entry when all orders at that price are removed', () => {
+      orderEntries.set(100, [
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookEntryCallback = mockSubscribeToOrderEntries.mock.calls[0][1];
+      orderBookEntryCallback([
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: 'CANCELLED' as OrderEntryStatus,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+      ]);
+
+      expect(orderEntries.has(100)).toBe(false);
+    });
+  });
+
+  describe('unsubscribe', () => {
+    it('should call both unsubscribe functions', () => {
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      const unsubscribe = subscribe(mockCallback);
+
+      unsubscribe();
+
+      expect(mockUnsubscribeFromOrderBook).toHaveBeenCalledTimes(1);
+      expect(mockUnsubscribeFromOrderEntries).toHaveBeenCalledTimes(1);
+    });
+  });
+
+  describe('createPriceEntry helper', () => {
+    it('should create price entry with correct buy direction', () => {
+      const orderBookItem: NtbOrderBookPrice = {
+        buySell: ORDER_DIRECTION.BUY,
+        price: 100,
+        quantity: 50,
+      };
+
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookData: NtbOrderBookPrice[] = [orderBookItem];
+      const orderBookCallback = mockSubscribeToOrderBook.mock.calls[0][1];
+      orderBookCallback(orderBookData);
+
+      const result = mockCallback.mock.calls[0][0][0];
+      expect(result.buysell).toBe('BUY');
+      expect(result.price).toBe(100);
+      expect(result.quantity).toBe(50);
+      expect(result.repovalue).toBe(null);
+    });
+
+    it('should create price entry with correct sell direction', () => {
+      const orderBookItem: NtbOrderBookPrice = {
+        buySell: ORDER_DIRECTION.SELL,
+        price: 105,
+        quantity: 30,
+      };
+
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookData: NtbOrderBookPrice[] = [orderBookItem];
+      const orderBookCallback = mockSubscribeToOrderBook.mock.calls[0][1];
+      orderBookCallback(orderBookData);
+
+      const result = mockCallback.mock.calls[0][0][0];
+      expect(result.buysell).toBe('SELL');
+    });
+  });
+
+  describe('multiple order entries at same price', () => {
+    it('should correctly identify self order when multiple entries exist', () => {
+      orderEntries.set(100, [
+        {
+          buySell: ORDER_DIRECTION.BUY,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 1,
+          orderNumber: 1,
+          isOwnOrder: true,
+        },
+        {
+          buySell: ORDER_DIRECTION.SELL,
+          price: 100,
+          status: OrderEntryStatus.Active,
+          key: tickerId,
+          orderId: 2,
+          orderNumber: 2,
+          isOwnOrder: true,
+        },
+      ]);
+
+      const subscribe = createSubscribeToOrderBook(tickerId, orderEntries);
+      subscribe(mockCallback);
+
+      const orderBookData: NtbOrderBookPrice[] = [{ buySell: ORDER_DIRECTION.BUY, price: 100, quantity: 50 }];
+
+      const orderBookCallback = mockSubscribeToOrderBook.mock.calls[0][1];
+      orderBookCallback(orderBookData);
+
+      const result = mockCallback.mock.calls[0][0][0];
+      expect(result.isSelfOrder).toBe(true);
+    });
+  });
+});
diff --git a/src/widgets/Glass/plugins/ntb/services/createGetContextMenuItems.tsx b/src/widgets/Glass/plugins/ntb/services/createGetContextMenuItems.tsx
index 5ab08bf4d..142444408 100644
--- a/src/widgets/Glass/plugins/ntb/services/createGetContextMenuItems.tsx
+++ b/src/widgets/Glass/plugins/ntb/services/createGetContextMenuItems.tsx
@@ -1,39 +1,31 @@
-import React from 'react';
-
 import { createOrderActions } from '@modules/ntb/services/createOrderActions';
 import { PERMISSIONS_CODES } from '@modules/ntb/types';
-import Tooltip from '@uikit/Tooltip';
 
-import { getContextMenuAvailability } from '../utils/getContextMenuAvailability';
 import { hasPermission } from '../utils/hasPermission';
 
 import type { OrderBookPlugin } from '../../types';
 import type { OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
-import type { TradeTimePermissionInfo } from '@modules/ntb/types';
 import type { AnyAction, Dispatch } from '@reduxjs/toolkit';
-import type { Price } from '@widgets/Glass/types';
+import Tooltip from '@uikit/Tooltip';
+import React from 'react';
 
-type CreateGetContextMenuItemsProps<TData, TOrders> = {
+type CreateGetContextMenuItemsProps = {
   tickerId: string;
-  orderEntries: TOrders | null;
-  getOwnOrders: (entries: TOrders | null, item: Price<TData>) => OrderBookEntry[];
+  orderEntries: Map<number, OrderBookEntry[]>;
   permission: PERMISSIONS_CODES | null;
-  tradeTimePermission: TradeTimePermissionInfo;
   dispatch: Dispatch<AnyAction>;
 };
 
 export const createGetContextMenuItems =
-  <TData, TOrders>({
+  ({
     tickerId,
     orderEntries,
-    getOwnOrders,
     permission,
-    tradeTimePermission,
     dispatch,
-  }: CreateGetContextMenuItemsProps<TData, TOrders>): OrderBookPlugin<TData>['getContextMenuItems'] =>
+  }: CreateGetContextMenuItemsProps): OrderBookPlugin['getContextMenuItems'] =>
   (payload) => {
-    const ownOrders = getOwnOrders(orderEntries, payload);
-    const noOwnOrders = !ownOrders || ownOrders.length === 0;
+    const orderOwnEntries = orderEntries.get(payload.price)?.filter((p) => p.isOwnOrder);
+    const noOwnOrders = !orderOwnEntries || orderOwnEntries.length === 0;
     const normalizedDirection = payload.buysell.toLowerCase();
 
     if (noOwnOrders || !hasPermission(permission, normalizedDirection)) {
@@ -42,30 +34,29 @@ export const createGetContextMenuItems =
 
     const { editOrderById, deleteOrder, deleteAllOrders } = createOrderActions({ dispatch });
 
-    const { editItem, deleteItem } = getContextMenuAvailability({
-      tradeTimePermission,
-      moreThanOneOwnOrder: ownOrders.length > 1,
-    });
+    const editDisabled = orderOwnEntries.length > 1;
 
     return [
       {
         key: 'edit',
-        label: <Tooltip title={editItem.tooltip}>Редактировать заявку</Tooltip>,
-        onClick: () => editOrderById(ownOrders[0].orderNumber),
-        disabled: editItem.disabled,
+        label: (
+          <Tooltip title={editDisabled ? 'Нельзя редактировать больше одной заявки' : undefined}>
+            Редактировать заявку
+          </Tooltip>
+        ),
+        onClick: () => editOrderById(orderOwnEntries[0].orderNumber),
+        disabled: editDisabled,
       },
-      ownOrders.length === 1
+      orderOwnEntries.length === 1
         ? {
             key: 'delete',
-            label: <Tooltip title={deleteItem.tooltip}>Снять заявку</Tooltip>,
-            onClick: () => deleteOrder(ownOrders[0].orderNumber),
-            disabled: deleteItem.disabled,
+            label: 'Снять заявку',
+            onClick: () => deleteOrder(orderOwnEntries[0].orderNumber),
           }
         : {
             key: 'delete',
-            label: <Tooltip title={deleteItem.tooltip}>Снять мои заявки</Tooltip>,
+            label: 'Снять мои заявки',
             onClick: () => deleteAllOrders(tickerId, payload.buysell),
-            disabled: deleteItem.disabled,
           },
     ];
   };
diff --git a/src/widgets/Glass/plugins/ntb/services/createSubscribeToOrderBook.ts b/src/widgets/Glass/plugins/ntb/services/createSubscribeToOrderBook.ts
new file mode 100644
index 000000000..61f550914
--- /dev/null
+++ b/src/widgets/Glass/plugins/ntb/services/createSubscribeToOrderBook.ts
@@ -0,0 +1,79 @@
+import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
+import { ORDER_DIRECTION, OrderEntryStatus } from '@modules/ntb/types';
+
+import type { OrderBookPlugin } from '../../types';
+import type { NtbOrderBookPrice, OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
+import type { Price } from '@widgets/Glass/types';
+
+const PRICE_DIRECTION = {
+  [ORDER_DIRECTION.BUY]: 'BUY',
+  [ORDER_DIRECTION.SELL]: 'SELL',
+};
+
+const createPriceEntry = (orderBookItem: NtbOrderBookPrice, orderEntries: Map<number, OrderBookEntry[]>): Price => {
+  const { price, quantity, buySell } = orderBookItem;
+  const entries = orderEntries.get(price);
+  const isSelfOrder = !!entries?.length && entries.some((e) => e.buySell === buySell);
+
+  return {
+    buysell: PRICE_DIRECTION[buySell],
+    price,
+    quantity,
+    repovalue: null,
+    isSelfOrder,
+    selfQuantity: 0,
+  };
+};
+
+const updateOrderEntries = (order: OrderBookEntry, entries: OrderBookEntry[]) => {
+  if (order.status !== OrderEntryStatus.Active) {
+    return entries.filter((e) => e.orderNumber !== order.orderNumber);
+  }
+  const entryIndex = entries.findIndex((e) => e.orderNumber === order.orderNumber);
+  if (entryIndex === -1) {
+    return [...entries, order];
+  }
+  const newEntries = [...entries];
+  newEntries[entryIndex] = order;
+  return newEntries;
+};
+
+export const createSubscribeToOrderBook =
+  (tickerId: string, orderEntries: Map<number, OrderBookEntry[]>): OrderBookPlugin['subscribe'] =>
+  (callback) => {
+    let orderBookData: NtbOrderBookPrice[];
+
+    const emitCombined = () => {
+      if (!orderBookData) {
+        return;
+      }
+
+      const prices: Price[] = orderBookData.map((item) => createPriceEntry(item, orderEntries));
+
+      callback(prices);
+    };
+
+    const unsubscribeFromOrderBook = wsNtbMarketDepthStompClient.subscribeToOrderBook(tickerId, (price) => {
+      orderBookData = price;
+      emitCombined();
+    });
+
+    const unsubscribeFromOrderEntries = wsNtbMarketDepthStompClient.subscribeToOrderEntries(tickerId, (orders) => {
+      orders.forEach((order) => {
+        const entries = updateOrderEntries(order, orderEntries.get(order.price) ?? []);
+
+        if (entries.length === 0) {
+          orderEntries.delete(order.price);
+        } else {
+          orderEntries.set(order.price, entries);
+        }
+      });
+
+      emitCombined();
+    });
+
+    return () => {
+      unsubscribeFromOrderBook();
+      unsubscribeFromOrderEntries();
+    };
+  };
diff --git a/src/widgets/Glass/plugins/ntb/strategies/defaultStrategy.ts b/src/widgets/Glass/plugins/ntb/strategies/defaultStrategy.ts
deleted file mode 100644
index 9846eb9a9..000000000
--- a/src/widgets/Glass/plugins/ntb/strategies/defaultStrategy.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
-import { NtbOrderBook, OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
-import { OrderEntryStatus } from '@modules/ntb/types';
-
-import { createBasePrice } from '../utils/createBasePrice';
-
-import { InstrumentStrategy } from './types';
-
-const updateOrderEntries = (order: OrderBookEntry, entries: OrderBookEntry[]) => {
-  if (order.status !== OrderEntryStatus.Active) {
-    return entries.filter((e) => e.orderNumber !== order.orderNumber);
-  }
-  const entryIndex = entries.findIndex((e) => e.orderNumber === order.orderNumber);
-  if (entryIndex === -1) {
-    return [...entries, order];
-  }
-  const newEntries = [...entries];
-  newEntries[entryIndex] = order;
-  return newEntries;
-};
-
-export const defaultStrategy: InstrumentStrategy<NtbOrderBook, Map<number, OrderBookEntry[]>> = {
-  name: 'default',
-  check: () => true,
-  subscribeToOrderBook: wsNtbMarketDepthStompClient.subscribeToOrderBook,
-  updateOrders: (prev, orders) => {
-    const next = new Map(prev);
-    orders.forEach((order) => {
-      const entries = updateOrderEntries(order, next?.get(order.price) ?? []);
-      if (entries.length === 0) {
-        next.delete(order.price);
-      } else {
-        next.set(order.price, entries);
-      }
-    });
-
-    return next;
-  },
-  createPrice: (orders, item, { volumeType, enableVolumeSwitch } = {}) => {
-    const basePrice = createBasePrice(item);
-    const { quantity, amount } = item;
-    const isSelfOrder = !!orders?.get(item.price)?.some((o) => o.buySell === item.buySell);
-    const displayedQuantity = !enableVolumeSwitch || volumeType === 'lots' ? quantity : (amount ?? 0);
-
-    return {
-      ...basePrice,
-      quantity: displayedQuantity,
-      isSelfOrder,
-      extra: item,
-    };
-  },
-  getOwnOrders: (orders, item) => orders?.get(item.price)?.filter((order) => order.isOwnOrder) ?? [],
-};
diff --git a/src/widgets/Glass/plugins/ntb/strategies/index.ts b/src/widgets/Glass/plugins/ntb/strategies/index.ts
deleted file mode 100644
index 8b3f9934f..000000000
--- a/src/widgets/Glass/plugins/ntb/strategies/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { orderQueueStrategy } from './orderQueueStrategy';
-
-export const instrumentStrategies = [orderQueueStrategy];
-export { defaultStrategy } from './defaultStrategy';
diff --git a/src/widgets/Glass/plugins/ntb/strategies/orderQueueStrategy.ts b/src/widgets/Glass/plugins/ntb/strategies/orderQueueStrategy.ts
deleted file mode 100644
index 09d3bc45d..000000000
--- a/src/widgets/Glass/plugins/ntb/strategies/orderQueueStrategy.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { wsNtbMarketDepthStompClient } from '@api/websokets/classes/WSNtbMarketDepthStompClient';
-import { TKS_NTB_BOARDS } from '@modules/ntb/constants';
-import { OrderEntryStatus } from '@modules/ntb/types';
-
-import { createBasePrice } from '../utils/createBasePrice';
-
-import type { InstrumentStrategy } from './types';
-import type { NtbOrderQueue, OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
-
-export const orderQueueStrategy: InstrumentStrategy<NtbOrderQueue, Map<number, OrderBookEntry>> = {
-  name: 'orderQueue',
-  check: (key) => TKS_NTB_BOARDS.some((b) => key.includes(b)),
-  subscribeToOrderBook: wsNtbMarketDepthStompClient.subscribeToOrderQueue,
-  updateOrders: (prev, orders) => {
-    const next = new Map(prev);
-    orders.forEach((order) => {
-      if (order.status === OrderEntryStatus.Active) {
-        next.set(order.orderNumber, order);
-      } else {
-        next.delete(order.orderNumber);
-      }
-    });
-    return next;
-  },
-  createPrice: (orders, item) => {
-    const basePrice = createBasePrice(item);
-    const { orderNo } = item;
-    const isSelfOrder = !!item.orderNo && orders?.has(item.orderNo);
-    const key = orderNo ? String(orderNo) : undefined;
-
-    return {
-      ...basePrice,
-      isSelfOrder,
-      extra: key ? { ...item, key } : item,
-    };
-  },
-  getOwnOrders: (orders, item) => {
-    if (!item.extra?.orderNo) {
-      return [];
-    }
-    const ownOrder = orders?.get(item.extra?.orderNo);
-
-    return ownOrder?.isOwnOrder ? [ownOrder] : [];
-  },
-  views: [{ value: 'table' }],
-};
diff --git a/src/widgets/Glass/plugins/ntb/strategies/types.ts b/src/widgets/Glass/plugins/ntb/strategies/types.ts
deleted file mode 100644
index f6ec696f1..000000000
--- a/src/widgets/Glass/plugins/ntb/strategies/types.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { NtbOrderBook, OrderBookEntry } from '@api/websokets/classes/WSNTBStompClient/types';
-import { Price, ViewTypeItem, VolumeType } from '@widgets/Glass/types';
-
-export type PriceOptions = {
-  /** Отображение объема (ед. изм. или лоты) */
-  volumeType?: VolumeType;
-  /** Нужно ли переключаться с лотов на единицы измерения */
-  enableVolumeSwitch?: boolean;
-};
-
-/** Определяется поведение плагина для конкретного инструмента,
- * включая подписки на WS, формирование данных для стакана и конфигурацию отображения
- * @template TData - тип данных по стакану
- * @template TOrders - тип структуры с сохраненными заявками */
-export type InstrumentStrategy<TData = NtbOrderBook, TOrders = Map<number, OrderBookEntry[]>> = {
-  /** Название стратегии */
-  name: string;
-  /** Проверяет, применима ли стратегия к инструменту */
-  check: (key: string) => boolean;
-  /** Подписка на данные по стакану */
-  subscribeToOrderBook: (key: string, callback: (msg: TData[]) => void) => VoidFunction;
-  /** Функция обновления стейта с заявками
-   * @param prev - предыдущее состояние заявок
-   * @param newOrders - массив с обновленными/новыми заявками
-   */
-  updateOrders: (prev: TOrders | null, newOrders: OrderBookEntry[]) => TOrders;
-  /** Функция создания позиции для стакана
-   * @param orders - хранилище заявок
-   * @param item - полученные данные по стакану
-   * @param options - опции формирования цены
-   */
-  createPrice: (orders: TOrders | null, item: TData, options?: PriceOptions) => Price<TData>;
-  /** Получает собственные заявки пользователя их хранилища заявок на основании позиции в стакане */
-  getOwnOrders: (orders: TOrders | null, price: Price<TData>) => OrderBookEntry[];
-  /** Доступные типы отображения */
-  views?: ViewTypeItem[];
-};
diff --git a/src/widgets/Glass/plugins/ntb/types.ts b/src/widgets/Glass/plugins/ntb/types.ts
deleted file mode 100644
index 59098bebb..000000000
--- a/src/widgets/Glass/plugins/ntb/types.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { NtbOrderBook, NtbOrderQueue } from '@api/websokets/classes/WSNTBStompClient/types';
-import type { Price } from '@widgets/Glass/types';
-
-export type NtbOrderQueuePrice = Price<NtbOrderQueue>;
-
-export type NtbOrderBookPrice = Price<NtbOrderBook>;
diff --git a/src/widgets/Glass/plugins/ntb/utils/createBasePrice.ts b/src/widgets/Glass/plugins/ntb/utils/createBasePrice.ts
deleted file mode 100644
index df28f7e50..000000000
--- a/src/widgets/Glass/plugins/ntb/utils/createBasePrice.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { ORDER_DIRECTION } from '@modules/ntb/types';
-
-import type { NtbOrderBook } from '@api/websokets/classes/WSNTBStompClient/types';
-import type { Price } from '@widgets/Glass/types';
-
-const PRICE_DIRECTION = {
-  [ORDER_DIRECTION.BUY]: 'BUY',
-  [ORDER_DIRECTION.SELL]: 'SELL',
-};
-
-export const createBasePrice = <T extends NtbOrderBook>(item: T): Price<T> => {
-  const { price, quantity, buySell } = item;
-
-  return {
-    buysell: PRICE_DIRECTION[buySell],
-    price,
-    quantity,
-    repovalue: null,
-    selfQuantity: 0,
-  };
-};
diff --git a/src/widgets/Glass/plugins/ntb/utils/getContextMenuAvailability.ts b/src/widgets/Glass/plugins/ntb/utils/getContextMenuAvailability.ts
deleted file mode 100644
index 222931520..000000000
--- a/src/widgets/Glass/plugins/ntb/utils/getContextMenuAvailability.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { TradeTimePermissionInfo } from '@modules/ntb/types';
-
-type GetContextMenuAvailabilityProps = {
-  tradeTimePermission: TradeTimePermissionInfo;
-  moreThanOneOwnOrder: boolean;
-};
-
-export const getContextMenuAvailability = ({
-  tradeTimePermission,
-  moreThanOneOwnOrder,
-}: GetContextMenuAvailabilityProps) => {
-  const { active: isTradeActive, hint: tradePermissionsHint } = tradeTimePermission;
-
-  let editTooltip: string | undefined;
-  if (!isTradeActive) {
-    editTooltip = tradePermissionsHint;
-  } else if (moreThanOneOwnOrder) {
-    editTooltip = 'Нельзя редактировать больше одной заявки';
-  }
-
-  return {
-    editItem: {
-      tooltip: editTooltip,
-      disabled: !isTradeActive || moreThanOneOwnOrder,
-    },
-    deleteItem: {
-      tooltip: tradePermissionsHint,
-      disabled: !isTradeActive,
-    },
-  };
-};
diff --git a/src/widgets/Glass/plugins/spfi/SpfiPluginOrderBookProvider.tsx b/src/widgets/Glass/plugins/spfi/SpfiPluginOrderBookProvider.tsx
deleted file mode 100644
index 01a2735fb..000000000
--- a/src/widgets/Glass/plugins/spfi/SpfiPluginOrderBookProvider.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import React, { useMemo } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { ticketFormController } from '@api/controllers/ticketFormController';
-import { wsOrdersJournalStompClient } from '@api/websokets/classes/WSOrdersJournalStompClient';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { isSPFITraderSelector } from '@store/selectors/user';
-import { openCreateDepthTicketModal, openCreateTicketModal } from '@store/slices/modals';
-import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-import { TicketStatisticsEvent } from '@widgets/OrdersJournal/components/TicketModal/types';
-
-import { PluginContext } from '../PluginContext';
-import { OrderBookPlugin, PluginProvider } from '../types';
-
-import { spfiDataMapper } from './utils/spfiDataMapper';
-
-export const SpfiOrderBookPluginProvider: PluginProvider = ({ tickerId, contract, children }) => {
-  const widgetId = useWidgetIdContext();
-  const isSpfiTrader = useAppSelect(isSPFITraderSelector);
-  const dispatch = useDispatch();
-
-  const plugin: OrderBookPlugin = useMemo(
-    () => ({
-      actions: {
-        orderBtnClick: () => {
-          if (contract?.shortName && contract?.termName) {
-            dispatch(
-              openCreateDepthTicketModal({
-                instr: contract.shortName,
-                term: contract.termName,
-                widgetId,
-                key: 'bid',
-              }),
-            );
-            return;
-          }
-          dispatch(openCreateTicketModal({ widgetId }));
-          ticketFormController.sendStatistics({ action: TicketStatisticsEvent.Open });
-        },
-      },
-      subscribe: (callback) =>
-        wsOrdersJournalStompClient.subscribeToOrderBook(tickerId, (data) => callback(data.map(spfiDataMapper))),
-      uiConfig: {
-        displayMyOrders: isSpfiTrader,
-        orderButton: { visible: isSpfiTrader },
-      },
-    }),
-    [contract?.shortName, contract?.termName, dispatch, isSpfiTrader, tickerId, widgetId],
-  );
-
-  return <PluginContext.Provider value={plugin}>{children}</PluginContext.Provider>;
-};
diff --git a/src/widgets/Glass/plugins/spfi/spfiPlugin.ts b/src/widgets/Glass/plugins/spfi/spfiPlugin.ts
index 3be460b02..2c5a0d1e2 100644
--- a/src/widgets/Glass/plugins/spfi/spfiPlugin.ts
+++ b/src/widgets/Glass/plugins/spfi/spfiPlugin.ts
@@ -1,13 +1,44 @@
-import { Contract } from '@modules/contracts';
+import { ticketFormController } from '@api/controllers/ticketFormController';
+import { wsOrdersJournalStompClient } from '@api/websokets/classes/WSOrdersJournalStompClient';
+import { isSPFITraderSelector } from '@store/selectors/user';
+import { openCreateDepthTicketModal, openCreateTicketModal } from '@store/slices/modals';
 import { getIsSapfirInstrument } from '@widgets/Glass/logic/utils/getIsSapfirInstrument';
+import { TicketStatisticsEvent } from '@widgets/OrdersJournal/components/TicketModal/types';
 
-import { SpfiOrderBookPluginProvider } from './SpfiPluginOrderBookProvider';
+import { spfiDataMapper } from './utils/spfiDataMapper';
 
-import type { OrderBookPluginDefinition } from '../types';
+import type { OrderBookPluginFactory } from '../types';
 
 /** СПФИ-плагин стакана */
-export const spfiOrderBookPlugin: OrderBookPluginDefinition = {
-  name: 'spfiOrderBookPlugin',
-  check: (_, contract?: Contract) => getIsSapfirInstrument(contract?.groupType),
-  Provider: SpfiOrderBookPluginProvider,
+export const spfiOrderBookPlugin: OrderBookPluginFactory = ({ widgetId, tickerId, contract, select, dispatch }) => {
+  const isSpfiTrader = select(isSPFITraderSelector);
+  const isSpfiInstrument = getIsSapfirInstrument(contract?.groupType);
+
+  return {
+    name: 'spfiOrderBookPlugin',
+    check: () => isSpfiInstrument,
+    actions: {
+      orderBtnClick: () => {
+        if (contract?.shortName && contract?.termName) {
+          dispatch(
+            openCreateDepthTicketModal({
+              instr: contract.shortName,
+              term: contract.termName,
+              widgetId,
+              key: 'bid',
+            }),
+          );
+          return;
+        }
+        dispatch(openCreateTicketModal({ widgetId }));
+        ticketFormController.sendStatistics({ action: TicketStatisticsEvent.Open });
+      },
+    },
+    subscribe: (callback) =>
+      wsOrdersJournalStompClient.subscribeToOrderBook(tickerId, (data) => callback(data.map(spfiDataMapper))),
+    uiConfig: {
+      displayMyOrders: isSpfiTrader,
+      showOrderButton: isSpfiTrader,
+    },
+  };
 };
diff --git a/src/widgets/Glass/plugins/types.ts b/src/widgets/Glass/plugins/types.ts
index a80879c6c..2b677bfdf 100644
--- a/src/widgets/Glass/plugins/types.ts
+++ b/src/widgets/Glass/plugins/types.ts
@@ -1,9 +1,8 @@
-import { ViewColumn } from '../components/TableView/types';
-
-import type { Price, ViewType, ViewTypeItem, VolumeType } from '../types';
+import type { ModifiedFourColAntdData, Price } from '../types';
 import type { Contract } from '@modules/contracts';
+import type { Dispatch } from '@reduxjs/toolkit';
+import type { RootState } from '@store/setupStore';
 import type { ContextMenuItem } from '@uikit/ContextMenu/types';
-import type { FC, PropsWithChildren } from 'react';
 
 export type RowClickPayload = {
   direction: string;
@@ -12,6 +11,8 @@ export type RowClickPayload = {
   choosenInstrumentFromSearch: Contract['issKey'];
 };
 
+type ContextMenuPayload = ModifiedFourColAntdData;
+
 /**
  Описывает действия, которые стакан может вызвать
  */
@@ -22,66 +23,35 @@ export type OrderBookPluginActions = {
   orderBtnClick?: VoidFunction;
 };
 
-export type OrderBookPluginProviderProps = {
+export type OrderBookPluginProps = {
   widgetId: number;
   tickerId: string;
   contract?: Contract;
+  dispatch: Dispatch;
+  select: <T>(selector: (state: RootState) => T) => T;
 };
 
-export type UiConfig = {
-  /** Конфигурация кнопки создания заявки */
-  orderButton?: {
-    /** Видимость кнопки */
-    visible: boolean;
-    /** Тултип при наведении на кнопку */
-    tooltipTitle?: string;
-    /** Кнопка неактивна */
-    disabled?: boolean;
-  };
-  /** Видимость тумблера `Показывать заявки моей фирмы` */
-  displayMyOrders?: boolean;
-  /** Конфиг отображения объема */
-  volumeType?: {
-    /** Видимость настройки `Отображение объема` */
-    visible: boolean;
-    /** Значение объема по умолчанию */
-    defaultValue: VolumeType;
-    labels?: Partial<Record<VolumeType, string>>;
-  };
-  /** Конфиг для EmptyState (когда нет данных или не выбран инструмент) */
-  noData?: { title: string };
-  /** Тултип при наведении на позицию в стакане */
-  cellTooltip?: string;
-  views?: ViewTypeItem[];
-  defaultView?: ViewType;
-};
-
-export type PluginProvider = FC<PropsWithChildren<OrderBookPluginProviderProps>>;
-
-/** Описание плагина стакана */
-export type OrderBookPluginDefinition = {
+/** Создает плагин стакана на основании переданных свойств */
+export type OrderBookPluginFactory = (props: OrderBookPluginProps) => {
   /** Имя плагина */
   name: string;
   /** Проверка применимости плагина к инструменту */
-  check: (tickerId: string | null, contract?: Contract) => boolean;
+  check: () => boolean;
   /** Действия плагина (обработчики событий и т.п.) */
-  Provider: PluginProvider;
-};
-
-/** Runtime-конфигурация плагина стакана */
-export type OrderBookPlugin<T = Record<string, unknown>> = {
   actions: OrderBookPluginActions;
   /**
    * Возвращает пункты контекстного меню.
    * Если не передан или возвращает пустой массив, меню не будет вызывано.
    */
-  getContextMenuItems?: (payload: Price<T>) => ContextMenuItem[];
+  getContextMenuItems?: (payload: ContextMenuPayload) => ContextMenuItem[];
   /** Подписка на стакан инструмента */
-  subscribe: (callback: (msg: Price<T>[]) => void) => VoidFunction;
-  uiConfig: UiConfig;
-  /** Конфиг режима отображения `Котировки` */
-  tableView?: {
-    /** Конфиг колонок для режима `Котировки` */
-    columns: ViewColumn<Price<T>>[];
+  subscribe: (callback: (msg: Price[]) => void) => VoidFunction;
+  uiConfig: {
+    showOrderButton?: boolean;
+    displayMyOrders?: boolean;
+    noData?: { title: string };
   };
 };
+
+/** Плагин стакана */
+export type OrderBookPlugin = ReturnType<OrderBookPluginFactory>;
diff --git a/src/widgets/Glass/properties/types.ts b/src/widgets/Glass/properties/types.ts
index ad7c62497..a50f9b486 100644
--- a/src/widgets/Glass/properties/types.ts
+++ b/src/widgets/Glass/properties/types.ts
@@ -1,19 +1,9 @@
-import type { SavedColumn, ViewType, VolumeType } from '../types';
-
-type WidgetProperties = {
+export type WidgetProperties = {
   glassState: {
-    view: ViewType;
+    view: 'four-col-1' | 'four-col-2' | 'four-col-3';
     showSpread: boolean;
     showPlot: boolean;
     showYield: boolean;
-    depthCount: number;
-    bestPriceIndication: boolean;
-    displayMyFirmOrders: boolean;
     choosenInstrument: string;
-    /** Отображение объема (ед. изм. или лоты) */
-    volume: VolumeType;
   };
-  tableViewColumns: Partial<Record<ViewType, SavedColumn<Record<string, unknown>>[]>> | null;
 };
-
-export { WidgetProperties as GlassWidgetProperties };
diff --git a/src/widgets/Glass/types.ts b/src/widgets/Glass/types.ts
index 00ac5b332..d028ecbd2 100644
--- a/src/widgets/Glass/types.ts
+++ b/src/widgets/Glass/types.ts
@@ -1,21 +1,14 @@
-import { ColumnType } from 'antd/es/table';
-
 import { Contract } from '@modules/contracts';
 import { SapfirPrice } from 'types/SapfirSpfi';
 
-import type { ItemsType } from './components/SideDropdown';
-import type { ViewColumn } from './components/TableView/types';
-import type { TableProps } from 'antd';
-import type { PartialWithRequired } from 'types/utilityTypes';
-
-export interface ISellAntdData extends Price {
+interface ISellAntdData extends Price {
   /** Объём на стороне продажи */
   sell: number;
   /** Цена на стороне продажи */
   sellPrice: number;
 }
 
-export interface IBuyAntdData extends Price {
+interface IBuyAntdData extends Price {
   /** Объём на стороне покупки */
   buy: number;
   /** Цена на стороне покупки */
@@ -28,7 +21,7 @@ export type Key = 'buy' | 'sell';
 
 export type ColumnsFormatResult<T extends Key> = T extends 'buy' ? IBuyAntdData : ISellAntdData;
 
-export interface Price<T = Record<string, unknown>> {
+export interface Price {
   /** Направление заявки (buy / sell) */
   buysell: string;
   /** Цена заявки */
@@ -44,21 +37,9 @@ export interface Price<T = Record<string, unknown>> {
   repovalue: number | null;
   /** Список фирм для ордеров СПФИ */
   origin?: SapfirPrice;
-  /** Данные, специфичные для каждого рынка */
-  extra?: T & { key?: string };
 }
 
-/** Тип отображения:\
- * `four-col-1` - Горизонтальный\
- * `four-col-2` - Вертикальный (2 колонки)\
- * `four-col-3` - Вертикальный (3 колонки)\
- * `table` - Котировки
- */
-export type ViewType = 'four-col-1' | 'four-col-2' | 'four-col-3' | 'table';
-
-export type ViewTypeItem = ViewType | PartialWithRequired<ItemsType<ViewType>, 'value'>;
-
-export type ViewTypeConfig = Record<ViewType, Omit<ItemsType<ViewType>, 'value'>>;
+export type ViewType = 'four-col-1' | 'four-col-2' | 'four-col-3';
 
 export interface FourColAntdData extends Price {
   buy: number;
@@ -70,17 +51,14 @@ export interface FourColAntdData extends Price {
   isBestPrice?: boolean;
 }
 
-export type TableColumn<T> = {
+export type TableColumn = {
   title: string;
   dataIndex: string;
   key: string;
-  render?: ColumnType<T>['render'];
 };
 
-export type CellType = 'bid' | 'ask';
-
 export type CellProps = {
-  record: ModifiedFourColAntdData;
+  record: FourColAntdData;
   percentage: number;
   selfPercentage: number;
   bestPriceIndication: boolean;
@@ -90,21 +68,4 @@ export type CellProps = {
   widgetId: number;
   canCreateOrder: boolean;
   isSapfirInstrument: boolean;
-  type: CellType;
-};
-
-/** Отображение объема (ед. изм. или лоты) */
-export type VolumeType = 'units' | 'lots';
-
-export type SavedColumn<T extends Record<string, unknown>> = Pick<ViewColumn<T>, 'key' | 'hidden'>;
-
-export type BaseViewProps = {
-  /** Количество отображаемых ценовых уровней (глубина стакана) */
-  depthCount: number;
-  /** Флаг, указывающий на необходимость подсветки лучших цен */
-  bestPriceIndication: boolean;
-  /** Флаг, указывающий на необходимость отображения заявок своей фирмы */
-  displayMyFirmOrders: boolean;
-  /** Обработчик событий строки таблицы (опционально) */
-  onRow?: TableProps<Price>['onRow'];
 };
diff --git a/src/widgets/HHI/hhiContent.tsx b/src/widgets/HHI/hhiContent.tsx
index 9e1b30323..ffa87aae7 100644
--- a/src/widgets/HHI/hhiContent.tsx
+++ b/src/widgets/HHI/hhiContent.tsx
@@ -1,7 +1,7 @@
 import React, { FC } from 'react';
 
 import Chart from '@components/Chart';
-import { LegendOld } from '@components/LegendOld';
+import { Legend } from '@components/Legend';
 
 import { Filters } from './components/Filters';
 import { LoaderBlock } from './components/LoaderBlock';
@@ -43,7 +43,7 @@ export const HHIContent: FC<HHIContent> = React.memo(({ widgetId }) => {
       ) : (
         <>
           {instrumentLabel && (
-            <LegendOld
+            <Legend
               title={instrumentLabel}
               label="Метрика"
               line={[volume, showCloseData ? 'Цена закрытия' : '']}
diff --git a/src/widgets/MarketMap/components/Content/Content.tsx b/src/widgets/MarketMap/components/Content/Content.tsx
index c56323d7d..a87a7887c 100644
--- a/src/widgets/MarketMap/components/Content/Content.tsx
+++ b/src/widgets/MarketMap/components/Content/Content.tsx
@@ -1,19 +1,16 @@
 import React, { FC, useEffect, useMemo, useState } from 'react';
 
-import { Legend } from '@components/Legend';
 import { Header } from '@widgets/MarketMap/components/Header';
 
-import { useColors } from '@widgets/MarketMap/logic/context/ColorsContext';
 import { useMarketMapActions } from '@widgets/MarketMap/logic/hooks/useMarketMapActions';
 import { useScreenerListener } from '@widgets/MarketMap/logic/hooks/useScreenerListener';
 import { getAreFiltersEmpty } from '@widgets/MarketMap/logic/utils/filters';
-import { getShortName } from '@widgets/MarketMap/logic/utils/getShortName';
 import { getTotalCountPoints } from '@widgets/MarketMap/logic/utils/getTotalCountPoints';
 import { useIsChartFullSpace } from '@widgets/MarketMap/properties/useProperties';
-import { MarketMapWidgetPropertyItem, UseMarketMapFacadeReturn } from '@widgets/MarketMap/types';
+import { UseMarketMapFacadeReturn } from '@widgets/MarketMap/types';
 
 import { Filters } from '../Filters';
-
+import { Legend } from '../Legend';
 import { MarketMapChart } from '../MarketMapChart/MarketMapChart';
 
 import styles from './Content.module.scss';
@@ -25,7 +22,6 @@ export const Content: FC<ContentProps> = ({ setAreFiltersEmpty, ...props }) => {
   const [isSearchOpen, setIsSearchOpen] = useState<boolean>(false);
   const [isBenchmarkOpen, setIsBenchmarkOpen] = useState<boolean>(false);
   const { isChartFullSpace } = useIsChartFullSpace();
-  const { getHexById } = useColors();
 
   const {
     legend,
@@ -83,15 +79,13 @@ export const Content: FC<ContentProps> = ({ setAreFiltersEmpty, ...props }) => {
         />
       ) : null}
       {!isChartFullSpace ? (
-        <Legend<MarketMapWidgetPropertyItem>
+        <Legend
           legend={legend}
           legendExtensionForInstruments={legendExtensionForInstruments}
           loading={loading}
           onDelete={handleSelectedEntityDelete}
           onChangeVisibility={handleChangeVisibility}
           onReloadPoints={handleReloadPoints}
-          getItemName={getShortName}
-          getColorById={getHexById}
         />
       ) : null}
 
diff --git a/src/components/Legend/Legend.module.scss b/src/widgets/MarketMap/components/Legend/Legend.module.scss
similarity index 74%
rename from src/components/Legend/Legend.module.scss
rename to src/widgets/MarketMap/components/Legend/Legend.module.scss
index 429ceff76..d72c5020f 100644
--- a/src/components/Legend/Legend.module.scss
+++ b/src/widgets/MarketMap/components/Legend/Legend.module.scss
@@ -117,50 +117,6 @@
   transition: max-width 0.3s ease;
 }
 
-.item--inactive {
-  opacity: 50%;
-}
-
-.item--not-allowed {
-  color: rgba($text-interface-secondary-label-no-value, 0.52);
-}
-
-.itemDeleteButton {
-  display: none;
-  width: 24px;
-  height: 24px;
-  background: none;
-  border: none;
-  border-radius: 4px;
-  cursor: pointer;
-  color: $text-b-primary;
-  padding: 0;
-  align-items: center;
-  justify-content: center;
-  flex-shrink: 0;
-  opacity: 0;
-
-  &:hover {
-    background-color: $icon-btn-hover;
-  }
-}
-
-.item_legend {
-  &:hover {
-    .itemDeleteButton {
-      display: flex;
-      opacity: 1;
-    }
-  }
-}
-
-.disabledTooltipContent {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  row-gap: 8px;
-}
-
 @keyframes skeleton-loading {
   0% {
     background-position: 100% 50%;
diff --git a/src/widgets/MarketMap/components/Legend/Legend.tsx b/src/widgets/MarketMap/components/Legend/Legend.tsx
new file mode 100644
index 000000000..42bfe8f5e
--- /dev/null
+++ b/src/widgets/MarketMap/components/Legend/Legend.tsx
@@ -0,0 +1,50 @@
+import React, { FC } from 'react';
+
+import { ColorId } from '@modules/marketMap/types/color';
+import { getLegendItem } from '@widgets/MarketMap/logic/utils/getLegendItem';
+import { UseMarketMapFacadeReturn } from '@widgets/MarketMap/types';
+
+import { LegendItem } from './components/LegendItem';
+import styles from './Legend.module.scss';
+
+type LegendProps = {
+  legend: UseMarketMapFacadeReturn['legend'];
+  legendExtensionForInstruments: UseMarketMapFacadeReturn['legendExtensionForInstruments'];
+  loading: UseMarketMapFacadeReturn['loading'];
+  onDelete: UseMarketMapFacadeReturn['handleSelectedEntityDelete'];
+  onChangeVisibility: UseMarketMapFacadeReturn['handleChangeVisibility'];
+  onReloadPoints: UseMarketMapFacadeReturn['handleReloadPoints'];
+};
+
+export const Legend: FC<LegendProps> = ({
+  legend,
+  legendExtensionForInstruments,
+  loading,
+  onDelete,
+  onChangeVisibility,
+  onReloadPoints,
+}) => (
+  <div className={styles.legend}>
+    {legend.map((legendItem) => {
+      const colorIds = (legendExtensionForInstruments[legendItem.key] ?? [])
+        .map((key) => getLegendItem(key, legend)?.colorId)
+        .filter(Boolean) as ColorId[];
+
+      return (
+        <LegendItem
+          key={legendItem.key}
+          isLoading={loading[legendItem.key]}
+          legendItem={legendItem}
+          extendColorIds={colorIds}
+          onChangeVisibility={onChangeVisibility}
+          onDelete={onDelete}
+          canDelete={legendItem?.canDelete ?? true}
+          canReload={legendItem?.canReload ?? false}
+          onReloadPoints={onReloadPoints}
+          reloadTitle={legendItem?.reloadTitle || 'Обновить'}
+          refreshTime={legendItem?.reloadDate ?? null}
+        />
+      );
+    })}
+  </div>
+);
diff --git a/src/components/Legend/components/ButtonTooltip.tsx b/src/widgets/MarketMap/components/Legend/components/ButtonTooltip.tsx
similarity index 100%
rename from src/components/Legend/components/ButtonTooltip.tsx
rename to src/widgets/MarketMap/components/Legend/components/ButtonTooltip.tsx
diff --git a/src/components/Legend/components/IconsSection.tsx b/src/widgets/MarketMap/components/Legend/components/IconsSection.tsx
similarity index 63%
rename from src/components/Legend/components/IconsSection.tsx
rename to src/widgets/MarketMap/components/Legend/components/IconsSection.tsx
index 64a979064..d75c06def 100644
--- a/src/components/Legend/components/IconsSection.tsx
+++ b/src/widgets/MarketMap/components/Legend/components/IconsSection.tsx
@@ -1,3 +1,4 @@
+import { Dayjs } from 'dayjs';
 import React from 'react';
 
 import Icons from '@components/Icons';
@@ -5,15 +6,21 @@ import { CloseIcon } from '@components/Icons/CloseIcon';
 import { EyeHiddenIcon } from '@components/Icons/EyeHiddenIcon';
 import { VisibilityIcon } from '@components/Icons/VisibilityIcon';
 import { RefreshTooltip } from '@components/RefreshTooltip';
+import { MarketMapWidgetPropertyItem, OnSelectChange } from '@widgets/MarketMap/types';
 
 import styles from '../Legend.module.scss';
 
-import { LegendIconsProps, LegendItemData } from '../types';
-
 import { ButtonTooltip } from './ButtonTooltip';
 
-type IconsSectionProps = LegendIconsProps & {
-  legendItem: LegendItemData;
+type IconsSectionProps = {
+  legendItem: MarketMapWidgetPropertyItem;
+  onChangeVisibility: OnSelectChange;
+  canDelete: boolean;
+  onDelete: OnSelectChange;
+  canReload: boolean;
+  onReloadPoints: OnSelectChange;
+  reloadTitle: string;
+  refreshTime: Dayjs | null;
 };
 
 export const IconsSection: React.FC<IconsSectionProps> = ({
@@ -24,8 +31,7 @@ export const IconsSection: React.FC<IconsSectionProps> = ({
   canReload,
   onReloadPoints,
   reloadTitle,
-  reloadDate,
-  canHide = true,
+  refreshTime,
 }) => (
   <div
     className={styles.icons}
@@ -34,7 +40,7 @@ export const IconsSection: React.FC<IconsSectionProps> = ({
     {canReload ? (
       <RefreshTooltip
         title={reloadTitle}
-        refreshTime={reloadDate ?? null}
+        refreshTime={refreshTime}
       >
         <button
           type="button"
@@ -47,17 +53,15 @@ export const IconsSection: React.FC<IconsSectionProps> = ({
         </button>
       </RefreshTooltip>
     ) : null}
-    {canHide ? (
-      <ButtonTooltip title={legendItem?.isVisible ? 'Скрыть' : 'Показать'}>
-        <button
-          type="button"
-          onClick={() => onChangeVisibility?.(legendItem.key, {})}
-          className={styles.itemButton}
-        >
-          {legendItem.isVisible ? <VisibilityIcon /> : <EyeHiddenIcon />}
-        </button>
-      </ButtonTooltip>
-    ) : null}
+    <ButtonTooltip title={legendItem?.isVisible ? 'Скрыть' : 'Показать'}>
+      <button
+        type="button"
+        onClick={() => onChangeVisibility?.(legendItem.key, {})}
+        className={styles.itemButton}
+      >
+        {legendItem.isVisible ? <VisibilityIcon /> : <EyeHiddenIcon />}
+      </button>
+    </ButtonTooltip>
     {canDelete ? (
       <ButtonTooltip title="Удалить">
         <button
diff --git a/src/widgets/MarketMap/components/Legend/components/LegendItem.tsx b/src/widgets/MarketMap/components/Legend/components/LegendItem.tsx
new file mode 100644
index 000000000..2c7beb14f
--- /dev/null
+++ b/src/widgets/MarketMap/components/Legend/components/LegendItem.tsx
@@ -0,0 +1,88 @@
+import { Dayjs } from 'dayjs';
+import React, { useState } from 'react';
+
+import { ColorId } from '@modules/marketMap/types/color';
+import { getScreenerColorHexById } from '@modules/marketMap/utils/getScreenerColor';
+import { useColors } from '@widgets/MarketMap/logic/context/ColorsContext';
+import { isScreenerLegendItem } from '@widgets/MarketMap/logic/utils/screener';
+import { MarketMapWidgetPropertyItem, OnSelectChange } from '@widgets/MarketMap/types';
+
+import { IconsSection } from './IconsSection';
+import { ItemContent } from './LegendItemContent';
+
+type LegendItemProps = {
+  legendItem?: MarketMapWidgetPropertyItem;
+  isLoading: boolean;
+  extendColorIds: ColorId[];
+  onDelete: OnSelectChange;
+  onChangeVisibility: OnSelectChange;
+  canDelete: boolean;
+  canReload: boolean;
+  onReloadPoints: OnSelectChange;
+  reloadTitle: string;
+  refreshTime: Dayjs | null;
+};
+
+export const LegendItem: React.FC<LegendItemProps> = ({
+  legendItem,
+  isLoading,
+  extendColorIds,
+  onChangeVisibility,
+  onDelete,
+  canDelete,
+  canReload,
+  onReloadPoints,
+  reloadTitle,
+  refreshTime,
+}) => {
+  const { getHexById } = useColors();
+  const [isHoverActive, setIsHoverActive] = useState(false);
+
+  if (!legendItem) {
+    return null;
+  }
+
+  const childColor = isScreenerLegendItem(legendItem)
+    ? getScreenerColorHexById(legendItem?.colorId)
+    : getHexById(legendItem?.colorId);
+
+  return (
+    <div
+      style={{ position: 'relative' }}
+      data-testid={`legend-item-${legendItem.key}`}
+    >
+      {/* 
+        Элемент, отображаемый поверх исходного и поверх следующего элемента легенды 
+        Необходим для добавления фона и перекрытия поверх остальных элементов легенды
+      */}
+      {isHoverActive ? (
+        <ItemContent
+          hovered
+          setIsHoverActive={setIsHoverActive}
+          legendItem={legendItem}
+          childColor={childColor}
+          extendColorIds={extendColorIds}
+        >
+          <IconsSection
+            legendItem={legendItem}
+            canDelete={canDelete}
+            onDelete={onDelete}
+            onChangeVisibility={onChangeVisibility}
+            canReload={canReload}
+            onReloadPoints={onReloadPoints}
+            reloadTitle={reloadTitle}
+            refreshTime={refreshTime}
+          />
+        </ItemContent>
+      ) : null}
+
+      <ItemContent
+        setIsHoverActive={setIsHoverActive}
+        isLoading={isLoading}
+        legendItem={legendItem}
+        childColor={childColor}
+        extendColorIds={extendColorIds}
+      />
+    </div>
+  );
+};
diff --git a/src/widgets/MarketMap/components/Legend/components/LegendItemContent.tsx b/src/widgets/MarketMap/components/Legend/components/LegendItemContent.tsx
new file mode 100644
index 000000000..9da78c721
--- /dev/null
+++ b/src/widgets/MarketMap/components/Legend/components/LegendItemContent.tsx
@@ -0,0 +1,69 @@
+import cn from 'classnames';
+import React from 'react';
+
+import { ColoredBalls } from '@components/ColoredBalls';
+import { useColors } from '@widgets/MarketMap/logic/context/ColorsContext';
+import { getShortName } from '@widgets/MarketMap/logic/utils/getShortName';
+import { hexToRgb } from '@widgets/MarketMap/logic/utils/hexToRgb';
+import { MarketMapWidgetPropertyItem } from '@widgets/MarketMap/types';
+
+import styles from '../Legend.module.scss';
+
+type ItemContentProps = React.PropsWithChildren<{
+  childColor: string;
+  extendColorIds: string[];
+  legendItem: MarketMapWidgetPropertyItem;
+  hovered?: boolean;
+  isLoading?: boolean;
+  setIsHoverActive: React.Dispatch<React.SetStateAction<boolean>>;
+}>;
+
+export const ItemContent: React.FC<ItemContentProps> = ({
+  childColor,
+  extendColorIds,
+  legendItem,
+  children,
+  hovered = false,
+  isLoading = false,
+  setIsHoverActive,
+}) => {
+  const { getHexById } = useColors();
+
+  const rgbChildColor = hexToRgb(childColor).join(',');
+
+  const handleMouseEnter = () => {
+    if (!hovered) {
+      setIsHoverActive(true);
+    }
+  };
+
+  const handleMouseLeave = () => {
+    if (hovered) {
+      setIsHoverActive(false);
+    }
+  };
+  return (
+    <div
+      className={cn(styles.item, isLoading && styles.item_loading)}
+      style={{
+        backgroundImage: isLoading
+          ? `linear-gradient(90deg, rgba(${rgbChildColor}, 0.06) 25%, rgba(${
+              rgbChildColor
+            }, 0.75) 37%, rgba(${rgbChildColor}, 0.06) 63%)`
+          : undefined,
+
+        ...(hovered ? { position: 'absolute', zIndex: 1, display: 'flex' } : {}),
+      }}
+      onMouseEnter={handleMouseEnter}
+      onMouseLeave={handleMouseLeave}
+    >
+      <div className={styles.itemColorContainer}>
+        <ColoredBalls colors={[childColor, ...extendColorIds.map((colorId) => getHexById(colorId))]} />
+      </div>
+      <div className={styles.label}>
+        <span className={styles.itemName}>{getShortName(legendItem)}</span>
+        {children}
+      </div>
+    </div>
+  );
+};
diff --git a/src/components/Legend/components/__tests__/IconsSection.test.tsx b/src/widgets/MarketMap/components/Legend/components/__tests__/IconsSection.test.tsx
similarity index 85%
rename from src/components/Legend/components/__tests__/IconsSection.test.tsx
rename to src/widgets/MarketMap/components/Legend/components/__tests__/IconsSection.test.tsx
index 25ba4920d..5a6bc7cf0 100644
--- a/src/components/Legend/components/__tests__/IconsSection.test.tsx
+++ b/src/widgets/MarketMap/components/Legend/components/__tests__/IconsSection.test.tsx
@@ -20,7 +20,6 @@ describe('IconsSection', () => {
     legendItem: mockLegendItem,
     onChangeVisibility: jest.fn(),
     canDelete: true,
-    canHide: true,
     onDelete: jest.fn(),
     canReload: false,
     onReloadPoints: jest.fn(),
@@ -142,30 +141,4 @@ describe('IconsSection', () => {
     const buttons = screen.getAllByRole('button');
     expect(buttons.length).toBe(1);
   });
-
-  it('should not render visibility button when canHide is false', () => {
-    render(
-      <IconsSection
-        {...defaultProps}
-        canHide={false}
-      />,
-    );
-
-    // Should only have 1 button (delete only) when canHide is false
-    const buttons = screen.getAllByRole('button');
-    expect(buttons.length).toBe(1);
-  });
-
-  it('should render both visibility and delete buttons when canHide and canDelete are true', () => {
-    render(
-      <IconsSection
-        {...defaultProps}
-        canHide
-        canDelete
-      />,
-    );
-
-    const buttons = screen.getAllByRole('button');
-    expect(buttons.length).toBe(2); // visibility and delete buttons
-  });
 });
diff --git a/src/widgets/MarketMap/components/Legend/components/__tests__/LegendItem.test.tsx b/src/widgets/MarketMap/components/Legend/components/__tests__/LegendItem.test.tsx
new file mode 100644
index 000000000..4431897e6
--- /dev/null
+++ b/src/widgets/MarketMap/components/Legend/components/__tests__/LegendItem.test.tsx
@@ -0,0 +1,55 @@
+import { render } from '@testing-library/react';
+import dayjs from 'dayjs';
+import React from 'react';
+import '@testing-library/jest-dom';
+
+import { MarketMapWidgetPropertyItem } from '@widgets/MarketMap/types';
+
+import { LegendItem } from '../LegendItem';
+
+// Mock the required modules
+jest.mock('@widgets/MarketMap/logic/context/ColorsContext', () => ({
+  useColors: () => ({
+    getHexById: jest.fn().mockReturnValue('#ff0000'),
+  }),
+}));
+
+describe('LegendItem', () => {
+  const mockLegendItem: MarketMapWidgetPropertyItem = {
+    key: 'test-key',
+    title: 'Test Item',
+    itemType: 'screener',
+    isVisible: true,
+    colorId: 'color1',
+  };
+
+  const defaultProps = {
+    legendItem: mockLegendItem,
+    isLoading: false,
+    extendColorIds: [],
+    onDelete: jest.fn(),
+    onChangeVisibility: jest.fn(),
+    canDelete: true,
+    canReload: false,
+    onReloadPoints: jest.fn(),
+    reloadTitle: 'Обновить',
+    refreshTime: dayjs('2025-12-12'),
+  };
+
+  it('should render null when legendItem is undefined', () => {
+    const { container } = render(
+      <LegendItem
+        {...defaultProps}
+        legendItem={undefined}
+      />,
+    );
+
+    expect(container.firstChild).toBeNull();
+  });
+
+  it('should render without errors when legendItem is provided', () => {
+    const { getByTestId } = render(<LegendItem {...defaultProps} />);
+
+    expect(getByTestId(`legend-item-${defaultProps.legendItem.key}`)).toBeInTheDocument();
+  });
+});
diff --git a/src/widgets/MarketMap/components/Legend/components/__tests__/LegendItemContent.test.tsx b/src/widgets/MarketMap/components/Legend/components/__tests__/LegendItemContent.test.tsx
new file mode 100644
index 000000000..a3dd1d3c8
--- /dev/null
+++ b/src/widgets/MarketMap/components/Legend/components/__tests__/LegendItemContent.test.tsx
@@ -0,0 +1,69 @@
+import { render, screen } from '@testing-library/react';
+import React from 'react';
+import '@testing-library/jest-dom';
+
+import { MarketMapWidgetPropertyItem } from '@widgets/MarketMap/types';
+
+import { ItemContent } from '../LegendItemContent';
+
+describe('ItemContent', () => {
+  const mockLegendItem: MarketMapWidgetPropertyItem = {
+    key: 'test-key',
+    title: 'Test Item',
+    itemType: 'screener',
+    isVisible: true,
+    colorId: 'color1',
+  };
+
+  const defaultProps = {
+    childColor: '#ff0000',
+    extendColorIds: [],
+    legendItem: mockLegendItem,
+    setIsHoverActive: jest.fn(),
+  };
+
+  it('should render without errors', () => {
+    render(
+      <ItemContent {...defaultProps}>
+        <div>Test Children</div>
+      </ItemContent>,
+    );
+
+    expect(screen.getByText('Test Children')).toBeInTheDocument();
+  });
+
+  it('should render with correct title', () => {
+    render(
+      <ItemContent {...defaultProps}>
+        <div>Test Children</div>
+      </ItemContent>,
+    );
+
+    expect(screen.getByText('Test Item')).toBeInTheDocument();
+  });
+
+  it('should render with extendColorIds', () => {
+    const extendColorIds = ['color2', 'color3'];
+    render(
+      <ItemContent
+        {...defaultProps}
+        extendColorIds={extendColorIds}
+      >
+        <div>Test Children</div>
+      </ItemContent>,
+    );
+
+    // Just check that the component renders without errors
+    expect(screen.getByText('Test Children')).toBeInTheDocument();
+  });
+
+  it('should render with children', () => {
+    render(
+      <ItemContent {...defaultProps}>
+        <div data-testid="test-child">Test Children</div>
+      </ItemContent>,
+    );
+
+    expect(screen.getByTestId('test-child')).toBeInTheDocument();
+  });
+});
diff --git a/src/widgets/MarketMap/components/Legend/index.tsx b/src/widgets/MarketMap/components/Legend/index.tsx
new file mode 100644
index 000000000..6adb3cc7d
--- /dev/null
+++ b/src/widgets/MarketMap/components/Legend/index.tsx
@@ -0,0 +1 @@
+export * from './Legend';
diff --git a/src/widgets/MarketMap/logic/context/ColorsContext.tsx b/src/widgets/MarketMap/logic/context/ColorsContext.tsx
index 76180f551..7f0f2e95c 100644
--- a/src/widgets/MarketMap/logic/context/ColorsContext.tsx
+++ b/src/widgets/MarketMap/logic/context/ColorsContext.tsx
@@ -1,12 +1,12 @@
 import isNil from 'lodash/isNil';
 import React, { createContext, FC, PropsWithChildren, useCallback, useContext, useMemo, useRef } from 'react';
 
-import { Colorable, Visible } from '@components/Legend/types';
 import { DEFAULT_COLOR, NEW_HEX_COLORS } from '@modules/marketMap/constants/colors';
 
 import { ColorHex, ColorId, Colors } from '@modules/marketMap/types/color';
 
 import { ZERO_COUPON_CURVE_COLOR, ZERO_COUPON_CURVE_NAME } from '@widgets/MarketMap/constants';
+import { Colorable, Visible } from '@widgets/MarketMap/types';
 
 const allGroupColors: Readonly<Colors> = { ...NEW_HEX_COLORS };
 
diff --git a/src/widgets/MarketMap/types.ts b/src/widgets/MarketMap/types.ts
index a69efee8c..d2ffe845e 100644
--- a/src/widgets/MarketMap/types.ts
+++ b/src/widgets/MarketMap/types.ts
@@ -3,7 +3,7 @@ import { Dayjs } from 'dayjs';
 import { ComponentProps } from 'react';
 import { Line } from 'react-chartjs-2';
 
-import { WithColor, WithVisible } from '@components/Legend';
+import { ColorId } from '@modules/marketMap/types/color';
 import { WidgetProperties } from '@widgets/MarketMap/properties/types';
 
 import { InstrumentPoint, ScreenerSearchTypes } from 'types/BondsScreener';
@@ -65,6 +65,21 @@ export type UseMarketMapFacadeReturn = {
 
 export type LineProps = ComponentProps<typeof Line>;
 
+export type Colorable = { colorId?: ColorId };
+type WithColor<T> = T & Colorable;
+
+/**
+ * типы для работы с видимостью графика
+ * isVisible (в составе всего MarketmapWidgetPropertyItem) сохраняется в widgetProperty
+ * может иметь 3 значения:
+ * undefined или null  - сущьность  не добавлена на график (в легенду)
+ * true - сущность добавлена в легенду и ее график виден пользователю
+ * false -  сущность добавлена в легенду и спрятана пользователем
+ * если isNil(legend.isVisible) === true, то сущность не добавлена на график
+ */
+export type Visible = { isVisible?: boolean };
+type WithVisible<T> = T & Visible;
+
 export type GroupTypes = ScreenerSearchTypes | typeof CURVES_KEY | typeof SCREENER_KEY;
 
 /**
@@ -77,12 +92,10 @@ type MarketMapSearchItem = {
   title: string;
   itemType: GroupTypes;
   instrumentCount?: number;
-
+  canDelete?: boolean;
   valToday?: number;
   currency?: string;
   url?: string;
-
-  canDelete?: boolean;
   canReload?: boolean;
   reloadTitle?: string;
   reloadDate?: Dayjs | null;
diff --git a/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkDesktop/InviteViaLinkDesktop.tsx b/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkDesktop/InviteViaLinkDesktop.tsx
index fbb0463b2..32c919fb7 100644
--- a/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkDesktop/InviteViaLinkDesktop.tsx
+++ b/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkDesktop/InviteViaLinkDesktop.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 
 import { toaster } from '@components/Toast';
 import { Button } from '@uikit/Button';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 
 import styles from './InviteViaLinkDesktop.module.scss';
@@ -14,7 +14,7 @@ export const InviteViaLinkDesktop = ({ onClick, link }: { onClick: VoidFunction;
       variant="unfilled-primary"
       text="Пригласить по ссылке"
       iconEnabled="start"
-      Icon={() => <IconDeprecated variant={IconVariants.LINK_ROUNDED} />}
+      Icon={() => <Icon variant={IconVariants.LINK_ROUNDED} />}
     />
     <Button
       onClick={() => {
@@ -23,7 +23,7 @@ export const InviteViaLinkDesktop = ({ onClick, link }: { onClick: VoidFunction;
       }}
       variant="unfilled-primary"
       iconEnabled="start"
-      Icon={() => <IconDeprecated variant={IconVariants.FILE_COPY_OUTLINED} />}
+      Icon={() => <Icon variant={IconVariants.FILE_COPY_OUTLINED} />}
     />
   </div>
 );
diff --git a/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkMobile/InviteViaLinkMobile.tsx b/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkMobile/InviteViaLinkMobile.tsx
index 8d8ff6333..eff143cae 100644
--- a/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkMobile/InviteViaLinkMobile.tsx
+++ b/src/widgets/NoTradeChat/components/AddUsersModal/components/InviteViaLinkMobile/InviteViaLinkMobile.tsx
@@ -1,7 +1,7 @@
 import React from 'react';
 
 import { Button } from '@uikit/Button';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 
 import styles from './InviteViaLinkMobile.module.scss';
@@ -13,6 +13,6 @@ export const InviteViaLinkMobile = ({ onClick }: { onClick: VoidFunction }) => (
     text="Пригласить по ссылке"
     variant="unfilled-primary"
     iconEnabled="start"
-    Icon={() => <IconDeprecated variant={IconVariants.PERSON_ADD_OUTLINED} />}
+    Icon={() => <Icon variant={IconVariants.PERSON_ADD_OUTLINED} />}
   />
 );
diff --git a/src/widgets/NoTradeChat/components/AppointAnAdminModal/conts.ts b/src/widgets/NoTradeChat/components/AppointAnAdminModal/conts.ts
index 80e3b4b01..b61847936 100644
--- a/src/widgets/NoTradeChat/components/AppointAnAdminModal/conts.ts
+++ b/src/widgets/NoTradeChat/components/AppointAnAdminModal/conts.ts
@@ -1,14 +1,10 @@
 export const APPOINT_ACTION_MAP = {
   admin: {
     title: 'Назначить админом?',
-    description: 'Пользователь получит расширенные права.',
+    description: 'Пользователь получить расширенные права. Текст утвердить!',
   },
   owner: {
     title: 'Назначить владельцем?',
     description: 'Вы станете участником, отменить действие нельзя.',
   },
-  remove_admin: {
-    title: 'Удалить из админов?',
-    description: 'Пользователь останется в групповом чате как участник.',
-  },
 };
diff --git a/src/widgets/NoTradeChat/components/AppointAnAdminModal/hooks/useAppointAnAdmin.ts b/src/widgets/NoTradeChat/components/AppointAnAdminModal/hooks/useAppointAnAdmin.ts
index 9f34124ae..b93c2d4d1 100644
--- a/src/widgets/NoTradeChat/components/AppointAnAdminModal/hooks/useAppointAnAdmin.ts
+++ b/src/widgets/NoTradeChat/components/AppointAnAdminModal/hooks/useAppointAnAdmin.ts
@@ -25,7 +25,7 @@ export const useAppointAnAdmin = ({ action, chatId, customerLogin, id }: Appoint
   const markets = currentCustomer?.displayMarkets?.join(' / ') ?? '';
 
   const onSubmit = () => {
-    if (action === 'admin' || action === 'remove_admin') {
+    if (action === 'admin') {
       dispatch(
         appointAndAdminSaveStep({
           newLeaders: [customerLogin],
@@ -50,9 +50,6 @@ export const useAppointAnAdmin = ({ action, chatId, customerLogin, id }: Appoint
       }
       return 'Назначить';
     }
-    if (action === 'remove_admin') {
-      return 'Удалить';
-    }
     return 'Передать';
   }, [action, admins, customerLogin]);
 
diff --git a/src/widgets/NoTradeChat/components/AppointAnAdminModal/types.ts b/src/widgets/NoTradeChat/components/AppointAnAdminModal/types.ts
index 1f2f5475a..62c5e8b8a 100644
--- a/src/widgets/NoTradeChat/components/AppointAnAdminModal/types.ts
+++ b/src/widgets/NoTradeChat/components/AppointAnAdminModal/types.ts
@@ -2,7 +2,7 @@ import type { ModalBaseProps } from '@modules/ModalRoot/types';
 
 export type AppointAnAdmin = {
   chatId: string;
-  action: 'admin' | 'owner' | 'remove_admin';
+  action: 'admin' | 'owner';
   customerLogin: string;
 };
 
diff --git a/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/SearchDropdown.module.scss b/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/SearchDropdown.module.scss
index 5f95d04c2..e4a366d2d 100644
--- a/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/SearchDropdown.module.scss
+++ b/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/SearchDropdown.module.scss
@@ -47,7 +47,7 @@
   margin: 0;
 
   &:hover {
-    background-color: $action-surface-hover;
+    background-color: color-mix(in srgb, $background-bottom, $states-hover 20%);
   }
 
   &:active {
@@ -59,7 +59,7 @@
   height: 1px;
   width: 100%;
   margin: 8px 0;
-  background-color: $border-base-dropdown;
+  background-color: $border-secondary;
 }
 
 .valueLoading {
diff --git a/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/components/SearchItem/searchItem.module.scss b/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/components/SearchItem/searchItem.module.scss
index 0c52b3bcb..787de192a 100644
--- a/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/components/SearchItem/searchItem.module.scss
+++ b/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/components/SearchItem/searchItem.module.scss
@@ -12,11 +12,11 @@
   align-items: center;
   position: relative;
 
-  & > .avatar {
+  &>.avatar {
     width: 32px;
     height: 32px;
 
-    & > img {
+    &>img {
       border-radius: 50%;
       width: 100%;
       height: 100%;
@@ -25,7 +25,7 @@
   }
 
   &:hover {
-    background-color: $action-surface-hover;
+    background-color: color-mix(in srgb, $background-bottom, $states-hover 20%);
   }
 
   &:active {
@@ -55,7 +55,7 @@
     margin: 0;
   }
 
-  & > div {
+  &>div {
     display: flex;
     gap: 4px;
     align-items: start;
@@ -71,14 +71,15 @@
     gap: 0;
     flex-direction: column;
 
-    & > div {
+    &>div {
       display: flex;
       gap: 4px;
       align-items: center;
       width: 100%;
 
       &.chatNameWrapper {
-        & > svg,
+
+        &>svg,
         p {
           fill: $text-b-secondary;
           color: $text-b-secondary;
@@ -106,4 +107,4 @@
   box-sizing: border-box;
   font-size: 10px;
   color: #fff;
-}
+}
\ No newline at end of file
diff --git a/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/dropdown.stories.tsx b/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/dropdown.stories.tsx
new file mode 100644
index 000000000..685bff04e
--- /dev/null
+++ b/src/widgets/NoTradeChat/components/ChatList/SearchDropdown/dropdown.stories.tsx
@@ -0,0 +1,26 @@
+import { action } from '@storybook/addon-actions';
+import React from 'react';
+
+import { searchMock } from '../newSearch.mock';
+
+import { SearchDropdown } from './index';
+
+import type { Meta } from '@storybook/react';
+
+const meta: Meta<typeof SearchDropdown> = {
+  title: 'Неторговый чат/Поиск/SearchDropdown',
+  component: SearchDropdown,
+  tags: ['autodocs'],
+} as any;
+
+export default meta;
+
+export const Static = () => (
+  <div style={{ backgroundColor: '#21212C' }}>
+    <SearchDropdown
+      widgetId={1234}
+      values={{ members: [], chats: [], messages: [] }}
+      onClick={action('Нажатие на элемент поиска')}
+    />
+  </div>
+);
diff --git a/src/widgets/NoTradeChat/components/ChatList/chatList.module.scss b/src/widgets/NoTradeChat/components/ChatList/chatList.module.scss
index 6cec5bb46..4c89a26d8 100644
--- a/src/widgets/NoTradeChat/components/ChatList/chatList.module.scss
+++ b/src/widgets/NoTradeChat/components/ChatList/chatList.module.scss
@@ -61,7 +61,7 @@
 }
 
 ._bordered {
-  border-top: 1px solid $border-base-dropdown;
+  border-top: 1px solid #33334d;
 }
 
 .chat-nodata {
@@ -95,4 +95,4 @@
     padding: 0 !important;
     padding-block: 0 !important;
   }
-}
+}
\ No newline at end of file
diff --git a/src/widgets/NoTradeChat/components/ChatList/chatListContextMenu.tsx b/src/widgets/NoTradeChat/components/ChatList/chatListContextMenu.tsx
index 0bfbd3b6d..43d62bc6f 100644
--- a/src/widgets/NoTradeChat/components/ChatList/chatListContextMenu.tsx
+++ b/src/widgets/NoTradeChat/components/ChatList/chatListContextMenu.tsx
@@ -5,6 +5,7 @@ import api from '@api/index';
 import { ContextMenu } from '@components/ContextMenu';
 
 import { useAppSelect } from '@hooks/useAppSelector';
+import { useProtectedWidgets } from '@hooks/useProtectedWidgets';
 import { deleteGroupChatRequested, editGroupChatRequested, leaveGroupChatRequested } from '@store/actions/chats';
 import { isMobileViewSelector } from '@store/selectors/core';
 import { ChatState, makeChatFavorite, setRightClickedChat } from '@store/slices/chatSlice';
@@ -25,7 +26,9 @@ export const ChatListContextMenu: FC<ChatListContextMenuProps> = function ({
   getChatRead,
   record,
   event,
+  currentWorkspaceId,
   widgetId,
+  usersList,
   setIsDownloadModalOpen,
 }) {
   const { noTradeChatController } = api;
@@ -38,6 +41,8 @@ export const ChatListContextMenu: FC<ChatListContextMenuProps> = function ({
 
   const chatsWithMsgCount = useAppSelect((state) => state.chatSlice.noTradeChatsWithNewMessageCount);
 
+  const { isAvailableWidgetByWidgetType } = useProtectedWidgets();
+
   if (isFolder) {
     const currentFolder = { ...record } as IChatFolder;
     const items = [
@@ -89,7 +94,25 @@ export const ChatListContextMenu: FC<ChatListContextMenuProps> = function ({
   /* allowToReadChat - есть ли новое сообщение или нет */
   const allowToReadChat = !chatsWithMsgCount[currentChat.chatId]?.newMessagesCount;
 
-  const isAdmin = currentChat.ownerLogins?.includes(login ?? '');
+  const isAdmin = currentChat.creatorLogin === login;
+
+  const getIsCptyCanTrade = () => {
+    if (currentChat?.type !== 'd') {
+      return false;
+    }
+
+    const cpty = currentChat?.participants.find(({ userLogin }) => userLogin !== login);
+    if (!cpty) {
+      return false;
+    }
+
+    const customer = usersList.find(({ userMail }) => userMail === cpty.userLogin);
+
+    if (!customer) {
+      return false;
+    }
+    return Boolean(customer.moexId);
+  };
 
   const deleteChatItem = (chat: TChatRecord): ChatItemType[] => {
     if (!chat) {
diff --git a/src/widgets/NoTradeChat/components/CreateFolderModal/__tests__/useCreateFolder.test.ts b/src/widgets/NoTradeChat/components/CreateFolderModal/__tests__/useCreateFolder.test.ts
index 9c111dfd4..41cc6dbdd 100644
--- a/src/widgets/NoTradeChat/components/CreateFolderModal/__tests__/useCreateFolder.test.ts
+++ b/src/widgets/NoTradeChat/components/CreateFolderModal/__tests__/useCreateFolder.test.ts
@@ -69,8 +69,8 @@ describe('useCreateFolder', () => {
     act(() => {
       result.current.handleSearch('Test');
     });
-    expect(result.current.chats).toHaveLength(0);
-    expect(result.current.chats[0]).toEqual(undefined);
+    expect(result.current.chats).toHaveLength(1);
+    expect(result.current.chats[0]).toEqual(mockChats['3']);
   });
   it('should handle chat selection', () => {
     const { result } = renderHook(() => useCreateFolder(mockId));
@@ -169,8 +169,12 @@ describe('useCreateFolder', () => {
     act(() => {
       result.current.hanldeCheckAll(mockEvent);
     });
-    expect(result.current.selectedChats).toHaveLength(0);
-    expect(result.current.selectedChats).toEqual([]);
+    expect(result.current.selectedChats).toHaveLength(3);
+    expect(result.current.selectedChats).toEqual([
+      { key: '1', label: 'Chat 1', value: '1' },
+      { key: '2', label: 'Chat 2', value: '2' },
+      { key: '3', label: 'Test Chat', value: '3' },
+    ]);
     const mockEventUncheck = {
       target: {
         checked: false,
@@ -233,7 +237,7 @@ describe('useCreateFolder', () => {
   it('should update legend select title when selected chats change', () => {
     (getChatsCountText as jest.Mock).mockImplementation((selected, total) => `Selected: ${selected} of ${total} chats`);
     const { result } = renderHook(() => useCreateFolder(mockId));
-    expect(result.current.legendSelectTitle).toBe('Selected: 0 of 0 chats');
+    expect(result.current.legendSelectTitle).toBe('Selected: 0 of 3 chats');
     act(() => {
       const mockEvent = {
         target: {
@@ -243,6 +247,6 @@ describe('useCreateFolder', () => {
       } as any;
       result.current.handleSelectChat(mockEvent);
     });
-    expect(getChatsCountText).toHaveBeenCalledWith(0, 0);
+    expect(getChatsCountText).toHaveBeenCalledWith(1, 3);
   });
 });
diff --git a/src/widgets/NoTradeChat/components/CreateFolderModal/components/hooks/useCreateFolder.ts b/src/widgets/NoTradeChat/components/CreateFolderModal/components/hooks/useCreateFolder.ts
index 87d5e59d3..d91582f40 100644
--- a/src/widgets/NoTradeChat/components/CreateFolderModal/components/hooks/useCreateFolder.ts
+++ b/src/widgets/NoTradeChat/components/CreateFolderModal/components/hooks/useCreateFolder.ts
@@ -49,9 +49,6 @@ export const useCreateFolder = (id: string) => {
         if (section !== 'All' && c.type !== section) {
           return false;
         }
-        if (!c.lastMessage) {
-          return false;
-        }
         if (search) {
           return c.chatSubject.toLowerCase().includes(search.toLowerCase());
         }
diff --git a/src/widgets/NoTradeChat/components/CreateGroupModal/components/ChatName/ChatName.module.scss b/src/widgets/NoTradeChat/components/CreateGroupModal/components/ChatName/ChatName.module.scss
index 8309a48f8..b151ed224 100644
--- a/src/widgets/NoTradeChat/components/CreateGroupModal/components/ChatName/ChatName.module.scss
+++ b/src/widgets/NoTradeChat/components/CreateGroupModal/components/ChatName/ChatName.module.scss
@@ -27,8 +27,10 @@
     flex-direction: column;
     gap: 8px;
 
-    &:hover {
-      background-color: $surface-input-active;
+    input {
+      &:hover {
+        background-color: $surface-input-active;
+      }
     }
 
     .label {
diff --git a/src/widgets/NoTradeChat/components/EditGroupChatModal/hooks/__tests__/useEditGroupChat.test.ts b/src/widgets/NoTradeChat/components/EditGroupChatModal/hooks/__tests__/useEditGroupChat.test.ts
deleted file mode 100644
index 7f7678482..000000000
--- a/src/widgets/NoTradeChat/components/EditGroupChatModal/hooks/__tests__/useEditGroupChat.test.ts
+++ /dev/null
@@ -1,340 +0,0 @@
-import { act, renderHook } from '@testing-library/react';
-import { useDispatch } from 'react-redux';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import * as chatsActions from '@store/actions/chats';
-import * as modalActions from '@store/actions/modal';
-import { isMobileViewSelector } from '@store/selectors/core';
-import { noTradeChatByIdSelector } from '@store/selectors/noTradeChat';
-import { requestLoadingSelector } from '@store/selectors/requestStatus';
-import { userEmailSelector } from '@store/selectors/user';
-import { useCreateModalName } from '@widgets/NoTradeChat/components/CreateGroupModal/hooks/useCreateModalName';
-import { useParticipants } from '@widgets/NoTradeChat/hooks/useParticipants';
-
-import { useEditGroupChat } from '../useEditGroupChat';
-
-// Мокаем все зависимости
-jest.mock('react-redux', () => ({
-  useDispatch: jest.fn(),
-}));
-
-jest.mock('@hooks/useAppSelector', () => ({
-  useAppSelect: jest.fn(),
-}));
-
-jest.mock('@widgets/NoTradeChat/components/CreateGroupModal/hooks/useCreateModalName', () => ({
-  useCreateModalName: jest.fn(),
-}));
-
-jest.mock('@widgets/NoTradeChat/hooks/useParticipants', () => ({
-  useParticipants: jest.fn(),
-}));
-
-jest.mock('@store/actions/chats', () => ({
-  addUserToChatStep: jest.fn(),
-  deleteGroupChatStep: jest.fn(),
-  deleteUserFromChatStep: jest.fn(),
-  editGroupChatSave: jest.fn(),
-}));
-
-jest.mock('@store/actions/modal', () => ({
-  closeModalRequested: jest.fn(),
-}));
-
-// Мокаем селекторы, чтобы можно было сравнивать по ссылке
-jest.mock('@store/selectors/core', () => ({
-  isMobileViewSelector: jest.fn(),
-}));
-jest.mock('@store/selectors/noTradeChat', () => ({
-  noTradeChatByIdSelector: jest.fn(),
-}));
-jest.mock('@store/selectors/requestStatus', () => ({
-  requestLoadingSelector: jest.fn(),
-}));
-jest.mock('@store/selectors/user', () => ({
-  userEmailSelector: jest.fn(),
-}));
-
-describe('useEditGroupChat', () => {
-  const mockDispatch = jest.fn();
-  const mockUseAppSelect = useAppSelect as jest.Mock;
-  const mockUseCreateModalName = useCreateModalName as jest.Mock;
-  const mockUseParticipants = useParticipants as jest.Mock;
-  const mockIsMobileViewSelector = isMobileViewSelector as jest.Mock;
-  const mockNoTradeChatByIdSelector = noTradeChatByIdSelector as jest.Mock;
-  const mockRequestLoadingSelector = requestLoadingSelector as jest.Mock;
-  const mockUserEmailSelector = userEmailSelector as jest.Mock;
-
-  const defaultProps: any = {
-    id: 'modal-123',
-    chatId: 'chat-456',
-    widgetId: 'widget-789',
-  };
-
-  const mockChat = {
-    id: 'chat-456',
-    chatSubject: 'Test Chat',
-    participants: [{ userLogin: 'user1@test.com' }, { userLogin: 'user2@test.com' }],
-  };
-
-  const mockParticipants = [
-    { userLogin: 'user1@test.com', isOnline: true },
-    { userLogin: 'user2@test.com', isOnline: false },
-  ];
-
-  const defaultUseCreateModalNameReturn = {
-    chatName: 'Test Chat',
-    chatNameError: '',
-    validateChatName: jest.fn().mockReturnValue(true),
-    hasChanged: false,
-    handleChangeChatName: jest.fn(),
-  };
-
-  const defaultUseParticipantsReturn = {
-    participants: mockParticipants,
-    participantsCount: 2,
-    participantsCountWithOnline: 1,
-    isOwner: true,
-    isAdmin: false,
-  };
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-
-    (useDispatch as jest.Mock).mockReturnValue(mockDispatch);
-
-    // Настройка последовательных вызовов useAppSelect
-    // 1. isMobileViewSelector -> false
-    // 2. noTradeChatByIdSelector(chatId)('chatSubject') -> 'Test Chat'
-    // 3. userEmailSelector -> 'user1@test.com'
-    // 4. requestLoadingSelector('editGroupChat') -> false
-    // 5. noTradeChatByIdSelector(chatId)() -> mockChat
-    mockUseAppSelect
-      .mockReturnValueOnce(false) // isMobileView
-      .mockReturnValueOnce('Test Chat') // chatSubject
-      .mockReturnValueOnce('user1@test.com') // userEmail
-      .mockReturnValueOnce(false) // loading
-      .mockReturnValueOnce(mockChat); // currentChat
-
-    // Мокаем useCreateModalName
-    mockUseCreateModalName.mockReturnValue(defaultUseCreateModalNameReturn);
-
-    // Мокаем useParticipants
-    mockUseParticipants.mockReturnValue(defaultUseParticipantsReturn);
-
-    // Мокаем селекторы (чтобы они просто существовали)
-    mockIsMobileViewSelector.mockReturnValue(false);
-    mockNoTradeChatByIdSelector.mockImplementation((id: string) => (key?: string) => {
-      if (key === 'chatSubject') {
-        return 'Test Chat';
-      }
-      return mockChat;
-    });
-    mockRequestLoadingSelector.mockReturnValue(false);
-    mockUserEmailSelector.mockReturnValue('user1@test.com');
-  });
-
-  it('should return initial values correctly', () => {
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    expect(result.current).toMatchObject({
-      isMobileView: false,
-      chatName: 'Test Chat',
-      chatNameError: '',
-      participants: mockParticipants,
-      participantsCount: 2,
-      participantsCountWithOnline: 1,
-      hasChanged: false,
-      loading: false,
-      chatId: defaultProps.chatId,
-    });
-
-    expect(result.current.handleChangeChatName).toBeDefined();
-    expect(result.current.onAddUser).toBeDefined();
-    expect(result.current.onDeleteUser).toBeDefined();
-    expect(result.current.onSave).toBeDefined();
-    expect(result.current.onClose).toBeDefined();
-    expect(result.current.onDeleteChat).toBeDefined();
-  });
-
-  it('should call onClose when user is not owner or admin', () => {
-    mockUseParticipants.mockReturnValue({
-      ...defaultUseParticipantsReturn,
-      isOwner: false,
-      isAdmin: false,
-    });
-
-    // Используем act для обработки эффектов
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    // Эффект должен сработать и вызвать closeModalRequested
-    expect(mockDispatch).toHaveBeenCalledWith(modalActions.closeModalRequested(defaultProps.id));
-  });
-
-  it('should not call onClose when user is owner', () => {
-    mockUseParticipants.mockReturnValue({
-      ...defaultUseParticipantsReturn,
-      isOwner: true,
-      isAdmin: false,
-    });
-
-    renderHook(() => useEditGroupChat(defaultProps));
-
-    expect(mockDispatch).not.toHaveBeenCalledWith(modalActions.closeModalRequested(defaultProps.id));
-  });
-
-  it('should not call onClose when user is admin', () => {
-    mockUseParticipants.mockReturnValue({
-      ...defaultUseParticipantsReturn,
-      isOwner: false,
-      isAdmin: true,
-    });
-
-    renderHook(() => useEditGroupChat(defaultProps));
-
-    expect(mockDispatch).not.toHaveBeenCalledWith(modalActions.closeModalRequested(defaultProps.id));
-  });
-
-  it('should close modal if currentChat is falsy', () => {
-    // Переопределяем пятый вызов useAppSelect (currentChat) как null
-    mockUseAppSelect
-      .mockReturnValueOnce(false) // isMobileView
-      .mockReturnValueOnce('Test Chat') // chatSubject
-      .mockReturnValueOnce('user1@test.com') // userEmail
-      .mockReturnValueOnce(false) // loading
-      .mockReturnValueOnce(null); // currentChat
-
-    renderHook(() => useEditGroupChat(defaultProps));
-  });
-
-  it('should dispatch addUserToChatStep on onAddUser', () => {
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    act(() => {
-      result.current.onAddUser();
-    });
-
-    expect(mockDispatch).toHaveBeenCalledWith(chatsActions.addUserToChatStep({ chatId: defaultProps.chatId }));
-  });
-
-  it('should dispatch deleteUserFromChatStep on onDeleteUser', () => {
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-    const userToDelete: any = mockParticipants[0];
-
-    act(() => {
-      result.current.onDeleteUser(userToDelete);
-    });
-
-    expect(mockDispatch).toHaveBeenCalledWith(
-      chatsActions.deleteUserFromChatStep({
-        chatId: defaultProps.chatId,
-        userLogin: userToDelete.userLogin,
-      }),
-    );
-  });
-
-  it('should dispatch deleteGroupChatStep on onDeleteChat', () => {
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    act(() => {
-      result.current.onDeleteChat();
-    });
-
-    expect(mockDispatch).toHaveBeenCalledWith(
-      chatsActions.deleteGroupChatStep({
-        chatId: defaultProps.chatId,
-        widgetId: defaultProps.widgetId,
-      }),
-    );
-  });
-
-  it('should dispatch closeModalRequested on onClose', () => {
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    act(() => {
-      result.current.onClose();
-    });
-
-    expect(mockDispatch).toHaveBeenCalledWith(modalActions.closeModalRequested(defaultProps.id));
-  });
-
-  describe('onSave', () => {
-    it('should dispatch editGroupChatSave when chatName is valid', () => {
-      const mockValidate = jest.fn().mockReturnValue(true);
-      mockUseCreateModalName.mockReturnValue({
-        ...defaultUseCreateModalNameReturn,
-        validateChatName: mockValidate,
-        chatName: 'New Chat Name',
-      });
-
-      const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-      act(() => {
-        result.current.onSave();
-      });
-
-      expect(mockValidate).toHaveBeenCalledWith('New Chat Name');
-      expect(mockDispatch).toHaveBeenCalledWith(
-        chatsActions.editGroupChatSave({
-          chatId: defaultProps.chatId,
-          chatName: 'New Chat Name',
-          userIds: ['user2@test.com'], // все участники кроме текущего пользователя
-        }),
-      );
-    });
-
-    it('should not dispatch editGroupChatSave when chatName is invalid', () => {
-      const mockValidate = jest.fn().mockReturnValue(false);
-      mockUseCreateModalName.mockReturnValue({
-        ...defaultUseCreateModalNameReturn,
-        validateChatName: mockValidate,
-        chatName: '',
-      });
-
-      const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-      act(() => {
-        result.current.onSave();
-      });
-
-      expect(mockValidate).toHaveBeenCalledWith('');
-      expect(mockDispatch).not.toHaveBeenCalledWith(expect.objectContaining({ type: expect.any(String) }));
-    });
-  });
-
-  it('should reflect loading state from requestLoadingSelector', () => {
-    // Устанавливаем loading = true (четвертый вызов useAppSelect)
-    mockUseAppSelect
-      .mockReturnValueOnce(false) // isMobileView
-      .mockReturnValueOnce('Test Chat') // chatSubject
-      .mockReturnValueOnce('user1@test.com') // userEmail
-      .mockReturnValueOnce(true) // loading
-      .mockReturnValueOnce(mockChat); // currentChat
-
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    expect(result.current.loading).toBe(false);
-  });
-
-  it('should use hasChanged from useCreateModalName', () => {
-    mockUseCreateModalName.mockReturnValue({
-      ...defaultUseCreateModalNameReturn,
-      hasChanged: true,
-    });
-
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    expect(result.current.hasChanged).toBe(true);
-  });
-
-  it('should use chatNameError from useCreateModalName', () => {
-    mockUseCreateModalName.mockReturnValue({
-      ...defaultUseCreateModalNameReturn,
-      chatNameError: 'Name is required',
-    });
-
-    const { result } = renderHook(() => useEditGroupChat(defaultProps));
-
-    expect(result.current.chatNameError).toBe('Name is required');
-  });
-});
diff --git a/src/widgets/NoTradeChat/components/EditGroupChatModal/hooks/useEditGroupChat.ts b/src/widgets/NoTradeChat/components/EditGroupChatModal/hooks/useEditGroupChat.ts
index e94e00980..7ff3d8a81 100644
--- a/src/widgets/NoTradeChat/components/EditGroupChatModal/hooks/useEditGroupChat.ts
+++ b/src/widgets/NoTradeChat/components/EditGroupChatModal/hooks/useEditGroupChat.ts
@@ -1,4 +1,3 @@
-import { useEffect } from 'react';
 import { useDispatch } from 'react-redux';
 
 import { useAppSelect } from '@hooks/useAppSelector';
@@ -33,23 +32,7 @@ export const useEditGroupChat = ({ id, chatId, widgetId }: EditGroupChatModalPro
     hasChanged,
     handleChangeChatName,
   } = useCreateModalName(initialChatName);
-  const { participants, participantsCount, participantsCountWithOnline, isOwner, isAdmin } = useParticipants({
-    chatId,
-  });
-  const currentChat = useAppSelect(noTradeChatByIdSelector(chatId)());
-
-  const onClose = () => {
-    dispatch(closeModalRequested(id));
-  };
-
-  useEffect(() => {
-    if (!currentChat) {
-      return;
-    }
-    if (!(isOwner || isAdmin)) {
-      onClose();
-    }
-  }, [currentChat, userEmail, id, onClose, isAdmin, isOwner]);
+  const { participants, participantsCount, participantsCountWithOnline } = useParticipants({ chatId });
 
   const onAddUser = () => {
     dispatch(addUserToChatStep({ chatId }));
@@ -71,6 +54,10 @@ export const useEditGroupChat = ({ id, chatId, widgetId }: EditGroupChatModalPro
     }
   };
 
+  const onClose = () => {
+    dispatch(closeModalRequested(id));
+  };
+
   return {
     isMobileView,
     chatName,
diff --git a/src/widgets/NoTradeChat/components/GroupAddButton/GroupAddButton.tsx b/src/widgets/NoTradeChat/components/GroupAddButton/GroupAddButton.tsx
index 0eafedffe..3078b0457 100644
--- a/src/widgets/NoTradeChat/components/GroupAddButton/GroupAddButton.tsx
+++ b/src/widgets/NoTradeChat/components/GroupAddButton/GroupAddButton.tsx
@@ -3,8 +3,6 @@ import React from 'react';
 import { IconButton } from '@components/IconButton';
 import { GroupAdd } from '@components/Icons/GroupAdd';
 
-import Tooltip from '@uikit/Tooltip';
-
 import styles from './GroupAddButton.module.scss';
 
 type GroupAddButtonProps = {
@@ -12,12 +10,10 @@ type GroupAddButtonProps = {
 };
 
 export const GroupAddButton = ({ onClick }: GroupAddButtonProps) => (
-  <Tooltip title="Создать групповой чат">
-    <IconButton
-      variant="secondary"
-      size="large"
-      icon={<GroupAdd className={styles['add-icon']} />}
-      onClick={onClick}
-    />
-  </Tooltip>
+  <IconButton
+    variant="secondary"
+    size="large"
+    icon={<GroupAdd className={styles['add-icon']} />}
+    onClick={onClick}
+  />
 );
diff --git a/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkDesktop/InviteChatViaLinkDesktop.tsx b/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkDesktop/InviteChatViaLinkDesktop.tsx
index 53f8f9ed0..41ba93f5d 100644
--- a/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkDesktop/InviteChatViaLinkDesktop.tsx
+++ b/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkDesktop/InviteChatViaLinkDesktop.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 
 import { DesktopModalSmallForm } from '@components/DesktopModalSmallForm';
 
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 
 import { IconVariants } from '@uikit/Icon/types';
 
@@ -23,7 +23,7 @@ export const InviteChatViaLinkDesktop = ({ handleClose, handleCopy, link }: Invi
     }}
     confirmText="Скопировать"
     cancelText="Отменить"
-    confirmButtonIcon={() => <IconDeprecated variant={IconVariants.FILE_COPY_OUTLINED} />}
+    confirmButtonIcon={() => <Icon variant={IconVariants.FILE_COPY_OUTLINED} />}
   >
     {link && (
       <InviteChatViaLinkContent
diff --git a/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkMobile/InviteChatViaLinkMobile.tsx b/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkMobile/InviteChatViaLinkMobile.tsx
index 3fdb15484..ca7a0187d 100644
--- a/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkMobile/InviteChatViaLinkMobile.tsx
+++ b/src/widgets/NoTradeChat/components/InviteChatViaLinkModal/components/InviteChatViaLinkMobile/InviteChatViaLinkMobile.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 
 import { MobileModalConfirm } from '@terminal/mobile/components/MobileModalConfirm';
 
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 
 import { IconVariants } from '@uikit/Icon/types';
 
@@ -24,6 +24,6 @@ export const InviteChatViaLinkMobile = ({ handleClose, handleCopy, link }: Invit
     confirmText="Скопировать ссылку"
     cancelText="Отменить"
     confirmButtonVariant="filled-primary"
-    confirmTextIcon={() => <IconDeprecated variant={IconVariants.FILE_COPY_OUTLINED} />}
+    confirmTextIcon={() => <Icon variant={IconVariants.FILE_COPY_OUTLINED} />}
   />
 );
diff --git a/src/widgets/NoTradeChat/components/MessageContextMenu/useMessageContextMenuFacade.tsx b/src/widgets/NoTradeChat/components/MessageContextMenu/useMessageContextMenuFacade.tsx
index d55f72a39..8960c92aa 100644
--- a/src/widgets/NoTradeChat/components/MessageContextMenu/useMessageContextMenuFacade.tsx
+++ b/src/widgets/NoTradeChat/components/MessageContextMenu/useMessageContextMenuFacade.tsx
@@ -5,7 +5,6 @@ import uniq from 'lodash/uniq';
 import React, { MouseEvent, useEffect, useMemo, useRef, useState } from 'react';
 import { useDispatch } from 'react-redux';
 
-import { axiosInstanceFormalization } from '@api/axios';
 import { noTradeChatController } from '@api/controllers/noTradeChatController';
 import { getForwardMessageAttachment } from '@components/ChatComponent/components/MessageListNoTrade/utils';
 import { Forward } from '@components/Icons/Forward';
@@ -22,8 +21,6 @@ import {
 import { userInfoSelector } from '@store/selectors/user';
 import { setChatContextMessage, setIsForwardChatContextMessage } from '@store/slices/chatSlice';
 import { DropdownItems } from '@terminal/desktop/components/Sidebar/components/MenuItems/WorkspaceItem';
-import { IconDeprecated } from '@uikit/Icon';
-import { IconVariants } from '@uikit/Icon/types';
 import { conjugator } from '@utils/conjugator';
 import { validateEmail } from '@utils/validators';
 import { TreeTitleWithTooltip } from '@widgets/NoTradeChat/components/TreeTitleWithTooltip';
@@ -95,6 +92,10 @@ export function useMessageContextMenuFacade({
   // region Reply
 
   const onRightClick = (e: MouseEvent, msg: Message) => {
+    if ((e.target as HTMLElement).tagName.toLowerCase().includes('img')) {
+      return;
+    }
+
     if ((e.target as HTMLElement).tagName.toLowerCase() === 'a') {
       e.stopPropagation();
       e.preventDefault();
@@ -208,21 +209,21 @@ export function useMessageContextMenuFacade({
           ...el,
           style: searchValue
             ? {
-              display:
-                el.children
-                  ?.map((child) => child.title.toLowerCase())
-                  .findIndex((elem) => elem.includes(searchValue.toLowerCase())) !== -1
-                  ? 'flex'
-                  : 'none',
-            }
+                display:
+                  el.children
+                    ?.map((child) => child.title.toLowerCase())
+                    .findIndex((elem) => elem.includes(searchValue.toLowerCase())) !== -1
+                    ? 'flex'
+                    : 'none',
+              }
             : { display: 'flex' },
         },
         children: el.children?.map((elem) => ({
           ...elem,
           style: searchValue
             ? {
-              display: elem.title.toLowerCase().includes(searchValue.toLowerCase()) ? 'flex' : 'none',
-            }
+                display: elem.title.toLowerCase().includes(searchValue.toLowerCase()) ? 'flex' : 'none',
+              }
             : { display: 'flex' },
         })),
       };
@@ -240,33 +241,33 @@ export function useMessageContextMenuFacade({
           ...el,
           style: searchValue
             ? {
-              display:
-                el.children
-                  ?.flatMap((child) => child.children?.map((elem) => elem.title.toLowerCase()))
-                  .findIndex((elem) => elem?.includes(searchValue.toLowerCase())) !== -1
-                  ? 'flex'
-                  : 'none',
-            }
+                display:
+                  el.children
+                    ?.flatMap((child) => child.children?.map((elem) => elem.title.toLowerCase()))
+                    .findIndex((elem) => elem?.includes(searchValue.toLowerCase())) !== -1
+                    ? 'flex'
+                    : 'none',
+              }
             : { display: 'flex' },
         },
         children: el.children?.map((elem) => ({
           ...elem,
           style: searchValue
             ? {
-              display:
-                elem.children
-                  ?.map((child) => child.title.toLowerCase())
-                  .findIndex((child) => child.includes(searchValue.toLowerCase())) !== -1
-                  ? 'flex'
-                  : 'none',
-            }
+                display:
+                  elem.children
+                    ?.map((child) => child.title.toLowerCase())
+                    .findIndex((child) => child.includes(searchValue.toLowerCase())) !== -1
+                    ? 'flex'
+                    : 'none',
+              }
             : { display: 'flex' },
           children: elem.children?.map((element) => ({
             ...element,
             style: searchValue
               ? {
-                display: element.title.toLowerCase().includes(searchValue.toLowerCase()) ? 'flex' : 'none',
-              }
+                  display: element.title.toLowerCase().includes(searchValue.toLowerCase()) ? 'flex' : 'none',
+                }
               : { display: 'flex' },
           })),
         })),
@@ -510,30 +511,6 @@ export function useMessageContextMenuFacade({
     setOpenContextMenu(false);
   };
 
-  const handleCopy = async () => {
-    if (selectedChatForContextMenu?.attachments?.[0]?.imageSize) {
-      const response = await axiosInstanceFormalization.get(selectedChatForContextMenu?.attachments?.[0].uri ?? '', {
-        responseType: 'blob',
-      });
-      const blob = response.data;
-      try {
-        const item = new ClipboardItem({
-          [blob.type]: blob,
-        });
-        await navigator.clipboard.write([item]);
-      } catch (err) {
-        console.error(err, 'copy image error!');
-      } finally {
-        setOpenContextMenu(false);
-      }
-      return;
-    }
-    if (chatId && selectedChatForContextMenu) {
-      navigator.clipboard.writeText(selectedChatForContextMenu.text);
-      setOpenContextMenu(false);
-    }
-  };
-
   // Событие нажатия на кнопку "Отправить" после выбора чатов-получателей
   const handleSendForwardMessage = async () => {
     if (!contextMessage) {
@@ -661,13 +638,6 @@ export function useMessageContextMenuFacade({
       itemStyles: dropdownStyle,
       disabled: false,
     },
-    {
-      id: 3,
-      name: 'Скопировать',
-      descripIcon: () => <IconDeprecated variant={IconVariants.FILE_COPY_OUTLINED} />,
-      onClick: handleCopy,
-      itemStyles: dropdownStyle,
-    },
   ];
 
   const dropdownLinkItems = [
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/ParticipantsItem.tsx b/src/widgets/NoTradeChat/components/ParticipantsItem/ParticipantsItem.tsx
index 234f7682c..86380e6b4 100644
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/ParticipantsItem.tsx
+++ b/src/widgets/NoTradeChat/components/ParticipantsItem/ParticipantsItem.tsx
@@ -2,8 +2,6 @@ import classNames from 'classnames';
 import React, { FC, useRef } from 'react';
 
 import { Avatar } from '@components/ChatComponent/components';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { isMobileViewSelector } from '@store/selectors/core';
 import { ContextMenu } from '@uikit/ContextMenu';
 import Typography from '@uikit/Typography';
 import { lastActivityStatus } from '@utils/lastActivityStatus';
@@ -37,9 +35,8 @@ export const ParticipantsItem: FC<ParticipantsItemProps> = ({
   onClose,
 }) => {
   const targetContext = useRef(null);
-  const isMobileView = useAppSelect(isMobileViewSelector);
 
-  const { filteredContextItems, isOwnLogin } = useParticipantItem({
+  const { filteredContextItems } = useParticipantItem({
     participant,
     chatId,
     onClose,
@@ -54,7 +51,6 @@ export const ParticipantsItem: FC<ParticipantsItemProps> = ({
       renderWrapperClassName={styles.renderWrapperClassName}
       getPopupContainer={() => targetContext.current || document.body}
       trigger={['contextMenu']}
-      disabled={isOwnLogin || isMobileView || !filteredContextItems.length}
     >
       <div
         ref={targetContext}
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/__tests__/useParticipantItem.test.ts b/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/__tests__/useParticipantItem.test.ts
index 6f5563573..560b3a031 100644
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/__tests__/useParticipantItem.test.ts
+++ b/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/__tests__/useParticipantItem.test.ts
@@ -1,42 +1,33 @@
 import { renderHook } from '@testing-library/react';
-
-import { useParticipants } from '@widgets/NoTradeChat/hooks/useParticipants';
-import { Participant } from 'types/NoTradeChat';
-
-import { useContextItems } from '../useContextItems';
 import { useParticipantItem } from '../useParticipantItem';
+import { useContextItems } from '../useContextItems';
+import { Participant } from 'types/NoTradeChat';
 
 jest.mock('../useContextItems');
-jest.mock('@widgets/NoTradeChat/hooks/useParticipants');
-jest.mock('@hooks/useAppSelector');
 
-jest.mock('react-redux', () => ({
-  useSelector: jest.fn(),
-}));
 
 jest.mock('@api/index', () => ({
-  updateMenuLocked: jest.fn(),
-  widgetsController: {
-    delete: jest.fn(),
-  },
-  widgetPropertiesController: {
-    update: jest.fn(),
-  },
-  workspaceController: {
-    update: jest.fn(),
-  },
+    updateMenuLocked: jest.fn(),
+    widgetsController: {
+        delete: jest.fn(),
+    },
+    widgetPropertiesController: {
+        update: jest.fn(),
+    },
+    workspaceController: {
+        update: jest.fn(),
+    },
 }));
 
 const mockUseContextItems = useContextItems as jest.MockedFunction<typeof useContextItems>;
-const mockUseParticipants = useParticipants as jest.MockedFunction<typeof useParticipants>;
 
 const mockContextItems = [
-  { key: 'send_message', label: 'Send Message' },
-  { key: 'view_profile', label: 'View Profile' },
-  { key: 'appoint_an_admin', label: 'Appoint Admin' },
-  { key: 'appoint_an_owner', label: 'Appoint Owner' },
-  { key: 'remove_from_chat', label: 'Remove' },
-  { key: 'some_other_key', label: 'Other' },
+    { key: 'send_message', label: 'Send Message' },
+    { key: 'view_profile', label: 'View Profile' },
+    { key: 'appoint_an_admin', label: 'Appoint Admin' },
+    { key: 'appoint_an_owner', label: 'Appoint Owner' },
+    { key: 'remove_from_chat', label: 'Remove' },
+    { key: 'some_other_key', label: 'Other' },
 ];
 
 const participant: Participant = { id: '1', name: 'John' } as any;
@@ -44,163 +35,125 @@ const chatId = 'chat1';
 const onClose = jest.fn();
 
 describe('useParticipantItem', () => {
-  beforeEach(() => {
-    mockUseContextItems.mockReturnValue({ contextItems: mockContextItems as any });
-    mockUseParticipants.mockReturnValue({ isOwner: false, isAdmin: false } as any);
-  });
-
-  afterEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('should filter context items for edit mode', () => {
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, editMode: true }));
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'appoint_an_admin', label: 'Appoint Admin' },
-      { key: 'appoint_an_owner', label: 'Appoint Owner' },
-      { key: 'remove_from_chat', label: 'Remove' },
-    ]);
-  });
-
-  it('should filter context items for admin (editMode is false)', () => {
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, isAdmin: true, editMode: false }));
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'send_message', label: 'Send Message' },
-      { key: 'view_profile', label: 'View Profile' },
-    ]);
-  });
-
-  it('should return all context items for owner (editMode and isAdmin are false)', () => {
-    const { result } = renderHook(() =>
-      useParticipantItem({
-        participant,
-        chatId,
-        isOwner: true,
-        editMode: false,
-        isAdmin: false,
-      }),
-    );
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'send_message', label: 'Send Message' },
-      { key: 'view_profile', label: 'View Profile' },
-    ]);
-  });
-
-  it('should filter context items for a regular member by default', () => {
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId }));
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'send_message', label: 'Send Message' },
-      { key: 'view_profile', label: 'View Profile' },
-    ]);
-  });
-
-  it('should prioritize edit mode over admin', () => {
-    const { result } = renderHook(() =>
-      useParticipantItem({
-        participant,
-        chatId,
-        editMode: true,
-        isAdmin: true,
-      }),
-    );
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'appoint_an_admin', label: 'Appoint Admin' },
-      { key: 'appoint_an_owner', label: 'Appoint Owner' },
-      { key: 'remove_from_chat', label: 'Remove' },
-    ]);
-  });
-
-  it('should prioritize admin over owner', () => {
-    const { result } = renderHook(() =>
-      useParticipantItem({
-        participant,
-        chatId,
-        isAdmin: true,
-        isOwner: true,
-        editMode: false,
-      }),
-    );
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'send_message', label: 'Send Message' },
-      { key: 'view_profile', label: 'View Profile' },
-    ]);
-  });
-
-  it('should return empty array when contextItems is empty', () => {
-    mockUseContextItems.mockReturnValue({ contextItems: [] });
-
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId }));
-
-    expect(result.current.filteredContextItems).toEqual([]);
-  });
-
-  it('should filter out keys that are not in the respective list', () => {
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId }));
-
-    expect(result.current.filteredContextItems).not.toContainEqual(expect.objectContaining({ key: 'some_other_key' }));
-  });
-
-  it('should pass all props to useContextItems', () => {
-    const props = { participant, chatId, onClose, editMode: true };
-
-    renderHook(() => useParticipantItem(props));
-
-    expect(mockUseContextItems).toHaveBeenCalledWith(props);
-  });
-
-  it('should return EDIT_CONTEXT_KEYS when editMode and isOwnOwner is true', () => {
-    mockUseParticipants.mockReturnValue({ isOwner: true, isAdmin: false } as any);
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, editMode: true }));
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'appoint_an_admin', label: 'Appoint Admin' },
-      { key: 'appoint_an_owner', label: 'Appoint Owner' },
-      { key: 'remove_from_chat', label: 'Remove' },
-    ]);
-  });
-
-  it('should return empty array when editMode, isOwnAdmin is true, and participant is admin', () => {
-    mockUseParticipants.mockReturnValue({ isOwner: false, isAdmin: true } as any);
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, editMode: true, isAdmin: true }));
-
-    expect(result.current.filteredContextItems).toEqual([{ key: 'remove_from_chat', label: 'Remove' }]);
-  });
-
-  it('should return empty array when editMode, isOwnAdmin is true, and participant is owner', () => {
-    mockUseParticipants.mockReturnValue({ isOwner: false, isAdmin: true } as any);
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, editMode: true, isOwner: true }));
-
-    expect(result.current.filteredContextItems).toEqual([{ key: 'remove_from_chat', label: 'Remove' }]);
-  });
-
-  it('should return only remove_from_chat when editMode, isOwnAdmin is true, participant is not admin/owner', () => {
-    mockUseParticipants.mockReturnValue({ isOwner: false, isAdmin: true } as any);
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, editMode: true }));
-
-    expect(result.current.filteredContextItems).toEqual([{ key: 'remove_from_chat', label: 'Remove' }]);
-  });
-
-  it('should return all context items when not editMode and isOwnOwner is true', () => {
-    mockUseParticipants.mockReturnValue({ isOwner: true, isAdmin: false } as any);
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, editMode: false }));
-
-    expect(result.current.filteredContextItems).toEqual(mockContextItems);
-  });
-
-  it('should return MEMBER_CONTEXT_KEYS when not editMode, isOwnAdmin is true, and participant is admin', () => {
-    mockUseParticipants.mockReturnValue({ isOwner: false, isAdmin: true } as any);
-    const { result } = renderHook(() => useParticipantItem({ participant, chatId, editMode: false, isAdmin: true }));
-
-    expect(result.current.filteredContextItems).toEqual([
-      { key: 'send_message', label: 'Send Message' },
-      { key: 'view_profile', label: 'View Profile' },
-      { key: 'remove_from_chat', label: 'Remove' },
-    ]);
-  });
-});
+    beforeEach(() => {
+        mockUseContextItems.mockReturnValue({ contextItems: mockContextItems as any });
+    });
+
+    afterEach(() => {
+        jest.clearAllMocks();
+    });
+
+    it('should filter context items for edit mode', () => {
+        const { result } = renderHook(() =>
+            useParticipantItem({ participant, chatId, editMode: true })
+        );
+
+        expect(result.current.filteredContextItems).toEqual([
+            { key: 'appoint_an_admin', label: 'Appoint Admin' },
+            { key: 'appoint_an_owner', label: 'Appoint Owner' },
+            { key: 'remove_from_chat', label: 'Remove' },
+        ]);
+    });
+
+    it('should filter context items for admin (editMode is false)', () => {
+        const { result } = renderHook(() =>
+            useParticipantItem({ participant, chatId, isAdmin: true, editMode: false })
+        );
+
+        expect(result.current.filteredContextItems).toEqual([
+            { key: 'send_message', label: 'Send Message' },
+            { key: 'view_profile', label: 'View Profile' },
+            { key: 'appoint_an_admin', label: 'Appoint Admin' },
+            { key: 'remove_from_chat', label: 'Remove' },
+        ]);
+    });
+
+    it('should return all context items for owner (editMode and isAdmin are false)', () => {
+        const { result } = renderHook(() =>
+            useParticipantItem({
+                participant,
+                chatId,
+                isOwner: true,
+                editMode: false,
+                isAdmin: false,
+            })
+        );
+
+        expect(result.current.filteredContextItems).toEqual(mockContextItems);
+    });
+
+    it('should filter context items for a regular member by default', () => {
+        const { result } = renderHook(() =>
+            useParticipantItem({ participant, chatId })
+        );
+
+        expect(result.current.filteredContextItems).toEqual([
+            { key: 'send_message', label: 'Send Message' },
+            { key: 'view_profile', label: 'View Profile' },
+        ]);
+    });
+
+    it('should prioritize edit mode over admin', () => {
+        const { result } = renderHook(() =>
+            useParticipantItem({
+                participant,
+                chatId,
+                editMode: true,
+                isAdmin: true,
+            })
+        );
+
+        expect(result.current.filteredContextItems).toEqual([
+            { key: 'appoint_an_admin', label: 'Appoint Admin' },
+            { key: 'appoint_an_owner', label: 'Appoint Owner' },
+            { key: 'remove_from_chat', label: 'Remove' },
+        ]);
+    });
+
+    it('should prioritize admin over owner', () => {
+        const { result } = renderHook(() =>
+            useParticipantItem({
+                participant,
+                chatId,
+                isAdmin: true,
+                isOwner: true,
+                editMode: false,
+            })
+        );
+
+        expect(result.current.filteredContextItems).toEqual([
+            { key: 'send_message', label: 'Send Message' },
+            { key: 'view_profile', label: 'View Profile' },
+            { key: 'appoint_an_admin', label: 'Appoint Admin' },
+            { key: 'remove_from_chat', label: 'Remove' },
+        ]);
+    });
+
+    it('should return empty array when contextItems is empty', () => {
+        mockUseContextItems.mockReturnValue({ contextItems: [] });
+
+        const { result } = renderHook(() =>
+            useParticipantItem({ participant, chatId })
+        );
+
+        expect(result.current.filteredContextItems).toEqual([]);
+    });
+
+    it('should filter out keys that are not in the respective list', () => {
+        const { result } = renderHook(() =>
+            useParticipantItem({ participant, chatId })
+        );
+
+        expect(result.current.filteredContextItems).not.toContainEqual(
+            expect.objectContaining({ key: 'some_other_key' })
+        );
+    });
+
+    it('should pass all props to useContextItems', () => {
+        const props = { participant, chatId, onClose, editMode: true };
+
+        renderHook(() => useParticipantItem(props));
+
+        expect(mockUseContextItems).toHaveBeenCalledWith(props);
+    });
+});
\ No newline at end of file
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useContextItems.ts b/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useContextItems.ts
index 4721c9437..2ded9ec63 100644
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useContextItems.ts
+++ b/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useContextItems.ts
@@ -51,7 +51,7 @@ export const useContextItems = ({ participant, chatId, onClose }: UseContextItem
         dispatch(
           appointAnAdminStep({
             customerLogin: participant.userLogin,
-            action: isParticipantAdmin ? 'remove_admin' : 'admin',
+            action: 'admin',
             chatId,
           }),
         );
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useParticipantItem.ts b/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useParticipantItem.ts
index 10c5492d4..7e5fdb886 100644
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useParticipantItem.ts
+++ b/src/widgets/NoTradeChat/components/ParticipantsItem/hooks/useParticipantItem.ts
@@ -1,15 +1,13 @@
 import { useMemo } from 'react';
 
-import { useAppSelect } from '@hooks/useAppSelector';
-import { userEmailSelector } from '@store/selectors/user';
-import { useParticipants } from '@widgets/NoTradeChat/hooks/useParticipants';
-import { ChatRoleVariants, Participant } from 'types/NoTradeChat';
-
-import { getDefaultContextItems } from '../utils/getDefaultContextItems';
-import { getEditModeContextItems } from '../utils/getEditModeContextItems';
+import { Participant } from 'types/NoTradeChat';
 
 import { useContextItems } from './useContextItems';
 
+const MEMBER_CONTEXT_KEYS = ['send_message', 'view_profile'];
+const EDIT_CONTEXT_KEYS = ['appoint_an_admin', 'appoint_an_owner', 'remove_from_chat'];
+const ADMIN_CONTEXT_KEYS = ['send_message', 'view_profile', 'appoint_an_admin', 'remove_from_chat'];
+
 interface UseParticipantItemProps {
   participant: Participant;
   chatId: string;
@@ -18,24 +16,24 @@ interface UseParticipantItemProps {
   isAdmin?: boolean;
   isOwner?: boolean;
 }
-
 export const useParticipantItem = (props: UseParticipantItemProps) => {
   const { contextItems } = useContextItems(props);
-  const { isOwner: isOwnOwner, isAdmin: isOwnAdmin } = useParticipants({ chatId: props.chatId });
-  const userLogin = useAppSelect(userEmailSelector);
-  const isOwnLogin = props.participant?.userLogin === userLogin;
-  const { editMode } = props;
-  const isAdmin = props.participant.role === ChatRoleVariants.ADMIN;
-  const isOwner = props.participant.role === ChatRoleVariants.OWNER;
-
+  const { editMode, isAdmin, isOwner } = props;
   const filteredContextItems = useMemo(() => {
-    const params = { isOwnOwner, isOwnAdmin, isAdmin, isOwner };
-
-    return editMode ? getEditModeContextItems(contextItems, params) : getDefaultContextItems(contextItems, params);
-  }, [editMode, isOwnOwner, isOwnAdmin, isAdmin, isOwner, contextItems]);
+    if (editMode) {
+      return contextItems.filter((el) => EDIT_CONTEXT_KEYS.includes(el.key));
+    }
+    if (isAdmin) {
+      return contextItems.filter((el) => ADMIN_CONTEXT_KEYS.includes(el.key));
+    }
+    if (isOwner) {
+      return contextItems;
+    }
+
+    return contextItems.filter((el) => MEMBER_CONTEXT_KEYS.includes(el.key));
+  }, [editMode, isOwner, isAdmin, contextItems]);
 
   return {
     filteredContextItems,
-    isOwnLogin,
   };
 };
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/__tests__/getDefaultContextItems.test.ts b/src/widgets/NoTradeChat/components/ParticipantsItem/utils/__tests__/getDefaultContextItems.test.ts
deleted file mode 100644
index 38b343960..000000000
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/__tests__/getDefaultContextItems.test.ts
+++ /dev/null
@@ -1,189 +0,0 @@
-import { getDefaultContextItems } from '../getDefaultContextItems';
-
-describe('getDefaultContextItems', () => {
-  // Базовые тестовые данные
-  const mockContextItems = [
-    { key: 'send_message', label: 'Send Message', onClick: jest.fn() },
-    { key: 'view_profile', label: 'View Profile', onClick: jest.fn() },
-    { key: 'remove_from_chat', label: 'Remove from Chat', onClick: jest.fn() },
-    { key: 'ban_user', label: 'Ban User', onClick: jest.fn() },
-    { key: 'mute_user', label: 'Mute User', onClick: jest.fn() },
-  ];
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  describe('When isOwnOwner is true', () => {
-    it('should return all context items', () => {
-      const result = getDefaultContextItems(mockContextItems, {
-        isOwnOwner: true,
-        isOwnAdmin: false,
-        isAdmin: false,
-        isOwner: false,
-      });
-
-      expect(result).toEqual(mockContextItems);
-      expect(result.length).toBe(5);
-    });
-
-    it('should return all context items regardless of other flags', () => {
-      const result = getDefaultContextItems(mockContextItems, {
-        isOwnOwner: true,
-        isOwnAdmin: true,
-        isAdmin: true,
-        isOwner: true,
-      });
-
-      expect(result).toEqual(mockContextItems);
-      expect(result.length).toBe(5);
-    });
-  });
-
-  describe('When isOwnOwner is false', () => {
-    describe('When (isOwnAdmin && isAdmin) OR (isOwner && isOwnAdmin) OR (!isOwnOwner && !isOwnAdmin)', () => {
-      it('should return only MEMBER_CONTEXT_KEYS when isOwnAdmin and isAdmin are true', () => {
-        const result = getDefaultContextItems(mockContextItems, {
-          isOwnOwner: false,
-          isOwnAdmin: true,
-          isAdmin: true,
-          isOwner: false,
-        });
-
-        expect(result).toHaveLength(2);
-        expect(result.map((item) => item.key)).toEqual(['send_message', 'view_profile']);
-      });
-
-      it('should return only MEMBER_CONTEXT_KEYS when isOwner and isOwnAdmin are true', () => {
-        const result = getDefaultContextItems(mockContextItems, {
-          isOwnOwner: false,
-          isOwnAdmin: true,
-          isAdmin: false,
-          isOwner: true,
-        });
-
-        expect(result).toHaveLength(2);
-        expect(result.map((item) => item.key)).toEqual(['send_message', 'view_profile']);
-      });
-
-      it('should return only MEMBER_CONTEXT_KEYS when isOwnOwner and isOwnAdmin are false', () => {
-        const result = getDefaultContextItems(mockContextItems, {
-          isOwnOwner: false,
-          isOwnAdmin: false,
-          isAdmin: true,
-          isOwner: true,
-        });
-
-        expect(result).toHaveLength(2);
-        expect(result.map((item) => item.key)).toEqual(['send_message', 'view_profile']);
-      });
-
-      it('should filter out items that are not in MEMBER_CONTEXT_KEYS', () => {
-        const result = getDefaultContextItems(mockContextItems, {
-          isOwnOwner: false,
-          isOwnAdmin: true,
-          isAdmin: true,
-          isOwner: false,
-        });
-
-        expect(result).not.toContainEqual(expect.objectContaining({ key: 'remove_from_chat' }));
-        expect(result).not.toContainEqual(expect.objectContaining({ key: 'ban_user' }));
-        expect(result).not.toContainEqual(expect.objectContaining({ key: 'mute_user' }));
-      });
-    });
-
-    describe('When isOwnAdmin is true but other conditions are false', () => {
-      it('should return only OWN_ADMIN_KEYS when isAdmin is false and isOwner is false', () => {
-        const result = getDefaultContextItems(mockContextItems, {
-          isOwnOwner: false,
-          isOwnAdmin: true,
-          isAdmin: false,
-          isOwner: false,
-        });
-
-        expect(result).toHaveLength(3);
-        expect(result.map((item) => item.key)).toEqual(['send_message', 'view_profile', 'remove_from_chat']);
-      });
-
-      it('should filter out items that are not in OWN_ADMIN_KEYS', () => {
-        const result = getDefaultContextItems(mockContextItems, {
-          isOwnOwner: false,
-          isOwnAdmin: true,
-          isAdmin: false,
-          isOwner: false,
-        });
-
-        expect(result).not.toContainEqual(expect.objectContaining({ key: 'ban_user' }));
-        expect(result).not.toContainEqual(expect.objectContaining({ key: 'mute_user' }));
-      });
-    });
-  });
-
-  describe('Edge cases', () => {
-    it('should handle empty context items array', () => {
-      const result = getDefaultContextItems([], {
-        isOwnOwner: false,
-        isOwnAdmin: true,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toEqual([]);
-    });
-
-    it('should handle context items without matching keys', () => {
-      const itemsWithNoMatch = [
-        { key: 'custom_action_1', label: 'Action 1', onClick: jest.fn() },
-        { key: 'custom_action_2', label: 'Action 2', onClick: jest.fn() },
-      ];
-
-      const result = getDefaultContextItems(itemsWithNoMatch, {
-        isOwnOwner: false,
-        isOwnAdmin: true,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toEqual([]);
-    });
-
-    it('should handle undefined isOwnOwner and isOwnAdmin', () => {
-      const result = getDefaultContextItems(mockContextItems, {
-        isOwnOwner: false,
-        isOwnAdmin: false,
-        isAdmin: true,
-        isOwner: true,
-      });
-
-      expect(result).toHaveLength(2);
-      expect(result.map((item) => item.key)).toEqual(['send_message', 'view_profile']);
-    });
-  });
-
-  describe('Priority of conditions', () => {
-    it('should prioritize isOwnOwner over all other conditions', () => {
-      const result = getDefaultContextItems(mockContextItems, {
-        isOwnOwner: true,
-        isOwnAdmin: true,
-        isAdmin: true,
-        isOwner: true,
-      });
-
-      expect(result).toEqual(mockContextItems);
-      expect(result.length).toBe(5);
-    });
-
-    it('should prioritize the complex condition over simple isOwnAdmin', () => {
-      // All three conditions in the complex OR statement should take precedence
-      const result = getDefaultContextItems(mockContextItems, {
-        isOwnOwner: false,
-        isOwnAdmin: true,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(2);
-      expect(result.map((item) => item.key)).toEqual(['send_message', 'view_profile']);
-    });
-  });
-});
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/__tests__/getEditModeContextItems.test.ts b/src/widgets/NoTradeChat/components/ParticipantsItem/utils/__tests__/getEditModeContextItems.test.ts
deleted file mode 100644
index 5b3be6e94..000000000
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/__tests__/getEditModeContextItems.test.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-import { getEditModeContextItems } from '../getEditModeContextItems';
-
-describe('getEditModeContextItems', () => {
-  // Базовые тестовые данные
-  const mockContextItems = [
-    { key: 'appoint_an_admin', label: 'Назначить администратором', onClick: jest.fn() },
-    { key: 'appoint_an_owner', label: 'Назначить владельцем', onClick: jest.fn() },
-    { key: 'remove_from_chat', label: 'Удалить из чата', onClick: jest.fn() },
-    { key: 'some_other_action', label: 'Другое действие', onClick: jest.fn() },
-  ];
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  describe('когда isOwnOwner = true', () => {
-    it('должен вернуть только элементы с ключами из EDIT_CONTEXT_KEYS', () => {
-      const result = getEditModeContextItems(mockContextItems, {
-        isOwnOwner: true,
-        isOwnAdmin: false,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(3);
-      expect(result.map((item) => item.key)).toEqual(['appoint_an_admin', 'appoint_an_owner', 'remove_from_chat']);
-    });
-
-    it('должен игнорировать другие параметры при isOwnOwner = true', () => {
-      const result = getEditModeContextItems(mockContextItems, {
-        isOwnOwner: true,
-        isOwnAdmin: true,
-        isAdmin: false,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(3);
-      expect(result.map((item) => item.key)).toEqual(['appoint_an_admin', 'appoint_an_owner', 'remove_from_chat']);
-    });
-  });
-
-  describe('когда isOwnAdmin = true и isAdmin = true', () => {
-    it('должен вернуть пустой массив', () => {
-      const result = getEditModeContextItems(mockContextItems, {
-        isOwnOwner: false,
-        isOwnAdmin: true,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toEqual([]);
-    });
-  });
-
-  describe('когда isOwner = true и isOwnAdmin = true', () => {
-    it('должен вернуть пустой массив', () => {
-      const result = getEditModeContextItems(mockContextItems, {
-        isOwnOwner: false,
-        isOwnAdmin: true,
-        isAdmin: false,
-        isOwner: true,
-      });
-
-      expect(result).toEqual([]);
-    });
-  });
-
-  describe('когда isOwnAdmin = true (без других условий)', () => {
-    it('должен вернуть только элементы с ключом "remove_from_chat"', () => {
-      const result = getEditModeContextItems(mockContextItems, {
-        isOwnOwner: false,
-        isOwnAdmin: true,
-        isAdmin: false,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(1);
-      expect(result[0].key).toBe('remove_from_chat');
-    });
-  });
-
-  describe('во всех остальных случаях', () => {
-    it('должен вернуть элементы с ключами из EDIT_CONTEXT_KEYS', () => {
-      const result = getEditModeContextItems(mockContextItems, {
-        isOwnOwner: false,
-        isOwnAdmin: false,
-        isAdmin: false,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(3);
-      expect(result.map((item) => item.key)).toEqual(['appoint_an_admin', 'appoint_an_owner', 'remove_from_chat']);
-    });
-
-    it('должен вернуть элементы с ключами из EDIT_CONTEXT_KEYS когда isAdmin = true', () => {
-      const result = getEditModeContextItems(mockContextItems, {
-        isOwnOwner: false,
-        isOwnAdmin: false,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(3);
-      expect(result.map((item) => item.key)).toEqual(['appoint_an_admin', 'appoint_an_owner', 'remove_from_chat']);
-    });
-  });
-
-  describe('краевые случаи', () => {
-    it('должен корректно обрабатывать пустой массив contextItems', () => {
-      const result = getEditModeContextItems([], {
-        isOwnOwner: true,
-        isOwnAdmin: false,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toEqual([]);
-    });
-
-    it('должен корректно обрабатывать отсутствие некоторых флагов', () => {
-      // @ts-ignore - тестируем отсутствие флагов
-      const result = getEditModeContextItems(mockContextItems, {
-        isAdmin: false,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(3);
-    });
-
-    it('должен фильтровать только по ключам, сохраняя остальные свойства элементов', () => {
-      const itemsWithLabels = [
-        { key: 'appoint_an_admin', label: 'Admin', onClick: jest.fn() },
-        { key: 'unknown_key', label: 'Unknown', onClick: jest.fn() },
-      ];
-
-      const result = getEditModeContextItems(itemsWithLabels, {
-        isOwnOwner: true,
-        isOwnAdmin: false,
-        isAdmin: true,
-        isOwner: false,
-      });
-
-      expect(result).toHaveLength(1);
-      expect(result[0]).toEqual(itemsWithLabels[0]);
-    });
-  });
-});
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/getDefaultContextItems.ts b/src/widgets/NoTradeChat/components/ParticipantsItem/utils/getDefaultContextItems.ts
deleted file mode 100644
index d020f54b6..000000000
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/getDefaultContextItems.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-const MEMBER_CONTEXT_KEYS = ['send_message', 'view_profile'];
-const OWN_ADMIN_KEYS = ['send_message', 'view_profile', 'remove_from_chat'];
-export function getDefaultContextItems(
-  contextItems: {
-    key: string;
-    label: string;
-    onClick: () => void;
-  }[],
-  {
-    isOwnOwner,
-    isOwnAdmin,
-    isAdmin,
-    isOwner,
-  }: { isOwnOwner?: boolean; isOwnAdmin?: boolean; isAdmin: boolean; isOwner: boolean },
-) {
-  if (isOwnOwner) {
-    return contextItems;
-  }
-
-  if ((isOwnAdmin && isAdmin) || (isOwner && isOwnAdmin) || (!isOwnOwner && !isOwnAdmin)) {
-    return contextItems.filter((el) => MEMBER_CONTEXT_KEYS.includes(el.key));
-  }
-
-  if (isOwnAdmin) {
-    return contextItems.filter((el) => OWN_ADMIN_KEYS.includes(el.key));
-  }
-
-  return contextItems;
-}
diff --git a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/getEditModeContextItems.ts b/src/widgets/NoTradeChat/components/ParticipantsItem/utils/getEditModeContextItems.ts
deleted file mode 100644
index 3a8e2f987..000000000
--- a/src/widgets/NoTradeChat/components/ParticipantsItem/utils/getEditModeContextItems.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-const EDIT_CONTEXT_KEYS = ['appoint_an_admin', 'appoint_an_owner', 'remove_from_chat'];
-export function getEditModeContextItems(
-  contextItems: {
-    key: string;
-    label: string;
-    onClick: () => void;
-  }[],
-  {
-    isOwnOwner,
-    isOwnAdmin,
-    isAdmin,
-    isOwner,
-  }: { isOwnOwner?: boolean; isOwnAdmin?: boolean; isAdmin: boolean; isOwner: boolean },
-) {
-  if (isOwnOwner) {
-    return contextItems.filter((el) => EDIT_CONTEXT_KEYS.includes(el.key));
-  }
-
-  if ((isOwnAdmin && isAdmin) || (isOwner && isOwnAdmin)) {
-    return [];
-  }
-
-  if (isOwnAdmin) {
-    return contextItems.filter((el) => ['remove_from_chat'].includes(el.key));
-  }
-
-  return contextItems.filter((el) => EDIT_CONTEXT_KEYS.includes(el.key));
-}
diff --git a/src/widgets/NoTradeChat/components/SentMessageStatus/SentMessageStatus.tsx b/src/widgets/NoTradeChat/components/SentMessageStatus/SentMessageStatus.tsx
index 784e94404..7be8e60e8 100644
--- a/src/widgets/NoTradeChat/components/SentMessageStatus/SentMessageStatus.tsx
+++ b/src/widgets/NoTradeChat/components/SentMessageStatus/SentMessageStatus.tsx
@@ -1,6 +1,6 @@
 import React, { FC } from 'react';
 
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 
 import styles from './SentMessageStatus.module.scss';
@@ -13,7 +13,7 @@ export const SentMessageStatus: FC<SentMessageStatusProps> = ({ status }) => {
   if (status === 'SENT') {
     return (
       <div className={styles.container}>
-        <IconDeprecated variant={IconVariants.MY_MESSAGE_STATE_SENT} />
+        <Icon variant={IconVariants.MY_MESSAGE_STATE_SENT} />
       </div>
     );
   }
@@ -21,7 +21,7 @@ export const SentMessageStatus: FC<SentMessageStatusProps> = ({ status }) => {
   if (status === 'READ') {
     return (
       <div className={styles.container}>
-        <IconDeprecated variant={IconVariants.MY_MESSAGE_STATE_DELIVERED} />
+        <Icon variant={IconVariants.MY_MESSAGE_STATE_DELIVERED} />
       </div>
     );
   }
diff --git a/src/widgets/OTCTurnover/content.tsx b/src/widgets/OTCTurnover/content.tsx
index 4e9e64e18..f09ea74a9 100644
--- a/src/widgets/OTCTurnover/content.tsx
+++ b/src/widgets/OTCTurnover/content.tsx
@@ -1,7 +1,7 @@
 import React, { useMemo } from 'react';
 
 import Chart from '@components/Chart';
-import { LegendOld } from '@components/LegendOld';
+import { Legend } from '@components/Legend';
 
 import { Filters, Table } from './components';
 import { VERTICAL_LINE_PLUGIN } from './components/Chart/tooltip';
@@ -34,7 +34,7 @@ export const OTCTurnoverContent = React.memo<OTCTurnoverContentProps>(({ widgetI
         />
       ) : (
         <>
-          <LegendOld
+          <Legend
             title="Объем торгов, млрд руб."
             label=""
             line={filters.formValues.pairs.map((item) => pairsMap[item]?.label ?? '')}
diff --git a/src/widgets/OrdersJournal/components/EmptyState/EmptyState.tsx b/src/widgets/OrdersJournal/components/EmptyState/EmptyState.tsx
index 799248a87..2cf2419c6 100644
--- a/src/widgets/OrdersJournal/components/EmptyState/EmptyState.tsx
+++ b/src/widgets/OrdersJournal/components/EmptyState/EmptyState.tsx
@@ -35,7 +35,7 @@ export const EmptyState = ({ isFiltersActive, resetFilters, widgetId }: EmptySta
       <EmptyData
         icon={<WarningSharpIcon className={styles['icon-warning']} />}
         title="Вы не подключены к терминалу СПФИ"
-        secondaryText="Для отображения данных вам необходимо авторизоваться в терминале СПФИ MOEX"
+        secondaryText="Для отображения данных вам необходимо авторизоваться в терминали СПФИ MOEX"
         className={styles.emptyState}
         btnText="Авторизоваться"
         onClickBtn={onClickBtn}
diff --git a/src/widgets/OrdersJournal/components/TicketForm/SelectContext.tsx b/src/widgets/OrdersJournal/components/TicketForm/SelectContext.tsx
deleted file mode 100644
index fe1a78464..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/SelectContext.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import React, { createContext, PropsWithChildren, useContext } from 'react';
-
-const SelectContext = createContext<HTMLDivElement | null>(null);
-
-type SelectContextProps = PropsWithChildren<{
-  inputsRef: HTMLDivElement | null;
-}>;
-
-export const SelectContextProvider = ({ inputsRef, children }: SelectContextProps) => (
-  <SelectContext.Provider value={inputsRef}>{children}</SelectContext.Provider>
-);
-
-export const useSelectContext = () => useContext(SelectContext);
diff --git a/src/widgets/OrdersJournal/components/TicketForm/TicketForm.module.scss b/src/widgets/OrdersJournal/components/TicketForm/TicketForm.module.scss
index c36c6f059..c291ddd18 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/TicketForm.module.scss
+++ b/src/widgets/OrdersJournal/components/TicketForm/TicketForm.module.scss
@@ -29,8 +29,7 @@ $footerHeight: 64px;
 }
 
 .informer {
-  padding: 8px 16px;
-  color: $text-interface-on-color
+  margin: 16px;
 }
 
 .label {
diff --git a/src/widgets/OrdersJournal/components/TicketForm/TicketForm.stories.tsx b/src/widgets/OrdersJournal/components/TicketForm/TicketForm.stories.tsx
new file mode 100644
index 000000000..c40fb4762
--- /dev/null
+++ b/src/widgets/OrdersJournal/components/TicketForm/TicketForm.stories.tsx
@@ -0,0 +1,24 @@
+import { Meta, StoryFn } from '@storybook/react';
+import React from 'react';
+
+import { mockOptions } from './mock';
+import { TicketForm } from './TicketForm';
+
+export default {
+  title: 'TicketForm',
+  component: TicketForm,
+} as Meta<typeof TicketForm>;
+
+const Template: StoryFn<typeof TicketForm> = (args) => (
+  <TicketForm
+    {...args}
+    // eslint-disable-next-line no-console -- добавлено в целях тестирования
+    onSubmit={(data) => console.log(data)}
+    requiredFields={['dealType', 'direction', 'amount1', 'currency', 'fixRate', 'index2']}
+    options={mockOptions}
+  />
+);
+
+export const Primary = Template.bind({});
+
+Primary.args = {};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/TicketForm.tsx b/src/widgets/OrdersJournal/components/TicketForm/TicketForm.tsx
index 352050d93..b0969f8e7 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/TicketForm.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/TicketForm.tsx
@@ -1,55 +1,41 @@
 import { Divider } from 'antd';
 import cn from 'classnames';
-import isEqual from 'lodash/isEqual';
 import isNil from 'lodash/isNil';
-import React, { FC, KeyboardEvent, useLayoutEffect, useMemo, useRef } from 'react';
+import React, { FC, KeyboardEvent, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
 import { SubmitErrorHandler, useFormContext } from 'react-hook-form';
 
 import { Informer } from '@components/Informer';
 import { LabeledHOC, LabeledHOCProps } from '@components/LabeledHOC';
 import { Button, IButton } from '@uikit/Button';
-import { OrderMetrics, TicketParams } from '@widgets/OrdersJournal/components/TicketModal/types';
+import { GetTicketOptionsParams, OrderMetrics } from '@widgets/OrdersJournal/components/TicketModal/types';
 
 import { getIsDraft } from '@widgets/OrdersJournal/components/TicketModal/utils/getIsDraft';
 import { TicketProduct, TicketType } from 'types/SapfirSpfi';
 
-import { SpfiDraftStatusLabels } from 'types/spfiDrafts';
-
 import { checkFormInputs } from '../TicketModal/utils/checkFormInputs';
 
-import { getDefaultCounterparty } from '../TicketModal/utils/getDefaultCounterparty';
 import { getDefaultIndex } from '../TicketModal/utils/getDefaultIndex';
-import { getIsBasisXCCYProduct } from '../TicketModal/utils/getIsBasisXCCYProduct';
-import { getIsIrsOisProduct } from '../TicketModal/utils/getIsIrsOisProduct';
-import { getIsXCCYProduct } from '../TicketModal/utils/getIsXCCYProduct';
 
 import { AdditionalPart } from './components/AdditionalPart';
-import {
-  getEffectiveConventionLabelName,
-  getTerminationConventionLabelName,
-} from './components/CalendarsAccordion/utils';
 import { CounterpartyPart } from './components/CounterpartyPart';
 import { DraftCounterpartyPart } from './components/DraftCounterpartyPart';
-import { FormDisabledField, FormSelect, FormTextArea } from './components/FormInputs';
+import { FormInput, FormSelect, FormSwitch, FormTextArea } from './components/FormInputs';
 import { FXSwapFormFields } from './components/FXSwapFormFields';
 import { IrsOisFormFields } from './components/IrsOisFormFields';
 import { NPVCalc } from './components/NPVCalc';
-import { PatternPart } from './components/PatternPart/PatternPart';
 import { PremiumPart } from './components/PremiumPart';
 import { XCCYFormFields } from './components/XCCYFormFields';
-import { INPUT_LABELS, INPUT_SUBLABELS, VALIDATION_ERROR_TEXT } from './const';
-import { SelectContextProvider } from './SelectContext';
+import { INPUT_LABELS, INPUT_SUBLABELS, PUBLIC_COUNTERPARTY_SEARCH, VALIDATION_ERROR_TEXT } from './const';
 import styles from './TicketForm.module.scss';
 
-import { BaseInputProps, HasPatternFields, SelectOptions, TicketFormInputs } from './types';
-import { handleChangeProduct, handleChangeTerm } from './utils/formHandlers';
+import { BaseInputProps, SelectOptions, TicketFormInputs, TradingMode } from './types';
+import { handleChangeProduct } from './utils/formHandlers';
 import { getActualRequiredFields } from './utils/getActualRequiredFields';
 import { getDefaultValuesFromOptions } from './utils/getDefaultValuesFromOptions';
 import { getHasSomeOption } from './utils/getHasSomeOption';
 import { getNewValue } from './utils/getNewValue';
 
 export type TicketFormProps = {
-  onAdditionalClick?: VoidFunction;
   onCancel?: VoidFunction;
   onSubmit?: (data: TicketFormInputs) => void;
   onInvalid?: SubmitErrorHandler<TicketFormInputs>;
@@ -57,7 +43,6 @@ export type TicketFormProps = {
   defaultValues?: Partial<TicketFormInputs>;
   requiredFields?: (keyof TicketFormInputs)[];
   disabledFields?: (keyof TicketFormInputs)[];
-  hasPatternFields: Readonly<HasPatternFields>;
   /** Мемоизировать перед передачей в компонент, т.к. используется в зависимостях useEffect */
   options: SelectOptions;
   /** Формат дат, используемых в форме */
@@ -72,17 +57,16 @@ export type TicketFormProps = {
   loading?: boolean;
   submitDisabled?: boolean;
   orderMetrics?: OrderMetrics;
-  ticketParams: TicketParams;
+  ticketType: TicketType;
+  pattern: GetTicketOptionsParams['pattern'];
 };
 
 export const TicketForm: FC<TicketFormProps> = ({
-  onAdditionalClick,
   onCancel,
   onSubmit,
   onInvalid,
   onCalc,
   options,
-  hasPatternFields,
   defaultValues,
   dateFormat,
   className,
@@ -95,23 +79,18 @@ export const TicketForm: FC<TicketFormProps> = ({
   submitDisabled,
   submitBtnProps,
   orderMetrics,
-  ticketParams,
+  ticketType,
+  pattern,
   ...props
 }) => {
-  const inputsRef = useRef<HTMLDivElement>(null);
   const prevOptions = useRef<typeof options>(options);
 
-  const { type: ticketType } = ticketParams;
-
   const { handleSubmit, reset, getValues, setValue, watch, formState } = useFormContext<TicketFormInputs>();
 
   const form = watch();
 
   const isDraft: boolean = getIsDraft(ticketType);
   const isOpenDraft: boolean = ticketType === TicketType.OpenDraft;
-  const isViewForm: boolean =
-    [TicketType.Accept, TicketType.Cancel].includes(ticketType) ||
-    (ticketType === TicketType.OpenDraft && !!ticketParams.draftId);
 
   const isFilledAllRequiredFields = useMemo(
     () => checkFormInputs(form, getActualRequiredFields(form, props.requiredFields)),
@@ -145,34 +124,43 @@ export const TicketForm: FC<TicketFormProps> = ({
     ...props,
   };
 
+  useEffect(() => {
+    if (!form.index2) {
+      setValue('term', null);
+    }
+  }, [form.index2, setValue]);
+
   const validationError = Object.keys(formState.errors).length ? VALIDATION_ERROR_TEXT : null;
   const errorText = validationError || error;
 
   /* Нужен для сброса значений селекторов, если их опции изменились */
   useLayoutEffect(() => {
-    if (!isEqual(options, prevOptions.current)) {
+    if (options !== prevOptions.current) {
       reset((prevForm: TicketFormInputs) => {
         const defaultValuesFromOptions = getDefaultValuesFromOptions(options, ticketType, defaultValues);
 
         const mergedDefaultValues = {
           ...defaultValues,
           ...defaultValuesFromOptions,
-          counterparty: getDefaultCounterparty(prevForm.tradingMode, defaultValues),
+          counterparty:
+            prevForm.tradingMode === TradingMode.Public ? PUBLIC_COUNTERPARTY_SEARCH : defaultValues?.counterparty,
           index: getDefaultIndex({
             rateType: prevForm.rateType,
             defaultIndexFromOptions: defaultValuesFromOptions.index,
             defaultIndex: defaultValues?.index,
-            fieldOptions: options.index,
           }),
           index2: getDefaultIndex({
             rateType: prevForm.rateType2,
             defaultIndexFromOptions: defaultValuesFromOptions.index2,
             defaultIndex: defaultValues?.index2,
-            fieldOptions: options.index2,
           }),
         };
 
-        const newDefaultValues = new Map(Object.entries(prevForm));
+        const newDefaultValues = new Map(
+          Object.entries({
+            ...prevForm,
+          }),
+        );
         Object.keys(options).forEach((key) => {
           const typedKey = key as keyof TicketFormInputs;
           const prevValue = prevForm[typedKey];
@@ -183,25 +171,6 @@ export const TicketForm: FC<TicketFormProps> = ({
             (isNil(prevValue) || newOption?.length === 1 || !getHasSomeOption(prevValue, newOption))
           ) {
             const newValue = getNewValue(mergedDefaultValues?.[typedKey], newOption);
-
-            if (typedKey === 'term') {
-              const effectiveConventionField = getEffectiveConventionLabelName(prevForm.rateType);
-              const terminationConventionField = getTerminationConventionLabelName(prevForm.rateType);
-
-              handleChangeTerm({
-                term: newValue as string | null,
-                effectiveDate: prevForm.effectiveDate,
-                product: prevForm.dealType,
-                currency: prevForm.currency,
-                currencyPair: prevForm.currencyPairs,
-                effectiveConvention:
-                  prevForm[effectiveConventionField] ?? mergedDefaultValues[effectiveConventionField],
-                terminationConvention:
-                  prevForm[terminationConventionField] ?? mergedDefaultValues[terminationConventionField],
-                noPatternOrder: prevForm.noPatternOrder ?? true,
-                setValue,
-              });
-            }
             // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- TODO Разобраться с типами
             // @ts-ignore
             newDefaultValues.set(typedKey, newValue);
@@ -212,168 +181,174 @@ export const TicketForm: FC<TicketFormProps> = ({
         return Object.fromEntries(newDefaultValues) as TicketFormInputs;
       });
     }
-  }, [defaultValues, options, reset, setValue, ticketType]);
+  }, [defaultValues, options, reset, ticketType]);
 
   return (
-    <SelectContextProvider inputsRef={inputsRef.current}>
-      <form
-        className={cn(styles.form, className)}
-        onSubmit={handleSubmit(onSubmitHandler, onInvalid)}
-        onKeyDown={handleKeyDown}
-      >
-        <PatternPart
-          disabled={isViewForm}
-          options={options}
-          hasPatternFields={hasPatternFields}
+    <form
+      className={cn(styles.form, className)}
+      onSubmit={handleSubmit(onSubmitHandler, onInvalid)}
+      onKeyDown={handleKeyDown}
+    >
+      {errorText && (
+        <Informer
+          variant="error"
+          text={errorText}
+          className={styles.informer}
         />
-        {errorText && (
-          <Informer
-            variant="error"
-            text={errorText}
-            className={styles.informer}
-          />
-        )}
-        <div
-          className={cn(styles.inputs, !!errorText && styles['inputs-isError'])}
-          ref={inputsRef}
-        >
-          {isDraft && (
-            <>
-              {isOpenDraft && (
-                <LabeledHOC {...getLabelProps('status')}>
-                  <FormDisabledField
-                    text={form.status && SpfiDraftStatusLabels[form.status]}
-                    {...inputProps}
-                  />
-                </LabeledHOC>
-              )}
-              <DraftCounterpartyPart
-                options={options}
-                inputProps={inputProps}
-                getLabelProps={getLabelProps}
-              />
-            </>
-          )}
-
-          <LabeledHOC {...getLabelProps('dealType')}>
-            <FormSelect
-              name="dealType"
-              placeholder="Выберите тип сделки"
-              options={options}
-              labelInValue
-              allowClear={false}
-              showSearch={false}
-              onChange={(newProduct) => handleChangeProduct({ product: newProduct as TicketProduct, setValue })}
-              {...inputProps}
-            />
-          </LabeledHOC>
-          <Divider className={styles.divider} />
-          {form.dealType === TicketProduct.FX_SWAP && (
-            <FXSwapFormFields
-              inputProps={inputProps}
-              getLabelProps={getLabelProps}
-              dateFormat={dateFormat}
-              options={options}
-              ticketType={ticketType}
-            />
-          )}
-          {getIsIrsOisProduct(form) && (
-            <IrsOisFormFields
-              inputProps={inputProps}
-              getLabelProps={getLabelProps}
-              dateFormat={dateFormat}
-              options={options}
-              ticketType={ticketType}
-            />
-          )}
-          {(getIsXCCYProduct(form) || getIsBasisXCCYProduct(form)) && (
-            <XCCYFormFields
-              inputProps={inputProps}
-              getLabelProps={getLabelProps}
-              dateFormat={dateFormat}
-              options={options}
-              ticketType={ticketType}
-            />
-          )}
-
-          {(getIsIrsOisProduct(form) || getIsXCCYProduct(form) || getIsBasisXCCYProduct(form)) && (
-            <AdditionalPart
-              options={options}
-              inputProps={inputProps}
-              getLabelProps={getLabelProps}
-              dateFormat={dateFormat}
-            />
-          )}
-
-          {!isDraft && (
-            <CounterpartyPart
+      )}
+      <div className={cn(styles.inputs, !!errorText && styles['inputs-isError'])}>
+        {isDraft && (
+          <>
+            {isOpenDraft && (
+              <LabeledHOC {...getLabelProps('status')}>
+                <FormInput
+                  name="status"
+                  {...inputProps}
+                />
+              </LabeledHOC>
+            )}
+            <DraftCounterpartyPart
               options={options}
               inputProps={inputProps}
               getLabelProps={getLabelProps}
-              defaultCounterparty={defaultValues?.counterparty}
             />
-          )}
+          </>
+        )}
 
-          <PremiumPart
+        <LabeledHOC {...getLabelProps('dealType')}>
+          <FormSelect
+            name="dealType"
+            placeholder="Выберите тип сделки"
+            options={options}
+            labelInValue
+            allowClear={false}
+            showSearch={false}
+            onChange={(newProduct) => handleChangeProduct({ product: newProduct as TicketProduct, setValue })}
+            {...inputProps}
+          />
+        </LabeledHOC>
+        <Divider className={styles.divider} />
+        {form.dealType === TicketProduct.FX_SWAP && (
+          <FXSwapFormFields
+            inputProps={inputProps}
+            getLabelProps={getLabelProps}
+            dateFormat={dateFormat}
+            options={options}
+            ticketType={ticketType}
+            pattern={pattern}
+          />
+        )}
+        {form.dealType === TicketProduct.IRS_OIS && (
+          <IrsOisFormFields
+            inputProps={inputProps}
+            getLabelProps={getLabelProps}
+            dateFormat={dateFormat}
             options={options}
+            ticketType={ticketType}
+            pattern={pattern}
+          />
+        )}
+        {form.dealType === TicketProduct.XCCY && (
+          <XCCYFormFields
             inputProps={inputProps}
             getLabelProps={getLabelProps}
-            defaultBroker={defaultValues?.broker}
             dateFormat={dateFormat}
+            options={options}
             ticketType={ticketType}
+            pattern={pattern}
           />
-          {!isDraft && (
-            <>
-              <Divider className={styles.divider} />
-              <NPVCalc
-                calcDisabled={!isFilledAllRequiredFields}
-                metrics={orderMetrics}
-                onCalc={() => onCalc?.(getValues())}
-              />
-            </>
-          )}
-          <Divider className={styles.divider} />
-          <LabeledHOC
-            {...getLabelProps('comment')}
-            labelClassName={styles['label-textarea']}
-          >
-            <FormTextArea
-              name="comment"
-              placeholder="Введите комментарий"
-              maxLength={30}
+        )}
+
+        <LabeledHOC
+          label={getLabelProps('noPatternOrder').label}
+          className={cn(getLabelProps('noPatternOrder').labelClassName, styles.spaceBetween)}
+        >
+          <div className={styles['inputsBlock-simple']}>
+            <FormSwitch
+              name="noPatternOrder"
               {...inputProps}
-              inputClassName={styles['input-textarea']}
-            />
-          </LabeledHOC>
-        </div>
-        <div className={styles.footer}>
-          {additionalText && (
-            <Button
-              className={styles.additionalText}
-              variant="filled-secondary"
-              text={additionalText}
-              onClick={onAdditionalClick}
-            />
-          )}
-          {cancelText && (
-            <Button
-              variant="filled-secondary"
-              text={cancelText}
-              onClick={onCancel}
             />
-          )}
-          {submitText && (
-            <Button
-              variant="filled-primary"
-              text={submitText}
-              type="submit"
-              disabled={isSubmitDisabled}
-              isLoading={loading}
-              {...submitBtnProps}
+          </div>
+        </LabeledHOC>
+
+        {(form.dealType === TicketProduct.XCCY || form.dealType === TicketProduct.IRS_OIS) && (
+          <AdditionalPart
+            options={options}
+            inputProps={inputProps}
+            getLabelProps={getLabelProps}
+            dateFormat={dateFormat}
+          />
+        )}
+
+        {!isDraft && (
+          <CounterpartyPart
+            options={options}
+            inputProps={inputProps}
+            getLabelProps={getLabelProps}
+            defaultCounterparty={defaultValues?.counterparty}
+          />
+        )}
+
+        <PremiumPart
+          options={options}
+          inputProps={inputProps}
+          getLabelProps={getLabelProps}
+          defaultBroker={defaultValues?.broker}
+          dateFormat={dateFormat}
+          ticketType={ticketType}
+        />
+        {!isDraft && (
+          <>
+            <Divider className={styles.divider} />
+            <NPVCalc
+              calcDisabled={!isFilledAllRequiredFields}
+              metrics={orderMetrics}
+              onCalc={() => onCalc?.(getValues())}
             />
-          )}
-        </div>
-      </form>
-    </SelectContextProvider>
+          </>
+        )}
+        <Divider className={styles.divider} />
+        <LabeledHOC
+          {...getLabelProps('comment')}
+          labelClassName={styles['label-textarea']}
+        >
+          <FormTextArea
+            name="comment"
+            placeholder="Введите комментарий"
+            maxLength={30}
+            {...inputProps}
+            inputClassName={styles['input-textarea']}
+          />
+        </LabeledHOC>
+      </div>
+      <div className={styles.footer}>
+        {additionalText && (
+          <Button
+            className={styles.additionalText}
+            variant="filled-secondary"
+            text={additionalText}
+            disabled
+            onClick={onCancel}
+          />
+        )}
+        {cancelText && (
+          <Button
+            variant="filled-secondary"
+            text={cancelText}
+            onClick={onCancel}
+          />
+        )}
+        {submitText && (
+          <Button
+            variant="filled-primary"
+            text={submitText}
+            type="submit"
+            disabled={isSubmitDisabled}
+            isLoading={loading}
+            {...submitBtnProps}
+          />
+        )}
+      </div>
+    </form>
   );
 };
diff --git a/src/widgets/OrdersJournal/components/TicketForm/__tests__/SelectContext.test.tsx b/src/widgets/OrdersJournal/components/TicketForm/__tests__/SelectContext.test.tsx
deleted file mode 100644
index 84b4138e5..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/__tests__/SelectContext.test.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import { render, screen } from '@testing-library/react';
-import React from 'react';
-
-import { SelectContextProvider, useSelectContext } from '../SelectContext';
-
-const TestComponent = () => {
-  const contextValue = useSelectContext();
-  return <div data-testid="context-value">{contextValue === null ? 'null' : 'has-value'}</div>;
-};
-
-describe('SelectContext', () => {
-  describe('SelectContextProvider', () => {
-    it('should render children', () => {
-      render(
-        <SelectContextProvider inputsRef={null}>
-          <div data-testid="child">Child Content</div>
-        </SelectContextProvider>,
-      );
-
-      expect(screen.getByTestId('child')).toBeInTheDocument();
-      expect(screen.getByText('Child Content')).toBeInTheDocument();
-    });
-
-    it('should provide null value when inputsRef is null', () => {
-      render(
-        <SelectContextProvider inputsRef={null}>
-          <TestComponent />
-        </SelectContextProvider>,
-      );
-
-      expect(screen.getByTestId('context-value')).toHaveTextContent('null');
-    });
-
-    it('should provide non-null value when inputsRef is provided', () => {
-      const mockRef = document.createElement('div');
-
-      render(
-        <SelectContextProvider inputsRef={mockRef}>
-          <TestComponent />
-        </SelectContextProvider>,
-      );
-
-      expect(screen.getByTestId('context-value')).toHaveTextContent('has-value');
-    });
-  });
-
-  describe('useSelectContext', () => {
-    it('should return null when used outside of provider', () => {
-      const consoleSpy = jest.spyOn(console, 'error').mockImplementation(jest.fn());
-
-      render(<TestComponent />);
-
-      expect(screen.getByTestId('context-value')).toHaveTextContent('null');
-
-      consoleSpy.mockRestore();
-    });
-
-    it('should return the same value as provided by provider', () => {
-      const mockRef = document.createElement('div');
-
-      render(
-        <SelectContextProvider inputsRef={mockRef}>
-          <TestComponent />
-        </SelectContextProvider>,
-      );
-
-      expect(screen.getByTestId('context-value')).toHaveTextContent('has-value');
-    });
-
-    it('should update when inputsRef changes', () => {
-      const { rerender } = render(
-        <SelectContextProvider inputsRef={null}>
-          <TestComponent />
-        </SelectContextProvider>,
-      );
-
-      expect(screen.getByTestId('context-value')).toHaveTextContent('null');
-
-      const mockRef = document.createElement('div');
-      rerender(
-        <SelectContextProvider inputsRef={mockRef}>
-          <TestComponent />
-        </SelectContextProvider>,
-      );
-
-      expect(screen.getByTestId('context-value')).toHaveTextContent('has-value');
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/CalendarsAccordion/CalendarsAccordion.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/CalendarsAccordion/CalendarsAccordion.tsx
index 9c28ae3bd..a9f6bf34f 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/CalendarsAccordion/CalendarsAccordion.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/CalendarsAccordion/CalendarsAccordion.tsx
@@ -6,11 +6,9 @@ import { LabeledHOC, LabeledHOCProps } from '@components/LabeledHOC';
 import { Accordion } from '@uikit/Accordion';
 import { AccordionItem } from '@uikit/Accordion/types';
 
-import { useTerm } from '../../hooks/useTerm';
 import styles from '../../TicketForm.module.scss';
 import { BaseInputProps, RateType, SelectOptions, TicketFormInputs } from '../../types';
 
-import { handleChangeEffectiveConvention, handleChangeTerminationConvention } from '../../utils/formHandlers';
 import { FormArray, FormSegmented } from '../FormInputs';
 
 import {
@@ -29,23 +27,8 @@ type AdditionalAccordionProps = {
 };
 
 export const CalendarsAccordion: FC<AdditionalAccordionProps> = ({ options, inputProps, getLabelProps }) => {
-  const { watch, setValue } = useFormContext<TicketFormInputs>();
-  const {
-    rateType,
-    rateType2,
-    effectiveDate,
-    term,
-    dealType,
-    currency,
-    currencyPairs: currencyPair,
-    fixedTerminationConvention1,
-    floatingTerminationConvention1,
-    noPatternOrder,
-  } = watch();
-
-  const { shortestTerm } = useTerm({
-    options,
-  });
+  const { watch } = useFormContext<TicketFormInputs>();
+  const { rateType, rateType2 } = watch();
 
   const items: AccordionItem[] = [
     {
@@ -94,42 +77,12 @@ export const CalendarsAccordion: FC<AdditionalAccordionProps> = ({ options, inpu
                 <FormSegmented
                   name="fixedEffectiveConvention1"
                   options={options}
-                  onChange={(newFixedEffectiveConvention1) =>
-                    handleChangeEffectiveConvention({
-                      effectiveDate,
-                      term,
-                      shortestTerm,
-                      product: dealType,
-                      currency,
-                      currencyPair,
-                      effectiveConvention: String(newFixedEffectiveConvention1),
-                      terminationConvention: fixedTerminationConvention1,
-                      noPatternOrder,
-                      termOptions: options.term,
-                      setValue,
-                    })
-                  }
                   {...inputProps}
                 />
               ) : (
                 <FormSegmented
                   name="floatingEffectiveConvention1"
                   options={options}
-                  onChange={(newFloatingEffectiveConvention1) =>
-                    handleChangeEffectiveConvention({
-                      effectiveDate,
-                      term,
-                      shortestTerm,
-                      product: dealType,
-                      currency,
-                      currencyPair,
-                      effectiveConvention: String(newFloatingEffectiveConvention1),
-                      terminationConvention: floatingTerminationConvention1,
-                      noPatternOrder,
-                      termOptions: options.term,
-                      setValue,
-                    })
-                  }
                   {...inputProps}
                 />
               )}
@@ -154,40 +107,12 @@ export const CalendarsAccordion: FC<AdditionalAccordionProps> = ({ options, inpu
                 <FormSegmented
                   name="fixedTerminationConvention1"
                   options={options}
-                  onChange={(newFixedTerminationConvention1) =>
-                    handleChangeTerminationConvention({
-                      effectiveDate,
-                      shortestTerm,
-                      product: dealType,
-                      currency,
-                      currencyPair,
-                      effectiveConvention: getEffectiveConventionLabelName(rateType),
-                      terminationConvention: String(newFixedTerminationConvention1),
-                      noPatternOrder,
-                      termOptions: options.term,
-                      setValue,
-                    })
-                  }
                   {...inputProps}
                 />
               ) : (
                 <FormSegmented
                   name="floatingTerminationConvention1"
                   options={options}
-                  onChange={(newFloatingTerminationConvention1) =>
-                    handleChangeTerminationConvention({
-                      effectiveDate,
-                      shortestTerm,
-                      product: dealType,
-                      currency,
-                      currencyPair,
-                      effectiveConvention: getEffectiveConventionLabelName(rateType),
-                      terminationConvention: String(newFloatingTerminationConvention1),
-                      noPatternOrder,
-                      termOptions: options.term,
-                      setValue,
-                    })
-                  }
                   {...inputProps}
                 />
               )}
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/CommonPart/CommonPart.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/CommonPart/CommonPart.tsx
index cd15ca8f3..8bcd65443 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/CommonPart/CommonPart.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/CommonPart/CommonPart.tsx
@@ -31,7 +31,6 @@ export const CommonPart: FC<CommonPartProps> = ({ getLabelProps, options, inputP
             suffix="%"
             placeholder="Введите ставку"
             decimalScale={4}
-            step={0.01}
             {...inputProps}
           />
           <FormInputNumber
@@ -41,7 +40,6 @@ export const CommonPart: FC<CommonPartProps> = ({ getLabelProps, options, inputP
             suffix="%"
             placeholder="Введите ставку"
             decimalScale={4}
-            step={0.01}
             {...inputProps}
           />
         </div>
@@ -72,7 +70,6 @@ export const CommonPart: FC<CommonPartProps> = ({ getLabelProps, options, inputP
             max={10000}
             placeholder="Спред (bp)"
             decimalScale={0}
-            step={1}
             {...inputProps}
           />
           <FormInputNumber
@@ -81,7 +78,6 @@ export const CommonPart: FC<CommonPartProps> = ({ getLabelProps, options, inputP
             max={10000}
             placeholder="Спред (bp)"
             decimalScale={0}
-            step={1}
             {...inputProps}
           />
         </div>
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/DraftCounterpartyPart/DraftCounterpartyPart.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/DraftCounterpartyPart/DraftCounterpartyPart.tsx
index 6185f0b3d..522c70e2e 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/DraftCounterpartyPart/DraftCounterpartyPart.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/DraftCounterpartyPart/DraftCounterpartyPart.tsx
@@ -36,7 +36,6 @@ export const DraftCounterpartyPart: FC<DraftCounterpartyPartProps> = ({ options,
             }}
             showSearch
             labelInValue
-            allowClear
             {...inputProps}
           />
         </div>
@@ -53,7 +52,6 @@ export const DraftCounterpartyPart: FC<DraftCounterpartyPartProps> = ({ options,
               }
             }}
             showSearch
-            allowClear
             labelInValue
             {...inputProps}
           />
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/FXSwapFormFields/FXSwapFormFields.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/FXSwapFormFields/FXSwapFormFields.tsx
index ff437a466..a410abcba 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/FXSwapFormFields/FXSwapFormFields.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/FXSwapFormFields/FXSwapFormFields.tsx
@@ -7,6 +7,7 @@ import { useFormContext } from 'react-hook-form';
 import { LabeledHOC, LabeledHOCProps } from '@components/LabeledHOC';
 import { TextRegular } from '@components/TextMad';
 import { DEFAULT_SWAP_POINTS } from '@widgets/OrdersJournal/components/TicketModal/const';
+import { GetTicketOptionsParams } from '@widgets/OrdersJournal/components/TicketModal/types';
 
 import { DealDirectionToLabel, TicketType } from 'types/SapfirSpfi';
 
@@ -35,6 +36,7 @@ type FXSwapFormFieldsProps = {
   options: SelectOptions;
   dateFormat?: string;
   ticketType: TicketType;
+  pattern: GetTicketOptionsParams['pattern'];
 };
 
 export const FXSwapFormFields = ({
@@ -43,6 +45,7 @@ export const FXSwapFormFields = ({
   dateFormat,
   options,
   ticketType,
+  pattern,
 }: FXSwapFormFieldsProps) => {
   const { setValue, watch, getValues } = useFormContext<TicketFormInputs>();
 
@@ -58,15 +61,12 @@ export const FXSwapFormFields = ({
     amount1,
   } = watch();
 
-  const currencyPairParams = useFetchCurrencyPairParams({ ticketType });
+  const currencyPairParams = useFetchCurrencyPairParams({ ticketType, pattern });
 
   useEffect(() => {
     if (currencyPairParams) {
       const newNearLegRate = currencyPairParams.rate1;
-
-      const currentSwapPoints = getValues('swapPoints');
-      const newSwapPoints =
-        currentSwapPoints || (currencyPairParams.rate2 - newNearLegRate) * COEFFICIENT_SWAP || DEFAULT_SWAP_POINTS;
+      const newSwapPoints = (currencyPairParams.rate2 - newNearLegRate) * COEFFICIENT_SWAP || DEFAULT_SWAP_POINTS;
       const newFarLegRate = newNearLegRate + newSwapPoints / COEFFICIENT_SWAP;
 
       setValue('amount1', currencyPairParams.ccy1amount1);
@@ -81,7 +81,7 @@ export const FXSwapFormFields = ({
       setValue('currency1', currencyPairParams.currency1);
       setValue('currency2', currencyPairParams.currency2);
     }
-  }, [currencyPairParams, setValue, getValues]);
+  }, [currencyPairParams, setValue]);
 
   const yeildRateSwop = useMemo(() => {
     if (swapPoints && nearLegRate && terminationDate && effectiveDate) {
@@ -107,7 +107,6 @@ export const FXSwapFormFields = ({
             options={options}
             showSearch={false}
             onChange={(newCurrencyPairs) => handleChangeCurrencyPair(newCurrencyPairs, setValue)}
-            labelInValue
             {...inputProps}
           />
         </div>
@@ -118,6 +117,7 @@ export const FXSwapFormFields = ({
         getLabelProps={getLabelProps}
         options={options}
         dateFormat={dateFormat}
+        pattern={pattern}
       />
       <LabeledHOC {...getLabelProps('swapPoints')}>
         <div className={styles['inputsBlock-primary']}>
@@ -127,7 +127,6 @@ export const FXSwapFormFields = ({
             min={-1000000}
             max={1000000}
             decimalScale={0}
-            step={1}
             onChange={(newSwapPoints) =>
               handleChangeSwapPoints({ nearLegRate, swapPoints: Number(newSwapPoints), amount1, setValue })
             }
@@ -155,7 +154,6 @@ export const FXSwapFormFields = ({
             min={-1e12}
             max={1e12}
             decimalScale={2}
-            step={1000000}
             onChange={(newAmount1) =>
               handleChangeAmount1({ nearLegRate, farLegRate, amount1: Number(newAmount1), setValue })
             }
@@ -166,7 +164,6 @@ export const FXSwapFormFields = ({
             placeholder="Введите сумму"
             min={-1e12}
             max={1e12}
-            step={1000000}
             decimalScale={2}
             {...inputProps}
           />
@@ -183,7 +180,6 @@ export const FXSwapFormFields = ({
             min={-1e12}
             max={1e12}
             decimalScale={2}
-            step={1000000}
             onChange={(newAmount2) =>
               handleChangeAmount2({ amount2: Number(newAmount2), amount1, swapPoints, setValue })
             }
@@ -195,7 +191,6 @@ export const FXSwapFormFields = ({
             min={-1e12}
             max={1e12}
             decimalScale={2}
-            step={1000000}
             {...inputProps}
           />
         </div>
@@ -207,7 +202,6 @@ export const FXSwapFormFields = ({
             placeholder="Введите сумму"
             allowNegative={false}
             decimalScale={(currencyPairs && RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP[currencyPairs]) || 4}
-            step={0.01}
             onChange={(newNearLegRate) =>
               handleChangeNearLegRate({ nearLegRate: Number(newNearLegRate), amount1, swapPoints, setValue })
             }
@@ -217,7 +211,6 @@ export const FXSwapFormFields = ({
             name="farLegRate"
             placeholder="Введите сумму"
             decimalScale={(currencyPairs && RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP[currencyPairs]) || 4}
-            step={0.01}
             {...inputProps}
           />
         </div>
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormInputNumber.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormInputNumber.tsx
index b0af0923c..c61317d8e 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormInputNumber.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormInputNumber.tsx
@@ -1,31 +1,44 @@
-import React, { FC } from 'react';
-import { NumericFormatProps } from 'react-number-format';
+import { InputProps } from 'antd';
+import React, { FC, useEffect, useState } from 'react';
+import { NumberFormatValues, NumericFormat, NumericFormatProps } from 'react-number-format';
 
-import { InputProps } from '@uikit/Input';
-
-import { getFormInputNumberResult, InputNumber } from '@uikit/InputNumber';
+import { InputMad, InputMadProps } from '@components/Input';
 
 import { useBaseInput } from '../../hooks/useBaseInput';
 
 import { FormInputProps } from '../../types';
 
+import { getFormInputNumberResult } from '../../utils/getFormInputNumberResult';
+import { getFormInputNumberValue } from '../../utils/getFormInputNumberValue';
+
 import { FormDisabledField } from './FormDisabledField';
+import styles from './index.module.scss';
 
 type FormInputNumberProps = FormInputProps &
   Pick<
     NumericFormatProps,
     'allowNegative' | 'allowedDecimalSeparators' | 'decimalScale' | 'decimalSeparator' | 'thousandSeparator'
   > &
-  Pick<InputProps, 'suffix' | 'min' | 'max' | 'step'> & {
+  Pick<InputProps, 'suffix' | 'min' | 'max'> & {
     onChange?: (value: string) => void;
   };
 
+const InputWithSuffix = ({
+  nativeSuffix,
+  ...restProps
+}: InputProps & { nativeSuffix?: InputMadProps['suffix'] }) => (
+  <InputMad
+    {...restProps}
+    suffix={nativeSuffix}
+    type="dark"
+  />
+);
+
 export const FormInputNumber: FC<FormInputNumberProps> = ({
   placeholder,
   inputClassName,
   min,
   max,
-  step,
   decimalScale = 2,
   decimalSeparator = ',',
   thousandSeparator = ' ',
@@ -37,34 +50,46 @@ export const FormInputNumber: FC<FormInputNumberProps> = ({
   ...useBaseInputProps
 }) => {
   const { field, disabled: inputDisabled, status } = useBaseInput(useBaseInputProps);
+  const [internalValue, setInternalValue] = useState(() => getFormInputNumberValue(field.value));
+
+  // решение проблемы с удалением нулей после запятой после стирания
+  // https://github.com/s-yadav/react-number-format/issues/835
+  useEffect(() => {
+    if (field.value !== Number(internalValue)) {
+      setInternalValue(getFormInputNumberValue(field.value));
+    }
+  }, [field.value, internalValue]);
+
+  const onChangeInternal = (value: NumberFormatValues) => {
+    setInternalValue(value.value);
+    field.onChange(value.floatValue || null);
+  };
 
   const onBlur = () => {
     // Ограничение ввода значений
-    const result = getFormInputNumberResult(String(field.value ?? ''), min, max);
+    const result = getFormInputNumberResult(field.value, min, max);
     // Изменяем значение
-    field.onChange(result ? Number(result) : null);
+    field.onChange(result);
     // Изменяем зависимые поля
     onInputNumberChange?.(result);
     field.onBlur();
   };
-
-  if (disabled || inputDisabled) {
-    return (
-      <FormDisabledField
-        text={
-          field.value && !Number.isNaN(field.value)
-            ? field.value.toLocaleString('ru-RU', { maximumFractionDigits: decimalScale })
-            : undefined
-        }
-        inputClassName={inputClassName}
-      />
-    );
-  }
-
-  return (
-    <InputNumber
-      {...field}
+  return disabled || inputDisabled ? (
+    <FormDisabledField
+      text={
+        internalValue && !Number.isNaN(Number(internalValue))
+          ? Number(internalValue).toLocaleString('ru-RU', { maximumFractionDigits: decimalScale })
+          : undefined
+      }
+      inputClassName={inputClassName}
+    />
+  ) : (
+    <NumericFormat
       disabled={inputDisabled || disabled}
+      customInput={InputWithSuffix}
+      value={internalValue}
+      name={field.name}
+      onValueChange={onChangeInternal}
       onBlur={onBlur}
       decimalScale={decimalScale}
       decimalSeparator={decimalSeparator}
@@ -72,10 +97,11 @@ export const FormInputNumber: FC<FormInputNumberProps> = ({
       thousandSeparator={thousandSeparator}
       allowNegative={allowNegative}
       status={status}
-      suffix={suffix}
+      nativeSuffix={suffix}
       placeholder={placeholder}
       className={inputClassName}
-      step={step}
+      rootClassName={styles.inputContainer}
+      autoComplete="off"
     />
   );
 };
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSegmented.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSegmented.tsx
index b6d1cbe6b..56b811d20 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSegmented.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSegmented.tsx
@@ -1,7 +1,7 @@
 import classNames from 'classnames';
 import React from 'react';
 
-import { Segmented, SegmentedProps } from '@uikit/Segmented';
+import { Segmented } from '@uikit/Segmented';
 
 import { useBaseInput } from '../../hooks/useBaseInput';
 import { FormSegmentedProps } from '../../types';
@@ -18,7 +18,6 @@ export const FormSegmented = ({
   disabledFields,
   disabled,
   sliceCount,
-  onChange: onSegmentedChange,
 }: FormSegmentedProps) => {
   const { field, disabled: segmentedDisabled } = useBaseInput({ disabledFields, name });
 
@@ -27,13 +26,6 @@ export const FormSegmented = ({
     sliceCount ?? (disabled || segmentedDisabled ? 0 : 3),
   );
 
-  const onChange: SegmentedProps['onChange'] = (value) => {
-    // Изменяем значение
-    field.onChange(value || null);
-    // Изменяем зависимые поля
-    onSegmentedChange?.(value);
-  };
-
   return segmentedDisabled || disabled || !segmentedOptions.length ? (
     <FormDisabledField
       text={segmentedOptions.find((option) => option.value === field.value)?.label}
@@ -46,7 +38,6 @@ export const FormSegmented = ({
       value={String(field.value)}
       options={segmentedOptions}
       className={classNames(styles.segmented, inputClassName)}
-      onChange={onChange}
       block
     />
   );
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSelect.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSelect.tsx
index 72823d366..c8c363221 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSelect.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/FormSelect.tsx
@@ -10,7 +10,6 @@ import { getOptionValue } from '@widgets/OrdersJournal/components/TicketModal/ut
 
 import { useAsyncSelect } from '../../hooks/useAsyncSelect';
 import { useBaseInput } from '../../hooks/useBaseInput';
-import { useSelectContext } from '../../SelectContext';
 import { FormSelectAsyncProps, FormSelectProps, FormSelectSimpleProps } from '../../types';
 
 import { convertOptionsToSelect } from '../../utils/convertOptionsToSelect';
@@ -64,11 +63,12 @@ const FormSelectSimple = ({
       values={selectOptions}
       showSearch={showSearch}
       popupClassName={styles.popupClassName}
-      onClearValue={() => field.onChange(null)}
+      onClearValue={field.onChange}
       className={inputClassName}
       disableEmbeddedSearch={false}
       alwaysShowSearch={showSearch}
       labelInValue={labelInValue}
+      allowClear={false}
     />
   );
 };
@@ -88,11 +88,11 @@ const FormSelectAsync = ({
 
   const withAsyncSearch = getOptions.length > 0;
 
-  const onChange = (value: string | null) => {
+  const onChange = (value: string) => {
     // Изменяем значение
     field.onChange(value);
     // Изменяем зависимые поля
-    onSelectChange?.(value ?? '');
+    onSelectChange?.(value);
   };
 
   if (disabled) {
@@ -107,7 +107,8 @@ const FormSelectAsync = ({
   return (
     <Select
       {...inputProps}
-      defaultValue={field.value ? String(field.value) : null}
+      defaultValue={field.value ? String(field.value) : undefined}
+      defaultSearch={field.value ? String(field.value) : undefined}
       value={field.value ? String(field.value) : ''}
       selectPlaceholder={placeholder}
       onChange={onChange}
@@ -116,7 +117,7 @@ const FormSelectAsync = ({
       isLoading={loading}
       values={data}
       popupClassName={styles.popupClassName}
-      onClearValue={() => onChange?.(null)}
+      onClearValue={field.onChange}
       className={inputClassName}
       onScrolledToBottom={loadMore}
       onChangedSearchValue={handleSearch}
@@ -124,6 +125,7 @@ const FormSelectAsync = ({
       disableEmbeddedSearch={withAsyncSearch}
       alwaysShowSearch={showSearch && withAsyncSearch}
       labelInValue={labelInValue}
+      allowClear={false}
     />
   );
 };
@@ -134,7 +136,7 @@ export const FormSelect = ({
   inputClassName,
   disabled,
   name,
-  allowClear = false,
+  allowClear = true,
   showSearch,
   labelInValue,
   fetchOnVisible,
@@ -146,8 +148,6 @@ export const FormSelect = ({
 
   const { disabled: inputDisabled, field, status } = useBaseInput({ ...useBaseInputProps, name });
 
-  const inputsRef = useSelectContext();
-
   const selectProps: Omit<FormSelectSimpleProps, 'options'> = {
     placeholder,
     disabled: disabled || inputDisabled,
@@ -156,8 +156,6 @@ export const FormSelect = ({
     showSearch,
     field,
     status,
-    hideDropdownonScroll: true,
-    container: inputsRef,
   };
 
   if (isAsyncOptions) {
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/index.ts b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/index.ts
index 0f66501f8..2dfcc8b4a 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/index.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/FormInputs/index.ts
@@ -8,4 +8,3 @@ export * from './FormInputNumber';
 export * from './FormRadio';
 export * from './FormSwitch';
 export * from './FormArray';
-export * from './FormDisabledField';
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/IrsOisFormFields/IrsOisFormFields.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/IrsOisFormFields/IrsOisFormFields.tsx
index cd0042a2b..b655170ba 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/IrsOisFormFields/IrsOisFormFields.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/IrsOisFormFields/IrsOisFormFields.tsx
@@ -7,6 +7,8 @@ import { useFormContext } from 'react-hook-form';
 import { LabeledHOC, LabeledHOCProps } from '@components/LabeledHOC';
 import { TextRegular } from '@components/TextMad';
 
+import { GetTicketOptionsParams } from '@widgets/OrdersJournal/components/TicketModal/types';
+
 import { DealDirectionToLabel, TicketType } from 'types/SapfirSpfi';
 
 import { SEGMENTED_OPTIONS } from '../../const';
@@ -24,9 +26,16 @@ type IrsOisFormFieldsProps = {
   options: SelectOptions;
   dateFormat?: string;
   ticketType: TicketType;
+  pattern: GetTicketOptionsParams['pattern'];
 };
 
-export const IrsOisFormFields: FC<IrsOisFormFieldsProps> = ({ inputProps, getLabelProps, dateFormat, options }) => {
+export const IrsOisFormFields: FC<IrsOisFormFieldsProps> = ({
+  inputProps,
+  getLabelProps,
+  dateFormat,
+  options,
+  pattern,
+}) => {
   const { setValue, getValues } = useFormContext<TicketFormInputs>();
 
   return (
@@ -44,8 +53,9 @@ export const IrsOisFormFields: FC<IrsOisFormFieldsProps> = ({ inputProps, getLab
             placeholder="Выберите валюту"
             options={options}
             showSearch={false}
-            onChange={() =>
+            onChange={(currency) =>
               handleChangeCurrency({
+                currency,
                 setValue,
               })
             }
@@ -60,7 +70,6 @@ export const IrsOisFormFields: FC<IrsOisFormFieldsProps> = ({ inputProps, getLab
             placeholder="Введите сумму"
             min={-1e12}
             max={1e12}
-            step={1000000}
             decimalScale={2}
             {...inputProps}
           />
@@ -72,6 +81,7 @@ export const IrsOisFormFields: FC<IrsOisFormFieldsProps> = ({ inputProps, getLab
         getLabelProps={getLabelProps}
         options={options}
         dateFormat={dateFormat}
+        pattern={pattern}
       />
 
       <div className={classNames(styles['inputsBlock-secondary'], styles.titles)}>
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/PatternPart.module.scss b/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/PatternPart.module.scss
deleted file mode 100644
index 658f65854..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/PatternPart.module.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-@import 'colors.scss';
-@import 'mixins.module.scss';
-
-.container {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  box-sizing: border-box;
-
-  background: #27ef0085;
-  color: $text-interface-on-color;
-  height: 40px;
-  max-height: 40px;
-  min-height: 40px;
-  padding: 4px 16px;
-
-  @include font-params(400, 12px, 14px);
-
-  &__noPattern {
-    background: $surface-informer-alert-header-website-inform;
-  }
-}
-
-.orderType {
-  display: flex;
-  align-items: center;
-  gap: 16px;
-}
-
-.action {
-  display: flex;
-  align-items: center;
-  gap: 16px;
-}
-
-.icon {
-  width: 16px;
-  height: 16px;
-}
-
-.tooltipTitle {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-
-  @include font-params(400, 12px, 16px);
-}
\ No newline at end of file
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/PatternPart.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/PatternPart.tsx
deleted file mode 100644
index e3d7e5619..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/PatternPart.tsx
+++ /dev/null
@@ -1,229 +0,0 @@
-import cn from 'classnames';
-import isEqual from 'lodash/isEqual';
-import isNil from 'lodash/isNil';
-import React, { FC, useEffect, useRef, useState } from 'react';
-import { useFormContext } from 'react-hook-form';
-
-import { Button } from '@uikit/Button';
-import { IconDeprecated } from '@uikit/Icon';
-import { IconVariants } from '@uikit/Icon/types';
-import Tooltip from '@uikit/Tooltip';
-
-import { getIsBasisXCCYProduct } from '@widgets/OrdersJournal/components/TicketModal/utils/getIsBasisXCCYProduct';
-
-import { useTerm } from '../../hooks/useTerm';
-import { HasPatternFields, SelectOptions, TicketFormInputs } from '../../types';
-
-import { doPatternFieldValueIsNoPatternBecauseFilled } from '../../utils/doPatternFieldValueIsNoPatternBecauseFilled';
-// eslint-disable-next-line max-len -- Преттиером не исправляется
-import { doPatternFieldValueIsNoPatternBecauseNoPatternValue } from '../../utils/doPatternFieldValueIsNoPatternBecauseNoPatternValue';
-// eslint-disable-next-line max-len -- Преттиером не исправляется
-import { doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern } from '../../utils/doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern';
-import { getBaseSencitiveFieldsForOptions } from '../../utils/getBaseSencitiveFieldsForOptions';
-
-import { getFieldOptionIsPattern } from '../../utils/getFieldOptionIsPattern';
-
-import { getFieldsAreNoPatternBecauseNoPatternValue } from '../../utils/getFieldsAreNoPatternBecauseNoPatternValue';
-import { getFieldValueIsNoPatternBecauseFilled } from '../../utils/getFieldValueIsNoPatternBecauseFilled';
-import { getHasPatternValues } from '../../utils/getHasPatternValues';
-
-import { getIsAllSensitiveFieldsFilledPattern } from '../../utils/getIsAllSensitiveFieldsFilledPattern';
-import { getisFirstIteration } from '../../utils/getisFirstIteration';
-import { getNoCheckDependent } from '../../utils/getNoCheckDependent';
-import { getNoCheckDependentFields } from '../../utils/getNoCheckDependentFields';
-
-import styles from './PatternPart.module.scss';
-
-type PatternPartProps = {
-  disabled?: boolean;
-  options: SelectOptions;
-  hasPatternFields: Readonly<HasPatternFields>;
-};
-export const PatternPart: FC<PatternPartProps> = ({ disabled, options, hasPatternFields }) => {
-  const { watch, setValue, getValues } = useFormContext<TicketFormInputs>();
-
-  const stepForPatternRef = useRef(0);
-  const [mustPattern, setMustPattern] = useState(false);
-
-  const form = watch();
-  const hasPatternValuesRef = useRef(getHasPatternValues({ hasPatternFields, form }));
-  const prevOptionsRef = useRef(options);
-
-  const { shortestTerm } = useTerm({ options });
-
-  // noPatternOrder - расчетное поле. Вычисляется оно только в этом useEffect и устанавливается в form
-  // исключительно для удобного доступа на чтение из других частей приложения
-  useEffect(() => {
-    const hasPatternValues = getHasPatternValues({ hasPatternFields, form });
-    // Если значения для проверки не изменились, то noPatternOrder не требует вычисления
-    if (isEqual(hasPatternValuesRef.current, hasPatternValues) && isEqual(prevOptionsRef.current, options)) {
-      return;
-    }
-
-    hasPatternValuesRef.current = hasPatternValues;
-    prevOptionsRef.current = options;
-
-    const typedKeys = Object.keys(hasPatternValues) as (keyof TicketFormInputs)[];
-    const newNoPatternOrder = typedKeys.some((field) => {
-      const fieldFlags = hasPatternFields[field];
-      const fieldValue = hasPatternValues[field];
-
-      // Если шаблонность определяется из опций, то их и проверяем
-
-      if (fieldFlags?.fromOptions) {
-        return !getFieldOptionIsPattern(
-          hasPatternValues[field],
-          options[field],
-          getNoCheckDependent({ field, fieldValue, form, options }),
-        );
-      }
-      // Если шаблонный (noPatternOrder = false) определяется по заполненности, то такой кейс пока не обрабатываем
-      // Если нешаблонный (noPatternOrder = true) определяется по заполненности, то проверяем заполненность
-      if (fieldFlags?.filledIsNoPattern) {
-        return !!fieldValue;
-      }
-      // Если шаблонный ордер (noPatternOrder = false) определяется по конкретному значению, то проверяем значение
-      if (!isNil(fieldFlags?.patternValue)) {
-        return fieldFlags.patternValue !== form[field];
-      }
-      // По умолчанию ордер шаблонный
-      return false;
-    });
-
-    setValue('noPatternOrder', newNoPatternOrder);
-  }, [form, hasPatternFields, options, setValue]);
-
-  useEffect(() => {
-    setMustPattern((prevMustPattern) => {
-      const currentSencitiveOptionsFields: (keyof TicketFormInputs)[] = getBaseSencitiveFieldsForOptions(form);
-      const sencitiveFieldsAreNoPatternBecauseOptionIsNoPattern: (keyof TicketFormInputs)[] =
-        currentSencitiveOptionsFields.filter((field) => !getFieldOptionIsPattern(form[field], options[field]));
-
-      if (prevMustPattern && form.noPatternOrder) {
-        const typedKeys = Object.keys(hasPatternFields) as (keyof TicketFormInputs)[];
-        const hasPatternValues = getHasPatternValues({ hasPatternFields, form });
-
-        const fieldsAreNoPatternBecauseFilled = typedKeys.filter((field) =>
-          getFieldValueIsNoPatternBecauseFilled(hasPatternFields[field], hasPatternValues[field]),
-        );
-        const fieldsAreNoPatternBecauseNoPatternValue = typedKeys.filter((field) =>
-          getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFields[field], hasPatternValues[field]),
-        );
-
-        // В первой итерации делаем шаблонными те поля, которые можем точно установить в шаблонные значения:
-        // 1) значения с filledIsNoPattern
-        // 2) значения с patternValue
-        if (
-          getisFirstIteration(
-            stepForPatternRef.current,
-            fieldsAreNoPatternBecauseFilled,
-            fieldsAreNoPatternBecauseNoPatternValue,
-          )
-        ) {
-          // 1) значения с filledIsNoPattern
-          doPatternFieldValueIsNoPatternBecauseFilled(fieldsAreNoPatternBecauseFilled, setValue);
-
-          // 2) значения с patternValue
-          doPatternFieldValueIsNoPatternBecauseNoPatternValue({
-            fields: fieldsAreNoPatternBecauseNoPatternValue,
-            hasPatternFields,
-            shortestTerm,
-            options,
-            setValue,
-            getValues,
-          });
-        }
-
-        // Во всех итерациях пытаемся сделать шаблонными те поля, которые можем:
-        // 3) значения с fromOptions, НО ТОЛЬКО для чувствительных полей (от которых зависят все опции)
-        doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern(
-          sencitiveFieldsAreNoPatternBecauseOptionIsNoPattern,
-          options,
-          setValue,
-        );
-
-        // Если все чувствительные опции - шаблонные,
-        // то можно устанавливать остальные значения с опциями в шаблонные параметры
-        if (!sencitiveFieldsAreNoPatternBecauseOptionIsNoPattern.length) {
-          // Для выбора оставшихся полей опций исключаем все ранее обработанные поля
-          const otherFieldsAreNoPatternBecauseOptionIsNoPattern: (keyof TicketFormInputs)[] = typedKeys.filter(
-            (field) =>
-              // Исключаем ранее обработанные заполненные поля
-              !fieldsAreNoPatternBecauseFilled.includes(field) &&
-              // Исключаем ранее обработанные поля заполненные нешаблонными значениями
-              !fieldsAreNoPatternBecauseNoPatternValue.includes(field) &&
-              // Исключаем ранее обработанные чувствительные поля
-              !sencitiveFieldsAreNoPatternBecauseOptionIsNoPattern.includes(field) &&
-              // Исключаем поля с шаблонными значениями (которые не нужно исправлять)
-              !getFieldOptionIsPattern(form[field], options[field]) &&
-              // Исключаем зависимые поля, если их не нужно исправлять
-              !getNoCheckDependentFields(form, options).includes(field),
-          );
-          doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern(
-            otherFieldsAreNoPatternBecauseOptionIsNoPattern,
-            options,
-            setValue,
-          );
-        }
-      }
-
-      // Если ордер уже шаблонный, то нужно выставить mustPattern в false
-      if (
-        getIsAllSensitiveFieldsFilledPattern(
-          prevMustPattern,
-          sencitiveFieldsAreNoPatternBecauseOptionIsNoPattern,
-          form.noPatternOrder,
-        )
-      ) {
-        // обнуляем счетчик шагов
-        stepForPatternRef.current = 0;
-        // Устанавливаем mustPattern = false
-        return false;
-      }
-      if (prevMustPattern) {
-        stepForPatternRef.current += 1;
-      }
-      return prevMustPattern;
-    });
-  }, [form, getValues, hasPatternFields, mustPattern, options, setValue, shortestTerm]);
-
-  const noPatternTitle = form.noPatternOrder ? 'Нешаблонный' : 'Шаблонный';
-
-  return (
-    <div className={cn(styles.container, form.noPatternOrder && styles.container__noPattern)}>
-      <div className={styles.orderType}>
-        Тип ордера
-        <Tooltip
-          title={
-            <div className={styles.tooltipTitle}>
-              <div>Шаблонные ордера стандартизированы и могут быть опубликаваны</div>
-              <div>одновременно в стакане заявок СПФИ и журнале ордеров.</div>
-              <div>Нешаблонные ордера будут опубликованы только в журнале ордеров.</div>
-            </div>
-          }
-        >
-          <IconDeprecated
-            className={styles.icon}
-            variant={IconVariants.INFO_OUTLINED}
-          />
-        </Tooltip>
-      </div>
-      <div className={styles.action}>
-        {noPatternTitle}
-        {form.noPatternOrder && !disabled && (
-          <Button
-            variant="filled-primary"
-            text="Сделать шаблонным"
-            size="S"
-            isLoading={mustPattern}
-            disabled={getIsBasisXCCYProduct(form)}
-            onClick={() => {
-              setMustPattern(true);
-              stepForPatternRef.current = 1;
-            }}
-          />
-        )}
-      </div>
-    </div>
-  );
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/index.ts b/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/index.ts
deleted file mode 100644
index ec30af44e..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/components/PatternPart/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { PatternPart } from './PatternPart';
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/TermPart/TermPart.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/TermPart/TermPart.tsx
index b32e2a2cd..4a73060e4 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/TermPart/TermPart.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/TermPart/TermPart.tsx
@@ -6,14 +6,13 @@ import { useFormContext } from 'react-hook-form';
 
 import { LabeledHOC, LabeledHOCProps } from '@components/LabeledHOC';
 
-import { DefaultOption } from '@widgets/OrdersJournal/components/TicketModal/types';
+import { GetTicketOptionsParams } from '@widgets/OrdersJournal/components/TicketModal/types';
 
-import { getOptionValue } from '@widgets/OrdersJournal/components/TicketModal/utils/getOptionValue';
+import { getIsNoPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
 
-import { CUSTOM_TERM_PATTERN } from '../../const';
 import { useTerm } from '../../hooks/useTerm';
 import styles from '../../TicketForm.module.scss';
-import { BaseInputProps, RateType, SelectOptions, TicketFormInputs } from '../../types';
+import { BaseInputProps, SelectOptions, TicketFormInputs } from '../../types';
 import { handleChangeEffectiveDate, handleChangeTerm, handleChangeTerminationDate } from '../../utils/formHandlers';
 import { FormDatePicker, FormSelect } from '../FormInputs';
 
@@ -23,40 +22,23 @@ type TermPartProps = {
   options: SelectOptions;
 
   dateFormat?: string;
+  pattern: GetTicketOptionsParams['pattern'];
 };
 
-export const TermPart: FC<TermPartProps> = memo(({ getLabelProps, options, inputProps, dateFormat }) => {
+export const TermPart: FC<TermPartProps> = memo(({ getLabelProps, options, inputProps, dateFormat, pattern }) => {
   const { setValue, watch } = useFormContext<TicketFormInputs>();
-  const {
-    effectiveDate,
-    terminationDate,
-    term,
-    dealType,
-    currency,
-    currencyPairs: currencyPair,
-    rateType,
-    fixedEffectiveConvention1,
-    floatingEffectiveConvention1,
-    fixedTerminationConvention1,
-    floatingTerminationConvention1,
-    noPatternOrder,
-  } = watch();
+  const { effectiveDate, terminationDate, term } = watch();
 
   const { shortestTerm, longestTerm, getIsDisabledEffectiveDate, getIsDisabledTerminationDate } = useTerm({
     options,
   });
 
   useEffect(() => {
-    if (
-      effectiveDate &&
-      terminationDate &&
-      (!term || !(options?.term as DefaultOption[])?.some((option) => getOptionValue(option) === term)) &&
-      noPatternOrder
-    ) {
+    if (effectiveDate && terminationDate && !term && getIsNoPatternOrder(pattern)) {
       const diff = dayjs(terminationDate).diff(effectiveDate, 'day');
-      setValue('term', `${diff}${CUSTOM_TERM_PATTERN}`);
+      setValue('term', `${diff}D`);
     }
-  }, [effectiveDate, noPatternOrder, setValue, term, terminationDate, options?.term]);
+  }, [effectiveDate, pattern, setValue, term, terminationDate]);
 
   return (
     <>
@@ -67,20 +49,13 @@ export const TermPart: FC<TermPartProps> = memo(({ getLabelProps, options, input
             placeholder="Выберите дату"
             dateFormat={dateFormat}
             disabledDate={getIsDisabledEffectiveDate}
-            onChange={(newEffectivDate) =>
+            onChange={(date) =>
               handleChangeEffectiveDate({
-                effectiveDate: newEffectivDate,
-                term,
+                effectiveDate: date,
+                terminationDate,
+                pattern,
                 shortestTerm,
-                product: dealType,
-                currency,
-                currencyPair,
-                effectiveConvention:
-                  rateType === RateType.FIXED ? fixedEffectiveConvention1 : floatingEffectiveConvention1,
-                terminationConvention:
-                  rateType === RateType.FIXED ? fixedTerminationConvention1 : floatingTerminationConvention1,
-                noPatternOrder,
-                termOptions: options.term,
+                longestTerm,
                 setValue,
               })
             }
@@ -99,14 +74,8 @@ export const TermPart: FC<TermPartProps> = memo(({ getLabelProps, options, input
               handleChangeTerminationDate({
                 effectiveDate,
                 terminationDate: date,
-                shortestTerm,
+                pattern,
                 longestTerm,
-                product: dealType,
-                currency,
-                currencyPair,
-                terminationConvention:
-                  rateType === RateType.FIXED ? fixedTerminationConvention1 : floatingTerminationConvention1,
-                noPatternOrder,
                 setValue,
               })
             }
@@ -121,21 +90,7 @@ export const TermPart: FC<TermPartProps> = memo(({ getLabelProps, options, input
             placeholder="Выберите срок"
             options={options}
             showSearch={false}
-            onChange={(newTerm) =>
-              handleChangeTerm({
-                term: newTerm,
-                effectiveDate,
-                product: dealType,
-                currency,
-                currencyPair,
-                effectiveConvention:
-                  rateType === RateType.FIXED ? fixedEffectiveConvention1 : floatingEffectiveConvention1,
-                terminationConvention:
-                  rateType === RateType.FIXED ? fixedTerminationConvention1 : floatingTerminationConvention1,
-                noPatternOrder,
-                setValue,
-              })
-            }
+            onChange={(newTerm) => handleChangeTerm({ term: newTerm, effectiveDate, pattern, setValue })}
             {...inputProps}
           />
         </div>
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/XCCYFormFields.tsx b/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/XCCYFormFields.tsx
index 751eb94f3..2ff3ef747 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/XCCYFormFields.tsx
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/XCCYFormFields.tsx
@@ -6,12 +6,13 @@ import { useFormContext } from 'react-hook-form';
 import { LabeledHOC, LabeledHOCProps } from '@components/LabeledHOC';
 import { TextRegular } from '@components/TextMad';
 import { getDirectionLabel } from '@utils/spfi/getDirectionLabel';
+import { GetTicketOptionsParams } from '@widgets/OrdersJournal/components/TicketModal/types';
 
 import { EMPTY_FILLER } from '@widgets/OrdersJournal/constants';
 
 import { TicketType } from 'types/SapfirSpfi';
 
-import { CURRENCY_PAIR_DIVIDER, RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP } from '../../const';
+import { RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP } from '../../const';
 import { useFetchCurrencyPairParams } from '../../hooks/useFetchCurrencyPairParams';
 import styles from '../../TicketForm.module.scss';
 import { BaseInputProps, RateType, SelectOptions, TicketFormInputs } from '../../types';
@@ -39,6 +40,7 @@ type XCCYFormFieldsProps = {
   options: SelectOptions;
   dateFormat?: string;
   ticketType: TicketType;
+  pattern: GetTicketOptionsParams['pattern'];
 };
 
 export const XCCYFormFields: FC<XCCYFormFieldsProps> = ({
@@ -47,12 +49,13 @@ export const XCCYFormFields: FC<XCCYFormFieldsProps> = ({
   dateFormat,
   options,
   ticketType,
+  pattern,
 }) => {
   const { setValue, watch, getValues } = useFormContext<TicketFormInputs>();
   const { currencyPairs, nearLegRate, rateType, rateType2, amount1 } = watch();
-  const [currency1 = EMPTY_FILLER, currency2 = EMPTY_FILLER] = (currencyPairs ?? '').split(CURRENCY_PAIR_DIVIDER);
+  const [currency1 = EMPTY_FILLER, currency2 = EMPTY_FILLER] = (currencyPairs ?? '').split('/');
 
-  const currencyPairParams = useFetchCurrencyPairParams({ ticketType });
+  const currencyPairParams = useFetchCurrencyPairParams({ ticketType, pattern });
 
   useEffect(() => {
     if (currencyPairParams) {
@@ -83,7 +86,6 @@ export const XCCYFormFields: FC<XCCYFormFieldsProps> = ({
             options={options}
             showSearch={false}
             onChange={(newCurrencyPair) => handleChangeCurrencyPair(newCurrencyPair, setValue)}
-            labelInValue
             {...inputProps}
           />
         </div>
@@ -95,7 +97,6 @@ export const XCCYFormFields: FC<XCCYFormFieldsProps> = ({
             min={0}
             max={1000000}
             decimalScale={(currencyPairs && RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP[currencyPairs]) || 4}
-            step={1}
             onChange={(newNearLegRate) =>
               handleChangNearLegRate({ nearLegRate: Number(newNearLegRate), amount1, setValue })
             }
@@ -111,6 +112,7 @@ export const XCCYFormFields: FC<XCCYFormFieldsProps> = ({
         getLabelProps={getLabelProps}
         options={options}
         dateFormat={dateFormat}
+        pattern={pattern}
       />
 
       <div className={classNames(styles['inputsBlock-secondary'], styles.titles)}>
@@ -143,7 +145,6 @@ export const XCCYFormFields: FC<XCCYFormFieldsProps> = ({
             min={-1e12}
             max={1e12}
             decimalScale={2}
-            step={1000000}
             onChange={(newAmount1) => handleChangeAmount1({ nearLegRate, amount1: Number(newAmount1), setValue })}
             {...inputProps}
           />
@@ -153,7 +154,6 @@ export const XCCYFormFields: FC<XCCYFormFieldsProps> = ({
             min={-1e12}
             max={1e12}
             decimalScale={2}
-            step={1000000}
             onChange={(newAmount2) => handleChangeAmount2({ amount2: Number(newAmount2), nearLegRate, setValue })}
             {...inputProps}
           />
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/XCCYFormHandlers.ts b/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/XCCYFormHandlers.ts
index f5843b4ba..9d85c8fe6 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/XCCYFormHandlers.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/XCCYFormHandlers.ts
@@ -1,7 +1,6 @@
 import isNil from 'lodash/isNil';
 import { UseFormSetValue } from 'react-hook-form';
 
-import { CURRENCY_PAIR_DIVIDER } from '../../../const';
 import { OptionalNumber, TicketFormInputs } from '../../../types';
 
 type HandleChangeAmount1Props = {
@@ -42,7 +41,7 @@ export const handleChangeCurrencyPair = (
   setValue: UseFormSetValue<TicketFormInputs>,
 ) => {
   if (currencyPairs) {
-    const [currencyFromPairs1, currencyFromPairs2] = currencyPairs?.split(CURRENCY_PAIR_DIVIDER) ?? [];
+    const [currencyFromPairs1, currencyFromPairs2] = currencyPairs?.split('/') ?? [];
     setValue('currency1', currencyFromPairs1);
     setValue('currency2', currencyFromPairs2);
   } else {
diff --git a/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/__tests__/XCCYFormHandlers.test.ts b/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/__tests__/XCCYFormHandlers.test.ts
index 191227b2e..7f3d05e1a 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/__tests__/XCCYFormHandlers.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/components/XCCYFormFields/utils/__tests__/XCCYFormHandlers.test.ts
@@ -121,21 +121,21 @@ describe('useRecalculateFormFields - helper functions', () => {
 
   describe('handleChangeCurrencyPair', () => {
     it('should set currency1 and currency2 when currencyPairs is provided', () => {
-      handleChangeCurrencyPair('EUR_USD', mockSetValue);
+      handleChangeCurrencyPair('EUR/USD', mockSetValue);
 
       expect(mockSetValue).toHaveBeenCalledWith('currency1', TradingCurrency.EUR);
       expect(mockSetValue).toHaveBeenCalledWith('currency2', TradingCurrency.USD);
     });
 
     it('should set currency1 and currency2 for RUB/XXX pair', () => {
-      handleChangeCurrencyPair('RUB_USD', mockSetValue);
+      handleChangeCurrencyPair('RUB/USD', mockSetValue);
 
       expect(mockSetValue).toHaveBeenCalledWith('currency1', TradingCurrency.RUB);
       expect(mockSetValue).toHaveBeenCalledWith('currency2', TradingCurrency.USD);
     });
 
     it('should set currency1 and currency2 for XXX/RUB pair', () => {
-      handleChangeCurrencyPair('USD_RUB', mockSetValue);
+      handleChangeCurrencyPair('USD/RUB', mockSetValue);
 
       expect(mockSetValue).toHaveBeenCalledWith('currency1', TradingCurrency.USD);
       expect(mockSetValue).toHaveBeenCalledWith('currency2', TradingCurrency.RUB);
diff --git a/src/widgets/OrdersJournal/components/TicketForm/const.ts b/src/widgets/OrdersJournal/components/TicketForm/const.ts
index a5f190b22..8aff53cd3 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/const.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/const.ts
@@ -98,7 +98,6 @@ export const DEFAULT_OPTIONS: Partial<Record<keyof TicketFormInputs, DefaultOpti
     { label: TicketProductLabels.IRS_OIS, value: TicketProduct.IRS_OIS },
     { label: TicketProductLabels.FX_SWAP, value: TicketProduct.FX_SWAP },
     { label: TicketProductLabels.XCCY, value: TicketProduct.XCCY },
-    { label: TicketProductLabels.BASIS_XCCY, value: TicketProduct.BASIS_XCCY },
   ],
   tradingMode: [
     { label: 'Адресная заявка', value: TradingMode.Address },
@@ -116,10 +115,10 @@ export const ASYNC_OPTIONS_LIMIT = 100;
 export const PUBLIC_COUNTERPARTY_SEARCH = 'NCCB';
 
 export const RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP: Record<string, number> = {
-  USD_RUB: 4,
-  EUR_RUB: 4,
-  EUR_USD: 6,
-  CNY_RUB: 5,
+  'USD/RUB': 4,
+  'EUR/RUB': 4,
+  'EUR/USD': 6,
+  'CNY/RUB': 5,
 };
 
 export const TICKET_PREMIUM_FIELDS: (keyof TicketFormInputs)[] = [
@@ -129,11 +128,3 @@ export const TICKET_PREMIUM_FIELDS: (keyof TicketFormInputs)[] = [
   'premiumDirection',
   'premiumDate',
 ] as const;
-
-export const DEFAULT_CONVENTION = 'MODFOLLOWING';
-
-export const DEFAULT_TERM = '1D';
-
-export const CURRENCY_PAIR_DIVIDER = '_';
-
-export const CUSTOM_TERM_PATTERN = 'D';
diff --git a/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useBaseInput.test.ts b/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useBaseInput.test.ts
index f544f903e..3c80aba31 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useBaseInput.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useBaseInput.test.ts
@@ -18,7 +18,7 @@ describe('useBaseInput hook', () => {
   it('should return field, status, disabled and error properties', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: undefined };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -29,7 +29,7 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: [],
         disabledFields: [],
-      }),
+      })
     );
 
     expect(result.current).toHaveProperty('field');
@@ -41,7 +41,7 @@ describe('useBaseInput hook', () => {
   it('should set required to true when name is in requiredFields', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: undefined };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -52,7 +52,7 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: ['dealType'],
         disabledFields: [],
-      }),
+      })
     );
 
     // Проверяем, что хук был вызван с правильными параметрами
@@ -65,7 +65,7 @@ describe('useBaseInput hook', () => {
   it('should set required to false when name is not in requiredFields', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: undefined };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -76,7 +76,7 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: ['direction'],
         disabledFields: [],
-      }),
+      })
     );
 
     // Проверяем, что хук был вызван с правильными параметрами
@@ -89,7 +89,7 @@ describe('useBaseInput hook', () => {
   it('should set disabled to true when name is in disabledFields', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: undefined };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -100,7 +100,7 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: [],
         disabledFields: ['dealType'],
-      }),
+      })
     );
 
     expect(result.current.disabled).toBe(true);
@@ -109,7 +109,7 @@ describe('useBaseInput hook', () => {
   it('should set disabled to false when name is not in disabledFields', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: undefined };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -120,7 +120,7 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: [],
         disabledFields: ['direction'],
-      }),
+      })
     );
 
     expect(result.current.disabled).toBe(false);
@@ -129,7 +129,7 @@ describe('useBaseInput hook', () => {
   it('should set status to "error" when there is a field error', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: { message: 'Required field' } };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -140,16 +140,16 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: [],
         disabledFields: [],
-      }),
+      })
     );
 
     expect(result.current.status).toBe('error');
   });
 
-  it('should set status to undefined when there is no field error', () => {
+  it('should set status to empty string when there is no field error', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: undefined };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -160,16 +160,16 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: [],
         disabledFields: [],
-      }),
+      })
     );
 
-    expect(result.current.status).toBeUndefined();
+    expect(result.current.status).toBe('');
   });
 
   it('should return the error from fieldState', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: { message: 'Required field' } };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -180,7 +180,7 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: [],
         disabledFields: [],
-      }),
+      })
     );
 
     expect(result.current.error).toEqual({ message: 'Required field' });
@@ -189,7 +189,7 @@ describe('useBaseInput hook', () => {
   it('should return undefined error when there is no error', () => {
     const mockField = { value: 'test', onChange: jest.fn() };
     const mockFieldState = { error: undefined };
-
+    
     mockUseController.mockReturnValue({
       field: mockField,
       fieldState: mockFieldState,
@@ -200,7 +200,7 @@ describe('useBaseInput hook', () => {
         name: 'dealType',
         requiredFields: [],
         disabledFields: [],
-      }),
+      })
     );
 
     expect(result.current.error).toBeUndefined();
diff --git a/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useFetchCurrencyPairParams.test.ts b/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useFetchCurrencyPairParams.test.ts
index 0648d266b..b803deb46 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useFetchCurrencyPairParams.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/hooks/__tests__/useFetchCurrencyPairParams.test.ts
@@ -133,7 +133,7 @@ describe('useFetchCurrencyPairParams for FX Swap', () => {
     expect(mockRefetch).not.toHaveBeenCalled();
   });
 
-  it('should call refetch when ticketType is CreateDepth and parameters change', () => {
+  it('should call refetch when ticketType is not Create and parameters change', () => {
     mockUseFormContext.mockReturnValue(createFormContextMockWithGetValues());
 
     const mockRefetch = jest.fn();
@@ -143,16 +143,16 @@ describe('useFetchCurrencyPairParams for FX Swap', () => {
     });
 
     const { rerender } = renderHook(({ ticketType }) => useFetchCurrencyPairParams({ ticketType }), {
-      initialProps: { ticketType: TicketType.CreateDepth },
+      initialProps: { ticketType: TicketType.Accept },
     });
 
     // Change parameters
     mockUseFormContext.mockReturnValue(createFormContextMockWithChangedTerm());
 
     // Rerender to simulate parameter change
-    rerender({ ticketType: TicketType.CreateDepth });
+    rerender({ ticketType: TicketType.Accept });
 
-    // Should call refetch when ticketType is CreateDepth
+    // Should call refetch when ticketType is not Create
     expect(mockRefetch).toHaveBeenCalled();
   });
 });
diff --git a/src/widgets/OrdersJournal/components/TicketForm/hooks/useBaseInput.ts b/src/widgets/OrdersJournal/components/TicketForm/hooks/useBaseInput.ts
index a1a0c4f14..795c782eb 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/hooks/useBaseInput.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/hooks/useBaseInput.ts
@@ -10,7 +10,7 @@ export const useBaseInput = ({ name, requiredFields, disabledFields }: UseBaseIn
 
   const { field, fieldState } = useController({ name, rules: { required } });
 
-  const status: InputValidation['status'] = fieldState.error ? 'error' : undefined;
+  const status: InputValidation['status'] = fieldState.error ? 'error' : '';
 
   return { field, status, disabled, error: fieldState.error };
 };
diff --git a/src/widgets/OrdersJournal/components/TicketForm/hooks/useFetchCurrencyPairParams.ts b/src/widgets/OrdersJournal/components/TicketForm/hooks/useFetchCurrencyPairParams.ts
index 99768a1b2..0991b8c76 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/hooks/useFetchCurrencyPairParams.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/hooks/useFetchCurrencyPairParams.ts
@@ -3,56 +3,52 @@ import { useFormContext } from 'react-hook-form';
 
 import { ticketFormController } from '@api/controllers/ticketFormController';
 import { useFetchWithParams } from '@widgets/OrdersJournal/components/TicketModal/hooks/useFetchWithParams';
+import { GetTicketOptionsParams } from '@widgets/OrdersJournal/components/TicketModal/types';
+
+import { getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
 
 import { TicketType } from 'types/SapfirSpfi';
 
-import { getIsDraft } from '../../TicketModal/utils/getIsDraft';
-import { CURRENCY_PAIR_DIVIDER } from '../const';
 import { TicketFormInputs } from '../types';
 
 type UseFetchCurrencyPairParamsProps = {
   ticketType: TicketType;
-  noPatternOrder?: boolean;
+  pattern?: GetTicketOptionsParams['pattern'];
 };
 
-export const useFetchCurrencyPairParams = ({ ticketType }: UseFetchCurrencyPairParamsProps) => {
+export const useFetchCurrencyPairParams = ({ ticketType, pattern }: UseFetchCurrencyPairParamsProps) => {
   const { watch, getValues } = useFormContext<TicketFormInputs>();
 
   const prevValues = useRef({ ...getValues() });
 
-  const { term, currencyPairs: currencyPair, dealType, noPatternOrder } = watch();
+  const { term, currencyPairs: currencyPair, dealType } = watch();
+
+  const prevTerm = prevValues.current.term;
 
   const paramsCurrencyPairParamsRequest = useMemo(() => {
     if (dealType && currencyPair && term) {
-      return { product: dealType, currencyPair: currencyPair.split(CURRENCY_PAIR_DIVIDER).join('/'), term };
+      return { product: dealType, currencyPair, term };
     }
   }, [dealType, currencyPair, term]);
 
   const { data: currencyPairParams, refetch } = useFetchWithParams({
     fetchFn: ticketFormController.getCurrencyPairParams,
     params: paramsCurrencyPairParamsRequest,
-    // вызываем апи при первом заполнение параметров только для ордера (не для брокерской заявки) и только при создании
-    auto:
-      !noPatternOrder &&
-      !getIsDraft(ticketType) &&
-      ![TicketType.Accept, TicketType.Cancel, TicketType.CreateFromDraft].includes(ticketType),
+    // вызываем апи при первом заполнение параметров только при создание
+    auto: getIsPatternOrder(pattern),
   });
 
   useEffect(() => {
-    const isDraft = getIsDraft(ticketType);
-    const canFetchForTicketType =
-      !isDraft &&
-      ![TicketType.Create, TicketType.Accept, TicketType.Cancel, TicketType.CreateFromDraft].includes(ticketType);
     // вызываем апи при изменение дефолтных параметров (только для шаблонных ордеров)
     if (
-      (term !== prevValues.current.term || currencyPair !== prevValues.current.currencyPairs) &&
-      canFetchForTicketType &&
-      !noPatternOrder
+      (term !== prevTerm || currencyPair !== prevValues.current.currencyPairs) &&
+      ticketType !== TicketType.Create &&
+      getIsPatternOrder(pattern)
     ) {
       refetch();
     }
     prevValues.current = { ...getValues() };
-  }, [term, currencyPair, getValues, refetch, ticketType, noPatternOrder]);
+  }, [term, currencyPair, getValues, refetch, ticketType, prevTerm, pattern]);
 
   return currencyPairParams;
 };
diff --git a/src/widgets/OrdersJournal/components/TicketForm/hooks/useTerm.ts b/src/widgets/OrdersJournal/components/TicketForm/hooks/useTerm.ts
index a5da8ea54..ee9c7b233 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/hooks/useTerm.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/hooks/useTerm.ts
@@ -5,7 +5,7 @@ import { useFormContext } from 'react-hook-form';
 import { SelectOptions, TicketFormInputs } from '../types';
 import { getDisabledDates } from '../utils/getDisabledDates';
 import { getLongestTerm } from '../utils/getLongestTerm';
-import { getShortestTerm } from '../utils/getShortestTerm';
+import { getShortestTerm } from '../utils/getShortestestTerm';
 
 type UseTermProps = {
   options: SelectOptions;
diff --git a/src/widgets/OrdersJournal/components/TicketForm/types.ts b/src/widgets/OrdersJournal/components/TicketForm/types.ts
index 789bdb461..3f1d64caa 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/types.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/types.ts
@@ -1,15 +1,13 @@
 import { Dayjs } from 'dayjs';
 import { UseControllerProps } from 'react-hook-form';
 
-import { SegmentedProps } from '@uikit/Segmented';
+import { SelectMadProps } from '@components/Select';
+
 import { Value } from '@uikit/Select';
-import { ISelect } from '@uikit/Select/Select';
 import { DefaultOption } from '@widgets/OrdersJournal/components/TicketModal/types';
 
 import { DealFXSwopDirection, DealIRSOISDirection, DealXCCYDirection, TicketProduct } from 'types/SapfirSpfi';
 
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
 import { useBaseInput } from './hooks/useBaseInput';
 import { TicketFormProps } from './TicketForm';
 
@@ -131,7 +129,7 @@ export type TicketFormInputs = AdditionalNoPatternTicketFormInputs & {
   // nullы нужны для сброса значеня поля react-hook-form чуствителен к undefined,
   // и если занчение равно undefined то форма будет брать значение из defauldValues
   /** Статус черновика */
-  status?: SpfiDraftStatus | null;
+  status?: string | null; // SpfiDraftStatusLabels
   dealType: TicketProduct;
   direction: DealIRSOISDirection | DealFXSwopDirection | DealXCCYDirection;
   /** Валюта для IRS_OIS */
@@ -194,7 +192,7 @@ export type TicketFormInputs = AdditionalNoPatternTicketFormInputs & {
   /** Продавец. Используется только для брокерских заявок */
   seller?: string | null;
   sellerSpfiFirmName?: string | null;
-  noPatternOrder?: boolean | null; // Вспомогательное расчетное поле для отображения переключателя Нешаблонный ордер
+  noPatternOrder?: boolean; // Вспомогательное расчетное поле для отображения переключателя Нешаблонный ордер
   startInPast1?: boolean; // Вспомогательное расчетное поле для отображения переключателя Начало в прошлом 1 части
   startInPast2?: boolean; // Вспомогательное расчетное поле для отображения переключателя Начало в прошлом 2 части
   rateType?: RateType; // Вспомогательное расчетное поле для отображения радио-переключателя Тип
@@ -212,10 +210,7 @@ export type BaseInputProps = {
 
 export type FormSelectProps = BaseInputProps &
   Pick<TicketFormProps, 'options'> &
-  Pick<
-    ISelect,
-    'allowClear' | 'showSearch' | 'labelInValue' | 'getPopupContainer' | 'hideDropdownonScroll' | 'container'
-  > & {
+  Pick<SelectMadProps, 'allowClear' | 'showSearch' | 'labelInValue'> & {
     onChange?: (value: string) => void;
     fetchOnVisible?: boolean;
   };
@@ -232,7 +227,6 @@ export type FormDatePickerProps = BaseInputProps &
 export type FormSegmentedProps = BaseInputProps &
   Pick<TicketFormProps, 'options'> & {
     sliceCount?: number;
-    onChange?: SegmentedProps['onChange'];
   };
 
 export type FormRadioProps = BaseInputProps &
@@ -269,29 +263,3 @@ export type FormSelectAsyncProps = Omit<FormSelectSimpleProps, 'options'> & {
 };
 
 export type OptionalNumber = number | undefined | null;
-
-/**
- * Флаги шаблонности значения
- * Для конкретного поля возможна установка только одного из них
- */
-export type HasPatternFieldFlags = {
-  /**
-   * Флаг, что заполненое поле (со значением) является нешаблонным
-   * Если true и заполнено, то оно нешаблонное
-   * Если false и заполнено, то оно шаблонное
-   * Если undefined, то всегда шаблонное (не участвует в проверке)
-   */
-  filledIsNoPattern?: boolean;
-  /**
-   * Флаг, что шаблонность определяется из options
-   * Если true, то поле имеет набор значений для выбора, и шаблонный ли ордер определяется по флагу pattern опции
-   * */
-  fromOptions?: boolean;
-  /**
-   * Значение, которое является шаблонным
-   * Нельзя использовать значения null, undefined
-   * */
-  patternValue?: string | boolean;
-};
-
-export type HasPatternFields = Partial<Record<keyof TicketFormInputs, HasPatternFieldFlags>>;
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/formHandlers.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/formHandlers.test.ts
index 94f68cf4e..a16d29de8 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/formHandlers.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/formHandlers.test.ts
@@ -1,10 +1,8 @@
 import dayjs from 'dayjs';
 
-import { enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 import { addTerm } from '@modules/pushDates/logic/utils/utils';
 
-import { TicketProduct } from 'types/SapfirSpfi';
-
+import { TradingCurrency } from '../../types';
 import {
   handleChangeCurrency,
   handleChangeEffectiveDate,
@@ -12,10 +10,6 @@ import {
   handleChangeTerminationDate,
 } from '../formHandlers';
 
-jest.mock('@modules/pushDates/logic/utils/enrichBySecondDate.utils', () => ({
-  enrichBySecondDate: jest.fn(() => Promise.resolve([{ transactionDate: '2024-01-15', secondDate: '2024-02-15' }])),
-}));
-
 jest.mock('@modules/pushDates/logic/utils/utils', () => ({
   addTerm: jest.fn((date: string) => {
     if (!date) {
@@ -33,55 +27,41 @@ describe('formHandlers', () => {
   });
 
   describe('handleChangeCurrency', () => {
-    it('должен очищать index2', () => {
-      handleChangeCurrency({ setValue: mockSetValue });
+    it('должен очищать index2, effectiveDate и terminationDate когда currency пустое', () => {
+      handleChangeCurrency({ currency: undefined, setValue: mockSetValue });
 
       expect(mockSetValue).toHaveBeenCalledWith('index2', null);
+      expect(mockSetValue).toHaveBeenCalledWith('effectiveDate', null);
+      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', null);
+    });
+
+    it('не должен вызывать setValue когда currency передано', () => {
+      handleChangeCurrency({ currency: TradingCurrency.USD, setValue: mockSetValue });
+
+      expect(mockSetValue).not.toHaveBeenCalled();
     });
   });
 
   describe('handleChangeTerm', () => {
+    it('не должен рассчитывать даты если pattern не NOPATTERN', () => {
+      const term = '1M';
+      const effectiveDate = '2024-01-15';
+      const patternWithTemplate = 'TEMPLATE' as 'NOPATTERN';
+
+      handleChangeTerm({ term, effectiveDate, pattern: patternWithTemplate, setValue: mockSetValue });
+
+      expect(mockSetValue).not.toHaveBeenCalled();
+    });
+
     it('должен очищать даты шаблонного ордера если term пустой', () => {
-      handleChangeTerm({
-        term: null,
-        effectiveDate: null,
-        noPatternOrder: false,
-        product: TicketProduct.IRS_OIS,
-        setValue: mockSetValue,
-      });
-      handleChangeTerm({
-        term: null,
-        effectiveDate: null,
-        noPatternOrder: false,
-        product: TicketProduct.IRS_OIS,
-        setValue: mockSetValue,
-      });
+      handleChangeTerm({ term: null, effectiveDate: null, pattern: 'PATTERN', setValue: mockSetValue });
 
       expect(mockSetValue).toHaveBeenCalledWith('effectiveDate', null);
       expect(mockSetValue).toHaveBeenCalledWith('terminationDate', null);
-      expect(mockSetValue).toHaveBeenCalledWith('amount1', null);
-      expect(mockSetValue).toHaveBeenCalledWith('amount2', null);
-      expect(mockSetValue).toHaveBeenCalledWith('farLegAmount1', null);
-      expect(mockSetValue).toHaveBeenCalledWith('farLegAmount2', null);
-      expect(mockSetValue).toHaveBeenCalledWith('nearLegRate', null);
-      expect(mockSetValue).toHaveBeenCalledWith('farLegRate', null);
     });
 
     it('не должен очищать даты нешаблонного ордера если term пустой', () => {
-      handleChangeTerm({
-        term: null,
-        effectiveDate: null,
-        noPatternOrder: true,
-        product: TicketProduct.IRS_OIS,
-        setValue: mockSetValue,
-      });
-      handleChangeTerm({
-        term: null,
-        effectiveDate: null,
-        noPatternOrder: true,
-        product: TicketProduct.IRS_OIS,
-        setValue: mockSetValue,
-      });
+      handleChangeTerm({ term: null, effectiveDate: null, pattern: 'NOPATTERN', setValue: mockSetValue });
 
       expect(mockSetValue).not.toHaveBeenCalledWith('effectiveDate', null);
       expect(mockSetValue).not.toHaveBeenCalledWith('terminationDate', null);
@@ -89,103 +69,127 @@ describe('formHandlers', () => {
   });
 
   describe('handleChangeEffectiveDate', () => {
+    const pattern = 'NOPATTERN' as const;
     const shortestTerm = '1W';
+    const longestTerm = '1M';
+
+    it('должен устанавливать term если ордер шаблонный', () => {
+      handleChangeEffectiveDate({
+        effectiveDate: '2024-01-15',
+        terminationDate: '2024-02-15',
+        pattern: 'PATTERN',
+        shortestTerm,
+        longestTerm,
+        setValue: mockSetValue,
+      });
+
+      expect(mockSetValue).not.toHaveBeenCalled();
+    });
+
+    it('должен очищать term', () => {
+      handleChangeEffectiveDate({
+        effectiveDate: '2024-01-15',
+        terminationDate: '2024-02-15',
+        pattern,
+        shortestTerm,
+        longestTerm,
+        setValue: mockSetValue,
+      });
+
+      expect(mockSetValue).toHaveBeenCalledWith('term', null);
+    });
 
     it('должен возвращать если effectiveDate пустой', () => {
       handleChangeEffectiveDate({
         effectiveDate: null,
+        terminationDate: '2024-02-15',
+        pattern,
+        shortestTerm,
+        longestTerm,
+        setValue: mockSetValue,
+      });
+
+      expect(mockSetValue).toHaveBeenCalledWith('term', null);
+      expect(mockSetValue).toHaveBeenCalledTimes(1);
+    });
+
+    it('должен очищать terminationDate если terminationDate раньше effectiveDate', () => {
+      const effectiveDate = '2024-02-15';
+      const terminationDate = '2024-01-15';
+
+      handleChangeEffectiveDate({
+        effectiveDate,
+        terminationDate,
+        pattern,
         shortestTerm,
-        product: TicketProduct.IRS_OIS,
-        noPatternOrder: true,
+        longestTerm,
         setValue: mockSetValue,
       });
 
-      expect(mockSetValue).toHaveBeenCalledTimes(0);
+      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', null);
     });
 
-    it('должен устанавливать terminationDate если terminationDate позже longestTerm', async () => {
+    it('должен устанавливать terminationDate если terminationDate позже longestTerm', () => {
       const effectiveDate = '2024-01-15';
+      const terminationDate = '2025-01-15';
 
       (addTerm as jest.Mock).mockReturnValueOnce(dayjs('2024-02-15'));
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-01-15' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-01-15' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-01-15' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-01-15' },
-      ]);
 
       handleChangeEffectiveDate({
         effectiveDate,
+        terminationDate,
+        pattern,
         shortestTerm,
-        product: TicketProduct.IRS_OIS,
-        noPatternOrder: true,
+        longestTerm,
         setValue: mockSetValue,
       });
 
-      await Promise.resolve();
-
-      expect(mockSetValue).toHaveBeenCalledWith('effectiveDate', '2024-01-15');
+      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', null);
     });
 
-    it('не должен очищать terminationDate если terminationDate в пределах longestTerm', async () => {
+    it('не должен очищать terminationDate если terminationDate в пределах longestTerm', () => {
       const effectiveDate = '2024-01-15';
+      const terminationDate = '2024-02-10';
 
       (addTerm as jest.Mock).mockReturnValueOnce(dayjs('2024-02-15'));
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-01-15' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-02-10' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-01-15' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-02-10' },
-      ]);
 
       handleChangeEffectiveDate({
         effectiveDate,
+        terminationDate,
+        pattern,
         shortestTerm,
-        product: TicketProduct.IRS_OIS,
-        noPatternOrder: true,
+        longestTerm,
         setValue: mockSetValue,
       });
 
-      await Promise.resolve();
-
-      await Promise.resolve();
-
       expect(mockSetValue).not.toHaveBeenCalledWith('terminationDate', null);
     });
   });
 
   describe('handleChangeTerminationDate', () => {
-    const shortestTerm = '1W';
+    const pattern = 'NOPATTERN' as const;
     const longestTerm = '1M';
 
-    it('должен очищать term', async () => {
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-02-15' },
-      ]);
-
+    it('должен изменять term если pattern равен "PATTERN"', () => {
       handleChangeTerminationDate({
         effectiveDate: '2024-01-15',
         terminationDate: '2024-02-15',
-        product: TicketProduct.IRS_OIS,
-        shortestTerm,
+        pattern: 'PATTERN',
         longestTerm,
-        noPatternOrder: true,
         setValue: mockSetValue,
       });
 
-      await Promise.resolve();
+      expect(mockSetValue).not.toHaveBeenCalled();
+    });
+
+    it('должен очищать term', () => {
+      handleChangeTerminationDate({
+        effectiveDate: '2024-01-15',
+        terminationDate: '2024-02-15',
+        pattern,
+        longestTerm,
+        setValue: mockSetValue,
+      });
 
       expect(mockSetValue).toHaveBeenCalledWith('term', null);
     });
@@ -194,10 +198,8 @@ describe('formHandlers', () => {
       handleChangeTerminationDate({
         effectiveDate: '2024-01-15',
         terminationDate: null,
-        product: TicketProduct.IRS_OIS,
-        shortestTerm,
+        pattern,
         longestTerm,
-        noPatternOrder: true,
         setValue: mockSetValue,
       });
 
@@ -205,124 +207,69 @@ describe('formHandlers', () => {
       expect(mockSetValue).toHaveBeenCalledTimes(1);
     });
 
-    it('должен очищать effectiveDate если terminationDate раньше effectiveDate', async () => {
+    it('должен очищать effectiveDate если terminationDate раньше effectiveDate', () => {
       const effectiveDate = '2024-02-15';
       const terminationDate = '2024-01-15';
 
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-02-15', secondDate: '2024-01-15' },
-      ]);
-
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-02-15', secondDate: '2024-01-15' },
-      ]);
-
       handleChangeTerminationDate({
         effectiveDate,
         terminationDate,
-        product: TicketProduct.IRS_OIS,
-        shortestTerm,
+        pattern,
         longestTerm,
-        noPatternOrder: true,
         setValue: mockSetValue,
       });
 
-      await Promise.resolve();
-
-      await Promise.resolve();
-
       expect(mockSetValue).toHaveBeenCalledWith('effectiveDate', null);
     });
 
-    it('должен очищать effectiveDate если terminationDate позже longestTerm', async () => {
+    it('должен очищать effectiveDate если terminationDate позже longestTerm', () => {
       const effectiveDate = '2024-01-15';
       const terminationDate = '2025-01-15';
 
       (addTerm as jest.Mock).mockReturnValueOnce(dayjs('2024-02-15'));
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2025-01-15' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2025-01-15' },
-      ]);
 
       handleChangeTerminationDate({
         effectiveDate,
         terminationDate,
-        product: TicketProduct.IRS_OIS,
-        shortestTerm,
+        pattern,
         longestTerm,
-        noPatternOrder: true,
         setValue: mockSetValue,
       });
 
-      await Promise.resolve();
-
-      expect(mockSetValue).toHaveBeenCalledWith('term', null);
-      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', '2025-01-15');
-      await Promise.resolve();
-
-      expect(mockSetValue).toHaveBeenCalledWith('term', null);
-      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', '2025-01-15');
+      expect(mockSetValue).toHaveBeenCalledWith('effectiveDate', null);
     });
 
-    it('не должен очищать effectiveDate если terminationDate в пределах longestTerm', async () => {
+    it('не должен очищать effectiveDate если terminationDate в пределах longestTerm', () => {
       const effectiveDate = '2024-01-15';
       const terminationDate = '2024-02-10';
 
       (addTerm as jest.Mock).mockReturnValueOnce(dayjs('2024-02-15'));
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-02-10' },
-      ]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([
-        { transactionDate: '2024-01-15', secondDate: '2024-02-10' },
-      ]);
 
       handleChangeTerminationDate({
         effectiveDate,
         terminationDate,
-        product: TicketProduct.IRS_OIS,
-        shortestTerm,
+        pattern,
         longestTerm,
-        noPatternOrder: true,
         setValue: mockSetValue,
       });
 
-      await Promise.resolve();
-
-      expect(mockSetValue).toHaveBeenCalledWith('term', null);
-      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', '2024-02-10');
-      await Promise.resolve();
-
-      expect(mockSetValue).toHaveBeenCalledWith('term', null);
-      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', '2024-02-10');
+      expect(mockSetValue).not.toHaveBeenCalledWith('effectiveDate', null);
     });
 
-    it('должен очищать effectiveDate если effectiveDate пустой и terminationDate позже longestTerm', async () => {
+    it('должен очищать effectiveDate если effectiveDate пустой и terminationDate позже longestTerm', () => {
       const terminationDate = '2025-02-15';
 
       (addTerm as jest.Mock).mockReturnValueOnce(dayjs('2024-02-15'));
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([{ transactionDate: null, secondDate: '2025-02-15' }]);
-      (enrichBySecondDate as jest.Mock).mockResolvedValueOnce([{ transactionDate: null, secondDate: '2025-02-15' }]);
 
       handleChangeTerminationDate({
         effectiveDate: null,
         terminationDate,
-        product: TicketProduct.IRS_OIS,
-        shortestTerm,
+        pattern,
         longestTerm,
-        noPatternOrder: true,
         setValue: mockSetValue,
       });
 
-      await Promise.resolve();
-
-      expect(mockSetValue).toHaveBeenCalledWith('term', null);
-      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', '2025-02-15');
-      await Promise.resolve();
-
-      expect(mockSetValue).toHaveBeenCalledWith('term', null);
-      expect(mockSetValue).toHaveBeenCalledWith('terminationDate', '2025-02-15');
+      expect(mockSetValue).toHaveBeenCalledWith('effectiveDate', null);
     });
   });
 });
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getBaseSencitiveFieldsForOptions.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getBaseSencitiveFieldsForOptions.test.ts
deleted file mode 100644
index 43ca8e47b..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getBaseSencitiveFieldsForOptions.test.ts
+++ /dev/null
@@ -1,191 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { RateType } from '../../types';
-
-import { getBaseSencitiveFieldsForOptions } from '../getBaseSencitiveFieldsForOptions';
-
-describe('getBaseSencitiveFieldsForOptions', () => {
-  describe('when dealType is IRS_OIS', () => {
-    describe('and rateType and rateType2 are FIXED', () => {
-      it('should return only currency field', () => {
-        const form = {
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FIXED,
-          rateType2: RateType.FIXED,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currency']);
-      });
-    });
-
-    describe('and rateType is FLOAT', () => {
-      it('should return currency and index fields', () => {
-        const form = {
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FLOAT,
-          rateType2: RateType.FIXED,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currency', 'index']);
-      });
-    });
-
-    describe('and rateType2 is FLOAT', () => {
-      it('should return currency and index2 fields', () => {
-        const form = {
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FIXED,
-          rateType2: RateType.FLOAT,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currency', 'index2']);
-      });
-    });
-
-    describe('and both rateType and rateType2 are FLOAT', () => {
-      it('should return currency, index, and index2 fields', () => {
-        const form = {
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FLOAT,
-          rateType2: RateType.FLOAT,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currency', 'index', 'index2']);
-      });
-    });
-  });
-
-  describe('when dealType is FX_SWAP', () => {
-    describe('and rateType and rateType2 are FIXED', () => {
-      it('should return only currencyPairs field', () => {
-        const form = {
-          dealType: TicketProduct.FX_SWAP,
-          rateType: RateType.FIXED,
-          rateType2: RateType.FIXED,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currencyPairs']);
-      });
-    });
-
-    describe('and rateType is FLOAT', () => {
-      it('should return currencyPairs and index fields', () => {
-        const form = {
-          dealType: TicketProduct.FX_SWAP,
-          rateType: RateType.FLOAT,
-          rateType2: RateType.FIXED,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currencyPairs']);
-      });
-    });
-
-    describe('and rateType2 is FLOAT', () => {
-      it('should return currencyPairs and index2 fields', () => {
-        const form = {
-          dealType: TicketProduct.FX_SWAP,
-          rateType: RateType.FIXED,
-          rateType2: RateType.FLOAT,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currencyPairs']);
-      });
-    });
-
-    describe('and both rateType and rateType2 are FLOAT', () => {
-      it('should return currencyPairs, index, and index2 fields', () => {
-        const form = {
-          dealType: TicketProduct.FX_SWAP,
-          rateType: RateType.FLOAT,
-          rateType2: RateType.FLOAT,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currencyPairs']);
-      });
-    });
-  });
-
-  describe('when dealType is XCCY', () => {
-    describe('and rateType and rateType2 are FIXED', () => {
-      it('should return only currencyPairs field', () => {
-        const form = {
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FIXED,
-          rateType2: RateType.FIXED,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currencyPairs']);
-      });
-    });
-
-    describe('and both rateType and rateType2 are FLOAT', () => {
-      it('should return currencyPairs, index, and index2 fields', () => {
-        const form = {
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-          rateType2: RateType.FLOAT,
-        };
-
-        const result = getBaseSencitiveFieldsForOptions(form);
-
-        expect(result).toEqual(['term', 'currencyPairs', 'index', 'index2']);
-      });
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should handle undefined rateType as not FIXED', () => {
-      const form = {
-        dealType: TicketProduct.IRS_OIS,
-        rateType: undefined,
-        rateType2: RateType.FIXED,
-      };
-
-      const result = getBaseSencitiveFieldsForOptions(form);
-
-      expect(result).toEqual(['term', 'currency', 'index']);
-    });
-
-    it('should handle undefined rateType2 as not FIXED', () => {
-      const form = {
-        dealType: TicketProduct.FX_SWAP,
-        rateType: RateType.FIXED,
-        rateType2: undefined,
-      };
-
-      const result = getBaseSencitiveFieldsForOptions(form);
-
-      expect(result).toEqual(['term', 'currencyPairs']);
-    });
-
-    it('should handle both undefined rateType and rateType2', () => {
-      const form = {
-        dealType: TicketProduct.XCCY,
-        rateType: undefined,
-        rateType2: undefined,
-      };
-
-      const result = getBaseSencitiveFieldsForOptions(form);
-
-      expect(result).toEqual(['term', 'currencyPairs', 'index', 'index2']);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getConvention.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getConvention.test.ts
deleted file mode 100644
index 76412e7d3..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getConvention.test.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { getConvention } from '../getConvention';
-
-describe('getConvention', () => {
-  describe('when convention is valid', () => {
-    it('should return FOLLOWING when convention is FOLLOWING', () => {
-      const result = getConvention('FOLLOWING');
-      expect(result).toBe('FOLLOWING');
-    });
-
-    it('should return MODFOLLOWING when convention is MODFOLLOWING', () => {
-      const result = getConvention('MODFOLLOWING');
-      expect(result).toBe('MODFOLLOWING');
-    });
-
-    it('should return PRECEDING when convention is PRECEDING', () => {
-      const result = getConvention('PRECEDING');
-      expect(result).toBe('PRECEDING');
-    });
-  });
-
-  describe('when convention is invalid', () => {
-    it('should return DEFAULT_CONVENTION when convention is null', () => {
-      const result = getConvention(null);
-      expect(result).toBe('MODFOLLOWING');
-    });
-
-    it('should return DEFAULT_CONVENTION when convention is undefined', () => {
-      const result = getConvention();
-      expect(result).toBe('MODFOLLOWING');
-    });
-
-    it('should return DEFAULT_CONVENTION when convention is empty string', () => {
-      const result = getConvention('');
-      expect(result).toBe('MODFOLLOWING');
-    });
-
-    it('should return DEFAULT_CONVENTION when convention is random string', () => {
-      const result = getConvention('RANDOM');
-      expect(result).toBe('MODFOLLOWING');
-    });
-
-    it('should return DEFAULT_CONVENTION when convention is number', () => {
-      const result = getConvention(123 as unknown as string);
-      expect(result).toBe('MODFOLLOWING');
-    });
-
-    it('should return DEFAULT_CONVENTION when convention is object', () => {
-      const result = getConvention({} as unknown as string);
-      expect(result).toBe('MODFOLLOWING');
-    });
-  });
-
-  describe('when convention is not provided', () => {
-    it('should return DEFAULT_CONVENTION when convention parameter is omitted', () => {
-      const result = getConvention();
-      expect(result).toBe('MODFOLLOWING');
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getCurrenciesForEnrich.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getCurrenciesForEnrich.test.ts
deleted file mode 100644
index 85e03b240..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getCurrenciesForEnrich.test.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { getCurrenciesForEnrich } from '../getCurrenciesForEnrich';
-
-describe('getCurrenciesForEnrich', () => {
-  describe('when product is IRS_OIS', () => {
-    it('should return array with currency when currency is provided', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.IRS_OIS, 'USD');
-      expect(result).toEqual(['USD']);
-    });
-
-    it('should return array with undefined when currency is null', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.IRS_OIS, null);
-      expect(result).toEqual([undefined]);
-    });
-
-    it('should return array with undefined when currency is undefined', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.IRS_OIS);
-      expect(result).toEqual([undefined]);
-    });
-
-    it('should return array with undefined when currency is not provided', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.IRS_OIS);
-      expect(result).toEqual([undefined]);
-    });
-
-    it('should ignore currencyPair parameter for IRS_OIS product', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.IRS_OIS, 'EUR', 'EUR_USD');
-      expect(result).toEqual(['EUR']);
-    });
-  });
-
-  describe('when product is not IRS_OIS (FX_SWAP)', () => {
-    it('should return split currency pair when currencyPair is provided', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.FX_SWAP, undefined, 'EUR_USD');
-      expect(result).toEqual(['EUR', 'USD']);
-    });
-
-    it('should return empty array when currencyPair is null', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.FX_SWAP, undefined, null);
-      expect(result).toEqual(['']);
-    });
-
-    it('should return empty array when currencyPair is undefined', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.FX_SWAP);
-      expect(result).toEqual(['']);
-    });
-
-    it('should return empty array when currencyPair is not provided', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.FX_SWAP);
-      expect(result).toEqual(['']);
-    });
-
-    it('should return single element array when currencyPair has no slash', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.FX_SWAP, undefined, 'EURUSD');
-      expect(result).toEqual(['EURUSD']);
-    });
-
-    it('should ignore currency parameter for non-IRS_OIS product', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.FX_SWAP, 'USD', 'EUR_USD');
-      expect(result).toEqual(['EUR', 'USD']);
-    });
-  });
-
-  describe('when product is XCCY', () => {
-    it('should return split currency pair when currencyPair is provided', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.XCCY, undefined, 'USD_RUB');
-      expect(result).toEqual(['USD', 'RUB']);
-    });
-
-    it('should return empty array when currencyPair is null', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.XCCY, undefined, null);
-      expect(result).toEqual(['']);
-    });
-
-    it('should return empty array when currencyPair is undefined', () => {
-      const result = getCurrenciesForEnrich(TicketProduct.XCCY);
-      expect(result).toEqual(['']);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getFieldOptionIsPattern.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getFieldOptionIsPattern.test.ts
deleted file mode 100644
index 779c9b0c6..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getFieldOptionIsPattern.test.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-import { DefaultOption } from '@widgets/OrdersJournal/components/TicketModal/types';
-
-import { getFieldOptionIsPattern } from '../getFieldOptionIsPattern';
-
-describe('getFieldOptionIsPattern', () => {
-  describe('when fieldOptions is not a default option array', () => {
-    it('should return true when fieldOptions is undefined', () => {
-      const result = getFieldOptionIsPattern('value');
-      expect(result).toBe(true);
-    });
-
-    it('should return true when fieldOptions is a string array', () => {
-      const fieldOptions = ['option1', 'option2'];
-      const result = getFieldOptionIsPattern('option1', fieldOptions);
-      expect(result).toBe(true);
-    });
-
-    it('should return true when fieldOptions is a function', () => {
-      const fieldOptions = jest.fn();
-      const result = getFieldOptionIsPattern('value', fieldOptions);
-      expect(result).toBe(true);
-    });
-  });
-
-  describe('when fieldOptions is a default option array', () => {
-    it('should return false when no matching option is found', () => {
-      const fieldOptions: DefaultOption[] = [
-        { label: 'Option 1', value: 'opt1' },
-        { label: 'Option 2', value: 'opt2' },
-      ];
-      const result = getFieldOptionIsPattern('nonExistent', fieldOptions);
-      expect(result).toBe(false);
-    });
-
-    it('should return true when option is found and pattern is undefined', () => {
-      const fieldOptions: DefaultOption[] = [{ label: 'Option 1', value: 'opt1', pattern: undefined }];
-      const result = getFieldOptionIsPattern('opt1', fieldOptions);
-      expect(result).toBe(true);
-    });
-
-    it('should return true when option is found and pattern is true', () => {
-      const fieldOptions: DefaultOption[] = [{ label: 'Option 1', value: 'opt1', pattern: true }];
-      const result = getFieldOptionIsPattern('opt1', fieldOptions);
-      expect(result).toBe(true);
-    });
-
-    it('should return false when option is found and pattern is false', () => {
-      const fieldOptions: DefaultOption[] = [{ label: 'Option 1', value: 'opt1', pattern: false }];
-      const result = getFieldOptionIsPattern('opt1', fieldOptions);
-      expect(result).toBe(false);
-    });
-
-    it('should find the correct option by value among multiple options', () => {
-      const fieldOptions: DefaultOption[] = [
-        { label: 'Option 1', value: 'opt1', pattern: false },
-        { label: 'Option 2', value: 'opt2', pattern: true },
-        { label: 'Option 3', value: 'opt3', pattern: undefined },
-      ];
-      expect(getFieldOptionIsPattern('opt1', fieldOptions)).toBe(false);
-      expect(getFieldOptionIsPattern('opt2', fieldOptions)).toBe(true);
-      expect(getFieldOptionIsPattern('opt3', fieldOptions)).toBe(true);
-    });
-
-    it('should handle numeric values', () => {
-      const fieldOptions: DefaultOption[] = [
-        { label: 'Option 1', value: 1, pattern: true },
-        { label: 'Option 2', value: 2, pattern: false },
-      ];
-      expect(getFieldOptionIsPattern(1, fieldOptions)).toBe(true);
-      expect(getFieldOptionIsPattern(2, fieldOptions)).toBe(false);
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should return true when fieldValue is null', () => {
-      const fieldOptions: DefaultOption[] = [{ label: 'Option 1', value: null, pattern: true }];
-      const result = getFieldOptionIsPattern(null, fieldOptions);
-      expect(result).toBe(true);
-    });
-
-    it('should return false when fieldValue is null and no matching option exists', () => {
-      const fieldOptions: DefaultOption[] = [{ label: 'Option 1', value: 'opt1', pattern: true }];
-      const result = getFieldOptionIsPattern(null, fieldOptions);
-      expect(result).toBe(false);
-    });
-
-    it('should handle empty array', () => {
-      const fieldOptions: DefaultOption[] = [];
-      const result = getFieldOptionIsPattern('value', fieldOptions);
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when noCheckDependent is true', () => {
-    it('should return true regardless of fieldOptions', () => {
-      const fieldOptions: DefaultOption[] = [{ label: 'Option 1', value: 'opt1', pattern: false }];
-      const result = getFieldOptionIsPattern('opt1', fieldOptions, true);
-      expect(result).toBe(true);
-    });
-
-    it('should return true regardless of fieldValue', () => {
-      const result = getFieldOptionIsPattern('anyValue', undefined, true);
-      expect(result).toBe(true);
-    });
-
-    it('should return true when fieldValue is null', () => {
-      const result = getFieldOptionIsPattern(null, undefined, true);
-      expect(result).toBe(true);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getFieldsAreNoPatternBecauseNoPatternValue.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getFieldsAreNoPatternBecauseNoPatternValue.test.ts
deleted file mode 100644
index 34faeb1b6..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getFieldsAreNoPatternBecauseNoPatternValue.test.ts
+++ /dev/null
@@ -1,151 +0,0 @@
-import { HasPatternFieldFlags } from '../../types';
-
-import { getFieldsAreNoPatternBecauseNoPatternValue } from '../getFieldsAreNoPatternBecauseNoPatternValue';
-
-describe('getFieldsAreNoPatternBecauseNoPatternValue', () => {
-  describe('when hasPatternFieldFlags is undefined', () => {
-    it('should return false', () => {
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(undefined, 'someValue');
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when hasPatternFieldFlags is empty object', () => {
-    it('should return false', () => {
-      const result = getFieldsAreNoPatternBecauseNoPatternValue({}, 'someValue');
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when patternValue is undefined', () => {
-    it('should return false', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = {};
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'someValue');
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when patternValue is null', () => {
-    it('should return false', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: null as unknown as string | boolean };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'someValue');
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when patternValue equals fieldValue (string)', () => {
-    it('should return false', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: 'template' };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'template');
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when patternValue does not equal fieldValue (string)', () => {
-    it('should return true', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: 'template' };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'custom');
-      expect(result).toBe(true);
-    });
-  });
-
-  describe('when patternValue equals fieldValue (boolean)', () => {
-    it('should return false', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: true };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, true);
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when patternValue does not equal fieldValue (boolean)', () => {
-    it('should return true', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: true };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, false);
-      expect(result).toBe(true);
-    });
-  });
-
-  describe('when patternValue is string and fieldValue is boolean', () => {
-    it('should return true', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: 'true' };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, true);
-      expect(result).toBe(true);
-    });
-  });
-
-  describe('when patternValue is boolean and fieldValue is string', () => {
-    it('should return true', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: true };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'true');
-      expect(result).toBe(true);
-    });
-  });
-
-  describe('when fieldValue is null', () => {
-    it('should return true when patternValue is defined and not null', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: 'template' };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, null);
-      expect(result).toBe(true);
-    });
-
-    it('should return false when patternValue is also null', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: null as unknown as string | boolean };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, null);
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('when fieldValue is undefined', () => {
-    it('should return true when patternValue is defined', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: 'template' };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags);
-      expect(result).toBe(true);
-    });
-  });
-
-  describe('with other HasPatternFieldFlags properties present', () => {
-    it('should ignore filledIsNoPattern and return result based on patternValue', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = {
-        filledIsNoPattern: true,
-        patternValue: 'template',
-      };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'custom');
-      expect(result).toBe(true);
-    });
-
-    it('should ignore fromOptions and return result based on patternValue', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = {
-        fromOptions: true,
-        patternValue: 'template',
-      };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'template');
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should handle empty string patternValue', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: '' };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 'someValue');
-      expect(result).toBe(true);
-    });
-
-    it('should return false when both patternValue and fieldValue are empty strings', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: '' };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, '');
-      expect(result).toBe(false);
-    });
-
-    it('should handle numeric patternValue', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: 100 as unknown as string | boolean };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 200);
-      expect(result).toBe(true);
-    });
-
-    it('should return false when numeric patternValue equals fieldValue', () => {
-      const hasPatternFieldFlags: HasPatternFieldFlags = { patternValue: 100 as unknown as string | boolean };
-      const result = getFieldsAreNoPatternBecauseNoPatternValue(hasPatternFieldFlags, 100);
-      expect(result).toBe(false);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getHasSomeOption.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getHasSomeOption.test.ts
index 4d542b813..63fab3d9f 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getHasSomeOption.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getHasSomeOption.test.ts
@@ -79,9 +79,9 @@ describe('getHasSomeOption', () => {
       expect(result).toBe(false);
     });
 
-    it('should return false when options is undefined', () => {
+    it('should return undefined when options is undefined', () => {
       const result = getHasSomeOption('value');
-      expect(result).toBe(false);
+      expect(result).toBeUndefined();
     });
   });
 
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getIsAllSensitiveFieldsFilledPattern.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getIsAllSensitiveFieldsFilledPattern.test.ts
deleted file mode 100644
index 97ca8b88e..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getIsAllSensitiveFieldsFilledPattern.test.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { getIsAllSensitiveFieldsFilledPattern } from '../getIsAllSensitiveFieldsFilledPattern';
-
-describe('getIsAllSensitiveFieldsFilledPattern', () => {
-  describe('when prevMustPattern is false', () => {
-    it('should return false regardless of other parameters', () => {
-      expect(getIsAllSensitiveFieldsFilledPattern(false, [])).toBe(false);
-    });
-
-    it('should return false when noPatternOrder is true', () => {
-      expect(getIsAllSensitiveFieldsFilledPattern(false, [], true)).toBe(false);
-    });
-
-    it('should return false when sensitive fields array is not empty', () => {
-      expect(getIsAllSensitiveFieldsFilledPattern(false, ['currency', 'term'])).toBe(false);
-    });
-
-    it('should return false with all parameters', () => {
-      expect(getIsAllSensitiveFieldsFilledPattern(false, ['currency', 'term'], true)).toBe(false);
-    });
-  });
-
-  describe('when prevMustPattern is true', () => {
-    describe('and noPatternOrder is falsy', () => {
-      it.each([null, undefined, false])('should return true when noPatternOrder is %s', (noPatternOrder) => {
-        expect(getIsAllSensitiveFieldsFilledPattern(true, [], noPatternOrder ?? undefined)).toBe(true);
-      });
-
-      it('should return true when noPatternOrder is not provided', () => {
-        expect(getIsAllSensitiveFieldsFilledPattern(true, [])).toBe(true);
-      });
-    });
-
-    describe('and noPatternOrder is true', () => {
-      it('should return true when sensitive fields array is empty', () => {
-        expect(getIsAllSensitiveFieldsFilledPattern(true, [], true)).toBe(true);
-      });
-
-      it('should return false when sensitive fields array has one field', () => {
-        expect(getIsAllSensitiveFieldsFilledPattern(true, ['currency'], true)).toBe(false);
-      });
-
-      it('should return false when sensitive fields array has multiple fields', () => {
-        expect(getIsAllSensitiveFieldsFilledPattern(true, ['currency', 'term', 'effectiveDate'], true)).toBe(false);
-      });
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should return true when noPatternOrder is false and sensitive fields array is not empty', () => {
-      expect(getIsAllSensitiveFieldsFilledPattern(true, ['currency', 'term'], false)).toBe(true);
-    });
-
-    it('should return true when noPatternOrder is null and sensitive fields array is not empty', () => {
-      expect(getIsAllSensitiveFieldsFilledPattern(true, ['currency', 'term'], null)).toBe(true);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getLongestTerm.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getLongestTerm.test.ts
index c39aed89c..b7bc2228b 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getLongestTerm.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getLongestTerm.test.ts
@@ -1,33 +1,27 @@
-import { DEFAULT_TERM } from '../../const';
 import { SelectOptions } from '../../types';
 import { getLongestTerm } from '../getLongestTerm';
 
 describe('getLongestTerm', () => {
   it('should return the last element when termOptions is a non-empty array', () => {
-    const termOptions: SelectOptions['term'] = [
-      { label: '1W', value: '1W' },
-      { label: '1M', value: '1M' },
-      { label: '3M', value: '3M' },
-      { label: '1Y', value: '1Y' },
-    ];
+    const termOptions: SelectOptions['term'] = ['1D', '1W', '1M', '3M', '6M', '1Y'];
     const result = getLongestTerm(termOptions);
     expect(result).toBe('1Y');
   });
 
   it('should return the last element when array has only one element', () => {
-    const termOptions: SelectOptions['term'] = [{ label: '1Y', value: '1Y' }];
+    const termOptions: SelectOptions['term'] = ['1D'];
     const result = getLongestTerm(termOptions);
-    expect(result).toBe('1Y');
+    expect(result).toBe('1D');
   });
 
   it('should return "1D" when termOptions is an empty array', () => {
     const termOptions: SelectOptions['term'] = [];
     const result = getLongestTerm(termOptions);
-    expect(result).toBe(DEFAULT_TERM);
+    expect(result).toBe('1D');
   });
 
   it('should return "1D" when termOptions is undefined', () => {
-    const result = getLongestTerm();
-    expect(result).toBe(DEFAULT_TERM);
+    const result = getLongestTerm(undefined);
+    expect(result).toBe('1D');
   });
 });
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getNoCheckDependent.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getNoCheckDependent.test.ts
deleted file mode 100644
index 0dff4f513..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getNoCheckDependent.test.ts
+++ /dev/null
@@ -1,276 +0,0 @@
-import { DefaultOption } from '@widgets/OrdersJournal/components/TicketModal/types';
-
-import { SelectOptions, TicketFormInputs } from '../../types';
-import { getNoCheckDependent } from '../getNoCheckDependent';
-
-describe('getNoCheckDependent', () => {
-  const createMockOptions = (
-    overrides?: Partial<{
-      floatingAddOffset1: DefaultOption[];
-      floatingAddOffset2: DefaultOption[];
-    }>,
-  ): SelectOptions => ({
-    floatingAddOffset1: [
-      { label: 'Option 1', value: 'offset1-value-1' },
-      { label: 'Priority Option', value: 'offset1-priority', priority: true },
-      { label: 'Option 3', value: 'offset1-value-3' },
-    ],
-    floatingAddOffset2: [
-      { label: 'Option A', value: 'offset2-value-a' },
-      { label: 'Priority Option B', value: 'offset2-priority', priority: true },
-      { label: 'Option C', value: 'offset2-value-c' },
-    ],
-    ...overrides,
-  });
-
-  const createMockForm = (overrides?: Partial<TicketFormInputs>): TicketFormInputs => ({
-    dealType: 'IRS' as TicketFormInputs['dealType'],
-    direction: 'BUY' as TicketFormInputs['direction'],
-    tradingMode: 'ADDRESS' as TicketFormInputs['tradingMode'],
-    floatingAddOffset1: 'offset1-priority',
-    floatingAddOffset2: 'offset2-priority',
-    floatingAddLenghtOffset1: null,
-    floatingAddLenghtOffset2: null,
-    ...overrides,
-  });
-
-  const testCases = [
-    {
-      lengthField: 'floatingAddLenghtOffset1' as const,
-      offsetField: 'floatingAddOffset1' as const,
-      priorityValue: 'offset1-priority',
-      nonPriorityValue: 'offset1-value-1',
-    },
-    {
-      lengthField: 'floatingAddLenghtOffset2' as const,
-      offsetField: 'floatingAddOffset2' as const,
-      priorityValue: 'offset2-priority',
-      nonPriorityValue: 'offset2-value-a',
-    },
-  ];
-
-  describe.each(testCases)(
-    'когда field = $lengthField',
-    ({ lengthField, offsetField, priorityValue, nonPriorityValue }) => {
-      describe('когда fieldValue отсутствует (falsy)', () => {
-        it('должен возвращать true если form[offsetField] равен приоритетному значению из options', () => {
-          const options = createMockOptions();
-          const form = createMockForm({ [offsetField]: priorityValue });
-
-          const result = getNoCheckDependent({
-            field: lengthField,
-            fieldValue: null,
-            form,
-            options,
-          });
-
-          expect(result).toBe(true);
-        });
-
-        it('должен возвращать false если form[offsetField] не равен приоритетному значению', () => {
-          const options = createMockOptions();
-          const form = createMockForm({ [offsetField]: nonPriorityValue });
-
-          const result = getNoCheckDependent({
-            field: lengthField,
-            fieldValue: null,
-            form,
-            options,
-          });
-
-          expect(result).toBe(false);
-        });
-
-        it('должен возвращать false если form[offsetField] отсутствует', () => {
-          const options = createMockOptions();
-          const form = createMockForm({ [offsetField]: undefined });
-
-          const result = getNoCheckDependent({
-            field: lengthField,
-            fieldValue: null,
-            form,
-            options,
-          });
-
-          expect(result).toBe(false);
-        });
-      });
-    },
-  );
-
-  describe('когда field не является floatingAddLenghtOffset1 или floatingAddLenghtOffset2', () => {
-    it('должен возвращать false для других полей', () => {
-      const options = createMockOptions();
-      const form = createMockForm();
-
-      const result = getNoCheckDependent({
-        field: 'effectiveDate',
-        fieldValue: null,
-        form,
-        options,
-      });
-
-      expect(result).toBe(false);
-    });
-  });
-
-  describe('когда fieldValue присутствует (truthy)', () => {
-    it('должен возвращать false если fieldValue = string', () => {
-      const options = createMockOptions();
-      const form = createMockForm();
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: 'some-value',
-        form,
-        options,
-      });
-
-      expect(result).toBe(false);
-    });
-
-    it('должен возвращать false если fieldValue = number', () => {
-      const options = createMockOptions();
-      const form = createMockForm();
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: 123,
-        form,
-        options,
-      });
-
-      expect(result).toBe(false);
-    });
-
-    it('должен возвращать false если fieldValue = boolean true', () => {
-      const options = createMockOptions();
-      const form = createMockForm();
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: true,
-        form,
-        options,
-      });
-
-      expect(result).toBe(false);
-    });
-
-    it('должен возвращать true если fieldValue = 0 (0 является falsy значением)', () => {
-      const options = createMockOptions();
-      const form = createMockForm();
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: 0,
-        form,
-        options,
-      });
-
-      expect(result).toBe(true);
-    });
-  });
-
-  describe('edge cases', () => {
-    it('должен корректно работать когда в options нет приоритетного элемента', () => {
-      const options = createMockOptions({
-        floatingAddOffset1: [
-          { label: 'Option 1', value: 'offset1-value-1' },
-          { label: 'Option 2', value: 'offset1-value-2' },
-        ],
-      });
-      const form = createMockForm({ floatingAddOffset1: 'offset1-value-1' });
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: null,
-        form,
-        options,
-      });
-
-      expect(result).toBe(false);
-    });
-
-    it('должен корректно работать когда options.floatingAddOffset1 отсутствует', () => {
-      const options = createMockOptions({ floatingAddOffset1: undefined });
-      const form = createMockForm({ floatingAddOffset1: 'some-value' });
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: null,
-        form,
-        options,
-      });
-
-      expect(result).toBe(false);
-    });
-
-    it('должен корректно работать когда options.floatingAddOffset2 отсутствует', () => {
-      const options = createMockOptions({ floatingAddOffset2: undefined });
-      const form = createMockForm({ floatingAddOffset2: 'some-value' });
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset2',
-        fieldValue: null,
-        form,
-        options,
-      });
-
-      expect(result).toBe(false);
-    });
-
-    it('должен корректно работать когда floatingAddOffset1 и floatingAddOffset2 оба отсутствуют в options', () => {
-      const options = createMockOptions({
-        floatingAddOffset1: undefined,
-        floatingAddOffset2: undefined,
-      });
-      const form = createMockForm();
-
-      const result1 = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: null,
-        form,
-        options,
-      });
-
-      const result2 = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset2',
-        fieldValue: null,
-        form,
-        options,
-      });
-
-      expect(result1).toBe(false);
-      expect(result2).toBe(false);
-    });
-
-    it('должен корректно работать когда fieldValue = undefined', () => {
-      const options = createMockOptions();
-      const form = createMockForm();
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: undefined,
-        form,
-        options,
-      });
-
-      expect(result).toBe(true);
-    });
-
-    it('должен корректно работать когда fieldValue = empty string', () => {
-      const options = createMockOptions();
-      const form = createMockForm();
-
-      const result = getNoCheckDependent({
-        field: 'floatingAddLenghtOffset1',
-        fieldValue: '',
-        form,
-        options,
-      });
-
-      expect(result).toBe(true);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getNoCheckDependentFields.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getNoCheckDependentFields.test.ts
deleted file mode 100644
index c33112111..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getNoCheckDependentFields.test.ts
+++ /dev/null
@@ -1,193 +0,0 @@
-import { SelectOptions, SelectOptionValue } from '../../types';
-
-import { getNoCheckDependentFields } from '../getNoCheckDependentFields';
-
-describe('getNoCheckDependentFields', () => {
-  const createForm = (overrides: { floatingAddOffset1?: string; floatingAddOffset2?: string } = {}) => ({
-    floatingAddOffset1: undefined,
-    floatingAddOffset2: undefined,
-    ...overrides,
-  });
-
-  const createOptions = (
-    overrides: {
-      floatingAddOffset1?: SelectOptions['floatingAddOffset1'];
-      floatingAddOffset2?: SelectOptions['floatingAddOffset2'];
-    } = {},
-  ): SelectOptions => ({
-    floatingAddOffset1: undefined,
-    floatingAddOffset2: undefined,
-    ...overrides,
-  });
-
-  // Tests for floatingAddOffset1 and floatingAddOffset2 using parameterized approach
-  const offsetConfigs = [
-    { number: 1, offsetKey: 'floatingAddOffset1' as const, lengthOffsetKey: 'floatingAddLenghtOffset1' as const },
-    { number: 2, offsetKey: 'floatingAddOffset2' as const, lengthOffsetKey: 'floatingAddLenghtOffset2' as const },
-  ] as const;
-
-  offsetConfigs.forEach(({ number, offsetKey, lengthOffsetKey }) => {
-    describe(`floatingAddOffset${number}`, () => {
-      const createFormWithOffset = (value: string | undefined) => createForm({ [offsetKey]: value });
-
-      const createOptionsWithOffset = (optionsValue: SelectOptionValue) => createOptions({ [offsetKey]: optionsValue });
-
-      it('should return empty array when offset is undefined', () => {
-        const form = createFormWithOffset(undefined);
-        const options = createOptionsWithOffset([{ value: 'D', label: 'Day', priority: true }]);
-
-        const result = getNoCheckDependentFields(form, options);
-
-        expect(result).toEqual([]);
-      });
-
-      it('should return empty array when offset does not match priority value', () => {
-        const form = createFormWithOffset('M');
-        const options = createOptionsWithOffset([{ value: 'D', label: 'Day', priority: true }]);
-
-        const result = getNoCheckDependentFields(form, options);
-
-        expect(result).toEqual([]);
-      });
-
-      it(`should return ${lengthOffsetKey} when offset matches priority value`, () => {
-        const form = createFormWithOffset('D');
-        const options = createOptionsWithOffset([{ value: 'D', label: 'Day', priority: true }]);
-
-        const result = getNoCheckDependentFields(form, options);
-
-        expect(result).toEqual([lengthOffsetKey]);
-      });
-
-      it(`should return ${lengthOffsetKey} when offset matches priority value with multiple options`, () => {
-        const form = createFormWithOffset('M');
-        const options = createOptionsWithOffset([
-          { value: 'D', label: 'Day' },
-          { value: 'M', label: 'Month', priority: true },
-          { value: 'Y', label: 'Year' },
-        ]);
-
-        const result = getNoCheckDependentFields(form, options);
-
-        expect(result).toEqual([lengthOffsetKey]);
-      });
-
-      it('should return empty array when options is not DefaultOption array', () => {
-        const form = createFormWithOffset('D');
-        const options = createOptionsWithOffset(['D', 'M', 'Y']);
-
-        const result = getNoCheckDependentFields(form, options);
-
-        expect(result).toEqual([]);
-      });
-
-      it('should return empty array when options is a function', () => {
-        const form = createFormWithOffset('D');
-        const options = createOptionsWithOffset(async () => Promise.resolve([]));
-
-        const result = getNoCheckDependentFields(form, options);
-
-        expect(result).toEqual([]);
-      });
-    });
-  });
-
-  describe('both offsets', () => {
-    it('should return both dependent fields when both offsets match priority values', () => {
-      const form = createForm({ floatingAddOffset1: 'D', floatingAddOffset2: 'M' });
-      const options = createOptions({
-        floatingAddOffset1: [{ value: 'D', label: 'Day', priority: true }],
-        floatingAddOffset2: [{ value: 'M', label: 'Month', priority: true }],
-      });
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual(['floatingAddLenghtOffset1', 'floatingAddLenghtOffset2']);
-    });
-
-    it('should return only floatingAddLenghtOffset1 when only first offset matches', () => {
-      const form = createForm({ floatingAddOffset1: 'D', floatingAddOffset2: 'Y' });
-      const options = createOptions({
-        floatingAddOffset1: [{ value: 'D', label: 'Day', priority: true }],
-        floatingAddOffset2: [{ value: 'M', label: 'Month', priority: true }],
-      });
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual(['floatingAddLenghtOffset1']);
-    });
-
-    it('should return only floatingAddLenghtOffset2 when only second offset matches', () => {
-      const form = createForm({ floatingAddOffset1: 'Y', floatingAddOffset2: 'M' });
-      const options = createOptions({
-        floatingAddOffset1: [{ value: 'D', label: 'Day', priority: true }],
-        floatingAddOffset2: [{ value: 'M', label: 'Month', priority: true }],
-      });
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual(['floatingAddLenghtOffset2']);
-    });
-
-    it('should return empty array when neither offset matches priority values', () => {
-      const form = createForm({ floatingAddOffset1: 'Y', floatingAddOffset2: 'Y' });
-      const options = createOptions({
-        floatingAddOffset1: [{ value: 'D', label: 'Day', priority: true }],
-        floatingAddOffset2: [{ value: 'M', label: 'Month', priority: true }],
-      });
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual([]);
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should return empty array when options are empty', () => {
-      const form = createForm({ floatingAddOffset1: 'D', floatingAddOffset2: 'M' });
-      const options = createOptions();
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual([]);
-    });
-
-    it('should return empty array when options have no priority option', () => {
-      const form = createForm({ floatingAddOffset1: 'D', floatingAddOffset2: 'M' });
-      const options = createOptions({
-        floatingAddOffset1: [{ value: 'D', label: 'Day' }],
-        floatingAddOffset2: [{ value: 'M', label: 'Month' }],
-      });
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual([]);
-    });
-
-    it('should handle options with multiple priority options (returns first one)', () => {
-      const form = createForm({ floatingAddOffset1: 'D' });
-      const options = createOptions({
-        floatingAddOffset1: [
-          { value: 'D', label: 'Day', priority: true },
-          { value: 'M', label: 'Month', priority: true },
-        ],
-      });
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual(['floatingAddLenghtOffset1']);
-    });
-
-    it('should handle empty options array', () => {
-      const form = createForm({ floatingAddOffset1: 'D', floatingAddOffset2: 'M' });
-      const options = createOptions({
-        floatingAddOffset1: [],
-        floatingAddOffset2: [],
-      });
-
-      const result = getNoCheckDependentFields(form, options);
-
-      expect(result).toEqual([]);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getisFirstIteration.test.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getisFirstIteration.test.ts
deleted file mode 100644
index 11ae68602..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/__tests__/getisFirstIteration.test.ts
+++ /dev/null
@@ -1,210 +0,0 @@
-import { TicketFormInputs } from '../../types';
-import { getisFirstIteration } from '../getisFirstIteration';
-
-describe('getisFirstIteration', () => {
-  describe('когда step = 1', () => {
-    describe('когда fieldsAreNoPatternBecauseFilled содержит элементы', () => {
-      it('должен возвращать truthy значение', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction'];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [];
-
-        const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeTruthy();
-      });
-
-      it('должен возвращать truthy значение когда fieldsAreNoPatternBecauseNoPatternValue содержит элементы', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction', 'dealType'];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency'];
-
-        const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeTruthy();
-      });
-    });
-
-    describe('когда fieldsAreNoPatternBecauseNoPatternValue содержит элементы', () => {
-      it('должен возвращать truthy значение', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency'];
-
-        const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeTruthy();
-      });
-
-      it('должен возвращать truthy значение когда fieldsAreNoPatternBecauseFilled также содержит элементы', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction'];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency', 'term'];
-
-        const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeTruthy();
-      });
-    });
-
-    describe('когда оба массива пустые', () => {
-      it('должен возвращать falsy значение', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [];
-
-        const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeFalsy();
-      });
-    });
-  });
-
-  describe('когда step !== 1', () => {
-    describe('когда step = 0', () => {
-      it('должен возвращать falsy значение даже если массивы содержат элементы', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction'];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency'];
-
-        const result = getisFirstIteration(0, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeFalsy();
-      });
-
-      it('должен возвращать falsy значение когда массивы пустые', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [];
-
-        const result = getisFirstIteration(0, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeFalsy();
-      });
-    });
-
-    describe('когда step = 2', () => {
-      it('должен возвращать falsy значение даже если массивы содержат элементы', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction'];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency'];
-
-        const result = getisFirstIteration(2, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeFalsy();
-      });
-
-      it('должен возвращать falsy значение когда массивы пустые', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [];
-
-        const result = getisFirstIteration(2, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-        expect(result).toBeFalsy();
-      });
-    });
-
-    describe('когда step = 10', () => {
-      it('должен возвращать falsy значение даже если массивы содержат элементы', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction', 'dealType', 'currency'];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['term', 'fixRate'];
-
-        const result = getisFirstIteration(
-          10,
-          fieldsAreNoPatternBecauseFilled,
-          fieldsAreNoPatternBecauseNoPatternValue,
-        );
-
-        expect(result).toBeFalsy();
-      });
-    });
-
-    describe('когда step = отрицательное число', () => {
-      it('должен возвращать falsy значение даже если массивы содержат элементы', () => {
-        const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction'];
-        const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency'];
-
-        const result = getisFirstIteration(
-          -1,
-          fieldsAreNoPatternBecauseFilled,
-          fieldsAreNoPatternBecauseNoPatternValue,
-        );
-
-        expect(result).toBeFalsy();
-      });
-    });
-  });
-
-  describe('edge cases', () => {
-    it('должен корректно работать с различными типами полей из TicketFormInputs', () => {
-      const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [
-        'direction',
-        'dealType',
-        'tradingMode',
-        'currency',
-        'term',
-      ];
-      const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [
-        'fixRate',
-        'index',
-        'effectiveDate',
-        'terminationDate',
-      ];
-
-      const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-      expect(result).toBeTruthy();
-    });
-
-    it('должен корректно работать когда step = 1 и только один массив с одним элементом', () => {
-      const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction'];
-      const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [];
-
-      const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-      expect(result).toBeTruthy();
-    });
-
-    it('должен корректно работать когда step = 1 и fieldsAreNoPatternBecauseNoPatternValue с одним элементом', () => {
-      const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [];
-      const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency'];
-
-      const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-      expect(result).toBeTruthy();
-    });
-
-    it('должен корректно работать когда оба массива содержат по одному элементу', () => {
-      const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = ['direction'];
-      const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = ['currency'];
-
-      const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-      expect(result).toBeTruthy();
-    });
-
-    it('должен корректно работать когда fieldsAreNoPatternBecauseFilled содержит много элементов', () => {
-      const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [
-        'direction',
-        'dealType',
-        'tradingMode',
-        'currency',
-        'term',
-        'fixRate',
-      ];
-      const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [];
-
-      const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-      expect(result).toBeTruthy();
-    });
-
-    it('должен корректно работать когда fieldsAreNoPatternBecauseNoPatternValue содержит много элементов', () => {
-      const fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[] = [];
-      const fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[] = [
-        'fixRate',
-        'index',
-        'effectiveDate',
-        'terminationDate',
-        'amount1',
-        'amount2',
-      ];
-
-      const result = getisFirstIteration(1, fieldsAreNoPatternBecauseFilled, fieldsAreNoPatternBecauseNoPatternValue);
-
-      expect(result).toBeTruthy();
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/convertAdditionalOptionsToDefault.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/convertAdditionalOptionsToDefault.ts
index 94625907a..c0a26a2cc 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/convertAdditionalOptionsToDefault.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/convertAdditionalOptionsToDefault.ts
@@ -3,7 +3,6 @@ import { AdditionalOption, DefaultOption } from '../../TicketModal/types';
 export const convertAdditionalOptionsToDefault = (options?: AdditionalOption[]): DefaultOption[] =>
   options?.map((option) => ({
     priority: option.priority,
-    pattern: option.pattern,
     label: option.name,
     value: option.id,
   })) ?? [];
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseFilled.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseFilled.ts
deleted file mode 100644
index 2b42c31ec..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseFilled.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { UseFormSetValue } from 'react-hook-form';
-
-import { TicketFormInputs } from '../types';
-
-/** Устанавливает в поля шаблонное значение в зависимости от флага HasPatternFieldFlags.filledIsNoPattern */
-export const doPatternFieldValueIsNoPatternBecauseFilled = (
-  fields: (keyof TicketFormInputs)[],
-  setValue: UseFormSetValue<TicketFormInputs>,
-) => fields.forEach((field) => setValue(field, null));
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseNoPatternValue.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseNoPatternValue.ts
deleted file mode 100644
index 343549670..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseNoPatternValue.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { UseFormGetValues, UseFormSetValue } from 'react-hook-form';
-
-import {
-  getEffectiveConventionLabelName,
-  getTerminationConventionLabelName,
-} from '../components/CalendarsAccordion/utils';
-import { HasPatternFields, SelectOptions, TicketFormInputs } from '../types';
-
-import { handleChangeEffectiveDate } from './formHandlers';
-
-type DoPatternFieldValueIsNoPatternBecauseNoPatternValueProps = {
-  fields: (keyof TicketFormInputs)[];
-  hasPatternFields: Readonly<HasPatternFields>;
-  shortestTerm: string;
-  options: SelectOptions;
-  setValue: UseFormSetValue<TicketFormInputs>;
-  getValues: UseFormGetValues<TicketFormInputs>;
-};
-/** Устанавливает в поля шаблонное значение в зависимости от флага HasPatternFieldFlags.patternValue */
-export const doPatternFieldValueIsNoPatternBecauseNoPatternValue = ({
-  fields,
-  hasPatternFields,
-  shortestTerm,
-  options,
-  setValue,
-  getValues,
-}: DoPatternFieldValueIsNoPatternBecauseNoPatternValueProps) =>
-  fields.forEach((field) => {
-    const patternValue = hasPatternFields[field]?.patternValue;
-    setValue(field, patternValue);
-
-    const rateType = getValues('rateType');
-    // Дополнительно обрабатываем поля, у которых есть хэндлеры,
-    // чтобы логика изменения оставалась как при ручном изменении поля
-    if (field === 'effectiveDate') {
-      handleChangeEffectiveDate({
-        effectiveDate: patternValue as string | null | undefined,
-        term: getValues('term'),
-        shortestTerm,
-        product: getValues('dealType'),
-        currency: getValues('currency'),
-        currencyPair: getValues('currencyPairs'),
-        effectiveConvention: getValues(getEffectiveConventionLabelName(rateType)),
-        terminationConvention: getValues(getTerminationConventionLabelName(rateType)),
-        termOptions: options.term,
-        setValue,
-      });
-    }
-  });
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern.ts
deleted file mode 100644
index 7d4545e24..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { UseFormSetValue } from 'react-hook-form';
-
-import { isDefaultOptionArray } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { SelectOptions, TicketFormInputs } from '../types';
-
-import { getShortestTerm } from './getShortestTerm';
-
-/** Устанавливает в поля шаблонное значение в зависимости от приоритетной шаблонной опции */
-export const doPatternFieldValueIsNoPatternBecauseOptionIsNoPattern = (
-  fields: (keyof TicketFormInputs)[],
-  options: SelectOptions,
-  setValue: UseFormSetValue<TicketFormInputs>,
-) =>
-  fields.forEach((field) => {
-    let patternValue;
-    if (isDefaultOptionArray(options[field])) {
-      patternValue = options[field].find((option) => option.priority && option.pattern)?.value;
-
-      // Для срока если нет приоритетного значения, то устанавливаем самый короткий срок
-      if (field === 'term' && !patternValue) {
-        patternValue = getShortestTerm(options.term);
-      }
-    }
-
-    setValue(field, patternValue ?? null);
-  });
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/formHandlers.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/formHandlers.ts
index 8e04b7299..2385cf72b 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/formHandlers.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/formHandlers.ts
@@ -2,123 +2,67 @@ import dayjs from 'dayjs';
 import { UseFormSetValue } from 'react-hook-form';
 
 import { commonDateFormat } from '@configs/standartDateFormat';
-import { enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 import { addTerm } from '@modules/pushDates/logic/utils/utils';
-import { DefaultOption } from '@widgets/OrdersJournal/components/TicketModal/types';
+import { DefaultOption, GetTicketOptionsParams } from '@widgets/OrdersJournal/components/TicketModal/types';
 
-import { isDefaultOptionArray, isValidConvention } from '@widgets/OrdersJournal/utils/typeGuards';
-import { SecondLegConvention } from '@widgets/SwapCalculator/types/table';
+import { getIsNoPatternOrder, getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
 import { DealFXSwopDirection, DealIRSOISDirection, DealXCCYDirection, TicketProduct } from 'types/SapfirSpfi';
 
-import { RateType, SelectOptionValue, TicketFormInputs } from '../types';
+import { RateType, TicketFormInputs } from '../types';
 
-import { getConvention } from './getConvention';
-import { getCurrenciesForEnrich } from './getCurrenciesForEnrich';
-import { getHasSomeOption } from './getHasSomeOption';
+import { getDefaultOpenValue } from './getDisabledDates';
 
 type HandleChangeProductProps = {
   product: TicketProduct;
-  rateType?: RateType;
-  rateType2?: RateType;
   setValue: UseFormSetValue<TicketFormInputs>;
 };
-export const handleChangeProduct = ({ product, rateType, rateType2, setValue }: HandleChangeProductProps) => {
+export const handleChangeProduct = ({ product, setValue }: HandleChangeProductProps) => {
   if (product === TicketProduct.FX_SWAP) {
     setValue('direction', DealFXSwopDirection.Buy);
   }
   if (product === TicketProduct.IRS_OIS) {
     setValue('direction', DealIRSOISDirection.Buy);
+    setValue('index2', null);
     setValue('rateType', RateType.FIXED);
     setValue('rateType2', RateType.FLOAT);
   }
   if (product === TicketProduct.XCCY) {
     setValue('direction', DealXCCYDirection.Buy);
-    if (rateType === RateType.FLOAT && rateType2 === RateType.FLOAT) {
-      setValue('rateType', RateType.FIXED);
-    }
-  }
-  if (product === TicketProduct.BASIS_XCCY) {
-    setValue('direction', DealXCCYDirection.Buy);
-    setValue('rateType', RateType.FLOAT);
-    setValue('rateType2', RateType.FLOAT);
   }
-  setValue('index', null);
-  setValue('index2', null);
+  setValue('effectiveDate', null);
+  setValue('terminationDate', null);
 };
 
 type HandleChangeCurrencyProps = {
+  currency: string | undefined;
   setValue: UseFormSetValue<TicketFormInputs>;
 };
-export const handleChangeCurrency = ({ setValue }: HandleChangeCurrencyProps) => {
-  setValue('index2', null);
+export const handleChangeCurrency = ({ currency, setValue }: HandleChangeCurrencyProps) => {
+  if (!currency) {
+    setValue('index2', null);
+    setValue('effectiveDate', null);
+    setValue('terminationDate', null);
+  }
 };
 
 type HandleChangeTermProps = {
   term: string | undefined | null;
   effectiveDate: string | null | undefined;
-  product: TicketProduct;
-  currency?: string | null;
-  currencyPair?: string | null;
-  effectiveConvention?: string | null;
-  terminationConvention?: string | null;
-  noPatternOrder?: TicketFormInputs['noPatternOrder'];
+  pattern: GetTicketOptionsParams['pattern'];
   setValue: UseFormSetValue<TicketFormInputs>;
 };
-export const handleChangeTerm = ({
-  term,
-  effectiveDate,
-  product,
-  currency,
-  currencyPair,
-  effectiveConvention,
-  terminationConvention,
-  noPatternOrder,
-  setValue,
-}: HandleChangeTermProps) => {
-  if (term) {
-    // рассчитываем даты по term с переносом через выходные только для нешаблонных ордеров
-    // В enrichBySecondDate добавляется 1 день. Здесь мы корректируем это
-    const newEffectiveDate = effectiveDate || dayjs().format(commonDateFormat.backendDateFormat);
-    const newEffectiveDateForCalendars = effectiveDate
-      ? dayjs(effectiveDate).subtract(1, 'day').format(commonDateFormat.backendDateFormat)
-      : newEffectiveDate;
+export const handleChangeTerm = ({ term, effectiveDate, pattern, setValue }: HandleChangeTermProps) => {
+  if (term && getIsNoPatternOrder(pattern)) {
+    // рассчитываем даты по term только для нешаблонных ордеров
+    const newEffectiveDate = effectiveDate ?? dayjs().add(1, 'day').format(commonDateFormat.backendDateFormat);
     const newTerminationDate = addTerm(newEffectiveDate, term).format(commonDateFormat.backendDateFormat);
-
-    if (!isValidConvention(terminationConvention)) {
-      setValue('effectiveDate', newEffectiveDate);
-      setValue('terminationDate', newTerminationDate);
-      return;
-    }
-
-    const [requestCurrency, faceUnit] = getCurrenciesForEnrich(product, currency, currencyPair);
-
-    enrichBySecondDate(
-      [
-        {
-          id: 1,
-          term,
-          // В enrichBySecondDate добавляется 1 день. Здесь мы корректируем это
-          sendingTime: newEffectiveDateForCalendars,
-          // Для даты начала переносим через выходные по effective конвенции первой ноги
-          convention: getConvention(effectiveConvention),
-        },
-      ],
-      {
-        secondLegConvention: SecondLegConvention[terminationConvention],
-        currency: requestCurrency,
-        faceUnit: faceUnit ?? '',
-        transactionDate: newEffectiveDateForCalendars,
-      },
-    ).then(([result]) => {
-      setValue('effectiveDate', result.transactionDate ?? null);
-      setValue('terminationDate', result.secondDate ?? null);
-    });
-  } else if (!term && !noPatternOrder) {
+    setValue('effectiveDate', newEffectiveDate);
+    setValue('terminationDate', newTerminationDate);
+  } else if (!term && getIsPatternOrder(pattern)) {
     // очищаем даты для шаблонных ордеров
     setValue('effectiveDate', null);
     setValue('terminationDate', null);
 
-    // очищаем зависимые поля для шаблонных ордеров
     setValue('amount1', null);
     setValue('amount2', null);
     setValue('farLegAmount1', null);
@@ -130,165 +74,76 @@ export const handleChangeTerm = ({
 
 type HandleChangeEffectiveDateProps = {
   effectiveDate: string | undefined | null;
-  term?: string | null;
+  terminationDate: string | undefined | null;
+  pattern: GetTicketOptionsParams['pattern'];
   shortestTerm: string;
-  product: TicketProduct;
-  currency?: string | null;
-  currencyPair?: string | null;
-  effectiveConvention?: string | null;
-  terminationConvention?: string | null;
-  noPatternOrder?: TicketFormInputs['noPatternOrder'];
-  termOptions?: SelectOptionValue;
+  longestTerm: string;
   setValue: UseFormSetValue<TicketFormInputs>;
 };
 export const handleChangeEffectiveDate = ({
   effectiveDate,
-  term,
+  terminationDate,
+  pattern,
   shortestTerm,
-  product,
-  currency,
-  currencyPair,
-  effectiveConvention,
-  terminationConvention,
-  termOptions,
+  longestTerm,
   setValue,
 }: HandleChangeEffectiveDateProps) => {
-  if (!effectiveDate) {
+  if (getIsPatternOrder(pattern)) {
     return;
   }
 
-  const [requestCurrency, faceUnit] = getCurrenciesForEnrich(product, currency, currencyPair);
-  const date = dayjs(effectiveDate);
-
-  enrichBySecondDate(
-    [
-      {
-        id: 1,
-        term: '',
-        // В enrichBySecondDate добавляется 1 день. Здесь мы корректируем это
-        sendingTime: date.subtract(1, 'day').format(commonDateFormat.backendDateFormat),
-        // Для даты начала переносим через выходные по effective конвенции первой ноги (для FX_SWAP по MODFOLLOWING)
-        convention: getConvention(effectiveConvention),
-      },
-    ],
-    {
-      secondLegConvention: isValidConvention(terminationConvention)
-        ? SecondLegConvention[terminationConvention]
-        : SecondLegConvention.MODFOLLOWING,
-      currency: requestCurrency,
-      faceUnit: faceUnit ?? '',
-      transactionDate: effectiveDate,
-    },
-    true,
-  ).then(([effectiveResult]) => {
-    setValue('effectiveDate', effectiveResult.transactionDate ?? null);
+  setValue('term', null);
 
-    // Надо Установить приоритет использования дефолтных значений:
-    // 1. term из формы
-    // 2. priorityTerm из опций - этот пункт на данный момент не реализован
-    // 3. shortestTerm
-    const actualTerm =
-      term && isDefaultOptionArray(termOptions) && getHasSomeOption(term, termOptions) ? term : shortestTerm;
+  if (!effectiveDate) {
+    return;
+  }
 
-    enrichBySecondDate(
-      [
-        {
-          id: 1,
-          term: actualTerm,
-          // В enrichBySecondDate добавляется 1 день. Здесь мы корректируем это
-          sendingTime: date.subtract(1, 'day').format(commonDateFormat.backendDateFormat),
-          // Для даты окончания переносим через выходные по termination конвенции первой ноги
-          // (для FX_SWAP по MODFOLLOWING)
-          convention: getConvention(terminationConvention),
-        },
-      ],
-      {
-        secondLegConvention: isValidConvention(terminationConvention)
-          ? SecondLegConvention[terminationConvention]
-          : SecondLegConvention.MODFOLLOWING,
-        currency: requestCurrency,
-        faceUnit: faceUnit ?? '',
-        transactionDate: effectiveResult.transactionDate,
-      },
-      false,
-      true,
-    ).then(([terminationResult]) => {
-      setValue('term', actualTerm);
-      setValue('terminationDate', terminationResult.secondDate);
+  const date = dayjs(effectiveDate);
+  if (
+    dayjs(terminationDate).isBefore(date) ||
+    (date && dayjs(terminationDate) > addTerm(date.format(commonDateFormat.backendDateFormat), longestTerm)) ||
+    !terminationDate
+  ) {
+    const defaultTerminationDate = getDefaultOpenValue({
+      shortestTerm,
+      dateToCompare: effectiveDate,
     });
-  });
+    setValue('term', shortestTerm);
+    setValue('terminationDate', defaultTerminationDate?.format(commonDateFormat.backendDateFormat) ?? null);
+  }
 };
 
 type HandleChangeTerminationDateProps = {
   effectiveDate: string | undefined | null;
   terminationDate: string | undefined | null;
-  shortestTerm: string;
+  pattern: GetTicketOptionsParams['pattern'];
   longestTerm: string;
-  product: TicketProduct;
-  currency?: string | null;
-  currencyPair?: string | null;
-  terminationConvention?: string | null;
-  noPatternOrder?: TicketFormInputs['noPatternOrder'];
-  notResetTerm?: boolean;
   setValue: UseFormSetValue<TicketFormInputs>;
 };
 export const handleChangeTerminationDate = ({
   effectiveDate,
   terminationDate,
-  shortestTerm,
+  pattern,
   longestTerm,
-  product,
-  currency,
-  currencyPair,
-  terminationConvention,
-  notResetTerm,
   setValue,
 }: HandleChangeTerminationDateProps) => {
-  if (!notResetTerm) {
-    setValue('term', null);
+  if (getIsPatternOrder(pattern)) {
+    return;
   }
 
+  setValue('term', null);
+
   if (!terminationDate) {
     return;
   }
 
-  const [requestCurrency, faceUnit] = getCurrenciesForEnrich(product, currency, currencyPair);
   const date = dayjs(effectiveDate);
-  enrichBySecondDate(
-    [
-      {
-        id: 1,
-        term: '',
-        // В enrichBySecondDate добавляется 1 день. Здесь мы корректируем это
-        sendingTime: date.subtract(1, 'day').format(commonDateFormat.backendDateFormat),
-        // Для даты окончания переносим через выходные по termination конвенции первой ноги
-        // (для FX_SWAP по MODFOLLOWING)
-        convention: getConvention(terminationConvention),
-      },
-    ],
-    {
-      secondLegConvention: isValidConvention(terminationConvention)
-        ? SecondLegConvention[terminationConvention]
-        : SecondLegConvention.MODFOLLOWING,
-      currency: requestCurrency,
-      faceUnit: faceUnit ?? '',
-      transactionDate: terminationDate,
-    },
-    false,
-    true,
-  ).then(([terminationResult]) => {
-    const newTerminationDate = terminationResult.secondDate;
-    setValue('terminationDate', newTerminationDate);
-
-    const smallestEffectiveDate = addTerm(date.format(commonDateFormat.backendDateFormat), shortestTerm);
-    const biggestEffectiveDate = addTerm(date.format(commonDateFormat.backendDateFormat), longestTerm);
-    if (
-      dayjs(newTerminationDate).isBefore(smallestEffectiveDate) ||
-      (date && dayjs(newTerminationDate) > biggestEffectiveDate)
-    ) {
-      setValue('effectiveDate', null);
-    }
-  });
+  if (
+    dayjs(terminationDate).isBefore(date) ||
+    (date && dayjs(terminationDate) > addTerm(date.format(commonDateFormat.backendDateFormat), longestTerm))
+  ) {
+    setValue('effectiveDate', null);
+  }
 };
 
 type HandleChangeRateTypeProps = {
@@ -299,10 +154,8 @@ type HandleChangeRateTypeProps = {
 /** Для XCCY */
 export const handleChangeRateType = ({ rateType, rateType2, setValue }: HandleChangeRateTypeProps) => {
   if (rateType2 === RateType.FLOAT && rateType === RateType.FLOAT) {
-    setValue('dealType', TicketProduct.BASIS_XCCY);
+    setValue('rateType2', RateType.FIXED);
     setValue('index2', null);
-  } else {
-    setValue('dealType', TicketProduct.XCCY);
   }
   if (rateType === RateType.FIXED) {
     setValue('index', null);
@@ -315,10 +168,8 @@ export const handleChangeRateType = ({ rateType, rateType2, setValue }: HandleCh
 /** Для XCCY */
 export const handleChangeRateType2 = ({ rateType, rateType2, setValue }: HandleChangeRateTypeProps) => {
   if (rateType === RateType.FLOAT && rateType2 === RateType.FLOAT) {
-    setValue('dealType', TicketProduct.BASIS_XCCY);
+    setValue('rateType', RateType.FIXED);
     setValue('index', null);
-  } else {
-    setValue('dealType', TicketProduct.XCCY);
   }
   if (rateType2 === RateType.FIXED) {
     setValue('index2', null);
@@ -361,11 +212,3 @@ export const handleChangeFloatingAddOffset2 = ({
     setValue('floatingAddLenghtOffset2', null);
   }
 };
-
-export const handleChangeEffectiveConvention = (props: HandleChangeEffectiveDateProps) => {
-  handleChangeEffectiveDate(props);
-};
-
-export const handleChangeTerminationConvention = (props: HandleChangeEffectiveDateProps) => {
-  handleChangeEffectiveDate(props);
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getBaseSencitiveFieldsForOptions.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getBaseSencitiveFieldsForOptions.ts
deleted file mode 100644
index 2d96750de..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getBaseSencitiveFieldsForOptions.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { getIsFxSwapProduct } from '../../TicketModal/utils/getIsFxSwapProduct';
-import { RateType, TicketFormInputs } from '../types';
-
-/**
- * Возвращает набор чувствительных полей, от значений которых зависят все опции,
- * в зависимости от выбранных на форме параметров
- * */
-export const getBaseSencitiveFieldsForOptions = (
-  form: Pick<TicketFormInputs, 'dealType' | 'rateType' | 'rateType2'>,
-) => {
-  const result: (keyof TicketFormInputs)[] = [
-    'term',
-    form.dealType === TicketProduct.IRS_OIS ? 'currency' : 'currencyPairs',
-  ];
-
-  const isFxSwapProduct = getIsFxSwapProduct(form);
-  if (!isFxSwapProduct && form.rateType !== RateType.FIXED) {
-    result.push('index');
-  }
-  if (!isFxSwapProduct && form.rateType2 !== RateType.FIXED) {
-    result.push('index2');
-  }
-  return result;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getConvention.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getConvention.ts
deleted file mode 100644
index d058169b4..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getConvention.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { isValidConvention } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { DEFAULT_CONVENTION } from '../const';
-
-export const getConvention = (convention?: string | null) =>
-  isValidConvention(convention) ? convention : DEFAULT_CONVENTION;
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getCurrenciesForEnrich.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getCurrenciesForEnrich.ts
deleted file mode 100644
index 3af063444..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getCurrenciesForEnrich.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { CURRENCY_PAIR_DIVIDER } from '../const';
-
-export const getCurrenciesForEnrich = (
-  product: TicketProduct,
-  currency?: string | null,
-  currencyPair?: string | null,
-) => (product === TicketProduct.IRS_OIS ? [currency ?? undefined] : (currencyPair ?? '').split(CURRENCY_PAIR_DIVIDER));
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getDisabledDates.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getDisabledDates.ts
index ccf193766..682c2dbfd 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getDisabledDates.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/getDisabledDates.ts
@@ -19,8 +19,9 @@ export const getDisabledDates =
     const minDisabledDate = minDateToCompare > currentDate;
     const maxDisabledDate =
       currentDate > addTerm(dayjs(dateToCompare).format(commonDateFormat.backendDateFormat), longestTerm);
+    const isWeekend = [0, 6].includes(currentDate.day());
 
-    return minDisabledDate || maxDisabledDate;
+    return minDisabledDate || maxDisabledDate || isWeekend;
   };
 
 type GetDefaultOpenValueProps = {
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldOptionIsPattern.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldOptionIsPattern.ts
deleted file mode 100644
index 19d04c8ab..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldOptionIsPattern.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { isDefaultOptionArray } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { SelectOptionValue } from '../types';
-
-export const getFieldOptionIsPattern = (
-  fieldValue?: string | number | boolean | null,
-  fieldOptions?: SelectOptionValue,
-  /** Флаг что не нужно проверять (для зависимых полей) */
-  noCheckDependent?: boolean,
-): boolean => {
-  // Если не нужно проверять, то это шаблонное поле
-  if (noCheckDependent) {
-    return true;
-  }
-  if (isDefaultOptionArray(fieldOptions)) {
-    const fieldOption = fieldOptions.find((option) => option.value === fieldValue);
-    if (!fieldOption || !fieldValue) {
-      return false;
-    }
-
-    return fieldOption.pattern === undefined ? true : fieldOption.pattern;
-  }
-  return true;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldValueIsNoPatternBecauseFilled.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldValueIsNoPatternBecauseFilled.ts
deleted file mode 100644
index df4806401..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldValueIsNoPatternBecauseFilled.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { HasPatternFieldFlags } from '../types';
-
-/** Возвращает, является ли полученное значение нешаблонным в разрезе флага HasPatternFieldFlags.filledIsNoPattern */
-export const getFieldValueIsNoPatternBecauseFilled = (
-  hasPatternFieldFlags?: HasPatternFieldFlags,
-  fieldValue?: string | number | boolean | null,
-): boolean => !!hasPatternFieldFlags?.filledIsNoPattern && !!fieldValue;
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldsAreNoPatternBecauseNoPatternValue.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldsAreNoPatternBecauseNoPatternValue.ts
deleted file mode 100644
index 3b15a9e68..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getFieldsAreNoPatternBecauseNoPatternValue.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import isNil from 'lodash/isNil';
-
-import { HasPatternFieldFlags } from '../types';
-
-/** Возвращает, является ли полученное значение нешаблонным в разрезе флага HasPatternFieldFlags.patternValue */
-export const getFieldsAreNoPatternBecauseNoPatternValue = (
-  hasPatternFieldFlags?: HasPatternFieldFlags,
-  fieldValue?: string | number | boolean | null,
-): boolean => !isNil(hasPatternFieldFlags?.patternValue) && hasPatternFieldFlags?.patternValue !== fieldValue;
diff --git a/src/uikit/InputNumber/utils/getFormInputNumberResult.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getFormInputNumberResult.ts
similarity index 63%
rename from src/uikit/InputNumber/utils/getFormInputNumberResult.ts
rename to src/widgets/OrdersJournal/components/TicketForm/utils/getFormInputNumberResult.ts
index ff13e89e1..19756fc26 100644
--- a/src/uikit/InputNumber/utils/getFormInputNumberResult.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/getFormInputNumberResult.ts
@@ -1,10 +1,6 @@
 import { InputProps } from 'antd';
 
-export const getFormInputNumberResult = (
-  value: string | null | undefined,
-  min: InputProps['min'],
-  max: InputProps['max'],
-): string => {
+export const getFormInputNumberResult = (value: string, min: InputProps['min'], max: InputProps['max']): string => {
   let result = value;
   if (value != null && value !== '') {
     if (min != null) {
@@ -14,5 +10,5 @@ export const getFormInputNumberResult = (
       result = Number(value) > Number(max) ? String(max) : result;
     }
   }
-  return result ?? '';
+  return result;
 };
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getFormInputNumberValue.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getFormInputNumberValue.ts
new file mode 100644
index 000000000..05848b447
--- /dev/null
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/getFormInputNumberValue.ts
@@ -0,0 +1 @@
+export const getFormInputNumberValue = (value: number) => (value != null ? String(value) : '');
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getHasPatternValues.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getHasPatternValues.ts
deleted file mode 100644
index 0f445f6c2..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getHasPatternValues.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { HasPatternFields, TicketFormInputs } from '../types';
-
-type GetHasPatternValuesProps = {
-  hasPatternFields: HasPatternFields;
-  form: TicketFormInputs;
-};
-export const getHasPatternValues = ({ hasPatternFields, form }: GetHasPatternValuesProps) => {
-  const typedkeys = Object.keys(hasPatternFields) as (keyof TicketFormInputs)[];
-  return typedkeys.reduce<Partial<TicketFormInputs>>((acc, field) => ({ ...acc, [field]: form[field] }), {}) ?? {};
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getHasSomeOption.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getHasSomeOption.ts
index bd3beb587..638bfb642 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getHasSomeOption.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/getHasSomeOption.ts
@@ -4,4 +4,4 @@ import { getOptionValue } from '../../TicketModal/utils/getOptionValue';
 export const getHasSomeOption = (
   compareValue?: string | number | boolean | null,
   options?: (string | DefaultOption)[],
-): boolean => !!options?.some((option) => getOptionValue(option) === compareValue);
+) => options?.some((option) => getOptionValue(option) === compareValue);
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getIsAllSensitiveFieldsFilledPattern.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getIsAllSensitiveFieldsFilledPattern.ts
deleted file mode 100644
index f0344753e..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getIsAllSensitiveFieldsFilledPattern.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { TicketFormInputs } from '../types';
-
-export const getIsAllSensitiveFieldsFilledPattern = (
-  prevMustPattern: boolean,
-  sencitiveFieldsAreNoPatternBecauseOptionIsNoPattern: (keyof TicketFormInputs)[],
-  noPatternOrder?: boolean | null,
-) => prevMustPattern && (!noPatternOrder || !sencitiveFieldsAreNoPatternBecauseOptionIsNoPattern.length);
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getLongestTerm.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getLongestTerm.ts
index 2b102dade..501dd8065 100644
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getLongestTerm.ts
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/getLongestTerm.ts
@@ -1,12 +1,8 @@
-import { isDefaultOptionArray } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { DEFAULT_TERM } from '../const';
 import { SelectOptions } from '../types';
 
-export const getLongestTerm = (termOptions?: SelectOptions['term']): string => {
-  const longestTermIndex: number = (termOptions?.length ?? 0) - 1;
-  if (isDefaultOptionArray(termOptions) && termOptions[longestTermIndex]?.value) {
-    return String(termOptions[longestTermIndex].value);
-  }
-  return DEFAULT_TERM;
+export const getLongestTerm = (termOptions: SelectOptions['term']): string => {
+  const typedTermOptions = termOptions as string[];
+  return Array.isArray(typedTermOptions) && typedTermOptions.length
+    ? typedTermOptions[typedTermOptions.length - 1]
+    : '1D';
 };
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getNoCheckDependent.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getNoCheckDependent.ts
deleted file mode 100644
index 522168f05..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getNoCheckDependent.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { DefaultOption } from '../../TicketModal/types';
-import { SelectOptions, TicketFormInputs } from '../types';
-
-type GetNoCheckDependentProps = {
-  field: keyof TicketFormInputs;
-  fieldValue?: string | number | boolean | null;
-  form: TicketFormInputs;
-  options: SelectOptions;
-};
-export const getNoCheckDependent = ({ field, fieldValue, form, options }: GetNoCheckDependentProps): boolean => {
-  const offsetList1PriorityValue = (options.floatingAddOffset1 as DefaultOption[])?.find(
-    (option) => option.priority,
-  )?.value;
-  const offsetList2PriorityValue = (options.floatingAddOffset2 as DefaultOption[])?.find(
-    (option) => option.priority,
-  )?.value;
-  return (
-    !fieldValue &&
-    ((field === 'floatingAddLenghtOffset1' && form.floatingAddOffset1 === offsetList1PriorityValue) ||
-      (field === 'floatingAddLenghtOffset2' && form.floatingAddOffset2 === offsetList2PriorityValue))
-  );
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getNoCheckDependentFields.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getNoCheckDependentFields.ts
deleted file mode 100644
index 6bdb32da8..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getNoCheckDependentFields.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { isDefaultOptionArray } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { SelectOptions, SelectOptionValue, TicketFormInputs } from '../types';
-
-const getOffsetListPriorityValue = (dependentOption?: SelectOptionValue) =>
-  isDefaultOptionArray(dependentOption) ? dependentOption?.find((option) => option.priority)?.value : false;
-
-export const getNoCheckDependentFields = (
-  form: Pick<TicketFormInputs, 'floatingAddOffset1' | 'floatingAddOffset2'>,
-  options: SelectOptions,
-) => {
-  const offsetList1PriorityValue = getOffsetListPriorityValue(options.floatingAddOffset1);
-  const result: (keyof TicketFormInputs)[] =
-    form.floatingAddOffset1 === offsetList1PriorityValue ? ['floatingAddLenghtOffset1'] : [];
-
-  const offsetList2PriorityValue = getOffsetListPriorityValue(options.floatingAddOffset2);
-  if (form.floatingAddOffset2 === offsetList2PriorityValue) {
-    result.push('floatingAddLenghtOffset2');
-  }
-
-  return result;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getShortestTerm.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getShortestTerm.ts
deleted file mode 100644
index 330ef8fee..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getShortestTerm.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { isDefaultOptionArray } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { DEFAULT_TERM } from '../const';
-import { SelectOptions } from '../types';
-
-export const getShortestTerm = (termOptions?: SelectOptions['term']): string => {
-  if (isDefaultOptionArray(termOptions) && termOptions[0]?.value) {
-    return String(termOptions[0].value);
-  }
-  return DEFAULT_TERM;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getShortestestTerm.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getShortestestTerm.ts
new file mode 100644
index 000000000..f93618b45
--- /dev/null
+++ b/src/widgets/OrdersJournal/components/TicketForm/utils/getShortestestTerm.ts
@@ -0,0 +1,6 @@
+import { SelectOptions } from '../types';
+
+export const getShortestTerm = (termOptions: SelectOptions['term']): string => {
+  const typedTermOptions = termOptions as string[];
+  return Array.isArray(typedTermOptions) && typedTermOptions.length ? typedTermOptions[0] : '1D';
+};
diff --git a/src/widgets/OrdersJournal/components/TicketForm/utils/getisFirstIteration.ts b/src/widgets/OrdersJournal/components/TicketForm/utils/getisFirstIteration.ts
deleted file mode 100644
index e6a41b9c1..000000000
--- a/src/widgets/OrdersJournal/components/TicketForm/utils/getisFirstIteration.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { TicketFormInputs } from '../types';
-
-export const getisFirstIteration = (
-  step: number,
-  fieldsAreNoPatternBecauseFilled: (keyof TicketFormInputs)[],
-  fieldsAreNoPatternBecauseNoPatternValue: (keyof TicketFormInputs)[],
-): boolean =>
-  step === 1 && !!(fieldsAreNoPatternBecauseFilled.length || fieldsAreNoPatternBecauseNoPatternValue.length);
diff --git a/src/widgets/OrdersJournal/components/TicketModal/TicketModal.tsx b/src/widgets/OrdersJournal/components/TicketModal/TicketModal.tsx
index 54c94566a..bf04ef3a0 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/TicketModal.tsx
+++ b/src/widgets/OrdersJournal/components/TicketModal/TicketModal.tsx
@@ -12,12 +12,13 @@ import { customersBySpfiPermissionSelector } from '@store/selectors/customersDat
 import { Modal, ModalProps } from '@uikit/Modal';
 import { useDefaultTickedParams } from '@widgets/OrdersJournal/components/TicketModal/hooks/useDefaultTickedParams';
 
+import { getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
 import { TicketType } from 'types/SapfirSpfi';
 
 import { ModalData } from './components/ModalData';
 import { getCounterparties } from './fetchData/getCounterparties';
 import { getCustomers } from './fetchData/getCustomers';
-import { useHandleSubmitDraftSuccessCallback } from './hooks/useHandleSubmitDraftSuccessCallback';
 import { useHandleSubmitSuccessCallback } from './hooks/useHandleSubmitSuccessCallback';
 import styles from './TicketModal.module.scss';
 import { OrdersJournalPluginConfig, TicketParams } from './types';
@@ -31,7 +32,6 @@ export const TicketModal = ({ onClose, ticketParams, className, widgetId, ...mod
   const spfiCustomers = useAppSelect(customersBySpfiPermissionSelector);
 
   const handleSubmitSuccess = useHandleSubmitSuccessCallback({ ticketParams });
-  const handleSubmitDrafSuccess = useHandleSubmitDraftSuccessCallback({ ticketParams });
 
   const config: OrdersJournalPluginConfig = useMemo(
     () =>
@@ -42,8 +42,9 @@ export const TicketModal = ({ onClose, ticketParams, className, widgetId, ...mod
             ticketOptionsEndpoint: draftTicketFormController.getTicketOptions,
             getCounterpartyOptions: getCustomers(spfiCustomers),
             accountsOptionsEndpoint: () => Promise.resolve({ data: {} }) as AxiosPromise,
+            submitEndpoint: draftTicketFormController.createTicket,
             orderEndpoint: draftTicketFormController.getDraftById,
-            onSuccessSubmit: handleSubmitDrafSuccess,
+            metricsEndpoint: () => Promise.resolve({}) as AxiosPromise,
           }
         : // Конфиг ордера трейдера
           {
@@ -51,14 +52,20 @@ export const TicketModal = ({ onClose, ticketParams, className, widgetId, ...mod
             ticketOptionsEndpoint: ticketFormController.getTicketOptions,
             getCounterpartyOptions: getCounterparties,
             accountsOptionsEndpoint: ticketFormController.getAccountsList,
+            submitEndpoint: getIsPatternOrder(ticketParams.pattern)
+              ? ticketFormController.createTicket
+              : ticketFormController.createTicketNoPattern,
             orderEndpoint:
               ticketParams.type === TicketType.CreateFromDraft
                 ? draftTicketFormController.getDraftById
                 : ticketFormController.getOrderById,
             defaultTicketParamsEndpoint: ticketFormController.getOrderDepth,
             onSuccessSubmit: handleSubmitSuccess,
+            metricsEndpoint: getIsPatternOrder(ticketParams.pattern)
+              ? ticketFormController.getOrderMetrics
+              : ticketFormController.getOrderMetricsNoPattern,
           },
-    [ticketParams.type, spfiCustomers, handleSubmitDrafSuccess, handleSubmitSuccess],
+    [ticketParams.type, ticketParams.pattern, spfiCustomers, handleSubmitSuccess],
   );
 
   const { defaultValues, forcedOptions, loading, error } = useDefaultTickedParams(ticketParams, config, spfiCustomers);
diff --git a/src/widgets/OrdersJournal/components/TicketModal/__tests__/TicketModal.test.tsx b/src/widgets/OrdersJournal/components/TicketModal/__tests__/TicketModal.test.tsx
index 46d0b29bc..cb0e39c44 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/__tests__/TicketModal.test.tsx
+++ b/src/widgets/OrdersJournal/components/TicketModal/__tests__/TicketModal.test.tsx
@@ -8,6 +8,7 @@ import { useFetchWithParams } from '@widgets/OrdersJournal/components/TicketModa
 
 import { TicketType } from 'types/SapfirSpfi';
 
+import { getIsPatternOrder } from '../../../utils/getIsPatternOrder';
 import { useHandleSubmitSuccessCallback } from '../hooks/useHandleSubmitSuccessCallback';
 import { TicketModal, TicketModalProps } from '../TicketModal';
 
@@ -31,6 +32,7 @@ jest.mock('@api/controllers/ticketFormController');
 jest.mock('@api/controllers/draftTicketFormController');
 jest.mock('../utils/convertOrderToTicketParams');
 jest.mock('../utils/getModalTitle');
+jest.mock('../../../utils/getIsPatternOrder');
 jest.mock('../components/Ticket', () => ({
   Ticket: jest.fn(({ onCancel, onSuccess }) => (
     <div data-testid="ticket-component">
@@ -118,6 +120,7 @@ describe('TicketModal', () => {
     });
     (useHandleSubmitSuccessCallback as jest.Mock).mockReturnValue(jest.fn());
     (getModalTitle as jest.Mock).mockReturnValue('Test Modal Title');
+    (getIsPatternOrder as unknown as jest.Mock).mockReturnValue(true);
   });
 
   describe('Загрузка данных', () => {
diff --git a/src/widgets/OrdersJournal/components/TicketModal/components/ModalData.tsx b/src/widgets/OrdersJournal/components/TicketModal/components/ModalData.tsx
index 07b39222a..283ce4609 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/components/ModalData.tsx
+++ b/src/widgets/OrdersJournal/components/TicketModal/components/ModalData.tsx
@@ -36,10 +36,6 @@ export const ModalData = ({
   const isTraderAuthorized = useSpfiAuthSelector();
   const isSpfiBroker = useAppSelect(isSPFIBrokerSelector);
 
-  const handleAdditionalClick = () => {
-    onClose?.(false);
-  };
-
   const handleCancel = () => {
     onClose?.(false);
   };
@@ -66,7 +62,6 @@ export const ModalData = ({
   return isSpfiBroker || isTraderAuthorized ? (
     <Ticket
       ticketParams={ticketParams}
-      onAdditionalClick={handleAdditionalClick}
       onCancel={handleCancel}
       onSuccess={handleSuccess}
       defaultValues={defaultValues}
diff --git a/src/widgets/OrdersJournal/components/TicketModal/components/Ticket/Ticket.tsx b/src/widgets/OrdersJournal/components/TicketModal/components/Ticket/Ticket.tsx
index f23bb9294..e2476c6bd 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/components/Ticket/Ticket.tsx
+++ b/src/widgets/OrdersJournal/components/TicketModal/components/Ticket/Ticket.tsx
@@ -3,6 +3,7 @@ import React from 'react';
 import { FormProvider } from 'react-hook-form';
 
 import { TicketForm } from '@widgets/OrdersJournal/components/TicketForm';
+import { TICKET_PROPS_BY_TYPE } from '@widgets/OrdersJournal/components/TicketModal/const';
 import { useCreateTicket } from '@widgets/OrdersJournal/components/TicketModal/hooks/useCreateTiket';
 import { useDisabledFields } from '@widgets/OrdersJournal/components/TicketModal/hooks/useDisabledFields';
 import { useOptions } from '@widgets/OrdersJournal/components/TicketModal/hooks/useOptions';
@@ -13,16 +14,10 @@ import { OrdersJournalPluginConfig, TicketParams } from '@widgets/OrdersJournal/
 
 import { SelectOptions, TicketFormInputs } from '../../../TicketForm/types';
 
-import { useAdditionalClick } from '../../hooks/useAdditionalClick';
-
-import { useFieldsWithPattern } from '../../hooks/useFieldsWithPattern';
-import { getTicketProps } from '../../utils/getTicketProps';
-
 import styles from './Ticket.module.scss';
 
 type TicketProps = {
   ticketParams: TicketParams;
-  onAdditionalClick?: VoidFunction;
   onSuccess?: VoidFunction;
   onCancel?: VoidFunction;
   defaultValues?: Partial<TicketFormInputs>;
@@ -30,48 +25,41 @@ type TicketProps = {
   config: OrdersJournalPluginConfig;
 };
 
-export const Ticket = ({
-  ticketParams,
-  onAdditionalClick,
-  onCancel,
-  onSuccess,
-  defaultValues,
-  forcedOptions,
-  config,
-}: TicketProps) => {
-  const { type } = ticketParams;
+export const Ticket = ({ ticketParams, onCancel, onSuccess, defaultValues, forcedOptions, config }: TicketProps) => {
+  const { type, orderId, pattern = 'PATTERN' } = ticketParams;
 
-  const { methods, form, defaultFormValues } = useTicketForm({ defaultValues, ticketParams });
+  const { submitText, cancelText, submitBtnProps, additionalText } = TICKET_PROPS_BY_TYPE[ticketParams.type];
 
-  const { submitText, cancelText, submitBtnProps, additionalText } = getTicketProps(type, form);
+  const { methods, form, defaultFormValues } = useTicketForm({ defaultValues, pattern, ticketParams });
 
   const {
     options,
     error: optionsError,
     loading: optionsLoading,
-  } = useOptions({ form, forcedOptions, config, ticketType: type });
+  } = useOptions({ form, forcedOptions, pattern, config });
 
   const disabledFields = useDisabledFields({
     form,
     options,
     type,
+    pattern,
     config,
     defaultFormValues,
   });
-  const requiredFields = useRequiredFields({ form, options, type, config });
-
-  const hasPatternFields = useFieldsWithPattern({ form, options });
+  const requiredFields = useRequiredFields({ form, options, type, pattern, config });
 
-  const { metrics, fetchMetrics, error: metricsError } = useOrderMetrics({ form, requiredFields, options });
+  const {
+    metrics,
+    fetchMetrics,
+    error: metricsError,
+  } = useOrderMetrics({ form, requiredFields, config, pattern, options });
 
   const {
     submitTicketForm,
     errorText,
     loading: createTicketLoading,
     clearError,
-  } = useCreateTicket({ onSuccess, ticketParams, config, options });
-
-  const { handleAdditionalClick } = useAdditionalClick({ onAdditionalClick, ticketParams });
+  } = useCreateTicket({ onSuccess, type, orderId, pattern, config, options });
 
   return (
     <FormProvider {...methods}>
@@ -79,9 +67,7 @@ export const Ticket = ({
         options={options}
         requiredFields={requiredFields}
         disabledFields={disabledFields}
-        hasPatternFields={hasPatternFields}
         defaultValues={defaultFormValues}
-        onAdditionalClick={handleAdditionalClick}
         onCancel={onCancel}
         onSubmit={submitTicketForm}
         onInvalid={clearError}
@@ -95,7 +81,8 @@ export const Ticket = ({
         submitBtnProps={submitBtnProps}
         orderMetrics={metrics}
         onCalc={fetchMetrics}
-        ticketParams={ticketParams}
+        ticketType={type}
+        pattern={pattern}
       />
     </FormProvider>
   );
diff --git a/src/widgets/OrdersJournal/components/TicketModal/const.ts b/src/widgets/OrdersJournal/components/TicketModal/const.ts
index 10ac1b6fa..4084a7f80 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/const.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/const.ts
@@ -79,7 +79,6 @@ export const REQUIRED_FIELDS = {
   [TicketProduct.IRS_OIS]: REQUIRED_FIELDS_IRS_OIS,
   [TicketProduct.FX_SWAP]: REQUIRED_FIELDS_FX_SWAP,
   [TicketProduct.XCCY]: REQUIRED_FIELDS_XCCY,
-  [TicketProduct.BASIS_XCCY]: REQUIRED_FIELDS_XCCY,
 };
 
 export const CREATE_TICKET_DISABLED_FIELDS: (keyof TicketFormInputs)[] = [
@@ -88,6 +87,7 @@ export const CREATE_TICKET_DISABLED_FIELDS: (keyof TicketFormInputs)[] = [
   'farLegAmount1',
   'farLegAmount2',
   'farLegRate',
+  'noPatternOrder',
 ];
 
 const ACCEPT_TICKET_ENABLED_FIELDS: (keyof TicketFormInputs)[] = ['account', 'clientCode', 'comment', 'broker'];
@@ -489,7 +489,7 @@ export const DISABLED_FIELDS: Record<TicketType, (keyof TicketFormInputs)[]> = {
     CREATE_FROM_DRAFT_ENABLED_FIELDS,
     TICKET_FORM_ALL_FIELDS,
   ),
-  [TicketType.OpenDraft]: CREATE_TICKET_DISABLED_FIELDS,
+  [TicketType.OpenDraft]: OPEN_DRAFT_DISABLED_FIELDS,
 };
 
 export const DIRECTION_MAP: Record<string, DealIRSOISDirection | DealFXSwopDirection | DealXCCYDirection> = {
diff --git a/src/widgets/OrdersJournal/components/TicketModal/fetchData/__tests__/submitForm.test.ts b/src/widgets/OrdersJournal/components/TicketModal/fetchData/__tests__/submitForm.test.ts
index 4f79e895c..844933ba8 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/fetchData/__tests__/submitForm.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/fetchData/__tests__/submitForm.test.ts
@@ -1,6 +1,6 @@
 import { ticketFormController } from '@api/controllers/ticketFormController';
-import { SelectOptions, TicketFormInputs, TradingMode } from '@widgets/OrdersJournal/components/TicketForm/types';
-import { DealIRSOISDirection, TicketProduct, TicketType } from 'types/SapfirSpfi';
+import { SelectOptions, TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
+import { TicketProduct, TicketType } from 'types/SapfirSpfi';
 
 import { toasts } from '../../services/toasts';
 import { GetTicketOptionsParams, OrdersJournalPluginConfig } from '../../types';
@@ -40,8 +40,8 @@ const mockCancelSuccess = toasts.cancelSuccess as jest.Mock;
 const createMockProps = (overrides: Partial<Parameters<typeof submitForm>[0]> = {}) => {
   const mockData: TicketFormInputs = {
     dealType: TicketProduct.IRS_OIS,
-    direction: DealIRSOISDirection.Buy,
-    tradingMode: TradingMode.Address,
+    direction: 'Buy' as any,
+    tradingMode: 'ADDRESS' as any,
     ...overrides.data,
   };
 
@@ -50,7 +50,9 @@ const createMockProps = (overrides: Partial<Parameters<typeof submitForm>[0]> =
     ticketOptionsEndpoint: jest.fn(),
     getCounterpartyOptions: jest.fn(),
     accountsOptionsEndpoint: jest.fn(),
+    submitEndpoint: jest.fn().mockResolvedValue({ data: null }),
     orderEndpoint: jest.fn(),
+    metricsEndpoint: jest.fn(),
   };
 
   const mockOptions: SelectOptions = {};
@@ -78,6 +80,7 @@ describe('submitForm', () => {
       expect(mockCreateTicket).toHaveBeenCalledWith({
         data: props.data,
         signal: props.signal,
+        pattern: props.pattern,
         config: props.config,
         options: props.options,
       });
diff --git a/src/widgets/OrdersJournal/components/TicketModal/fetchData/createTicket.ts b/src/widgets/OrdersJournal/components/TicketModal/fetchData/createTicket.ts
index 3e58a5450..5ee7f8642 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/fetchData/createTicket.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/fetchData/createTicket.ts
@@ -1,35 +1,30 @@
-import { draftTicketFormController } from '@api/controllers/draftTicketFormController';
-import { ticketFormController } from '@api/controllers/ticketFormController';
 import { SelectOptions, TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
 
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { CreateNoPatternTicketRequestData, CreateTicketRequestData, OrdersJournalPluginConfig } from '../types';
+import {
+  CreateNoPatternTicketRequestData,
+  CreateTicketRequestData,
+  GetTicketOptionsParams,
+  OrdersJournalPluginConfig,
+} from '../types';
 import { convertFormToRequestData } from '../utils/convertFormToRequestData';
 
 type CreateTicketProps = {
   data: TicketFormInputs;
   signal?: AbortSignal;
-  draftId?: number;
+  pattern: GetTicketOptionsParams['pattern'];
   config: OrdersJournalPluginConfig;
   options: SelectOptions;
 };
 /** Преобразует данные формы в нужный формат и отправляет на сервер */
-export const createTicket = ({ data, signal, draftId, config, options }: CreateTicketProps) => {
+export const createTicket = ({ data, signal, pattern, config, options }: CreateTicketProps) => {
   const mapData: CreateTicketRequestData | CreateNoPatternTicketRequestData | null = convertFormToRequestData(
     data,
+    pattern,
     options,
   );
   if (!mapData) {
     throw new Error('Incorrect form data');
   }
 
-  if (config.name === 'DRAFT' && data.status === SpfiDraftStatus.REVIEW) {
-    return draftTicketFormController.updateTicket(mapData, signal, draftId);
-  }
-  if (config.name === 'DRAFT' && data.status !== SpfiDraftStatus.REVIEW) {
-    return draftTicketFormController.createTicket(mapData, signal);
-  }
-
-  return ticketFormController.createTicketNoPattern(mapData, signal);
+  return config.submitEndpoint(mapData, signal);
 };
diff --git a/src/widgets/OrdersJournal/components/TicketModal/fetchData/getCustomers.ts b/src/widgets/OrdersJournal/components/TicketModal/fetchData/getCustomers.ts
index f28a38ade..0a59efe7d 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/fetchData/getCustomers.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/fetchData/getCustomers.ts
@@ -1,8 +1,18 @@
 import { Value } from '@uikit/Select';
 import { CustomerDataType } from 'types/Customers';
 
-export const getCustomers = (customers: CustomerDataType[]) => async (): Promise<Value[]> =>
-  customers.map((cpty) => ({
-    value: cpty.userMail,
-    title: `${cpty.userName} - ${cpty.ctptyName}`,
-  })) ?? [];
+const CUSTOMERS_DEFAULT_SIZE = 10;
+
+export const getCustomers =
+  (customers: CustomerDataType[]) =>
+  async (search?: string, page?: number, size: number = CUSTOMERS_DEFAULT_SIZE): Promise<Value[]> =>
+    customers
+      .filter(
+        ({ userName, ctptyName, userMail }) =>
+          !search || (search && `${userName} ${ctptyName} ${userMail}`.toLowerCase().includes(search.toLowerCase())),
+      )
+      .slice(0, size)
+      .map((cpty) => ({
+        value: cpty.userMail,
+        title: `${cpty.userName} - ${cpty.ctptyName}`,
+      })) ?? [];
diff --git a/src/widgets/OrdersJournal/components/TicketModal/fetchData/getOrderMetrics.ts b/src/widgets/OrdersJournal/components/TicketModal/fetchData/getOrderMetrics.ts
index 2b4480322..d03cf5db3 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/fetchData/getOrderMetrics.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/fetchData/getOrderMetrics.ts
@@ -1,14 +1,12 @@
-import { ticketFormController } from '@api/controllers/ticketFormController';
 import { SelectOptions, TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
 
+import { getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
 import { TicketProduct } from 'types/SapfirSpfi';
 
-import { OrderMetrics, OrderMetricsRequestData } from '../types';
+import { GetTicketOptionsParams, OrderMetrics, OrderMetricsRequestData, OrdersJournalPluginConfig } from '../types';
 import { convertFormToRequestData } from '../utils/convertFormToRequestData';
 import { convertPremiumData } from '../utils/convertPremiumData';
-import { getIsBasisXCCYProduct } from '../utils/getIsBasisXCCYProduct';
-import { getIsIrsOisProduct } from '../utils/getIsIrsOisProduct';
-import { getIsXCCYProduct } from '../utils/getIsXCCYProduct';
 import {
   getFXSwapOrderMetricsRequestData,
   getIrsOisOrderMetricsRequestData,
@@ -16,7 +14,7 @@ import {
 } from '../utils/getOrderMetricsRequestData';
 
 const convertFormToOrderMerticsRequestData = (form: TicketFormInputs): OrderMetricsRequestData | null => {
-  if (getIsIrsOisProduct(form)) {
+  if (form.dealType === TicketProduct.IRS_OIS) {
     const premiumData = convertPremiumData(form);
 
     return {
@@ -32,7 +30,7 @@ const convertFormToOrderMerticsRequestData = (form: TicketFormInputs): OrderMetr
       ...premiumData,
     };
   }
-  if (getIsXCCYProduct(form) || getIsBasisXCCYProduct(form)) {
+  if (form.dealType === TicketProduct.XCCY) {
     const premiumData = convertPremiumData(form);
 
     return {
@@ -46,22 +44,26 @@ const convertFormToOrderMerticsRequestData = (form: TicketFormInputs): OrderMetr
 type GetOrderMetricsProps = {
   form: TicketFormInputs;
   signal: AbortSignal;
+  config: OrdersJournalPluginConfig;
+  pattern: GetTicketOptionsParams['pattern'];
   options: SelectOptions;
 };
 
-export const getOrderMetrics = async ({ form, signal, options }: GetOrderMetricsProps): Promise<OrderMetrics> => {
-  const mapData: OrderMetricsRequestData | null = !form.noPatternOrder
+export const getOrderMetrics = async ({
+  form,
+  signal,
+  config,
+  pattern,
+  options,
+}: GetOrderMetricsProps): Promise<OrderMetrics> => {
+  const mapData: OrderMetricsRequestData | null = getIsPatternOrder(pattern)
     ? convertFormToOrderMerticsRequestData(form)
-    : convertFormToRequestData(form, options);
+    : convertFormToRequestData(form, pattern, options);
   if (!mapData) {
     throw new Error('Incorrect form data to request order metrics');
   }
 
-  const metricsEndpoint = !form.noPatternOrder
-    ? ticketFormController.getOrderMetrics
-    : ticketFormController.getOrderMetricsNoPattern;
-
-  const res = await metricsEndpoint(mapData, signal);
+  const res = await config.metricsEndpoint(mapData, signal);
 
   return res.data;
 };
diff --git a/src/widgets/OrdersJournal/components/TicketModal/fetchData/submitForm.ts b/src/widgets/OrdersJournal/components/TicketModal/fetchData/submitForm.ts
index bddd9a926..defc0e6f3 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/fetchData/submitForm.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/fetchData/submitForm.ts
@@ -4,7 +4,7 @@ import { SelectOptions, TicketFormInputs } from '@widgets/OrdersJournal/componen
 import { TicketType } from 'types/SapfirSpfi';
 
 import { toasts } from '../services/toasts';
-import { OrdersJournalPluginConfig } from '../types';
+import { GetTicketOptionsParams, OrdersJournalPluginConfig } from '../types';
 
 import { acceptTicket } from './acceptTicket';
 import { createTicket } from './createTicket';
@@ -12,29 +12,30 @@ import { createTicket } from './createTicket';
 type SubmitFormProps = {
   data: TicketFormInputs;
   type: TicketType;
-  orderId?: number; // для брокерской заявки тут будет приходить draftId
+  orderId?: number;
   signal?: AbortSignal;
+  pattern: GetTicketOptionsParams['pattern'];
   config: OrdersJournalPluginConfig;
   options: SelectOptions;
 };
 
 /** Отправляет данные формы на сервер. На основании типа тикета вызывает нужный api  */
-export const submitForm = async ({ data, type, orderId, signal, config, options }: SubmitFormProps) => {
+export const submitForm = async ({ data, type, orderId, signal, pattern, config, options }: SubmitFormProps) => {
   if (
     type === TicketType.Create ||
     type === TicketType.CreateDepth ||
     type === TicketType.CreateDepthEqual ||
     type === TicketType.CreateFromDraft
   ) {
-    const response = await createTicket({ data, signal, config, options });
+    const response = await createTicket({ data, signal, pattern, config, options });
     // нотификация придет по ws
     if (type !== TicketType.CreateFromDraft) {
       toasts.createSuccess(data.dealType);
     }
     return response;
   }
-  if (type === TicketType.CreateDraft || type === TicketType.OpenDraft) {
-    await createTicket({ data, signal, draftId: orderId, config, options });
+  if (type === TicketType.CreateDraft) {
+    await createTicket({ data, signal, pattern, config, options });
   } else if (type === TicketType.Accept && orderId) {
     await acceptTicket(orderId, data, signal);
   } else if (type === TicketType.Cancel && orderId) {
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/__tests__/useAdditionalClick.test.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/__tests__/useAdditionalClick.test.ts
deleted file mode 100644
index 633d7c66b..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/__tests__/useAdditionalClick.test.ts
+++ /dev/null
@@ -1,214 +0,0 @@
-import { renderHook } from '@testing-library/react';
-
-import { communicator } from '@core/comm';
-import { CHANGE_DRAFT_STATUS_EVENT } from '@modules/widgets/shared';
-import { TicketType } from 'types/SapfirSpfi';
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { CreateFromDraftTicketParams, CreateTicketParams } from '../../types';
-
-import { useAdditionalClick } from '../useAdditionalClick';
-
-jest.mock('@core/comm', () => ({
-  communicator: {
-    send: jest.fn(),
-  },
-}));
-
-describe('useAdditionalClick', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  describe('handleAdditionalClick', () => {
-    it('should send CHANGE_DRAFT_STATUS_EVENT when ticket type is CreateFromDraft', () => {
-      const draftId = 123;
-      const ticketParams: CreateFromDraftTicketParams = {
-        type: TicketType.CreateFromDraft,
-        draftId,
-      };
-      const onAdditionalClick = jest.fn();
-
-      const { result } = renderHook(() => useAdditionalClick({ onAdditionalClick, ticketParams }));
-
-      result.current.handleAdditionalClick();
-
-      expect(communicator.send).toHaveBeenCalledWith({
-        type: CHANGE_DRAFT_STATUS_EVENT,
-        payload: {
-          draftId,
-          type: TicketType.CreateFromDraft,
-          status: SpfiDraftStatus.REVIEW,
-        },
-      });
-    });
-
-    it('should call onAdditionalClick when provided', () => {
-      const ticketParams: CreateFromDraftTicketParams = {
-        type: TicketType.CreateFromDraft,
-        draftId: 456,
-      };
-      const onAdditionalClick = jest.fn();
-
-      const { result } = renderHook(() => useAdditionalClick({ onAdditionalClick, ticketParams }));
-
-      result.current.handleAdditionalClick();
-
-      expect(onAdditionalClick).toHaveBeenCalledTimes(1);
-    });
-
-    it('should not throw when onAdditionalClick is not provided', () => {
-      const ticketParams: CreateFromDraftTicketParams = {
-        type: TicketType.CreateFromDraft,
-        draftId: 789,
-      };
-
-      const { result } = renderHook(() => useAdditionalClick({ ticketParams }));
-
-      expect(() => result.current.handleAdditionalClick()).not.toThrow();
-    });
-
-    it('should not send message when ticket type is not CreateFromDraft', () => {
-      const ticketParams: CreateTicketParams = {
-        type: TicketType.Create,
-      };
-      const onAdditionalClick = jest.fn();
-
-      const { result } = renderHook(() => useAdditionalClick({ onAdditionalClick, ticketParams }));
-
-      result.current.handleAdditionalClick();
-
-      expect(communicator.send).not.toHaveBeenCalled();
-      expect(onAdditionalClick).not.toHaveBeenCalled();
-    });
-
-    it('should not send message when ticket type is Accept', () => {
-      const ticketParams = {
-        type: TicketType.Accept,
-        orderId: 100,
-      } as const;
-
-      const { result } = renderHook(() => useAdditionalClick({ ticketParams }));
-
-      result.current.handleAdditionalClick();
-
-      expect(communicator.send).not.toHaveBeenCalled();
-    });
-
-    it('should not send message when ticket type is Cancel', () => {
-      const ticketParams = {
-        type: TicketType.Cancel,
-        orderId: 200,
-      } as const;
-
-      const { result } = renderHook(() => useAdditionalClick({ ticketParams }));
-
-      result.current.handleAdditionalClick();
-
-      expect(communicator.send).not.toHaveBeenCalled();
-    });
-
-    it('should not send message when ticket type is CreateDraft', () => {
-      const ticketParams = {
-        type: TicketType.CreateDraft,
-      } as const;
-
-      const { result } = renderHook(() => useAdditionalClick({ ticketParams }));
-
-      result.current.handleAdditionalClick();
-
-      expect(communicator.send).not.toHaveBeenCalled();
-    });
-
-    it('should not send message when ticket type is OpenDraft', () => {
-      const ticketParams = {
-        type: TicketType.OpenDraft,
-        status: SpfiDraftStatus.REVIEW,
-      } as const;
-
-      const { result } = renderHook(() => useAdditionalClick({ ticketParams }));
-
-      result.current.handleAdditionalClick();
-
-      expect(communicator.send).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('memoization', () => {
-    it('should update handleAdditionalClick when onAdditionalClick changes', () => {
-      const ticketParams: CreateFromDraftTicketParams = {
-        type: TicketType.CreateFromDraft,
-        draftId: 100,
-      };
-      const onAdditionalClick1 = jest.fn();
-      const onAdditionalClick2 = jest.fn();
-
-      const { result, rerender } = renderHook(
-        ({ onAdditionalClick }) => useAdditionalClick({ onAdditionalClick, ticketParams }),
-        { initialProps: { onAdditionalClick: onAdditionalClick1 } },
-      );
-
-      result.current.handleAdditionalClick();
-      expect(onAdditionalClick1).toHaveBeenCalledTimes(1);
-      expect(onAdditionalClick2).not.toHaveBeenCalled();
-
-      rerender({ onAdditionalClick: onAdditionalClick2 });
-
-      result.current.handleAdditionalClick();
-      expect(onAdditionalClick1).toHaveBeenCalledTimes(1);
-      expect(onAdditionalClick2).toHaveBeenCalledTimes(1);
-    });
-
-    it('should update handleAdditionalClick when ticketParams changes', () => {
-      const onAdditionalClick = jest.fn();
-      const ticketParams1: CreateFromDraftTicketParams = {
-        type: TicketType.CreateFromDraft,
-        draftId: 100,
-      };
-      const ticketParams2: CreateFromDraftTicketParams = {
-        type: TicketType.CreateFromDraft,
-        draftId: 200,
-      };
-
-      const { result, rerender } = renderHook(
-        ({ ticketParams }) => useAdditionalClick({ onAdditionalClick, ticketParams }),
-        { initialProps: { ticketParams: ticketParams1 } },
-      );
-
-      result.current.handleAdditionalClick();
-      expect(communicator.send).toHaveBeenLastCalledWith(
-        expect.objectContaining({
-          payload: expect.objectContaining({ draftId: 100 }),
-        }),
-      );
-
-      rerender({ ticketParams: ticketParams2 });
-
-      result.current.handleAdditionalClick();
-      expect(communicator.send).toHaveBeenLastCalledWith(
-        expect.objectContaining({
-          payload: expect.objectContaining({ draftId: 200 }),
-        }),
-      );
-    });
-
-    it('should not update handleAdditionalClick when dependencies are stable', () => {
-      const stableTicketParams: CreateFromDraftTicketParams = {
-        type: TicketType.CreateFromDraft,
-        draftId: 300,
-      };
-      const stableOnAdditionalClick = jest.fn();
-
-      const { result, rerender } = renderHook(
-        ({ ticketParams, onAdditionalClick }) => useAdditionalClick({ ticketParams, onAdditionalClick }),
-        { initialProps: { ticketParams: stableTicketParams, onAdditionalClick: stableOnAdditionalClick } },
-      );
-
-      const firstHandleAdditionalClick = result.current.handleAdditionalClick;
-
-      rerender({ ticketParams: stableTicketParams, onAdditionalClick: stableOnAdditionalClick });
-
-      expect(result.current.handleAdditionalClick).toBe(firstHandleAdditionalClick);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useAdditionalClick.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useAdditionalClick.ts
deleted file mode 100644
index 457b1e569..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useAdditionalClick.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useCallback } from 'react';
-
-import { communicator } from '@core/comm';
-import { CHANGE_DRAFT_STATUS_EVENT } from '@modules/widgets/shared';
-import { TicketType } from 'types/SapfirSpfi';
-
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { TicketParams } from '../types';
-
-export type UseAdditionalClickProps = {
-  ticketParams: TicketParams;
-  onAdditionalClick?: VoidFunction;
-};
-
-export const useAdditionalClick = ({ onAdditionalClick, ticketParams }: UseAdditionalClickProps) => {
-  const handleAdditionalClick = useCallback(() => {
-    if (TicketType.CreateFromDraft === ticketParams.type) {
-      communicator.send({
-        type: CHANGE_DRAFT_STATUS_EVENT,
-        payload: {
-          draftId: ticketParams.draftId,
-          type: TicketType.CreateFromDraft,
-          status: SpfiDraftStatus.REVIEW,
-        },
-      });
-      onAdditionalClick?.();
-    }
-  }, [onAdditionalClick, ticketParams]);
-  return {
-    handleAdditionalClick,
-  };
-};
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useCreateTiket.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useCreateTiket.ts
index 78cfef56f..afe0faea5 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useCreateTiket.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useCreateTiket.ts
@@ -7,26 +7,33 @@ import { TicketType } from 'types/SapfirSpfi';
 
 import { SUBMIT_TICKET_ERROR } from '../const';
 import { submitForm } from '../fetchData/submitForm';
-import { OrdersJournalPluginConfig, TicketParams } from '../types';
+import { GetTicketOptionsParams, OrdersJournalPluginConfig } from '../types';
 import { parseBackendError } from '../utils/parseBackendError';
 import { parseOrderAcceptedResponse } from '../utils/parseOrderAcceptedResponse';
 
 type UseCreateTicketProps = {
-  ticketParams: TicketParams;
+  type: TicketType;
+  orderId?: number;
   onSuccess?: VoidFunction;
   onError?: (msg: string) => void;
+  pattern: GetTicketOptionsParams['pattern'];
   config: OrdersJournalPluginConfig;
   options: SelectOptions;
 };
 
 /** Хук для отправки формы создания тикета */
-export const useCreateTicket = ({ ticketParams, onSuccess, onError, config, options }: UseCreateTicketProps) => {
+export const useCreateTicket = ({
+  onSuccess,
+  onError,
+  type,
+  orderId,
+  pattern,
+  config,
+  options,
+}: UseCreateTicketProps) => {
   const [error, setError] = useState<string | null>(null);
   const [loading, setLoading] = useState(false);
   const controllerRef = useRef<AbortController>();
-
-  const { type, orderId } = ticketParams;
-
   const generalErrorText = SUBMIT_TICKET_ERROR[type];
   // для кастомных ошибок нам нужна первая часть дефолтного сообщения
   const generalErrorFirstPart = generalErrorText.split('.')[0];
@@ -40,14 +47,7 @@ export const useCreateTicket = ({ ticketParams, onSuccess, onError, config, opti
       const { signal } = controllerRef.current;
 
       try {
-        const response = await submitForm({
-          data,
-          type,
-          orderId: type === TicketType.OpenDraft ? ticketParams.draftId : orderId,
-          signal,
-          config,
-          options,
-        });
+        const response = await submitForm({ data, type, orderId, signal, config, pattern, options });
         const parsedResponseOrderId = response ? parseOrderAcceptedResponse(response?.data) : undefined;
 
         config?.onSuccessSubmit?.(orderId ?? parsedResponseOrderId);
@@ -69,7 +69,7 @@ export const useCreateTicket = ({ ticketParams, onSuccess, onError, config, opti
         }
       }
     },
-    [type, ticketParams, orderId, config, options, onSuccess, generalErrorFirstPart, generalErrorText, onError],
+    [type, orderId, config, pattern, options, onSuccess, generalErrorFirstPart, generalErrorText, onError],
   );
 
   const clearError = useCallback(() => {
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useDefaultTickedParams.tsx b/src/widgets/OrdersJournal/components/TicketModal/hooks/useDefaultTickedParams.tsx
index c999646ca..4006e06c3 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useDefaultTickedParams.tsx
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useDefaultTickedParams.tsx
@@ -79,18 +79,9 @@ export const useDefaultTickedParams = (
   }
 
   if (ticketParams.type === TicketType.CreateDraft) {
-    const preparedCustomers = customers?.map(({ userMail, userName, ctptyName }) => ({
-      value: userMail,
-      label: `${userName} - ${ctptyName}`,
-    }));
-
     return {
       loading: commonLoading,
       defaultValues: getCreateDraftDefaultValues(ticketParams, user),
-      forcedOptions: {
-        buyer: preparedCustomers,
-        seller: preparedCustomers,
-      },
     };
   }
 
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useDisabledFields.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useDisabledFields.ts
index 25e4755ca..a3fc6ffd0 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useDisabledFields.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useDisabledFields.ts
@@ -2,19 +2,18 @@ import { useMemo } from 'react';
 
 import { TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
 
+import { getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
 import { TicketProduct } from 'types/SapfirSpfi';
 
+import { DISABLED_FIELDS } from '../const';
 import { UseFieldsControlProps } from '../types';
-import { getDefaultDisabledFields } from '../utils/getDefaultDisabledFields';
 import {
   getDisabledAmount1,
   getDisabledAmount2,
   getDisabledBroker,
-  getDisabledBuyer,
   getDisabledClientCode,
   getDisabledCounterparty,
-  getDisabledCurrency,
-  getDisabledCurrencyPair,
   getDisabledDateBeginningPast1,
   getDisabledDateBeginningPast2,
   getDisabledEffectiveDate,
@@ -25,112 +24,107 @@ import {
   getDisabledIndex2,
   getDisabledIndex,
   getDisabledNearLegRate,
-  getDisabledNoPatternOrder,
-  getDisabledProduct,
-  getDisabledSeller,
+  getDisabledRateType2,
+  getDisabledRateType,
   getDisabledSpread2,
   getDisabledSpread,
   getDisabledSwapPoints,
   getDisabledTerm,
   getDisabledTerminationDate,
+  getDisabledTradingMode,
 } from '../utils/getDisabledFields';
 
-export const useDisabledFields = ({ form, options, type, defaultFormValues }: UseFieldsControlProps) => {
+export const useDisabledFields = ({ form, options, type, pattern, defaultFormValues }: UseFieldsControlProps) => {
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+
   const disabledFields = useMemo(() => {
     const disFields: (keyof TicketFormInputs | undefined)[] = [
-      ...getDefaultDisabledFields(type, form),
-      // Продукт дизаблится при открытии брокерской заявки на редактирование
-      getDisabledProduct({ form, options, type, defaultFormValues }),
-      // Валюта дизаблится при открытии брокерской заявки на редактирование
-      getDisabledCurrency({ form, options, type, defaultFormValues }),
-      // Валютная пара дизаблится при открытии брокерской заявки на редактирование
-      getDisabledCurrencyPair({ form, options, type, defaultFormValues }),
-      // Покупатель дизаблится при открытии брокерской заявки на редактирование
-      getDisabledBuyer({ form, options, type, defaultFormValues }),
-      // Продавец дизаблится при открытии брокерской заявки на редактирование
-      getDisabledSeller({ form, options, type, defaultFormValues }),
+      ...DISABLED_FIELDS[type],
       // Срок дизаблится до заполнения Индекса, а именно:
       // - в шаблонных ордерах - до заполнения плавающей части (index2)
       // - в XCCY в зависимости от поля Тип и заполненности плавающей ставки
       // - не заполнена Валютная пара для FX_SWAP ордера
-      getDisabledTerm({ form, options, type, defaultFormValues }),
+      getDisabledTerm({ form, options, type, pattern, defaultFormValues }),
       // дизаблятся даты начала и окончания
       // - Для всех шаблонных ордеров (они подставляются автоматически в зависимости от срока)
       // - Для FX_SWAP ордера дизаблятся даты, если не заполнен срок или задизаблен срок
       // - Для IRS_OIS и XCCY ордера дизаблятся даты, если не заполнен срок или задизаблен срок
-      getDisabledEffectiveDate({ form, options, type, defaultFormValues }),
-      getDisabledTerminationDate({ form, options, type, defaultFormValues }),
+      getDisabledEffectiveDate({ form, options, type, pattern, defaultFormValues }),
+      getDisabledTerminationDate({ form, options, type, pattern, defaultFormValues }),
+      // Дизаблится Тип и Тип2, если
+      // ордер - шаблонный
+      getDisabledRateType({ form, options, type, pattern, defaultFormValues }),
+      getDisabledRateType2({ form, options, type, pattern, defaultFormValues }),
       // дизаблится Контагент для ордера
       // - Если режим торгов - Безадресный
-      getDisabledCounterparty({ form, options, type, defaultFormValues }),
+      getDisabledCounterparty({ form, options, type, pattern, defaultFormValues }),
       // дизаблится Код клиента для ордера
       // - Если в пустые опции кода клиента
-      getDisabledClientCode({ form, options, type, defaultFormValues }),
+      getDisabledClientCode({ form, options, type, pattern, defaultFormValues }),
       // Фиксированная ставка дизаблится, если:
       // - не заполнен срок (так как Срок необязателен для нешаблонных, то проверяются даты)
       // - Тип ставки выбран FLOAT
-      getDisabledFixRate({ form, options, type, defaultFormValues }),
+      getDisabledFixRate({ form, options, type, pattern, defaultFormValues }),
       // Фиксированная ставка2 дизаблится, если:
       // - не заполнен срок (так как Срок необязателен для нешаблонных, то проверяются даты)
       // - Тип ставки2 выбран FLOAT
-      getDisabledFixRate2({ form, options, type, defaultFormValues }),
+      getDisabledFixRate2({ form, options, type, pattern, defaultFormValues }),
       // Дизаблятся Даты начала в прошлом первой части, если
       // - нешаблонный ордер и выключен переключатель Начало в прошлом
-      getDisabledDateBeginningPast1({ form, options, type, defaultFormValues }),
+      getDisabledDateBeginningPast1({ form, options, type, pattern, defaultFormValues }),
       // Дизаблятся Даты начала в прошлом второй части, если
       // - нешаблонный ордер и выключен переключатель Начало в прошлом
-      getDisabledDateBeginningPast2({ form, options, type, defaultFormValues }),
+      getDisabledDateBeginningPast2({ form, options, type, pattern, defaultFormValues }),
       // Дизаблится длина сдвига первой части, если
       // - нешаблонный ордер и выключен переключатель Начало в прошлом
       // - нешаблонный ордер и выбран Сдвиг - Без сдвига
-      getDisabledFloatingAddLenghtOffset1({ form, options, type, defaultFormValues }),
+      getDisabledFloatingAddLenghtOffset1({ form, options, type, pattern, defaultFormValues }),
       // Дизаблится длина сдвига второй части, если
       // - нешаблонный ордер и выключен переключатель Начало в прошлом
       // - нешаблонный ордер и выбран Сдвиг - Без сдвига
-      getDisabledFloatingAddLenghtOffset2({ form, options, type, defaultFormValues }),
+      getDisabledFloatingAddLenghtOffset2({ form, options, type, pattern, defaultFormValues }),
       // Дизаблится брокер, если
-      // - создается ордер из черновика (в черновике брокер всегда предзаполнен)
-      getDisabledBroker({ form, options, type, defaultFormValues }),
+      // - создается ордер из брокерской заявки (в брокерской заявке брокер всегда предзаполнен)
+      getDisabledBroker({ form, options, type, pattern, defaultFormValues }),
+      // Дизаблится режим торгов
+      // - для шаблонных ордеров из Актуальных цен СПФИ TRADERADAR-12893
+      getDisabledTradingMode({ form, options, type, pattern, defaultFormValues }),
       // Дизаблится спред
       // - для шаблонных ордеров
       // - в XCCY FIXED Тип
-      getDisabledSpread({ form, options, type, defaultFormValues }),
+      getDisabledSpread({ form, options, type, pattern, defaultFormValues }),
       // Дизаблится спред2
       // - ордер IRS_OIS до заполнения Валюты или
       // - в XCCY FIXED Тип2
       // - для шаблонных ордеров из Актуальных цен СПФИ TRADERADAR-12893
-      getDisabledSpread2({ form, options, type, defaultFormValues }),
+      getDisabledSpread2({ form, options, type, pattern, defaultFormValues }),
       // Индекс дизаблятся если
       // - шаблонный ордер или
       // - в XCCY FIXED Тип
       // - для шаблонных ордеров из Актуальных цен СПФИ TRADERADAR-12893
-      getDisabledIndex({ form, options, type, defaultFormValues }),
+      getDisabledIndex({ form, options, type, pattern, defaultFormValues }),
       // Индекс2, Спред2 дизаблятся если
       // - ордер IRS_OIS до заполнения Валюты или
       // - в XCCY FIXED Тип2
-      getDisabledIndex2({ form, options, type, defaultFormValues }),
+      getDisabledIndex2({ form, options, type, pattern, defaultFormValues }),
       // дизаблится nearLegRate как зависимое поле, если
       // - Для FX_SWAP ордера не заполнен Срок
       // (так как Срок необязателен для нешаблонных, то проверяются даты)
       // - Для шаблонных IRS_OIS и XCCY ордера не заполнен Срок
       // - для шаблонных ордеров из Актуальных цен СПФИ TRADERADAR-12893
-      getDisabledNearLegRate({ form, options, type, defaultFormValues }),
+      getDisabledNearLegRate({ form, options, type, pattern, defaultFormValues }),
       // дизаблится Сумма1
       // - как зависимое поле FX_SWAP ордера, если не заполнен Срок
       // - как зависимое поле шаблонных IRS_OIS и XCCY, если не заполнен Срок
       // - для шаблонных ордеров из Актуальных цен СПФИ TRADERADAR-12893
-      getDisabledAmount1({ form, options, type, defaultFormValues }),
+      getDisabledAmount1({ form, options, type, pattern, defaultFormValues }),
       // дизаблится Сумма2
       // - как зависимое поле FX_SWAP ордера, если не заполнен Срок
       // - как зависимое поле шаблонных IRS_OIS и XCCY, если не заполнен Срок
-      getDisabledAmount2({ form, options, type, defaultFormValues }),
+      getDisabledAmount2({ form, options, type, pattern, defaultFormValues }),
       // дизаблится Своп-разница
       // - как зависимое поле FX_SWAP ордера, если не заполнен Срок
-      getDisabledSwapPoints({ form, options, type, defaultFormValues }),
-      // Дизаблится переключатель шаблонный.нешаблонный ордер
-      // - для черновика
-      // - для оредра из черновика
-      getDisabledNoPatternOrder({ form, options, type, defaultFormValues }),
+      getDisabledSwapPoints({ form, options, type, pattern, defaultFormValues }),
     ];
 
     // 5 Для FX_SWAP ордера дизаблятся зависимые поля, если не заполнен Срок
@@ -143,9 +137,19 @@ export const useDisabledFields = ({ form, options, type, defaultFormValues }: Us
     ) {
       disFields.push('swapPoints');
     }
+    // Дизаблятся Выплаты и Смещение платежей если
+    // - Ордер шаблонный
+    if (isPatternOrder) {
+      disFields.push('fixedPayment', 'floatingPayment', 'shiftingPayments1', 'shiftingPayments2');
+    }
+    // Дизаблятся Начала в прошлом, если
+    // - шаблонный ордер
+    if (isPatternOrder) {
+      disFields.push('startInPast1', 'startInPast2');
+    }
 
     return disFields.filter(Boolean) as (keyof TicketFormInputs)[];
-  }, [type, form, options, defaultFormValues]);
+  }, [type, form, options, pattern, defaultFormValues, isPatternOrder]);
 
   return disabledFields;
 };
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useFieldsWithPattern.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useFieldsWithPattern.ts
deleted file mode 100644
index 9ebdff02e..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useFieldsWithPattern.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import dayjs from 'dayjs';
-import { useEffect, useMemo, useState } from 'react';
-
-import { commonDateFormat } from '@configs/standartDateFormat';
-import { enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
-import { isDefaultOptionArray, isValidConvention } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { SecondLegConvention } from '@widgets/SwapCalculator/types/table';
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { HasPatternFields, RateType, SelectOptions, TicketFormInputs } from '../../TicketForm/types';
-import { getConvention } from '../../TicketForm/utils/getConvention';
-import { getCurrenciesForEnrich } from '../../TicketForm/utils/getCurrenciesForEnrich';
-
-const COMMON_HAS_PATTERN_FIELDS: HasPatternFields = {
-  spread: {
-    filledIsNoPattern: true,
-  },
-  spread2: {
-    filledIsNoPattern: true,
-  },
-  startInPast1: {
-    filledIsNoPattern: true,
-  },
-  startInPast2: {
-    filledIsNoPattern: true,
-  },
-};
-
-const EFFECTIV_DATE_PATTERN_VALUE_FOR_REQUEST = dayjs();
-
-type UseFieldsWithPatternProps = {
-  form: TicketFormInputs;
-  options: SelectOptions;
-};
-export const useFieldsWithPattern = ({
-  form: {
-    dealType: product,
-    rateType,
-    currency,
-    currencyPairs: currencyPair,
-    fixedEffectiveConvention1,
-    floatingEffectiveConvention1,
-    fixedTerminationConvention1,
-    floatingTerminationConvention1,
-  },
-  options,
-}: UseFieldsWithPatternProps): Readonly<HasPatternFields> => {
-  const [effectivePatternValue, setEffectivePatternValue] = useState(
-    dayjs().add(1, 'day').format(commonDateFormat.backendDateFormat),
-  );
-
-  useEffect(() => {
-    const [requestCurrency, faceUnit] = getCurrenciesForEnrich(product, currency, currencyPair);
-    const effectiveConvention = rateType === RateType.FIXED ? fixedEffectiveConvention1 : floatingEffectiveConvention1;
-    const terminationConvention =
-      rateType === RateType.FIXED ? fixedTerminationConvention1 : floatingTerminationConvention1;
-
-    enrichBySecondDate(
-      [
-        {
-          id: 1,
-          term: '',
-          // В enrichBySecondDate добавляется 1 день. Здесь мы корректируем это
-          // (отправляем сегодняшний день, а не завтрашний, который будет являться шаблонным)
-          sendingTime: EFFECTIV_DATE_PATTERN_VALUE_FOR_REQUEST.format(commonDateFormat.backendDateFormat),
-          // Для даты начала переносим через выходные по effective конвенции первой ноги (для FX_SWAP по MODFOLLOWING)
-          convention: getConvention(effectiveConvention),
-        },
-      ],
-      {
-        secondLegConvention: isValidConvention(terminationConvention)
-          ? SecondLegConvention[terminationConvention]
-          : SecondLegConvention.MODFOLLOWING,
-        currency: requestCurrency,
-        faceUnit: faceUnit ?? '',
-        transactionDate: EFFECTIV_DATE_PATTERN_VALUE_FOR_REQUEST.format(commonDateFormat.backendDateFormat),
-      },
-      true,
-    ).then(([effectiveResult]) => {
-      setEffectivePatternValue((prevState) => effectiveResult.transactionDate ?? prevState);
-    });
-  }, [
-    currency,
-    currencyPair,
-    fixedEffectiveConvention1,
-    fixedTerminationConvention1,
-    floatingEffectiveConvention1,
-    floatingTerminationConvention1,
-    product,
-    rateType,
-  ]);
-
-  const hasPatternFields = useMemo(() => {
-    const result: HasPatternFields = {
-      ...COMMON_HAS_PATTERN_FIELDS,
-      effectiveDate: { patternValue: effectivePatternValue },
-      rateType: {
-        patternValue: [TicketProduct.IRS_OIS, TicketProduct.XCCY].includes(product) ? RateType.FIXED : undefined,
-      },
-      rateType2: {
-        patternValue: [TicketProduct.IRS_OIS, TicketProduct.XCCY].includes(product) ? RateType.FLOAT : undefined,
-      },
-    };
-
-    const typedOptionsKeys = Object.keys(options) as (keyof TicketFormInputs)[];
-
-    typedOptionsKeys.forEach((optionKey) => {
-      const fieldOptions = options[optionKey];
-      if (isDefaultOptionArray(fieldOptions) && fieldOptions.some((option) => 'pattern' in option)) {
-        result[optionKey] = {
-          ...result[optionKey],
-          fromOptions: true,
-        };
-      }
-    });
-
-    return result;
-  }, [effectivePatternValue, options, product]);
-
-  return hasPatternFields;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useHandleSubmitDraftSuccessCallback.tsx b/src/widgets/OrdersJournal/components/TicketModal/hooks/useHandleSubmitDraftSuccessCallback.tsx
deleted file mode 100644
index 3088e2a54..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useHandleSubmitDraftSuccessCallback.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { useCallback } from 'react';
-
-import { communicator } from '@core/comm';
-import { CHANGE_DRAFT_STATUS_EVENT } from '@modules/widgets/shared';
-
-import { TicketType } from 'types/SapfirSpfi';
-
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { TicketParams } from '../types';
-
-type UseHandleSubmitSuccessCallbackParams = { ticketParams: TicketParams };
-
-export const useHandleSubmitDraftSuccessCallback = ({ ticketParams }: UseHandleSubmitSuccessCallbackParams) => {
-  const callback = useCallback(() => {
-    if (ticketParams.type === TicketType.OpenDraft && ticketParams.status === SpfiDraftStatus.REVIEW) {
-      communicator.send({
-        type: CHANGE_DRAFT_STATUS_EVENT,
-        payload: {
-          draftId: ticketParams.draftId,
-          type: TicketType.OpenDraft,
-          status: SpfiDraftStatus.APPROVE,
-        },
-      });
-    }
-  }, [ticketParams]);
-
-  return callback;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useOptions.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useOptions.ts
index 59dc6c2f9..1cd9070e1 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useOptions.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useOptions.ts
@@ -6,22 +6,15 @@ import { DEFAULT_OPTIONS, PUBLIC_COUNTERPARTY_SEARCH } from '../../TicketForm/co
 import { SelectOptionValue, TradingMode } from '../../TicketForm/types';
 import { UseOptionsProps } from '../types';
 
-import { getPaymentOptions } from '../utils/getPaymentOptions';
-
 import { useAccountsList } from './useAccountsList';
 import { useBrokerOptions } from './useBrokerOptions';
 import { usePaymentPeriodOptions } from './usePaymentPeriod';
 import { useTicketOptions } from './useTicketOptions';
 
-export const useOptions = ({ form, forcedOptions, config, ticketType }: UseOptionsProps) => {
-  const { ticketOptions, ticketOptionsError, ticketOptionsLoading } = useTicketOptions({ form, config });
-  const { brokerOptions, brokerOptionsError, brokerOptionsLoading } = useBrokerOptions({ form, config });
-  const { paymentPeriodOptions, paymentPeriodError, paymentPeriodLoading } = usePaymentPeriodOptions({
-    form,
-    config,
-    ticketType,
-    ticketOptions,
-  });
+export const useOptions = ({ form, forcedOptions, pattern, config }: UseOptionsProps) => {
+  const { ticketOptions, ticketOptionsError, ticketOptionsLoading } = useTicketOptions({ form, pattern, config });
+  const { brokerOptions, brokerOptionsError, brokerOptionsLoading } = useBrokerOptions({ form, pattern, config });
+  const { paymentPeriodOptions, paymentPeriodError, paymentPeriodLoading } = usePaymentPeriodOptions(form, pattern);
   const { accounts, codes, accountsListError, accountsListLoading } = useAccountsList(form, config);
 
   const options: TicketFormProps['options'] = useMemo(() => {
@@ -37,14 +30,14 @@ export const useOptions = ({ form, forcedOptions, config, ticketType }: UseOptio
     return {
       ...DEFAULT_OPTIONS,
       counterparty: counterpartyOptions,
+      buyer: config.getCounterpartyOptions,
+      seller: config.getCounterpartyOptions,
       ...brokerOptions,
       account: accounts,
       clientCode: codes,
       ...forcedOptions,
       ...ticketOptions,
       ...paymentPeriodOptions,
-      fixedPayment: getPaymentOptions(paymentPeriodOptions.fixedPayment, ticketOptions.fixedPayment),
-      floatingPayment: getPaymentOptions(paymentPeriodOptions.floatingPayment, ticketOptions.floatingPayment),
     };
   }, [
     accounts,
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useOrderMetrics.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useOrderMetrics.ts
index e793ec594..4ad25f386 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useOrderMetrics.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useOrderMetrics.ts
@@ -5,15 +5,17 @@ import { SelectOptions, TicketFormInputs } from '@widgets/OrdersJournal/componen
 import { TicketFormProps } from '../../TicketForm';
 import { getActualRequiredFields } from '../../TicketForm/utils/getActualRequiredFields';
 import { getOrderMetrics } from '../fetchData/getOrderMetrics';
-import { OrderMetrics } from '../types';
+import { GetTicketOptionsParams, OrderMetrics, OrdersJournalPluginConfig } from '../types';
 
 type UseOrderMetricsProps = {
   form: TicketFormInputs;
   requiredFields: TicketFormProps['requiredFields'];
+  config: OrdersJournalPluginConfig;
+  pattern: GetTicketOptionsParams['pattern'];
   options: SelectOptions;
 };
 
-export const useOrderMetrics = ({ form, requiredFields, options }: UseOrderMetricsProps) => {
+export const useOrderMetrics = ({ form, requiredFields, config, pattern, options }: UseOrderMetricsProps) => {
   const [metrics, setMetrics] = useState<OrderMetrics>();
   const [error, setError] = useState<string | null>(null);
   const controllerRef = useRef<AbortController>();
@@ -27,13 +29,13 @@ export const useOrderMetrics = ({ form, requiredFields, options }: UseOrderMetri
 
       setError(null);
       try {
-        const data = await getOrderMetrics({ form: formForFetch, signal, options });
+        const data = await getOrderMetrics({ form: formForFetch, signal, config, pattern, options });
         setMetrics(data);
       } catch {
         setError('Ошибка расчёта метрик. Попробуйте позже');
       }
     },
-    [options],
+    [config, options, pattern],
   );
 
   useEffect(() => {
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/usePaymentPeriod.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/usePaymentPeriod.ts
index e6946908c..1e11919d7 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/usePaymentPeriod.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/usePaymentPeriod.ts
@@ -4,50 +4,46 @@ import { ticketFormController } from '@api/controllers/ticketFormController';
 import { TicketFormProps } from '@widgets/OrdersJournal/components/TicketForm';
 import { TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
 
-import { TicketProduct, TicketType } from 'types/SapfirSpfi';
+import { getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
 
-import { GetPaymentPeriodParams, OrdersJournalPluginConfig } from '../types';
+import { TicketProduct } from 'types/SapfirSpfi';
 
-import { getOption } from '../utils/getHasTermOption';
+import { GetPaymentPeriodParams, GetTicketOptionsParams } from '../types';
 
 import { useFetchWithParams } from './useFetchWithParams';
 
-type UsePaymentPeriodOptionsProps = {
-  form: Partial<TicketFormInputs>;
-  config: OrdersJournalPluginConfig;
-  ticketType: TicketType;
-  ticketOptions: TicketFormProps['options'];
-};
-export const usePaymentPeriodOptions = ({ form, config, ticketType, ticketOptions }: UsePaymentPeriodOptionsProps) => {
+export const usePaymentPeriodOptions = (
+  form: Partial<TicketFormInputs>,
+  pattern: GetTicketOptionsParams['pattern'],
+) => {
   const params: GetPaymentPeriodParams | undefined = useMemo(() => {
     if (
       form.dealType &&
       form.term &&
-      getOption(ticketOptions?.term, form.term) &&
       form.index2 &&
-      !form.noPatternOrder &&
-      [TicketProduct.IRS_OIS, TicketProduct.XCCY, TicketProduct.BASIS_XCCY].includes(form.dealType)
+      [TicketProduct.IRS_OIS, TicketProduct.XCCY].includes(form.dealType)
     ) {
       return { product: form.dealType, term: form.term, index: form.index2 };
     }
-  }, [form.dealType, form.index2, form.noPatternOrder, form.term, ticketOptions?.term]);
+  }, [form.dealType, form.index2, form.term]);
 
   const { data, error, loading } = useFetchWithParams({
     fetchFn: ticketFormController.getPaymentPeriod,
     params,
-    auto:
-      !form.noPatternOrder &&
-      config.name !== 'DRAFT' &&
-      ![TicketType.Accept, TicketType.Cancel, TicketType.CreateFromDraft].includes(ticketType),
+    auto: getIsPatternOrder(pattern),
   });
 
   const paymentPeriodOptions: TicketFormProps['options'] = useMemo(() => {
     const options: TicketFormProps['options'] = {
       effectiveDate: data?.effectiveDate ? [data.effectiveDate] : undefined,
       terminationDate: data?.terminationDate ? [data.terminationDate] : undefined,
-      fixedPayment: data?.fixingPaymentPeriod ? [data.fixingPaymentPeriod] : undefined,
-      floatingPayment: data?.floatingPaymentPeriod ? [data.floatingPaymentPeriod] : undefined,
     };
+    if (data?.fixingPaymentPeriod) {
+      options.fixedPayment = data ? [data.fixingPaymentPeriod] : [];
+    }
+    if (data?.floatingPaymentPeriod) {
+      options.floatingPayment = data ? [data.floatingPaymentPeriod] : [];
+    }
     const preparedOptionsEntries = Object.entries(options).filter(([, v]) => v);
     return Object.fromEntries(preparedOptionsEntries);
   }, [data]);
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useRequiredFields.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useRequiredFields.ts
index acc2bcff1..04a38916f 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useRequiredFields.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useRequiredFields.ts
@@ -2,44 +2,39 @@ import { useMemo } from 'react';
 
 import { RateType, TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
 
-import { TicketType } from 'types/SapfirSpfi';
+import { getIsNoPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
+import { TicketProduct, TicketType } from 'types/SapfirSpfi';
 
 import { REQUIRED_FIELDS } from '../const';
 import { UseFieldsControlProps } from '../types';
-import { getIsBasisXCCYProduct } from '../utils/getIsBasisXCCYProduct';
-import { getIsXCCYProduct } from '../utils/getIsXCCYProduct';
 import {
-  getRequiredBuyer,
-  getRequiredClientCode,
-  getRequiredFixedAddNoStandartPeriod1,
-  getRequiredFixRate2,
-  getRequiredFixRate,
-  getRequiredFloatingAddNoStandartPeriod1,
-  getRequiredFloatingAddShiftFix1,
-  getRequiredFloatingAddShiftFix2,
-  getRequiredIndex2,
-  getRequiredIndex,
-  getRequiredTerm,
+  getRequredBuyer,
+  getRequredFixedAddNoStandartPeriod1,
+  getRequredFixRate2,
+  getRequredFixRate,
+  getRequredFloatingAddNoStandartPeriod1,
+  getRequredFloatingAddShiftFix1,
+  getRequredFloatingAddShiftFix2,
+  getRequredIndex2,
+  getRequredIndex,
+  getRequredTerm,
 } from '../utils/getRequiredFields';
 import { getRequiredFieldsFromOptions } from '../utils/getRequiredFieldsFromOptions';
 
-export const useRequiredFields = ({ form, options, type, config }: UseFieldsControlProps) => {
-  const requiredFields = useMemo(() => {
-    if (type === TicketType.Cancel) {
-      return [];
-    }
+export const useRequiredFields = ({ form, options, type, pattern, config }: UseFieldsControlProps) => {
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
 
-    const isNoPatternOrder = !!form.noPatternOrder;
-    const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
+  const isXCCYProduct: boolean = !!form.dealType && form.dealType === TicketProduct.XCCY;
 
+  const requiredFields = useMemo(() => {
     const reqFields: (keyof TicketFormInputs | undefined)[] = form.dealType ? [...REQUIRED_FIELDS[form.dealType]] : [];
     // Для всех ордеров (НЕ брокерских заявок) делаем обязательными поля Торговый счет, Код клиента и CSA
     if (config.name === 'ORDER') {
       reqFields.push('account', 'counterparty', 'csa');
 
-      const requiredClientCode = getRequiredClientCode({ form, options, type });
-      if (requiredClientCode) {
-        reqFields.push(requiredClientCode);
+      if (form.account && (options.clientCode?.length ?? 0) > 0) {
+        reqFields.push('clientCode');
       }
     }
     // Для нешаблонных XCCY делаем обязательными конвенции
@@ -102,33 +97,33 @@ export const useRequiredFields = ({ form, options, type, config }: UseFieldsCont
 
     // Добавляем все обязательные поля из утилит
     reqFields.push(
-      getRequiredTerm({ form, options, type, config }),
-      // Для всех черновиков делаем обязательными поле Клиент
-      getRequiredBuyer({ form, options, type, config }),
+      getRequredTerm({ pattern }),
+      // Для всех брокерских заявок делаем обязательными поле Клиент
+      getRequredBuyer({ config }),
       // Для нешаблонных XCCY, IRS_OIS для плавающей ставки делаем обязательными Смещение фиксинга
-      getRequiredFloatingAddShiftFix1({ form, options, type, config }),
+      getRequredFloatingAddShiftFix1({ form, pattern }),
       // Для нешаблонных XCCY, IRS_OIS для плавающей ставки делаем обязательными Смещение фиксинга2
-      getRequiredFloatingAddShiftFix2({ form, options, type, config }),
+      getRequredFloatingAddShiftFix2({ form, pattern }),
       // Для нешаблонных XCCY, IRS_OIS для фиксированной ставки делаем обязательными Тип нестандартного периода
-      getRequiredFixedAddNoStandartPeriod1({ form, options, type, config }),
+      getRequredFixedAddNoStandartPeriod1({ form, pattern }),
       // Для нешаблонных XCCY, IRS_OIS для плавающей ставки делаем обязательными Тип нестандартного периода
-      getRequiredFloatingAddNoStandartPeriod1({ form, options, type, config }),
+      getRequredFloatingAddNoStandartPeriod1({ form, pattern }),
       // Делаем обязательным index, если
       // - Тип первой части FLOAT (только для IRS_OIS или XCCY)
-      getRequiredIndex({ form, options, type, config }),
+      getRequredIndex({ form }),
       // Делаем обязательным index2, если
       // - Тип второй части FLOAT (только для IRS_OIS или XCCY)
-      getRequiredIndex2({ form, options, type, config }),
+      getRequredIndex2({ form }),
       // Делаем обязательным fixRate, если
       // - Тип первой части FIXED (только для IRS_OIS или XCCY)
-      getRequiredFixRate({ form, options, type, config }),
+      getRequredFixRate({ form }),
       // Делаем обязательным fixRate2, если
       // - Тип второй части FIXED (только для IRS_OIS или XCCY)
-      getRequiredFixRate2({ form, options, type, config }),
+      getRequredFixRate2({ form }),
     );
 
-    return reqFields.filter(Boolean) as (keyof TicketFormInputs)[];
-  }, [form, options, type, config]);
+    return type === TicketType.Cancel ? [] : (reqFields.filter(Boolean) as (keyof TicketFormInputs)[]);
+  }, [form, options, type, pattern, config, isNoPatternOrder, isXCCYProduct]);
 
   return requiredFields;
 };
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketForm.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketForm.ts
index 07d185d9e..5ac193e4f 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketForm.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketForm.ts
@@ -7,16 +7,19 @@ import { contactByEmailSelector } from '@store/selectors/customersData';
 import { isSPFIBrokerSelector, userInfoSelector } from '@store/selectors/user';
 import { TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
 
+import { getIsNoPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
 import { TicketType } from 'types/SapfirSpfi';
 
 import { DEFAULT_FORM_VALUES } from '../const';
-import { TicketParams } from '../types';
+import { GetTicketOptionsParams, TicketParams } from '../types';
 
 type UseTicketFormProps = {
   defaultValues?: Partial<TicketFormInputs>;
+  pattern?: GetTicketOptionsParams['pattern'];
   ticketParams: TicketParams;
 };
-export const useTicketForm = ({ defaultValues, ticketParams }: UseTicketFormProps) => {
+export const useTicketForm = ({ defaultValues, pattern, ticketParams }: UseTicketFormProps) => {
   const currentCustomerId = useAppSelect(userInfoSelector('email'));
   const counterpartyByEmail = useAppSelect(contactByEmailSelector(defaultValues?.seller ?? '')('userSpfiFirmId'));
   const isSPFIBroker = useAppSelect(isSPFIBrokerSelector);
@@ -43,7 +46,7 @@ export const useTicketForm = ({ defaultValues, ticketParams }: UseTicketFormProp
   }, [counterpartyByEmail, currentCustomerId, defaultValues, isSPFIBroker, ticketParams]);
 
   const methods = useForm<TicketFormInputs>({
-    defaultValues: defaultFormValues,
+    defaultValues: { ...defaultFormValues, noPatternOrder: getIsNoPatternOrder(pattern) },
   });
 
   return { methods, form: methods.watch(), defaultFormValues };
diff --git a/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketOptions.ts b/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketOptions.ts
index 5325e933e..3cf215c70 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketOptions.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/hooks/useTicketOptions.ts
@@ -4,6 +4,8 @@ import { useMemo, useRef } from 'react';
 import { TicketFormProps } from '@widgets/OrdersJournal/components/TicketForm';
 import { RateType } from '@widgets/OrdersJournal/components/TicketForm/types';
 
+import { getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
 import { convertAdditionalOptionsToDefault } from '../../TicketForm/utils/convertAdditionalOptionsToDefault';
 import { getTicketOptions } from '../../TicketForm/utils/getTicketOptions';
 import { GetTicketOptionsParams, TicketOptions } from '../types';
@@ -12,12 +14,13 @@ import { getTicketOptionsFetchParams, GetUseTicketOptionsFetchParams } from '../
 
 import { useFetchWithParams } from './useFetchWithParams';
 
-export const useTicketOptions = ({ form, config }: GetUseTicketOptionsFetchParams) => {
+export const useTicketOptions = ({ form, pattern, config }: GetUseTicketOptionsFetchParams) => {
   const prevParamsRef = useRef<GetTicketOptionsParams | undefined>();
 
   const params: GetTicketOptionsParams | undefined = useMemo(() => {
     const preparedParams = getTicketOptionsFetchParams({
       form,
+      pattern,
       config,
     });
     if (prevParamsRef.current && isEqual(prevParamsRef.current, preparedParams)) {
@@ -25,7 +28,7 @@ export const useTicketOptions = ({ form, config }: GetUseTicketOptionsFetchParam
     }
     prevParamsRef.current = preparedParams;
     return Object.keys(preparedParams).length ? preparedParams : undefined;
-  }, [form, config]);
+  }, [form, pattern, config]);
 
   const { data, error, loading } = useFetchWithParams<TicketOptions, GetTicketOptionsParams>({
     fetchFn: config.ticketOptionsEndpoint,
@@ -34,22 +37,26 @@ export const useTicketOptions = ({ form, config }: GetUseTicketOptionsFetchParam
 
   const ticketOptions: TicketFormProps['options'] = useMemo(
     () => ({
-      term: convertAdditionalOptionsToDefault(data?.term),
-      currency: convertAdditionalOptionsToDefault(data?.currencies),
-      index: form.rateType === RateType.FIXED ? [] : convertAdditionalOptionsToDefault(data?.index),
-      index2: form.rateType2 === RateType.FIXED ? [] : convertAdditionalOptionsToDefault(data?.index2),
-      fixedConvention: data?.fixingDayCountFraction ?? convertAdditionalOptionsToDefault(data?.dayFraction1) ?? [],
-      floatingConvention: data?.floatingDayCountFraction ?? convertAdditionalOptionsToDefault(data?.dayFraction2) ?? [],
+      term: getTicketOptions(data?.term),
+      currency: getTicketOptions(data?.currencies),
+      index: form.rateType === RateType.FIXED ? [] : getTicketOptions(data?.index),
+      index2: form.rateType2 === RateType.FIXED ? [] : getTicketOptions(data?.index2),
+      fixedConvention: data?.fixingDayCountFraction ?? data?.dayFraction ?? [],
+      floatingConvention: data?.floatingDayCountFraction ?? data?.dayFraction ?? [],
       fixedPaymentOffset: data?.fixingOffset ?? convertAdditionalOptionsToDefault(data?.payments1),
       floatingPaymentOffset: data?.floatingOffset ?? convertAdditionalOptionsToDefault(data?.payments2),
       csa: getTicketOptions(data?.csa),
-      currencyPairs: convertAdditionalOptionsToDefault(data?.currencyPairs),
+      currencyPairs: getTicketOptions(data?.currencyPairs),
 
       fixedPayment: convertAdditionalOptionsToDefault(data?.payments1),
       floatingPayment: convertAdditionalOptionsToDefault(data?.payments2),
 
-      shiftingPayments1: convertAdditionalOptionsToDefault(data?.shiftingPayments1),
-      shiftingPayments2: convertAdditionalOptionsToDefault(data?.shiftingPayments2),
+      shiftingPayments1: getIsPatternOrder(pattern)
+        ? getTicketOptions(data?.fixingOffset)
+        : convertAdditionalOptionsToDefault(data?.shiftingPayments1),
+      shiftingPayments2: getIsPatternOrder(pattern)
+        ? getTicketOptions(data?.floatingOffset)
+        : convertAdditionalOptionsToDefault(data?.shiftingPayments2),
 
       fixedEffectiveBusiness1: getTicketOptions(data?.fixedEffectiveBusiness1),
       fixedEffectiveBusiness2: getTicketOptions(data?.fixedEffectiveBusiness2),
@@ -100,60 +107,60 @@ export const useTicketOptions = ({ form, config }: GetUseTicketOptionsFetchParam
       floatingAddShiftFix2: getTicketOptions(data?.floatingAddShiftFix2),
     }),
     [
-      data?.term,
-      data?.currencies,
-      data?.index,
-      data?.index2,
-      data?.fixingDayCountFraction,
-      data?.dayFraction1,
-      data?.floatingDayCountFraction,
-      data?.dayFraction2,
-      data?.fixingOffset,
-      data?.payments1,
-      data?.floatingOffset,
-      data?.payments2,
+      data?.dayFraction,
       data?.csa,
+      data?.currencies,
       data?.currencyPairs,
-      data?.shiftingPayments1,
-      data?.shiftingPayments2,
+      data?.fixedAddNoStandartPeriod1,
+      data?.fixedAddNoStandartPeriod2,
+      data?.fixedCalculationConvention1,
+      data?.fixedCalculationConvention2,
       data?.fixedEffectiveBusiness1,
       data?.fixedEffectiveBusiness2,
-      data?.floatingEffectiveBusiness1,
-      data?.floatingEffectiveBusiness2,
-      data?.floatingFixingBusiness1,
-      data?.floatingFixingBusiness2,
       data?.fixedEffectiveConvention1,
       data?.fixedEffectiveConvention2,
-      data?.floatingEffectiveConvention1,
-      data?.floatingEffectiveConvention2,
+      data?.fixedPaymentConvention1,
+      data?.fixedPaymentConvention2,
       data?.fixedTerminationConvention1,
       data?.fixedTerminationConvention2,
-      data?.floatingTerminationConvention1,
-      data?.floatingTerminationConvention2,
-      data?.fixedCalculationConvention1,
-      data?.fixedCalculationConvention2,
+      data?.fixingDayCountFraction,
+      data?.fixingOffset,
+      data?.floatingAddShiftFix1,
+      data?.floatingAddShiftFix2,
       data?.floatingCalculationConvention1,
       data?.floatingCalculationConvention2,
-      data?.fixedPaymentConvention1,
-      data?.fixedPaymentConvention2,
-      data?.floatingPaymentConvention1,
-      data?.floatingPaymentConvention2,
-      data?.floatingResetConvention1,
-      data?.floatingResetConvention2,
+      data?.floatingDayCountFraction,
+      data?.floatingEffectiveBusiness1,
+      data?.floatingEffectiveBusiness2,
+      data?.floatingEffectiveConvention1,
+      data?.floatingEffectiveConvention2,
+      data?.floatingFixingBusiness1,
+      data?.floatingFixingBusiness2,
       data?.floatingFixingConvention1,
       data?.floatingFixingConvention2,
-      data?.fixedAddNoStandartPeriod1,
       data?.floatingAddNoStandartPeriod1,
-      data?.fixedAddNoStandartPeriod2,
       data?.floatingAddNoStandartPeriod2,
-      data?.offsetList1,
-      data?.offsetList2,
+      data?.floatingOffset,
+      data?.floatingPaymentConvention1,
+      data?.floatingPaymentConvention2,
+      data?.floatingResetConvention1,
+      data?.floatingResetConvention2,
+      data?.floatingTerminationConvention1,
+      data?.floatingTerminationConvention2,
+      data?.index,
+      data?.index2,
       data?.offsetLengthList1,
       data?.offsetLengthList2,
-      data?.floatingAddShiftFix1,
-      data?.floatingAddShiftFix2,
+      data?.offsetList1,
+      data?.offsetList2,
+      data?.payments1,
+      data?.payments2,
+      data?.shiftingPayments1,
+      data?.shiftingPayments2,
+      data?.term,
       form.rateType,
       form.rateType2,
+      pattern,
     ],
   );
 
diff --git a/src/widgets/OrdersJournal/components/TicketModal/types.ts b/src/widgets/OrdersJournal/components/TicketModal/types.ts
index dac305ed9..e936e7aef 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/types.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/types.ts
@@ -11,14 +11,12 @@ import {
 } from '@widgets/OrdersJournal/components/TicketForm/types';
 import { TypeOrder } from '@widgets/OrdersJournal/types';
 import { DealFXSwopDirection, DealIRSOISDirection, DealXCCYDirection, TicketType } from 'types/SapfirSpfi';
-import { SpfiDraftStatus } from 'types/spfiDrafts';
 
 export enum TicketProductType {
   IRS = 'IRS',
   OIS = 'OIS',
   FX_SWAP = 'FX_SWAP',
   XCCY = 'XCCY',
-  BASIS_XCCY = 'BASIS_XCCY',
 }
 
 export type GetTicketOptionsParams = {
@@ -36,18 +34,17 @@ export type AdditionalOption = {
   id: string;
   name: string;
   priority: boolean;
-  pattern?: boolean;
 };
 
-export type DefaultOption = DefaultOptionType & { priority?: boolean; pattern?: boolean };
+export type DefaultOption = DefaultOptionType & { priority?: boolean };
 
 export type TicketOptions = {
   product: string[];
-  term: AdditionalOption[];
-  currencies: AdditionalOption[];
-  currencyPairs: AdditionalOption[];
-  index: AdditionalOption[];
-  index2: AdditionalOption[];
+  term: string[];
+  currencies: string[];
+  currencyPairs: string[];
+  index: string[];
+  index2: string[];
   /** Используется только для шаблонных ордеров */
   fixingDayCountFraction: string[];
   /** Используется только для шаблонных ордеров */
@@ -58,8 +55,7 @@ export type TicketOptions = {
   floatingOffset: string[];
   csa: string[];
 
-  dayFraction1: AdditionalOption[];
-  dayFraction2: AdditionalOption[];
+  dayFraction: string[];
   payments1: AdditionalOption[];
   payments2: AdditionalOption[];
 
@@ -157,8 +153,8 @@ export type AccountsWithCodes = { type: string; accountName: string[]; code?: st
 export type UseOptionsProps = {
   form: Partial<TicketFormInputs>;
   forcedOptions?: TicketFormProps['options'];
+  pattern: GetTicketOptionsParams['pattern'];
   config: OrdersJournalPluginConfig;
-  ticketType: TicketType;
 };
 
 export type CreateTicketRequestData = {
@@ -303,19 +299,26 @@ export type CreateFromDraftTicketParams = {
 export type OpenDraftTicketParams = {
   type: TicketType.OpenDraft;
   /** Статус брокерской заявки */
-  status?: SpfiDraftStatus;
+  status?: string;
   orderId?: number;
   draftId?: number;
 };
 
-export type TicketParams =
-  | CreateTicketParams
-  | AcceptTicketParams
-  | CreateDepthTicketParams
-  | CreateDepthEqualTicketParams
-  | CreateDraftTicketParams
-  | OpenDraftTicketParams
-  | CreateFromDraftTicketParams;
+export type BaseTicketParams = {
+  /** Паттерн ордера: шаблонный (undefined или PATTERN) или нешаблонный (NOPATTERN) */
+  pattern?: GetTicketOptionsParams['pattern'];
+};
+
+export type TicketParams = BaseTicketParams &
+  (
+    | CreateTicketParams
+    | AcceptTicketParams
+    | CreateDepthTicketParams
+    | CreateDepthEqualTicketParams
+    | CreateDraftTicketParams
+    | OpenDraftTicketParams
+    | CreateFromDraftTicketParams
+  );
 
 export enum TicketStatisticsEvent {
   Open = 'OPEN',
@@ -478,14 +481,19 @@ export type OrdersJournalPluginConfig = {
   ticketOptionsEndpoint: (params: GetTicketOptionsParams, signal?: AbortSignal) => AxiosPromise<TicketOptions>;
   getCounterpartyOptions: (search?: string, page?: number, size?: number) => Promise<Value[]>;
   accountsOptionsEndpoint: (signal?: AbortSignal) => AxiosPromise<AccountsList>;
-  orderEndpoint: (orderId: number, signal?: AbortSignal) => AxiosPromise<OrderById>;
+  submitEndpoint:
+    | ((data: CreateTicketRequestData, signal?: AbortSignal) => AxiosPromise<null>)
+    | ((data: CreateNoPatternTicketRequestData, signal?: AbortSignal) => AxiosPromise<null>);
+  orderEndpoint: (orderId: number, signal?: AbortSignal) => AxiosPromise<DraftById>;
   defaultTicketParamsEndpoint?: (params: GetOrderDepthParams, signal?: AbortSignal) => AxiosPromise<OrderByOrderDepth>;
   onSuccessSubmit?: (orderId?: number) => void;
+  metricsEndpoint: (data: OrderMetricsRequestData, signal?: AbortSignal) => AxiosPromise;
 };
 
 export type UseFieldsControlProps = {
   form: Partial<TicketFormInputs>;
   type: TicketType;
+  pattern: GetTicketOptionsParams['pattern'];
   options: TicketFormProps['options'];
   config: OrdersJournalPluginConfig;
   defaultFormValues?: Partial<TicketFormInputs>;
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderDepthToTickedParams.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderDepthToTickedParams.test.ts
index 20adb4847..0ca7e3975 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderDepthToTickedParams.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderDepthToTickedParams.test.ts
@@ -104,10 +104,10 @@ describe('convertOrderDepthToTicketParams', () => {
     expect(result.defaultValues.direction).toBe(expectedDirection);
     expect(result.defaultValues.effectiveDate).toBe(order.startDate);
     expect(result.defaultValues.terminationDate).toBe(order.endDate);
-    expect(result.defaultValues.currencyPairs).toBe('USD_EUR');
+    expect(result.defaultValues.currencyPairs).toBe('USD/EUR');
     expect(result.defaultValues.csa).toBe(order.csa);
     expect(result.defaultValues.tradingMode).toBe(TradingMode.Public);
-    expect(result.forcedOptions?.currencyPairs).toEqual([{ label: 'USD/EUR', value: 'USD_EUR' }]);
+    expect(result.forcedOptions?.currencyPairs).toEqual([{ label: 'USD/EUR', value: 'USD/EUR' }]);
   };
 
   describe.each`
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderToTicketParams.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderToTicketParams.test.ts
index 5d54a7d36..7ee63e383 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderToTicketParams.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/convertOrderToTicketParams.test.ts
@@ -146,7 +146,7 @@ describe('convertOrderToTicketParams', () => {
       expect(result.defaultValues?.csa).toBe(order.csa);
       expect(result.defaultValues?.comment).toBe(order.comment);
       expectPremiumFields(result, order);
-      expect(result.defaultValues?.currencyPairs).toBe('RUB_USD');
+      expect(result.defaultValues?.currencyPairs).toBe('RUB/USD');
       expect(result.defaultValues?.amount1).toBe(order.balance);
       expect(result.defaultValues?.amount2).toBe(order.balance * order.nearLegRate);
       expect(result.defaultValues?.farLegAmount1).toBe(order.balance);
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultCounterparty.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultCounterparty.test.ts
deleted file mode 100644
index 82311503a..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultCounterparty.test.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { PUBLIC_COUNTERPARTY_SEARCH } from '@widgets/OrdersJournal/components/TicketForm/const';
-import { TradingMode } from '@widgets/OrdersJournal/components/TicketForm/types';
-
-import { getDefaultCounterparty } from '../getDefaultCounterparty';
-
-describe('getDefaultCounterparty', () => {
-  describe('когда tradingMode === TradingMode.Public', () => {
-    it('должен возвращать PUBLIC_COUNTERPARTY_SEARCH', () => {
-      const result = getDefaultCounterparty(TradingMode.Public);
-      expect(result).toBe(PUBLIC_COUNTERPARTY_SEARCH);
-    });
-
-    it('должен возвращать PUBLIC_COUNTERPARTY_SEARCH даже если defaultValues.counterparty передан', () => {
-      const result = getDefaultCounterparty(TradingMode.Public, { counterparty: 'CustomCounterparty' });
-      expect(result).toBe(PUBLIC_COUNTERPARTY_SEARCH);
-    });
-
-    it('должен возвращать PUBLIC_COUNTERPARTY_SEARCH даже если defaultValues.counterparty === null', () => {
-      const result = getDefaultCounterparty(TradingMode.Public, { counterparty: null });
-      expect(result).toBe(PUBLIC_COUNTERPARTY_SEARCH);
-    });
-  });
-
-  describe('когда tradingMode === TradingMode.Address', () => {
-    it('должен возвращать defaultValues.counterparty если он передан', () => {
-      const counterparty = 'CustomCounterparty';
-      const result = getDefaultCounterparty(TradingMode.Address, { counterparty });
-      expect(result).toBe(counterparty);
-    });
-
-    it('должен возвращать undefined если defaultValues не передан', () => {
-      const result = getDefaultCounterparty(TradingMode.Address);
-      expect(result).toBeUndefined();
-    });
-
-    it('должен возвращать undefined если defaultValues.counterparty не передан', () => {
-      const result = getDefaultCounterparty(TradingMode.Address, {});
-      expect(result).toBeUndefined();
-    });
-
-    it('должен возвращать null если defaultValues.counterparty === null', () => {
-      const result = getDefaultCounterparty(TradingMode.Address, { counterparty: null });
-      expect(result).toBeNull();
-    });
-
-    it('должен возвращать пустую строку если defaultValues.counterparty === ""', () => {
-      const result = getDefaultCounterparty(TradingMode.Address, { counterparty: '' });
-      expect(result).toBe('');
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultDisabledFields.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultDisabledFields.test.ts
deleted file mode 100644
index 7887fba85..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultDisabledFields.test.ts
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * Тесты для утилиты getDefaultDisabledFields
- *
- * Функция возвращает набор отключенных полей формы в зависимости от типа тикета
- * и статуса черновика.
- *
- * Тестирование включает:
- * 1. Проверку возврата OPEN_DRAFT_DISABLED_FIELDS для OpenDraft с не-REVIEW статусом
- * 2. Проверку возврата DISABLED_FIELDS для OpenDraft с REVIEW статусом
- * 3. Проверку возврата DISABLED_FIELDS для всех остальных типов тикетов
- * 4. Проверку граничных случаев (пустая форма, различные статусы)
- */
-
-import { TicketProduct, TicketType } from 'types/SapfirSpfi';
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { DISABLED_FIELDS, OPEN_DRAFT_DISABLED_FIELDS } from '../../const';
-import { getDefaultDisabledFields } from '../getDefaultDisabledFields';
-
-describe('getDefaultDisabledFields', () => {
-  describe('TicketType.OpenDraft', () => {
-    it('should return OPEN_DRAFT_DISABLED_FIELDS when status is not REVIEW', () => {
-      const result = getDefaultDisabledFields(TicketType.OpenDraft, {
-        status: SpfiDraftStatus.APPROVE,
-      });
-
-      expect(result).toBe(OPEN_DRAFT_DISABLED_FIELDS);
-    });
-
-    it('should return OPEN_DRAFT_DISABLED_FIELDS when status is EXECUTE', () => {
-      const result = getDefaultDisabledFields(TicketType.OpenDraft, {
-        status: SpfiDraftStatus.EXECUTE,
-      });
-
-      expect(result).toBe(OPEN_DRAFT_DISABLED_FIELDS);
-    });
-
-    it('should return OPEN_DRAFT_DISABLED_FIELDS when status is REMOVED', () => {
-      const result = getDefaultDisabledFields(TicketType.OpenDraft, {
-        status: SpfiDraftStatus.REMOVED,
-      });
-
-      expect(result).toBe(OPEN_DRAFT_DISABLED_FIELDS);
-    });
-
-    it('should return OPEN_DRAFT_DISABLED_FIELDS when status is COMPLETED', () => {
-      const result = getDefaultDisabledFields(TicketType.OpenDraft, {
-        status: SpfiDraftStatus.COMPLETED,
-      });
-
-      expect(result).toBe(OPEN_DRAFT_DISABLED_FIELDS);
-    });
-
-    it('should return DISABLED_FIELDS[OpenDraft] when status is REVIEW', () => {
-      const result = getDefaultDisabledFields(TicketType.OpenDraft, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.OpenDraft]);
-    });
-
-    it('should return OPEN_DRAFT_DISABLED_FIELDS when form is empty object', () => {
-      const result = getDefaultDisabledFields(TicketType.OpenDraft, {});
-
-      expect(result).toBe(OPEN_DRAFT_DISABLED_FIELDS);
-    });
-
-    it('should return OPEN_DRAFT_DISABLED_FIELDS when form has no status field', () => {
-      const result = getDefaultDisabledFields(TicketType.OpenDraft, {
-        dealType: TicketProduct.IRS_OIS,
-      });
-
-      expect(result).toBe(OPEN_DRAFT_DISABLED_FIELDS);
-    });
-  });
-
-  describe('TicketType.Create', () => {
-    it('should return DISABLED_FIELDS[Create] regardless of form status', () => {
-      const result = getDefaultDisabledFields(TicketType.Create, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.Create]);
-    });
-
-    it('should return DISABLED_FIELDS[Create] when form is empty', () => {
-      const result = getDefaultDisabledFields(TicketType.Create, {});
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.Create]);
-    });
-  });
-
-  describe('TicketType.Accept', () => {
-    it('should return DISABLED_FIELDS[Accept] regardless of form status', () => {
-      const result = getDefaultDisabledFields(TicketType.Accept, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.Accept]);
-    });
-
-    it('should return DISABLED_FIELDS[Accept] when form is empty', () => {
-      const result = getDefaultDisabledFields(TicketType.Accept, {});
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.Accept]);
-    });
-  });
-
-  describe('TicketType.Cancel', () => {
-    it('should return DISABLED_FIELDS[Cancel] regardless of form status', () => {
-      const result = getDefaultDisabledFields(TicketType.Cancel, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.Cancel]);
-    });
-
-    it('should return DISABLED_FIELDS[Cancel] when form is empty', () => {
-      const result = getDefaultDisabledFields(TicketType.Cancel, {});
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.Cancel]);
-    });
-  });
-
-  describe('TicketType.CreateDepth', () => {
-    it('should return DISABLED_FIELDS[CreateDepth] regardless of form status', () => {
-      const result = getDefaultDisabledFields(TicketType.CreateDepth, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.CreateDepth]);
-    });
-  });
-
-  describe('TicketType.CreateDepthEqual', () => {
-    it('should return DISABLED_FIELDS[CreateDepthEqual] regardless of form status', () => {
-      const result = getDefaultDisabledFields(TicketType.CreateDepthEqual, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.CreateDepthEqual]);
-    });
-  });
-
-  describe('TicketType.CreateDraft', () => {
-    it('should return DISABLED_FIELDS[CreateDraft] regardless of form status', () => {
-      const result = getDefaultDisabledFields(TicketType.CreateDraft, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.CreateDraft]);
-    });
-  });
-
-  describe('TicketType.CreateFromDraft', () => {
-    it('should return DISABLED_FIELDS[CreateFromDraft] regardless of form status', () => {
-      const result = getDefaultDisabledFields(TicketType.CreateFromDraft, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-
-      expect(result).toBe(DISABLED_FIELDS[TicketType.CreateFromDraft]);
-    });
-  });
-
-  describe('different OpenDraft statuses comparison', () => {
-    it('should return different results for REVIEW vs non-REVIEW status', () => {
-      const reviewResult = getDefaultDisabledFields(TicketType.OpenDraft, {
-        status: SpfiDraftStatus.REVIEW,
-      });
-      const approveResult = getDefaultDisabledFields(TicketType.OpenDraft, {
-        status: SpfiDraftStatus.APPROVE,
-      });
-
-      expect(reviewResult).not.toBe(approveResult);
-      expect(reviewResult).toBe(DISABLED_FIELDS[TicketType.OpenDraft]);
-      expect(approveResult).toBe(OPEN_DRAFT_DISABLED_FIELDS);
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultIndex.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultIndex.test.ts
index 801c877ae..c1cbc7ca2 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultIndex.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDefaultIndex.test.ts
@@ -40,13 +40,13 @@ describe('getDefaultIndex', () => {
   });
 
   describe('when rateType is FLOAT', () => {
-    it('should return defaultIndex when fieldOptions is undefined', () => {
+    it('should return defaultIndexFromOptions when it is provided', () => {
       const result = getDefaultIndex({
         rateType: RateType.FLOAT,
         defaultIndexFromOptions: 'indexFromOptions',
         defaultIndex: 'defaultIndex',
       });
-      expect(result).toBe('defaultIndex');
+      expect(result).toBe('indexFromOptions');
     });
 
     it('should return defaultIndex when defaultIndexFromOptions is null', () => {
@@ -76,23 +76,23 @@ describe('getDefaultIndex', () => {
       expect(result).toBeNull();
     });
 
-    it('should return null when both defaultIndexFromOptions and defaultIndex are undefined', () => {
+    it('should return undefined when both defaultIndexFromOptions and defaultIndex are undefined', () => {
       const result = getDefaultIndex({
         rateType: RateType.FLOAT,
         defaultIndexFromOptions: undefined,
         defaultIndex: undefined,
       });
-      expect(result).toBeNull();
+      expect(result).toBeUndefined();
     });
   });
 
   describe('when rateType is undefined', () => {
-    it('should return defaultIndex when fieldOptions is undefined', () => {
+    it('should return defaultIndexFromOptions when it is provided', () => {
       const result = getDefaultIndex({
         defaultIndexFromOptions: 'indexFromOptions',
         defaultIndex: 'defaultIndex',
       });
-      expect(result).toBe('defaultIndex');
+      expect(result).toBe('indexFromOptions');
     });
 
     it('should return defaultIndex when defaultIndexFromOptions is null', () => {
@@ -103,20 +103,29 @@ describe('getDefaultIndex', () => {
       expect(result).toBe('defaultIndex');
     });
 
-    it('should return null when both are undefined', () => {
+    it('should return undefined when both are undefined', () => {
       const result = getDefaultIndex({});
-      expect(result).toBeNull();
+      expect(result).toBeUndefined();
     });
   });
 
   describe('edge cases', () => {
+    it('should return empty string when defaultIndexFromOptions is empty string', () => {
+      const result = getDefaultIndex({
+        rateType: RateType.FLOAT,
+        defaultIndexFromOptions: '',
+        defaultIndex: 'defaultIndex',
+      });
+      expect(result).toBe('');
+    });
+
     it('should return defaultIndex when defaultIndexFromOptions is empty string', () => {
       const result = getDefaultIndex({
         rateType: RateType.FLOAT,
         defaultIndexFromOptions: '',
         defaultIndex: 'defaultIndex',
       });
-      expect(result).toBe('defaultIndex');
+      expect(result).toBe('');
     });
 
     it('should handle numeric string values', () => {
@@ -125,7 +134,7 @@ describe('getDefaultIndex', () => {
         defaultIndexFromOptions: '12345',
         defaultIndex: '67890',
       });
-      expect(result).toBe('67890');
+      expect(result).toBe('12345');
     });
   });
 });
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDisabledFields.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDisabledFields.test.ts
index 1c67e1832..b630a450a 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDisabledFields.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getDisabledFields.test.ts
@@ -18,16 +18,20 @@ import {
   getDisabledIndex2,
   getDisabledIndex,
   getDisabledNearLegRate,
+  getDisabledRateType2,
+  getDisabledRateType,
   getDisabledSpread2,
   getDisabledSpread,
   getDisabledSwapPoints,
   getDisabledTerm,
   getDisabledTerminationDate,
+  getDisabledTradingMode,
 } from '../getDisabledFields';
 
 const createProps = (overrides: Partial<UseFieldsControlProps> = {}): Partial<UseFieldsControlProps> => ({
   form: {},
   type: TicketType.Create,
+  pattern: 'PATTERN',
   options: {},
   config: {} as UseFieldsControlProps['config'],
   defaultFormValues: {},
@@ -102,39 +106,59 @@ describe('getDisabledFields', () => {
   });
 
   describe('getDisabledEffectiveDate', () => {
-    it('should return "effectiveDate" for pattern order (noPatternOrder is undefined)', () => {
-      const result = getDisabledEffectiveDate(createProps({ form: {} }));
+    it('should return "effectiveDate" for pattern order', () => {
+      const result = getDisabledEffectiveDate(createProps({ pattern: 'PATTERN' }));
       expect(result).toBe('effectiveDate');
     });
 
     it('should return "effectiveDate" when term options are not available', () => {
-      const result = getDisabledEffectiveDate(createProps({ form: { noPatternOrder: true }, options: { term: [] } }));
+      const result = getDisabledEffectiveDate(createProps({ pattern: 'NOPATTERN', options: { term: [] } }));
       expect(result).toBe('effectiveDate');
     });
 
-    it('should return undefined when term is available and noPatternOrder is true', () => {
-      const result = getDisabledEffectiveDate(
-        createProps({ form: { noPatternOrder: true }, options: { term: ['1Y', '2Y'] } }),
-      );
+    it('should return undefined when term is available and not pattern order', () => {
+      const result = getDisabledEffectiveDate(createProps({ pattern: 'NOPATTERN', options: { term: ['1Y', '2Y'] } }));
       expect(result).toBeUndefined();
     });
   });
 
   describe('getDisabledTerminationDate', () => {
-    it('should return "terminationDate" for pattern order (noPatternOrder is undefined)', () => {
-      const result = getDisabledTerminationDate(createProps({ form: {} }));
+    it('should return "terminationDate" for pattern order', () => {
+      const result = getDisabledTerminationDate(createProps({ pattern: 'PATTERN' }));
       expect(result).toBe('terminationDate');
     });
 
     it('should return "terminationDate" when term options are not available', () => {
-      const result = getDisabledTerminationDate(createProps({ form: { noPatternOrder: true }, options: { term: [] } }));
+      const result = getDisabledTerminationDate(createProps({ pattern: 'NOPATTERN', options: { term: [] } }));
       expect(result).toBe('terminationDate');
     });
 
-    it('should return undefined when term is available and noPatternOrder is true', () => {
-      const result = getDisabledTerminationDate(
-        createProps({ form: { noPatternOrder: true }, options: { term: ['1Y', '2Y'] } }),
-      );
+    it('should return undefined when term is available and not pattern order', () => {
+      const result = getDisabledTerminationDate(createProps({ pattern: 'NOPATTERN', options: { term: ['1Y', '2Y'] } }));
+      expect(result).toBeUndefined();
+    });
+  });
+
+  describe('getDisabledRateType', () => {
+    it('should return "rateType" for pattern order', () => {
+      const result = getDisabledRateType(createProps({ pattern: 'PATTERN' }));
+      expect(result).toBe('rateType');
+    });
+
+    it('should return undefined for no pattern order', () => {
+      const result = getDisabledRateType(createProps({ pattern: 'NOPATTERN' }));
+      expect(result).toBeUndefined();
+    });
+  });
+
+  describe('getDisabledRateType2', () => {
+    it('should return "rateType2" for pattern order', () => {
+      const result = getDisabledRateType2(createProps({ pattern: 'PATTERN' }));
+      expect(result).toBe('rateType2');
+    });
+
+    it('should return undefined for no pattern order', () => {
+      const result = getDisabledRateType2(createProps({ pattern: 'NOPATTERN' }));
       expect(result).toBeUndefined();
     });
   });
@@ -181,7 +205,6 @@ describe('getDisabledFields', () => {
             dealType: TicketProduct.XCCY,
             effectiveDate: '2024-01-01',
             terminationDate: '2025-01-01',
-            noPatternOrder: true,
           },
         }),
       );
@@ -191,6 +214,7 @@ describe('getDisabledFields', () => {
     it('should return "fixRate" for pattern order with CreateDepth type and XCCY product', () => {
       const result = getDisabledFixRate(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.CreateDepth,
           form: { dealType: TicketProduct.XCCY },
         }),
@@ -198,16 +222,12 @@ describe('getDisabledFields', () => {
       expect(result).toBe('fixRate');
     });
 
-    it('should return undefined for pattern order with Create type and XCCY product with term', () => {
+    it('should return undefined for pattern order with Create type and XCCY product', () => {
       const result = getDisabledFixRate(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.Create,
-          form: {
-            dealType: TicketProduct.XCCY,
-            effectiveDate: '2026-06-05',
-            terminationDate: '2026-06-05',
-            noPatternOrder: true,
-          },
+          form: { dealType: TicketProduct.XCCY, effectiveDate: '2026-06-05', terminationDate: '2026-06-05' },
         }),
       );
       expect(result).toBeUndefined();
@@ -232,7 +252,6 @@ describe('getDisabledFields', () => {
             dealType: TicketProduct.IRS_OIS,
             effectiveDate: '2024-01-01',
             terminationDate: '2025-01-01',
-            noPatternOrder: true,
           },
         }),
       );
@@ -241,49 +260,50 @@ describe('getDisabledFields', () => {
   });
 
   describe('getDisabledDateBeginningPast1', () => {
-    it('should return "dateBeginningPast1" for noPatternOrder without startInPast1', () => {
-      const result = getDisabledDateBeginningPast1(createProps({ form: { noPatternOrder: true } }));
+    it('should return "dateBeginningPast1" for no pattern order without startInPast1', () => {
+      const result = getDisabledDateBeginningPast1(createProps({ pattern: 'NOPATTERN', form: {} }));
       expect(result).toBe('dateBeginningPast1');
     });
 
-    it('should return undefined for noPatternOrder with startInPast1', () => {
-      const result = getDisabledDateBeginningPast1(createProps({ form: { noPatternOrder: true, startInPast1: true } }));
+    it('should return undefined for no pattern order with startInPast1', () => {
+      const result = getDisabledDateBeginningPast1(createProps({ pattern: 'NOPATTERN', form: { startInPast1: true } }));
       expect(result).toBeUndefined();
     });
 
     it('should return undefined for pattern order', () => {
-      const result = getDisabledDateBeginningPast1(createProps({ form: {} }));
+      const result = getDisabledDateBeginningPast1(createProps({ pattern: 'PATTERN', form: {} }));
       expect(result).toBeUndefined();
     });
   });
 
   describe('getDisabledDateBeginningPast2', () => {
-    it('should return "dateBeginningPast2" for noPatternOrder without startInPast2', () => {
-      const result = getDisabledDateBeginningPast2(createProps({ form: { noPatternOrder: true } }));
+    it('should return "dateBeginningPast2" for no pattern order without startInPast2', () => {
+      const result = getDisabledDateBeginningPast2(createProps({ pattern: 'NOPATTERN', form: {} }));
       expect(result).toBe('dateBeginningPast2');
     });
 
-    it('should return undefined for noPatternOrder with startInPast2', () => {
-      const result = getDisabledDateBeginningPast2(createProps({ form: { noPatternOrder: true, startInPast2: true } }));
+    it('should return undefined for no pattern order with startInPast2', () => {
+      const result = getDisabledDateBeginningPast2(createProps({ pattern: 'NOPATTERN', form: { startInPast2: true } }));
       expect(result).toBeUndefined();
     });
 
     it('should return undefined for pattern order', () => {
-      const result = getDisabledDateBeginningPast2(createProps({ form: {} }));
+      const result = getDisabledDateBeginningPast2(createProps({ pattern: 'PATTERN', form: {} }));
       expect(result).toBeUndefined();
     });
   });
 
   describe('getDisabledFloatingAddLenghtOffset1', () => {
-    it('should return "floatingAddLenghtOffset1" for noPatternOrder without floatingAddOffset1', () => {
-      const result = getDisabledFloatingAddLenghtOffset1(createProps({ form: { noPatternOrder: true } }));
+    it('should return "floatingAddLenghtOffset1" for no pattern order without floatingAddOffset1', () => {
+      const result = getDisabledFloatingAddLenghtOffset1(createProps({ pattern: 'NOPATTERN', form: {} }));
       expect(result).toBe('floatingAddLenghtOffset1');
     });
 
-    it('should return undefined for noPatternOrder with floatingAddOffset1', () => {
+    it('should return undefined for no pattern order with floatingAddOffset1', () => {
       const result = getDisabledFloatingAddLenghtOffset1(
         createProps({
-          form: { noPatternOrder: true, floatingAddOffset1: 'D' },
+          pattern: 'NOPATTERN',
+          form: { floatingAddOffset1: 'D' },
           options: {
             floatingAddOffset1: [{ value: 'M', priority: true }],
           },
@@ -291,18 +311,24 @@ describe('getDisabledFields', () => {
       );
       expect(result).toBeUndefined();
     });
+
+    it('should return undefined for pattern order', () => {
+      const result = getDisabledFloatingAddLenghtOffset1(createProps({ pattern: 'PATTERN', form: {} }));
+      expect(result).toBeUndefined();
+    });
   });
 
   describe('getDisabledFloatingAddLenghtOffset2', () => {
-    it('should return "floatingAddLenghtOffset2" for noPatternOrder without floatingAddOffset2', () => {
-      const result = getDisabledFloatingAddLenghtOffset2(createProps({ form: { noPatternOrder: true } }));
+    it('should return "floatingAddLenghtOffset2" for no pattern order without floatingAddOffset2', () => {
+      const result = getDisabledFloatingAddLenghtOffset2(createProps({ pattern: 'NOPATTERN', form: {} }));
       expect(result).toBe('floatingAddLenghtOffset2');
     });
 
-    it('should return undefined for noPatternOrder with floatingAddOffset2', () => {
+    it('should return undefined for no pattern order with floatingAddOffset2', () => {
       const result = getDisabledFloatingAddLenghtOffset2(
         createProps({
-          form: { noPatternOrder: true, floatingAddOffset2: 'D' },
+          pattern: 'NOPATTERN',
+          form: { floatingAddOffset2: 'D' },
           options: {
             floatingAddOffset2: [{ value: 'M', priority: true }],
           },
@@ -310,6 +336,11 @@ describe('getDisabledFields', () => {
       );
       expect(result).toBeUndefined();
     });
+
+    it('should return undefined for pattern order', () => {
+      const result = getDisabledFloatingAddLenghtOffset2(createProps({ pattern: 'PATTERN', form: {} }));
+      expect(result).toBeUndefined();
+    });
   });
 
   describe('getDisabledBroker', () => {
@@ -349,14 +380,15 @@ describe('getDisabledFields', () => {
 
   describe('getDisabledIndex', () => {
     it('should return "index" for pattern order', () => {
-      const result = getDisabledIndex(createProps({ form: {} }));
+      const result = getDisabledIndex(createProps({ pattern: 'PATTERN' }));
       expect(result).toBe('index');
     });
 
     it('should return "index" for IRS_OIS product with fixed rate', () => {
       const result = getDisabledIndex(
         createProps({
-          form: { dealType: TicketProduct.IRS_OIS, rateType: RateType.FIXED, noPatternOrder: true },
+          pattern: 'NOPATTERN',
+          form: { dealType: TicketProduct.IRS_OIS, rateType: RateType.FIXED },
         }),
       );
       expect(result).toBe('index');
@@ -365,7 +397,8 @@ describe('getDisabledFields', () => {
     it('should return "index" for XCCY product with fixed rate', () => {
       const result = getDisabledIndex(
         createProps({
-          form: { dealType: TicketProduct.XCCY, rateType: RateType.FIXED, noPatternOrder: true },
+          pattern: 'NOPATTERN',
+          form: { dealType: TicketProduct.XCCY, rateType: RateType.FIXED },
         }),
       );
       expect(result).toBe('index');
@@ -374,7 +407,8 @@ describe('getDisabledFields', () => {
     it('should return undefined for IRS_OIS product with float rate', () => {
       const result = getDisabledIndex(
         createProps({
-          form: { dealType: TicketProduct.IRS_OIS, rateType: RateType.FLOAT, noPatternOrder: true },
+          pattern: 'NOPATTERN',
+          form: { dealType: TicketProduct.IRS_OIS, rateType: RateType.FLOAT },
         }),
       );
       expect(result).toBeUndefined();
@@ -406,16 +440,39 @@ describe('getDisabledFields', () => {
     });
   });
 
+  describe('getDisabledTradingMode', () => {
+    it('should return "tradingMode" for pattern order with CreateDepth type', () => {
+      const result = getDisabledTradingMode(createProps({ pattern: 'PATTERN', type: TicketType.CreateDepth }));
+      expect(result).toBe('tradingMode');
+    });
+
+    it('should return "tradingMode" for pattern order with CreateDepthEqual type', () => {
+      const result = getDisabledTradingMode(createProps({ pattern: 'PATTERN', type: TicketType.CreateDepthEqual }));
+      expect(result).toBe('tradingMode');
+    });
+
+    it('should return undefined for pattern order with Create type', () => {
+      const result = getDisabledTradingMode(createProps({ pattern: 'PATTERN', type: TicketType.Create }));
+      expect(result).toBeUndefined();
+    });
+
+    it('should return undefined for no pattern order', () => {
+      const result = getDisabledTradingMode(createProps({ pattern: 'NOPATTERN', type: TicketType.CreateDepth }));
+      expect(result).toBeUndefined();
+    });
+  });
+
   describe('getDisabledSpread', () => {
     it('should return "spread" for pattern order', () => {
-      const result = getDisabledSpread(createProps({ form: {} }));
+      const result = getDisabledSpread(createProps({ pattern: 'PATTERN' }));
       expect(result).toBe('spread');
     });
 
     it('should return "spread" for XCCY product with fixed rate', () => {
       const result = getDisabledSpread(
         createProps({
-          form: { dealType: TicketProduct.XCCY, rateType: RateType.FIXED, noPatternOrder: true },
+          pattern: 'NOPATTERN',
+          form: { dealType: TicketProduct.XCCY, rateType: RateType.FIXED },
         }),
       );
       expect(result).toBe('spread');
@@ -424,7 +481,8 @@ describe('getDisabledFields', () => {
     it('should return "spread" for IRS_OIS product with fixed rate', () => {
       const result = getDisabledSpread(
         createProps({
-          form: { dealType: TicketProduct.IRS_OIS, rateType: RateType.FIXED, noPatternOrder: true },
+          pattern: 'NOPATTERN',
+          form: { dealType: TicketProduct.IRS_OIS, rateType: RateType.FIXED },
         }),
       );
       expect(result).toBe('spread');
@@ -433,6 +491,7 @@ describe('getDisabledFields', () => {
     it('should return "spread" for pattern order with CreateDepth type and XCCY product', () => {
       const result = getDisabledSpread(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.CreateDepth,
           form: { dealType: TicketProduct.XCCY },
         }),
@@ -443,7 +502,8 @@ describe('getDisabledFields', () => {
     it('should return undefined for XCCY product with float rate', () => {
       const result = getDisabledSpread(
         createProps({
-          form: { dealType: TicketProduct.XCCY, rateType: RateType.FLOAT, noPatternOrder: true },
+          pattern: 'NOPATTERN',
+          form: { dealType: TicketProduct.XCCY, rateType: RateType.FLOAT },
         }),
       );
       expect(result).toBeUndefined();
@@ -465,14 +525,15 @@ describe('getDisabledFields', () => {
       expect(result).toBe('spread2');
     });
 
-    it('should return undefined for pattern order with CreateDepth type and XCCY product', () => {
+    it('should return "spread2" for pattern order with CreateDepth type and XCCY product', () => {
       const result = getDisabledSpread2(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.CreateDepth,
           form: { dealType: TicketProduct.XCCY },
         }),
       );
-      expect(result).toBeUndefined();
+      expect(result).toBe('spread2');
     });
 
     it('should return undefined for IRS_OIS product with float rate2', () => {
@@ -491,18 +552,20 @@ describe('getDisabledFields', () => {
       expect(result).toBe('nearLegRate');
     });
 
-    it('should return "nearLegRate" for pattern XCCY product without term', () => {
+    it('should return "nearLegRate" for PATTERN XCCY product without term', () => {
       const result = getDisabledNearLegRate(
         createProps({
+          pattern: 'PATTERN',
           form: { dealType: TicketProduct.XCCY },
         }),
       );
       expect(result).toBe('nearLegRate');
     });
 
-    it('should return "nearLegRate" for pattern IRS_OIS product without term', () => {
+    it('should return "nearLegRate" for PATTERN IRS_OIS product without term', () => {
       const result = getDisabledNearLegRate(
         createProps({
+          pattern: 'PATTERN',
           form: { dealType: TicketProduct.IRS_OIS },
         }),
       );
@@ -512,6 +575,7 @@ describe('getDisabledFields', () => {
     it('should return "nearLegRate" for pattern order with CreateDepth type and FX_SWAP product', () => {
       const result = getDisabledNearLegRate(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.CreateDepth,
           form: { dealType: TicketProduct.FX_SWAP },
         }),
@@ -526,7 +590,6 @@ describe('getDisabledFields', () => {
             dealType: TicketProduct.FX_SWAP,
             effectiveDate: '2024-01-01',
             terminationDate: '2025-01-01',
-            noPatternOrder: true,
           },
         }),
       );
@@ -540,9 +603,10 @@ describe('getDisabledFields', () => {
       expect(result).toBe('amount1');
     });
 
-    it('should return "amount1" for pattern IRS_OIS product without term', () => {
+    it('should return "amount1" for PATTERN IRS_OIS product without term', () => {
       const result = getDisabledAmount1(
         createProps({
+          pattern: 'PATTERN',
           form: { dealType: TicketProduct.IRS_OIS },
         }),
       );
@@ -552,6 +616,7 @@ describe('getDisabledFields', () => {
     it('should return "amount1" for pattern order with CreateDepth type and IRS_OIS product', () => {
       const result = getDisabledAmount1(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.CreateDepth,
           form: { dealType: TicketProduct.IRS_OIS },
         }),
@@ -562,11 +627,11 @@ describe('getDisabledFields', () => {
     it('should return undefined for IRS_OIS product with term', () => {
       const result = getDisabledAmount1(
         createProps({
+          pattern: 'NOPATTERN',
           form: {
             dealType: TicketProduct.IRS_OIS,
             effectiveDate: '2024-01-01',
             terminationDate: '2025-01-01',
-            noPatternOrder: true,
           },
         }),
       );
@@ -580,9 +645,10 @@ describe('getDisabledFields', () => {
       expect(result).toBe('amount2');
     });
 
-    it('should return "amount2" for pattern IRS_OIS product without term', () => {
+    it('should return "amount2" for PATTERN IRS_OIS product without term', () => {
       const result = getDisabledAmount2(
         createProps({
+          pattern: 'PATTERN',
           form: { dealType: TicketProduct.IRS_OIS },
         }),
       );
@@ -592,6 +658,7 @@ describe('getDisabledFields', () => {
     it('should return "amount2" for pattern order with CreateDepth type and IRS_OIS product', () => {
       const result = getDisabledAmount2(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.CreateDepth,
           form: { dealType: TicketProduct.IRS_OIS },
         }),
@@ -602,6 +669,7 @@ describe('getDisabledFields', () => {
     it('should return "amount2" for pattern order with CreateDepth type and FX_SWAP product', () => {
       const result = getDisabledAmount2(
         createProps({
+          pattern: 'PATTERN',
           type: TicketType.CreateDepth,
           form: { dealType: TicketProduct.FX_SWAP },
         }),
@@ -616,7 +684,6 @@ describe('getDisabledFields', () => {
             dealType: TicketProduct.FX_SWAP,
             effectiveDate: '2024-01-01',
             terminationDate: '2025-01-01',
-            noPatternOrder: true,
           },
         }),
       );
@@ -637,7 +704,6 @@ describe('getDisabledFields', () => {
             dealType: TicketProduct.FX_SWAP,
             effectiveDate: '2024-01-01',
             terminationDate: '2025-01-01',
-            noPatternOrder: true,
           },
         }),
       );
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getIsFxSwapProduct.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getIsFxSwapProduct.test.ts
deleted file mode 100644
index 62733aa01..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getIsFxSwapProduct.test.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { getIsFxSwapProduct } from '../getIsFxSwapProduct';
-
-describe('getIsFxSwapProduct', () => {
-  it('должен возвращать false когда form undefined', () => {
-    expect(getIsFxSwapProduct()).toBe(false);
-  });
-
-  it('должен возвращать false когда form.dealType undefined', () => {
-    expect(getIsFxSwapProduct({})).toBe(false);
-  });
-
-  it('должен возвращать true когда form.dealType равен TicketProduct.FX_SWAP', () => {
-    expect(getIsFxSwapProduct({ dealType: TicketProduct.FX_SWAP })).toBe(true);
-  });
-
-  it('должен возвращать false когда form.dealType равен TicketProduct.IRS_OIS', () => {
-    expect(getIsFxSwapProduct({ dealType: TicketProduct.IRS_OIS })).toBe(false);
-  });
-
-  it('должен возвращать false когда form.dealType равен TicketProduct.XCCY', () => {
-    expect(getIsFxSwapProduct({ dealType: TicketProduct.XCCY })).toBe(false);
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getIsXCCYProduct.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getIsXCCYProduct.test.ts
deleted file mode 100644
index 584cc5029..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getIsXCCYProduct.test.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { getIsXCCYProduct } from '../getIsXCCYProduct';
-
-describe('getIsXCCYProduct', () => {
-  it('should return true when dealType is XCCY', () => {
-    const form = { dealType: TicketProduct.XCCY };
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(true);
-  });
-
-  it('should return false when dealType is IRS_OIS', () => {
-    const form = { dealType: TicketProduct.IRS_OIS };
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(false);
-  });
-
-  it('should return false when dealType is FX_SWAP', () => {
-    const form = { dealType: TicketProduct.FX_SWAP };
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(false);
-  });
-
-  it('should return false when dealType is undefined', () => {
-    const form = { dealType: undefined };
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(false);
-  });
-
-  it('should return false when form is empty object', () => {
-    const form = {};
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(false);
-  });
-
-  it('should return false when form has no dealType property', () => {
-    const form = { amount: 1000 } as Partial<TicketFormInputs>;
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(false);
-  });
-
-  it('should handle form with additional properties when dealType is XCCY', () => {
-    const form = {
-      dealType: TicketProduct.XCCY,
-      amount: 1000,
-      currency: 'USD',
-    };
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(true);
-  });
-
-  it('should handle form with additional properties when dealType is not XCCY', () => {
-    const form = {
-      dealType: TicketProduct.IRS_OIS,
-      amount: 1000,
-      currency: 'USD',
-    };
-    const result = getIsXCCYProduct(form);
-    expect(result).toBe(false);
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getPaymentOptions.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getPaymentOptions.test.ts
deleted file mode 100644
index bd442a958..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getPaymentOptions.test.ts
+++ /dev/null
@@ -1,234 +0,0 @@
-import { getPaymentOptions } from '../getPaymentOptions';
-
-import type { DefaultOption } from '../../types';
-
-describe('getPaymentOptions', () => {
-  const createDefaultOption = (value: string | number, label: string): DefaultOption => ({
-    value,
-    label,
-  });
-
-  describe('when both parameters are undefined', () => {
-    it('should return undefined', () => {
-      const result = getPaymentOptions();
-      expect(result).toBeUndefined();
-    });
-  });
-
-  describe('when only paymentPeriodFieldOptions is provided', () => {
-    it('should return paymentPeriodFieldOptions when ticketOptionsFieldOptions is undefined', () => {
-      const paymentOptions = ['option1', 'option2'];
-      const result = getPaymentOptions(paymentOptions);
-      expect(result).toBe(paymentOptions);
-    });
-
-    it('should return paymentPeriodFieldOptions when ticketOptionsFieldOptions is empty array', () => {
-      const paymentOptions = ['option1', 'option2'];
-      const result = getPaymentOptions(paymentOptions, []);
-      expect(result).toBe(paymentOptions);
-    });
-  });
-
-  describe('when only ticketOptionsFieldOptions is provided', () => {
-    it('should return ticketOptionsFieldOptions when it has length', () => {
-      const ticketOptions: DefaultOption[] = [
-        createDefaultOption('value1', 'Label 1'),
-        createDefaultOption('value2', 'Label 2'),
-      ];
-      const result = getPaymentOptions(undefined, ticketOptions);
-      expect(result).toBe(ticketOptions);
-    });
-
-    it('should return undefined when ticketOptionsFieldOptions is empty array', () => {
-      const result = getPaymentOptions(undefined, []);
-      expect(result).toBeUndefined();
-    });
-  });
-
-  describe('when both parameters are provided as DefaultOption arrays', () => {
-    it('should return ticketOptionsFieldOptions when paymentPeriodFieldOptions is not a string array', () => {
-      const ticketOptions: DefaultOption[] = [
-        createDefaultOption('value1', 'Label 1'),
-        createDefaultOption('value2', 'Label 2'),
-      ];
-      const paymentOptions: DefaultOption[] = [createDefaultOption('value3', 'Label 3')];
-
-      const result = getPaymentOptions(paymentOptions, ticketOptions);
-      expect(result).toBe(ticketOptions);
-    });
-  });
-
-  describe('when paymentPeriodFieldOptions is a string[] and ticketOptionsFieldOptions is a DefaultOption[]', () => {
-    const ticketOptions: DefaultOption[] = [
-      createDefaultOption('value1', 'Label 1'),
-      createDefaultOption('value2', 'Label 2'),
-      createDefaultOption('value3', 'Label 3'),
-    ];
-
-    it('should return ticketOptionsFieldOptions when paymentPeriodFieldOptions is empty', () => {
-      const result = getPaymentOptions([], ticketOptions);
-      expect(result).toBe(ticketOptions);
-    });
-
-    it('should return paymentPeriodFieldOptions when ticketOptionsFieldOptions is empty', () => {
-      const result = getPaymentOptions(['value1'], []);
-      expect(result).toEqual(['value1']);
-    });
-
-    it('should mark matching options with priority and pattern flags when pattern string contains values', () => {
-      // patternValue is the first element of paymentPeriodFieldOptions
-      // 'value1' includes 'value1' but not 'value2' or 'value3'
-      const paymentOptions = ['value1'];
-      const result = getPaymentOptions(paymentOptions, ticketOptions) as DefaultOption[];
-
-      expect(result).toHaveLength(3);
-      expect(result[0]).toEqual({
-        ...ticketOptions[0],
-        priority: true,
-        pattern: true,
-      });
-      expect(result[1]).toEqual({
-        ...ticketOptions[1],
-        pattern: false,
-      });
-      expect(result[2]).toEqual({
-        ...ticketOptions[2],
-        pattern: false,
-      });
-    });
-
-    it('should mark all options as pattern false when no values match', () => {
-      const paymentOptions = ['nonExistentValue'];
-      const result = getPaymentOptions(paymentOptions, ticketOptions) as DefaultOption[];
-
-      expect(result).toHaveLength(3);
-      expect(result[0]).toEqual({
-        ...ticketOptions[0],
-        pattern: false,
-      });
-      expect(result[1]).toEqual({
-        ...ticketOptions[1],
-        pattern: false,
-      });
-      expect(result[2]).toEqual({
-        ...ticketOptions[2],
-        pattern: false,
-      });
-    });
-
-    it('should handle numeric values in DefaultOption', () => {
-      const numericTicketOptions: DefaultOption[] = [
-        createDefaultOption(1, 'Label 1'),
-        createDefaultOption(2, 'Label 2'),
-      ];
-      const paymentOptions = ['1'];
-
-      const result = getPaymentOptions(paymentOptions, numericTicketOptions) as DefaultOption[];
-
-      expect(result).toHaveLength(2);
-      expect(result[0]).toEqual({
-        ...numericTicketOptions[0],
-        priority: true,
-        pattern: true,
-      });
-      expect(result[1]).toEqual({
-        ...numericTicketOptions[1],
-        pattern: false,
-      });
-    });
-
-    it('should handle string values in DefaultOption', () => {
-      const stringTicketOptions: DefaultOption[] = [
-        createDefaultOption('str1', 'String 1'),
-        createDefaultOption('str2', 'String 2'),
-      ];
-      const paymentOptions = ['str1'];
-
-      const result = getPaymentOptions(paymentOptions, stringTicketOptions) as DefaultOption[];
-
-      expect(result).toHaveLength(2);
-      expect(result[0]).toEqual({
-        ...stringTicketOptions[0],
-        priority: true,
-        pattern: true,
-      });
-      expect(result[1]).toEqual({
-        ...stringTicketOptions[1],
-        pattern: false,
-      });
-    });
-
-    it('should use first element of paymentPeriodFieldOptions as pattern values', () => {
-      // First element is 'value1' - only value1 matches
-      const paymentOptions = ['value1'];
-      const result = getPaymentOptions(paymentOptions, ticketOptions) as DefaultOption[];
-
-      expect(result).toHaveLength(3);
-      expect(result[0]).toEqual({
-        ...ticketOptions[0],
-        priority: true,
-        pattern: true,
-      });
-      expect(result[1]).toEqual({
-        ...ticketOptions[1],
-        pattern: false,
-      });
-      expect(result[2]).toEqual({
-        ...ticketOptions[2],
-        pattern: false,
-      });
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should handle single element in ticketOptionsFieldOptions that matches', () => {
-      const ticketOptions: DefaultOption[] = [createDefaultOption('match', 'Match')];
-      const paymentOptions = ['match'];
-
-      const result = getPaymentOptions(paymentOptions, ticketOptions) as DefaultOption[];
-
-      expect(result).toHaveLength(1);
-      expect(result[0]).toEqual({
-        ...ticketOptions[0],
-        priority: true,
-        pattern: true,
-      });
-    });
-
-    it('should handle single element in ticketOptionsFieldOptions that does not match', () => {
-      const ticketOptions: DefaultOption[] = [createDefaultOption('noMatch', 'No Match')];
-      const paymentOptions = ['match'];
-
-      const result = getPaymentOptions(paymentOptions, ticketOptions) as DefaultOption[];
-
-      expect(result).toHaveLength(1);
-      expect(result[0]).toEqual({
-        ...ticketOptions[0],
-        pattern: false,
-      });
-    });
-
-    it('should preserve original DefaultOption properties', () => {
-      const ticketOptions: DefaultOption[] = [
-        {
-          value: 'value1',
-          label: 'Label 1',
-          priority: false,
-          pattern: false,
-          disabled: true,
-        },
-      ];
-      const paymentOptions = ['value1'];
-
-      const result = getPaymentOptions(paymentOptions, ticketOptions) as DefaultOption[];
-
-      expect(result[0]).toEqual({
-        value: 'value1',
-        label: 'Label 1',
-        priority: true,
-        pattern: true,
-        disabled: true,
-      });
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getRequiredFields.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getRequiredFields.test.ts
deleted file mode 100644
index 8f5c6b41b..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getRequiredFields.test.ts
+++ /dev/null
@@ -1,469 +0,0 @@
-import { RateType } from '@widgets/OrdersJournal/components/TicketForm/types';
-import { UseFieldsControlProps } from '@widgets/OrdersJournal/components/TicketModal/types';
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import {
-  getRequiredBuyer,
-  getRequiredClientCode,
-  getRequiredFixedAddNoStandartPeriod1,
-  getRequiredFixRate2,
-  getRequiredFixRate,
-  getRequiredFloatingAddNoStandartPeriod1,
-  getRequiredFloatingAddShiftFix1,
-  getRequiredFloatingAddShiftFix2,
-  getRequiredIndex2,
-  getRequiredIndex,
-  getRequiredTerm,
-} from '../getRequiredFields';
-
-describe('getRequiredFields', () => {
-  describe('getRequiredTerm', () => {
-    it('should return "term" when noPatternOrder is undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {},
-      };
-      expect(getRequiredTerm(props)).toBe('term');
-    });
-
-    it('should return "term" when noPatternOrder is false', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: { noPatternOrder: false },
-      };
-      expect(getRequiredTerm(props)).toBe('term');
-    });
-
-    it('should return undefined when noPatternOrder is true', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: { noPatternOrder: true },
-      };
-      expect(getRequiredTerm(props)).toBeUndefined();
-    });
-
-    it('should return undefined when form is undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {};
-      expect(getRequiredTerm(props)).toBe('term');
-    });
-  });
-
-  describe('getRequiredBuyer', () => {
-    it('should return "buyer" when config.name is "DRAFT"', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        config: { name: 'DRAFT' } as UseFieldsControlProps['config'],
-      };
-      expect(getRequiredBuyer(props)).toBe('buyer');
-    });
-
-    it('should return undefined when config.name is "ORDER"', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        config: { name: 'ORDER' } as UseFieldsControlProps['config'],
-      };
-      expect(getRequiredBuyer(props)).toBeUndefined();
-    });
-
-    it('should return undefined when config is undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {};
-      expect(getRequiredBuyer(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredFloatingAddShiftFix1', () => {
-    it('should return "floatingAddShiftFix1" when all conditions are met', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix1(props)).toBe('floatingAddShiftFix1');
-    });
-
-    it('should return "floatingAddShiftFix1" for IRS_OIS product with float rate', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix1(props)).toBe('floatingAddShiftFix1');
-    });
-
-    it('should return undefined when noPatternOrder is false', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: false,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix1(props)).toBeUndefined();
-    });
-
-    it('should return undefined when dealType is not XCCY or IRS_OIS', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.FX_SWAP,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix1(props)).toBeUndefined();
-    });
-
-    it('should return undefined when rateType is FIXED', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix1(props)).toBeUndefined();
-    });
-
-    it('should return undefined when form is undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {};
-      expect(getRequiredFloatingAddShiftFix1(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredFloatingAddShiftFix2', () => {
-    it('should return "floatingAddShiftFix2" when all conditions are met', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType2: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix2(props)).toBe('floatingAddShiftFix2');
-    });
-
-    it('should return "floatingAddShiftFix2" for IRS_OIS product with float rate2', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.IRS_OIS,
-          rateType2: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix2(props)).toBe('floatingAddShiftFix2');
-    });
-
-    it('should return undefined when noPatternOrder is false', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: false,
-          dealType: TicketProduct.XCCY,
-          rateType2: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix2(props)).toBeUndefined();
-    });
-
-    it('should return undefined when rateType2 is FIXED', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType2: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFloatingAddShiftFix2(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredFixedAddNoStandartPeriod1', () => {
-    it('should return "fixedAddNoStandartPeriod1" when all conditions are met', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixedAddNoStandartPeriod1(props)).toBe('fixedAddNoStandartPeriod1');
-    });
-
-    it('should return "fixedAddNoStandartPeriod1" for IRS_OIS product with fixed rate', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixedAddNoStandartPeriod1(props)).toBe('fixedAddNoStandartPeriod1');
-    });
-
-    it('should return undefined when noPatternOrder is false', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: false,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixedAddNoStandartPeriod1(props)).toBeUndefined();
-    });
-
-    it('should return undefined when rateType is FLOAT', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFixedAddNoStandartPeriod1(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredFloatingAddNoStandartPeriod1', () => {
-    it('should return "floatingAddNoStandartPeriod1" when all conditions are met', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddNoStandartPeriod1(props)).toBe('floatingAddNoStandartPeriod1');
-    });
-
-    it('should return "floatingAddNoStandartPeriod1" for IRS_OIS product with float rate', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddNoStandartPeriod1(props)).toBe('floatingAddNoStandartPeriod1');
-    });
-
-    it('should return undefined when noPatternOrder is false', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: false,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFloatingAddNoStandartPeriod1(props)).toBeUndefined();
-    });
-
-    it('should return undefined when rateType is FIXED', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          noPatternOrder: true,
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFloatingAddNoStandartPeriod1(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredIndex', () => {
-    it('should return "index" for XCCY product with float rate', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredIndex(props)).toBe('index');
-    });
-
-    it('should return "index" for IRS_OIS product with float rate', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredIndex(props)).toBe('index');
-    });
-
-    it('should return undefined for FX_SWAP product', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.FX_SWAP,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredIndex(props)).toBeUndefined();
-    });
-
-    it('should return undefined when rateType is FIXED', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredIndex(props)).toBeUndefined();
-    });
-
-    it('should return undefined when form is undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {};
-      expect(getRequiredIndex(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredIndex2', () => {
-    it('should return "index2" for XCCY product with float rate2', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType2: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredIndex2(props)).toBe('index2');
-    });
-
-    it('should return "index2" for IRS_OIS product with float rate2', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          rateType2: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredIndex2(props)).toBe('index2');
-    });
-
-    it('should return undefined when rateType2 is FIXED', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType2: RateType.FIXED,
-        },
-      };
-      expect(getRequiredIndex2(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredFixRate', () => {
-    it('should return "fixRate" for XCCY product with fixed rate', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixRate(props)).toBe('fixRate');
-    });
-
-    it('should return "fixRate" for IRS_OIS product with fixed rate', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixRate(props)).toBe('fixRate');
-    });
-
-    it('should return undefined for FX_SWAP product', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.FX_SWAP,
-          rateType: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixRate(props)).toBeUndefined();
-    });
-
-    it('should return undefined when rateType is FLOAT', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFixRate(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredFixRate2', () => {
-    it('should return "fixRate2" for XCCY product with fixed rate2', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType2: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixRate2(props)).toBe('fixRate2');
-    });
-
-    it('should return "fixRate2" for IRS_OIS product with fixed rate2', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          rateType2: RateType.FIXED,
-        },
-      };
-      expect(getRequiredFixRate2(props)).toBe('fixRate2');
-    });
-
-    it('should return undefined when rateType2 is FLOAT', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {
-          dealType: TicketProduct.XCCY,
-          rateType2: RateType.FLOAT,
-        },
-      };
-      expect(getRequiredFixRate2(props)).toBeUndefined();
-    });
-  });
-
-  describe('getRequiredClientCode', () => {
-    it('should return "clientCode" when account exists and clientCode options have items', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: { account: 'account1' },
-        options: { clientCode: ['code1', 'code2'] } as UseFieldsControlProps['options'],
-      };
-      expect(getRequiredClientCode(props)).toBe('clientCode');
-    });
-
-    it('should return undefined when account is not set', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: {},
-        options: { clientCode: ['code1', 'code2'] } as UseFieldsControlProps['options'],
-      };
-      expect(getRequiredClientCode(props)).toBeUndefined();
-    });
-
-    it('should return undefined when clientCode options are empty', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: { account: 'account1' },
-        options: { clientCode: [] } as UseFieldsControlProps['options'],
-      };
-      expect(getRequiredClientCode(props)).toBeUndefined();
-    });
-
-    it('should return undefined when clientCode options are undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: { account: 'account1' },
-        options: {} as UseFieldsControlProps['options'],
-      };
-      expect(getRequiredClientCode(props)).toBeUndefined();
-    });
-
-    it('should return undefined when options is undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        form: { account: 'account1' },
-      };
-      expect(getRequiredClientCode(props)).toBeUndefined();
-    });
-
-    it('should return undefined when form is undefined', () => {
-      const props: Partial<UseFieldsControlProps> = {
-        options: { clientCode: ['code1'] } as UseFieldsControlProps['options'],
-      };
-      expect(getRequiredClientCode(props)).toBeUndefined();
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getStartInPast.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getStartInPast.test.ts
index 4bcd98c0c..c398701b7 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getStartInPast.test.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getStartInPast.test.ts
@@ -4,20 +4,18 @@ import { DealXCCYDirection, TicketProduct } from 'types/SapfirSpfi';
 
 import { getStartInPast } from '../getStartInPast';
 
-const requiredFilds: TicketFormInputs = {
+const requiredFilds = {
   dealType: TicketProduct.XCCY,
   direction: DealXCCYDirection.Buy,
   tradingMode: TradingMode.Public,
-  noPatternOrder: true,
 };
 
 describe('getStartInPast', () => {
-  it('should return fields without dateBeginning when startInPast flags are false', () => {
+  it('should return empty object when pattern is PATTERN', () => {
     const data: TicketFormInputs = {
       ...requiredFilds,
-      noPatternOrder: false,
-      startInPast1: false,
-      startInPast2: false,
+      startInPast1: false, // Для шаблонного ордера может быть только false
+      startInPast2: false, // Для шаблонного ордера может быть только false
       dateBeginningPast1: '2023-01-01',
       dateBeginningPast2: '2023-01-02',
       fixedAddNoStandartPeriod1: 'period1',
@@ -32,20 +30,9 @@ describe('getStartInPast', () => {
       floatingAddShiftFix2: 'shift2',
     };
 
-    const result = getStartInPast(data);
+    const result = getStartInPast(data, 'PATTERN');
 
-    expect(result).toEqual({
-      fixedAddNoStandartPeriod1: 'period1',
-      fixedAddNoStandartPeriod2: 'period2',
-      floatingAddNoStandartPeriod1: 'float1',
-      floatingAddNoStandartPeriod2: 'float2',
-      floatingAddOffset1: 'offset1',
-      floatingAddOffset2: 'offset2',
-      floatingAddLenghtOffset1: 'length1',
-      floatingAddLenghtOffset2: 'length2',
-      floatingAddShiftFix1: 'shift1',
-      floatingAddShiftFix2: 'shift2',
-    });
+    expect(result).toEqual({});
   });
 
   it('should return only startInPast1 fields when pattern is NOPATTERN and startInPast1 is true', () => {
@@ -66,7 +53,7 @@ describe('getStartInPast', () => {
       floatingAddShiftFix2: undefined,
     };
 
-    const result = getStartInPast(data);
+    const result = getStartInPast(data, 'NOPATTERN');
 
     expect(result).toEqual({
       dateBeginningPast1: '2023-01-01',
@@ -101,7 +88,7 @@ describe('getStartInPast', () => {
       floatingAddShiftFix2: 'shift2',
     };
 
-    const result = getStartInPast(data);
+    const result = getStartInPast(data, 'NOPATTERN');
 
     expect(result).toEqual({
       fixedAddNoStandartPeriod1: undefined,
@@ -137,7 +124,7 @@ describe('getStartInPast', () => {
       floatingAddShiftFix2: 'shift2',
     };
 
-    const result = getStartInPast(data);
+    const result = getStartInPast(data, 'NOPATTERN');
 
     expect(result).toEqual({
       dateBeginningPast1: '2023-01-01',
@@ -162,7 +149,7 @@ describe('getStartInPast', () => {
       startInPast2: true,
     };
 
-    const result = getStartInPast(data);
+    const result = getStartInPast(data, 'NOPATTERN');
 
     expect(result).toEqual({
       dateBeginningPast1: undefined,
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getTicketOptionsFetchParams.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getTicketOptionsFetchParams.test.ts
deleted file mode 100644
index f5e5b76ba..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getTicketOptionsFetchParams.test.ts
+++ /dev/null
@@ -1,395 +0,0 @@
-import { CUSTOM_TERM_PATTERN } from '@widgets/OrdersJournal/components/TicketForm/const';
-import { RateType } from '@widgets/OrdersJournal/components/TicketForm/types';
-import { OrdersJournalPluginConfig } from '@widgets/OrdersJournal/components/TicketModal/types';
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { getTicketOptionsFetchParams } from '../getTicketOptionsFetchParams';
-
-describe('getTicketOptionsFetchParams', () => {
-  const createMockConfig = (name: 'ORDER' | 'DRAFT'): OrdersJournalPluginConfig =>
-    ({
-      name,
-      ticketOptionsEndpoint: jest.fn(),
-      getCounterpartyOptions: jest.fn(),
-      accountsOptionsEndpoint: jest.fn(),
-      orderEndpoint: jest.fn(),
-    }) as unknown as OrdersJournalPluginConfig;
-
-  describe('базовое поведение', () => {
-    it('должен возвращать пустой объект если форма пустая', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {},
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result).toEqual({ pattern: 'NOPATTERN' });
-    });
-  });
-
-  describe('параметр pattern', () => {
-    it('должен устанавливать pattern в NOPATTERN для ORDER конфига', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {},
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.pattern).toBe('NOPATTERN');
-    });
-
-    it('не должен устанавливать pattern для DRAFT конфига', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {},
-        config: createMockConfig('DRAFT'),
-      });
-
-      expect(result.pattern).toBeUndefined();
-    });
-  });
-
-  describe('параметр product', () => {
-    it('должен устанавливать product из dealType', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.product).toBe(TicketProduct.IRS_OIS);
-    });
-
-    it('не должен устанавливать product если dealType отсутствует', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {},
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.product).toBeUndefined();
-    });
-  });
-
-  describe('параметр term', () => {
-    it('должен устанавливать term если form.term не содержит CUSTOM_TERM_PATTERN', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { term: '1M' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.term).toBe('1M');
-    });
-
-    it('не должен устанавливать term если form.term содержит CUSTOM_TERM_PATTERN', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { term: `5${CUSTOM_TERM_PATTERN}` },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.term).toBeUndefined();
-    });
-
-    it('должен устанавливать term если noPatternOrder отсутствует', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { term: '3M', noPatternOrder: null },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.term).toBe('3M');
-    });
-
-    it('должен устанавливать term даже если noPatternOrder равен true', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { term: '3M', noPatternOrder: true },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.term).toBe('3M');
-    });
-  });
-
-  describe('параметр currency', () => {
-    it('должен устанавливать currency для IRS_OIS продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS, currency: 'RUB' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.currency).toBe('RUB');
-    });
-
-    it('не должен устанавливать currency для FX_SWAP продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.FX_SWAP, currency: 'RUB' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.currency).toBeUndefined();
-    });
-
-    it('не должен устанавливать currency для XCCY продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.XCCY, currency: 'RUB' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.currency).toBeUndefined();
-    });
-  });
-
-  describe('параметр currencyPair', () => {
-    it('должен устанавливать currencyPair для FX_SWAP продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.FX_SWAP, currencyPairs: 'USD_RUB' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.currencyPair).toBe('USD_RUB');
-    });
-
-    it('должен устанавливать currencyPair для XCCY продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.XCCY, currencyPairs: 'EUR_USD' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.currencyPair).toBe('EUR_USD');
-    });
-
-    it('не должен устанавливать currencyPair для IRS_OIS продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS, currencyPairs: 'USD_RUB' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.currencyPair).toBeUndefined();
-    });
-  });
-
-  describe('параметр index', () => {
-    it('должен устанавливать index из form.index если rateType равен FLOAT и не FX_SWAP', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS, index: 'MOEX', rateType: RateType.FLOAT },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.index).toBe('MOEX');
-    });
-
-    it('должен устанавливать index в RateType.FIXED если rateType равен FIXED и не FX_SWAP', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS, rateType: RateType.FIXED },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.index).toBe(RateType.FIXED);
-    });
-
-    it('не должен устанавливать index для FX_SWAP продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.FX_SWAP, index: 'MOEX', noPatternOrder: true },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.index).toBeUndefined();
-    });
-
-    it('не должен устанавливать index если noPatternOrder отсутствует и rateType не FIXED', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS, index: 'MOEX' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.index).toBeUndefined();
-    });
-  });
-
-  describe('параметр index2', () => {
-    it('должен устанавливать index2 из form.index2 если не FX_SWAP', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS, rateType2: RateType.FLOAT, index2: 'MOEX' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.index2).toBe('MOEX');
-    });
-
-    it('должен устанавливать index2 в RateType.FIXED если rateType2 равен FIXED и не FX_SWAP', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.IRS_OIS, rateType2: RateType.FIXED },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.index2).toBe(RateType.FIXED);
-    });
-
-    it('не должен устанавливать index2 для FX_SWAP продукта', () => {
-      const result = getTicketOptionsFetchParams({
-        form: { dealType: TicketProduct.FX_SWAP, index2: 'MOEX' },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.index2).toBeUndefined();
-    });
-  });
-
-  describe('комбинированные сценарии', () => {
-    it('должен корректно формировать параметры для IRS_OIS с фиксированной ставкой', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          term: '1Y',
-          currency: 'RUB',
-          rateType: RateType.FIXED,
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result).toEqual({
-        product: TicketProduct.IRS_OIS,
-        term: '1Y',
-        pattern: 'NOPATTERN',
-        currency: 'RUB',
-        index: RateType.FIXED,
-      });
-    });
-
-    it('должен корректно формировать параметры для IRS_OIS с плавающей ставкой', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          term: '6M',
-          currency: 'USD',
-          rateType: RateType.FLOAT,
-          index: 'MOEX',
-          noPatternOrder: true,
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result).toEqual({
-        product: TicketProduct.IRS_OIS,
-        term: '6M',
-        pattern: 'NOPATTERN',
-        currency: 'USD',
-        index: 'MOEX',
-      });
-    });
-
-    it('должен корректно формировать параметры для FX_SWAP', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.FX_SWAP,
-          term: '1W',
-          currencyPairs: 'USD_RUB',
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result).toEqual({
-        product: TicketProduct.FX_SWAP,
-        term: '1W',
-        pattern: 'NOPATTERN',
-        currencyPair: 'USD_RUB',
-      });
-    });
-
-    it('должен корректно формировать параметры для XCCY', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.XCCY,
-          term: '3M',
-          currencyPairs: 'EUR_USD',
-          rateType: RateType.FIXED,
-          rateType2: RateType.FIXED,
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result).toEqual({
-        product: TicketProduct.XCCY,
-        term: '3M',
-        pattern: 'NOPATTERN',
-        currencyPair: 'EUR_USD',
-        index: RateType.FIXED,
-        index2: RateType.FIXED,
-      });
-    });
-
-    it('должен корректно формировать параметры для ордера с плавающей ставкой', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          term: '2Y',
-          currency: 'RUB',
-          rateType: RateType.FLOAT,
-          index: 'MOEX',
-          index2: 'MOEX',
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result).toEqual({
-        product: TicketProduct.IRS_OIS,
-        term: '2Y',
-        pattern: 'NOPATTERN',
-        currency: 'RUB',
-        index: 'MOEX',
-      });
-    });
-
-    it('должен корректно формировать параметры для DRAFT конфига', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          term: '1Y',
-          currency: 'RUB',
-          rateType: RateType.FIXED,
-        },
-        config: createMockConfig('DRAFT'),
-      });
-
-      expect(result).toEqual({
-        product: TicketProduct.IRS_OIS,
-        term: '1Y',
-        currency: 'RUB',
-        index: RateType.FIXED,
-      });
-    });
-  });
-
-  describe('edge cases', () => {
-    it('должен обрабатывать term с CUSTOM_TERM_PATTERN и noPatternOrder', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          term: '5D',
-          noPatternOrder: true,
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.term).toBeUndefined();
-    });
-
-    it('должен обрабатывать пустую строку как term', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          term: '',
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.term).toBeUndefined();
-    });
-
-    it('должен обрабатывать term равный CUSTOM_TERM_PATTERN', () => {
-      const result = getTicketOptionsFetchParams({
-        form: {
-          dealType: TicketProduct.IRS_OIS,
-          term: 'D',
-        },
-        config: createMockConfig('ORDER'),
-      });
-
-      expect(result.term).toBeUndefined();
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getTicketProps.test.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getTicketProps.test.ts
deleted file mode 100644
index 7c65b0e93..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/__tests__/getTicketProps.test.ts
+++ /dev/null
@@ -1,158 +0,0 @@
-import { DealIRSOISDirection, TicketProduct, TicketType } from 'types/SapfirSpfi';
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { TICKET_PROPS_BY_TYPE } from '../../const';
-
-import { getTicketProps } from '../getTicketProps';
-
-describe('getTicketProps', () => {
-  describe('when ticketType is not OpenDraft', () => {
-    it('should return Create props for TicketType.Create', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.Create, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.Create]);
-      expect(result.submitText).toBe('Разместить ордер');
-      expect(result.cancelText).toBe('Отмена');
-    });
-
-    it('should return Accept props for TicketType.Accept', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.Accept, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.Accept]);
-      expect(result.submitText).toBe('Принять');
-      expect(result.cancelText).toBeUndefined();
-    });
-
-    it('should return Cancel props for TicketType.Cancel', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.Cancel, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.Cancel]);
-      expect(result.submitText).toBe('Снять ордер');
-      expect(result.cancelText).toBe('Отмена');
-      expect(result.submitBtnProps).toEqual({ variant: 'filled-red' });
-    });
-
-    it('should return CreateDepth props for TicketType.CreateDepth', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.CreateDepth, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.CreateDepth]);
-      expect(result.submitText).toBe('Разместить ордер');
-      expect(result.cancelText).toBe('Отмена');
-    });
-
-    it('should return CreateDepthEqual props for TicketType.CreateDepthEqual', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.CreateDepthEqual, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.CreateDepthEqual]);
-      expect(result.submitText).toBe('Разместить ордер');
-      expect(result.cancelText).toBe('Отмена');
-    });
-
-    it('should return CreateDraft props for TicketType.CreateDraft', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.CreateDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.CreateDraft]);
-      expect(result.submitText).toBe('Отправить на согласование');
-      expect(result.cancelText).toBe('Отмена');
-    });
-
-    it('should return CreateFromDraft props for TicketType.CreateFromDraft', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.CreateFromDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.CreateFromDraft]);
-      expect(result.submitText).toBe('Разместить ордер');
-      expect(result.additionalText).toBe('Вернуть брокеру');
-      expect(result.cancelText).toBe('Отмена');
-    });
-  });
-
-  describe('when ticketType is OpenDraft', () => {
-    it('should return OpenDraft props with default submitText when status is not REVIEW', () => {
-      const form = { status: SpfiDraftStatus.APPROVE };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.OpenDraft]);
-      expect(result.cancelText).toBe('Отмена');
-      expect(result.submitText).toBeUndefined();
-    });
-
-    it('should return OpenDraft props with default submitText when status is EXECUTE', () => {
-      const form = { status: SpfiDraftStatus.EXECUTE };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.OpenDraft]);
-      expect(result.submitText).toBeUndefined();
-    });
-
-    it('should return OpenDraft props with default submitText when status is REMOVED', () => {
-      const form = { status: SpfiDraftStatus.REMOVED };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.OpenDraft]);
-      expect(result.submitText).toBeUndefined();
-    });
-
-    it('should return OpenDraft props with default submitText when status is COMPLETED', () => {
-      const form = { status: SpfiDraftStatus.COMPLETED };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.OpenDraft]);
-      expect(result.submitText).toBeUndefined();
-    });
-
-    it('should return OpenDraft props with CreateDraft submitText when status is REVIEW', () => {
-      const form = { status: SpfiDraftStatus.REVIEW };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result.cancelText).toBe('Отмена');
-      expect(result.submitText).toBe(TICKET_PROPS_BY_TYPE[TicketType.CreateDraft].submitText);
-      expect(result.submitText).toBe('Отправить на согласование');
-    });
-
-    it(`should return OpenDraft props with CreateDraft submitText when status is REVIEW
-       and form has additional fields`, () => {
-      const form = {
-        status: SpfiDraftStatus.REVIEW,
-        dealType: TicketProduct.IRS_OIS,
-        direction: DealIRSOISDirection.Buy,
-      };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result.cancelText).toBe('Отмена');
-      expect(result.submitText).toBe('Отправить на согласование');
-    });
-  });
-
-  describe('when form is empty or undefined', () => {
-    it('should return OpenDraft props with default submitText when form is empty object', () => {
-      const form = {};
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.OpenDraft]);
-      expect(result.submitText).toBeUndefined();
-    });
-
-    it('should return OpenDraft props with default submitText when form has undefined status', () => {
-      const form = { status: undefined };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.OpenDraft]);
-      expect(result.submitText).toBeUndefined();
-    });
-
-    it('should return OpenDraft props with default submitText when form has null status', () => {
-      const form = { status: null };
-      const result = getTicketProps(TicketType.OpenDraft, form);
-
-      expect(result).toEqual(TICKET_PROPS_BY_TYPE[TicketType.OpenDraft]);
-      expect(result.submitText).toBeUndefined();
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/convertFormToRequestData.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/convertFormToRequestData.ts
index 1f019f022..4562161fb 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/convertFormToRequestData.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/convertFormToRequestData.ts
@@ -1,5 +1,6 @@
-import { isStringOptionTypeArray } from '@widgets/OrdersJournal/utils/typeGuards';
+import { getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
 
+import { isStringOptionTypeArray } from '@widgets/OrdersJournal/utils/typeGuards';
 import { TicketProduct } from 'types/SapfirSpfi';
 
 import { RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP } from '../../TicketForm/const';
@@ -7,21 +8,17 @@ import { RATE_DECIMAL_SCALE_BY_CURRENCY_PAIRS_MAP } from '../../TicketForm/const
 import { RateType, SelectOptions, TicketFormInputs } from '../../TicketForm/types';
 import { getActualRequiredFields } from '../../TicketForm/utils/getActualRequiredFields';
 import { REQUIRED_FIELDS } from '../const';
-import { CreateNoPatternTicketRequestData, CreateTicketRequestData } from '../types';
+import { CreateNoPatternTicketRequestData, CreateTicketRequestData, GetTicketOptionsParams } from '../types';
 
 import { checkFormInputs } from './checkFormInputs';
 import { convertPremiumData } from './convertPremiumData';
 import { getAdditionalConventions } from './getAdditionalConventions';
-import { getOption } from './getHasTermOption';
-import { getIsBasisXCCYProduct } from './getIsBasisXCCYProduct';
-import { getIsIrsOisProduct } from './getIsIrsOisProduct';
-import { getIsXCCYProduct } from './getIsXCCYProduct';
 import { getStartInPast } from './getStartInPast';
 
 const getTerm = (data: TicketFormInputs, options: SelectOptions): string => {
   const defaultTerm = data.term ?? '';
   if (isStringOptionTypeArray(options.term)) {
-    const hasTermOption = !!getOption(options.term, data.term);
+    const hasTermOption = options.term.some((termItem) => termItem === data.term);
     return hasTermOption ? defaultTerm : '';
   }
   return defaultTerm;
@@ -29,6 +26,7 @@ const getTerm = (data: TicketFormInputs, options: SelectOptions): string => {
 
 export const convertFormToRequestData = (
   data: TicketFormInputs,
+  pattern: GetTicketOptionsParams['pattern'],
   options: SelectOptions,
 ): CreateTicketRequestData | CreateNoPatternTicketRequestData | null => {
   if (!checkFormInputs(data, getActualRequiredFields(data, REQUIRED_FIELDS[data.dealType]))) {
@@ -40,9 +38,8 @@ export const convertFormToRequestData = (
 
   const premiumData = convertPremiumData(data);
   const term = getTerm(data, options);
-  const currencyPair = data.currencyPairs;
 
-  if (getIsIrsOisProduct(data)) {
+  if (data.dealType === TicketProduct.IRS_OIS) {
     const patternData = {
       product: data.dealType,
       index: RateType.FIXED,
@@ -66,7 +63,9 @@ export const convertFormToRequestData = (
       ...premiumData,
       ...getAdditionalConventions(data),
     };
-
+    if (getIsPatternOrder(pattern)) {
+      return patternData;
+    }
     return {
       ...patternData,
       buyer: data.buyer,
@@ -76,7 +75,7 @@ export const convertFormToRequestData = (
       dayFraction1: data.fixedConvention,
       dayFraction2: data.floatingConvention,
 
-      ...getStartInPast(data),
+      ...getStartInPast(data, pattern),
     };
   }
   if (data.dealType === TicketProduct.FX_SWAP) {
@@ -85,7 +84,7 @@ export const convertFormToRequestData = (
 
     const patternData = {
       product: data.dealType,
-      currencyPair,
+      currencyPair: data.currencyPairs,
       effectiveDate: data.effectiveDate,
       terminationDate: data.terminationDate,
       direction: data.direction,
@@ -107,14 +106,16 @@ export const convertFormToRequestData = (
       swapPoints: data.swapPoints,
       ...premiumData,
     };
-
+    if (getIsPatternOrder(pattern)) {
+      return patternData;
+    }
     return {
       ...patternData,
       buyer: data.buyer,
       seller: data.seller,
     };
   }
-  if (getIsXCCYProduct(data) || getIsBasisXCCYProduct(data)) {
+  if (data.dealType === TicketProduct.XCCY) {
     const patternData = {
       product: data.dealType,
       index2: data.index2,
@@ -132,10 +133,13 @@ export const convertFormToRequestData = (
       broker: data.broker,
       term,
       comment: data.comment,
-      currencyPair,
+      currencyPair: data.currencyPairs,
       ...premiumData,
       ...getAdditionalConventions(data),
     };
+    if (getIsPatternOrder(pattern)) {
+      return patternData;
+    }
 
     const noPatternData = {
       ...patternData,
@@ -146,12 +150,12 @@ export const convertFormToRequestData = (
       index2: data.index2 ?? RateType.FIXED,
       fixRate2: data.fixRate2,
       nearLegRate: data.nearLegRate,
-      spread: data.spread || null,
-      spread2: data.spread2 || null,
+      spread: data.spread,
+      spread2: data.spread2,
       dayFraction1: data.fixedConvention,
       dayFraction2: data.floatingConvention,
 
-      ...getStartInPast(data),
+      ...getStartInPast(data, pattern),
     };
 
     const res = Object.fromEntries(
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderDepthToTickedParams.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderDepthToTickedParams.ts
index ca187501d..b7b528f22 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderDepthToTickedParams.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderDepthToTickedParams.ts
@@ -6,7 +6,6 @@ import { OrderByOrderDepth, TicketProductType } from '@widgets/OrdersJournal/com
 import { DealXCCYDirection, TicketProduct } from 'types/SapfirSpfi';
 
 import { COEFFICIENT_SWAP } from '../../TicketForm/components/FXSwapFormFields/const';
-import { CURRENCY_PAIR_DIVIDER } from '../../TicketForm/const';
 import { DEFAULT_SWAP_POINTS, DIRECTION_MAP, TRADING_MODE_MAP } from '../const';
 
 import { toggleDirections } from './toggleDirections';
@@ -22,8 +21,7 @@ export const convertOrderDepthToTicketParams = (
   instr?: string, // todo обязательность поля
   isToggleDirection?: boolean,
 ): OrderToTicketParamsType => {
-  const currencyPairs =
-    order.currency1 && order.currency2 ? `${order.currency1}${CURRENCY_PAIR_DIVIDER}${order.currency2}` : '';
+  const currencyPairs = order.currency1 && order.currency2 ? `${order.currency1}/${order.currency2}` : '';
   const swapPoints = (order.farLegRate - order.nearLegRate) * COEFFICIENT_SWAP || DEFAULT_SWAP_POINTS;
   const farLegRate = (order.nearLegRate * swapPoints) / COEFFICIENT_SWAP;
 
@@ -72,7 +70,6 @@ export const convertOrderDepthToTicketParams = (
       };
       break;
     case TicketProductType.XCCY:
-    case TicketProductType.BASIS_XCCY:
       defaultValues = {
         ...order,
         dealType: TicketProduct.XCCY,
@@ -93,9 +90,7 @@ export const convertOrderDepthToTicketParams = (
     forcedOptions: omitBy(
       {
         currencyPairs:
-          order.currency1 && order.currency2
-            ? [{ label: `${order.currency1}/${order.currency2}`, value: currencyPairs }]
-            : undefined,
+          order.currency1 && order.currency2 ? [{ label: currencyPairs, value: currencyPairs }] : undefined,
       },
       isNil,
     ),
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderToTicketParams.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderToTicketParams.ts
index d30e789ce..a1388a90a 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderToTicketParams.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/convertOrderToTicketParams.ts
@@ -11,8 +11,6 @@ import { getIsDraft } from '@widgets/OrdersJournal/components/TicketModal/utils/
 import { CustomerDataType } from 'types/Customers';
 import { TicketProduct, TicketType } from 'types/SapfirSpfi';
 
-import { CURRENCY_PAIR_DIVIDER } from '../../TicketForm/const';
-
 import { getBrokerName } from './getBrokerName';
 import { getCounterparty } from './getCounterparty';
 import { getDefaultIndex } from './getDefaultIndex';
@@ -44,7 +42,6 @@ export const convertOrderToTicketParams = (
   const tradingMode = getTradingMode(order);
   const index = getDefaultIndex({ rateType: order.index as RateType, defaultIndex: order.index });
   const index2 = getDefaultIndex({ rateType: order.index2 as RateType, defaultIndex: order.index2 });
-  const currencyPairs = order.currencyPair?.split('/').join(CURRENCY_PAIR_DIVIDER);
 
   let defaultValues: TicketFormInputs = {
     dealType: TicketProduct.IRS_OIS,
@@ -55,7 +52,7 @@ export const convertOrderToTicketParams = (
   const amount2 = amount1 * order.nearLegRate;
   const farLegAmount1 = order.balance ?? order.farLegAmount1;
   const broker = getBrokerName(order);
-  const noPatternOrder = null;
+  const noPatternOrder = true;
   const premiumDate = getIsCreate(ticketType)
     ? dayjs().format(commonDateFormat.backendDateFormat)
     : order.brokerDatePayment;
@@ -125,7 +122,7 @@ export const convertOrderToTicketParams = (
         swapPoints: order.swapPoints,
         effectiveDate: order.effectiveDate,
         terminationDate: order.terminationDate,
-        currencyPairs,
+        currencyPairs: order.currencyPair,
         counterparty: cpId,
         csa: order.csa,
         comment: order.comment,
@@ -142,12 +139,11 @@ export const convertOrderToTicketParams = (
       };
       break;
     case TicketProductType.XCCY:
-    case TicketProductType.BASIS_XCCY:
       defaultValues = {
         ...order,
         amount1,
         amount2,
-        dealType: order.product === TicketProductType.XCCY ? TicketProduct.XCCY : TicketProduct.BASIS_XCCY,
+        dealType: TicketProduct.XCCY,
         direction: order.direction,
         swapPoints: order.swapPoints,
         effectiveDate: order.effectiveDate,
@@ -157,10 +153,9 @@ export const convertOrderToTicketParams = (
         spread: order.spread,
         spread2: order.spread2,
         nearLegRate: order.nearLegRate,
-        currencyPairs,
+        currencyPairs: order.currencyPair,
         account: getValueForTicketType(ticketType, order.accountId),
         clientCode: getValueForTicketType(ticketType, order.client),
-        term: order.term,
         index,
         index2,
         csa: order.csa,
@@ -210,7 +205,7 @@ export const convertOrderToTicketParams = (
     forcedOptions: omitBy(
       {
         currencyPairs:
-          order.currency && order.currency2 ? [{ label: order.currencyPair, value: currencyPairs }] : undefined,
+          order.currency && order.currency2 ? [{ label: order.currencyPair, value: order.currencyPair }] : undefined,
         buyer: preparedCustomers,
         seller: preparedCustomers,
       },
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultCounterparty.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultCounterparty.ts
deleted file mode 100644
index 2e10ab7d3..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultCounterparty.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { PUBLIC_COUNTERPARTY_SEARCH } from '../../TicketForm/const';
-import { TicketFormInputs, TradingMode } from '../../TicketForm/types';
-
-export const getDefaultCounterparty = (tradingMode: TradingMode, defaultValues?: Partial<TicketFormInputs>) =>
-  tradingMode === TradingMode.Public ? PUBLIC_COUNTERPARTY_SEARCH : defaultValues?.counterparty;
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultDisabledFields.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultDisabledFields.ts
deleted file mode 100644
index 66c232c4a..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultDisabledFields.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { TicketType } from 'types/SapfirSpfi';
-
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { TicketFormInputs } from '../../TicketForm/types';
-import { DISABLED_FIELDS, OPEN_DRAFT_DISABLED_FIELDS } from '../const';
-
-export const getDefaultDisabledFields = (ticketType: TicketType, form: Partial<TicketFormInputs>) =>
-  ticketType === TicketType.OpenDraft && form.status !== SpfiDraftStatus.REVIEW
-    ? OPEN_DRAFT_DISABLED_FIELDS
-    : DISABLED_FIELDS[ticketType];
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultIndex.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultIndex.ts
index fd5a7d795..c723f9148 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultIndex.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/getDefaultIndex.ts
@@ -1,22 +1,9 @@
-import { RateType, SelectOptions } from '../../TicketForm/types';
-import { getHasSomeOption } from '../../TicketForm/utils/getHasSomeOption';
+import { RateType } from '../../TicketForm/types';
 
 type getDefaultIndexProps = {
   rateType?: RateType;
   defaultIndexFromOptions?: string | null;
   defaultIndex?: string | null;
-  fieldOptions?: SelectOptions['index'];
-};
-export const getDefaultIndex = ({
-  rateType,
-  defaultIndexFromOptions,
-  defaultIndex,
-  fieldOptions,
-}: getDefaultIndexProps) => {
-  let hasDefaultIndexInFieldOptions = !fieldOptions;
-  if (fieldOptions && typeof fieldOptions !== 'function') {
-    hasDefaultIndexInFieldOptions = !!getHasSomeOption(defaultIndex, fieldOptions);
-  }
-  const preparedDefaultIndex = hasDefaultIndexInFieldOptions ? defaultIndex : defaultIndexFromOptions;
-  return rateType === RateType.FIXED ? null : (preparedDefaultIndex ?? null);
 };
+export const getDefaultIndex = ({ rateType, defaultIndexFromOptions, defaultIndex }: getDefaultIndexProps) =>
+  rateType === RateType.FIXED ? null : (defaultIndexFromOptions ?? defaultIndex);
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getDisabledFields.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getDisabledFields.ts
index 37fc70c58..ee6162fd2 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getDisabledFields.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/getDisabledFields.ts
@@ -1,18 +1,15 @@
-import { TicketType } from 'types/SapfirSpfi';
+import { getIsNoPatternOrder, getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
+import { TicketProduct, TicketType } from 'types/SapfirSpfi';
 
 import { PUBLIC_COUNTERPARTY_SEARCH } from '../../TicketForm/const';
 import { RateType, TicketFormInputs, TradingMode } from '../../TicketForm/types';
 import { DefaultOption, UseFieldsControlProps } from '../types';
 
-import { getIsBasisXCCYProduct } from './getIsBasisXCCYProduct';
-import { getIsFxSwapProduct } from './getIsFxSwapProduct';
-import { getIsIrsOisProduct } from './getIsIrsOisProduct';
-import { getIsXCCYProduct } from './getIsXCCYProduct';
-
 const getIsTermDisabled = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isFxSwapProduct: boolean = getIsFxSwapProduct(form);
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isFxSwapProduct: boolean = !!form?.dealType && TicketProduct.FX_SWAP === form.dealType;
+  const isXCCYProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.IRS_OIS;
 
   const isFloatRate: boolean = form?.rateType === RateType.FLOAT;
   const isFloatRate2: boolean = form?.rateType2 === RateType.FLOAT;
@@ -23,60 +20,53 @@ const getIsTermDisabled = ({ form }: Partial<UseFieldsControlProps>): keyof Tick
   return isTermDisabled ? 'term' : undefined;
 };
 
-const getHasTerm = ({ form }: Partial<UseFieldsControlProps>): boolean =>
-  form?.noPatternOrder ? !!form?.effectiveDate && !!form.terminationDate : !!form?.term;
-
 const getIsDisabledForFxSwap = ({ form }: Partial<UseFieldsControlProps>): boolean => {
-  const hasTerm: boolean = getHasTerm({ form });
-  const isFxSwapProduct: boolean = getIsFxSwapProduct(form);
+  const hasTerm: boolean = !!form?.effectiveDate && !!form.terminationDate;
+  const isFxSwapProduct: boolean = !!form?.dealType && TicketProduct.FX_SWAP === form.dealType;
   return isFxSwapProduct && !hasTerm;
 };
 
-const getIsDisabledForOtherProducts = ({ form }: Partial<UseFieldsControlProps>): boolean => {
-  const hasTerm: boolean = getHasTerm({ form });
-  const isPatternOrder = !form?.noPatternOrder;
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+const getIsDisabledForOtherProducts = ({ form, pattern }: Partial<UseFieldsControlProps>): boolean => {
+  const hasTerm: boolean = !!form?.effectiveDate && !!form.terminationDate;
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  const isXCCYProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.IRS_OIS;
   return isPatternOrder && (isXCCYProduct || isIrsOisProduct) && !hasTerm;
 };
 
-const getIsOpenDraftForEdit = (type?: TicketType) => type === TicketType.OpenDraft;
-// endregion Вспомогательные утилиты
-
-export const getDisabledProduct = ({ type }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
-  getIsOpenDraftForEdit(type) ? 'dealType' : undefined;
-
-export const getDisabledCurrency = ({ type }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
-  getIsOpenDraftForEdit(type) ? 'currency' : undefined;
-
-export const getDisabledCurrencyPair = ({
-  type,
-}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
-  getIsOpenDraftForEdit(type) ? 'currencyPairs' : undefined;
-
-export const getDisabledBuyer = ({ type }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
-  getIsOpenDraftForEdit(type) ? 'buyer' : undefined;
-
-export const getDisabledSeller = ({ type }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
-  getIsOpenDraftForEdit(type) ? 'seller' : undefined;
-
 export const getDisabledTerm = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
   getIsTermDisabled({ form }) ? 'term' : undefined;
 
 export const getDisabledEffectiveDate = ({
   form,
   options,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const hasTermOptions = options?.term?.length;
-  return !hasTermOptions || getIsTermDisabled({ form }) ? 'effectiveDate' : undefined;
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  return isPatternOrder || !options?.term?.length || getIsTermDisabled({ form }) ? 'effectiveDate' : undefined;
 };
 
 export const getDisabledTerminationDate = ({
   form,
   options,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const hasTermOptions = options?.term?.length;
-  return !hasTermOptions || getIsTermDisabled({ form }) ? 'terminationDate' : undefined;
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  return isPatternOrder || !options?.term?.length || getIsTermDisabled({ form }) ? 'terminationDate' : undefined;
+};
+
+export const getDisabledRateType = ({
+  pattern,
+}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  return isPatternOrder ? 'rateType' : undefined;
+};
+
+export const getDisabledRateType2 = ({
+  pattern,
+}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  return isPatternOrder ? 'rateType2' : undefined;
 };
 
 export const getDisabledCounterparty = ({
@@ -92,13 +82,13 @@ export const getDisabledClientCode = ({
   options?.clientCode?.length === 0 ? 'clientCode' : undefined;
 
 export const getDisabledFixRate = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isFxSwapProduct: boolean = getIsFxSwapProduct(form);
+  const isFxSwapProduct: boolean = !!form?.dealType && TicketProduct.FX_SWAP === form.dealType;
   const isFloatRate: boolean = form?.rateType === RateType.FLOAT;
 
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isXCCYProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.IRS_OIS;
 
-  const hasTerm: boolean = getHasTerm({ form });
+  const hasTerm: boolean = !!form?.effectiveDate && !!form.terminationDate;
 
   const isTermNotSelected: boolean = ((isXCCYProduct || isIrsOisProduct) && !hasTerm) || (isFxSwapProduct && !hasTerm);
 
@@ -106,13 +96,13 @@ export const getDisabledFixRate = ({ form }: Partial<UseFieldsControlProps>): ke
 };
 
 export const getDisabledFixRate2 = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isFxSwapProduct: boolean = getIsFxSwapProduct(form);
+  const isFxSwapProduct: boolean = !!form?.dealType && TicketProduct.FX_SWAP === form.dealType;
   const isFloatRate2: boolean = form?.rateType2 === RateType.FLOAT;
 
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isXCCYProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.IRS_OIS;
 
-  const hasTerm: boolean = getHasTerm({ form });
+  const hasTerm: boolean = !!form?.effectiveDate && !!form.terminationDate;
 
   const isTermNotSelected: boolean = ((isXCCYProduct || isIrsOisProduct) && !hasTerm) || (isFxSwapProduct && !hasTerm);
 
@@ -121,40 +111,46 @@ export const getDisabledFixRate2 = ({ form }: Partial<UseFieldsControlProps>): k
 
 export const getDisabledDateBeginningPast1 = ({
   form,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isNoPatternOrder = !!form?.noPatternOrder;
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
   return isNoPatternOrder && !form?.startInPast1 ? 'dateBeginningPast1' : undefined;
 };
 
 export const getDisabledDateBeginningPast2 = ({
   form,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isNoPatternOrder = !!form?.noPatternOrder;
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
   return isNoPatternOrder && !form?.startInPast2 ? 'dateBeginningPast2' : undefined;
 };
 
 export const getDisabledFloatingAddLenghtOffset1 = ({
   form,
   options,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
   const isNoFloatingAddOffset1 =
     !form?.floatingAddOffset1 ||
     (options?.floatingAddOffset1 as DefaultOption[])?.find(({ priority }) => priority)?.value ===
       form.floatingAddOffset1;
 
-  return isNoFloatingAddOffset1 ? 'floatingAddLenghtOffset1' : undefined;
+  return isNoPatternOrder && isNoFloatingAddOffset1 ? 'floatingAddLenghtOffset1' : undefined;
 };
 
 export const getDisabledFloatingAddLenghtOffset2 = ({
   form,
   options,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
   const isNoFloatingAddOffset2 =
     !form?.floatingAddOffset2 ||
     (options?.floatingAddOffset2 as DefaultOption[])?.find(({ priority }) => priority)?.value ===
       form.floatingAddOffset2;
 
-  return isNoFloatingAddOffset2 ? 'floatingAddLenghtOffset2' : undefined;
+  return isNoPatternOrder && isNoFloatingAddOffset2 ? 'floatingAddLenghtOffset2' : undefined;
 };
 
 export const getDisabledBroker = ({
@@ -174,45 +170,45 @@ export const getDisabledBroker = ({
 };
 
 export const getDisabledIndex = ({
-  type,
   form,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isPatternOrder = !form?.noPatternOrder;
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
   const isFixedRate: boolean = form?.rateType === RateType.FIXED;
-  const isIrsOisProduct = getIsIrsOisProduct(form);
-  const isXCCYProduct = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isBasisXCCYProduct = getIsBasisXCCYProduct(form);
 
-  return getIsOpenDraftForEdit(type) ||
-    isPatternOrder ||
-    (form?.dealType && (isIrsOisProduct || isXCCYProduct || isBasisXCCYProduct) && isFixedRate)
+  return isPatternOrder ||
+    (form?.dealType && [TicketProduct.IRS_OIS, TicketProduct.XCCY].includes(form.dealType) && isFixedRate)
     ? 'index'
     : undefined;
 };
 
-export const getDisabledIndex2 = ({
-  type,
-  form,
-}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+export const getDisabledIndex2 = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
   const isFixedRate2: boolean = form?.rateType2 === RateType.FIXED;
-  const isIrsOisProduct = getIsIrsOisProduct(form);
-  const isXCCYProduct = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isBasisXCCYProduct = getIsBasisXCCYProduct(form);
 
-  return getIsOpenDraftForEdit(type) ||
-    (isIrsOisProduct && !form?.currency) ||
-    (form?.dealType && (isIrsOisProduct || isXCCYProduct || isBasisXCCYProduct) && isFixedRate2)
+  return (TicketProduct.IRS_OIS === form?.dealType && !form.currency) ||
+    (form?.dealType && [TicketProduct.IRS_OIS, TicketProduct.XCCY].includes(form.dealType) && isFixedRate2)
     ? 'index2'
     : undefined;
 };
 
+export const getDisabledTradingMode = ({
+  pattern,
+  type,
+}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  const isFromActualPrice: boolean = type === TicketType.CreateDepth || type === TicketType.CreateDepthEqual;
+
+  return isPatternOrder && isFromActualPrice ? 'tradingMode' : undefined;
+};
+
 export const getDisabledSpread = ({
   form,
+  pattern,
   type,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isPatternOrder = !form?.noPatternOrder;
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  const isXCCYProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.IRS_OIS;
   const isFixedRate: boolean = form?.rateType === RateType.FIXED;
   const isFromActualPrice: boolean = type === TicketType.CreateDepth || type === TicketType.CreateDepthEqual;
   const isDisabledForActualPrice = isPatternOrder && isFromActualPrice && (isXCCYProduct || isIrsOisProduct);
@@ -222,38 +218,56 @@ export const getDisabledSpread = ({
     : undefined;
 };
 
-export const getDisabledSpread2 = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+export const getDisabledSpread2 = ({
+  form,
+  pattern,
+  type,
+}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
   const isFixedRate2: boolean = form?.rateType2 === RateType.FIXED;
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isXCCYProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form?.dealType === TicketProduct.IRS_OIS;
+  const isFromActualPrice: boolean = type === TicketType.CreateDepth || type === TicketType.CreateDepthEqual;
+  const isDisabledForActualPrice = isPatternOrder && isFromActualPrice && (isXCCYProduct || isIrsOisProduct);
 
-  return (isIrsOisProduct && !form?.currency) || ((isXCCYProduct || isIrsOisProduct) && isFixedRate2)
+  return (TicketProduct.IRS_OIS === form?.dealType && !form.currency) ||
+    ((isXCCYProduct || isIrsOisProduct) && isFixedRate2) ||
+    isDisabledForActualPrice
     ? 'spread2'
     : undefined;
 };
 
 export const getDisabledNearLegRate = ({
   form,
+  pattern,
   type,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
   const isDisabledForFXSwap: boolean = getIsDisabledForFxSwap({ form });
 
   const isDisabledForOtherProducts: boolean = getIsDisabledForOtherProducts({
     form,
+    pattern,
     type,
   });
 
-  return isDisabledForFXSwap || isDisabledForOtherProducts ? 'nearLegRate' : undefined;
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
+  const isFromActualPrice: boolean = type === TicketType.CreateDepth || type === TicketType.CreateDepthEqual;
+  // Залочить для всех продуктов
+  const isDisabledForActualPrice = isPatternOrder && isFromActualPrice;
+
+  return isDisabledForFXSwap || isDisabledForOtherProducts || isDisabledForActualPrice ? 'nearLegRate' : undefined;
 };
 
 export const getDisabledAmount1 = ({
   form,
+  pattern,
   type,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
   const isDisabledForFXSwap: boolean = getIsDisabledForFxSwap({ form });
 
   const isDisabledForOtherProducts: boolean = getIsDisabledForOtherProducts({
     form,
+    pattern,
     type,
   });
 
@@ -262,16 +276,18 @@ export const getDisabledAmount1 = ({
 
 export const getDisabledAmount2 = ({
   form,
+  pattern,
   type,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
   const isDisabledForFXSwap: boolean = getIsDisabledForFxSwap({ form });
 
   const isDisabledForOtherProducts: boolean = getIsDisabledForOtherProducts({
     form,
+    pattern,
     type,
   });
 
-  const isPatternOrder = !form?.noPatternOrder;
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
   const isFromActualPrice: boolean = type === TicketType.CreateDepth || type === TicketType.CreateDepthEqual;
   // Залочить для всех продуктов
   const isDisabledForActualPrice = isPatternOrder && isFromActualPrice;
@@ -280,18 +296,9 @@ export const getDisabledAmount2 = ({
 };
 
 export const getDisabledSwapPoints = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const hasTerm: boolean = getHasTerm({ form });
-  const isFxSwapProduct: boolean = getIsFxSwapProduct(form);
+  const hasTerm: boolean = !!form?.effectiveDate && !!form.terminationDate;
+  const isFxSwapProduct: boolean = !!form?.dealType && TicketProduct.FX_SWAP === form.dealType;
   const disabledForFXSwap: boolean = isFxSwapProduct && !hasTerm;
 
   return disabledForFXSwap ? 'swapPoints' : undefined;
 };
-
-export const getDisabledNoPatternOrder = ({
-  type,
-}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isDraft = type === TicketType.CreateDraft;
-  const isOrderFromDraft = type === TicketType.CreateFromDraft;
-
-  return isDraft || isOrderFromDraft ? 'noPatternOrder' : undefined;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getHasTermOption.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getHasTermOption.ts
deleted file mode 100644
index 676fdaed8..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getHasTermOption.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { SelectOptionValue } from '../../TicketForm/types';
-
-import { getOptionValue } from './getOptionValue';
-
-export const getOption = (fieldOptions?: SelectOptionValue, fieldValue?: string | null) => {
-  if (typeof fieldOptions === 'function') {
-    return;
-  }
-  return fieldOptions?.find((option) => getOptionValue(option) === fieldValue);
-};
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsBasisXCCYProduct.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getIsBasisXCCYProduct.ts
deleted file mode 100644
index d1a1cefc5..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsBasisXCCYProduct.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { TicketFormInputs } from '../../TicketForm/types';
-
-export const getIsBasisXCCYProduct = (form?: Partial<TicketFormInputs>) =>
-  !!form?.dealType && form.dealType === TicketProduct.BASIS_XCCY;
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsFxSwapProduct.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getIsFxSwapProduct.ts
deleted file mode 100644
index 99d8e5c56..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsFxSwapProduct.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { TicketFormInputs } from '../../TicketForm/types';
-
-export const getIsFxSwapProduct = (form?: Partial<TicketFormInputs>) => form?.dealType === TicketProduct.FX_SWAP;
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsIrsOisProduct.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getIsIrsOisProduct.ts
deleted file mode 100644
index 73c33afbf..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsIrsOisProduct.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { TicketFormInputs } from '../../TicketForm/types';
-
-export const getIsIrsOisProduct = (form?: Partial<TicketFormInputs>) =>
-  !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsXCCYProduct.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getIsXCCYProduct.ts
deleted file mode 100644
index 1379a9e16..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getIsXCCYProduct.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { TicketProduct } from 'types/SapfirSpfi';
-
-import { TicketFormInputs } from '../../TicketForm/types';
-
-export const getIsXCCYProduct = (form?: Partial<TicketFormInputs>) => form?.dealType === TicketProduct.XCCY;
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getPaymentOptions.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getPaymentOptions.ts
deleted file mode 100644
index 6e45e0dd0..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getPaymentOptions.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { isDefaultOptionArray, isStringOptionTypeArray } from '@widgets/OrdersJournal/utils/typeGuards';
-
-import { SelectOptionValue } from '../../TicketForm/types';
-
-export const getPaymentOptions = (
-  paymentPeriodFieldOptions?: SelectOptionValue,
-  ticketOptionsFieldOptions?: SelectOptionValue,
-) => {
-  const paymentPeriodFieldOptionsIsStringOptionArray = isStringOptionTypeArray(paymentPeriodFieldOptions);
-  const ticketOptionsFieldOptionsIsDefaultOptionArray = isDefaultOptionArray(ticketOptionsFieldOptions);
-  let result = ticketOptionsFieldOptions?.length ? ticketOptionsFieldOptions : paymentPeriodFieldOptions;
-  if (
-    paymentPeriodFieldOptionsIsStringOptionArray &&
-    ticketOptionsFieldOptionsIsDefaultOptionArray &&
-    paymentPeriodFieldOptions.length &&
-    ticketOptionsFieldOptions.length
-  ) {
-    const patternValue = paymentPeriodFieldOptions[0];
-
-    result = ticketOptionsFieldOptions.map((payment) =>
-      patternValue.includes(String(payment.value))
-        ? {
-            ...payment,
-            priority: true,
-            pattern: true,
-          }
-        : { ...payment, pattern: false },
-    );
-  }
-  return result;
-};
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getRequiredFields.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getRequiredFields.ts
index b12c15414..fabfd66bb 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getRequiredFields.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/getRequiredFields.ts
@@ -1,46 +1,49 @@
+import { getIsNoPatternOrder, getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
+import { TicketProduct } from 'types/SapfirSpfi';
+
 import { RateType, TicketFormInputs } from '../../TicketForm/types';
 import { UseFieldsControlProps } from '../types';
-import { getIsBasisXCCYProduct } from './getIsBasisXCCYProduct';
-
-import { getIsIrsOisProduct } from './getIsIrsOisProduct';
-import { getIsXCCYProduct } from './getIsXCCYProduct';
 
-export const getRequiredTerm = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isPatternOrder = !form?.noPatternOrder;
+export const getRequredTerm = ({ pattern }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isPatternOrder: boolean = getIsPatternOrder(pattern);
   return isPatternOrder ? 'term' : undefined;
 };
 
-export const getRequiredBuyer = ({ config }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
+export const getRequredBuyer = ({ config }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
   config?.name === 'DRAFT' ? 'buyer' : undefined;
 
-export const getRequiredFloatingAddShiftFix1 = ({
+export const getRequredFloatingAddShiftFix1 = ({
   form,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isNoPatternOrder = !!form?.noPatternOrder;
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFloatRate: boolean = form?.rateType === RateType.FLOAT;
 
   return isNoPatternOrder && (isXCCYProduct || isIrsOisProduct) && isFloatRate ? 'floatingAddShiftFix1' : undefined;
 };
 
-export const getRequiredFloatingAddShiftFix2 = ({
+export const getRequredFloatingAddShiftFix2 = ({
   form,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isNoPatternOrder = !!form?.noPatternOrder;
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFloatRate2: boolean = form?.rateType2 === RateType.FLOAT;
 
   return isNoPatternOrder && (isXCCYProduct || isIrsOisProduct) && isFloatRate2 ? 'floatingAddShiftFix2' : undefined;
 };
 
-export const getRequiredFixedAddNoStandartPeriod1 = ({
+export const getRequredFixedAddNoStandartPeriod1 = ({
   form,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isNoPatternOrder = !!form?.noPatternOrder;
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFixedRate: boolean = form?.rateType === RateType.FIXED;
 
   return isNoPatternOrder && (isXCCYProduct || isIrsOisProduct) && isFixedRate
@@ -48,12 +51,13 @@ export const getRequiredFixedAddNoStandartPeriod1 = ({
     : undefined;
 };
 
-export const getRequiredFloatingAddNoStandartPeriod1 = ({
+export const getRequredFloatingAddNoStandartPeriod1 = ({
   form,
+  pattern,
 }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isNoPatternOrder = !!form?.noPatternOrder;
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+  const isNoPatternOrder: boolean = getIsNoPatternOrder(pattern);
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFloatRate: boolean = form?.rateType === RateType.FLOAT;
 
   return isNoPatternOrder && (isXCCYProduct || isIrsOisProduct) && isFloatRate
@@ -61,40 +65,34 @@ export const getRequiredFloatingAddNoStandartPeriod1 = ({
     : undefined;
 };
 
-export const getRequiredIndex = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+export const getRequredIndex = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFloatRate: boolean = form?.rateType === RateType.FLOAT;
 
   return (isXCCYProduct || isIrsOisProduct) && isFloatRate ? 'index' : undefined;
 };
 
-export const getRequiredIndex2 = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+export const getRequredIndex2 = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFloatRate2: boolean = form?.rateType2 === RateType.FLOAT;
 
   return (isXCCYProduct || isIrsOisProduct) && isFloatRate2 ? 'index2' : undefined;
 };
 
-export const getRequiredFixRate = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+export const getRequredFixRate = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFixedRate: boolean = form?.rateType === RateType.FIXED;
 
   return (isXCCYProduct || isIrsOisProduct) && isFixedRate ? 'fixRate' : undefined;
 };
 
-export const getRequiredFixRate2 = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
-  const isXCCYProduct: boolean = getIsXCCYProduct(form) || getIsBasisXCCYProduct(form);
-  const isIrsOisProduct: boolean = getIsIrsOisProduct(form);
+export const getRequredFixRate2 = ({ form }: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined => {
+  const isXCCYProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.XCCY;
+  const isIrsOisProduct: boolean = !!form?.dealType && form.dealType === TicketProduct.IRS_OIS;
   const isFixedRate2: boolean = form?.rateType2 === RateType.FIXED;
 
   return (isXCCYProduct || isIrsOisProduct) && isFixedRate2 ? 'fixRate2' : undefined;
 };
-
-export const getRequiredClientCode = ({
-  form,
-  options,
-}: Partial<UseFieldsControlProps>): keyof TicketFormInputs | undefined =>
-  form?.account && (options?.clientCode?.length ?? 0) > 0 ? 'clientCode' : undefined;
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getRequiredFieldsDiff.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getRequiredFieldsDiff.ts
deleted file mode 100644
index 732e9c211..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getRequiredFieldsDiff.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import isNumber from 'lodash/isNumber';
-
-import { isDefined } from 'types/utils';
-
-/** Вспомогательная утилита для целей отладки */
-export const getRequiredFieldsDiff = <T, R extends readonly (keyof T)[]>(data: T, requiredFields: R): (keyof T)[] =>
-  requiredFields.filter((key) => {
-    const isNumberDefined = isNumber(data[key]) && data[key];
-    const isNotNumberDefined = !isNumber(data[key]) && isDefined(data[key]);
-    return !(isNumberDefined || isNotNumberDefined);
-  });
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getStartInPast.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getStartInPast.ts
index 5784ca1ca..0742fb0cc 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getStartInPast.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/getStartInPast.ts
@@ -1,25 +1,35 @@
+import { getIsNoPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
 import { TicketFormInputs } from '../../TicketForm/types';
-import { CreateNoPatternTicketRequestData } from '../types';
+import { CreateNoPatternTicketRequestData, GetTicketOptionsParams } from '../types';
+
+export const getStartInPast = (
+  data: TicketFormInputs,
+  pattern: GetTicketOptionsParams['pattern'],
+): Partial<CreateNoPatternTicketRequestData> => {
+  const startInPast1: Partial<CreateNoPatternTicketRequestData> = getIsNoPatternOrder(pattern)
+    ? {
+        fixedAddNoStandartPeriod1: data.fixedAddNoStandartPeriod1 ?? undefined,
+        floatingAddNoStandartPeriod1: data.floatingAddNoStandartPeriod1 ?? undefined,
+        floatingAddOffset1: data.floatingAddOffset1 ?? undefined,
+        floatingAddLenghtOffset1: data.floatingAddLenghtOffset1 ?? undefined,
+        floatingAddShiftFix1: data.floatingAddShiftFix1 ?? undefined,
+      }
+    : {};
 
-export const getStartInPast = (data: TicketFormInputs): Partial<CreateNoPatternTicketRequestData> => {
-  const startInPast1: Partial<CreateNoPatternTicketRequestData> = {
-    fixedAddNoStandartPeriod1: data.fixedAddNoStandartPeriod1 ?? undefined,
-    floatingAddNoStandartPeriod1: data.floatingAddNoStandartPeriod1 ?? undefined,
-    floatingAddOffset1: data.floatingAddOffset1 ?? undefined,
-    floatingAddLenghtOffset1: data.floatingAddLenghtOffset1 ?? undefined,
-    floatingAddShiftFix1: data.floatingAddShiftFix1 ?? undefined,
-  };
   if (data.startInPast1) {
     startInPast1.dateBeginningPast1 = data.dateBeginningPast1;
   }
 
-  const startInPast2: Partial<CreateNoPatternTicketRequestData> = {
-    fixedAddNoStandartPeriod2: data.fixedAddNoStandartPeriod2 ?? undefined,
-    floatingAddNoStandartPeriod2: data.floatingAddNoStandartPeriod2 ?? undefined,
-    floatingAddOffset2: data.floatingAddOffset2 ?? undefined,
-    floatingAddLenghtOffset2: data.floatingAddLenghtOffset2 ?? undefined,
-    floatingAddShiftFix2: data.floatingAddShiftFix2 ?? undefined,
-  };
+  const startInPast2: Partial<CreateNoPatternTicketRequestData> = getIsNoPatternOrder(pattern)
+    ? {
+        fixedAddNoStandartPeriod2: data.fixedAddNoStandartPeriod2 ?? undefined,
+        floatingAddNoStandartPeriod2: data.floatingAddNoStandartPeriod2 ?? undefined,
+        floatingAddOffset2: data.floatingAddOffset2 ?? undefined,
+        floatingAddLenghtOffset2: data.floatingAddLenghtOffset2 ?? undefined,
+        floatingAddShiftFix2: data.floatingAddShiftFix2 ?? undefined,
+      }
+    : {};
   if (data.startInPast2) {
     startInPast2.dateBeginningPast2 = data.dateBeginningPast2;
   }
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getTicketOptionsFetchParams.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getTicketOptionsFetchParams.ts
index 9495874f5..21f4b9a4b 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getTicketOptionsFetchParams.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/getTicketOptionsFetchParams.ts
@@ -1,57 +1,46 @@
+import { getIsNoPatternOrder, getIsPatternOrder } from '@widgets/OrdersJournal/utils/getIsPatternOrder';
+
 import { TicketProduct } from 'types/SapfirSpfi';
 
-import { CUSTOM_TERM_PATTERN } from '../../TicketForm/const';
 import { RateType, TicketFormInputs } from '../../TicketForm/types';
 import { GetTicketOptionsParams, OrdersJournalPluginConfig } from '../types';
 
-import { getIsFxSwapProduct } from './getIsFxSwapProduct';
-
-type getTicketOptionsProps = {
-  form: Partial<TicketFormInputs>;
-};
-
-const getTicketOptionsFetchParamsTerm = ({ form }: getTicketOptionsProps) => ({
-  term: form.term && !form.term?.includes(CUSTOM_TERM_PATTERN) ? form.term : undefined,
-});
-
-const getTicketOptionsFetchParamsProduct = ({ form }: getTicketOptionsProps) => ({ product: form.dealType });
-
-const getTicketOptionsFetchParamsCurrency = ({ form }: getTicketOptionsProps) =>
-  form.currency && form.dealType === TicketProduct.IRS_OIS ? { currency: form.currency } : {};
-
-const getTicketOptionsFetchParamsCurrencyPair = ({ form }: getTicketOptionsProps) =>
-  form.currencyPairs && form.dealType !== TicketProduct.IRS_OIS ? { currencyPair: form.currencyPairs } : {};
-
 export type GetUseTicketOptionsFetchParams = {
   form: Partial<TicketFormInputs>;
+  pattern: GetTicketOptionsParams['pattern'];
   config: OrdersJournalPluginConfig;
 };
+
 export const getTicketOptionsFetchParams = ({
   form,
+  pattern,
   config,
 }: GetUseTicketOptionsFetchParams): GetTicketOptionsParams => {
-  const isFxSwapProduct: boolean = getIsFxSwapProduct(form);
-
-  const preparedParams = {
-    ...getTicketOptionsFetchParamsTerm({ form }),
-    ...getTicketOptionsFetchParamsProduct({ form }),
-    ...getTicketOptionsFetchParamsCurrency({ form }),
-    ...getTicketOptionsFetchParamsCurrencyPair({ form }),
-  } as GetTicketOptionsParams;
-
+  const preparedParams = {} as GetTicketOptionsParams;
   if (config.name === 'ORDER') {
-    preparedParams.pattern = 'NOPATTERN';
+    preparedParams.pattern = pattern;
+  }
+  if (form.dealType) {
+    preparedParams.product = form.dealType;
   }
-  if (!isFxSwapProduct && form.index && form.rateType === RateType.FLOAT) {
+  if (form.currency && form.dealType === TicketProduct.IRS_OIS) {
+    preparedParams.currency = form.currency;
+  }
+  if (form.term && getIsPatternOrder(pattern)) {
+    preparedParams.term = form.term;
+  }
+  if (form.index && getIsNoPatternOrder(pattern)) {
     preparedParams.index = form.index;
-  } else if (!isFxSwapProduct && form.rateType === RateType.FIXED) {
+  } else if (form.rateType === RateType.FIXED) {
     preparedParams.index = RateType.FIXED;
   }
-  if (!isFxSwapProduct && form.index2 && form.rateType2 === RateType.FLOAT) {
+  if (form.index2) {
     preparedParams.index2 = form.index2;
-  } else if (!isFxSwapProduct && form.rateType2 === RateType.FIXED) {
+  } else if (form.rateType2 === RateType.FIXED) {
     preparedParams.index2 = RateType.FIXED;
   }
-
+  if (form.currencyPairs && form.dealType !== TicketProduct.IRS_OIS) {
+    preparedParams.currencyPair = form.currencyPairs;
+  }
   return preparedParams;
 };
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/getTicketProps.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/getTicketProps.ts
deleted file mode 100644
index ea524871e..000000000
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/getTicketProps.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { TicketType } from 'types/SapfirSpfi';
-
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { TicketFormInputs } from '../../TicketForm/types';
-import { TICKET_PROPS_BY_TYPE } from '../const';
-
-export const getTicketProps = (ticketType: TicketType, form: Partial<TicketFormInputs>) =>
-  ticketType === TicketType.OpenDraft && form.status === SpfiDraftStatus.REVIEW
-    ? {
-        ...TICKET_PROPS_BY_TYPE[ticketType],
-        submitText: TICKET_PROPS_BY_TYPE[TicketType.CreateDraft].submitText,
-      }
-    : TICKET_PROPS_BY_TYPE[ticketType];
diff --git a/src/widgets/OrdersJournal/components/TicketModal/utils/toggleDirections.ts b/src/widgets/OrdersJournal/components/TicketModal/utils/toggleDirections.ts
index 3af4637df..556b57f0c 100644
--- a/src/widgets/OrdersJournal/components/TicketModal/utils/toggleDirections.ts
+++ b/src/widgets/OrdersJournal/components/TicketModal/utils/toggleDirections.ts
@@ -1,15 +1,11 @@
 import { PremiumDirection, TicketFormInputs } from '@widgets/OrdersJournal/components/TicketForm/types';
-import { DealFXSwopDirection, DealIRSOISDirection, DealXCCYDirection } from 'types/SapfirSpfi';
-
-import { getIsBasisXCCYProduct } from './getIsBasisXCCYProduct';
-import { getIsIrsOisProduct } from './getIsIrsOisProduct';
-import { getIsXCCYProduct } from './getIsXCCYProduct';
+import { DealFXSwopDirection, DealIRSOISDirection, DealXCCYDirection, TicketProduct } from 'types/SapfirSpfi';
 
 const getToggledDirectionsOfDealType = (defaultValues: TicketFormInputs) => {
-  if (getIsIrsOisProduct(defaultValues)) {
+  if (TicketProduct.IRS_OIS === defaultValues.dealType) {
     return defaultValues.direction === DealIRSOISDirection.Buy ? DealIRSOISDirection.Sell : DealIRSOISDirection.Buy;
   }
-  if (getIsXCCYProduct(defaultValues) || getIsBasisXCCYProduct(defaultValues)) {
+  if (TicketProduct.XCCY === defaultValues.dealType) {
     return defaultValues.direction === DealXCCYDirection.Buy ? DealXCCYDirection.Sell : DealXCCYDirection.Buy;
   }
   return defaultValues.direction === DealFXSwopDirection.Buy ? DealFXSwopDirection.Sell : DealFXSwopDirection.Buy;
diff --git a/src/widgets/OrdersJournal/constants.ts b/src/widgets/OrdersJournal/constants.ts
index 66ebde59d..c5c690888 100644
--- a/src/widgets/OrdersJournal/constants.ts
+++ b/src/widgets/OrdersJournal/constants.ts
@@ -1,6 +1,5 @@
 import { OrderContextMenuProps } from './components/OrderContextMenu';
 import {
-  DraftsFilters,
   OrderContextMenuItems,
   OrdersFilters,
   OrderType,
@@ -18,7 +17,6 @@ export const TRADE_TYPE_LABELS = {
 };
 
 export const FILTER_ALL_VALUE = 'All';
-export const FILTER_OTHER_VALUE = 'Other';
 
 export const DEFAULT_WIDGET_TAB = WidgetTab.Incoming;
 
@@ -29,12 +27,6 @@ export const DEFAULT_FILTERS: OrdersFilters = {
   typeTrade: FILTER_ALL_VALUE,
 };
 
-export const DEFAULT_DRAFTS_FILTERS: DraftsFilters = {
-  status: FILTER_OTHER_VALUE,
-  counterparties: FILTER_ALL_VALUE,
-  brokers: FILTER_ALL_VALUE,
-};
-
 export const COLUMN_KEYS: Record<WidgetTab, keyof SavedColumns> = {
   [WidgetTab.Incoming]: 'incomingOrdersColumns',
   [WidgetTab.Outcoming]: 'outcomingOrdersColumns',
@@ -64,6 +56,7 @@ export const CONTEXT_MENU_ITEMS: Record<WidgetTab, OrderContextMenuProps['items'
     {
       key: OrderContextMenuItems.RETURN_DRAFT,
       label: 'Вернуть брокеру',
+      disabled: true,
     },
   ],
 };
diff --git a/src/widgets/OrdersJournal/hooks/__tests__/useContextMenu.test.tsx b/src/widgets/OrdersJournal/hooks/__tests__/useContextMenu.test.tsx
deleted file mode 100644
index d0be055db..000000000
--- a/src/widgets/OrdersJournal/hooks/__tests__/useContextMenu.test.tsx
+++ /dev/null
@@ -1,456 +0,0 @@
-import { configureStore } from '@reduxjs/toolkit';
-import { act, renderHook } from '@testing-library/react';
-import React from 'react';
-import { Provider } from 'react-redux';
-
-import { communicator } from '@core/comm';
-import { CHANGE_DRAFT_STATUS_EVENT } from '@modules/widgets/shared';
-import modalsReducer from '@store/slices/modals';
-
-import { TicketType } from 'types/SapfirSpfi';
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
-import { TicketProductType } from '../../components/TicketModal/types';
-import { OrderContextMenuItems, WidgetTab } from '../../types';
-
-import { useContextMenu } from '../useContextMenu';
-
-jest.mock('@core/comm', () => ({
-  communicator: {
-    send: jest.fn(),
-  },
-}));
-
-jest.mock('../useMarketDataContextMenu/useMarketDataContextMenu.hook', () => ({
-  useDropdown: () => ({
-    dropdownRender: jest.fn(() => null),
-  }),
-}));
-
-const createTestStore = () =>
-  configureStore({
-    reducer: {
-      modals: modalsReducer,
-    },
-  });
-
-const createWrapper =
-  (store: ReturnType<typeof createTestStore>) =>
-  ({ children }: { children: React.ReactNode }) => <Provider store={store}>{children}</Provider>;
-
-const createMockEvent = (target?: HTMLElement) =>
-  ({
-    target: target || document.createElement('div'),
-    stopPropagation: jest.fn(),
-    preventDefault: jest.fn(),
-  }) as unknown as React.MouseEvent;
-
-const mockOrder = {
-  orderId: 123,
-  draftId: 456,
-  tradeId: 'TRADE-001',
-  date: '2024-01-15',
-  time: '10:30:00',
-  firmId: 'FIRM-001',
-  firmName: 'Test Firm',
-  typeInstr: TicketProductType.IRS,
-  instr: 'IRS/USD/RUB/1Y',
-  buySell: 'BUY',
-  price: 5.5,
-  exchangeRate: 1.0,
-  term: '1Y',
-  startDate: '2024-01-15',
-  endDate: '2025-01-15',
-  amount1: 1000000,
-  fulfilled: 0,
-  balance: 1000000,
-  currency1: 'USD',
-  amount2: 95000000,
-  currency2: 'RUB',
-  csa: 'CSA-001',
-  accountId: 'ACC-001',
-  status: 'A',
-  typeOrder: 'address',
-  bonusDirection: 'NONE' as const,
-};
-
-const defaultProps = {
-  tab: WidgetTab.Incoming as WidgetTab,
-  widgetId: 1,
-};
-
-describe('useContextMenu', () => {
-  let store: ReturnType<typeof createTestStore>;
-
-  beforeEach(() => {
-    store = createTestStore();
-    jest.clearAllMocks();
-  });
-
-  describe('handleContextMenuClick', () => {
-    it('should set order and event when clicking on valid cell', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      const mockEvent = createMockEvent();
-
-      act(() => {
-        result.current.handleContextMenuClick(mockEvent, mockOrder);
-      });
-
-      expect(result.current.event).toBe(mockEvent);
-    });
-
-    it('should not set order when clicking on bid column', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      const cell = document.createElement('div');
-      cell.setAttribute('data-column-key', 'bid');
-
-      const mockEvent = createMockEvent(cell);
-
-      act(() => {
-        result.current.handleContextMenuClick(mockEvent, mockOrder);
-      });
-
-      expect(result.current.event).toBeUndefined();
-    });
-
-    it('should not set order when clicking on ask column', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      const cell = document.createElement('div');
-      cell.setAttribute('data-column-key', 'ask');
-
-      const mockEvent = createMockEvent(cell);
-
-      act(() => {
-        result.current.handleContextMenuClick(mockEvent, mockOrder);
-      });
-
-      expect(result.current.event).toBeUndefined();
-    });
-
-    it('should call stopPropagation and preventDefault on valid cell', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      const mockEvent = createMockEvent();
-
-      act(() => {
-        result.current.handleContextMenuClick(mockEvent, mockOrder);
-      });
-
-      expect(mockEvent.stopPropagation).toHaveBeenCalled();
-      expect(mockEvent.preventDefault).toHaveBeenCalled();
-    });
-  });
-
-  describe('handleMenuItemClick', () => {
-    it('should dispatch openCancelTicketModal for CANCEL action', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), mockOrder);
-      });
-
-      act(() => {
-        result.current.handleMenuItemClick(OrderContextMenuItems.CANCEL);
-      });
-
-      const state = store.getState();
-      expect(state.modals.ticketModal.isOpen).toBe(true);
-      expect(state.modals.ticketModal.type).toBe(TicketType.Cancel);
-      expect(state.modals.ticketModal.orderId).toBe(mockOrder.orderId);
-    });
-
-    it('should dispatch openAcceptTicketModal for ACCEPT action', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), mockOrder);
-      });
-
-      act(() => {
-        result.current.handleMenuItemClick(OrderContextMenuItems.ACCEPT);
-      });
-
-      const state = store.getState();
-      expect(state.modals.ticketModal.isOpen).toBe(true);
-      expect(state.modals.ticketModal.type).toBe(TicketType.Accept);
-      expect(state.modals.ticketModal.orderId).toBe(mockOrder.orderId);
-    });
-
-    it('should dispatch openCreateTicketModal for COPY action', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), mockOrder);
-      });
-
-      act(() => {
-        result.current.handleMenuItemClick(OrderContextMenuItems.COPY);
-      });
-
-      const state = store.getState();
-      expect(state.modals.ticketModal.isOpen).toBe(true);
-      expect(state.modals.ticketModal.type).toBe(TicketType.Create);
-      expect(state.modals.ticketModal.orderId).toBe(mockOrder.orderId);
-    });
-
-    it('should send CHANGE_DRAFT_STATUS_EVENT for RETURN_DRAFT action', () => {
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.BrokerDrafts }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), mockOrder);
-      });
-
-      act(() => {
-        result.current.handleMenuItemClick(OrderContextMenuItems.RETURN_DRAFT);
-      });
-
-      expect(communicator.send).toHaveBeenCalledWith({
-        type: CHANGE_DRAFT_STATUS_EVENT,
-        payload: {
-          draftId: mockOrder.draftId,
-          status: SpfiDraftStatus.REVIEW,
-        },
-      });
-    });
-
-    it('should not dispatch action when orderId is missing for non-RETURN_DRAFT actions', () => {
-      const orderWithoutOrderId = { ...mockOrder, orderId: 0 };
-
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithoutOrderId);
-      });
-
-      act(() => {
-        result.current.handleMenuItemClick(OrderContextMenuItems.CANCEL);
-      });
-
-      const state = store.getState();
-      expect(state.modals.ticketModal.isOpen).toBe(false);
-    });
-
-    it('should not dispatch action when draftId is missing for RETURN_DRAFT action', () => {
-      const orderWithoutDraftId = { ...mockOrder, draftId: undefined };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.BrokerDrafts }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithoutDraftId);
-      });
-
-      act(() => {
-        result.current.handleMenuItemClick(OrderContextMenuItems.RETURN_DRAFT);
-      });
-
-      expect(communicator.send).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('handleMenuOpenChange', () => {
-    it('should clear event when menu is closed', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), mockOrder);
-      });
-
-      expect(result.current.event).toBeDefined();
-
-      act(() => {
-        result.current.handleMenuOpenChange(false);
-      });
-
-      expect(result.current.event).toBeUndefined();
-    });
-
-    it('should not clear event when menu is opened', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), mockOrder);
-      });
-
-      const eventBefore = result.current.event;
-
-      act(() => {
-        result.current.handleMenuOpenChange(true);
-      });
-
-      expect(result.current.event).toBe(eventBefore);
-    });
-  });
-
-  describe('items', () => {
-    it('should return ACCEPT item for Incoming tab', () => {
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.Incoming }), {
-        wrapper: createWrapper(store),
-      });
-
-      expect(result.current.items).toHaveLength(1);
-      expect(result.current.items[0].key).toBe(OrderContextMenuItems.ACCEPT);
-    });
-
-    it('should return CANCEL and COPY items for Outcoming tab', () => {
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.Outcoming }), {
-        wrapper: createWrapper(store),
-      });
-
-      expect(result.current.items).toHaveLength(2);
-      expect(result.current.items.map((i) => i.key)).toContain(OrderContextMenuItems.CANCEL);
-      expect(result.current.items.map((i) => i.key)).toContain(OrderContextMenuItems.COPY);
-    });
-
-    it('should return empty items for MarketData tab', () => {
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.MarketData }), {
-        wrapper: createWrapper(store),
-      });
-
-      expect(result.current.items).toHaveLength(0);
-    });
-
-    it('should return RETURN_DRAFT item for BrokerDrafts tab', () => {
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.BrokerDrafts }), {
-        wrapper: createWrapper(store),
-      });
-
-      expect(result.current.items).toHaveLength(1);
-      expect(result.current.items[0].key).toBe(OrderContextMenuItems.RETURN_DRAFT);
-    });
-
-    it('should disable ACCEPT item when order typeInstr is not IRS/OIS/FX_SWAP/XCCY', () => {
-      const orderWithInvalidType = { ...mockOrder, typeInstr: 'FX_FWD' as TicketProductType };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.Incoming }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithInvalidType);
-      });
-
-      expect(result.current.items[0].disabled).toBe(true);
-    });
-
-    it('should enable ACCEPT item when order typeInstr is IRS', () => {
-      const orderWithValidType = { ...mockOrder, typeInstr: TicketProductType.IRS };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.Incoming }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithValidType);
-      });
-
-      expect(result.current.items[0].disabled).toBe(false);
-    });
-
-    it('should enable ACCEPT item when order typeInstr is OIS', () => {
-      const orderWithValidType = { ...mockOrder, typeInstr: TicketProductType.OIS };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.Incoming }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithValidType);
-      });
-
-      expect(result.current.items[0].disabled).toBe(false);
-    });
-
-    it('should enable ACCEPT item when order typeInstr is FX_SWAP', () => {
-      const orderWithValidType = { ...mockOrder, typeInstr: TicketProductType.FX_SWAP };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.Incoming }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithValidType);
-      });
-
-      expect(result.current.items[0].disabled).toBe(false);
-    });
-
-    it('should enable ACCEPT item when order typeInstr is XCCY', () => {
-      const orderWithValidType = { ...mockOrder, typeInstr: TicketProductType.XCCY };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.Incoming }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithValidType);
-      });
-
-      expect(result.current.items[0].disabled).toBe(false);
-    });
-
-    it('should disable RETURN_DRAFT item when order status is not APPROVE for BrokerDrafts tab', () => {
-      const orderWithNonApproveStatus = { ...mockOrder, status: 'PENDING' };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.BrokerDrafts }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithNonApproveStatus);
-      });
-
-      expect(result.current.items[0].disabled).toBe(true);
-    });
-
-    it('should enable RETURN_DRAFT item when order status is APPROVE for BrokerDrafts tab', () => {
-      const orderWithApproveStatus = { ...mockOrder, status: SpfiDraftStatus.APPROVE };
-
-      const { result } = renderHook(() => useContextMenu({ ...defaultProps, tab: WidgetTab.BrokerDrafts }), {
-        wrapper: createWrapper(store),
-      });
-
-      act(() => {
-        result.current.handleContextMenuClick(createMockEvent(), orderWithApproveStatus);
-      });
-
-      expect(result.current.items[0].disabled).toBe(false);
-    });
-  });
-
-  describe('dropdownRender', () => {
-    it('should return dropdownRender function', () => {
-      const { result } = renderHook(() => useContextMenu(defaultProps), {
-        wrapper: createWrapper(store),
-      });
-
-      expect(typeof result.current.dropdownRender).toBe('function');
-    });
-  });
-});
diff --git a/src/widgets/OrdersJournal/hooks/__tests__/useSorters.test.ts b/src/widgets/OrdersJournal/hooks/__tests__/useSorters.test.ts
index 19e513661..4f20ef23c 100644
--- a/src/widgets/OrdersJournal/hooks/__tests__/useSorters.test.ts
+++ b/src/widgets/OrdersJournal/hooks/__tests__/useSorters.test.ts
@@ -1,5 +1,3 @@
-import { renderHook } from '@testing-library/react';
-
 import { SortingType } from '@components/Table/types/sorting';
 
 import { WidgetTab } from '../../types';
@@ -24,28 +22,28 @@ describe('useSortHandlers', () => {
       [WidgetTab.Outcoming, 'Outcoming'],
       [WidgetTab.MarketData, 'MarketData'],
     ])('should return term sorter for %s tab', (tab) => {
-      const { result } = renderHook(() => useSortHandlers({ tab }));
+      const result = useSortHandlers({ tab });
 
-      expect(result.current.term).toBeDefined();
-      expect(typeof result.current.term).toBe('function');
+      expect(result.term).toBeDefined();
+      expect(typeof result.term).toBe('function');
     });
   });
 
   it('should return term sorter and broker drafts sorters for BrokerDrafts tab', () => {
-    const { result } = renderHook(() => useSortHandlers({ tab: WidgetTab.BrokerDrafts }));
+    const result = useSortHandlers({ tab: WidgetTab.BrokerDrafts });
 
-    expect(result.current.term).toBeDefined();
-    expect(typeof result.current.term).toBe('function');
+    expect(result.term).toBeDefined();
+    expect(typeof result.term).toBe('function');
 
-    expect(result.current.dateCreateDraft).toBeDefined();
-    expect(result.current.timeCreateDraft).toBeDefined();
-    expect(result.current.dateCreateOrder).toBeDefined();
-    expect(result.current.timeCreateOrder).toBeDefined();
-    expect(result.current.effectiveDate).toBeDefined();
-    expect(result.current.terminationDate).toBeDefined();
-    expect(result.current.dateBeginningPast1).toBeDefined();
-    expect(result.current.dateBeginningPast2).toBeDefined();
-    expect(result.current.brokerDatePayment).toBeDefined();
+    expect(result.dateCreateDraft).toBeDefined();
+    expect(result.timeCreateDraft).toBeDefined();
+    expect(result.dateCreateOrder).toBeDefined();
+    expect(result.timeCreateOrder).toBeDefined();
+    expect(result.effectiveDate).toBeDefined();
+    expect(result.terminationDate).toBeDefined();
+    expect(result.dateBeginningPast1).toBeDefined();
+    expect(result.dateBeginningPast2).toBeDefined();
+    expect(result.brokerDatePayment).toBeDefined();
   });
 
   describe('broker drafts sorters should be undefined', () => {
@@ -54,27 +52,27 @@ describe('useSortHandlers', () => {
       [WidgetTab.Outcoming, 'Outcoming'],
       [WidgetTab.MarketData, 'MarketData'],
     ])('for %s tab', (tab) => {
-      const { result } = renderHook(() => useSortHandlers({ tab }));
+      const result = useSortHandlers({ tab });
 
-      expect(result.current.term).toBeDefined();
+      expect(result.term).toBeDefined();
       BROKER_DRAFT_SORTERS.forEach((sorter) => {
-        expect(result.current[sorter]).toBeUndefined();
+        expect(result[sorter]).toBeUndefined();
       });
     });
   });
 
   it('should return sorters that work with sortOrder parameter', () => {
-    const { result } = renderHook(() => useSortHandlers({ tab: WidgetTab.BrokerDrafts }));
+    const result = useSortHandlers({ tab: WidgetTab.BrokerDrafts });
 
-    const termSorterFn = result.current.term('asc' as SortingType);
+    const termSorterFn = result.term('asc' as SortingType);
     expect(typeof termSorterFn).toBe('function');
 
-    expect(result.current.dateCreateDraft).toBeDefined();
-    const dateSorterFn = result.current.dateCreateDraft?.('asc' as SortingType);
+    expect(result.dateCreateDraft).toBeDefined();
+    const dateSorterFn = result.dateCreateDraft?.('asc' as SortingType);
     expect(typeof dateSorterFn).toBe('function');
 
-    expect(result.current.timeCreateDraft).toBeDefined();
-    const timeSorterFn = result.current.timeCreateDraft?.('asc' as SortingType);
+    expect(result.timeCreateDraft).toBeDefined();
+    const timeSorterFn = result.timeCreateDraft?.('asc' as SortingType);
     expect(typeof timeSorterFn).toBe('function');
   });
 });
diff --git a/src/widgets/OrdersJournal/hooks/useContextMenu.ts b/src/widgets/OrdersJournal/hooks/useContextMenu.ts
index 8f46eaabf..8e9303bbb 100644
--- a/src/widgets/OrdersJournal/hooks/useContextMenu.ts
+++ b/src/widgets/OrdersJournal/hooks/useContextMenu.ts
@@ -1,12 +1,8 @@
 import { MouseEvent, useCallback, useMemo, useState } from 'react';
 import { useDispatch } from 'react-redux';
 
-import { communicator } from '@core/comm';
-import { CHANGE_DRAFT_STATUS_EVENT } from '@modules/widgets/shared';
 import { openAcceptTicketModal, openCancelTicketModal, openCreateTicketModal } from '@store/slices/modals';
 
-import { SpfiDraftStatus } from 'types/spfiDrafts';
-
 import { TicketProductType } from '../components/TicketModal/types';
 import { CONTEXT_MENU_ITEMS } from '../constants';
 import { Order, OrderContextMenuItems, WidgetTab } from '../types';
@@ -40,39 +36,24 @@ export const useContextMenu = ({ tab, widgetId }: UseContextMenuProps) => {
 
   const handleMenuItemClick = useCallback(
     (key: string) => {
-      const orderId = order?.orderId ?? 0;
-      const draftId = order?.draftId ?? 0;
-      if (
-        (key !== OrderContextMenuItems.RETURN_DRAFT && !orderId) ||
-        (key === OrderContextMenuItems.RETURN_DRAFT && !order?.draftId)
-      ) {
+      if (!order?.orderId) {
         return;
       }
-
       switch (key) {
         case OrderContextMenuItems.CANCEL:
-          dispatch(openCancelTicketModal({ orderId, widgetId }));
+          dispatch(openCancelTicketModal({ orderId: order.orderId, widgetId }));
           break;
         case OrderContextMenuItems.ACCEPT:
-          dispatch(openAcceptTicketModal({ orderId, widgetId }));
+          dispatch(openAcceptTicketModal({ orderId: order.orderId, widgetId }));
           break;
         case OrderContextMenuItems.COPY:
-          dispatch(openCreateTicketModal({ orderId, widgetId }));
-          break;
-        case OrderContextMenuItems.RETURN_DRAFT:
-          communicator.send({
-            type: CHANGE_DRAFT_STATUS_EVENT,
-            payload: {
-              draftId,
-              status: SpfiDraftStatus.REVIEW,
-            },
-          });
+          dispatch(openCreateTicketModal({ orderId: order.orderId, widgetId, pattern: 'NOPATTERN' }));
           break;
         default:
           break;
       }
     },
-    [dispatch, order?.draftId, order?.orderId, widgetId],
+    [dispatch, order?.orderId, widgetId],
   );
 
   const handleMenuOpenChange = useCallback((open: boolean) => {
@@ -86,19 +67,13 @@ export const useContextMenu = ({ tab, widgetId }: UseContextMenuProps) => {
       CONTEXT_MENU_ITEMS[tab].map((item) => ({
         ...item,
         disabled:
-          tab === WidgetTab.BrokerDrafts
-            ? order?.status !== SpfiDraftStatus.APPROVE
-            : // Пока есть возможность принимать только ордера с продуктами из списка, поэтому введена такая проверка
-              !order?.typeInstr ||
-              ![
-                TicketProductType.IRS,
-                TicketProductType.OIS,
-                TicketProductType.FX_SWAP,
-                TicketProductType.XCCY,
-                TicketProductType.BASIS_XCCY,
-              ].includes(order.typeInstr as TicketProductType),
+          // Пока есть возможность принимать только ордер IRS/OIS, XCCY и FX_SWAP, поэтому введена такая проверка
+          !order?.typeInstr ||
+          ![TicketProductType.IRS, TicketProductType.OIS, TicketProductType.FX_SWAP, TicketProductType.XCCY].includes(
+            order.typeInstr as TicketProductType,
+          ),
       })),
-    [order?.status, order?.typeInstr, tab],
+    [order?.typeInstr, tab],
   );
 
   const currentAction = useMemo(
diff --git a/src/widgets/OrdersJournal/hooks/useSorters.ts b/src/widgets/OrdersJournal/hooks/useSorters.ts
index 8ef8ac56e..9bc49e251 100644
--- a/src/widgets/OrdersJournal/hooks/useSorters.ts
+++ b/src/widgets/OrdersJournal/hooks/useSorters.ts
@@ -1,5 +1,3 @@
-import { useMemo } from 'react';
-
 import { termSorter } from '@utils/sortUtils';
 import { createDateArraySorter } from '@utils/sortUtils/dateArraySorter';
 
@@ -28,11 +26,7 @@ const BROKER_DRAFTS_SORTERS = {
   brokerDatePayment: createDateArraySorter('brokerDatePayment'),
 };
 
-export const useSortHandlers = ({ tab }: UseSortHandlersParams) =>
-  useMemo(
-    () => ({
-      ...COMMON_SORTERS,
-      ...(tab === WidgetTab.BrokerDrafts ? { ...BROKER_DRAFTS_SORTERS } : {}),
-    }),
-    [tab],
-  );
+export const useSortHandlers = ({ tab }: UseSortHandlersParams) => ({
+  ...COMMON_SORTERS,
+  ...(tab === WidgetTab.BrokerDrafts ? { ...BROKER_DRAFTS_SORTERS } : {}),
+});
diff --git a/src/widgets/OrdersJournal/hooks/useStore.ts b/src/widgets/OrdersJournal/hooks/useStore.ts
index d967e6779..ddbed16e6 100644
--- a/src/widgets/OrdersJournal/hooks/useStore.ts
+++ b/src/widgets/OrdersJournal/hooks/useStore.ts
@@ -1,5 +1,4 @@
-import isEqual from 'lodash/isEqual';
-import { useMemo, useRef } from 'react';
+import { useMemo } from 'react';
 
 import { useSelectProperties } from '@modules/widgetProperties';
 
@@ -9,9 +8,8 @@ import { OrdersJournalProps } from '../types';
 
 export const useStore = (): OrdersJournalProps => {
   const props = useSelectProperties<WidgetProperties>();
-  const propsToWidgetRef = useRef<OrdersJournalProps | null>();
 
-  const propsToWidget: OrdersJournalProps = useMemo(() => {
+  const propsToWidget: OrdersJournalProps | null = useMemo(() => {
     const {
       incomingOrdersColumns,
       outcomingOrdersColumns,
@@ -23,25 +21,16 @@ export const useStore = (): OrdersJournalProps => {
       ...otherProps
     } = props;
 
-    const result = {
+    return {
       incomingOrdersColumns: incomingOrdersColumns ? JSON.parse(incomingOrdersColumns) : null,
       outcomingOrdersColumns: outcomingOrdersColumns ? JSON.parse(outcomingOrdersColumns) : null,
       marketDataColumns: marketDataColumns ? JSON.parse(marketDataColumns) : null,
       brokerDraftsColumns: brokerDraftsColumns ? JSON.parse(brokerDraftsColumns) : null,
-      initialFilters: {
-        typeTrade,
-        typeInstr,
-      },
+      typeTrade,
+      typeInstr,
       tab,
       ...otherProps,
     };
-
-    if (propsToWidgetRef.current && isEqual(propsToWidgetRef.current, result)) {
-      return propsToWidgetRef.current;
-    }
-
-    propsToWidgetRef.current = result;
-    return result;
   }, [props]);
 
   return propsToWidget;
diff --git a/src/widgets/OrdersJournal/hooks/useTable.ts b/src/widgets/OrdersJournal/hooks/useTable.ts
index 6d7030df6..c18b1888a 100644
--- a/src/widgets/OrdersJournal/hooks/useTable.ts
+++ b/src/widgets/OrdersJournal/hooks/useTable.ts
@@ -65,15 +65,12 @@ export const useTable = (params: UseTableParams) => {
     });
   }, [controller, tab, updateProperties]);
 
-  const settingsItems = useMemo(
-    () => [
-      {
-        key: '1',
-        label: settingsComponent,
-      },
-    ],
-    [settingsComponent],
-  );
+  const settingsItems = [
+    {
+      key: '1',
+      label: settingsComponent,
+    },
+  ];
 
   const savedColumns = useMemo(() => params[COLUMN_KEYS[tab]], [params, tab]);
 
@@ -88,13 +85,9 @@ export const useTable = (params: UseTableParams) => {
       const order = (record as Order) ?? {};
       if (
         ORDERS_TABS.includes(tab) &&
-        [
-          TicketProductType.IRS,
-          TicketProductType.OIS,
-          TicketProductType.FX_SWAP,
-          TicketProductType.XCCY,
-          TicketProductType.BASIS_XCCY,
-        ].includes(order?.typeInstr)
+        [TicketProductType.IRS, TicketProductType.OIS, TicketProductType.FX_SWAP, TicketProductType.XCCY].includes(
+          order?.typeInstr,
+        )
       ) {
         switch (tab) {
           case WidgetTab.Incoming:
diff --git a/src/widgets/OrdersJournal/types.ts b/src/widgets/OrdersJournal/types.ts
index 9e91f5177..ec28e0918 100644
--- a/src/widgets/OrdersJournal/types.ts
+++ b/src/widgets/OrdersJournal/types.ts
@@ -1,12 +1,11 @@
 import { ResizableColumnType } from '@components/Table/types/columns';
 import { ResizableTableProps } from '@components/Table/types/table';
 import { PremiumDirection } from '@widgets/OrdersJournal/components/TicketForm/types';
-import { OrderById, TicketProductType } from '@widgets/OrdersJournal/components/TicketModal/types';
+import { TicketProductType } from '@widgets/OrdersJournal/components/TicketModal/types';
 import { SpfiMarketData } from 'types/OrdersJournal.types';
-import { SpfiDraftStatus } from 'types/spfiDrafts';
 import { ReplaceType } from 'types/utilityTypes';
 
-import { FILTER_ALL_VALUE, FILTER_OTHER_VALUE, INSTRUMENT_TYPES } from './constants';
+import { FILTER_ALL_VALUE, INSTRUMENT_TYPES } from './constants';
 
 export enum WidgetTab {
   Incoming = 'INCOMING',
@@ -36,19 +35,12 @@ export type OrderType = WidgetTab.Incoming | WidgetTab.Outcoming;
 type InstrumentType = (typeof INSTRUMENT_TYPES)[number];
 
 export type OrdersFilters = {
-  typeTrade: OrderById['firmId'] | typeof FILTER_ALL_VALUE;
-  typeInstr: OrderById['broker'] | typeof FILTER_ALL_VALUE;
-};
-
-export type DraftsFilters = {
-  status: SpfiDraftStatus.ARCHIVED | typeof FILTER_OTHER_VALUE;
-  counterparties: TradeType | typeof FILTER_ALL_VALUE;
-  brokers: InstrumentType | typeof FILTER_ALL_VALUE;
+  typeTrade: TradeType | typeof FILTER_ALL_VALUE;
+  typeInstr: InstrumentType | typeof FILTER_ALL_VALUE;
 };
 
 export type Order = {
   orderId: number;
-  draftId?: number;
   tradeId: string;
   // YYYY-DD-MM
   date: string;
@@ -122,13 +114,10 @@ export type SavedColumns = {
   brokerDraftsColumns: BrokerDraftsColumns[] | null;
 };
 
-export type OrdersJournalProps = {
-  tab: WidgetTab;
-  hideFilters?: boolean;
-  initialFilters: OrdersFilters;
-  tableState?: TableState;
-  state?: { lastAddedInstrument: string };
-} & SavedColumns;
+export type OrdersJournalProps = OrdersFilters & { tab: WidgetTab; hideFilters?: boolean } & SavedColumns & {
+    tableState?: TableState;
+    state?: { lastAddedInstrument: string };
+  };
 
 export type DataStatus = 'loading' | 'error' | 'success' | 'reconnect';
 
@@ -182,3 +171,48 @@ export type GetDepthListItem = {
 };
 
 export type GetDepthListResponse = GetDepthListItem[];
+
+// Контракты СПФИ
+type ContractOrders = {
+  instrSubtypeId: string;
+  instrSubtypeName: string;
+  key: string;
+  symbol: string;
+  ccy: string;
+  initialFaceValue: string | null;
+  instrIssuerName: string;
+  volToday: number;
+  issKey: string;
+  shortName: string;
+  boardName: string;
+  secName: string;
+  latName: string | null;
+  instrId: number;
+  tf: string;
+  instrName: string;
+  board: string;
+  instrType: string;
+  instrFullName: string;
+  instrIsin: string;
+  instrIssuerId: number;
+  isPrimaryBoard: boolean;
+  isActive: boolean;
+  instrIssuerShortName: string;
+  displayName: string;
+  faceUnit: string;
+  underlyingAsset: string;
+  underlyingType: string;
+  isRepayment: boolean;
+  currencyType: string;
+  instrGroupType: string;
+  optionType: string;
+  groupType: string;
+  repoType: string;
+  month: string;
+  year: string;
+  repoTerm: string | null;
+  repoTermMin: string | null;
+  repoTermMax: string | null;
+  term: string;
+  lastDelDate: string | null;
+};
\ No newline at end of file
diff --git a/src/widgets/OrdersJournal/utils/getCombinedMarketData.ts b/src/widgets/OrdersJournal/utils/getCombinedMarketData.ts
index 40cb26c9e..2b0304af0 100644
--- a/src/widgets/OrdersJournal/utils/getCombinedMarketData.ts
+++ b/src/widgets/OrdersJournal/utils/getCombinedMarketData.ts
@@ -1,4 +1,4 @@
-import { BaseData } from '@modules/pushDates/logic/types';
+import { BaseData } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 import { GetDepthListResponse } from '@widgets/OrdersJournal/types';
 import { SpfiMarketData } from 'types/OrdersJournal.types';
 
diff --git a/src/widgets/OrdersJournal/utils/getIsPatternOrder.ts b/src/widgets/OrdersJournal/utils/getIsPatternOrder.ts
new file mode 100644
index 000000000..b8e2299c7
--- /dev/null
+++ b/src/widgets/OrdersJournal/utils/getIsPatternOrder.ts
@@ -0,0 +1,5 @@
+import { GetTicketOptionsParams } from '../components/TicketModal/types';
+
+export const getIsPatternOrder = (pattern?: GetTicketOptionsParams['pattern']) => !pattern || pattern === 'PATTERN';
+
+export const getIsNoPatternOrder = (pattern?: GetTicketOptionsParams['pattern']) => pattern === 'NOPATTERN';
diff --git a/src/widgets/OrdersJournal/utils/typeGuards.ts b/src/widgets/OrdersJournal/utils/typeGuards.ts
index 79d79c25e..1fc8c224d 100644
--- a/src/widgets/OrdersJournal/utils/typeGuards.ts
+++ b/src/widgets/OrdersJournal/utils/typeGuards.ts
@@ -1,11 +1,11 @@
-import { ComplexValue } from '@uikit/Select/types';
+import { DefaultOptionType } from 'antd/es/cascader';
 
-import { SpfiDraftStatus } from 'types/spfiDrafts';
+import { ComplexValue } from '@uikit/Select/types';
 
 import { DefaultOption } from '../components/TicketModal/types';
 
 // eslint-disable-next-line @typescript-eslint/no-explicit-any -- В typeGuard может приходить любой тип данных
-export const isDefaultOptionType = (item: any): item is DefaultOption =>
+export const isDefaultOptionType = (item: any): item is DefaultOptionType =>
   item !== null &&
   typeof item === 'object' &&
   typeof item.label === 'string' &&
@@ -25,11 +25,3 @@ export const isStringOptionTypeArray = (value: any): value is string[] =>
 // eslint-disable-next-line @typescript-eslint/no-explicit-any -- В typeGuard может приходить любой тип данных
 export const isDefaultOptionArray = (value: any): value is DefaultOption[] =>
   Array.isArray(value) && value.every((item) => isDefaultOptionType(item));
-
-const VALID_CONVENTIONS = ['FOLLOWING', 'MODFOLLOWING', 'PRECEDING'] as const;
-type ValidConvention = (typeof VALID_CONVENTIONS)[number];
-export const isValidConvention = (value: string | null | undefined): value is ValidConvention =>
-  typeof value === 'string' && VALID_CONVENTIONS.includes(value as ValidConvention);
-
-export const isSpfiDraftStatus = (value: string): value is SpfiDraftStatus =>
-  Object.keys(SpfiDraftStatus).includes(value);
diff --git a/src/widgets/OrdersJournal/widget.tsx b/src/widgets/OrdersJournal/widget.tsx
index 42aa03639..2214cb127 100644
--- a/src/widgets/OrdersJournal/widget.tsx
+++ b/src/widgets/OrdersJournal/widget.tsx
@@ -1,5 +1,4 @@
-import isEqual from 'lodash/isEqual';
-import React, { FC, useEffect, useMemo, useRef } from 'react';
+import React, { FC, useMemo } from 'react';
 
 import { ticketFormController } from '@api/controllers/ticketFormController';
 import { OrderButton } from '@components/OrderButton';
@@ -28,6 +27,7 @@ import { WidgetProperties } from './properties/types';
 import { OrdersJournalProps, WidgetTab } from './types';
 import { getRowStylesFunc } from './utils/getRowStyles';
 
+
 export const OrdersJournal: FC<WidgetContentBasicProps<OrdersJournalProps>> = (props) => {
   const { widgetId } = props;
   const {
@@ -38,7 +38,7 @@ export const OrdersJournal: FC<WidgetContentBasicProps<OrdersJournalProps>> = (p
     marketDataColumns,
     brokerDraftsColumns,
     tableState,
-    initialFilters,
+    ...initialFilters
   } = useStore();
 
   const { tab, changeTab } = useTab({ initialTab });
@@ -87,7 +87,7 @@ export const OrdersJournal: FC<WidgetContentBasicProps<OrdersJournalProps>> = (p
         rightBtns={
           <OrderButton
             onClick={() => {
-              dispatch(openCreateTicketModal({ widgetId }));
+              dispatch(openCreateTicketModal({ widgetId, pattern: 'NOPATTERN' }));
               ticketFormController.sendStatistics({ action: TicketStatisticsEvent.Open });
             }}
           />
diff --git a/src/widgets/SpfiPrices/__tests__/config.test.tsx b/src/widgets/SpfiPrices/__tests__/config.test.tsx
index 1e5752969..d6ec564a5 100644
--- a/src/widgets/SpfiPrices/__tests__/config.test.tsx
+++ b/src/widgets/SpfiPrices/__tests__/config.test.tsx
@@ -1,116 +1,9 @@
 import { renderDate, renderDateTime } from '@utils/renderDateTime';
 
-import { cashFlowColumnsConfig, spfiPricesColumnsConfig, tradingResultsColumnsConfig } from '../config';
+import { spfiPricesColumnsConfig, tradingResultsColumnsConfig } from '../config';
+import { renderPrice } from '../utils/renderPrice';
 
 describe('SpfiPrices config', () => {
-  describe('cashFlowColumnsConfig', () => {
-    it('should have correct number of columns', () => {
-      expect(cashFlowColumnsConfig).toHaveLength(8);
-    });
-
-    it('should contain term column', () => {
-      const termColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'term');
-      expect(termColumn).toBeDefined();
-      expect(termColumn?.title).toBe('Срок');
-      expect(termColumn?.key).toBe('term');
-      expect(termColumn?.align).toBe('left');
-      expect(termColumn?.hidden).toBe(false);
-      expect(termColumn?.position).toBe(1);
-      expect(termColumn?.width).toBe(100);
-      expect(termColumn?.minWidth).toBe(100);
-    });
-
-    it('should contain shortName column', () => {
-      const shortNameColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'shortName');
-      expect(shortNameColumn).toBeDefined();
-      expect(shortNameColumn?.title).toBe('Инструмент');
-      expect(shortNameColumn?.key).toBe('shortName');
-      expect(shortNameColumn?.align).toBe('left');
-      expect(shortNameColumn?.hidden).toBe(false);
-      expect(shortNameColumn?.position).toBe(2);
-      expect(shortNameColumn?.width).toBe(120);
-      expect(shortNameColumn?.minWidth).toBe(120);
-    });
-
-    it('should contain strike column with render function', () => {
-      const strikeColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'strike');
-      expect(strikeColumn).toBeDefined();
-      expect(strikeColumn?.title).toBe('Страйк');
-      expect(strikeColumn?.key).toBe('strike');
-      expect(strikeColumn?.align).toBe('right');
-      expect(strikeColumn?.hidden).toBe(false);
-      expect(strikeColumn?.position).toBe(3);
-      expect(strikeColumn?.render).toBeDefined();
-    });
-
-    it('should contain bid column with render function', () => {
-      const bidColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'bid');
-      expect(bidColumn).toBeDefined();
-      expect(bidColumn?.title).toBe('Бид');
-      expect(bidColumn?.key).toBe('bid');
-      expect(bidColumn?.align).toBe('right');
-      expect(bidColumn?.hidden).toBe(false);
-      expect(bidColumn?.position).toBe(4);
-      expect(bidColumn?.render).toBeDefined();
-    });
-
-    it('should contain offer column with render function', () => {
-      const offerColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'offer');
-      expect(offerColumn).toBeDefined();
-      expect(offerColumn?.title).toBe('Аск');
-      expect(offerColumn?.key).toBe('offer');
-      expect(offerColumn?.align).toBe('right');
-      expect(offerColumn?.hidden).toBe(false);
-      expect(offerColumn?.position).toBe(5);
-      expect(offerColumn?.render).toBeDefined();
-    });
-
-    it('should contain bidQty column with render function', () => {
-      const bidQtyColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'bidQty');
-      expect(bidQtyColumn).toBeDefined();
-      expect(bidQtyColumn?.title).toBe('Объём бид');
-      expect(bidQtyColumn?.key).toBe('bidQty');
-      expect(bidQtyColumn?.align).toBe('right');
-      expect(bidQtyColumn?.hidden).toBe(false);
-      expect(bidQtyColumn?.position).toBe(6);
-      expect(bidQtyColumn?.render).toBeDefined();
-    });
-
-    it('should contain askQty column with render function', () => {
-      const askQtyColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'askQty');
-      expect(askQtyColumn).toBeDefined();
-      expect(askQtyColumn?.title).toBe('Объём аск');
-      expect(askQtyColumn?.key).toBe('askQty');
-      expect(askQtyColumn?.align).toBe('right');
-      expect(askQtyColumn?.hidden).toBe(false);
-      expect(askQtyColumn?.position).toBe(7);
-      expect(askQtyColumn?.render).toBeDefined();
-    });
-
-    it('should contain sendingTime column with renderDateTime', () => {
-      const sendingTimeColumn = cashFlowColumnsConfig.find((col) => col.dataIndex === 'sendingTime');
-      expect(sendingTimeColumn).toBeDefined();
-      expect(sendingTimeColumn?.title).toBe('Время обновления');
-      expect(sendingTimeColumn?.key).toBe('sendingTime');
-      expect(sendingTimeColumn?.align).toBe('left');
-      expect(sendingTimeColumn?.hidden).toBe(false);
-      expect(sendingTimeColumn?.position).toBe(8);
-      expect(sendingTimeColumn?.render).toBe(renderDateTime);
-    });
-
-    it('should have unique positions', () => {
-      const positions = cashFlowColumnsConfig.map((col) => col.position);
-      const uniquePositions = new Set(positions);
-      expect(uniquePositions.size).toBe(positions.length);
-    });
-
-    it('should have no hidden columns', () => {
-      cashFlowColumnsConfig.forEach((column) => {
-        expect(column.hidden).toBe(false);
-      });
-    });
-  });
-
   describe('spfiPricesColumnsConfig', () => {
     it('should have correct number of columns', () => {
       expect(spfiPricesColumnsConfig).toHaveLength(9);
@@ -128,19 +21,19 @@ describe('SpfiPrices config', () => {
       expect(termColumn?.minWidth).toBe(100);
     });
 
-    it('should contain symbol column', () => {
-      const symbolColumn = spfiPricesColumnsConfig.find((col) => col.dataIndex === 'symbol');
-      expect(symbolColumn).toBeDefined();
-      expect(symbolColumn?.title).toBe('Инструмент');
-      expect(symbolColumn?.key).toBe('symbol');
-      expect(symbolColumn?.align).toBe('left');
-      expect(symbolColumn?.hidden).toBe(false);
-      expect(symbolColumn?.position).toBe(2);
-      expect(symbolColumn?.width).toBe(100);
-      expect(symbolColumn?.minWidth).toBe(100);
+    it('should contain instrument column', () => {
+      const instrumentColumn = spfiPricesColumnsConfig.find((col) => col.dataIndex === 'symbol');
+      expect(instrumentColumn).toBeDefined();
+      expect(instrumentColumn?.title).toBe('Инструмент');
+      expect(instrumentColumn?.key).toBe('symbol');
+      expect(instrumentColumn?.align).toBe('left');
+      expect(instrumentColumn?.hidden).toBe(false);
+      expect(instrumentColumn?.position).toBe(2);
+      expect(instrumentColumn?.width).toBe(100);
+      expect(instrumentColumn?.minWidth).toBe(100);
     });
 
-    it('should contain strike column with render function', () => {
+    it('should contain strike column with renderPrice', () => {
       const strikeColumn = spfiPricesColumnsConfig.find((col) => col.dataIndex === 'strike');
       expect(strikeColumn).toBeDefined();
       expect(strikeColumn?.title).toBe('Страйк');
@@ -148,10 +41,10 @@ describe('SpfiPrices config', () => {
       expect(strikeColumn?.align).toBe('right');
       expect(strikeColumn?.hidden).toBe(false);
       expect(strikeColumn?.position).toBe(3);
-      expect(strikeColumn?.render).toBeDefined();
+      expect(strikeColumn?.render).toBe(renderPrice);
     });
 
-    it('should contain bid column with render function', () => {
+    it('should contain bid column with renderPrice', () => {
       const bidColumn = spfiPricesColumnsConfig.find((col) => col.dataIndex === 'bid');
       expect(bidColumn).toBeDefined();
       expect(bidColumn?.title).toBe('Бид');
@@ -159,10 +52,10 @@ describe('SpfiPrices config', () => {
       expect(bidColumn?.align).toBe('right');
       expect(bidColumn?.hidden).toBe(false);
       expect(bidColumn?.position).toBe(4);
-      expect(bidColumn?.render).toBeDefined();
+      expect(bidColumn?.render).toBe(renderPrice);
     });
 
-    it('should contain ask column with render function', () => {
+    it('should contain ask column with renderPrice', () => {
       const askColumn = spfiPricesColumnsConfig.find((col) => col.dataIndex === 'ask');
       expect(askColumn).toBeDefined();
       expect(askColumn?.title).toBe('Аск');
@@ -170,10 +63,10 @@ describe('SpfiPrices config', () => {
       expect(askColumn?.align).toBe('right');
       expect(askColumn?.hidden).toBe(false);
       expect(askColumn?.position).toBe(5);
-      expect(askColumn?.render).toBeDefined();
+      expect(askColumn?.render).toBe(renderPrice);
     });
 
-    it('should contain nearLegRate column with render function', () => {
+    it('should contain nearLegRate column', () => {
       const nearLegRateColumn = spfiPricesColumnsConfig.find((col) => col.dataIndex === 'nearLegRate');
       expect(nearLegRateColumn).toBeDefined();
       expect(nearLegRateColumn?.title).toBe('Курс первой ноги');
@@ -181,7 +74,6 @@ describe('SpfiPrices config', () => {
       expect(nearLegRateColumn?.align).toBe('right');
       expect(nearLegRateColumn?.hidden).toBe(false);
       expect(nearLegRateColumn?.position).toBe(6);
-      expect(nearLegRateColumn?.render).toBeDefined();
     });
 
     it('should contain transactionDate column with renderDate', () => {
@@ -254,17 +146,17 @@ describe('SpfiPrices config', () => {
       expect(termColumn?.position).toBe(1);
     });
 
-    it('should contain symbol column', () => {
-      const symbolColumn = tradingResultsColumnsConfig.find((col) => col.dataIndex === 'symbol');
-      expect(symbolColumn).toBeDefined();
-      expect(symbolColumn?.title).toBe('Инструмент');
-      expect(symbolColumn?.key).toBe('symbol');
-      expect(symbolColumn?.align).toBe('left');
-      expect(symbolColumn?.hidden).toBe(false);
-      expect(symbolColumn?.position).toBe(2);
+    it('should contain instrument column', () => {
+      const instrumentColumn = tradingResultsColumnsConfig.find((col) => col.dataIndex === 'symbol');
+      expect(instrumentColumn).toBeDefined();
+      expect(instrumentColumn?.title).toBe('Инструмент');
+      expect(instrumentColumn?.key).toBe('symbol');
+      expect(instrumentColumn?.align).toBe('left');
+      expect(instrumentColumn?.hidden).toBe(false);
+      expect(instrumentColumn?.position).toBe(2);
     });
 
-    it('should contain strike column with render function', () => {
+    it('should contain strike column with renderPrice', () => {
       const strikeColumn = tradingResultsColumnsConfig.find((col) => col.dataIndex === 'strike');
       expect(strikeColumn).toBeDefined();
       expect(strikeColumn?.title).toBe('Страйк');
@@ -272,10 +164,10 @@ describe('SpfiPrices config', () => {
       expect(strikeColumn?.align).toBe('right');
       expect(strikeColumn?.hidden).toBe(false);
       expect(strikeColumn?.position).toBe(3);
-      expect(strikeColumn?.render).toBeDefined();
+      expect(strikeColumn?.render).toBe(renderPrice);
     });
 
-    it('should contain price column with render function', () => {
+    it('should contain price column with renderPrice', () => {
       const priceColumn = tradingResultsColumnsConfig.find((col) => col.dataIndex === 'price');
       expect(priceColumn).toBeDefined();
       expect(priceColumn?.title).toBe('Цена');
@@ -283,10 +175,10 @@ describe('SpfiPrices config', () => {
       expect(priceColumn?.align).toBe('right');
       expect(priceColumn?.hidden).toBe(false);
       expect(priceColumn?.position).toBe(4);
-      expect(priceColumn?.render).toBeDefined();
+      expect(priceColumn?.render).toBe(renderPrice);
     });
 
-    it('should contain nearLegRate column with render function', () => {
+    it('should contain nearLegRate column', () => {
       const nearLegRateColumn = tradingResultsColumnsConfig.find((col) => col.dataIndex === 'nearLegRate');
       expect(nearLegRateColumn).toBeDefined();
       expect(nearLegRateColumn?.title).toBe('Курс первой ноги');
@@ -294,7 +186,6 @@ describe('SpfiPrices config', () => {
       expect(nearLegRateColumn?.align).toBe('right');
       expect(nearLegRateColumn?.hidden).toBe(false);
       expect(nearLegRateColumn?.position).toBe(5);
-      expect(nearLegRateColumn?.render).toBeDefined();
     });
 
     it('should contain date column with renderDate', () => {
@@ -329,19 +220,6 @@ describe('SpfiPrices config', () => {
   });
 
   describe('column type checking', () => {
-    it('cashFlowColumnsConfig should have correct types', () => {
-      cashFlowColumnsConfig.forEach((column) => {
-        expect(column).toHaveProperty('title');
-        expect(column).toHaveProperty('dataIndex');
-        expect(column).toHaveProperty('key');
-        expect(column).toHaveProperty('align');
-        expect(column).toHaveProperty('hidden');
-        expect(column).toHaveProperty('position');
-        expect(column).toHaveProperty('width');
-        expect(column).toHaveProperty('minWidth');
-      });
-    });
-
     it('spfiPricesColumnsConfig should have correct types', () => {
       spfiPricesColumnsConfig.forEach((column) => {
         expect(column).toHaveProperty('title');
@@ -368,4 +246,4 @@ describe('SpfiPrices config', () => {
       });
     });
   });
-});
\ No newline at end of file
+});
diff --git a/src/widgets/SpfiPrices/components/FiltersPanel/FiltersPanel.tsx b/src/widgets/SpfiPrices/components/FiltersPanel/FiltersPanel.tsx
index 5d9051ab6..5197469bc 100644
--- a/src/widgets/SpfiPrices/components/FiltersPanel/FiltersPanel.tsx
+++ b/src/widgets/SpfiPrices/components/FiltersPanel/FiltersPanel.tsx
@@ -2,9 +2,6 @@ import { RangePickerProps } from 'antd/es/date-picker';
 import React, { useMemo, useState } from 'react';
 
 import { RangePickerMad } from '@components/RangePicker/RangePickerMad';
-import { commonDateFormat } from '@configs/standartDateFormat';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { isSPFIBrokerSelector, isSPFITraderSelector } from '@store/selectors/user';
 import { Tabs } from '@uikit/Tabs';
 import { DEFAULT_FILTERS, TABS } from '@widgets/SpfiPrices/const';
 import { ChangeFilters, ChangeTab, TradingResultsFilters, WidgetTab } from '@widgets/SpfiPrices/types';
@@ -24,14 +21,6 @@ type FiltersPanelProps = {
 export const FiltersPanel = ({ filters, changeFilters, tab, changeTab }: FiltersPanelProps) => {
   const [allowClearPicker, setAllowClearPicker] = useState(() => !isDefaultDatesRange(filters));
 
-  const isSpfiTrader = useAppSelect(isSPFITraderSelector);
-  const isSpfiBroker = useAppSelect(isSPFIBrokerSelector);
-
-  const filteredTabs = useMemo(
-    () => TABS?.filter((tabItem) => tabItem.key !== WidgetTab.CashFlowPrices || isSpfiTrader || isSpfiBroker),
-    [isSpfiTrader, isSpfiBroker],
-  );
-
   const dateRange: DatesRange = useMemo(() => {
     if (tab === WidgetTab.TradingResults) {
       return [filters.dateFrom, filters.dateTo];
@@ -41,8 +30,6 @@ export const FiltersPanel = ({ filters, changeFilters, tab, changeTab }: Filters
   }, [filters.dateFrom, filters.dateTo, tab]);
   const rangePickerDisabled = tab !== WidgetTab.TradingResults;
 
-  const showFilters = tab === WidgetTab.TradingResults;
-
   const handleChangeDateRange: RangePickerProps['onChange'] = (dates) => {
     const newDates = {
       dateFrom: dates?.[0] ?? DEFAULT_FILTERS.dateFrom,
@@ -52,25 +39,18 @@ export const FiltersPanel = ({ filters, changeFilters, tab, changeTab }: Filters
     setAllowClearPicker(!isDefaultDatesRange(newDates));
   };
 
-  const handleChangeTab = (newTab: string) => {
-    const tabItem = filteredTabs?.find((t) => t.key === newTab);
-    if (tabItem) {
-      changeTab(newTab as WidgetTab);
-    }
-  };
-
   return (
     <>
       <Tabs
         activeKey={tab}
-        items={filteredTabs}
-        onChange={handleChangeTab}
+        items={TABS}
+        onChange={(newTab) => changeTab(newTab as WidgetTab)}
       />
 
-      {showFilters && (
+      {tab !== WidgetTab.SpfiPrices && (
         <div className={styles.filters}>
           <RangePickerMad
-            format={commonDateFormat.dateFormat}
+            format="DD.MM.YYYY"
             value={dateRange}
             disabled={rangePickerDisabled}
             onChange={handleChangeDateRange}
diff --git a/src/widgets/SpfiPrices/components/TableWrapper/TableWrapper.tsx b/src/widgets/SpfiPrices/components/TableWrapper/TableWrapper.tsx
index 43e199bf1..8d4181e3d 100644
--- a/src/widgets/SpfiPrices/components/TableWrapper/TableWrapper.tsx
+++ b/src/widgets/SpfiPrices/components/TableWrapper/TableWrapper.tsx
@@ -2,26 +2,36 @@ import React from 'react';
 
 import { EmptyData } from '@components/EmptyData';
 import { WarningSharpIcon } from '@components/Icons/WarningSharpIcon';
+import { SkeletonTable } from '@components/SkeletonTable';
 import { ResizableTableProps, Table } from '@components/Table';
 
 import styles from './TableWrapper.module.scss';
 
 type TableWrapperProps<T extends Record<string, unknown>> = ResizableTableProps<T> & {
   noData: boolean;
-  isLoading: boolean;
+  loading: boolean;
 };
 
 /** Определяет, что показывать: скелетон или таблицу */
-export const TableWrapper = <T extends Record<string, unknown>>(tableProps: TableWrapperProps<T>) => (
-  <Table
-    {...tableProps}
-    emptyStateComponent={
+export const TableWrapper = <T extends Record<string, unknown>>({
+  noData,
+  loading,
+  ...tableProps
+}: TableWrapperProps<T>) => {
+  if (noData) {
+    if (loading) {
+      return <SkeletonTable rowCount={5} />;
+    }
+
+    return (
       <EmptyData
         icon={<WarningSharpIcon className={styles.emptyIcon} />}
         title="Нет данных"
         secondaryText="На данный момент невозможно получить данные"
         className={styles.emptyState}
       />
-    }
-  />
-);
+    );
+  }
+
+  return <Table {...tableProps} />;
+};
diff --git a/src/widgets/SpfiPrices/config.tsx b/src/widgets/SpfiPrices/config.tsx
index b7f1b899f..9d5746ce7 100644
--- a/src/widgets/SpfiPrices/config.tsx
+++ b/src/widgets/SpfiPrices/config.tsx
@@ -4,12 +4,7 @@ import { NumberCell } from '@components/NumberCell';
 import { renderDate, renderDateTime } from '@utils/renderDateTime';
 
 import { SpfiPricesColumns, TradingResultsColumns } from './types';
-import {
-  renderPlainPrice,
-  renderPriceWithHighlight,
-  renderPriceWithStaticPercent,
-  renderPriceWithTypeWithHighlight,
-} from './utils/renderPrice';
+import { renderPrice } from './utils/renderPrice';
 
 const TERM_COLUMN = {
   title: 'Срок',
@@ -42,7 +37,7 @@ const STRIKE_COLUMN = {
   position: 3,
   width: 100,
   minWidth: 100,
-  render: renderPriceWithStaticPercent,
+  render: renderPrice,
 };
 
 const NEAR_LEG_RATE_COLUMN = {
@@ -57,88 +52,6 @@ const NEAR_LEG_RATE_COLUMN = {
   render: (value: number | null) => <NumberCell cellNumber={Number(value) || null} />,
 };
 
-export const cashFlowColumnsConfig: SpfiPricesColumns[] = [
-  {
-    title: 'Срок',
-    dataIndex: 'term',
-    key: 'term',
-    align: 'left' as const,
-    hidden: false,
-    position: 1,
-    width: 100,
-    minWidth: 100,
-  },
-  {
-    title: 'Инструмент',
-    dataIndex: 'shortName',
-    key: 'shortName',
-    align: 'left' as const,
-    hidden: false,
-    position: 2,
-    width: 120,
-    minWidth: 120,
-  },
-  {
-    ...STRIKE_COLUMN,
-    position: 3,
-  },
-  {
-    title: 'Бид',
-    dataIndex: 'bid',
-    key: 'bid',
-    align: 'right' as const,
-    hidden: false,
-    position: 4,
-    width: 100,
-    minWidth: 100,
-    render: renderPriceWithTypeWithHighlight,
-  },
-  {
-    title: 'Аск',
-    dataIndex: 'offer',
-    key: 'offer',
-    align: 'right' as const,
-    hidden: false,
-    position: 5,
-    width: 100,
-    minWidth: 100,
-    render: renderPriceWithTypeWithHighlight,
-  },
-  {
-    title: 'Объём бид',
-    dataIndex: 'bidQty',
-    key: 'bidQty',
-    align: 'right' as const,
-    hidden: false,
-    position: 6,
-    width: 100,
-    minWidth: 100,
-    render: renderPlainPrice,
-  },
-  {
-    title: 'Объём аск',
-    dataIndex: 'askQty',
-    key: 'askQty',
-    align: 'right' as const,
-    hidden: false,
-    position: 7,
-    width: 100,
-    minWidth: 100,
-    render: renderPlainPrice,
-  },
-  {
-    title: 'Время обновления',
-    dataIndex: 'sendingTime',
-    key: 'sendingTime',
-    align: 'left' as const,
-    hidden: false,
-    position: 8,
-    width: 100,
-    minWidth: 100,
-    render: renderDateTime,
-  },
-];
-
 export const spfiPricesColumnsConfig: SpfiPricesColumns[] = [
   {
     ...TERM_COLUMN,
@@ -158,7 +71,7 @@ export const spfiPricesColumnsConfig: SpfiPricesColumns[] = [
     position: 4,
     width: 100,
     minWidth: 100,
-    render: renderPriceWithTypeWithHighlight,
+    render: renderPrice,
   },
   {
     title: 'Аск',
@@ -169,12 +82,11 @@ export const spfiPricesColumnsConfig: SpfiPricesColumns[] = [
     position: 5,
     width: 100,
     minWidth: 100,
-    render: renderPriceWithTypeWithHighlight,
+    render: renderPrice,
   },
   {
     ...NEAR_LEG_RATE_COLUMN,
     position: 6,
-    render: renderPriceWithHighlight,
   },
   {
     title: 'Начальная дата',
@@ -232,12 +144,11 @@ export const tradingResultsColumnsConfig: TradingResultsColumns[] = [
     position: 4,
     width: 100,
     minWidth: 100,
-    render: renderPlainPrice,
+    render: renderPrice,
   },
   {
     ...NEAR_LEG_RATE_COLUMN,
     position: 5,
-    render: renderPriceWithHighlight,
   },
   {
     title: 'Дата',
diff --git a/src/widgets/SpfiPrices/const.ts b/src/widgets/SpfiPrices/const.ts
index f6c2fe7ef..556be7ef8 100644
--- a/src/widgets/SpfiPrices/const.ts
+++ b/src/widgets/SpfiPrices/const.ts
@@ -3,19 +3,7 @@ import dayjs from 'dayjs';
 import { commonDateFormat } from '@configs/standartDateFormat';
 import { TabsItems } from '@uikit/Tabs';
 
-import {
-  askQtySort,
-  askSort,
-  bidQtySort,
-  bidSort,
-  dateSortWithSymbolAndTermSort,
-  nearLegRateSort,
-  offerSort,
-  shortNameSortWithTermSort,
-  strikeSort,
-  symbolSortWithTermSort,
-  termSorter,
-} from '@utils/sortUtils';
+import { dateSortWithSymbolAndTermSort, symbolSortWithTermSort, termSorter } from '@utils/sortUtils';
 import { FilterValuesType } from '@widgets/SpfiPrices/components/FiltersPanel/logic/filters/useModal';
 import { SecondLegConvention } from '@widgets/SwapCalculator/types/table';
 
@@ -26,7 +14,6 @@ export const LOADING_TIMEOUT = 3000;
 export const COLUMN_KEYS: Record<WidgetTab, keyof WidgetColumns> = {
   [WidgetTab.SpfiPrices]: 'spfiPricesColumns',
   [WidgetTab.TradingResults]: 'tradingResultColumns',
-  [WidgetTab.CashFlowPrices]: 'cashFlowColumns',
 };
 
 export const DEFAULT_WIDGET_TAB: WidgetTab = WidgetTab.SpfiPrices;
@@ -40,7 +27,6 @@ export const DEFAULT_DATE_TO = dayjs().format(commonDateFormat.backendDateFormat
 export const TABS: TabsItems = [
   { key: WidgetTab.SpfiPrices, label: 'Лучшие цены' },
   { key: WidgetTab.TradingResults, label: 'Итоги торгов' },
-  { key: WidgetTab.CashFlowPrices, label: 'Поток цен' },
 ];
 
 export const DEFAULT_FILTERS: TradingResultsFilters = {
@@ -60,20 +46,10 @@ export const TabLabelsMap = TABS.reduce<Partial<Record<WidgetTab, string>>>((acc
 export const TABLE_STATE_KEYS: Record<WidgetTab, TableStateKeys[WidgetTab]> = {
   [WidgetTab.SpfiPrices]: 'spfiPrices',
   [WidgetTab.TradingResults]: 'tradingResults',
-  [WidgetTab.CashFlowPrices]: 'cashFlow',
 };
 
 export const SORTING_HANDLERS = {
   term: termSorter,
   symbol: symbolSortWithTermSort,
   date: dateSortWithSymbolAndTermSort,
-  // Для вкладки Поток Цен
-  shortName: shortNameSortWithTermSort,
-  bid: bidSort,
-  ask: askSort,
-  offer: offerSort,
-  strike: strikeSort,
-  bidQty: bidQtySort,
-  askQty: askQtySort,
-  nearLegRate: nearLegRateSort,
 };
diff --git a/src/widgets/SpfiPrices/hooks/__tests__/useCashFlowData.test.ts b/src/widgets/SpfiPrices/hooks/__tests__/useCashFlowData.test.ts
deleted file mode 100644
index a7992a93f..000000000
--- a/src/widgets/SpfiPrices/hooks/__tests__/useCashFlowData.test.ts
+++ /dev/null
@@ -1,291 +0,0 @@
-import { act, renderHook } from '@testing-library/react';
-
-import { wsSpfiDraftsStompClient } from '@api/websokets/classes/WSSpfiDraftsStompClient';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { useWSState } from '@hooks/useWSState';
-
-import { CashFlow } from '@widgets/SpfiPrices/types';
-import { updateCashFlow } from '@widgets/SpfiPrices/utils/updateCashFlow';
-
-import { useCashFlowData } from '../useCashFlowData';
-
-jest.mock('@api/websokets/classes/WSSpfiDraftsStompClient');
-jest.mock('@hooks/useWSState');
-jest.mock('@hooks/useAppSelector');
-jest.mock('@widgets/SpfiPrices/utils/updateCashFlow');
-jest.mock('@widgets/SpfiPrices/const', () => ({ LOADING_TIMEOUT: 3000 }));
-
-const mockUseWSState = useWSState as jest.MockedFunction<typeof useWSState>;
-const mockUseAppSelect = useAppSelect as jest.MockedFunction<typeof useAppSelect>;
-const mockWsSpfiDraftsStompClient = wsSpfiDraftsStompClient as jest.MockedObject<typeof wsSpfiDraftsStompClient>;
-const mockUpdateCashFlow = updateCashFlow as jest.MockedFunction<typeof updateCashFlow>;
-
-describe('useCashFlowData', () => {
-  const mockSubscribeToCashFlow = jest.fn();
-  const mockUnsubscribe = jest.fn();
-
-  const createMockCashFlow = (count: number): CashFlow[] =>
-    Array.from({ length: count }, (_, i) => ({
-      term: `term${i}`,
-      instr: `instr${i}`,
-      shortName: `SHORT${i}`,
-      bid: 100 + i,
-      offer: 101 + i,
-      bidQty: 1,
-      askQty: 1,
-      strike: null,
-      sendingTime: new Date().toISOString(),
-    })) as CashFlow[];
-
-  const setupMocks = (isActivated: boolean, isSpfiBroker: boolean) => {
-    mockUpdateCashFlow.mockImplementation((prev: CashFlow[]) => prev || []);
-    mockUnsubscribe.mockReturnValue(undefined);
-    mockUseWSState.mockReturnValue(isActivated);
-    mockUseAppSelect.mockReturnValue(isSpfiBroker);
-    mockWsSpfiDraftsStompClient.subscribeToCashFlow = mockSubscribeToCashFlow.mockReturnValue({
-      unsubscribe: mockUnsubscribe,
-    });
-  };
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-    jest.useFakeTimers();
-    setupMocks(false, true);
-  });
-
-  afterEach(() => {
-    jest.useRealTimers();
-  });
-
-  describe('spfiBroker check', () => {
-    it('should return empty data when user is not spfi broker', () => {
-      setupMocks(true, false);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      expect(result.current.data).toEqual([]);
-      expect(result.current.loading).toBe(false);
-    });
-
-    it('should not subscribe when user is not spfi broker', () => {
-      setupMocks(true, false);
-
-      renderHook(() => useCashFlowData());
-
-      expect(mockSubscribeToCashFlow).not.toHaveBeenCalled();
-    });
-
-    it('should return data and loading when user is spfi broker', () => {
-      setupMocks(false, true);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      expect(result.current).toHaveProperty('data');
-      expect(result.current).toHaveProperty('loading');
-    });
-  });
-
-  describe('loading state', () => {
-    it('should set loading to true when activated', () => {
-      setupMocks(false, true);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      expect(result.current.loading).toBe(true);
-    });
-
-    it('should set loading to false after timeout', async () => {
-      setupMocks(false, true);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(3000);
-      });
-
-      expect(result.current.loading).toBe(false);
-    });
-  });
-
-  describe('subscription', () => {
-    it('should subscribe when websocket is activated', async () => {
-      setupMocks(true, true);
-
-      renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockSubscribeToCashFlow).toHaveBeenCalledTimes(1);
-    });
-
-    it('should not subscribe when websocket is not activated', async () => {
-      setupMocks(false, true);
-
-      renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockSubscribeToCashFlow).not.toHaveBeenCalled();
-    });
-
-    it('should call updateCashFlow when data is received', async () => {
-      setupMocks(true, true);
-      let capturedCallback: ((cashFlow: CashFlow[]) => void) | undefined;
-
-      mockSubscribeToCashFlow.mockImplementation((cb: (cashFlow: CashFlow[]) => void) => {
-        capturedCallback = cb;
-        return { unsubscribe: mockUnsubscribe };
-      });
-
-      renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      const mockData = createMockCashFlow(3);
-
-      await act(async () => {
-        capturedCallback?.(mockData);
-      });
-
-      expect(mockUpdateCashFlow).toHaveBeenCalledWith([], mockData);
-    });
-
-    it('should set loading to false after receiving data', async () => {
-      setupMocks(true, true);
-      let capturedCallback: ((cashFlow: CashFlow[]) => void) | undefined;
-
-      mockSubscribeToCashFlow.mockImplementation((cb: (cashFlow: CashFlow[]) => void) => {
-        capturedCallback = cb;
-        return { unsubscribe: mockUnsubscribe };
-      });
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      await act(async () => {
-        capturedCallback?.(createMockCashFlow(2));
-      });
-
-      expect(result.current.loading).toBe(false);
-    });
-  });
-
-  describe('subscription lifecycle', () => {
-    it('should unsubscribe when isActivated changes to false', async () => {
-      let isActivated = true;
-      mockUseWSState.mockImplementation(() => isActivated);
-      mockSubscribeToCashFlow.mockReturnValue({ unsubscribe: mockUnsubscribe });
-
-      const { rerender } = renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockSubscribeToCashFlow).toHaveBeenCalled();
-
-      isActivated = false;
-      rerender();
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockUnsubscribe).toHaveBeenCalled();
-    });
-
-    it('should clean up when isSpfiBroker changes to false', async () => {
-      setupMocks(true, true);
-      mockSubscribeToCashFlow.mockReturnValue({ unsubscribe: mockUnsubscribe });
-
-      const { rerender } = renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockSubscribeToCashFlow).toHaveBeenCalled();
-
-      mockUseAppSelect.mockReturnValue(false);
-      rerender();
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockUnsubscribe).toHaveBeenCalled();
-    });
-  });
-
-  describe('data filtering', () => {
-    it('should filter out items with null bid and offer', async () => {
-      setupMocks(true, true);
-      let capturedCallback: ((cashFlow: CashFlow[]) => void) | undefined;
-
-      mockSubscribeToCashFlow.mockImplementation((cb: (cashFlow: CashFlow[]) => void) => {
-        capturedCallback = cb;
-        return { unsubscribe: mockUnsubscribe };
-      });
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      const mockData = createMockCashFlow(4);
-
-      await act(async () => {
-        capturedCallback?.(mockData);
-      });
-
-      expect(result.current.data.every((item) => item.bid !== null || item.offer !== null)).toBe(true);
-    });
-
-    it('should return empty data array initially', () => {
-      setupMocks(false, true);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      expect(result.current.data).toEqual([]);
-    });
-  });
-
-  describe('return value structure', () => {
-    it('should return data and loading properties with correct types', () => {
-      setupMocks(false, true);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      expect(result.current).toHaveProperty('data');
-      expect(result.current).toHaveProperty('loading');
-      expect(Array.isArray(result.current.data)).toBe(true);
-      expect(typeof result.current.loading).toBe('boolean');
-    });
-
-    it('should return false loading when isSpfiBroker is false regardless of state', () => {
-      setupMocks(true, false);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      expect(result.current.loading).toBe(false);
-    });
-
-    it('should return empty data when isSpfiBroker is false regardless of state', () => {
-      setupMocks(true, false);
-
-      const { result } = renderHook(() => useCashFlowData());
-
-      expect(result.current.data).toEqual([]);
-    });
-  });
-});
diff --git a/src/widgets/SpfiPrices/hooks/__tests__/useSpfiPrices.test.ts b/src/widgets/SpfiPrices/hooks/__tests__/useSpfiPrices.test.ts
deleted file mode 100644
index 42519c243..000000000
--- a/src/widgets/SpfiPrices/hooks/__tests__/useSpfiPrices.test.ts
+++ /dev/null
@@ -1,251 +0,0 @@
-import { renderHook } from '@testing-library/react';
-import { act } from 'react-dom/test-utils';
-
-import { wsSpfiPricesStompClient } from '@api/websokets/classes/WSSpfiPricesStompClient';
-import { useWSState } from '@hooks/useWSState';
-
-import { SpfiPricesData } from '../../types';
-import { updateSpfiPrices } from '../../utils/updateSpfiPrices';
-
-import { useSpfiPrices } from '../useSpfiPrices';
-
-jest.mock('@api/websokets/classes/WSSpfiPricesStompClient');
-jest.mock('@hooks/useWSState');
-jest.mock('../../utils/updateSpfiPrices');
-jest.mock('../../const', () => ({ LOADING_TIMEOUT: 3000 }));
-
-const mockUpdateSpfiPrices = updateSpfiPrices as jest.MockedFunction<typeof updateSpfiPrices>;
-const mockUseWSState = useWSState as jest.MockedFunction<typeof useWSState>;
-const mockWsSpfiPricesStompClient = wsSpfiPricesStompClient as jest.MockedObject<typeof wsSpfiPricesStompClient>;
-
-describe('useSpfiPrices', () => {
-  const mockActivate = jest.fn();
-  const mockResetSession = jest.fn();
-  const mockSubscribeToSpfiPrices = jest.fn();
-  const mockUnsubscribe = jest.fn();
-
-  const createMockPrices = (count: number): SpfiPricesData[] =>
-    Array.from({ length: count }, (_, i) => ({
-      term: `term${i}`,
-      symbol: `symbol${i}`,
-      bid: i % 2 === 0 ? ((100 + i) as number | null) : null,
-      ask: i % 2 === 0 ? ((101 + i) as number | null) : null,
-      sendingTime: new Date().toISOString(),
-      startDate: null,
-      endDate: null,
-      nearLegRate: null,
-      strike: null,
-      secondDate: null,
-      dayCount: null,
-    }));
-
-  const setupMocks = (isActive: boolean) => {
-    mockUpdateSpfiPrices.mockImplementation((prev: SpfiPricesData[]) => prev || []);
-    mockUnsubscribe.mockReturnValue(undefined);
-    mockUseWSState.mockReturnValue(isActive);
-    mockWsSpfiPricesStompClient.activate = mockActivate;
-    mockWsSpfiPricesStompClient.resetSession = mockResetSession;
-    mockWsSpfiPricesStompClient.subscribeToSpfiPrices = mockSubscribeToSpfiPrices.mockReturnValue({
-      unsubscribe: mockUnsubscribe,
-    });
-  };
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-    jest.useFakeTimers();
-    setupMocks(false);
-  });
-
-  afterEach(() => {
-    jest.useRealTimers();
-  });
-
-  describe('initialization', () => {
-    it('should activate websocket client on mount', () => {
-      renderHook(() => useSpfiPrices());
-
-      expect(mockActivate).toHaveBeenCalledTimes(1);
-    });
-
-    it('should call resetSession only once on first mount', () => {
-      const { rerender } = renderHook(() => useSpfiPrices());
-      rerender();
-
-      expect(mockResetSession).toHaveBeenCalledTimes(1);
-    });
-  });
-
-  describe('loading state', () => {
-    it('should set loading to true when websocket activates', () => {
-      const { result } = renderHook(() => useSpfiPrices());
-
-      expect(result.current.loading).toBe(true);
-    });
-
-    it('should set loading to false after timeout', async () => {
-      const { result } = renderHook(() => useSpfiPrices());
-
-      expect(result.current.loading).toBe(true);
-
-      await act(async () => {
-        jest.advanceTimersByTime(3000);
-      });
-
-      expect(result.current.loading).toBe(false);
-    });
-  });
-
-  describe('subscription', () => {
-    it('should subscribe when websocket is activated', async () => {
-      setupMocks(true);
-
-      renderHook(() => useSpfiPrices());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockSubscribeToSpfiPrices).toHaveBeenCalledTimes(1);
-    });
-
-    it('should call updateSpfiPrices when prices are received', async () => {
-      setupMocks(true);
-      let capturedCallback: ((prices: SpfiPricesData[]) => void) | undefined;
-
-      mockSubscribeToSpfiPrices.mockImplementation((cb: (prices: SpfiPricesData[]) => void) => {
-        capturedCallback = cb;
-        return { unsubscribe: mockUnsubscribe };
-      });
-
-      renderHook(() => useSpfiPrices());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      const mockData = createMockPrices(3);
-
-      await act(async () => {
-        capturedCallback?.(mockData);
-      });
-
-      expect(mockUpdateSpfiPrices).toHaveBeenCalledWith([], mockData);
-    });
-
-    it('should set loading to false after receiving prices', async () => {
-      setupMocks(true);
-      let capturedCallback: ((prices: SpfiPricesData[]) => void) | undefined;
-
-      mockSubscribeToSpfiPrices.mockImplementation((cb: (prices: SpfiPricesData[]) => void) => {
-        capturedCallback = cb;
-        return { unsubscribe: mockUnsubscribe };
-      });
-
-      const { result } = renderHook(() => useSpfiPrices());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      await act(async () => {
-        capturedCallback?.(createMockPrices(2));
-      });
-
-      expect(result.current.loading).toBe(false);
-    });
-
-    it('should unsubscribe and resubscribe when isActivated toggles', async () => {
-      let isActive = true;
-      mockUseWSState.mockImplementation(() => isActive);
-      mockSubscribeToSpfiPrices.mockReturnValue({ unsubscribe: mockUnsubscribe });
-
-      const { rerender } = renderHook(() => useSpfiPrices());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockSubscribeToSpfiPrices).toHaveBeenCalled();
-
-      isActive = false;
-      rerender();
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      expect(mockUnsubscribe).toHaveBeenCalled();
-    });
-  });
-
-  describe('data filtering', () => {
-    it('should filter out items with null bid or ask', async () => {
-      setupMocks(true);
-      let capturedCallback: ((prices: SpfiPricesData[]) => void) | undefined;
-
-      mockSubscribeToSpfiPrices.mockImplementation((cb: (prices: SpfiPricesData[]) => void) => {
-        capturedCallback = cb;
-        return { unsubscribe: mockUnsubscribe };
-      });
-
-      const { result } = renderHook(() => useSpfiPrices());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      const mockData = createMockPrices(4);
-
-      await act(async () => {
-        capturedCallback?.(mockData);
-      });
-
-      expect(result.current.data.every((item) => item.bid !== null && item.ask !== null)).toBe(true);
-    });
-  });
-
-  describe('data management', () => {
-    it('should use updateSpfiPrices utility to merge data', async () => {
-      setupMocks(true);
-      let capturedCallback: ((prices: SpfiPricesData[]) => void) | undefined;
-
-      mockSubscribeToSpfiPrices.mockImplementation((cb: (prices: SpfiPricesData[]) => void) => {
-        capturedCallback = cb;
-        return { unsubscribe: mockUnsubscribe };
-      });
-
-      renderHook(() => useSpfiPrices());
-
-      await act(async () => {
-        jest.advanceTimersByTime(100);
-      });
-
-      await act(async () => {
-        capturedCallback?.(createMockPrices(2));
-      });
-
-      await act(async () => {
-        capturedCallback?.(createMockPrices(3));
-      });
-
-      expect(mockUpdateSpfiPrices).toHaveBeenCalled();
-    });
-
-    it('should return empty data array initially', () => {
-      const { result } = renderHook(() => useSpfiPrices());
-
-      expect(result.current.data).toEqual([]);
-    });
-  });
-
-  describe('return value structure', () => {
-    it('should return data and loading properties', () => {
-      const { result } = renderHook(() => useSpfiPrices());
-
-      expect(result.current).toHaveProperty('data');
-      expect(result.current).toHaveProperty('loading');
-      expect(Array.isArray(result.current.data)).toBe(true);
-      expect(typeof result.current.loading).toBe('boolean');
-    });
-  });
-});
\ No newline at end of file
diff --git a/src/widgets/SpfiPrices/hooks/useCashFlowData.ts b/src/widgets/SpfiPrices/hooks/useCashFlowData.ts
deleted file mode 100644
index 184ee76ef..000000000
--- a/src/widgets/SpfiPrices/hooks/useCashFlowData.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { useEffect, useMemo, useState } from 'react';
-
-import { wsSpfiDraftsStompClient } from '@api/websokets/classes/WSSpfiDraftsStompClient';
-import { useAppSelect } from '@hooks/useAppSelector';
-import { useWSState } from '@hooks/useWSState';
-import { isSPFIBrokerSelector, isSPFITraderSelector } from '@store/selectors/user';
-
-import { LOADING_TIMEOUT } from '../const';
-import { CashFlow } from '../types';
-import { updateCashFlow } from '../utils/updateCashFlow';
-
-const isVisibleItem = (item: CashFlow): boolean => item.bid !== null || item.offer !== null;
-
-export const useCashFlowData = () => {
-  const [rawData, setRawData] = useState<CashFlow[]>([]);
-  const [loading, setLoading] = useState(false);
-
-  const isActivated = useWSState(wsSpfiDraftsStompClient);
-  const isSpfiBroker = useAppSelect(isSPFIBrokerSelector);
-  const isSpfiTrader = useAppSelect(isSPFITraderSelector);
-
-  const isAllowedRole = isSpfiBroker || isSpfiTrader;
-
-  const data = useMemo(() => rawData.filter(isVisibleItem), [rawData]);
-
-  const subscribe = () =>
-    wsSpfiDraftsStompClient.subscribeToCashFlow((cashFlow) => {
-      setRawData((prev) => updateCashFlow(prev, cashFlow));
-      setLoading(false);
-    });
-
-  useEffect(() => {
-    if (!isAllowedRole) {
-      setRawData([]);
-      setLoading(false);
-      return;
-    }
-
-    setLoading(true);
-    const loadingTimeout = setTimeout(() => {
-      setLoading(false);
-    }, LOADING_TIMEOUT);
-
-    let subscription: ReturnType<typeof wsSpfiDraftsStompClient.subscribeToCashFlow> | undefined;
-    if (isActivated) {
-      subscription = subscribe();
-    }
-
-    return () => {
-      clearTimeout(loadingTimeout);
-      subscription?.unsubscribe();
-    };
-  }, [isActivated, isAllowedRole]);
-
-  return { data: isAllowedRole ? data : [], loading: isAllowedRole ? loading : false };
-};
diff --git a/src/widgets/SpfiPrices/hooks/useData.ts b/src/widgets/SpfiPrices/hooks/useData.ts
index 439bd7b3b..13e226d43 100644
--- a/src/widgets/SpfiPrices/hooks/useData.ts
+++ b/src/widgets/SpfiPrices/hooks/useData.ts
@@ -2,10 +2,10 @@ import { useSortByTermData } from '@hooks/useSortByTermData';
 
 import { FilterValuesType } from '@widgets/SpfiPrices/components/FiltersPanel/logic/filters/useModal';
 
-import { CashFlow, SpfiPricesData, TradingResultsFilters, WidgetTab } from '../types';
+import { SpfiPricesData, TradingResultsFilters, WidgetTab } from '../types';
 
-import { useCashFlowData } from './useCashFlowData';
 import { useEnrichData } from './useEnrichData';
+
 import { useSpfiPrices } from './useSpfiPrices';
 import { useTradingResultsData } from './useTradingResultsData';
 
@@ -18,31 +18,17 @@ type UseDataParams = {
 export const useData = ({ filters, tab, modalFilterValues }: UseDataParams) => {
   const { data: spfiPrices, loading: spfiPricesLoading } = useSpfiPrices();
   const { data: tradingResults, loading: tradingResultsLoading } = useTradingResultsData({ filters });
-  const { data: cashFlowData, loading: cashFlowLoading } = useCashFlowData();
+
+  const isSpfiPrices = tab === WidgetTab.SpfiPrices;
 
   const dataSpfiPrices = useEnrichData(useSortByTermData(spfiPrices), modalFilterValues);
 
-  let data: SpfiPricesData[] | CashFlow[] | undefined;
-  let loading: boolean;
-
-  switch (tab) {
-    case WidgetTab.SpfiPrices: {
-      data = dataSpfiPrices;
-      loading = spfiPricesLoading;
-      break;
-    }
-    case WidgetTab.CashFlowPrices: {
-      data = cashFlowData;
-      loading = cashFlowLoading;
-      break;
-    }
-    case WidgetTab.TradingResults:
-    default: {
-      data = tradingResults as SpfiPricesData[] | undefined;
-      loading = tradingResultsLoading;
-      break;
-    }
-  }
-
-return { data, loading };
+  const loading = isSpfiPrices ? spfiPricesLoading : tradingResultsLoading;
+
+  // TODO разобраться с типами
+  const data: SpfiPricesData[] | undefined = isSpfiPrices
+    ? dataSpfiPrices
+    : (tradingResults as SpfiPricesData[] | undefined);
+
+  return { data, loading };
 };
diff --git a/src/widgets/SpfiPrices/hooks/useEnrichData.ts b/src/widgets/SpfiPrices/hooks/useEnrichData.ts
index 20687ffa4..e0c9377d8 100644
--- a/src/widgets/SpfiPrices/hooks/useEnrichData.ts
+++ b/src/widgets/SpfiPrices/hooks/useEnrichData.ts
@@ -1,8 +1,11 @@
 import isEqual from 'lodash/isEqual';
 import { useCallback, useEffect, useRef, useState } from 'react';
 
-import { BaseData, BaseFilterValues } from '@modules/pushDates/logic/types';
-import { enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
+import {
+  BaseData,
+  BaseFilterValues,
+  enrichBySecondDate,
+} from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 
 const FX_SWAP = 'FXSWAP';
 
diff --git a/src/widgets/SpfiPrices/hooks/useSpfiPrices.ts b/src/widgets/SpfiPrices/hooks/useSpfiPrices.ts
index 204b97caa..0555fd2f5 100644
--- a/src/widgets/SpfiPrices/hooks/useSpfiPrices.ts
+++ b/src/widgets/SpfiPrices/hooks/useSpfiPrices.ts
@@ -1,4 +1,5 @@
-import { useEffect, useMemo, useRef, useState } from 'react';
+import { StompSubscription } from '@stomp/stompjs';
+import { useEffect, useMemo, useState } from 'react';
 
 import { wsSpfiPricesStompClient } from '@api/websokets/classes/WSSpfiPricesStompClient';
 import { useWSState } from '@hooks/useWSState';
@@ -17,8 +18,6 @@ export const useSpfiPrices = () => {
 
   const data = useMemo(() => rawData.filter(isVisibleItem), [rawData]);
 
-  const resetSessionCalledRef = useRef(false);
-
   const subscribe = () =>
     wsSpfiPricesStompClient.subscribeToSpfiPrices((prices: SpfiPricesData[]) => {
       setRawData((prev) => updateSpfiPrices(prev, prices));
@@ -27,10 +26,6 @@ export const useSpfiPrices = () => {
 
   useEffect(() => {
     wsSpfiPricesStompClient.activate();
-    if (!resetSessionCalledRef.current) {
-      resetSessionCalledRef.current = true;
-      wsSpfiPricesStompClient.resetSession();
-    }
   }, []);
 
   useEffect(() => {
@@ -39,7 +34,7 @@ export const useSpfiPrices = () => {
       setLoading(false);
     }, LOADING_TIMEOUT);
 
-    let subscription: ReturnType<typeof wsSpfiPricesStompClient.subscribeToSpfiPrices>;
+    let subscription: StompSubscription | undefined;
     if (isActivated) {
       subscription = subscribe();
     }
diff --git a/src/widgets/SpfiPrices/hooks/useStore.ts b/src/widgets/SpfiPrices/hooks/useStore.ts
index bb4a3d6e4..a524ad575 100644
--- a/src/widgets/SpfiPrices/hooks/useStore.ts
+++ b/src/widgets/SpfiPrices/hooks/useStore.ts
@@ -24,13 +24,6 @@ const getDefaultSortingState = (tableState: TableState | undefined): TableState
           symbol: 'asc' as SortingType,
         };
 
-  const cashFlowSorting =
-    Object.keys(tableState?.cashFlow?.sortingState || {}).length > 0
-      ? tableState?.cashFlow?.sortingState
-      : {
-          shortName: 'asc' as SortingType,
-        };
-
   return {
     ...(tableState || {}),
     tradingResults: {
@@ -41,10 +34,6 @@ const getDefaultSortingState = (tableState: TableState | undefined): TableState
       ...tableState?.spfiPrices,
       sortingState: spfiPricesSorting,
     },
-    cashFlow: {
-      ...tableState?.cashFlow,
-      sortingState: cashFlowSorting,
-    },
   };
 };
 
@@ -52,15 +41,13 @@ export const useStore = (): SavedWidgetProperties => {
   const props = useSelectProperties<WidgetProperties>();
 
   const propsToWidget: SavedWidgetProperties | null = useMemo(() => {
-    const { dateFrom, dateTo, spfiPricesColumns, tradingResultColumns, cashFlowColumns, tableState, ...otherProps } =
-      props;
+    const { dateFrom, dateTo, spfiPricesColumns, tradingResultColumns, tableState, ...otherProps } = props;
 
     return {
       dateFrom: dayjs(dateFrom ?? DEFAULT_DATE_FROM, commonDateFormat.backendDateFormat),
       dateTo: dayjs(dateTo ?? DEFAULT_DATE_TO, commonDateFormat.backendDateFormat),
       spfiPricesColumns: spfiPricesColumns ? JSON.parse(spfiPricesColumns) : null,
       tradingResultColumns: tradingResultColumns ? JSON.parse(tradingResultColumns) : null,
-      cashFlowColumns: cashFlowColumns ? JSON.parse(cashFlowColumns) : null,
 
       // сортировка по дефолту.
       tableState: getDefaultSortingState(tableState),
diff --git a/src/widgets/SpfiPrices/hooks/useTable.ts b/src/widgets/SpfiPrices/hooks/useTable.ts
index 468285db9..232adb90e 100644
--- a/src/widgets/SpfiPrices/hooks/useTable.ts
+++ b/src/widgets/SpfiPrices/hooks/useTable.ts
@@ -6,7 +6,7 @@ import { useChangeProperties } from '@modules/widgetProperties';
 import { mergeSavedWithInitialColumns } from '@utils/mergeSavedWithInitialColumns';
 import { serializeColumns } from '@utils/serializeColumns';
 
-import { cashFlowColumnsConfig, spfiPricesColumnsConfig, tradingResultsColumnsConfig } from '../config';
+import { spfiPricesColumnsConfig, tradingResultsColumnsConfig } from '../config';
 import { COLUMN_KEYS, TABLE_STATE_KEYS } from '../const';
 import { WidgetProperties } from '../properties/types';
 import { TableState, WidgetColumns, WidgetTab } from '../types';
@@ -16,7 +16,7 @@ type UseTableParams = {
 } & WidgetColumns;
 
 export const useTable = (params: UseTableParams) => {
-  const { tab, spfiPricesColumns, tradingResultColumns, cashFlowColumns } = params;
+  const { tab, spfiPricesColumns, tradingResultColumns } = params;
   const { settingsComponent, setSettingsComponent } = useSettingsComponent();
   const [controller, setController] = useTableController();
   const { updateProperties } = useChangeProperties<WidgetProperties>();
@@ -26,7 +26,7 @@ export const useTable = (params: UseTableParams) => {
       const columnsKey = COLUMN_KEYS[tab];
       updateProperties((state) => {
         if (!state.tableState) {
-          const defaultTableState: TableState = { spfiPrices: {}, tradingResults: {}, cashFlow: {} };
+          const defaultTableState: TableState = { spfiPrices: {}, tradingResults: {} };
           state.tableState = {
             ...defaultTableState,
             [TABLE_STATE_KEYS[tab]]: { dataFiltersState, sortingState },
@@ -58,15 +58,10 @@ export const useTable = (params: UseTableParams) => {
           ? mergeSavedWithInitialColumns(tradingResultColumns, tradingResultsColumnsConfig)
           : tradingResultsColumnsConfig;
       }
-      case WidgetTab.CashFlowPrices: {
-        return cashFlowColumns
-          ? mergeSavedWithInitialColumns(cashFlowColumns, cashFlowColumnsConfig)
-          : cashFlowColumnsConfig;
-      }
       default:
         return spfiPricesColumnsConfig;
     }
-  }, [tab, spfiPricesColumns, tradingResultColumns, cashFlowColumns]);
+  }, [tab, spfiPricesColumns, tradingResultColumns]);
 
   return { settingsItems, setSettingsComponent, setController, columns };
 };
diff --git a/src/widgets/SpfiPrices/types.ts b/src/widgets/SpfiPrices/types.ts
index 6cb666a84..b31d25891 100644
--- a/src/widgets/SpfiPrices/types.ts
+++ b/src/widgets/SpfiPrices/types.ts
@@ -24,21 +24,7 @@ export type SpfiPricesData = Partial<CalendarDates> & {
   dayCount: number | null;
 };
 
-export type CashFlow = {
-  instr: string;
-  term: string;
-  shortName: string;
-  strike: number | null;
-  bid: number;
-  offer: number;
-  bidQty: number;
-  askQty: number;
-  typePrice?: string | null;
-  sendingTime: string;
-};
-
 export type SpfiPricesColumns = ResizableColumnType<Record<string, unknown>>;
-export type CashFlowColumns = ResizableColumnType<Record<string, unknown>>;
 
 export type TradingResultsData = {
   term: string;
@@ -54,7 +40,6 @@ export type TradingResultsColumns = ResizableColumnType<Record<string, unknown>>
 export enum WidgetTab {
   SpfiPrices = 'SPFI_PRICES',
   TradingResults = 'TRADING_RESULTS',
-  CashFlowPrices = 'CASH_FLOW_PRICES',
 }
 
 export type TradingResultsFilters = {
@@ -65,7 +50,6 @@ export type TradingResultsFilters = {
 export type WidgetColumns = {
   spfiPricesColumns: SpfiPricesColumns[] | null;
   tradingResultColumns: TradingResultsColumns[] | null;
-  cashFlowColumns: CashFlowColumns[] | null;
 };
 
 type SaveProps = (props: Partial<SavedWidgetProperties>) => void;
@@ -79,7 +63,6 @@ export type ChangeTab = (tab: WidgetTab) => void;
 export type TableStateKeys = {
   [WidgetTab.SpfiPrices]: 'spfiPrices';
   [WidgetTab.TradingResults]: 'tradingResults';
-  [WidgetTab.CashFlowPrices]: 'cashFlow';
 };
 
 export type TableState = Record<
diff --git a/src/widgets/SpfiPrices/utils/__tests__/renderPrice.test.tsx b/src/widgets/SpfiPrices/utils/__tests__/renderPrice.test.tsx
index 8953fa855..be68e8efa 100644
--- a/src/widgets/SpfiPrices/utils/__tests__/renderPrice.test.tsx
+++ b/src/widgets/SpfiPrices/utils/__tests__/renderPrice.test.tsx
@@ -1,141 +1,80 @@
 import { render } from '@testing-library/react';
 import React from 'react';
 
-import {
-  renderPlainPrice,
-  renderPrice,
-  renderPriceWithHighlight,
-  renderPriceWithStaticPercent,
-  renderPriceWithTypeWithHighlight,
-} from '../renderPrice';
+import { renderPrice } from '../renderPrice';
 
 describe('renderPrice function', () => {
   it('should render price with number value', () => {
-    const { container } = render(<>{renderPrice({ value: 123.45 })}</>);
+    const record = {};
+    const { container } = render(<>{renderPrice(123.45, record)}</>);
     expect(container.textContent).toContain('123');
   });
 
   it('should render price with string value', () => {
-    const { container } = render(<>{renderPrice({ value: '999.99' })}</>);
+    const record = {};
+    const { container } = render(<>{renderPrice('999.99', record)}</>);
     expect(container.textContent).toContain('999');
   });
 
   it('should render placeholder for null value', () => {
-    const { container } = render(<>{renderPrice({ value: null })}</>);
+    const record = {};
+    const { container } = render(<>{renderPrice(null, record)}</>);
     expect(container.textContent).toBe('– – –');
   });
 
-  it('should render placeholder for zero value', () => {
-    const { container } = render(<>{renderPrice({ value: 0 })}</>);
+  it('should render placeholder for undefined-like value', () => {
+    const record = {};
+    const { container } = render(<>{renderPrice(null, record)}</>);
     expect(container.textContent).toBe('– – –');
   });
 
-  it('should handle number zero as placeholder', () => {
-    const { container } = render(<>{renderPrice({ value: 0 })}</>);
+  it('should render placeholder for zero value', () => {
+    const record = {};
+    const { container } = render(<>{renderPrice(0, record)}</>);
     expect(container.textContent).toBe('– – –');
   });
 
-  it('should handle very large numbers', () => {
-    const { container } = render(<>{renderPrice({ value: 1000000 })}</>);
-    expect(container.textContent).toContain('1');
-  });
-
-  it('should handle negative numbers', () => {
-    const { container } = render(<>{renderPrice({ value: -50.5 })}</>);
-    expect(container.textContent).toContain('-');
-  });
-
-  it('should handle decimal numbers with many places', () => {
-    const { container } = render(<>{renderPrice({ value: 123.456789 })}</>);
-    expect(container.textContent).toContain('123');
-  });
-
-  it('should render with highlighting when withHighlighting is true', () => {
-    const { container } = render(<>{renderPrice({ value: 100, withHighlighting: true })}</>);
-    expect(container.textContent).toContain('100');
-  });
-
-  it('should render addonAfter when provided', () => {
-    const { container } = render(<>{renderPrice({ value: 5.5, addonAfter: '%' })}</>);
-    expect(container.textContent).toContain('5');
+  it('should handle record with typePrice', () => {
+    const record = { typePrice: '%' };
+    const { container } = render(<>{renderPrice(100, record)}</>);
     expect(container.textContent).toContain('%');
   });
-});
-
-describe('renderPlainPrice function', () => {
-  it('should render plain price with number value', () => {
-    const { container } = render(<>{renderPlainPrice(123.45)}</>);
-    expect(container.textContent).toContain('123');
-  });
 
-  it('should render plain price with string value', () => {
-    const { container } = render(<>{renderPlainPrice('999.99')}</>);
-    expect(container.textContent).toContain('999');
+  it('should handle record with string typePrice', () => {
+    const record = { typePrice: 'USD' };
+    const { container } = render(<>{renderPrice(50.5, record)}</>);
+    expect(container.textContent).toContain('USD');
   });
 
-  it('should render placeholder for null value', () => {
-    const { container } = render(<>{renderPlainPrice(null)}</>);
-    expect(container.textContent).toBe('– – –');
+  it('should handle record with null typePrice', () => {
+    const record = { typePrice: null };
+    const { container } = render(<>{renderPrice(75, record)}</>);
+    expect(container.textContent).not.toContain('null');
   });
 
-  it('should render placeholder for zero value', () => {
-    const { container } = render(<>{renderPlainPrice(0)}</>);
-    expect(container.textContent).toBe('– – –');
+  it('should handle record without typePrice', () => {
+    const record = {};
+    const { container } = render(<>{renderPrice(200, record)}</>);
+    expect(container.textContent).toContain('200');
   });
-});
 
-describe('renderPriceWithHighlight function', () => {
-  it('should render price with highlighting', () => {
-    const { container } = render(<>{renderPriceWithHighlight(100)}</>);
+  it('should handle empty record', () => {
+    const { container } = render(<>{renderPrice(100, {})}</>);
     expect(container.textContent).toContain('100');
   });
 
-  it('should render placeholder for null value', () => {
-    const { container } = render(<>{renderPriceWithHighlight(null)}</>);
-    expect(container.textContent).toBe('– – –');
-  });
-
-  it('should render placeholder for zero value', () => {
-    const { container } = render(<>{renderPriceWithHighlight(0)}</>);
-    expect(container.textContent).toBe('– – –');
-  });
-});
-
-describe('renderPriceWithTypeWithHighlight function', () => {
-  it('should render price with type and highlighting', () => {
-    const record = { typePrice: 'USD' };
-    const { container } = render(<>{renderPriceWithTypeWithHighlight(50.5, record)}</>);
-    expect(container.textContent).toContain('50');
-    expect(container.textContent).toContain('USD');
-  });
-
-  it('should render placeholder for null value', () => {
-    const record = { typePrice: 'USD' };
-    const { container } = render(<>{renderPriceWithTypeWithHighlight(null, record)}</>);
-    expect(container.textContent).toBe('– – –');
-  });
-
-  it('should render placeholder for zero value', () => {
-    const record = { typePrice: 'RUB' };
-    const { container } = render(<>{renderPriceWithTypeWithHighlight(0, record)}</>);
-    expect(container.textContent).toBe('– – –');
-  });
-});
-
-describe('renderPriceWithStaticPercent function', () => {
-  it('should render price with static percent symbol', () => {
-    const { container } = render(<>{renderPriceWithStaticPercent(5.5)}</>);
-    expect(container.textContent).toContain('5');
-    expect(container.textContent).toContain('%');
+  it('should handle very large numbers', () => {
+    const { container } = render(<>{renderPrice(1000000, {})}</>);
+    expect(container.textContent).toContain('1');
   });
 
-  it('should render placeholder for null value', () => {
-    const { container } = render(<>{renderPriceWithStaticPercent(null)}</>);
-    expect(container.textContent).toBe('– – –');
+  it('should handle negative numbers', () => {
+    const { container } = render(<>{renderPrice(-50.5, {})}</>);
+    expect(container.textContent).toContain('-');
   });
 
-  it('should render placeholder for zero value', () => {
-    const { container } = render(<>{renderPriceWithStaticPercent(0)}</>);
-    expect(container.textContent).toBe('– – –');
+  it('should handle decimal numbers with many places', () => {
+    const { container } = render(<>{renderPrice(123.456789, {})}</>);
+    expect(container.textContent).toContain('123');
   });
 });
diff --git a/src/widgets/SpfiPrices/utils/__tests__/updateCashFlow.test.ts b/src/widgets/SpfiPrices/utils/__tests__/updateCashFlow.test.ts
deleted file mode 100644
index 1f4dd7afa..000000000
--- a/src/widgets/SpfiPrices/utils/__tests__/updateCashFlow.test.ts
+++ /dev/null
@@ -1,176 +0,0 @@
-import { CashFlow } from '../../types';
-
-import { updateCashFlow } from '../updateCashFlow';
-
-describe('updateCashFlow', () => {
-  const createCashFlow = (
-    term: string,
-    instr: string,
-    bid: number,
-    offer: number
-  ): CashFlow => ({
-    term,
-    instr,
-    bid,
-    offer,
-    bidQty: 1,
-    askQty: 1,
-    shortName: 'TEST',
-    strike: null,
-    sendingTime: '2023-01-01T00:00:00Z',
-  });
-
-  const cashFlow1M = createCashFlow('1M', 'USD/RUB', 85, 86);
-  const cashFlow3M = createCashFlow('3M', 'USD/RUB', 84, 87);
-  const cashFlow6M = createCashFlow('6M', 'USD/RUB', 83, 88);
-  const cashFlow1MZero = createCashFlow('1M', 'USD/RUB', 0, 0);
-  const cashFlow3MZero = createCashFlow('3M', 'USD/RUB', 0, 0);
-
-  describe('first message handling', () => {
-    it('should return newData when oldData is empty', () => {
-      const result = updateCashFlow([], [cashFlow1M, cashFlow3M]);
-
-      expect(result).toBeDefined();
-      expect(result).toHaveLength(2);
-    });
-
-    it('should return newData when oldData has only empty values', () => {
-      const result = updateCashFlow([], [cashFlow1M, cashFlow3M]);
-
-      expect(result).toEqual([cashFlow1M, cashFlow3M]);
-    });
-  });
-
-  describe('shouldReplaceAll logic', () => {
-    it('should return newData when oldData has all zeros and newData has non-zero values', () => {
-      const result = updateCashFlow([cashFlow1MZero, cashFlow3MZero], [cashFlow1M, cashFlow3M]);
-
-      expect(result).toBeDefined();
-      expect(result).toHaveLength(2);
-    });
-
-    it('should not replace when oldData has all zeros but newData has all zeros too', () => {
-      const result = updateCashFlow([cashFlow1MZero, cashFlow3MZero], [cashFlow1MZero, cashFlow3MZero]);
-
-      expect(result).not.toBe([cashFlow1MZero, cashFlow3MZero]);
-      expect(result).toHaveLength(2);
-    });
-
-    it('should not replace when oldData has non-zero values', () => {
-      const result = updateCashFlow([cashFlow1M, cashFlow3M], [cashFlow1MZero, cashFlow3MZero]);
-
-      expect(result).not.toBe([cashFlow1MZero, cashFlow3MZero]);
-    });
-
-    it('should replace when oldData has zeros but newData has mix of zero and non-zero', () => {
-      const newDataMixed = [cashFlow1M, cashFlow3MZero];
-      const result = updateCashFlow([cashFlow1MZero, cashFlow3MZero], newDataMixed);
-
-      expect(result).toBe(newDataMixed);
-    });
-  });
-
-  describe('merging existing items', () => {
-    it('should merge existing items with matching keys', () => {
-      const updated1M = { ...cashFlow1M, bid: 85.5, offer: 85.8 };
-      const result = updateCashFlow([cashFlow1M, cashFlow3M], [updated1M, cashFlow3M]);
-
-      expect(result).toHaveLength(2);
-      expect(result[0].bid).toBe(85.5);
-      expect(result[0].offer).toBe(85.8);
-    });
-
-    it('should preserve order of oldData items', () => {
-      const result = updateCashFlow(
-        [cashFlow1M, cashFlow3M, cashFlow6M],
-        [cashFlow1M, { ...cashFlow3M, bid: 84.5, offer: 87.5 }]
-      );
-
-      expect(result.map((item) => item.term)).toEqual(['1M', '3M', '6M']);
-    });
-  });
-
-  describe('adding new items', () => {
-    it('should append new items not present in oldData', () => {
-      const result = updateCashFlow([cashFlow1M], [cashFlow1M, cashFlow3M]);
-
-      expect(result).toHaveLength(2);
-      expect(result[1].term).toBe('3M');
-    });
-
-    it('should add new items at the end', () => {
-      const cashFlow6MEur = createCashFlow('6M', 'EUR/RUB', 95, 96);
-      const result = updateCashFlow([cashFlow1M, cashFlow3M], [cashFlow1M, cashFlow3M, cashFlow6MEur]);
-
-      expect(result).toHaveLength(3);
-      expect(result[2].term).toBe('6M');
-      expect(result[2].instr).toBe('EUR/RUB');
-    });
-  });
-
-  describe('complex scenarios', () => {
-    it('should merge existing and add new items', () => {
-      const result = updateCashFlow(
-        [cashFlow1M, cashFlow3M],
-        [{ ...cashFlow1M, bid: 85.5 }, cashFlow3M, cashFlow6M]
-      );
-
-      expect(result).toHaveLength(3);
-      expect(result[0].bid).toBe(85.5);
-      expect(result[0].offer).toBe(86);
-      expect(result[2].term).toBe('6M');
-    });
-
-    it('should handle overlapping items with different updates', () => {
-      const cashFlow3MEur = createCashFlow('3M', 'EUR/RUB', 95, 96);
-      const cashFlow6MGBP = createCashFlow('6M', 'GBP/RUB', 105, 106);
-
-      const result = updateCashFlow([cashFlow1M], [cashFlow1M, cashFlow3MEur, cashFlow6MGBP]);
-
-      expect(result).toHaveLength(3);
-    });
-  });
-
-  describe('edge cases', () => {
-    it('should handle both arrays empty', () => {
-      const result = updateCashFlow([], []);
-
-      expect(result).toEqual([]);
-    });
-
-    it('should handle newData empty with non-empty oldData', () => {
-      const result = updateCashFlow([cashFlow1M], []);
-
-      expect(result).toEqual([cashFlow1M]);
-    });
-
-    it('should handle items with same term but different instr', () => {
-      const cashFlow1MEur = createCashFlow('1M', 'EUR/RUB', 95, 96);
-      const result = updateCashFlow(
-        [cashFlow1M],
-        [{ ...cashFlow1M, bid: 85.5, offer: 86.5 }, cashFlow1MEur]
-      );
-
-      expect(result).toHaveLength(2);
-    });
-
-    it('should handle items with same instr but different term', () => {
-      const result = updateCashFlow(
-        [cashFlow1M],
-        [{ ...cashFlow1M, bid: 85.5, offer: 86.5 }, cashFlow3M]
-      );
-
-      expect(result).toHaveLength(2);
-    });
-  });
-
-  describe('null value handling', () => {
-    it('should handle items with null bid values', () => {
-      const newDataNull: CashFlow[] = [{ ...cashFlow1M, bid: null as unknown as number }];
-
-      const result = updateCashFlow([cashFlow1M], newDataNull);
-
-      expect(result).toHaveLength(1);
-    });
-  });
-});
\ No newline at end of file
diff --git a/src/widgets/SpfiPrices/utils/renderPrice.ts b/src/widgets/SpfiPrices/utils/renderPrice.ts
new file mode 100644
index 000000000..64d80f923
--- /dev/null
+++ b/src/widgets/SpfiPrices/utils/renderPrice.ts
@@ -0,0 +1,6 @@
+import { decimalNumbersFormatter } from '@utils/decimalNumberFormatter';
+
+export const renderPrice = (value: string | number | null, record: Record<string, unknown>) => {
+  const textPostfix = typeof record.typePrice === 'string' ? record.typePrice : undefined;
+  return value ? decimalNumbersFormatter(value, textPostfix) : '– – –';
+};
diff --git a/src/widgets/SpfiPrices/utils/renderPrice.tsx b/src/widgets/SpfiPrices/utils/renderPrice.tsx
deleted file mode 100644
index 65f88dd3c..000000000
--- a/src/widgets/SpfiPrices/utils/renderPrice.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from 'react';
-
-import { NumberCell } from '@components/NumberCell';
-
-const EMPTY_MARKER = '– – –';
-
-type RenderPriceParams = {
-  value: string | number | null;
-  withHighlighting?: boolean;
-  addonAfter?: string;
-};
-
-export const renderPrice = ({ value, withHighlighting = false, addonAfter }: RenderPriceParams) => {
-  const numValue = Number(value);
-
-  if (value === null || value === undefined || numValue === 0) {
-    return EMPTY_MARKER;
-  }
-
-  return (
-    <NumberCell
-      withHighlighting={withHighlighting}
-      cellNumber={numValue}
-      addonAfter={addonAfter}
-    />
-  );
-};
-
-export const renderPlainPrice = (value: string | number | null) => renderPrice({ value });
-export const renderPriceWithHighlight = (value: string | number | null) =>
-  renderPrice({ value, withHighlighting: true });
-export const renderPriceWithTypeWithHighlight = (value: string | number | null, record: Record<string, unknown>) =>
-  renderPrice({ value, withHighlighting: true, addonAfter: record.typePrice as string });
-export const renderPriceWithStaticPercent = (value: string | number | null) => renderPrice({ value, addonAfter: '%' });
diff --git a/src/widgets/SpfiPrices/utils/updateCashFlow.ts b/src/widgets/SpfiPrices/utils/updateCashFlow.ts
deleted file mode 100644
index 8e52eb7a6..000000000
--- a/src/widgets/SpfiPrices/utils/updateCashFlow.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { CashFlow } from '../types';
-
-const getCashFlowItemKey = (item: CashFlow) => `${item.term}|${item.instr}`;
-
-const hasAllZeros = (data: CashFlow[]): boolean =>
-  data.length > 0 && data.every((item) => item.bid === 0 && item.offer === 0);
-
-const hasNonZeroValues = (data: CashFlow[]): boolean =>
-  data.some((item) => (item.bid !== null && item.bid !== 0) || (item.offer !== null && item.offer !== 0));
-
-export const updateCashFlow = (oldData: CashFlow[], newData: CashFlow[]): CashFlow[] => {
-  const isFirstMessage = oldData.length === 0;
-  const shouldReplaceAll = hasAllZeros(oldData) && hasNonZeroValues(newData);
-
-  if (isFirstMessage || shouldReplaceAll) {
-    return newData;
-  }
-
-  const oldKeys = new Set(oldData.map(getCashFlowItemKey));
-  const newItems = newData.filter((item) => !oldKeys.has(getCashFlowItemKey(item)));
-  const newItemsMap = new Map(newData.map((item) => [getCashFlowItemKey(item), item]));
-
-  let result = [
-    ...oldData.map((oldItem) => {
-      const newItem = newItemsMap.get(getCashFlowItemKey(oldItem));
-      return oldItem ? { ...oldItem, ...newItem } : newItem;
-    }),
-  ].filter((item) => !!item);
-
-  if (newItems.length > 0) {
-    result = [...result, ...newItems];
-  }
-
-  return result;
-};
diff --git a/src/widgets/SpfiPrices/widget.tsx b/src/widgets/SpfiPrices/widget.tsx
index 0a9059e1f..da3f1016d 100644
--- a/src/widgets/SpfiPrices/widget.tsx
+++ b/src/widgets/SpfiPrices/widget.tsx
@@ -19,21 +19,14 @@ import { useTab } from './hooks/useTab';
 import { useTable } from './hooks/useTable';
 import { WidgetProperties } from './properties/types';
 
-import styles from './SpfiPrices.module.scss';
 import { WidgetTab } from './types';
 
+import styles from './SpfiPrices.module.scss';
+
 export const SpfiPrices: FC<WidgetContentBasicProps> = (props) => {
   const { widgetId } = props;
 
-  const {
-    tab: intitialTab,
-    dateFrom,
-    dateTo,
-    hideFilters,
-    tableState,
-    cashFlowColumns,
-    ...initialColumns
-  } = useStore();
+  const { tab: intitialTab, dateFrom, dateTo, hideFilters, tableState, ...initialColumns } = useStore();
 
   const { updateProperties } = useChangeProperties<WidgetProperties>();
 
@@ -58,23 +51,15 @@ export const SpfiPrices: FC<WidgetContentBasicProps> = (props) => {
 
   const { data, loading } = useData({ filters, tab, modalFilterValues });
 
-  const { settingsItems, setSettingsComponent, columns, setController } = useTable({
-    tab,
-    cashFlowColumns,
-    ...initialColumns,
-  });
+  const { settingsItems, setSettingsComponent, columns, setController } = useTable({ tab, ...initialColumns });
 
-  const rowKey = useMemo(() => {
-    switch (tab) {
-      case WidgetTab.SpfiPrices:
-        return 'id';
-      case WidgetTab.CashFlowPrices:
-        return (record: Record<string, unknown>) => `${record.instr}-${record.term}-${record.strike}`;
-      case WidgetTab.TradingResults:
-      default:
-        return (record: Record<string, unknown>) => `${record.symbol}-${record.term}-${record.date}-${record.strike}`;
-    }
-  }, [tab]);
+  const rowKey = useMemo(
+    () =>
+      tab === WidgetTab.SpfiPrices
+        ? 'id'
+        : (record: Record<string, unknown>) => `${record.symbol}-${record.term}-${record.date}-${record.strike}`,
+    [tab],
+  );
 
   return (
     <>
@@ -106,7 +91,7 @@ export const SpfiPrices: FC<WidgetContentBasicProps> = (props) => {
           <TableWrapper
             key={tab}
             noData={!data?.length}
-            isLoading={loading}
+            loading={loading}
             setSettingsComponent={setSettingsComponent}
             widgetId={widgetId}
             dataSource={data}
diff --git a/src/widgets/SwapCalculator/logic/utils/getTableWithWeekendsDates.ts b/src/widgets/SwapCalculator/logic/utils/getTableWithWeekendsDates.ts
index a6b0512ee..266cfb51d 100644
--- a/src/widgets/SwapCalculator/logic/utils/getTableWithWeekendsDates.ts
+++ b/src/widgets/SwapCalculator/logic/utils/getTableWithWeekendsDates.ts
@@ -2,8 +2,7 @@ import dayjs from 'dayjs';
 import customParseFormat from 'dayjs/plugin/customParseFormat';
 
 import { commonDateFormat } from '@configs/standartDateFormat';
-import { BaseData } from '@modules/pushDates/logic/types';
-import { enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
+import { BaseData, enrichBySecondDate } from '@modules/pushDates/logic/utils/enrichBySecondDate.utils';
 import { SecondLegConvention, TableRow } from '@widgets/SwapCalculator/types/table';
 
 type GetTableWithWeekendsDatesParams = {
diff --git a/src/widgets/TradeJournal/components/HeaderButtons/CreateRfqOrAuction.tsx b/src/widgets/TradeJournal/components/HeaderButtons/CreateRfqOrAuction.tsx
index 09c0efd68..737ad8730 100644
--- a/src/widgets/TradeJournal/components/HeaderButtons/CreateRfqOrAuction.tsx
+++ b/src/widgets/TradeJournal/components/HeaderButtons/CreateRfqOrAuction.tsx
@@ -7,7 +7,7 @@ import { getStorageSelector } from '@store/selectors/cachedData';
 import { dispatch } from '@store/store';
 import { ContextMenu } from '@uikit/ContextMenu';
 import { ContextMenuItem } from '@uikit/ContextMenu/types';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 import Tooltip from '@uikit/Tooltip';
 
@@ -48,7 +48,7 @@ export const CreateRfqOrAuction = () => {
     >
       <Tooltip title="Создать запрос котировки">
         <IconButton
-          icon={<IconDeprecated variant={IconVariants.POST_ADD_OUTLINED} />}
+          icon={<Icon variant={IconVariants.POST_ADD_OUTLINED} />}
           onClick={() => setIsOpen(true)}
         />
       </Tooltip>
diff --git a/src/widgets/TradeJournal/constants/__tests__/table.test.tsx b/src/widgets/TradeJournal/constants/__tests__/table.test.tsx
index 7856d76c6..a0bbe72f2 100644
--- a/src/widgets/TradeJournal/constants/__tests__/table.test.tsx
+++ b/src/widgets/TradeJournal/constants/__tests__/table.test.tsx
@@ -1,15 +1,11 @@
 import { render } from '@testing-library/react';
 
-import { TooltipWithBtn } from '@components/TooltipWithBtn';
-import { TQuotation } from 'types/TradeJournal';
+import Tooltip from '@uikit/Tooltip';
 
 import { directionNames, instrNames, statuses } from '../constantsToText';
 import { WidgetTab } from '../tab';
 import { COLUMN_KEYS, TABLE_COLUMNS, TABLE_CONFIGS, TABLE_CONFIGURABLE, TABLE_STATE_KEYS } from '../table';
-
-jest.mock('react-redux', () => ({
-  useDispatch: jest.fn(),
-}));
+import { TQuotation } from 'types/TradeJournal';
 
 describe('table constants', () => {
   describe('BASE_COLUMN_INFO', () => {
@@ -183,7 +179,7 @@ describe('table constants', () => {
         const commentColumn = TABLE_COLUMNS.find((col) => col.key === 'comment');
         expect(commentColumn).toBeDefined();
         expect(commentColumn?.title).toBe('Комментарий');
-        expect(commentColumn?.dataIndex).toBe('comment1');
+        expect(commentColumn?.dataIndex).toBe('comment');
         expect(commentColumn?.position).toBe(16);
         expect(commentColumn?.width).toBe(200);
         expect(commentColumn?.hidden).toBe(true);
@@ -523,8 +519,8 @@ describe('column render functions', () => {
       const result = commentColumn?.render?.(longComment, {} as TQuotation);
 
       const { container } = render(result);
-      expect(container).toHaveTextContent('This is a very long ...');
-      expect(result).toHaveProperty('type', TooltipWithBtn);
+      expect(container).toHaveTextContent('This is a very long...');
+      expect(result).toHaveProperty('type', Tooltip);
     });
 
     it('should return plain text for short comment', () => {
@@ -547,7 +543,7 @@ describe('column render functions', () => {
 
       // The result should be a React element with Tooltip
       const { container } = render(result);
-      expect(container).toHaveTextContent('This is exactly twen...');
+      expect(container).toHaveTextContent('This is exactly twe...');
     });
 
     it('should handle comment with exactly 19 characters', () => {
@@ -571,7 +567,7 @@ describe('column render functions', () => {
 
       // Should be a React element with Tooltip
       const { container } = render(result);
-      expect(container).toHaveTextContent('1234567890123456789');
+      expect(container).toHaveTextContent('1234567890123456789...');
     });
   });
 
diff --git a/src/widgets/TradeJournal/constants/formConstants.ts b/src/widgets/TradeJournal/constants/formConstants.ts
index 46894f704..a089ad589 100644
--- a/src/widgets/TradeJournal/constants/formConstants.ts
+++ b/src/widgets/TradeJournal/constants/formConstants.ts
@@ -29,10 +29,7 @@ const enum FORM_KEYS {
 
   ACCOUNT = 'account',
 
-  /** Коментарий */
-  COMMENT1 = 'comment1',
-  /** Внутр. комментарий */
-  COMMENT2 = 'comment2',
+  COMMENT = 'comment',
 
   CONTACTS = 'contacts',
 }
@@ -49,9 +46,8 @@ const enum NEW_TICKET_FROM_ZERO_FORM_KEYS {
   END_DATE = 'endDate',
   CALCULATION_OF_DAYS = 'calculationOfDays',
   PLACEMENT_PERIOD = 'placementPeriod',
-
-  COMMENT1 = 'comment1',
-  COMMENT2 = 'comment2',
+  COMMENT = 'COMMENT',
+  INTERNAL_COMMENT = 'internalComment',
 
   CONTACTS = 'contacts',
 }
@@ -60,9 +56,6 @@ const enum VIEW_DETAILS_MODAL_FORM_KEYS {
   BASE_RATE = 'baseRate',
   VOLUME = 'volume',
   ACCOUNT = 'account',
-
-  COMMENT1 = 'comment1',
-  COMMENT2 = 'comment2',
 }
 
 const PRODUCTS_OPTIONS = [
@@ -152,13 +145,10 @@ const APPLICATION_COLLECTION_TIME_OPTIONS = [
   },
 ];
 
-const MAX_COMMENT_LENGTH = 2_000;
-
 export {
   APPLICATION_COLLECTION_TIME_OPTIONS,
   DIRECTIONS,
   FORM_KEYS,
-  MAX_COMMENT_LENGTH,
   NEW_TICKET_FROM_ZERO_FORM_KEYS,
   PLACEMENT_PERIOD,
   PRODUCTS,
diff --git a/src/widgets/TradeJournal/constants/table.tsx b/src/widgets/TradeJournal/constants/table.tsx
index 66dad7ca3..58c36c560 100644
--- a/src/widgets/TradeJournal/constants/table.tsx
+++ b/src/widgets/TradeJournal/constants/table.tsx
@@ -3,8 +3,8 @@ import isToday from 'dayjs/plugin/isToday';
 import React from 'react';
 
 import { NumberCell } from '@components/NumberCell';
-import { TooltipWithBtn } from '@components/TooltipWithBtn';
 import { commonDateFormat } from '@configs/standartDateFormat';
+import Tooltip from '@uikit/Tooltip';
 import { todayOrDate } from '@utils/dates';
 import { TQuotation, TQuotesColumns, TSavedColumns } from 'types/TradeJournal';
 
@@ -158,21 +158,20 @@ const TABLE_COLUMNS: TQuotesColumns[] = [
   {
     ...BASE_COLUMN_INFO,
     title: 'Комментарий',
-    dataIndex: 'comment1',
+    dataIndex: 'comment',
     width: 200,
     key: 'comment',
     position: 16,
     hidden: true,
-    render: (value, record) => {
+    render: (value) => {
       if (!value) {
         return '';
       }
 
       return (
-        <TooltipWithBtn
-          text={value}
-          writerTrId={record.ownerId}
-        />
+        <Tooltip title={value.length > 19 ? value : null}>
+          {value.length > 19 ? `${value.slice(0, 19)}...` : value}
+        </Tooltip>
       );
     },
   },
diff --git a/src/widgets/TradeJournal/hooks/__tests__/useContextMenu.test.ts b/src/widgets/TradeJournal/hooks/__tests__/useContextMenu.test.ts
index 62882dc8a..0e386fe6d 100644
--- a/src/widgets/TradeJournal/hooks/__tests__/useContextMenu.test.ts
+++ b/src/widgets/TradeJournal/hooks/__tests__/useContextMenu.test.ts
@@ -46,7 +46,7 @@ describe('useContextMenu', () => {
     startDate: '2026-04-16',
     endDate: '2026-04-20',
     collectionAt: '2026-04-16 18:00:00',
-    comment1: 'Test comment',
+    comment: 'Test comment',
     contacts: ['contact1'],
     status: 'IN_PROGRESS',
     baseRate: 5.5,
@@ -58,7 +58,6 @@ describe('useContextMenu', () => {
       offer: [],
     },
     createdAt: '',
-    comment2: null,
   };
 
   const mockQuotationNotOwned: TQuotation = {
diff --git a/src/widgets/TradeJournal/hooks/__tests__/useTableData.test.ts b/src/widgets/TradeJournal/hooks/__tests__/useTableData.test.ts
index 32b8733bb..1e4a3a0f4 100644
--- a/src/widgets/TradeJournal/hooks/__tests__/useTableData.test.ts
+++ b/src/widgets/TradeJournal/hooks/__tests__/useTableData.test.ts
@@ -68,7 +68,7 @@ describe('useTableData', () => {
     startDate: '2026-04-16',
     endDate: '2026-04-20',
     collectionAt: '2026-04-16 18:00:00',
-    comment1: 'Test comment',
+    comment: 'Test comment',
     contacts: ['contact1'],
     status: 'IN_PROGRESS',
     baseRate: 5.5,
@@ -80,7 +80,6 @@ describe('useTableData', () => {
       offer: [],
     },
     createdAt: '2026-04-16T10:00:00',
-    comment2: null,
   };
 
   const mockQuotation2: TQuotation = {
diff --git a/src/widgets/TradeJournal/hooks/__tests__/useViewDetailsModal.test.tsx b/src/widgets/TradeJournal/hooks/__tests__/useViewDetailsModal.test.tsx
index 48587630a..041262a04 100644
--- a/src/widgets/TradeJournal/hooks/__tests__/useViewDetailsModal.test.tsx
+++ b/src/widgets/TradeJournal/hooks/__tests__/useViewDetailsModal.test.tsx
@@ -11,6 +11,7 @@ import { closeModalRequested } from '@store/actions/modal';
 import { dispatch } from '@store/store';
 import { TQuotation } from 'types/TradeJournal';
 
+import { VIEW_DETAILS_MODAL_FORM_KEYS } from '../../constants/formConstants';
 import { useViewDetailsModal } from '../useViewDetailsModal';
 
 // Mock dependencies
@@ -111,8 +112,7 @@ describe('useViewDetailsModal', () => {
     id: 100,
     volume: '1000000',
     baseRate: 5.5,
-    comment1: null,
-    comment2: null,
+    comment: null,
     isRead: false,
     ownerId: 'user-123',
     status: 'OFFERED' as const,
@@ -128,7 +128,7 @@ describe('useViewDetailsModal', () => {
     startDate: '2026-04-16',
     endDate: '2026-04-20',
     collectionAt: '2026-04-16 18:00:00',
-    comment1: 'Test comment',
+    comment: 'Test comment',
     contacts: ['contact1'],
     status: 'IN_PROGRESS',
     baseRate: 5.5,
@@ -140,7 +140,6 @@ describe('useViewDetailsModal', () => {
       offer: [mockOffer],
     },
     createdAt: '2026-04-16T10:00:00',
-    comment2: null,
   };
 
   beforeEach(() => {
diff --git a/src/widgets/TradeJournal/hooks/useTableData.ts b/src/widgets/TradeJournal/hooks/useTableData.ts
index 871bbed0e..69f3ce599 100644
--- a/src/widgets/TradeJournal/hooks/useTableData.ts
+++ b/src/widgets/TradeJournal/hooks/useTableData.ts
@@ -63,7 +63,7 @@ export const useTableData = () => {
     // Далее по сокету общему приходит заного котировка, это условие проверяет, старая ли это котировка или новая.
     // Если старая и при этом мы ее еще не подгрузили, то не добавляем ее в таблицу, тк она добавиться в начало тогда.
     if (
-      refs.current.tableData[0]?.id > quotationFromWS.id &&
+      refs.current.tableData[0].id > quotationFromWS.id &&
       refs.current.tableDataIds.has(quotationFromWS.id) === false
     ) {
       return;
diff --git a/src/widgets/TradeJournal/hooks/useViewDetailsModal.tsx b/src/widgets/TradeJournal/hooks/useViewDetailsModal.tsx
index 4202d02e7..d77a54920 100644
--- a/src/widgets/TradeJournal/hooks/useViewDetailsModal.tsx
+++ b/src/widgets/TradeJournal/hooks/useViewDetailsModal.tsx
@@ -12,8 +12,8 @@ import { requestErrorSelector, requestLoadingSelector } from '@store/selectors/r
 import { dispatch } from '@store/store';
 import { TOffer, TQuotation } from 'types/TradeJournal';
 
-import { VIEW_DETAILS_MODAL_FORM_KEYS } from '../constants';
 import { CustomFooter } from '../modals/ViewDetailsModal/components';
+import { VIEW_DETAILS_MODAL_FORM_KEYS } from '../constants';
 
 type TUseViewDetailsModalProps = {
   quotationId: number;
@@ -72,8 +72,6 @@ export const useViewDetailsModal = ({ quotationId, modalId }: TUseViewDetailsMod
 
         methods.setValue(VIEW_DETAILS_MODAL_FORM_KEYS.VOLUME, offer.volume ?? data.volume);
         methods.setValue(VIEW_DETAILS_MODAL_FORM_KEYS.BASE_RATE, offer.baseRate);
-        methods.setValue(VIEW_DETAILS_MODAL_FORM_KEYS.COMMENT1, offer.comment1);
-        methods.setValue(VIEW_DETAILS_MODAL_FORM_KEYS.COMMENT2, offer.comment2);
       } catch (e) {
         setErrorText('При получение данных произошла ошибка.');
       } finally {
@@ -86,14 +84,14 @@ export const useViewDetailsModal = ({ quotationId, modalId }: TUseViewDetailsMod
   }, []);
 
   const handleConfirm = useCallback(() => {
-    const { volume, baseRate, comment1, comment2 } = methods.getValues();
+    const { volume, baseRate } = methods.getValues();
 
     const offer = quotation?.offers.offer[0];
 
     if (offer) {
       dispatch(
         viewDetailsModalSave({
-          offer: { id: offer.id, volume, baseRate, comment1, comment2 },
+          offer: { id: offer.id, volume, baseRate },
           quotationData: {
             id: quotation.id,
             currency: quotation.currency1,
diff --git a/src/widgets/TradeJournal/index.ts b/src/widgets/TradeJournal/index.ts
index 654acedab..63f98eb02 100644
--- a/src/widgets/TradeJournal/index.ts
+++ b/src/widgets/TradeJournal/index.ts
@@ -1,5 +1,5 @@
 import { TradeJournal } from './TradeJournal';
 
-export { CreateRFQModal, CreateTicketModal, RejectModal, ViewCommentModal, ViewDetailsModal } from './modals';
+export { CreateRFQModal, CreateTicketModal, RejectModal, ViewDetailsModal } from './modals';
 
 export default TradeJournal;
diff --git a/src/widgets/TradeJournal/modals/CreateRFQModal/components/DepositForm/components/SixthBlock.tsx b/src/widgets/TradeJournal/modals/CreateRFQModal/components/DepositForm/components/SixthBlock.tsx
index 3de17f221..2acba7b54 100644
--- a/src/widgets/TradeJournal/modals/CreateRFQModal/components/DepositForm/components/SixthBlock.tsx
+++ b/src/widgets/TradeJournal/modals/CreateRFQModal/components/DepositForm/components/SixthBlock.tsx
@@ -6,7 +6,7 @@ import { LabeledHOC } from '@components/LabeledHOC';
 
 import { TextArea } from '@uikit/TextArea';
 
-import { FORM_KEYS, MAX_COMMENT_LENGTH } from '@widgets/TradeJournal/constants';
+import { FORM_KEYS } from '@widgets/TradeJournal/constants';
 
 import styles from './styles.module.scss';
 
@@ -21,34 +21,12 @@ export const SixthBlock = () => {
         label="Комментарий"
       >
         <Controller
-          name={FORM_KEYS.COMMENT1}
+          name={FORM_KEYS.COMMENT}
           control={formContext.control}
           render={({ field }) => (
             <TextArea
-              placeholder="Введите текст комментария"
               autoHeight
-              maxLength={MAX_COMMENT_LENGTH}
-              className={styles['textarea-width']}
-              onChange={field.onChange}
-              value={field?.value || ''}
-            />
-          )}
-        />
-      </LabeledHOC>
-
-      <LabeledHOC
-        className={styles.titleTop}
-        labelClassName={styles['label-width']}
-        label="Внутр. комментарий"
-      >
-        <Controller
-          name={FORM_KEYS.COMMENT2}
-          control={formContext.control}
-          render={({ field }) => (
-            <TextArea
-              placeholder="Введите текст комментария"
-              autoHeight
-              maxLength={MAX_COMMENT_LENGTH}
+              maxLength={2_000}
               className={styles['textarea-width']}
               onChange={field.onChange}
               value={field?.value || ''}
diff --git a/src/widgets/TradeJournal/modals/CreateRFQModal/hooks/useCreateRFQModalFacade.ts b/src/widgets/TradeJournal/modals/CreateRFQModal/hooks/useCreateRFQModalFacade.ts
index d79a0a7b2..96b20d84d 100644
--- a/src/widgets/TradeJournal/modals/CreateRFQModal/hooks/useCreateRFQModalFacade.ts
+++ b/src/widgets/TradeJournal/modals/CreateRFQModal/hooks/useCreateRFQModalFacade.ts
@@ -6,7 +6,7 @@ import { createRFQModalSave } from '@store/actions/tradeJournal';
 import { dispatch } from '@store/store';
 import { FORM_KEYS, PRODUCTS } from '@widgets/TradeJournal/constants';
 import { useBaseModalLogic } from '@widgets/TradeJournal/hooks';
-import { TQuotationFormValues } from 'types/TradeJournal';
+import { TFormValues } from 'types/TradeJournal';
 
 import { getCollectionTime } from '../utils';
 
@@ -48,8 +48,7 @@ export const useCreateRFQModalFacade = ({ modalId }: TUseCreateRFQModalFacadePro
   const onSubmit = () => {
     const values = methods.getValues();
 
-    const { placementPeriod, applicationCollectionTime, calculationOfDays, ...data } =
-      values as unknown as TQuotationFormValues;
+    const { placementPeriod, applicationCollectionTime, calculationOfDays, ...data } = values as unknown as TFormValues;
 
     setErrorText(null);
 
diff --git a/src/widgets/TradeJournal/modals/CreateTicketModal/components/FirstBlock.tsx b/src/widgets/TradeJournal/modals/CreateTicketModal/components/FirstBlock.tsx
index 1f846a36f..13aa380ff 100644
--- a/src/widgets/TradeJournal/modals/CreateTicketModal/components/FirstBlock.tsx
+++ b/src/widgets/TradeJournal/modals/CreateTicketModal/components/FirstBlock.tsx
@@ -5,12 +5,12 @@ import { Segmented } from '@uikit/Segmented';
 import { Select } from '@uikit/Select';
 import { formatNumberWithThousandSeparator } from '@utils/formatNumberWithThousandSeparator';
 import { restrictInput } from '@utils/inputs/restrictInput';
-import { FormTooltipInfo } from '@widgets/TradeJournal/components';
 import { LabeledController } from '@widgets/TradeJournal/components/LabeledController/LabeledController';
 
 import { NEW_TICKET_FROM_ZERO_FORM_KEYS, PRODUCTS_OPTIONS, SEGMENTS_OPTIONS } from '@widgets/TradeJournal/constants';
 
 import styles from './styles.module.scss';
+import { FormTooltipInfo } from '@widgets/TradeJournal/components';
 
 type TFirstBlockProps = {
   formRef: React.MutableRefObject<HTMLFormElement | null>;
diff --git a/src/widgets/TradeJournal/modals/CreateTicketModal/components/ThirdBlock.tsx b/src/widgets/TradeJournal/modals/CreateTicketModal/components/ThirdBlock.tsx
index 4a8dbe831..5b4120543 100644
--- a/src/widgets/TradeJournal/modals/CreateTicketModal/components/ThirdBlock.tsx
+++ b/src/widgets/TradeJournal/modals/CreateTicketModal/components/ThirdBlock.tsx
@@ -99,7 +99,7 @@ export const ThirdBlock: React.FC<{ formRef: React.MutableRefObject<HTMLFormElem
       <LabeledController
         label="Комментарий"
         className={styles.alignStart}
-        name={NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT1}
+        name={NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT}
       >
         {(field) => (
           <TextArea
@@ -116,7 +116,7 @@ export const ThirdBlock: React.FC<{ formRef: React.MutableRefObject<HTMLFormElem
       <LabeledController
         label="Вунтр. комментарий"
         className={styles.alignStart}
-        name={NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT2}
+        name={NEW_TICKET_FROM_ZERO_FORM_KEYS.INTERNAL_COMMENT}
       >
         {(field) => (
           <TextArea
diff --git a/src/widgets/TradeJournal/modals/CreateTicketModal/components/__tests__/ThirdBlock.test.tsx b/src/widgets/TradeJournal/modals/CreateTicketModal/components/__tests__/ThirdBlock.test.tsx
index 13182c2fd..1e570e7c4 100644
--- a/src/widgets/TradeJournal/modals/CreateTicketModal/components/__tests__/ThirdBlock.test.tsx
+++ b/src/widgets/TradeJournal/modals/CreateTicketModal/components/__tests__/ThirdBlock.test.tsx
@@ -198,8 +198,8 @@ const defaultValues = {
   [NEW_TICKET_FROM_ZERO_FORM_KEYS.END_DATE]: dayjs('2024-01-20'),
   [NEW_TICKET_FROM_ZERO_FORM_KEYS.PLACEMENT_PERIOD]: '1M',
   [NEW_TICKET_FROM_ZERO_FORM_KEYS.CALCULATION_OF_DAYS]: 5,
-  [NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT1]: '',
-  [NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT2]: '',
+  [NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT]: '',
+  [NEW_TICKET_FROM_ZERO_FORM_KEYS.INTERNAL_COMMENT]: '',
 };
 
 const renderWithFormProvider = (component: React.ReactElement) => {
@@ -588,7 +588,7 @@ describe('ThirdBlock', () => {
         const methods = useForm({
           defaultValues: {
             ...defaultValues,
-            [NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT1]: longComment,
+            [NEW_TICKET_FROM_ZERO_FORM_KEYS.COMMENT]: longComment,
           },
         });
 
diff --git a/src/widgets/TradeJournal/modals/CreateTicketModal/hooks/useCreateTicketModalFacade.ts b/src/widgets/TradeJournal/modals/CreateTicketModal/hooks/useCreateTicketModalFacade.ts
index 8b689775a..6524de417 100644
--- a/src/widgets/TradeJournal/modals/CreateTicketModal/hooks/useCreateTicketModalFacade.ts
+++ b/src/widgets/TradeJournal/modals/CreateTicketModal/hooks/useCreateTicketModalFacade.ts
@@ -1,16 +1,9 @@
 import dayjs from 'dayjs';
 
-import { useDispatch } from 'react-redux';
-
-import { commonDateFormat } from '@configs/standartDateFormat';
-import { createTicketModalSave } from '@store/actions/tradeJournal';
 import { DIRECTIONS, NEW_TICKET_FROM_ZERO_FORM_KEYS, PRODUCTS } from '@widgets/TradeJournal/constants';
 import { useBaseModalLogic } from '@widgets/TradeJournal/hooks';
-import { TTicketFormValues } from 'types/TradeJournal';
 
 export const useCreateTicketModalFacade = (modalId: string) => {
-  const dispatch = useDispatch();
-
   const {
     formRef,
     isLoading,
@@ -43,18 +36,6 @@ export const useCreateTicketModalFacade = (modalId: string) => {
 
   const onSubmit = () => {
     setErrorText(null);
-
-    const values = methods.getValues();
-
-    const { placementPeriod, calculationOfDays, ...data } = values as unknown as TTicketFormValues;
-
-    dispatch(
-      createTicketModalSave({
-        ...data,
-        startDate: dayjs(data.startDate).startOf('day').format(commonDateFormat.dateTimeWithSecondsFormat),
-        endDate: dayjs(data.endDate).startOf('day').format(commonDateFormat.dateTimeWithSecondsFormat),
-      }),
-    );
   };
 
   return {
diff --git a/src/widgets/TradeJournal/modals/ViewCommentModal/ViewCommentModal.module.scss b/src/widgets/TradeJournal/modals/ViewCommentModal/ViewCommentModal.module.scss
deleted file mode 100644
index f82ad2bf3..000000000
--- a/src/widgets/TradeJournal/modals/ViewCommentModal/ViewCommentModal.module.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-@import 'colors.scss';
-
-.contentClassName {
-  overflow: auto;
-  padding: 16px;
-}
-
-.comment {
-  color: $text-interface-primary-value;
-}
diff --git a/src/widgets/TradeJournal/modals/ViewCommentModal/ViewCommentModal.tsx b/src/widgets/TradeJournal/modals/ViewCommentModal/ViewCommentModal.tsx
deleted file mode 100644
index d08e116b2..000000000
--- a/src/widgets/TradeJournal/modals/ViewCommentModal/ViewCommentModal.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-
-import { useDispatch } from 'react-redux';
-
-import { DesktopModalForm } from '@components/DesktopModalForm';
-
-import { useAppSelect } from '@hooks/useAppSelector';
-import { closeModalRequested } from '@store/actions/modal';
-import { customerByTrIdSelector } from '@store/selectors/customersData';
-import Typography from '@uikit/Typography';
-import { TViewCommentModalProps } from 'types/TradeJournal';
-
-import styles from './ViewCommentModal.module.scss';
-
-export const ViewCommentModal: React.FC<TViewCommentModalProps> = ({ comment, id, writerTrId }) => {
-  const dispatch = useDispatch();
-  const customerByTrId = useAppSelect(customerByTrIdSelector(writerTrId));
-
-  const closeModalHandler = () => {
-    dispatch(closeModalRequested(id));
-  };
-
-  return (
-    <DesktopModalForm
-      onCancel={closeModalHandler}
-      onClose={closeModalHandler}
-      title={`Комментарий от ${customerByTrId?.ctptyName} (${customerByTrId?.userName})`}
-      isShowOnlyCloseBtn
-      contentClassName={styles.contentClassName}
-      cancelText="Закрыть"
-    >
-      <Typography.Text.M className={styles.comment}>{comment}</Typography.Text.M>
-    </DesktopModalForm>
-  );
-};
diff --git a/src/widgets/TradeJournal/modals/ViewCommentModal/index.ts b/src/widgets/TradeJournal/modals/ViewCommentModal/index.ts
deleted file mode 100644
index ab8bcee22..000000000
--- a/src/widgets/TradeJournal/modals/ViewCommentModal/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { ViewCommentModal } from './ViewCommentModal';
diff --git a/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.module.scss b/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.module.scss
index baa563346..e61a32641 100644
--- a/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.module.scss
+++ b/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.module.scss
@@ -1,9 +1,5 @@
 @import 'colors.scss';
 
-.modalClassName {
-  width: 480px;
-}
-
 .form {
   padding: 16px;
 }
@@ -76,7 +72,3 @@
 .labelTitle {
   align-items: start;
 }
-
-.textarea {
-  width: 300px !important;
-}
diff --git a/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.tsx b/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.tsx
index 4d249b0f9..4ede99b9e 100644
--- a/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.tsx
+++ b/src/widgets/TradeJournal/modals/ViewDetailsModal/ViewDetailsModal.tsx
@@ -11,20 +11,12 @@ import { LabeledHOC } from '@components/LabeledHOC';
 import { commonDateFormat } from '@configs/standartDateFormat';
 
 import { Notice } from '@uikit/Notice';
-import { TextArea } from '@uikit/TextArea';
 import { pluralizeDays } from '@utils/dates';
 import { formatNumberWithThousandSeparator } from '@utils/formatNumberWithThousandSeparator';
 import { restrictInput } from '@utils/inputs/restrictInput';
 
 import { numberWithSpaces } from '@utils/numberWithSpaces';
-import { LabeledController } from '@widgets/TradeJournal/components/LabeledController/LabeledController';
-import {
-  directionNames,
-  instrNames,
-  MAX_COMMENT_LENGTH,
-  statuses,
-  VIEW_DETAILS_MODAL_FORM_KEYS,
-} from '@widgets/TradeJournal/constants';
+import { directionNames, instrNames, statuses, VIEW_DETAILS_MODAL_FORM_KEYS } from '@widgets/TradeJournal/constants';
 import { useViewDetailsModal } from '@widgets/TradeJournal/hooks';
 
 import { TViewDetailsModalProps } from 'types/TradeJournal';
@@ -52,7 +44,6 @@ export const ViewDetailsModal: React.FC<TViewDetailsModalProps> = ({ id, quotati
           : `Запрос на котировку №${quotation?.id} - ${statuses[ownOffer?.status as keyof typeof statuses] || ''}`
       }
       onClose={handleClose}
-      modalClassName={styles.modalClassName}
       contentClassName={styles.contentClassName}
       informerData={informerData}
       {...modalProps}
@@ -216,47 +207,11 @@ export const ViewDetailsModal: React.FC<TViewDetailsModalProps> = ({ id, quotati
 
               <LocalDivider />
 
-              <div className={styles.block}>
-                <LabelAndValue
-                  className={styles.labelTitle}
-                  label="Комментарий инициатора"
-                  value={quotation.comment1 || '——'}
-                />
-
-                <LabeledController
-                  label="Комментарий"
-                  name={VIEW_DETAILS_MODAL_FORM_KEYS.COMMENT1}
-                >
-                  {(field) => (
-                    <TextArea
-                      autoHeight
-                      disabled={disableControls}
-                      placeholder="Введите текст комментария"
-                      maxLength={MAX_COMMENT_LENGTH}
-                      className={styles.textarea}
-                      onChange={field.onChange}
-                      value={field?.value || ''}
-                    />
-                  )}
-                </LabeledController>
-
-                <LabeledController
-                  label="Внутр. комментарий"
-                  name={VIEW_DETAILS_MODAL_FORM_KEYS.COMMENT2}
-                >
-                  {(field) => (
-                    <TextArea
-                      autoHeight
-                      placeholder="Введите текст комментария"
-                      disabled={disableControls}
-                      maxLength={MAX_COMMENT_LENGTH}
-                      className={styles.textarea}
-                      onChange={field.onChange}
-                      value={field?.value || ''}
-                    />
-                  )}
-                </LabeledController>
-              </div>
+              <LabelAndValue
+                className={styles.labelTitle}
+                label="Комментарий"
+                value={quotation.comment || '——'}
+              />
             </>
           )}
         </div>
diff --git a/src/widgets/TradeJournal/modals/index.ts b/src/widgets/TradeJournal/modals/index.ts
index 734dd171c..99e984925 100644
--- a/src/widgets/TradeJournal/modals/index.ts
+++ b/src/widgets/TradeJournal/modals/index.ts
@@ -2,4 +2,3 @@ export { CreateRFQModal } from './CreateRFQModal';
 export { CreateTicketModal } from './CreateTicketModal';
 export { ViewDetailsModal } from './ViewDetailsModal';
 export { RejectModal } from './RejectModal';
-export { ViewCommentModal } from './ViewCommentModal';
diff --git a/src/widgets/TradeJournal/utils/__tests__/tableCustomSorts.test.ts b/src/widgets/TradeJournal/utils/__tests__/tableCustomSorts.test.ts
index 1611aa9d2..5766a9ecf 100644
--- a/src/widgets/TradeJournal/utils/__tests__/tableCustomSorts.test.ts
+++ b/src/widgets/TradeJournal/utils/__tests__/tableCustomSorts.test.ts
@@ -36,50 +36,50 @@ describe('tableCustomSorts', () => {
       const sorter = commentSorter('asc');
 
       it('should return 0 when both comments are null', () => {
-        const row1 = createMockQuotation({ comment1: null });
-        const row2 = createMockQuotation({ comment1: null });
+        const row1 = createMockQuotation({ comment: null });
+        const row2 = createMockQuotation({ comment: null });
 
         expect(sorter(row1, row2)).toBe(0);
       });
 
       it('should return 1 when first comment is null and second is not', () => {
-        const row1 = createMockQuotation({ comment1: null });
-        const row2 = createMockQuotation({ comment1: 'Test' });
+        const row1 = createMockQuotation({ comment: null });
+        const row2 = createMockQuotation({ comment: 'Test' });
 
         expect(sorter(row1, row2)).toBe(1);
       });
 
       it('should return -1 when first comment is not null and second is null', () => {
-        const row1 = createMockQuotation({ comment1: 'Test' });
-        const row2 = createMockQuotation({ comment1: null });
+        const row1 = createMockQuotation({ comment: 'Test' });
+        const row2 = createMockQuotation({ comment: null });
 
         expect(sorter(row1, row2)).toBe(-1);
       });
 
       it('should return positive value when first comment comes after second alphabetically', () => {
-        const row1 = createMockQuotation({ comment1: 'zebra' });
-        const row2 = createMockQuotation({ comment1: 'apple' });
+        const row1 = createMockQuotation({ comment: 'zebra' });
+        const row2 = createMockQuotation({ comment: 'apple' });
 
         expect(sorter(row1, row2)).toBeGreaterThan(0);
       });
 
       it('should return negative value when first comment comes before second alphabetically', () => {
-        const row1 = createMockQuotation({ comment1: 'apple' });
-        const row2 = createMockQuotation({ comment1: 'zebra' });
+        const row1 = createMockQuotation({ comment: 'apple' });
+        const row2 = createMockQuotation({ comment: 'zebra' });
 
         expect(sorter(row1, row2)).toBeLessThan(0);
       });
 
       it('should return 0 when comments are equal', () => {
-        const row1 = createMockQuotation({ comment1: 'same' });
-        const row2 = createMockQuotation({ comment1: 'same' });
+        const row1 = createMockQuotation({ comment: 'same' });
+        const row2 = createMockQuotation({ comment: 'same' });
 
         expect(sorter(row1, row2)).toBe(0);
       });
 
       it('should handle undefined comment as null', () => {
-        const row1 = createMockQuotation({ comment1: null });
-        const row2 = createMockQuotation({ comment1: 'Test' });
+        const row1 = createMockQuotation({ comment: null });
+        const row2 = createMockQuotation({ comment: 'Test' });
 
         expect(sorter(row1, row2)).toBe(1);
       });
@@ -89,36 +89,36 @@ describe('tableCustomSorts', () => {
       const sorter = commentSorter('desc');
 
       it('should return 0 when both comments are null', () => {
-        const row1 = createMockQuotation({ comment1: null });
-        const row2 = createMockQuotation({ comment1: null });
+        const row1 = createMockQuotation({ comment: null });
+        const row2 = createMockQuotation({ comment: null });
 
         expect(sorter(row1, row2)).toBe(0);
       });
 
       it('should return -1 when first comment is null and second is not', () => {
-        const row1 = createMockQuotation({ comment1: null });
-        const row2 = createMockQuotation({ comment1: 'Test' });
+        const row1 = createMockQuotation({ comment: null });
+        const row2 = createMockQuotation({ comment: 'Test' });
 
         expect(sorter(row1, row2)).toBe(1);
       });
 
       it('should return 1 when first comment is not null and second is null', () => {
-        const row1 = createMockQuotation({ comment1: 'Test' });
-        const row2 = createMockQuotation({ comment1: null });
+        const row1 = createMockQuotation({ comment: 'Test' });
+        const row2 = createMockQuotation({ comment: null });
 
         expect(sorter(row1, row2)).toBe(-1);
       });
 
       it('should return negative value when first comment comes after second alphabetically', () => {
-        const row1 = createMockQuotation({ comment1: 'zebra' });
-        const row2 = createMockQuotation({ comment1: 'apple' });
+        const row1 = createMockQuotation({ comment: 'zebra' });
+        const row2 = createMockQuotation({ comment: 'apple' });
 
         expect(sorter(row1, row2)).toBeLessThan(0);
       });
 
       it('should return positive value when first comment comes before second alphabetically', () => {
-        const row1 = createMockQuotation({ comment1: 'apple' });
-        const row2 = createMockQuotation({ comment1: 'zebra' });
+        const row1 = createMockQuotation({ comment: 'apple' });
+        const row2 = createMockQuotation({ comment: 'zebra' });
 
         expect(sorter(row1, row2)).toBeGreaterThan(0);
       });
@@ -455,10 +455,10 @@ describe('tableCustomSorts', () => {
       const sorter = commentSorter('asc');
 
       const quotations = [
-        createMockQuotation({ id: 1, comment1: 'zebra' }),
-        createMockQuotation({ id: 2, comment1: 'apple' }),
-        createMockQuotation({ id: 3, comment1: 'mango' }),
-        createMockQuotation({ id: 4, comment1: null }),
+        createMockQuotation({ id: 1, comment: 'zebra' }),
+        createMockQuotation({ id: 2, comment: 'apple' }),
+        createMockQuotation({ id: 3, comment: 'mango' }),
+        createMockQuotation({ id: 4, comment: null }),
       ];
 
       const sorted = [...quotations].sort(sorter);
diff --git a/src/widgets/TradeJournal/utils/tableCustomSorts.ts b/src/widgets/TradeJournal/utils/tableCustomSorts.ts
index f7d73f3b7..b05266d8a 100644
--- a/src/widgets/TradeJournal/utils/tableCustomSorts.ts
+++ b/src/widgets/TradeJournal/utils/tableCustomSorts.ts
@@ -7,8 +7,8 @@ import { getOfferName } from './getOfferName';
 const commentSorter =
   <T extends TQuotation>(sortOrder: SortingType) =>
   (row1: T, row2: T) => {
-    const val1 = row1?.comment1;
-    const val2 = row2?.comment1;
+    const val1 = row1?.comment;
+    const val2 = row2?.comment;
 
     if (val1 === null && val2 === null) {
       return 0;
diff --git a/src/widgets/TradeJournalDetails/components/Details/Comment.test.tsx b/src/widgets/TradeJournalDetails/components/Details/Comment.test.tsx
deleted file mode 100644
index caa3cfd88..000000000
--- a/src/widgets/TradeJournalDetails/components/Details/Comment.test.tsx
+++ /dev/null
@@ -1,357 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react';
-import React from 'react';
-
-import { Comment } from './Comment';
-import '@testing-library/jest-dom';
-
-// Mock the external dependencies
-jest.mock('classnames', () => ({
-  __esModule: true,
-  default: jest.fn((...args) => args.filter(Boolean).join(' ')),
-}));
-
-jest.mock('@components/LabelAndValue', () => ({
-  LabelAndValue: ({
-    label,
-    value,
-    labelClassName,
-    className,
-    valueClassName,
-  }: {
-    label: string;
-    value: string;
-    labelClassName: string;
-    className: string;
-    valueClassName: string;
-  }) => (
-    <div
-      data-testid="label-and-value"
-      className={className}
-    >
-      <span
-        data-testid="label"
-        className={labelClassName}
-      >
-        {label}
-      </span>
-      <span
-        data-testid="value"
-        className={valueClassName}
-      >
-        {value}
-      </span>
-    </div>
-  ),
-}));
-
-jest.mock('@uikit/Typography', () => ({
-  __esModule: true,
-  default: {
-    Text: {
-      S: ({ children, className }: { children: React.ReactNode; className: string }) => (
-        <span
-          data-testid="typography-text"
-          className={className}
-        >
-          {children}
-        </span>
-      ),
-    },
-  },
-}));
-
-jest.mock('./Details.module.scss', () => ({
-  details_label: 'details_label',
-  details_info_block: 'details_info_block',
-  'details_text-color': 'details_text-color',
-  'details_text-wrap': 'details_text-wrap',
-  showFullComment: 'showFullComment',
-}));
-
-describe('Comment Component', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  describe('Rendering', () => {
-    it('should render the component with label and text', () => {
-      const label = 'Comment Label';
-      const text = 'This is a test comment';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('label')).toHaveTextContent(label);
-      expect(screen.getByTestId('value')).toHaveTextContent(text);
-    });
-
-    it('should render with null text', () => {
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={null}
-        />,
-      );
-
-      expect(screen.getByTestId('label')).toHaveTextContent(label);
-      expect(screen.getByTestId('value')).toHaveTextContent('');
-    });
-
-    it('should render with undefined text', () => {
-      const label = 'Comment Label';
-
-      render(<Comment label={label} />);
-
-      expect(screen.getByTestId('label')).toHaveTextContent(label);
-      expect(screen.getByTestId('value')).toHaveTextContent('');
-    });
-
-    it('should render with empty string text', () => {
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text=""
-        />,
-      );
-
-      expect(screen.getByTestId('label')).toHaveTextContent(label);
-      expect(screen.getByTestId('value')).toHaveTextContent('');
-    });
-  });
-
-  describe('Text Truncation', () => {
-    it('should display full text when text length is less than or equal to 500 characters', () => {
-      const text = 'A'.repeat(500);
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toHaveTextContent(text);
-      expect(screen.queryByText('Показать весь комментарий')).not.toBeInTheDocument();
-      expect(screen.queryByText('Скрыть весь комментарий')).not.toBeInTheDocument();
-    });
-
-    it('should truncate text when length is greater than 500 characters', () => {
-      const text = 'A'.repeat(600);
-      const expectedTruncated = `${'A'.repeat(497)}...`;
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toHaveTextContent(expectedTruncated);
-      expect(screen.getByText('Показать весь комментарий')).toBeInTheDocument();
-    });
-
-    it('should handle text with exactly 501 characters', () => {
-      const text = 'A'.repeat(501);
-      const expectedTruncated = `${'A'.repeat(497)}...`;
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toHaveTextContent(expectedTruncated);
-      expect(screen.getByText('Показать весь комментарий')).toBeInTheDocument();
-    });
-  });
-
-  describe('Toggle Functionality', () => {
-    it('should show full comment when "Show full comment" is clicked', () => {
-      const text = 'A'.repeat(600);
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      // Initially truncated
-      expect(screen.getByTestId('value')).toHaveTextContent(`${'A'.repeat(497)}...`);
-
-      // Click to show full
-      fireEvent.click(screen.getByText('Показать весь комментарий'));
-
-      // Now show full text
-      expect(screen.getByTestId('value')).toHaveTextContent(text);
-      expect(screen.getByText('Скрыть весь комментарий')).toBeInTheDocument();
-    });
-
-    it('should truncate comment when "Hide full comment" is clicked', () => {
-      const text = 'A'.repeat(600);
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      // Click to show full
-      fireEvent.click(screen.getByText('Показать весь комментарий'));
-      expect(screen.getByTestId('value')).toHaveTextContent(text);
-
-      // Click to hide
-      fireEvent.click(screen.getByText('Скрыть весь комментарий'));
-
-      // Back to truncated
-      expect(screen.getByTestId('value')).toHaveTextContent(`${'A'.repeat(497)}...`);
-      expect(screen.getByText('Показать весь комментарий')).toBeInTheDocument();
-    });
-
-    it('should toggle state correctly on multiple clicks', () => {
-      const text = 'A'.repeat(600);
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      // Click 1: Show full
-      fireEvent.click(screen.getByText('Показать весь комментарий'));
-
-      expect(screen.getByTestId('value')).toHaveTextContent(text);
-      expect(screen.getByText('Скрыть весь комментарий')).toBeInTheDocument();
-
-      // Click 2: Hide
-      fireEvent.click(screen.getByText('Скрыть весь комментарий'));
-      expect(screen.getByTestId('value')).toHaveTextContent(`${'A'.repeat(497)}...`);
-      expect(screen.getByText('Показать весь комментарий')).toBeInTheDocument();
-
-      // Click 3: Show full again
-      fireEvent.click(screen.getByText('Показать весь комментарий'));
-
-      expect(screen.getByTestId('value')).toHaveTextContent(text);
-      expect(screen.getByText('Скрыть весь комментарий')).toBeInTheDocument();
-    });
-  });
-
-  describe('Edge Cases', () => {
-    it('should handle text with special characters', () => {
-      const text = '!@#$%^&*()_+{}|:"<>?`~'.repeat(20); // ~500 characters with special chars
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toBeInTheDocument();
-    });
-
-    it('should handle text with newlines and spaces', () => {
-      const text = '\n\n   A'.repeat(200); // ~600 characters with whitespace
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toBeInTheDocument();
-    });
-
-    it('should handle very large text', () => {
-      const text = 'A'.repeat(10000);
-      const label = 'Comment Label';
-
-      render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toHaveTextContent(`${'A'.repeat(497)}...`);
-      expect(screen.getByText('Показать весь комментарий')).toBeInTheDocument();
-    });
-  });
-
-  describe('Memoization', () => {
-    it('should memoize commentValue correctly', () => {
-      const text = 'A'.repeat(600);
-      const label = 'Comment Label';
-
-      const { rerender } = render(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      // Initial render - truncated
-      expect(screen.getByTestId('value')).toHaveTextContent(`${'A'.repeat(497)}...`);
-
-      // Rerender with same props - should use memoized value
-      rerender(
-        <Comment
-          label={label}
-          text={text}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toHaveTextContent(`${'A'.repeat(497)}...`);
-
-      // Rerender with new text - should recalculate
-      const newText = 'B'.repeat(600);
-
-      rerender(
-        <Comment
-          label={label}
-          text={newText}
-        />,
-      );
-
-      expect(screen.getByTestId('value')).toHaveTextContent(`${'B'.repeat(497)}...`);
-    });
-  });
-
-  describe('Accessibility', () => {
-    it('should use Typography component for toggle text', () => {
-      const text = 'A'.repeat(600);
-
-      render(
-        <Comment
-          label="Label"
-          text={text}
-        />,
-      );
-
-      const typography = screen.getByTestId('typography-text');
-
-      expect(typography).toHaveTextContent('Показать весь комментарий');
-      expect(typography).toHaveClass('showFullComment');
-    });
-  });
-});
diff --git a/src/widgets/TradeJournalDetails/components/Details/Comment.tsx b/src/widgets/TradeJournalDetails/components/Details/Comment.tsx
deleted file mode 100644
index 1cecc6ef6..000000000
--- a/src/widgets/TradeJournalDetails/components/Details/Comment.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import classNames from 'classnames';
-import React, { useMemo, useState } from 'react';
-
-import { LabelAndValue } from '@components/LabelAndValue';
-
-import Typography from '@uikit/Typography';
-
-import styles from './Details.module.scss';
-
-type TCommentProps = {
-  text?: string | null;
-  label: string;
-};
-
-export const Comment: React.FC<TCommentProps> = ({ text, label }) => {
-  const [isShowFullComment, setIsShowFullComment] = useState(false);
-
-  const comment1Length = text?.length || 0;
-
-  const commentValue = useMemo(() => {
-    if (isShowFullComment) {
-      return text;
-    }
-
-    return comment1Length > 500 ? `${text?.slice(0, 497)}...` : text;
-  }, [comment1Length, isShowFullComment, text]);
-
-  return (
-    <div>
-      <LabelAndValue
-        label={label}
-        labelClassName={styles.details_label}
-        className={styles.details_info_block}
-        valueClassName={classNames(styles['details_text-color'], styles['details_text-wrap'])}
-        value={commentValue}
-      />
-
-      {comment1Length > 500 && (
-        <div onClick={() => setIsShowFullComment((prevState) => !prevState)}>
-          <Typography.Text.S className={styles.showFullComment}>
-            {isShowFullComment ? 'Скрыть весь комментарий' : 'Показать весь комментарий'}
-          </Typography.Text.S>
-        </div>
-      )}
-    </div>
-  );
-};
diff --git a/src/widgets/TradeJournalDetails/components/Details/Details.module.scss b/src/widgets/TradeJournalDetails/components/Details/Details.module.scss
index 984f82e8d..75d2912dc 100644
--- a/src/widgets/TradeJournalDetails/components/Details/Details.module.scss
+++ b/src/widgets/TradeJournalDetails/components/Details/Details.module.scss
@@ -28,8 +28,6 @@
 
   &_info {
     margin-top: 24px;
-    display: grid;
-    row-gap: 10px;
 
     & > div:nth-last-child(1) {
       margin-top: 8px;
diff --git a/src/widgets/TradeJournalDetails/components/Details/Details.tsx b/src/widgets/TradeJournalDetails/components/Details/Details.tsx
index a434d0b21..bc38b9d1d 100644
--- a/src/widgets/TradeJournalDetails/components/Details/Details.tsx
+++ b/src/widgets/TradeJournalDetails/components/Details/Details.tsx
@@ -1,6 +1,6 @@
 import classNames from 'classnames';
 import dayjs from 'dayjs';
-import React, { useMemo } from 'react';
+import React, { useMemo, useState } from 'react';
 
 import { LabelAndValue } from '@components/LabelAndValue';
 import { SkeletonLoading } from '@components/Skeleton';
@@ -11,8 +11,6 @@ import Typography from '@uikit/Typography';
 import { pluralizeDays } from '@utils/dates';
 import { TQuotation } from 'types/TradeJournal';
 
-import { Comment } from './Comment';
-
 import styles from './Details.module.scss';
 
 type TDetailsProps = {
@@ -28,8 +26,20 @@ export const Details: React.FC<TDetailsProps> = ({
   isShowDetails,
   setIsShowDetails,
 }) => {
+  const [isShowFullComment, setIsShowFullComment] = useState(false);
+
   const isLoading = isLoadingFromProps || !quotation;
 
+  const commentLength = quotation?.comment?.length || 0;
+
+  const commentValue = useMemo(() => {
+    if (isShowFullComment) {
+      return quotation?.comment;
+    }
+
+    return commentLength > 500 ? `${quotation?.comment?.slice(0, 497)}...` : quotation?.comment;
+  }, [commentLength, isShowFullComment, quotation]);
+
   const getDateAndTime = (date: string) => {
     const dateFormat = dayjs(date).format(commonDateFormat.dateFormat);
     const timeFormat = dayjs(date).format(commonDateFormat.timeFormat);
@@ -129,15 +139,21 @@ export const Details: React.FC<TDetailsProps> = ({
             />
           </div>
 
-          <Comment
+          <LabelAndValue
             label="Комментарий"
-            text={quotation.comment1}
+            labelClassName={styles.details_label}
+            className={styles.details_info_block}
+            valueClassName={classNames(styles['details_text-color'], styles['details_text-wrap'])}
+            value={commentValue}
           />
 
-          <Comment
-            label="Внутр. комментарий"
-            text={quotation.comment2}
-          />
+          {commentLength > 500 && (
+            <div onClick={() => setIsShowFullComment((prevState) => !prevState)}>
+              <Typography.Text.S className={styles.showFullComment}>
+                {isShowFullComment ? 'Скрыть весь комментарий' : 'Показать весь комментарий'}
+              </Typography.Text.S>
+            </div>
+          )}
         </div>
       )}
     </div>
diff --git a/src/widgets/TradeJournalDetails/components/HeaderButtons/index.tsx b/src/widgets/TradeJournalDetails/components/HeaderButtons/index.tsx
index c7e2847b5..237a49668 100644
--- a/src/widgets/TradeJournalDetails/components/HeaderButtons/index.tsx
+++ b/src/widgets/TradeJournalDetails/components/HeaderButtons/index.tsx
@@ -1,15 +1,15 @@
 import React from 'react';
 
 import { IconButton } from '@components/IconButton';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 
 import styles from './HeaderButton.module.scss';
 // TODO: Не используется
 const HeaderButtons = () => (
   <div className={styles.container}>
-    <IconButton icon={<IconDeprecated variant={IconVariants.PRINT_OUTLINED} />} />
+    <IconButton icon={<Icon variant={IconVariants.PRINT_OUTLINED} />} />
 
-    <IconButton icon={<IconDeprecated variant={IconVariants.BLOCK_ROUNDED} />} />
+    <IconButton icon={<Icon variant={IconVariants.BLOCK_ROUNDED} />} />
   </div>
 );
diff --git a/src/widgets/TradeJournalDetails/constants/table.tsx b/src/widgets/TradeJournalDetails/constants/table.tsx
index afee71451..2de8454fb 100644
--- a/src/widgets/TradeJournalDetails/constants/table.tsx
+++ b/src/widgets/TradeJournalDetails/constants/table.tsx
@@ -3,7 +3,6 @@ import React from 'react';
 import { NumberCell } from '@components/NumberCell';
 import { ResizableTableProps } from '@components/Table';
 import { SortingState } from '@components/Table/types/sorting';
-import { TooltipWithBtn } from '@components/TooltipWithBtn';
 import { todayOrDate } from '@utils/dates';
 import { CustomerDataType } from 'types/Customers';
 import { TOffer, TOffersColumns } from 'types/TradeJournal';
@@ -103,21 +102,6 @@ const TABLE_COLUMNS: TOffersColumns[] = [
     position: 7,
     render: (value, record) => <EmptyIfCreatedOrRejected status={record.status}>{value}</EmptyIfCreatedOrRejected>,
   },
-  {
-    ...BASE_COLUMN_INFO,
-    title: 'Комментарий',
-    dataIndex: 'comment1',
-    key: 'comment1',
-    position: 8,
-    render: (value, record) => (
-      <EmptyIfCreatedOrRejected status={record.status}>
-        <TooltipWithBtn
-          text={value}
-          writerTrId={record.ownerId}
-        />
-      </EmptyIfCreatedOrRejected>
-    ),
-  },
 ];
 
 const INITIAL_STATE: ResizableTableProps<TOffer>['initialState'] = {
diff --git a/src/widgets/TradeJournalDetails/hooks/__tests__/useData.test.ts b/src/widgets/TradeJournalDetails/hooks/__tests__/useData.test.ts
index 7ee407b98..18cf314a7 100644
--- a/src/widgets/TradeJournalDetails/hooks/__tests__/useData.test.ts
+++ b/src/widgets/TradeJournalDetails/hooks/__tests__/useData.test.ts
@@ -45,12 +45,11 @@ describe('useData', () => {
   const mockOffer: TOffer = {
     id: 1,
     baseRate: 5.5,
-    comment1: 'Test offer',
+    comment: 'Test offer',
     isRead: false,
     ownerId: 'user-123',
     status: 'OFFERED',
     volume: 1000000,
-    comment2: null,
   };
 
   const mockQuotation: TQuotation = {
@@ -63,7 +62,7 @@ describe('useData', () => {
     startDate: '2026-04-16',
     endDate: '2026-04-20',
     collectionAt: '2026-04-16 18:00:00',
-    comment1: 'Test comment',
+    comment: 'Test comment',
     contacts: ['contact1'],
     status: 'IN_PROGRESS',
     baseRate: 5.5,
@@ -75,7 +74,6 @@ describe('useData', () => {
       offer: [mockOffer],
     },
     createdAt: '2026-04-16T10:00:00',
-    comment2: null,
   };
 
   const mockApiResponse = {
diff --git a/src/widgets/TradeJournalDetails/hooks/__tests__/useTable.test.tsx b/src/widgets/TradeJournalDetails/hooks/__tests__/useTable.test.tsx
index eedc29fea..40fbe3c0d 100644
--- a/src/widgets/TradeJournalDetails/hooks/__tests__/useTable.test.tsx
+++ b/src/widgets/TradeJournalDetails/hooks/__tests__/useTable.test.tsx
@@ -30,32 +30,29 @@ const mockOffers: TOffer[] = [
   {
     id: 1,
     baseRate: 5.5,
-    comment1: 'Test offer 1',
+    comment: 'Test offer 1',
     isRead: false,
     ownerId: 'user1',
     status: 'OFFERED',
     volume: 1000,
-    comment2: null,
   },
   {
     id: 2,
     baseRate: 6.0,
-    comment1: 'Test offer 2',
+    comment: 'Test offer 2',
     isRead: true,
     ownerId: 'user2',
     status: 'CREATED',
     volume: 2000,
-    comment2: null,
   },
   {
     id: 3,
     baseRate: 5.8,
-    comment1: 'Test offer 3',
+    comment: 'Test offer 3',
     isRead: false,
     ownerId: 'user3',
     status: 'OFFERED',
     volume: 3000,
-    comment2: null,
   },
 ];
 
@@ -119,7 +116,7 @@ describe('useTable', () => {
           {
             id: 1,
             baseRate: 5.5,
-            comment1: 'Test',
+            comment: 'Test',
             isRead: false,
             ownerId: 'user1',
             status: 'CREATED',
diff --git a/src/widgets/ntb/Indexes/components/HistoryTable/HistoryHeader.tsx b/src/widgets/ntb/Indexes/components/HistoryTable/HistoryHeader.tsx
index dc950ef2c..c7fa42780 100644
--- a/src/widgets/ntb/Indexes/components/HistoryTable/HistoryHeader.tsx
+++ b/src/widgets/ntb/Indexes/components/HistoryTable/HistoryHeader.tsx
@@ -1,7 +1,7 @@
 import React, { FC } from 'react';
 
 import { IconButton } from '@components/IconButton';
-import { IconDeprecated } from '@uikit/Icon';
+import { Icon } from '@uikit/Icon';
 import { IconVariants } from '@uikit/Icon/types';
 import Typography from '@uikit/Typography';
 
@@ -16,7 +16,7 @@ export const HistoryHeader: FC<HistoryHeaderProps> = ({ title, onReturn }) => (
   <div className={styles.header}>
     <IconButton
       icon={
-        <IconDeprecated
+        <Icon
           variant={IconVariants.CHEVRON_LEFT_OUTLINED}
           className={styles.backIcon}
         />
diff --git a/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useContextMenu.ts b/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useContextMenu.ts
index 067708e69..0be9e4e50 100644
--- a/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useContextMenu.ts
+++ b/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useContextMenu.ts
@@ -25,10 +25,6 @@ export const useContextMenu = ({ onShowHistory }: UseContextMenuProps) => {
         chartState: {
           savedInstrument: instrument.issKey,
         },
-        moexChartState: {
-          tf: '1d',
-          initialInterval: '1Y',
-        },
       });
     }
   };
diff --git a/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useTableData.ts b/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useTableData.ts
index 0674e045f..4b8264728 100644
--- a/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useTableData.ts
+++ b/src/widgets/ntb/Indexes/components/IndexesTable/hooks/useTableData.ts
@@ -17,7 +17,6 @@ export const useTableData = (filters?: GetCommodityIndexesRequest) => {
   const { issIndexes, ntbIndexes } = useMemo(() => splitIndexesBySource(indexesData), [indexesData]);
 
   const indexesWithContracts = useIndexesWithContracts(issIndexes);
-  const ntbIndexesWithContracts = useIndexesWithContracts(ntbIndexes);
 
   const { quotesMap } = useQuotes(indexesWithContracts);
 
@@ -26,7 +25,7 @@ export const useTableData = (filters?: GetCommodityIndexesRequest) => {
     [indexesWithContracts, quotesMap],
   );
 
-  const ntbData = useIndexesWithMarketData(ntbIndexesWithContracts);
+  const ntbData = useIndexesWithMarketData(ntbIndexes);
 
   const resultData = useMemo<IndexesTableDataItem[] | undefined>(() => {
     if (!indexesData) {
diff --git a/src/widgets/ntb/Indexes/const.ts b/src/widgets/ntb/Indexes/const.ts
index a768aaf3c..58d0ea236 100644
--- a/src/widgets/ntb/Indexes/const.ts
+++ b/src/widgets/ntb/Indexes/const.ts
@@ -3,5 +3,3 @@ export enum TableKeys {
   History = 'history',
   NtbHistory = 'ntbHistory',
 }
-
-export const INDEXES_CHART_BOARD = 'AGRO';
diff --git a/src/widgets/ntb/Indexes/hooks/__tests__/useRegisterIndexesChartSource.test.ts b/src/widgets/ntb/Indexes/hooks/__tests__/useRegisterIndexesChartSource.test.ts
deleted file mode 100644
index 1bee9b0db..000000000
--- a/src/widgets/ntb/Indexes/hooks/__tests__/useRegisterIndexesChartSource.test.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { renderHook } from '@testing-library/react';
-
-import { registerIndexesChartSource } from '../../utils/indexesChartDataSource';
-import { useRegisterIndexesChartSource } from '../useRegisterIndexesChartSource';
-
-jest.mock('../../utils/indexesChartDataSource', () => ({
-  registerIndexesChartSource: jest.fn(),
-}));
-
-const mockRegister = registerIndexesChartSource as jest.Mock;
-
-describe('useRegisterIndexesChartSource', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('регистрирует источник баров один раз при монтировании', () => {
-    renderHook(() => useRegisterIndexesChartSource());
-
-    expect(mockRegister).toHaveBeenCalledTimes(1);
-  });
-
-  it('не регистрирует повторно при ре-рендере', () => {
-    const { rerender } = renderHook(() => useRegisterIndexesChartSource());
-
-    rerender();
-
-    expect(mockRegister).toHaveBeenCalledTimes(1);
-  });
-});
diff --git a/src/widgets/ntb/Indexes/hooks/useRegisterIndexesChartSource.ts b/src/widgets/ntb/Indexes/hooks/useRegisterIndexesChartSource.ts
deleted file mode 100644
index 6e8279c46..000000000
--- a/src/widgets/ntb/Indexes/hooks/useRegisterIndexesChartSource.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useEffect } from 'react';
-
-import { registerIndexesChartSource } from '../utils/indexesChartDataSource';
-
-export const useRegisterIndexesChartSource = () => {
-  useEffect(() => {
-    registerIndexesChartSource();
-  }, []);
-};
diff --git a/src/widgets/ntb/Indexes/utils/__tests__/indexesChartDataSource.test.ts b/src/widgets/ntb/Indexes/utils/__tests__/indexesChartDataSource.test.ts
deleted file mode 100644
index fd9861315..000000000
--- a/src/widgets/ntb/Indexes/utils/__tests__/indexesChartDataSource.test.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { ntbIndexesController } from '@api/controllers/ntbController';
-import { registerNtbBarsResolver } from '@modules/ntb/utils/registerNtbBarsResolver';
-
-import { INDEXES_CHART_BOARD } from '../../const';
-import { registerIndexesChartSource } from '../indexesChartDataSource';
-
-import type { NtbBarPoint } from '@modules/ntb/utils/registerNtbBarsResolver';
-
-jest.mock('@modules/ntb/utils/registerNtbBarsResolver', () => ({
-  registerNtbBarsResolver: jest.fn(),
-}));
-
-jest.mock('@api/controllers/ntbController', () => ({
-  ntbIndexesController: {
-    getNtbHistory: jest.fn(),
-  },
-}));
-
-const mockRegisterNtbBarsResolver = registerNtbBarsResolver as jest.Mock;
-const mockGetNtbHistory = ntbIndexesController.getNtbHistory as jest.Mock;
-
-type FetchBars = (securityId: string) => Promise<NtbBarPoint[]>;
-
-const getFetcher = (): FetchBars => {
-  registerIndexesChartSource();
-
-  return mockRegisterNtbBarsResolver.mock.calls[0][1] as FetchBars;
-};
-
-describe('indexesChartDataSource', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('регистрирует источник баров под борд AGRO', () => {
-    registerIndexesChartSource();
-
-    expect(mockRegisterNtbBarsResolver).toHaveBeenCalledWith(INDEXES_CHART_BOARD, expect.any(Function));
-  });
-
-  it('запрашивает NTB-историю по securityId и маппит price/date/volume в точки', async () => {
-    mockGetNtbHistory.mockResolvedValue({ data: { history: [{ price: 40, date: '2026-05-19', volume: 5 }] } });
-    const fetchBars = getFetcher();
-
-    const points = await fetchBars('SEC123');
-
-    expect(mockGetNtbHistory).toHaveBeenCalledWith({ securityId: 'SEC123' });
-    expect(points).toEqual([{ date: '2026-05-19', value: 40, volume: 5 }]);
-  });
-
-  it('возвращает [] при отсутствующей истории', async () => {
-    mockGetNtbHistory.mockResolvedValue({ data: null });
-    const fetchBars = getFetcher();
-
-    expect(await fetchBars('SEC123')).toEqual([]);
-  });
-});
diff --git a/src/widgets/ntb/Indexes/utils/indexesChartDataSource.ts b/src/widgets/ntb/Indexes/utils/indexesChartDataSource.ts
deleted file mode 100644
index 19df9c6ae..000000000
--- a/src/widgets/ntb/Indexes/utils/indexesChartDataSource.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { ntbIndexesController } from '@api/controllers/ntbController';
-import { registerNtbBarsResolver } from '@modules/ntb/utils/registerNtbBarsResolver';
-
-import { INDEXES_CHART_BOARD } from '../const';
-
-export const registerIndexesChartSource = () => {
-  registerNtbBarsResolver(INDEXES_CHART_BOARD, async (securityId) => {
-    const { data } = await ntbIndexesController.getNtbHistory({ securityId });
-
-    return (data?.history ?? []).map((item) => ({ date: item.date, value: item.price, volume: item.volume }));
-  });
-};
diff --git a/src/widgets/ntb/Indexes/widget.tsx b/src/widgets/ntb/Indexes/widget.tsx
index d2b5421db..04cc74739 100644
--- a/src/widgets/ntb/Indexes/widget.tsx
+++ b/src/widgets/ntb/Indexes/widget.tsx
@@ -10,7 +10,6 @@ import { HistoryTable } from './components/HistoryTable';
 import { IndexesTable } from './components/IndexesTable';
 import { useColumnsSettings } from './hooks/useColumnsSettings';
 import { useFilterSwitch } from './hooks/useFilterSwitch';
-import { useRegisterIndexesChartSource } from './hooks/useRegisterIndexesChartSource';
 import { useShowHstory } from './hooks/useShowHistory';
 import styles from './Indexes.module.scss';
 import { downloadHistory } from './utils/downloadHistory';
@@ -18,8 +17,6 @@ import { downloadHistory } from './utils/downloadHistory';
 import type { WidgetContentBasicProps } from 'types/Widgets';
 
 const NtbIndexes: FC<WidgetContentBasicProps> = (props) => {
-  useRegisterIndexesChartSource();
-
   const filterSwitch = useFilterSwitch();
 
   const { historySecId, historySourceId, handleShowHistory, handleReturnFromHistory } = useShowHstory();
diff --git a/src/widgets/ntb/Logistic/HistoryData/HistoryData.tsx b/src/widgets/ntb/Logistic/HistoryData/HistoryData.tsx
index 8182f5fd7..3aae65b25 100644
--- a/src/widgets/ntb/Logistic/HistoryData/HistoryData.tsx
+++ b/src/widgets/ntb/Logistic/HistoryData/HistoryData.tsx
@@ -5,7 +5,7 @@ import { ArrowRightLight } from '@components/Icons/ArrowRightLight';
 import { Loader } from '@components/Loader';
 import { Table } from '@components/Table';
 import { useTableState } from '@hooks/useTableState';
-import { DEFAULT_PROPERTIES, TabKeys } from '@widgets/ntb/Logistic/constants';
+import { DEFAULT_PROPERTIES, LOGISTIC_LABELS, TabKeys } from '@widgets/ntb/Logistic/constants';
 import { TABLE_CONFIGURABLE_HISTORY_LOGISTIC } from '@widgets/ntb/Logistic/HistoryData/constants';
 
 import { logisticHistoryColumnsConfig } from '../configs/logisticHistoryTableConfig';
@@ -38,10 +38,19 @@ export const HistoryData: React.FC<HistoryDataProps> = ({
   const params = useMemo(
     () => ({
       ...(row && {
-        securityId: row.securityId,
+        groupName: LOGISTIC_LABELS[groupName],
+        partnerCode: row.partner.code,
+        loadPortName: row.loadPortName,
+        loadCountryName: row.loadCountryName,
+        dischargePortName: row.dischargePortName,
+        dischargeCountryName: row.dischargeCountryName,
+        productName: row.productName,
+        currencyName: row.currencyName,
+        comment: row.comment,
+        partySize: row.partySize,
       }),
     }),
-    [row],
+    [row, groupName],
   );
   const { isLoading, logisticHistory } = useLogisticHistoryData(params);
 
diff --git a/src/widgets/ntb/Logistic/LogisticContextMenu/LogisticContextMenu.tsx b/src/widgets/ntb/Logistic/LogisticContextMenu/LogisticContextMenu.tsx
index 7e0a56572..cb94e88d8 100644
--- a/src/widgets/ntb/Logistic/LogisticContextMenu/LogisticContextMenu.tsx
+++ b/src/widgets/ntb/Logistic/LogisticContextMenu/LogisticContextMenu.tsx
@@ -21,13 +21,7 @@ export interface LogisticContextMenuProps {
 
 const LogisticContextMenu: FC<LogisticContextMenuProps> = (props) => {
   const { event, setOpenContextMenu, openContextMenu, groupName } = props;
-  const {
-    showRequestToChatOption,
-    showChartOption,
-    handleOpenRequestToChatModal,
-    handleShowHistoryData,
-    handleOpenChart,
-  } = useContextMenu(props);
+  const { showRequestToChatOption, handleOpenRequestToChatModal, handleShowHistoryData } = useContextMenu(props);
 
   return (
     <ContextMenu
@@ -45,15 +39,6 @@ const LogisticContextMenu: FC<LogisticContextMenuProps> = (props) => {
         </div>
       )}
 
-      {showChartOption && (
-        <div
-          className={styles.dropdownItem}
-          onClick={handleOpenChart}
-        >
-          Отобразить в виджете График
-        </div>
-      )}
-
       <div
         className={styles.dropdownItem}
         onClick={handleShowHistoryData}
diff --git a/src/widgets/ntb/Logistic/LogisticContextMenu/__tests__/LogisticContextMenu.test.tsx b/src/widgets/ntb/Logistic/LogisticContextMenu/__tests__/LogisticContextMenu.test.tsx
deleted file mode 100644
index ebd8d0161..000000000
--- a/src/widgets/ntb/Logistic/LogisticContextMenu/__tests__/LogisticContextMenu.test.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react';
-import React from 'react';
-
-import LogisticContextMenu from '../LogisticContextMenu';
-import { useContextMenu } from '../useContextMenu';
-
-import type { LogisticContextMenuProps } from '../LogisticContextMenu';
-
-jest.mock('@components/ContextMenu', () => ({
-  ContextMenu: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
-}));
-
-jest.mock('../useContextMenu', () => ({
-  useContextMenu: jest.fn(),
-}));
-
-const mockUseContextMenu = useContextMenu as jest.Mock;
-
-const baseHookReturn = {
-  showRequestToChatOption: false,
-  showChartOption: false,
-  handleOpenRequestToChatModal: jest.fn(),
-  handleShowHistoryData: jest.fn(),
-  handleOpenChart: jest.fn(),
-};
-
-const mockProps = {
-  event: undefined,
-  row: null,
-  setOpenContextMenu: jest.fn(),
-  openContextMenu: true,
-  setIsActiveHistoryData: jest.fn(),
-  groupName: 'auto',
-} as unknown as LogisticContextMenuProps;
-
-const CHART_ITEM = 'Отобразить в виджете График';
-
-describe('LogisticContextMenu', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('показывает пункт открытия графика, когда showChartOption=true', () => {
-    mockUseContextMenu.mockReturnValue({ ...baseHookReturn, showChartOption: true });
-
-    render(<LogisticContextMenu {...mockProps} />);
-
-    expect(screen.getByText(CHART_ITEM)).toBeInTheDocument();
-  });
-
-  it('скрывает пункт графика, когда showChartOption=false', () => {
-    mockUseContextMenu.mockReturnValue({ ...baseHookReturn, showChartOption: false });
-
-    render(<LogisticContextMenu {...mockProps} />);
-
-    expect(screen.queryByText(CHART_ITEM)).not.toBeInTheDocument();
-  });
-
-  it('вызывает handleOpenChart по клику на пункт графика', () => {
-    const handleOpenChart = jest.fn();
-    mockUseContextMenu.mockReturnValue({ ...baseHookReturn, showChartOption: true, handleOpenChart });
-
-    render(<LogisticContextMenu {...mockProps} />);
-    fireEvent.click(screen.getByText(CHART_ITEM));
-
-    expect(handleOpenChart).toHaveBeenCalledTimes(1);
-  });
-});
diff --git a/src/widgets/ntb/Logistic/LogisticContextMenu/__tests__/useContextMenu.test.ts b/src/widgets/ntb/Logistic/LogisticContextMenu/__tests__/useContextMenu.test.ts
index b7ad8f6bc..402efb878 100644
--- a/src/widgets/ntb/Logistic/LogisticContextMenu/__tests__/useContextMenu.test.ts
+++ b/src/widgets/ntb/Logistic/LogisticContextMenu/__tests__/useContextMenu.test.ts
@@ -10,12 +10,6 @@ import { createMockCustomerData, createMockUser } from '@utils/testUtils/createM
 import { TGroupName, TLogisticTableItem } from '../../types';
 import { useContextMenu } from '../useContextMenu';
 
-jest.mock('@widgets/Chart/creator', () => ({
-  createGraphicWidget: jest.fn(),
-}));
-
-const mockedCreateGraphicWidget = jest.requireMock('@widgets/Chart/creator').createGraphicWidget;
-
 describe('useContextMenu', () => {
   const mockProps = {
     row: { partner: { unicode: '9108000001' } } as TLogisticTableItem,
@@ -102,43 +96,6 @@ describe('useContextMenu', () => {
     });
   });
 
-  describe('chart option', () => {
-    const rowWithIssKey = {
-      ...mockProps,
-      row: { partner: { unicode: '9108000001' }, issKey: 'NTBVTFC.NTBVLB.111222333' } as TLogisticTableItem,
-    };
-
-    beforeEach(() => {
-      mockedCreateGraphicWidget.mockClear();
-    });
-
-    it('should expose showChartOption=true when row has issKey', () => {
-      const { result } = renderHookWithProviders(() => useContextMenu(rowWithIssKey), { preloadedState });
-
-      expect(result.current.showChartOption).toBe(true);
-    });
-
-    it('should expose showChartOption=false when row has no issKey', () => {
-      const { result } = renderHookWithProviders(() => useContextMenu(mockProps), { preloadedState });
-
-      expect(result.current.showChartOption).toBe(false);
-    });
-
-    it('should create graphic widget with row issKey and close menu on handleOpenChart', () => {
-      const { result } = renderHookWithProviders(() => useContextMenu(rowWithIssKey), { preloadedState });
-
-      act(() => {
-        result.current.handleOpenChart();
-      });
-
-      expect(mockedCreateGraphicWidget).toHaveBeenCalledWith({
-        chartState: { savedInstrument: 'NTBVTFC.NTBVLB.111222333' },
-        moexChartState: { tf: '1d', initialInterval: '1Y' },
-      });
-      expect(mockProps.setOpenContextMenu).toHaveBeenCalledWith(false);
-    });
-  });
-
   it('should handle row=null', () => {
     expect(() => {
       renderHookWithProviders(() => useContextMenu({ ...mockProps, row: null }), {
diff --git a/src/widgets/ntb/Logistic/LogisticContextMenu/useContextMenu.ts b/src/widgets/ntb/Logistic/LogisticContextMenu/useContextMenu.ts
index 6220780e9..d8423103e 100644
--- a/src/widgets/ntb/Logistic/LogisticContextMenu/useContextMenu.ts
+++ b/src/widgets/ntb/Logistic/LogisticContextMenu/useContextMenu.ts
@@ -1,7 +1,5 @@
 import { useCallback } from 'react';
 
-import { createGraphicWidget } from '@widgets/Chart/creator';
-
 import { useCalcLogistic } from '../hooks/useCalcLogistic';
 
 import type { LogisticContextMenuProps } from './LogisticContextMenu';
@@ -18,8 +16,6 @@ export const useContextMenu = ({
 >) => {
   const { calcLogistic, isAvailable: isCalcLogisticAvailable } = useCalcLogistic(row?.partner.unicode, groupName);
 
-  const issKey = row?.issKey ?? null;
-
   const handleOpenRequestToChatModal = useCallback(() => {
     calcLogistic();
     setOpenContextMenu(false);
@@ -30,24 +26,7 @@ export const useContextMenu = ({
     setIsActiveHistoryData(true);
   }, [setIsActiveHistoryData, setOpenContextMenu]);
 
-  const handleOpenChart = useCallback(() => {
-    if (issKey) {
-      createGraphicWidget({
-        chartState: { savedInstrument: issKey },
-        moexChartState: { tf: '1d', initialInterval: '1Y' },
-      });
-    }
-    setOpenContextMenu(false);
-  }, [issKey, setOpenContextMenu]);
-
   const showRequestToChatOption = isCalcLogisticAvailable && !disableRequestToChat;
-  const showChartOption = Boolean(issKey);
 
-  return {
-    handleOpenRequestToChatModal,
-    handleShowHistoryData,
-    handleOpenChart,
-    showRequestToChatOption,
-    showChartOption,
-  };
+  return { handleOpenRequestToChatModal, handleShowHistoryData, showRequestToChatOption };
 };
diff --git a/src/widgets/ntb/Logistic/components/BaseLogisticList.tsx b/src/widgets/ntb/Logistic/components/BaseLogisticList.tsx
index 09eed3156..26dda001a 100644
--- a/src/widgets/ntb/Logistic/components/BaseLogisticList.tsx
+++ b/src/widgets/ntb/Logistic/components/BaseLogisticList.tsx
@@ -5,7 +5,6 @@ import { useTableState } from '@hooks/useTableState';
 import { HistoryData } from '@widgets/ntb/Logistic/HistoryData';
 
 import { DEFAULT_PROPERTIES, TabKeys } from '../constants';
-import { useHandleRowClick, useLogisticWithContracts, useRegisterLogisticChartSource } from '../hooks';
 import { LogisticContextMenu } from '../LogisticContextMenu';
 import { formatHistoryTitle } from '../utils/formatHistoryTitle';
 
@@ -37,12 +36,6 @@ export const BaseLogisticList: FC<TBaseLogisticListProps> = ({
     defaultProperties: DEFAULT_PROPERTIES[groupName].main,
   });
 
-  const { handleRowClick } = useHandleRowClick();
-
-  // TODO: техдолг, нужно подправить после того как проработаем концепцию рыночных модулей
-  // добытчик баров нтб работает, только если на столе был вызван виджет логистики хотя бы раз
-  useRegisterLogisticChartSource();
-
   const onReturnFromHistoryData = useCallback(() => {
     setIsActiveHistoryData(false);
   }, []);
@@ -66,8 +59,7 @@ export const BaseLogisticList: FC<TBaseLogisticListProps> = ({
     setOpenContextMenu(true);
   }, []);
 
-  const preparedData = useMemo(() => prepareLogisticTableData(data), [data]);
-  const dataSource = useLogisticWithContracts(preparedData);
+  const dataSource: TLogisticTableItem[] = useMemo(() => prepareLogisticTableData(data), [data]);
 
   return (
     <>
@@ -79,7 +71,6 @@ export const BaseLogisticList: FC<TBaseLogisticListProps> = ({
         configurable={configurable}
         setSettingsComponent={isActiveHistoryData ? undefined : setSettingsComponent}
         onContextMenuClick={onContextMenuClick}
-        onRowClick={handleRowClick}
         saveToBackend={false}
         setController={setController}
         initialState={tableState}
diff --git a/src/widgets/ntb/Logistic/components/__tests__/BaseLogisticList.test.tsx b/src/widgets/ntb/Logistic/components/__tests__/BaseLogisticList.test.tsx
index ad733346a..d0f370e4c 100644
--- a/src/widgets/ntb/Logistic/components/__tests__/BaseLogisticList.test.tsx
+++ b/src/widgets/ntb/Logistic/components/__tests__/BaseLogisticList.test.tsx
@@ -37,12 +37,6 @@ jest.mock('@hooks/useTableState', () => ({
   useTableState: jest.fn(),
 }));
 
-jest.mock('../../hooks', () => ({
-  useHandleRowClick: () => ({ handleRowClick: jest.fn() }),
-  useLogisticWithContracts: (data: unknown) => data,
-  useRegisterLogisticChartSource: () => undefined,
-}));
-
 describe('BaseLogisticList Component', () => {
   const mockProps: TBaseLogisticListProps = {
     data: mockLogistic,
diff --git a/src/widgets/ntb/Logistic/configs/logisticTableConfig.tsx b/src/widgets/ntb/Logistic/configs/logisticTableConfig.tsx
index b444e28d3..33e52d84d 100644
--- a/src/widgets/ntb/Logistic/configs/logisticTableConfig.tsx
+++ b/src/widgets/ntb/Logistic/configs/logisticTableConfig.tsx
@@ -123,73 +123,73 @@ export const logisticFreightColumnsConfig: LogisticColumns[] = [
     minWidth: 100,
   },
   {
-    title: 'Ставка',
-    dataIndex: LogisticColumnKeys.VALUE,
-    key: LogisticColumnKeys.VALUE,
-    align: 'right',
+    title: 'Страна отправления',
+    dataIndex: LogisticColumnKeys.LOAD_COUNTRY_NAME,
+    key: LogisticColumnKeys.LOAD_COUNTRY_NAME,
+    align: 'left',
     position: 4,
     minWidth: 100,
-    render: renderNumber,
+    hidden: true,
   },
   {
-    title: 'Изм %',
-    dataIndex: LogisticColumnKeys.VALUE_CHANGE,
-    key: LogisticColumnKeys.VALUE_CHANGE,
-    align: 'right',
+    title: 'Товар',
+    dataIndex: LogisticColumnKeys.PRODUCT_NAME,
+    key: LogisticColumnKeys.PRODUCT_NAME,
+    align: 'left',
     position: 5,
     minWidth: 100,
-    onCell: createOnCellHighlighted(LogisticColumnKeys.VALUE_CHANGE),
-    render: renderNumber,
   },
   {
-    title: 'Дата',
-    dataIndex: LogisticColumnKeys.VALUE_DATE,
-    key: LogisticColumnKeys.VALUE_DATE,
+    title: 'Объем партии',
+    dataIndex: LogisticColumnKeys.PARTY_SIZE,
+    key: LogisticColumnKeys.PARTY_SIZE,
     align: 'left',
     position: 6,
     minWidth: 100,
-    render: renderDate,
   },
   {
-    title: 'Товар',
-    dataIndex: LogisticColumnKeys.PRODUCT_NAME,
-    key: LogisticColumnKeys.PRODUCT_NAME,
-    align: 'left',
+    title: 'Цена за тонну',
+    dataIndex: LogisticColumnKeys.VALUE,
+    key: LogisticColumnKeys.VALUE,
+    align: 'right',
     position: 7,
     minWidth: 100,
+    render: renderNumber,
   },
   {
-    title: 'Объем партии',
-    dataIndex: LogisticColumnKeys.PARTY_SIZE,
-    key: LogisticColumnKeys.PARTY_SIZE,
-    align: 'left',
+    title: 'Изм %',
+    dataIndex: LogisticColumnKeys.VALUE_CHANGE,
+    key: LogisticColumnKeys.VALUE_CHANGE,
+    align: 'right',
     position: 8,
     minWidth: 100,
+    onCell: createOnCellHighlighted(LogisticColumnKeys.VALUE_CHANGE),
+    render: renderNumber,
   },
   {
-    title: 'Источник',
-    dataIndex: LogisticColumnKeys.PARTNER_NAME,
-    key: LogisticColumnKeys.PARTNER_NAME,
+    title: 'Валюта',
+    dataIndex: LogisticColumnKeys.CURRENCY_CHANGE,
+    key: LogisticColumnKeys.CURRENCY_CHANGE,
     align: 'left',
     position: 9,
     minWidth: 100,
+    hidden: true,
   },
   {
-    title: 'Страна отправления',
-    dataIndex: LogisticColumnKeys.LOAD_COUNTRY_NAME,
-    key: LogisticColumnKeys.LOAD_COUNTRY_NAME,
+    title: 'Дата',
+    dataIndex: LogisticColumnKeys.VALUE_DATE,
+    key: LogisticColumnKeys.VALUE_DATE,
     align: 'left',
     position: 10,
     minWidth: 100,
-    hidden: true,
+    render: renderDate,
   },
   {
-    title: 'Валюта',
-    dataIndex: LogisticColumnKeys.CURRENCY_CHANGE,
-    key: LogisticColumnKeys.CURRENCY_CHANGE,
+    title: 'Партнер',
+    dataIndex: LogisticColumnKeys.PARTNER_NAME,
+    key: LogisticColumnKeys.PARTNER_NAME,
     align: 'left',
     position: 11,
     minWidth: 100,
-    hidden: true,
   },
 ];
diff --git a/src/widgets/ntb/Logistic/constants.ts b/src/widgets/ntb/Logistic/constants.ts
index 717078d38..1666deeb5 100644
--- a/src/widgets/ntb/Logistic/constants.ts
+++ b/src/widgets/ntb/Logistic/constants.ts
@@ -45,8 +45,6 @@ export const LOGISTIC_LABELS = {
   [LOGISTICS.FREIGHT]: 'Фрахт',
 };
 
-export const LOGISTIC_CHART_BOARD = 'NTBVLB';
-
 export enum TabKeys {
   Main = 'main',
   History = 'history',
diff --git a/src/widgets/ntb/Logistic/hooks/__tests__/useHandleRowClick.test.ts b/src/widgets/ntb/Logistic/hooks/__tests__/useHandleRowClick.test.ts
deleted file mode 100644
index 691c91279..000000000
--- a/src/widgets/ntb/Logistic/hooks/__tests__/useHandleRowClick.test.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { act } from '@testing-library/react';
-
-import { useChangeProperties } from '@modules/widgetProperties';
-import { addValuesToPublicContext } from '@store/slices/publicContext';
-import { markAsActiveMaster } from '@store/slices/widgets';
-import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-import { renderHookWithProviders } from '@utils/test-utils';
-
-import { useHandleRowClick } from '../useHandleRowClick';
-
-import type { TLogisticTableItem } from '../../types';
-
-jest.mock('@terminal/desktop/workspaces/default/components/Widget/context', () => ({
-  useWidgetIdContext: jest.fn(),
-}));
-
-jest.mock('@modules/widgetProperties', () => ({
-  useChangeProperties: jest.fn(),
-}));
-
-const mockUseWidgetIdContext = useWidgetIdContext as jest.Mock;
-const mockUseChangeProperties = useChangeProperties as jest.Mock;
-
-const WIDGET_ID = 42;
-
-const createRow = (issKey: string | null): TLogisticTableItem =>
-  ({ issKey }) as Partial<TLogisticTableItem> as TLogisticTableItem;
-
-describe('useHandleRowClick', () => {
-  const updateProperties = jest.fn();
-
-  beforeEach(() => {
-    jest.clearAllMocks();
-    mockUseWidgetIdContext.mockReturnValue(WIDGET_ID);
-    mockUseChangeProperties.mockReturnValue({ updateProperties });
-  });
-
-  it('публикует instrId в publicContext и помечает виджет активным мастером', () => {
-    const { result, store } = renderHookWithProviders(() => useHandleRowClick(), { mockDispatch: true });
-
-    act(() => {
-      result.current.handleRowClick(createRow('ISS:1'));
-    });
-
-    expect(store.dispatch).toHaveBeenCalledWith(
-      addValuesToPublicContext({
-        id: WIDGET_ID,
-        publicProperties: [{ name: 'instrId', value: 'ISS:1' }],
-      }),
-    );
-    expect(store.dispatch).toHaveBeenCalledWith(markAsActiveMaster({ widgetId: WIDGET_ID }));
-  });
-
-  it('пишет issKey в selectedInstrument через updateProperties', () => {
-    const { result } = renderHookWithProviders(() => useHandleRowClick(), { mockDispatch: true });
-
-    act(() => {
-      result.current.handleRowClick(createRow('ISS:1'));
-    });
-
-    expect(updateProperties).toHaveBeenCalledTimes(1);
-
-    const draft = { selectedInstrument: null } as { selectedInstrument: string | null };
-    updateProperties.mock.calls[0][0](draft);
-
-    expect(draft.selectedInstrument).toBe('ISS:1');
-  });
-
-  it('подставляет null, если у строки нет issKey', () => {
-    const { result, store } = renderHookWithProviders(() => useHandleRowClick(), { mockDispatch: true });
-
-    act(() => {
-      result.current.handleRowClick(createRow(null));
-    });
-
-    expect(store.dispatch).toHaveBeenCalledWith(
-      addValuesToPublicContext({
-        id: WIDGET_ID,
-        publicProperties: [{ name: 'instrId', value: null }],
-      }),
-    );
-  });
-});
diff --git a/src/widgets/ntb/Logistic/hooks/__tests__/useLogisticWithContracts.test.ts b/src/widgets/ntb/Logistic/hooks/__tests__/useLogisticWithContracts.test.ts
deleted file mode 100644
index 7ebee5bc4..000000000
--- a/src/widgets/ntb/Logistic/hooks/__tests__/useLogisticWithContracts.test.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { renderHook } from '@testing-library/react';
-
-import { useContracts } from '@modules/contracts';
-
-import { LOGISTIC_CHART_BOARD } from '../../constants';
-import { useLogisticWithContracts } from '../useLogisticWithContracts';
-
-import type { Contract } from '@modules/contracts';
-import type { TLogisticTableItem } from '../../types';
-
-jest.mock('@modules/contracts', () => ({
-  useContracts: jest.fn(),
-}));
-
-const mockUseContracts = useContracts as jest.Mock;
-
-const createContract = (partial: Partial<Contract>): Contract => partial as Contract;
-
-const createRow = (partial: Partial<TLogisticTableItem>): TLogisticTableItem => partial as TLogisticTableItem;
-
-describe('useLogisticWithContracts', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('проставляет issKey из контракта с бордом NTBVLB по совпадению symbol === securityId', () => {
-    mockUseContracts.mockReturnValue({
-      contracts: [createContract({ board: LOGISTIC_CHART_BOARD, symbol: 'SEC1', issKey: 'ISS:1' })],
-    });
-
-    const { result } = renderHook(() => useLogisticWithContracts([createRow({ securityId: 'SEC1' })]));
-
-    expect(result.current[0].issKey).toBe('ISS:1');
-  });
-
-  it('возвращает issKey=null, если контракт не найден', () => {
-    mockUseContracts.mockReturnValue({ contracts: [] });
-
-    const { result } = renderHook(() => useLogisticWithContracts([createRow({ securityId: 'SEC1' })]));
-
-    expect(result.current[0].issKey).toBeNull();
-  });
-
-  it('игнорирует контракты с другим бордом', () => {
-    mockUseContracts.mockReturnValue({
-      contracts: [createContract({ board: 'OTHER', symbol: 'SEC1', issKey: 'ISS:1' })],
-    });
-
-    const { result } = renderHook(() => useLogisticWithContracts([createRow({ securityId: 'SEC1' })]));
-
-    expect(result.current[0].issKey).toBeNull();
-  });
-
-  it('сохраняет исходные поля строки', () => {
-    mockUseContracts.mockReturnValue({ contracts: [] });
-
-    const { result } = renderHook(() => useLogisticWithContracts([createRow({ securityId: 'SEC1', value: 42 })]));
-
-    expect(result.current[0]).toMatchObject({ securityId: 'SEC1', value: 42, issKey: null });
-  });
-});
diff --git a/src/widgets/ntb/Logistic/hooks/__tests__/useRegisterLogisticChartSource.test.ts b/src/widgets/ntb/Logistic/hooks/__tests__/useRegisterLogisticChartSource.test.ts
deleted file mode 100644
index 0af9781c5..000000000
--- a/src/widgets/ntb/Logistic/hooks/__tests__/useRegisterLogisticChartSource.test.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { renderHook } from '@testing-library/react';
-
-import { registerLogisticChartSource } from '../../utils/logisticChartDataSource';
-import { useRegisterLogisticChartSource } from '../useRegisterLogisticChartSource';
-
-jest.mock('../../utils/logisticChartDataSource', () => ({
-  registerLogisticChartSource: jest.fn(),
-}));
-
-const mockRegister = registerLogisticChartSource as jest.Mock;
-
-describe('useRegisterLogisticChartSource', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('регистрирует источник баров один раз при монтировании', () => {
-    renderHook(() => useRegisterLogisticChartSource());
-
-    expect(mockRegister).toHaveBeenCalledTimes(1);
-  });
-
-  it('не регистрирует повторно при ре-рендере', () => {
-    const { rerender } = renderHook(() => useRegisterLogisticChartSource());
-
-    rerender();
-
-    expect(mockRegister).toHaveBeenCalledTimes(1);
-  });
-});
diff --git a/src/widgets/ntb/Logistic/hooks/index.ts b/src/widgets/ntb/Logistic/hooks/index.ts
index 9687bc1de..58cd98ad0 100644
--- a/src/widgets/ntb/Logistic/hooks/index.ts
+++ b/src/widgets/ntb/Logistic/hooks/index.ts
@@ -1,4 +1 @@
 export { useLogisticData } from './useLogisticData';
-export { useHandleRowClick } from './useHandleRowClick';
-export { useLogisticWithContracts } from './useLogisticWithContracts';
-export { useRegisterLogisticChartSource } from './useRegisterLogisticChartSource';
diff --git a/src/widgets/ntb/Logistic/hooks/useHandleRowClick.ts b/src/widgets/ntb/Logistic/hooks/useHandleRowClick.ts
deleted file mode 100644
index 1b265a01d..000000000
--- a/src/widgets/ntb/Logistic/hooks/useHandleRowClick.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { useCallback } from 'react';
-import { useDispatch } from 'react-redux';
-
-import { useChangeProperties } from '@modules/widgetProperties';
-import { addValuesToPublicContext } from '@store/slices/publicContext';
-import { markAsActiveMaster } from '@store/slices/widgets';
-import { useWidgetIdContext } from '@terminal/desktop/workspaces/default/components/Widget/context';
-
-import type { WidgetProperties } from '../properties/types';
-import type { TLogisticTableItem } from '../types';
-
-export const useHandleRowClick = () => {
-  const widgetId = useWidgetIdContext();
-
-  const dispatch = useDispatch();
-
-  const { updateProperties } = useChangeProperties<WidgetProperties>();
-
-  const handleRowClick = useCallback(
-    (record: TLogisticTableItem) => {
-      const issKey = record.issKey ?? null;
-
-      dispatch(
-        addValuesToPublicContext({
-          id: widgetId,
-          publicProperties: [
-            {
-              name: 'instrId',
-              value: issKey,
-            },
-          ],
-        }),
-      );
-
-      updateProperties((state) => {
-        state.selectedInstrument = issKey;
-      });
-
-      dispatch(markAsActiveMaster({ widgetId }));
-    },
-    [dispatch, updateProperties, widgetId],
-  );
-
-  return {
-    handleRowClick,
-  };
-};
diff --git a/src/widgets/ntb/Logistic/hooks/useLogisticWithContracts.ts b/src/widgets/ntb/Logistic/hooks/useLogisticWithContracts.ts
deleted file mode 100644
index f25b003ac..000000000
--- a/src/widgets/ntb/Logistic/hooks/useLogisticWithContracts.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { useMemo } from 'react';
-
-import { useContracts } from '@modules/contracts';
-
-import { LOGISTIC_CHART_BOARD } from '../constants';
-
-import type { TLogisticTableItem } from '../types';
-
-export const useLogisticWithContracts = (data: TLogisticTableItem[]): TLogisticTableItem[] => {
-  const { contracts } = useContracts();
-
-  const issKeyBySymbol = useMemo(
-    () =>
-      new Map(
-        contracts
-          .filter((contract) => contract.board === LOGISTIC_CHART_BOARD)
-          .map((contract) => [contract.symbol, contract.issKey]),
-      ),
-    [contracts],
-  );
-
-  return useMemo(
-    () => data.map((row) => ({ ...row, issKey: issKeyBySymbol.get(row.securityId) ?? null })),
-    [data, issKeyBySymbol],
-  );
-};
diff --git a/src/widgets/ntb/Logistic/hooks/useRegisterLogisticChartSource.ts b/src/widgets/ntb/Logistic/hooks/useRegisterLogisticChartSource.ts
deleted file mode 100644
index c3e67b88c..000000000
--- a/src/widgets/ntb/Logistic/hooks/useRegisterLogisticChartSource.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useEffect } from 'react';
-
-import { registerLogisticChartSource } from '../utils/logisticChartDataSource';
-
-export const useRegisterLogisticChartSource = () => {
-  useEffect(() => {
-    registerLogisticChartSource();
-  }, []);
-};
diff --git a/src/widgets/ntb/Logistic/mock.ts b/src/widgets/ntb/Logistic/mock.ts
index 51bae7170..4e18b9733 100644
--- a/src/widgets/ntb/Logistic/mock.ts
+++ b/src/widgets/ntb/Logistic/mock.ts
@@ -3,7 +3,6 @@ import { Logistic } from '@modules/ntb/types';
 export const mockLogistic: Logistic[] = [
   {
     created: '2026-03-10T22:00:00.282643',
-    securityId: '111222333',
     partner: {
       code: 171,
       unicode: '9107000000',
@@ -23,7 +22,6 @@ export const mockLogistic: Logistic[] = [
   },
   {
     created: '2026-03-10T22:00:00.285834',
-    securityId: '444555666',
     partner: {
       code: 171,
       unicode: '9107000000',
diff --git a/src/widgets/ntb/Logistic/properties/defaultProperties.ts b/src/widgets/ntb/Logistic/properties/defaultProperties.ts
index 581d49948..9e7e7f3ab 100644
--- a/src/widgets/ntb/Logistic/properties/defaultProperties.ts
+++ b/src/widgets/ntb/Logistic/properties/defaultProperties.ts
@@ -11,7 +11,6 @@ export const AUTO_DEFAULT_PROPERTIES: WidgetProperties = {
     groupByField: LogisticColumnKeys.DISCHARGE_PORT_NAME,
   },
   history: { columns: null, dataFiltersState: null, sortingState: DEFAULT_ORDERS, groupByField: undefined },
-  selectedInstrument: null,
 };
 
 export const FREIGHT_DEFAULT_PROPERTIES: WidgetProperties = {
@@ -22,7 +21,6 @@ export const FREIGHT_DEFAULT_PROPERTIES: WidgetProperties = {
     groupByField: LogisticColumnKeys.LOAD_PORT_NAME,
   },
   history: { columns: null, dataFiltersState: null, sortingState: DEFAULT_ORDERS, groupByField: undefined },
-  selectedInstrument: null,
 };
 
 export {
diff --git a/src/widgets/ntb/Logistic/properties/types.ts b/src/widgets/ntb/Logistic/properties/types.ts
index 43577731c..ec40b5b44 100644
--- a/src/widgets/ntb/Logistic/properties/types.ts
+++ b/src/widgets/ntb/Logistic/properties/types.ts
@@ -13,10 +13,9 @@ type TableState = {
   groupByField: keyof Logistic | undefined;
 };
 
-export type WidgetRuntimeProperties = {
+type WidgetRuntimeProperties = {
   [TabKeys.Main]: TableState;
   [TabKeys.History]: TableState;
-  selectedInstrument: string | null;
 };
 
 export type WidgetProperties = DeepReplaceByKey<WidgetRuntimeProperties, 'columns', string | null>;
diff --git a/src/widgets/ntb/Logistic/types/index.ts b/src/widgets/ntb/Logistic/types/index.ts
index 9188b8c46..24fbd5d97 100644
--- a/src/widgets/ntb/Logistic/types/index.ts
+++ b/src/widgets/ntb/Logistic/types/index.ts
@@ -41,7 +41,6 @@ export type TLogisticTableItem = Logistic & {
   [LogisticColumnKeys.PARTNER_NAME]: Logistic['partner']['name'];
 } & {
   key?: string;
-  issKey?: string | null;
 };
 export type LogisticColumns = ResizableColumnType<TLogisticTableItem>;
 export type LogisticListProps = BaseListProps & {
diff --git a/src/widgets/ntb/Logistic/utils/__tests__/formatHistoryTitle.test.ts b/src/widgets/ntb/Logistic/utils/__tests__/formatHistoryTitle.test.ts
index d60e602d6..8c5b1e894 100644
--- a/src/widgets/ntb/Logistic/utils/__tests__/formatHistoryTitle.test.ts
+++ b/src/widgets/ntb/Logistic/utils/__tests__/formatHistoryTitle.test.ts
@@ -4,7 +4,6 @@ import type { TLogisticTableItem } from '../../types';
 
 const createMockLogistic = (overrides: Partial<TLogisticTableItem> = {}): TLogisticTableItem => ({
   created: '2026-03-10T22:00:00.282643',
-  securityId: '111222333',
   partner: {
     code: 171,
     unicode: '9107000000',
diff --git a/src/widgets/ntb/Logistic/utils/__tests__/logisticChartDataSource.test.ts b/src/widgets/ntb/Logistic/utils/__tests__/logisticChartDataSource.test.ts
deleted file mode 100644
index 9297b7f3c..000000000
--- a/src/widgets/ntb/Logistic/utils/__tests__/logisticChartDataSource.test.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { ntbLogisticController } from '@api/controllers/ntbController';
-import { registerNtbBarsResolver } from '@modules/ntb/utils/registerNtbBarsResolver';
-
-import { LOGISTIC_CHART_BOARD } from '../../constants';
-import { registerLogisticChartSource } from '../logisticChartDataSource';
-
-import type { NtbBarPoint } from '@modules/ntb/utils/registerNtbBarsResolver';
-
-jest.mock('@modules/ntb/utils/registerNtbBarsResolver', () => ({
-  registerNtbBarsResolver: jest.fn(),
-}));
-
-jest.mock('@api/controllers/ntbController', () => ({
-  ntbLogisticController: {
-    getLogisticHistory: jest.fn(),
-  },
-}));
-
-const mockRegisterNtbBarsResolver = registerNtbBarsResolver as jest.Mock;
-const mockGetLogisticHistory = ntbLogisticController.getLogisticHistory as jest.Mock;
-
-type FetchBars = (securityId: string) => Promise<NtbBarPoint[]>;
-
-const getFetcher = (): FetchBars => {
-  registerLogisticChartSource();
-
-  return mockRegisterNtbBarsResolver.mock.calls[0][1] as FetchBars;
-};
-
-describe('logisticChartDataSource', () => {
-  beforeEach(() => {
-    jest.clearAllMocks();
-  });
-
-  it('регистрирует источник баров под борд NTBVLB', () => {
-    registerLogisticChartSource();
-
-    expect(mockRegisterNtbBarsResolver).toHaveBeenCalledWith(LOGISTIC_CHART_BOARD, expect.any(Function));
-  });
-
-  it('запрашивает историю по securityId и маппит value/valueDate в точки', async () => {
-    mockGetLogisticHistory.mockResolvedValue({ data: [{ value: 40, valueDate: '2026-05-19' }] });
-    const fetchBars = getFetcher();
-
-    const points = await fetchBars('SEC123');
-
-    expect(mockGetLogisticHistory).toHaveBeenCalledWith({ securityId: 'SEC123' });
-    expect(points).toEqual([{ date: '2026-05-19', value: 40 }]);
-  });
-
-  it('возвращает [] при отсутствующей истории', async () => {
-    mockGetLogisticHistory.mockResolvedValue({ data: null });
-    const fetchBars = getFetcher();
-
-    expect(await fetchBars('SEC123')).toEqual([]);
-  });
-});
diff --git a/src/widgets/ntb/Logistic/utils/logisticChartDataSource.ts b/src/widgets/ntb/Logistic/utils/logisticChartDataSource.ts
deleted file mode 100644
index caef9cc05..000000000
--- a/src/widgets/ntb/Logistic/utils/logisticChartDataSource.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { ntbLogisticController } from '@api/controllers/ntbController';
-import { registerNtbBarsResolver } from '@modules/ntb/utils/registerNtbBarsResolver';
-
-import { LOGISTIC_CHART_BOARD } from '../constants';
-
-export const registerLogisticChartSource = () => {
-  registerNtbBarsResolver(LOGISTIC_CHART_BOARD, async (securityId) => {
-    const { data } = await ntbLogisticController.getLogisticHistory({ securityId });
-
-    return (data ?? []).map((item) => ({ date: item.valueDate, value: item.value }));
-  });
-};
diff --git a/src/widgets/ntb/OrdersAndDeals/__tests__/OrdersAndDeals.test.tsx b/src/widgets/ntb/OrdersAndDeals/__tests__/OrdersAndDeals.test.tsx
index 12fc41ab2..2443f5770 100644
--- a/src/widgets/ntb/OrdersAndDeals/__tests__/OrdersAndDeals.test.tsx
+++ b/src/widgets/ntb/OrdersAndDeals/__tests__/OrdersAndDeals.test.tsx
@@ -1,13 +1,11 @@
 import '../dependenciesMock';
 
-import { fireEvent, screen } from '@testing-library/react';
+import { fireEvent, render, screen } from '@testing-library/react';
 import React from 'react';
 
+import { useAppSelect } from '@hooks/useAppSelector';
 import { useTradingDirectionAvailability } from '@modules/ntb/hooks/useTradingDirectionAvailability';
-import { RootState } from '@store/setupStore';
-import { UserState } from '@store/slices/user';
-import { renderWithProviders } from '@utils/test-utils';
-import { Permissions } from 'types/User';
+
 import { WidgetContentBasicProps } from 'types/Widgets';
 
 import { OrdersAndDeals } from '../ordersAndDeals';
@@ -37,12 +35,16 @@ jest.mock('@uikit/Tabs', () => ({
   ),
 }));
 
+jest.mock('@hooks/useAppSelector', () => ({
+  useAppSelect: jest.fn(),
+}));
+
 jest.mock('@modules/ntb/hooks/useTradingDirectionAvailability', () => ({
   useTradingDirectionAvailability: jest.fn(),
 }));
 
-jest.mock('@components/OrderButton', () => ({
-  OrderButton: () => (
+jest.mock('../components', () => ({
+  CreateOrderBtn: () => (
     <button
       type="button"
       data-testid="create-order-btn"
@@ -69,25 +71,26 @@ describe('OrdersAndDeals Widget', () => {
     (useTradingDirectionAvailability as jest.Mock).mockReturnValue({ isBuyAvailable, isSellAvailable });
   };
 
-  const preloadedState = {
-    userSlice: { permissions: [Permissions.AGRO_TRADER] },
-  } as Partial<RootState>;
+  const mockAgroTrader = (isAgroTrader: boolean) => {
+    (useAppSelect as jest.Mock).mockReturnValue(isAgroTrader);
+  };
 
   beforeEach(() => {
     jest.clearAllMocks();
+    mockAgroTrader(true);
     mockAvailability(true, true);
   });
 
   describe('Рендеринг', () => {
     it('должен отображать заголовок и табы', () => {
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, { preloadedState });
+      render(<OrdersAndDeals {...defaultProps} />);
 
       expect(screen.getByTestId('widget-header')).toBeInTheDocument();
       expect(screen.getByTestId('tabs')).toBeInTheDocument();
     });
 
     it('должен отображать контент заявок по умолчанию', () => {
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, { preloadedState });
+      render(<OrdersAndDeals {...defaultProps} />);
 
       const ordersContentWrapper = screen.getByTestId('orders-content').parentElement;
       const dealsContentWrapper = screen.getByTestId('deals-content').parentElement;
@@ -99,7 +102,7 @@ describe('OrdersAndDeals Widget', () => {
 
   describe('Взаимодействие', () => {
     it('должен переключаться на контент сделок при клике на таб', () => {
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, { preloadedState });
+      render(<OrdersAndDeals {...defaultProps} />);
 
       const dealsTab = screen.getByText('Сделки');
       fireEvent.click(dealsTab);
@@ -114,34 +117,37 @@ describe('OrdersAndDeals Widget', () => {
 
   describe('Видимость кнопки создания заявки', () => {
     it('должен показывать кнопку, если агро-трейдер и доступны оба направления', () => {
+      mockAgroTrader(true);
       mockAvailability(true, true);
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, { preloadedState });
+      render(<OrdersAndDeals {...defaultProps} />);
       expect(screen.getByTestId('create-order-btn')).toBeInTheDocument();
     });
 
     it('должен показывать кнопку, если агро-трейдер и доступно только направление покупки', () => {
+      mockAgroTrader(true);
       mockAvailability(true, false);
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, { preloadedState });
+      render(<OrdersAndDeals {...defaultProps} />);
       expect(screen.getByTestId('create-order-btn')).toBeInTheDocument();
     });
 
     it('должен показывать кнопку, если агро-трейдер и доступно только направление продажи', () => {
+      mockAgroTrader(true);
       mockAvailability(false, true);
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, { preloadedState });
+      render(<OrdersAndDeals {...defaultProps} />);
       expect(screen.getByTestId('create-order-btn')).toBeInTheDocument();
     });
 
     it('должен скрывать кнопку, если оба направления недоступны', () => {
+      mockAgroTrader(true);
       mockAvailability(false, false);
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, { preloadedState });
+      render(<OrdersAndDeals {...defaultProps} />);
       expect(screen.queryByTestId('create-order-btn')).not.toBeInTheDocument();
     });
 
     it('должен скрывать кнопку, если пользователь не агро-трейдер', () => {
+      mockAgroTrader(false);
       mockAvailability(true, true);
-      renderWithProviders(<OrdersAndDeals {...defaultProps} />, {
-        preloadedState: { ...preloadedState, userSlice: { permissions: ['VIEWER'] } as UserState },
-      });
+      render(<OrdersAndDeals {...defaultProps} />);
       expect(screen.queryByTestId('create-order-btn')).not.toBeInTheDocument();
     });
   });
diff --git a/src/widgets/ntb/OrdersAndDeals/components/CreateOrderBtn.tsx b/src/widgets/ntb/OrdersAndDeals/components/CreateOrderBtn.tsx
new file mode 100644
index 000000000..4d03ed83b
--- /dev/null
+++ b/src/widgets/ntb/OrdersAndDeals/components/CreateOrderBtn.tsx
@@ -0,0 +1,42 @@
+import React, { FC } from 'react';
+
+import { useDispatch } from 'react-redux';
+
+import { IconButton } from '@components/IconButton';
+import { OrderIcon } from '@components/Icons/OrderIcon';
+import { NO_DRAG_CLASSNAME } from '@configs/appConfig';
+import { OrderModalPayload } from '@modules/ntb/types';
+import { openNTBFormOrderModal } from '@store/slices/modals';
+import Tooltip from '@uikit/Tooltip';
+
+type CreateOrderBtnProps = {
+  payload: OrderModalPayload;
+};
+
+export const CreateOrderBtn: FC<CreateOrderBtnProps> = ({ payload }) => {
+  const dispatch = useDispatch();
+
+  return (
+    <Tooltip
+      placement="top"
+      title="Создать заявку"
+      overlayInnerStyle={{
+        color: 'white',
+        padding: '4px 12px',
+        minHeight: '24px',
+      }}
+      zIndex={12000}
+      destroyTooltipOnHide
+      arrow={{ pointAtCenter: true }}
+    >
+      <IconButton
+        icon={<OrderIcon />}
+        size="large"
+        className={NO_DRAG_CLASSNAME}
+        onClick={() => {
+          dispatch(openNTBFormOrderModal(payload));
+        }}
+      />
+    </Tooltip>
+  );
+};
diff --git a/src/widgets/ntb/OrdersAndDeals/components/__tests__/CreateOrderBtn.test.tsx b/src/widgets/ntb/OrdersAndDeals/components/__tests__/CreateOrderBtn.test.tsx
new file mode 100644
index 000000000..3af12f681
--- /dev/null
+++ b/src/widgets/ntb/OrdersAndDeals/components/__tests__/CreateOrderBtn.test.tsx
@@ -0,0 +1,89 @@
+import { render, screen } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
+import React from 'react';
+
+import { CreateOrderBtn } from '../CreateOrderBtn';
+
+// Мокаем необходимые зависимости
+jest.mock('@components/IconButton', () => ({
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Так нужно для тестов
+  IconButton: ({ onClick, ...props }: any) => (
+    <button
+      data-testid="icon-button"
+      onClick={onClick}
+      type="button"
+      {...props}
+    >
+      Mock IconButton
+    </button>
+  ),
+}));
+
+jest.mock('@components/Icons/OrderIcon', () => ({
+  OrderIcon: () => <span data-testid="order-icon">Order Icon</span>,
+}));
+
+jest.mock('@uikit/Tooltip', () => ({
+  __esModule: true,
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Так нужно для тестов
+  default: ({ children, ...props }: any) => (
+    <div
+      data-testid="tooltip"
+      {...props}
+    >
+      {children}
+    </div>
+  ),
+}));
+
+// Мокаем useDispatch
+const mockUseDispatch = jest.fn();
+jest.mock('react-redux', () => ({
+  ...jest.requireActual('react-redux'),
+  useDispatch: () => mockUseDispatch,
+}));
+
+describe('CreateOrderBtn', () => {
+  const mockPayload = {
+    direction: 'buy',
+    securityId: 'RU000A0JX0Y0',
+    boardId: 'MOEX',
+  };
+
+  it('renders correctly with given props', () => {
+    render(<CreateOrderBtn payload={mockPayload} />);
+
+    // Проверяем, что компонент рендерится
+    expect(screen.getByTestId('tooltip')).toBeInTheDocument();
+    expect(screen.getByTestId('icon-button')).toBeInTheDocument();
+  });
+
+  it('dispatches openNTBFormOrderModal action on click', async () => {
+    const user = userEvent.setup();
+    mockUseDispatch.mockReturnValue(jest.fn());
+
+    render(<CreateOrderBtn payload={mockPayload} />);
+
+    // Находим кнопку и кликаем на нее
+    const button = screen.getByTestId('icon-button');
+    await user.click(button);
+
+    // Проверяем, что useDispatch был вызван
+    expect(mockUseDispatch).toHaveBeenCalled();
+  });
+
+  it('has correct tooltip title', () => {
+    render(<CreateOrderBtn payload={mockPayload} />);
+
+    // Проверяем, что тултип имеет правильный текст
+    expect(screen.getByTestId('tooltip')).toHaveAttribute('title', 'Создать заявку');
+  });
+
+  it('passes correct props to Tooltip', () => {
+    render(<CreateOrderBtn payload={mockPayload} />);
+
+    // Проверяем, что Tooltip получает правильные пропсы
+    expect(screen.getByTestId('tooltip')).toHaveAttribute('placement', 'top');
+    expect(screen.getByTestId('tooltip')).toHaveAttribute('zIndex', '12000');
+  });
+});
diff --git a/src/widgets/ntb/OrdersAndDeals/components/index.ts b/src/widgets/ntb/OrdersAndDeals/components/index.ts
index 8580a469c..7d04f0f04 100644
--- a/src/widgets/ntb/OrdersAndDeals/components/index.ts
+++ b/src/widgets/ntb/OrdersAndDeals/components/index.ts
@@ -1,3 +1,3 @@
 export { OrdersList } from './OrdersList';
 export { DealsList } from './DealsList';
-export { OrderContextMenu } from './OrderContextMenu';
+export { CreateOrderBtn } from './CreateOrderBtn';
diff --git a/src/widgets/ntb/OrdersAndDeals/ordersAndDeals.tsx b/src/widgets/ntb/OrdersAndDeals/ordersAndDeals.tsx
index 367c4cb5f..339f4792f 100644
--- a/src/widgets/ntb/OrdersAndDeals/ordersAndDeals.tsx
+++ b/src/widgets/ntb/OrdersAndDeals/ordersAndDeals.tsx
@@ -1,22 +1,18 @@
 import React, { FC, useState } from 'react';
 
-import { useDispatch } from 'react-redux';
-
-import { OrderButton } from '@components/OrderButton';
 import WidgetContentWrapper from '@components/WidgetContentWrapper';
 import WidgetHeader from '@components/WidgetHeader';
 import { useColumnsSettingsItems } from '@hooks/table/useColumnsSettingsItems';
 import { useTableSearchComponent } from '@hooks/table/useTableSearch';
 import { useAppSelect } from '@hooks/useAppSelector';
-import { useTradeTimePermissions } from '@modules/ntb/hooks/useTradeTimePermissions';
 import { useTradingDirectionAvailability } from '@modules/ntb/hooks/useTradingDirectionAvailability';
 import { ORDER_DIRECTION } from '@modules/ntb/types';
 import { isAgroTraderSelector, userTradingAccessesSelector } from '@store/selectors/user';
-import { openNTBFormOrderModal } from '@store/slices/modals';
 import { Tabs } from '@uikit/Tabs';
 import Typography from '@uikit/Typography';
 import { WidgetContentBasicProps } from 'types/Widgets';
 
+import { CreateOrderBtn } from './components';
 import { TAB_LABELS, TABS } from './constants';
 import { DealsContent } from './dealsContent';
 import styles from './ordersAndDeals.module.scss';
@@ -31,9 +27,6 @@ export const OrdersAndDeals: FC<WidgetContentBasicProps> = (props) => {
   const isAgroTrader = useAppSelect(isAgroTraderSelector);
   const { isBuyAvailable, isSellAvailable } = useTradingDirectionAvailability();
   const { userCode } = useAppSelect(userTradingAccessesSelector) ?? {};
-  const dispatch = useDispatch();
-
-  const { permission } = useTradeTimePermissions();
 
   const canCreateOrder = isAgroTrader && (isBuyAvailable || isSellAvailable);
 
@@ -44,17 +37,7 @@ export const OrdersAndDeals: FC<WidgetContentBasicProps> = (props) => {
         hideBindIcon
         items={settingsItems}
         tableSearchComponent={tableSearchComponent}
-        rightBtns={
-          canCreateOrder ? (
-            <OrderButton
-              onClick={() => {
-                dispatch(openNTBFormOrderModal(modalPayload));
-              }}
-              disabled={!permission.active}
-              title={permission.hint || 'Создать заявку'}
-            />
-          ) : undefined
-        }
+        rightBtns={canCreateOrder ? <CreateOrderBtn payload={modalPayload} /> : undefined}
         details={userCode}
       />
       <WidgetContentWrapper
diff --git a/webpack.config.js b/webpack.config.js
index 8511bdd7c..750997b65 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -25,7 +25,7 @@ try {
 
 const PORT = 3000;
 
-const MAX_CYCLES = 74;
+const MAX_CYCLES = 84;
 let numCyclesDetected = 0;
 
 const getOptimization = (isDevelopment) =>
@@ -256,26 +256,7 @@ module.exports = (env) => {
         {
           test: /\.svg$/,
           issuer: /\.[jt]sx?$/,
-          use: [
-            {
-              loader: '@svgr/webpack',
-              options: {
-                svgoConfig: {
-                  plugins: [
-                      {
-                          name: 'preset-default',
-                          params: {
-                              overrides: {
-                                  removeViewBox: false,
-                              }
-                          }
-                      }
-                  ]
-                }
-              }
-            },
-            'url-loader'
-          ],
+          use: ['@svgr/webpack', 'url-loader'],
         },
       ],
     },