"""Synthetic frozen report comparison, using integer pence throughout."""
ORDERS=[
 {'id':'O1','date':'2025-06-20','state':'confirmed','pence':10000},
 {'id':'O2','date':'2025-06-20','state':'cancelled','pence':4000},
 {'id':'O3','date':'2025-06-20','state':'confirmed','pence':4000},
 {'id':'O4','date':'2025-06-20','state':'confirmed','pence':6000},
 {'id':'O5','date':'2025-06-21','state':'confirmed','pence':3000},
 {'id':'O6','date':'2025-06-20','state':'pending','pence':5000},
]
OLD={'O1':10000,'O2':4000,'O4':6000}
def candidate(orders):
 return {r['id']:r['pence'] for r in orders if r['date']=='2025-06-20' and r['state']=='confirmed'}
def differences(left,right):
 out=[]
 for k in sorted(left.keys()|right.keys()):
  if k not in left:out.append((k,'missing from old',None,right[k]))
  elif k not in right:out.append((k,'extra in old',left[k],None))
  elif left[k]!=right[k]:out.append((k,'amount differs',left[k],right[k]))
 return out
if __name__=='__main__':
 new=candidate(ORDERS);d=differences(OLD,new)
 assert sum(OLD.values())==sum(new.values())==20000
 assert set(OLD)!=set(new)
 assert d==[('O2','extra in old',4000,None),('O3','missing from old',None,4000)]
 assert differences(new,new)==[]
 print('Old total: GBP200.00; candidate total: GBP200.00')
 for row in d:print(row)
 print('4/4 assertions passed. These are invented teaching records, not sales results.')
