Skip to content

CII to FHIR Mapping

Download YAML

CII_FHIR_Mapping:
  # Organization / Submitting Site (from mappingCii.md: "not expected to be provided by the EMR data feed" for these S-fields, maintained by CII App)
  S1_Submitting_Site_Identifier: "**from AppState**"
  S2_Submitting_Site_Name: "**from AppState**"
  S3_Submitting_Site_Identifier_Type: "**from AppState**"

  # Location / Service Delivery Location
  C1_Service_Delivery_Location_Identifier: "**supplied by CII configuration**"
  C2_Service_Delivery_Location_Name: Location.name
  C3_Service_Delivery_Location_Type_Of_Service: "**Not Required**"
  C4_Service_Delivery_Postal_Code: Location.address.postalCode
  C5_Service_Delivery_Location_Identifier_Type: "**Hardcoded**"

  # Encounter
  D01_Encounter_Identifier: Encounter.identifier.value
  D1_Encounter_Request_Date: Appointment.requestedPeriod.start
  D2_Client_Encounter_Reason: Encounter.reasonCode.text
  D3_Encounter_Date: Encounter.period.start # Or Encounter.period if full duration is needed
  D4_Encounter_Mode: Encounter.class.code # mappingCii.md says .mode, but FHIR Encounter uses .class
  D5_Encounter_Payment_Source: "**Not Required**"
  D7_Encounter_Billing_Code: "**Not Required**"
  D02_Encounter_Masking_Flag: "**UNMAPPED**" # Not supported for CII
  D03_Encounter_Status: Calculated based on document statuses and previous encounter submissions.
  D04_Encounter_Export_DateTime: Encounter.meta.lastUpdated # Maintained by MedPlum

  # Patient (Client)
  A1_Client_Identifier: Patient.identifier.value # (Specifically the JurisdictionalID slice value)
  A2_Client_Identifier_Type: Patient.identifier.system # (Derived from the Jurisdictional ID - with system URI from https://build.fhir.org/ig/HL7-Canada/ca-baseline/StructureDefinition-profile-patient.html#jurisdictional-health-number-jhn)
  A3_Client_Identifier_Assigning_Authority: Patient.identifier.system # (Derived from JurisdictionalID slice assigner)
  A01_Client_Last_Name: Patient.name.family
  A02_Client_Given_Name: Patient.name.given
  A4_Client_Date_Of_Birth: Patient.birthDate
  A5_Client_Administrative_Gender: Patient.gender
  A9_Client_Status_Code: Patient.active
  A11_Client_Rostered_Start_Date: "**from AppState**" # mappingCii.md: "Somehow from CPAR Polaris App? XXX"
  A11_Client_Rostered_Start_Date_Date_Precision: "**from AppState**" # Follows A11
  A12_Client_Rostered_End_Date: "**from AppState**" # mappingCii.md: "Somehow from CPAR Polaris App? XXX"
  A14_Client_Residence_Postal_Code: Patient.address.postalCode
  A03_Client_Masking_Flag: "**from AppState**" # mappingCii.md: "Stored in App State"
  A04_Client_Address_Masking_Flag: "**UNMAPPED**" # mappingCii.md: "Hard code N"

  # Provider (Practitioner)
  B1_Provider_Last_Name: Practitioner.name.family
  B2_Provider_First_Name: Practitioner.name.given
  B3_Provider_Middle_Name: Practitioner.name.given # FHIR often combines given names
  B4_Provider_Identifier: "**from AppState**" # mappingCii.md: "Stored in AppState"
  B5_Provider_Identifier_Type: "**from AppState**" # mappingCii.md: "Stored in AppState"
  B6_Provider_Identifier_Assigning_Authority: "**from AppState**" # mappingCii.md: "Stored in AppState"
  B7_Provider_Role: "**from AppState**" # mappingCii.md: "Stored in AppState"
  B8_Provider_Expertise: "**from AppState**" # mappingCii.md: "Stored in AppState"

  # PDF Documents
  PDF_Document_Type_Coding: "**from AppState**" # mappingCii.md: "XXX I assume that all of these fields map from App State."
  Document_Type_Description_Text: "**from AppState**" # Follows above
  Document_Type_Code: "**from AppState**" # Follows above
  Document_Type_Coding_System: "**from AppState**" # Follows above
  PDF_Submission_Type: "**from AppState**" # Follows above
  PDF_Document_Masking_Flag: "**from AppState**" # Follows above
  PDF_Document: DocumentReference.content.attachment.data # P1 from spreadsheet, represents the content

  # Observation Health Concern (Condition)
  E11_Observation_Health_Concern: Condition.code.text # Also mentioned: Appointment.reasonCode.text (primary is Condition)
  E12_Observation_Health_Concern_Date_Of_Onset: Condition.onsetDateTime # Or Condition.onsetPeriod.start
  E12_Observation_Health_Concern_Date_Of_Onset_Date_Precision: Condition.onsetDateTime # Precision inherent in dateTime, or derived if Period

  # Blood Pressure (Observation)
  E23_Observation_Systolic_Blood_Pressure: Observation[code.coding.code='8480-6'].valueQuantity.value 
  E24_Observation_Diastolic_Blood_Pressure: Observation[code.coding.code='8462-4'].valueQuantity.value 

  # Height (Observation)
  E28_Observation_Height: Observation[code.coding.code='8302-2'].valueQuantity.value
  E29_Observation_Height_Unit_Of_Measure: Observation[code.coding.code='8302-2'].valueQuantity.unit

  # Weight (Observation)
  E30_Observation_Weight: Observation[code.coding.code='29463-7'].valueQuantity.value # MD uses 3140-5, spreadsheet uses 29463-7 (Body weight)
  E31_Observation_Weight_Unit_Of_Measure: Observation[code.coding.code='29463-7'].valueQuantity.unit

  # Waist Circumference (Observation)
  E32_Observation_Waist_Circumference: Observation[code.coding.code='8280-0'].valueQuantity.value # MD uses 3141-1, spreadsheet uses 56072-2 (Waist Circumference at umbilicus by Tape measure)
  E33_Observation_Waist_Circumference_Unit_Of_Measure: Observation[code.coding.code='8280-0'].valueQuantity.unit

  # O2Sat (Observation)
  E35_Oxygen_Saturation: Observation[code.coding.code='2708-6'].valueQuantity.value # MD uses 3142-9, spreadsheet uses 2708-6 (Oxygen saturation in Arterial blood) or 59408-5 (Oxygen saturation in Arterial blood by Pulse oximetry)
  E36_Oxygen_Saturation_Unit_Of_Measure: Observation[code.coding.code='2708-6'].valueQuantity.unit

  # Pulse (Observation)
  E37_Pulse: Observation[code.coding.code='8867-4'].valueQuantity.value # MD uses 3143-7, spreadsheet uses 8867-4 (Heart rate)
  E38_Pulse_Unit_Of_Measure: Observation[code.coding.code='8867-4'].valueQuantity.unit

  # Head Circumference (Observation)
  E39_Head_Circumference: Observation[code.coding.code='9843-4'].valueQuantity.value # MD uses 3144-5, spreadsheet uses 8287-5 (Head Occipital-frontal circumference by Tape measure)
  E40_Head_Circumference_Unit_Of_Measure: Observation[code.coding.code='9843-4'].valueQuantity.unit

  # Clinical Assessment
  E34_Observation_Encounter_Clinical_Assessment: ClinicalImpression (if the EMR supports parsing SOAP notes) # Assuming similar mapping to E11 if it's a diagnosis/problem

  # Observation Masking
  E01_Observation_Masking_Flag: "**UNMAPPED**" # No FHIR mapping provided in MD for observation-level masking

  # Allergies (AllergyIntolerance)
  E18_Observation_Allergy_Agent: AllergyIntolerance.code.text

  # Intervention (Procedure)
  F1_Intervention_Treatment: Procedure.code.text
  F2_Intervention_Treatment_Date: Procedure.performedDateTime # Or Procedure.performedPeriod.start
  F2_Intervention_Treatment_Date_Date_Precision: Procedure.performedDateTime # Precision inherent

  # Lab Request (ServiceRequest)
  G1_Lab_Test_Name_Ordered: ServiceRequest.code.text
  G2_Lab_Test_Order_Date: ServiceRequest.authoredOn # mappingCii.md: requestedDateTime, but PolarisServiceRequest FSH uses authoredOn

  # Lab Report (Observation - manual entry)
  H1_Lab_Test_Performed_Date: Observation.effectiveDateTime # Or Observation.effectivePeriod.start
  H2_Lab_Test_Result_Name: Observation.code.text
  H3_Lab_Test_Result_Value: Observation.valueQuantity.value # Or other Observation.value[x]
  H4_Lab_Test_Result_Unit_Of_Measure: Observation.valueQuantity.unit

  # DI Request (ServiceRequest)
  I1_Diagnostic_Imaging_Test_Ordered: ServiceRequest.code.text
  I2_Diagnostic_Imaging_Test_Ordered_Date: ServiceRequest.authoredOn # mappingCii.md: requestedDateTime, but PolarisServiceRequest FSH uses authoredOn

  # DI Result (Observation - manual entry)
  J1_Di_Test_Performed_Date: Observation.effectiveDateTime # Or Observation.effectivePeriod.start

  # MedicationRequest
  M1_Medication_Prescribed_Name: MedicationRequest.contained[Medication].code.text
  M2_Medication_Prescription_Date: MedicationRequest.authoredOn 
  M2a_Medication_Prescription_Date_Date_Precision: MedicationRequest.authoredOn # Precision inherent
  M3_Prescription_Expected_Completion_Date: MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.end
  M3a_Prescription_Expected_Completion_Date_Date_Precision: MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.end # Precision inherent
  M13_Medication_Start_Date: MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.start 
  M13a_Medication_Start_Date_Date_Precision: MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.start # Precision inherent
  M14_Medication_End_Date: MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.end 
  M14a_Medication_End_Date_Date_Precision: MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.end # Precision inherent
  M5_Medication_Strength: MedicationRequest.contained[Medication].ingredient.strength.numerator.value
  M6_Medication_Strength_Unit_Of_Measure: MedicationRequest.contained[Medication].ingredient.strength.numerator.unit
  M7_Medication_Dosage: MedicationRequest.dosageInstruction.doseAndRate.doseQuantity.value # If distinct from strength, or other dosage aspects
  M8_Medication_Dosage_Unit_Of_Measure: MedicationRequest.dosageInstruction.doseAndRate.doseQuantity.unit
  M9_Medication_Form: MedicationRequest.contained[Medication].form.text # Or derive from dosageInstruction
  M10_Medication_Frequency: MedicationRequest.dosageInstruction.timing.code.text # Or other parts of timing
  M11_Medication_Route: MedicationRequest.dosageInstruction.route.text
  M12_Medication_Number_Of_Repeat_Refills: MedicationRequest.dispenseRequest.numberOfRepeatsAllowed
  M91_Supply_Duration: MedicationRequest.dispenseRequest.expectedSupplyDuration.value
  M92_Supply_Duration_Unit_Code: MedicationRequest.dispenseRequest.expectedSupplyDuration.unit

  # Dispensed Medication (MedicationDispense)
  N1_Medication_Dispensed: MedicationDispense.medicationCodeableConcept.text
  N2_Medication_Dispensed_Date: MedicationDispense.whenHandedOver

  # Referral (ServiceRequest)
  K1_Referral_Service: ServiceRequest.code.text
  K2_Referral_Requested_Date: ServiceRequest.authoredOn # mappingCii.md: requestedDateTime, PolarisServiceRequest FSH uses authoredOn
  K2_Referral_Requested_Date_Date_Precision: ServiceRequest.authoredOn # Precision inherent
  L1_Referral_Occurred_Date: ServiceRequest.occurrenceDateTime # Or ServiceRequest.occurrencePeriod.start (mappingCii.md: performedDateTime, not on SR)

  # Immunization
  O1_Vaccine_Administered_Name: Immunization.vaccineCode.text
  O2_Vaccine_Administered_Date: Immunization.occurrenceDateTime
  O2_Vaccine_Administered_Date_Date_Precision: Immunization.occurrenceDateTime # Precision inherent
  O3_Vaccine_Administered_Lot_Number: Immunization.lotNumber