Pricing & Multi-Currency¶
Vectis uses an eight-level pricing hierarchy that resolves the best price for every buyer automatically. Combined with multi-currency support, this covers wholesale tiered pricing, account-negotiated rates, and international storefronts.
Price Resolution Hierarchy¶
When a product price is requested, the system checks these levels top to bottom with strict priority, falling through to the next level whenever a level has no matching entry:
| Priority | Level | Description |
|---|---|---|
| 1 (highest) | Managed cart prices | Admin override for a specific line — useful for clearance or one-off deals |
| 2 | Location-owned price list | The location's own price list for site-specific agreements (supersedes the old per-row location prices) |
| 3 | Customer-owned price list | The account/customer's own price list holding all per-variant overrides (supersedes the old per-row account prices) |
| 4 | Customer category overrides | Category-scoped price-list overrides for a specific customer |
| 5 | Assigned price list | A shared price list assigned to the account/customer |
| 6 | Group category overrides | Category-scoped price-list overrides for a customer group |
| 7 | Group pricing | Price list + volume tiers assigned to a customer group (e.g., "Gold Tier Distributors") |
| 8 (lowest) | Default variant price | The base price for the variant |
Subject specificity outranks product-scope specificity: any customer-level source beats any group-level source, and within one subject scope, per-variant beats per-category beats whole-catalog.
Tip
You only need to set prices at the levels you use. Most products only have a default price. Override at higher levels only when needed.
Price Lists¶
Price lists are the foundation of default pricing. Each list has:
- Currency — the currency for all entries in the list.
- Scheduling — optional
valid_fromandvalid_todates for seasonal or promotional pricing. - Priority — when multiple lists match, the highest-priority list wins.
A single variant can appear in multiple price lists (e.g., one in USD, one in MXN, one for a holiday sale).
Volume Pricing¶
Volume tiers let you offer lower per-unit prices at higher quantities:
| Minimum Quantity | Price |
|---|---|
| 1 | $10.00 |
| 10 | $9.00 |
| 50 | $7.50 |
| 100 | $6.00 |
Volume tiers are defined per price list entry. The system automatically selects the best tier based on the line item quantity.
Multi-Currency¶
Channel Configuration¶
Each channel defines:
- Base currency — the canonical currency for accounting and reporting.
- Supported currencies — the set of currencies buyers can transact in.
Exchange Rates¶
Exchange rates are admin-managed in the Settings → Currencies section. Each rate pair maps a source currency to a target currency with a conversion factor.
Warning
Vectis does not fetch live exchange rates automatically. An admin must update rates manually or via API integration. Stale rates can cause pricing discrepancies.
Price Resolution with Currency¶
When a buyer requests a price in a target currency:
- Direct match — if a price list entry exists in the target currency, use it.
- Fallback + conversion — if no direct entry exists, use the base-currency price and convert using the stored exchange rate.
Direct entries always take priority, giving you full control over international pricing.
Price List Conversion Wizard¶
The admin panel provides a bulk conversion wizard to generate target-currency price list entries from your base-currency list. This creates real entries (not dynamic conversions), so you can review and adjust individual prices after generation.
To use it: Pricing → Price Lists → select a list → Convert to Currency.
Account & Customer Currencies¶
- B2B accounts can have a preferred currency set at the account or location level.
- B2C customers have a
preferred_currencyfield on their profile.
When a buyer with a preferred currency logs in, the storefront defaults to showing prices in that currency.
Note
The preferred currency must be in the channel's supported_currencies list. If it is not, the storefront falls back to the channel's base currency.
Admin Panel¶
From Pricing in the admin you can:
- Create and manage price lists with scheduling and currency.
- Set volume tiers on individual price list entries.
- Manage per-customer pricing levels — owned price lists, category overrides, and assigned lists — plus a per-product price matrix view.
- Import/export price list entries via CSV, and import/export pricing config bundles.
- Manage exchange rates between currency pairs.
- Run the conversion wizard to bulk-generate multi-currency entries.
- Review and restore invalidated overrides from the stale-overrides view.
Automated Override Invalidation¶
Account / location / managed-price overrides used to drift silently when the base catalog changed (SKU rename, variant deletion, currency drop). Override entries now invalidate automatically:
- Variant deleted or hidden — overrides on that variant are flagged
stale=trueand excluded from price resolution. The admin pricing page shows them in a "Stale overrides" view with a one-click cleanup. - Currency removed from channel — overrides in the removed currency are flagged and hidden.
- Base price list scheduling change — overrides past their referenced
valid_toare flagged.
Invalidation runs synchronously on the triggering admin action and emits vectis.audit.override_invalidated.v1 so analytics can attribute drift to the right operator. The override is never deleted automatically — staff must approve the cleanup.
Money Precision¶
The channel setting money.decimal_places (default 2) is validated at save-time and busts the pricing cache on change. Changing it from 2 to 4 is non-destructive — existing money values are preserved, but display formatting and rounding rules adopt the new precision immediately. Use the higher precision sparingly; reporting downstream may expect the lower precision.