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
Recommendation: replace. Thresholds already evaluated for this unit indicate replacement. Three comparisons fired: - Age: The unit is 23.34 years old against a replace-at-age threshold of 20.0 years. - Repair frequency: 6 repair invoices in the last 12 months against a threshold of 4.0. - Quote vs book value: Book value is 0.0 (fully depreciated). With the quote present ($3,000.00), the “quote as % of book value” threshold set at 200.0% is automatically exceeded when book value is zero. There were no untestable thresholds. Note: spend coverage reflects uploaded/extracted invoices over a 33‑month window, so lifetime spend seen is a floor, but this does not affect the fired age and repair-frequency thresholds. Given these fired thresholds, the system’s mapped verdict is replace.

Figures used

  • facts.asset.age_years = 23.34
  • facts.thresholds.values.replace_age_years = 20.0
  • facts.spend.ttm_invoice_count = 6
  • facts.thresholds.values.max_repairs_ttm = 4.0
  • facts.economics.book_value = 0.0
  • facts.thresholds.values.quote_pct_of_book_value = 200.0
  • facts.quote.amount = 3000.0
  • facts.coverage.invoice_window_months = 33

Rules cited

  • “replace_age_years”
  • “max_repairs_ttm”
  • “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
LeverThis unitReplace atReading
Replace at age
asset.age_years
23.34 years 20.0 years AT OR OVER
Flag when repairs in 12 months reach
spend.ttm_invoice_count
6 repairs 4.0 repairs AT OR OVER
Replace when a repair reaches
economics.book_value
None % of book value 200.0 % of book value AT OR OVER

The unit

Full history →
Unit
FL-00041
Make / model
HYSTER S50XM
Power
propane
Site
45 Brunswick (Tiles), New Jersey
Age
23.34 yrs (acquired 2003-04-23)
Hour meter
19,157 @ 2026-04-30
Hours / year
311
Readings
6 (2 implausible)
Invoices
6
Last service
2026-04-30
Spend seen
$2,604.51
Trailing 12mo
$2,604.51
Replacement
$34,000
Quote / repl.
8.8%
Spend / repl.
7.7%
Known gaps in the evidence
  • asset has no capacity_lbs — replacement benchmarks are banded by capacity

Repair history behind this

Service dateVendorTypeTotalFlagsDocument
2026-04-30 HERCULES repair $815.67 FAVORABLE 4696723_Auto6a6051b9-7b78-4fde-856f-9defce364240~APWH_20260511112033.pdf
2026-04-10 HERCULES repair $625.41 FAVORABLE CONSUMABLE_FLAT 4646117_Autobc46bb52-cb8d-4875-847a-dbe6b587d45f~APWH_20260428133536.pdf
2026-03-27 HERCULES repair $191.86 CONSUMABLE_FLAT 4618404_Auto7b154788-77c4-4d10-bef4-6a6ba0b7040d~APWH_20260410131414.pdf
2026-02-04 HERCULES repair $285.17 FAVORABLE 4405820_Autoe1b51834-62c3-4c12-9e9e-d1e95664341d~APWH_20260210081020.pdf
2026-02-04 HERCULES repair $200.37 CONSUMABLE_FLAT 4405800_Autoce521887-b860-40ab-950e-073130988bd0~APWH_20260210074126.pdf
2026-01-16 HERCULES repair $486.03 FAVORABLE 4385210_Auto35f71169-5d29-42ca-b02a-d3c2a32e6360~APWH_20260120121243.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-08-26",
 "asset": {
  "acquire_date": "2003-04-23",
  "age_years": 23.34,
  "asset_id": "FL-00041",
  "capacity_lbs": null,
  "make": "HYSTER",
  "model": "S50XM",
  "power_type": "propane",
  "serial": "D187V04950T",
  "site_name": "45 Brunswick (Tiles), New Jersey",
  "source": "asset_master",
  "status": "active",
  "wh_code": "NJED-45"
 },
 "coverage": {
  "invoice_window_end": "2026-07-28",
  "invoice_window_months": 33,
  "invoice_window_start": "2023-10-19",
  "invoices_in_system": 2108
 },
 "data_gaps": [
  "asset has no capacity_lbs \u2014 replacement benchmarks are banded by capacity"
 ],
 "economics": {
  "book_value": 0.0,
  "book_value_basis": "(1 - 23.3/10) x $23,500, floored at 0",
  "est_acquisition_cost": 23500,
  "est_replacement_cost": 34000,
  "est_useful_life_yrs": 10,
  "fully_depreciated": true
 },
 "found": true,
 "history": [
  {
   "doc_type": "repair",
   "file_ref": "4696723_Auto6a6051b9-7b78-4fde-856f-9defce364240~APWH_20260511112033.pdf",
   "flag_codes": "NO_PO;FAVORABLE",
   "invoice_id": 963,
   "needs_review": 0,
   "on_date": "2026-04-30",
   "total": 815.67,
   "vendor_id": "HERCULES"
  },
  {
   "doc_type": "repair",
   "file_ref": "4646117_Autobc46bb52-cb8d-4875-847a-dbe6b587d45f~APWH_20260428133536.pdf",
   "flag_codes": "NO_PO;FAVORABLE;CONSUMABLE_FLAT",
   "invoice_id": 886,
   "needs_review": 0,
   "on_date": "2026-04-10",
   "total": 625.41,
   "vendor_id": "HERCULES"
  },
  {
   "doc_type": "repair",
   "file_ref": "4618404_Auto7b154788-77c4-4d10-bef4-6a6ba0b7040d~APWH_20260410131414.pdf",
   "flag_codes": "NO_PO;CONSUMABLE_FLAT",
   "invoice_id": 725,
   "needs_review": 0,
   "on_date": "2026-03-27",
   "total": 191.86,
   "vendor_id": "HERCULES"
  },
  {
   "doc_type": "repair",
   "file_ref": "4405820_Autoe1b51834-62c3-4c12-9e9e-d1e95664341d~APWH_20260210081020.pdf",
   "flag_codes": "NO_PO;FAVORABLE",
   "invoice_id": 320,
   "needs_review": 0,
   "on_date": "2026-02-04",
   "total": 285.17,
   "vendor_id": "HERCULES"
  },
  {
   "doc_type": "repair",
   "file_ref": "4405800_Autoce521887-b860-40ab-950e-073130988bd0~APWH_20260210074126.pdf",
   "flag_codes": "NO_PO;CONSUMABLE_FLAT",
   "invoice_id": 318,
   "needs_review": 0,
   "on_date": "2026-02-04",
   "total": 200.37,
   "vendor_id": "HERCULES"
  },
  {
   "doc_type": "repair",
   "file_ref": "4385210_Auto35f71169-5d29-42ca-b02a-d3c2a32e6360~APWH_20260120121243.pdf",
   "flag_codes": "NO_PO;FAVORABLE",
   "invoice_id": 187,
   "needs_review": 0,
   "on_date": "2026-01-16",
   "total": 486.03,
   "vendor_id": "HERCULES"
  }
 ],
 "meter": {
  "est_hours_per_year": 311,
  "implausible_readings": 2,
  "last_reading_date": "2026-04-30",
  "last_reading_hours": 19157,
  "readings_on_file": 6
 },
 "quote": {
  "amount": 3000.0,
  "source": "comment",
  "symptom_text": "Hydraulic hose broke.  $3,000 quote to repair.",
  "vendor_id": null
 },
 "ratios": {
  "age_pct_of_est_useful_life": 233.4,
  "lifetime_spend_seen_pct_of_replacement": 7.7,
  "quote_pct_of_book_value": null,
  "quote_pct_of_replacement": 8.8,
  "quote_plus_ttm_pct_of_replacement": 16.5,
  "spend_seen_per_meter_hour": 0.14,
  "ttm_spend_pct_of_replacement": 7.7
 },
 "replacement_benchmark": {
  "as_of": "2026-08-25",
  "est_replacement_cost": 34000,
  "est_useful_life_yrs": 10,
  "source": "market research 2026-08 (inferred, pending dealer quotes)"
 },
 "spend": {
  "invoices_matched": 6,
  "last_service_date": "2026-04-30",
  "lifetime_spend_seen": 2604.51,
  "out_of_scope_invoices": 0,
  "out_of_scope_spend": 0.0,
  "ttm_invoice_count": 6,
  "ttm_spend": 2604.51
 },
 "thresholds": {
  "clear_repair": null,
  "fired": [
   {
    "label": "Replace at age",
    "limit": 20.0,
    "observed": 23.34,
    "source": "asset.age_years",
    "threshold": "replace_age_years",
    "unit": "years"
   },
   {
    "label": "Flag when repairs in 12 months reach",
    "limit": 4.0,
    "observed": 6,
    "source": "spend.ttm_invoice_count",
    "threshold": "max_repairs_ttm",
    "unit": "repairs"
   },
   {
    "label": "Replace when a repair reaches",
    "limit": 200.0,
    "note": "unit is fully depreciated \u2014 book value is $0, so any repair exceeds this threshold",
    "observed": null,
    "source": "economics.book_value",
    "threshold": "quote_pct_of_book_value",
    "unit": "% of book value"
   }
  ],
  "mapped_recommendation": "replace",
  "threshold_version_id": 5,
  "untestable": [],
  "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": "replace_indicated",
  "version_label": "t1.4 2026-08-26"
 }
}