Spense.app v0.2
Привет! Я закончил работу над очередной версией Spense с кучей улучшений и по традиции делюсь самым интересным.
Страница со счетами и кошельками
В интерфейсе приложения теперь можно управлять своими кошельками и смотреть текущий баланс:
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/wallets_list.png)
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/wallets_edit.png)
По части добавления и редактирования кошельков всё довольно тривиально: можно редактировать название кошелька, комментарий к нему, валюту и базовый баланс. Но во время разработки я понял, что у меня довольно много счетов, которые я когда-то использовал и которые сейчас закрыты и меня больше не интересуют. Так что я решил добавить кнопку "Close Wallet", которая перемещает кошелек в скрытый блок, чтобы он не маячил перед глазами.
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/close_wallet_2.gif)
Баланс кошелька
Еще стоит упомянуть о функции, которая была уже давно и которую я в этот раз немного улучшил - это расчет баланса. Забавно, что практически все современные приложения, которые я тестировал, считают его неправильно.
Например:
- я создаю кошелек и пишу, что сейчас в нем лежит 100$;
- записываю в расходы, что вчера я потратил в магазине 20$, потому что я это все еще помню и хочу уже что-нибудь записать;
- приложение показывает, что сейчас в кошельке 80$.
Не знаю, о чем думают разработчики, но это мне точно не подходит. То, что я называю "базовым балансом" (Base balance) - это константа, привязанная к дате, и от нее я могу динамически считать текущий баланс на произвольный момент времени, суммируя транзакции до или после даты базового баланса.
На примере ситуации выше: если после создания кошелька и внесения информации о базовом балансе я больше ничего не тратил и не получал, баланс будет все еще 100$. Но если я захочу узнать, какой баланс был позавчера, приложение прибавит те потраченные 20$ и скажет, что позавчера было 120$. Хоть и на самом деле в Spense еще нет интерфейса, где можно было бы увидеть позавчерашний баланс, под капотом для этого уже все готово.
Доходы
Наконец-то можно записать себе зарплату! Тут самым сложным было придумать приемлемое интерфейсное решение, и я остановился на переключателе рядом с полем ввода суммы.
По умолчанию переключатель находится в режиме ➖, то есть записи расходов. Если на него нажать, он превратится в ➕, и при этом обновится список популярных тегов, соответствующих входящим транзакциям.
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/income.gif)
Такая транзакция помечается в списке зеленым плюсиком ("+ 123.00€"). Логично было бы тогда добавить остальным транзакциям знак минуса, но я решил, что это избыточно, потому что в моей ситуации (и, полагаю, у большинства людей) 99% транзакций - это траты, и мне не нужно дополнительное визуальное пояснение. А вот подсветить авансик бывает приятно.
Переводы между собственными счетами и кошельками
Пришла зарплата - вывели часть в наличку, а часть отложили на отдельный накопительный счет. Кончились деньги в кошельке - взяли чуток из закромов. Решили куда-то съездить - купили местную валюту.
За этим всем тоже хочется следить, и до сих пор такой функции не было, а теперь есть. За нее отвечает та же самая кнопка, у которой добавился режим перевода между кошельками:
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/between.gif)
Самое главное в нем то, что можно указывать разные суммы на входе и выходе. Очень полезно в тех случаях, когда валюты разные и/или по дороге теряется какая-нибудь комиссия. А главный минус текущей реализации - обе суммы нужно указывать всегда, даже если они одинаковые. Но это я потом починю :-)
Еще в этом интерфейсе нет тегов, потому что обычно перевод между своими счетами - это по сути и есть отдельная категория транзакций. Если нужно как-то пояснить этот перевод, можно добавить комментарий.
Валюта списания транзакции
Бывает ситуация, когда счет в одной валюте, а транзакция осуществляется в другой. Например, подписка на ChatGPT стоит 24.20$ (20$ + налоги), но так как счет у меня в евро, по дороге происходит какая-то конвертация, по факту списывается 22.41€, и я хотел бы сохранить информацию про обе эти суммы.
Так что я добавил невзрачную подпись "Original currency is different", за которой скрыто поле ввода исходной суммы платежа:
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/different_currency.gif)
Эти данные пока никак не влияют на расчеты, просто отображаются в истории транзакций.
Редактирование и удаление транзакций
По части редактирования транзакций появилось два небольших, но приятных улучшения:
- теперь можно редактировать старые транзакции со страницы "Transactions";
- в форме редактирования появилась большая кнопка "Delete", перед которой у пользователя дополнительно уточняют, действительно ли он хочет это удалить.
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/delete_tx.gif)
История изменения транзакции
В прошлый раз я сделал так, чтобы ни кошельки, ни транзакции не удалялись по-настоящему, чтобы случайно не потерять важные данные. В этот раз я пошел дальше и решил добавить трекинг изменений в транзакции. Допустим, ситуация: я заказал такси, сразу после этого у меня списалась сумма за поездку, и я ее себе записал; поездка в итоге заняла дольше обычного, сумма оказалась больше, и я ее изменил в приложении. Иногда бывает, что я просто ошибаюсь с суммой и исправляю ее через пару дней. И я решил, что хорошо бы по крайней мере хранить всю историю изменений и иметь к ней доступ. В главном интерфейсе этой функции пока нет, но в админке можно просмотреть историю любой транзакции.
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/audit_1.png)
![](https://d39r3gub3niydb.cloudfront.net/doroshev.com/media/img/2024-03-01-spense-004/audit_2.png)
В конечном счете это, конечно, переедет и в само приложение, чтобы пользователи могли восстанавливать случайно удалённые транзакции или откатывать их к состоянию до последнего редактирования.
Планы на следующую версию
На данный момент Spense меня полностью устраивает как ежедневный инструмент для учета расходов, и я готов приступить к обработке накопленных данных и построению прогнозов. В следующей версии я планирую добавить отдельную страницу с отчётами, по крайней мере, с одним, который будет показывать прогноз на ближайшие 3-6 месяцев на основе данных за последний месяц, полгода или год. Скорее всего, этот отчет не будет адаптирован для мобилки, но пока это и не требуется.
Есть еще идея с отчетом по тразакциям за выбранный период, но там загвоздка с группировкой по тегам (категориям расходов). Например, теги "кафе", "обед" и "магазин" можно объединить в одну категорию "Еда", чтобы узнать, сколько денег было "съедено" за прошлый месяц. С другой стороны, "кафе" и "обед" можно объединить в категорию "Еда, приготовленная не дома", а "магазин" - в "Еда, приготовленная дома", и сравнить, насколько одно дороже другого. В общем, здесь предстоит очень много экспериментов.
Ну и хотелось бы уже научиться складывать балансы всех счетов, чтобы отображать общую сумму. Для этого нужно будет подключиться к источникам актуальных данных по курсу валют и научиться приводить все суммы к одной валюте. Так что там тоже немало работы.
Не уверен, что все эти планы удастся реализовать в версии 0.3, но что-то одно точно будет.
Stay tuned!
Ж К П
В любом текстовом процессоре (Microsoft Word, Google Docs, LibreOffice) кнопки "полужирный", "курсив" и "подчеркнутый" находятся...
Хорошо там, где нас нет
Иногда хочется поменять что-то в своей жизни: переехать в другой город, страну, сменить работу, род занятий, увлечение, религию....
Colon
В английском языке слово colon используется и для обозначения знака "двоеточие" : , и для обозначения толстого кишечника. Ка...
Медовый месяц в Беларуси: Дорога и первый день в Минске
До Жуковского аэропорта от Москвы можно доехать на Рутакси за косарь и час-полтора. Жуковский аэропорт - маленький, тихий, спок...
Быстрый коммит и пуш
Хочу поделиться shell-функцией gacp (Git Add, Commit and Push), которую я придумал несколько месяцев назад и с тех пор использ...
₸
Казахстанский тенге дешевле рубля. 1 рубль по официальному курсу равен 8.19 тенге. По курсу обменников на улице - 7.15-7.20 тен...