Математика против долгов: как я написал на Python локальную CRM, которая ловит кассовые разрывы и душит мои кредиты
В какой-то момент я обнаружил себя в классической ловушке современного человека: две кредитные карты с плавающими минимальными платежами, пара беспроцентных «Сплитов» и один тяжелый потребительский кредит. Суммарно — полный хаос, в котором ты каждый день проверяешь три разных банковских приложения, пытаясь судорожно вспомнить: «Так, сегодня 3-е число, откуда спишется платеж? Хватит ли дебетовой карты или нужно срочно перекидывать деньги?»
Стандартные банковские трекеры не показывают общую картину. Таблицы в Excel требуют ежедневной рутины и ломаются от любого неловкого клика. Будучи разработчиком, я решил подойти к своему кошельку как к технической системе и написал локальную веб-CRM на Python и Streamlit.
Инструмент настолько круто помог мне взять под контроль кэш и увидеть свет в конце туннеля, что я полностью вычистил из него персональные данные, переписал на динамическую архитектуру и делюсь логикой с вами.
В чем была главная боль? (И как софт её решил)
1. Проблема: Скрытые потери на процентах
Когда ты платишь банку условные 10 000 ₽, тебе кажется, что долг уменьшился на 10 000 ₽. Черта с два. Половину банк забирает себе за воздух (проценты), особенно в начале срока.
- Решение: В трекер зашит автоматический калькулятор долей. При проведении регулярного платежа CRM сама лезет в тело кредита, рассчитывает ставку и пишет на экране: «Из твоих 5 000 ₽ в тело долга ушло только 3 200 ₽, а 1 800 ₽ сожрал банк». Это вызывает здоровую спортивную printable-злость и мотивирует делать досрочные «удары».
2. Проблема: Внезапные кассовые разрывы
Самое опасное — забыть про дату обязательного списания и остаться перед ней без денег на дебетовой карте, попав на штрафы и ухудшение кредитной истории.
- Решение: Риск-календарь критических дат. Система знает точные числа месяца всех платежей. Она сопоставляет сегодняшний день с балансом карты. Если до конца месяца платежей предстоит на 40 000 ₽, а у тебя на карте 15 000 ₽, система взрывается красным предупреждением и рассчитывает точную сумму дефицита.
3. Проблема: Деньги лежат мертвым грузом
Если до списания кредита еще 10 дней, а у тебя на руках есть кэш, держать его на карте под 0% — преступление. Но и закидывать в досрочку нельзя — оголишь тылы перед другим банком, платеж по которому наступит раньше.
- Решение: Парковка в фонды денежного рынка. В CRM интегрирован инвест-блок. Софт считает твою среднюю цену закупки паев ликвидности. Если система видит избыток кэша, она выдает зеленый алерт: «На карте избыток. Временно припаркуй деньги в фонд, это принесет 15-16% годовых». А если наступает дефицит перед платежным днем, на главном экране активируется «Красная кнопка» — система сама рассчитывает, сколько именно паев нужно продать по текущему курсу, чтобы ровно в ноль закрыть разрыв, и проводит виртуальную сделку в один клик.
4. Стратегия: Разгон кэша («Снежный ком»)
Вместо банального уменьшения срока я перестроил модель на каскадное уменьшение обязательных платежей. Как только ты бьешь досрочкой по одному банку, его ежемесячный платеж падает, а освободившиеся деньги софт автоматически пересчитывает и добавляет в твой «Ударный капитал» на следующий месяц. Лавина свободного кэша разгоняется сама.
Как устроена техническая часть?
Всё работает на связке Streamlit + Pandas. Никаких облаков, внешних API и сторонних серверов — полная приватность, что критично для финансового софта.
- Данные о кассе, кредитах и сделках ложатся в плоские файлы expenses_db.csv и database_debts.csv прямо на вашем жестком диске.
- При любом изменении баланса, фиксации расхода или оплате кредита софт автоматически создает резервную копию базы данных с отметкой времени в папку backups. Сломать или потерять данные физически невозможно.
- Добавлен умный парсер буфера обмена: копируешь текст банковского пуша или СМС, вставляешь в текстовое поле, скрипт через регулярные выражения re выдергивает сумму, определяет тип операции (доход/расход) и сам подбирает нужную категорию.
Как забрать софт себе?
Я полностью переписал архитектуру приложения на динамическую. В ней нет жесткого кода под мои банки. Пользователь может прямо из интерфейса на лету добавлять новые кредиты, менять их имена, остаток долга, процентные ставки и даты списания, а также удалять закрытые позиции — вся CRM перестраивается под новую конфигурацию автоматически.
Я упаковал скрипт, чистые базы данных и пошаговую текстовую инструкцию по запуску для обычных пользователей (нужен только Python и одна команда в терминале) в один готовый ZIP-архив.
Забрать этот цифровой продукт, разгрузить голову от кассовых расчетов и поддержать проект можно просто написать мне в ТГ @whitoff за символические 200 рублей. Это дешевле одного похода в фастфуд, но сэкономит вам десятки тысяч рублей на банковских процентах за счет правильной математической стратегии.
Буду рад ответить на любые инженерные вопросы по коду и архитектуре Streamlit в комментариях!