放射学信息
与 AI Agent 一起构建
放射学信息后台

放射学信息应用程序后台模板
从一个后台管理成像订单、研究元数据、成像流程和放射科报告

一个在 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进行阅读队列更新,同时公开REST和GraphQL用于医院、PACS相邻或通知集成。

通过一个后台合同在网页和移动端标准化成像请求和报告工作流程,缩短放射学产品的上市时间。

核心利益

一个放射学工作流程后端,帮助您更快交付,同时保持结构、可见性和控制。

更快的影像工作流程推出

从预构建的请求到报告模型开始,这样您可以专注于临床门户、阅读队列和诊断用户体验。

自第一天起的结构化元数据

在标准架构中存储关键的与DICOM相关的研究字段,以便于过滤、路由和下游集成。

清晰的审核和批准流程

明确建模报告生命周期状态,使草稿、审核、修订和最终确定都易于管理。

实时工作列表可见性

Live Queries 可以立即向相关屏幕显示新分配的研究、优先级变更或最终报告。

可扩展的集成层

通过 REST 或 GraphQL 连接到调度系统、通知服务、门户或归档工作流程。

AI辅助构建

使用 AI 代理提示来构建后端、生成真实记录,并加速演示或试点。

准备好简化放射学工作流程了吗?

让 Back4app AI 代理构建放射学信息后端,并从一个提示中生成样本请求、研究、专家和报告。

免费开始 - 每月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)

准备好复制到 Back4app 的原始 JSON 架构定义或用作实施参考。

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 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、云代码验证、种子样本数据和每种选择技术的前端脚手架。

按下面的按钮以打开帶有该模板提示预填充的代理。

此基础提示描述了放射学架构和行为;您可以在之后选择特定于技术的后缀。

几分钟内部署每月50个免费提示不需要信用卡

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完整

安装时间反映从项目引导到第一次有成像请求和研究数据填充的放射学工作列表所需的预计持续时间。

常见问题解答

关于使用此模板构建放射信息后台的常见问题。

什么是放射学信息后端?
这个放射学信息模板包括哪些内容?
Live Queries如何帮助放射学仪表板?
我如何防止重复的成像请求?
我应该跟踪哪些字段以进行报告治理?
我可以在最终签署之前支持多阶段审核吗?
AI Agent 如何帮助处理样本数据?
报告和审计数据有哪些备份选项可用?
我如何支持紧急或统计研究?

受到医疗产品团队的信任

加入使用 Back4app 模板构建成像和临床工作流程软件的团队,确保可靠的可审计操作。

G2 Users Love Us Badge

准备好构建您的放射信息应用程序了吗?

在几分钟内启动您的放射工作流程项目。无需信用卡。

选择技术