患者ポータル
AIエージェントで構築
患者ポータルバックエンド

患者ポータルアプリバックエンドテンプレート
ラボ結果を提供し、治療計画を管理し、セキュアな医師–患者間メッセージングを可能にします

生産準備完了の患者ポータルバックエンドがBack4app上にあり、セキュアなラボ結果の配信、治療計画の管理、臨床医メッセージング、予約リンク、および中央監査ログを備えています。ER図、データ辞書、JSONスキーマ、APIプレイグラウンドと、迅速なブートストラップ用のAIエージェントプロンプトが含まれています。

主な要点

安全なアクセス制御、ラボのバージョニング、治療計画の履歴、スレッドメッセージング、および監査証跡を備えた患者向けバックエンドを構築し、製品チームがUXとコンプライアンスに集中できるようにします。

  1. 患者優先のデータモデル患者の身元、実験結果、治療、およびメッセージを別々にモデル化しながらも、明確な出所と認可のためにリンクさせます。
  2. 安全なメッセージングProviderと患者の間でのスレッド式で添付ファイルに優しいメッセージのやり取りを、明確な既読通知と保持管理とともに提供します。
  3. バージョン管理された実験結果出所とバージョンのメタデータを持つ実験結果を保存し、更新されたレポートと補足が追跡されるようにします。
  4. 治療計画ライフサイクルProviderによる治療計画のドラフト管理、承認、患者の確認、およびバージョン履歴。
  5. コンプライアンスに配慮したログ中央集中的なAuditLogクラスは、レビュー、監視、およびコンプライアンスのための敏感なイベントを記録します。

患者ポータルアプリのバックエンドテンプレートとは?

Back4appは迅速な提供のためのバックエンドサービス(BaaS)です。患者ポータルアプリのバックエンドテンプレートは、患者プロファイル、ラボ結果、治療計画、安全なメッセージング、アポイントメント、および監査ログのためのあらかじめ構築されたスキーマです。あなたの好みのフロントエンド(React、Flutter、Next.js など)を接続し、より速く出荷してください。

最適:

患者ポータルテレヘルスメッセージング安全な検査結果の配信治療計画管理臨床医と患者のコミュニケーションHIPAAに配慮したプロトタイプを構築するチーム

概要

患者ポータルには強力なデータ境界、監査可能な変更、および検査結果や治療計画などの機密アイテムの信頼性のある配信が必要です。

このテンプレートは、PatientProfile、LabResult、TreatmentPlan、Message、ProviderProfile、Appointment、およびAuditLogを所有権とロールベースのルールで定義し、チームが患者ポータルを迅速かつ安全に実装できるようにしています。

コア患者ポータル機能

このハブのすべてのテクノロジーカードは、PatientProfile、LabResult、TreatmentPlan、Message、ProviderProfile、Appointment、およびAuditLogを持つ同じ患者ポータルバックエンドスキーマを使用しています。

患者プロフィールと認証

PatientProfileは、認証されたユーザーへのポインタとともに、アイデンティティ、連絡先の詳細、および設定を保存します。

バージョン管理された検査結果

LabResultは、検査タイプ、生の結果ペイロード、reportedAt、バージョン、およびProviderの出所を保存します。

治療計画ライフサイクル

TreatmentPlanは計画の内容、Providerの承認者、ステータス(ドラフト、アクティブ、完了)、および有効なウィンドウを保存します。

安全な医師–患者メッセージング

メッセージはスレッド、添付ファイル、送信者/受信者ポインタ、配信/既読ステータスをサポートします。

アポイントメントリンク

アポイントメントは患者、Provider、予定時間、および訪問のコンテキストに対するステータスをリンクします。

集中管理された監査ログ

AuditLogは、コンプライアンスのために、アクターのアイデンティティ、アクションのタイプ、エンティティのコンテキスト、およびペイロードのメタデータをキャプチャします。

なぜBack4appで患者ポータルアプリのバックエンドを構築するのか?

Back4appはバックエンドの基本—セキュリティ、永続性、API、およびリアルタイム—を処理するため、患者体験、プライバシーのワークフロー、臨床統合に集中できます。

  • 臨床データの安全な配信: 組み込みの認証とACL/CLPパターンにより、どのユーザーが各検査結果、治療計画、またはメッセージを表示できるかを正確に制御できます。
  • 監査と出所: AuditLogは、誰が敏感な記録を表示、公開、または変更したかを記録するため、コンプライアンスとデバッグをサポートできます。
  • メッセージングと通知: スレッド形式のメッセージ、添付ファイル、オプションのライブ更新により、医療従事者と患者の会話がスムーズでタイムリーになります。

安全な患者ポータルのバックエンドを迅速に展開し、バックエンドの配管ではなく臨床ワークフローに反復できます。

コアの利点

プライバシー、出所、迅速な配信を重視した患者ポータルのバックエンド。

加速された患者体験

検証されたバックエンド契約を再利用することにより、ラボ結果の表示、治療計画の配信、および安全なメッセージングをより迅速に行います。

強力なデータの出所

臨床の変更が監査可能で追跡可能であるように、バージョン管理された検査結果と治療計画。

詳細な権限設定

許可された臨床医と患者のみがアクセスできるように、ACL/CLPと役割チェックで機密アイテムを保護します。

統合メッセージング

添付ファイル付きのスレッド形式のメッセージとオプションのリアルタイム更新により、臨床医と患者のコラボレーションが向上します。

コンプライアンス対応のログ記録

中央集権的なAuditLogは、レビュー、インシデント調査、及びコンプライアンス報告をサポートします。

AI支援のブートストラップ

スキーマ、ACL、および基本的な統合コードを支えるキュレーションされたAIエージェントのプロンプトで開発を迅速に開始します。

安全な患者ポータルを構築する準備は整いましたか?

Back4app AIエージェントに、患者ポータルのバックエンドを構築させ、1つのプロンプトから患者プロファイル、検査結果、治療計画、メッセージング、および監査ログを生成させましょう。

無料で始められます — 月に50のAIエージェントプロンプト、クレジットカードは不要です

技術スタック

この患者ポータルバックエンドテンプレートに含まれているすべて。

フロントエンド
13以上のテクノロジー
バックエンド
Back4app
データベース
MongoDB
認証
組み込みの認証 + セッション
API
RESTとGraphQL
リアルタイム
Live Queries

ER図

患者ポータルバックエンドスキーマのエンティティ関係モデル。

図のソースを表示
Mermaid
erDiagram
    PatientProfile ||--o{ LabResult : "has"
    PatientProfile ||--o{ TreatmentPlan : "receives"
    PatientProfile ||--o{ Message : "context for"
    PatientProfile ||--o{ Appointment : "scheduled in"
    _User ||--o{ Message : "sends/receives"
    _User ||--o{ TreatmentPlan : "authors"
    _User ||--o{ Appointment : "provides"

    PatientProfile {
        String objectId PK
        Pointer user FK
        String medicalRecordNumber
        String displayName
        Date dateOfBirth
        String primaryClinic
        Boolean isActive
        Date createdAt
        Date updatedAt
    }

    LabResult {
        String objectId PK
        Pointer patient FK
        Pointer orderedBy FK
        String testCode
        String testName
        String resultValue
        String units
        String referenceRange
        String status
        Date publishedAt
        Array attachments
        Date createdAt
        Date updatedAt
    }

    TreatmentPlan {
        String objectId PK
        Pointer patient FK
        Pointer createdBy FK
        String summary
        String details
        String status
        Date startDate
        Date endDate
        Date createdAt
        Date updatedAt
    }

    Message {
        String objectId PK
        String conversationId
        Pointer from FK
        Pointer to FK
        Pointer patient FK
        String body
        Array attachments
        Boolean isRead
        Date sentAt
        Date createdAt
        Date updatedAt
    }

    Appointment {
        String objectId PK
        Pointer patient FK
        Pointer provider FK
        Date startAt
        Date endAt
        String location
        String status
        String reason
        Date createdAt
        Date updatedAt
    }

    AuditLog {
        String objectId PK
        Pointer actor FK
        String entityType
        String entityId
        String action
        String summary
        Object metadata
        Date createdAt
        Date updatedAt
    }

統合フロー

認証、検査結果の配信、治療計画の更新、およびメッセージングの典型的な実行フロー。

図のソースを表示
Mermaid
sequenceDiagram
  participant Patient
  participant App as Patient Portal App
  participant Clinician
  participant Back4app as Back4app Cloud

  Patient->>App: Sign in with email or SSO
  App->>Back4app: POST /login (credentials/SSO token)
  Back4app-->>App: Return Session Token + Patient context

  Patient->>App: Open Dashboard (profile & recent labs)
  App->>Back4app: GET /classes/PatientProfile?where={"user":Pointer("_User", "u123")}
  Back4app-->>App: PatientProfile object
  App->>Back4app: GET /classes/LabResult?where={"patient":Pointer("PatientProfile","p123")}&order=-publishedAt
  Back4app-->>App: List of LabResult (latest first)

  Patient->>App: View active Treatment Plan
  App->>Back4app: GET /classes/TreatmentPlan?where={"patient":Pointer("PatientProfile","p123"),"status":"active"}
  Back4app-->>App: TreatmentPlan object

  Patient->>App: Send secure message to clinician
  App->>Back4app: POST /classes/Message (conversationId, body, to: Pointer(_User, clinicianId))
  Back4app-->>App: Message objectId

  Back4app-->>App: LiveQuery -> new Message or LabResult update
  App-->>Patient: Real-time notification (new message / result available)

  Clinician->>Back4app: Update LabResult (finalize)
  Back4app-->>App: LiveQuery event -> App fetches updated LabResult
  App-->>Patient: Alert: "New lab result available"

データ辞書

患者ポータルスキーマ内のすべてのクラスに対する完全なフィールドレベルの参照。

フィールドタイプ説明必須
objectIdStringAuto-generated unique identifier自動
userPointer<_User>Linked Back4app user account
medicalRecordNumberStringUnique MRN for the patient
displayNameStringPatient full name shown in UI
dateOfBirthDatePatient date of birth
primaryClinicStringPrimary clinic or provider group
isActiveBooleanActive portal access flag
createdAtDateAuto-generated creation timestamp自動
updatedAtDateAuto-generated last-update timestamp自動

9 フィールドを PatientProfile に

セキュリティと権限

ACL、CLP、および暗号化戦略がラボ結果、治療計画、メッセージ、および監査ログをどのように保護するか。

役割ベースのアクセスと所有権

患者が自分の記録を見られるようにACLを適用し、Providerが割り当てられた患者データを表示できるようにします; CLPは unauthorized class operations を防ぎます。

暗号化されたペイロードと添付ファイル

機密性の高いブロブ(ラボ添付ファイル、PDF)を署名されたURLの背後に保存し、保存時の保護のためにストレージレベルの暗号化を使用します。

追加のみの監査トレイル

サーバーサイドのCloud CodeからAuditLogエントリを書き込み、ユーザーが履歴コンプライアンス記録を改ざんできないようにします。

スキーマ (JSON)

Back4app にコピーするための生の JSON スキーマ定義、または実装の参照として使用します。

JSON
{
  "classes": [
    {
      "className": "PatientProfile",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "user": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "medicalRecordNumber": {
          "type": "String",
          "required": true
        },
        "displayName": {
          "type": "String",
          "required": true
        },
        "dateOfBirth": {
          "type": "Date",
          "required": false
        },
        "primaryClinic": {
          "type": "String",
          "required": false
        },
        "isActive": {
          "type": "Boolean",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "LabResult",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "orderedBy": {
          "type": "Pointer",
          "required": false,
          "targetClass": "_User"
        },
        "testCode": {
          "type": "String",
          "required": false
        },
        "testName": {
          "type": "String",
          "required": true
        },
        "resultValue": {
          "type": "String",
          "required": false
        },
        "units": {
          "type": "String",
          "required": false
        },
        "referenceRange": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "publishedAt": {
          "type": "Date",
          "required": false
        },
        "attachments": {
          "type": "Array",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "TreatmentPlan",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "createdBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "summary": {
          "type": "String",
          "required": true
        },
        "details": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "startDate": {
          "type": "Date",
          "required": false
        },
        "endDate": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Message",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "conversationId": {
          "type": "String",
          "required": true
        },
        "from": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "to": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "body": {
          "type": "String",
          "required": true
        },
        "attachments": {
          "type": "Array",
          "required": false
        },
        "isRead": {
          "type": "Boolean",
          "required": true
        },
        "sentAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Appointment",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "provider": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "startAt": {
          "type": "Date",
          "required": true
        },
        "endAt": {
          "type": "Date",
          "required": true
        },
        "location": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "reason": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "AuditLog",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "actor": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "entityType": {
          "type": "String",
          "required": true
        },
        "entityId": {
          "type": "String",
          "required": true
        },
        "action": {
          "type": "String",
          "required": true
        },
        "summary": {
          "type": "String",
          "required": true
        },
        "metadata": {
          "type": "Object",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

AI エージェントでビルド

このテンプレートから患者ポータル アプリを生成するために Back4app AI エージェントを使用します。バックエンドスキーマ、ACL、およびスターターフロントエンド統合が含まれています。

Back4app AI エージェント
ビルドする準備ができました
Back4app でこの正確なスキーマと動作を持つ患者ポータルバックエンドを作成します。

スキーマ:
1. PatientProfile: user (Userへのポインター、必須)、fullName (String、必須)、dob (Date、オプション)、contact (Object)、medicalRecordNumber (String、必須、一意); objectId、createdAt、updatedAt。
2. ProviderProfile: user (Userへのポインター、必須)、specialty (String)、clinic (String)、contact (Object); objectId、createdAt、updatedAt。
3. LabResult: patient (PatientProfileへのポインター、必須)、Provider (Pointer to ProviderProfile、必須)、reportType (String)、resultData (Object)、reportedAt (Date、必須)、version (Number、デフォルト 1)、attachments (Array of File)、visibility (String: 患者のみ、Providerのみ、共有); objectId、createdAt、updatedAt。
4. TreatmentPlan: patient (PatientProfileへのポインター、必須)、Provider (Pointer to ProviderProfile、必須)、summary (String)、details (Object)、status (String: 草案、アクティブ、完了)、effectiveFrom (Date)、effectiveTo (Date)、version (Number); objectId、createdAt、updatedAt。
5. Message: sender (Userへのポインター、必須)、recipient (Userへのポインター、必須)、threadId (String、必須)、body (String)、attachments (Array of File)、status (String: 送信済み、配信済み、既読)、sentAt (Date); objectId、createdAt、updatedAt。
6. Appointment: patient (PatientProfileへのポインター、必須)、Provider (Pointer to ProviderProfile、必須)、scheduledAt (Date、必須)、status (String: スケジュール済み、キャンセル、完了)、location (String); objectId、createdAt、updatedAt。
7. AuditLog: actor (Userへのポインター、必須)、action (String、必須)、entityType (String、必須)、entityId (String、必須)、payload (Object、オプション)、createdAt (Date); objectId、createdAt、updatedAt。

セキュリティ:
- ACLを強制して患者が自分のLabResultおよびTreatmentPlanの記録のみを読み取れるようにします。Providersは、割り当てられた患者を確認します。機密の遷移やサーバー側のAuditLogエントリの作成にはCloud Codeを使用します。添付ファイルは署名付きURLおよびストレージ暗号化で保護します。

認証:
- 患者とProvidersのサインアップをサポートします。役割の割り当て、安全なログイン、セッション管理。

動作:
- 患者がログインし、最新のLabResultバージョンおよびTreatmentPlansを取得し、Providerスレッドにメッセージを送信し、通知を受け取ります。Providersは、検査結果と治療計画を公開し、システムは公開アクションに関するAuditLogエントリを書き込みます。

配信:
- スキーマ、CLP、ACL、発行および監査ログ用のCloud Codeフック、および患者とProviderのビュー用のスターターフロントエンド統合を備えたBack4appアプリ。

下のボタンを押して、このテンプレートプロンプトが事前に入力されたエージェントを開きます。

これは技術接尾辞のない基本プロンプトです。生成されたフロントエンドスタックを後で調整できます。

数分でデプロイ月ごとに50の無料プロンプトクレジットカードは不要

APIプレイグラウンド

患者ポータルスキーマに対してRESTおよびGraphQLエンドポイントを試してみてください。レスポンスにはモックデータが使用され、Back4appアカウントは必要ありません。

common.loadingPlayground

このテンプレートと同じスキーマを使用します。

技術を選択する

各カードを展開して、統合ステップ、状態パターン、データモデルの例、およびオフラインノートを確認してください。

Flutter 患者ポータルバックエンド

React 患者ポータルバックエンド

React ネイティブ 患者ポータルバックエンド

Next.js 患者ポータルバックエンド

JavaScript 患者ポータルバックエンド

Android 患者ポータルバックエンド

iOS 患者ポータルバックエンド

Vue 患者ポータルバックエンド

Angular 患者ポータルバックエンド

GraphQL 患者ポータルバックエンド

REST API 患者ポータルバックエンド

PHP 患者ポータルバックエンド

.NET 患者ポータルバックエンド

各技術で得られるもの

すべてのスタックは同じ患者ポータルのバックエンドスキーマとAPI契約を使用しています。

統一された患者データ構造

すべての患者情報を1つのスキーマで簡単に管理・アクセスできます。

患者ポータル のための安全なメッセージング

患者と医療 Provider の間の安全なコミュニケーションを促進します。

リアルタイムの予約管理

患者がシームレスに予約を行い、管理できるようにします。

包括的な検査結果の追跡

患者が検査結果を安全に表示・追跡できるようにします。

機密データのアクセス制御

認可された職員のみが患者記録を表示できることを確認します。

REST/GraphQL API for 患者ポータル

柔軟なAPIを使用してさまざまなフロントエンドと簡単に統合します。

患者ポータルフレームワークの比較

すべてのサポートされているテクノロジーのセットアップ速度、SDKスタイル、AIサポートを比較します。

フレームワークセットアップ時間患者ポータルの利点SDKの種類AIサポート
迅速な(5分)セットアップモバイルとウェブの患者ポータルのための単一のコードベース。Typed SDKフル
~5分患者ポータルのための迅速なウェブダッシュボード。Typed SDKフル
約5分患者ポータルのためのクロスプラットフォームモバイルアプリ。Typed SDKフル
5分未満患者ポータルのためのサーバーレンダリングされたウェブアプリ。Typed SDKフル
~3分患者ポータルのための軽量なウェブインテグレーション。Typed SDKフル
迅速な(5分)セットアップ患者ポータルのためのネイティブ Android アプリ。Typed SDKフル
~5分患者ポータルのためのネイティブ iOS アプリ。Typed SDKフル
約5分React ウェブUI for 患者ポータル。Typed SDKフル
5分未満患者ポータルのためのエンタープライズウェブアプリ。Typed SDKフル
迅速な(2分)セットアップ患者ポータルのための柔軟な GraphQL API。GraphQL APIフル
~2分REST API の患者ポータル統合。REST APIフル
5分未満患者ポータルのためのサーバーサイド PHP バックエンド。REST APIフル
約5分.NET の患者ポータルのバックエンド。Typed SDKフル

セットアップ時間は、プロジェクトのブートストラップから最初の患者ログインとこのテンプレートスキーマを使用したラボ結果のクエリまでの予想される期間を反映しています。

よくある質問

このテンプレートを使用して患者ポータルバックエンドを構築する際の一般的な質問。

患者ポータルのバックエンドとは何ですか?
患者ポータルテンプレートには何が含まれていますか?
なぜ患者ポータルに Back4app を使用するのですか?
最新の検査結果とその Provider を1つのクエリで取得するにはどうすればよいですか?
メッセージを既読としてマークするにはどうすればよいですか?
React Nativeはオフライン使用のために治療計画をキャッシュできますか?
ラボのPDFを許可されていない共有から守るにはどうすればよいですか?
モバイルでのアポイントメントコンテキストを表示する最良の方法は何ですか?
監査ログのフローはエンドツーエンドでどのように機能しますか?
患者が治療計画を認識するのをどのようにサポートしますか?

世界中の開発者に信頼されています

Back4appテンプレートを使用して、セキュアな患者ポータルを迅速に提供するチームに参加しましょう。

G2 Users Love Us Badge

患者ポータルアプリの構築を始めますか?

数分で患者ポータルプロジェクトを開始できます。クレジットカードは不要です。

テクノロジーを選択