BlackSwan 概略仕様
概要
この資料の目的
BlackSwanの仕様を俯瞰で把握することを目的としたもの。DBで314テーブル、GraphQLスキーマは 1019 type、総クエリ数833個 というように、かなり規模が大きいため、抽象的な枠組みがないと、全体像の把握が難しい。そのため、アプリケーションの概略を体系化してまとめ、全体像が俯瞰で把握しやすくなるよう、この資料を作成している。
BlackSwanの全体像
BlackSwanは、高齢介護施設向けのアプリケーションで、日々の介護記録を記録できる。規模が大きいため、全体像の見通しが立てづらいが、次のように分類して理解できる。まず、大きく利用者・契約管理、介護記録の2分野に大別され、それぞれの拡張として、帳票作成や利用者状態分析(未実装)が付随している。この資料では、アプリケーションのコアとなる、利用者・契約管理と介護記録の部分を中心にまとめている。他の部分については、拡張的な機能であり、シンプルな構造となっているため、この資料では詳細の説明は行わない。
(※ こちらはあくまで概念的な区分であり、WEB版、タブレット版といった実際のアプリケーションでの分離に従っているわけではない。例えば、WEB版はこれらの分類全般にまたがっているし、タブレット版やモバイル版は介護記録の部分にほとんど特化している。)
利用者・契約アプリ
利用者(被介護者)の基本情報といったマスタデータや介護施設との契約を管理する。
(図)利用者・契約管理部分のデータ関連図 (理解のため、ある程度抽象化しているため、実際のテーブル構成とは異なる)
登場するデータ
利用者
施設利用者。被介護者。 User という名前だが、単なるデータであり、ログインユーザーでも、アプリケーションを利用するアクターでもない。
ケア情報
利用者に対する設定値のこと。予定や、1日に必要な水分量などケアに必要な情報が設定される。
事業所
入所と通所で分かれる。 入所は、通常の入所とショートステイに分かれる。 入所にはベッドが必要(利用者が宿泊するため)
契約
利用者、事業所と紐づく。同じ利用者に対して複数OKだが、契約期間が重複する契約は作れない。 入所の事業所と契約するには、ベッドを紐づける必要がある。 ベッドにも利用期間があり、ベッドの利用期間を過ぎた場合、他に割り当てられているベッドがなければ、契約期間内でも契約が失効する。
介護記録アプリ
日々の介護記録を入力、管理するもの。データのフローは、基本的に、介護記録の入力や予定の入力を受けて、まとめボードに反映する、という形になっている。
(図)介護記録アプリケーションのデータフロー
登場するデータ
ここで登場するデータは、主に以下の4分類で理解できる。
- 記録・申し送り
- 予定
- 利用者の状態
- まとめ
記録・申し送り
記録
定期的に利用者の状態や、利用者に対して実施したケアを記録したもの。 体温や血圧などの状態系は一日に何度も記録される。入浴やリハビリなど、予定のあるものは予定日に記録される。食事など、タイミング決まっているものはそのタイミングで記録される。20種類ある。
| ID | 識別子 | 日本語名 | 備考 |
|---|---|---|---|
| 1 | MEAL_MEDICATION_WATER | 食事・服薬・水分 | テーブルとしては時間帯ごとに分かれている |
| 2 | EXCRETION | 排泄 | |
| 3 | ORAL_CARE | 口腔 | |
| 4 | BATHING | 入浴 | |
| 5 | CARE_FUNCTIONAL_TRAINING | 機能訓練(生活) | |
| 6 | INDIVIDUAL_CARE | 個別ケア | |
| 7 | ROUND | 見守り・巡回 | |
| 8 | RECREATION_LEISURE | レク・余暇時間 | |
| 9 | ENVIRONMENTAL_MAINTENANCE | 環境設備 | |
| 10 | WAKE_UP | 起床 | |
| 11 | BED_TIME | 就寝 | |
| 12 | TUBE_FEEDING | 経管栄養 | |
| 13 | TEMPERATURE | 体温 | |
| 14 | BLOOD_PRESSURE | 血圧・脈拍 | |
| 15 | TREATMENT | 処置 | |
| 16 | BEDSORE | 褥瘡 | |
| 17 | VISIT | 回診・往診 | |
| 18 | REHABILITATION | リハビリ | |
| 19 | MEDICAL_FUNCTIONAL_TRAINING | 機能訓練(医療) | |
| 20 | MEAL_ROUND | ミールラウンド |
申し送り
発生ベースで利用者の状態を記録するもの。他の従業員への連絡的な機能で、連絡ツールのような機能があるが、基本的には記録と同じようなデータと理解してよい。副作用として、利用者のステータス変更する、予定を作成することもある。43種類ある。
ケア記録系
| ID | 識別子 | 日本語名 |
|---|---|---|
| 1 | MEAL | 食事 |
| 2 | WATER | 水分 |
| 3 | MEDICATION | 服薬 |
| 4 | EXCRETION | 排泄 |
| 5 | ORAL_CARE | 口腔ケア |
| 6 | BATHING | 入浴 |
| 7 | CARE_FUNCTIONAL_TRAINING | 介護機能訓練 |
| 8 | INDIVIDUAL_CARE | 個別ケア |
| 9 | ROUND | 巡回 |
| 10 | ENVIRONMENTAL_MAINTENANCE | 環境整備 |
| 11 | WAKEUP_TIME | 起床時間 |
| 12 | BED_TIME | 就寝時間 |
| 13 | RECREATION | レクリエーション |
| 14 | TEMPERATURE | 体温 |
| 15 | BLOOD_PRESSURE | 血圧 |
| 16 | TREATMENT | 処置 |
| 17 | BEDSORE | 褥瘡 |
| 18 | VISIT | 回診・往診 |
| 19 | REHABILITATION | リハビリ |
| 20 | MEDICAL_FUNCTIONAL_TRAINING | 医療機能訓練 |
生活イベント・状態系
| ID | 識別子 | 日本語名 |
|---|---|---|
| 21 | GROOMING | 整容 |
| 22 | RESTRAINT | 身体拘束 |
| 23 | SUCTION | 吸引 |
| 24 | ADMISSION | 入所 |
| 25 | ACCIDENT | 事故 |
| 26 | MEETING | 面会 |
| 27 | HOSPITALIZATION | 入院 |
| 28 | OUTING | 外出 |
| 29 | NEAR_MISS_INCIDENT | ヒヤリ・ハット |
| 30 | HEALTH_CONDITION | 健康状態 |
| 31 | NUTRITION_INTAKE_CONDITION | 摂食栄養状態 |
| 32 | SLEEP_CONDITION | 睡眠状態 |
| 33 | MENTAL_CONDITION | 精神状態 |
| 34 | PHYSICAL_CONDITION | 身体状態 |
| 35 | USER_INTENT | 本人意向 |
連携・管理系
| ID | 識別子 | 日本語名 |
|---|---|---|
| 36 | MEDICAL_COLLABORATION | 医療機関連携(受診含) |
| 37 | FAMILY_FRIEND_COLLABORATION | 家族・知人 |
| 38 | EXTERNAL_COLLABORATION | 他事業所・行政機関 |
| 39 | CONFERENCE | カンファレンス/会議 |
| 40 | NOTICE | 業務連絡 |
| 41 | DISCHARGE | 退所 |
| 42 | DISCHARGE_FROM_HOSPITAL | 退院 |
| 43 | OUTING_RETURN | 外出(戻り) |
予定
利用者に対するケアの実施予定。
以下の2系統に分類できる。(packages/backend/src/modules/summary-board/types/summary.ts の ScheduleType より)
周期スケジュール
入浴、リハビリ、機能訓練、リネン交換は、特定の予定に対する機能(予定変更や未実施予定のスライド)があるため、各予定をデータとして持つ必要があるため、月初に1ヶ月分の予定データが自動生成される。
| 日本語名 | バッチサービス | 備考 |
|---|---|---|
| 入浴 | BathingRollingScheduleBatchService | 特定の予定を変更できる機能がある。 |
| リハビリ | RehabilitationScheduleBatchService | 特定の予定を変更できる機能がある。 |
| 機能訓練 | FunctionalTrainingScheduleBatchService | 実施有無に応じてスライド(日数繰り越し)する仕組みがある。 |
| 特定の予定を変更できる機能がある。 | ||
| リネン交換 | CareLinenReplacementScheduleBatchService | 実施有無に応じてスライド(日数繰り越し)する仕組みがある。 |
| 食事 | - | 特定の予定に対する機能がないため、設定値のみを保持 |
| 服薬 | - | 特定の予定に対する機能がないため、設定値のみを保持 |
| 下剤 | - | 特定の予定に対する機能がないため、設定値のみを保持 |
| 見守り・巡回 | - | 特定の予定に対する機能がないため、設定値のみを保持 |
| 個別ケア | - | 特定の予定に対する機能がないため、設定値のみを保持 |
| 処置 | - | 特定の予定に対する機能がないため、設定値のみを保持 |
| 経管栄養 | - | 特定の予定に対する機能がないため、設定値のみを保持 |
申し送り起点スケジュール
申し送り登録時に予定が作成される。
| 識別子 | 日本語名 |
|---|---|
| VISIT | 回診・往診 |
| GROOMING | 整容 |
| MEETING | 面会 |
| HOSPITALIZATION | 入院 |
| DISCHARGE_FROM_HOSPITAL | 退院 |
| OUTING | 外出 |
| OUTING_RETURN | 外出(戻り) |
| MEDICAL_COLLABORATION | 医療機関連携 |
| FAMILY_FRIEND_COLLABORATION | 家族・知人 |
| EXTERNAL_COLLABORATION | 他事業所・行政機関 |
その他のスケジュール
| 識別子 | 日本語名 | 説明 |
|---|---|---|
| ExcretionKotSchedule | 排泄KOT | 最終排便からの日数追跡(日次バッチ) |
| ※最終排便日は、テーブルで直接管理する仕組みに移行中のため、廃止予定 |
まとめボード
記録や予定をまとめたもの。画面名は、まとめボード、時系列ボードなど。
情報のながれ
データが入力されて、まとめボードに反映される、というのが基本的なフロー。 イベントベースで、どうデータが連動するか把握する。
記録が作られたとき
記録が保存されると、同期的に SummaryBoardService.update() が呼ばれ、まとめボードが即時更新される。
※ すべての記録サービス(体温、血圧、食事、排泄など)が同じパターンで SummaryBoardService を呼び出す。
予定が作成・変更されたとき
ケア情報の変更と申し送りの2経路がある。いずれも最終的に SummaryBoardService.update() を呼ぶ。
例:
- 食事時間を8時→9時に変更した場合、当日以降のまとめボードで、食事予定が9時で表示される。
- 申し送りで往診の予定を登録した場合、予定日のまとめボードで、往診予定が表示される。
利用者のステータスが更新されたとき
ケア情報・異常値設定・申し送りの3経路がある。
例:
- ケア情報で、経管栄養ありと登録すると、当日以降のまとめボードに反映される。
- 異常値設定で、必要な水分量を登録すると、当日以降のまとめボードで水分量が足りない場合に警告が表示される。
- 申し送りで、入院を登録すると、まとめボードでその利用者が入院中と表示される。
月初になったとき
※ これだけテクニカルな背景のイベント
バッチ処理で1ヶ月分の予定を一括生成する。個別で変更する機能に対応するためのテクニカルなもの。
対象の予定:
| バッチサービス | 対象 | 生成タイミング | 備考 |
|---|---|---|---|
| BathingRollingScheduleBatchService | 入浴 | 月次 | 実施有無でスライドあり |
| RehabilitationScheduleBatchService | リハビリ | 月次 | |
| FunctionalTrainingScheduleBatchService | 機能訓練 | 月次 | |
| CareLinenReplacementScheduleBatchService | リネン交換 | 月次 | 実施有無でスライドあり(2週間窓) |
| ExcretionKotScheduleBatchService | 排泄KOT | 日次 | 最終排便からの日数を計算 |
| ※最終排便日は、テーブルで直接管理する仕組みに移行中のため、廃止予定 |
帳票作成
役所提出用の書類作成。基本的に、フォームに入れてexcelやPDFなどに出力するもので、構造的な複雑さはなく、シンプルな構成になっている。
(※ ExcelファイルやPDFファイルを作成する上での、技術的な複雑さは存在する。)
利用者状態分析
利用者についた記録や申し送りから、利用者のスコア(健康状態のようなもの)を算出する。 算出ロジック自体は複雑なものもあるが、データや処理のフローとしては、定期的に記録や申し送り取って来てスコアにしてスコア用テーブルに書き込む、といったシンプルな構成になっている。