临床试验 CRM
与 AI 代理一起构建
临床试验受试者CRM后端

临床试验受试者CRM后端模板
用户、研究、受试者、筛查、访视与不良事件跟踪

一个在 Back4app 上的生产就绪的 临床试验受试者CRM后端,具有 研究受试者筛查访视不良事件受试者笔记 工作流程。包含ER图、数据字典、JSON架构、API演示,以及用于快速引导的AI代理提示。

试验要点

此模板为您提供一个临床试验受试者CRM后端,其中包含User、Study、Subject、Screening、Visit、AdverseEvent和SubjectNote类,以便协调员可以减少手动跟进进行受试者操作。

  1. 筛查状态跟踪为每个受试者和筛查记录建模,以便协调员可以查看待处理、通过、失败或重新筛查状态及其screeningDate和备注。
  2. 访问日程可见性使用Visit.visitType、scheduledAt、visitStatus、location和coordinator,使计划访问和重新安排的查询变得可行。
  3. 不良事件记录捕捉AdverseEvent.eventTerm、严重性、严重程度、onsetDate、状态和reportedBy,以便进行安全回顾。
  4. 协调员友好的工作流程通过一个后端支持研究工作人员的Subject.coordinator分配、Screening.completedBy、Visit.coordinator和SubjectNote.author。
  5. 跨平台试验操作通过一个REST和GraphQL API为受试者、访问、安全记录和不良事件提供网页、移动和临床仪表盘。

临床试验受试者CRM模板是什么?

临床试验受试者CRM中的报告应能够回答领导的问题,而无需手动在文件夹和信息线程中查找。这通常不是单一的错误——而是漂移。Back4app锚定需要截止日期、文件和通讯的临床试验受试者CRM实践的核心实体,在一个有权限的工作区中。该架构涵盖用户、研究、受试者、筛选、访问、不良事件和SubjectNote记录,并内置身份验证和安全意识流程。连接您首选的前端并更快交付。

最佳适用:

临床试验操作应用受试者筛选跟踪器访客调度工具不良事件记录系统临床协调员仪表板团队为受监管工作流程选择 BaaS

临床试验受试者 CRM 后端概述

临床试验受试者 CRM 团队在常规工作无聊时获胜:可预测的记录、明显的所有权和在小问题变成事件之前的警报。

首先审查研究分配跟踪、受试者注册、筛选工作流,然后打开堆栈卡以查看特定于 SDK 的说明和集成模式。

临床试验核心功能

这个中心中的每个技术卡片都使用相同的临床试验后端架构,包括用户、研究、受试者、筛查、访问、不良事件和受试者备注。

研究分配跟踪

研究存储 protocolId、标题、状态、首席研究员和站点名称。

受试者登记册

受试者存储 subjectId、全名、筛选状态、研究、协调员、出生日期、出生时性别和同意签署时间。

筛查工作流程

筛查链接主题、研究、筛查状态、筛查日期、完成者和备注。

访问调度

访问捕获主题、研究、访问类型、计划时间、访问状态、地点和协调员。

安全事件记录

不良事件存储主题、研究、事件术语、严重程度、严重性、开始日期、状态和报告者。

为什么用 Back4app 构建您的临床试验受试者 CRM 后端?

Back4app 为您提供用户、研究、受试者、筛查、访问、不良事件和受试者备注原语,以便协调员可以专注于试验操作,而不是布线基础设施。

  • 在一个模式中进行筛查和受试者流: 受试者和筛查类将 subjectId、fullName、screeningStatus、screeningDate 和 completedBy 保持在一个地方。
  • 访问计划保持可查询: 访问和受试者备注字段使计划的约会、重新安排和员工跟进易于审查。
  • 安全日志记录是明确的: 具有 eventTerm、severity、serious、onsetDate、status 和 reportedBy 的不良事件条目支持可审查的事件时间线。

构建一个临床试验后端,使筛查、访问、备注和不良事件在团队之间保持一致。

试验好处

一个帮助协调员更快工作并保持受试者操作有序的临床试验后端。

快速试验启动

从完整的用户、研究、受试者、筛查、访问、不良事件和受试者备注架构开始,而不是从头开始映射试验表。

清晰的筛查状态

使用Subject.screeningStatus和Screening.screeningStatus来区分待定、通过、失败和重新筛查的案例。

访问协调无需猜测

调度和重新调度访问记录,包括visitType、scheduledAt、visitStatus和location,以便工作人员知道接下来该做什么。

安全审核记录

AdverseEvent.severity, serious, onsetDate, status, 和 reportedBy 为安全团队提供可读的事件历史。

主题笔记保持与记录关联

SubjectNote.noteType, noteText, author, 和 subject 将通话、访问和筛查笔记附加到正确的参与者。

AI辅助的引导工作流

通过一个结构化的提示快速生成后端架构和集成指导。

准备好启动您的临床试验主题 CRM 吗?

让 Back4app AI 代理为您的临床试验主题 CRM 后端构建架构,并从一个提示生成用户、研究、主体、筛查、访问、不良事件和主题笔记工作流。

免费开始 - 每月 50 个 AI 助手提示,无需信用卡

临床试验技术栈

此临床试验后端模板包含所有内容。

前端
13+ 技术
后端
Back4app
数据库
MongoDB
身份验证
内置身份验证 + 会话
API
REST 和 GraphQL
实时
Live Queries

临床架构图

临床试验受试者CRM后端架构的实体关系模型。

查看图表源
Mermaid
erDiagram
    User ||--o{ Study : "principalInvestigator"
    User ||--o{ Subject : "coordinator"
    User ||--o{ Screening : "completedBy"
    User ||--o{ Visit : "coordinator"
    User ||--o{ AdverseEvent : "reportedBy"
    User ||--o{ SubjectNote : "author"
    Study ||--o{ Subject : "study"
    Study ||--o{ Screening : "study"
    Study ||--o{ Visit : "study"
    Study ||--o{ AdverseEvent : "study"
    Subject ||--o{ Screening : "subject"
    Subject ||--o{ Visit : "subject"
    Subject ||--o{ AdverseEvent : "subject"
    Subject ||--o{ SubjectNote : "subject"

    User {
        String objectId PK
        String username
        String email
        String password
        String role
        String siteName
        Date createdAt
        Date updatedAt
    }

    Study {
        String objectId PK
        String protocolId
        String title
        String status
        String principalInvestigatorId FK
        String siteName
        Date createdAt
        Date updatedAt
    }

    Subject {
        String objectId PK
        String subjectId
        String fullName
        String screeningStatus
        String studyId FK
        String coordinatorId FK
        Date dob
        String sexAtBirth
        Date consentSignedAt
        Date createdAt
        Date updatedAt
    }

    Screening {
        String objectId PK
        String subjectId FK
        String studyId FK
        String screeningStatus
        Date screeningDate
        String completedById FK
        String notes
        Date createdAt
        Date updatedAt
    }

    Visit {
        String objectId PK
        String subjectId FK
        String studyId FK
        String visitType
        Date scheduledAt
        String visitStatus
        String location
        String coordinatorId FK
        Date createdAt
        Date updatedAt
    }

    AdverseEvent {
        String objectId PK
        String subjectId FK
        String studyId FK
        String eventTerm
        String severity
        Boolean serious
        Date onsetDate
        String status
        String reportedById FK
        Date createdAt
        Date updatedAt
    }

    SubjectNote {
        String objectId PK
        String subjectId FK
        String authorId FK
        String noteType
        String noteText
        Date createdAt
        Date updatedAt
    }

临床集成流程

用户登录、受试者筛查、访问调度、受试者注释录入和不良事件记录的典型运行流程。

查看图表源
Mermaid
sequenceDiagram
  participant User
  participant App as Clinical Trial Subject CRM App
  participant Back4app as Back4app Cloud

  User->>App: Sign in
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  User->>App: Open screening queue
  App->>Back4app: GET /classes/Screening?include=subject,study&order=-screeningDate
  Back4app-->>App: Screening rows with subjectId and screeningStatus

  User->>App: Add a visit schedule
  App->>Back4app: POST /classes/Visit
  Back4app-->>App: Visit objectId and scheduledAt

  User->>App: Log an adverse event
  App->>Back4app: POST /classes/AdverseEvent
  Back4app-->>App: AdverseEvent objectId and status

  App->>Back4app: Subscribe to live updates for Visit and AdverseEvent
  Back4app-->>App: Real-time subject activity

实地指南

临床试验方案中每个类别的完整字段级参考。

字段类型描述必需
objectIdStringAuto-generated unique identifier自动
usernameStringUser login name
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole of the user, such as coordinator, investigator, or sponsor
siteNameStringClinical site or clinic name
createdAtDateAuto-generated creation timestamp自动
updatedAtDateAuto-generated last-update timestamp自动

8 字段在 User 中

临床访问控制

如何通过 ACL 和 CLP 策略保护研究、受试者、访问、受试者笔记和不良事件日志。

协调者范围访问

只有批准的试用工作人员可以创建或编辑受试者、筛选、访问、不良事件和受试者笔记记录。

站点级数据分离

使用研究所有权和基于指针的查询,以便团队仅查看分配给其站点的受试者。

安全日志完整性

不良事件条目应受到写入限制,并在进入审核之前在云代码中进行验证。

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
        },
        "siteName": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Study",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "protocolId": {
          "type": "String",
          "required": true
        },
        "title": {
          "type": "String",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "principalInvestigator": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "siteName": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Subject",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "subjectId": {
          "type": "String",
          "required": true
        },
        "fullName": {
          "type": "String",
          "required": true
        },
        "screeningStatus": {
          "type": "String",
          "required": true
        },
        "study": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Study"
        },
        "coordinator": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "dob": {
          "type": "Date",
          "required": false
        },
        "sexAtBirth": {
          "type": "String",
          "required": false
        },
        "consentSignedAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Screening",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "subject": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Subject"
        },
        "study": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Study"
        },
        "screeningStatus": {
          "type": "String",
          "required": true
        },
        "screeningDate": {
          "type": "Date",
          "required": true
        },
        "completedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Visit",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "subject": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Subject"
        },
        "study": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Study"
        },
        "visitType": {
          "type": "String",
          "required": true
        },
        "scheduledAt": {
          "type": "Date",
          "required": true
        },
        "visitStatus": {
          "type": "String",
          "required": true
        },
        "location": {
          "type": "String",
          "required": false
        },
        "coordinator": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "AdverseEvent",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "subject": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Subject"
        },
        "study": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Study"
        },
        "eventTerm": {
          "type": "String",
          "required": true
        },
        "severity": {
          "type": "String",
          "required": true
        },
        "serious": {
          "type": "Boolean",
          "required": true
        },
        "onsetDate": {
          "type": "Date",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "reportedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "SubjectNote",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "subject": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Subject"
        },
        "author": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "noteType": {
          "type": "String",
          "required": true
        },
        "noteText": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

与AI代理一起构建

使用 Back4app AI Agent 从此模板生成一个真实的临床试验受试者 CRM 应用,包括前端、后端、身份验证、筛选、访问、记录和安全流程。

Back4app AI Agent
准备好构建
在 Back4app 上创建一个安全的临床试验受试者 CRM 后端,使用这个确切的架构和行为。

架构:
1. 用户(使用 Back4app 内置):用户名、电子邮件、密码、角色、站点名称;objectId、createdAt、updatedAt(系统)。
2. 研究:protocolId(字符串,必填)、标题(字符串,必填)、状态(字符串,必填)、主要研究者(指向用户的指针,必填)、站点名称(字符串,必填);objectId、createdAt、updatedAt(系统)。
3. 受试者:subjectId(字符串,必填)、全名(字符串,必填)、筛选状态(字符串,必填)、研究(指向研究的指针,必填)、协调员(指向用户的指针,必填)、出生日期、出生性别、同意签署时间;objectId、createdAt、updatedAt(系统)。
4. 筛选:受试者(指向受试者的指针,必填)、研究(指向研究的指针,必填)、筛选状态(字符串,必填)、筛选日期(日期,必填)、完成者(指向用户的指针,必填)、备注(字符串);objectId、createdAt、updatedAt(系统)。
5. 访问:受试者(指向受试者的指针,必填)、研究(指向研究的指针,必填)、访问类型(字符串,必填)、安排时间(日期,必填)、访问状态(字符串,必填)、地点(字符串)、协调员(指向用户的指针,必填);objectId、createdAt、updatedAt(系统)。
6. 不良事件:受试者(指向受试者的指针,必填)、研究(指向研究的指针,必填)、事件术语(字符串,必填)、严重程度(字符串,必填)、严重性(布尔值,必填)、发生日期(日期,必填)、状态(字符串,必填)、报告者(指向用户的指针,必填);objectId、createdAt、updatedAt(系统)。
7. 受试者备注:受试者(指向受试者的指针,必填)、作者(指向用户的指针,必填)、备注类型(字符串,必填)、备注文本(字符串,必填);objectId、createdAt、updatedAt(系统)。

安全性:
- 将受试者名单限制在经过身份验证的员工中。
- 让协调员编辑其站点的受试者和访问。
- 限制不良事件录入仅限具有协调员或研究者角色的经过身份验证的用户。
- 使用 ACL 和 CLP,使筛选状态、访问安排、受试者备注和不良事件日志受到保护,无法公开访问。

身份验证:
- 注册、登录、注销。

行为:
- 跟踪筛选队列、受试者分配、访问安排、不良事件日志和受试者备注。
- 支持按研究、筛选状态、访问状态和严重不良事件过滤查询。

交付:
- 包含架构、ACL 和 CLP 的 Back4app 应用;用于筛选仪表板、访问规划、不良事件报告和受试者备注的前端。

按下面的按钮打开带有预填模板提示的代理。

这是没有技术后缀的基础提示。您可以在之后调整生成的前端堆栈。

几分钟内部署每月 50 次免费提示无需信用卡

API 沙箱

尝试 REST 和 GraphQL 端点与临床试验架构进行交互。响应使用模拟数据,无需 Back4app 账号。

加载游乐场…

使用与此模板相同的架构。

选择您的技术栈

展开每个卡片以查看如何将研究、科目和筛查与您选择的技术栈集成。

Flutter 临床试验对象 CRM 后端

React 临床试验对象 CRM 后端

React 原生 临床试验对象 CRM 后端

Next.js 临床试验对象 CRM 后端

JavaScript 临床试验对象 CRM 后端

Android 临床试验对象 CRM 后端

iOS 临床试验对象 CRM 后端

Vue 临床试验对象 CRM 后端

Angular 临床试验对象 CRM 后端

GraphQL 临床试验对象 CRM 后端

REST API 临床试验对象 CRM 后端

PHP 临床试验对象 CRM 后端

.NET 临床试验对象 CRM 后端

每种技术能为您提供什么

每个技术栈使用相同的临床试验后端架构和 API 合同。

统一的试验操作数据结构

轻松管理用户、研究、主题、筛选、访问、不良事件和主题笔记记录,使用一致的模式。

试验团队的筛选状态控制

通过明确的主题字段跟踪资格和入组里程碑。

协调员的访问调度

在一个地方协调计划、完成、错过或取消的访问。

临床工作流程中的安全事件记录

记录不良事件的严重程度和后续状态。

临床堆栈比较

比较所有支持的技术的设置速度、SDK样式和AI支持。

框架设置时间临床试验的好处SDK类型AI支持
大约5分钟用于移动和Web的协调应用程序的单一代码库。类型化SDK完整
少于5分钟用于筛选和访问计划的快速Web仪表板。类型化SDK完整
大约3-7分钟用于现场工作人员的跨平台移动应用。类型化SDK完整
快速(5分钟)设置服务器渲染的临床操作仪表板。类型化SDK完整
约3–5分钟轻量级网络集成用于试用操作。输入的SDK完整
大约5分钟用于协调员的本地Android应用。输入的SDK完整
少于5分钟用于访问和安全评审的本地iOS应用。输入的SDK完整
约3–7分钟React的网络用户界面用于主题跟踪。输入的 SDK完整
快速(5分钟)设置临床团队的企业仪表板。输入的 SDK完整
少于2分钟灵活的 GraphQL API 用于嵌套试验查询。GraphQL API完整
快速(2分钟)设置REST API 集成用于临床操作。REST API完整
~3分钟服务器端 PHP 集成用于协调工具。REST API完整
~3–7分钟.NET 后端用于受监管的工作流应用。类型化 SDK完整

设置时间反映了从项目启动到使用此模板架构进行首次主题或访问查询的预期持续时间。

临床试验常见问题

关于使用此模板构建临床试验受试者CRM后端的常见问题。

随着量的增长,临床试验受试者CRM实践如何保持入组质量?
临床试验受试者CRM团队应如何建模客户、事务和内部交接以避免歧义?
我们可以集成电子签名或文档存储,而不分散临床试验受试者CRM记录吗?
我如何使用 Flutter 查询受试者和访问记录?
我如何使用 Next.js Server Actions 管理临床试验受试者的 CRM 访问权限?
React Native 可以离线缓存不良事件吗?
我如何防止未经授权访问受试者数据?
在 Android 上展示试验操作的最佳方法是什么?
筛查到访流程是如何全流程工作的?

受到全球开发者的信任

使用 Back4app 模板,加入更快交付临床试验受试者CRM产品的团队

G2 Users Love Us Badge

准备好构建您的临床试验受试者CRM应用了吗?

在几分钟内启动您的临床试验项目。无需信用卡。

选择技术