Перейти к основному содержимому

ADR-0041: Reporting И Export Architecture

Статус

Принято.

Контекст

Администраторам, партнёрам и регуляторам необходим экспорт данных: финансовые отчёты, KYC queues, partner commissions, compliance reports. Синхронная генерация файлов в HTTP request опасна для больших объёмов и нарушает SLA API. Отсутствие audit и rate limit создаёт compliance риски.

Решение

Async Export Pipeline

Экспорт всегда асинхронный:

  1. POST /reports/exports создаёт ReportExportJob + audit + idempotency в одной транзакции.
  2. Background worker выполняет query к ClickHouse/PostgreSQL/Elasticsearch с ограниченным date range и row limit.
  3. Privacy suppression применяется после получения данных.
  4. Файл (xlsx/csv/json) сохраняется в Object Storage (private bucket).
  5. ReportExportJob обновляется до Completed с ObjectStorageKey.
  6. 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-pii permission + 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.

Ссылки

Обратные ссылки

Автоссылки: где используется этот документ.