Pricing Configuration

Zone pricing enables geographic price differentiation by allowing per-zone overrides of product pricing. Every overridable field follows the override flag pattern: the zone value only applies when its corresponding boolean flag is set to true. When the flag is false, the system falls back to the product's default value. This design gives you granular control — override only what differs per zone, while inheriting defaults for everything else.

The Override Flag Pattern

The override flag pattern is the foundational design of zone pricing. For any overridable field, three values work together: the zone-specific value, the override boolean flag (default false), and the override mode.

Resolution Logic

When the system needs a price for a product in a specific zone, it follows a simple resolution. First, it looks up the zone-product record for the zone and product combination. If no record exists, all product defaults are used. If a record exists, each field is resolved independently: if the override flag is true, the zone value is used; if false, the product default is used.

Override Modes

Explicit mode is the default. The zone value is a flat replacement. If you set the zone base price to $175, the zone price is $175 regardless of what happens to the base product price. This gives zones full autonomy when local pricing must be independent of global changes.

Relative mode sets the zone value as a delta from the base. If you set a relative amount of +$25 and the base price changes from $150 to $160, the zone price automatically becomes $185. Zones stay in sync when base prices change, which is valuable for seasonal adjustments or company-wide price increases.

Clamping

Base product minimum and maximum values are hard ceilings that zones cannot exceed. If a zone override (whether explicit or relative) would result in a value above the product's maximum price, the resolved value is clamped to the maximum. Similarly, values below the minimum are clamped upward. This prevents zones from setting extreme prices that violate business constraints.

What Can Be Overridden

Zone product overrides cover several categories of product pricing data.

Core pricing includes base price and base time estimate. These are the most commonly overridden fields — different zones often have different labor costs and travel times.

Display content includes the product name, internal description, and customer-facing description. Zones can customize how products appear in the booking flow for local relevance.

Dimension pricing overrides cubic yard pricing for products that use volume-based pricing, such as junk removal by load size.

Price ranges override minimum and maximum price bounds. Min and max resolve independently — you can override the minimum without changing the maximum.

True values override the normalized value used in pricing formulas for cross-product comparison.

Disassembly fees override disassembly costs and time estimates for products requiring disassembly, like furniture removal. Fee and time resolve independently.

Bundle pricing overrides bundle prices, discounts, time estimates, and display content. Unlike other overrides, bundles link directly to the zone rather than through the zone-product table.

Tag visibility controls which product tags are visible in each zone and their display order. Tags can be hidden in zones where they are not relevant — for example, suppressing a "Premium" tag in zones without premium service coverage.

Audit Logging

Every modification to a zone pricing override creates an audit record in the override change log. This table is append-only — records are never updated or deleted. The log captures which field changed, the old value, the new value, who made the change, when it occurred, an optional reason, and the change source (manual UI edit, bulk operation, API call, or import).

Toggling an override flag is itself a logged change, separate from changing the value. This means you can trace exactly when an override was enabled, when the value was set, and whether these were the same or different events.

Bulk Operations

When you apply pricing changes across multiple zones at once — for example, "increase all zone prices by 10%" — each individual field change still gets its own audit log entry, all sharing the same bulk operation ID. This allows viewing all changes from a single bulk action, rolling back an entire bulk operation by reference, and auditing who authorized the bulk pricing change.

Connection to Industries

Zone pricing is tightly coupled to zone-industry configuration. A product's industry must be linked to the zone for the zone pricing to apply in the booking flow. If a zone-industry link is set to inactive, zone product overrides for that industry's products are ignored during booking but the records remain intact. Removing a zone-industry link does not delete associated zone-product records — they become dormant and reactivate if the industry is re-linked.

Two-Level Resolution

Zone pricing uses a simple two-level resolution with no inheritance chain between zones. Parent zones do not pass their overrides to child zones. Each zone's overrides are fully independent. This keeps the pricing model predictable and easy to reason about.