mappingVersion: 2

source:
  profile: csv

target:
  model: beacon
  schemaVersion: '2.0.0'

project:
  id: CSV_src_test
  version: test-0.1
  description: Mapping file for a CSV with generic clinical data

defaults:
  ontology: ncit

records:
  visitId:
    sourceField: VisitOccurrenceId
  baseline:
    strategy: firstNonNull
    sourceFields: [Sex, Ethnicity, TobaccoUse, AgeAtTobaccoExposure, AlcoholUse, AgeAtAlcoholExposure, Disease_1, Disease_2, Disease_3, PhenotypicFeature_1, PhenotypicFeature_2]

beacon:
  individuals:
    id:
      sourceFields: [PatientId, EventName]
      primaryKey: PatientId
      separator: ':'
      missingValue: NA

    sex:
      sourceField: Sex
      query: { from: value }

    ethnicity:
      sourceField: Ethnicity
      query:
        from: value
        aliases:
          Caucasian: White
          Hispanic: Hispanic or Latino

    diseases:
      defaults:
        diseaseCode:
          query:
            from: value
            aliases: { Ashtma: Ashtma, Diabetes: Diabetes Mellitus }
      rules:
        - { sourceField: Disease_1, when: { nonEmpty: true } }
        - { sourceField: Disease_2, when: { nonEmpty: true } }
        - { sourceField: Disease_3, when: { nonEmpty: true } }

    exposures:
      defaults:
        unit: { query: { from: value } }
      rules:
        - sourceField: AlcoholUse
          when: { notValues: ['No', 'False'] }
          exposureCode: { query: Alcohol }
          ageAtExposure: { sourceField: AgeAtAlcoholExposure }
        - sourceField: TobaccoUse
          when: { notValues: ['No', 'False'] }
          exposureCode: { query: Tobacco }
          ageAtExposure:
            sourceField: AgeAtTobaccoExposure

    info:
      sourceFields: []

    measures:
      defaults:
        procedure:
          procedureCode: { query: Blood Test Result }
      rules:
        - sourceField: 'Hemoglobin (g/dL)'
          assayCode: { query: Hemoglobin Measurement }
          measurementValue:
            quantity:
              unit: { query: Gram per Deciliter }
              referenceRange: { low: 12.1, high: 17.2 }
        - sourceField: 'WBC (10^9/L)'
          assayCode: { query: Leukocyte }
          measurementValue:
            quantity:
              unit: { query: Cells per Microliter }
              referenceRange: { low: 4.0, high: 11.0 }
        - sourceField: 'Platelets (10^9/L)'
          assayCode: { query: Platelet Count }
          measurementValue:
            quantity:
              unit: { query: Cells per Microliter }
              referenceRange: { low: 150, high: 450 }
        - sourceField: 'BMI (kg/m^2)'
          assayCode: { query: Body Mass Index }
          measurementValue:
            quantity:
              unit: { query: Kilogram per Square Meter }
              referenceRange: { low: 18.5, high: 24.9 }
          procedure:
            procedureCode: { query: Physical Examination Category }

    phenotypicFeatures:
      defaults:
        featureType:
          ontology: hpo
          query: { from: value }
      rules:
        - { sourceField: PhenotypicFeature_1, when: { nonEmpty: true } }
        - { sourceField: PhenotypicFeature_2, when: { nonEmpty: true } }

    treatments:
      rules:
        - sourceField: DrugName
          when: { nonEmpty: true }
          treatmentCode:
            query: { from: value }
          routeOfAdministration: { query: Oral Route of Administration }
          cumulativeDose:
            value: { sourceField: 'TreatmentDuration (weeks)' }
            unit: { query: Week }
          doseIntervals:
            quantity:
              value: { sourceField: 'DrugDose (mg)' }
              unit: { query: Milligram }