sber-invest-report

Crates.iosber-invest-report
lib.rssber-invest-report
version0.1.1
created_at2025-12-01 20:44:15.582584+00
updated_at2026-01-22 14:44:14.030512+00
descriptionПарсер инвестиционных отчётов Сбербанка
homepagehttps://github.com/hexqnt/sber-invest-report
repositoryhttps://github.com/hexqnt/sber-invest-report
max_upload_size
id1960611
size152,217
Vladimir Kravchenko (hexqnt)

documentation

README

sber-invest-report

crates.io docs.rs

Парсер HTML-отчётов брокера Сбербанка и утилиты для агрегации данных отчётов.

Актуальность версий

Версия Статус Дата актуальности отчётов
0.1.0 - отчёты по состоянию на 2025-12-01
0.1.1 актуальная отчёты по состоянию на 2026-01-22

Возможности

  • Парсинг метаданных (счёт, период, дата формирования, инвестор).
  • Таблицы: оценка активов, сводка движения ДС, портфель, пополнения ИИС.
  • Набор отчётов и агрегация (сводная ДС, суммирование позиций по ISIN).

Установка

cargo add sber-invest-report

Быстрый старт

Парсинг одного отчёта

use sber_invest_report::{RawReport, ReportBuilder};
use std::fs::File;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let raw = RawReport::from_reader(File::open("report.html")?)?;
    let report = ReportBuilder::new(&raw).parse()?;
    println!("Счёт: {}", report.meta.account_id.0);
    Ok(())
}

Загрузка каталога и агрегация

use sber_invest_report::ReportSet;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let set = ReportSet::from_dir("reports")?;
    let merged_cash = set.merge_cash_flows();
    let merged_positions = set.merge_positions();
    println!("Всего отчётов: {}", set.reports.len());
    println!("Движение ДС строк: {}", merged_cash.rows.len());
    println!("Позиции ISIN: {}", merged_positions.len());
    Ok(())
}

Частичный парсинг через билдер

use sber_invest_report::{RawReport, ReportBuilder};
use std::fs::File;

let raw = RawReport::from_reader(File::open("report.html")?)?;
let report = ReportBuilder::new(&raw)
    .portfolio(true)
    .asset_valuation(false)
    .cash_flow(true)
    .iis_contributions(false)
    .parse()?;

Тесты

  • Фиктивные отчёты лежат в tests/fixtures/ и используются в интеграционных тестах.
  • Для локальной проверки реальных отчётов можно задать REAL_REPORT_DIR=/path/to/reports cargo test.

Лицензия

MIT или Apache-2.0

Commit count: 13

cargo fmt