import json, sys
sys.path.insert(0, '/tmp/claude-1000/-var-www-html-peta/310517d2-8f28-442b-9907-0e3560add2cb/scratchpad')
from vrest03_decisions import DEC
inp = '/var/www/html/peta/storage/app/propertylab-catalogue-match/review/v_rest_03_in.jsonl'
out = '/var/www/html/peta/storage/app/propertylab-catalogue-match/review/v_rest_03_out.jsonl'
cases = [json.loads(l) for l in open(inp)]
ids = [c['case'] for c in cases]
errs = []
assert len(ids) == len(set(ids)), 'duplicate input ids'
extra = set(DEC) - set(ids)
missing = set(ids) - set(DEC)
if extra: errs.append(f'extra decisions: {sorted(extra)}')
if missing: errs.append(f'missing decisions: {sorted(missing)}')
lines = []
for c in cases:
    cid = c['case']
    if cid not in DEC: continue
    v, cand, conf, rel, reason, web = DEC[cid]
    ks = {k['k'] for k in c['catalogue_candidates']}
    if v not in ('SAME', 'PART_OF', 'DIFFERENT', 'UNSURE'): errs.append(f'{cid} bad verdict')
    if v in ('SAME', 'PART_OF') and cand is None: errs.append(f'{cid} needs cand')
    if v == 'DIFFERENT' and cand is not None: errs.append(f'{cid} DIFFERENT with cand')
    if cand is not None and cand not in ks: errs.append(f'{cid} cand {cand} not in {ks}')
    if v == 'PART_OF' and rel not in ('R_in_C', 'C_in_R'): errs.append(f'{cid} PART_OF needs relation')
    if v != 'PART_OF' and rel is not None: errs.append(f'{cid} relation on non-PART_OF')
    if not (0 <= conf <= 100): errs.append(f'{cid} conf range')
    nw = len(reason.split())
    if nw > 20: errs.append(f'{cid} reason {nw} words')
    lines.append(json.dumps({'case': cid, 'verdict': v, 'cand': cand, 'confidence_pct': conf,
                             'relation': rel, 'reason': reason, 'web': web}, ensure_ascii=False))
if errs:
    print('\n'.join(errs)); sys.exit(1)
with open(out, 'w') as f:
    f.write('\n'.join(lines) + '\n')
from collections import Counter
vc = Counter(DEC[i][0] for i in ids)
print('written', len(lines), 'lines')
print('verdicts', dict(vc))
print('conf>=90', sum(1 for i in ids if DEC[i][2] >= 90))
print('conf>=90 by verdict', dict(Counter(DEC[i][0] for i in ids if DEC[i][2] >= 90)))
print('web cases', sum(1 for i in ids if DEC[i][5]))
