Перед нами стояла задача реализовать модуль биллинга для сферы фудтех. К тому же необходимо было учитывать возрастающие объемы продаж.
Система биллинга предоставляет следующие возможности:
- управление клиентами (физическими и юридическими лицами);
- управление лицевыми счетами клиентов;
- регистрация финансовых операций: платежей и списаний;
- гибкая система привязки финансовых операций к услугам (нет жесткой зависимости от конкретного вида услуг/товаров);
- хранение текущего баланса лицевого счета и полной истории его изменений;
- управление привязками лицевого счета одного клиента к лицевому счету другого (поддержка субсчетов) с настройкой лимитов списания;
- управление кредитным лимитом и кредитным периодом;
- блокировка списаний c лицевого счета при превышении лимитов: кредитного лимита или лимита списания, а также при истечении срока кредитного лимита;
- формирование стандартной и неформализованной отчетности;
- управление брендами компании (собственными юридическими лицами), возможность привязывать списания к брендам.
При разработке биллингового модуля мы уделили большое внимание архитектуре, чтобы безболезненно справиться с растущей нагрузкой новых заказов клиента, а также гибко распределять платежные транзакции между множеством связанных юридических лиц и счетов. Логически архитектура имеет два уровня:
- На первом обеспечивается базовая функциональность, присущая любому биллингу - это контрагенты, счета, транзакции и отчетность.
- Второй уровень обеспечивает работу бизнес-процессов, свойственных именно фудтех сфере: продажа и доставка еды, предзаказ блюд, применение бонусов и скидок для заказа и т.п.
Чтобы справиться с нагрузкой мы использовали архитектурный подход CQRS для разделения операций чтения и изменения состояний биллинга.