Files
income_calculator/README.md
2026-02-23 16:49:24 +03:00

79 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Личные финансы — учёт баланса и выписок
Учёт операций по нескольким банкам: импорт 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` (не учитывать переводы).