Срез 0 (proposal): соглашения шаблона, сверка макета, change slice-0-skeleton (контракт v1.0, compose, проверки) #2
@ -34,8 +34,25 @@
|
||||
| OQ-26 | Единицы: ББ/ОФР в тыс. руб., ОСВ в руб. — правило округления при элиминации (до тыс., банковское?) | — | срез 6 | допущение: считать в рублях, округлять до тыс. руб. на выходе в `kfo_result_line` (ROUND_HALF_UP) |
|
||||
| OQ-27 | Поля ТЗ 5.1 (сценарий, подход, гудвилл) не в модалке создания консолидации | макет [42] vs ТЗ 5.1 | срез 4, 6 | **решено (владелец макета, 03.10)**: `approach = BASIC` всегда в первой очереди, EXTENDED позже — определять по набору загруженных документов; `goodwill_enabled` — переключатель на вкладке «Гудвилл»; `scenario = CONFIRM` включается через меню «…» консолидации в списке |
|
||||
| OQ-28 | ~~Нет экрана проверки распознавания~~ — есть, открывается кликом по документу в панели «Первичные документы» (снимок `41`) | макет [41] | срез 3 | **закрыт**: реализовать по макету; для ОСВ (xlsx) левая панель — уточнить |
|
||||
| OQ-29 | Макет: нет экранов пользователей / ролей / матрицы прав (ТЗ 8.1, `role_permission`) | макет vs ТЗ 8.1 | срез 1 | допущение: минимальный экран администратора по §10 правил |
|
||||
| OQ-29 | Макет: нет экранов пользователей / ролей / матрицы прав (ТЗ 8.1, `role_permission`); в журнале макета роли «Аналитик ДКБ», «Кредитный аналитик», «Утверждающий РФ», «Верификатор ГО», «Система распознавания / Сервис» (ANL-034, снимок `43-02`) | макет vs ТЗ 8.1 | срез 1 | допущение: минимальный экран администратора по §10 правил; роли — коды ТЗ 8.1, названия макета не используются |
|
||||
| OQ-30 | Макет: шахматка и КФО показаны в тыс. руб. с 2 знаками, ОСВ — в рублях; где и как округлять (связано с OQ-26) | макет [30] [31-01] | срез 5–6 | допущение: хранить и считать в рублях, переключатель единиц — только отображение |
|
||||
| OQ-31 | КПП ЮЛ: в макете колонка и поле форм (`50`, `61`, `51-02`, `79`), в DBML v5.13 у `legal_entity` поля нет. Нужен ли КПП (и в импорте, и для ИП, у которых его нет)? | макет [50] [51-02] | срез 1, DBML v5.14 | допущение: не вводить до решения; показывать «—» |
|
||||
| OQ-32 | ЮЛ в макете состоит одновременно в ГСК и ГСЗ («Входит в ГСК» и «Входит в ГСЗ» заполнены, [79]); ТЗ 6.1 / ANL-030 — только в одной. Что верно? | макет [79] [51-02] | срез 1 (partial unique `related_group_member.legal_entity_id`) | допущение: по ТЗ — одна группа; форма допускает выбор только одного поля |
|
||||
| OQ-33 | «ID ГСК/ГСЗ в CRM» в формах (`51-03`, `51-04`, `77-02`; пример «3-9CGSK01» в формате ЕЦП CRM): у `related_group` в DBML только внутренний `code` (GSK-001). Есть ли у ГСК/ГСЗ идентификатор в CRM? | макет [77-02] | срез 1, DBML | допущение: поле формы = `related_group.code`, генерируется системой; `crm_id` не вводить |
|
||||
| OQ-34 | «Удалить» ГСК в меню строки (`77-01`): физическое удаление или закрытие с историей? В DBML у `related_group` нет флага/истории удаления | макет [77-01] | срез 1 | допущение: удаление только пустой группы (без текущих участников), факт — в `audit_event(MEMBERSHIP_CHANGE)` |
|
||||
| OQ-35 | База процента отклонения: в таблице корректировки % считается к сумме стороны ЮЛ-1 (−79,77 % для 1 000 ↔ 202,32, `31-02-02`), в «Подтверждении КФО клиента» — к версии банка (ст. 2, `31-06`); DBML и Методика (сноска 14) — к **меньшей** сумме. Что считать правильным для `correction.deviation_percent` и `client_kfo_line.deviation_percent`? | макет [31-02] [31-06] vs DBML, Методика | срезы 5–6 | допущение: к меньшей (Методика); макет считать неточным |
|
||||
| OQ-36 | Экран проверки показывает строки формы **без кода** («в том числе: Основные средства, пригодные к использованию…», `41`); DBML хранит только строки с кодом (`financial_statement_line`), контракт требует `line_code`. Хранить ли расшифровочные строки без кода (и как их показывать)? | макет [41] vs DBML, контракт | срез 3, контракт v1.x | допущение: строки без кода не хранить и не показывать в первой очереди |
|
||||
| OQ-37 | Строка «Гудвилл 1105» (ФСБУ 4/2023) в распознанной форме (`41`) vs строка `kfo_result_line.line_code = 'GOODWILL'` в разделе I КФО: использовать код 1105 или служебный GOODWILL? Влияет на шаблон строк на фронте и на формулы §7 (1100 = … + 1105?) | макет [41], ФСБУ 4/2023 | срез 3, 6 | допущение: хранить код 1105 как пришёл; строка КФО «GOODWILL» — отдельная, уточнить у методологов |
|
||||
| OQ-38 | ЕХ в макете показывает и **неверифицированные** консолидации («Консолидация 2025 К4», без даты верификации, `62` [83-01]); ЕХ ТЗ 6.2 — срез пишется только после «Верифицирован». Показывать ли в ЛК ЕХ незавершённые консолидации (как «в работе») или только `ex_snapshot`? | макет [62] [83-01] vs ЕХ ТЗ 6.2 | срез 7 | допущение: только срезы `ex_snapshot`; незавершённые — в разделе «Отчётность» |
|
||||
| OQ-39 | Состав «сформированной отчётности» в ЕХ (`83-01`): КФО .xlsx, Шахматка .xlsx и «Консолидированная отчетность .pdf» с датой «Сформирован» и подписями Утвердил/Верифицировал. Нужен ли PDF-экспорт КФО и какие ещё артефакты (сводная ОСВ, корректировки, гудвилл — ЕХ ТЗ 5.2) показывать? | макет [83-01] vs ЕХ ТЗ 5.2 | срез 7 | допущение: xlsx из `payload` на лету для всех `item_type`; PDF — не делать до решения |
|
||||
| OQ-40 | «Квартальная дата» в журнале для консолидации 2024 К1 показана как 01.01.2024 (`43-02`); по правилам банка 1 квартал 2024 = отчётная дата 01.04.2024 (`consolidation.reporting_date`). Что выводить? | макет [43-02] | срез 4, 7 | допущение: `reporting_date` по правилам (01.04.2024); макет неточен |
|
||||
| OQ-41 | Экран «ЮЛ вне ГК» (`61`, заголовок «Юридические лица») показывает все ЮЛ с заполненной колонкой ГК, а не только монозаёмщиков. Это сводный реестр ЮЛ или фильтр `company_group_id IS NULL`? | макет [61] | срез 1 | допущение: сводный реестр всех ЮЛ с фильтром «вне ГК», по умолчанию выключенным |
|
||||
| OQ-42 | «Проверка распознавания» для ОСВ (xlsx) в макете отсутствует (строки `doc-row--readonly`, `39`). Нужен ли отдельный экран проверки ОСВ (дерево строк, подсветка контрагентов) или проверка ОСВ только через сводную ОСВ (`30`)? | макет [39] | срез 2 (UI) | допущение: минимальный экран таблицы ОСВ по §1 правил без левой панели исходника |
|
||||
| OQ-43 | Кнопка «К отчетности» неактивна у консолидаций в статусах «Инициация» и «Верификация РФ», активна у «Консолидация РФ» и «Верифицирован» (`34`). Каково правило доступности отчёта по статусу / роли? | макет [34] | срез 4, 7 (policy) | допущение: отчёт доступен с `CONSOLIDATION_RF` и далее для всех ролей с `CONSOLIDATION_VIEW`; «Инициация» — только карточка |
|
||||
| OQ-44 | «Добавить версию» создаёт версию сразу без модалки (`43-01`), копируя периметр; нужно ли подтверждение и выбор сценария/подхода новой версии? | макет [43-01] | срез 7 | допущение: без модалки, периметр и сценарий копируются из предыдущей версии |
|
||||
| OQ-45 | Контракт `recognition-result.schema.json` допускает `data_type = NU` (строки налогового учёта в ОСВ «БУ, НУ»), а enum DBML `osv_data_type` — только BU, CURRENCY, QUANTITY, SUM. Добавлять NU в DBML (v5.14) или не хранить строки НУ? | контракт v1.0 vs DBML | срез 2 (маппинг `osv_entry`) | допущение: контракт оставляет NU; решение по хранению — до начала Среза 2; код Среза 0 не затрагивает |
|
||||
| OQ-46 | Обязательны ли все ОСВ расширенного подхода (02, 03, 08, 44, 26, 91, 51, 52, 59, 80, 83, 86, 97, 001, 008, 009, 011) при `approach = EXTENDED`, или часть — «при наличии»? | ТЗ 5.1; `required_document_rule.is_mandatory` | срез 0 (seed), срез 3 (чек-лист) | допущение: все `is_mandatory = true` для EXTENDED |
|
||||
| OQ-47 | Источник полного плана счетов 1С для seed `chart_of_account`: в фикстурах файла нет, «план счетов из бандла макета» не передан | `06-test-data.md` §6, `fixtures/README.md` | срез 0 (seed) | допущение: План счетов 94н (01–99, 001–011) + типовые субсчета 1С БП 3.0, упомянутые в §4/§6; остальное добавляет администратор (ARCH-004) |
|
||||
|
||||
Служебные идентификаторы в DBML/аналитике: `ANL-nnn` — замечания аналитика к макету; `ARCH-nnn` — архитектурные решения;
|
||||
`DECISION-n` — решения по модели; `FIX-nn` — исправления дефектов v4.
|
||||
|
||||
@ -14,46 +14,49 @@
|
||||
├─ ОТЧЁТНОСТЬ
|
||||
│ ├─ Группы компаний ─── таблица ГК ── [Консолидации →] ── Консолидации ГК [03] [34]
|
||||
│ │ ├─ [Взять в работу] [35]
|
||||
│ │ ├─ меню «…»: Добавить версию · Вкл/Откл подтверждение КФО · История изменений [43]
|
||||
│ │ ├─ меню «…»: Добавить версию [43-01] · Вкл/Откл подтверждение КФО · История изменений [43-02] [43]
|
||||
│ │ ├─ панель Организации
|
||||
│ │ │ ├─ [Документы] → Первичные документы (drawer) [39] [40]
|
||||
│ │ │ │ └─ клик по документу → Проверка распознавания [41]
|
||||
│ │ │ ├─ [Документы] → Первичные документы (drawer) [39] [39-01] [40]
|
||||
│ │ │ │ └─ клик по PDF-документу → Проверка распознавания [41] [41-02] (строки ОСВ/xlsx не открываются)
|
||||
│ │ │ ├─ [Редактировать состав] [36]
|
||||
│ │ │ └─ [Скачать чек-лист] [37]
|
||||
│ │ └─ [К отчетности] → Отчёт «ГК — ГГГГ Кn»
|
||||
│ │ ├─ ОСВ (сводная) [30] [32]
|
||||
│ │ ├─ Шахматка [31-01]
|
||||
│ │ ├─ Таблица корректировки [31-02]
|
||||
│ │ ├─ Гудвилл [31-03]
|
||||
│ │ ├─ КФО [31-04]
|
||||
│ │ ├─ КФО Общий [31-05]
|
||||
│ │ ├─ Шахматка [31-01] [31-01-01]
|
||||
│ │ ├─ Таблица корректировки [31-02] [31-02-01] [31-02-02]
|
||||
│ │ ├─ Гудвилл [31-03] [31-03-01]
|
||||
│ │ ├─ КФО [31-04] [31-04-01]
|
||||
│ │ ├─ КФО Общий [31-05] [31-05-01]
|
||||
│ │ ├─ Подтверждение КФО клиента [31-06]
|
||||
│ │ └─ [Изменить статус] [33]
|
||||
│ │ └─ [Изменить статус] [33] [33-01]
|
||||
│ └─ Монозаемщики ─── таблица ЮЛ вне ГК с документами ── [Документы] → drawer [60] [84]
|
||||
├─ СПРАВОЧНИКИ
|
||||
│ ├─ ГК и организации ─── список ГК | карточка ГК: вкладки ЮЛ / ГСК / ГСЗ, Архив [50] [77]
|
||||
│ │ [Импорт из файла] [38] [Создать ГК/ЮЛ] → ГК | ЮЛ | ГСК | ГСЗ [51]
|
||||
│ │ меню ЮЛ «…»: Изменить ЮЛ, Вывести из состава ГК [78–80]
|
||||
│ └─ ЮЛ вне ГК ─── таблица ЮЛ, [Создать ЮЛ] [61]
|
||||
│ │ [Импорт из файла] [38] [Создать ГК/ЮЛ] → ГК | ЮЛ | ГСК | ГСЗ [51] [51-01…51-04]
|
||||
│ │ меню ГСК «…»: Изменить ГСК · Удалить [77-01] [77-02]
|
||||
│ │ меню ЮЛ «…»: Изменить ЮЛ · История изменений · Перевести в другую ГК · Вывести из состава ГК [78] [79] [79-01] [79-02] [80]
|
||||
│ └─ ЮЛ вне ГК ─── таблица ЮЛ (по снимку — все ЮЛ с колонкой ГК), [Создать ЮЛ] [61]
|
||||
├─ ДОКУМЕНТЫ
|
||||
│ └─ Единое хранилище ─── дерево ГК → ГСК → Организации | документы и срезы узла [62] [82] [83]
|
||||
│ └─ Единое хранилище ─── дерево ГК → ГСК → Организации | консолидации узла → файлы [62] [82] [83] [83-01]
|
||||
└─ СИСТЕМА
|
||||
└─ Журнал действий ─── категории Справочники / Консолидация / Доступ, таблица событий [63]
|
||||
```
|
||||
|
||||
Чего в макете **нет** (есть в ТЗ, реализуется по ТЗ): пользователи и матрица прав (ТЗ 8.1), модалка смены статуса с
|
||||
комментарием. Решения по полям ТЗ 5.1 (OQ-27): подход — базовый по умолчанию; гудвилл — переключатель на вкладке
|
||||
«Гудвилл»; сценарий «Подтверждение КФО клиента» — через меню «…» консолидации.
|
||||
Чего в макете **нет** (есть в ТЗ, реализуется по ТЗ): пользователи и матрица прав (ТЗ 8.1); экран проверки
|
||||
распознавания для ОСВ/xlsx (строки ОСВ в панели документов — только для чтения, [39]); блок логических ошибок на экране
|
||||
проверки (в снимках не виден, [41] [41-02]); переключатель расчёта гудвилла (решение OQ-27, в снимках [31-03] его нет).
|
||||
Модалка смены статуса с комментарием в макете есть — [33-01]. Решения по полям ТЗ 5.1 (OQ-27): подход — базовый по
|
||||
умолчанию; гудвилл — переключатель на вкладке «Гудвилл»; сценарий «Подтверждение КФО клиента» — через меню «…» консолидации.
|
||||
|
||||
## Путь 1. Куратор/администратор готовит справочники
|
||||
|
||||
| Шаг | Экран | Действие | БД |
|
||||
|---|---|---|---|
|
||||
| 1.1 | Справочники → ГК и организации [50] | **Импорт из файла** [38]: файл .xlsx/.csv, РФ, колонки ИНН, Наименование, Тип, Базовый РФ ГК, ID ГК; дубли — «Пропустить существующие» | `legal_entity`, `company_group`, `audit_event(DIRECTORY_IMPORT)` |
|
||||
| 1.2 | [51] | **Создать ГК/ЮЛ** → выбор: ГК / ЮЛ / ГСК / ГСЗ → форма (ГК: наименование, CRM ID, основной РФ) | `company_group(+_history)` |
|
||||
| 1.3 | Карточка ГК → вкладка ГСК/ГСЗ [77] | список ГСК: ID (GSK-001), Наименование, Число участников, Дата создания; создание ГСК, состав — через ЮЛ | `related_group`, `related_group_member` |
|
||||
| 1.4 | Карточка ГК → ЮЛ → меню «…» [78–80] | **Изменить ЮЛ** (алиасы, членство в ГСК/ГСЗ); **Вывести из состава ГК**: Событие (Закрытие / Переход в другую ГК), Дата закрытия, Комментарий | `legal_entity`, `legal_entity_alias`, `legal_entity_history(event_type, effective_date)` |
|
||||
| 1.5 | ЮЛ вне ГК [61] | **Создать ЮЛ** (монозаёмщик), поиск, фильтры | `legal_entity(company_group_id NULL)` |
|
||||
| 1.1 | Справочники → ГК и организации [50] | **Импорт из файла** [38]: файл .xlsx/.csv, РФ, колонки ИНН, Наименование, Тип, Базовый РФ ГК, ID ГК; дубли — «Пропустить существующие». Та же модалка открывается кнопкой **Импорт** на экране консолидаций ГК [34] | `legal_entity`, `company_group`, `audit_event(DIRECTORY_IMPORT)` |
|
||||
| 1.2 | [51] | **Создать ГК/ЮЛ** → модалка «Выберите объект для добавления»: ГК / ЮЛ / ГСК / ГСЗ → форма. **ГК** [51-01]: Название ГК, ID ГК в CRM («генерируется автоматически» — это внутренний `code`, OQ-20; `crm_id` приходит из ЕЦП CRM), Базовый РФ ГК. **ЮЛ** [51-02] (добавляется в открытую карточку ГК): ИНН, КПП, ID ЮЛ в CRM, Тип (ЮЛ/ИП), Наименование организации, Альтернативные наименования (теги), Входит в ГСК, Входит в ГСЗ. **ГСК** [51-03] / **ГСЗ** [51-04]: ID в CRM, Наименование, Дата создания | `company_group(+_history)`, `legal_entity`, `legal_entity_alias`, `related_group`, `related_group_member` |
|
||||
| 1.3 | Карточка ГК → вкладка ГСК/ГСЗ [77] | список: ID ГСК/ГСЗ (GSK-001, GSZ-001), Наименование, Число участников, Дата создания; состав — через форму ЮЛ («Входит в ГСК/ГСЗ»). Меню «…» строки [77-01]: **Изменить ГСК** [77-02] (ID ГСК в CRM, Наименование, Дата создания), **Удалить** | `related_group`, `related_group_member` |
|
||||
| 1.4 | Карточка ГК → ЮЛ → меню «…» [78] | **Изменить ЮЛ** [79] (те же поля, что при создании, + ГК; алиасы с удалением; членство в ГСК/ГСЗ); **История изменений** [79-02] → Журнал действий с фильтром по ГК и категории «Справочники»; **Перевести в другую ГК** [79-01]: ЮЛ, Текущая ГК, Новая ГК, Дата перевода (подсказка: «запись появится в архиве текущей ГК с событием „Переход в другую ГК“»); **Вывести из состава ГК** [80]: ЮЛ, Событие (Закрытие / Переход в другую ГК), Дата закрытия, Комментарий (необязательно) | `legal_entity`, `legal_entity_alias`, `related_group_member`, `legal_entity_history(event_type, effective_date)` |
|
||||
| 1.5 | ЮЛ вне ГК [61] (заголовок экрана — «Юридические лица») | **Создать ЮЛ** (монозаёмщик), поиск по ЮЛ, ИНН или ГК, фильтр «Архив». По снимку таблица показывает **все** ЮЛ с заполненной колонкой ГК, а не только вне ГК — расхождение с названием пункта (OQ-41) | `legal_entity(company_group_id NULL)` |
|
||||
| 1.6 | (нет в макете) | назначить роли, править матрицу прав | `user_role`, `role_permission`, `audit_event(ROLE_PERMISSION_CHANGE)` |
|
||||
|
||||
## Путь 2. КА РФ создаёт КФО и загружает первичку
|
||||
@ -61,12 +64,12 @@
|
||||
| Шаг | Экран | Действие | БД / статус |
|
||||
|---|---|---|---|
|
||||
| 2.1 | Сайдбар → **Новая консолидация** [42] | ГК → ГСК (активна после ГК) → Год → Квартал → **Создать**. `scenario = CREATE`, `approach = BASIC`, `goodwill_enabled = false` по умолчанию (OQ-27) | `consolidation`, `consolidation_version(INITIATED)`, `consolidation_member` из текущего состава ГСК |
|
||||
| 2.2 | Отчётность → Группы компаний [03] → **Консолидации →** [34] | таблица консолидаций ГК: период, дерево версий, статус-бейдж, ГСК, даты, число организаций | `consolidation_version` |
|
||||
| 2.2 | Отчётность → Группы компаний [03] → **Консолидации →** [34] | [03]: таблица ГК (Группа компаний, CRM ID, Основной РФ, Организаций), поиск по ГК, CRM ID или РФ. [34]: таблица консолидаций ГК: Год, Квартал, Версия (дерево версий под периодом), Статус (бейдж), ГСК, Дата создания, Дата верификации, Организаций; кнопки в строке **Взять в работу**, **К отчетности** (неактивна у статусов «Инициация» и «Верификация РФ» — по снимку, OQ-43), меню «…»; чекбокс «Только в работе». Выбор строки открывает панель **Организации** (Ответственный / Утверждён в РФ / Верифицирован в ГО; таблица Наименование, Документы, ОФР, Бух. баланс, ОСВ — перечень счетов, ИНН, Тип) | `consolidation_version`, `consolidation_lock`, `consolidation_member`, `document` |
|
||||
| 2.3 | [34] → **Взять в работу** [35] | «Консолидация … будет закреплена за вами для редактирования» | `consolidation_lock`, `audit_event(CONSOLIDATION_LOCK)` |
|
||||
| 2.4 | [34] панель Организации → **Редактировать состав** [36] | фильтр по ГСК, «Показать все ЮЛ в ГК», чекбоксы, Сохранить | `consolidation_member` |
|
||||
| 2.5 | строка организации → **Документы** → drawer «Первичные документы» [39] | список: документ (имя, формат, дата), Период («2024 К1»), Проверка (✓/✗ Период, ✓/✗ Контрагент), Статус; комментарий, удаление; **Загрузить документы** [40] (несколько файлов, тип документа) | `stored_file(UPLOADED)`, `s3_object`, `recognition_job(queued)`, `document.period_check/counterparty_check` → `DOCUMENTS_PROCESSING` |
|
||||
| 2.5 | строка организации → **Документы** → drawer «Первичные документы» [39] | список: документ (имя, формат, дата; подпись типа у прочих — «Прочий документ», «Бухгалтерская отчетность»), Период («2024 К1», «2025 · 9 мес.»), Проверка (✓ / ✗ / — Период, Контрагент), Статус (Загружен / Обработка / Требуется проверка / Ошибка); иконки: комментарий (поповер «Комментарий к документу …», [39-01]) и удалить; **Редактировать документы** — в снимке неактивна; **Загрузить документы** [40]: модалка с зоной «Перетащите файлы сюда» / **Выбрать документы**, Загрузить; **тип документа и период в модалке не выбираются** — определяются при распознавании | `stored_file(UPLOADED)`, `s3_object`, `recognition_job(queued)`, `document.period_check/counterparty_check` → `DOCUMENTS_PROCESSING` |
|
||||
| 2.6 | [34] → **Скачать чек-лист** [37] | матрица Организация × (Бух. баланс, ОФР, ОСВ 01 58 60 62 66 67 76 90, Прочие); легенда: Загружен / Обработка / Требуется проверка / Ошибка загрузки / Отсутствует; Скачать CSV | `required_document_rule × consolidation_member − document(CONFIRMED)` |
|
||||
| 2.7 | drawer [39] → клик по документу → **Проверка распознавания** [41] | слева «Исходный документ» постранично с масштабом; справа «Результат распознавания»: шапка формы (организация, ИНН, ОКПО/ОКОПФ/ОКФС, адрес, аудит, ОКУД, отчётная дата, ОКЕИ, единица измерения) и таблица Пояснения / Показатель / Код / колонки-даты; выпадающий список **Документ** для перехода между документами ЮЛ; **Добавить комментарий**; **Редактировать** → Сохранить; **Подтвердить данные**. Блок логических ошибок — по ТЗ (в снимке документ без ошибок) | `financial_statement_meta/column/line/value.is_modified`, `osv_entry.is_modified`, `document(CONFIRMED)`, `comment`, `audit_event(RECOGNIZED_DATA_EDIT, DOCUMENT_CONFIRM)` → `DATA_CORRECTION` |
|
||||
| 2.7 | drawer [39] → клик по **PDF**-документу → **Проверка распознавания** [41] | слева «Исходный документ» постранично с масштабом; справа «Результат распознавания»: шапка формы (организация, ИНН, ОКПО/ОКОПФ/ОКФС, адрес, аудит, ОКУД, отчётная дата, ОКЕИ, единица измерения) и таблица Пояснения / Наименование показателя / Код / колонки-даты (в таблице есть строки без кода «в том числе …» и строка «Гудвилл 1105» ФСБУ 4/2023 — OQ-36, OQ-37); выпадающий список **Документ** для перехода между документами ЮЛ; **Добавить комментарий**; **Редактировать** [41-02] → кнопки **Сохранить** / **Отменить** (значения таблицы редактируются на месте); **Подтвердить данные**. Блок логических ошибок — по ТЗ (в снимках не виден). Для ОСВ (xlsx) экран в макете не открывается — строки readonly, OQ-42 | `financial_statement_meta/column/line/value.is_modified`, `osv_entry.is_modified`, `document(CONFIRMED)`, `comment`, `audit_event(RECOGNIZED_DATA_EDIT, DOCUMENT_CONFIRM)` → `DATA_CORRECTION` |
|
||||
|
||||
Монозаёмщики [60] [84]: тот же drawer документов без консолидации — первичка в ЕХ напрямую.
|
||||
|
||||
@ -80,12 +83,12 @@
|
||||
|---|---|---|---|
|
||||
| 3.1 | **ОСВ** [30] | сводная ОСВ: Компания ГК, Счёт, Период, Контрагенты, ИНН, 6 сумм, Тип контрагента. Баннер «Требуется указать соответствия… Осталось: N» → **Показать ЮЛ без ИНН** [32-osv-no-inn] → **Указать** → модалка «Выбор организации для связи с …» [32-osv-map-counterparty]: ИНН, Организация, ГК, ГСК, ГСЗ, блок «Рекомендуемые», **Связать**. При уходе с вкладки с несопоставленными — «Остались неуказанные ИНН… Остаться / Перейти» [31-00] | вычисляется; `osv_entry.counterparty_id`, `legal_entity_alias`, `audit_event(OSV_COUNTERPARTY_MAP)` |
|
||||
| 3.2 | **Шахматка** [31-01] | фильтры Год, Период, Компании, Дт-счета, Кт-счета; матрица компания × компания: сумма A / сумма B / (расхождение) красным; Итого; ниже результирующая таблица «Статья × компания» | вычисляется (§5–6 правил) |
|
||||
| 3.3 | **Таблица корректировки** [31-02] | пары «Актив баланса ЮЛ-1 / Пассив баланса ЮЛ-2»: Наименование, Строка баланса, Счёт, Сумма; Контроль: % и сумма отклонения; Корректировка: Дт, Кт, Комментарий; **Редактировать** | `correction`, `audit_event(CORRECTION_*)`; ≥ 5 % → `ADJUSTMENT` |
|
||||
| 3.4 | **Гудвилл** [31-03] | здесь же включается/выключается расчёт гудвилла для консолидации (`goodwill_enabled`); по головной организации: Учёт в отчёте ☐, Дочерняя организация, Доля владения, Фондовые (финансовые) вложения ГО, Доля участия ГО в УК ДО, Уставный капитал, Гудвилл (+/−), Комментарий; **Редактировать** | `consolidation_version.goodwill_enabled`, `goodwill` |
|
||||
| 3.5 | **КФО** [31-04] | сводка расхождений «по статьям баланса N %» / «по статьям ОФР N %» (красным при превышении); Баланс (38 строк) и ОФР; по каждой ЮЛ: По данным клиента / В т. ч. взаимные обязательства / Очищенные показатели / Доля в показателе по группе %; **КФО, подготовленная банком**; Комментарий; «В т.ч. Гудвилл» под 1170; **Редактировать комментарии** | `kfo_result(_line, _line_company)`, `comment` |
|
||||
| 3.6 | **КФО Общий** [31-05] | динамика КФО по отчётным датам (01.01.2025 … 01.01.2026), **Выбор периодов** | `kfo_result_line` верифицированных версий / `ex_snapshot_item.payload` |
|
||||
| 3.7 | **Подтверждение КФО клиента** [31-06] (включается пунктом «Включить подтверждение КФО» в меню «…» консолидации [43]; при выключенном — вкладка скрыта) | Версия клиента (ст. 1), Версия банка (ст. 2), ВГО, Консолидированная отчётность, Расхождение сумма и % ((ст. 1 − ст. 2)/ст. 2 × 100), Комментарий; **Редактировать** | `client_kfo_line` (сценарий CONFIRM) |
|
||||
| 3.8 | **Изменить статус** [33] | модалка «Смена статуса отчёта» (комментарий обязателен при возврате; в макете не снята — кнопка неактивна у верифицированного) | `consolidation_status_history`, `audit_event(CONSOLIDATION_STATUS_CHANGE)` |
|
||||
| 3.3 | **Таблица корректировки** [31-02] [31-02-02] | фильтр «Отклонение» (Все); пары «Актив баланса ЮЛ-1 / Пассив баланса ЮЛ-2»: Наименование, Строка баланса, Счёт, Сумма; **Контроль**: % отклонения, Сумма отклонения; **Корректировка**: Строка баланса / Дт, Строка баланса / Кт, Комментарий; строка пары раскрывается в детализацию по субсчетам; Итого. В макете % отклонения считается к сумме стороны ЮЛ-1, а не к меньшей (OQ-35). **Редактировать** [31-02-01] → баннер «Режим редактирования включён…», ячейки пары и корректировки становятся полями ввода, **Отменить изменения** / **Сохранить** | `correction` (+ дочерние строки `parent_correction_id`), `audit_event(CORRECTION_*)`; ≥ 5 % → `ADJUSTMENT` |
|
||||
| 3.4 | **Гудвилл** [31-03] | здесь же включается/выключается расчёт гудвилла для консолидации (`goodwill_enabled`; переключателя в снимках нет — решение OQ-27); фильтр «Гудвилл: Все значения»; по головной организации (с «Выделить все» и строкой «Всего»): Учёт в отчёте ☐, Наименование дочерней организации, Доля владения, Фондовые вложения головной организации, Доля участия головной организации в уставном капитале дочерней организации, Уставный капитал, Гудвилл (+/−), Комментарий; **Редактировать** [31-03-01] → «Доступны для редактирования столбцы „Доля владения“ и „Комментарий“» | `consolidation_version.goodwill_enabled`, `goodwill(ownership_share, include_in_kfo, comment)` |
|
||||
| 3.5 | **КФО** [31-04] | сводка расхождений «по статьям баланса N %» / «по статьям ОФР N %» (красным при превышении); Баланс (38 строк) и «Отчет о финансовых результатах»; по каждой ЮЛ: По данным клиента / В том числе взаимные обязательства (ОФР — «взаимные обороты») / Очищенные показатели / Доля в показателе по группе, %; **КФО, подготовленная банком**; Комментарий; «В т.ч. Гудвилл» под 1170; **Редактировать комментарии** [31-04-01] → поле ввода в каждой строке, Отменить изменения / Сохранить | `kfo_result(_line, _line_company)`, `kfo_result_line.comment`, `comment` |
|
||||
| 3.6 | **КФО Общий** [31-05] | динамика КФО по отчётным датам (01.01.2025 … 01.01.2026); **Выбор периодов** [31-05-01] — поповер «Отображаемые периоды»: «Выбрать все» / «Последний», чекбоксы дат | `kfo_result_line` верифицированных версий / `ex_snapshot_item.payload` |
|
||||
| 3.7 | **Подтверждение КФО клиента** [31-06] (включается пунктом «Включить подтверждение КФО» в меню «…» консолидации [43]; при выключенном — вкладка скрыта) | шапка: Период отчетности, Расхождения по балансу, Расхождения по ОФР; таблица: ВГО (Версия клиента / Версия банка), Консолидированная отчётность (Версия клиента ст. 1 / Версия банка ст. 2), Расхождение сумма (ст. 1 − ст. 2), Расхождение % ((ст. 1 − ст. 2)/ст. 2 × 100 — к версии банка, а не к меньшей, OQ-35), Комментарий; **Редактировать** | `client_kfo_line` (сценарий CONFIRM) |
|
||||
| 3.8 | **Изменить статус** [33] [33-01] | на верифицированном отчёте кнопка неактивна [33]; на отчёте в работе — модалка **«Изменить статус»** [33-01]: Текущий этап (бейдж), Новый этап (выпадающий список, предложен следующий по маршруту), Комментарий («Укажите комментарий к изменению статуса»); Отмена / Изменить статус | `consolidation_status_history`, `audit_event(CONSOLIDATION_STATUS_CHANGE)` |
|
||||
|
||||
## Путь 4. Согласование и верификация
|
||||
|
||||
@ -95,8 +98,8 @@
|
||||
| 4.2 | РКА РФ | Отчёт (read-only + корректировка ОСВ) | Подтвердить → «Консолидация ГО» / Вернуть с комментарием | `CONSOLIDATION_GO` / `CONSOLIDATION_RF` |
|
||||
| 4.3 | КА ГО | Отчёт | Проверка, сравнение с клиентом; Вернуть / **Верифицировать** с № и датой решения УОБ | `VERIFIED` (бейдж «Верифицирован», пояснение в шапке) |
|
||||
| 4.4 | система | — | срез в ЕХ, версия read-only | `ex_snapshot(_member,_item)` |
|
||||
| 4.5 | КА | [34] меню «…» → **Добавить версию** [43] | новая версия после VERIFIED (в списке — дерево версий под периодом) | `consolidation_version.previous_version_id` |
|
||||
| 4.6 | все | [34] меню «…» → **История изменений** [43] | переходы статусов, кто/когда/комментарий | `consolidation_status_history`, `audit_event` |
|
||||
| 4.5 | КА | [34] меню «…» → **Добавить версию** [43] [43-01] | новая версия после VERIFIED создаётся сразу, без модалки: в дереве версий под периодом появляется строка со статусом «Инициация», датой создания = сегодня и тем же числом организаций | `consolidation_version.previous_version_id`, `consolidation_member` (копия периметра) |
|
||||
| 4.6 | все | [34] меню «…» → **История изменений** [43] [43-02] | переход в Журнал действий с фильтрами (категория «Консолидация», ГК) и колонкой «Квартальная дата»; события «Смена статуса отчёта» / «Создание консолидации», кто/когда; «Сбросить фильтры» | `consolidation_status_history`, `audit_event` |
|
||||
| — | КА | [34] | **Отмена КФО** (строка в бандле) | `CANCELLED` |
|
||||
|
||||
## Путь 5. Потребители результата
|
||||
@ -104,22 +107,44 @@
|
||||
| Кто | Экран | Что делает |
|
||||
|---|---|---|
|
||||
| КМ, Эксперт | [03] [34] отчёт read-only | статус и КФО по своим / всем ГК |
|
||||
| КА, РКА, Эксперт | Единое хранилище [62] [82] [83] | дерево ГК → ГСК → организации; фильтры ГК / организация / год / квартал / тип документа; поиск по хранилищу; документы и срезы узла, скачивание |
|
||||
| Администратор | Журнал действий [63] | категории Справочники / Консолидация / Доступ; Дата, ГК, ЮЛ, Пользователь, Событие, Что изменилось, Детали события; пагинация |
|
||||
| КА, РКА, Эксперт | Единое хранилище [62] [82] [83] [83-01] | дерево ГК → ГСК → организации; фильтры ГК / Организация / Год / Квартал / Типы документов; поиск по хранилищу. Справа для выбранного узла — список консолидаций-аккордеонов «Консолидация ГГГГ Кn • Верифицирована дд.мм.гггг — N файлов» (в макете есть и неверифицированные, OQ-38); раскрытая консолидация [83-01]: блок **Сформированная отчетность** (Документ / Сформирован / Ответственный / Утвердил / Верифицировал / Действия: КФО .xlsx, Шахматка .xlsx, Консолидированная отчётность .pdf) и **Первичные документы** по организациям (Документ с типом / Загружен / Ответственный / Действия: просмотр, скачать; «Показать все» / «Свернуть») |
|
||||
| Администратор | Журнал действий [63] | категории Все категории / Справочники / Консолидация / Доступ; Дата (с временем), ГК, ЮЛ, Пользователь (ФИО + роль), Событие, Что изменилось (список полей), Детали события («Показать»); «Показано 10 из 37», пагинация. Сюда же ведут «История изменений» консолидации [43-02] и ЮЛ [79-02] с предустановленными фильтрами |
|
||||
|
||||
## Словарь UI (из макета)
|
||||
|
||||
Статусы отчёта: Инициация, Загрузка и распознавание документов, Корректировка данных, Консолидация РФ, Верификация РФ,
|
||||
Консолидация ГО, Верифицирован, Отмена КФО. Статусы документов: Загружен, Обработка, Требуется проверка, Ошибка,
|
||||
Отсутствует. Тип контрагента: ГСК, ГК, Внешний. Кнопки: Новая консолидация, Консолидации →, Взять в работу, Добавить версию, Включить/Отключить подтверждение КФО, История изменений, Только в работе,
|
||||
К отчетности, Редактировать состав, Скачать чек-лист, Документы, Загрузить документы, Редактировать документы,
|
||||
Показать ЮЛ без ИНН, Указать, Связать, Изменить статус, Редактировать, Редактировать комментарии, Выбор периодов,
|
||||
Экспорт, На весь экран, Настройка таблицы, Импорт из файла, Создать ГК/ЮЛ, Создать ЮЛ, Изменить ЮЛ, Вывести из
|
||||
состава ГК, Сбросить фильтры.
|
||||
Консолидация ГО, Верифицирован, Отмена КФО. Подзаголовки статуса в шапке отчёта: «Отчет верифицирован ГО, КА ГО внес в
|
||||
систему номер и дату решения УОБ» (Верифицирован), «Автоматическая консолидация, ручные проверки и сравнение КФО клиента и
|
||||
банка» (Консолидация РФ). Статусы документов: Загружен, Обработка, Требуется проверка, Ошибка, Отсутствует (в чек-листе —
|
||||
Ошибка загрузки). Проверка документа: ✓ / ✗ / — Период, Контрагент. Тип контрагента: ГСК, ГК, Внешний.
|
||||
Кнопки: Новая консолидация, Консолидации →, Импорт, Взять в работу, Добавить версию, Включить/Отключить подтверждение КФО,
|
||||
История изменений, Только в работе, К отчетности, Редактировать состав, Скачать чек-лист, Документы, Загрузить документы,
|
||||
Выбрать документы, Редактировать документы, Показать ЮЛ без ИНН, Указать, Связать, Остаться / Перейти, Изменить статус,
|
||||
Редактировать, Отменить изменения, Сохранить, Отменить, Редактировать комментарии, Выбор периодов (Выбрать все / Последний),
|
||||
Экспорт, На весь экран, Настройка таблицы, Импорт из файла, Создать ГК/ЮЛ, Создать, Добавить, Создать ЮЛ, Изменить ЮЛ,
|
||||
Изменить ГСК, Удалить, Перевести в другую ГК, Перевести, Вывести из состава ГК, Вывести, Добавить комментарий,
|
||||
Подтвердить данные, Показать все, Свернуть, Показать, Сбросить фильтры, Назад.
|
||||
Роли пользователей в журнале макета (≠ ТЗ 8.1, ANL-034): Аналитик ДКБ, Кредитный аналитик, Утверждающий РФ, Верификатор ГО,
|
||||
Система распознавания / Сервис.
|
||||
|
||||
## Уточнено по досъёмке макета (03.10.2026, `scripts/mockup_crawl_extra.py`)
|
||||
|
||||
- [x] Модалка смены статуса — называется **«Изменить статус»** [33-01]: Текущий этап (бейдж), Новый этап (выпадающий
|
||||
список), Комментарий (textarea); Отмена / Изменить статус. Обязательность комментария при возврате в макете не видна —
|
||||
по ТЗ 6.10.
|
||||
- [x] Формы «Создать ГК / ЮЛ / ГСК / ГСЗ» [51-01…51-04] и «Изменить ЮЛ» [79] — поля перечислены в пути 1 (шаги 1.2, 1.4);
|
||||
дополнительно сняты «Изменить ГСК» [77-02], «Перевести ЮЛ в другую ГК» [79-01], «Вывести ЮЛ из состава ГК» [80].
|
||||
- [x] Правая часть ЕХ [83-01]: список консолидаций узла; в раскрытой — «Сформированная отчетность» (КФО .xlsx, Шахматка
|
||||
.xlsx, Консолидированная отчётность .pdf с колонками Сформирован / Ответственный / Утвердил / Верифицировал) и
|
||||
«Первичные документы» по организациям с действиями «просмотр» и «скачать». Кнопки «Связать» нет.
|
||||
- [x] Проверка распознавания для ОСВ (xlsx) — **в макете отсутствует**: строки ОСВ в панели документов помечены
|
||||
`doc-row--readonly`, клик не открывает экран (только PDF — `doc-row--previewable`). Режим «Редактировать» для PDF снят
|
||||
[41-02]: кнопки Сохранить / Отменить, значения правятся в таблице. Блок логических ошибок в макете не найден.
|
||||
|
||||
## Что осталось уточнить по макету
|
||||
|
||||
- [ ] Модалка «Смена статуса отчёта» — состав полей (Комментарий, целевой статус) — снять на консолидации в работе
|
||||
- [ ] Формы «Создать ГК / ЮЛ / ГСК / ГСЗ» и «Изменить ЮЛ» — поля
|
||||
- [ ] Правая часть ЕХ при выборе организации/среза — что показывается и что скачивается
|
||||
- [ ] Проверка распознавания для ОСВ (xlsx) — как выглядит левая панель (в снимке — PDF); режим «Редактировать» и блок логических ошибок
|
||||
- [ ] Экран проверки для ОСВ (таблица строк с деревом, подсветка нераспознанных контрагентов) — макета нет, делать по
|
||||
ТЗ (DOC-221273) и §1 правил; решение UI — в Срезе 2.
|
||||
- [ ] Блок «Логические ошибки» на экране проверки ББ/ОФР (ТЗ 6.3, §7 правил) — макета нет, делать по ТЗ в Срезе 3.
|
||||
- [ ] Обязательность комментария при возврате на доработку в модалке «Изменить статус» и перечень допустимых «Новых
|
||||
этапов» по роли — макет показывает только следующий этап.
|
||||
|
||||
@ -13,15 +13,17 @@ GSK-002), консолидации 2024 К1 (v1 Верифицирован, v2
|
||||
| Раздел | Пункт | Экран |
|
||||
|---|---|---|
|
||||
| — | **+ Новая консолидация** | модалка `42` |
|
||||
| Отчётность | Группы компаний | `03`/`34` |
|
||||
| Отчётность | Группы компаний | `03` → `34` (+ `35`–`43-02`), отчёт `30`–`33-01` |
|
||||
| Отчётность | Монозаемщики | `60`, `84` |
|
||||
| Справочники | ГК и организации (стартовый экран) | `50`, `77` |
|
||||
| Справочники | ЮЛ вне ГК | `61`, `78–80` |
|
||||
| Документы | Единое хранилище | `62`, `82–83` |
|
||||
| Справочники | ГК и организации (стартовый экран) | `50`, `51`–`51-04`, `77`–`77-02`, `79`–`80` |
|
||||
| Справочники | ЮЛ вне ГК | `61`, `78` |
|
||||
| Документы | Единое хранилище | `62`, `82`, `83`, `83-01` |
|
||||
| Система | Журнал действий | `63` |
|
||||
|
||||
Экранов «Пользователи / Роли и права» в макете нет (подтверждено владельцем макета). Экран «Проверка распознавания»
|
||||
есть — открывается кликом по документу в панели «Первичные документы» (`39` → `41`); автообход его не поймал, снят вручную.
|
||||
есть — открывается кликом по **PDF**-документу в панели «Первичные документы» (`39` → `41`); строки ОСВ (xlsx) в макете
|
||||
помечены `doc-row--readonly` и экран не открывают. Снимки с суффиксом `-01`/`-02` и формы `51-0x`, `77-0x`, `79*`, `83-01`
|
||||
сняты `scripts/mockup_crawl_extra.py` (03.10.2026) — модалки, режимы редактирования, раскрытые панели.
|
||||
|
||||
## Экраны
|
||||
|
||||
@ -29,34 +31,49 @@ GSK-002), консолидации 2024 К1 (v1 Верифицирован, v2
|
||||
|---|---|---|---|---|
|
||||
| `03` | **Группы компаний** (Отчётность) | таблица ГК: Группа компаний, CRM ID, Основной РФ, Организаций, кнопка **Консолидации →**; поиск по ГК/CRM ID/РФ; Настройка таблицы | `company_group`, `regional_office` | 1 |
|
||||
| `34` | **Консолидации ГК** | заголовок ГК; таблица консолидаций: Год, Квартал, Версия (дерево версий под периодом), Статус (бейдж), ГСК, Дата создания, Дата верификации, Организаций; кнопки **Взять в работу**, **К отчетности**, Импорт, Назад. Ниже панель **Организации**: Ответственный / Утверждён в РФ / Верифицирован; таблица ЮЛ: Наименование, Документы (кнопка), ОФР, Бух. баланс, ОСВ (статусы), ИНН, Тип; **Редактировать состав**, **Скачать чек-лист** | `consolidation`, `consolidation_version`, `consolidation_member`, `consolidation_lock`, `document` | 4 |
|
||||
| `43` | Меню «…» у консолидации | **Добавить версию** (новая `consolidation_version` после VERIFIED), **Отключить/Включить подтверждение КФО** (переключатель сценария `CONFIRM` → показывает/скрывает вкладку «Подтверждение КФО клиента»), **История изменений**. В шапке списка: чекбокс «Только в работе», колонка «ОСВ» в таблице организаций — перечень загруженных счетов | `consolidation_version.scenario / previous_version_id`, `consolidation_status_history`, `audit_event` | 4, 7 |
|
||||
| `43` | Меню «…» у консолидации | **Добавить версию** (новая `consolidation_version` после VERIFIED), **Отключить/Включить подтверждение КФО** (переключатель сценария `CONFIRM` → показывает/скрывает вкладку «Подтверждение КФО клиента»), **История изменений**. В шапке списка: чекбокс «Только в работе», колонка «ОСВ» в таблице организаций — перечень загруженных счетов. Кнопка **К отчетности** в строке неактивна у статусов «Инициация» и «Верификация РФ» (по снимку, OQ-43) | `consolidation_version.scenario / previous_version_id`, `consolidation_status_history`, `audit_event` | 4, 7 |
|
||||
| `43-01` | «Добавить версию» — результат | модалки нет: сразу появляется новая строка в дереве версий под периодом (Версия 4, статус «Инициация», Дата создания = сегодня, Организаций — как у исходной) | `consolidation_version(previous_version_id, status=INITIATED)`, `consolidation_member` копируется | 7 |
|
||||
| `43-02` | «История изменений» консолидации | переход в **Журнал действий** с фильтрами: категория «Консолидация», ГК; появляется колонка **Квартальная дата** (для 2024 К1 показано 01.01.2024 — OQ-40); кнопка **Сбросить фильтры**; события «Смена статуса отчёта», «Создание консолидации», пользователь с ролью («Верификатор ГО», «Утверждающий РФ», «Система / Сервис») | `consolidation_status_history`, `audit_event(CONSOLIDATION_STATUS_CHANGE, CONSOLIDATION_CREATE)` | 7 |
|
||||
| `35` | Модалка «Взять консолидацию в работу?» | «…будет закреплена за вами для редактирования», Отмена / Взять в работу | `consolidation_lock` | 7 |
|
||||
| `36` | Модалка «Редактировать состав» | фильтры ГСК / Состав, чекбокс «Показать все ЮЛ в ГК», таблица Наименование/ИНН/Тип/ГСК с выбором, Сохранить | `consolidation_member`, `related_group_member` | 4 |
|
||||
| `37` | Модалка «Чек-лист загруженных документов» | фильтры Группа компаний / Документы; легенда статусов: Загружен, Обработка, Требуется проверка, Ошибка загрузки, Отсутствует; матрица: Организация × Бух. баланс, ОФР, ОСВ 01 58 60 62 66 67 76 90, Прочие документы (ОСВ №20, Прочий документ); **Скачать** (CSV) | `required_document_rule`, `document` | 3 |
|
||||
| `38` | Модалка «Импорт групп компаний из файла» | Файл (.xlsx, .csv), РФ, «Ожидаемые колонки: ИНН, Наименование, Тип, Базовый РФ ГК, ID ГК», «При дублировании: Пропустить существующие», Загрузить | `legal_entity`, `company_group`, `audit_event(DIRECTORY_IMPORT)` | 1 |
|
||||
| `39` | **Панель «Первичные документы»** организации (drawer) | ИНН, **Загрузить документы**, Редактировать документы; таблица: Документ (имя, формат, дата), Период («2024 К1», «2025 · 9 мес.»), Проверка (✓ Период, ✓ Контрагент), Статус (Загружен / Обработка / Требуется проверка), комментарий, удалить | `stored_file`, `document.period_check/counterparty_check/status`, `comment` | 2–3 |
|
||||
| `40` | Модалка загрузки | Выбрать документы, Отмена, Загрузить | `stored_file`, `recognition_job` | 2 |
|
||||
| `41` | **Проверка распознавания** (клик по документу в `39`) | крошки Отчётность › ГК › ЮЛ › Проверка документа; заголовок + имя файла, формат, дата; выпадающий список **Документ** (переход между документами организации) + бейдж статуса; **Добавить комментарий**. Слева «Исходный документ»: постраничные изображения, масштаб 100 % ±, сброс. Справа «Результат распознавания»: шапка формы (организация, ИНН, ОКПО/ОКОПФ/ОКФС, адрес, аудит), «Бухгалтерский баланс на 30 сентября 2025 г.», ОКУД, отчётная дата, ОКЕИ, единица измерения; таблица Пояснения / Наименование показателя / Код / колонки-даты, разделы и итоги; **Редактировать**, **Подтвердить данные** | `document`, `financial_statement_meta/column/line/value`, `comment`, `audit_event(RECOGNIZED_DATA_EDIT, DOCUMENT_CONFIRM)` | 3 |
|
||||
| `39` | **Панель «Первичные документы»** организации (drawer) | ИНН, **Загрузить документы**, Редактировать документы; таблица: Документ (имя, формат, дата; у прочих — подпись «Прочий документ» / «Бухгалтерская отчетность»), Период («2024 К1», «2025 · 9 мес.»), Проверка (✓ / ✗ / — Период, Контрагент), Статус (Загружен / Обработка / Требуется проверка / Ошибка), иконки комментарий и удалить. Строки PDF — `doc-row--previewable` (клик → `41`), строки xlsx (ОСВ, расшифровки) — `doc-row--readonly` (клик ничего не открывает) | `stored_file`, `document.period_check/counterparty_check/status`, `comment` | 2–3 |
|
||||
| `39-01` | Панель документов → «Редактировать документы» | кнопка в снимке неактивна (режим не включается); иконка комментария в строке → поповер «Комментарий к документу <файл>» («Комментарий отсутствует», Закрыть) | `comment(object_type='document')` | 2–3 |
|
||||
| `40` | Модалка «Загрузка документов» | заголовок с организацией; зона «Перетащите файлы сюда» + **Выбрать документы**; Отмена, Загрузить (неактивна, пока нет файлов). Тип документа и период в модалке **не выбираются** — определяются при распознавании | `stored_file`, `recognition_job` | 2 |
|
||||
| `41` | **Проверка распознавания** (клик по PDF-документу в `39`) | крошки Отчётность › ГК › ЮЛ › Проверка документа; заголовок + имя файла, формат, дата; выпадающий список **Документ** (переход между документами организации) + бейдж статуса; **Добавить комментарий**. Слева «Исходный документ»: постраничные изображения, масштаб 100 % ±, сброс. Справа «Результат распознавания»: шапка формы (организация, ИНН, ОКПО/ОКОПФ/ОКФС, адрес, аудит), «Бухгалтерский баланс на 30 сентября 2025 г.», ОКУД, отчётная дата, ОКЕИ, единица измерения; таблица Пояснения / Наименование показателя / Код / колонки-даты, разделы и итоги; в таблице есть строки **без кода** («в том числе: Основные средства, пригодные к использованию…») и строка «Гудвилл 1105» (ФСБУ 4/2023); **Редактировать**, **Подтвердить данные**. В снимке — реальный скан ББ «Пекарни Счастливочной» из фикстур при имени файла «ОФР_2024_К1.pdf» (данные макета условны) | `document`, `financial_statement_meta/column/line/value`, `comment`, `audit_event(RECOGNIZED_DATA_EDIT, DOCUMENT_CONFIRM)` | 3 |
|
||||
| `42` | Модалка **«Новая консолидация»** | Группа компаний → ГСК («Сначала выберите ГК») → Год → Квартал; Создать. Сценарий/подход/гудвилл здесь не выбираются — решение в OQ-27: подход всегда базовый, гудвилл включается на вкладке «Гудвилл», сценарий «Подтверждение КФО клиента» — через меню «…» консолидации | `consolidation`, `consolidation_version` | 4 |
|
||||
| `30` | **Отчёт — вкладка ОСВ** (сводная ОСВ) | шапка: хлебные крошки Отчётность › ГК › 2024·К1, заголовок «ГК — 2024 К1», подзаголовок-пояснение статуса, бейдж **Статус отчёта**, **Изменить статус**; вкладки ОСВ · Шахматка · Таблица корректировки · Гудвилл · КФО · КФО Общий · Подтверждение КФО клиента; Единицы (тыс. руб.), Знаков после запятой, Настройка таблицы, Экспорт, На весь экран; предупреждение «Требуется указать соответствия… Осталось: N» + **Показать ЮЛ без ИНН**; таблица: Компания ГК, Счёт, Период, Контрагенты, ИНН, Сальдо начало Дт/Кт, Обороты Дт/Кт, Сальдо конец Дт/Кт, Тип контрагента | вычисляется из `osv_entry` × `consolidation_member`; `legal_entity_alias` | 4 |
|
||||
| `32-osv-no-inn` | ОСВ, фильтр «ЮЛ без ИНН» | строки без сопоставления, кнопка **Указать** | `osv_entry.counterparty_id IS NULL` | 4 |
|
||||
| `32-osv-map-counterparty` | Модалка «Выбор организации для связи с …» | колонки ИНН, Организация, ГК, ГСК, ГСЗ; блок «Рекомендуемые»; кнопка **Связать** в строке | `legal_entity_alias`, `osv_entry.counterparty_id`, `audit_event(OSV_COUNTERPARTY_MAP)` | 4 |
|
||||
| `31-00` | Модалка «Остались неуказанные ИНН» | при уходе с ОСВ: «Не заполнено ИНН: N. Точно хотите перейти?» Остаться / Перейти | — | 4 |
|
||||
| `31-01` | **Шахматка** | фильтры Год, Период, Компании, Дт (счета), Кт (счета), Единицы, Знаки; матрица ДБ/КТ компания × компания, в ячейке три числа (сумма A / сумма B / (расхождение) красным), диагональ пустая, строка Итого; ниже **Результирующая таблица**: Статья (Дебиторская, Кредиторская, Фин вложения, Долгосрочные кредиты и займы, …) × компании | вычисляется; `chart_of_account.kind` | 5 |
|
||||
| `31-02` | **Таблица корректировки** | две группы колонок «Актив баланса ЮЛ-1» / «Пассив баланса ЮЛ-2»: Наименование, Строка баланса, Счёт, Сумма; Контроль: % отклонения, Сумма отклонения; Корректировка: Дт, Кт, Комментарий; **Редактировать**, Экспорт | `correction` | 5 |
|
||||
| `31-03` | **Гудвилл** | таблица: Учёт в отчёте (чекбокс), Наименование дочерней организации, Доля владения, Фондовые вложения головной организации, Доля участия ГО в УК ДО, Уставный капитал, Гудвилл (+/−), Комментарий; группировка по головной организации; Редактировать | `goodwill` | 6 |
|
||||
| `31-04` | **КФО** | сводка расхождений: «по статьям баланса 810,18 3 %», «по статьям ОФР 124,6 5 %» (красным при превышении); блоки Баланс (38 строк) и ОФР; колонки по каждой ЮЛ: По данным клиента / В том числе взаимные обязательства / Очищенные показатели / Доля в показателе по группе %; затем **КФО, подготовленная банком**, Комментарий; строка «В т.ч. Гудвилл» под 1170; **Редактировать комментарии** | `kfo_result`, `kfo_result_line`, `kfo_result_line_company` | 6 |
|
||||
| `31-05` | **КФО Общий** | динамика КФО по датам: Показатель, Код строки, 01.01.2025 … 01.01.2026; **Выбор периодов**, Экспорт | `ex_snapshot_item.payload` / `kfo_result_line` по версиям | 7 |
|
||||
| `31-01` | **Шахматка** | фильтры Год, Период, Компании, Дт (счета), Кт (счета), Единицы, Знаки; матрица ДБ/КТ компания × компания, в ячейке три числа (сумма A / сумма B / (расхождение) красным), диагональ пустая, строка Итого; ниже **Результирующая таблица**: Статья (Дебиторская задолженность, Кредиторская задолженность, Фин вложения, Долгосрочные кредиты и займы, Краткосрочные кредиты и займы, Итого) × компании + колонка Итого (`31-01-01` — широкий viewport, все 7 компаний и колонка Итого). Компании в шахматке макета (ЭПТ, ИЛС, Архол…) не совпадают с составом ГК — данные условны | вычисляется; `chart_of_account.kind` | 5 |
|
||||
| `31-02` | **Таблица корректировки** | фильтр «Отклонение» (Все); группы колонок (`31-02-02`, viewport 2800px): «Актив баланса ЮЛ-1» / «Пассив баланса ЮЛ-2»: Наименование, Строка баланса, Счёт, Сумма; **Контроль**: % отклонения, Сумма отклонения; **Корректировка**: Строка баланса / Дт, Строка баланса / Кт, Комментарий; строка пары раскрывается в детализацию по субсчетам (60.01, 60.02); Итого. % отклонения считается к сумме стороны ЮЛ-1 (−79,77 % для 1 000 ↔ 202,32), а не к меньшей — OQ-35. **Редактировать** (`31-02-01`): баннер «Режим редактирования включён…», все ячейки пары и корректировки — поля ввода, **Отменить изменения** / **Сохранить**; Экспорт | `correction` (+ `parent_correction_id` для детализации) | 5 |
|
||||
| `31-03` | **Гудвилл** | фильтр «Гудвилл: Все значения»; таблица: Учёт в отчёте (чекбокс, «Выделить все» по головной организации), Наименование дочерней организации, Доля владения, Фондовые вложения головной организации, Доля участия головной организации в уставном капитале дочерней организации, Уставный капитал, Гудвилл (+/−), Комментарий; группировка по головной организации, строка «Всего»; **Редактировать** (`31-03-01`): баннер «Доступны для редактирования столбцы „Доля владения“ и „Комментарий“». Переключателя `goodwill_enabled` в снимках нет (решение OQ-27) | `goodwill` | 6 |
|
||||
| `31-04` | **КФО** | сводка расхождений: «по статьям баланса 810,18 3 %», «по статьям ОФР 124,6 5 %» (красным при превышении); блоки Баланс (38 строк) и «Отчет о финансовых результатах»; колонки по каждой ЮЛ: По данным клиента / В том числе взаимные обязательства (для ОФР — «взаимные обороты», колонка «Наименования позиций*») / Очищенные показатели / Доля в показателе по группе %; затем **КФО, подготовленная банком**, Комментарий; строка «В т.ч. Гудвилл» под 1170; **Редактировать комментарии** (`31-04-01`): поле ввода комментария в каждой строке, Отменить изменения / Сохранить | `kfo_result`, `kfo_result_line(.comment)`, `kfo_result_line_company` | 6 |
|
||||
| `31-05` | **КФО Общий** | динамика КФО по датам: Показатель, Код строки, 01.01.2025 … 01.01.2026; **Выбор периодов** (`31-05-01`): поповер «Отображаемые периоды», ссылки «Выбрать все» / «Последний», чекбоксы дат; Экспорт | `ex_snapshot_item.payload` / `kfo_result_line` по версиям | 7 |
|
||||
| `31-06` | **Подтверждение КФО клиента** | Баланс и ОФР: Показатель, Код строки, Версия клиента (ст. 1), Версия банка (ст. 2), ВГО, Консолидированная отчётность, Расхождение сумма (ст. 1 − ст. 2), Расхождение % ((ст. 1 − ст. 2)/ст. 2 × 100 %), Комментарий; Редактировать | `client_kfo_line` | 6 |
|
||||
| `33` | «Изменить статус» | в макете кнопка на верифицированном отчёте неактивна; модалка «Смена статуса отчёта» (строки в бандле: Комментарий обязателен, Отклонено) не снята | `consolidation_status_history` | 7 |
|
||||
| `33` | «Изменить статус» | на верифицированном отчёте (2024 К1) кнопка неактивна — снимок без модалки | `consolidation_status_history` | 7 |
|
||||
| `33-01` | Модалка **«Изменить статус»** (на 2026 К2, статус «Консолидация РФ») | «Текущий этап» (бейдж), **Новый этап** (выпадающий список, предложен следующий — «Верификация РФ»), **Комментарий** (textarea «Укажите комментарий к изменению статуса»); Отмена / **Изменить статус**. Подзаголовок отчёта для этого статуса: «Автоматическая консолидация, ручные проверки и сравнение КФО клиента и банка» | `consolidation_status_history(from_status, to_status, comment)`, `audit_event(CONSOLIDATION_STATUS_CHANGE)` | 7 |
|
||||
| `50` | **Справочник «Группы компаний и организаций»** | слева список ГК (имя, CRM ID, счётчик ЮЛ, поиск по ЮЛ/ГСК); справа карточка ГК: Основной РФ · N организаций; вкладки **ЮЛ / ГСК / ГСЗ** со счётчиками, чекбокс Архив, Настройка таблицы; таблица ЮЛ: Статус (Активно), ИНН, КПП, Организация, Тип (ЮЛ/ИП), Основной РФ, меню «…»; кнопки **Импорт из файла**, **Создать ГК/ЮЛ** | `company_group`, `legal_entity`, `related_group` | 1 |
|
||||
| `77` | Вкладки ГСК / ГСЗ | таблица: ID ГСК (GSK-001), Наименование, Число участников, Дата создания | `related_group`, `related_group_member` | 1 |
|
||||
| `51` | «Создать ГК/ЮЛ» | выбор объекта: ГК / ЮЛ / ГСК / ГСЗ → форма | | 1 |
|
||||
| `61` | **ЮЛ вне ГК** (Юридические лица) | таблица: Статус, ИНН, КПП, Организация, ГК, Тип, Основной РФ; Создать ЮЛ | `legal_entity.company_group_id IS NULL` | 1 |
|
||||
| `78–80` | Меню ЮЛ «…» | Изменить ЮЛ; **Вывести из состава ГК** → модалка: Событие (Закрытие / Переход в другую ГК), Дата закрытия, Комментарий, Вывести | `legal_entity_history(event_type, effective_date)` | 1 |
|
||||
| `77` | Вкладки ГСК / ГСЗ | таблица: ID ГСК / ID ГСЗ (GSK-001, GSZ-001), Наименование (ссылка ↗), Число участников, Дата создания, меню «…» | `related_group`, `related_group_member` | 1 |
|
||||
| `77-01` | Меню «…» строки ГСК | **Изменить ГСК**, **Удалить** (красным). Физического удаления ГСК в DBML нет — OQ-34 | `related_group` | 1 |
|
||||
| `77-02` | Модалка «Изменить группу связанных компаний» | ID ГСК в CRM (в примере «3-9CGSK01» — формат ЕЦП CRM), Наименование, Дата создания; Отмена / Сохранить. Состав ГСК здесь не редактируется (через ЮЛ) | `related_group(code?, name, created_date)` — поля `crm_id` у `related_group` в DBML нет — OQ-33 | 1 |
|
||||
| `51` | «Создать ГК/ЮЛ» | модалка «Выберите объект для добавления»: ГК (Группа компаний) / ЮЛ (Юридическое лицо) / ГСК (Группа связанных компаний) / ГСЗ (Группа связанных заемщиков) → форма | | 1 |
|
||||
| `51-01` | «Создать группу компаний» | Название ГК («Например: Агроком»), ID ГК в CRM («Генерируется автоматически»), Базовый РФ ГК (выбор); Отмена / Создать | `company_group(name, code — генерируется, crm_id — из ЕЦП CRM, base_regional_office_id)`; «ID в CRM генерируется автоматически» в макете = внутренний `code` (OQ-20) | 1 |
|
||||
| `51-02` | «Добавить юридическое лицо» (в открытой карточке ГК) | ИНН (0000000000), **КПП** (000000000), ID ЮЛ в CRM («Генерируется автоматически»), Тип (ЮЛ / ИП), Наименование организации, **Альтернативные наименования** (теги: «Введите синоним и нажмите Enter»), Входит в ГСК, Входит в ГСЗ (выпадающие списки, «— не указан —»); Отмена / Добавить. Полей «ГК» (берётся из карточки) и «Основной РФ» в форме нет | `legal_entity(inn, crm_id, entity_type, name, company_group_id)`, `legal_entity_alias`, `related_group_member`; `kpp` в DBML нет — OQ-31 | 1 |
|
||||
| `51-03` | «Создать группу связанных компаний» | ID ГСК в CRM («Генерируется автоматически»), Наименование («PM Агро — название группы»), Дата создания (ДД.ММ.ГГГГ); Отмена / Создать | `related_group(kind=gsk, code, name, created_date)` | 1 |
|
||||
| `51-04` | «Создать группу связанных заёмщиков» | ID ГСЗ в CRM, Наименование, Дата создания; Отмена / Создать | `related_group(kind=gsz, …)` | 1 |
|
||||
| `61` | **ЮЛ вне ГК** (заголовок экрана — «Юридические лица») | поиск «по ЮЛ, ИНН или ГК», Настройка таблицы, чекбокс Архив, **Создать ЮЛ**; таблица: Статус (Активно), ИНН, КПП, Организация, ГК, Тип, Основной РФ, меню «…». По снимку это **сводный список всех ЮЛ** (колонка ГК заполнена у каждой строки), а не только монозаёмщиков — OQ-41 | `legal_entity` (все), фильтр «вне ГК» = `company_group_id IS NULL` — в снимке не виден | 1 |
|
||||
| `78` | Меню ЮЛ «…» (снято на `61`; в карточке ГК `50` состав тот же) | **Изменить ЮЛ**, **История изменений**, **Перевести в другую ГК**, **Вывести из состава ГК** (красным) | | 1 |
|
||||
| `79` | Модалка «Изменить юридическое лицо» | ИНН, КПП, ID ЮЛ в CRM («2-8BXXUL1»), Тип, Наименование организации, **ГК** (выпадающий список), Альтернативные наименования (теги с удалением + «Добавить синоним»), Входит в ГСК, Входит в ГСЗ; Отмена / Сохранить. В примере ЮЛ состоит **и в ГСК, и в ГСЗ** одновременно — противоречит ТЗ 6.1 / ANL-030 — OQ-32 | `legal_entity`, `legal_entity_alias`, `related_group_member` | 1 |
|
||||
| `79-01` | Модалка «Перевести ЮЛ в другую ГК» | ЮЛ (только чтение), Текущая ГК, **Новая ГК** (выбор), **Дата перевода** (ДД.ММ.ГГГГ); подсказка «После перевода запись появится в архиве текущей ГК с событием „Переход в другую ГК“»; Отмена / Перевести | `legal_entity.company_group_id`, `legal_entity_history(event_type=MOVE_TO_GROUP, effective_date)` | 1 |
|
||||
| `79-02` | «История изменений» ЮЛ | переход в **Журнал действий** с фильтром категории «Справочники» и ГК, кнопка «Сбросить фильтры» (в макете записей нет) | `audit_event(section=DIRECTORIES)` | 1, 7 |
|
||||
| `80` | Модалка «Вывести ЮЛ из состава ГК» | ЮЛ (только чтение), **Событие** (выпадающий список: Закрытие / Переход в другую ГК), **Дата закрытия** (ДД.ММ.ГГГГ), Комментарий («Необязательно…»); Отмена / **Вывести** (красная) | `legal_entity(close_date, company_group_id=NULL)`, `legal_entity_history(event_type=CLOSE / REMOVE_FROM_GROUP, effective_date)` | 1 |
|
||||
| `60`, `84` | **Монозаемщики** | таблица как «Организации» (Наименование, Документы, ОФР, Бух. баланс, ОСВ, ИНН, Тип); панель документов — та же, что `39` (статусы Требуется проверка / Обработка) | `legal_entity` (моно), `document` | 2 |
|
||||
| `62`, `82`, `83` | **Единое хранилище** | фильтры Все ГК / организации / годы / кварталы / типы; дерево **ГК → ГСК → Организации** (GSK-001 · 4 организаций, ЮЛ с ИНН); справа — документы/срезы выбранного узла; поиск по хранилищу | `ex_snapshot`, `ex_snapshot_member`, `ex_snapshot_item` | 7 |
|
||||
| `63` | **Журнал действий** | категории Все / Справочники / Консолидация / Доступ; таблица: Дата, ГК, ЮЛ, Пользователь, Событие, Что изменилось, Детали события; пагинация | `audit_event` | 7 |
|
||||
| `62`, `82`, `83` | **Единое хранилище** («Архив первичных документов и сформированной консолидированной отчетности») | фильтры ГК / Организация / Год / Квартал / Типы документов, Настройка таблицы, поиск «по ГК, организации или документу»; слева «Структура» — дерево **ГК (N ГСК) → ГСК (GSK-001 · 4 организаций) → Организации (ИНН)**; справа — заголовок узла (ГК «Группа компаний» / ГСК «РМ Агро · ГСК» / «РМ Агро · РМ Агро - производство · организация») и список консолидаций-аккордеонов «Консолидация ГГГГ Кn • Верифицирована дд.мм.гггг — N файлов»; у узла организации счётчики файлов меньше (только её первичка). В списке есть и **неверифицированные** консолидации (2025 К4 без даты) — OQ-38 | `ex_snapshot`, `ex_snapshot_member`, `ex_snapshot_item` | 7 |
|
||||
| `83-01` | ЕХ → раскрыта «Консолидация 2024 К1 • Верифицирована 28.03.2024» | блок **Сформированная отчетность** (3 файла): Документ / Сформирован / Ответственный / Утвердил / Верифицировал / Действия — «Консолидированная КФО_2024_К1.xlsx» (КФО), «Шахматка_2024_К1.xlsx» (Шахматка), «Консолидированная отчетность_2024_К1.pdf» (Консолидированная отчетность); блок **ПЕРВИЧНЫЕ ДОКУМЕНТЫ** по каждой организации («ИНН · первичная документация, N файлов»): Документ (имя + тип: Бух. баланс / ОФР / ОСВ / Прочий документ) / Загружен / Ответственный / Действия (иконки **просмотр** и **скачать**); «Показано 5 из 6… **Показать все**» / **Свернуть**. Кнопки «Связать» в ЕХ нет | `ex_snapshot_item(item_type=kfo_balance/kfo_income/chess/primary_document, payload, document_id)`; «сформированные» файлы — выгрузка из `payload` на лету (DECISION-5) | 7 |
|
||||
| `63` | **Журнал действий** | категории Все категории / Справочники / Консолидация / Доступ; «Все записи — 37 записей», Настройка таблицы; таблица: Дата (дата + время), ГК, ЮЛ («+ еще 3»), Пользователь (ФИО + роль: «Аналитик ДКБ», «Кредитный аналитик», «Верификатор ГО», «Утверждающий РФ», «Система распознавания / Сервис» — роли макета ≠ ТЗ, ANL-034), Событие (Создание ГК, Изменение состава группы, Создание ЮЛ, Связывание ЮЛ с компанией ОСВ (алиас), Создание / изменение ГСК, Создание / изменение ГСЗ, Создание консолидации, Взятие КФО в работу (перехват прав редактирования), Загрузка документа, Получен ответ системы распознавания, Смена статуса отчёта), Что изменилось (список полей), Детали события («Показать»); пагинация «Показано 10 из 37», Предыдущая / Следующая | `audit_event(section, action, changed_field, before/after)` | 7 |
|
||||
|
||||
Сквозные элементы: хлебные крошки; «Настройка таблицы» (отображаемые столбцы, Скрыть все / Выбрать все) на каждой
|
||||
таблице; «Экспорт» и «На весь экран» на отчётных вкладках; выбор единиц (тыс. руб.) и знаков после запятой;
|
||||
@ -70,10 +87,21 @@ GSK-002), консолидации 2024 К1 (v1 Верифицирован, v2
|
||||
- Версии консолидации показаны деревом под периодом; «Взять в работу» — на уровне списка, не карточки (ANL-036).
|
||||
- Шахматка в макете — в тыс. руб. с 2 знаками, хотя ОСВ в рублях — подтверждает OQ-26 (единицы/округление).
|
||||
- Гудвилл: колонка «Фондовые вложения» (= финансовые вложения 58.01), «Доля участия ГО в УК ДО», «Уставный капитал» — без 1350 (OQ-10).
|
||||
- По досъёмке 03.10.2026 (OQ-31…OQ-44 в `07-open-questions.md`): КПП у ЮЛ (`50`, `61`, `51-02`, `79`) — поля нет в DBML;
|
||||
ЮЛ одновременно в ГСК и ГСЗ (`79`) против ТЗ 6.1 / ANL-030; «ID ГСК/ГСЗ в CRM» (`77-02`, `51-03`) — у `related_group`
|
||||
нет `crm_id`; «Удалить» ГСК (`77-01`); процент отклонения считается к стороне ЮЛ-1 (`31-02`) и к версии банка
|
||||
(`31-06`), а не к меньшей сумме (Методика сноска 14); строки без кода в результате распознавания (`41`); ЕХ показывает
|
||||
неверифицированные консолидации (`62`); «Квартальная дата» 01.01.2024 для 2024 К1 (`43-02`) против 01.04;
|
||||
экран «ЮЛ вне ГК» показывает все ЮЛ (`61`); «Проверки распознавания» для ОСВ (xlsx) в макете нет (`39`);
|
||||
«Добавить версию» без модалки (`43-01`); «Редактировать документы» неактивна (`39-01`).
|
||||
|
||||
## Как переснять
|
||||
|
||||
```bash
|
||||
pip install playwright && playwright install chromium
|
||||
python scripts/mockup_crawl.py docs/mockup/dkb_24.09.26/dkb_24.09.26.html docs/mockup/screens
|
||||
python scripts/mockup_crawl.py docs/mockup/dkb_24.09.26/dkb_24.09.26.html docs/mockup/screens # базовый обход
|
||||
python scripts/mockup_crawl_extra.py docs/mockup/dkb_24.09.26/dkb_24.09.26.html docs/mockup/screens # модалки, формы, режимы редактирования, ЕХ
|
||||
```
|
||||
|
||||
`mockup_crawl_extra.py` пишет `docs/mockup/report-extra.json` (заголовки, кнопки, поля и текст каждого снятого состояния) —
|
||||
по нему можно сверять подписи без открытия PNG.
|
||||
|
||||
1314
mockup/report-extra.json
Normal file
BIN
mockup/screens/03-report-groups.png
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
mockup/screens/31-01-01-chess-wide.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
mockup/screens/31-02-01-corrections-edit.png
Normal file
|
After Width: | Height: | Size: 142 KiB |
BIN
mockup/screens/31-02-02-corrections-wide.png
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
mockup/screens/31-03-01-goodwill-edit.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
mockup/screens/31-04-01-kfo-edit-comments.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
BIN
mockup/screens/31-05-01-kfo-periods.png
Normal file
|
After Width: | Height: | Size: 163 KiB |
BIN
mockup/screens/33-01-change-status-modal.png
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
mockup/screens/39-01-edit-documents.png
Normal file
|
After Width: | Height: | Size: 237 KiB |
BIN
mockup/screens/41-02-document-check-edit.png
Normal file
|
After Width: | Height: | Size: 392 KiB |
BIN
mockup/screens/43-01-add-version.png
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
mockup/screens/43-02-consolidation-history.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
mockup/screens/51-01-create-gk-form.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
mockup/screens/51-02-create-le-form.png
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
mockup/screens/51-03-create-gsk-form.png
Normal file
|
After Width: | Height: | Size: 214 KiB |
BIN
mockup/screens/51-04-create-gsz-form.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
mockup/screens/77-01-gsk-row-menu.png
Normal file
|
After Width: | Height: | Size: 153 KiB |
BIN
mockup/screens/77-02-edit-gsk.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
mockup/screens/79-01-le-move-gk.png
Normal file
|
After Width: | Height: | Size: 214 KiB |
BIN
mockup/screens/79-02-le-history.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
mockup/screens/79-le-edit.png
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
mockup/screens/83-01-ex-snapshot.png
Normal file
|
After Width: | Height: | Size: 218 KiB |
246
scripts/mockup_crawl_extra.py
Normal file
@ -0,0 +1,246 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Досъёмка экранов React-макета dkb_24.09.26, которые не поймал mockup_crawl.py → PNG + report-extra.json.
|
||||
|
||||
python scripts/mockup_crawl_extra.py docs/mockup/dkb_24.09.26/dkb_24.09.26.html docs/mockup/screens
|
||||
Зависимости: pip install playwright && playwright install chromium
|
||||
|
||||
Что снимает (имена продолжают нумерацию INDEX.md):
|
||||
03-report-groups Отчётность → Группы компаний (таблица ГК с кнопкой «Консолидации»)
|
||||
33-01-change-status-modal модалка «Изменить статус» на консолидации в работе (2026 К2, «Консолидация РФ»)
|
||||
43-01-add-version меню «…» консолидации → «Добавить версию»
|
||||
43-02-consolidation-history меню «…» консолидации → «История изменений»
|
||||
39-01-edit-documents панель «Первичные документы» → «Редактировать документы»
|
||||
41-01-document-check-osv клик по строке ОСВ (xlsx) в панели документов — в макете строка readonly, снимок не создаётся
|
||||
41-02-document-check-edit «Проверка распознавания» PDF-документа → «Редактировать»
|
||||
51-01…51-04 формы «Создать ГК» / «Добавить ЮЛ» / «Создать ГСК» / «Создать ГСЗ»
|
||||
77-01-gsk-row-menu, 77-02-edit-gsk меню «…» строки ГСК и форма «Изменить ГСК»
|
||||
79-le-edit, 79-01-le-move-gk, 79-02-le-history «Изменить ЮЛ», «Перевести в другую ГК», «История изменений»
|
||||
83-01-ex-snapshot Единое хранилище → раскрытая «Консолидация 2024 К1» (сформированная отчётность + первичка)
|
||||
31-02-01-corrections-edit, 31-03-01-goodwill-edit, 31-04-01-kfo-edit-comments, 31-05-01-kfo-periods
|
||||
31-02-02-corrections-wide, 31-01-01-chess-wide те же вкладки при viewport 2800px (все колонки в кадре)
|
||||
"""
|
||||
import asyncio
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
from playwright.async_api import async_playwright
|
||||
|
||||
URL = "file://" + os.path.abspath(sys.argv[1])
|
||||
OUT = sys.argv[2]
|
||||
REPORT = {}
|
||||
|
||||
|
||||
async def click_text(pg, text, tag=None, nth=0, exact=False):
|
||||
ok = await pg.evaluate(
|
||||
"""([text, tag, nth, exact]) => {
|
||||
const els=[...document.querySelectorAll(tag || 'button, a, [role=tab], [role=menuitem], tr, li, div, span, td')]
|
||||
.filter(e => { const t=(e.innerText||'').trim().replace(/\\s+/g,' ');
|
||||
return (exact ? t===text : t.startsWith(text)) && e.getBoundingClientRect().width>5; });
|
||||
const e = els[nth]; if(!e) return false; e.scrollIntoView({block:'center'}); e.click(); return true; }""",
|
||||
[text, tag, nth, exact],
|
||||
)
|
||||
await pg.wait_for_timeout(700)
|
||||
return ok
|
||||
|
||||
|
||||
async def click_row_menu(pg, row_index=0, table_index=0):
|
||||
"""Клик по последней кнопке («…») в строке таблицы."""
|
||||
ok = await pg.evaluate(
|
||||
"""([ri, ti]) => { const tables=[...document.querySelectorAll('table')]; const t=tables[ti]; if(!t) return 'notable';
|
||||
const r=[...t.querySelectorAll('tbody tr')][ri]; if(!r) return 'norow'; const bs=[...r.querySelectorAll('button')];
|
||||
const b=bs[bs.length-1]; if(!b) return 'nobtn'; b.click(); return true; }""",
|
||||
[row_index, table_index],
|
||||
)
|
||||
await pg.wait_for_timeout(600)
|
||||
return ok
|
||||
|
||||
|
||||
async def snap(pg, name, note="", full_page=False):
|
||||
await pg.screenshot(path=f"{OUT}/{name}.png", full_page=full_page)
|
||||
d = await pg.evaluate(
|
||||
"""() => { const q=s=>[...document.querySelectorAll(s)]; const t=e=>(e.innerText||'').trim().replace(/\\s+/g,' ');
|
||||
const modal = q('[class*=modal],[class*=Modal],[role=dialog],[class*=drawer],[class*=Drawer],[class*=overlay],[class*=Overlay]')
|
||||
.filter(e=>e.getBoundingClientRect().width>100).map(t).slice(0,1).map(x=>x.slice(0,1500));
|
||||
const inputs = q('input,textarea,select').filter(e=>e.getBoundingClientRect().width>5)
|
||||
.map(e=>(e.tagName+':'+(e.type||'')+':'+(e.placeholder||'')+':'+(e.value||'').slice(0,40)));
|
||||
return {heads:q('h1,h2,h3,h4').map(t).filter(Boolean).slice(0,12),
|
||||
buttons:[...new Set(q('button').map(t).filter(x=>x&&x.length<60&&!x.includes('CRM ID')&&!x.endsWith('ГСК')))],
|
||||
labels:[...new Set(q('label').map(t).filter(x=>x&&x.length<80))].slice(0,40), inputs,
|
||||
cols:[...new Set(q('th').map(t).filter(Boolean))].slice(0,60), modal, body:t(document.body).slice(0,3000)} }"""
|
||||
)
|
||||
d["note"] = note
|
||||
REPORT[name] = d
|
||||
print(f"## {name}: heads={d['heads'][:4]} modal={bool(d['modal'])} labels={d['labels'][:12]}")
|
||||
return d
|
||||
|
||||
|
||||
async def fresh(pg):
|
||||
await pg.goto(URL)
|
||||
await pg.evaluate("() => { localStorage.clear(); sessionStorage.clear(); }")
|
||||
await pg.goto(URL)
|
||||
await pg.wait_for_timeout(1600)
|
||||
|
||||
|
||||
async def dismiss_inn_warning(pg):
|
||||
await click_text(pg, "Перейти", "button", 0, True)
|
||||
|
||||
|
||||
async def goto_consolidations(pg):
|
||||
await fresh(pg)
|
||||
await click_text(pg, "Группы компаний", "button")
|
||||
await click_text(pg, "Консолидации", "button")
|
||||
|
||||
|
||||
async def step(name, coro):
|
||||
try:
|
||||
await coro
|
||||
except Exception as exc: # noqa: BLE001 — съёмка не должна падать целиком из-за одного экрана
|
||||
print(f"!! {name}: {type(exc).__name__}: {exc}")
|
||||
REPORT.setdefault("_errors", []).append(f"{name}: {exc}")
|
||||
|
||||
|
||||
async def main():
|
||||
async with async_playwright() as p:
|
||||
b = await p.chromium.launch()
|
||||
pg = await b.new_page(viewport={"width": 1600, "height": 1000})
|
||||
|
||||
async def s03():
|
||||
await fresh(pg)
|
||||
await click_text(pg, "Группы компаний", "button")
|
||||
await snap(pg, "03-report-groups", "Отчётность → Группы компаний")
|
||||
|
||||
async def s33():
|
||||
await goto_consolidations(pg)
|
||||
await click_text(pg, "К отчетности", "button", 3) # 2026 К2 — «Консолидация РФ»
|
||||
await click_text(pg, "Изменить статус", "button")
|
||||
await snap(pg, "33-01-change-status-modal", "модалка «Изменить статус» на консолидации в работе")
|
||||
|
||||
async def s43():
|
||||
await goto_consolidations(pg)
|
||||
await click_row_menu(pg, 0, 0)
|
||||
await click_text(pg, "Добавить версию", None, 0, True)
|
||||
await snap(pg, "43-01-add-version", "меню «…» → Добавить версию")
|
||||
await goto_consolidations(pg)
|
||||
await click_row_menu(pg, 0, 0)
|
||||
await click_text(pg, "История изменений", None, 0, True)
|
||||
await snap(pg, "43-02-consolidation-history", "меню «…» → История изменений")
|
||||
|
||||
async def s39_41():
|
||||
await goto_consolidations(pg)
|
||||
await click_text(pg, "2024", "td", 0, False) # выбрать консолидацию → панель «Организации»
|
||||
await click_text(pg, "Документы", "button")
|
||||
await click_text(pg, "Редактировать документы", "button")
|
||||
await snap(pg, "39-01-edit-documents", "панель документов → Редактировать документы")
|
||||
await goto_consolidations(pg)
|
||||
await click_text(pg, "2024", "td", 0, False)
|
||||
await click_text(pg, "Документы", "button")
|
||||
# Строки ОСВ (xlsx) в панели документов имеют класс doc-row--readonly — клик ничего не открывает,
|
||||
# «Проверка распознавания» в макете есть только для PDF (doc-row--previewable). Снимок делаем,
|
||||
# только если экран действительно открылся.
|
||||
cls = await pg.evaluate(
|
||||
"""() => { const els=[...document.querySelectorAll('.doc-row')].filter(e=>(e.innerText||'').includes('ОСВ'));
|
||||
const e=els[0]; if(!e) return null; e.click(); return e.className; }"""
|
||||
)
|
||||
await pg.wait_for_timeout(900)
|
||||
body = await pg.evaluate("() => (document.body.innerText||'').replace(/\\s+/g,' ')")
|
||||
if "Проверка распознавания" in body:
|
||||
await snap(pg, "41-01-document-check-osv", f"клик по строке ОСВ в панели документов ({cls})")
|
||||
else:
|
||||
REPORT["41-01-document-check-osv"] = {"note": f"не снято: строка ОСВ не открывает экран проверки (класс строки: {cls})"}
|
||||
print(f"## 41-01-document-check-osv: не снято — строка ОСВ readonly ({cls})")
|
||||
# PDF-документ (doc-row--previewable) → «Проверка распознавания» → «Редактировать»
|
||||
await goto_consolidations(pg)
|
||||
await click_text(pg, "2024", "td", 0, False)
|
||||
await click_text(pg, "Документы", "button")
|
||||
await pg.evaluate(
|
||||
"""() => { const els=[...document.querySelectorAll('.doc-row--previewable')].filter(e=>(e.innerText||'').includes('ОФР'));
|
||||
const e=els[0]; if(e) e.click(); }"""
|
||||
)
|
||||
await pg.wait_for_timeout(1200)
|
||||
if await click_text(pg, "Редактировать", "button", 0, True):
|
||||
await snap(pg, "41-02-document-check-edit", "Проверка распознавания (PDF) → Редактировать")
|
||||
|
||||
async def s_wide():
|
||||
"""Широкий viewport: таблицы корректировки и шахматки целиком (в 1600px колонки «Контроль»/«Корректировка» за кадром)."""
|
||||
wide = await b.new_page(viewport={"width": 2800, "height": 1100})
|
||||
try:
|
||||
await goto_consolidations(wide)
|
||||
await click_text(wide, "К отчетности", "button")
|
||||
await click_text(wide, "Таблица корректировки", "button", 0, True)
|
||||
await dismiss_inn_warning(wide)
|
||||
await wide.evaluate(
|
||||
"""() => { const td=[...document.querySelectorAll('table tbody tr td')][0]; const b=td && td.querySelector('button, svg, span'); if(b) b.click(); }"""
|
||||
)
|
||||
await wide.wait_for_timeout(600)
|
||||
await snap(wide, "31-02-02-corrections-wide", "Таблица корректировки, viewport 2800px, первая пара раскрыта по субсчетам")
|
||||
await click_text(wide, "Шахматка", "button", 0, True)
|
||||
await snap(wide, "31-01-01-chess-wide", "Шахматка, viewport 2800px")
|
||||
finally:
|
||||
await wide.close()
|
||||
|
||||
async def s51():
|
||||
for obj, name in [
|
||||
("ГК Группа компаний", "51-01-create-gk-form"),
|
||||
("ЮЛ Юридическое лицо", "51-02-create-le-form"),
|
||||
("ГСК Группа связанных компаний", "51-03-create-gsk-form"),
|
||||
("ГСЗ Группа связанных заемщиков", "51-04-create-gsz-form"),
|
||||
]:
|
||||
await fresh(pg)
|
||||
await click_text(pg, "Создать ГК/ЮЛ", "button")
|
||||
await click_text(pg, obj, "button", 0, True)
|
||||
await snap(pg, name, f"Создать ГК/ЮЛ → {obj}")
|
||||
|
||||
async def s77():
|
||||
await fresh(pg)
|
||||
await click_text(pg, "ГСК", "button", 0, False)
|
||||
await click_row_menu(pg, 0, 0)
|
||||
await snap(pg, "77-01-gsk-row-menu", "меню «…» строки ГСК")
|
||||
await click_text(pg, "Изменить ГСК", None, 0, True)
|
||||
await snap(pg, "77-02-edit-gsk", "Изменить ГСК")
|
||||
|
||||
async def s79():
|
||||
await fresh(pg)
|
||||
await click_row_menu(pg, 0, 0)
|
||||
await click_text(pg, "Изменить ЮЛ", None, 0, True)
|
||||
await snap(pg, "79-le-edit", "меню ЮЛ → Изменить ЮЛ")
|
||||
await fresh(pg)
|
||||
await click_row_menu(pg, 0, 0)
|
||||
await click_text(pg, "Перевести в другую ГК", None, 0, True)
|
||||
await snap(pg, "79-01-le-move-gk", "меню ЮЛ → Перевести в другую ГК")
|
||||
await fresh(pg)
|
||||
await click_row_menu(pg, 0, 0)
|
||||
await click_text(pg, "История изменений", None, 0, True)
|
||||
await snap(pg, "79-02-le-history", "меню ЮЛ → История изменений")
|
||||
|
||||
async def s83():
|
||||
await fresh(pg)
|
||||
await click_text(pg, "Единое хранилище", "button")
|
||||
await click_text(pg, "Консолидация 2024 К1", None, 0, False)
|
||||
await snap(pg, "83-01-ex-snapshot", "ЕХ → раскрыта Консолидация 2024 К1 (верифицирована)", full_page=True)
|
||||
|
||||
async def s31():
|
||||
await goto_consolidations(pg)
|
||||
await click_text(pg, "К отчетности", "button")
|
||||
await click_text(pg, "Таблица корректировки", "button", 0, True)
|
||||
await dismiss_inn_warning(pg)
|
||||
await click_text(pg, "Редактировать", "button", 0, True)
|
||||
await snap(pg, "31-02-01-corrections-edit", "Таблица корректировки → Редактировать")
|
||||
await click_text(pg, "Гудвилл", "button", 0, True)
|
||||
await click_text(pg, "Редактировать", "button", 0, True)
|
||||
await snap(pg, "31-03-01-goodwill-edit", "Гудвилл → Редактировать")
|
||||
await click_text(pg, "КФО", "button", 0, True)
|
||||
await click_text(pg, "Редактировать комментарии", "button", 0, True)
|
||||
await snap(pg, "31-04-01-kfo-edit-comments", "КФО → Редактировать комментарии")
|
||||
await click_text(pg, "КФО Общий", "button", 0, True)
|
||||
await click_text(pg, "Выбор периодов", "button", 0, True)
|
||||
await snap(pg, "31-05-01-kfo-periods", "КФО Общий → Выбор периодов")
|
||||
|
||||
for name, fn in [("03", s03), ("33", s33), ("43", s43), ("39/41", s39_41), ("51", s51), ("77", s77), ("79", s79), ("83", s83), ("31", s31), ("wide", s_wide)]:
|
||||
await step(name, fn())
|
||||
|
||||
json.dump(REPORT, open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "mockup", "report-extra.json"), "w"), ensure_ascii=False, indent=1)
|
||||
await b.close()
|
||||
|
||||
|
||||
asyncio.run(main())
|
||||