Public format documentation

Accumedic EHI Export Format

How to read the electronic health information exports produced by Accumedic EMR and Accumedic PM, for a single patient and for the whole patient population. Both exports share one package format: its layout, data dictionary, CSV conventions and the limits it declares about itself. Published so that anyone receiving an export can process it without assistance from Accumedic.

Format version
1.0
Last updated
6 October 2026
Criterion
45 CFR § 170.315(b)(10)(i), (ii)
Package type
ZIP · CSV · JSON

This document describes the structure and syntax of the electronic health information (EHI) exports produced by Accumedic EMR and Accumedic PM. It is the export format documentation for ONC Health IT Certification criterion 45 CFR 170.315(b)(10) Electronic Health Information export: the single-patient export (§170.315(b)(10)(i)) and the patient population export (§170.315(b)(10)(ii)). Every export package includes a link to this page.

Data dictionary

Every table and column that can appear in an export (1054 tables) is described in the data dictionary, with the code lists the application defines. The same information is available as JSON and CSV.

Single  single-patient exportPopulation  patient population export

01The two exports

Accumedic EMR (clinical records) and Accumedic PM (scheduling, billing and practice management) share one database for each practice. An export contains the EHI that the two products store: demographics, clinical documentation, problems, medications, allergies, immunizations, orders and results, treatment plans, assessments, opioid treatment program dispensing, messages, scheduling, insurance, claims, payments and statements. It also contains stored documents and images.

Single-patient export Patient population export
Criterion §170.315(b)(10)(i) §170.315(b)(10)(ii)
Contents All EHI for one patient, plus the reference data needed to interpret it All EHI for every patient in the practice database, plus all reference data
exportType in manifest.json single-patient population

Both exports use the same package structure, file formats and conventions. Records that were deleted in the application but are still stored (for example, encounters marked as deleted) are included in both exports.

02How an export is produced

Single-patient export.

  • An authorized user creates it from within Accumedic EMR. It can be run at any time, with no Accumedic involvement (§170.315(b)(10)(i)(B)).
  • Steps:
    1. Open the patient's Demographics and select EHI Export.
    2. Select Create EHI export.
    3. The export runs in the background and the user receives a message when it is ready.
    4. Download the ZIP file from the same page.
  • Completed exports remain available for download for a period set by the practice (7 days by default).
  • Who can create one (§170.315(b)(10)(i)(C)(1)): only users who have been given the Export Patient EHI privilege. Practice administrators assign it to specific users or roles. No user has it until it is assigned, and it is not available in emergency-access sessions.
  • Creating and downloading exports are recorded in the application's access audit log.

Patient population export. The practice requests it from Accumedic support. Accumedic produces the export with its export tool and delivers the ZIP file to the practice securely.

03Package structure

An export is a single ZIP file. ZIP64 is used for packages larger than 4 GB.

EHI_<...>.zip ├── README.txt Summary of the export and the link to this documentation ├── manifest.json The data dictionary for this export (§ 5) ├── data/ │ ├── PEOPLE.csv One CSV file per table (§ 4) │ ├── EMR_ENCOUNTERS.csv │ └── … ├── documents/ │ └── <TABLE>/<row key>/<file> Stored documents and images, in their original format (§ 7) └── summary/ └── ccda.xml C-CDA clinical summary (single-patient, from the EMR)

The C-CDA summary is included for convenience and human readability. Everything it contains is also in data/.

04CSV conventions

  • One file per table, named data/<TABLE>.csv. Table and column names are upper case, and columns appear in the source table's order.
  • RFC 4180, comma-delimited, UTF-8 without a byte-order mark, CRLF line endings, with a header row.
  • Missing values: an unquoted empty field means no value (NULL). A quoted empty field ("") means an empty text value.
  • A field that contains a comma, a double quote, a line break, or leading or trailing spaces is enclosed in double quotes. Embedded double quotes are doubled.
  • A table with no rows for the patient is still present, as a header-only file.

Every column has a logical type, given in the data dictionary and in manifest.json:

Type Representation Example
string Text as entered. May contain line breaks. Some clinical note fields contain HTML markup. Follows up in 2 weeks
integer Optional minus sign and digits -42
decimal . as the decimal separator, no thousands separator 125.5000
float Decimal or scientific notation 98.6
boolean 1 = true, 0 = false 1
date yyyy-MM-dd 2024-03-01
datetime yyyy-MM-ddTHH:mm:ss.fff, in the practice's local time (the source system does not record a time zone) 2024-03-01T14:30:00.000
datetimeoffset ISO 8601 with UTC offset 2024-03-01T14:30:00.000-05:00
time HH:mm:ss.fff 08:15:00.000
guid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
binary Base64. Row-version values are hexadecimal with a 0x prefix.
file Path of a file in the package, relative to the package root (section 7) documents/PAT_IMAGES/000123_4/referral.pdf

Text flag columns use the values stored by the application, typically Y/N.

05manifest.json

Authoritative for each export

manifest.json is generated from the database at the moment the export is created. It is the authoritative data dictionary for that export: it describes every file in the package, so it stays accurate even for a table added to the product after this documentation was published.

{
  "formatName": "Accumedic EHI Export",
  "formatVersion": "1.0",
  "formatSpecification": "https://patient-export-docs.accumedic.com",
  "exportType": "single-patient",
  "generatedAtUtc": "2026-10-06T14:03:22Z",
  "generator": { "name": "Accumedic EMR", "version": "1.0.0.0", "linkageManifestVersion": "2026-10-06" },
  "source": { "practice": "Example Practice" },
  "consistency": "Tables are read one after another from the database; ...",
  "patientKey": { "table": "PATIENTS", "column": "ACCOUNT" },
  "patients": [ { "account": "000123", "lastName": "Doe", "firstName": "Jane", "dateOfBirth": "1980-01-31" } ],
  "tables": [
    {
      "name": "AR_LINE_ITEMS",
      "category": "patient",
      "domain": "Billing: encounters, A/R, claims, remittance",
      "description": "Charge lines on an invoice: procedure, diagnosis pointers, dates and units.",
      "patientLink": "(INVOICE) -> ACCOUNTS_RECEIVABLE(INVOICE)",
      "patientLinks": [ { "type": "via", "table": "ACCOUNTS_RECEIVABLE", "join": [ { "column": "INVOICE", "references": "INVOICE" } ] } ],
      "primaryKey": ["INVOICE", "LINE_NO"],
      "file": { "path": "data/AR_LINE_ITEMS.csv", "rows": 42, "bytes": 5120, "sha256": "…" },
      "columns": [
        { "name": "INVOICE", "type": "integer", "sqlType": "int", "nullable": false },
        { "name": "DATE_OF_SERVICE", "type": "datetime", "sqlType": "datetime", "nullable": true }
      ]
    }
  ],
  "codeLists": { "AR_TRANSACTION_KIND": { "description": "…", "values": [ { "code": "0", "meaning": "Charge" } ] } },
  "documents": { "count": 17, "totalBytes": 48211122, "files": [ { "path": "documents/PAT_IMAGES/000123_4/referral.pdf",
      "table": "PAT_IMAGES", "column": "IMAGE_BODY", "rowKey": "000123_4", "mimeType": "application/pdf",
      "originalFileName": "referral.pdf", "bytes": 182044, "sha256": "…" } ] },
  "tablesNotIncluded": [ { "name": "…", "category": "audit", "reason": "…" } ],
  "warnings": []
}
Field Meaning
exportType single-patient or population
patients Single-patient exports: the patient the export was created for
consistency How the data was read (see section 10)
tables[] One entry per CSV file
tables[].category patient (records belonging to a patient), shared (a record shared by several patients, such as a claim batch or an electronic remittance file), reference (code tables and directories used to interpret patient records), audit (population exports, on request only), unresolved (a table not yet classified; see section 10)
tables[].patientLinks How each row relates to a patient (section 6); absent for reference tables
tables[].relatedPersonColumns Single-patient exports: for rows that belong to a related person rather than the patient, only these columns are populated (section 6)
tables[].autoLinked true when the table was not in the published data dictionary at the time of the export and was linked to the patient automatically
tables[].columns[] Each column in file order: name, logical type (section 4), source sqlType, nullable, and where available description and codeList
codeLists Code lists used by columns in this export (section 8)
documents.files[] Every document file, the table, column and row it belongs to, its MIME type, the original file name when recorded, size and SHA-256. storedCompressed: true means the application stored the file inside a ZIP wrapper and the export contains the unwrapped original.
tablesNotIncluded Tables with patient-related data that are not in this export, and why (section 9)
warnings Anything the export could not do completely, for example a document file that could not be found
sha256 Lowercase hexadecimal SHA-256 of the file, for integrity checking

06Linkage and attribution

Patient identifier. ACCOUNT (text, up to 12 characters) identifies a patient in both products.

  • PATIENTS lists the accounts that are patients.
  • PEOPLE holds names, addresses and other demographic details. It holds them for patients and also for related persons, such as an insurance subscriber or guarantor.

How a row relates to a patient. Each patient table's patientLinks gives one or more ways a row can relate to a patient. A row relates to a patient if any of them applies:

  • {"type": "column", "column": "X"}: the row's column X holds the patient's ACCOUNT.
  • {"type": "via", "table": "T", "join": [{"column": "A", "references": "B"}]}: the row's column A equals column B of a row in table T, and that row relates to the patient. Apply T's own patientLinks the same way.

The data dictionary shows the same information in words. Common keys that link records:

Key Identifies Table that relates it to the patient
ENCOUNTER_ID a clinical encounter and its documentation EMR_ENCOUNTERS
ENCOUNTER a billing encounter (superbill) ENCOUNTERS
EPISODE_CARE_ID a program admission (episode of care) PAT_PROGRAMS
APPT_ID an appointment APPOINTMENTS
INVOICE an invoice and its charges, claims and payments ACCOUNTS_RECEIVABLE (through PATIENT_ACCOUNT)
LAB_ORDER_NUMBER + LAB_ID a laboratory order and its results EMR_ORDERS

Related persons. In a few tables ACCOUNT identifies someone other than the patient:

  • In ACCOUNTS_RECEIVABLE and ELIG_REQUESTS, ACCOUNT is the responsible party or insured; PATIENT_ACCOUNT is the patient.
  • In INSURANCE_POLICIES, ACCOUNT is the policy holder. A patient covered as a dependent is linked to the policy through PAT_INSURANCES.
  • In PAT_STATEMENT_DATES, ACCOUNT is the statement recipient.
Related persons

A single-patient export includes the PEOPLE rows of the patient's guarantor, legal representative and insurance policy holders, because the patient's records refer to them. These rows contain only the person's ACCOUNT and name; their other columns are empty. manifest.json lists the populated columns under relatedPersonColumns. The patient's own row is complete, and population exports contain every row in full.

Shared records. Some records belong to more than one patient: a claim batch, an electronic remittance (835) file, a group-therapy group, or a contact person linked to several patients. A single-patient export includes such a record when the patient's records refer to it, but never the other patients' rows. In a population export a shared record appears once, and it relates to every patient whose records refer to it.

Attribution in a population export. To find all rows for one patient, start from PATIENTS.ACCOUNT and apply each table's patientLinks as described above. Reference tables are not attributed to patients.

07Documents and images

Scanned and uploaded documents, photographs, signatures, rendered encounter notes, laboratory result documents and message attachments are written to documents/ in their original file format:

documents/<TABLE>/<row key>/<file name>
  • <row key> is the row's primary-key values joined with _.
  • <file name> is the original file name when the application recorded one. Otherwise it is the column name plus an extension matching the file's content, for example IMAGE_BODY.pdf.
  • When a row has more than one file column, files from the additional columns are prefixed with the column name, for example IMAGE_THUMB_intake.pdf.
  • The row's column in the CSV holds the same relative path. manifest.json lists every file with its MIME type, size and SHA-256.
  • Where the application stored a file inside a ZIP wrapper, the export contains the original file. ZIP files and Office documents that were uploaded as such are exported unchanged.

08Codes and clinical forms

Code values.

  • Many columns hold codes from standard code systems: ICD-10-CM, CPT/HCPCS, SNOMED CT, RxNorm, LOINC, CVX and NDC.
  • Practice-defined codes are decoded by reference tables included in the export, for example the lookup tables whose names begin with V_, and directories such as PROVIDERS, PAYORS and LOCATIONS.
  • A few code lists are defined by the application itself. They are listed on the code lists page and in manifest.json (codeLists), and are referenced by the columns that use them.

Clinical forms. Clinical documentation is entered on configurable forms.

  • Each encounter is a row of EMR_ENCOUNTERS. Its MASTER_TEMPLATE_ID identifies the form used, and the form is described in EMR_MASTER_TEMPLATES.
  • The values entered on a form are stored in tables whose names begin with EMR_ENCOUNTERS_ (for example EMR_ENCOUNTERS_PROGRESS_NOTES and EMR_ENCOUNTERS_SOAP). These rows are keyed by ENCOUNTER_ID, plus SEQUENCE_NO for repeating entries.
  • EMR_DATA_ELEMENT_MASTER describes each form field: its name, description and units, and the TABLE_NAME and COLUMN_NAME where its value is stored.
  • The signed note is also included as a PDF (EMR_ENCOUNTERS.IMAGE_BODY).

09What is not included

Exports contain the EHI the products store. The following are not included:

Not included Why
Application configuration that is not needed to interpret the data: user and security settings, screen layouts, report definitions, system integration settings and internal number sequences Not health information. Code tables and directories needed to interpret the data (for example providers, payers, locations, programs, fee schedules and form definitions) are included.
Staff and provider personal details Not patient information. Directory information (names, credentials, identifiers such as NPI, and practice contact details) is included so that the people named in patient records can be identified.
Audit trails and interface logs Not part of the designated record set. The clinical content of interface messages (for example, laboratory results) is stored, and exported, in the clinical tables. Population exports include them when the practice requests it.
Data that has been permanently deleted No longer stored
Psychotherapy notes, as defined in 45 CFR 164.501 Excluded from EHI by definition (45 CFR 171.102). Accumedic EMR and Accumedic PM do not maintain psychotherapy notes separately from the medical record. All clinical documentation the products store, including session and process notes recorded in encounters, is part of the medical record and is included.

Audit trails and interface logs are not part of the designated record set. They are excluded from single-patient exports, and are included in a population export only when the practice requests them:

AUDIT_ACTIVITY, AUDIT_FIELD_CHANGES, AUDIT_FORM_ACCESS, AUDIT_HL7_MESSAGES, AUDIT_REPORT_ACCESS, EMR_DRFIRST_ERROR_LOG, EMR_ENCOUNTERS_AUDIT_LOG, EXCHANGE_SYNC_LOG, HL7_RECEIVER_LOG, INTERFACE_LOG_PAT, RCM_INTERFACE_LOG, RCM_PAYMENT_LOG, STOCKAMP_SERVER_LOG

Records that contain other patients' data, such as complete claim transmission files, are included in population exports only:

CLAIM_BATCH_MESSAGES, CLAIM_BATCH_REPORTS, CLAIM_BATCH_TRANSMISSION

Each export's manifest.json lists, under tablesNotIncluded, the tables with patient-related data that are not in that export, and why.

10Stated limits

The export declares the following limits about itself.

Not a point-in-time snapshot

Tables are read one after another, not inside a single database transaction. A record changed while the export runs can appear in one table and not in a related one. Population exports are normally produced from a copy of the practice database, which avoids this.

Merged patient records

When two patient records were merged, the data was moved to the surviving account. The previous demographic record is kept in PAT_OLD_PEOPLE, and OLD_ACCOUNT holds the former account number.

Documents that could not be read

If a stored document file cannot be found when the export is created, its column is empty and the export's warnings say so.

Tables added after this documentation

An export may contain a table that is not yet in the published data dictionary. It is fully described in that export's manifest.json, marked "autoLinked": true or "category": "unresolved", and noted in warnings.

Row counts

The row counts in manifest.json are authoritative for the export.

11Reading an export

  1. Unzip the package, using a tool that supports ZIP64 for large population exports.
  2. Read README.txt, then manifest.json. Check exportType, and for a single-patient export, patients.
  3. For each entry in tables, load file.path with an RFC 4180 CSV parser, as UTF-8. Treat unquoted empty fields as missing values, and convert values using the column types (section 4).
  4. Optionally, verify each file against its sha256.
  5. Relate rows to the patient with patientLinks (section 6), and join tables on the keys described in the data dictionary.
  6. Decode codes using the reference tables and codeLists (section 8).
  7. Open documents from the paths in the CSV columns or in documents.files.

12Versioning and currency

  • The format version is in manifest.json (formatVersion). Adding tables or columns does not change the major version, so consumers should ignore columns they do not recognise. A change to the meaning or representation of existing data increments the major version, and the documentation for earlier versions remains available.
  • This documentation and the data dictionary are generated from the product's database schema. They are republished whenever a product release changes the export format (§170.315(b)(10)(iii)).
  • manifest.json in each export is generated at the time of export, so it always describes that export exactly.
Version Date Change
1.0 6 October 2026 Initial release

13Contact

Questions about an export can be sent to Accumedic support through the practice's usual support channel.