放射學資訊
與 AI 代理一起構建
放射學資訊後端

放射學資訊應用程式後端範本
從一個後端管理影像訂單、研究元數據、模式工作流程和放射科醫生報告

在 Back4app 上準備就緒的 放射學資訊後端 用於醫學影像請求、DICOM 研究元數據、專家閱讀工作流程以及報告交付。使用它來加速放射學入口網站、工作列表,以及網頁和行動裝置的醫院整合。

主要要點

此模板為您提供專注於放射科的後端,支援從接收至報告的工作流程,讓您的團隊能夠更快地發布影像操作軟件,並保持一致的數據合約。

  1. 影像優先數據模型在專為放射科操作設計的工作流程友好結構中建模請求、研究、放射科醫師及報告。
  2. DICOM元數據追蹤儲存關鍵的研究級元數據,例如受檢號碼、模態、研究UID、身體部位和獲取時間戳,以便於索引和搜尋。
  3. 報告生命週期支援處理草稿、審核中、修改中及最終報告,並進行分配和周轉時間追蹤。
  4. 審計與可追溯性追蹤誰創建、更新、審閱或最終確定診斷內容,以支持治理和故障排除。
  5. 跨平台 API通過 REST 和 GraphQL 提供放射科工作清單和報告屏幕,並可選用 Live Queries 進行狀態更改。

放射科資訊應用後端模板是什麼?

Back4app 是一個針對快速產品交付的管理後端。放射科資訊應用後端模板建模影像請求、DICOM 研究元數據、放射科醫生分配和報告工作流程,讓團隊能夠更快地交付放射科系統,並減少基礎設施的工作。

最佳用於:

放射科資訊系統影像請求入口網站DICOM 元資料索引閱讀室儀表板診斷報告工作流程醫療 MVP 及內部工具

概覽

放射科工作流程依賴於訂單接收、研究獲取、元資料索引、專家分配和報告周轉之間的精確協調。

此模板定義了 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 代理提示,無需信用卡

技術棧

此放射學信息後端模板包含所有內容。

前端
13+ 技術
後端
Back4app
資料庫
MongoDB
身份驗證
內建身份驗證 + 角色
API
REST 與 GraphQL
即時
Live Queries

ER 圖

放射科信息架構的實體關係模型。

查看圖表來源
Mermaid
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流程。

查看圖表來源
Mermaid
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

數據字典

放射線資訊架構中每個類別的完整欄位級別參考。

欄位類型描述必需
objectIdStringAuto-generated unique identifier自動
usernameStringLogin username for clinicians and radiology staff
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole in the workflow (admin, scheduler, technologist, radiologist, referring_physician)
displayNameStringFull name displayed in the radiology workspace
specialtyStringClinical specialty such as neuroradiology or orthopedics
createdAtDateAuto-generated creation timestamp自動
updatedAtDateAuto-generated last-update timestamp自動

9 在 User 中的欄位

安全性和權限

如何通過ACL、角色和CLP策略來保障影像請求、研究元數據和專家報告的安全。

基於角色的訪問

使用角色,例如管理員、放射科醫生、技術員和協調員,來範圍設定 CRUD 操作和螢幕可見性。

基於任務的權限

限制報告草擬和研究更新僅對指定的專家或操作人員開放,同時保留受控的審查路徑。

受保護的審核歷史

AuditEvent 記錄應為附加式,並且應避免客戶端刪除,以保持工作流程歷史的可靠性。

架構 (JSON)

原始 JSON 架構定義,可直接複製到 Back4app 或作為實施參考使用。

JSON
{
  "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 人工智慧代理
準備建構
在 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、雲端代碼驗證、種子範例資料,以及根據所選技術的前端框架。

按下以下按鈕以使用此模板提示預填內容開啟代理。

此基本提示描述了放射學的架構和行為;您可以在之後選擇特定技術的後綴。

幾分鐘內部署每月 50 次免費提示無需信用卡

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 數據的放射學工作列表的預期持續時間。

常見問題

有關使用此模板構建放射學信息後端的常見問題。

什麼是放射科資訊後端?
這個放射科資訊模板包括什麼?
Live Queries 如何幫助放射科儀表板?
我該如何防止重複的影像請求?
我應該追蹤哪些字段以進行報告治理?
我可以支持最終簽署前的多階段審查嗎?
AI 代理如何幫助生成樣本數據?
有哪些可用的報告和審計數據備份選項?
我如何支持緊急或統計研究?

受醫療產品團隊信任

加入使用 Back4app 範本建立影像和臨床工作流程軟體的團隊,確保可靠、可審計的操作。

G2 Users Love Us Badge

準備好建設您的放射科信息應用程序了嗎?

在幾分鐘內開始您的放射科工作流程項目。無需信用卡。

選擇技術