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!