spec: require RUB-only behavior (WealthLedger/main#55) (#86)
This commit was merged in pull request #86.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# portfolio-concentration Specification
|
||||
|
||||
## Purpose
|
||||
Позволяет авторизованному User увидеть на странице одного Brokerage Account, какие акции, облигации, секторы и эмитенты занимают наибольшую часть текущей оценки Portfolio в выбранной валюте, без валютной конвертации.
|
||||
Позволяет авторизованному User увидеть на странице одного Brokerage Account, какие акции, облигации, секторы и эмитенты занимают наибольшую часть текущей оценки Portfolio в рублях (RUB).
|
||||
|
||||
## Requirements
|
||||
|
||||
@@ -41,29 +41,29 @@
|
||||
- **THEN** показан только разрез «Акции» и доступны переключатели «Акции», «Облигации», «Секторы», «Эмитенты»
|
||||
|
||||
#### Scenario: Переключение разреза
|
||||
- **GIVEN** открыт разрез «Акции» с выбранной валютой USD
|
||||
- **GIVEN** открыт разрез «Акции»
|
||||
- **WHEN** User переключает разрез на «Секторы»
|
||||
- **THEN** показан только разрез «Секторы» в валюте USD
|
||||
- **THEN** показан только разрез «Секторы»
|
||||
|
||||
### Requirement: Начальное состояние вкладки
|
||||
Система SHALL открывать вкладку «Концентрация» при новом заходе на страницу счёта и после перезагрузки с разрезом «Акции» и первой валютой списка. Новый заход — открытие страницы после ухода с неё либо переключение счёта. Пока User остаётся на странице, включая переключение её вкладок, разрез и валюта SHALL сохраняться.
|
||||
Система SHALL открывать вкладку «Концентрация» при новом заходе на страницу счёта и после перезагрузки с разрезом «Акции». Новый заход — открытие страницы после ухода с неё либо переключение счёта. Пока User остаётся на странице, включая переключение её вкладок, разрез SHALL сохраняться.
|
||||
|
||||
**Источник (ненормативно):** [3081](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3081)
|
||||
|
||||
#### Scenario: Возврат с другой вкладки страницы
|
||||
- **GIVEN** на вкладке выбраны разрез «Секторы» и валюта USD
|
||||
- **GIVEN** на вкладке выбран разрез «Секторы»
|
||||
- **WHEN** User переключается на вкладку «Позиции» и возвращается на «Концентрация»
|
||||
- **THEN** выбраны разрез «Секторы» и валюта USD
|
||||
- **THEN** выбран разрез «Секторы»
|
||||
|
||||
#### Scenario: Повторный заход
|
||||
- **GIVEN** User выбрал разрез «Секторы» и валюту USD, затем покинул страницу счёта
|
||||
- **GIVEN** User выбрал разрез «Секторы», затем покинул страницу счёта
|
||||
- **WHEN** User снова открывает страницу счёта и вкладку «Концентрация»
|
||||
- **THEN** открыт разрез «Акции» с первой валютой списка
|
||||
- **THEN** открыт разрез «Акции»
|
||||
|
||||
#### Scenario: Перезагрузка
|
||||
- **GIVEN** на вкладке выбраны разрез «Эмитенты» и валюта USD
|
||||
- **GIVEN** на вкладке выбран разрез «Эмитенты»
|
||||
- **WHEN** User перезагружает страницу
|
||||
- **THEN** после открытия вкладки показаны разрез «Акции» и первая валюта списка
|
||||
- **THEN** после открытия вкладки показан разрез «Акции»
|
||||
|
||||
### Requirement: Состав разрезов
|
||||
Элементы разреза SHALL формироваться из позиций типов по таблице; другие типы, включая `CURRENCY`, SHALL NOT входить во вкладку.
|
||||
@@ -111,7 +111,7 @@
|
||||
- **THEN** показаны два отдельных элемента «Альфа»
|
||||
|
||||
### Requirement: Название эмитента при разных названиях бренда
|
||||
Если учитываемые позиции одного `issuer.id` имеют разные `issuer.name`, название элемента SHALL быть `issuer.name` позиции с наибольшим `currentValue` в выбранной валюте. При равных значениях SHALL выбираться название, меньшее по алфавитному порядку требования «Порядок элементов с равной суммой».
|
||||
Если учитываемые позиции одного `issuer.id` имеют разные `issuer.name`, название элемента SHALL быть `issuer.name` позиции с наибольшим `currentValue`. При равных значениях SHALL выбираться название, меньшее по алфавитному порядку требования «Порядок элементов с равной суммой».
|
||||
|
||||
**Источник (ненормативно):** [#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3081), [#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3082)
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
- **THEN** элемент назван «Сбер»
|
||||
|
||||
### Requirement: Позиции, учитываемые в разрезе
|
||||
Система SHALL учитывать позицию в ранжировании, долях и диаграмме только при `currentValue` больше нуля в выбранной валюте; остальные позиции SHALL NOT учитываться. Позиция с нулевым `currentValue` не показывается и не считается неучтённой, позиция другой валюты относится к другой валюте выбора.
|
||||
Система SHALL учитывать позицию в ранжировании, долях и диаграмме только при `currentValue` больше нуля; остальные позиции SHALL NOT учитываться. Позиция с нулевым `currentValue` не показывается и не считается неучтённой.
|
||||
|
||||
**Источник (ненормативно):** [#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3078)
|
||||
|
||||
@@ -136,12 +136,12 @@
|
||||
- **THEN** сумма разреза 1 000 ₽, доли 60 % и 40 %
|
||||
|
||||
#### Scenario: Позиция с нулевой стоимостью
|
||||
- **GIVEN** есть акции на 100 и 0 в выбранной валюте
|
||||
- **GIVEN** есть акции на 100 и 0 в RUB
|
||||
- **WHEN** User открывает разрез «Акции»
|
||||
- **THEN** показана только акция на 100 с долей 100 %, сноски нет
|
||||
|
||||
### Requirement: Сноска о не учтённых позициях
|
||||
Система SHALL показывать сноску «Не учтено позиций: N» при N больше нуля. N — число позиций разреза с `currentValue` `null` (в любой валюте) либо отрицательным в выбранной.
|
||||
Система SHALL показывать сноску «Не учтено позиций: N» при N больше нуля. N — число позиций разреза с `currentValue` `null` либо отрицательным.
|
||||
|
||||
**Источник (ненормативно):** [3080](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3080). Примечание: при неполных данных «Структура портфеля» показывает «Доля недоступна», вкладка — доли по учтённым ([3078](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3078)).
|
||||
|
||||
@@ -150,81 +150,11 @@
|
||||
- **WHEN** User открывает разрез «Акции» в RUB
|
||||
- **THEN** показана сноска «Не учтено позиций: 2»
|
||||
|
||||
#### Scenario: Неоценённая позиция при смене валюты
|
||||
- **GIVEN** есть акции на 100 USD и 200 RUB и одна акция без `currentValue`
|
||||
- **WHEN** User выбирает USD
|
||||
- **THEN** показаны акция на 100 $ с долей 100 % и сноска «Не учтено позиций: 1»
|
||||
|
||||
#### Scenario: Отрицательная позиция другой валюты
|
||||
- **GIVEN** есть акции на 100 RUB и -50 USD
|
||||
- **WHEN** User открывает разрез «Акции» в RUB
|
||||
- **THEN** сноски нет
|
||||
|
||||
#### Scenario: Нет не учтённых позиций
|
||||
- **GIVEN** все акции имеют положительную стоимость
|
||||
- **WHEN** User открывает разрез «Акции»
|
||||
- **THEN** сноски нет
|
||||
|
||||
### Requirement: Одна валюта за раз
|
||||
Система SHALL показывать значения вкладки в одной выбранной валюте, общей для всех разрезов и сохраняемой при их переключении, и при нескольких доступных валютах предоставлять выбор из них. Смена валюты SHALL пересчитывать разрез по позициям этой валюты. Система SHALL NOT конвертировать валюты и показывать общий итог нескольких валют.
|
||||
|
||||
**Источник (ненормативно):** [#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3078)
|
||||
|
||||
#### Scenario: Смена валюты
|
||||
- **GIVEN** акции стоят 1 000 RUB и 100 USD, выбрана RUB
|
||||
- **WHEN** User выбирает USD
|
||||
- **THEN** разрез «Акции» показывает только акции в USD, сумму 100 $ и долю 100 %, без рублёвых значений
|
||||
|
||||
#### Scenario: Валюта сохраняется при смене разреза
|
||||
- **GIVEN** выбрана USD в разрезе «Акции»
|
||||
- **WHEN** User переключает разрез на «Облигации»
|
||||
- **THEN** показаны облигации в USD
|
||||
|
||||
### Requirement: Доступные валюты вкладки
|
||||
Доступные валюты — валюты ненулевых `currentValue` позиций `STOCK`, `BOND` и `FUND`, включая отрицательные (для сноски). Валюта только с нулевой стоимостью в список не входит. Cash Balance и другие типы валюты не определяют. Список упорядочен по ISO-коду, сначала выбрана первая. При одной валюте или без валют выбор SHALL NOT показываться.
|
||||
|
||||
**Источник (ненормативно):** [#48, подтверждено](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3080)
|
||||
|
||||
#### Scenario: Начальная валюта
|
||||
- **GIVEN** акции оценены в USD, облигации в RUB, а Cash Balance есть ещё в EUR и позиция `CURRENCY` оценена в CHF
|
||||
- **WHEN** User впервые открывает вкладку «Концентрация»
|
||||
- **THEN** в выборе RUB и USD, выбрана RUB, EUR и CHF в выборе нет
|
||||
|
||||
#### Scenario: Единственная валюта
|
||||
- **GIVEN** все оценённые акции, облигации и фонды стоят в RUB
|
||||
- **WHEN** User открывает вкладку «Концентрация»
|
||||
- **THEN** выбора валюты нет, значения показаны в RUB
|
||||
|
||||
#### Scenario: Валюта только у позиции с нулевой стоимостью
|
||||
- **GIVEN** акции стоят 100 RUB, а единственная позиция в USD — акция со стоимостью 0
|
||||
- **WHEN** User открывает вкладку «Концентрация»
|
||||
- **THEN** в списке только RUB, USD в нём нет
|
||||
|
||||
#### Scenario: Валюта только у отрицательной позиции
|
||||
- **GIVEN** акции стоят 100 RUB, а единственная позиция в USD — акция со стоимостью -50
|
||||
- **WHEN** User выбирает USD в разрезе «Акции»
|
||||
- **THEN** показаны пустое состояние и сноска «Не учтено позиций: 1»
|
||||
|
||||
#### Scenario: Нет оценённых позиций
|
||||
- **GIVEN** у всех позиций `STOCK`, `BOND` и `FUND` `currentValue` равен `null`
|
||||
- **WHEN** User открывает вкладку «Концентрация»
|
||||
- **THEN** выбора валюты нет, разрез показывает пустое состояние без валюты и сноску с числом таких позиций
|
||||
|
||||
### Requirement: Независимый выбор валюты вкладки
|
||||
Выбор валюты вкладки «Концентрация» SHALL быть независим от выбора валюты в «Структуре портфеля»: смена валюты в одном месте SHALL NOT менять валюту в другом. Если выбранная валюта вкладки пропала из списка после обновления Portfolio, система SHALL выбрать первую валюту списка.
|
||||
|
||||
**Источник (ненормативно):** [#48, подтверждено](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3080)
|
||||
|
||||
#### Scenario: Структура портфеля не влияет
|
||||
- **GIVEN** в «Структуре портфеля» выбрана USD, а на вкладке «Концентрация» выбрана RUB
|
||||
- **WHEN** User меняет валюту в «Структуре портфеля» на RUB и обратно
|
||||
- **THEN** выбранная на вкладке валюта остаётся RUB
|
||||
|
||||
#### Scenario: Валюта пропала после обновления
|
||||
- **GIVEN** на вкладке выбрана USD
|
||||
- **WHEN** обновлённый Portfolio не содержит позиций `STOCK`, `BOND` и `FUND` в USD
|
||||
- **THEN** выбрана первая валюта обновлённого списка
|
||||
|
||||
### Requirement: Топ-5 и строка «Прочее»
|
||||
Система SHALL упорядочивать элементы разреза по сумме по убыванию. Если элементов не больше шести, каждый SHALL показываться строкой с названием, суммой и долей. Если семь и больше, SHALL показываться пять первых строк и строка «Прочее» с суммой, долей и числом остальных элементов («2 элемента», «5 элементов»).
|
||||
|
||||
@@ -251,7 +181,7 @@
|
||||
- **THEN** показаны три строки, строки «Прочее» нет
|
||||
|
||||
### Requirement: Раскрытие строки «Прочее»
|
||||
По нажатию на «Прочее», в том числе с клавиатуры, система SHALL раскрывать полный список остальных элементов в порядке ранжирования с суммой и долей; повторное нажатие сворачивает его. Раскрытие SHALL NOT менять пять первых строк и диаграмму. При показе разреза и смене валюты «Прочее» SHALL быть свёрнуто.
|
||||
По нажатию на «Прочее», в том числе с клавиатуры, система SHALL раскрывать полный список остальных элементов в порядке ранжирования с суммой и долей; повторное нажатие сворачивает его. Раскрытие SHALL NOT менять пять первых строк и диаграмму. При показе разреза «Прочее» SHALL быть свёрнуто.
|
||||
|
||||
**Источник (ненормативно):** [#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3077)
|
||||
|
||||
@@ -265,11 +195,6 @@
|
||||
- **WHEN** User нажимает на него ещё раз
|
||||
- **THEN** список остальных элементов скрыт
|
||||
|
||||
#### Scenario: Смена валюты сворачивает «Прочее»
|
||||
- **GIVEN** «Прочее» раскрыто в RUB
|
||||
- **WHEN** User выбирает USD
|
||||
- **THEN** «Прочее» свёрнуто
|
||||
|
||||
### Requirement: Порядок элементов с равной суммой
|
||||
Элементы разреза с равной суммой SHALL упорядочиваться по названию по возрастанию без учёта регистра: сначала названия, начинающиеся с цифры, затем с латинской буквы, затем с кириллической; внутри группы — по алфавиту, при совпадении названия — по порядку первой позиции элемента в Portfolio.
|
||||
|
||||
@@ -286,7 +211,7 @@
|
||||
- **THEN** порядок строк: «VK», «X5», «Сбер»
|
||||
|
||||
### Requirement: Расчёт долей
|
||||
Точная доля элемента — сумма его учитываемых позиций, делённая на сумму всех учитываемых позиций разреза в выбранной валюте; Cash Balance в расчёте не участвует. Точные доли элементов SHALL давать в сумме ровно 100 %, точная доля «Прочее» — равняться сумме точных долей остальных элементов, суммы — быть без округления.
|
||||
Точная доля элемента — сумма его учитываемых позиций, делённая на сумму всех учитываемых позиций разреза; Cash Balance в расчёте не участвует. Точные доли элементов SHALL давать в сумме ровно 100 %, точная доля «Прочее» — равняться сумме точных долей остальных элементов, суммы — быть без округления.
|
||||
|
||||
**Источник (ненормативно):** [#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3078)
|
||||
|
||||
@@ -411,7 +336,7 @@
|
||||
- **THEN** диаграмма состоит из шести сегментов с долями 30 %, 25 %, 20 %, 15 %, 6 %, 4 %
|
||||
|
||||
### Requirement: Центр диаграммы
|
||||
Система SHALL показывать в центре диаграммы сумму разреза — точную сумму учитываемых позиций в выбранной валюте, а над ней, когда показывается метрика «доля топ-5», подпись «Топ-5 · N %», где N — доля в формате «Показ долей». Без метрики показывается только сумма. Эти значения SHALL входить в текстовый эквивалент диаграммы.
|
||||
Система SHALL показывать в центре диаграммы сумму разреза — точную сумму учитываемых позиций в RUB, а над ней, когда показывается метрика «доля топ-5», подпись «Топ-5 · N %», где N — доля в формате «Показ долей». Без метрики показывается только сумма. Эти значения SHALL входить в текстовый эквивалент диаграммы.
|
||||
|
||||
**Источник (ненормативно):** [#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48#issuecomment-3081)
|
||||
|
||||
@@ -447,12 +372,12 @@
|
||||
- **THEN** доступны название, сумма и доля каждого сегмента в порядке списка, сопоставление со строкой не требует различения цветов
|
||||
|
||||
### Requirement: Пустое состояние разреза
|
||||
Если выбранный разрез не содержит учитываемых элементов, система SHALL показывать пустое состояние с названием разреза и выбранной валютой (если валюты доступны) вместо списка, суммарной доли и диаграммы. Выбор валюты, если он показывается, и сноска при N больше нуля SHALL оставаться доступными.
|
||||
Если выбранный разрез не содержит учитываемых элементов, система SHALL показывать пустое состояние с названием разреза вместо списка, суммарной доли и диаграммы. Сноска при N больше нуля SHALL оставаться доступной.
|
||||
|
||||
#### Scenario: Нет облигаций в выбранной валюте
|
||||
- **GIVEN** есть акции в RUB и облигации только в USD
|
||||
- **WHEN** User открывает разрез «Облигации» в RUB
|
||||
- **THEN** показано пустое состояние, выбор валюты доступен (валют две)
|
||||
#### Scenario: Нет облигаций
|
||||
- **GIVEN** есть акции в RUB, облигаций нет
|
||||
- **WHEN** User открывает разрез «Облигации»
|
||||
- **THEN** показано пустое состояние с названием разреза
|
||||
|
||||
#### Scenario: Все позиции разреза отрицательные
|
||||
- **GIVEN** в RUB есть только одна акция со стоимостью -50
|
||||
|
||||
Reference in New Issue
Block a user