docs(counter-pairs): правки финального ревью (контракт слайса 4, §3 п. 9, путь пользователя)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-27 19:33:16 +04:00
parent 6561caf19e
commit dfccabcada
3 changed files with 5 additions and 3 deletions

View File

@ -567,6 +567,7 @@ closing_* = closing_* строки Qn
по-прежнему считаются «Внешний» (п. 5; AURORA-1388, AURORA-1865). Закрывается ручным сопоставлением (см. выше).
Строки Б, у которых ИНН в файле есть, но его нет в справочнике, сопоставления не требуют и в
`missing_unmapped_rows` не входят — отдельная задача AURORA-1866.
---
## §4. Правила элиминации — пары счетов (Прил. 3 ТЗ, DOC-223044, FNR03)

View File

@ -90,7 +90,7 @@
| Шаг | Вкладка | Действие | БД |
|---|---|---|---|
| 3.1 | **ОСВ** [30] | сводная ОСВ: Компания ГК, Счёт, Период, Контрагенты, ИНН, 6 сумм, Тип контрагента. Баннер «Есть организации без ИНН и без сопоставления… Осталось: N. Несопоставленные учитываются как внешние» (переход не блокируется; AURORA-1865) → **Показать ЮЛ без ИНН** [32-osv-no-inn] → **Указать** (только у строки без сопоставленного ЮЛ и без ИНН; у строки, сопоставленной без ИНН в файле, в колонке ИНН — ИНН ЮЛ справочника, по клику — пересопоставление) → модалка «Выбор организации для связи с …» [32-osv-map-counterparty]: ИНН, Организация, ГК, ГСК, ГСЗ, блок «Рекомендуемые», **Связать**. Над сводом переключатель «Свод | Встречные записи (N)» (`?view=pairs`): слева пары участников без встречных записей «Б ← А» (§3 п. 9), в центре строки А с контрагентом Б, справа строки Б без ИНН и сопоставления с «Указать» (та же модалка). При уходе с вкладки, если есть пары, — модалка «Проверьте встречные записи участников» («Нет встречных записей: N пар у M участников…»; **Показать пары** / **Остаться** / **Перейти**) вместо [31-00]; показывается один раз на список пар за сессию браузера, без пар не показывается (AURORA-1746). **API:** `GET …/versions/{id}/osv` (фильтры, `limit` ≤ 2000), `…/osv/summary` (`counter_pairs[]`, `?counterparty_id=` у строк пары; баннер «Осталось: N» и «Показать ЮЛ без ИНН» — `unmapped_total` / `?unmapped=true`: строки без сопоставленного ЮЛ и без ИНН из файла — решение владельца 08.10.2026, отмена П-1 от 07.10.2026; ИНН сопоставленного ЮЛ — `counterparty_entity_inn`; пробелы — `gaps[]`), `…/counterparty-candidates?scope=&q=&entry_id=` (блок «Рекомендуемые» — `recommended`), `POST …/osv/entries/{entry_id}/counterparty` (**Связать**), `GET …/osv/export` (**Экспорт**, xlsx) | вычисляется; `osv_entry.counterparty_id`, `legal_entity_alias`, `audit_event(OSV_COUNTERPARTY_MAP)` |
| 3.1 | **ОСВ** [30] | сводная ОСВ: Компания ГК, Счёт, Период, Контрагенты, ИНН, 6 сумм, Тип контрагента. Баннер «Есть организации без ИНН и без сопоставления… Осталось: N. Несопоставленные учитываются как внешние» (переход не блокируется; AURORA-1865) → **Показать ЮЛ без ИНН** [32-osv-no-inn] → **Указать** (только у строки без сопоставленного ЮЛ и без ИНН; у строки, сопоставленной без ИНН в файле, в колонке ИНН — ИНН ЮЛ справочника, по клику — пересопоставление) → модалка «Выбор организации для связи с …» [32-osv-map-counterparty]: ИНН, Организация, ГК, ГСК, ГСЗ, блок «Рекомендуемые», **Связать**. Над сводом переключатель «Свод | Встречные записи (N)» (`?view=pairs`): слева пары участников без встречных записей «Б ← А» (§3 п. 9), в центре строки А с контрагентом Б, справа строки Б без ИНН и сопоставления с «Указать» (та же модалка). При уходе с вкладки, если есть пары, — модалка «Проверьте встречные записи участников» («Нет встречных записей: N пар у M участников…»; **Показать пары** / **Остаться** / **Перейти**) вместо [31-00]; показывается один раз на список пар за сессию браузера, без пар не показывается (AURORA-1746). **API:** `GET …/versions/{id}/osv` (фильтры, `limit` ≤ 2000), `…/osv/summary` (`counter_pairs[]`; строки пары — `…/osv?counterparty_id=`; баннер «Осталось: N» и «Показать ЮЛ без ИНН» — `unmapped_total` / `?unmapped=true`: строки без сопоставленного ЮЛ и без ИНН из файла — решение владельца 08.10.2026, отмена П-1 от 07.10.2026; ИНН сопоставленного ЮЛ — `counterparty_entity_inn`; пробелы — `gaps[]`), `…/counterparty-candidates?scope=&q=&entry_id=` (блок «Рекомендуемые» — `recommended`), `POST …/osv/entries/{entry_id}/counterparty` (**Связать**), `GET …/osv/export` (**Экспорт**, xlsx) | вычисляется; `osv_entry.counterparty_id`, `legal_entity_alias`, `audit_event(OSV_COUNTERPARTY_MAP)` |
| 3.2 | **Шахматка** [31-01] | фильтры Год, Период, Компании, Дт-счета, Кт-счета; матрица компания × компания: сумма A / сумма B / (расхождение) красным; Итого; ниже результирующая таблица «Статья × компания» | вычисляется (§5–6 правил) |
| 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)` |

View File

@ -92,8 +92,9 @@ warnings[]}` — поля с `?` могут быть `null` (ключ прису
(`null`, если ЮЛ не найдено). Для склеенных строк `entry_ids` — записи по кварталам (порядок — от раннего к позднему).
**`OsvSummaryOut`** `{rows_total, unmapped_total, auto_matched_total, documents_total, gaps[], counter_pairs[]}`: `rows_total` — число строк свода (без фильтров); `unmapped_total` — число строк свода с пустым `counterparty_id` **после** дорезолва на лету **и** без `counterparty_inn` (то же, что `GET …/osv?unmapped=true` даёт в `total`; `unmapped=false` — все остальные строки); `auto_matched_total` — число строк с `match_kind` `NAME` или `ALIAS` независимо от `match_stored` (`INN`, `MANUAL`, `PROPAGATED` не входят); `documents_total` — число ОСВ-документов, привязанных к версии; **`gaps[]`** —
`{legal_entity_id, legal_entity_name, account_code, missing_quarters[]}` (пара ЮЛ × счёт, у которой нет ОСВ за какие-то кварталы;
строк такой пары в своде нет). Баннер «Требуется указать соответствия… Осталось: N», кнопка «Показать ЮЛ без ИНН» [32-osv-no-inn]
и предупреждение [31-00] опираются на `unmapped_total` / `…/osv?unmapped=true`: строки свода без сопоставленного ЮЛ **и** без ИНН
строк такой пары в своде нет). Баннер «Есть организации без ИНН и без сопоставления… Осталось: N» (не блокирует переход) и кнопка «Показать ЮЛ без ИНН»
[32-osv-no-inn] опираются на `unmapped_total` / `…/osv?unmapped=true`; прежнее предупреждение [31-00] заменено модалкой
«Нет встречных записей» по `counter_pairs[]`, `unmapped_total` блокировок и модалок не создаёт. `unmapped_total` — строки свода без сопоставленного ЮЛ **и** без ИНН
из файла; строка с ИНН, которого нет в справочнике, сопоставления не требует (решение владельца 08.10.2026, arm-core #74 — отмена
П-1 от 07.10.2026). **`CandidateOut`** `{id, inn, name, company_group (Ref | null), gsk (Ref | null), gsz (Ref | null),
counterparty_type, recommended}`. **`MapCounterpartyOut`** `{row (ConsolidatedRowOut | null), propagated, alias_created,