86 lines
3.4 KiB
Markdown
86 lines
3.4 KiB
Markdown
# Activation Flow Contracts
|
|
|
|
> **Event contracts only.** No orchestration engine in this wave.
|
|
> ADR: [ADR-023](../architecture/adr/ADR-023.md) · [ADR-006](../architecture/adr/ADR-006.md)
|
|
> Contract version: `activation.v1`
|
|
> Event prefix (logical): `commercial.activation.*` / step-specific domains below
|
|
|
|
---
|
|
|
|
## 1. Pipeline (normative sequence)
|
|
|
|
```
|
|
Business Created
|
|
↓
|
|
Bundle Selected
|
|
↓
|
|
Subscription Requested
|
|
↓
|
|
License Requested
|
|
↓
|
|
Accounting Contract Requested
|
|
↓
|
|
Payment Activation Requested
|
|
↓
|
|
Workspace Initialized
|
|
↓
|
|
Tenant Configuration Applied
|
|
↓
|
|
Dashboard Generated
|
|
```
|
|
|
|
Each arrow is an **event boundary**. Consumers are idempotent. Failure at a step emits a failed/pending counterpart; no silent cross-DB writes.
|
|
|
|
---
|
|
|
|
## 2. Step contracts / events
|
|
|
|
| Step | Event name (logical) | Payload highlights | Producer (future) | Typical consumers |
|
|
| --- | --- | --- | --- | --- |
|
|
| 1 Business Created | `tenant.business.created` | `tenant_id`, `business_type_code`, `profile_ref` | Core / onboarding | Recommendation UI, CRM (opt) |
|
|
| 2 Bundle Selected | `commercial.bundle.selected` | `tenant_id`, `bundle_code`, `bundle_version_code`, `actor_id` | Core commercial | Subscription |
|
|
| 3 Subscription Requested | `commercial.subscription.requested` | `tenant_id`, `plan_code`, `pricing_item_code`, `subscription_id` | Core | License, Payment billing shell |
|
|
| 4 License Requested | `commercial.license.requested` | `tenant_id`, `subscription_id`, `license_id`, `bundle_code` | Core | Entitlement projector |
|
|
| 5 Accounting Contract Requested | `accounting.contract.requested` | `tenant_id`, `subscription_id`, `opaque_commercial_ref` | Core | Accounting |
|
|
| 6 Payment Activation Requested | `payment.activation.requested` | `tenant_id`, `license_id`, `desired_mode?`, `core_entitlement_ref` | Core | Payment workspace enable path |
|
|
| 7 Workspace Initialized | `tenant.workspace.initialized` | `tenant_id`, `workspace_template_ref` | Core / onboarding | Experience, vertical shells |
|
|
| 8 Tenant Configuration Applied | `tenant.configuration.applied` | `tenant_id`, `config_hash`, `feature_keys[]` | Core | All entitled services |
|
|
| 9 Dashboard Generated | `experience.dashboard.generated` | `tenant_id`, `dashboard_shell_ref` | Experience | Frontend shell |
|
|
|
|
### Shared envelope (all events)
|
|
|
|
| Field | Meaning |
|
|
| --- | --- |
|
|
| `event_id` | UUID |
|
|
| `event_version` | `activation.v1` |
|
|
| `occurred_at` | ISO timestamp |
|
|
| `correlation_id` | Pipeline correlation |
|
|
| `causation_id` | Prior event id |
|
|
| `tenant_id` | |
|
|
| `idempotency_key` | Required for retries |
|
|
|
|
---
|
|
|
|
## 3. Status log (admin)
|
|
|
|
Logical `ActivationLogEntry`:
|
|
|
|
| Field | Meaning |
|
|
| --- | --- |
|
|
| `correlation_id` | Pipeline id |
|
|
| `step` | Enum of steps above |
|
|
| `status` | `pending` \| `succeeded` \| `failed` \| `skipped` |
|
|
| `detail` | Human/debug |
|
|
| `at` | Timestamp |
|
|
|
|
Admin UI: [commercial-admin-portal-spec.md](commercial-admin-portal-spec.md) → Activation Logs.
|
|
|
|
---
|
|
|
|
## 4. Invariants
|
|
|
|
1. Bundle selection without subscription request MUST NOT grant entitlements.
|
|
2. Payment activation request MUST NOT invent merchant KYC or PSP credentials — Payment owns that flow when executed.
|
|
3. Dashboard generation is presentation-only; empty dashboards allowed if verticals not entitled.
|
|
4. No step in this document authorizes Payment 14.6+, booking engines, QR, or marketplace.
|