要件定義書:リハビリサービス運営ダッシュボード生成システム

v1.0 | 作成日: 2026年2月20日 | 対象: dashboard_generator.py + Cloudflare Pages デプロイ
目次
1. システム概要 2. 前提条件・環境 3. 入力データ仕様 4. サービス分類ロジック 5. ユーザー識別(複合キー) 6. 計算項目一覧 7. ダッシュボードUI構造 8. CSS設計仕様 9. JavaScript機能仕様 10. 出力ファイル仕様 11. CLI・バッチ仕様 12. Cloudflare Pagesデプロイ 13. E2Eテスト仕様 14. フォルダ構成 15. 再現用AIプロンプト

1. システム概要

介護保険の訪問リハビリテーション・通所リハビリテーションの実績データ(Excel)から、年度別(4月~3月)の運営分析ダッシュボードを単体HTMLファイルとして自動生成するPythonスクリプト。生成されたHTMLをCloudflare Pagesにデプロイし、パスワード保護付きでWeb共有する。

主な特徴

2. 前提条件・環境

項目要件
OSWindows 10/11
Python3.8以上
必須ライブラリpandas, openpyxl
E2Eテストplaywright(オプション)
デプロイNode.js 18+, wrangler(npx経由), Cloudflareアカウント

3. 入力データ仕様

介護保険の請求実績Excelファイル。1ファイル=1ヶ月分。複数ファイルを1フォルダに配置して一括処理。

必須列

列名用途
ID番号文字列/数値12345利用者識別(主キー)
サービス内容文字列予防訪問リハ, 通所リハ4分類の判定
要介護度文字列要支援1, 要介護度3要支援/要介護の区分
サービス提供年月数値202509年月識別・年度判定
サービス実日数数値8実利用日数
合計金額数値48520請求額

オプション列

列名用途
保険者番号複合キーの一部(同一利用者の年度跨ぎ識別)
被保険者番号保険者番号が無い場合のフォールバック
合計回数訪問回数(加算分析用)
サービス提供時間提供時間(分)
開始時間 / 終了時間時間区分分析用(HH:MM形式)
ファイル形式: .xlsx(openpyxl)または .csv(cp932/UTF-8自動判定)。サブフォルダ内のファイルも再帰的に検索。

4. サービス分類ロジック

4分類ルール

分類名サービス内容の条件要介護度の条件集約先
予防訪問「予防訪問」を含む要支援のみhoumon(訪問リハ)
訪問「訪問」を含む(「予防」を含まない)要介護のみ
予防通所「予防通所」を含む要支援のみtsusho(通所リハ)
通所「通所」を含む(「予防」を含まない)要介護のみ
バリデーション: 分類結果を3回検証し、要支援なのに「訪問」、要介護なのに「予防訪問」等の矛盾がないかチェック。不整合があればコンソールに警告。

要介護度の正規化

# 「要介護度1」→「要介護1」に統一
# 「要支援1」「要支援2」はそのまま
# 区分: 「支援」を含む → 要支援、それ以外 → 要介護

5. ユーザー識別(複合キー)

同一利用者を年度を跨いで正確に追跡するための複合キー uid を生成。

# 優先順位:
1. 保険者番号 + ID番号  (保険者番号が存在し、1件でも非NaN)
2. 被保険者番号 + ID番号(被保険者番号が存在し、1件でも非NaN)
3. ID番号のみ          (フォールバック)

# 生成例:
uid = "123456_12345"  # 保険者番号_ID番号

# 前処理:
- ID番号がNaNの行は除外
- 文字列化してstrip()で空白除去
表示用ID: ダッシュボードの利用者一覧には元の ID番号disp_id)を表示。uid は内部計算用。

6. 計算項目一覧

6-1. KPIカード(年度サマリー)

#指標計算式
1年度 累計売上Σ 全月の合計金額(訪問+通所)blue
2月平均 利用者数Σ 各月利用者数 ÷ 月数teal
3月平均 売上年度累計売上 ÷ 月数green
4訪問 平均キャンセル率年度通算キャンセル率amber
5通所 平均キャンセル率年度通算キャンセル率red
6最新月 併用利用者数訪問 ∩ 通所の利用者ID重複数purple

6-2. キャンセル率

# 契約区分の推定(月の実日数から)
1~4日  → 週1契約(期待日数 = 4日/月)
5~8日  → 週2契約(期待日数 = 8日/月)
9~12日 → 週3契約(期待日数 = 12日/月)
13日以上 → 週4契約(期待日数 = 16日/月)

# キャンセル率
cancel_rate = (期待日数 - 実日数) / 期待日数 × 100

6-3. 加算分析

各加算(リハビリマネジメント加算、社会参加支援加算、移行支援加算など)について:

6-4. 時間区分分析(訪問リハのみ)

# 連続セッションを1枠として判定
# 各ユーザーの最頻セッション数から推定:
  1セッション連続 → 40分契約
  2セッション以上 → 60分契約

6-5. 要介護・要支援別 売上分析

訪問・通所それぞれについて:

バーチャート表示: 要介護度別(要支援1~要介護5)の利用者分布。0名の介護度も「0名」と表示する。小さい割合(20%未満)はバー内テキスト非表示→下部ラベルに表記。

6-6. 利用期間・連続利用(全履歴ベース)

# 全利用期間(スパン)
duration = (最終月 - 初回月) の月数差 + 1

# 実利用月数
actual_months = 実際に利用があった月の数

# 連続利用月数(最長連続ストリーク)
月番号に変換 → 連続する月を検出 → 最長の連続区間

# 直近連続月数
最終利用月から遡って何ヶ月連続しているか

# 統計値
平均、中央値、最小、最大(スパン・連続利用それぞれ)

6-7. 利用継続率(年度内)

# 年度内で各ユーザーが何ヶ月利用したか
# 分布: 1ヶ月=N名, 2ヶ月=N名, ... 12ヶ月=N名
# 統計: 平均、最小、最大、中央値

6-8. 損益分岐点・利益計算 インタラクティブ

# 入力(JavaScriptで即時計算)
月額コスト(¥)  ... 訪問・通所それぞれ
月額人件費(¥)  ... 訪問・通所それぞれ

# 計算
年度利益 = 年度売上 - (月額コスト × 月数)
人件費率 = (月額人件費 × 月数) ÷ 年度売上 × 100

# 評価基準(色分け)
人件費率 ≤ 50% → 良好(緑)
50% < 人件費率 ≤ 70% → 注意(黄)
人件費率 > 70% → 要改善(赤)

6-9. 併用利用者

# 同一月内で訪問 ∩ 通所を利用した利用者
concurrent_users = houmon_user_ids ∩ tsusho_user_ids

# 年度サマリー
- 月平均 併用利用者数
- 年度内ユニーク併用利用者数

6-10. 年度間比較(複数年度の場合)

7. ダッシュボードUI構造

┌─ ヘッダー (.hdr)
│   タイトル / サブタイトル / メタ情報(年度数・月数・生成日)
│
├─ タブバー (.tab-bar)
│   [2025年度(R7) 1ヶ月] [2024年度(R6) 12ヶ月] ... [年度間比較]
│
├─ 年度パネル (.tab-panel) × N年度
│   ├─ パネルヘッダー(年度名・集計期間)
│   ├─ KPI 6カード (.srow6) ← 3列グリッド
│   ├─ 損益分岐点・利益計算 (.bep-section)
│   ├─ 月別推移チャート (.dg) ← 訪問(左) / 通所(右) SVGバーチャート
│   ├─ 月別詳細比較表 (full-width テーブル)
│   ├─ 併用利用者セクション
│   ├─ 4分類別売上(予防訪問/訪問/予防通所/通所)
│   ├─ 利用期間・連続利用(全履歴ベース)
│   ├─ 最新月の詳細 (.dg)
│   │   ├─ 訪問リハ: 要介護度分布, 加算取得率, 時間契約, キャンセル
│   │   └─ 通所リハ: 同上
│   ├─ サービス種別 比較一覧テーブル
│   ├─ キャンセル率 比較
│   └─ 利用者一覧 (.dg) ← 訪問(左) / 通所(右)
│
├─ 年度間比較パネル(複数年度の場合のみ)
│   ├─ トレンド分析チャート
│   ├─ 年度比較チャート(利用者数/売上/キャンセル率)
│   └─ 季節性分析
│
└─ フッター (.ft)
レイアウト鉄則: .dg(2列グリッド)では必ず左=訪問リハ、右=通所リハ。E2Eテストで逆転を検出。

8. CSS設計仕様

カラーパレット(CSS変数)

変数名用途
--bg#f5f6faページ背景
--card#fffカード背景
--border#e8eaef境界線
--text-primary#1a1d26本文
--text-secondary#6b7080補助テキスト
--houmon-primary#2563eb訪問リハ(青)
--houmon-light#eff4ff訪問リハ背景
--tsusho-primary#0d9488通所リハ(ティール)
--tsusho-light#ecfdf5通所リハ背景
--accent-warn#f59e0b警告(琥珀)
--accent-danger#ef4444危険(赤)
--accent-success#10b981成功(緑)
--radius14px角丸

主要CSSクラス

クラス用途
.ctnメインコンテナ(max-width: 1360px)
.srow6KPIカード3列グリッド
.dg2列グリッド(訪問/通所並列、align-items: start)
.mg / .mg43列 / 4列メトリクスグリッド
.sc統計カード(.bl/.tl/.gn/.am/.rd/.ppで色分け)
.cdコンテンツカード
.cd.fw全幅カード
.dtデータテーブル
.bar-row要介護度バーチャート行
.stk積み重ねバー(要支援/要介護比率)
.bep-section損益分岐点セクション
.tg-h / .tg-t訪問タグ / 通所タグ
KPIカード数値: font-size:24px; white-space:nowrap; overflow:visible で切れ防止。フォントは 'DM Sans'(Google Fonts埋め込み)。

9. JavaScript機能仕様

9-1. calcAll(el) — 損益・人件費率の即時計算

入力イベント: oninput で呼び出し

1. 入力値のカンマ除去 → 数値化 → カンマ再フォーマット
2. パネル内の年度売上(data-revenue)・月数(data-months)を取得
3. 利益計算: revenue - (cost × months)
4. 人件費率: (labor × months) / revenue × 100
5. 色分け表示(≤50%=green, 50-70%=yellow, >70%=red)

9-2. switchTab(id) — タブ切り替え

全パネルから .active 除去 → 指定パネルに .active 付与
利用者テーブルの遅延ロード(pop関数)も実行

9-3. pop(id) — 利用者テーブル遅延ロード

userData オブジェクトからデータを取得し、
tbodyが空のテーブルに行を動的挿入
(初期ロード高速化のため)

10. 出力ファイル仕様

項目仕様
形式単体HTMLファイル(CSS/JS全て埋め込み)
エンコーディングUTF-8
ファイル名ダッシュボード_[年度範囲]_[YYYYMMDD_HHMM].html
出力先出力/ ディレクトリ(自動作成)
サイズ目安200~400KB(データ量による)
閲覧環境モダンブラウザ(Chrome, Edge, Firefox, Safari)

11. CLI・バッチ仕様

コマンドライン引数

python dashboard_generator.py [オプション] [ファイル...]

--data-dir, -d <DIR>    実績データフォルダ(再帰検索: *.xlsx, *.csv)
--output, -o <FILE>     出力先ファイルパス
files(位置引数)         個別ファイル指定

バッチファイル(ダッシュボード生成.bat)

1. chcp 65001(UTF-8設定)
2. Python存在確認
3. pandas/openpyxl ライブラリ確認 → なければ pip install
4. PowerShell select_folder.ps1 でフォルダ選択GUI表示
5. 選択フォルダを --data-dir に渡して実行
6. 完了後 pause で結果確認

select_folder.ps1

COM FileOpenDialog(モダンUI)でフォルダ選択
→ フォールバック: FolderBrowserDialog
→ 結果を %TEMP%\folder_result.txt に書き出し

12. Cloudflare Pagesデプロイ

デプロイ構成

dist/
├── index.html     ← ダッシュボードHTML
└── _worker.js     ← Basic認証ミドルウェア(Advanced Mode)

_worker.js(認証ミドルウェア)

export default {
  async fetch(request, env) {
    const AUTH_USER = 'admin';
    const AUTH_PASS = '****';  // 設定したパスワード

    const auth = request.headers.get('Authorization');
    if (auth && auth.startsWith('Basic ')) {
      const [user, pass] = atob(auth.slice(6)).split(':');
      if (user === AUTH_USER && pass === AUTH_PASS) {
        return env.ASSETS.fetch(request);  // 静的アセット配信
      }
    }
    return new Response('認証が必要です', {
      status: 401,
      headers: { 'WWW-Authenticate': 'Basic realm="Dashboard"' }
    });
  }
};

デプロイコマンド

# 初回: プロジェクト作成
npx wrangler pages project create dashboard-rehab --production-branch=main

# デプロイ(初回以降共通)
npx wrangler pages deploy dist --project-name=dashboard-rehab

# 削除
npx wrangler pages project delete dashboard-rehab

13. E2Eテスト仕様

テスト内容(Playwright)

チェック項目内容
ヘッダー表示タイトルが正しく表示されるか
タブ切り替え各年度タブが正常に動作するか
レイアウト整合性.dg グリッドで左=訪問、右=通所が守られているか(座標ベース検証)
フルページキャプチャ各タブのフルページスクリーンショット
セクション別キャプチャヘッダー、KPI、チャート、テーブル等の個別スクリーンショット

出力先: 出力/e2e_screenshots/

14. フォルダ構成

dashboard_deploy/
├── dashboard_generator.py      ← メインスクリプト(約1950行)
├── ダッシュボード生成.bat       ← GUI実行用バッチ
├── select_folder.ps1            ← フォルダ選択ダイアログ
├── e2e_visual_test.py           ← E2Eテスト(Playwright)
├── install.bat                  ← 環境セットアップ
├── dist/                        ← デプロイ用
│   ├── index.html
│   └── _worker.js
├── 実績データ/                  ← Excelデータ配置先
│   └── *.xlsx
├── 出力/                        ← 生成HTML出力先
│   ├── ダッシュボード_*.html
│   └── e2e_screenshots/
├── ダッシュボード更新手順.html  ← 操作手順書
└── 要件定義書_*.html            ← 本ドキュメント

15. 再現用AIプロンプト

以下のプロンプトをAIに渡すことで、本システムをゼロから再構築できます。段階的に実行することを推奨します。

Phase 1: コアエンジン作成

# Phase 1: ダッシュボード生成スクリプト(Python) ## 目的 介護保険の訪問リハビリ・通所リハビリの実績データ(Excel)から、年度別(4月~3月)の 運営分析ダッシュボードを**単体HTMLファイル**として自動生成するPythonスクリプトを作成してください。 ## 入力データ - 形式: Excel(.xlsx) または CSV。1ファイル=1ヶ月分 - 必須列: ID番号, サービス内容, 要介護度, サービス提供年月(YYYYMM), サービス実日数, 合計金額 - オプション列: 保険者番号, 被保険者番号, 合計回数, サービス提供時間, 開始時間, 終了時間 - サブフォルダ内も再帰検索 ## サービス4分類 「サービス内容」列から以下の4分類に振り分け: - 予防訪問(「予防訪問」を含む)→ houmon として集約 - 訪問(「訪問」を含み「予防」を含まない)→ houmon として集約 - 予防通所(「予防通所」を含む)→ tsusho として集約 - 通所(「通所」を含み「予防」を含まない)→ tsusho として集約 分類結果を3回バリデーション(要支援なのに訪問、等の矛盾がないか) ## ユーザー識別(複合キー) 年度を跨いで同一利用者を追跡するため uid を生成: 1. 保険者番号 + "_" + ID番号(保険者番号が存在する場合) 2. 被保険者番号 + "_" + ID番号(フォールバック) 3. ID番号のみ(最終フォールバック) ID番号がNaNの行は除外する。表示用には元のID番号を使う。 ## 計算項目(全て訪問・通所それぞれに算出) 1. **KPI**: 年度累計売上、月平均利用者数、月平均売上、キャンセル率、併用利用者数 2. **キャンセル率**: 実日数から契約区分を推定(1-4日=週1,5-8日=週2,9-12日=週3,13日+=週4) cancel_rate = (期待日数 - 実日数) / 期待日数 × 100 3. **加算分析**: 各加算の取得者数・取得率・収益額 4. **時間区分**(訪問のみ): 連続セッション数から40分/60分契約を推定 5. **要介護・要支援別**: 売上額・利用者数・平均単価 6. **利用期間(全履歴)**: スパン(初回~最終月)、連続利用月数(途切れない最長期間)、 実利用月数、直近連続月数。統計値: 平均・中央値・最小・最大 7. **利用継続率(年度内)**: 年度内で何ヶ月利用したかの分布 8. **併用利用者**: 訪問∩通所の重複利用者数 9. **年度間比較**(複数年度時): 利用者数/売上/単価のトレンド、季節性分析 ## CLI引数 argparse で以下を実装: - --data-dir, -d: データフォルダパス(再帰glob検索) - --output, -o: 出力ファイルパス - 位置引数: 個別ファイルリスト 出力デフォルト: 出力/ダッシュボード_[年度範囲]_[YYYYMMDD_HHMM].html ## 技術要件 - Python 3.8+, pandas, openpyxl - 出力は単体HTML(CSS/JS全て埋め込み、外部依存なし) - 年度 = 4月~翌3月(fiscal year) - コメントは日本語で記述

Phase 2: ダッシュボードUI

# Phase 2: HTML/CSS/JS のUI設計 Phase 1で作成したスクリプトが生成するHTMLのUI仕様: ## レイアウト原則 - 最大幅1360px、中央配置 - 年度別タブ切り替え(複数年度の場合 + 年度間比較タブ) - 2列グリッド(.dg)では必ず **左=訪問リハ(青)、右=通所リハ(ティール)** - align-items: start(左右の高さが異なっても上揃え) ## カラーパレット - 訪問リハ: --houmon-primary: #2563eb(青)/ --houmon-light: #eff4ff - 通所リハ: --tsusho-primary: #0d9488(ティール)/ --tsusho-light: #ecfdf5 - 成功: #10b981 / 警告: #f59e0b / 危険: #ef4444 - 背景: #f5f6fa / カード: #fff / 角丸: 14px ## KPIカード(.srow6 = 3列グリッド) 6枚のカード。数値フォント: 'DM Sans'(Google Fonts埋め込み) font-size:24px; white-space:nowrap; overflow:visible で数値切れ防止 ## 損益分岐点セクション(インタラクティブ) 訪問・通所それぞれに: - 月額コスト入力(¥、3桁カンマ自動フォーマット) - 月額人件費入力(¥、3桁カンマ自動フォーマット) - 年度利益表示(黒字=緑、赤字=赤) - 人件費率表示(≤50%=緑, 50-70%=黄, >70%=赤) JavaScript oninput で即時計算。各パネルのdata属性から年度売上・月数を取得。 ## 要介護度バーチャート - 要支援1~要介護5の7段階 - 0名の介護度も行を表示(「0名」と表記) - 小さい割合(20%未満)はバー内テキスト非表示→バー下部にラベル表示 ## 利用者テーブル(遅延ロード) userData オブジェクトに全データを格納し、タブ切り替え時に 初回のみDOMに行を挿入(初期ロード高速化) ## 月次推移チャート SVGバーチャートで月別利用者数を表示(2ヶ月以上の場合のみ) ## 印刷対応 @media print でタブバー非表示、全パネル表示、背景白

Phase 3: バッチファイル・フォルダ選択

# Phase 3: Windows バッチファイル + フォルダ選択GUI ## ダッシュボード生成.bat 1. chcp 65001 でUTF-8設定 2. Python 存在確認(python --version) 3. pandas, openpyxl 確認 → なければ pip install 4. PowerShell で select_folder.ps1 実行 5. 選択されたフォルダパスを %TEMP%\folder_result.txt から読み取り 6. dashboard_generator.py --data-dir "選択フォルダ" を実行 7. エラー時も pause でターミナルを閉じない ## select_folder.ps1 COM FileOpenDialog(モダンUI)でフォルダ選択ダイアログ表示 → 失敗時は FolderBrowserDialog にフォールバック → 選択結果を $env:TEMP\folder_result.txt に書き出し

Phase 4: Cloudflare Pagesデプロイ + Basic認証

# Phase 4: Cloudflare Pages デプロイ(パスワード保護付き) ## 手順 1. dist/ フォルダを作成 2. 生成したHTMLを dist/index.html としてコピー 3. dist/_worker.js を作成(Cloudflare Pages Advanced Mode) - HTTP Basic認証をサーバーサイドで実装 - env.ASSETS.fetch(request) で静的アセット配信 - 認証失敗時は 401 + WWW-Authenticate ヘッダ 4. プロジェクト作成: npx wrangler pages project create [name] --production-branch=main 5. デプロイ: npx wrangler pages deploy dist --project-name=[name] ## _worker.js テンプレート export default { async fetch(request, env) { const AUTH_USER = 'admin'; const AUTH_PASS = '設定したパスワード'; const auth = request.headers.get('Authorization'); if (auth && auth.startsWith('Basic ')) { const [user, pass] = atob(auth.slice(6)).split(':'); if (user === AUTH_USER && pass === AUTH_PASS) { return env.ASSETS.fetch(request); } } return new Response('認証が必要です', { status: 401, headers: { 'WWW-Authenticate': 'Basic realm="Dashboard"' } }); } };

Phase 5: E2Eテスト

# Phase 5: E2E ビジュアルテスト(Playwright) ## テスト内容 1. 出力フォルダから最新の ダッシュボード_*.html を自動検出 2. Playwright でヘッドレスブラウザを起動(1920x1080) 3. 以下のスクリーンショットを撮影: - ヘッダー、KPI、月次チャート、テーブル、サービス詳細 - 各タブのフルページキャプチャ 4. レイアウト検証: - 各 .dg グリッド内で左の子要素 = 訪問(.tg-h)、右 = 通所(.tg-t) - getBoundingClientRect() の x座標で左右判定 - 逆転していればエラー報告 5. 結果を 出力/e2e_screenshots/ に保存

一括プロンプト(全フェーズ統合版)

上記Phase 1~5を全て統合した単一プロンプトです。コピーしてそのまま使えます。

## リハビリサービス運営ダッシュボード生成システム — 全体設計書 以下の仕様で、介護保険の訪問リハビリ・通所リハビリの実績データ(Excel)から 年度別(4月~3月)の運営ダッシュボードを自動生成するシステムを構築してください。 ### 技術スタック - Python 3.8+ (pandas, openpyxl) - 出力: 単体HTML(CSS/JS埋め込み、外部依存なし) - デプロイ: Cloudflare Pages + Basic認証(_worker.js) - テスト: Playwright E2E - 実行: Windows バッチファイル + PowerShellフォルダ選択 ### 入力データ Excel/CSV。1ファイル=1ヶ月分。サブフォルダ再帰検索対応。 必須列: ID番号, サービス内容, 要介護度, サービス提供年月(YYYYMM), サービス実日数, 合計金額 オプション列: 保険者番号, 被保険者番号, 合計回数, サービス提供時間, 開始時間, 終了時間 ### 分類ロジック サービス内容から4分類: 予防訪問/訪問/予防通所/通所 → houmon(訪問リハ)と tsusho(通所リハ)に集約 要支援/要介護の矛盾を3回バリデーション ### ユーザー識別 uid = 保険者番号+"_"+ID番号(フォールバック: 被保険者番号→ID番号のみ) NaN IDは除外。表示用はdisp_id(元ID番号) ### 計算項目(全て訪問・通所別に算出) 1. KPI 6項目: 累計売上, 月平均利用者数, 月平均売上, 訪問キャンセル率, 通所キャンセル率, 併用者数 2. キャンセル率: 実日数→契約区分推定→(期待-実)/期待×100 3. 加算分析: 各加算の取得者数/取得率/収益額 4. 時間区分(訪問のみ): 連続セッション数→40分/60分契約推定 5. 要介護・要支援別: 売上額/利用者数/平均単価 6. 利用期間(全履歴): スパン, 連続利用月数(最長streak), 実利用月数, 直近連続月数 + 統計値 7. 利用継続率(年度内): 何ヶ月利用したかの分布 8. 併用利用者: 訪問∩通所の重複 9. 年度間比較(複数年度時): トレンド, 季節性分析 ### ダッシュボードUI構造 - 最大幅1360px, 年度別タブ切り替え - 2列グリッド(.dg)は常に左=訪問(青#2563eb), 右=通所(ティール#0d9488) - KPI 6カード(3列グリッド), 数値フォントDM Sans, 24px, nowrap - 損益分岐点: 月額コスト/人件費入力→JS即時計算(利益+人件費率) 人件費率色分け: ≤50%=緑, 50-70%=黄, >70%=赤 - 要介護度バー: 0名も表示, 20%未満は下部ラベル - 利用者テーブル: 遅延ロード(switchTab時にDOM挿入) - 月次推移: SVGバーチャート(2ヶ月以上) - 印刷対応: @media print ### CLI引数 --data-dir(-d): データフォルダ / --output(-o): 出力先 / 位置引数: 個別ファイル ### Windows バッチ ダッシュボード生成.bat: chcp 65001→Python確認→pip install→PowerShellフォルダ選択→実行 select_folder.ps1: COM FileOpenDialog→FolderBrowserDialogフォールバック ### Cloudflare Pagesデプロイ dist/index.html + dist/_worker.js(Basic認証, env.ASSETS.fetch) npx wrangler pages deploy dist --project-name=dashboard-rehab ### E2Eテスト(Playwright) 最新HTML自動検出→スクリーンショット撮影→.dgグリッドの左訪問/右通所をx座標で検証
リハビリサービス運営ダッシュボード生成システム 要件定義書 v1.0
作成日: 2026年2月20日