Overview
The daily read: what is bleeding, what is verified, what to say first.
Today's opportunities8 in the queue · numbers are engine evidence ranks, so a missing number means the checker consolidated or held that rank · click one to dive in
1Checker verifiedPlating - Burn

10G CARBON STEEL 120" X 30"

$127,166
recent half, scrap-weighted
Climbing +87% vs the prior half92% true scrap$2,729 per event
Open the full case
May 31 scrap: $19,554May 31 rework: $6,099$26KMay 31Jun 7 scrap: $25,863Jun 7 rework: $0$26KJun 7Jun 14 scrap: $22,834Jun 14 rework: $4,241$27KJun 14Jun 21 scrap: $34,741Jun 21 rework: $1,576$36KJun 21Jun 28 scrap: $39,952Jun 28 rework: $1,812$42KJun 28Jul 5 scrap: $45,945 (partial week)Jul 5 rework: $2,084 (partial week)$48KJul 5*May 31: 13 reject eventsJun 7: 15 reject eventsJun 14: 11 reject eventsJun 21: 12 reject eventsJun 28: 12 reject eventsJul 5: 12 reject events
scrap $rework $events* = partial week

Steady-volume part: 75 events in 6 wks · cost climbing +87% · scrap share rising

2Checker verifiedAssembly - Wrong Assembly

4" PIPE-CRV STACK 439SST NiCR

$86,863
recent half, scrap-weighted
Climbing +24% vs the prior half66% true scrap$2,993 per event
Open the full case
May 31 scrap: $20,862May 31 rework: $884$22KMay 31Jun 7 scrap: $16,263Jun 7 rework: $4,535$21KJun 7Jun 14 scrap: $30,720Jun 14 rework: $14,000$45KJun 14Jun 21 scrap: $17,745Jun 21 rework: $14,006$32KJun 21Jun 28 scrap: $20,407Jun 28 rework: $16,107$37KJun 28Jul 5 scrap: $23,468 (partial week)Jul 5 rework: $18,523 (partial week)$42KJul 5*May 31: 7 reject eventsJun 7: 11 reject eventsJun 14: 18 reject eventsJun 21: 10 reject eventsJun 28: 10 reject eventsJul 5: 10 reject events
scrap $rework $events* = partial week

Steady-volume part: 66 events in 6 wks · cost climbing +24% · scrap share easing

3Checker verifiedMisc - Lost Parts

6X108,MIT,ST(OD) CHR POL

$86,397
recent half, scrap-weighted
Climbing +45% vs the prior half79% true scrap$2,538 per event
Open the full case
May 31 scrap: $4,254May 31 rework: $7,546$12KMay 31Jun 7 scrap: $21,507Jun 7 rework: $5,640$27KJun 7Jun 14 scrap: $29,274Jun 14 rework: $11,598$41KJun 14Jun 21 scrap: $22,034Jun 21 rework: $3,216$25KJun 21Jun 28 scrap: $25,339Jun 28 rework: $3,698$29KJun 28Jul 5 scrap: $29,140 (partial week)Jul 5 rework: $4,253 (partial week)$33KJul 5*May 31: 6 reject eventsJun 7: 9 reject eventsJun 14: 12 reject eventsJun 21: 13 reject eventsJun 28: 13 reject eventsJul 5: 13 reject events
scrap $rework $events* = partial week

Steady-volume part: 66 events in 6 wks · cost climbing +45% · scrap share rising

6Checker verifiedPlating - Nickel Out

5" PIPE-CRV STACK 439 SST NiCR · PLT

$39,244
recent half, scrap-weighted
Climbing +55% vs the prior half88% true scrap$2,671 per event
Open the full case
May 31 scrap: $2,366May 31 rework: $4,979$7KMay 31Jun 7 scrap: $13,485Jun 7 rework: $2,596$16KJun 7Jun 14 scrap: $17,520Jun 14 rework: $494$18KJun 14Jun 21 scrap: $8,061Jun 21 rework: $0$8KJun 21Jun 28 scrap: $9,270Jun 28 rework: $0$9KJun 28Jul 5 scrap: $10,661 (partial week)Jul 5 rework: $0 (partial week)$11KJul 5*May 31: 4 reject eventsJun 7: 7 reject eventsJun 14: 6 reject eventsJun 21: 3 reject eventsJun 28: 3 reject eventsJul 5: 3 reject events
scrap $rework $events* = partial week

Low-volume, high-cost part: 26 events in 6 wks · cost climbing +55% · scrap share rising

4Held for reviewPlating - Rack Mark

TUNGSTEN SPROCKET DEBUR

$75,195
recent half, scrap-weighted
Flat +11%66% true scrap$2,611 per event
Open the full case
May 31 scrap: $7,242May 31 rework: $5,191$12KMay 31Jun 7 scrap: $28,912Jun 7 rework: $3,374$32KJun 7Jun 14 scrap: $29,590Jun 14 rework: $13,364$43KJun 14Jun 21 scrap: $15,216Jun 21 rework: $11,426$27KJun 21Jun 28 scrap: $17,499Jun 28 rework: $13,139$31KJun 28Jul 5 scrap: $20,124 (partial week)Jul 5 rework: $15,110 (partial week)$35KJul 5*May 31: 6 reject eventsJun 7: 14 reject eventsJun 14: 19 reject eventsJun 21: 10 reject eventsJun 28: 10 reject eventsJul 5: 10 reject events
scrap $rework $events* = partial week

Steady-volume part: 69 events in 6 wks · cost flat · scrap share easing

5Held for reviewPlating - Rack Mark

5" PIPE-CRV STACK 439 SST NiCR · POL

$79,127
recent half, scrap-weighted
Healing -24%62% true scrap$2,717 per event
Open the full case
May 31 scrap: $23,424May 31 rework: $10,597$34KMay 31Jun 7 scrap: $18,823Jun 7 rework: $31,873$51KJun 7Jun 14 scrap: $53,155Jun 14 rework: $1,471$55KJun 14Jun 21 scrap: $16,940Jun 21 rework: $14,655$32KJun 21Jun 28 scrap: $19,481Jun 28 rework: $16,854$36KJun 28Jul 5 scrap: $15,585 (partial week)Jul 5 rework: $13,483 (partial week)$29KJul 5*May 31: 17 reject eventsJun 7: 18 reject eventsJun 14: 19 reject eventsJun 21: 11 reject eventsJun 28: 11 reject eventsJul 5: 11 reject events
scrap $rework $events* = partial week

Steady-volume part: 87 events in 6 wks · cost easing -24% · scrap share easing

7Held for reviewMaterial - Dings/Gouges/Dents

MEDALLION, BREAKOUT

$67,899
recent half, scrap-weighted
Healing -22%73% true scrap$2,608 per event
Open the full case
May 31 scrap: $34,338May 31 rework: $16,347$51KMay 31Jun 7 scrap: $21,070Jun 7 rework: $6,614$28KJun 7Jun 14 scrap: $21,079Jun 14 rework: $11,619$33KJun 14Jun 21 scrap: $19,154Jun 21 rework: $4,988$24KJun 21Jun 28 scrap: $22,027Jun 28 rework: $5,736$28KJun 28Jul 5 scrap: $17,621 (partial week)Jul 5 rework: $4,589 (partial week)$22KJul 5*May 31: 16 reject eventsJun 7: 14 reject eventsJun 14: 14 reject eventsJun 21: 9 reject eventsJun 28: 9 reject eventsJul 5: 9 reject events
scrap $rework $events* = partial week

Steady-volume part: 71 events in 6 wks · cost easing -22% · scrap share rising

8Held for reviewPolishing - Out of Round

SCREW,FLANGE,HEX HEAD

$69,258
recent half, scrap-weighted
Healing -18%87% true scrap$2,458 per event
Open the full case
May 31 scrap: $23,170May 31 rework: $6,440$30KMay 31Jun 7 scrap: $22,832Jun 7 rework: $3,331$26KJun 7Jun 14 scrap: $37,566Jun 14 rework: $4,466$42KJun 14Jun 21 scrap: $17,636Jun 21 rework: $2,338$20KJun 21Jun 28 scrap: $20,281Jun 28 rework: $2,689$23KJun 28Jul 5 scrap: $23,324 (partial week)Jul 5 rework: $3,092 (partial week)$26KJul 5*May 31: 12 reject eventsJun 7: 13 reject eventsJun 14: 16 reject eventsJun 21: 9 reject eventsJun 28: 9 reject eventsJul 5: 9 reject events
scrap $rework $events* = partial week

Steady-volume part: 68 events in 6 wks · cost easing -18% · scrap steady at 87%

0 more were folded into projects already in flight today.

The window at a glanceJun 1 to Jul 8, 2026 · numbers from the kpis table, computed in SQL
Does the tool hold up?every human verdict is stored; this is the tool grading itself against your judgment
50%
1 approved · 1 sent back
What is comingthe reject ledger crossed with the customer release schedule
$6,782,674

A projection, not a measured fact: the release schedule behind it is synthetic mock data until IT connects the real feed. Basis: each part's loss per released unit over the window behind us, times the units released for the next 92 days, rework discounted the same way on both sides. On a per-day footing that is $73,725/day projected vs $55,773/day measured over the 38-day window behind us, across all 16 parts.

Top single part: 6X108,MIT,ST(OD) CHR POL$680,302
7X60,MIT,ST(OD) CHR POLhidden: only #13 by dollars, but #3 by what is coming
2.5xits released volume vs what it has been running
Why this matters

Fixing a part before its volume lands is worth more than fixing it after. This is the window.

Python computes every number · AI maker explains · an independent AI checker verifies · a deterministic cross-check audits the checker. AI never does the math.

1
Plating - Burn
$127,166

Plating - Burn defects are climbing sharply.

First move

Pull True Cam tank parameters for the line and check rack contact / agitation on the top part numbers.

Why it matters

This part has a recent-weighted cost impact of $127,166, with a trend climbing +87%. Most of the defects are true scrap, costing $2,729 per event.

Why this confidence

The data shows a strong trend over 6 weeks with significant cost impact.

Cited numbers

$127,166 recent-weightedtrend +87%$2,729/event

Independent checker

6 weeks present, not a spike, trend +86.9%, and mostly true scrap with $188,888 scrap cost; no known-project match.

Real vs noise

pass: 6 weeks present, is_spike false, trend +86.9% is clearly worsening

Known work

clear: no exact part match and no initiative match on defect family

Over-claim audit

clean: maker cited recent-weighted ~$127,166, trend +87%, and ~$2,729/event consistent with engine

2
Assembly - Wrong Assembly
Last time (2026-07-30 03:21Z): approved · "Taking this one: polishing cell PM is scheduled, will watch tool marks on next weeks run."
$86,863

Wrong Assembly defects are increasing.

First move

Break the part's rejects down by shift and week to isolate what changed.

Why it matters

This part has a recent-weighted cost of $86,863 and a trend climbing +24%. The cost per event is $2,993.

Why this confidence

The trend is moderate over 6 weeks, indicating a potential issue.

Cited numbers

$86,863 recent-weightedtrend +24%$2,993/event

Independent checker

6 weeks present, not a spike, trend +24.4%, and no known-project match.

Real vs noise

pass: 6 weeks present, is_spike false, trend +24.4% shows worsening beyond flat noise

Known work

clear: no exact part match and no initiative match on Assembly - Wrong Assembly

Over-claim audit

clean: maker stayed within engine numbers and did not invent cause

3
Misc - Lost Parts
$86,397

Lost Parts defects are on the rise.

First move

Break the part's rejects down by shift and week to isolate what changed.

Why it matters

This part has a recent-weighted cost of $86,397, with a trend climbing +45%. The cost per event is $2,538.

Why this confidence

The trend shows a significant increase over 6 weeks.

Cited numbers

$86,397 recent-weightedtrend +45%$2,538/event

Independent checker

6 weeks present, not a spike, trend +45.1%, mostly true scrap, and no known-project match.

Real vs noise

pass: 6 weeks present, is_spike false, trend +45.1% is a real worsening signal

Known work

clear: no exact part match and no initiative match on Misc - Lost Parts

Over-claim audit

clean: maker cited supported numbers and defect only

6
Plating - Nickel Out
$39,244

Nickel Out defects are climbing.

First move

Pull True Cam tank parameters for the line and check rack contact / agitation on the top part numbers.

Why it matters

This part has a recent-weighted cost of $39,244, with a trend climbing +55%. The cost per event is $2,671.

Why this confidence

The trend is strong over 6 weeks, indicating a significant issue.

Cited numbers

$39,244 recent-weightedtrend +55%$2,671/event

Independent checker

6 weeks present, not a spike, trend +54.8%, mostly true scrap, and no known-project match.

Real vs noise

pass: 6 weeks present, is_spike false, trend +54.8% is clearly worsening

Known work

clear: no exact part match and no initiative match on Plating - Nickel Out

Over-claim audit

clean: maker numbers align with engine; canned first step may misfit Nickel Out but that is engine playbook, not maker invention

What the checker removed today, and why
TUNGSTEN SPROCKET DEBUR

Trend is only +10.5%, effectively flat per rubric, so this is steady-state loss not a clearly worsening project yet.

re-review
5" PIPE-CRV STACK 439 SST NiCR · POL

Healing trend -23.8%; not a worsening opportunity for Chris's queue.

re-review
MEDALLION, BREAKOUT

Healing trend -22.3%; not a still-worsening problem to assign now.

re-review
SCREW,FLANGE,HEX HEAD

Healing trend -18.0%; not a worsening opportunity despite the cost level.

re-review
Drafted corrective actions. A worker agent drafts the first move for the top confirmed opportunities, an independent reviewer plus a deterministic number check gate each draft, and nothing is auto-approved. You make the final call.
2 waiting on your call 1 held for fix
#1 Plating - Burn
Ready for your review

Likely root cause

Check for improper tank parameters or agitation issues causing burn defects.

First move

Pull True Cam tank parameters for the line and check rack contact / agitation on the top part numbers.

Data to pull to confirm

  • Tank parameters for the plating line
  • Agitation settings
  • Rack contact points
Plating line engineer $127,166 recent-weighted

Independent reviewer

Root cause fits Plating - Burn, first step is concrete for a plating engineer, and cited figures match engine values after rounding ($127,166 recent-weighted, +86.88%, $2,729/event).

Root cause

pass

First step

pass

Numbers

pass

Gate: reviewer approved and every number matched the engine

Why? (one tap, optional)
Send back = "already looked at that, not one." The next run skips it and drafts the next best.
#3 Misc - Lost Parts
Held: needs a fix

Likely root cause

Investigate shifts and weeks to identify changes leading to lost parts.

First move

Break the part's rejects down by shift and week to isolate what changed.

Data to pull to confirm

  • Reject data by shift
  • Reject data by week
  • Production changes during the period
Production supervisor $86,397 recent-weighted

Independent reviewer

Lost Parts root cause is too vague and the first step is analysis-only; replace with a specific containment action tied to part handling/custody while keeping engine-matched numbers ($86,397, +45.13%, $2,538/event).

Root cause

Concern: 'identify changes' does not state a plausible handling/custody root cause for Misc - Lost Parts.

First step

Concern: 'Break the part's rejects down by shift and week' is diagnostic analysis, not a concrete containment move Chris can assign today.

Numbers

pass

Gate: reviewer: Lost Parts root cause is too vague and the first step is analysis-only; replace with a specific containment action tied to part handling/custody while keeping engine-matched numbers ($86,397, +45.13%, $2,538/event).

Why? (one tap, optional)
Send back = "already looked at that, not one." The next run skips it and drafts the next best.
#6 Plating - Nickel Out
Ready for your review

Likely root cause

Assess tank parameters and agitation to address nickel out defects.

First move

Pull True Cam tank parameters for the line and check rack contact / agitation on the top part numbers.

Data to pull to confirm

  • Tank parameters for the plating line
  • Agitation settings
  • Rack contact points
Plating line engineer $39,244 recent-weighted

Independent reviewer

Root cause fits Plating - Nickel Out, first step is concrete for plating, and cited figures match engine values after rounding ($39,244 recent-weighted, +54.82%, $2,671/event).

Root cause

pass

First step

pass

Numbers

pass

Gate: reviewer approved and every number matched the engine

Why? (one tap, optional)
Send back = "already looked at that, not one." The next run skips it and drafts the next best.
Your decisions so farevery verdict is stored with a timestamp · a sent-back part stays out of future drafting, so this ledger is its paper trail
Approved4" PIPE-CRV STACK 439SST NiCRrun #4 · 2026-07-30 03:21Z
Sent backTUNGSTEN SPROCKET DEBURrun #3 · 2026-07-30 02:38Z

Pareto: where the coded loss lives

No single villain: the top two families carry only 11% and it takes 8 families to reach half the coded dollars. A spread this even points at process discipline, not one bad machine. Red line = cumulative share.

$39K$78K$117K$156KPlating - Rack Mark: $156,130Rack Mark$156KPolishing - Weld Seam: $121,257Weld Seam$121KPlating - Burn: $107,707Burn$108KPolishing - Tool Marks: $104,514Tool Marks$105KPolishing - Out of Round: $103,300Out of Round$103KPlating - Wrong Process: $100,444Wrong Process$100KPaint - Scratches/Dings/Gouges: $84,728Paint - Scratc$85KAll other families: $1,699,723All other$1.70Mcumulative 6%6%cumulative 11%11%cumulative 16%cumulative 20%cumulative 24%cumulative 28%cumulative 31%cumulative 100%100%

Week by week: scrap vs rework

Worst week is Jun 14 at $570K. True scrap is 76% of every week's loss.

$285K$570KMay 31 scrap: $315,770May 31 rework: $121,671$437KMay 31Jun 7 scrap: $390,313Jun 7 rework: $111,342$502KJun 7Jun 14 scrap: $456,195Jun 14 rework: $113,824$570KJun 14Jun 21 scrap: $226,361Jun 21 rework: $81,511$308KJun 21Jun 28 scrap: $247,395Jun 28 rework: $86,631$334KJun 28Jul 5 scrap: $244,378Jul 5 rework: $82,411$327KJul 5
True scrap (gone) Rework (recoverable)

Top parts by recent pull

The four queue parts pull $376K of the recent window. Green tag = survived the checker.

10G CARBON STEEL 120" X 30"in queue $127,166
4" PIPE-CRV STACK 439SST NiCRin queue $86,863
6X108,MIT,ST(OD) CHR POLin queue $86,397
TUNGSTEN SPROCKET DEBUR $75,195
5" PIPE-CRV STACK 439 SST NiCR · POL $79,127
5" PIPE-CRV STACK 439 SST NiCR · PLTin queue $39,244
MEDALLION, BREAKOUT $67,899
SCREW,FLANGE,HEX HEAD $69,258
The exact tabledbo.reject_lines · production rejects only (inventory adjustments held out) · newest first

What is not in this table: 273 inventory-adjustment rows worth $661,941 were held out of every number on this portal. They post to the same ledger but carry a reason code instead of a defect code, because they are stock corrections rather than production defects. Scoring them would rank inventory write-offs as quality problems.

Costs post negative in the export; the metrics above and the SQL both use absolute values. Click any column header to sort. The excluded / ignore-exception rows (currently 0) never enter any calculation.

KPI registrycomputed inside Azure SQL by the scheduled job · these are the numbers the portal shows

Each number: its stored value, the plain-English formula, and the exact SQL that produced it. Anyone can rerun the SQL and get the same answer. Nothing here comes from the AI; the maker and checker only ever receive these computed values.

Total reject cost, rolling window$2,477,803

Sum of the absolute value of reject_cost across scored rows in the rolling analysis window (last 8 weeks back from the newest row; production rejects only, inventory adjustments and incomplete rows held out). Costs post negative in the ledger, so we take absolute values.

Show the SQL
SELECT ISNULL(SUM(ABS(reject_cost)), 0) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output'))
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
True scrap cost (unrecoverable)$1,880,412

Sum of absolute reject_cost where item_type = 'Non-Rework'. Scrap means the part is gone.

Show the SQL
SELECT ISNULL(SUM(ABS(reject_cost)), 0) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output')) AND LOWER(LTRIM(RTRIM(item_type))) = 'non-rework'
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Rework cost (recoverable)$597,390

Sum of absolute reject_cost where item_type is anything other than 'Non-Rework'.

Show the SQL
SELECT ISNULL(SUM(ABS(reject_cost)), 0) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output')) AND LOWER(LTRIM(RTRIM(item_type))) <> 'non-rework'
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Scrap share of all loss75.9%

True scrap cost divided by total reject cost, times 100. Computed in one SQL statement.

Show the SQL
SELECT 100.0 * SUM(CASE WHEN LOWER(LTRIM(RTRIM(item_type))) = 'non-rework' THEN ABS(reject_cost) ELSE 0 END) / NULLIF(SUM(ABS(reject_cost)), 0) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output'))
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Reject events, rolling window981

Count of active rows that have both a posting date and a cost, the same rows the engine analyzes.

Show the SQL
SELECT COUNT(*) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output'))
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Average cost per reject event$2,526

Total reject cost divided by total events, in one SQL statement.

Show the SQL
SELECT SUM(ABS(reject_cost)) / NULLIF(COUNT(*), 0) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output'))
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Worst week2026-06-14$570,019

Group scored production rows by the export's week_of column, sum absolute reject_cost, take the biggest. Detail carries which week it was.

Show the SQL
SELECT TOP 1 SUM(ABS(reject_cost)) AS value, CONVERT(varchar(10), week_of, 23) AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output')) GROUP BY week_of ORDER BY SUM(ABS(reject_cost)) DESC
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Biggest coded defect familyPlating - Rack Mark$156,130

Group coded rows (not uncoded) by defect_description, sum absolute reject_cost, take the biggest. Detail carries the family name.

Show the SQL
SELECT TOP 1 SUM(ABS(reject_cost)) AS value, defect_description AS detail FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output' AND posting_date > DATEADD(week, -8, (SELECT MAX(posting_date) FROM dbo.reject_lines WHERE excluded = 0 AND posting_date IS NOT NULL AND reject_cost IS NOT NULL AND LOWER(LTRIM(RTRIM(entry_type))) = 'prod. output')) AND NOT (defect_code IS NULL OR LOWER(LTRIM(RTRIM(ISNULL(defect_description, '')))) IN ('', 'no code selected')) GROUP BY defect_description ORDER BY SUM(ABS(reject_cost)) DESC
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Active ledger rows1,254

Count of rows where the ignore-exception flag is off (excluded = 0).

Show the SQL
SELECT COUNT(*) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 0
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Rows excluded by the ignore-exception flag0

Count of rows a human flagged out of the math (excluded = 1), IT's centralized-adjustment pattern.

Show the SQL
SELECT COUNT(*) AS value, NULL AS detail FROM dbo.reject_lines WHERE excluded = 1
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Tool picks approved first time1 approved / 1 sent back50.0%

Of every drafted action a human has ruled on, the share that was APPROVED as-is (versus SENT_BACK). The evals number: it measures whether the tool's picks hold up once a person judges them. NULL until the first human decision lands.

Show the SQL
SELECT 100.0 * SUM(CASE WHEN status = 'APPROVED' THEN 1 ELSE 0 END) / NULLIF(SUM(CASE WHEN status IN ('APPROVED', 'SENT_BACK') THEN 1 ELSE 0 END), 0) AS value, CONCAT(SUM(CASE WHEN status = 'APPROVED' THEN 1 ELSE 0 END), ' approved / ', SUM(CASE WHEN status = 'SENT_BACK' THEN 1 ELSE 0 END), ' sent back') AS detail FROM dbo.opportunity_queue
computed 2026-07-30 04:00Z by run_pipeline.py · stored in dbo.kpis
Rank the board by and you chase what already hurt. Rank it by (recent pull × direction of travel × cost intensity × , with a ) and the list reorders itself. Click any row to see exactly why it ranks where it does.
By raw dollars · the gut list
By evidence · what is worsening
By what is coming · top 8 of 16

Three readings of the same plant. Dollars look backward at totals, evidence looks at direction of travel, and the third column multiplies how sick each part is per unit by the volume your customers have already released. A part that is quiet in the first two and loud in the third is the one worth catching early.

Other ways to cut the same datathe identical four-move score, grouped by something other than the part

A part-by-part ranking cannot see a problem that belongs to a place, a customer, or a person. Same math, different grouping.

Location · 6 distinct · where it is happening
PORTCITY +22% $172,559
AIRPARK -8% $171,290
NCP -4% $147,567
ELITEFIN -16% $144,643
LDC -56% $162,431
INVENTORY -61% $84,539
Customer · 15 distinct · whose parts are failing
PETE01 +99% $135,313
CUMM10 +54% $88,106
LIMN10 -14% $65,060
DAIM10 +5% $73,091
HDPA10 -23% $80,163
TAB10 -24% $61,519
Responsibility · 18 distinct · who owns the defect
23 +54% $85,402
310 +14% $75,414
55 -3% $69,508
345 +32% $71,589
49 +35% $57,494
SHIPRCV +8% $53,517
Defect family · 37 distinct · what is going wrong
Misc - Lost Parts +127% $50,085
Plating - Burn +70% $56,724
Plating - Rack Mark +52% $75,075
Assembly - Handling Damage +127% $46,711
Assembly - Fitment +117% $37,555
Plating - Contamination +41% $44,443

Hover a row to trace where it moves. The emerald line is 6X108,MIT,ST(OD) CHR POL jumping #7 → #3; the rose row is 5" PIPE-CRV STACK 439 SST NiCR · POL healing on its own and dropping off the chase list.

How the data flows

the tool never reaches into the ERP
Navision exportthe reject board, as-is
Push flowPower Automate or similar, IT-owned
Azure SQLreject_lines · known_projects · runs
Python engineall math, tested
Maker + checker AIexplain, then verify
Portal + APIthis page · /api/queue

Built to the pattern IT described

alignment conversation, July 14

Data is pushed, never pulled

"It has to be a push from the current ERP now, and in the future place, whenever the change happens. Whether it is Power Automate or something that integrates some flows to push some data."

Built: reject_lines is a landing table with the exact reject-board export columns. The tool holds no connection into Navision, and an ERP change later does not touch it: the push flow just points at the same table.

One centralized place, with an ignore-exception box

"Push the raw data into one centralized place, and they make their adjustments in the same centralized place. If they make some exceptions, maybe they check a box, like ignore exception, and then you can work off of that."

Built: every row carries an excluded flag plus a note, right next to the raw data. The engine computes only on rows where excluded = 0. The adjustment pattern IT described is the schema.

The parallel pilot, human vs tool

"Somebody works on it how they would do it manually, the normal process, and then you do the same thing with the tool and compare results, whether the tool is the same or better."

Built: the Gut vs evidence view is that comparison for ranking, and every daily output is stored in the runs table, so tool-vs-manual can be scored over weeks, not argued over anecdotes.

Tenant migration stays small

"We have an Azure tenant that we use minimally right now. It is a matter of just maybe setting you up by giving you some permissions there. The costs that you have shown were very minimal."

Built: everything lives in one resource group. Migration = recreate the three tables in the tenant, point the push flow at them, and swap config to Entra identities. No hardcoded keys anywhere, and the database pauses itself when idle.

Tenant target, four layers

what lifts where
1 · DataAzure SQL as the single source of truth. This page's numbers come from it right now.BUILT · LIVE
2 · OrchestrationPlain Python engine + maker/checker agents, fully tested. Containerizes into Foundry Agent Service (bring your own code); auth swaps to Microsoft Entra managed identity with zero logic changes.READY TO LIFT
3 · Distribution/api/queue serves the verified queue as clean JSON. Register it as a Copilot Studio action and the queue and approvals land inside Microsoft Teams.ENDPOINT LIVE
4 · GovernanceMock data only until inside the tenant. There, DLP, access control, and data boundaries are inherited from the enterprise environment.TENANT PHASE

What we ask IT for

four things, all small
Permissions in the Lincoln Azure tenant (the setup already discussed).
A target resource group to receive the same three-table setup.
A push flow (Power Automate) from the reject-board export into reject_lines. The columns already match one for one.
Entra identities for the app and database, replacing the prototype's config keys.