#!/usr/bin/env python3
"""Generate final QA summary after full document reprocessing."""
from __future__ import annotations
import json, sqlite3
from datetime import datetime
from pathlib import Path
BASE=Path.home()/'.hermes/assets/Gesundheit'; DB=BASE/'health_data.db'; REPORTS=BASE/'reports'
con=sqlite3.connect(DB); con.row_factory=sqlite3.Row
q=lambda s: [dict(r) for r in con.execute(s)]
summary={
 'generated_at': datetime.now().isoformat(timespec='seconds'),
 'documents_total': con.execute('select count(*) from dokumente').fetchone()[0],
 'documents_without_searchable_text': con.execute("select count(*) from dokumente where length(coalesce(extrahierte_inhalte,''))<100 and coalesce(review_status,'')!='duplicate_candidate'").fetchone()[0],
 'documents_without_text_including_duplicates': con.execute("select count(*) from dokumente where length(coalesce(extrahierte_inhalte,''))<100").fetchone()[0],
 'status_distribution': q('select status,count(*) n from dokumente group by status order by status'),
 'category_distribution': q('select kategorie,count(*) n from dokumente group by kategorie order by n desc'),
 'quality_distribution': q('select processing_quality,count(*) n from dokumente group by processing_quality order by n desc'),
 'review_distribution': q('select review_status,count(*) n from dokumente group by review_status order by n desc'),
 'duplicate_candidates': q("select id,datei_name,datei_hash,processing_quality from dokumente where review_status='duplicate_candidate' order by datei_name,id"),
 'needs_review': q("select id,datei_name,kategorie,processing_quality,review_status,length(coalesce(extrahierte_inhalte,'')) text_len,local_original_path from dokumente where (length(coalesce(extrahierte_inhalte,''))<500 or processing_quality like '%missing%' or processing_quality like '%weak%') and coalesce(review_status,'')!='duplicate_candidate' order by id"),
 'lab_values': q("select validierungsstatus,count(*) n,count(dokument_id) linked_to_original_pdf from laborwerte group by validierungsstatus"),
 'validated_lab_values_by_date': q("select abnahme_datum,count(*) n,count(dokument_id) linked_to_original_pdf from laborwerte where validierungsstatus='validiert' group by abnahme_datum order by abnahme_datum"),
 'report_artifacts': {
   'dashboard':'/home/agent/.hermes/assets/Gesundheit/reports/health_dashboard.html',
   'current_labs':'/home/agent/.hermes/assets/Gesundheit/reports/aktuelle_blutwerte.xlsx',
   'linkage_summary':'/home/agent/.hermes/assets/Gesundheit/reports/lab_document_linkage_summary.md',
 }
}
json_path=REPORTS/f'health_data_quality_after_full_reprocess_{datetime.now():%Y%m%d_%H%M%S}.json'
json_path.write_text(json.dumps(summary,ensure_ascii=False,indent=2),encoding='utf-8')
md=REPORTS/'health_data_quality_after_full_reprocess.md'
lines=['# Health Data Quality — nach Vollverarbeitung','',f"Generiert: {summary['generated_at']}",'',f"Dokumente total: {summary['documents_total']}",f"Ohne durchsuchbaren Text (ohne Duplikate): {summary['documents_without_searchable_text']}",f"Ohne Text inkl. Duplikate: {summary['documents_without_text_including_duplicates']}",'','## Qualität']
for r in summary['quality_distribution']: lines.append(f"- {r['processing_quality']}: {r['n']}")
lines += ['','## Laborwerte']
for r in summary['lab_values']: lines.append(f"- {r['validierungsstatus']}: {r['n']} Werte, davon {r['linked_to_original_pdf']} mit Original-PDF-Link")
lines += ['','## Noch zu prüfen']
for r in summary['needs_review']: lines.append(f"- #{r['id']} {r['datei_name']} — {r['processing_quality']}, Textlänge {r['text_len']}")
lines += ['','## Duplikat-Kandidaten']
for r in summary['duplicate_candidates'][:40]: lines.append(f"- #{r['id']} {r['datei_name']} — {r['processing_quality']}")
md.write_text('\n'.join(lines)+'\n',encoding='utf-8')
print(json.dumps(summary,ensure_ascii=False))
print(json_path)
print(md)
