79 lines
5.0 KiB
Markdown
79 lines
5.0 KiB
Markdown
# Личные финансы — учёт баланса и выписок
|
||
|
||
Учёт операций по нескольким банкам: импорт 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` (не учитывать переводы).
|