URD: Campaign
| Module | EXT-03 | Version | v0.1 |
|---|---|---|---|
| Status | In-progress | Date | 2026-05-30 |
1. Purpose
Let merchants drive sales with targeted promotions — discounts, bundles and BuyGet offers — that apply automatically or via coupon, scoped by customer, product, and date.
2. Scope
| Included | Excluded |
|---|---|
| Promotion setup, rules, lifecycle | Loyalty points (Loyalty module) |
| BuyGet, bundles, coupons | Message delivery (Marketing module) |
| Discount application at checkout | Tax calculation (Pricing tax engine) |
3. Definitions
| Term | Definition |
|---|---|
| Promotion | A campaign with eligibility rules and a discount method |
| Method | How the discount works (percentage/fixed, target, allocation) |
| Rule | A condition controlling who/what qualifies |
| BuyGet | Conditional "buy X, get Y" offer |
4. Conceptual Model
Conceptual only — full schema lives in the developer promotion docs.
5. Functional Requirements
Priority = MoSCoW. Setup/lifecycle are built; application is planned.
5.1 Promotion Setup & Lifecycle (PRM)
| ID | P | Requirement | Status |
|---|---|---|---|
| URD-PRM-001 | M | Create a promotion with method and rules atomically | In-progress |
| URD-PRM-002 | M | Move a promotion through DRAFT → ACTIVATED → DEACTIVATED/EXPIRED/ARCHIVED | In-progress |
| URD-PRM-003 | S | Define eligibility, source, and target rules | In-progress |
| URD-PRM-004 | S | Enforce usage limits per promotion | In-progress |
5.2 Discount Application (APP)
| ID | P | Requirement | Status |
|---|---|---|---|
| URD-APP-001 | M | Auto-apply eligible promotions during checkout | Planned |
| URD-APP-002 | S | Apply a manual coupon code at checkout | Planned |
| URD-APP-003 | C | Report promotion usage and ROI | Planned |
6. Acceptance Criteria
AC-PRM-01: Atomic promotion creation
| Given | When | Then |
|---|---|---|
| A promotion, method, and rules payload | The aggregate create is submitted | All entities are created together, or none on error |
7. Constraints & Non-Goals
Constraints
| ID | Constraint |
|---|---|
| C-01 | A promotion must have a valid method before it can activate |
| C-02 | Deleting a promotion cascades to its method and rules |
Non-Goals
- Loyalty point earning/redemption (owned by Loyalty)
- Sending promotional messages (owned by Marketing)
8. Version History
| Date | Author | Description | Ver |
|---|---|---|---|
| 2026-05-30 | PM | Initial stub; setup/lifecycle live, application planned | v0.1 |