v1.1.0
[v1.1.0] — 2026-06-25
Добавлено
Сброс пароля (через администратора)
- Страница входа: «Запросить сброс пароля» →
POST /api/v1/auth/request-password-reset(при неизвестном логине — тот же успешный ответ, без перечисления учёток) - Баннер и список ожидающих запросов у администратора; подтверждение →
POST /api/v1/admin/password-reset-requests/{id}/ack - Сброс пароля в админке →
PUT /api/v1/admin/users/{id}/passwordс инвалидацией сессий пользователя - Таблица
password_reset_requests(миграция023); rate limit 5 запросов/мин с IP на endpoint сброса
Кредиты
- Редактирование сумм неоплаченных платежей →
PATCH /api/v1/credits/{id}/schedule(толькоkind=scheduled,is_applied=false; обновляются связанныеfuture-операции) - При создании кредита задним числом: списание со счёта для хвоста ретро-платежей → поле
retroactive_debit_countвPOST /api/v1/credits(расход наdebit_account_id, учёт в статистике) - Автодополнение укороченных графиков активных кредитов при старте (
RepairShortSchedules; миграция-маркер020)
Переводы и категории
- Поле комиссии при переводе; расход в системной категории «Комиссия» (иконка
percent) - Системная категория «Комиссия» для новых и существующих пользователей (backfill при старте)
- При drag-order категорий системные остаются в конце; системную категорию нельзя назначить главной
Интерфейс
- Мобильная адаптация: touch-targets 44px, карточки графика/операций, bottom sheet модалок, скролл вкладок, меню в шапке с пунктом «Счета»
- Сброс формы при повторном открытии «Новый кредит»
- В админке — блок доната и ссылка на репозиторий GitHub
- Переключатели (
ToggleSwitch) вместо чекбоксов: кредиты, долги, уведомления, импорт, фильтры, админка - Редактирование перевода из списка операций (страница счёта)
- Фильтр категорий по типу операции (доход/расход) на
/transactions,/stats, странице счёта - Суффиксы «(Доход)» / «(Расход)» у категорий с одинаковым именем (например «Долги»)
- Иконка «Архивировать» на странице счёта (как у остальных действий)
- Предупреждение при удалении оплаченного платежа по кредиту; подсказка в группе «Оплаченные» графика
Статистика и фильтры
- Фильтры по дате без времени; границы суток в часовом поясе пользователя (
/stats,/transactions, страница счёта) /stats: автоприменение фильтров, поиск по описанию операций в блоке drill-down- Сводка на странице счёта: входящие переводы в «Доходе», исходящие в «Расходе» (согласовано с балансом)
Документация и демо
- Демо-стенд: buhgalter-demo.kai-zer.ru (логин
demo, парольdemo_1_demo) - docs/release-notes-v1.1.md и обновление справочников в
docs/ - Roadmap: roadmap/receipt-scanner.md — сканер чеков (черновик)
Изменено
- Генератор графика с процентами: ровно
term_monthsплатежей; аннуитет 1…N−1, последний — остаток + проценты за период - Сортировка категорий в API: пользовательские, затем системные (
sort_order,name) - OpenAPI 1.1.0: комиссия переводов, редактирование графика,
retroactive_debit_count, password reset - Операции с флагом
credit_payment_linkedнельзя менять черезPATCH /transactions/{id}— только на странице кредита - Поле суммы (
MoneyInput): курсор не прыгает в конец при правке в середине числа
Исправлено
- Укороченный график кредита (например 22 платежа вместо 36) — расчёт и восстановление при старте
- Мобильное меню: перекрывалось контентом (z-index); не закрывалось при навигации
- Форма создания кредита сохраняла данные предыдущего кредита без перезагрузки страницы
- Статистика и список операций расходились по платежам кредита: прошедшие
future-операции активируются при чтении; в SQL учитываются оплаченные платежи сexclude_from_stats=0 - Сводка на странице счёта не учитывала входящие переводы в блоке «Доход»
- Первоначальная настройка (
POST /setup): повтор после частичного сбоя не давал 500 — восстановление маркера.configured, ответ 409 если БД уже настроена - Календарь (
DateTimePicker): в конце месяца отображались дни 31–34 вместо дней следующего месяца; дни соседних месяцев в сетке теперь кликабельны - Тёмная тема: календарь, выпадающие списки и мобильное меню сливались с фоном (
popover-panel) - Долги: дата операции и плановый возврат — только дата (без времени в форме и списках)
npm run check/vite buildне обращались к API заallowedHosts(загрузка только приvite dev)
Техническое
- Миграции:
020_repair_credit_schedules,023_password_reset_requests - SQL:
UpdateScheduledCreditPaymentAmount,UpdateFutureTransactionAmount,UpdateSystemCategoryIcon StatsSummaryAccount— сводка по счёту с учётом переводов;ActivateDueFutureTransactionsпри списке операций и статистике- В ответах
Transaction:credit_payment_linked;GuardTransactionUpdateдля операций кредита mapMoneyInputCursor— стабильный курсор в полях суммыsetup.Handler:syncConfiguredMarker, маркер.configuredсразу после commit транзакцииDateTimePicker:calendarCellsс годом/месяцем для padding-дней; плагинallowedHostsPlugin(configureServer)- CSS:
--bg-popover, класс.popover-panelдля overlay-панелей - Версия по умолчанию:
1.1.0(VERSION,Makefile,Dockerfile, OpenAPI)
Коммиты
Changelog
- b83c4ce Подготовка релиза
- cd163d5 Исправлен календарь Мелкие фиксы
- cf73c60 Исправлены статистика и фильтры Доработаны кредиты Обновлён UI и переводы
- 5dfa93b v1.1.0 - Сброс и восстановление пароля - Адаптация под мобильные браузеры - Комиссия за переводы и категория «Комиссия» - График кредита: ровно term_months платежей и repair при старте - Редактирование сумм неоплаченных платежей графика - Списание ретро-платежей при создании кредита - Переключатели в форме кредита (ретро-списание) - Сброс формы при повторном «Новый кредит» - Кнопка доната в админке - Демо-стенд и release notes v1.1.0 - OpenAPI 1.1.0
Docker
Вложения docker-compose.yaml и .env — тот же compose из репозитория; .env задаёт BUHGALTER_IMAGE_TAG=1.1.0.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.1.0
docker compose -f docker-compose.yaml up -dИли без compose:
docker run -d --name buhgalter \
-p 8765:8765 \
-v buhgalter-data:/app/data \
-v buhgalter-backups:/app/backups \
--restart unless-stopped \
ghcr.io/kai-zer-ru/buhgalter:1.1.0