Formula Prices in Jules
How Jules stores, configures, and computes index-based formula prices — field reference, prefill logic, and all 15 formula codes.
Formula Prices in Jules
How to configure formula price templates, understand which fields are pre-filled, and apply the right formula code to your trades.
Table of Contents
- Overview
- Formula Templates
- The 15 Formula Codes and Their Equations
- Formula Parameters Reference
- How Formulas Flow Through Operations
- Prefill Logic
- Price Fixation
- Key Business Rules
- Glossary
Overview
Jules supports index-based (formula) pricing for recyclable commodity trades. Instead of a fixed price, a formula price references a live or published market index and applies mathematical adjustments (differential, recovery, other costs) to compute the final transaction price.
The formula pricing system has two levels:
| Level | Where | Purpose |
|---|---|---|
| Formula template | Configured in Settings | Defines the equation and optional default parameters per organization |
| Operation Quality | On each trade | The specific formula and parameters applied to a trade leg |
When a formula price is set on an operation quality, it is automatically propagated to all containers linked to that trade.
Formula Templates
Formula templates define the structure of formula pricing for your organization. Each template specifies:
- Which formula equation to use (from the 15 standard formula codes)
- An optional display label
- Default market index and pricing settings that pre-populate when the template is selected
Template fields
| Field | Description | Auto-set? |
|---|---|---|
| Formula code | The equation used to compute the price | Yes (from standard list) |
| Display label | Default name shown to users | Yes (from code) |
| Custom label | Your organization's custom name for this formula | Manual |
| Primary index | Default market index (e.g., LME Copper, TSI HMS) | Recommended to set |
| Secondary index | Second market index (for dual-index formulas) | For dual-index formulas |
| Index optionality | If two periods apply, use HIGHEST or LOWEST result | Optional |
| Price mode | How to read the index value (see below) | Recommended to set |
| Price type | Which published quote to use | Recommended to set |
| Prompt | Linked futures contract month | Optional |
The 15 Formula Codes and Their Equations
Each formula code defines a specific algebraic equation. The system ships with 15 standard codes; they cannot be deleted, but organizations can create additional custom formulas with the same code (non-unique code is supported).
| Code | Display | Equation |
|---|---|---|
INDEX | Index | Price = Index |
INDEX_MINUS_DIFFERENTIAL | Index - Differential | Price = Index − Differential |
INDEX_MINUS_DIFFERENTIAL_MINUS_OTHER_COSTS | Index - Differential - Other costs | Price = Index − Differential − OtherCosts |
INDEX_MINUS_DIFFERENTIAL_TIMES_RECOVERY | (Index - Differential) * Recovery | Price = (Index − Differential) × Recovery |
INDEX_MINUS_DIFFERENTIAL_TIMES_RECOVERY_MINUS_OTHER_COSTS | [(Index - Differential) * Recovery] - Other costs | Price = [(Index − Differential) × Recovery] − OtherCosts |
INDEX_MINUS_BRACKETED_DIFFERENTIAL_TIMES_RECOVERY_MINUS_OTHER_COSTS | Index - (Differential * Recovery) - Other costs | Price = Index − (Differential × Recovery) − OtherCosts |
INDEX_MINUS_OTHER_COSTS | Index - Other costs | Price = Index − OtherCosts |
INDEX_PLUS_OTHER_COSTS | Index + Other costs | Price = Index + OtherCosts |
INDEX_PLUS_OTHER_COST_1_PLUS_OTHER_COST_2 | Index + Other costs #1 + Other costs #2 | Price = Index + OtherCosts + OtherCosts2 |
INDEX_TIMES_RECOVERY | Index * Recovery | Price = Index × Recovery |
INDEX_TIMES_RECOVERY_MINUS_OTHER_COSTS | Index * Recovery - Other costs | Price = (Index × Recovery) − OtherCosts |
INDEX_TIMES_RECOVERY_MINUS_UNITS | Index * (Recovery - Units) | Price = Index × (Recovery − Units%) |
INDEX_PLUS_INDEX_2_PLUS_OTHER_COSTS | Index + Index #2 + Other costs | Price = Index + Index2 + OtherCosts |
INDEX_PLUS_INDEX_2_PLUS_OTHER_COSTS_CONTANGO | Index + Index #2 + Other costs + Contango | Price = Index + Index2 + OtherCosts + Contango |
INDEX_TIMES_RECOVERY_PLUS_INDEX_2_TIMES_RECOVERY_2_PLUS_OTHER_COSTS | Index * Recovery + Index #2 * Recovery #2 + Other costs | Price = (Index × Recovery) + (Index2 × Recovery2) + OtherCosts |
Choosing the right formula
Formula Parameters Reference
These fields apply both on operation qualities and on containers (where they appear as separate buy-side and sell-side parameters).
Index selection
| Field | Description | Required by formula |
|---|---|---|
| Formula | The selected formula template | Always |
| Primary index | The main market index | Always |
| Secondary index | Second market index | Dual-index formulas |
| Index currency | Currency of the index value | When converting units |
| Index unit | Unit in which the index is quoted (T, MT, lb…) | When converting units |
Index value and adjustments
| Field | Description | Used in formula |
|---|---|---|
| Index value | Fixed override for primary index value | Optional — overrides live index |
| Index value #2 | Fixed override for secondary index value | Optional |
| Index value % | Percentage adjustment on primary index | Optional |
| Index value % #2 | Percentage on secondary index | Optional |
| Differential | Subtracted/added spread vs index | Formulas with DIFFERENTIAL |
| Recovery | Recovery rate % for primary index | Formulas with RECOVERY |
| Recovery #2 | Recovery rate % for secondary index | Dual-index with recovery |
| Other costs | Other cost deduction/addition | Formulas with OTHER_COSTS |
| Other costs #2 | Second other cost value | INDEX_PLUS_OTHER_COST_1_PLUS_OTHER_COST_2 |
| Units % | Units percentage deduction | INDEX_TIMES_RECOVERY_MINUS_UNITS |
| Contango | Contango adjustment | INDEX_PLUS_INDEX_2_PLUS_OTHER_COSTS_CONTANGO |
Price mode — how the index value is read
Each index reference has a price mode that defines over what time range the index value is read:
| Value | Description |
|---|---|
| Single day | Price from a single specific day |
| Average M-1 | Average over the prior calendar month |
| Average W-1 | Average over the prior week |
| Custom range | Custom start/end date range |
| Fixed | A hardcoded fixed value (no live index lookup) |
For a custom range, also set the start date and end date for each index.
Each index also has a second price mode used when optionality is set — the system takes the HIGHEST or LOWEST of the two modes.
Price type — which published value to use
| Value | Description |
|---|---|
| Closing | End-of-day closing price |
| Official | Official published settlement |
| Live | Live/intraday quote |
| Market on close | Market-on-close price |
Quotational period (QP)
The QP defines the averaging window for the index over the shipment lifecycle.
| Field | Description |
|---|---|
| QP label | QP label (e.g., "M+1", "BL month", "arrival month") |
| QP start date | Start of the QP window |
| QP end date | End of the QP window |
| First reference event | Event that marks the start of the QP (see below) |
| First QP days | Number of days after the first reference event |
| Last reference event | Event that marks the end of the QP |
| Last QP days | Number of days after the last reference event |
| Period label | Free-text period label for primary index |
| Period label #2 | Free-text period label for secondary index |
| Timing note | Free-text timing note for primary index |
| Timing note #2 | Free-text timing note for secondary index |
Reference date events:
SAILING_DATE, BOL_DATE, ARRIVAL_DATE, DEPARTURE_DATE, ORDER_DATE, DELIVERY_DATE, GATED_IN_DATE, LOADING_DATE, ETA, ETD, BL_DATE, TELEX_RELEASE_DATE
Prompt (for futures-based indices)
Prompts link an index to a specific futures contract month. Available prompts are loaded automatically per index when configuring a formula.
Temporary / provisional pricing
| Field | Description |
|---|---|
| Temporary price | Marks this price as provisional (the index has not yet been published) |
| Temporary price #2 | Same flag for secondary index value |
When a price is marked as temporary, the index value acts as an estimate. Once the actual index is known, update the value and clear the temporary flag.
Display overrides
| Field | Description |
|---|---|
| PDF display name | Custom label shown on PDFs instead of the default formula code label |
How Formulas Flow Through Operations
1. Operation Quality (trade level)
When creating or updating an operation quality, set the formula type to the chosen template. This defines the "standard" price for this trade leg. All the formula parameters above apply at this level.
2. Containers (per-container level)
Each container linked to an operation quality carries its own buy-side and sell-side formula parameters. These inherit from the operation quality and are updated automatically when the formula changes on the operation quality.
Auto-propagation rule: When the price formula changes on an operation quality (and the price type is INDEX), Jules automatically updates all containers linked to that operation quality to match the new formula.
Prefill Logic
When a user selects a formula template, the defaults stored on that template are pre-populated into the form fields. The fields that can be pre-populated from the template are:
- Primary and secondary index
- Index optionality settings
- Price modes (primary and secondary, including alternative modes)
- Prompts (primary and secondary, including alternative prompts)
- Price types (primary and secondary, including alternative types)
Fields that are never prefilled (must always be set manually per trade):
- Differential — specific to each deal
- Recovery rates — material-specific
- Other costs — deal-specific deductions
- Index values — known only after index publication
- Quotational period label and date fields — shipment-specific
- Price fixation fields — set only after a price fixation event
Best practice: Fill as many defaults as possible on the formula template. For a commodity you trade regularly on LME closing with a 1-month average, set those defaults once — users will only need to enter the differential and other costs per trade.
Price Fixation
Some trades allow partial or full price fixation before the QP ends.
| Field | Description |
|---|---|
| Fixation type | Percentage (fix a portion) or Absolute (fix a specific value) |
| Fixed value | The fixed price value (for Absolute fixation) |
| Fixed percentage | Percentage of quantity fixed (for Percentage fixation) |
| Fixation date | Date the price was fixed |
These fields apply on both operation qualities and containers.
Key Business Rules
1. Multiple formulas, same equation
Multiple formulas can share the same equation code but have different default settings (e.g., two "Index minus Differential" formulas, one defaulting to LME Copper and another to LME Aluminium). They get different IDs so users can distinguish them in dropdowns.
2. Dual index support
Formulas with INDEX_2 in the code require both a primary and a secondary index to be set. The second index has its own full set of parameters (price mode, price type, recovery, etc.).
3. Optionality (HIGHEST / LOWEST)
When optionality is set, Jules computes the price using both price modes configured for an index, then takes the higher or lower result. This is common for "best-of-two-periods" pricing.
4. Auto-propagation scope
Auto-propagation only runs when the price type is INDEX on the operation quality. Fixed-price operations are not affected.
5. Temporary price workflow
- At trade creation, if the index is not yet published, mark the price as temporary and enter an estimated index value
- When the actual index is published, update the index value with the real figure and clear the temporary flag
- The final invoice uses the definitive index value
6. Multi-tenant isolation
Each organization has its own set of formula templates. Formulas configured for one client are never visible to another.
Glossary
| Term | Definition |
|---|---|
| Index | A published market benchmark price (e.g., TSI, LME, Platts, RISI) |
| Formula code | The algebraic equation code that defines how Index, Differential, Recovery, and Other Costs are combined |
| Formula template | A saved formula configuration — stores the equation code plus optional defaults that pre-populate new operation qualities |
| Differential | A fixed spread added or subtracted from the index (e.g., −15 USD/T) |
| Recovery | A percentage representing the usable fraction of the material (e.g., 98% for high-grade scrap) |
| Other costs | A fixed cost added or deducted from the formula (e.g., handling, freight, treatment charge) |
| Contango | A market structure premium used in some futures-based formulas |
| QP (Quotational Period) | The time window over which index values are averaged to compute the final price |
| Prompt | A specific futures contract month linked to an index |
| Price mode | How the index value is read: single day, weekly average, monthly average, custom range, or fixed |
| Price type | Which published quote to use: Closing, Official, Live, or Market-on-Close |
| Optionality | A mechanism to compute using two price modes and keep the highest (or lowest) result |
| Temporary price | A provisional price set before the index is published; replaced once the actual value is known |
| Price fixation | Locking in a price (or a portion of it) before the QP ends |
| Operation Quality | A line on an operation representing a specific material with its price, quantity, and terms |
| Container formula | The buy-side and sell-side formula stored per container, inherited from and synchronized with the operation quality |
Last updated today
Built with Documentation.AI