患者门户
与 AI Agent 一起构建
患者门户后台

患者门户应用后台模板
提供实验室结果,管理治疗计划,并实现安全的医患信息传递

一个在 Back4app 上准备好生产的 患者门户后台,具备安全的实验室结果交付、治疗计划管理、临床信息传递、预约链接和集中审计日志。包括 ER 图、数据字典、JSON 模式、API 游乐场,以及一个用于快速启动的AI Agent 提示。

关键要点

推出一个面向患者的后台,具有安全访问控制、实验室版本控制、治疗计划历史记录、线程消息和审计跟踪,以便您的产品团队可以专注于用户体验和合规性。

  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存储测试类型、原始结果负载、报告时间、版本和Provider来源。

治疗计划生命周期

TreatmentPlan 存储计划内容、Provider 批准者、状态(草稿、激活、完成)和有效时间窗口。

安全的医生–患者消息传递

消息支持线程、附件、发送者/接收者指针和交付/阅读状态。

预约链接

预约链接患者、Provider、计划时间和访问上下文的状态。

集中审计日志

AuditLog 捕获参与者身份、行动类型、实体上下文和负载元数据,以确保合规性。

为什么使用Back4app构建您的患者门户应用程序后端?

Back4app 处理后端基础——安全性、持久性、API 和实时——让您可以专注于患者体验、隐私工作流程和临床整合。

  • 临床数据的安全传递: 内置的身份验证和 ACL/CLP 模式让您可以精确控制哪些用户可以查看每个实验室结果、治疗计划或信息。
  • 审计和来源: AuditLog 捕获了谁查看、发布或修改了敏感记录,以便您支持合规性和调试。
  • 消息传递和通知: 线程消息、附件和可选实时更新使临床医生与患者的对话顺畅及时。

快速部署安全的患者门户后端,并在临床工作流程上进行迭代,而不是后端管道。

核心优势

一个强调隐私、来源和快速交付的患者门户后端。

加速患者体验

通过重用经过验证的后端合同,更快地交付实验室结果视图、治疗计划和安全消息。

强大的数据来源

版本实验室结果和治疗计划,以便临床变化可审计和可追溯。

细粒度权限

使用ACL/CLP和角色检查保护敏感项目,以便只有被允许的临床医生和患者可以访问这些项目。

集成消息

具有附件的线程消息和可选的实时更新改善了临床医生与患者的协作。

合规准备日志记录

集中审计日志支持审查、事件调查和合规报告。

AI辅助引导

通过策划的AI代理提示快速启动开发,构建架构、ACL和基本集成代码。

准备建立一个安全的患者门户吗?

让 Back4app AI 代理构建您的患者门户后端,并从一个提示生成患者档案、实验室结果、治疗计划、消息和审计日志。

免费开始 — 每月 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 防止未授权的类操作。

加密的有效负载和附件

通过签名 URL 存储敏感的二进制大对象(实验室附件、PDF),并使用存储级加密进行静态保护。

追加式审计日志

从服务器端云代码写入审计日志条目,以确保用户无法篡改历史合规记录。

模式 (JSON)

原始 JSON 模式定义已准备好复制到 Back4app 或用作实现参考。

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 (Pointer to User, required), fullName (String, required), dob (Date, optional), contact (Object), medicalRecordNumber (String, required, unique); objectId, createdAt, updatedAt.
2. ProviderProfile: user (Pointer to User, required), specialty (String), clinic (String), contact (Object); objectId, createdAt, updatedAt.
3. LabResult: patient (Pointer to PatientProfile, required), Provider (Pointer to ProviderProfile, required), reportType (String), resultData (Object), reportedAt (Date, required), version (Number, default 1), attachments (Array of File), visibility (String: patient-only, Provider-only, shared); objectId, createdAt, updatedAt.
4. TreatmentPlan: patient (Pointer to PatientProfile, required), Provider (Pointer to ProviderProfile, required), summary (String), details (Object), status (String: draft, active, completed), effectiveFrom (Date), effectiveTo (Date), version (Number); objectId, createdAt, updatedAt.
5. Message: sender (Pointer to User, required), recipient (Pointer to User, required), threadId (String, required), body (String), attachments (Array of File), status (String: sent, delivered, read), sentAt (Date); objectId, createdAt, updatedAt.
6. Appointment: patient (Pointer to PatientProfile, required), Provider (Pointer to ProviderProfile, required), scheduledAt (Date, required), status (String: scheduled, canceled, completed), location (String); objectId, createdAt, updatedAt.
7. AuditLog: actor (Pointer to User, required), action (String, required), entityType (String, required), entityId (String, required), payload (Object, optional), createdAt (Date); objectId, createdAt, updatedAt.

安全性:
- 强制执行 ACL,以便患者只能读取他们的 LabResult 和 TreatmentPlan 记录。 Providers 查看分配的患者。使用云代码进行敏感过渡并在服务器端写入 AuditLog 条目。使用签名 URL 和存储加密保护附件。

身份验证:
- 支持患者和 Providers 的注册;角色分配;安全登录和会话管理。

行为:
- 患者登录,获取最新的 LabResult 版本和 TreatmentPlans,将消息发送到 Provider 线程,并接收通知。 Providers 发布实验室结果和治疗计划;系统为发布操作写入 AuditLog 条目。

交付:
- 包含模式、CLPs、ACL、云代码钩子用于发布和审计日志,以及患者和 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契约。

统一的患者数据结构

轻松管理和访问所有患者信息在一个架构中。

为 患者门户 提供安全消息传递

促进患者与医疗 Provider 之间的安全沟通。

实时预约调度

允许患者无缝预约和管理预约。

全面的实验室结果追踪

使患者能够安全查看和追踪他们的实验室结果。

敏感数据的访问控制

确保只有授权人员可以查看患者记录。

REST/GraphQL APIs 用于 患者门户

使用灵活的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用于患者门户。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?
我如何将消息标记为已读?
React Native 能够缓存治疗计划以供离线使用吗?
我如何防止未经授权分享实验室PDF?
在移动设备上显示预约上下文的最佳方法是什么?
审计日志的整个流程是如何工作的?
我如何支持患者对治疗计划的确认?

全球开发者信赖

加入使用Back4app模板更快交付安全患者门户的团队

G2 Users Love Us Badge

准备好构建您的患者门户应用了吗?

在几分钟内启动您的患者门户项目。无须信用卡。

选择技术