buhgalter
Тип проекта: личный проект
Бухгалтер: Self-hosted личная бухгалтерия
Релиз: v1.11.3 (05.11.2026)
[v1.11.3] — 2026-11-05
Без миграций БД. Перевод на кредитную карту больше не отклоняется, если сумма больше credit_limit − balance.
Android
Исправлено
- Перехват уведомлений: «Возврат» (не отмена покупки) создаёт черновик дохода, магазин берётся из текста после суммы. Категория и подкатегория черновика — по истории операций того же типа, в том числе по описанию («Выплата процентов»), а не только по магазину из справочника
- Ошибки API в тостах и формах больше не показываются сырым кодом
ERR_…— подставляется текст из каталога
Изменено
- Пополнение кредитной карты: можно перевести любую сумму, в том числе больше остатка долга; баланс карты может стать выше лимита (ui-credit-cards.md)
Web
Исправлено
- Ошибки API больше не показываются сырым кодом
ERR_…
Изменено
- Пополнение кредитной карты сверх лимита разрешено; кнопка «Весь лимит» по-прежнему подставляет остаток долга
Server
Изменено
POST /transfersнаcredit_cardпринимает сумму большеcredit_limit − balance; кодERR_CREDIT_CARD_PAYMENT_EXCEEDS_LIMITбольше не возвращается- Все коды ошибок из обработчиков есть в
server/localesи вerrors.*клиентов;error.message— человеческий текст, не ключ
Техническое
scripts/check_api_error_i18n.pyвmake ui-i18n-check: код изWriteR/WriteLдолжен быть в локалях сервера и UI- Тесты: перевод на карту сверх лимита;
formatApiErrorне показывает сырой код; Playwrightcredits-principal-incomeсверён с локализованнымmessage
Коммиты
Changelog
- dbbc445500191d9dde797b4d5b513e85b1506b69 исправил отображение ошибок в интерфейсе
- 1d8e81e381615eaedf2d669b57998fbdda9f5924 Пополнение кредитной карты сверх лимита
- 30b5a60b246742d20d6a893bf54c7d67d83afaca Исправлен баг с черновиками уведомлений
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.11.3. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.11.3
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.11.3
Android
Вложения buhgalter-android-1.11.3.apk (universal) и buhgalter-android-1.11.3-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.11.2 (01.11.2026)
[v1.11.2] — 2026-11-01
Без миграций БД. API не менялся.
Android
Исправлено
- Перехват Ozon Банка: сумма с разделителем тысяч — узким неразрывным пробелом (U+202F) — читалась с конца («3 073 ₽» → 73). Экзотические пробелы теперь нормализуются перед разбором
- Перехват WB Банка: доход «Выплата процентов» попадал в описание как «а процентов». Метка операции берётся целиком; «Ozon Банк» в заголовке пуша больше не считается магазином
- Сканер чеков: при запущенной камере кнопки «Остановить» и «Загрузить фото» были неактивны. Теперь обе доступны, выбор фото сам останавливает камеру (android-client-receipts.md)
- Кредит: бейдж ближайшего платежа считал день по UTC — в поясе восточнее UTC платёж на завтра показывался как «сегодня»
- Бюджет: «Копировать на следующий месяц», сохранение и удаление перерисовывали страницу целиком и сбрасывали прокрутку наверх. Теперь список обновляется на месте
Изменено
- Кнопки без яркой заливки: основные и опасные — тональные «таблетки», приглушённый тумблер, выбранные вкладки и сегменты — тональные (ui-visual-style.md)
- Кнопка создания в шапке списков везде «+ Добавить»: счета, кредиты, подписки, периодические операции, бюджет, шаблоны, правила категорий
- Заголовки групп везде одного вида — без счётчиков и подсказок
- Периодические операции разделены на группы «Активные» и «Неактивные»
- Убраны лишние подсказки: периодические операции, шаблоны, категории, магазины, теги, правила категорий, «Черновики», «Уведомления банков», «Сервер», «Безопасность»
- Форма бюджета: переключатели «Активен» и «Копировать на следующий месяц» в один ряд, без подсказки
Web
Исправлено
- Сканер чеков (импорт и прикрепление чека): «Остановить» и «Загрузить фото» доступны при запущенной камере
- Кредит: бейдж ближайшего платежа — день по часовому поясу пользователя, не по UTC
- Бюджет: копирование, сохранение и удаление больше не сбрасывают прокрутку
Изменено
- Тот же стиль кнопок, «+ Добавить» в шапке списков, заголовки групп без счётчиков и подсказок, периодические операции «Активные» / «Неактивные», меньше подсказок
- Форма бюджета: переключатели в один ряд, поля выровнены в две колонки
Server
Изменено
- Строки Android UI (
server/ui_locales): новые ключиcommon.add,recurring.group.active/recurring.group.inactive; из заголовков групп убраны счётчики
Техническое
- Тесты: vitest парсеров уведомлений и
daysUntilApiDate; Playwright — сканер чеков с фейковой камерой, обновленыbudget,z-category-rules,coverage-gaps,credits-principal-income
Коммиты
Changelog
- d4ebf1a3087e841a7b003e8e48d4295b822bdd22 документация
- 5755f1e23c938a01dd478912f16e2a88c0eb8f05 Улучшение UI (Web + Android)
- 555d8f9df9522d99f4dbacdc4ef02f4654490ce8 Баг парсера даты в бейджах. Раздел "кредиты"
- fd7b2ac14756fe37fab86ebba16c58a3b6dd06eb Исправил баги в сканере чеков
- ba63ecd52ee184b50f10d4baf2ccbeab8a0c2f53 Исправления в парсере уведомлений
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.11.2. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.11.2
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.11.2
Android
Вложения buhgalter-android-1.11.2.apk (universal) и buhgalter-android-1.11.2-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.11.1 (01.11.2026)
[v1.11.1] — 2026-11-01
Без миграций БД. Сервер и веб не менялись (только версия сборки); изменение — в APK.
Android
Добавлено
- Перехват уведомлений нового приложения «ВБ Банк» (
ru.wildberries.bank): пуши разбираются как у прежнего приложения WB Банка, привязка «счёт → банк» не меняется (notification-intercept-harden.md)
Коммиты
Changelog
- e11394ee38e1718aa8b742c61b030f3a9c381c27 Добавлена поддержка уведомлений от нового приложения WB-банка
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.11.1. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.11.1
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.11.1
Android
Вложения buhgalter-android-1.11.1.apk (universal) и buhgalter-android-1.11.1-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.11.0 (31.10.2026)
[v1.11.0] — 2026-10-31
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЭКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Миграции БД063–067: валюта у счетов, бюджетов и долгов (заполняется валютой профиля), уникальность бюджета с учётом валюты, семья / команда, автор операции и исходный владелец счёта. Данные не удаляются.
Android
Добавлено
- Семья / команда: создание группы, приглашение кодом, ссылкой или QR (камера или файл), deep link
ru.kai_zer.buhgalter://invite/{code}, участники, передача владения, выход и роспуск. Семейные счета с бейджем, тумблер «Семейный счёт» при создании, «Сделать общим» / «Сделать личным». Вкладки «Личные / Семья» в справочниках, «Всё / Личное / Семья» на главной, в статистике и бюджете. Экран требует сеть (household.md) - Валюта счёта: выбор при создании, итоги главной по валютам, обмен между счетами разных валют (две суммы, курс из них), чипы валюты в статистике и бюджете. Виджеты баланса — в валюте профиля с пометкой «+ другие валюты» (multicurrency.md)
Изменено
- Редизайн всех экранов: группы с заголовком и подсказкой, списки одной карточкой, сводки плитками, бейджи статуса, «Опасная зона». Хабы настроек и админки со значками и подсказками (ui-visual-style.md)
- Изменение бюджета открывается в окне снизу экрана, а не раскрывается внутри карточки
- Время в периодических операциях и подписках — обычное поле «Время выполнения», без спойлера
- Сервер, выбранный в поиске по LAN: его внешний URL сразу попадает в профиль. В «Настройки → Сервер» заполняет пустое поле «Внешний URL»; если поле уже заполнено другим адресом — подсказка «Сервер сообщает: …» и кнопка «Подставить». Внешний адрес, который не отвечает из домашней сети, не мешает сохранить профиль (android-client-platform.md)
- «Копировать на следующий месяц» в меню бюджета включает у бюджета тумблер копирования и перезаписывает уже существующий бюджет следующего месяца (budget.md)
Исправлено
- Стрелки у шаблонов и черновиков из уведомлений: доход — вниз, расход — вверх
- Экран «Черновики», открытый до загрузки пользователя (холодный старт, переход из уведомления), показывал «Включите перехват уведомлений», хотя перехват включён
- Ошибка копирования бюджета больше не появляется в форме другой статьи и не показывается сырым кодом
ERR_BUDGET_COPY_EXISTS: ошибки копирования — тостом - Одинаковые отступы между спойлерами «Мои средства» и «Кредитные средства» на главной и между блоками на страницах долга, кредита, подписок, периодических и пароля
Web
Добавлено
- Семья / команда:
/settings/household, приглашения кодом, ссылкой/invite/{code}и QR (меню «⋯» у приглашения: «Показать QR», «Отозвать»), на мобильном — «Открыть в приложении». Семейные счета, справочники и фильтр «Всё / Личное / Семья» — как в Android (household.md) - Валюта счёта: выбор при создании (менять можно, пока нет операций и связей), итоги главной по валютам, обмен между валютами, чипы валюты в статистике, нетто-капитале и бюджете (multicurrency.md)
Изменено
- Редизайн всех экранов в стиле справочников: группы с подсказками, списки одной карточкой, сводки плитками (
.stat-grid), таблицы.data-table, бейджи статуса, футер с действиями, «Опасная зона» (ui-visual-style.md) - «Копировать на следующий месяц» в меню бюджета включает тумблер копирования и перезаписывает уже существующий бюджет следующего месяца (budget.md)
Исправлено
- Стрелки у шаблонов: доход — вниз, расход — вверх
- Ошибка копирования бюджета показывается тостом, а не в форме, открытой следом
- Одинаковые отступы между спойлерами на главной и между блоками на страницах долга, кредита, подписок, периодических и пароля
Server
Добавлено
- Семья / команда:
households(kind=family|team), участники, инвайты (9 символов, 7 суток, одноразовые),POST /accounts/{id}/shareи/unshare,scope=all|personal|householdу главной, операций, статистики, нетто-капитала и бюджета. Модульhousehold(по умолчанию включён). Миграции065–067(household.md, feature-toggles.md) - Валюта счёта:
accounts.currency,budgets.currency,debts.currency(миграция063),GET /currencies(RUB, USD, EUR, CNY, KZT, BYN, TRY, GBP),to_amountу перевода между валютами,totals_by_currencyна главной,?currency=в статистике и бюджете. Связи счетов (кредитка → счёт оплаты, автопополнение, архивация, кредит, долг, бюджет со счётом) — только одна валюта,ERR_CURRENCY_MISMATCH. Смена валюты счёта с операциями —ERR_ACCOUNT_CURRENCY_LOCKED(multicurrency.md, data-model.md) - Импорт «Бухгалтер» читает валюту счёта; Cubux импортирует строку, если её валюта совпадает с валютой счёта, иначе пропускает с warning. Уведомления форматируют сумму валютой счёта или бюджета (import/buhgalter.md, import/cubux.md, notifications.md)
Изменено
POST /budgets/{id}/copy-nextвключает у источникаcopy_forwardи пишет следующий месяц как сохранение с тумблером: бюджет того же scope и валюты обновляется, иначе создаётся.409 ERR_BUDGET_COPY_EXISTSудалён (budget.md)- Уникальность активного бюджета учитывает валюту (миграция
064)
Исправлено
- Кеш GET (
apicache) дублировал все заголовки ответа, включаяAccess-Control-Allow-OriginиVary: браузер отбрасывал кросс-доменные ответы (Android-UI в браузере, сторонние клиенты). Веб с того же origin не затронут
Коммиты
Changelog
- 18af10cfbe4341ed5cb201a3e3102e49e7e140bf документация
- 639fa9d68460ab986c4fff0573d540a32cf07333 Исправления в бюджете
- aa1f499d3833e4475811e9dbe95dba26825906ca Редизайн веба и Android
- 42049d5cd5120810e40267d116214ddde4300d97 Android: внешний URL из найденного сервера
- 6fb4ca074a4d43a6505ac339b27b5ed3818dfea5 Редизайн веба и Android
- 44c4d8d0239fc094bed31f352020fa17e4500451 Семья / команда
- c010bcea94eddfce7738d58ea16c2e3e706a9085 Валюта счёта
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.11.0. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.11.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.11.0
Android
Вложения buhgalter-android-1.11.0.apk (universal) и buhgalter-android-1.11.0-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.10.1 (26.10.2026)
[v1.10.1] — 2026-10-26
Без миграций БД. Сервер и веб не менялись (только версия сборки); исправления — в APK.
Android
Исправлено
- «Изменить время» у платежа по кредиту открывалось в самом низу длинной страницы (главная, операции, счёт), а не у нижнего края экрана. Модальные окна теперь всегда относительно экрана (android-client-ui.md)
- Поле времени открывало системный выбор только по иконке часов; теперь — по тапу в любом месте поля, на всех экранах (android-client-ui.md)
Техническое
ModalShell— портал вbody;PullToRefreshбезtransform/will-changeв покое; actionuse:nativeTimePicker(showPicker()по тапу); vitest на action, стиль PTR и source-scan инвариантов
Коммиты
Changelog
- 694f39f5f9c78b14238a3d98dd17d6a316b209fc Важные UI исправления, после релиза 1.10.0
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.10.1. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.10.1
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.10.1
Android
Вложения buhgalter-android-1.10.1.apk (universal) и buhgalter-android-1.10.1-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.10.0 (25.10.2026)
[v1.10.0] — 2026-10-25
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЭКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Есть аддитивные миграции БД057–062(сканер чеков: токен API, точки чека, импорты, кеш preview, категории позиций; страховочноеmerchant_aliases).
Android
Добавлено
- Сканер чеков 54-ФЗ: кнопка «Чек» на главной, в операциях и на счёте; QR читается на устройстве (камера, снимок, файл из галереи), на сервер уходит только строка. Import — расходы по позициям с категорией у каждой строки; «Прикрепить чек» и «Открепить» в меню расхода; просмотр чека из журнала. Только online (docs/receipt-scanner.md, android-client-receipts.md)
- Кнопка «Войти в демо-режим» на экране адреса сервера и на выборе входа: вход на публичный стенд
buhgalter-demo.kai-zer.ruодним нажатием. Сохранённый свой сервер заменяется только после подтверждения; ошибка оставляет прежний адрес (roadmap/android-demo-login.md)
Изменено
- Платёж по кредиту: в меню строки «Изменить время» вместо пунктов подписки; день операции не меняется (transactions-display.md)
- Подсказка «Копировать на следующий месяц»: сохранение пишет только следующий месяц и выключает там копирование; месяц через один появляется 1-го числа, если у следующего копирование включено
Исправлено
- Системный «Назад» с пуша или внешней ссылки открывает главную, а не закрывает приложение (android-client-ui.md)
- Главная при уже показанной сводке без сети остаётся на месте с полоской «Нет соединения», а не уходит в заглушку «Сервер недоступен» со вторым таким же toast (android-client-ui.md)
- Список магазинов: удаление убирает строку на месте, список не перезагружается и не прыгает в начало (ui-stable-layout.md)
Web
Добавлено
- Сканер чеков 54-ФЗ: кнопка «Чек» на главной, в
/transactionsи на счёте; QR с камеры или из файла читается в браузере. Import расходов по позициям, «Прикрепить чек» к существующему расходу (сверка суммы), «Открепить», просмотр чека из журнала с подсветкой позиции (docs/receipt-scanner.md) - Админка → API чеков: токен proverkacheka (write-only) и модуль
receipt_scanner(README.md)
Изменено
- Платёж по кредиту: в меню строки «Изменить время» вместо пунктов подписки (transactions-display.md)
- Подсказка «Копировать на следующий месяц»: сохранение пишет только следующий месяц и выключает там копирование; месяц через один появляется 1-го числа, если у следующего копирование включено
Исправлено
- Список магазинов: удаление убирает строку на месте, список не перезагружается и не прыгает в начало (ui-stable-layout.md)
Server
Добавлено
- Модуль чеков:
POST /receipts/parse(строка QR → preview через proverkacheka, повтор того же чека — из БД),POST /receipts/import,POST /receipts/attach,POST /receipts/detach,GET /receipts/{id},GET /stores;PUT /admin/settings/receipt-api-token. Без feature flagreceipt_scanner— 404, без токена — 503ERR_RECEIPT_API_NOT_CONFIGURED - Магазин чека разрешается по каталогу
merchants(имя или алиас), как у ручной операции. «По магазинам» в статистике считаетmerchant_id; подкатегории позиций прикреплённого чека попадают вGET /stats/by-subcategory PUT /transactions/{id}/time— смена часа и минуты операции, связанной с платежом по кредиту; дата иdebit_time_localкредита не меняются
Исправлено
- Тумблер «Копировать на следующий месяц» при сохранении уже наступившего месяца сразу создаёт или обновляет только следующий месяц и выключает у него копирование. Чтение списка, сводки и проверка порога бюджет не пишут. 1-го числа по часовому поясу пользователя создаётся отсутствующий следующий месяц, если у текущего копирование включено; уже существующий месяц этот проход не меняет
- Предупреждения, которые handler пишет через пакетный
slog(ошибки привязок банковских уведомлений, настроек уведомлений, удаления данных, импорта), теперь попадают вlogs/app.log, а не только в stdout
Техническое
- OpenAPI 1.10.0; версия сборки 1.10.0
- Миграции
057_receipt_api_token,058_receipt_scan_jobs,059_stores_and_receipts,060_receipt_fiscal_previews,061_receipt_import_item_categories,062_merchant_aliases_ensure(CREATE … IF NOT EXISTS, на базе после056ничего не меняет) - На публичном демо-стенде сканер чеков выключен: лимита proverkacheka не хватает на общий стенд
Коммиты
Changelog
- 82ccb719f81e6244ad18e7895d09ceca94e48a75 документация к релизу 1.10.0 (Сканер чеков)
- 936ad3cc29318ce1df4b814ddf9ac21232a87fb2 Починил логирование части запросов
- c800095afc54d92ef7c4a24265f3aa245da3cfcf Демо-вход на андроиде
- 83c724f4888f5b49ecd8924057ae49b9a362ad18 Доработка сканера чеков (UI)
- 8a389f9bb1c96485dee81557de4d6d882bf9d535 Доработка сканера чеков (магазины)
- df82041bdd8e26a41f7fa56891deaab8f1287d72 Платёж по кредиту: в меню строки «Изменить время» вместо пунктов подписки
- 7aa79aa5ec27e5edf9b27f1598ed4a82374e48ff UI списка магазинов
- e5aaffb06419669015e686e49e0e4c47c8142584 Убрал ошибку соединения на главной странице Андроида
- 2dd9c71f76b74cd754ed2671e32c49ce8a31bb1a Нажатие "Назад" после перехода из пуша - ведёт на главную, а не закрывает приложение
- 93ca81d6cb4553a548eda834fc9003a431720022 Документация для разработки
- 7652f6f7efb271a34126cf989ad1be032dce3e03 Баги в "Бюджете"
- 235ed4b1f909eafe0e6080328a78491954cf00c5 Merge branch 'master' into scan_chek
- 7df4171b2394024f224780e40d48ac4ddbee0d21 Сканер чеков v1.10
- 358b155bc18db4283522daadb429c3e33d1955a6 Merge branch 'master' into scan_chek
- ab2b14165452934f44c4b74f049f8b4f22c22b9c check-scan-test
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.10.0. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.10.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.10.0
Android
Вложения buhgalter-android-1.10.0.apk (universal) и buhgalter-android-1.10.0-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.9.2 (24.10.2026)
[v1.9.2] — 2026-10-24
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЭКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Есть аддитивная миграция БД056(таблицаmerchant_aliases).
Android
Изменено
- В хабе настроек нет пункта «Уведомления» (каналы, шаблоны и кнопки Telegram/MAX — в вебе). Банковские уведомления и черновики перехвата на месте; прямой адрес страницы по-прежнему показывает баннер (roadmap/android-hide-notification-settings.md)
- В форме операции магазин ищется по основному имени и алиасам; в журнале и в выбранном значении — только основное имя (roadmap/merchant-aliases.md)
Web
Добавлено
- Алиасы магазина (создание и правка) и Объединить: выбранный магазин остаётся, имена остальных становятся его алиасами, операции переезжают на него (roadmap/merchant-aliases.md)
Изменено
- В каждом шаблоне Telegram/MAX кнопки по умолчанию уже в раскладке: их можно переставлять, нельзя удалить; текст правится только в «Кнопках по умолчанию». Свои кнопки шаблона добавляются отдельно (roadmap/notification-template-global-buttons.md)
- Конструктор «Кнопок по умолчанию» только у включённого канала; оба включены — вкладки. Клавиатура выключенного канала при сохранении блока не затирается
- В форме операции совпадение с алиасом выбирает существующий магазин
Server
Добавлено
- Алиасы магазина (
merchant_aliases): полеaliasesвGET /merchantsиGET /ui/meta;POST /merchants/{id}/merge. Создание операции и импорт поmerchant_nameнаходят магазин по алиасу. В журнале и вmerchant_name— основное имя - Экспорт «Бухгалтер»: колонка
aliasesв секцииmerchants. Файл без этой колонки импортируется как раньше - У шаблона уведомления
placement— порядок общих и своих кнопок. Нетplacement— как раньше: global → шаблон → блок недостатка средств. Новая глобальная кнопка дописывается в конец раскладки шаблона
Изменено
GET /api/v1/exportбезformat(пустая строка и пробелы тоже) — формат «Бухгалтер», фильтры дат/счёта/категории не применяются. Cubux —format=cubux. Неизвестное значение остаётся Cubux (roadmap/export-default-format.md, import/buhgalter.md)
Исправлено
/docs: Redoc открывается (схемаTransactionListуGET /transactions/inboxвместо битой ссылкиTransactionListResponse)
Техническое
- Миграция
056_merchant_aliases - OpenAPI / версия сборки 1.9.2
- docs/release-notes-v1.9.2.md
Коммиты
Changelog
- 87337dfde530828504558177a09779e13c463207 Документация
- 4393c97d5f59570bf2c0ccc20109ffc56cc12d49 Экспорт без format — формат Бухгалтер
- fa4d70a513b66f02e9167eafabd94e135c54d041 Android: скрыть раздел «Уведомления» в «Настройках»
- 936812036122dcf8bc95a20b15767f4831e5fc5e Алиасы магазинов
- f0e6a5891df7673656178dc64bb22af76aa0203e Глобальные кнопки в уведомлениях
- 778b328c8ce26bce787e3cafe00b5ea56cc75d01 Исправление /docs
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.9.2. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.9.2
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.9.2
Android
Вложения buhgalter-android-1.9.2.apk (universal) и buhgalter-android-1.9.2-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.9.1 (17.10.2026)
[v1.9.1] — 2026-10-17
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЭКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет.
Android
Изменено
- Перехват уведомлений: единый gate для черновиков и уведомлений в шторке; marketplace WB/Ozon без маркетинга и доставки; provisional только с суммой и маркером валюты (roadmap/notification-intercept-harden.md)
- Направление переводов: «перевод по …» → расход; «перевод от …» → доход; оба с одной суммой в окне ~2 ч → перевод между своими счетами (roadmap/notification-intercept.md)
Исправлено
- WB Кошелёк «Перевод по СБП» снова распознаётся как операция (не ignore / не сумма «Доступно»)
- Ложные уведомления бухгалтера на рекламу и доставку Wildberries / Ozon (в т.ч. «80%» → «80 ₽»)
Server
Техническое
- Версия сборки / OpenAPI 1.9.1 (схема БД без изменений)
- docs/release-notes-v1.9.1.md
Коммиты
Changelog
- 3da6666c3068e8b5d74acc64ab0789f5c34bfaac документация
- a6ce7fd84a2df78feb69bc2267c1ccea58278d6c Улучшение перехвата уведомлений
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.9.1. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.9.1
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.9.1
Android
Вложения buhgalter-android-1.9.1.apk (universal) и buhgalter-android-1.9.1-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.9.0 (16.10.2026)
[v1.9.0] — 2026-10-16
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЭКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Есть аддитивная миграция БД055(колонки JSON-клавиатур уведомлений).
Android
Добавлено
- Парсер перехвата: ВТБ «Поступление», Сбер SMS «Перевод по СБП», сумма с «р» без кода валюты, номер карты/счёта из «СЧЁТ5159» (roadmap/bank-notification-income-patterns.md)
Изменено
- Интерфейс: на сенсорных экранах без полос прокрутки; «потянуть вниз» обновляет текущий экран; в профиле стиль «Классика» / «MaterialBased» (roadmap/ux-polish.md)
- На странице уведомлений остаётся только баннер «Настройте в веб-версии» (каналы, шаблоны и кнопки — в вебе) (notifications.md)
- Принять в шторке банковского черновика снова открывает форму операции/перевода с предзаполнением (не создаёт операцию сразу); подтверждение — «Сохранить» в приложении. Отклонить без изменений (shade-accept-open-form.md)
Исправлено
- При запуске приложение сразу сворачивалось (гонка при фоновом подъёме перехвата уведомлений на HyperOS и др.) (android-client-platform.md)
- В поле Магазин формы черновика больше не попадает почти весь текст push — вместо
Оплата р Карта … Балансостаётся имя точки (notification-merchant-strip.md)
Web
Добавлено
- Исходящие кнопки в сообщениях Telegram и MAX: общие и в шаблоне; конструктор перетаскиванием; пресеты по типу уведомления; предпросмотр и тест. Обработка нажатий (webhook) в этом релизе не входит (notifications.md, roadmap/telegram-max-buttons.md)
- В шаблоне недостатка средств — ссылка на счёт (
{account_url}) и пресет «Открыть счёт»
Изменено
- Интерфейс: на touch без полос прокрутки (на desktop — тонкие); «потянуть вниз» на мобильных; в профиле стиль «Классика» / «MaterialBased» (roadmap/ux-polish.md)
- Настройки уведомлений: блоки под спойлерами; в шаблонах — только включённые каналы; в payload клавиатуры нет клиентского
id(toApiKeyboard)
Исправлено
- Кнопка сохранения в настройках уведомлений показывала ключ перевода вместо текста (на Android экрана с этой кнопкой нет — только баннер)
Server
Добавлено
- Исходящие кнопки Telegram и MAX в настройках и шаблонах уведомлений (порядок при отправке: общие → шаблон → блок недостатка средств; кнопка без URL после подстановки плейсхолдеров не добавляется)
- Плейсхолдер
{account_url}в шаблоне недостатка средств
Техническое
- OpenAPI 1.9.0; версия сборки 1.9.0
- Миграция
055_notification_keyboards— колонкиkeyboard_telegram/keyboard_max(JSON, default пустая клавиатура) - В README — что делать при Android 15+ «Конфиденциальные данные скрыты» при перехвате банковских push (README.md)
- Формат даты Layout в
DraftNotifyHttp(hardening; Accept из шторки больше не POST’ит) (shade-accept-sync-failed.md) - Проверка полноты переводов UI (
make ui-i18n-check): ключи из интерфейса должны быть в ru и en
Коммиты
Changelog
- b124887342f3e2b6c21523513fc2b64a621dc95b документация версии 1.9.0
- 947d8f7dd71659814163e233e8e0abefd9bb6ec5 Улучшение уведомлений в шторке
- 754af034a0ab5c43b1244b8fb0f2e9776f5247b3 Исправление работы уведомлений в шторке (не перехват)
- e9ee0e27d4153d66f4ce2f82075b87464e6c4a28 улучшения парсинга уведомлений
- a4d54e48c13dd96d0f9d22d48f14b9ad73da3ef1 Банковские push: «Конфиденциальные данные скрыты» (Android 15+)
- 6afb9168ac01ddbedd27eefc16c501920aaa4d7e Кнопки в сообщениях мессенджеров
- f3a99e6b19f53edfd98c83948da23e948478a1e5 переводы
- 30e0738db78d65a07959a3d321ec2582e960c72e MaterialBased тема
- dc5a04c72001a6756659df9abd23f0f6bc36e4b4 исправление сворачивания при запуске приложения
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.9.0. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.9.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.9.0
Android
Вложения buhgalter-android-1.9.0.apk (universal) и buhgalter-android-1.9.0-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.8.0 (13.10.2026)
[v1.8.0] — 2026-10-13
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Есть миграции БД (053,054).
Android
Добавлено
- Статистика: блок нетто-капитала (текущее значение, assets/liabilities, ряд по месяцам) без интерактивных графиков (ui-stats.md)
- Правила категорий и очередь «Разобрать» (операции без категории): drawer, evaluate в форме, «всегда так» → правило (category-rules.md)
- Привязки банк/карта→счёт для перехвата уведомлений на сервере (
GET/PUT /user/notification-intercept/bindings) — переживают переустановку APK
Исправлено
- После переустановки «Синхронизировать» больше не проигрывает всю ленту
transaction-changesсsince_id=0: warm — watermark/seek; heavy-warm отложен (ui-api-cache.md) - SMS банков из «Сообщения» (
com.android.mmsи OEM) снова попадают в черновики - Кнопки «Создать операцию» / «Создать перевод» в карточке черновика — на всю ширину ряда
- После create/update/delete операции или перевода балансы и списки на открытых экранах обновляются сразу (
touchLedgerAfterTransactionMutation+afterOnlineWrite) - При выходе из профиля больше нет toast «Требуется авторизация» (и дублей)
- Сетевые ошибки native/OkHttp (
Host unreachableи др.) → человекочитаемое сообщение, не сырой английский текст
Web
Добавлено
/stats: графики Chart.js (нетто line, доходы/расходы bar, donut по категориям) + блок нетто-капитала (ui-stats.md)- Правила категорий (
/category-rules) и очередь «Разобрать» (/transactions/inbox, badge приinbox_count > 0) (category-rules.md) - После логина возврат на исходный URL (
?next=), а не всегда на главную - Редирект
/subscriptions/{id}→/subscriptions?edit=(ссылки из Telegram/MAX)
Исправлено
- После локальной мутации операции/перевода — soft-reload открытых экранов; in-flight GET при смене
cacheEpochне заливает stale (ui-api-cache.md) - При выходе — без toast «Требуется авторизация» (
toast.fromErrorглотает 401; logout не soft-reload’ит экраны) - Бюджет следующего месяца: удаление строки больше не воскресает из-за
copy_forwardпрошлого месяца
Server
Добавлено
GET /api/v1/stats/net-worth— снимок и ряд нетто-капитала по месяцамGET/POST/PUT/DELETE /api/v1/category-rules,PUT .../order,POST .../evaluate;GET /transactions/inbox,/transactions/inbox/count; silent apply категории при create, если ровно одно text-правилоGET/PUT /api/v1/user/notification-intercept/bindings— банк/карта→счёт для Android-перехвата- Миграции
053_notification_intercept_bindings,054_category_rules
Исправлено
- Удаление бюджета будущего месяца: сброс
copy_forwardу источника, чтобыsummaryне создавал копию снова
Техническое
- docs/release-notes-v1.8.0.md
- OpenAPI 1.8.0; версия сборки 1.8.0
Коммиты
Changelog
- 293496679f8ea565d0e39b4e44f987f1137f9b9e документация
- 8e22c7a38003f80c2c050e5888347fa4ce51586d фикс английских ттекстов ошибок, и документация к следущему релизу
- 351974f3e7adf18756e79b109caa55594674fc4e убрал сообщения об отсутствии авторизации на экране входа
- 0f630dffd66482f2342f4522dd1f945cab8a2018 исправлена переадресация после авторизации
- 5b357f524cca3586e2a72d55519583f38be5b491 Синхронное обновление балансов счетов на всех страницах
- e0387fa518f3dd02cf4446f732d7f29abc3f4aaf Ссылки на подписки
- cc452a239d4260fe9e5463693bad2c17ac474736 Баг удаления бюджета
- fb0c64579eeed9196a1aa2f0a18f2e151741ca17 Android: СМС UI черновиков UI web
- 08281b1f8218d78742ccfcb2adf5725dc02f4713 Правила категорий + очередь «разобрать»
- d98ab6379426de18b4e669acf748a54025f598c0 Графики /stats и нетто-капитал
- 9c4649987635c5eafef5a4fb257cb83057300d4e БАГ. Android: после переустановки долго синхронизируется и тормозит
- 7368d090e675d77914e7e171695cfb51a1bafd52 Не сохраняются настройки банковских карт
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.8.0. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.8.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.8.0
Android
Вложения buhgalter-android-1.8.0.apk (universal) и buhgalter-android-1.8.0-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.7.1 (02.10.2026)
[v1.7.1] — 2026-10-02
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет.
Android
Исправлено
- Офлайн и сетевые ошибки: единое человекочитаемое сообщение вместо сырого текста (HTTP-код, URL запроса)
- После отпечатка / PIN приложение реже само сворачивается; меньше задержек главной и бокового меню сразу после разблокировки (android-client-platform.md)
Web
Изменено
- Плановый остаток на главной: подпись учитывает запланированные платежи по кредитам текущего месяца (вместе с подписками и периодическими)
Исправлено
- При живом WebSocket главная могла показывать устаревшие балансы (
0.00), а страница счёта — актуальные: сброс ledger-кеша на первомonopen, обогащение/accounts*из dashboard,hint_pathsдля переводов (ui-api-cache.md) - Сразу после создания операции главная, счета и список могли расходиться до истечения TTL: эпоха серверного GET-кеша и клиентского ref-cache — in-flight GET после
clearRefCacheне записывает stale-снимок
Server
Исправлено
- ExternalAccess:
localhost/127.0.0.1/::1в Host не обходят проверку с удалённого IP;X-Forwarded-Hostне используется (install/nginx.md) - Бан пользователя удаляет API-токены, не только сессии (api/user-status.md)
- Битый
expires_atAPI-токена — истёкший (fail-closed); смена пароля отзывает чужие сессии (api/authentication.md) forecast_balance: просроченная подписка прошлого месяца не суммируется со списанием текущего- Архивация/удаление cash/bank: остаток и статус в одной транзакции (accounts-archive-delete.md)
- Create/Update/Transfer операций: запись, теги и
current_balanceатомарно - Платёж на кредитную карту: проверка лимита под блокировкой строки счёта
- Подписки/периодика: списание и сдвиг
next_runв одной транзакции (нет двойного списания при ошибке Mark) - Восстановление графика кредита с учётом
credit_kind;paid_amountне выше тела кредита (data-model.md) - Импорт:
doneпосле успешной записи статуса;Idempotency-Keyбез гонки дубля (import/cubux.md) - Restore БД:
.bakне удаляется до успешногоReopen;Manager.Reopenне закрывает живой handle при ошибкеOpen - Scheduler:
lastRunтолько после успешного ApplyDue - Notify: dedup только
sent; worker не активируетfutureпри выключенных плановых уведомлениях (notifications.md) - Долги и каталоги (merchant/tag/шаблоны): несмапленная ошибка → 500, не 200/201 с пустым JSON
- Бюджет: auto-copy на GET без 500 при UNIQUE-гонке;
budget+budget_periodв одной транзакции PUT /accounts/{id}: некорректные суммы автопополнения → 400, не тихий 0
Изменено
- apicache: инвалидация GET-кеша и realtime
invalidateтолько после успешных мутаций (2xx), не после 4xx/5xx (ui-api-cache.md) - GET-кеш: эпоха (
SetIfEpoch) — ответ GET, начатый до мутации, не попадает в кеш после инвалидации
Техническое
- docs/release-notes-v1.7.1.md
- OpenAPI 1.7.1; версия сборки 1.7.1
- Release workflow:
goreleaserждётandroid-apkиdocker; на тегеv*не гоняется повторный полный CI (ci.yml+ jobtestвrelease.yml)
Коммиты
Changelog
- f48fa95c625d87958d07130c7003ae444c6eeec8 github actions
- de9d552be12a27b17ed44178987b2771d5ce2724 Документация
- 846fce0939406a3192c6c3c85f17423eb60863ff Исправление автопополнения
- 76b4392437754981cdc5decebbb1fbc82c6c38ab Исправления кеша
- 87d609d88d36ce9948397f5b1b45ad6558fc29e4 Правки по бюджету
- 7899e034200d50aafea176acafe314c46547b16a Обработка ошибок
- b9e5d3e6b56897b11423578348139e928bc5dc6c Документация
- 0f532d9a36dee0766db986ed897f09d8e5526741 БАГ. Android: после отпечатка приложение часто само сворачивается; главная и меню (drawer) тормозят на несколько секунд.
- 11c73b0feabc14f6af80d7fce9dde29f74233edf Исправления по уведомлениям
- e22d65efdddfec6b1a7af3cf250a01e5335486d6 Исправление работы планировщика
- bcb8b93a1d1b2287f1a7777178fde2025ba4c44f БАГ. Android: в офлайне вместо «Сервер недоступен» показывается сырой текст ошибки
- 776b3a25d0992cc0024f9c107c540d27d3a86703 Сервер:
Manager.Reopenпри ошибкеOpenне закрывает живой handle - d1715f69153297f7bfca75e88238c1cee0a75922 Сервер: restore БД не удаляет
*.bak, покаReopenне успел; при ошибке открытия откат на прежний файл - 3c1df7abf619591eccc3957205f7f8057930c7fb правки импорта
- f3380bd3dac6b1a9f97320f8b068a674ad74a748 Сервер:
credits.paid_amountне превышает тело кредита при автосписании и платеже - 656e2d76c73879e714450bfdeb68db4531401928 Исправления платежей по подпискам и кредитам
- 4a129c5e947161d135db47405833aa640241fb7c Сервер: платёж на кредитку проверяет лимит под блокировкой строки счёта
- 41c9e40e535cab83beb414926687fb7419e5d1d1 БАГ. Сразу после создания операции главная/счета/список расходились (баланс и сама операция), через ~минуту сходились.
- 214e56a1f9c6d7cc9106e7b334436cb0cbcffb7e Сервер: Create/Update/Transfer пишут операцию, теги и current_balance в одной транзакции
- 642be029e53e1ebdb73a8971a274510fce31ce41 Сервер: архивация/удаление cash/bank переводит остаток и меняет статус в одной транзакции
- ba608d999efa4d3cf3e147d11307a14ff6703b7a Сервер: смена пароля отзывает чужие сессии (текущая сохраняется; через API-токен — все сессии)
- 012ccfc33278dcb9dc398db782ece1ae4a0bc909 Сервер: битый
expires_atу API-токена считается истёкшим (fail-closed), а не бессрочным - 75867b2ede64541296708463f0375358280a2dd9 UI: В балансе отображать ещё с учётом кредитов в текущем месяце
- 39a2771a2197641fdc136c71ac4aa25137d09238 Сервер: бан пользователя удаляет не только сессии, но и API-токены
- d578b7501f245e8456e2f758889ee4fb2a561d63 Сервер: ExternalAccess не доверяет
X-Forwarded-Host; host берётся изHost(как ставит nginx) - 07f2df085784b7eeef232a17d867cc3e6e4fa7f6 Сервер: Host
localhost/127.0.0.1/::1не обходит ExternalAccess, если клиент не loopback - e5f41baaa794ea6510b7de8c9c22135a3320f35e web: отображение балансов разнилось между главной и страницей счёта
- 085abecfa58cfb08cdbc301a82de29187876cb26 исправления в github-actions
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.7.1. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.7.1
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.7.1
Android
Вложения buhgalter-android-1.7.1.apk (universal) и buhgalter-android-1.7.1-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.7.0 (28.09.2026)
[v1.7.0] — 2026-09-28
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет.
Android
Исправлено
- Попап «Версии» мог бесконечно показывать старую версию сервера:
GET /version/checkпопадал в SWR ref-cache, а суточный throttle фиксировал stale-ответ; путь исключён из кеша, клик по версии в drawer форсирует сеть - У уже привязанной к подписке операции в меню строки больше нет «Сделать подпиской» / «Прикрепить к подписке»
- SMS банка в шторке «Сообщения» (заголовок вроде «Ваш Т-Банк») снова попадают в историю и черновики: разбор MessagingStyle (
EXTRA_MESSAGES), Unicode-дефисы в имени отправителя, больше OEM-пакетов SMS-приложений
Web
Добавлено
- Живые обновления по WebSocket (
GET /api/v1/realtime): другая вкладка, телефон и фоновые джобы сервера сразу отражаются на открытом экране без F5 - Прогресс импорта по сокету (
import.progress/done/failed); poll 1,2 с остаётся запасным вариантом - Точечный
invalidateсhint_paths/entities— refetch только затронутых API-путей, не всего экрана - Главная: если у общего баланса нет прогноза (
total_forecastсовпадает с балансом) — под суммой текст «Нет ближайших подписок и периодических»
Изменено
- При живом сокете фоновый SWR-revalidate на каждый GET выключен; без сокета — cooldown 60 с, скрытая вкладка не revalidate
- После reconnect — догон
GET /sync/transaction-changesи soft-reload открытого экрана - После мутации — полный сброс клиентского ref-cache (не
preserveAuthMe): следующийload()идёт в сеть
Исправлено
- Импорт:
import.doneобрабатывается синхронно из WebSocket onmessage (subscribeImportRealtime), до кадраinvalidate; иначе$effectопаздывал и UI не показывал «Импорт завершён». Poll остаётся запасным путём - У уже привязанной к подписке операции в меню строки больше нет «Сделать подпиской» / «Прикрепить к подписке»
- После создания операции список счетов мог показывать балансы
0.00: seed изui/metaбез балансов попадал в SWR при живом WebSocket (revalidate выключен). Seed/accounts*из meta отключён; мутации полностью сбрасывают ref-cache
Техническое
GET /version/checkисключён из клиентского ref-cache (как в документации)- E2E: две вкладки — операция в одной, баланс во второй без F5
Server
Добавлено
GET /api/v1/realtime— WebSocket-хаб поuser_id; событияinvalidateпосле мутаций, import job и scheduler- Документация nginx:
Upgrade/Connectionи длинныйproxy_read_timeoutдля/api/v1/realtime(install/nginx.md, docker/nginx.conf.example)
Исправлено
- Привязка операции к подписке закрывает ближайший платёж в очереди (
upcoming_run_ats), если дата операции попадает в его окно — раннее списание банка больше не оставляет «ещё одно списание завтра»
Техническое
- docs/release-notes-v1.7.0.md
- Версия
1.7.0(новых миграций БД нет) - Android в этом релизе без сокета: SWR cooldown ~1 мин, как раньше
Коммиты
Changelog
- 303e92ad335ac8ed67c918098a4a98b04a627dd8 тесты
- d81c570457476e4236b3b11f0ebcdd630779269b документация
- 2e9297c00cb657f7b267d18ad7896083ec565e82 тесты
- 24d801611b2a33c9cb080b6d2e9c7aea474b32f7 привязка платежа к подписке
- 10b55da728a3914ddb02c39251f427468ddf2ec6 правки перехвата СМС сообщений
- 11d8505812f250742115c0a282a0504cca609569 баг с подписочными операциями, в меню есть опции прикрепления к другой подписке
- 23296340ad18d63c31aada72cfc035ae3c230243 исправление проверки версии в Android
- 8d38fc22e136afd6ff1f03cd44a38be04cab9103 UI главной страницы
- 6c34b31daac199589670aa646549cb75598ed2bf доработки WebSocket
- 7efdc93e4f591e33995d1134e6ed442eae0b29ef доработки WebSocket
- 8452ce034587745b26ce4c4c61ddcb3a3b798777 web: websocket
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.7.0. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.7.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.7.0
Android
Вложения buhgalter-android-1.7.0.apk (universal) и buhgalter-android-1.7.0-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.6.0 (25.09.2026)
[v1.6.0] — 2026-09-25
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет (при старте сервера выравнивается категория у уже привязанных платежей по кредиту).
Android
Добавлено
- Привязка расхода к оплате кредита: в форме категория «Кредиты» (вместо подкатегорий — список активных кредитов) и «Сделать платежом по кредиту» из журнала
- Quick-actions в шторке для черновиков из перехвата: Принять / Отклонить без открытия приложения; тумблер «Уведомления в шторке» в настройках банковских уведомлений
- История уведомлений: «Создать операцию» или «Создать перевод» (уникальная пара) по распарсенной строке — без повторного ввода суммы
- Каталог банков: ВБРР (привязка счёта + перехват push/SMS)
Изменено
- Черновики из уведомлений: без чекбоксов и массового выбора. У карточки перевода кнопка «Удалить», как у остальных черновиков
- Форма платежа по кредиту: при категории «Кредиты» скрыты магазин, теги и описание; время сразу под датой (без спойлера)
Исправлено
- Счётчик «Последние операции» больше не раздувается лентой синхронизации: входящая нога перевода и операции старше страницы не прибавляются к
meta.total - Выпадающие списки (подкатегории и остальные): направление вниз по умолчанию, вверх только если у низа экрана нет места; после открытия положение не прыгает при скролле
- Системная клавиатура больше не всплывает поверх своей цифровой при возврате из другого приложения
Web
Добавлено
- Привязка расхода к оплате кредита: в форме категория «Кредиты» (вместо подкатегорий — список активных кредитов) и «Сделать платежом по кредиту» из журнала
Изменено
- Форма платежа по кредиту: при категории «Кредиты» скрыты магазин, теги и описание; время сразу под датой (без спойлера)
Исправлено
- Счётчик операций на главной и в «Все операции» совпадает с числом в импорте: перевод — одна операция, комиссия в счётчик не входит
Server
Добавлено
POST /credits/{id}/payments: опциональныйtransaction_id— привязать существующий расход к ближайшему платежу графика; при старте — выравнивание категории «Кредиты» у уже связанных платежей- Каталог банков: ВБРР
Исправлено
GET /transactionsmeta.total: перевод считается один раз (без фильтра счёта — исходящая нога; на странице счёта — нога этого счёта), комиссия перевода не считается отдельно.list_rowsимпорта равенvalid_rows
Техническое
make act-keep-image/make act-prune— label + keeper-контейнер, чтобы prune не сносил образ act- docs/release-notes-v1.6.0.md
- Версия
1.6.0(новых миграций БД нет)
Коммиты
Changelog
- f2394177c3231f32e645a835cfb6b37c26a252ff документация
- 73024c09e6437604c78832b2c55047cd346eaf22 доработки UI по добавлению операции "Кредиты", правки тестов
- 758a5e7389c6247d2657015fc86c5328687a179a исправление тестов
- 93f85b060a2e0fd432ed9db08fb73af55136347b Добавлен банк ВББР
- 6b4feb7e7ca14741439bb730389ce8d6f12438d6 UI баги выпадающих списков и встроенной клавиатуры
- 97e414b7d15492649d7caba6cfc059f138812929 Android: история уведомлений - кнопки создания операций
- 2cda9555d8e8911eb7a8576baa60ad9506555172 Привязать операцию к оплате кредита
- cee3a03add1fce8f5e8dfa7933da5411c9daf16c Android: quick-actions
- 60277b209c1d773e6d2fcf6378a2cc0a0110482f makefile fixes
- 8f1aea0821910761955053ce8aeae6106588f4f3 правки в черновиках UI
- 40f511b5528fdc389b2557a32e6aaf238447c484 Баг счётчика операций
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.6.0. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.6.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.6.0
Android
Вложения buhgalter-android-1.6.0.apk (universal) и buhgalter-android-1.6.0-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.5.5 (22.09.2026)
[v1.5.5] — 2026-09-22
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет.
Android
Исправлено
- Черновики перехвата: уникальная пара списание+пополнение — одна карточка «Возможный перевод», а не три
- Кнопка «Создать перевод» снова выглядит как кнопка (
btn-primary); действия на карточке в сетке, без кривой вёрстки - Счётчик в меню и баннер на главной: пара считается как одна карточка
- Создание и удаление черновика больше не зависают (справочники счетов в фоне; форма перевода без бесконечного
$effect)
Server
Техническое
- docs/release-notes-v1.5.5.md
- Версия
1.5.5(API и схема БД без изменений)
Коммиты
Changelog
- ad51abb884ae404979aac56ef59503c190483fc1 баги android, с черновиками
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.5.5. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.5.5
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.5.5
Android
Вложения buhgalter-android-1.5.5.apk (universal) и buhgalter-android-1.5.5-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.5.4 (22.09.2026)
[v1.5.4] — 2026-09-22
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет.
Android
Добавлено
- Импорт/экспорт Бухгалтер: полный перенос учёта между серверами (счета, справочники, операции, кредиты, долги, подписки); Cubux — только операции
- Профиль: кнопка «Удалить данные» — сброс учёта к состоянию нового пользователя (логин и профиль сохраняются)
- Перехват уведомлений платёжных приложений (MIR Pay, Samsung Pay, СБПэй, Google Wallet, Huawei Wallet, Mi Pay, ЮMoney) — тот же пайплайн черновиков, что у банков; счёт по last4 / банку в тексте
- Из черновиков перехвата — перевод между счетами (пара расход + пополнение, одна сумма)
Изменено
- Превью импорта показывает, сколько записей будет в журнале: перевод в файле — одна строка, в журнале — две
Исправлено
- Фоновый импорт: экран прогресса не сбрасывается из‑за кратковременной блокировки SQLite; кеш не сбрасывается в момент постановки job
- Возврат на импорт сразу показывает сохранённый прогресс (снимок job в
localStorage), не ждёт загрузки справочников - Экспорт «Бухгалтер» выгружает все операции, а не период «с 2025 до сегодня»
Web
Добавлено
- Импорт/экспорт Бухгалтер: полный перенос учёта между серверами (счета, справочники, операции, кредиты, долги, подписки); Cubux — только операции
- Профиль: кнопка «Удалить данные» — сброс учёта к состоянию нового пользователя (логин и профиль сохраняются)
Изменено
- Превью импорта показывает, сколько записей будет в журнале: перевод в файле — одна строка, в журнале — две
Исправлено
- Фоновый импорт: экран прогресса не сбрасывается из‑за кратковременной блокировки SQLite; кеш не сбрасывается в момент постановки job
- Возврат на импорт сразу показывает сохранённый прогресс (снимок job в
localStorage), не ждёт загрузки справочников - Экспорт «Бухгалтер» выгружает все операции, а не период «с 2025 до сегодня»
Server
Добавлено
- Нативный импорт/экспорт
preset=buhgalter/format=buhgalter: секционный CSV (#BUHGALTER,1) — профиль (часовой пояс, валюта, язык), счета (тип, банк, лимит, начальный остаток, автопополнение), операции (время, магазин, теги, комиссия, ID), справочники, кредиты с графиком, долги, подписки, периодические, бюджеты, шаблоны DELETE /api/v1/user/data— сброс учёта пользователя (операции, счета, долги, кредиты и остальное; категории по умолчанию)- Превью/отчёт импорта:
transfer_rowsиlist_rows(valid_rows+ вторая нога каждого перевода) — сколько записей будет в журнале
Исправлено
- Импорт экспорта с другого сервера больше не падает с
system category is read-only: системные категории не получают новые подкатегории - Импорт не схлопывает разные операции с одной датой/суммой/счётом/категорией и не пропускает одинаковые строки внутри файла; балансы после переноса (в т.ч. кредитных карт) совпадают за счёт
initial_balanceв нативном CSV - Секционный CSV
#BUHGALTERбольше не разбирается как обычный Cubux: служебные секции не считаются операциями без даты GET /export?format=buhgalterигнорируетfrom/to/account_id/category_id— в файл попадают все операции, включая будущие- Плановый остаток подписки не дублирует списание, если следующая дата в
upcoming_run_atsуже в следующем месяце (расхождение «с учётом подписок» после импорта на пользователя с другим поясом) - Фоновый импорт: подкатегории грузятся одним запросом;
POST /import/jobsне сбрасывает API-кеш до завершения job;GET /import/jobs/{id}при блокировке SQLite отвечает 503
Техническое
- OpenAPI
1.5.4:DELETE /user/data, экспортformat=buhgalter, импортpreset=buhgalter, ImportReporttransfer_rows/list_rows - CI: экшены GitHub Actions на Node 24 (
checkout@v7,setup-node@v7и остальные); Node.js для сборки UI по-прежнему 22 - docs/release-notes-v1.5.4.md
- Версия
1.5.4
Коммиты
Changelog
- 012e91887d0a9a46ccb8c1cf2ba3e7ccac97b1bb документация по v1.5.4
- a4e4bc2c3917073ef5fef4ceaf38a1d8625fcddf node version requirements
- acc87cfec85657cd69fddcd04aa0a35a868b9635 Android: из черновиков перехвата — перевод между счетами
- 6dcabdb90b5a527013e12b4f1ff850f0a0cf7521 Android: перехват уведомлений платёжных приложений
- 38cccafd093f1b20091a6f2d76dca3b28f6f10f7 Фиксы иморта/экспорта
- 04e45b010cf7b396841167d38e7bf6d4f890d690 Удаление данных пользлвателя" в профиле
- 3d5d2371280e5d1a56f3deae2a0fa36972e3b0cd Правки импорта
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.5.4. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.5.4
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.5.4
Android
Вложения buhgalter-android-1.5.4.apk (universal) и buhgalter-android-1.5.4-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.5.3 (14.09.2026)
[v1.5.3] — 2026-09-14
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет.
Android
Исправлено
- OEM-клон (Xiaomi Dual Apps / «клонировать приложение») больше не поднимает WebView: нативный экран «не поддерживается», основная копия не зависает на чёрном экране
- После удаления приложения сессия и кеш не возвращаются из бэкапа ОС (
allowBackup=false, исключение cloud/device-transfer, маркер вno_backup) - Холодный старт на HyperOS: системный сплэш сразу отпускается (в т.ч. night, не #000); WebView непрозрачный и не уходит в background; HTML без блокирующих Google Fonts (~30 с чёрного после сброса WebView); Keystore виджетов не на UI-потоке; тема Capacitor без
@nullфона
Server
Исправлено
- Автопополнение: перевод позже триггерной операции (
transaction_date+1 с, если не в будущем;created_atпосле триггера). В лентеdate_desc(новые сверху) автопополнение выше расхода
Техническое
- OpenAPI
1.5.3(версия спецификации; новых эндпоинтов нет) - docs/release-notes-v1.5.3.md
- Версия
1.5.3
Коммиты
Changelog
- e42cd413a412018fa99944bbb04ef24ae37c6afc документация
- 9af50cebfe1aca36801dd3eeeeab69212520fff4 БАГ. Автопополнение в
date_descоказывалось ниже триггера (выглядело старше операции); должно быть позже триггера и выше в ленте - 08829673f10440f30f53538adc89333808b362af Баги с клонированием приложения и чёрным экраном при старте
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.5.3. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.5.3
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.5.3
Android
Вложения buhgalter-android-1.5.3.apk (universal) и buhgalter-android-1.5.3-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.5.2 (08.09.2026)
[v1.5.2] — 2026-09-08
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новые миграции:052.
Android
Добавлено
Лента изменений операций
- При sync Android запрашивает
GET /sync/transaction-changesи патчит кеш списков по id: добавление, правка и удаление доходов и расходов (в т.ч. долги и кредиты), включая старые операции, которые полный прогрев страницы 1 не перечитывает - Документация: android-client-platform.md, ui-api-cache.md
Исправлено
- После правки операции на web (разбиение) на главной оставалась одна операция, пока несколько sync/перезапусков — список всех операций и счёта уже показывали две
- После оплаты кредита в списке оставался только один (синхронизация не чинила, помогал перелогин) —
onCreditUpdatedбольше не засевает одноэлементный список; ручной sync обходит SWR-кеш - Офлайн нельзя открыть должника (и другие карточки разделов) — снимки GET больше не стираются после write; прогрев тянет списки и карточки;
getDebtorсобирает деталь из локальных долгов
Web
Исправлено
- Календарь в подписках (и везде с выбранной датой) не перелистывал месяцы:
$effectвDateTimePickerсбрасывалviewMonthпри навигации
Server
Добавлено
GET /sync/transaction-changes— курсорная лента create/update/delete поtransactions(таблицаuser_change_events, миграция052)
Техническое
- CI/act: тесты SQLite — шаблон мигрированной БД +
synchronous=OFF;go test -timeout 30m - OpenAPI
1.5.2(GET /sync/transaction-changes) - docs/release-notes-v1.5.2.md
- Версия
1.5.2
Коммиты
Changelog
- 4edba521b418aa523794623872e3db5d3cdc9cdd документация
- af7e864b2f82d4d978ec209e329b5e8902d0f382 Доработка синхронизации
- d31e53b48db814b99165388cf93476aacd4a1ea1 Исправления в разделе "Долги" при оффлайн-работе
- b1cfff0a86dfd3deae022c76873bc8356737b98c Баг в кредитах после оплаты
- 5bf91b525d6472be686da37a07a3c38258b3d243 - БАГ. Android: после правки операции на web (разбиение) на главной оставалась одна операция, пока несколько sync/перезапусков — список всех операций и счёта уже показывали две - CI/act: тесты SQLite — шаблон мигрированной БД +
synchronous=OFF;go test -timeout 30m(иначе act упирался в 10m на goose/fsync) - 4b678394f4a28a694cc02a2abe7d372309f18048 БАГ. Web: календарь в подписках (и везде с выбранной датой) — не перелистывал месяцы:
$effectвDateTimePickerсбрасывалviewMonthпри навигации - 39ea9cf23944869010ba7cef6731080250f57b9c версия 1.5.2
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.5.2. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.5.2
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.5.2
Android
Вложения buhgalter-android-1.5.2.apk (universal) и buhgalter-android-1.5.2-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.5.1 (03.09.2026)
[v1.5.1] — 2026-09-03
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новых миграций БД нет.
Android
Добавлено
SMS-перехват покупок банка
- Тот же пайплайн черновиков, что у push: opt-in
RECEIVE_SMS, отправители из каталога (smsSenders), каналsms; сырые SMS только на устройстве; дедуп с push в окне 2 ч - Настройки: Настройки → Банковские уведомления — блок разрешения SMS
- Документация: roadmap/notification-intercept.md, android-client-platform.md
Виджеты
- Опция «Показывать виджеты при блокировке» в Настройки → Безопасность (по умолчанию выкл.)
- «Скоро»: кредит, долг, плановые, подписки, периодические — до 5 ближайших
Изменено
- Привязка банк→счёт — many-to-one: один банк можно выбрать у нескольких счетов; без last4 расход идёт на первый привязанный счёт банка
- Суммы в виджетах скрыты только пока нужен экран PIN; после разблокировки снова видны
- Виджет «Мои средства»: три строки — наличные, банковские карты, кредитные средства; тап →
/accounts - Форматирование сумм во всех виджетах как в UI (
1 500.00 ₽) - Шаблоны операций — отдельная страница
/transaction-templates(как подписки), не вкладка настроек
Исправлено
- Клонирование приложения (OEM dual-app): отдельные ключи Secure Storage и сессии — клон не сбрасывает вход основного приложения
- Тормоза UI: виджеты не зацикливают WorkManager
- Офлайн: категории и счета не ломаются после записи; списки
/accountsсохраняются; пустые — seed изui/meta - После онлайн-write форма операции снова со счётом и категорией
- Подкатегории: после создания в кеше сразу имя, не UUID; повторное добавление не ругается «имя занято»
- SMS банка через системное «Сообщения» (заголовок вроде «Ваш Т-Банк») попадают в черновики
- Перевод: «Вся сумма» активна после смены исходящего счёта
- Экран выбора счёта для виджета «Счёт»: тема DayNight и отступ под status bar
- Единый источник балансов:
GET /dashboardобогащаетlistAccounts/getAccount
Web
Изменено
- Шаблоны операций вынесены из настроек на
/transaction-templates; старый URL — редирект308 - В меню «Прочее» — пункт «Шаблоны операций»
Исправлено
- Справочники (категории и др.): после записи список обновляется сразу, не ждёт фоновой revalidate
Server
Исправлено
- Плановый остаток (
forecast_balance): еженедельные подписки — учёт всех списаний текущего месяца после очередиupcoming_run_ats, а не только ближайшей даты
Техническое
- OpenAPI
1.5.1(версия спецификации; новых эндпоинтов нет) - Строки UI: SMS-перехват, виджеты при блокировке (
server/ui_locales) - docs/release-notes-v1.5.1.md
- Версия
1.5.1
Коммиты
Changelog
- a13531fe8344d0cf5682224de2f3b6ebfd4fc90a исправление еженедельных подписок
- de185d2bd781d022ab9686f95c2015ac5d4ef2f3 docs
- 81fb47b5d97c862c1c2aba30a51208404747bef1 README
- 6fd619536775c0902b9de4472e0a42f8b0141348 Merge branch 'master' of github.com:kai-zer-ru/buhgalter
- 60f042423d7e7330fe9dcc30617268931b5f0e53 тонкие правки оффлайн-режима, тесты
- 586d9c9995ee2d5971f1a9d8c1f88de327a60c2a UI левого меню
- c663f14e8df9aa7b7024e1ed281b77ec7d2f3978 починил сломанные офлайн категории и счета
- 644cf8c2e3bbc96472190dff7761b55c1782598e Android: SMS-перехват покупок банка
- 78847614b6a9e42d2117ba83df2309a4e47223e8 Android виджеты
- 4461ba1bf5befd409810739f3b79e5bdcafc2cac БАГ. Перехват уведомлений: привязка банк→счёт — один банк нельзя выбрать у нескольких счетов (сбрасывает предыдущий). Нужно many-to-one: несколько счетов одного банка (напр. 3 в Т-Банке, 2 в Сбере)
- 98da384b2da41a25ed901dd21efff26113550645 Исправление работы при клонировании Android-приложения;
- fe18e06e256e8b43b7ab156cafe83f0c671cb67b Update README.md
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.5.1. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.5.1
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.5.1
Android
Вложения buhgalter-android-1.5.1.apk (universal) и buhgalter-android-1.5.1-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.5.0 (26.08.2026)
[v1.5.0] — 2026-08-26
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/. Новые миграции:043–051.
Добавлено
Подписки (web + Android)
- Отдельная сущность и экран поверх периодических: сводка «в месяц» / «в год», ближайшие списания, системная категория «Подписки», поиск и привязка операций, «Сделать подпиской» из журнала
- Редактируемая очередь из трёх ближайших дат списания (
upcoming_run_ats); после списания очередь сдвигается,next_run_at= новая первая дата;POST /subscriptions/preview-upcoming; в форме — правка дат и сброс по периоду - Уведомления
subscription_charge/subscription_days_before - Плановый остаток (
forecast_balance) учитывает активные подписки и периодические операции текущего месяца (TZ пользователя); подпись в UI различает плановые / подписки / оба (has_planned_this_month,has_subscriptions_this_month) - Документация: subscriptions.md
Магазины и теги (web + Android)
- Справочник магазинов (
merchants) и тегов (tags); на форме операции — выбор / создание по имени; фильтры спискаmerchant_id,tag_id - Описание операции по-прежнему в
description(отдельное поле комментария не вводилось) - Feature flag
merchants_tags
Шаблоны операций (web + Android)
- Именованные пресеты расхода / дохода / перевода; CRUD в настройках; «Сохранить как шаблон» из журнала; блок на главной (спойлер) и применение с экрана настроек
- Feature flag
transaction_templates - Документация: roadmap/transaction-templates.md
Перехват уведомлений банка (только Android)
- Opt-in:
NotificationListenerService→ локальные черновики расхода или дохода (покупки / входящие); OTP и баланс — игнор; отмена покупки снимает черновик - Маппинг last4→счёт и банк→счёт; магазин из справочника или предложение имени; категория/подкатегория по истории merchant при открытии черновика
- Настройки
/settings/bank-notifications; очередь черновиков; rebind / автозапуск на MIUI - Документация: roadmap/notification-intercept.md, android-client-platform.md
Модули в админке (feature toggles)
GET/PUT /api/v1/admin/features,GET /api/v1/features; страница Админка → Модули (только web)- Выключенный модуль скрыт в nav (web + Android), API →
404 FEATURE_DISABLED - Документация: feature-toggles.md
Изменено
Регистрация (breaking для admin API)
- Поле
registration_enabledубрано изGET/PUT /admin/settings; управление — флагregistrationв/admin/features - Публично по-прежнему
registration_enabledвGET /setup/status; значение переносится миграцией050_feature_flags.sql
Форма операции / главная
- Спойлер «Время, комментарий, магазин, теги»; единый Combobox для подкатегории и магазина с созданием по имени
- На главной шаблоны и бюджет — в сворачиваемых секциях
Техническое
- Миграции
043–051: subscriptions (+upcoming_run_ats), merchants/tags, transaction_templates, feature_flags - OpenAPI
1.5.0: subscriptions (preview-upcoming,upcoming_run_ats), merchants, tags, templates, features, уточненияforecast_balance - Unit/e2e: подписки (в т.ч. очередь дат), магазины/теги, шаблоны, feature toggles, Android notification intercept
- Документация: subscriptions.md, feature-toggles.md, transactions-display.md, ui-budget.md, android-client-*.md, README.md
- docs/release-notes-v1.5.0.md
- Версия
1.5.0
Коммиты
Changelog
- 00bb31ef56c7516ecab1c997721ed4fe640ff142 Доработка подписок (даты)
- 4e050ac5f03a86561eb01b143be4c8a488318a2b Шаблоны операций, UI, мелкие фиксы
- d5eda095f3c5f2ff2a128d3803b78c90fed872f8 Включение/отключение функционала в админке
- 8eb42fc899bb0befa5a3c29a9f7281d79ee92223 Перехват уведомлений банка (доходы)
- 0aa4ef4fab96660ebcbba0a070d3a8040b36c761 Шаблоны операций
- 3be88423aa1b50289442785b61f7a23e68b88f7d Учёт подписок и периодических операций текущего месяца в плановом остатке
- b045666034e88501541fe48c29322ee31a1d86e9 Перехват уведомлений банка
- 3df1cc35a6db07c6d291baee1dab330d7180315b Магазины, теги. UI-правки формы добавления операций
- 7f2f482b96a9e9cc824c32e5816fa7e933e82158 UI-правки подписок
- 83a16b000374b9b7dde76dbf55d21c10964e7b53 документация
- aa507a203fd68c2e1188d10e51048e07575d6289 Правки меню
- d1c88f829163221761d7cc8726d2e8eacedfddcc Подписки
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.5.0. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.5.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.5.0
Android
Вложения buhgalter-android-1.5.0.apk (universal) и buhgalter-android-1.5.0-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Релиз: v1.4.1 (03.08.2026)
[v1.4.1] — 2026-08-03
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/.
Добавлено
Кредитные карты
- Отдельное действие «Изменить лимит» (меню «⋯» и страница карты):
PUT /api/v1/accounts/{id}/credit-limit. В форме редактирования счёта лимит только для просмотра (ERR_ACCOUNT_CREDIT_LIMIT_IMMUTABLE). Увеличение — дельта кcredit_limitиinitial_balance; уменьшение — только при полном погашении (ui-credit-cards.md)
Категории
- Редактирование подкатегорий (имя и иконка) в Настройках → Категории —
SubcategoryFormDialog,PUT /subcategories/{id}(categories-and-icons.md) - Недостающие иконки категорий в каталоге (в т.ч. транспорт, продукты, услуги, досуг)
Ввод суммы (web + Android)
- В полях суммы можно вводить выражения со сложением/вычитанием (
7899+500,100+200-50); при blur / сохранении подставляется результат (transactions-display.md) - Android: своя цифровая клавиатура
MoneyKeypadс+/−(системная decimal часто без «+»); раскладка1 2 3 +/4 5 6 −/7 8 9 ⌫/. 0 ✓(android-client-ui.md)
Android
- Офлайн outbox: settle долга, CRUD периодических операций, мелочи по кредитам (pay / complete / update / schedule / delete payment / delete; без create); кеш карточки кредита
GET /credits/{id}(android-client-platform.md) - Кнопка биометрии на экране PIN — в нижнем левом углу клавиатуры (иконка отпечатка)
Изменено
Автопополнение
- Перевод автопополнения создаётся с датой/временем триггерной операции, а не «сейчас» (если дата неизвестна — текущий момент) (balance-maintenance.md)
Комиссия
- Любая комиссия (перевод и списание с кредитной карты) привязана к операции: отдельно удалить/отредактировать нельзя (
ERR_COMMISSION_LINKED); менять комиссию перевода — черезPUT /transfers/{group_id}, удалять — вместе с переводом (transactions-display.md)
Счета в выпадающих списках
- Порядок как на главной и
/accounts:cash→bank(основной первым), затем кредитные карты (sortAccountsForSelect)
Исправлено
Android
- DELETE через native HTTPS (
SslTrust): ответ 204 без тела больше не считается ошибкой (удаление переводов/операций) - После
adb install -rсессия больше не слетает:warmRefCacheне уходит без Bearer доinitAuthToken(раньше 401 вызывалclearAuthTokenи удалял токен из Secure Storage) - После онлайн delete/update балансы и списки обновляются сразу (
afterOnlineWrite→dataRefreshTickво всех offline wrappers)
Web
- После удаления/редактирования операции балансы (и вторая нога перевода) обновляются — silent
load/loadAll, не только перефильтровка списка
Техническое
- Docker CI: кросс-компиляция на
BUILDPLATFORM(без QEMU для npm/Go), кэш слоёв (type=gha+ghcr.io/...:buildcache),.dockerignore(install/docker.md) - OpenAPI
1.4.1:PUT /accounts/{id}/credit-limit, уточнения по комиссии и лимиту кредитной карты - Unit/e2e:
money(+/−), credit-limit, комиссия, AndroidMoneyKeypad/ session warm - Документация: ui-credit-cards.md, transactions-display.md, android-client-*.md, categories-and-icons.md, balance-maintenance.md, README.md
- docs/release-notes-v1.4.1.md
- Версия
1.4.1
Коммиты
Changelog
- d8185a70dac5f57d5ec6fb40e3ca35f13654f99f тесты и makefile (release локально)
- 62b97241699a5e2a204e92f7ef1adcc3bd53daf7 Раскладка клавиш собственной клавиатуры
- 5f236af08e786878e58e6f403f3a660adee871e3 Документация
- 99434ffccd6b510e95c1a0076ce8320f337aab1f правки тестов
- 62775e0a51fa9156463afbd13d343d8c68ec294f UI-фикс списка операций
- 3c4fb86dc3b7cc5c338d08a0d680a4cd843985b4 Android: своя клавиатура суммы (
MoneyKeypad) с+/−— системная decimal часто без «+» - 5b881e882bdf4fb78e63603fcb30f1753cda2693 БАГ. Web/Android: после удаления/редактирования операции не обновлялись балансы (Android — и список до sync) — web: silent
load/loadAll; Android:afterOnlineWrite→dataRefreshTickво всех offline wrappers - 89b5e48c73ba4f2c6d231372bed1d306c0da0720 Android: своя клавиатура суммы
- 813b32042b1cb9dd0113b5861397128c704a3c9c Исправлен баг с отвалом сессии после переустановки чеез adb
- 9e9b5aff55240a395a00717c6b20fcd2785fb049 Android: кнопка биометрии на экране PIN — в нижнем левом углу клавиатуры (иконка отпечатка)
- 8d03989a89a27d01efd189947aae2c89bdc5e2d2 Любая комиссия привязывается к операции, и удалить/отредактировать её нельзя
- 9625644c78be6ac9a749c7071719e1bbcfb1d150 Обработка 204 кода ответа
- 1e3fbbc203432c16f3ef0f041ee150f70ddbe601 Автопополнение в момент выставленого времени операции
- cdfab26bd660906430789ec8c6d6e1339aff94be В поля ввода суммы добавить возможность складыва/вычитать
- 5933fa2a8b0d3b0edfe0e16e840dfb5d9844d1b6 Увеличить кредитный лимит
- 8f61177dbefa1e920c69ca35bd3a480a26eaa8cf Редактирование подкатегорий
- 2a6611f2c726a388d0861be3ac5a8eb4da23925e Правки по оффлайн-режиму Android
- 784583cd5e451688e7f16412f505917ee8692f5a Недостающие иконки категорий
- 68e9cac6fb1fb1e0a0932a00649b6c9d1d74a188 Расширение оффлайн функционала для Android
- 9b6a5f27b1a267976d01a788a08f58b3661fd1bb Исправлен долгий CI (сборка docker)
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.4.1. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.4.1
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.4.1
Android
Вложения buhgalter-android-1.4.1.apk (universal) и buhgalter-android-1.4.1-{abi}.apk (arm64-v8a, armeabi-v7a, x86_64). Минимальная версия Android — 8.0 (API 26). Установка поверх предыдущей версии сохраняет данные приложения (URL сервера, токен в secure storage).
Коммит: dbbc445 (05.11.2026)
исправил отображение ошибок в интерфейсе
Коммит: 1d8e81e (04.11.2026)
Пополнение кредитной карты сверх лимита
Коммит: 30b5a60 (04.11.2026)
Исправлен баг с черновиками уведомлений
Коммит: d4ebf1a (01.11.2026)
документация
Коммит: 5755f1e (01.11.2026)
Улучшение UI (Web + Android)
Коммит: 555d8f9 (01.11.2026)
Баг парсера даты в бейджах. Раздел "кредиты"
Коммит: fd7b2ac (01.11.2026)
Исправил баги в сканере чеков
Коммит: ba63ecd (01.11.2026)
Исправления в парсере уведомлений
Коммит: e11394e (01.11.2026)
Добавлена поддержка уведомлений от нового приложения WB-банка
Коммит: 18af10c (31.10.2026)
документация