放射学信息应用程序后台模板
从一个后台管理成像订单、研究元数据、成像流程和放射科报告
一个在 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进行阅读队列更新,同时公开REST和GraphQL用于医院、PACS相邻或通知集成。
通过一个后台合同在网页和移动端标准化成像请求和报告工作流程,缩短放射学产品的上市时间。
核心利益
一个放射学工作流程后端,帮助您更快交付,同时保持结构、可见性和控制。
更快的影像工作流程推出
从预构建的请求到报告模型开始,这样您可以专注于临床门户、阅读队列和诊断用户体验。
自第一天起的结构化元数据
在标准架构中存储关键的与DICOM相关的研究字段,以便于过滤、路由和下游集成。
清晰的审核和批准流程
明确建模报告生命周期状态,使草稿、审核、修订和最终确定都易于管理。
实时工作列表可见性
Live Queries 可以立即向相关屏幕显示新分配的研究、优先级变更或最终报告。
可扩展的集成层
通过 REST 或 GraphQL 连接到调度系统、通知服务、门户或归档工作流程。
AI辅助构建
使用 AI 代理提示来构建后端、生成真实记录,并加速演示或试点。
准备好简化放射学工作流程了吗?
让 Back4app AI 代理构建放射学信息后端,并从一个提示中生成样本请求、研究、专家和报告。
免费开始 - 每月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)
准备好复制到 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 AI代理根据此模板生成完整的放射学信息应用程序,包括前端、后端、认证、工作清单和报告工作流程屏幕。
在 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 元数据创建或更新研究,草拟报告,并为每个重要操作写入审计事件条目。 交付: - 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 APIs
使用灵活的API有效访问和管理您的数据。
放射科医师分配管理
简化任务分配给放射科医师以提高效率。
可扩展的放射学框架
轻松自定义和扩展后端以满足特定的放射学需求。
放射学信息框架比较
比较所有支持的技术的设置速度、SDK风格和AI支持。
| 框架 | 安装时间 | 放射学信息的好处 | SDK 类型 | 人工智能支持 |
|---|---|---|---|---|
| 大约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分钟 | React放射学信息网页UI。 | Typed SDK | 完整 | |
| 快速(5分钟)设置 | 用于放射学信息的企业网页应用。 | Typed SDK | 完整 | |
| 少于2分钟 | 灵活的GraphQL API用于放射学信息。 | GraphQL API | 完整 | |
| 快速(2分钟)设置 | REST API集成用于放射学信息。 | REST API | 完整 | |
| ~3分钟 | 用于放射学信息的服务器端PHP后端。 | REST API | 完整 | |
| ~3–7分钟 | .NET后端用于放射学信息。 | Typed SDK | 完整 |
安装时间反映从项目引导到第一次有成像请求和研究数据填充的放射学工作列表所需的预计持续时间。
常见问题解答
关于使用此模板构建放射信息后台的常见问题。