"""Inventory final tables, plots, and slide-ready notes.""" from __future__ import annotations import csv from dataclasses import asdict from pathlib import Path from .models import FinalExperimentReport,PresentationAsset class PresentationAssetsBuilder: def build(self,report:FinalExperimentReport,analysis:Path)->list[PresentationAsset]: assets=[PresentationAsset("table_summary","table","条件別主要結果","final_experiment_report_summary.csv","有効人数、反応率、反応時間、Yaw","結果")] for i,p in enumerate(sorted((analysis/"plots").glob("*.png")),1):assets.append(PresentationAsset(f"figure_{i}","figure",p.stem,str(p),"Phase 8生成図","結果")) return assets def export(self,assets:list[PresentationAsset],md:Path,csv_path:Path)->list[Path]: md.parent.mkdir(parents=True,exist_ok=True);md.write_text("# 発表用成果物\n\n## スライド構成\n研究目的 → システム → 条件 → 結果 → 除外・品質 → 制約 → 今後\n\n"+"\n".join(f"- {a.asset_type}: [{a.title}]({a.file_path}) — {a.description}" for a in assets)+"\n\n統計的有意差は因果関係を直接証明しない。\n",encoding="utf-8") fields=["asset_id","asset_type","title","file_path","description","suggested_slide"] with csv_path.open("w",encoding="utf-8-sig",newline="") as f:w=csv.DictWriter(f,fieldnames=fields);w.writeheader();w.writerows(asdict(a) for a in assets) return [md,csv_path]