Этот репозиторий содержит код для приложения, которое отслеживает расходы и подсказывает нужную категорию в зависимости от тех данных которые вы добавили
- Простой и интерфейс на стандартных контроллерах.
- Реализованы несколько алгоритмов подсказок категорий
- Добавлены тесты для контроля корректности работы функций.
- Логика и UI разделены
- Добавлена локализация для упрощения перевода на другие языки
- Добавлена документация к коду
Данное приложение было разработано с использованием следующих технологий и решений:
- Язык программирования: Swift
- UI Framework: SwiftUI
- Test Framework XSTest
- Клонируйте этот репозиторий:
git clone https://github.com/Sunrizzin/MoneySpider.git
- Откройте проект в Xcode (проверялось на версии 14.3.1)
- Запустите preview или симулятор для просмотра приложения
- Базовая сортировка по id. Позволяет выставить начальные id которые будут сортироваться от меньшего к большему и дадут сортировку "по умолчанию"
- Сортировка по частоте использования. Приложение проверяет как часто используется категория и сортируем список категорий по убыванию частоты. Если частота категорий одинаковая то для них используется сортиировка из п1
- Сортировка по вхождению суммы в диапазон сумм для категории. При ввобде новой суммы расхода приложение проверяет уже добавленные расходы и собирает диапазоны сумм для каждой из категорий и проверят вхождение вводимой суммы в диапазоны категорий. В случае если совпадение есть то попавшие категории сортируются по частоте и/или id и показываются пользователю. Если сопадений нет то происходит сортировка из п2
- Если введенная сумма не входит ни в один диапазон, то подставлять ближайшую подходящаяю категорию. например: ввесли число 100 и они в одной из уже добавленных расходов нет категории в которую попадает это число но одна из категорий имеет диапазон 101...200 и можно рекомендовать её
- Добавить подсказку по регулярности расхода. Например: если мы вводим число 100 то можем посмотреть по каким дням недели (либо будни/выходные либо времена года и т.д.) было добавление этой же суммы для одной и тоже категории. Но это решение сильно усложнит логику приложения и реализацию, так как потребует проверку сильно большего количества параметров.
- Идеальным решением будет обучить ML модель на большом количестве данных и принимать решения о подсказке категорий с её помощью. Но это уже совершенно другая история