#!/usr/bin/env python3 import argparse, html, json from pathlib import Path TEMPLATE = r''' Revisione correzioni EPUB

Revisione correzioni EPUB

''' def main(): p=argparse.ArgumentParser();p.add_argument('report',type=Path);p.add_argument('--output',type=Path,default=Path('reports/review.html'));a=p.parse_args() data=json.loads(a.report.read_text(encoding='utf-8')); selected=[] for i,x in enumerate(data.get('groups',[])): if x.get('decision') not in {'AUTO_APPLY','REVIEW_HIGH','REVIEW_AMBIGUOUS'}: continue best=x.get('best_proposal'); prob=x.get('best_probability') if not best or prob is None: continue selected.append({'id':f'c{i:05d}','decision':x.get('decision'),'rule':x.get('rule',''),'file':x.get('file',''),'paragraph':x.get('paragraph',0),'offset':x.get('offset',0),'original':x.get('original',''),'proposal':best,'probability':float(prob),'margin':x.get('margin'),'context':x.get('context',''),'alternatives':[z for z in x.get('alternatives',[]) if z.get('scored')]}) selected.sort(key=lambda x:(0 if x['decision']=='AUTO_APPLY' else 1 if x['decision']=='REVIEW_HIGH' else 2,-x['probability'])) payload=json.dumps({'source':str(a.report),'items':selected},ensure_ascii=False).replace('