# 月次レポート生成モジュール

チャットボットの月次運用レポートをHTML/PDF形式で生成するモジュール。

## 概要

- **入力**: SQLiteデータベース（会話ログ、フィードバック）
- **出力**: HTML形式のレポート（PDF変換対応）
- **技術**: Jinja2テンプレート、Chart.js、WeasyPrint

## 実行方法

```bash
cd reports

# 基本（HTMLのみ）
python main.py --year 2026 --month 1 --html

# PDFのみ
python main.py --year 2026 --month 1 --pdf

# LLM分析コメント付き
python main.py --year 2026 --month 1 --html --llm

# LLM分析を無効化
python main.py --year 2026 --month 1 --html --no-llm
```

## レポート構成（6ページ）

| # | ページ | 内容 |
|---|--------|------|
| 1 | サマリー | 4 KPI（総会話数、自動解決率、ユニークユーザー数、推定削減コスト）、前月比較表 |
| 2 | 利用状況（概要） | 日別回答統計グラフ、前月比較グラフ |
| 3 | 問い合わせ傾向 | Q&Aランキング TOP10、回答可否円グラフ |
| 4 | キーワード分析 | 頻出キーワード、未解決キーワード |
| 5 | 改善が必要な項目 | A. 回答できなかった質問、B. 低評価を受けた回答 |
| 6 | 指標の見方 | 用語説明、目標値 |

## ディレクトリ構成

```
reports/
├── main.py                 # エントリーポイント
├── config.py               # 設定ファイル
├── core/
│   ├── database.py         # データベースアクセス
│   ├── aggregator.py       # データ集計
│   ├── html_generator.py   # HTML生成
│   ├── llm_analyzer.py     # LLM分析
│   └── pdf_generator.py    # PDF生成（ReportLab版、非推奨）
├── templates/
│   ├── report.html         # メインテンプレート
│   ├── report_standalone.html  # スタンドアロン版
│   └── components/         # セクション別テンプレート
│       ├── _cover.html
│       ├── _summary.html
│       ├── _usage_overview.html
│       ├── _inquiry_trends.html
│       ├── _keywords.html
│       ├── _improvement.html
│       └── _glossary.html
├── static/
│   ├── css/report.css      # スタイル
│   └── js/charts.js        # Chart.js設定
└── output/                 # 生成ファイル出力先
```

## 設定ファイル（config.py）

### 基本設定

| 設定 | デフォルト値 | 説明 |
|------|-------------|------|
| `OUTPUT_DIR` | `./output` | 出力ディレクトリ |
| `LLM_ANALYSIS_ENABLED` | `False` | LLM分析のデフォルト有効/無効 |

### OpenAI設定（LLM分析用）

| 設定 | デフォルト値 | 説明 |
|------|-------------|------|
| `OPENAI_API_KEY` | 環境変数から取得 | OpenAI APIキー |
| `OPENAI_MODEL` | `gpt-5-mini-2025-08-07` | 使用モデル |
| `OPENAI_TEMPERATURE` | `0.3` | 生成の多様性（0-1） |
| `OPENAI_MAX_TOKENS` | `5000` | 最大トークン数 |

### コスト計算設定

| 設定 | デフォルト値 | 説明 |
|------|-------------|------|
| `ESTIMATED_HANDLE_TIME_MINUTES` | `10` | 1件あたりの想定対応時間（分） |
| `HOURLY_COST` | `3000` | 時給（円） |

## LLM分析プロンプト仕様

`--llm` オプション使用時、各セクションに「所見」コメントが追加されます。

### セクション別プロンプト

| セクション | 分析対象 | 指示内容 | 出力量 |
|-----------|---------|---------|--------|
| `summary` | 月次サマリーデータ | 全体傾向と前月比の変化を評価。良い点と注意点を指摘 | 2-3文 |
| `usage_overview` | 日別推移、セッション統計 | ピーク日/ボトム日の特定、利用傾向をコメント | 2-3文 |
| `quality` | 解決率、満足度、低評価傾向 | 品質改善のポイントを指摘 | 2-3文 |
| `keywords` | 頻出/未解決キーワード | ユーザーの関心事や未対応領域を分析 | 2-3文 |
| `improvement` | 回答できなかった質問一覧 | 改善優先度が高いトピック、Q&A追加提案 | 2-3文 + Q&A候補1-2件 |

### プロンプト例（improvement）

```
あなたは治験チャットボットの運用アナリストです。
以下の回答できなかった質問一覧を分析し、
改善優先度が高いトピックや具体的なQ&A追加提案を簡潔にコメントしてください。

データ:
{data}

分析コメントを2-3文で日本語で記載してください。具体的なQ&A追加候補があれば1-2件提案してください。
```

### 出力例

```html
<div class="analysis-box">
    <div class="label">所見</div>
    <div class="content">
        今回の未回答質問の中で、特に「海外からの治験参加」に関する質問が
        複数見られます。このトピックは改善優先度が高いと考えられるため、
        海外在住者の参加条件や手続きに関するQ&Aを追加することをお勧めします。

        具体的なQ&A追加候補:
        1. 「海外在住ですが、治験に参加することはできますか？」
        2. 「治験の安全性はどのように確保されていますか？」
    </div>
</div>
```

### プロンプトのカスタマイズ

より詳細な分析が必要な場合は、`core/llm_analyzer.py` の `SECTION_PROMPTS` を編集してください。

```python
# 例: 5-6文に増やす場合
'summary': """あなたは治験チャットボットの運用アナリストです。
以下の月次サマリーデータを分析し、全体傾向と前月比の変化について
詳細に評価してください。良い点と注意が必要な点があれば両方指摘してください。

データ:
{data}

分析コメントを5-6文で日本語で記載してください。""",
```

## グラフ一覧（Chart.js）

| グラフID | 種類 | 内容 |
|---------|------|------|
| `dailyChart` | 棒グラフ+折れ線 | 日別回答統計（回答できた/できなかった/総会話数） |
| `comparisonChart` | 棒グラフ | 前月比較（5指標） |
| `qaUsageChart` | 横棒グラフ | よく参照されるQ&A TOP10 |
| `resolutionPieChart` | ドーナツ | 回答可否の割合 |
| `keywordsChart` | 横棒グラフ | 頻出キーワード TOP10 |
| `unresolvedKeywordsChart` | 横棒グラフ | 未解決キーワード TOP10 |

## 依存パッケージ

```
jinja2>=3.0
weasyprint>=60.0  # PDF生成用
openai>=1.0       # LLM分析用（オプション）
```

## トラブルシューティング

### LLM分析が動作しない

1. `OPENAI_API_KEY` が設定されているか確認
2. `openai` パッケージがインストールされているか確認: `pip install openai`
3. APIキーの有効性を確認

### グラフが表示されない

1. Chart.js CDNへのアクセスを確認
2. ブラウザのコンソールでエラーを確認
3. `chartData` オブジェクトにデータが含まれているか確認

### PDF生成エラー

WeasyPrintはGTK依存があるため、Windowsでは追加設定が必要な場合があります。
詳細: https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation
