Dmitry eb4eae5beb feat(ledger): корпоративные действия из операций брокера
derive() выводит сплиты, амортизации и погашения из самого леджера и складывает их в
corporate_action; rewrite_splits схлопывает пару безденежных transfer_out/transfer_in
в синтетический split. Без этого перерегистрация бумаги реализовалась бы как фиктивный
round-trip: срок владения обнулился бы, а с ним и право на ЛДВ.

amount_per_unit считается пулом по инструменту и дате: одно действие эмитента приходит
отдельной операцией на каждый счёт, и делить надо на суммарную позицию. Позиция для
деления реплеится внутри модуля, потому что шаг обязан идти ДО лотов — именно лоты
потребляют то, что он пишет. Нет позиции — NULL и находка corporate_action_unpriced,
не подставленное число.

Модуль пишет и удаляет только split, amortization и repayment. Дивиденды и купоны он
не трогает: их календарь придёт из фида эмитента, и чистка снесла бы объявленные.

Живых сплитов и погашений в данных нет — эти ветки покрыты только синтетикой. Из
реального есть девять BOND_REPAYMENT, которые пулятся в семь амортизаций.
2026-09-18 15:06:06 +03:00

fin-tracker

Личная аналитика финансов и инвестиций: ZenMoney (повседневные деньги) + брокеры (T-Invest API, отчёты Сбера и ВТБ) в одной базе, с XIRR/TWR, календарём дивидендов и купонов, аллокацией и net worth. Замена Snowball Income.

  • backend/ — Python 3.12, FastAPI, PostgreSQL, worker с расписанием синков.
  • app/ — Flutter-клиент (web, Linux, Windows, Android) поверх REST/OpenAPI.
  • deploy/ — Caddy и сертификаты; docker-compose.yml — прод на VPS.

Для агентов: AGENTS.md. Команды: just --list.

S
Description
No description provided
Readme
2.1 MiB
Languages
Python 46.4%
Dart 40.9%
JavaScript 11%
C++ 0.7%
CMake 0.6%
Other 0.2%