2026-10-18 13:11:49 +04:00

12 KiB
Raw Blame History

MODIFIED Requirements

Requirement: Форма ББ/ОФР — просмотр и правка

Экран SHALL показывать GET /documents/{id}/statement: шапку (ИНН, дата отчёта, единицы — значение и исходное при правке; наименование, ОКУД/ОКПО) и таблицу «строка (код, наименование) × колонки» с суммами из values[], включая строки и ячейки, достроенные сервером по справочнику редакции (id = null). Ячейки с needs_review = true SHALL подсвечиваться как «требует внимания» (подсветки напрямую по confidence < 100 или is_recognized = false нет), с is_modified = true — как «исправлено» с исходным значением original_amount в подсказке; пустая достроенная ячейка не подсвечивается. Строки «БАЛАНС» формы BALANCE (коды 1600 и 1700) SHALL выделяться фоном #f9f0ff и жирным шрифтом; подсветка ячейки перекрывает фон строки. Единицы (header.units) SHALL выводиться над таблицей. Пока документ не CONFIRMED, ячейка SHALL быть редактируемой: ввод проверяется по формату суммы (до 2 знаков после точки, знак минус допустим, пустое — null), сохранение отправляет PATCH /documents/{id}/statement {values: [...]} суммой-строкой: ячейка строки из БД — {line_id, column_id, amount}, ячейка достроенной строки (id = null) — {line_code, column_id, amount}; ответ заменяет состояние экрана. Правка шапки (ИНН, дата отчёта, единицы, наименование организации) SHALL отправляться тем же PATCH в header; inn: null не отправляется. Правка строк, колонок и подтверждений в том же PATCH (columns, lines, values[].confirmed) описана в требовании «Правка строк, колонок и подтверждение в режиме «Редактировать»».

Scenario: Исправление ячейки

  • WHEN аналитик меняет значение ячейки и сохраняет
  • THEN ячейка помечена «исправлено», проверки пересчитаны по ответу сервера, акцепт снят

Scenario: Заполнение строки, которой не было в распознавании

  • WHEN у формы нет строки 1700 из источника, аналитик вводит сумму в достроенную строку 1700 и сохраняет
  • THEN уходит {line_code: "1700", column_id, amount}, по ответу строка получила id, ячейка помечена «исправлено»

Scenario: Строки «БАЛАНС»

  • WHEN открыта форма BALANCE
  • THEN строки 1600 и 1700 выделены цветом и жирным, у ОФР выделения нет

Scenario: Неверный формат суммы

  • WHEN аналитик вводит «12,3,4»
  • THEN запрос не отправляется, поле показывает ошибку формата

Requirement: Подтверждение документа

Кнопка «Подтвердить» SHALL отправлять POST /documents/{id}/confirm и быть недоступна для CONFIRMED и ERROR, а также при наличии строк unreadable / missing с суммой или нераспознанным текстом в ячейках (подсказка «Разберите строки без кода: N» с переходом к первой такой строке). При 409 CHECKS_NOT_PASSED экран SHALL показать detail.failures[] и предложить акцепт; при 409 PERIOD_REQUIRED — подсказать исправить дату отчёта; при 409 LINES_UNRESOLVED — показать тот же текст, что у отключённой кнопки; при 409 DUPLICATE_FORM — со ссылкой на подтверждённую форму; прочие ошибки — message. После успеха экран SHALL перейти в режим только чтения.

Scenario: Подтверждение с неакцептованными нарушениями

  • WHEN аналитик подтверждает форму с жёсткими нарушениями без акцепта
  • THEN показан список нарушений из ответа и кнопка «Принять с комментарием»

Scenario: Дубль подтверждённой формы

  • WHEN сервер отвечает 409 DUPLICATE_FORM
  • THEN экран показывает ошибку со ссылкой на уже подтверждённую форму

ADDED Requirements

Requirement: Раскладка строк формы со статусами

Экран проверки формы ББ/ОФР ([41]) SHALL сохранять раскладку «как на бумаге» (Р-14): разделы, внутри — строки ok по возрастанию кода, несколько строк одного кода — в порядке файла (row_index), шаблонные строки на своих местах, пятизначные подстроки под родителем. Строка unreadable / missing SHALL стоять под ближайшей предыдущей по row_index строкой, размещённой по коду, а без такой — в начале первого раздела; она подсвечена целиком, в ячейке кода серым — сырой текст line_code_text с подсказкой. Строки detail SHALL быть скрыты под переключателем «Показать расшифровки (N)» и показываться под родителем (parent_row_index) с отступом. Экран показывает справочное имя строки (reference_name), файловое (line_name) — рядом, если отличается. Переключателя «как в файле» нет.

Scenario: Код-мусор на своём месте

  • WHEN строка unreadable «ИЧ,250» в файле стоит после строки 1240
  • THEN на экране она стоит сразу под 1240, подсвечена, в ячейке кода серым «ИЧ,250»

Scenario: Расшифровки скрыты

  • WHEN у формы три строки detail
  • THEN по умолчанию их не видно, переключатель «Показать расшифровки (3)»; включённый показывает их под родителями

Requirement: Подсветка и предупреждения у места

Экран SHALL подсвечивать ячейки только по needs_review (в подсказке — text и уверенность), строки — по needs_review строки, поля шапки — по needs_review_fields (в подсказке у поля — header.source.<поле>: сырой текст и уверенность). Предупреждения и нарушения (issues, checks) SHALL показываться у места: у строк (line_ids), ячеек (line_ids + column_id), полей шапки (field) или у документа (в том числе запись с column_index без column_id — столбец вне колонок формы); уровень error отличается от info. Подсветки по confidence < 100 и is_recognized = false напрямую нет. У значений строк detail needs_review всегда false (Р-23): при показанных расшифровках их сомнительные ячейки не подсвечиваются, но подсказка с text и уверенностью есть.

Scenario: Догадка подтверждена проверкой

  • WHEN значение is_recognized = false, needs_review = false
  • THEN ячейка не подсвечена; в подсказке сырой текст и уверенность

Requirement: Правка строк, колонок и подтверждение в режиме «Редактировать»

В режиме «Редактировать» экран SHALL давать: у unreadable / missing — поле ввода кода с подсказкой из справочника (код → справочное имя) и пункт меню строки «Это расшифровка»; у detail — «Назначить код»; у строки ok — «Сделать расшифровкой», смену кода и «Подтвердить код» у строки с needs_review; подтверждение ячейки без правки; ввод даты у колонки без даты (period_kind = none) или с предупреждением о дате (в том числе подтверждение той же даты); снятие подтверждения ячейки и кода (confirmed: false); правка наименования организации в шапке; подтверждение даты отчёта из needs_review_fields без изменения (тем же значением). «Сохранить» отправляет один PATCH …/statement (header, values, columns, lines). Кнопка «Подтвердить данные» при строках unreadable / missing с суммами SHALL быть отключена с подсказкой «Разберите строки без кода: N» и переходом к первой такой строке; ответ сервера 409 LINES_UNRESOLVED показывается тем же текстом, 409 DUPLICATE_FORM — со ссылкой на подтверждённую форму, 409 LINE_CODE_TAKEN — у поля кода. Кнопка «Подтвердить данные» учитывает строки unreadable / missing с суммой или нераспознанным текстом в ячейках.

Scenario: Назначить код

  • WHEN аналитик вводит 1250 в ячейку кода строки unreadable и сохраняет
  • THEN уходит PATCH с lines: [{line_id, line_code: "1250"}]; после ответа строка встаёт на место 1250

Scenario: Подтверждение заблокировано

  • WHEN у формы две строки missing с суммами
  • THEN «Подтвердить данные» отключена, подсказка «Разберите строки без кода: 2», клик по подсказке ведёт к первой

Requirement: Предупреждения ОСВ-документа

Экран ОСВ-документа SHALL показывать предупреждения документа из DocumentOut.issues[] (коды OSV_*) блоком над таблицей; все записи относятся к документу (строки ОСВ line_ids не адресуются); уровень error отличается от info.

Scenario: Предупреждение листа ОСВ

  • WHEN у ОСВ-документа в issues есть запись с кодом OSV_*
  • THEN над таблицей показан блок предупреждений с текстом записи и уровнем