遠程病人監測應用程式後端範本
提供來自家庭物聯網醫療設備的病人數據安全訪問,以進行有效監測
一個準備好投入生產的RPM 應用程式後端於 Back4app,以安全訪問來自物聯網設備的病人數據,包括監測日誌和用戶消息,並具有集中式的審計日誌。它包含 ER 圖、數據字典、JSON 架構、API 操作環境,以及一個AI 代理提示,方便快速啟動。
關鍵要點
提供一個遠程病人監控的後端,具備安全訪問控制、物聯網數據檢索和監控日誌,讓您的產品團隊可以專注於用戶體驗和合規性。
- 以物聯網為中心的數據模型 — 保持病人身份、設備數據和監控日誌的明確建模,但為身份驗證和授權而連結。
- 安全消息傳遞 — 病人和臨床醫生之間的串聯消息,附有清晰的已讀回執和保存控制。
- 版本化設備數據 — 存儲帶有版本元數據的設備數據,確保更新的讀取和通知能有效追蹤。
- 監控日誌生命週期 — 有效地管理監控日誌,記錄用戶互動和設備狀態的變化。
- 符合合規要求的審計日誌 — 集中式 AuditLog 捕捉敏感事件以進行審查,並遵循健康法規。
什麼是 RPM 應用程序後端模板?
Back4app 是一個後端即服務 (BaaS) 的快速交付解決方案。RPM 應用程序後端模板提供了一個預先構建的架構,用於病人資料、物聯網設備數據、監控日誌、安全消息和審計日誌。連接您喜愛的前端 (React、Flutter、Next.js 等) 並加快交付速度。
最佳使用對象:
概覽
RPM 應用程序需要強大的數據邊界、可審計的交易和可靠的敏感病人信息傳遞,這些信息是從物聯網設備收集的。
此模板定義了 PatientProfile、DeviceData、MonitoringLog、UserMessage 和 AuditLog 類,並採用了所有權和基於角色的規則,以便團隊可以快速且安全地實施 RPM 應用程序。
核心 RPM 應用功能
此中心中的每個技術卡片都利用相同的 RPM 應用程式後端架構,特點包括 PatientProfile、DeviceData、MonitoringLog、UserMessage 和 AuditLog。
病人檔案與身份驗證
PatientProfile 存儲身份、聯絡詳情和偏好,並鏈接至已驗證的用戶。
版本化設備數據
DeviceData 存儲設備類型、原始數據、記錄時間、版本和用戶來源。
監控日志管理
MonitoringLog 追踪按時間順序記錄的病人互動及狀態。
安全的醫生-病人消息傳遞
UserMessage 促進 Provider 與病人之間的交流,支持附件和傳送/閱讀狀態。
集中式審計日誌
AuditLog 捕捉用戶採取的行動的見解,確保清晰的責任歸屬。
為什麼使用 Back4app 建立您的 RPM 應用後端?
Back4app 管理著後端的基本要素——安全性、數據持久性、API 和即時更新——使您能夠優先考慮用戶體驗、隱私和臨床整合。
- •安全轉移病人數據: 內建的身份驗證和訪問控制使您能夠限制每個設備讀取、監控日誌或消息對特定用戶的可見性。
- •審計和來源追蹤: AuditLog 記錄誰訪問、發佈或修改敏感數據,確保合規性。
- •消息傳遞和即時通知: 線程消息、附件和可選的即時更新促進了病人與醫療 Provider 之間的流暢溝通。
快速部署安全的 RPM 應用後端,專注於迭代臨床工作流程而不是後端的複雜性。
核心優勢
一個優先考慮數據隱私、來源和敏捷交付的 RPM 應用程式後端。
更快的病人體驗
通過利用經過預驗證的後端結構,快速發佈設備數據視圖、監控功能和安全消息。
強大的數據來源
保持設備數據和日誌的版本控制,以便臨床行動可供審計。
細粒度的權限控制
通過基於角色的訪問控制保護敏感紀錄,確保只有授權人員能查看特定數據。
集成消息
線上消息和即時更新改善了患者與醫療專業人員之間的溝通。
符合合規要求的日誌記錄
集中式審計日誌保留了醫療合規性和商業智慧的詳細記錄。
AI輔助的初始配置
通過精心策劃的AI代理提示啟動開發,以搭建架構、權限和基本集成代碼。
技術堆疊
此 RPM 應用程序後端模板中包含所有內容。
ER 圖
RPM應用後端架構的實體關係模型。
涵蓋患者檔案、IoT設備數據、監控日誌、消息和審計日誌記錄的架構。
查看圖表來源
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 來安全訪問大型文件。
僅附加的審計記錄
記錄服務器端函數的 AuditLog 事件,以保護歷史合規數據免受篡改。
架構(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 (指向 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 (指向 User 的指針,必填), recipient (指向 User 的指針,必填), threadId (字符串,必填), body (字符串), attachments (文件數組), status (字符串: 已發送,已交付,已讀), sentAt (日期); objectId, createdAt, updatedAt. 5. AuditLog: actor (指向 User 的指針,必填), action (字符串,必填), entityType (字符串,必填), entityId (字符串,必填), payload (對象,選填), createdAt (日期); objectId, createdAt, updatedAt. 安全性: - 強制應用 ACL,使患者僅能閱讀他們的 DeviceData 和 MonitoringLog 記錄。臨床醫生查看指定的患者。使用雲端代碼進行敏感過渡,並在服務器端寫入 AuditLog 項目。使用加密保護您的數據。 身份驗證: - 支持患者和臨床醫生的註冊;角色分配;安全登錄和會話管理。 行為: - 患者登錄,獲取最新的 DeviceData 和 MonitoringLogs,向臨床醫生的線程發送消息,並接收通知。臨床醫生發布設備數據和監控日誌;系統為發布操作寫入 AuditLog 項目。 交付: - Back4app 應用程序具備架構、CLPs、ACLs、用於發布和審計記錄的雲端代碼鈎子,以及患者和臨床醫生視圖的起始前端整合。
按下面的按鈕使用此模板提示打開代理人,並自動填充。
這是沒有技術後綴的基本提示。您可以在之後調整生成的前端堆棧。
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 儀表板 結構的病人數據。
IoT 設備數據集成
無縫連接和監控 IoT 設備以實時獲取 rpm 儀表板 見解。
為 rpm 儀表板 提供安全消息傳遞
通過加密消息安全地與病人和 Provider 溝通。
全面的監控日誌
用於 rpm 儀表板 的詳細日誌跟踪病人的活動和健康指標。
REST/GraphQL API 支持
靈活的 API 選項以有效地與您的 rpm 儀表板 後端互動。
合規性審計日誌
對所有 rpm 儀表板 活動保持合規的詳細審計記錄。
Rpm 儀表板框架比較
評估所有支持的技術堆棧的設置速度、SDK 樣式和 AI 支持。
| 框架 | 設置時間 | Rpm 儀表板的好處 | SDK類型 | AI支持 |
|---|---|---|---|---|
| ~3–7 分鐘 | 用於移動和網絡的 rpm 儀表板單一代碼庫。 | Typed SDK | 完整 | |
| 快速 (5 分鐘) 設置 | 快速網絡儀表板用於 rpm 儀表板。 | Typed SDK | 完整 | |
| ~5 分鐘 | 跨平台移動應用程式用於 rpm 儀表板。 | Typed SDK | 完整 | |
| 約 5 分鐘 | 伺服器呈現的網絡應用程式用於 rpm 儀表板。 | Typed SDK | 完整 | |
| ~3 分鐘 | 輕量級網絡集成用於 rpm 儀表板。 | Typed SDK | 完整 | |
| ~3–7 分鐘 | 原生 Android 應用程式用於 rpm 儀表板。 | Typed SDK | 完整 | |
| 快速 (5 分鐘) 設置 | 原生 iOS 應用程式用於 rpm 儀表板。 | Typed SDK | 完整 | |
| ~5 分鐘 | React 的網絡 UI 用於 rpm 儀表板。 | Typed SDK | 完整 | |
| 約 5 分鐘 | 企業網絡應用程式用於 rpm 儀表板。 | Typed SDK | 完整 | |
| 快速 (2 分鐘) 設置 | 靈活的 GraphQL API 用於 rpm 儀表板。 | GraphQL API | 完整 | |
| ~2 分鐘 | REST API 集成用於 rpm 儀表板。 | REST API | 完整 | |
| 少於 5 分鐘 | 伺服器端 PHP 後端用於 rpm 儀表板。 | REST API | 完整 | |
| ~5 分鐘 | .NET 後端用於 rpm 儀表板。 | Typed SDK | 完整 |
設置時間表示從項目初始化到使用此模板架構的第一個病人登錄和設備數據查詢的預期持續時間。
常見問題
有關使用此模板構建 RPM 應用後端的常見查詢。