Functional contract

Catalog and pricing

Shipped. The Organization owns one master catalog. Each Location inherits master values unless it has an explicit override. Do not copy the whole catalog per Location.

Shipped at /app/catalog

Master catalog

Organization-scoped list of catalog items. Staff open /app/catalog. Organization administrators create and edit master items (catalog.manage). Location administrators override unlocked price and enabled at granted Locations (catalog.override). Categories are managed in Admin.

AttributeRole
Name, SKUShared identity across the group (code column; labeled SKU in the UI)
CategoryPlatform category (Procedure, Service, Kit, Product). Bundle categories may include other items with quantities. The form shows each component's unit price, line total (price × quantity), and a reference items total; the bundle price is entered separately.
Default priceInherited by Locations with no override
EnabledWhether the item is offered by default (disabled_at)
lock_local_overridesWhen true, Locations cannot change overridable attributes
stock_controlnone, quantity, or batch. Organization-owned. New items inherit the category default. See Inventory

Overridable attributes today: price and enabled. stock_control is not overridable.

Location exceptions

A Location stores only differences, not a second catalog.

CasePrice shown at Location A
No exception rowMaster price (inherited)
Exception row with a priceThat price (overridden)
Master item lockedMaster price; Location cannot save an exception

Resolving the price: locked → master; else exception if present; else master. Disabled-at-Location is an override.

Who may change what

ActorMaster catalogLockLocation override
Organization adminCreate, editSet or clearMay set or clear any Location’s exception
Location administratorNo (except exclusive items when the policy is on)NoOnly unlocked attributes, only at granted Locations
StaffNoNoNo

Workspace scope decides what the catalog shows, including for Organization administrators:

Location-exclusive items

Default: Location administrators cannot create new items. Organization policy allow_location_exclusive_items (off by default; Settings → Hierarchy):

Acceptance

Out of scope: invoice legal header (Billing), membership plans.