Files
specs/openspec/specs/instruments/stock-screener/spec.md
T

9.3 KiB

stock-screener Specification

Purpose

Определяет поиск доступных к покупке акций по характеристикам всего доступного каталога, просмотр совпавших выпусков и навигацию по результату поиска.

Requirements

Requirement: Скринер ищет среди доступных к покупке акций

Система SHALL по нажатию «Найти» искать по всему доступному на момент запроса каталогу акций, не ограничивая исходный набор первыми совпадениями текстового поиска. В результаты MUST включаться только акции, для которых в полученных сведениях подтверждены и доступность покупки, и возможность торговли через API. Скринер MUST показывать время получения списка и MUST NOT представлять эти признаки как гарантию, что конкретный пользователь сможет исполнить заявку прямо сейчас.

Scenario: Поиск без названия или тикера

  • WHEN пользователь не ввёл текст и нажал «Найти»
  • THEN система ищет по доступному каталогу и показывает выпуски, удовлетворяющие условиям и обоим признакам доступности

Scenario: Акция недоступна для покупки

  • WHEN у акции отсутствует подтверждение доступности покупки или торговли через API
  • THEN система не включает её в результаты скринера независимо от остальных совпавших условий

Requirement: Условия скринера применяются совместно

Система SHALL позволять независимо задавать необязательные условия по сектору, типу акции, площадке, стране риска и максимальному количеству бумаг в лоте, а также необязательный текстовый запрос по названию или тикеру. После нажатия «Найти» система SHALL возвращать только акции, удовлетворяющие всем заданным условиям. Отсутствующее или неизвестное значение выбранного условия MUST NOT считаться совпадением.

Scenario: Несколько условий без текста

  • WHEN пользователь выбрал сектор, оставил текст пустым и нажал «Найти»
  • THEN в результате остаются только доступные к покупке акции выбранного сектора

Scenario: Текст совместно с характеристиками

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

Scenario: Неизвестный сектор

  • WHEN пользователь выбрал сектор, а у акции сектор не указан
  • THEN акция не считается совпадением

Scenario: Граница максимального лота

  • WHEN задано максимальное количество бумаг в лоте
  • THEN акции с известным размером лота не больше указанного включаются при соблюдении остальных условий, а акции с неизвестным или большим лотом исключаются

Requirement: Результат представляет отдельные выпуски

Система SHALL показывать не более одной карточки для каждого выпуска с одинаковым ISIN; акции с разными ISIN SHALL оставаться отдельными результатами. При отсутствии ISIN отдельным результатом SHALL быть инструмент с собственным идентификатором. Представитель выпуска MUST выбираться среди инструментов, удовлетворяющих заданным условиям, а карточка MUST вести к выбранному инструменту.

Scenario: Несколько подходящих режимов одного выпуска

  • WHEN несколько инструментов с одним ISIN удовлетворяют всем условиям
  • THEN система показывает одну карточку выпуска со ссылкой на один из этих инструментов

Scenario: Один режим не соответствует условиям

  • WHEN два инструмента имеют один ISIN, но только один удовлетворяет всем условиям
  • THEN карточка выпуска ведёт к соответствующему условиям инструменту

Scenario: Разные выпуски одного эмитента

  • WHEN обыкновенная и привилегированная акции имеют разные ISIN и обе удовлетворяют условиям
  • THEN система показывает их как отдельные результаты

Requirement: Страницы относятся к одному результату поиска

Система SHALL упорядочивать совпадения по тикеру, затем по идентификатору инструмента, и показывать не более 30 выпусков на странице. Переход между страницами одного поиска MUST сохранять состав и порядок полученного результата без пропусков и повторов. Изменение полей без нажатия «Найти» MUST NOT заменять текущий результат; повторное нажатие «Найти», в том числе без изменения условий, SHALL запускать новый поиск и возвращать к первой странице.

Scenario: Переход к следующей странице

  • WHEN пользователь открывает следующую страницу полученного результата
  • THEN он видит следующие до 30 выпусков в том же порядке и с тем же временем получения списка, без повторения выпусков предыдущей страницы

Scenario: Повторный поиск

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

Scenario: Поля изменены, но поиск не запущен

  • WHEN пользователь изменяет условия и ещё не нажал «Найти»
  • THEN ранее полученные страницы не подменяются результатом для новых условий

Requirement: Отсутствие совпадений отличается от недоступности поиска

Система MUST показывать пустой результат только после успешного поиска без совпадений. Если получить сведения для поиска не удалось, система SHALL сообщать о недоступности поиска и MUST NOT выдавать отсутствие акций за подтверждённый результат.

Scenario: Успешный поиск без совпадений

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

Scenario: Источник каталога недоступен

  • WHEN поиск не может получить сведения о каталоге
  • THEN система сообщает об ошибке получения результата, не утверждая, что подходящих акций нет