Приложение читает почтовое сообщение из указанного почтового яищка. Реагирует на письма, содержащие вложения. Далее оно пытается распознать во вложении товарный чек и распознать цену в нем. Если цена менее 100 рублей, она регистрируется автоматически. Если стоимость товаров и услуг превышает 100 рублей, чек отправляется на бюджетный контроль, где держатель бюджета должен одобрить покупку. В последнем случае стоимость чека также регистрируется в последнем микросервисе.
Приложение состоит из 7 приложений:
- inbox - чтение почтового ящика
- check-manager - оркестратор распознавания
- tesseract - распознавание средствами Tesseract
- yandex-vision - распознаванияе средствами Yandex Vision OSR
- check-ruler - применение правил для извлечения стоимости товаров и услуг, а так же точки автоматического и ручного котроля (больше или меньше 100 рублей)
- budget-control - система бюджетного контроля для ручного подверждения операции
- check-register - регистрация стоимости товаров и услуг
В качестве исходного дата-объекта выступает письмо с вложением (товарным чеком), которое читает первый микросервис inbox. Далее вложение проходит через цепочку микросервисов, подвергается распознаванию и в конце-концов регистрируется в микросервисе check-register.
Диаграмма компонентов по совместительству является и диаграммой развертывания:
Архитектурные решения можно обнаружить в папке docs/adr проекта.
Некоторые папки не используются непосредственно для запуска приложения:
- docs — файлы и материалы для документирования проекта
- microservice-template — генератор микросвервисов, при помощи которого создавались все микросервисы, за исключением inbox
- tesseract-docker — тестовый проект, для демонстрации распознавание изображений при помощи tesseract (а также инструкция по его установке и использованию)
- yandex-vision-osr - тестовый проект, для демонстрации распознавания изображений при помощи Yandex Vision OSR и (а также инструкция по его использованию)
- В семи основных проектах необходимо скопировать sample.env в .env и корректно заполнить переменные окружения
- В корне репозитория следует запустить команду
docker compose up- Для каждого проекта, использующего базу данных необходимо выполнить команду для ее создания и развертывания
docker compose run НАЗВАНИЕ_СЕРВИСА bundle exec rake db:drop db:create db:migrateНАЗВАНИЕ_СЕРВИСА это одно из пяти значений: inbox, check-manager, check-ruler, check-register, budget-control. Впрочем их можно всегда посмотреть в docker-compose.yaml.
Кроме того, каждый микросервис можно запустить отдельно от остальных, воспользовавашись readme.md файлом в папке микросервиса.
