Skip to content

08.06 Transaction Timeline Event Dictionary

Статус: черновик для обсуждения

1. Назначение документа

Этот документ описывает dictionary событий transaction timeline для MVP.

Timeline нужен, чтобы platform/support users и merchant users могли понять, что произошло с transaction, без чтения логов и без помощи разработчиков.

2. Core principles

Timeline events должны быть immutable.

Нельзя редактировать или удалять timeline event через обычное user action.

Если нужно исправить или дополнить информацию, система должна создать новый event.

Timeline видят:

  • platform users с permission;
  • merchant users с permission.

Но детализация разная:

  • merchant user видит merchant-safe timeline;
  • platform user с permission видит full internal timeline.

3. Visibility levels

Каждый event должен иметь visibility level.

MVP visibility levels:

text
merchant_safe
platform_only
sensitive_platform_only

merchant_safe

Event можно показать merchant user-у, если у него есть доступ к transaction и permission смотреть timeline.

Event не должен раскрывать:

  • real provider name, если provider access не выдан;
  • hidden SUB MID / SUB MID AGGREGATOR details;
  • platform-created hidden routing details;
  • raw provider payloads;
  • provider credentials/secrets;
  • internal provider errors.

platform_only

Event виден platform users с permission.

Event может содержать:

  • full routing trace;
  • selected MASTER MID / SUB MID;
  • fallback reason;
  • provider callback processing details;
  • webhook delivery details.

sensitive_platform_only

Event виден только platform users с sensitive permissions.

Event может ссылаться на:

  • raw provider request/response/callback;
  • raw merchant webhook payload/response;
  • provider error mapping internals;
  • hidden routing internals;
  • suspicious callback details.

Secret values никогда не должны попадать в timeline даже на sensitive_platform_only.

4. Event structure

Каждый timeline event должен содержать:

  • eventId;
  • transactionId;
  • eventType;
  • timestamp;
  • source;
  • actorType;
  • actorId, если применимо;
  • visibilityLevel;
  • title/message;
  • reason, если применимо;
  • metadata;
  • previousStatus, если применимо;
  • newStatus, если применимо;
  • configVersionRefs, если применимо;
  • payloadReference, если применимо;
  • requestId/correlationId, если доступно.

5. Payload reference

Timeline event не должен хранить heavy raw payload прямо внутри event metadata.

Если event относится к raw request/response/callback payload, timeline должен хранить reference на отдельно сохраненный payload.

Пример:

text
payloadReference: provider_callback_payload_id

Это нужно, чтобы:

  • timeline оставался легким;
  • raw payload можно было скрывать по permissions;
  • raw payload можно было хранить с отдельными retention/security rules;
  • merchant-safe timeline не раскрывал sensitive details.

Merchant users не получают raw payload reference, если это раскрывает provider/internal data.

6. requestId / correlationId

requestId / correlationId - это технический identifier, который помогает связать:

  • API request;
  • transaction timeline events;
  • provider request;
  • provider callback;
  • merchant webhook delivery;
  • application logs;
  • metrics/traces.

Product user может не взаимодействовать с этим полем напрямую.

Но поле полезно для support/development investigation.

Development team должна определить exact naming:

text
requestId
correlationId
traceId

Product requirement: timeline event должен иметь поле для такого identifier, если он доступен.

7. Core event types

MVP event types:

Event typeVisibility defaultНазначение
transaction_createdmerchant_safeTransaction создана.
validation_failedplatform_onlyValidation failed. Обычно transaction может не быть создана.
routing_startedmerchant_safeRouting execution started.
payment_method_selectedmerchant_safePayment Method / MID определен.
rule_matchedplatform_onlyRouting rule matched. Merchant-safe version может быть simplified.
master_mid_group_selectedmerchant_safeMASTER MID GROUP selected.
master_mid_selectedmerchant_safeMASTER MID selected.
master_mid_rule_matchedplatform_onlyRule inside MASTER MID routing matched.
sub_mid_group_selectedplatform_onlySUB MID GROUP selected. Merchant sees only if allowed.
sub_mid_selectedplatform_onlySUB MID selected. Merchant sees only if allowed.
sub_mid_aggregator_selectedplatform_onlySUB MID AGGREGATOR selected. Merchant does not see internals.
velocity_checkedplatform_onlyVelocity limit checked.
velocity_rejectedmerchant_safeTransaction rejected/skipped due to velocity. Merchant-safe reason only.
dynamic_attributes_requiredmerchant_safeAdditional customer fields required.
dynamic_attributes_submittedmerchant_safeCustomer submitted missing fields.
provider_request_sentplatform_onlyRequest sent to provider.
provider_response_receivedplatform_onlyProvider response received.
provider_payment_url_receivedmerchant_safePayment URL/instruction received.
provider_error_receivedplatform_onlyProvider returned error.
provider_callback_receivedplatform_onlyProvider callback received.
provider_callback_validatedplatform_onlyCallback validation passed.
provider_callback_rejectedplatform_onlyCallback validation failed/rejected.
provider_callback_ignoredplatform_onlyCallback ignored.
duplicate_callback_ignoredplatform_onlyDuplicate callback ignored.
unknown_provider_status_ignoredplatform_onlyUnknown provider status ignored.
status_changedmerchant_safeTransaction status changed.
webhook_createdplatform_onlyMerchant webhook delivery created.
webhook_sentmerchant_safeMerchant webhook sent.
webhook_deliveredmerchant_safeMerchant webhook delivered.
webhook_failedmerchant_safeMerchant webhook failed.
webhook_retry_scheduledmerchant_safeMerchant webhook retry scheduled.
webhook_retry_exhaustedmerchant_safeMerchant webhook retries exhausted.
manual_webhook_resendmerchant_safeUser triggered webhook resend.
manual_correction_appliedmerchant_safeManual transaction correction applied.
expiration_appliedmerchant_safeTransaction/payment session expired.
legacy_marker_addedmerchant_safeTransaction marked as migrated legacy.
error_mappedplatform_onlyProvider/internal error mapped to unified error.
raw_payload_savedsensitive_platform_onlyRaw payload saved and referenced.

8. Fallback visibility

Merchant user может видеть fallback attempts только в merchant-safe форме.

Merchant-safe fallback event может показывать:

  • что система попробовала другой route;
  • что предыдущий route был недоступен;
  • generic reason, например route unavailable.

Merchant-safe fallback event не должен раскрывать:

  • real provider name;
  • hidden SUB MID;
  • SUB MID AGGREGATOR;
  • internal provider error;
  • platform-created hidden routing internals.

Platform user с permission должен видеть:

  • full fallback chain;
  • skipped candidates;
  • skip/fallback reason;
  • provider errors/timeouts;
  • velocity exceeded details;
  • inactive/deleted configuration reason;
  • routing/config versions.

9. Manual correction events

Manual correction обязательно создает timeline event:

text
manual_correction_applied

Event должен хранить:

  • actor;
  • previous status;
  • new status;
  • timestamp;
  • reason/comment;
  • whether merchant webhook resend was requested.

Если correction раскрывает platform/provider-sensitive reason, merchant-safe representation должна скрыть sensitive part.

10. Config version references

Timeline event должен хранить references на фактически использованные configuration versions, если применимо:

  • Payment Method / MID routing version;
  • MASTER MID GROUP version;
  • MASTER MID version;
  • MASTER MID routing version;
  • SUB MID GROUP version;
  • SUB MID / SUB MID AGGREGATOR config version;
  • credentials/config version;
  • velocity rule/version;
  • FX/fee configuration version.

Это нужно, чтобы transaction можно было расследовать после изменения или удаления конфигураций.

11. Acceptance Criteria

Timeline Event Dictionary считается согласованным для MVP, если:

  • Timeline events immutable.
  • Timeline доступен platform users и merchant users с permission.
  • Timeline поддерживает visibility levels: merchant_safe, platform_only, sensitive_platform_only.
  • Merchant user видит merchant-safe events.
  • Platform user с permission видит full internal events.
  • Merchant user может видеть fallback attempts только без provider/SUB MID internal details.
  • Platform user видит полную routing/fallback chain и reasons.
  • Timeline event содержит eventId, transactionId, eventType, timestamp, source, actor, visibilityLevel, message, reason, metadata, previous/new status.
  • Timeline event может содержать configVersionRefs.
  • Timeline event может содержать payloadReference вместо raw payload.
  • Timeline event может содержать requestId/correlationId.
  • Raw payload не хранится прямо внутри timeline event.
  • Manual correction создает timeline event с actor and reason/comment.
  • Secret values никогда не попадают в timeline.

12. Open Questions

Product open questions отсутствуют.

Technical/design follow-up:

  1. Определить exact event type enum.
  2. Определить exact metadata schema per event type.
  3. Определить final naming: requestId, correlationId или traceId.
  4. Определить storage для raw payload и payloadReference.