requiresConfiguration, apps/erp/app/modules/items/ui/Item/ItemManufacturingForm.tsx). The stored method then becomes a template. Each job or quote line runs the rules to create its own resolved method.
Parameters — the inputs
Each parameter has a label, machine key, and data type (configurationParameterValidator, apps/erp/app/modules/items/items.models.ts). Rules reference the key. Use alphanumeric segments separated by single underscores, such as length or wall_thickness.
The base set (text, numeric, boolean, list, material) is configurationParameterDataTypes; date is added by the validator.
Parameters can be sorted into groups so the order form reads as sections (Dimensions, Finish, Tolerances) rather than one flat list. A group is just a named heading with a sort order (configurationParameterGroupValidator); parameters land in an auto-created “Ungrouped” group until you file them. Both groups and parameters reorder by drag-and-drop, and both surfaces edit the same rows (apps/erp/app/modules/items/ui/Parts/ConfigurationParameters.tsx).
Rules — deriving the method
A rule binds a method field to code that computes its value from the parameters (configurationRuleValidator).
Rules attach per-field right on the embedded method editors. On the bill of materials each component exposes configurable fields — itemId (swap the component), quantity, unitOfMeasureCode, and methodType (apps/erp/app/modules/items/ui/Item/BillOfMaterial.tsx); on the bill of process, operation fields like the work center, process, and setup/labor/machine times. A field with a rule shows a “configured” marker instead of a static value.
You author the code in a Monaco editor (apps/erp/app/components/Configurator/ConfigurationEditor/ConfigurationEditor.tsx) that generates the function skeleton and type definitions for you from the parameters, with a Run Test button to test the output before saving. The code is the body of a configure(params) function; params holds your parameters by key, and you return the value for that field:
billOfMaterial or billOfProcess rule returns the list of component or operation names to keep, so a boolean parameter can drop a whole subassembly or an outside-processing step from the recipe.
Choosing a configured item at order time
Configuration runs when a configured part is added to a quote line, sales order line, or job. The form displays Configure and disables Save until the required parameters are submitted (QuoteLineForm.tsx, SalesOrderLineForm.tsx, JobForm.tsx).
Submitting the configuration stores the answers on the line (quoteLine.configuration / job.configuration, JSON) and calls the get-method engine with those values (x+/quote+/$quoteId.$lineId.configure.tsx). The rules run, and the line gets its own resolved bill of materials, routing, and cost — a concrete instance of the parametric family, not the template. Reconfiguring clears the line’s prices and re-derives everything.