Atrius India Core FHIR Implementation Guide
0.1.0 - ci-build
Atrius India Core FHIR Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
atrius-patient → QICorePatient)atrius-encounter → QICoreEncounter)atrius-familymemberhistory → QICoreFamilyMemberHistory)atrius-flag → QICoreFlag)atrius-goal → QICoreGoal)atrius-practitioner → QICorePractitioner)atrius-practitionerrole → QICorePractitionerRole)atrius-organization → QICoreOrganization)atrius-location → QICoreLocation)atrius-relatedperson → QICoreRelatedPerson)atrius-coverage → QICoreCoverage)Legacy / optional. Primary evaluation for new Atrius measures uses Atrius profiles and Atrius ValueSets directly — see Atrius evaluation strategy. Use this page when running unmodified QI-Core ELM or validating projected shapes against QI-Core.
This page defines the Atrius runtime projection behavior from Atrius authoring/storage profiles into QI-Core evaluation shapes used by CQL execution.
https://atrius.in/fhir/r4/atrius-core/StructureDefinition/.$evaluate uses unchanged QI-Core ELM and QI-Core model semantics.| Storage profile | QI-Core target | Parent basis |
|---|---|---|
atrius-patient |
QICorePatient |
NDHM Patient |
atrius-encounter |
QICoreEncounter |
NDHM Encounter |
atrius-familymemberhistory |
QICoreFamilyMemberHistory |
NDHM FamilyMemberHistory |
atrius-flag |
QICoreFlag |
R4 Flag |
atrius-goal |
QICoreGoal |
R4 Goal |
atrius-practitioner |
QICorePractitioner |
NDHM Practitioner |
atrius-practitionerrole |
QICorePractitionerRole |
NDHM PractitionerRole |
atrius-organization |
QICoreOrganization |
NDHM Organization |
atrius-relatedperson |
QICoreRelatedPerson |
R4 RelatedPerson |
atrius-coverage |
QICoreCoverage |
NDHM Coverage |
atrius-condition |
see Condition rules | NDHM Condition |
atrius-condition-encounter-diagnosis |
QICoreConditionEncounterDiagnosis |
Atrius Condition |
atrius-condition-problems-health-concerns |
QICoreConditionProblemsHealthConcerns |
Atrius Condition |
atrius-allergyintolerance |
QICoreAllergyIntolerance |
NDHM AllergyIntolerance |
atrius-adverseevent |
QICoreAdverseEvent |
R4 AdverseEvent |
atrius-bodystructure |
QICoreBodyStructure |
R4 BodyStructure |
atrius-device |
see Device rules | R4 Device |
atrius-devicerequest |
see DeviceRequest rules | R4 DeviceRequest |
atrius-devicerequest-requested |
QICoreDeviceRequested |
Atrius DeviceRequest |
atrius-devicerequest-prohibited |
QICoreDeviceProhibited |
Atrius DeviceRequest |
atrius-deviceusestatement |
QICoreDeviceUseStatement |
R4 DeviceUseStatement |
atrius-diagnosticreport-lab |
QICoreDiagnosticReportLab |
NDHM DiagnosticReportLab |
atrius-diagnosticreport-note |
QICoreDiagnosticReportNote |
NDHM DiagnosticReportImaging |
atrius-imagingstudy |
QICoreImagingStudy |
NDHM ImagingStudy |
atrius-immunization |
see Immunization rules | NDHM Immunization |
atrius-immunization-done |
QICoreImmunizationDone |
Atrius Immunization |
atrius-immunization-not-done |
QICoreImmunizationNotDone |
Atrius Immunization |
atrius-immunizationrecommendation |
QICoreImmunizationRecommendation |
NDHM ImmunizationRecommendation |
atrius-immunizationevaluation |
QICoreImmunizationEvaluation |
R4 ImmunizationEvaluation |
atrius-location |
QICoreLocation |
R4 Location |
atrius-observation |
see Observation rules | NDHM Observation |
atrius-observation-body-measurement |
see Observation rules | NDHM ObservationBodyMeasurement |
atrius-observation-general-assessment |
see Observation rules | NDHM ObservationGeneralAssessment |
atrius-observation-lifestyle |
see Observation rules | NDHM ObservationLifestyle |
atrius-observation-physical-activity |
see Observation rules | NDHM ObservationPhysicalActivity |
atrius-observation-vital-signs |
see Observation rules | NDHM ObservationVitalSigns |
atrius-observation-women-health |
see Observation rules | NDHM ObservationWomenHealth |
atrius-careplan |
QICoreCarePlan |
NDHM CarePlan |
atrius-careplan-assess-plan |
QICoreCarePlan |
R4 CarePlan |
atrius-careteam |
QICoreCareTeam |
R4 CareTeam |
atrius-communication |
see Communication rules | NDHM Communication |
atrius-communication-not-done |
QICoreCommunicationNotDone |
Atrius Communication |
atrius-communicationrequest |
QICoreCommunicationRequest |
NDHM CommunicationRequest |
atrius-claim |
QICoreClaim |
NDHM Claim |
atrius-claimresponse |
QICoreClaimResponse |
NDHM ClaimResponse |
atrius-medication |
QICoreMedication |
NDHM Medication |
atrius-medicationrequest |
see MedicationRequest rules | NDHM MedicationRequest |
atrius-medicationrequest-requested |
QICoreMedicationRequested |
Atrius MedicationRequest |
atrius-medicationrequest-prohibited |
QICoreMedicationProhibited |
Atrius MedicationRequest |
atrius-medicationstatement |
QICoreMedicationStatement |
NDHM MedicationStatement |
atrius-medicationadministration |
see MedicationAdministration rules | R4 MedicationAdministration |
atrius-medicationadministration-not-done |
QICoreMedicationAdministrationNotDone |
Atrius MedicationAdministration |
atrius-medicationdispense |
see MedicationDispense rules | R4 MedicationDispense |
atrius-medicationdispense-declined |
QICoreMedicationDispenseDeclined |
Atrius MedicationDispense |
atrius-nutritionorder |
QICoreNutritionOrder |
R4 NutritionOrder |
atrius-procedure |
see Procedure rules | NDHM Procedure |
atrius-procedure-not-done |
QICoreProcedureNotDone |
Atrius Procedure |
atrius-servicerequest |
see ServiceRequest rules | NDHM ServiceRequest |
atrius-servicerequest-not-requested |
QICoreServiceNotRequested |
Atrius ServiceRequest |
atrius-questionnaireresponse |
QICoreQuestionnaireResponse |
R4 QuestionnaireResponse |
atrius-specimen |
US Core Specimen | NDHM Specimen |
atrius-substance |
QICoreSubstance |
R4 Substance |
atrius-task |
see Task rules | NDHM Task |
atrius-task-rejected |
QICoreTaskRejected |
Atrius Task |
Apply these steps to every mapped resource unless a resource-specific rule overrides them.
meta.profile to the mapped QI-Core StructureDefinition URL.Reference values to the projected resource ids. Do not rewrite to QI-Core profile URLs in the reference string itself; keep Patient/{id}, Encounter/{id}, etc.These actor profiles carry NDHM-aligned (or R4, for RelatedPerson) storage constraints plus QI-relevant must-support. Projection is a profile swap, recursive reference rewrite, and the element notes below.
atrius-patient → QICorePatient)atrius-patient → QICorePatient.name, identifier, and gender.birthDate, telecom, address, deceased[x], link, communication, generalPractitioner, and managingOrganization.generalPractitioner and managingOrganization → projected QI-Core Organization, Practitioner, or PractitionerRole matching the reference type.link.other → projected QI-Core Patient or RelatedPerson.birthPlace, nationality, birthTime, recordedSexOrGender, interpreterRequired, citizenship) remain in storage; pass through when QI-Core/US Core allows, otherwise omit only if the evaluator rejects them.atrius-encounter → QICoreEncounter)atrius-encounter → QICoreEncounter (single QI-Core profile; no lab/note-style subtypes).subject → projected QI-Core Patient.participant.individual → projected QI-Core Practitioner, PractitionerRole, or RelatedPerson.serviceProvider → projected QI-Core Organization.reasonReference and diagnosis.condition using Condition category rules when references target Conditions.location.location, hospitalization.origin, and hospitalization.destination → projected QI-Core Location or Organization matching the reference type.status, class, type (CQL primary code path), period, reasonCode, serviceType, and hospitalization.dischargeDisposition for encounter class and timing logic.Notes:
type, class, and period metadata for India exchange; Atrius adds QI subject 1..1 and actor reference wiring.atrius-familymemberhistory → QICoreFamilyMemberHistory)atrius-familymemberhistory → QICoreFamilyMemberHistory (single QI-Core profile; no subtypes).patient → projected QI-Core Patient.status, relationship, date, age[x], deceased[x], and condition entries including condition.code (CQL primary code path), condition.onset[x], and QI condition extensions (familymemberhistory-abatement, familymemberhistory-severity) when present.Notes:
FamilyMemberHistory requires at least one condition entry with coded condition details; Atrius retains that for India storage.patient (not Encounter.subject) as the anchor reference for family history.atrius-flag → QICoreFlag)atrius-flag → QICoreFlag (single QI-Core profile; no subtypes).subject → projected QI-Core target matching the subject type (Patient, Organization, Practitioner, Location, or pass through R4 Group when present).status, category, code (CQL primary code path), and period for alert and timing logic.Notes:
subject on Patient, Organization, Practitioner, Location, or Group; Atrius storage wires Patient, actor profiles, Location, plus R4 Group.atrius-goal → QICoreGoal)atrius-goal → QICoreGoal (single QI-Core profile; no subtypes).subject → projected QI-Core Patient.lifecycleStatus, description, start[x], and target (including target.due[x]) for goal lifecycle and outcome logic.category when present for CQL primary code path (category is the QI-Core PCPath for Goal retrieves).Notes:
subject to Patient; Atrius wires subject to AtriusPatient.goal references project through this profile when Goal resources are included in the evaluation bundle.atrius-practitioner → QICorePractitioner)atrius-practitioner → QICorePractitioner.name and identifier.identifier.use, identifier.system, identifier.value, and NDHM telecom and address when present.atrius-practitionerrole → QICorePractitionerRole)atrius-practitionerrole → QICorePractitionerRole.identifier, active, period, practitioner, organization, code (CQL primary code path), specialty, telecom, and location.practitioner, organization, and each location → projected QI-Core Practitioner, Organization, and Location.active and period: required 1..1 on QI-Core; Atrius storage enforces the same cardinality (not must-support).atrius-organization → QICoreOrganization)atrius-organization → QICoreOrganization.active and name.identifier, type (CQL primary code path), telecom, address, and partOf.partOf → projected QI-Core Organization when the parent organization is in the bundle.active = true on the projected copy when absent but required by QI-Core validation.atrius-location → QICoreLocation)atrius-location → QICoreLocation (single QI-Core profile; no subtypes).managingOrganization → projected QI-Core Organization.partOf → projected QI-Core Location when the parent location is in the bundle.name, type (CQL primary code path), telecom, address, and identifier for facility identification and measure logic.status = active on the projected copy when absent or required by QI-Core/US Core validation (QI-Core fixes active at evaluation).Notes:
atrius-relatedperson → QICoreRelatedPerson)atrius-relatedperson → QICoreRelatedPerson.active and patient.relationship (CQL primary code path), name, and telecom.patient → projected QI-Core Patient.active = true on the projected copy when absent but required by QI-Core validation.atrius-coverage → QICoreCoverage)See Coverage mapping below.
atrius-coverage → QICoreCoverage.beneficiary, policyHolder, subscriber, and payor to projected QI-Core actor targets.status, type (CQL primary code path), relationship, period, class, and identifiers for payer and eligibility logic.payor: QI-Core/US Core expect exactly one payor. Storage may list multiple NDHM payors; project a single primary payor at evaluation time when the measure requires QI-Core cardinality.identifier / subscriberId: US Core requires member id in identifier (Member ID type) or subscriberId. Retain India-specific identifiers in storage; ensure one of these is present on the projected copy when required for validation.type binding: QI-Core uses US PHDSC payer-type value set extensibly. India payer schemes (PM-JAY, private insurer, etc.) stay in storage; map or supplement codings only when needed for measure value set membership.Notes:
insurance.coverage.Condition resources use deterministic category selection to choose the QI-Core Condition subtype:
Condition.category contains encounter-diagnosis, map to QICoreConditionEncounterDiagnosis.Condition.category contains problem-list-item, map to QICoreConditionProblemsHealthConcerns.Condition.encounter is present, map to QICoreConditionEncounterDiagnosis.QICoreConditionProblemsHealthConcerns.Notes:
atrius-condition-encounter-diagnosis requires encounter and fixes category to encounter-diagnosis.atrius-condition-problems-health-concerns fixes category to problem-list-item.subject → projected QI-Core Patient; rewrite encounter → projected QI-Core Encounter when present.condition-assertedDate (http://hl7.org/fhir/StructureDefinition/condition-assertedDate) for CQL timing logic.atrius-allergyintolerance → QICoreAllergyIntolerance.patient → projected QI-Core Patient.code, onset/recurrence timing, and reaction.manifestation for value set and timing logic.atrius-adverseevent → QICoreAdverseEvent.subject → projected QI-Core Patient.encounter → projected QI-Core Encounter when present.resultingCondition using the Condition category rules above (typically QICoreConditionEncounterDiagnosis or QICoreConditionProblemsHealthConcerns).atrius-bodystructure → QICoreBodyStructure.patient → projected QI-Core Patient.active, location, and locationQualifier for anatomy-related measure logic.Implantable vs non-implantable is not a separate FHIR resource type. Both QI-Core Device and US Core Implantable Device are profiles on the same R4 Device resource. QI-Core lists both on Communication sender/recipient because US eCQM and USCDI logic often targets implantable UDI data, while general device measures use QICoreDevice for wheelchairs, pumps, monitors, and similar non-implantable equipment.
Atrius storage uses a single profile, atrius-device. The runtime mapper chooses the evaluation profile tag on the projected copy:
meta.profile to QICoreDevice.udiCarrier present, or other implantable indicators required by the measure bundle), set meta.profile to US Core Implantable Device instead of (or in addition to) QICoreDevice, preserving type, udiCarrier, manufacture/expiration/lot/serial/distinctIdentifier, and related fields.Projection steps:
patient → projected QI-Core Patient.type (CQL primary code path), status, identifier, and implantable fields when present.sender or recipient, project the referenced Device first, then rewrite the Communication reference to the same Device/{id}.Notes:
DeviceRequest resources use profile and negation signals to choose the QI-Core DeviceRequest subtype (same pattern as Condition category selection):
meta.profile includes atrius-devicerequest-prohibited, or modifierExtension http://hl7.org/fhir/5.0/StructureDefinition/extension-DeviceRequest.doNotPerform = true, map to QICoreDeviceProhibited.meta.profile includes atrius-devicerequest-requested, or the doNotPerform modifier is explicitly false, map to QICoreDeviceRequested.QICoreDeviceRequest.Projection steps (all branches):
subject → projected QI-Core Patient.encounter → projected QI-Core Encounter when present.codeReference → projected Device using the Device rules above.status, intent, authoredOn, and code codings or code.codeOptions extension (drq-3: coding xor codeOptions when not using codeReference).requester, performer, reasonReference, and insurance to projected Atrius actor targets.Claim.prescription when it references any Atrius DeviceRequest profile.Notes:
atrius-devicerequest is the general storage profile; doNotPerform is not fixed on storage.atrius-devicerequest-requested fixes doNotPerform = false when the modifier is present (positive request / existence CQL).atrius-devicerequest-prohibited fixes doNotPerform = true, requires authoredOn and code[x], and requires reasonCode for negation reason logic. QI-Core STU6 named this pattern Device Not Requested; STU7 renamed the evaluation target to DeviceProhibited — the mapper always projects to QICoreDeviceProhibited.atrius-deviceusestatement → QICoreDeviceUseStatement.subject → projected QI-Core Patient.device → projected Device using the Device rules above (apply QICoreDevice vs US Core Implantable Device profile selection on the referenced Device resource before rewriting this reference).status, timing[x], recordedOn, and bodySite for use and timing logic.source and reasonReference to projected Atrius actor targets when present.Notes:
device.type; project the referenced Device before evaluating value set membership on the use statement.atrius-medication → QICoreMedication (single QI-Core profile; no subtypes).manufacturer → projected QI-Core Organization when present.code (CQL primary code path), form, identifier, and batch for medication identification logic.medicationReference. NDHM MedicationRequest and MedicationStatement fix medication[x] to CodeableConcept only; Administration and Dispense allow medicationReference on storage.Notes:
Medication requires coded product details and supports batch/lot metadata for India pharmacy exchange.MedicationRequest resources use profile and doNotPerform to choose the QI-Core MedicationRequest subtype (same pattern as DeviceRequest):
meta.profile includes atrius-medicationrequest-prohibited, or MedicationRequest.doNotPerform = true, map to QICoreMedicationProhibited.meta.profile includes atrius-medicationrequest-requested, or doNotPerform is explicitly false, map to QICoreMedicationRequested.QICoreMedicationRequest.Projection steps (all branches):
subject → projected QI-Core Patient.encounter → projected QI-Core Encounter when present.status, intent, authoredOn, medicationCodeableConcept codings or medication.codeOptions extension, and NDHM dosageInstruction / substitution metadata on the storage copy.requester, performer, reasonReference, basedOn, insurance, and priorPrescription to projected Atrius targets using the corresponding profile rules.Claim.prescription when it references any Atrius MedicationRequest profile.Notes:
atrius-medicationrequest is the general storage profile; doNotPerform is not fixed on storage.atrius-medicationrequest-requested fixes doNotPerform = false for positive request / existence CQL.atrius-medicationrequest-prohibited fixes doNotPerform = true, requires authoredOn, medication[x], and reasonCode for negation reason logic.authoredOn, requester, dosageInstruction, and substitution.allowed[x] for India prescribing exchange; retain on storage even when QI-Core treats some elements as optional.medication[x] to CodeableConcept only (no medicationReference on storage); use coded products or medication.codeOptions for value-set-driven prescribing.prescription.atrius-medicationstatement → QICoreMedicationStatement (single QI-Core profile; no subtypes).subject → projected QI-Core Patient.context → projected QI-Core Encounter when present.informationSource, basedOn, reasonReference, and partOf using the corresponding Atrius profile rules.status, medicationCodeableConcept (CQL primary code path), effective[x], dateAsserted, reasonCode, and dosage for medication use and timing logic.Notes:
MedicationStatement parents R4 with India-specific dosage and reason metadata; QI-Core restricts subject to Patient — Atrius storage wires subject to AtriusPatient.medication[x] to CodeableConcept only on storage (same as MedicationRequest).basedOn.partOf → projected MedicationAdministration or MedicationDispense when references target those resources.MedicationAdministration resources use profile and status to choose the QI-Core MedicationAdministration subtype (same pattern as Immunization and Communication):
meta.profile includes atrius-medicationadministration-not-done, or MedicationAdministration.status = not-done, map to QICoreMedicationAdministrationNotDone.status is in-progress, on-hold, completed, or stopped, map to QICoreMedicationAdministrationDone.QICoreMedicationAdministration.Projection steps (all branches):
subject → projected QI-Core Patient.context → projected QI-Core Encounter when present.medicationReference → projected QI-Core Medication when present (project Medication first).request → projected QI-Core MedicationRequest using MedicationRequest subtype rules.performer.actor, reasonReference, partOf, and device using the corresponding Atrius profile rules.status, statusReason, medication[x] (CQL primary code path), effective[x], and dosage for administration timing and dose logic.Notes:
atrius-medicationadministration is the general storage profile; positive administration statuses are not fixed on storage.atrius-medicationadministration-not-done fixes status = not-done and requires statusReason for negation reason logic.MedicationDispense resources use profile and status to choose the QI-Core MedicationDispense subtype:
meta.profile includes atrius-medicationdispense-declined, or MedicationDispense.status = declined, map to QICoreMedicationDispenseDeclined.status is preparation, in-progress, on-hold, completed, or stopped, map to QICoreMedicationDispenseDone.QICoreMedicationDispense.Projection steps (all branches):
subject → projected QI-Core Patient.context → projected QI-Core Encounter when present.medicationReference → projected QI-Core Medication when present.authorizingPrescription reference using MedicationRequest subtype rules.performer.actor, location, and destination to projected Atrius actor targets.status, statusReason, medication[x] (CQL primary code path), type, quantity, daysSupply, whenPrepared, whenHandedOver, and dosageInstruction for dispense timing and supply logic.extension-MedicationDispense.recorded on the projected copy when required by QI-Core MedicationDispenseDeclined validation.Notes:
atrius-medicationdispense is the general storage profile; positive dispense statuses are not fixed on storage.atrius-medicationdispense-declined fixes status = declined and requires statusReason for negation reason logic.atrius-nutritionorder → QICoreNutritionOrder (single QI-Core profile; no subtypes).patient → projected QI-Core Patient.encounter → projected QI-Core Encounter when present.orderer → projected QI-Core Practitioner or PractitionerRole.allergyIntolerance → projected QI-Core AllergyIntolerance when present.status, intent, dateTime, and diet/supplement/enteral formula elements (oralDiet.type, supplement.type, enteralFormula.baseFormulaType) for nutrition order logic.Notes:
patient (not subject) as the anchor reference.Procedure resources use profile and status to choose the QI-Core Procedure subtype:
meta.profile includes atrius-procedure-not-done, or Procedure.status = not-done, map to QICoreProcedureNotDone.QICoreProcedure.Projection steps (all branches):
subject and encounter → projected QI-Core Patient and Encounter.basedOn, partOf, performer, and reasonReference using the corresponding Atrius profile rules.status, statusReason, category, code (CQL primary code path), performed[x], reasonCode, bodySite, and NDHM outcome/usedCode metadata on the storage copy.Notes:
atrius-procedure is the general storage profile; positive procedure statuses are not fixed on storage.atrius-procedure-not-done fixes status = not-done, requires statusReason and code, and supports code.codeOptions for value-set-driven negation.Procedure parents R4 with India-specific performer and body-site metadata.ServiceRequest resources use profile and doNotPerform to choose the QI-Core ServiceRequest subtype (same pattern as MedicationRequest and DeviceRequest):
meta.profile includes atrius-servicerequest-not-requested, or ServiceRequest.doNotPerform = true, map to QICoreServiceNotRequested.QICoreServiceRequest.Projection steps (all branches):
subject and encounter → projected QI-Core Patient and Encounter.requester, performer, basedOn, reasonReference, and specimen using the corresponding Atrius profile rules.status, intent, code codings or code.codeOptions / code.notDoneValueSet extension, and NDHM text on the storage copy.Claim.referral when it references any Atrius ServiceRequest profile.Notes:
atrius-servicerequest-not-requested fixes doNotPerform = true, requires authoredOn, code, and reasonCode for negation reason logic. Inject the QI reasonRefused extension (qicore-doNotPerformReason) and map code.codeOptions to code.notDoneValueSet on the projected copy when required by measure validation.requester 1..1 for India exchange.referral or specimen.atrius-questionnaireresponse → QICoreQuestionnaireResponse (single QI-Core profile; no subtypes).subject and encounter → projected QI-Core Patient and Encounter.author, basedOn, and partOf using the corresponding Atrius profile rules.status, questionnaire (CQL primary code path), authored, and item answer content for survey logic.Notes:
subject to Patient; Atrius storage wires subject to AtriusPatient.atrius-specimen → US Core Specimen (no separate QI-Core Specimen profile; US Core is the evaluation target).subject → projected QI-Core Patient when present.type and receivedTime for specimen identification and timing logic.Notes:
Specimen is minimal (type and receivedTime must-support); Atrius adds Patient subject wiring for US Core alignment.atrius-substance → QICoreSubstance (single QI-Core profile; no subtypes).ingredient.substanceReference → projected QI-Core Substance when present (project parent substances before child ingredient references).code (CQL primary code path), status, instance, and ingredient composition metadata.Notes:
Task resources use profile and status to choose the QI-Core Task subtype:
meta.profile includes atrius-task-rejected, or Task.status = rejected, map to QICoreTaskRejected.status indicates completion or in-progress fulfillment, map to QICoreTaskDone when measure logic requires the Done profile.QICoreTask.Projection steps (all branches):
for and encounter → projected QI-Core Patient and Encounter.requester, owner, and partOf using the corresponding Atrius profile rules.status, statusReason, intent, priority, code (CQL primary code path), executionPeriod, and NDHM reasonCode on the storage copy.Notes:
atrius-task-rejected fixes status = rejected, requires statusReason and code, and supports code.codeOptions for value-set-driven negation.Task is minimal (only reasonCode must-support); Atrius adds QI QI-Element gaps for measure evaluation.atrius-imagingstudy → QICoreImagingStudy (single QI-Core profile; no subtypes).subject and encounter → projected QI-Core Patient and Encounter.basedOn → projected QI-Core CarePlan, ServiceRequest, or ServiceNotRequested using the ServiceRequest subtype rules.referrer, interpreter, and each series.performer.actor to the projected QI-Core target matching the reference type (Patient, Practitioner, PractitionerRole, Organization, CareTeam, Device, RelatedPerson).reasonReference using Condition, DiagnosticReport, and Observation subtype rules when references target those resources.location → projected QI-Core Location.status, modality, started, procedureReference, procedureCode (CQL primary code path), reasonCode, numberOfSeries, numberOfInstances, and NDHM series metadata (uid, modality, instance) for DICOM and timing logic.Notes:
ImagingStudy for India radiology exchange; Atrius adds QI QI-Element gaps (encounter, started, basedOn, procedureReference) and actor reference wiring.subject to Patient; NDHM also allows Device and Group — Atrius storage wires subject to AtriusPatient.imagingStudy.NDHM storage splits lab and imaging profiles; QI-Core evaluation splits lab and note. There is no QI-Core imaging subtype — radiology and other NDHM imaging reports project to QICoreDiagnosticReportNote.
meta.profile includes atrius-diagnosticreport-lab, or DiagnosticReport.category contains http://terminology.hl7.org/CodeSystem/v2-0074 / LAB, map to QICoreDiagnosticReportLab.meta.profile includes atrius-diagnosticreport-note, or the resource was stored as NDHM DiagnosticReportImaging, map to QICoreDiagnosticReportNote.QICoreDiagnosticReportNote.QICoreDiagnosticReportLab.Projection steps (both branches):
subject and encounter → projected QI-Core Patient and Encounter.performer and resultsInterpreter → projected Atrius actor targets.basedOn → projected QI-Core targets using CarePlan, ServiceRequest, and other Atrius request profile rules.result reference using Observation subtype rules.imagingStudy reference → projected QI-Core ImagingStudy when ImagingStudy resources are included in the bundle.status, code, effective[x], issued, conclusion, and NDHM specimen (lab) or media / imagingStudy (note/imaging) on the storage copy.Notes:
atrius-diagnosticreport-lab parents NDHM DiagnosticReportLab. NDHM fixes category.coding.system to SNOMED (conflicts with QI LAB slice) — inject http://terminology.hl7.org/CodeSystem/v2-0074 / LAB on the projected copy when absent.atrius-diagnosticreport-note parents NDHM DiagnosticReportImaging for India radiology/media exchange; evaluation uses QICoreDiagnosticReportNote. Inject a US Core diagnostic report category coding on the projected copy when absent and required by measure validation.DiagnosticReportRecord is a Composition document wrapper, not a DiagnosticReport resource — out of scope for these profiles.result 1..* on storage (NDHM); note/imaging may carry media 1..* instead.NDHM storage uses seven observation profiles (lab/panel plus six clinical subtypes). QI-Core evaluation uses six observation profiles (Simple, Cancelled, NonPatient, Lab, Clinical Result, Screening Assessment). US Core adds many code-specific vital sign and social-history profiles that QI-Core inherits directly. Atrius does not author separate storage profiles for each US Core vital sign — the runtime mapper selects the US Core or QI target at evaluation time from code, category, status, and subject.
Apply in order (first match wins unless noted):
status = cancelled (negation intent) → QICoreObservationCancelled. Preserve or require notDoneReason and code / notDoneValueSet on the projected copy when measure logic requires negation semantics.subject is Device or Location (not Patient) on an R4 Observation outside NDHM patient-only storage → QICoreNonPatientObservation. Apply Device profile selection on device subjects before rewriting references. Atrius NDHM observation storage profiles require subject = Patient.meta.profile is atrius-observation or Observation.category contains laboratory → QICoreObservationLab. Inject the US Core laboratory category slice (http://terminology.hl7.org/CodeSystem/observation-category / laboratory) when absent and required by validation.Observation.category contains imaging, procedure, or activity (clinical result) → QICoreObservationClinicalResult. Inject the US Core clinical-result category slice when absent.meta.profile is atrius-observation-lifestyle, atrius-observation-general-assessment, or atrius-observation-women-health, or category contains survey or social-history → QICoreObservationScreeningAssessment. Inject the US Core survey category slice when absent.Observation.code matches a US Core vital sign, blood pressure, BMI, smoking status, pregnancy, or related pattern, project to that US Core profile URL (for example us-core-heart-rate, us-core-blood-pressure, us-core-bmi) instead of QICoreSimpleObservation. This mirrors the Device → Implantable Device selection pattern.QICoreSimpleObservation (includes NDHM vital signs, body measurement, physical activity, and uncategorized clinical observations).subject and encounter → projected QI-Core Patient, Device, Location, or Encounter matching the reference type.performer, basedOn, partOf, hasMember, and derivedFrom using the corresponding Atrius profile rules.status, category, code (CQL primary code path), effective[x], value[x], dataAbsentReason, interpretation, issued, and referenceRange for result and timing logic.| Atrius storage profile | Typical QI / US Core evaluation target |
|---|---|
atrius-observation |
QICoreObservationLab |
atrius-observation-vital-signs |
US Core vital sign profile by code, else QICoreSimpleObservation |
atrius-observation-body-measurement |
US Core BMI/height/weight by code, else QICoreSimpleObservation |
atrius-observation-physical-activity |
QICoreSimpleObservation or Screening Assessment by category |
atrius-observation-lifestyle |
QICoreObservationScreeningAssessment |
atrius-observation-general-assessment |
QICoreObservationScreeningAssessment |
atrius-observation-women-health |
QICoreObservationScreeningAssessment or QICoreSimpleObservation |
Notes:
ObservationCancelled; positive retrieves use the specific QI or US Core profile type, not a generic Observation type.Immunization resources use status and profile selection to choose the QI-Core Immunization subtype:
meta.profile includes atrius-immunization-not-done, or Immunization.status = not-done, map to QICoreImmunizationNotDone.meta.profile includes atrius-immunization-done, or Immunization.status = completed, map to QICoreImmunizationDone.QICoreImmunization (base profile for entered-in-error or other allowed statuses).Projection steps (all branches):
patient and encounter → projected QI-Core Patient and Encounter.manufacturer, performer.actor, and protocolApplied.authority → projected Atrius actor targets.reasonReference using Condition and DiagnosticReport subtype rules when references target those resources; rewrite Observation references using Observation subtype rules.location → projected QI-Core Location.status, statusReason, vaccineCode (CQL primary code path), vaccineCode.codeOptions, occurrence[x], recorded, and NDHM administration metadata (site, route, lotNumber, protocolApplied, etc.).Notes:
atrius-immunization is the NDHM-aligned base profile for general storage; status is not fixed on storage.atrius-immunization-done fixes status = completed for positive immunization statements.atrius-immunization-not-done fixes status = not-done and requires statusReason 1..1 for negation reason logic.vaccineCode.coding for India exchange; QI-Core allows vaccineCode.codeOptions alone for negation retrieves (qim-1) — the mapper may supply codeOptions on the projected copy when measure logic requires value-set-level negation without a specific CVX code.ImmunizationDone and ImmunizationNotDone profile types, not the base Immunization profile, for positive and negation statements.atrius-immunizationevaluation → QICoreImmunizationEvaluation (single QI-Core profile; no subtypes).patient → projected QI-Core Patient.authority → projected QI-Core Organization.immunizationEvent using Immunization subtype rules when the target is an Atrius Immunization resource.identifier, status, date, targetDisease (CQL primary code path), doseStatus, and doseStatusReason for evaluation and validity logic.Notes:
ImmunizationRecommendation.recommendation.supportingImmunization allows R4 ImmunizationEvaluation alongside NDHM Immunization; Atrius wires both to Atrius profiles.atrius-immunizationrecommendation → QICoreImmunizationRecommendation (single QI-Core profile; no subtypes).patient → projected QI-Core Patient.authority → projected QI-Core Organization.recommendation.supportingImmunization reference using Immunization subtype rules or straight ImmunizationEvaluation swap when the target is an Atrius ImmunizationEvaluation resource.recommendation.supportingPatientInformation reference to projected QI-Core AllergyIntolerance or Observation using the Observation subtype rules.date, recommendation entries, recommendation.vaccineCode (CQL primary code path), recommendation.forecastStatus, recommendation.doseNumber[x], and NDHM forecast metadata (targetDisease, contraindicatedVaccineCode, forecastReason, dateCriterion) on the storage copy.Notes:
ImmunizationRecommendation for India immunization forecasting exchange; Atrius adds QI patient 1..1, recommendation 1..*, and recommendation.doseNumber[x] gaps plus actor reference wiring.recommendation.vaccineCode or recommendation.targetDisease; NDHM already requires coded details on both when present.CarePlan resources are projected using profile and category selection:
meta.profile includes atrius-careplan-assess-plan, or CarePlan.category contains assess-plan, map to QICoreCarePlan.atrius-careplan, map to QICoreCarePlan and inject an assess-plan category entry when absent.Notes:
atrius-careplan remains the general NDHM-aligned storage profile.atrius-careplan-assess-plan parents R4 directly because NDHM CarePlan fixes category.coding.system to SNOMED, which conflicts with US Core assess-plan.subject → projected QI-Core Patient.goal reference → projected QI-Core Goal when Goal resources are included in the bundle.atrius-careteam → QICoreCareTeam.subject → projected QI-Core Patient.encounter → projected QI-Core Encounter when present.participant.member to the projected QI-Core target matching the member type (Patient, Practitioner, PractitionerRole, Organization, CareTeam, RelatedPerson).participant.role is present (required 1..1 on both Atrius and QI-Core profiles).Communication resources use status and profile selection to choose the QI-Core Communication subtype:
meta.profile includes atrius-communication-not-done, or Communication.status = not-done, map to QICoreCommunicationNotDone.Communication.status is one of preparation, in-progress, on-hold, stopped, or completed, map to QICoreCommunicationDone.QICoreCommunication.Notes:
atrius-communication is the NDHM-aligned base profile for general storage; status is not fixed on storage.atrius-communication-not-done fixes status = not-done, requires statusReason 1..1, and requires event-recorded (http://hl7.org/fhir/StructureDefinition/event-recorded).subject, encounter, sender, and recipient to projected QI-Core actor targets. When sender or recipient is a Device, apply Device profile selection (QICoreDevice vs US Core Implantable Device) before rewriting the Communication reference.topic codings or topic.codeOptions extension (com-1: one or the other) for measure topic matching.sent, received, and payload.content[x] for timing and content logic.statusReason uses QI-Core negation reason semantics when required by the measure.atrius-communicationrequest → QICoreCommunicationRequest.subject, encounter, requester, sender, and recipient to projected QI-Core actor targets. When sender or recipient is a Device, apply Device profile selection before rewriting the reference.status, category (primary code path for CQL retrieve), and doNotPerform for request and negation logic.replaces to projected QI-Core CommunicationRequest when present.reasonReference using Condition category rules when the reference targets a Condition.Notes:
communicationRequest references should point to projected QI-Core CommunicationRequest after the request resource is mapped.Claims are the most sensitive financial resource because NDHM storage and QI-Core evaluation expectations diverge.
atrius-claim → QICoreClaim.status: QI-Core fixes Claim.status to active. Storage may contain other statuses (cancelled, entered-in-error, etc.). Set status = active on the projected copy when the measure logic expects an active claim; otherwise exclude the claim from the evaluation bundle.patient, provider, enterer, insurer, payee.party, careTeam.provider: rewrite to projected QI-Core actor targets.insurance.coverage: rewrite to projected QI-Core Coverage (project Coverage before Claim).insurance.claimResponse: rewrite to projected QI-Core ClaimResponse when present (project ClaimResponse after Claim).item.encounter: rewrite each entry to projected QI-Core Encounter.diagnosis.diagnosisReference: project the referenced Condition using the Condition category rules. QI-Core expects QICoreConditionEncounterDiagnosis for reference-typed diagnoses; prefer the encounter-diagnosis branch when ambiguous.diagnosis.diagnosisCodeableConcept: pass through codings used by value set membership.procedure.procedureReference: rewrite using Procedure subtype rules (QICoreProcedureNotDone or QICoreProcedure).prescription: rewrite DeviceRequest references using the DeviceRequest subtype rules above (QICoreDeviceRequested, QICoreDeviceProhibited, or QICoreDeviceRequest). Rewrite MedicationRequest references using the MedicationRequest subtype rules (QICoreMedicationRequested, QICoreMedicationProhibited, or QICoreMedicationRequest).referral: rewrite using ServiceRequest subtype rules (QICoreServiceNotRequested or QICoreServiceRequest).facility: rewrite to projected QI-Core Location.Retain in HFS; do not require for QI-Core validation unless measure logic references them:
supportingInfo and NDHM supporting-info extensionsitem / item.detail category and product codingsrelated.claim and insurance.claimResponse chains (project linked Claim/ClaimResponse pairs together)ClaimResponse adjudication resources follow the same storage-vs-evaluation split as Claim.
atrius-claimresponse → QICoreClaimResponse.status: QI-Core fixes ClaimResponse.status to active. Set status = active on the projected copy when required by measure logic; otherwise exclude non-active responses from the evaluation bundle.use: QI-Core fixes ClaimResponse.use to preauthorization. Storage may record claim, preauthorization, or predetermination per NDHM exchange. Set use = preauthorization on the projected copy when the evaluator expects QI-Core ClaimResponse semantics.patient, insurer, requestor: rewrite to projected QI-Core actor targets.request: rewrite to projected QI-Core Claim (project Claim before ClaimResponse).insurance.coverage: rewrite to projected QI-Core Coverage.item.adjudication.category: QI-Core requires pattern http://terminology.hl7.org/CodeSystem/adjudication / submitted. India adjudication records may use other category codes in storage; inject or normalize to submitted on the projected copy when required for QI-Core validation.item.adjudication.amount: preserve monetary amounts used by measure logic.item.detail.detailSequence: preserve sequence linkage to submitted claim line details.communicationRequest: rewrite to projected QI-Core CommunicationRequest.Retain in HFS unless measure logic references them:
addItem product/service codings and nested detail structuresoutcome, disposition, total, and error as returned by NDHM payersRuntime projection must preserve or derive fields used by quality logic:
clinicalStatus, verificationStatus (Condition, AllergyIntolerance).code and codings needed for VSAC/value set membership.condition-assertedDate when available.onset[x], abatement[x], recordedDate, billablePeriod, period, and analogous timing elements per resource.Claim.created, Claim.billablePeriod, ClaimResponse.created, diagnosis/procedure sequences linked to items, adjudication amounts on ClaimResponse items.When a new clinical, financial, or actor profile is added to the IG, update all of the following so mapping stays traceable:
| Step | What to update |
|---|---|
| 1. IG profile | Add the FSH profile and rebuild SUSHI. |
| 2. This page | Add a row to the profile table and a resource mapping section (or extend an existing one). |
| 3. Reference constraints | Update any Atrius profile that should reference the new profile instead of NDHM/R4 directly. |
| 4. Mapper manifest | Add the Atrius → QI-Core URL pair to the HFS profile manifest consumed by the runtime mapper. |
| 5. Mapper implementation | Add projection logic and bundle ordering for the new type. |
| 6. Tests | Add storage → evaluation fixture pairs for the new resource. |
All profiles listed in the v0.1 inventory table above are implemented. When adding new Atrius profiles beyond v0.1, follow the checklist in the previous section and search the IG for only Reference( constraints that should target the new profile.
Reference-constraint rule of thumb: whenever a new Atrius profile replaces an NDHM or R4 reference target, search the IG for only Reference( rules pointing at the old target and narrow them to the new Atrius profile, then mirror the same rule in the mapper’s reference rewrite table.
The following example illustrates how an Atrius encounter diagnosis is projected to a QI-Core-compatible shape for evaluation.
{
"resourceType": "Condition",
"meta": {
"profile": [
"https://atrius.in/fhir/r4/atrius-core/StructureDefinition/atrius-condition-encounter-diagnosis"
]
},
"clinicalStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
"code": "active"
}
]
},
"verificationStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
"code": "confirmed"
}
]
},
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-category",
"code": "encounter-diagnosis"
}
]
}
],
"code": {
"coding": [
{
"system": "http://hl7.org/fhir/sid/icd-10",
"code": "I10"
}
]
},
"subject": {
"reference": "Patient/p1"
},
"encounter": {
"reference": "Encounter/e1"
},
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/condition-assertedDate",
"valueDateTime": "2026-05-24"
}
],
"onsetDateTime": "2026-05-20",
"recordedDate": "2026-05-24"
}
{
"resourceType": "Condition",
"meta": {
"profile": [
"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-condition-encounter-diagnosis"
]
},
"clinicalStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
"code": "active"
}
]
},
"verificationStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
"code": "confirmed"
}
]
},
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-category",
"code": "encounter-diagnosis"
}
]
}
],
"code": {
"coding": [
{
"system": "http://hl7.org/fhir/sid/icd-10",
"code": "I10"
}
]
},
"subject": {
"reference": "Patient/p1"
},
"encounter": {
"reference": "Encounter/e1"
},
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/condition-assertedDate",
"valueDateTime": "2026-05-24"
}
],
"onsetDateTime": "2026-05-20",
"recordedDate": "2026-05-24"
}
The following example illustrates the PHC branch when no encounter is present and category is problem-list-item.
{
"resourceType": "Condition",
"meta": {
"profile": [
"https://atrius.in/fhir/r4/atrius-core/StructureDefinition/atrius-condition-problems-health-concerns"
]
},
"clinicalStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
"code": "active"
}
]
},
"verificationStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
"code": "confirmed"
}
]
},
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-category",
"code": "problem-list-item"
}
]
}
],
"code": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "38341003"
}
]
},
"subject": {
"reference": "Patient/p2"
},
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/condition-assertedDate",
"valueDateTime": "2026-05-18"
}
],
"onsetDateTime": "2026-05-15",
"recordedDate": "2026-05-18"
}
{
"resourceType": "Condition",
"meta": {
"profile": [
"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-condition-problems-health-concerns"
]
},
"clinicalStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
"code": "active"
}
]
},
"verificationStatus": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
"code": "confirmed"
}
]
},
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/condition-category",
"code": "problem-list-item"
}
]
}
],
"code": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "38341003"
}
]
},
"subject": {
"reference": "Patient/p2"
},
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/condition-assertedDate",
"valueDateTime": "2026-05-18"
}
],
"onsetDateTime": "2026-05-15",
"recordedDate": "2026-05-18"
}
$evaluate executions in CDS/measure services SHALL use QI-Core ELM and QI-Core model semantics.
Atrius profiles define the authoring and storage contract on HFS. Runtime projection is the compatibility layer that aligns stored Atrius resources with the QI-Core shapes expected by the evaluator.