9.8 KiB
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в нём нет