# Личные финансы — учёт баланса и выписок Учёт операций по нескольким банкам: импорт PDF-выписок, дедупликация, расчёт баланса, дохода, дебета/кредита, копилки. Дашборд с фильтрами и графиками на localhost. ## Поддерживаемые банки - **Т** — Т-банк (файлы `Т-MM-YY.pdf`) - **С** — Сбербанк (`С-MM-YY.pdf`) - **Я** — Яндекс Банк (`Я-MM-YY.pdf`) Выписки кладутся в папку `Выписки банков/`. ## Запуск ### Вариант 1: Docker (рекомендуется) Нужны установленные Docker и Make. ```bash make run ``` Откройте в браузере **http://127.0.0.1:8000**. База данных хранится в Docker-volume `income_calculator_data`, папка `Выписки банков/` с хоста монтируется в контейнер — импорт из папки работает с вашими PDF. Полезные команды: - `make stop` — остановить контейнер - `make logs` — логи - `make shell` — shell внутри контейнера - `make help` — список целей ### Вариант 2: Локально (venv) 1. Создать venv и установить зависимости: ```bash python3 -m venv venv ./venv/bin/pip install -r backend/requirements.txt ``` 2. Запустить сервер: ```bash cd /path/to/income_calculator PYTHONPATH=. ./venv/bin/uvicorn backend.main:app --host 127.0.0.1 --port 8000 ``` 3. Открыть в браузере: **http://127.0.0.1:8000** ### Настройки приложения В разделе **Настройки**: - Выбрать **зарплатный банк** (кнопка «Сделать зарплатным»), при необходимости — **зарплатную карту** (доход считается по приходам на этот банк или только на выбранную карту). - Включить при необходимости «Доход только по зарплатной карте». - Нажать **Импорт из папки**, чтобы загрузить все выписки из `Выписки банков/`, или загрузить один PDF вручную. ## Дашборд - **Фильтры**: период (дата с/по), банки (галочки), **«Не учитывать переводы»** — при включении все операции с текстом «Перевод» в описании исключаются из расчётов (баланс, доход, дебет/кредит, копилка и графики). - **Сводка**: суммарный баланс, доход (по зарплатному банку/карте), дебет, кредит, копилка (накопления). - **Графики**: доход и расход по месяцам, динамика остатка, динамика копилки. - **Операции**: список с пагинацией; у каждой операции можно снять галочку «В расчёте», тогда она не участвует в балансе и сводке. **Копилка**: операции с описанием «Перевод между счетами одного клиента» (Яндекс Банк): отрицательная сумма — взнос в копилку, положительная — вывод; в сводке и на графике отображается итог по копилке. ## Структура проекта - `backend/` — FastAPI, SQLite, парсеры выписок Т/С/Я, API и раздача статики. - `frontend/dist/` — фронтенд (один HTML с Chart.js), сборка не требуется. - `Выписки банков/` — PDF-выписки (`Т-MM-YY.pdf`, `С-MM-YY.pdf`, `Я-MM-YY.pdf`). База данных: **SQLite** — `backend/finance.db`. ## API (кратко) - **Банки**: `GET /api/banks`, `PUT /api/banks/salary/{id}`. - **Счета**: `GET /api/accounts`, `POST /api/accounts/{account_id}/opening-balance`. - **Импорт**: `POST /api/import/upload`, `POST /api/import/from-folder`. - **Баланс и операции**: `GET /api/balance/summary`, `GET /api/balance/by-account`, `GET /api/transactions` (параметры: `period_start`, `period_end`, `bank_ids`). - **Графики**: `GET /api/charts/income-expense`, `GET /api/charts/balance-dynamics`, `GET /api/charts/savings-dynamics` (те же параметры фильтрации). - **Настройки**: `GET/PUT /api/settings/income` (зарплатная карта, «только по карте»), `GET/PUT /api/settings/exclude-transfers` (не учитывать переводы).