import json,math
from pathlib import Path
p=Path('work/jobs-followup/20261023');b=p/'bundle2';o=p/'rerun2/results';checks=[]
def get(root,path):
 parts=path.split('.');v=json.loads((root/(parts.pop(0)+'.json')).read_text())
 for part in parts:v=v[int(part)] if isinstance(v,list) else v[part]
 return v
for c in json.loads((b/'claims.json').read_text()):
 for e in c['evidence']:
  a=get(b/'results',e['result']);v=get(o,e['result']);tol=e.get('tolerance',0)
  ok=(a==v) or (isinstance(a,(int,float)) and not isinstance(a,bool) and isinstance(v,(int,float)) and abs(a-v)<=tol)
  checks.append({'claim':c['local_id'],'result':e['result'],'expected':a,'observed':v,'tolerance':tol,'pass':ok})
(p/'checks2.json').write_text(json.dumps(checks,indent=2));print('Evidence checks',len(checks),'passed',sum(x['pass'] for x in checks))
print('JSON equality',{f.name:json.loads(f.read_text())==json.loads((o/f.name).read_text()) for f in (b/'results').glob('*.json')})
# Read every text file for screening; summarize only fields relevant to privacy/copyright inspection.
long=[];susp=[]
for f in b.rglob('*'):
 if not f.is_file():continue
 s=f.read_text()
 if f.suffix=='.json':
  def walk(v,path=''):
   if isinstance(v,dict):
    for k,x in v.items():
     if any(t in k.lower() for t in ['email','address','password','secret','patient_id']):susp.append((str(f.relative_to(b)),path+'.'+k))
     walk(x,path+'.'+k)
   elif isinstance(v,list):
    for i,x in enumerate(v):walk(x,path+f'[{i}]')
   elif isinstance(v,str) and len(v)>2000:long.append((str(f.relative_to(b)),path,len(v)))
  walk(json.loads(s))
print('Potential private-data keys',susp,'Long text fields',long)
