---
title: Pricing formulas
nav: Formulas
description: The exact arithmetic behind a parity target and a confidence score, with every constant and weight stated.
group: reference
order: 1
status: shipped
updated: 2026-09-21
---

Every number on this page is the value the engine actually uses. Concepts and reasoning live in [Parity targets](/guidelines/parity-target); this page is for looking things up.

## Money

All amounts are integer **micros** — millionths of a currency unit. `$4.99` is `4990000`. Arithmetic is done in `BigInt` to avoid floating-point drift, with half-up rounding on multiplication.

A constraint, override, or current price must be denominated in the target market's currency. A mismatch is an error, not a silent conversion.

## Dampening

```
dampened(factor, intensity) = 1 - intensity x (1 - factor)
```

`intensity` must be within `[0, 1]`. At `0` the factor is neutralised to `1`; at `1` it passes through unchanged.

## Economic factor

```
raw       = ppp x priceLevel x income
combined  = dampened(ppp, pppIntensity)
          x dampened(priceLevel, priceLevelIntensity)
          x dampened(income, incomeIntensity)
adjusted  = clamp(combined, minPriceRatio, maxPriceRatio)
```

`priceLevel` and `income` default to `1` when absent. `ppp` is required, and every factor must be finite and greater than zero.

Both `raw` and `adjusted` are stored in the snapshot, so the effect of dampening is always recoverable.

## Strategy constants

|                       | Conservative | Balanced | Growth |
| --------------------- | -----------: | -------: | -----: |
| `pppIntensity`        |         0.35 |     0.65 |   0.90 |
| `incomeIntensity`     |         0.10 |     0.20 |   0.30 |
| `priceLevelIntensity` |         0.10 |     0.15 |   0.20 |
| `minPriceRatio`       |         0.70 |     0.45 |   0.25 |
| `maxPriceRatio`       |         1.20 |     1.20 |   1.10 |

## Target price

```
converted   = basePrice x fxRate
candidate   = converted x adjusted
selected    = override.absolutePrice
            | converted x override.priceRatio
            | candidate
constrained = clamp(selected, floor, ceiling)
rounded     = roundToIncrement(constrained, market)
final       = clamp(rounded, floor, ceiling)
```

`fxRate` is the target currency per base-currency unit, and must be finite and positive.

The final clamp is not redundant: rounding can push a price back outside its bounds.

For a protected market the result is the **current price**, and a current price is required — the calculation throws without one.

## Eligibility

```
eligible = storeSupported AND NOT protectedMarket
```

## Confidence

```
stability = 1 - min(1, |1 - adjusted|)

score = clamp(dataCoverage) x 0.35
      + clamp(freshness)    x 0.20
      + (storeSupported ? 1 : 0)      x 0.20
      + (roundingRuleAvailable ? 1:0) x 0.10
      + stability                     x 0.15
```

Rounded to two decimal places. `dataCoverage` is the count of present economic inputs divided by three.

### Bands

| Score     | Level     | Decision    |
| --------- | --------- | ----------- |
| `< 0.40`  | Very Low  | abstain     |
| `< 0.60`  | Low       | abstain     |
| `< 0.75`  | Medium    | provisional |
| `< 0.90`  | High      | normal      |
| `>= 0.90` | Very High | normal      |

## Drift

```
changeRatio = actual / expected - 1
```

| `|changeRatio|` | Severity |
| --- | --- |
| `< 0.05` | ignored |
| `< 0.10` | mild |
| `<= 0.20` | review |
| `> 0.20` | significant |

Store drift is only classified when expected and actual share a currency, and when the expected amount is finite and positive.

## Approvability

```
approvable = status = "open"
         AND NOT withdrawn
         AND confidenceDecision != "abstain"
         AND |changeRatio| >= 0.05
```

Checked in the interface so the buttons state what will happen, and enforced again on the server.
