ADR-0041: Reporting И Export Architecture
Статус
Принято.
Контекст
Администраторам, партнёрам и регуляторам необходим экспорт данных: финансовые отчёты, KYC queues, partner commissions, compliance reports. Синхронная генерация файлов в HTTP request опасна для больших объёмов и нарушает SLA API. Отсутствие audit и rate limit создаёт compliance риски.
Решение
Async Export Pipeline
Экспорт всегда асинхронный:
POST /reports/exportsсоздаётReportExportJob+ audit + idempotency в одной транзакции.- Background worker выполняет query к ClickHouse/PostgreSQL/Elasticsearch с ограниченным date range и row limit.
- Privacy suppression применяется после получения данных.
- Файл (xlsx/csv/json) сохраняется в Object Storage (private bucket).
ReportExportJobобновляется доCompletedсObjectStorageKey.GET /reports/exports/{jobId}возвращает short-lived signed download URL.
Форматы
.xlsxчерезClosedXML— для финансовых и аналитических отчётов с форматированием..csvчерезCsvHelper— для больших dataframes и machine integration..jsonчерезSystem.Text.Json— для regulatory exports и API-style integration.
Роли И Разрешения
- Admin: финансовая сводка, user transactions (+ MFA + reason), KYC queue, withdrawal queue, AML reports.
- Partner: собственные commissions, referrals (без raw PII), promo stats, payouts.
- Cross-tenant доступ: только global admin с
admin.cross-tenant.access+ audit reason.
Privacy Rules
- Partner не видит raw PII пользователей.
UserEmail,UserPhone,UserFullNameтолько для admin сexport-piipermission + MFA.- Small bucket suppression: группы < 5 пользователей скрываются в агрегатах.
- Все exports пишут audit с filters hash, actor, reason, legal basis.
Limits
- Admin: max 1 000 000 строк, 365 дней, 10 exports/час.
- Partner: max 100 000 строк, 90 дней, 5 exports/час.
- Signed URL TTL: 2 часа (admin), 1 час (partner).
- File retention: 7 дней (admin), 3 дня (partner).
Последствия
- API SLA не зависит от времени генерации файла.
- Каждый export аудирован с actors, filters hash, reason, legal basis.
- Rate limit и row limit предотвращают data harvesting.
- Privacy suppression защищает PII независимо от permission.
- Regulatory evidence ссылается на export manifest через ExportRegistryRecord.
Ссылки
- Export And Data Access Registry ADR
- Reporting And Export Developer Guide
- Analytics Service Reports API
- PII Classification Matrix
- Audit Trail Standard
Обратные ссылки
Автоссылки: где используется этот документ.
- API (11): GET /api/v1/agency/rewards-exports/{jobId} — Статус выгрузки и ссылка на скачивание, GET /api/v1/agency/wallet/statement-exports/{jobId} — Статус выписки и ссылка на скачивание, GET /api/v1/my/wallet/statement-exports/{jobId} — Статус выписки и ссылка на скачивание, GET /api/v1/platform/wallet/statement-exports/{jobId} — Статус выписки и ссылка на скачивание, GET /api/v1/referral-rewards-exports/{jobId} — Статус выгрузки и ссылка на скачивание, POST /api/v1/agency/rewards-exports — Постановка Excel-выгрузки вознаграждений агентства, POST /api/v1/agency/wallet/statement-exports — Постановка выписки по счёту агентства/агента (XLSX), POST /api/v1/my/wallet/statement-exports — Постановка выписки по моему счёту (XLSX), POST /api/v1/platform/wallet/statement-exports — Постановка выписки по любому счёту (XLSX), POST /api/v1/referral-rewards-exports — Постановка Excel-выгрузки реферальных вознаграждений, Wallet API — реестр операций и общие контрактные модели
- Use Cases (1): UC-RWD-012. Владелец агентства выгружает отчёты по вознаграждениям в Excel
- Отчёты (5): Отчет/Export: Вознаграждения агентства по сотрудникам и сделкам (agency-rewards-by-employee-per-deal), Отчет/Export: Выписка по счёту кошелька (wallet-statement), Отчет/Export: Реферальные вознаграждения по партнёрам (referral-rewards-by-partner), Отчет/Export: Сводка вознаграждений агентства за период (agency-rewards-period-summary), Отчет/Export: Сводка реферальных вознаграждений за период (referral-rewards-period-summary)