構築例一覧へ戻る
構築例 02 / Build Example
Example 02 / 05

クリニック Web問診システム

クリニックの問診をWeb化し、患者の入力負荷軽減・スタッフの転記作業ゼロ・カルテ/予約システムとのシームレス連携を実現するシステム。条件分岐・多言語問診の設計から、トリアージ判定・診察前サマリー・電子カルテへの自動反映までをカバーします。

フロントエンド
React + TypeScript
バックエンド
Express REST API(インメモリ)
設計トレース
業務シナリオ → UMLモデル / アクティビティ・ユースケース・クラス図 → 実装
条件分岐問診 多言語対応 トリアージ判定 電子カルテ連携 テンプレート公開ワークフロー
設計モデル / Design Models

UMLモデルから、実装へ。

本アプリの実装は、UMLモデルから導出したユースケース図・クラス図に基づきます。アクター(患者・受付看護スタッフ・医師・連携システム)と UC-01〜UC-19、業務ルール(BR)、ドメインクラスがそのまま実装へトレースされ、操作マニュアルの各章と対応します。

ユースケース図 Use Case Diagram
クリニック Web問診システム ユースケース図
患者入力(UC-01〜04)・問診設計(UC-14〜19)・連携判定(UC-05〜10)を、条件分岐(BR-019)・多言語(BR-020)・診察券自動入力(BR-021)などの制約とともに表現。 原寸で開く ↗
クラス図(ドメインモデル) Domain Class Diagram
クリニック Web問診システム クラス図(ドメインモデル)
Questionnaire・Answer・QuestionnaireTemplate・Question・Triage・Summary・MedicalRecord・Appointment・Patient などのエンティティと関連・多重度、状態遷移を定義。 原寸で開く ↗

本書は、本アプリケーションの操作手順をまとめた利用者向けマニュアルです。画面・ボタン名は実装に準拠しています。

  • 対象アプリ: クリニック 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件): 紐付く添付画像を表示。
問診票詳細画面(ワークフロー・状態別ボタン)
問診票詳細画面(ワークフロー・状態別ボタン)
上図は「入力中」状態の例で、「送信」ボタンが表示されています。
⚠️ 入力中の問診票を「送信」するには、回答が1件以上必要です。先に回答を登録してください。

06回答

各問診票の質問に対する患者の回答です。回答時点の質問文をスナップショットとして保持します(設計変更後も当時の質問文が残ります)。

6.1 回答一覧

  • 問診票 / 質問文 / 回答値 / 入力方法 を表示。絞り込み・並び替えが可能。
回答一覧画面
回答一覧画面

6.2 回答の登録・詳細

右上「新規作成」から登録します。

  • 問診票、質問(選ぶと質問文が自動反映)、質問文、回答値、入力方法(テキスト・音声・画像アップロード・部位選択)、疼痛スケール(整形外科などの0〜10)。
  • 詳細画面では質問文・回答値・入力方法・疼痛スケール・紐付く問診票(クリックで問診票詳細へ)を確認できます。
回答詳細画面
回答詳細画面

07添付画像

患部画像・お薬手帳画像など、問診に添付される画像を管理します(皮膚科の患部撮影、内科のお薬手帳など)。

  • 一覧で 問診票 / 入力方法 / 説明 などを表示。
  • 「新規作成」で問診票に紐付けて登録、詳細画面で内容を確認します。

08問診テンプレート

共通質問と診療科別質問・条件分岐・入力UIを定義し、多言語で登録・公開できる問診テンプレートです(QuestionAuthoring)。

8.1 テンプレート一覧

  • 診療科 / 説明 / 公開状態(下書き・公開済)を表示。
テンプレート一覧画面
テンプレート一覧画面

8.2 テンプレート詳細と公開ワークフロー(BR-017)

詳細画面上部の「公開ワークフロー」セクションに、現在の公開状態バッジと操作ボタンが表示されます。

現在の状態表示される操作結果
下書き(Draft)公開公開済へ(※質問を1件以上登録する必要あり)
公開済(Published)(操作なし)患者入力に利用可能
  • テンプレート情報: 診療科・説明・公開状態・作成/更新日時。
  • 質問 (n件): 属する質問と回答形式(単一選択・テキスト・数値・はい・いいえ・複数選択など)を表示。
  • 条件分岐ルール (n件): 設定された分岐(例: Equals : 女性Equals : はい)を表示。
テンプレート詳細画面(公開ワークフロー・条件分岐)
テンプレート詳細画面(公開ワークフロー・条件分岐)
上図は婦人科の「下書き」テンプレートの例で、「公開」ボタンが表示されています。条件分岐は「性別=女性 → 妊娠有無 → はい → 妊娠月数」を表現しています(BR-019)。

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)」セクションで操作します。

  1. 「問診票を選択」プルダウンから対象の問診票を選びます。
  2. 「問診を反映」ボタンを押します。
  3. 対象の問診票がカルテに反映され、その問診票の状態が 「カルテ反映済」 に更新されます。
電子カルテ詳細画面(問診を反映)
電子カルテ詳細画面(問診を反映)
反映すると、問診票側の状態が入力完了 → カルテ反映済へ進みます(コピー&ペースト不要の自動転記)。

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/backendnpm 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 等+オブジェクトストレージ(画像)へ差し替えることを想定しています。

本マニュアルは uml-workflow-v3 で生成したアプリケーションの実装に基づいています。