Andrey Epifancev b1c61ae769 openspec: архив aurora-1883-closed-vsp и aurora-1896-cell-formulas
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 18:49:51 +04:00

9.8 KiB
Raw Blame History

vsp-directory Specification

Purpose

Справочник объектов ВСП (/api/v1/dict/info, страница «Справочник ВСП») и подпись ВСП в листах форм: какие ВСП попадают в список, выгрузку и выпадающие списки, как их фильтровать по статусу и периоду закрытия, как закрытый ВСП выглядит в справочнике и в ячейке формы.

Термины: действующий ВСП — запись v3.vsp с is_deleted = false и is_active = true; закрытый ВСП — is_deleted = false и is_active = false (дата закрытия наступила); удалённый ВСП — is_deleted = true.

Requirements

Requirement: Фильтр справочника по статусу

GET /api/v1/dict/info SHALL принимать query-параметр status со значениями active, closed, all; по умолчанию — active. active SHALL возвращать только действующие ВСП, closed — только закрытые, all — действующие и закрытые. Иное значение SHALL давать 422. Удалённые ВСП SHALL NOT возвращаться ни при каком значении status. Остальные фильтры (рег. номер, адрес, ССП, дата открытия, тип размещения, численность) и ограничение исполнителя своими ССП SHALL применяться как прежде, вместе со status.

Scenario: По умолчанию — только действующие

  • WHEN администратор запрашивает GET /dict/info без status, а в справочнике есть действующий ВСП A и закрытый ВСП B
  • THEN ответ содержит A и не содержит B

Scenario: Закрытые

  • WHEN администратор запрашивает GET /dict/info?status=closed
  • THEN ответ содержит B с is_active = false и не содержит A

Scenario: Все

  • WHEN администратор запрашивает GET /dict/info?status=all
  • THEN ответ содержит и A, и B

Scenario: Недопустимый статус

  • WHEN запрос GET /dict/info?status=bogus
  • THEN ответ — 422

Scenario: Удалённый не возвращается

  • WHEN администратор удалил ВСП C (DELETE /dict/info/{id}) и запрашивает status=active, closed и all
  • THEN ни один ответ не содержит C

Scenario: Исполнитель видит закрытые только своих ССП

  • WHEN исполнитель, привязанный к ССП S1, запрашивает GET /dict/info?status=closed, а закрытые ВСП есть в S1 и в чужом S2
  • THEN ответ содержит закрытые ВСП S1 и не содержит закрытые ВСП S2

Requirement: Фильтр по периоду закрытия

GET /api/v1/dict/info SHALL принимать необязательные close_date_start и close_date_end (даты YYYY-MM-DD). При заданном close_date_start SHALL возвращаться только ВСП с датой закрытия не раньше неё, при заданном close_date_end — не позже неё (границы включительно). ВСП без даты закрытия SHALL NOT попадать в ответ, если задана хотя бы одна граница.

Scenario: ВСП закрыт в периоде

  • WHEN ВСП B закрыт 2021-03-15 и запрос GET /dict/info?status=closed&close_date_start=2021-01-01&close_date_end=2021-12-31
  • THEN ответ содержит B

Scenario: ВСП закрыт вне периода

  • WHEN тот же ВСП B и запрос ?status=closed&close_date_start=2022-01-01
  • THEN ответ не содержит B

Requirement: Порядок закрытых ВСП

При status=closed список SHALL быть отсортирован по дате закрытия по убыванию, при равной дате — по id по возрастанию. При status=active и status=all порядок SHALL оставаться прежним — по id.

Scenario: Свежезакрытые сверху

  • WHEN ВСП B закрыт 2021-03-15, ВСП D закрыт 2024-06-01 и запрос ?status=closed
  • THEN D идёт в ответе раньше B

Requirement: Выгрузка учитывает статус и период

POST /api/v1/dict/info/export SHALL принимать в теле status (active | closed | all, по умолчанию active), close_date_start, close_date_end и применять их так же, как GET /dict/info. Без этих полей выгрузка SHALL содержать только действующие ВСП, как раньше.

Scenario: Выгрузка закрытых

  • WHEN администратор выгружает справочник с status = closed
  • THEN файл содержит закрытый ВСП B и не содержит действующий A

Requirement: Выпадающий список ВСП с закрытыми для подписей

GET /api/v1/dict/info/dropdown SHALL принимать параметр include_inactive (по умолчанию false). При false SHALL возвращаться только действующие ВСП, как раньше; при true — действующие и закрытые в тех же границах (ССП формы form_id или ssp_id, ССП исполнителя). Удалённые ВСП SHALL NOT возвращаться.

Scenario: Закрытый ВСП ССП формы

  • WHEN у ССП формы F есть закрытый ВСП B и запрос GET /dict/info/dropdown?form_id=F&include_inactive=true
  • THEN ответ содержит B с is_active = false

Scenario: Без параметра

  • WHEN запрос GET /dict/info/dropdown?form_id=F
  • THEN ответ не содержит B

Requirement: Справочник ВСП показывает статус и позволяет найти закрытые

Страница «Справочник ВСП» SHALL иметь переключатель статуса «Действующие» (по умолчанию) / «Закрытые» / «Все» и, при «Закрытые» и «Все», поля периода закрытия «Закрыт с» / «по». Смена статуса или периода SHALL перезагружать список с сервера с этими параметрами. Таблица SHALL иметь колонку «Статус» с бейджем «Действует» или «Закрыт»; текст строк закрытых ВСП SHALL быть приглушённым. Выгрузка со страницы SHALL передавать текущие статус и период. Если после правки ВСП перестал подходить под выбранный статус (например, его закрыли в режиме «Действующие»), строка SHALL исчезать из списка.

Scenario: Найти давно закрытый ВСП

  • WHEN администратор выбирает «Закрытые» и период «Закрыт с 01.01.2021 по 31.12.2021»
  • THEN таблица показывает ВСП, закрытые в 2021 году, с бейджем «Закрыт»

Scenario: Закрыли в режиме «Действующие»

  • WHEN в режиме «Действующие» администратор ставит ВСП дату закрытия «вчера» и сохраняет
  • THEN строка этого ВСП пропадает из таблицы

Requirement: Подпись ВСП в листах форм

Ячейка колонки с editType = 'vsp_dropdown' в листах форм SHALL показывать рег. номер ВСП, а не число: для действующего ВСП — рег. номер; для закрытого — «<рег. номер> (закрыт)»; если ВСП с таким id нет среди загруженных для формы (например, удалён) — «ВСП #». Значение такой ячейки SHALL NOT форматироваться как сумма и SHALL NOT масштабироваться селектором разрядности. Для выбора ВСП в ячейке и при добавлении строки SHALL предлагаться только действующие ВСП. Поиск и фильтр по колонке ВСП SHALL находить и закрытые ВСП по рег. номеру.

Scenario: Строка с закрытым ВСП

  • WHEN в листе FORM_2/AHR строка ссылается на закрытый ВСП с рег. номером 1234/567, разрядность «тыс. руб.»
  • THEN ячейка «ВСП РФ» показывает 1234/567 (закрыт)

Scenario: Выбор ВСП

  • WHEN пользователь открывает выбор ВСП в ячейке этой строки
  • THEN в списке только действующие ВСП, закрытого 1234/567 в нём нет