放射學資訊應用程式後端範本
從一個後端管理影像訂單、研究元數據、模式工作流程和放射科醫生報告
在 Back4app 上準備就緒的 放射學資訊後端 用於醫學影像請求、DICOM 研究元數據、專家閱讀工作流程以及報告交付。使用它來加速放射學入口網站、工作列表,以及網頁和行動裝置的醫院整合。
主要要點
此模板為您提供專注於放射科的後端,支援從接收至報告的工作流程,讓您的團隊能夠更快地發布影像操作軟件,並保持一致的數據合約。
- 影像優先數據模型 — 在專為放射科操作設計的工作流程友好結構中建模請求、研究、放射科醫師及報告。
- DICOM元數據追蹤 — 儲存關鍵的研究級元數據,例如受檢號碼、模態、研究UID、身體部位和獲取時間戳,以便於索引和搜尋。
- 報告生命週期支援 — 處理草稿、審核中、修改中及最終報告,並進行分配和周轉時間追蹤。
- 審計與可追溯性 — 追蹤誰創建、更新、審閱或最終確定診斷內容,以支持治理和故障排除。
- 跨平台 API — 通過 REST 和 GraphQL 提供放射科工作清單和報告屏幕,並可選用 Live Queries 進行狀態更改。
放射科資訊應用後端模板是什麼?
Back4app 是一個針對快速產品交付的管理後端。放射科資訊應用後端模板建模影像請求、DICOM 研究元數據、放射科醫生分配和報告工作流程,讓團隊能夠更快地交付放射科系統,並減少基礎設施的工作。
最佳用於:
概覽
放射科工作流程依賴於訂單接收、研究獲取、元資料索引、專家分配和報告周轉之間的精確協調。
此模板定義了 ImagingRequest、Study、Radiologist、Report 和 AuditEvent,並包含擁有權規則和可選的 Live Queries,使團隊能夠快速、安全地實施放射科工作流程。
核心放射學信息功能
這個中心中的每個技術卡片都使用相同的放射學信息架構,包括影像請求、研究、放射科醫生、報告和審計事件。
影像請求接收
追蹤請求,包括病人參考、開單醫師詳情、優先級、指示及請求的檢查方式。
研究記錄與DICOM元數據
儲存研究標識符、受檢號碼、檢查方式、研究UID、身體部位、執行日期和狀態。
放射科醫生註冊和分配
維護專家檔案、子專科、可用性指標以及與經過驗證的用戶的鏈接。
診斷報告工作流程
管理草稿、審核、修訂和最終報告的狀態,並附上時間戳和審核者上下文。
審計事件和周轉跟踪
AuditEvent 捕獲操作行為,如分配變更、報告最終確定和元數據更正。
為什麼要使用 Back4app 建立您的放射學信息後端?
Back4app 為影像操作提供安全的後端合約,讓您的團隊能專注於工作清單、閱讀體驗和報告交付,而不是後端維護。
- •工作流程準備好的實體: 請求、研究、放射科醫生和報告的預定義類別可幫助您在不從零開始設計的情況下實現常見的放射學流程。
- •可搜索的元數據和治理: 存儲結構化的 DICOM 相關字段和審計事件,以便於跨團隊更輕鬆地查找、路由和審查研究。
- •實時和 API 彈性: 使用 Live Queries 來更新閱讀隊列,同時為醫院、PACS 相鄰或通知整合暴露 REST 和 GraphQL。
通過一個後端合約標準化網絡和移動設備上的影像請求和報告工作流程,並縮短放射學產品的上市時間。
核心好處
一個放射學工作流程後端,可以幫助您更快出貨,同時保持結構、可見性和控制。
更快的影像工作流程推廣
從預構建的請求到報告模型開始,這樣您可以專注於臨床醫生門戶、閱讀隊列和診斷用戶體驗。
從第一天起的結構化元數據
將與DICOM相關的關鍵研究字段存儲在標準架構中,以便過濾、路由和下游集成。
清晰的審查和批准流程
明確建模報告生命周期狀態,這樣草稿、審查、修改和最終化都能夠輕鬆管理。
實時工作清單可見性
Live Queries 可以立即將新分配的研究、優先權變更或最終報告顯示到相關畫面。
可擴展的整合層
通過 REST 或 GraphQL 連接到排程系統、通知服務、門戶或歸檔工作流。
AI 輔助的支架
使用 AI Agent 提示來搭建後端,生成真實的記錄,加快演示或試點的速度。
準備好簡化放射科工作流程了嗎?
讓 Back4app AI Agent 搭建放射科信息後端,並從一個提示生成示範請求、研究、專家和報告。
免費開始 — 每月 50 個 AI 代理提示,無需信用卡
技術棧
此放射學信息後端模板包含所有內容。
ER 圖
放射科信息架構的實體關係模型。
涵蓋影像請求、研究、放射科醫生、報告和審核事件的架構。
查看圖表來源
erDiagram
ImagingCenter ||--o{ Modality : "operates"
ImagingCenter ||--o{ ImagingRequest : "receives"
User ||--o{ ImagingRequest : "orders"
Modality ||--o{ ImagingRequest : "scheduled_for"
ImagingRequest ||--o{ DicomStudy : "produces"
DicomStudy ||--o{ Report : "interpreted_as"
ImagingRequest ||--o{ WorklistItem : "creates"
User ||--o{ WorklistItem : "assigned"
User ||--o{ Report : "authors"
User ||--o{ AuditEvent : "actor_of"
User {
String objectId PK
String username
String email
String password
String role
String displayName
String specialty
Date createdAt
Date updatedAt
}
ImagingCenter {
String objectId PK
String name
String code
String location
String contactNumber
Date createdAt
Date updatedAt
}
Modality {
String objectId PK
Pointer imagingCenter FK
String name
String type
String dicomAETitle
String status
Date createdAt
Date updatedAt
}
ImagingRequest {
String objectId PK
String patientId
String patientName
String accessionNumber
String studyDescription
String priority
String status
Pointer requestedBy FK
Pointer imagingCenter FK
Pointer scheduledModality FK
Date scheduledAt
String clinicalIndication
Date createdAt
Date updatedAt
}
DicomStudy {
String objectId PK
Pointer imagingRequest FK
String studyInstanceUID
Number seriesCount
Number instanceCount
String modalityType
String bodyPartExamined
Date performedAt
String pacsLocation
String metadataStatus
Date createdAt
Date updatedAt
}
Report {
String objectId PK
Pointer dicomStudy FK
Pointer radiologist FK
String status
String findings
String impression
Boolean criticalFlag
Date signedAt
Number version
Date createdAt
Date updatedAt
}
WorklistItem {
String objectId PK
Pointer imagingRequest FK
Pointer assignedTo FK
String queueType
String status
Date dueAt
String notes
Date createdAt
Date updatedAt
}
AuditEvent {
String objectId PK
Pointer actor FK
String action
String targetClass
String targetId
String details
Date timestamp
}
整合流程
針對放射科登錄、影像請求檢索、研究註冊和報告最終化的Auth-to-CRUD流程。
查看圖表來源
sequenceDiagram
participant User as Radiology Staff
participant App as Radiology Information App
participant Back4app as Back4app Cloud
User->>App: Sign in to worklist
App->>Back4app: POST /login (username, password)
Back4app-->>App: Session token + user role
User->>App: Open today's imaging queue
App->>Back4app: GET /classes/WorklistItem?include=imagingRequest,assignedTo
Back4app-->>App: Worklist items with request context
User->>App: Register completed scan and DICOM metadata
App->>Back4app: POST /classes/DicomStudy (imagingRequest, studyInstanceUID, seriesCount, modalityType, metadataStatus)
Back4app-->>App: DicomStudy object + objectId
App->>Back4app: PUT /classes/ImagingRequest/{id} (status: completed)
Back4app-->>App: Updated ImagingRequest
User->>App: Draft and sign specialist report
App->>Back4app: POST /classes/Report (dicomStudy, radiologist, findings, impression, status: signed, signedAt)
Back4app-->>App: Signed Report saved
App->>Back4app: POST /classes/AuditEvent (action: report_signed, targetClass: Report, targetId)
Back4app-->>App: AuditEvent saved
Back4app-->>App: Live Query events (new urgent requests, signed reports)
App-->>User: Real-time queue and report status updates數據字典
放射線資訊架構中每個類別的完整欄位級別參考。
| 欄位 | 類型 | 描述 | 必需 |
|---|---|---|---|
| objectId | String | Auto-generated unique identifier | 自動 |
| username | String | Login username for clinicians and radiology staff | |
| String | User email address | ||
| password | String | Hashed password (write-only) | |
| role | String | Role in the workflow (admin, scheduler, technologist, radiologist, referring_physician) | |
| displayName | String | Full name displayed in the radiology workspace | — |
| specialty | String | Clinical specialty such as neuroradiology or orthopedics | — |
| createdAt | Date | Auto-generated creation timestamp | 自動 |
| updatedAt | Date | Auto-generated last-update timestamp | 自動 |
9 在 User 中的欄位
安全性和權限
如何通過ACL、角色和CLP策略來保障影像請求、研究元數據和專家報告的安全。
基於角色的訪問
使用角色,例如管理員、放射科醫生、技術員和協調員,來範圍設定 CRUD 操作和螢幕可見性。
基於任務的權限
限制報告草擬和研究更新僅對指定的專家或操作人員開放,同時保留受控的審查路徑。
受保護的審核歷史
AuditEvent 記錄應為附加式,並且應避免客戶端刪除,以保持工作流程歷史的可靠性。
架構 (JSON)
原始 JSON 架構定義,可直接複製到 Back4app 或作為實施參考使用。
{
"classes": [
{
"className": "User",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"username": {
"type": "String",
"required": true
},
"email": {
"type": "String",
"required": true
},
"password": {
"type": "String",
"required": true
},
"role": {
"type": "String",
"required": true
},
"displayName": {
"type": "String",
"required": false
},
"specialty": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "ImagingCenter",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"name": {
"type": "String",
"required": true
},
"code": {
"type": "String",
"required": true
},
"location": {
"type": "String",
"required": false
},
"contactNumber": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Modality",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"imagingCenter": {
"type": "Pointer",
"required": true,
"targetClass": "ImagingCenter"
},
"name": {
"type": "String",
"required": true
},
"type": {
"type": "String",
"required": true
},
"dicomAETitle": {
"type": "String",
"required": false
},
"status": {
"type": "String",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "ImagingRequest",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"patientId": {
"type": "String",
"required": true
},
"patientName": {
"type": "String",
"required": true
},
"accessionNumber": {
"type": "String",
"required": true
},
"studyDescription": {
"type": "String",
"required": true
},
"priority": {
"type": "String",
"required": true
},
"status": {
"type": "String",
"required": true
},
"requestedBy": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"imagingCenter": {
"type": "Pointer",
"required": true,
"targetClass": "ImagingCenter"
},
"scheduledModality": {
"type": "Pointer",
"required": false,
"targetClass": "Modality"
},
"scheduledAt": {
"type": "Date",
"required": false
},
"clinicalIndication": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "DicomStudy",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"imagingRequest": {
"type": "Pointer",
"required": true,
"targetClass": "ImagingRequest"
},
"studyInstanceUID": {
"type": "String",
"required": true
},
"seriesCount": {
"type": "Number",
"required": false
},
"instanceCount": {
"type": "Number",
"required": false
},
"modalityType": {
"type": "String",
"required": true
},
"bodyPartExamined": {
"type": "String",
"required": false
},
"performedAt": {
"type": "Date",
"required": false
},
"pacsLocation": {
"type": "String",
"required": false
},
"metadataStatus": {
"type": "String",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Report",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"dicomStudy": {
"type": "Pointer",
"required": true,
"targetClass": "DicomStudy"
},
"radiologist": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"status": {
"type": "String",
"required": true
},
"findings": {
"type": "String",
"required": false
},
"impression": {
"type": "String",
"required": false
},
"criticalFlag": {
"type": "Boolean",
"required": false
},
"signedAt": {
"type": "Date",
"required": false
},
"version": {
"type": "Number",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "WorklistItem",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"imagingRequest": {
"type": "Pointer",
"required": true,
"targetClass": "ImagingRequest"
},
"assignedTo": {
"type": "Pointer",
"required": false,
"targetClass": "User"
},
"queueType": {
"type": "String",
"required": true
},
"status": {
"type": "String",
"required": true
},
"dueAt": {
"type": "Date",
"required": false
},
"notes": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "AuditEvent",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"actor": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"action": {
"type": "String",
"required": true
},
"targetClass": {
"type": "String",
"required": true
},
"targetId": {
"type": "String",
"required": true
},
"details": {
"type": "String",
"required": false
},
"timestamp": {
"type": "Date",
"required": true
}
}
}
]
}與 AI 代理一起構建
使用 Back4app 人工智慧代理生成完整的放射學資訊應用程式,該應用程式將包含前端、後端、身份驗證、工作清單及報告工作流程畫面。
在 Back4app 上創建具有此精確架構和行為的放射學資訊後端。 架構: 1. ImagingRequest: requestNumber (字串,必填),patientId (字串,必填),patientName (字串),orderingClinician (字串),priority (字串:常規、緊急、立即),modalityRequested (字串),clinicalIndication (字串),status (字串:已請求、已排程、已執行、已取消),objectId、createdAt、updatedAt。 2. Study: imagingRequest (指向 ImagingRequest 的指標,必填),accessionNumber (字串,必填),studyInstanceUID (字串,必填),modality (字串),bodyPart (字串),performedAt (日期),dicomMetadata (JSON),status (字串:排隊、已獲取、讀取中、已報告),objectId、createdAt、updatedAt。 3. Radiologist: user (指向內建用戶的指標,必填),fullName (字串),subspecialties (陣列),active (布林值),contact (JSON),objectId、createdAt、updatedAt。 4. Report: study (指向 Study 的指標,必填),author (指向 Radiologist 的指標),reviewer (指向 Radiologist 的指標,選填),status (字串:草稿、審核中、已修訂、最終),findings (字串),impression (字串),finalizedAt (日期,選填),objectId、createdAt、updatedAt。 5. AuditEvent: actor (指向用戶的指標),targetClass (字串),targetId (字串),action (字串),details (JSON),timestamp (日期) — 僅附加。 安全性: - 基於角色的 CLP 和 ACL:只有協調者和管理員可以創建或更新 ImagingRequest 排程字段;只有指定的放射科醫生或管理員可以編輯草稿報告;只有審核者或管理員可以將報告定稿。AuditEvent 僅附加且受限於閱讀。 身份驗證: - 用戶通過內建用戶註冊和登錄;角色由管理員分配。 行為: - 驗證用戶,載入成像請求,創建或更新帶有 DICOM 元數據的研究,草擬報告,並為每個重要操作寫入 AuditEvent 條目。 交付: - Back4app 應用程式,具有架構、ACL、CLP、雲端代碼驗證、種子範例資料,以及根據所選技術的前端框架。
按下以下按鈕以使用此模板提示預填內容開啟代理。
此基本提示描述了放射學的架構和行為;您可以在之後選擇特定技術的後綴。
API 玩具場
嘗試在放射學信息架構上使用 REST 和 GraphQL 端點。響應使用模擬數據,無需 Back4app 帳戶。
使用與此模板相同的架構。
選擇您的技術
展開每個卡片以獲取整合步驟、狀態模式、數據模型範例和離線備註。
Flutter 放射科信息後端
React 放射科信息後端
React 原生 放射科信息後端
Next.js 放射科信息後端
JavaScript 放射科信息後端
Android 放射科信息後端
iOS 放射科信息後端
Vue 放射科信息後端
Angular 放射科信息後端
GraphQL 放射科信息後端
REST API 放射科信息後端
PHP 放射科信息後端
.NET 放射科信息後端
您使用每種技術所獲得的內容
每個堆疊都使用相同的放射醫學信息後端架構和API合約。
統一的放射線數據結構
影像請求和 DICOM 研究的標準化數據模型。
放射線的實時報告追蹤
實時監控報告和影像請求的狀態。
放射線工作流程的安全共享
安全地與授權用戶分享敏感的影像數據和報告。
REST/GraphQL API 用於放射線
使用靈活的 API 有效訪問和管理您的數據。
放射科醫生任務管理
精簡任務分配給放射科醫生以提高效率。
可擴展的放射線框架
輕鬆自定義和擴展後端以滿足特定的放射線需求。
放射線資訊框架比較
比較所有支持的技術中的設置速度、SDK 風格和 AI 支持。
| 框架 | 設置時間 | 放射線資訊的好處 | SDK 類型 | AI 支援 |
|---|---|---|---|---|
| 約 5 分鐘 | 移動和網頁上的放射線資訊單一代碼庫。 | Typed SDK | 完整 | |
| 少於 5 分鐘 | 放射線資訊的快速網頁儀表板。 | Typed SDK | 完整 | |
| ~3–7 分鐘 | 放射線資訊的跨平台移動應用程式。 | Typed SDK | 完整 | |
| 快速(5 分鐘)設置 | 放射線資訊的伺服器渲染網頁應用程式。 | Typed SDK | 完整 | |
| ~3–5 分鐘 | 放射線資訊的輕量網頁整合。 | Typed SDK | 完整 | |
| 約 5 分鐘 | 放射線資訊的原生 Android 應用程式。 | Typed SDK | 完整 | |
| 少於 5 分鐘 | 放射線資訊的原生 iOS 應用程式。 | Typed SDK | 完整 | |
| ~3–7 分鐘 | Reactive 網頁用戶介面用於放射線資訊。 | Typed SDK | 完整 | |
| 快速(5 分鐘)設置 | 放射線資訊的企業網頁應用程式。 | Typed SDK | 完整 | |
| 少於 2 分鐘 | 靈活的 GraphQL API 用於放射線資訊。 | GraphQL API | 完整 | |
| 快速(2 分鐘)設置 | REST API 整合放射線資訊。 | REST API | 完整 | |
| ~3 分鐘 | 放射線資訊的伺服器端 PHP 後端。 | REST API | 完整 | |
| ~3–7 分鐘 | .NET 後端用於放射線資訊。 | Typed SDK | 完整 |
設置時間反映從專案啟動到第一個填充 ImagingRequest 和 Study 數據的放射學工作列表的預期持續時間。
常見問題
有關使用此模板構建放射學信息後端的常見問題。