Rulebook v1.0 draft (consolidated, unapproved)
Thresholds t1.4 2026-08-26
Invoices2,168
Pending extract0
Needs review38
Unconfirmed units195
Open findings0
Replacement costs9
Builddc65359
Mapped recommendation is request_more_info. The thresholds engine marked this case untestable because it could not evaluate the single‑repair comparisons without a formal quote amount on file. Band is all (every lever is tested), and no thresholds fired. Specifically, we could not: (1) compare the repair to the replacement benchmark, (2) check the single‑repair dollar cap, or (3) compare the repair to book value, because quote.amount is missing and the precomputed quote percentage is unavailable. To proceed, please upload or enter the written vendor quote so the system can calculate the needed checks against the $34,000 replacement benchmark, the $10,000 single‑repair cap, and the $5,546 book value. Your note mentions a repair cost, but since quote.amount is null in the system, we can’t use it until the quote is entered or attached.

What's missing

The recommendation stopped short because these inputs weren't available. Supplying them and re-running will change the answer.

  • Replace when a single quote reaches: ratios.quote_pct_of_replacement is unavailable
  • Replace when a single repair invoice exceeds: quote.amount is unavailable
  • Replace when a repair reaches: quote.amount is unavailable
  • no repair quote was supplied — there is no repair cost to weigh against replacement

Figures used

  • facts.replacement_benchmark.est_replacement_cost = 34000
  • facts.thresholds.values.max_single_repair_usd = 10000.0
  • facts.economics.book_value = 5546.0
  • facts.thresholds.values.quote_pct_of_replacement = 25.0
  • facts.quote.amount = null
  • facts.ratios.quote_pct_of_replacement = null

Rules cited

  • “quote_pct_of_replacement”
  • “max_single_repair_usd”
  • “quote_pct_of_book_value”

From v1.0 draft (consolidated, unapproved), saved by consolidation (pending Matt's review). This decision is permanently tied to that version even if the rules change later.

Threshold check

t1.4 2026-08-26 · compared in code, not by the model
ALL BAND no mature age is set, so every lever is tested.

No threshold could be tested — the inputs they need are missing.

Could not be tested
  • Replace when a single quote reaches: ratios.quote_pct_of_replacement is unavailable
  • Replace when a single repair invoice exceeds: quote.amount is unavailable
  • Replace when a repair reaches: quote.amount is unavailable

An untested threshold is a gap in the evidence — it is not a reason to repair.

The unit

Full history →
Unit
FL-00521
Make / model
Hyster S50CT2
Power
propane · 4,650 lb
Site
Phoenix, Arizona
Age
7.64 yrs (acquired 2019-02-12)
Hour meter
9,628 @ 2026-06-10
Hours / year
436
Readings
4
Invoices
4
Last service
2026-06-10
Spend seen
$2,791.23
Trailing 12mo
$2,791.23
Replacement
$34,000
Quote / repl.
—
Spend / repl.
8.2%
Known gaps in the evidence
  • no repair quote was supplied — there is no repair cost to weigh against replacement

Repair history behind this

Service dateVendorTypeTotalFlagsDocument
2026-06-10 FOSE repair $890.69 FAVORABLE 4822471_Autocd424795-57b6-405b-a513-d4e6760163ad~APWH_20260619110712.pdf
2026-06-02 FOSE battery $816.94 FAVORABLE 4822469_Auto3c40bf88-f475-4f9b-973e-050f108c1e07~APWH_20260619110711.pdf
2026-04-20 FOSE pm $454.79 FAVORABLE 4644339_Autodfb80cd5-c603-4066-abff-3f307cb9c292~APWH_20260427140201.pdf
2026-02-26 FOSE repair $628.81 FAVORABLE 4526932_Auto02399f9a-d492-4bb7-81b3-ee2c98bcb49c~APWH_20260303101008.pdf

What did you actually do?

Recording the real outcome is what lets this tool be backtested against Matt's judgement. It takes a click.

Outcomes are recorded under a named account. Sign in to record what was done.

Full facts record (d0.2 · openai:gpt-5)
{
 "as_of": "2026-10-05",
 "asset": {
  "acquire_date": "2019-02-12",
  "age_years": 7.64,
  "asset_id": "FL-00521",
  "capacity_lbs": 4650,
  "make": "Hyster",
  "model": "S50CT2",
  "power_type": "propane",
  "serial": "B267V03034T",
  "site_name": "Phoenix, Arizona",
  "source": "asset_master",
  "status": "active",
  "wh_code": "AZPH"
 },
 "coverage": {
  "invoice_window_end": "2026-07-28",
  "invoice_window_months": 33,
  "invoice_window_start": "2023-10-19",
  "invoices_in_system": 2108
 },
 "data_gaps": [
  "no repair quote was supplied \u2014 there is no repair cost to weigh against replacement"
 ],
 "economics": {
  "book_value": 5546.0,
  "book_value_basis": "(1 - 7.6/10) x $23,500, floored at 0",
  "est_acquisition_cost": 23500,
  "est_replacement_cost": 34000,
  "est_useful_life_yrs": 10,
  "fully_depreciated": false
 },
 "found": true,
 "history": [
  {
   "doc_type": "repair",
   "file_ref": "4822471_Autocd424795-57b6-405b-a513-d4e6760163ad~APWH_20260619110712.pdf",
   "flag_codes": "FAVORABLE",
   "invoice_id": 1171,
   "needs_review": 0,
   "on_date": "2026-06-10",
   "total": 890.69,
   "vendor_id": "FOSE"
  },
  {
   "doc_type": "battery",
   "file_ref": "4822469_Auto3c40bf88-f475-4f9b-973e-050f108c1e07~APWH_20260619110711.pdf",
   "flag_codes": "FAVORABLE",
   "invoice_id": 1170,
   "needs_review": 0,
   "on_date": "2026-06-02",
   "total": 816.94,
   "vendor_id": "FOSE"
  },
  {
   "doc_type": "pm",
   "file_ref": "4644339_Autodfb80cd5-c603-4066-abff-3f307cb9c292~APWH_20260427140201.pdf",
   "flag_codes": "FAVORABLE",
   "invoice_id": 848,
   "needs_review": 0,
   "on_date": "2026-04-20",
   "total": 454.79,
   "vendor_id": "FOSE"
  },
  {
   "doc_type": "repair",
   "file_ref": "4526932_Auto02399f9a-d492-4bb7-81b3-ee2c98bcb49c~APWH_20260303101008.pdf",
   "flag_codes": "FAVORABLE",
   "invoice_id": 458,
   "needs_review": 0,
   "on_date": "2026-02-26",
   "total": 628.81,
   "vendor_id": "FOSE"
  }
 ],
 "meter": {
  "est_hours_per_year": 436,
  "implausible_readings": 0,
  "last_reading_date": "2026-06-10",
  "last_reading_hours": 9628,
  "readings_on_file": 4
 },
 "quote": {
  "amount": null,
  "source": "none",
  "symptom_text": "forklift has 4000 hours.  repair is 4500$ for a new mast and a hydraulic leak",
  "vendor_id": null
 },
 "ratios": {
  "age_pct_of_est_useful_life": 76.4,
  "lifetime_spend_seen_pct_of_replacement": 8.2,
  "quote_pct_of_book_value": null,
  "quote_pct_of_replacement": null,
  "quote_plus_ttm_pct_of_replacement": null,
  "spend_seen_per_meter_hour": 0.29,
  "ttm_spend_pct_of_replacement": 8.2
 },
 "replacement_benchmark": {
  "as_of": "2026-08-25",
  "est_replacement_cost": 34000,
  "est_useful_life_yrs": 10,
  "matched_by": "power type + capacity band",
  "model_match": null,
  "source": "market research 2026-08 (inferred, pending dealer quotes)"
 },
 "spend": {
  "invoices_matched": 4,
  "last_service_date": "2026-06-10",
  "lifetime_spend_seen": 2791.23,
  "out_of_scope_invoices": 0,
  "out_of_scope_spend": 0.0,
  "ttm_invoice_count": 4,
  "ttm_repair_count": 2,
  "ttm_spend": 2791.23
 },
 "thresholds": {
  "band": {
   "band": "all",
   "reason": "no mature age is set, so every lever is tested",
   "single_repair_levers": true
  },
  "clear_repair": null,
  "fired": [],
  "mapped_recommendation": "request_more_info",
  "retired": [
   "replace_age_years",
   "replace_meter_hours"
  ],
  "skipped": [],
  "threshold_version_id": 5,
  "untestable": [
   "Replace when a single quote reaches: ratios.quote_pct_of_replacement is unavailable",
   "Replace when a single repair invoice exceeds: quote.amount is unavailable",
   "Replace when a repair reaches: quote.amount is unavailable"
  ],
  "values": {
   "lifetime_spend_pct_of_replacement": 200.0,
   "max_repairs_ttm": 4.0,
   "max_single_repair_usd": 10000.0,
   "max_ttm_spend_usd": 20000.0,
   "quote_pct_of_book_value": 200.0,
   "quote_pct_of_replacement": 25.0,
   "repair_below_quote_pct": 5.0,
   "replace_age_years": 20.0,
   "replace_meter_hours": 20000.0,
   "ttm_spend_pct_of_replacement": 50.0
  },
  "verdict": "untestable",
  "version_label": "t1.4 2026-08-26"
 }
}