Data Sources
0 / 5 loaded
Or upload combined Raw.xlsx (all sheets in one file):
Auto-detects standard sheet names · or drop individual sheets
Classification Keywords
6-layer bounce funnel — edit any layer, classification updates on next runWOs bounce through layers top-to-bottom. First match wins. Comma-separated — spaces trimmed. Tags on each field are preserved for future funnel visualization.
Equipment Type Map
Asset type code ; Label pairs
Asset type codes mapped to readable labels. Format: CODE;Label, comma-separated. e.g.
PUMP;Pump, MTR;Motor
FL Pattern (regex)
✓ valid
Confidence Score Weights
signal ; weight pairs
Per-WO confidence score (0–100) aggregated per equipment. Weights are normalized — they don't need to sum to 100.
Signals: qscore (desc specificity) · clear_category (not AMBIGUOUS) · has_notification · has_labor · has_gm_cost · type_alignment (OrderType matches KW_Class).
Regex that extracts group/line identifiers from your location/hierarchy field. Capture group 1 = group label. Adjust to match your asset hierarchy format.
Config Inspector — edit, explain, test each pipeline stage
tablesobject — label, sheet_names[]
Tells AART what to call each upload slot and which Excel sheet tab names to look for in a combined file drop. The engine matches sheet names case-insensitively. How to find: open your export file and look at the tab names at the bottom — those go in sheet_names.
AI deep-dive
"Explain how a file router uses a lookup table of sheet name aliases to dynamically dispatch raw spreadsheet data to typed parse functions. What are the tradeoffs of name-based vs position-based routing?"
columnsobject — field_name: column_index (0-based)
Maps a concept name like
entity_id to a zero-indexed column number. Column A=0, B=1, C=2. The parse function pulls values from each raw row using these numbers. How to find: count columns from the left in your export starting at 0. Set to -1 if the field doesn't exist.AI deep-dive
"Explain positional column mapping vs header-based column detection in ETL pipelines. When is each approach appropriate? What breaks when column order changes?"
excluded_typesstring[] — hard filter before scoring
Records whose record_type exactly matches one of these codes are dropped from the entire pipeline — they never reach scoring. Use for capital projects, facilities, training orders. How to find: look at the OrderType column in your records sheet and identify any codes that represent non-maintenance work.
AI deep-dive
"Explain the concept of a blocklist filter in data pipelines. How does early exclusion affect downstream scoring accuracy? What are the risks of over-filtering vs under-filtering maintenance records?"
type_codes{breakdown: string[], planned: string[]}
After exclusion, each record's type code is matched here to determine its nature. breakdown = reactive/emergency. planned = scheduled work. This interacts with keyword classification: FAILURE keyword + breakdown type = ACUTE_FAILURE (highest weight). Same keyword + planned type = CHRONIC_FAILURE (lower weight). How to find: ask your CMMS admin which order types represent reactive vs scheduled work.
AI deep-dive
"Explain how a two-axis classification matrix (keyword class x order type) produces more nuanced categories than either signal alone. How does this pattern apply to maintenance work classification?"
entity_type_map + line_patternlookup object + regex string
entity_type_map: raw asset type code is looked up and replaced with a readable label in results. If no match, raw code is shown. line_pattern: a regex applied to the location/hierarchy field — the first capture group ( ) is used as the group label for rollup. How to find: look at the type and location columns in your asset master export.
AI deep-dive
"Explain how regex capture groups work for structured string extraction. What makes a regex pattern robust vs brittle for extracting location codes from hierarchical asset identifiers?"
header_hints{table_key: string[]}
Fallback auto-detection: when a file is uploaded without a recognized sheet name, AART reads the first row and scans for these substrings. First table whose hints match wins. Fires only when sheet name matching fails. How to find: look at the header row of each export type and pick 1-2 unique column names that only appear in that table.
AI deep-dive
"Explain header-based file type detection as a pattern in ETL. How does substring matching on headers compare to schema validation? What are the common failure modes?"
defaults — scoring formulaweights, caps, thresholds
The scoring formula:
score = (wWO * min(count/cWO,1) + wCost * min(cost/cCost,1) + wDays * min(days/cDays,1) + wLabor * min(hrs/cLabor,1)) * 100. Weights control signal contribution (must sum to 1). Caps are the max meaningful value — anything above = full score on that signal. Thresholds: score >= high = HIGH. Calibration tip: set caps near the 90th percentile of your historical data.AI deep-dive
"Explain min-max normalization with configurable caps in a multi-signal scoring model. How do cap values affect score distribution? What statistical method sets optimal caps from historical data?"
Parameters
Replaces Excel Parameters sheet — live in browserDate Range
Risk Thresholds
Scoring Weights (must sum to 1.00) & Normalisation Caps
cap
cap
cap
cap
Score each asset against the 90th-percentile of its own OBJ_CLASS (boilers vs boilers, fountains vs fountains) instead of one global cap. Small classes fall back to the global cap. Re-run Process + Sweep to apply.
Weight sum: 1.00 ✓
Load all 5 data sources to begin
// or skip the load —