Method
Match on campaign name. Subtract spend and ROAS. Band each row. Pack dispute dollars for AP holdback.
Spend gap
Per row: agency_spend − mmp_spend. Absolute value feeds materiality and the dispute sum.
ROAS gap
Per row: agency_roas − mmp_roas. Shown next to spend so you see both fights in one place.
Bands
ok: absolute spend gap under the material floor (default $500).
noise: gap clears the floor, but stays at or under the noise % of max(agency, mmp) spend (default 12%).
dispute: material and above that percentage. Dispute $ is the sum of absolute spend gaps on dispute-band rows only.
And if you want the invoice-week version of this in plain English, read Noise vs dispute.