Open core: don’t reinvent the wheel — build your fenestration software on ours.

Skip to main content

Options are the questions a product can ask during configuration (“Glass Type”,
“Grid Type”, “Hardware”); choices are the answers a user can pick (“Clear”, “Low-E”,
“Tinted”). For each choice you define its identity, its pricing, its cost, and
how the resulting part is processed in production. Options are attached to series and
referenced by rules; the choices drive pricing and the bill of materials.

What, where, who, when, why

What The create/edit screen for configuration options and their
choices: each choice carries identity, pricing (flat or matrix), cost, and a production
Process routing (None / External / Internal).
Where Administration → OJ Setup → Product Setup →
Options.
Who Product setup staff, jointly with pricing (choices carry
price/cost) and production (choices carry process routings).
When Early in product setup — after series exist, before the
rules that reference the options. New choices get added whenever a supplier offers a new
glass package, grid pattern, or hardware finish.
Why it matters Every quote line’s answers come from these choices:
price added (or marked up) per answer, cost for margin checks, and — when the choice
produces a part — the Process/Line/Station routing that lands it on the right
production line. A choice with no price is a silent give-away.

Layout

Left: Search box, a type filter (“All Types” or one option type), and the options
list. Right: the option detail — ID (read-only) and Description, the
Option Details panel (Type, a grouping used for filtering and by rules; and
Forced — when ticked, an answer is required wherever the option applies), the master
action row (New / Edit / Save / Cancel / Delete), and the Option Choices panel
with the choices of the selected option and the choice form.

The choice form

Panel Fields
Header Option ID and Answer ID (read-only),
Stock Code (inventory link).
Identity Abbreviation (max 5 characters as you type),
Description.
Format & Pricing Format (unit of measure for pricing),
Matrix Pricing checkbox + Matrix combo, Price, Price
Group
, Min Price.
Cost Cost, Paint Labour Cost, Cost UOM, Thickness.
Processing Process: None (no routing),
External (subcontracted — enables Supplier), or Internal
(produced in-house — enables Prod Line, and Station filtered by the
chosen line).

Worked example — a “Glass Type” option with two choices

Every double-glazed product should answer one question — which glass — and
the answer must both price and route. One option, two choices:

Where Value Why
Option header Description “Glass Type”, Type = Glass,
Forced ticked
The Type groups it in the filter and gives rules
something stable to match on; Forced means the item cannot be saved without an
answer.
Choice “Clear” Abbreviation CLR, Format = Per Each,
Price 0.00, Process = None
Clear is the baseline: no upcharge and no
extra routing — the sealed unit the rules already pick is clear.
Choice “Low-E Argon” Abbreviation LEA, Format = Per
Each, Price 48.00, Cost 31.50, Thickness 0.75, Process = Internal, Prod Line =
Glass, Station = SU Assembly
The upcharge funds the upgrade; the cost
keeps margin reports honest; and because the Low-E unit is assembled in-house, the
Internal routing stamps the part with line + station so it shows on the station’s
pick list at the right moment.

Attach the option to a series, and rules can now branch on the answer (add the Low-E
sealed-unit part, swap the grid tape) while order entry simply shows a two-item dropdown.
If Low-E pricing ever varies by dealer group, tick Matrix Pricing on the choice and
point it at a matrix (Matrix pricing tables) instead of the
flat Price.

Workflows

  • Create an option: New (+) in the master row → type the
    Description, pick a Type, tick Forced if needed →
    Save.
  • Add a choice: select the option → New (+) under the choices table → fill
    the form (focus starts at Stock Code) → Save. The Answer ID is assigned within
    that option.
  • Copy a choice: select a choice → Copy — it is duplicated immediately
    under the same option (no confirmation); edit the copy afterwards.
  • Edit / Delete: select the option or choice → Edit…Save, or
    Delete with a confirmation.

Cautions

  • Description is required on both options and choices.
  • Deleting an option is not blocked even if it has choices or is used by rules —
    check usage before deleting.
  • Price/Cost numbers are not range-checked; invalid entries save as 0.
  • Unticking Matrix Pricing saves the matrix as none — the flat Price is
    used.

Tables behind this screen

Table Scope Purpose Where it surfaces
option_definition tenant Master list of design
options
Left table + detail form (Description, Type, Forced)
option_answers tenant Choices (answers) of each
option
Option Choices table + choice form
type_option global Dictionary of option types Type combo and the master Type filter combo
system_uom global Dictionary of units of measure Format combo on the choice
matrix_header tenant Pricing matrices Matrix combo (when Matrix Pricing is ticked)
group_pricing tenant Pricing groups Price
Group
combo
group_costing tenant Costing groups Cost
Group
combo
partner / partner_type tenant Active
partners flagged as suppliers
Supplier combo (Process =
External)
production_line tenant Production lines
Prod Line
combo (Process = Internal)
production_line_station tenant Stations within a
production line
Station combo (cascades from Prod Line)

Option types — type_option

All 7 rows of the global dictionary behind the Type combo. The
wildcard character marks the option’s role when rules substitute it into BOM part
codes.

id Description Wildcard Meaning
1 Answer — Answered by picking one of the
Choices
. The most common type.
2 Color @ Choice option with color semantics;
@ marks color parts in BOM/rules.
3 Quantity — Answer is a numeric quantity, typed
directly — no Choices list.
4 Size # Answer is a numeric
size/length
; # feeds size substitution in rules.
5 Depth ^ Answer is a numeric
depth
.
6 Text — Answer is free text.
7 +/- Adjust — Answer is a numeric adjustment
(add/subtract).

Practical note: only types 1–2 use the Choices pane — for types 3–7 the
end user types a number or text at order time, so choices entered there never surface.
Type id 22 still appears in legacy code as “Color”, but no such row exists in the
dictionary — treat it as legacy/unused.

Formats — system_uom

The global units-of-measure dictionary behind the choice’s Format combo — the
pricing basis of the choice (stored on the answer):

id Format id Format
1 Unit 8 Vol/Liq
2 Length 9 Time
3 Area W×H 10 Angles
4 FaceIn 11 UI
5 FaceOut 12 Bar
6 Perimeter 13 FaceIn/Out
7 Weight

Most choices use 1 (Unit) = priced each. The global table is authoritative —
tenant copies of system_uom exist but are empty.

The lookup combos

Price Group (group_pricing, tenant): named pricing groups carrying
rounding rules, a taxable flag, a price category, and price/cost markups. When a choice is
priced, its group’s markup applies (falling back to the choice’s own markup when the
group’s is 0). Groups are shared by parts, glass, grids, and options — not specific to this
screen.

Cost UOM (costing_uom_id): the unit the choice’s Cost is per — Unit (each),
Length, Area, FaceIn, FaceOut, Perimeter, Weight… (the same list as Format). Unit charges the cost once
per piece; the size units multiply it by the measured size. FaceIn / FaceOut / Perimeter are for paint: the
choice’s Cost and Paint Labour Cost are multiplied by the painted profile’s Face In / Face Out /
Perimeter — see How to set up paint cost on colour answers. (Until 2026-10-27
this field was labelled “Cost Group” and listed cost groups by mistake; the stored value was always a unit of
measure.)

Supplier (tenant partner): the combo lists active partners
whose partner type is flagged issupplier (typically Supplier, Shipping,
Referring, Contractor — maintained on the partner/customer screens, not here).

Prod Line / Station (production_line /
production_line_station, tenant): the Station combo reloads whenever the Prod
Line changes. Line and station are saved only when Process = Internal; the supplier
only when External; all three are cleared for None.