Spense.app v0.2
Привет! Я закончил работу над очередной версией Spense с кучей улучшений и по традиции делюсь самым интересным.
Страница со счетами и кошельками
В интерфейсе приложения теперь можно управлять своими кошельками и смотреть текущий баланс:
По части добавления и редактирования кошельков всё довольно тривиально: можно редактировать название кошелька, комментарий к нему, валюту и базовый баланс. Но во время разработки я понял, что у меня довольно много счетов, которые я когда-то использовал и которые сейчас закрыты и меня больше не интересуют. Так что я решил добавить кнопку "Close Wallet", которая перемещает кошелек в скрытый блок, чтобы он не маячил перед глазами.
Баланс кошелька
Еще стоит упомянуть о функции, которая была уже давно и которую я в этот раз немного улучшил - это расчет баланса. Забавно, что практически все современные приложения, которые я тестировал, считают его неправильно.
Например:
- я создаю кошелек и пишу, что сейчас в нем лежит 100$;
- записываю в расходы, что вчера я потратил в магазине 20$, потому что я это все еще помню и хочу уже что-нибудь записать;
- приложение показывает, что сейчас в кошельке 80$.
Не знаю, о чем думают разработчики, но это мне точно не подходит. То, что я называю "базовым балансом" (Base balance) - это константа, привязанная к дате, и от нее я могу динамически считать текущий баланс на произвольный момент времени, суммируя транзакции до или после даты базового баланса.
На примере ситуации выше: если после создания кошелька и внесения информации о базовом балансе я больше ничего не тратил и не получал, баланс будет все еще 100$. Но если я захочу узнать, какой баланс был позавчера, приложение прибавит те потраченные 20$ и скажет, что позавчера было 120$. Хоть и на самом деле в Spense еще нет интерфейса, где можно было бы увидеть позавчерашний баланс, под капотом для этого уже все готово.
Доходы
Наконец-то можно записать себе зарплату! Тут самым сложным было придумать приемлемое интерфейсное решение, и я остановился на переключателе рядом с полем ввода суммы.
По умолчанию переключатель находится в режиме ➖, то есть записи расходов. Если на него нажать, он превратится в ➕, и при этом обновится список популярных тегов, соответствующих входящим транзакциям.
Такая транзакция помечается в списке зеленым плюсиком ("+ 123.00€"). Логично было бы тогда добавить остальным транзакциям знак минуса, но я решил, что это избыточно, потому что в моей ситуации (и, полагаю, у большинства людей) 99% транзакций - это траты, и мне не нужно дополнительное визуальное пояснение. А вот подсветить авансик бывает приятно.
Переводы между собственными счетами и кошельками
Пришла зарплата - вывели часть в наличку, а часть отложили на отдельный накопительный счет. Кончились деньги в кошельке - взяли чуток из закромов. Решили куда-то съездить - купили местную валюту.
За этим всем тоже хочется следить, и до сих пор такой функции не было, а теперь есть. За нее отвечает та же самая кнопка, у которой добавился режим перевода между кошельками:
Самое главное в нем то, что можно указывать разные суммы на входе и выходе. Очень полезно в тех случаях, когда валюты разные и/или по дороге теряется какая-нибудь комиссия. А главный минус текущей реализации - обе суммы нужно указывать всегда, даже если они одинаковые. Но это я потом починю :-)
Еще в этом интерфейсе нет тегов, потому что обычно перевод между своими счетами - это по сути и есть отдельная категория транзакций. Если нужно как-то пояснить этот перевод, можно добавить комментарий.
Валюта списания транзакции
Бывает ситуация, когда счет в одной валюте, а транзакция осуществляется в другой. Например, подписка на ChatGPT стоит 24.20$ (20$ + налоги), но так как счет у меня в евро, по дороге происходит какая-то конвертация, по факту списывается 22.41€, и я хотел бы сохранить информацию про обе эти суммы.
Так что я добавил невзрачную подпись "Original currency is different", за которой скрыто поле ввода исходной суммы платежа:
Эти данные пока никак не влияют на расчеты, просто отображаются в истории транзакций.
Редактирование и удаление транзакций
По части редактирования транзакций появилось два небольших, но приятных улучшения:
- теперь можно редактировать старые транзакции со страницы "Transactions";
- в форме редактирования появилась большая кнопка "Delete", перед которой у пользователя дополнительно уточняют, действительно ли он хочет это удалить.
История изменения транзакции
В прошлый раз я сделал так, чтобы ни кошельки, ни транзакции не удалялись по-настоящему, чтобы случайно не потерять важные данные. В этот раз я пошел дальше и решил добавить трекинг изменений в транзакции. Допустим, ситуация: я заказал такси, сразу после этого у меня списалась сумма за поездку, и я ее себе записал; поездка в итоге заняла дольше обычного, сумма оказалась больше, и я ее изменил в приложении. Иногда бывает, что я просто ошибаюсь с суммой и исправляю ее через пару дней. И я решил, что хорошо бы по крайней мере хранить всю историю изменений и иметь к ней доступ. В главном интерфейсе этой функции пока нет, но в админке можно просмотреть историю любой транзакции.
В конечном счете это, конечно, переедет и в само приложение, чтобы пользователи могли восстанавливать случайно удалённые транзакции или откатывать их к состоянию до последнего редактирования.
Планы на следующую версию
На данный момент Spense меня полностью устраивает как ежедневный инструмент для учета расходов, и я готов приступить к обработке накопленных данных и построению прогнозов. В следующей версии я планирую добавить отдельную страницу с отчётами, по крайней мере, с одним, который будет показывать прогноз на ближайшие 3-6 месяцев на основе данных за последний месяц, полгода или год. Скорее всего, этот отчет не будет адаптирован для мобилки, но пока это и не требуется.
Есть еще идея с отчетом по тразакциям за выбранный период, но там загвоздка с группировкой по тегам (категориям расходов). Например, теги "кафе", "обед" и "магазин" можно объединить в одну категорию "Еда", чтобы узнать, сколько денег было "съедено" за прошлый месяц. С другой стороны, "кафе" и "обед" можно объединить в категорию "Еда, приготовленная не дома", а "магазин" - в "Еда, приготовленная дома", и сравнить, насколько одно дороже другого. В общем, здесь предстоит очень много экспериментов.
Ну и хотелось бы уже научиться складывать балансы всех счетов, чтобы отображать общую сумму. Для этого нужно будет подключиться к источникам актуальных данных по курсу валют и научиться приводить все суммы к одной валюте. Так что там тоже немало работы.
Не уверен, что все эти планы удастся реализовать в версии 0.3, но что-то одно точно будет.
Stay tuned!
Не прокатило
Звонок программисту (П) от рекрутера (HR). HR: Ало, привет, я Маша из агентства "Олег и таланты", у меня есть классная вакансия...
Необязательные рекомендации
Все рекомендации насчет вашей личной жизни, здоровья, финансов, работы, бизнеса, направленные на широкую аудиторию, по умолчанию...
Airplane! (1980)
Посмотрел вчера фильм Airplane! (1980), это одна из тех старых комедий, где люди каламбурят на серьезных щах, создавая абсурдн...
Абстракции и наследование в Си - стреляем по ногам красиво
TL;DR Иногда нет-нет да и хочется что-нибудь абстрагировать и обобщить в коде на Си. К примеру, хочешь ты принтануть содержимо...
Большая комната
Если много лет живешь в двушке, где люди спят в обеих комнатах, у тебя нет "спальни" и "гостиной". Есть "маленькая комната", "бо...
Чаевые
В США и некоторых других странах чаевые играют большую роль, официанты и прочие работники сферы обслуживания ожидают их по умолч...