"""BR-69: observed meeting feedback against frozen prescreen results, never training.""" from datetime import datetime from services import assistant_store as store def time(value): try: stamp=datetime.fromisoformat(str(value).replace('Z','+00:00')) return stamp.timestamp() if stamp.tzinfo else None except (ValueError,TypeError): return None def summarize(db,project_id): outcomes=store.listing(db,'review_outcome',project_id) runs=store.listing(db,'run',project_id) views={r['id']:r for r in store.listing(db,'prescreen_run',project_id)} replaced={o['supersedes_id'] for o in outcomes if o.get('supersedes_id')} active=[o for o in outcomes if o['id'] not in replaced] groups={} for row in active: groups.setdefault(row.get('reviewed_snapshot_id'),[]).append(row) rows,excluded=[],[] for outcome in outcomes: reason=None snapshot=outcome.get('reviewed_snapshot_id') if outcome['id'] in replaced: reason='旧结果已被更正' elif not snapshot or outcome.get('status')!='matched': reason='未匹配材料版本' elif len(groups[snapshot])!=1: reason='同一材料版本存在多个当前结果,需明确更正关系' elif outcome.get('label') not in (True,False) or outcome.get('label') is None: reason='结果未映射或不是通过/否决' meeting=time(outcome.get('occurred_at')) candidates=[r for r in runs if r.get('input_snapshot_id')==snapshot and r.get('status')=='completed' and r['id'] in views and meeting is not None and time(r.get('ended_at')) is not None and time(r['ended_at'])