Бесплатное веб- и Android-приложение для расчёта кредитного графика, сверки с банковским графиком и планирования досрочных погашений. В приложении нет рекламы и аналитики. Расчёты выполняются локально, данные сохраняются на устройстве.
Веб-версия публикуется через GitHub Pages и устанавливается как PWA. Android-версия собирается через Capacitor и предназначена для распространения подписанным APK через GitHub Releases и RuStore.
- Android через RuStore (рекомендуется): установить CreditCalc из RuStore.
- Android без магазина: скачать подписанный APK из последнего GitHub Release. Рядом с APK опубликован файл
.sha256для проверки целостности; обновления нужно устанавливать вручную. - Веб-версия / PWA: открыть CreditCalc на GitHub Pages.
- считать аннуитетные и дифференцированные платежи;
- учитывать ежедневное или периодическое начисление процентов;
- для метода фактических дней настраивать базу года: Actual/360, Actual/365, Actual/366 или Actual/Actual; при периодическом методе база года явно не применяется;
- хранить несколько кредитов с отдельными параметрами, платежами, льготными периодами, темой и настройками интерфейса;
- быстро переключаться между кредитами, переименовывать, создавать и удалять кредиты;
- строить банковский график платежей с первой строкой выдачи кредита;
- выбирать, добавляется ли первый платёж только процентами к договорному сроку или входит в него;
- показывать колонки “по кредиту”, “по процентам”, “итого” и остаток задолженности;
- скрывать колонку “комиссия”, если комиссий в расчёте нет;
- считать итоги по кредиту, процентам, комиссиям и общей сумме за весь срок;
- добавлять разовые досрочные платежи в любую дату;
- указывать разовый досрочный платёж как сумму сверх платежа или как общую сумму списания с комиссией досрочного погашения в дату регулярного платежа;
- временно отключать разовый досрочный платёж отдельным переключателем без удаления записи;
- добавлять регулярные досрочные платежи: раз в неделю, каждый месяц, раз в 2 месяца, квартал, полгода, год, ежегодная премия, процент от регулярного платежа или общий ежемесячный платёж в дату списания;
- задавать дату окончания регулярного платежа и пропускать отдельные месяцы;
- временно отключать регулярное правило отдельным переключателем без удаления записи;
- выбирать стратегию операции: сократить срок, снизить платёж или закрыть кредит полностью;
- сравнивать сценарии: без досрочных, сокращение срока, снижение платежа и “по операциям”;
- подбирать минимальный план для закрытия на 6 месяцев, 1, 2, 3, 5 или 10 лет раньше, к выбранной дате, в заданном ежемесячном бюджете или с ограничением общей переплаты;
- сравнивать ежемесячный, общий, разовый и комбинированный варианты рядом с кнопкой расчёта, скрывать результаты, просматривать новый график и атомарно добавлять выбранный план в кредит;
- пересчитывать будущие платежи и проценты после досрочных погашений;
- раскрывать формулу строки графика: период начисления, число дней, база года, остаток для процентов, проценты до округления, округление и порядок операций;
- учитывать льготные периоды: полная отсрочка, только проценты, уменьшенный или индивидуальный платёж, начисление процентов и капитализацию;
- показывать остаток долга на текущий день: тело кредита, проценты и общую сумму;
- показывать ближайший платёж: дату, итог, тело кредита, проценты, комиссию при наличии и остаток после платежа;
- показывать прогресс погашения и понятное сокращение срока;
- быстро переходить в графике к дате, месяцу или году;
- фильтровать график по году, искать строку по сумме и сворачивать месяцы;
- переключать график на мобильных устройствах между карточками и компактной таблицей без горизонтальной прокрутки;
- настраивать тему, акцентный цвет, ночной режим и точность отображения сумм;
- экспортировать график в CSV или HTML-таблицу для Excel, сохранять кредит в JSON и загружать JSON обратно;
- предварительно просматривать JSON перед загрузкой и выбирать действие: создать новый кредит или заменить текущий;
- создавать ссылку на расчёт и восстанавливать кредит из такой ссылки;
- проверять обязательные параметры перед созданием JSON, ссылки или кода параметров;
- печатать воспроизводимый отчёт с ключевыми настройками расчёта, сохранять его в PDF средствами браузера или открывать системную печать Android;
- показывать версию приложения и страницу “Что изменилось”;
- устанавливаться как отдельное приложение, запускаться офлайн, показывать состояние сети и предлагать новую версию без принудительной перезагрузки; напоминание об установке можно отложить на неделю или отключить;
- хранить историю изменения процентной ставки, применять её со следующего платёжного периода или точно с даты изменения и показывать историю ставок в печати, импорте и ссылках.
- Архитектура проекта
- Расчётная модель
- API для внешних интеграций
- Публикация и релизы
- PWA, кеширование и обновления
- Android и подпись APK
- Карточка приложения в RuStore
- Политика конфиденциальности
- Пользовательское соглашение
- История изменений
- Правила участия
- Политика безопасности
В разделе “Импорт/экспорт” можно создать ссылку на полный расчёт кредита, выбранного в шапке приложения. В ссылку попадают:
- название кредита;
- параметры кредита;
- история изменения ставки;
- разовые и регулярные досрочные платежи;
- льготные периоды;
- выбранный сценарий;
- настройки интерфейса.
График платежей и сравнение сценариев в ссылке не сохраняются. Они пересчитываются локально после открытия.
При открытии ссылки приложение предложит:
- создать новый кредит из данных ссылки;
- заменить текущий кредит;
- отказаться от загрузки.
Важно: любой человек, получивший ссылку, сможет увидеть параметры расчёта. Если операций много и ссылка становится слишком большой, используйте JSON-экспорт. Старые ссылки и JSON-файлы без новых необязательных полей продолжают открываться: приложение подставляет документированные значения по умолчанию. Отсутствующая валюта получает RUB, legacy-код RUR мигрирует в RUB с предупреждением, а другие явно неизвестные валюты отклоняются; суммы не конвертируются.
Требования:
- Node.js 22;
- pnpm через Corepack.
corepack enable
pnpm install
pnpm devПосле запуска Vite покажет локальный адрес приложения в терминале. В production-режиме расчёт выполняется в Web Worker, чтобы большие графики не блокировали интерфейс; в тестовой среде, старых браузерах, при повреждённом ответе или тайм-ауте Worker используется синхронный fallback.
Для Android дополнительно требуются JDK 21, Android Studio и Android SDK 36:
pnpm android:sync
pnpm android:openГотовый debug APK создаётся командой pnpm android:apk:debug в android/app/build/outputs/apk/debug/app-debug.apk. Он подписан отладочным ключом и предназначен только для локальной проверки. Подробности выпуска подписанного APK приведены в Android-инструкции.
pnpm lint:workflows
pnpm lint
pnpm typecheck
pnpm test
pnpm test:coverage
pnpm build
pnpm test:pwa
pnpm test:e2e
pnpm audit --prodЧто проверяется:
- TypeScript-компиляция;
- статический анализ TypeScript и React Hooks через ESLint;
- тесты расчётного ядра, импорта, экспорта, ссылок и базовых UI-сценариев;
- пороги покрытия Vitest;
- production-сборка;
- состав PWA precache, изоляция scope/Cache Storage и реальный автономный запуск в Chromium;
- известные уязвимости production-зависимостей.
Версия приложения берётся из package.json, дата сборки и commit SHA добавляются при production-сборке, а список изменений читается из CHANGELOG.md.
Для двухнедельных и квартальных графиков срок в месяцах переводится в ближайшее целое количество платёжных периодов. Например, 1 месяц при двухнедельном графике даёт 2 платежа, а 12 месяцев — 26 платежей.
Если браузер не даёт сохранить данные в localStorage (приватный режим, переполненная квота или запрет хранилища), приложение показывает предупреждение, что последние изменения не сохранены. В этом случае можно сразу скачать JSON или повторить сохранение после освобождения места.
Установка PWA не создаёт резервную копию финансовых данных. Кнопка «Повысить надёжность» запрашивает у браузера persistent storage и может уменьшить риск автоматической очистки origin, но не защищает от ручной очистки профиля, повреждения устройства или удаления данных пользователем. Для восстановления используйте JSON-экспорт.
Предложение установить PWA появляется только при поддержке браузером. Его можно отложить на семь дней или отключить; доступная системная кнопка установки при этом остаётся в разделе «Параметры». В нативной Android-версии браузерные PWA-уведомления и запрос persistent storage не показываются.
На первом запуске приложение до ввода параметров предупреждает, что GitHub Pages использует общий origin ant-m13.github.io. Кнопка «Работать без сохранения» и переключатель в настройках удаляют persisted-кредит и оставляют дальнейшие изменения только в памяти текущей вкладки; перед её закрытием такой расчёт нужно экспортировать в JSON.
При восстановлении старых данных приложение нормализует формат, мигрирует legacy-режим amountMode: "total" в amountMode: "totalWithFee" и помещает повреждённые кредиты в карантин с отчётом в интерфейсе.
Отключённые разовые платежи и регулярные правила остаются в списках, выделяются приглушённым видом и не попадают в расчёт. Старые записи с нулевой суммой или нулевым процентом также считаются временно отключёнными для совместимости.
Основная публикация GitHub Pages выполняется внутри .github/workflows/auto-release.yml вместе с созданием релиза.
Он выполняет:
- использует уже проверенные исходники версии;
- собирает сайт с repository scope;
- проверяет состав PWA-сборки;
- запускает production E2E, включая автономный запуск;
- публикует папку
distчерез GitHub Pages после создания тега и GitHub Release.
Для первого запуска в GitHub откройте Settings → Pages и выберите источник GitHub Actions. После этого публикация будет выполняться при успешном выпуске версии. .github/workflows/deploy-pages.yml оставлен только для ручной повторной публикации уже существующего release-тега.
Адрес опубликованного сайта обычно выглядит так:
https://<owner>.github.io/<repository>/
Приложение не требует серверной части, базы данных или переменных окружения.
Для релизов, публикации и обслуживания используются:
.github/workflows/auto-release.yml— единственный автоматический release-процесс: проверяет проект, создаёт git-тегvX.Y.Zи GitHub Release, публикует Pages и запускает подписанную Android-сборку;.github/workflows/deploy-pages.yml— вручную повторно публикует GitHub Pages из уже существующего release-тега;.github/workflows/release-dist.yml— вручную пересобирает архив сайта по уже существующему release-тегу;.github/workflows/android-release.yml— автоматически использует результаты проверки основного release-процесса или при ручном запуске повторяет проверки и собирает подписанный APK для существующего release-тега;.github/dependabot.yml— еженедельно проверяет обновления npm-зависимостей и GitHub Actions.
Обычный выпуск версии:
pnpm lint:workflows
pnpm lint
pnpm typecheck
pnpm test
pnpm test:coverage
pnpm build
pnpm test:pwa
pnpm test:e2e
pnpm audit --prod
git add package.json CHANGELOG.md README.md docs src .github
git commit -m "chore(release): prepare 1.8.0"
git push origin release/1.8.0После merge release-ветки в main workflow сам создаст тег и GitHub Release, запустит публикацию GitHub Pages и добавит в тот же релиз подписанный Android APK с SHA-256. Ручной запуск release-dist.yml, deploy-pages.yml или android-release.yml остаётся доступен для существующего тега, например v1.8.0; для Android должны быть настроены секреты release-подписи.
Архив релиза содержит готовую папку dist и подходит для размещения на любом статическом хостинге.
Расчёт является справочной финансовой моделью. Фактический график банка может отличаться из-за условий договора, операционного дня, правил округления, внутренних банковских правил и особенностей проведения платежей.
Для сверки с банком используйте раскрываемую формулу строки графика и настройки начисления процентов.
Для защиты браузера от ошибочных или чрезмерно больших данных действуют технические лимиты: срок до 1200 месяцев, до 1000 изменений ставки, до 5000 досрочных операций в расчётном ядре, до 5000 правил досрочных платежей, до 100 льготных периодов и до 10000 строк графика.
- React
- TypeScript
- Vite
- Zustand
- Decimal.js
- Recharts
- Capacitor
- Vitest
Расчётное ядро находится в src/loanEngine, состояние — в src/store.ts, нормализация и миграции — в src/storeNormalization.ts, запуск синхронного и Worker-расчёта — в src/loanCalculationRunner.ts, основные разделы интерфейса — в src/components, прикладные сценарии вынесены в src/hooks, а src/App.tsx связывает маршрутизацию разделов и общую компоновку приложения.