Тема
aggregation-service
Сервис отчётности и биллинга. Он не участвует в обработке платежа — транзакция проходит весь свой путь через ядро без его участия — а приходит в игру уже после, когда нужно превратить накопленные транзакции в цифры: выгрузку для 1С, статистику в личном кабинете мерчанта или экран в внутреннем BackOffice.
Стек: Node.js, TypeScript, NestJS.
Чего не делает
Не создаёт и не меняет транзакции. Это зона ядра. Сервис только читает то, что там уже случилось, — отсюда и название: он агрегирует, а не производит данные.
Не пишет зеркала в Postgres billing и ClickHouse. Их наполняет отдельный конвейер на Kafka, описанный в Где живут данные. aggregation-service — потребитель этих зеркал, а не их источник.
Входы
- HTTP от 1С:
GET /billing/excel— ежедневная выгрузка периодов, подробно разобрана на странице Биллинг. - HTTP от внутреннего BackOffice: поиск и фильтрация транзакций, обороты, комиссии, справочники, настройки гейтов.
- HTTP от личного кабинета мерчанта: статистика, выгрузки, история операций.
- Плановые задачи (schedule, Temporal) — периодические пересчёты и отложенные выгрузки.
Выходы
- superpos-core по HTTP — за данными, которых нет в зеркалах.
- api-gateway-pci — за операциями, требующими PCI-контура.
Хранилища
Сам сервис почти ничего не хранит — он читает три чужие базы:
- MongoDB ядра — напрямую, для данных, которые ещё не успели попасть в зеркала или не реплицируются вовсе.
- Postgres (
aggregation-postgres) — то самое биллинговое зеркало, на котором строится выгрузка для 1С. - ClickHouse — аналитические витрины для отчётов и BackOffice.
Redis используется под собственные задачи и кэш, отдельной базы для этого нет.
Где используется
- Биллинг — источник ежедневной выгрузки для 1С.
- Внутренний BackOffice — основной поставщик данных для операционной команды.
- Личный кабинет мерчанта — статистика и выгрузки для самого мерчанта.
Где искать
- Репозиторий: smartpayments-dev/aggregation-service.
- Инфраструктура и логи: карточка сервиса в описании прод-контура.
- Публичная документация: сервис внутренний, наружу к мерчанту напрямую не смотрит — публичной документации нет.