Risk Diagnoses CSV Import
Note that Zus Risk Adjustment features are currently in public preview and are subject to change.
Zus provides customers with the ability to upload CSV files to bulk upload risk-related claim diagnoses, which will appear as Risk Diagnoses ExplanationOfBenefit resources within the Risk Gaps product.
Each row of a Risk Diagnoses CSV is one encounter whose risk-adjustment eligibility has already been determined by the source (for example, a CMS MAO-004 report). Risk-eligible encounters feed recapture and net-new Risk Gap calculation, while non-eligible encounters feed suspecting.
It's important to enroll your patients before uploading Risk Diagnoses information for them. See our documentation on Enrolling your Patients for more info.
Risk Diagnoses CSV Upload Process
CSV Imports are handled through SFTP. Reach out to your Zus support representative to set up a secure SFTP connection to the Zus system.
Once an SFTP upload folder is properly mounted, uploading a properly formatted Risk Diagnoses CSV File in that folder will create corresponding Risk Diagnoses ExplanationOfBenefit FHIR Resources.
Files may be uploaded and processed in any order. The latest state of each encounter is resolved by the SOURCE_UPDATED_AT column, not by upload order - see Encounter Restatements and Deduplication.
Required File Naming
risk-diagnoses_<schemaVersion>_<producedAt>[_<producerRef>].csv
<schemaVersion>- the version of this format the file conforms to; currentlyv1.<producedAt>- the UTC time the file was generated, in compact ISO 8601 format (YYYYMMDDTHHMMSSZ). This is for human/operational ordering only - theSOURCE_UPDATED_ATcolumn is the correctness signal.<producerRef>- an optional free-form token for your own batch or run identifier.
Example: risk-diagnoses_v1_20260201T000000Z_mao004-jan.csv
Risk Diagnoses CSV File Format
Provide Final-State Data Only
Every row is one encounter whose risk-adjustment eligibility has already been determined by the source. The file carries no add/delete nor void/replace flags; whoever produces the file must resolve each encounter to its final state first. For MAO-004 sources, this means replaying each encounter's void/replace correction chain per the CMS reporting rules (see the CMS MAO-004 User Guide) before producing the file.
The file should not be filtered to eligible encounters only: include every final-state risk-related encounter, flagged eligible or not via the RISK_ELIGIBLE column.
Because the grain is one row per encounter (with all of the encounter's diagnosis codes in a single column), an encounter's diagnoses can never be split across rows or files. Include each encounter at most once per file. To restate / edit an encounter, submit it again in a later file with the same ENCOUNTER_IDENTIFIER and a newer SOURCE_UPDATED_AT.
File Structure
- Encoding: UTF-8, no BOM.
- Delimiter: comma. Quoting per RFC 4180: fields containing a comma, double quote, or line break must be enclosed in double quotes; embedded double quotes are doubled (
""). - Diagnosis list sub-delimiter: semicolon (
;) inside theICD_10_CM_CODESfield, e.g.E11319;I509. Semicolons never appear in an ICD-10-CM code, so the list requires no quoting. - Line endings: LF or CRLF, both accepted.
- Header row: required, with the exact column names below (uppercase). Columns are matched by header name, not by position. A header containing an unrecognized column name rejects the whole file.
- Dates:
YYYY-MM-DD, strictly.
Columns
Every column is required. Empty or whitespace-only values are treated as absent, and an absent value invalidates the row.
| Column Name | Format | Description | Example |
|---|---|---|---|
PATIENT_IDENTIFIER_SYSTEM | URI, max 256 characters | An identifier system URL that your Patient records already carry in the builder. Used for Patient Matching at Import Time. MBI is supported as | https://fhir.athena.io/sid/ah-patient (The system value for an Athena Patient) |
PATIENT_IDENTIFIER_VALUE | string, max 128 characters | The patient's identifier in that system. Matched exactly (case-sensitive). Used for Patient Matching at Import Time | a-12345.E-98765 (An Athena Patient ID) |
ENCOUNTER_IDENTIFIER | string, max 64 characters | The source's encounter identifier (for MAO-004 sources, the encounter ICN; otherwise the source's equivalent). This is the upsert identity: one ExplanationOfBenefit is created per encounter, and resubmitting the same identifier updates it. The value must be stable across restatements - for MAO-004, use the correction chain's root ICN. | 9999999999999 |
ICD_10_CM_CODES | semicolon-delimited ICD-10-CM codes, max 1024 characters | The encounter's full diagnosis set as a Each code is accepted with or without the dot, validated against ICD-10-CM code shape, normalized to dotted form, and de-duplicated on import. |
|
RISK_ELIGIBLE | boolean | The source's risk-adjustment eligibility verdict for this encounter. The verdict covers every diagnosis on the encounter (MAO-004 allows or disallows a record as a unit). Eligible encounters feed recapture/net-new Risk Gap calculation; non-eligible encounters feed suspecting. | This field accepts only the following values (case-insensitive):true (The encounter is risk-eligible)false (The encounter is not risk-eligible) |
SERVICE_START_DATE | date, YYYY-MM-DD | First date of service. Must be on or before SERVICE_END_DATE. | 2026-01-02 |
SERVICE_END_DATE | date, YYYY-MM-DD | Last date of service. | 2026-01-02 |
SERVICE_TYPE | enum, 1 character | The type of service for the encounter. Drives the ExplanationOfBenefit claim type (P maps to professional; I and O map to institutional). | This field accepts only the following values:P (professional)I (inpatient)O (outpatient) |
PAYER | string, max 128 characters | The payer or program the eligibility determination came from. Populates the ExplanationOfBenefit's insurer.display and coverage display. |
|
PROVIDER | string, max 128 characters | Display name of the party responsible for the encounter. Populates the ExplanationOfBenefit's provider.display (display-only; the CSV carries no structured provider data). | Acme Medical Group |
SOURCE_UPDATED_AT | ISO 8601 timestamp, max 32 characters | When the producing source last changed this encounter's determination. This is the version guard: a re-import of an encounter applies only if this value is newer than the stored one; an equal value is idempotent, and an older value is rejected as a stale restatement. For MAO-004 sources, use the latest submission date across the encounter's correction chain. | 2026-02-01T00:00:00Z |
Sample File
PATIENT_IDENTIFIER_SYSTEM,PATIENT_IDENTIFIER_VALUE,ENCOUNTER_IDENTIFIER,ICD_10_CM_CODES,RISK_ELIGIBLE,SERVICE_START_DATE,SERVICE_END_DATE,SERVICE_TYPE,PAYER,PROVIDER,SOURCE_UPDATED_AT
https://fhir.athena.io/sid/ah-patient,a-12345.E-98765,9999999999999,E11319;I509,true,2026-01-02,2026-01-02,P,MEDICARE,Acme Medical Group,2026-02-01T00:00:00Z
http://hl7.org/fhir/sid/us-mbi,1EG4TE5MK72,8888888888888,F0390;J189,false,2026-03-14,2026-03-15,I,MEDICARE,Acme Regional Hospital,2026-04-01T00:00:00ZRow 1 is a risk-eligible professional encounter with two diagnoses. Row 2 matches the patient by MBI and carries an inpatient encounter that is not risk-eligible.
Encounter Restatements and Deduplication
During CSV import, ENCOUNTER_IDENTIFIER is the identity of each encounter: one Risk Diagnoses ExplanationOfBenefit exists per encounter, and resubmitting an encounter - in a later file or in the same file re-uploaded - updates the existing resource in place rather than creating a new one.
Restatements follow these rules:
- Resubmission fully replaces the encounter's record - its diagnosis set, eligibility, service dates, and all other fields. For example, re-uploading encounter
9999999999999with onlyE11319(and a newerSOURCE_UPDATED_AT) leaves the encounter with a single diagnosis -I50.9is removed. To retract a diagnosis, resubmit the encounter without it. There is no explicit delete mechanism. SOURCE_UPDATED_ATdecides which version wins. Zus keeps the newestSOURCE_UPDATED_ATvalue it has seen per encounter and applies an incoming restatement only if its value is newer. An equal value is idempotent (safe to re-upload the same file), and an older value is rejected as a stale restatement (skipped and logged, never applied).- Upload order doesn't matter. Because "latest" is a property of
SOURCE_UPDATED_ATrather than of arrival order, out-of-order, delayed, or retried uploads cannot regress an encounter to older data.
Patient Matching at Import Time
Before creating or updating a Risk Diagnoses ExplanationOfBenefit in our CSV pipeline, we require that a Patient record exists in the current builder that matches the PATIENT_IDENTIFIER_SYSTEM and PATIENT_IDENTIFIER_VALUE.
For example, if you have uploaded a CSV with a row that has the values
https://fhir.athena.io/sid/ah-patientforPATIENT_IDENTIFIER_SYSTEMa-12345.E-98765forPATIENT_IDENTIFIER_VALUE
Then a Patient FHIR record is expected to exist in your builder with a similar Identifier:
{
"id": "[uuid]",
"identifier": [{
"system": "https://fhir.athena.io/sid/ah-patient",
"value": "a-12345.E-98765"
},
... other identifiers
],
... additional Patient Data
}If there is no Patient in your builder with that identifier, then no Risk Diagnoses ExplanationOfBenefit will be created for that row.
Matching on MBI: if your files identify patients by Medicare Beneficiary Identifier (common for MAO-004 sources), your builder's Patient records must already carry MBI identifiers under the system http://hl7.org/fhir/sid/us-mbi. This is an onboarding requirement - make sure MBIs are included when enrolling your patients.
Please see our docs about Enrolling your Patients for more information.
FHIR Canonical URLs
Imported rows are stored as ExplanationOfBenefit resources using the following canonical URLs:
| Artifact | Canonical URL |
|---|---|
| Profile | https://zusapi.com/fhir/StructureDefinition/risk/risk-diagnoses |
Risk-adjustment eligibility extension (complex; sub-extensions status and source-updated-at) | https://zusapi.com/fhir/StructureDefinition/risk/risk-diagnoses/risk-adjustment-eligibility |
| Encounter identifier system (the upsert identity) | https://zusapi.com/fhir/identifier/risk/source-encounter-id |
Raw claim source extension (existing extension, reused; fixed value risk-diagnoses-csv) | https://zusapi.com/fhir/StructureDefinition/claims/raw-claim-source |
See Risk FHIR Models for the full resource shape and a worked example.
Updated about 10 hours ago
