Skip to main content
This page is the definitive reference for which price FikaTrade will charge a customer for a product. The same logic applies everywhere a customer sees or is charged a price — browsing the catalogue, the cart, and checkout — so there’s no risk of a customer seeing one price and being charged another.

The sequence

✅ Re-verified directly against application source on 2026-08-14 by reading GroupPriceDB.effective_price_for() and its callers (backend/common/orm/catalogue/pricing.py, backend/common/catalogue/pricing_groups/get_effective_price/operations.py, backend/common/orders/checkout/service.py, backend/common/catalogue/products/sub_services/browse.py) in the fikatrade-app repository — this diagram matches the current implementation exactly, including the “$0.00 is honoured as a real price” and “blank inherits base price” branches. See docs-planning/screenshot-implementation-status.md (“The pricing diagram”) for the full trace and source-file references.

Worked examples

This is also the product’s availability rule

Notice that “unavailable” and “no price” are the same outcome in this logic — see Product availability and missing prices for that framing in full.

Once an order is placed, the price is locked in

This resolution logic only applies while a customer is browsing, has items in their cart, or is checking out. The moment an order is placed, each line’s price is fixed permanently — later changes to a product’s base price or a pricing group never affect an order that’s already been placed, and invoices are generated from that same locked-in price, not a freshly resolved one. See Update and verify pricing for what this means when you change a price.