| 研修計画名 ▲ | 法人名 | 事業所名 | 集計対象期間 | 発行数(合計) ▼ | 今月発行数 | 前年比 |
|---|---|---|---|---|---|---|
| 2026年度 必須研修計画(認知症ケア) | 社会福祉法人◯◯会 | ◯◯デイサービス | 2026-04-01〜2027-03-31 | 842 | 78 | +12% |
| 2026年度 感染症対策研修計画 | 社会福祉法人◯◯会 | ◯◯デイサービス | 2026-04-01〜2027-03-31 | 718 | 65 | +8% |
| 介護技術向上プログラム | 医療法人△△グループ | △△グループホーム | 2026-04-01〜2027-03-31 | 1,230 | 112 | +21% |
| 新人職員育成研修計画 2026 | 医療法人△△グループ | △△リハビリテーション病院 | 2026-04-01〜2027-03-31 | 304 | 28 | -3% |
| 2026年度 必須研修計画(認知症ケア) | 特定非営利活動法人◇◇ | ◇◇訪問介護ステーション | 2026-04-01〜2027-03-31 | 496 | 43 | +5% |
| リーダー職員マネジメント研修 | 社会福祉法人◯◯会 | ◯◯グループホーム 春 | 2026-04-01〜2027-03-31 | 182 | 16 | ±0% |
| 虐待防止・権利擁護研修計画 | 医療法人△△グループ | △△グループホーム | 2026-04-01〜2027-03-31 | 623 | 57 | +15% |
| 2026年度 感染症対策研修計画 | 特定非営利活動法人◇◇ | ◇◇共同生活援助事業所 | 2026-04-01〜2027-03-31 | 389 | 35 | -7% |
| 合計(表示中 8件) | 4,784 | 434 | ||||
カスタムメニューページとして `add_submenu_page()` で「受講履歴・分析」配下に「修了証集計」を登録する(スラッグ: `lms-completion-stats`)。一覧表示は `WP_List_Table` を継承した `LMS_Completion_Stats_Table` クラスで実装。集計データはカスタムテーブル `lms_completion_certificates` をSQLで集約し、法人・事業所・研修計画を軸にグルーピングして表示する。EXCELダウンロードは `admin-post.php` アクション(`lms_export_completion_stats_excel`)経由で処理し、Python + openpyxl で生成したxlsxを返却する。KPIカードのデータは WordPress Transients API を利用して15分間キャッシュする。
画面アクセス権限は `manage_lms_reports`(新規定義)を使用する。事務局(管理者)ロールにのみ付与し、`current_user_can('manage_lms_reports')` で全操作をガードする。EXCELダウンロードのアクションハンドラ内でも同権限チェックを実施すること。法人・事業所によるデータ絞り込みはバックエンド側で制御し、フロント側のフィルタ値をそのままSQLに渡さない。法人管理者・事業所管理者はWP管理画面にはアクセスしないため、会員サイト側(F-CORP / F-SITE)に参照機能を別途設ける。
カスタムテーブル `lms_completion_certificates`(修了証発行履歴)を主に使用する。主要カラム: `id`、`user_id`、`corporation_id`、`site_id`(事業所ID)、`training_plan_id`(研修計画ID)、`issued_at`(発行日時)、`certificate_number`(修了証番号)。集計クエリは `training_plan_id` + `corporation_id` + `site_id` でGROUP BYし、発行件数・月別件数を算出する。研修計画情報はカスタムテーブル `lms_training_plans` とJOINして取得。修了証はF-TOP-002(会員サイト側)で発行されるもので、受講証明書(`lms_course_certificates` テーブル・講座単位)とは別テーブルであることに注意する。
一括操作(Bulk Actions): 現フェーズでは「CSVエクスポート(選択行)」のみ定義する。EXCELダウンロードはページ全体(フィルタ条件適用後の全件)を対象とし、ページタイトル横のボタンから実行する。行アクションは本集計画面では定義しない(集計値のみ表示のため)。将来的に「この研修計画の詳細履歴を見る」行アクションを追加する際は `B-HST-001`(受講履歴一覧)へのリンクで実装することを想定する。
表示列の選択: 研修計画名 / 法人名 / 事業所名 / 集計対象期間 / 発行数(合計)/ 今月発行数 / 前年比。デフォルトはすべて表示。ページあたり表示件数: デフォルト20件、`lms_completion_stats_per_page` キーで保存する。集計単位(法人×研修計画 / 事業所×研修計画 / 研修計画のみ / 月別推移)はフィルタパネルで選択する方式とし、Screen Optionsには含めない。
月平均10,000件 × 3年間 = 最大約360,000レコードを想定。集計SQLは `GROUP BY training_plan_id, corporation_id, site_id` を基本とし、`issued_at` カラムに複合インデックス(`corporation_id, issued_at`)および(`training_plan_id, issued_at`)を設定して期間絞り込みを高速化する。KPIカードの総発行数は Transients API(TTL: 900秒)でキャッシュし、DB負荷を軽減する。EXCELエクスポートは全件を一度にメモリに展開するとメモリ不足になるため、`LIMIT / OFFSET` でチャンク読み込みしながら openpyxl で逐次書き出す方式を採用する。フィルタ条件はすべて `$wpdb->prepare()` でサニタイズし、SQLインジェクションを防止する。EXCELダウンロードアクションは `wp_nonce_field()` / `check_admin_referer()` でNonce検証を必須とする。エクスポートファイルには個人氏名を含めず、法人・事業所・研修計画単位の集計値のみを出力して個人情報漏洩リスクを最小化する。