From 26b937afbacbb03b6a71d45b92289592e18ef57f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Tue, 27 Oct 2026 11:23:04 +0500 Subject: [PATCH] =?UTF-8?q?chore:=20=D0=BC=D0=B0=D0=BD=D0=B8=D1=84=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8B=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?=20=C2=AB=D0=98=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D1=91=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BB=D0=BE=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=C2=BB=20=D0=B4=D0=BB=D1=8F=20=D0=A1=D0=A2,?= =?UTF-8?q?=20=D0=9E=D0=98=D0=94=20=D0=B8=20=D0=9A=D0=9F=D0=A1=20(#1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исключённые поставщики хранятся отдельно от «Оценки поставщиков», чтобы отчёт СТ, INCORE и потоки их не видели. Колонки — копия офферов своей формы плюс СТ и причина; файл КП — числом, лукап на библиотеку не читается через REST. Co-Authored-By: Claude Opus 5.5 (1M context) --- docs/adr/0001-isklyuchenie-postavshchikov.md | 14 +++ provisioning/manifests/ct.provisioning.json | 91 ++++++++++++++++++++ provisioning/manifests/kps.provisioning.json | 91 ++++++++++++++++++++ provisioning/manifests/oid.provisioning.json | 67 ++++++++++++++ provisioning/sources.json | 2 + 5 files changed, 265 insertions(+) diff --git a/docs/adr/0001-isklyuchenie-postavshchikov.md b/docs/adr/0001-isklyuchenie-postavshchikov.md index 5e38aa8..44bb57b 100644 --- a/docs/adr/0001-isklyuchenie-postavshchikov.md +++ b/docs/adr/0001-isklyuchenie-postavshchikov.md @@ -71,6 +71,20 @@ - Запись офферов и исключённых — в общем модуле для трёх форм, чтобы позже перенести сохранение на бэкенд без переделки компонентов. +## Устройство списков + +Манифесты — `provisioning/manifests/{ct,oid,kps}.provisioning.json`. + +- Колонки — копия «Оценки поставщиков» своей формы (чтобы «Вернуть» восстановило оффер + целиком) плюс `CT` (найти исключённых при открытии СТ) и `reason` (причина). +- Ссылки на обычные списки — Lookup, файл КП — сразу `offerFileId: Number`: лукап на + библиотеку документов не читается через REST. +- Номер строки комплекта — в `Title`, как в «Оценке поставщиков» (`поставщик-позиция-N`): + один формат во всех списках, разбор переиспользуется (`parseOfferItemIndex`). +- Причина повторяется в каждой строке поставщика — осознанная денормализация. Отдельный + список «Исключённые поставщики» дал бы 6 списков вместо 3 ради короткого текста. +- Поставщик без цен — строка без `position`, чтобы колонка не терялась. + ## Последствия - Три новых списка на `/sites/sed` — описать в `provisioning/manifests/{ct,oid,kps}`, diff --git a/provisioning/manifests/ct.provisioning.json b/provisioning/manifests/ct.provisioning.json index a5a3a87..77cbe10 100644 --- a/provisioning/manifests/ct.provisioning.json +++ b/provisioning/manifests/ct.provisioning.json @@ -345,6 +345,97 @@ } ] }, + { + "title": "Исключённые предложения", + "template": "GenericList", + "shared": false, + "columns": [ + { + "internalName": "CT", + "title": "Номер СТ", + "type": "Lookup", + "lookupList": "Сравнительная таблица", + "lookupShowField": "number" + }, + { + "internalName": "supplier", + "title": "Поставщик", + "type": "Lookup", + "lookupList": "Поставщики", + "lookupShowField": "name" + }, + { + "internalName": "reason", + "title": "Причина исключения", + "type": "Note" + }, + { + "internalName": "position", + "title": "Позиция", + "type": "Lookup", + "lookupList": "Позиции СТ", + "lookupShowField": "position" + }, + { + "internalName": "supplierPosition", + "title": "Наименование позиции", + "type": "Text" + }, + { + "internalName": "unit", + "title": "Ед. изм", + "type": "Text" + }, + { + "internalName": "quantity", + "title": "Количество", + "type": "Number", + "decimals": 3 + }, + { + "internalName": "price", + "title": "Цена", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "summa", + "title": "Сумма", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "valuta", + "title": "Валюта", + "type": "Lookup", + "lookupList": "Курс Валют", + "lookupShowField": "code" + }, + { + "internalName": "priceTenge", + "title": "Цена в тенге", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "summaTenge", + "title": "Сумма в тенге", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "offerFileId", + "title": "Id файла КП", + "type": "Number", + "decimals": 0 + }, + { + "internalName": "deliveryDistanceKm", + "title": "Расстояние доставки, км", + "type": "Number" + } + ] + }, { "title": "Поставщики", "template": "GenericList", diff --git a/provisioning/manifests/kps.provisioning.json b/provisioning/manifests/kps.provisioning.json index 04c441f..d85d4db 100644 --- a/provisioning/manifests/kps.provisioning.json +++ b/provisioning/manifests/kps.provisioning.json @@ -386,6 +386,97 @@ "type": "Note" } ] + }, + { + "title": "Исключённые предложения КПС", + "template": "GenericList", + "shared": false, + "columns": [ + { + "internalName": "CT", + "title": "Номер СТ", + "type": "Lookup", + "lookupList": "Сравнительная таблица КПС", + "lookupShowField": "number" + }, + { + "internalName": "supplier", + "title": "Поставщик", + "type": "Lookup", + "lookupList": "Поставщики", + "lookupShowField": "name" + }, + { + "internalName": "reason", + "title": "Причина исключения", + "type": "Note" + }, + { + "internalName": "position", + "title": "Позиция", + "type": "Lookup", + "lookupList": "Позиции СТ КПС", + "lookupShowField": "position" + }, + { + "internalName": "supplierPosition", + "title": "Наименование позиции", + "type": "Text" + }, + { + "internalName": "unit", + "title": "Ед. изм", + "type": "Text" + }, + { + "internalName": "quantity", + "title": "Количество", + "type": "Number", + "decimals": 3 + }, + { + "internalName": "price", + "title": "Цена", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "summa", + "title": "Сумма", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "valuta", + "title": "Валюта", + "type": "Lookup", + "lookupList": "Курс Валют", + "lookupShowField": "code" + }, + { + "internalName": "priceTenge", + "title": "Цена в тенге", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "summaTenge", + "title": "Сумма в тенге", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "offerFileId", + "title": "Id файла КП", + "type": "Number", + "decimals": 0 + }, + { + "internalName": "deliveryDistanceKm", + "title": "Расстояние доставки, км", + "type": "Number" + } + ] } ] } diff --git a/provisioning/manifests/oid.provisioning.json b/provisioning/manifests/oid.provisioning.json index abcab3f..525d6ca 100644 --- a/provisioning/manifests/oid.provisioning.json +++ b/provisioning/manifests/oid.provisioning.json @@ -381,6 +381,73 @@ "type": "Boolean" } ] + }, + { + "title": "Исключённые предложения ОИД", + "template": "GenericList", + "shared": false, + "columns": [ + { + "internalName": "CT", + "title": "Номер СТ", + "type": "Lookup", + "lookupList": "Сравнительная таблица ОИД", + "lookupShowField": "number" + }, + { + "internalName": "supplier", + "title": "Поставщик", + "type": "Lookup", + "lookupList": "Поставщики", + "lookupShowField": "name" + }, + { + "internalName": "reason", + "title": "Причина исключения", + "type": "Note" + }, + { + "internalName": "position", + "title": "Позиция", + "type": "Lookup", + "lookupList": "Позиции СТ ОИД", + "lookupShowField": "position" + }, + { + "internalName": "supplierPosition", + "title": "Наименование позиции", + "type": "Text" + }, + { + "internalName": "unit", + "title": "Ед. изм", + "type": "Text" + }, + { + "internalName": "quantity", + "title": "Количество", + "type": "Number", + "decimals": 3 + }, + { + "internalName": "price", + "title": "Цена", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "summa", + "title": "Сумма", + "type": "Number", + "decimals": 2 + }, + { + "internalName": "offerFileId", + "title": "Id файла КП", + "type": "Number", + "decimals": 0 + } + ] } ] } diff --git a/provisioning/sources.json b/provisioning/sources.json index 7c4f5c5..ee4b67c 100644 --- a/provisioning/sources.json +++ b/provisioning/sources.json @@ -33,6 +33,7 @@ { "title": "Критерии", "template": "GenericList" }, { "title": "Согласование СТ", "template": "GenericList" }, { "title": "Не получены КП", "template": "GenericList" }, + { "title": "Исключённые предложения", "template": "GenericList" }, { "title": "Поставщики", "template": "GenericList" }, { "title": "Курс Валют", "template": "GenericList" }, { "title": "Матрица согласования СТ", "template": "GenericList" }, @@ -53,6 +54,7 @@ { "title": "Критерии ОИД", "template": "GenericList" }, { "title": "Согласование СТ ОИД", "template": "GenericList" }, { "title": "Не получены КП ОИД", "template": "GenericList" }, + { "title": "Исключённые предложения ОИД", "template": "GenericList" }, { "title": "Коммерческие предложения ОИД", "template": "DocumentLibrary" } ] }