fix: 404 при обновлении, стрелки периода, фильтры в URL, авто-категории и очистка истории

- Nginx: проксирование /api на backend (единая точка входа)
- История: стрелки ← → для переключения недель/месяцев/годов
- История: сохранение фильтров и пагинации в URL при F5
- Импорт: миграция 003 — дефолтные правила категорий (PYATEROCHK, AUCHAN и др.)
- Настройки: вкладка «Данные» с кнопкой «Очистить историю»
- Backend: DELETE /api/transactions для удаления всех транзакций
- ClearHistoryModal: подтверждение чекбоксами и вводом «УДАЛИТЬ»
This commit is contained in:
vakabunga
2026-03-10 06:53:56 +03:00
parent 792b4ca4ad
commit a895bb4b2f
23 changed files with 691 additions and 52 deletions

77
pdf2json.md Normal file
View File

@@ -0,0 +1,77 @@
# Промпт для конвертации PDF банковской выписки в JSON
Ты — конвертер банковских выписок. Твоя задача: извлечь данные из прикреплённого PDF банковской выписки и вернуть строго один валидный JSON-объект в формате ниже. Никакого текста до или после JSON, только сам объект.
## Структура выходного JSON
```json
{
"schemaVersion": "1.0",
"bank": "<название банка из выписки>",
"statement": {
"accountNumber": "<номер счёта, только цифры, без пробелов>",
"currency": "RUB",
"openingBalance": <число в копейках, целое>,
"closingBalance": <число в копейках, целое>,
"exportedAt": "<дата экспорта в формате ISO 8601 с offset, например 2026-02-27T13:23:00+03:00>"
},
"transactions": [
{
"operationAt": "<дата и время операции в формате ISO 8601 с offset>",
"amountSigned": <число: положительное для прихода, отрицательное для расхода; в копейках>,
"commission": <число, целое, >= 0, в копейках>,
"description": "<полное описание операции из выписки>"
}
]
}
```
## Правила конвертации
1. **Суммы** — всегда в копейках (рубли × 100). Пример: 500,00 ₽ → 50000, -1234,56 ₽ → -123456.
2. **amountSigned**:
- Приход (зачисление, пополнение) — положительное число.
- Расход (списание, оплата) — отрицательное число.
- Переводы — знак в зависимости от направления движения на счёт.
3. **operationAt** — дата и время операции. Если время не указано, используй 00:00:00. Обязательно указывай offset (+03:00 для МСК).
4. **commission** — комиссия по операции. Если не указана — 0.
5. **description** — полный текст операции как в выписке (назначение платежа, магазин, получатель и т.п.). Не сокращай и не меняй формулировки.
6. **accountNumber** — только цифры, без пробелов и дефисов (например: 40817810825104025611).
7. **openingBalance / closingBalance** — начальный и конечный остаток по счёту в копейках.
8. **bank** — краткое название банка (VTB, Sberbank, Тинькофф и т.п.).
9. **exportedAt** — дата формирования выписки. Если неизвестна — возьми дату последней операции в выписке.
10. **Порядок транзакций** — сохраняй хронологический порядок из выписки (обычно от старых к новым).
## Требования
- Массив `transactions` не должен быть пустым.
- Все числа — целые.
- Даты — строго в формате ISO 8601 с offset.
- currency всегда "RUB".
- schemaVersion всегда "1.0".
## Пример одной транзакции
Выписка: «26.02.2026 14:06 | -500,00 ₽ | 0,00 | Оплата товаров. PAVELETSKAYA по карте *8214»
```json
{
"operationAt": "2026-02-26T14:06:00+03:00",
"amountSigned": -50000,
"commission": 0,
"description": "Оплата товаров. PAVELETSKAYA по карте *8214"
}
```
Обработай прикреплённый PDF и верни один JSON-объект.