远程患者监测应用后端模板
提供来自家庭 IoT 医疗设备对患者数据的安全访问,以实现有效监测
一个在 Back4app 上的生产就绪的 RPM 应用后端,用于从 IoT 设备安全访问患者数据,包含监测日志和用户消息,并具有集中审计日志。其特色包括 ER 图、数据字典、JSON 模式、API 游乐场,以及用于快速引导的 AI代理 提示。
关键要点
交付一个用于远程患者监控的后端,具备安全访问控制、物联网数据检索和监控日志,以便您的产品团队可以专注于用户体验和合规性。
- 以物联网为首的数据模型 — 保持患者身份、设备数据和监控日志明显区分但在身份验证和授权上相互关联。
- 安全消息传递 — 患者与临床医生之间的线程消息,带有明确的已读回执和保留控制。
- 版本化设备数据 — 存储带有版本元数据的设备数据,确保更新的读数和通知得到有效跟踪。
- 监控日志生命周期 — 高效管理监控日志,记录用户交互和设备状态。
- 合规审计日志 — 集中式审计日志捕获敏感事件以供审核和遵守健康法规。
RPM 应用后端模板是什么?
Back4app 是一种后端即服务 (BaaS),用于快速交付。RPM 应用后端模板提供了一个预构建的患者档案、物联网设备数据、监控日志、安全消息和审计日志的架构。连接您喜欢的前端(React,Flutter,Next.js 等)并加快交付。
最佳适用:
概述
RPM 应用需要强大的数据边界、可审计的交易和对从物联网设备收集的敏感患者信息的可靠传递。
此模板定义了 PatientProfile、DeviceData、MonitoringLog、UserMessage 和 AuditLog 类,拥有所有权和基于角色的规则,以便团队可以快速而安全地实现 RPM 应用。
核心 RPM 应用功能
该中心的每个技术卡片都利用相同的 RPM 应用后端架构,包含 PatientProfile、DeviceData、MonitoringLog、UserMessage 和 AuditLog。
患者档案与身份验证
PatientProfile 存储身份信息、联系详情和偏好,以及与已认证用户的链接。
版本化设备数据
DeviceData 存储设备类型、原始数据、记录时间、版本和用户来源。
监控日志管理
监控日志按时间顺序跟踪患者交互及状态记录。
安全的临床医生与患者的消息传递
用户消息支持 Provider 与患者之间的交流,支持附件和交付/阅读状态。
集中审计日志
审计日志捕获用户所采取行动的见解,确保明确的责任。
为什么要使用Back4app构建您的 RPM 应用后端?
Back4app 管理后端基本功能——安全、数据持久性、API 和实时更新——使您能够优先考虑用户体验、隐私和临床集成。
- •安全传输患者数据: 内置认证和访问控制使您能够限制每个设备阅读、监控日志或消息的特定用户可见性。
- •审计和来源追踪: AuditLog 记录谁访问、发布或修改了敏感数据,以确保合规性。
- •消息和实时通知: 线程消息、附件和可选的实时更新促进了患者与医疗 Provider 之间的顺畅沟通。
快速部署安全的 RPM 应用后端,专注于迭代临床工作流程,而不是后端复杂性。
核心优势
一个优先考虑数据隐私、来源和敏捷交付的 RPM 应用后端。
更快的患者体验
通过利用经过预验证的后端结构,快速交付设备数据视图、监控功能和安全消息。
强大的数据来源
维护设备数据和日志的版本控制,以便临床操作可以审计。
细粒度权限
通过基于角色的访问控制保护敏感记录,确保只有授权人员可以查看特定数据。
集成消息
线程消息和实时更新改善了患者与医疗专业人员之间的沟通。
合规准备日志记录
集中式审计日志保留详细的医疗合规和商业智能记录。
AI辅助初始配置
通过策划的AI代理提示启动开发,以搭建模式、权限和基本集成代码。
准备好构建安全的RPM应用程序了吗?
允许Back4app AI代理搭建您的RPM应用程序后端,从一个提示中生成患者档案、设备数据、监控日志和审计日志。
免费开始 - 每月50个AI代理提示,无需信用卡
技术栈
此RPM应用程序后端模板中包含所有内容。
ER 图
RPM 应用后台架构的实体关系模型。
涵盖患者档案、物联网设备数据、监控日志、消息和审计日志记录的架构。
查看图表源
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
}
集成流程
身份验证、数据检索、监控更新和消息传递的典型运行流程。
查看图表源
sequenceDiagram
participant User as Patient
participant App as RPM Dashboard App
participant Clinician
participant Back4app as Back4app Cloud
User->>App: Sign in with email or SSO
App->>Back4app: POST /login (credentials/SSO token)
Back4app-->>App: Return Session Token + Patient context
User->>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)
User->>App: View active Treatment Plan
App->>Back4app: GET /classes/TreatmentPlan?where={"patient":Pointer("PatientProfile","p123"),"status":"active"}
Back4app-->>App: TreatmentPlan object
User->>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-->>User: Real-time notification (new message / result available)
Clinician->>Back4app: Update LabResult (finalize)
Back4app-->>App: LiveQuery event -> App fetches updated LabResult
App-->>User: Alert: "New lab result available"数据字典
RPM应用程序架构中每个类的完整字段级参考。
| 字段 | 类型 | 描述 | 必需 |
|---|---|---|---|
| objectId | String | Auto-generated unique identifier | 自动 |
| user | Pointer<_User> | Linked Back4app user account | |
| medicalRecordNumber | String | Unique MRN for the patient | |
| displayName | String | Patient full name shown in UI | |
| dateOfBirth | Date | Patient date of birth | — |
| primaryClinic | String | Primary clinic or provider group | — |
| isActive | Boolean | Active portal access flag | |
| createdAt | Date | Auto-generated creation timestamp | 自动 |
| updatedAt | Date | Auto-generated last-update timestamp | 自动 |
9字段在PatientProfile中
安全性和权限
ACL、CLP和加密策略如何保护患者数据、物联网数据、消息和审计日志。
基于角色的访问和所有权
应用访问控制列表(ACL),以便患者可以查看自己的设备数据和监控日志,而临床医生可以查看与其指定患者相关的数据;CLP防止对类的未经授权的操作。
加密的有效负载和附件
安全存储敏感数据,使用加密,并利用签名URL安全访问大型文件。
仅追加的审计记录
记录来自服务器端函数的审计日志事件,以保护历史合规数据免受篡改。
模式(JSON)
原始JSON模式定义,准备复制到Back4app或用作实施参考。
{
"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代理根据此模板生成RPM应用,包括后端模式、访问控制和初始前端集成。
在Back4app上创建一个具有此架构和行为的RPM应用后端。 架构: 1. PatientProfile: user(指向用户的指针,必填),fullName(字符串,必填),dob(日期,选填),contact(对象),medicalRecordNumber(字符串,必填,唯一);objectId,createdAt,updatedAt。 2. DeviceData: patient(指向PatientProfile的指针,必填),deviceType(字符串),dataPayload(对象),recordedAt(日期,必填),version(数字,默认为1);objectId,createdAt,updatedAt。 3. MonitoringLog: patient(指向PatientProfile的指针,必填),data(指向DeviceData的指针,必填),timestamp(日期,必填),status(字符串,必填);objectId,createdAt,updatedAt。 4. UserMessage: sender(指向用户的指针,必填),recipient(指向用户的指针,必填),threadId(字符串,必填),body(字符串),attachments(文件数组),status(字符串:已发送,已发送,已阅读),sentAt(日期);objectId,createdAt,updatedAt。 5. AuditLog: actor(指向用户的指针,必填),action(字符串,必填),entityType(字符串,必填),entityId(字符串,必填),payload(对象,选填),createdAt(日期);objectId,createdAt,updatedAt。 安全性: - 强制执行ACL,使患者只能读取他们的DeviceData和MonitoringLog记录。临床医生查看指定的患者。对敏感过渡使用云代码并在服务器端编写审计日志条目。使用加密保护您的数据。 身份验证: - 支持患者和临床医生注册;角色分配;安全登录和会话管理。 行为: - 患者登录,获取最新的DeviceData和MonitoringLogs,向临床医生线程发送消息,并接收通知。临床医生发布设备数据和监控日志;系统为发布操作写入审计日志条目。 交付: - 带有架构、CLPs、ACLs、用于发布和审计日志的云代码钩子的Back4app应用,以及用于患者和临床医生视图的初始前端集成。
按下面的按钮打开带有此模板提示预填充的代理。
这是没有技术后缀的基本提示。您可以在之后调整生成的前端栈。
API 演示区
尝试对 RPM 应用程序架构使用 REST 和 GraphQL 端点。响应使用模拟数据,不需要 Back4app 账户。
使用与此模板相同的架构。
选择您的技术
展开每个卡片以获取集成步骤、状态模式、数据模型示例和离线备注。
Flutter RPM 应用后端
React RPM 应用后端
React 原生 RPM 应用后端
Next.js RPM 应用后端
JavaScript RPM 应用后端
Android RPM 应用后端
iOS RPM 应用后端
Vue RPM 应用后端
Angular RPM 应用后端
GraphQL RPM 应用后端
REST API RPM 应用后端
PHP RPM 应用后端
.NET RPM 应用后端
您从每种技术中获得的内容
每个技术栈使用相同的 RPM 应用后端模式和 API 规则。
预构建的患者档案模式
通过统一的rpm仪表板结构轻松管理和访问患者数据。
物联网设备数据集成
无缝连接和监控物联网设备以获取实时的rpm仪表板见解。
为rpm仪表板提供安全消息
通过加密消息安全地与患者和Provider沟通。
综合监控日志
通过详细的日志跟踪患者活动和健康指标,以获得rpm仪表板的信息。
REST/GraphQL APIs支持
灵活的API选项,使您能够高效地与您的rpm仪表板后端进行交互。
合规审计日志
通过详细的审计记录维护所有rpm仪表板活动的合规性。
Rpm仪表板框架比较
评估所有支持的技术栈的设置速度、SDK样式和AI支持。
| 框架 | 设置时间 | Rpm仪表板的好处 | SDK 类型 | AI 支持 |
|---|---|---|---|---|
| ~3–7分钟 | 移动和Web上rpm仪表板的单一代码库。 | Typed SDK | 完整 | |
| 快速(5分钟)设置 | rpm仪表板的快速Web仪表板。 | Typed SDK | 完整 | |
| ~5分钟 | rpm仪表板的跨平台移动应用。 | Typed SDK | 完整 | |
| 大约5分钟 | rpm仪表板的服务器渲染Web应用。 | Typed SDK | 完整 | |
| ~3分钟 | rpm仪表板的轻量级Web集成。 | Typed SDK | 完整 | |
| ~3–7分钟 | Android的本地应用用于rpm仪表板。 | Typed SDK | 完整 | |
| 快速(5分钟)设置 | iOS的本地应用用于rpm仪表板。 | Typed SDK | 完整 | |
| ~5分钟 | Reactive的Web UI用于rpm仪表板。 | Typed SDK | 完整 | |
| 大约5分钟 | rpm仪表板的企业Web应用。 | Typed SDK | 完整 | |
| 快速(2分钟)设置 | 灵活的GraphQL API用于rpm仪表板。 | GraphQL API | 完整 | |
| ~2分钟 | REST API集成用于rpm仪表板。 | REST API | 完整 | |
| 少于5分钟 | rpm仪表板的服务器端PHP后端。 | REST API | 完整 | |
| ~5分钟 | .NET后端用于rpm仪表板。 | Typed SDK | 完整 |
设置时间表示从项目初始化到首次患者登录和使用此模板模式查询设备数据的预期持续时间。
常见问题
有关使用此模板构建 RPM 应用后端的常见咨询。