EHR
AIエージェントで構築
EHR バックエンド

電子健康記録 (EHR) アプリ バックエンド テンプレート
縦断的患者記録、遭遇文書、署名ノートワークフロー、および追跡可能な監査履歴

包括的な患者の臨床歴、バージョン付きノート、およびマルチ署名承認フローのためのBack4app 上のEHR バックエンド 。これを使用して、トレーサビリティを維持しながら、ウェブとモバイルで医療製品を迅速に出荷できます。

重要なポイント

このテンプレートは、患者記録、エンカウンター、ノートの修正、共同署名プロセスのために臨床文書準備済みのバックエンドを提供し、チームがバックエンドの基盤を再構築するのではなく、ケアワークフローに集中できるようにします。

  1. 縦の患者チャートモデル人口統計、識別子、エンカウンター、および完全な患者履歴ビューのために構築された構造内に臨床エントリを整理します。
  2. バージョン管理された医療ノートワークフロードラフト、レビュー済み、修正済み、署名済みのノート修正を追跡し、文書履歴を明示的かつクエリ可能に保つことができます。
  3. 複数署名のサポート出席医、研修医、専門医、または監督者の署名をステータス追跡とタイムスタンプ付きの承認で収集します。
  4. チャートアクセスの監査可能性内部レビュー、コンプライアンスレポート、運用トラブルシューティングをサポートするために、意味のあるアクセスと変更イベントをキャプチャします。
  5. クロスプラットフォーム配信RESTおよびGraphQLを通じてポータル、医師ワークステーション、モバイルチャーティングアプリを提供します。オプションでLive Queriesを利用できます。

電子カルテ(EHR)アプリバックエンドテンプレートとは?

Back4appは、迅速な製品配信のための管理されたバックエンドです。電子カルテ(EHR)アプリバックエンドテンプレートは、患者、受診、ノートバージョン、署名、および監査イベントをモデル化しているため、チームは初日から強力なバックエンド契約で医療ドキュメンテーション製品を実装できます。

最適:

電子カルテソフトウェア臨床文書システム患者履歴タイムライン進捗ノートとチャーティングツール居住者-担当医共署名ワークフローヘルスケアMVPと内部ツール

概要

臨床文書システムは、使いやすさと追跡可能性のバランスを取る必要があります。チームは、完全な患者タイムライン、構造化された遭遇記録、制御されたノート改訂、署名や修正のための信頼できる承認経路を必要とします。

このテンプレートは、所有権ルールとオプションのLive Queriesを持つPatient、Encounter、MedicalNote、NoteSignature、およびAuditEventを定義しており、チームは迅速かつ一貫してEHR体験を構築できます。

コアEHR機能

このハブのすべての技術カードは、患者、エンカウンター、医療ノート、ノート署名、監査イベントを含む同じEHRスキーマを使用しています。

患者マスターレコード

各患者の人口統計の詳細、医学的記録番号、生年月日、連絡先データ、およびコアチャートメタデータを保存します。

遭遇ベースのチャート編成

タイムスタンプ、ケアコンテキスト、ステータス、および責任ある臨床医のポインターを持つ訪問、入院、相談、またはフォローアップを表します。

バージョン付き医療ノート

MedicalNoteはノートの種類、内容、改訂番号、ステータス、修正メタデータ、および患者と遭遇へのリンクを保存します。

マルチサイン署名承認ワークフロー

NoteSignatureオブジェクトは、誰が署名する必要があるか、役割、現在のステータス、署名されたタイムスタンプ、オプションのコメントを追跡します。

アクセスと変更の監査イベント

AuditEventは、重要な読み取り、書き込み、ステータス変更、および署名アクションを、アクター、ターゲット、およびタイムスタンプデータと共に記録します。

なぜBack4appで電子健康記録(EHR)アプリのバックエンドを構築するのか?

Back4appは、医療文書フローのための管理されたバックエンド契約を提供し、チームがインフラストラクチャの配管ではなく、臨床体験、チャートの使いやすさ、およびドメインロジックに集中できるようにします。

  • 臨床データ構築Blocks: 患者記録、遭遇、ノートバージョン、および署名のための定義済みクラスにより、全バックエンドをゼロから設計することなく、基本的なEHRフローを実装できます。
  • 改訂および承認のトレーサビリティ: バージョン管理されたノート記録と明示的な署名オブジェクトにより、草稿、レビュー、修正、そして署名状態を明確に表現しやすくなります。
  • アプリおよび統合のための柔軟なAPI: ポータル、モバイルチャート、分析、外部臨床統合のためにRESTおよびGraphQLエンドポイントを公開しつつ、チャート更新にLive Queriesを使用します。

一つのバックエンド契約でチーム間およびプラットフォーム間で患者のチャート作成を標準化し、安全な文書ワークフローを提供するのに必要な時間を短縮します。

コアの利点

バージョン履歴と承認トレーサビリティを保持しつつ、迅速に進めるのを助ける医療文書のバックエンド。

迅速なチャーティング製品の提供

あらかじめ構築された患者およびノートモデルから始めることで、チームはチャートレビュー、文書作成、承認画面などのワークフローに集中できます。

明確な改訂履歴

変更された内容、変更日時、およびどのバージョンが権威であるかをチームが理解できるように、明示的なノートバージョンと修正系譜を保持します。

署名ワークフローのサポート

レビュアーのキュー、必要な署名者、共同署名の期限、完了状態を、別のワークフローエンジンを最初に発明することなく表現します。

役割に応じたアクセスパターン

役割と所有権の規則を適用し、認可された臨床医または管理者のみが敏感なチャートコンテンツを作成、編集、署名、または表示できるようにします。

リアルタイムのチャート応答性

Live Queriesは、遭遇が更新されたとき、ノートが修正されたとき、または必要な署名が完了したときにクライアントに通知できます。

統合のために拡張可能

RESTまたはGraphQL APIを使用して、スケジューリングツール、患者ポータル、請求システム、または相互運用性レイヤーに接続します。

最新のEHRワークフローを立ち上げる準備はできましたか?

Back4app AIエージェントにEHRバックエンドを構築させ、1つのプロンプトからサンプル患者、臨床遭遇、ノートバージョン、および監査イベントを生成させてください。

無料で始められる — 月に50のAIエージェントプロンプト、クレジットカード不要

技術スタック

このEHRバックエンドテンプレートに含まれるものすべて。

フロントエンド
13以上のテクノロジー
バックエンド
Back4app
データベース
MongoDB
認証
組み込みの認証 + ロール
API
REST と GraphQL
リアルタイム
Live Queries

ER 図

EHRスキーマのエンティティリレーションシップモデル。

ダイアグラムソースを見る
Mermaid
erDiagram
    User ||--o{ Patient : "primary_clinician_for"
    Patient ||--o{ Encounter : "has"
    Patient ||--o{ MedicalNote : "chart_contains"
    Encounter ||--o{ MedicalNote : "context_for"
    MedicalNote ||--o{ NoteVersion : "versioned_as"
    MedicalNote ||--o{ Signature : "requires"
    NoteVersion ||--o{ Signature : "attests"
    Patient ||--o{ Attachment : "owns"
    Encounter ||--o{ Attachment : "context_for"
    MedicalNote ||--o{ Attachment : "references"
    User ||--o{ MedicalNote : "authors"
    User ||--o{ NoteVersion : "edits"
    User ||--o{ Signature : "signs"
    User ||--o{ AuditEvent : "actor_of"
    Patient ||--o{ AuditEvent : "chart_activity"

    Patient {
        String objectId PK
        String mrn
        String fullName
        Date dateOfBirth
        String sexAtBirth
        Array allergies
        Pointer primaryClinician FK
        String status
        Date createdAt
        Date updatedAt
    }

    Encounter {
        String objectId PK
        Pointer patient FK
        String encounterNumber
        String type
        String department
        Pointer admittingClinician FK
        Date startedAt
        Date endedAt
        String status
        Date createdAt
        Date updatedAt
    }

    MedicalNote {
        String objectId PK
        Pointer patient FK
        Pointer encounter FK
        Pointer author FK
        String title
        String noteType
        Number currentVersionNumber
        String status
        Boolean requiresCosign
        Date createdAt
        Date updatedAt
    }

    NoteVersion {
        String objectId PK
        Pointer medicalNote FK
        Number versionNumber
        Pointer editor FK
        String subjective
        String objective
        String assessment
        String plan
        String changeSummary
        Boolean isAddendum
        Date createdAt
        Date updatedAt
    }

    Signature {
        String objectId PK
        Pointer medicalNote FK
        Pointer noteVersion FK
        Pointer signer FK
        String signatureRole
        String status
        Date signedAt
        String comment
        Date createdAt
        Date updatedAt
    }

    Attachment {
        String objectId PK
        Pointer patient FK
        Pointer encounter FK
        Pointer medicalNote FK
        File file
        String category
        Pointer uploadedBy FK
        Date createdAt
        Date updatedAt
    }

    AuditEvent {
        String objectId PK
        Pointer actor FK
        Pointer patient FK
        String eventType
        String targetClass
        String targetId
        String details
        String ipAddress
        Date timestamp
    }

統合フロー

患者チャートアクセス、遭遇文書、バージョン付きノート更新、署名ワークフローのためのAuth-to-CRUDフロー。

ダイアグラムソースを見る
Mermaid
sequenceDiagram
  participant User as Clinician
  participant App as Electronic Health Record (EHR) App
  participant Back4app as Back4app Cloud

  User->>App: Sign in to access patient chart
  App->>Back4app: POST /login (username, password)
  Back4app-->>App: Session token + user role

  User->>App: Open patient timeline
  App->>Back4app: GET /classes/Patient + /classes/Encounter + /classes/MedicalNote
  Back4app-->>App: Patient chart, active encounters, note list

  User->>App: Create amended progress note
  App->>Back4app: POST /classes/MedicalNote (patient, encounter, author, status)
  Back4app-->>App: MedicalNote objectId
  App->>Back4app: POST /classes/NoteVersion (medicalNote, versionNumber, SOAP content)
  Back4app-->>App: NoteVersion saved

  User->>App: Request attending co-signature
  App->>Back4app: POST /classes/Signature (medicalNote, noteVersion, signer, role)
  Back4app-->>App: Signature request created
  App->>Back4app: POST /classes/AuditEvent (eventType: sign_request, targetClass: MedicalNote)
  Back4app-->>App: Audit event saved

  Back4app-->>App: Live Query events (new versions, signature status changes)
  App-->>User: Real-time chart refresh and signer updates

データ辞書

EHRスキーマ内のすべてのクラスの完全なフィールドレベルリファレンス。

フィールドタイプ説明必須
objectIdStringAuto-generated unique identifier自動
usernameStringLogin username for clinicians, scribes, and administrators
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole (admin, physician, nurse, scribe, auditor)
displayNameStringFull display name used in signatures and chart headers
licenseNumberStringClinical license or credential identifier
createdAtDateAuto-generated creation timestamp自動
updatedAtDateAuto-generated last-update timestamp自動

9 フィールドは User にあります

セキュリティと権限

ACL、ロール、CLP戦略が患者のチャート、ノートの改訂、署名、および監査イベントをどのように保護するか。

役割ベースのチャートアクセス

臨床医、担当医、レビュアー、管理者などの役割を使用して、誰が患者の記録を読み、ノートを作成し、署名を要求し、アクセスを管理できるかを範囲設定します。

所有権と署名の責任

ノートの編集を権限のある著者または監督者に制限し、指定された署名者のみが彼らに割り当てられたNoteSignatureレコードを完了できるようにします。

保護された監査証跡

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
        },
        "licenseNumber": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Patient",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "mrn": {
          "type": "String",
          "required": true
        },
        "fullName": {
          "type": "String",
          "required": true
        },
        "dateOfBirth": {
          "type": "Date",
          "required": true
        },
        "sexAtBirth": {
          "type": "String",
          "required": false
        },
        "allergies": {
          "type": "Array",
          "required": false
        },
        "primaryClinician": {
          "type": "Pointer",
          "required": false,
          "targetClass": "User"
        },
        "status": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Encounter",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Patient"
        },
        "encounterNumber": {
          "type": "String",
          "required": true
        },
        "type": {
          "type": "String",
          "required": true
        },
        "department": {
          "type": "String",
          "required": false
        },
        "admittingClinician": {
          "type": "Pointer",
          "required": false,
          "targetClass": "User"
        },
        "startedAt": {
          "type": "Date",
          "required": true
        },
        "endedAt": {
          "type": "Date",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "MedicalNote",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Patient"
        },
        "encounter": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Encounter"
        },
        "author": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "title": {
          "type": "String",
          "required": true
        },
        "noteType": {
          "type": "String",
          "required": true
        },
        "currentVersionNumber": {
          "type": "Number",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "requiresCosign": {
          "type": "Boolean",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "NoteVersion",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "medicalNote": {
          "type": "Pointer",
          "required": true,
          "targetClass": "MedicalNote"
        },
        "versionNumber": {
          "type": "Number",
          "required": true
        },
        "editor": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "subjective": {
          "type": "String",
          "required": false
        },
        "objective": {
          "type": "String",
          "required": false
        },
        "assessment": {
          "type": "String",
          "required": false
        },
        "plan": {
          "type": "String",
          "required": false
        },
        "changeSummary": {
          "type": "String",
          "required": false
        },
        "isAddendum": {
          "type": "Boolean",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Signature",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "medicalNote": {
          "type": "Pointer",
          "required": true,
          "targetClass": "MedicalNote"
        },
        "noteVersion": {
          "type": "Pointer",
          "required": true,
          "targetClass": "NoteVersion"
        },
        "signer": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "signatureRole": {
          "type": "String",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "signedAt": {
          "type": "Date",
          "required": false
        },
        "comment": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Attachment",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Patient"
        },
        "encounter": {
          "type": "Pointer",
          "required": false,
          "targetClass": "Encounter"
        },
        "medicalNote": {
          "type": "Pointer",
          "required": false,
          "targetClass": "MedicalNote"
        },
        "file": {
          "type": "File",
          "required": true
        },
        "category": {
          "type": "String",
          "required": true
        },
        "uploadedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "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"
        },
        "patient": {
          "type": "Pointer",
          "required": false,
          "targetClass": "Patient"
        },
        "eventType": {
          "type": "String",
          "required": true
        },
        "targetClass": {
          "type": "String",
          "required": false
        },
        "targetId": {
          "type": "String",
          "required": false
        },
        "details": {
          "type": "String",
          "required": false
        },
        "ipAddress": {
          "type": "String",
          "required": false
        },
        "timestamp": {
          "type": "Date",
          "required": true
        }
      }
    }
  ]
}

AIエージェントで構築

このテンプレートを使用して、フロントエンド、バックエンド、認証、ノート改訂ワークフロー、および署名フローを含む完全なEHRアプリを生成するためにBack4app AIエージェントを利用してください。

Back4app AIエージェント
構築の準備はできました
Back4appでこの正確なスキーマと動作を持つ電子健康記録(EHR)バックエンドを作成します。

スキーマ:
1. 患者: medicalRecordNumber (文字列、必須), fullName (文字列、必須), dateOfBirth (日付), sexAtBirth (文字列), contact (JSON), primaryClinician (ユーザーへのポインター、オプション), status (文字列: active, inactive, archived), objectId, createdAt, updatedAt.
2. 診療: patient (患者へのポインター、必須), encounterType (文字列: outpatient, inpatient, emergency, telehealth), startedAt (日付、必須), endedAt (日付、オプション), location (文字列), attendingClinician (ユーザーへのポインター), status (文字列: open, closed, cancelled), objectId, createdAt, updatedAt.
3. 医療ノート: patient (患者へのポインター、必須), encounter (診療へのポインター、オプション), author (ユーザーへのポインター、必須), noteType (文字列: progress, admission, discharge, consult, procedure), title (文字列), content (文字列、必須), versionNumber (数値、必須), previousVersion (医療ノートへのポインター、オプション), status (文字列: draft, under_review, signed, amended), amendmentReason (文字列、オプション), objectId, createdAt, updatedAt.
4. ノート署名: note (医療ノートへのポインター、必須), signer (ユーザーへのポインター、必須), signerRole (文字列), status (文字列: requested, signed, declined), requestedAt (日付), signedAt (日付、オプション), comment (文字列、オプション), objectId, createdAt, updatedAt.
5. 監査イベント: actor (ユーザーへのポインター), eventType (文字列), targetClass (文字列), targetId (文字列), details (JSON), timestamp (日付) — 追加専用。

セキュリティ:
- 役割ベースのCLPおよびACL: 認証されたケアチームユーザーのみが患者および診療データにアクセスできます。ノートの著者または監督役だけが医療ノートの草案を編集できます。割り当てられた署名者のみがノート署名アクションを完了できます。監査イベントは追加専用で読み取り制限があります。

認証:
- 臨床医は組み込みのユーザーを通じてサインアップおよびログインします; 役割は管理者によって割り当てられます。

動作:
- ユーザーを認証し、患者のチャートを取得し、医療ノートを作成または修正し、1つまたは複数のノート署名承認をリクエストし、各重要な操作のために監査イベントエントリを書き込みます。

配信:
- 選択したテクノロジーごとにスキーマ、ACL、CLP、クラウドコード検証、シードデータサンプル、およびフロントエンドスキャフォールドを含むBack4appアプリ。

以下のボタンを押して、このテンプレートプロンプトが事前入力されたエージェントを開いてください。

この基本プロンプトはEHRスキーマと動作を説明します; その後、テクノロジー固有の接尾辞を選択できます。

数分でデプロイ月に50無料プロンプトクレジットカードは不要

APIプレイグラウンド

EHRスキーマに対してRESTおよびGraphQLエンドポイントを試してください。レスポンスはモックデータを使用し、Back4appアカウントは必要ありません。

プレイグラウンドを読み込んでいます…

このテンプレートと同じスキーマを使用しています。

テクノロジーを選択

統合ステップ、状態パターン、データモデルの例、オフラインノートのために各カードを展開してください。

Flutter EHRバックエンド

React EHRバックエンド

React ネイティブ EHRバックエンド

Next.js EHRバックエンド

JavaScript EHRバックエンド

Android EHRバックエンド

iOS EHRバックエンド

Vue EHRバックエンド

Angular EHRバックエンド

GraphQL EHRバックエンド

REST API EHRバックエンド

PHP EHRバックエンド

.NET EHRバックエンド

すべてのテクノロジーで得られるもの

すべてのスタックは同じEHRバックエンドスキーマとAPI契約を使用します。

包括的な患者記録

ehrシステムのための完全な患者履歴を簡単に管理します。

安全なデータストレージ

堅牢なehrシステムデータ保護により患者の機密性を確保します。

コンプライアンスのための監査トレイル

規制遵守のためにすべてのehrシステムインタラクションの正確なログを維持します。

REST/GraphQL API

最新のAPIでehrシステムデータにシームレスにアクセスし、操作します。

ノートのバージョン管理

効率的なノートバージョニングでehrシステム文書の変更を追跡します。

カスタマイズ可能なワークフロー

柔軟なバックエンドソリューションでユニークなehrシステムのニーズに合わせてプロセスを適応させます。

Ehrシステムフレームワーク比較

すべてのサポートされている技術におけるセットアップ速度、SDKスタイル、およびAIサポートを比較します。

フレームワークセットアップ時間Ehrシステムの利点SDKタイプAIサポート
迅速な(5分)セットアップモバイルとウェブのための単一コードベースのehrシステム。Typed SDKフル
~5分ehrシステムのための高速ウェブダッシュボード。Typed SDKフル
約5分ehrシステムのためのクロスプラットフォームモバイルアプリ。Typed SDKフル
5分未満ehrシステムのためのサーバーレンダリングされたウェブアプリ。Typed SDKフル
5分未満ehrシステムのための軽量ウェブ統合。Typed SDKフル
迅速な(5分)セットアップAndroidのネイティブアプリでehrシステム。Typed SDKフル
~5分iOSのネイティブアプリでehrシステム。Typed SDKフル
約5分ehrシステムのためのReact的ウェブUI。Typed SDKフル
5分未満ehrシステムのためのエンタープライズウェブアプリ。Typed SDKフル
~2分ehrシステムのための柔軟なGraphQL API。GraphQL APIフル
2分未満ehrシステムのためのREST API統合。REST APIフル
~3〜5分ehrシステムのためのサーバーサイドPHPバックエンド。REST APIフル
約5分ehrシステムのための.NETバックエンド。Typed SDKフル

セットアップ時間は、プロジェクトのブートストラップから最初の患者チャートビューが遭遇とノートの要約で満たされるまでの予想される期間を反映します。

よくある質問

このテンプレートを使用してEHRバックエンドを構築する際の一般的な質問。

電子健康記録バックエンドとは何ですか?
この EHR テンプレートには何が含まれていますか?
Live Queries は臨床アプリケーションをどのように支援しますか?
以前に署名されたメモへの直接編集を防ぐにはどうすればよいですか?
メモのトレース性にとって最も重要なフィールドは何ですか?
同じスキーマで複数のメモタイプをサポートできますか?
AI エージェントはサンプルの臨床データをどのように支援しますか?
患者アクセス監査を処理する推奨方法は何ですか?
署名後のノート修正をどのようにサポートしますか?

デジタルヘルスチームに信頼されています

構造化され、監査可能な臨床ワークフローのためのBack4appテンプレートを使用して医療ソフトウェアを構築するチームに参加しましょう。

G2 Users Love Us Badge

電子健康記録(EHR)アプリを構築する準備はできていますか?

数分で臨床文書プロジェクトを開始できます。クレジットカードは必要ありません。

技術を選択