UMLモデルから、実装へ。
本アプリの実装は、UMLモデルから導出したユースケース図・クラス図に基づきます。アクター(患者・受付看護スタッフ・医師・連携システム)と UC-01〜UC-19、業務ルール(BR)、ドメインクラスがそのまま実装へトレースされ、操作マニュアルの各章と対応します。
本書は、本アプリケーションの操作手順をまとめた利用者向けマニュアルです。画面・ボタン名は実装に準拠しています。
- 対象アプリ: クリニック Web問診システム (Medical Questionnaire)
- 構成: フロントエンド (React + TypeScript) + バックエンド (Express REST API / インメモリ)
- 設計トレース: 業務シナリオ → UMLモデル / アクティビティ図・ユースケース図・クラス図 → 実装
01はじめに
本アプリは、クリニックの問診をWeb化し、患者の入力負荷軽減・スタッフの転記作業ゼロ・カルテや予約システムとのシームレスな連携を実現するためのシステムです。主な機能は次のとおりです。
| 区分 | 機能 |
|---|---|
| 問診業務(患者入力) | 問診票の入力・条件分岐・多言語・患部画像/お薬手帳画像の添付 |
| 問診設計(スタッフ) | テンプレート・質問・回答形式・選択肢・条件分岐・多言語の設計と公開 |
| 連携・判定 | 予約との紐付け、電子カルテへの自動反映、重症度/感染症疑いのトリアージ、診察前サマリー |
代表的なアクター(利用者像):患者・保護者 / 受付・看護スタッフ / 医師 / クリニック連携システム。
02起動と終了
2.1 必要環境
- Node.js 18 以降(動作確認は Node.js 20 系)
2.2 起動手順
2つのサーバーを起動します。ターミナルを2つ使います。
# ① バックエンド(REST API / ポート 4000)
cd app/backend
npm install # 初回のみ
npm run dev
# ② フロントエンド(画面 / ポート 5173)
cd app/frontend
npm install # 初回のみ
npm run dev
ブラウザで http://localhost:5173/ を開きます。
/api へのアクセスを自動的にバックエンド(4000番)へ転送します。先にバックエンドを起動してください。ポート 5173 が使用中の場合、Vite は自動的に 5174 など別ポートで起動します(ターミナルの Local: 表示を確認)。2.3 終了手順
各ターミナルで Ctrl + C。または以下で停止します。
lsof -ti:4000,5173 | xargs kill
03画面構成
画面左のサイドバーから各機能へ移動します。グループ構成は次のとおりです。
| グループ | メニュー | 内容 |
|---|---|---|
| ダッシュボード | ダッシュボード | 件数サマリと最近のデータ |
| 問診業務 | 問診票 / 回答 / 添付画像 | 患者が入力する問診と、その回答・画像 |
| 問診設定 | テンプレート / 質問 / 選択肢 / 質問翻訳 / 条件分岐 | 問診内容の設計・公開 |
| 連携・判定 | 予約 / トリアージ / 要約 / 電子カルテ | 予約紐付け・重症度判定・サマリー・カルテ反映 |
| マスタ管理 | 患者 | 患者(被診察者)の登録 |
各機能は共通して 一覧 → 詳細 → 新規/編集 の3画面で構成されます。
- 一覧画面: 絞り込み・並び替え・ページ送り。行クリックで詳細へ。右上「新規作成」で新規登録。
- 詳細画面: データの内容表示と、上部のワークフロー/業務操作、右上の操作ボタン(一覧へ・編集・削除)。
- 新規/編集画面: 入力フォーム。「作成」または「更新」で保存、「キャンセル」で戻る。
04ダッシュボード
トップ画面に表示されます。
- 各データの件数サマリ(問診票・回答・添付画像・テンプレート・質問・選択肢・質問翻訳・条件分岐・予約・トリアージ・要約・電子カルテ・患者)
- 最近の問診票・最近のトリアージの一覧
全体状況の把握と、各機能への入り口として利用します。画面左がサイドバー、中央が各機能の表示エリアです。
05問診票
患者・保護者が条件分岐に沿って入力する問診票です。問診業務の中心となる機能で、入力の状態遷移から電子カルテ反映までを扱います。
5.1 問診票一覧
- 診療科 / 状態 / 受診区分 / デバイス / 当日受付 / 言語 / 作成日時 を表示。
- 絞り込み(状態・診療科)、並び替え(作成日時)が可能。
5.2 問診票の新規作成
右上「新規作成」から登録します。
- 診療科(内科・小児科・皮膚科・耳鼻咽喉科・婦人科・整形外科・眼科・歯科)
- 状態、デバイス(スマートフォン・タブレット・パソコン)、受診区分(初診・再診)
- 言語(
jaなど)、テンプレート、予約
5.3 問診票詳細とワークフロー
詳細画面の上部に「ワークフロー」セクションがあり、現在の状態バッジと操作ボタンが表示されます。ボタンは状態に応じて出し分けされます。
| 現在の状態 | 表示される操作 | 結果 |
|---|---|---|
| 未入力(NotStarted) | 入力開始 | 入力中へ |
| 入力中(InProgress) | 送信 | 入力完了へ(※回答が1件以上必要) |
| 入力完了(Completed) | (操作なし) | 電子カルテ画面から反映可能 |
| カルテ反映済(ReflectedToEMR) | (操作なし) | 反映完了 |
- 問診票情報: 診療科・状態・受診区分・デバイス・言語・当日受付・テンプレートID・予約ID・作成/更新日時。
- 回答 (n件): 紐付く回答を一覧表示(クリックで回答詳細へ)。
- 添付画像 (n件): 紐付く添付画像を表示。
06回答
各問診票の質問に対する患者の回答です。回答時点の質問文をスナップショットとして保持します(設計変更後も当時の質問文が残ります)。
6.1 回答一覧
- 問診票 / 質問文 / 回答値 / 入力方法 を表示。絞り込み・並び替えが可能。
6.2 回答の登録・詳細
右上「新規作成」から登録します。
- 問診票、質問(選ぶと質問文が自動反映)、質問文、回答値、入力方法(テキスト・音声・画像アップロード・部位選択)、疼痛スケール(整形外科などの0〜10)。
- 詳細画面では質問文・回答値・入力方法・疼痛スケール・紐付く問診票(クリックで問診票詳細へ)を確認できます。
07添付画像
患部画像・お薬手帳画像など、問診に添付される画像を管理します(皮膚科の患部撮影、内科のお薬手帳など)。
- 一覧で 問診票 / 入力方法 / 説明 などを表示。
- 「新規作成」で問診票に紐付けて登録、詳細画面で内容を確認します。
08問診テンプレート
共通質問と診療科別質問・条件分岐・入力UIを定義し、多言語で登録・公開できる問診テンプレートです(QuestionAuthoring)。
8.1 テンプレート一覧
- 診療科 / 説明 / 公開状態(下書き・公開済)を表示。
8.2 テンプレート詳細と公開ワークフロー(BR-017)
詳細画面上部の「公開ワークフロー」セクションに、現在の公開状態バッジと操作ボタンが表示されます。
| 現在の状態 | 表示される操作 | 結果 |
|---|---|---|
| 下書き(Draft) | 公開 | 公開済へ(※質問を1件以上登録する必要あり) |
| 公開済(Published) | (操作なし) | 患者入力に利用可能 |
- テンプレート情報: 診療科・説明・公開状態・作成/更新日時。
- 質問 (n件): 属する質問と回答形式(単一選択・テキスト・数値・はい・いいえ・複数選択など)を表示。
- 条件分岐ルール (n件): 設定された分岐(例:
Equals : 女性→Equals : はい)を表示。
09質問・選択肢・質問翻訳・条件分岐
問診内容を構成する部品を、それぞれのメニューで管理します。
9.1 質問
テンプレートに属する1つの質問です。
- 一覧で 質問文 / 回答形式 / テンプレート / 表示順 を表示。
- 「新規作成」で 質問文・回答形式(日付・テキスト・はい/いいえ・単一選択・複数選択・数値)・数値種別(整数/小数)・小数桁数・表示順・テンプレート を設定します(BR-018)。
9.2 選択肢
単一選択・複数選択の質問で提示する選択肢を管理します。質問に紐付けて、表示ラベルと値を登録します。
9.3 質問翻訳
日本語を基本とする質問の外国語版を登録します(BR-020)。質問・言語・翻訳文を登録し、多言語表示に利用します。
9.4 条件分岐
ある質問の回答値に応じて、次に表示する質問を制御する分岐ルールです(BR-019)。
- 対象質問・分岐演算子(Equals / NotEquals)・比較値・表示する質問 を設定します。
- 例: 「性別」= 女性 → 「妊娠有無」を表示 → 「はい」→ 「妊娠月数」を表示。
10予約
患者ID・氏名・予約時間を持ち、問診データと紐付けられる予約情報です(BR-006)。
- 一覧で 予約日時 / 診療科 / 患者 / 問診票 を表示。
- 「新規作成」で 予約日時・診療科・患者・問診票 を登録。
- 詳細画面で予約内容と紐付く問診票を確認できます。
11トリアージ
回答内容から自動判別された重症度・感染症疑いと、医療従事者へのアラートを管理します(TriageAndSummary / BR-007)。
11.1 トリアージ一覧・詳細
- 一覧で トリアージ区分(緊急・準緊急・通常・感染症疑い)/ アラート通知状況 / 対象問診票 を表示。
- 詳細で区分・通知状況・紐付く問診票(クリックで問診票詳細へ)を確認できます。
11.2 アラート通知(UC-08)
詳細画面上部の「アラート通知 (UC-08)」セクションに、通知状況バッジと「アラート通知」ボタンを表示します。
- 緊急度の高いトリアージ結果は「アラート通知」で医療従事者へ通知します。
- 通知済みの場合、ボタンは無効化され再通知できません。
12要約
医師が診察前に一目で状況を把握するための、問診内容のサマリー(AI要約想定)です(BR-008)。
- 一覧で対象問診票・要約内容を表示。
- 詳細の「要約内容」に本文、「要約情報」に対象問診票などを表示します。
- 「新規作成」で問診票に紐付けて要約本文を登録します。
13電子カルテ
問診データが転記の手間なく自動反映される電子カルテです(EMRIntegration / BR-005)。
13.1 カルテ一覧・詳細
- 一覧で 患者 / 反映済み問診数 を表示。
- 詳細で患者情報と、反映済みの問診票一覧(クリックで問診票詳細へ)を確認できます。
13.2 問診を反映(UC-05)
詳細画面上部の「問診を反映 (UC-05)」セクションで操作します。
- 「問診票を選択」プルダウンから対象の問診票を選びます。
- 「問診を反映」ボタンを押します。
- 対象の問診票がカルテに反映され、その問診票の状態が 「カルテ反映済」 に更新されます。
14患者マスタ
問診を入力する患者(被診察者)を管理します。問診票・予約・カルテから参照される基礎データです。
- 一覧で 氏名 / 診察券番号 / 年齢 / 連絡先 を表示。
- 「新規作成」で 氏名(必須)・診察券番号・年齢・連絡先 を登録。
- 詳細画面では患者情報を確認できます。診察券番号があれば個人情報の自動入力に利用する想定です(BR-021)。
15業務ルールと状態遷移
15.1 問診票の状態遷移
入力開始 送信(回答≥1) カルテ反映(電子カルテ画面)
未入力 ─────────▶ 入力中 ──────────────▶ 入力完了 ─────────────────────▶ カルテ反映済
(NotStarted) (InProgress) (Completed) (ReflectedToEMR)
- 「入力開始」は 未入力 から可能。
- 「送信」は 入力中 からのみ可能。回答が1件以上必要。
- 「カルテ反映」は電子カルテ画面の「問診を反映」から実行し、問診票を カルテ反映済 にします。
15.2 テンプレートの公開遷移
公開(質問≥1)
下書き ─────────────▶ 公開済
(Draft) (Published)
- 「公開」は 下書き から可能。質問を1件以上登録する必要あり(BR-017)。
15.3 主な業務ルール
| ID | 内容 | アプリでの挙動 |
|---|---|---|
| BR-001 | マルチデバイス(スマホ・タブレット・PC)で入力可能 | レスポンシブUI・デバイス種別を保持 |
| BR-002 | 回答に応じて必要な質問のみ自動表示 | 条件分岐ルール(Equals/NotEquals)で表示制御 |
| BR-005 | 問診データを転記ゼロで電子カルテに自動反映 | 電子カルテの「問診を反映」(UC-05) |
| BR-006 | 予約情報と問診データを紐付け | 予約に問診票を関連付け |
| BR-007 | 重症度・感染症疑いを判別しアラート通知 | トリアージ区分+「アラート通知」(UC-08) |
| BR-008 | 診察前に問診をサマリー形式に要約 | 要約(Summary)の登録・表示 |
| BR-017 | 共通質問・診療科別質問をテンプレート管理 | テンプレート+質問、公開ワークフロー |
| BR-018 | 質問に回答形式を設定 | 回答形式・数値種別・小数桁数 |
| BR-019 | 質問間に条件分岐を設定 | 条件分岐ルール |
| BR-020 | 質問を多言語で登録・表示 | 質問翻訳 |
| BR-021 | 診察券番号から個人情報を自動入力 | 患者の診察券番号を保持 |
16よくある質問・トラブルシュート
| 症状 | 原因・対処 |
|---|---|
| 問診票を「送信」できない | 回答が1件以上ありません。先に回答を登録してください。 |
| 問診票のワークフローにボタンが出ない | 入力完了・カルテ反映済など、その状態で可能な操作がありません。 |
| テンプレートの「公開」ボタンが出ない | すでに公開済です。下書きのときのみ「公開」できます。 |
| テンプレートを公開できない | 質問が1件も登録されていません。質問を1件以上追加してください(BR-017)。 |
| トリアージの「アラート通知」が押せない | すでに通知済です。再通知はできません。 |
| カルテに問診が反映されない | 「問診票を選択」で対象を選んでから「問診を反映」を押してください。 |
| 画面は出るがデータが空 | バックエンド未起動。app/backend で npm run dev を実行。 |
| ポートが使用中で起動できない | 既存プロセスを停止:lsof -ti:4000,5173 | xargs kill。または Vite が別ポート(5174等)で起動します。 |
Permission denied / rollup のエラーで起動できない | node_modules を削除して npm install をやり直してください(別OS由来のバイナリ/権限の混入時)。 |
17制約事項
- データは在メモリ(インメモリ)保持です。バックエンドを再起動すると、登録したデータはシード(初期)状態に戻ります。
- ログイン認証はありません。すべての画面に誰でもアクセスできます。
- 条件分岐・多言語・診察券自動入力・トリアージ判定・AI要約は、業務要件として設計(UMLモデル)に含まれますが、本デモではデータモデルと基本操作の範囲で実装しています(実際のAI判定・自動計算ロジックはデモ範囲外)。
- 人体イラスト(シェーマ)による部位選択・音声入力は入力方式(InputMethod)の属性として保持しますが、専用UIは本デモ範囲外です。
- 本番運用では、永続化層を PostgreSQL 等+オブジェクトストレージ(画像)へ差し替えることを想定しています。