Docs / TeoScore / Financial Value & Loyalty
Financial Value & Loyalty (V1–V3)
Category 1 — the money dimension. It scores what you pay and what you get back, and is a default top-priority category for most personas.
How the category aggregates
Mean of the active variables. V1 scores an itinerary's price in its own currency — dollars for cash, points for award — while V2 scores redemption value on awards only. On an award both can be active, and the category is then their mean plus V3 (when earnings data exists).
Measures — how this itinerary's price ranks against the other options in the same search, in its own currency: a cash fare against the search's cash range, an award's points against its award range.
Cash: Score = 100 × (highestCash − thisCash) ÷ (highestCash − lowestCash) Award: Score = 100 × (highestPoints − thisPoints) ÷ (highestPoints − lowestPoints)
Data & accuracy — search-relative, so it needs the other results as anchors (from buildSearchContext). Uses the raw fare or the published points cost only — seat-selection fees and other ancillaries are not folded in. There is no fixed-range fallback: without a search-relative range V1 drops rather than inventing a comparator.
Gotchas — the award form compares points as published and does not convert between programmes, so it orders points cost within one search rather than claiming 40k of one currency beats 60k of another — V2's cents per point is the common-unit measure. Drops when no price is present. A single result or all-equal prices → 100 (nothing to differentiate).
Measures — cents of cash value saved per point, for award redemptions.
CPP = (equivalentCashFare − taxesAndFees) ÷ points (×100 for ¢/pt) ≥2.0¢ → 100 · 1.0–2.0¢ → 50×CPP · 0–1.0¢ → 20×CPP · <0 → 0
Data & accuracy — the hard part is the equivalent cash fare. A ladder resolves it, best-first: exact same flight → same-carrier same-day → same-day market median → ±1-day median. The public cashFareSource flag tells you which tier was used (primary / same-day-avg / ±1-day-avg). Taxes & fees are read from the award, never estimated.
Gotchas — drops on cash itineraries, and on awards when no cash comparator exists at any ladder tier (the award's own price is not a comparator) or taxes/fees are unavailable. A negative CPP scores 0 but stays active. A provider-supplied cpp is used directly.
Measures — mileage/points earned relative to the best earner in the search.
Score = 100 × (estimatedMilesEarned × PMV) ÷ bestEarningsValueCents
Data & accuracy — PMV (points monetary value) is per-program (getPMVForProgram) or a ~1.3¢ default. Only activates when a search-set comparator (bestEarningsValueCents) exists, which prevents a “providing earnings data hurt my score” penalty.
Gotchas — drops on award itineraries, and on cash when there's no earnings estimate or no comparator across the result set.