Files
docs/domains/portfolio/how-to/investigate-discrepancy.md
codex-bot 7fbd4273ba
Docs security / security (push) Successful in 7s
Docs verify / verify (push) Successful in 13s
docs: describe RUB-only behavior (WealthLedger/main#55) (#68)
2026-11-11 09:19:49 +03:00

6.6 KiB

Разобрать расхождение суммы портфеля

Используйте этот порядок, когда итог, позиция или доля на экране отличаются от ожидаемого значения. Он помогает определить слой расхождения без изменения данных. Нужны адрес экрана и уже доступный ответ API либо синтетический пример из существующей проверки. Реальные токены, персональные выгрузки и содержимое базы для разбора не нужны; не переносите их в документацию или отчёт.

  1. Определите предмет сравнения. Запишите, открыт отдельный счёт или «Все счета» и какой показатель расходится. Текущая стоимость, свободные деньги, результат открытой позиции и полученный доход — разные величины. Убедитесь, что сравниваемые значения относятся к одному составу счетов и инструменту. Название или тикер сами по себе не доказывают совпадение выпуска; используйте доступные UID, FIGI и ISIN.
  2. Сопоставьте время. Проверьте lastSuccessfulAt, isStale и показанный исход последней часовой попытки. Серверный снимок не обещает время каждой котировки, а общий портфель может соединять разные моменты. Действия «Повторить» на экране нет: временный сбой чтения восстанавливается автоматически, поэтому расхождение проверяйте по показанному состоянию источника, а не по результату ручного обновления. Перезагрузка backend сохраняет последний полный снимок в SQLite, но не создаёт историю стоимости.
  3. Проверьте состав суммы. Итог складывается из вычислимых стоимостей позиций и доступных денег в RUB. Не добавляйте деньги второй раз и не включайте заблокированные средства. Ненулевая позиция с currentValue: null делает оценку неполной, но не даёт нулевой вклад в смысле полной стоимости. CURRENCY участвует в суммах, хотя текущий интерфейс скрывает её карточку — известное расхождение со спецификацией.
  4. Проверьте показатель по его определению. Используйте справочник. Условный пример: 2 бумаги по 100 RUB и 50 RUB свободных денег дают 250 RUB стоимости. Доля позиции среди позиций равна 100%, а доля соответствующей категории в структуре с деньгами — 80%. Купоны и дивиденды не включаются в результат открытой позиции. Для проверки десятичных сумм сохраняйте исходные строки; арифметика с плавающей точкой может сама создать расхождение.
  5. Найдите ответственную границу. Если ответ API корректен, а экран теряет цифры, валюту или показатель, исследуйте frontend. Если исходные безопасные данные и нормализованный ответ расходятся, исследуйте backend. Если не совпадают ожидаемое и описанное поведение, сначала сопоставьте спецификацию портфеля и ограничения потока загрузки. Исправление документации само по себе не разрешает конфликт требований и реализации.

Для адресной проверки исходников владельцами служат сервис снимков, валютные итоги, структура и подготовка экрана. Это точки продолжения расследования; смысл вычислений изложен выше.

Разбор завершён, когда различие объяснено составом, временем или определением показателя либо получен воспроизводимый пример дефекта с ожидаемым и фактическим результатом. В последнем случае сохраните минимальный синтетический пример и адрес ответственного слоя. Ошибки источника и неизвестные значения не исправляются подстановкой нулей или обходом проверки доступа.