3.2 KiB
3.2 KiB
Pricing Catalog Architecture
Documentation only. No pricing engine, tax engine, or coupon service.
ADR: ADR-023
Contract version:pricing-catalog.v1
1. Purpose
The Pricing Catalog is the sole commercial source for sellable price definitions.
Business Bundles reference pricing; they never embed it.
2. Supported commercial models (v1 documented)
| Model | pricing_model |
Notes |
|---|---|---|
| Monthly | monthly |
Recurring calendar month |
| Yearly | yearly |
Recurring year |
| Usage | usage |
Metered; unit defined on item |
| Trial | trial |
Time-boxed; converts via policy |
| Promotional | promotional |
Time/window limited offer |
| Enterprise Quote | enterprise_quote |
No public amount; sales-assisted |
3. Future-reserved (document fields only — no implementation)
| Concern | Reserved fields / notes |
|---|---|
| Regional pricing | region_code, currency_override |
| Taxes | tax_class_code, tax_inclusive |
| Coupons | coupon_eligible, external coupon service ref |
| Discounts | discount_class_code |
| Reseller pricing | channel_code=reseller, partner_price_book_ref |
Implementations MUST accept unknown additive fields.
4. Contracts
4.1 PricingCatalogItem
| Field | Type | Meaning |
|---|---|---|
pricing_item_code |
string | Stable unique code |
display_name |
string | |
pricing_model |
enum | See §2 |
currency |
string | ISO-like code (e.g. IRR, IRT) — logical |
amount_minor |
int? | Null for enterprise_quote |
usage_unit |
string? | e.g. sms, seat, order |
trial_days |
int? | For trial |
promotional_window |
object? | { starts_at, ends_at } |
region_code |
string? | Future |
tax_class_code |
string? | Future |
channel_code |
string? | direct | reseller | … (future) |
status |
enum | draft | active | retired |
ext |
object | Additive |
4.2 PricingCatalogVersion
Optional catalog publication version for admin change control (logical).
| Field | Meaning |
|---|---|
catalog_version |
e.g. 2026.07 |
item_codes[] |
Included items |
published_at |
4.3 PriceBook (future)
Logical grouping for reseller / enterprise — reserved, not implemented.
5. Invariants
- Bundle definitions store only
pricing_item_codereferences. - Subscription items bind to
pricing_item_codeat request time (snapshot policy is a future implementation concern). - Payment may charge using Payment contracts; list price truth remains Pricing Catalog.
- No frontend hardcoding of amounts as source of truth.
6. Example codes (illustrative — not live billing)
| Code | Model | Intent |
|---|---|---|
price.restaurant.starter.monthly |
monthly | Starter restaurant |
price.restaurant.starter.yearly |
yearly | |
price.clinic.starter.monthly |
monthly | |
price.platform.trial.14d |
trial | 14-day trial |
price.enterprise.custom |
enterprise_quote | Custom |
Canonical human matrix: business-bundles.md.