Автоматизация импорта выписок Сбербанка (дебетовые и кредитные карты) в Actual Budget.
- Поддержка форматов: Прямой импорт CSV и PDF выписок (использует
@rvboris/sberparse). - Автоматизация категорий: Автоматическое создание групп и категорий в Actual Budget на основе данных из выписки.
- Дедупликация: Каждая транзакция получает уникальный
imported_id(на основе даты, суммы и описания), что предотвращает повторный импорт одних и тех же данных. - Два режима работы: Гибкий CLI для локального использования и REST API сервер для интеграций.
Это рекомендуемый способ запуска, так как он включает все необходимые зависимости.
- Создайте файл
.envна основе примера в разделе "Конфигурация". - Запустите сервис:
docker compose up -dЕсли вы предпочитаете обычный запуск:
docker build -t sbertoactual .
docker run -d \
-p 3000:3000 \
-v ./data:/app/data \
--env-file .env \
--name sbertoactual \
sbertoactual- Node.js: v24+ (согласно
.nvmrc) - pnpm: Рекомендуется (через Corepack)
- Установите Node.js пакеты:
pnpm install
| Переменная | Описание |
|---|---|
ACTUAL_SERVER_URL |
URL вашего сервера Actual Budget |
ACTUAL_SERVER_PASSWORD |
Пароль пользователя |
ACTUAL_SYNC_ID |
Sync ID вашего бюджета |
ACTUAL_BUDGET_PASSWORD |
Пароль шифрования бюджета (если установлен) |
ACTUAL_ACCOUNT_ID |
ID счета в Actual Budget, куда пойдут транзакции |
ACTUAL_GROUP_NAME |
Имя группы категорий. По умолчанию: "Импорт из Сбера" |
PORT |
Порт сервера. По умолчанию: 3000 |
API_KEY |
(Опционально) Секретный ключ для защиты сервера. Если установлен, запросы должны содержать заголовок X-API-Key |
Важно: версия @actual-app/api не должна отставать от версии вашего Actual server. Если в логах есть out-of-sync-migrations, это почти всегда означает, что локальный API-клиент слишком старый для текущей схемы бюджета на сервере.
Положите файл выписки в папку data/ и выполните команду с нужным режимом.
Доступные режимы --mode:
all(по умолчанию): Полный цикл импорта. Выполняет последовательноconvert,setupиupload. Самый удобный способ для регулярного импорта.convert: Только обработка входного файла (PDFилиCSV). Извлекает транзакции и сохраняет их вactual_import.csvдля последующей обработки.setup: Проверка и создание категорий. Сканирует обработанные транзакции и автоматически создает недостающие категории в Actual Budget, чтобы избежать ошибок при загрузке.upload: Только загрузка данных. Отправляет транзакции на сервер Actual Budget. Благодаря дедупликации поimported_id, вы можете запускать этот режим повторно без риска дублей.list: Служебный режим. Выводит список всех счетов из вашего Actual Budget с их ID (помогает найти нужныйACTUAL_ACCOUNT_IDдля конфига).
Пример запуска через pnpm:
# Импорт файла
env INPUT_FILE="my_statement.pdf" pnpm start -- --mode=allИли через установленный глобально пакет:
sber-actual --mode=listЗапустите сервер для автоматизации загрузки через HTTP:
pnpm run serverОтправьте файл выписки через curl. Если настроен API_KEY, добавьте заголовок:
# Для PDF
curl -X POST -H "X-API-Key: your-secret-key" -F "file=@statement.pdf" http://localhost:3000/upload
# Для CSV
curl -X POST -H "X-API-Key: your-secret-key" -F "file=@statement.csv" http://localhost:3000/upload- Для PDF используется
@rvboris/sberparse. - Поведение CSV-импорта не меняется.
- Ошибка
out-of-sync-migrationsне связана с PDF-парсером: это проблема совместимости@actual-app/apiи Actual server.
- Проверка типов:
pnpm run type-check - Запуск тестов:
pnpm test - Покрытие:
pnpm run coverage - Линтинг:
pnpm run lint - Руководство для контрибьюторов:
CONTRIBUTING.md
- npm-релизы управляются через
release-pleaseв.github/workflows/npm-publish.yml. - Каждый push в
masterобновляет или создаёт release PR. - После merge release PR workflow проверяет релизный коммит и публикует пакет в npm с provenance.
- Для работы схемы в настройках репозитория GitHub Actions должен быть включён
Allow GitHub Actions to create and approve pull requests.
Проект распространяется под лицензией MIT. Подробности в файле LICENSE.