How Customer-Specific Pricing and Price Matrices Work
Source: product.rb:54-108, price_matrices_controller.rb, price_matrix_items_controller.rb
- Customer pricing follows a strict priority: (1) If labor product and customer has an hourly_rate, use that rate. (2) If price matrices are enabled and customer uses price type "5" (matrix), look up the matrix for the product's group. (3) If not using matrix, check customer's price_type for price2/price3/price4 fields. (4) Apply customer's discount_percent or markup_percent on top of the resolved price.
- Price matrix type "D" (Discount) applies a percentage discount off retail price; type "M" (Markup) applies a percentage markup on cost. If the percentage is 0, it falls back to retail price.
- Price matrices require Gold or Platinum subscription -- lower tiers cannot access this feature
- Default matrix type is "M" (Markup) if not specified when creating a new matrix
- New matrix items default to 0% percentage; update can target all items or only zero-percentage items
- Percentages are rounded to 2 decimal places on save
Support scenarios
- "Why is this customer seeing a different price?" → Check the customer's price type, hourly rate, discount/markup percent, and whether they are assigned a price matrix; the first matching tier wins
- "Why can't I use price matrices?" → Price matrices are only available on Gold and Platinum subscriptions
- "All my matrix percentages are zero" → When you add all product groups to a matrix, they default to 0%; you need to set each percentage individually
- "What's the difference between Discount and Markup matrix?" → Discount (D) reduces from retail price; Markup (M) adds to cost price