From ca0b877690bad000af94745ab6a2a6f3aecf3b47 Mon Sep 17 00:00:00 2001 From: Pip Liggins Date: Tue, 14 Nov 2023 12:07:03 +0000 Subject: [PATCH] Add fio2_percent and oxygen_flow_rate (#188) Creates fio2_percent as an observation, transforms oxygen_flow_volume_max into oxygen_flow_rate to store L/min provision of oxygen. Uses presence of an oxygen flow rate as a input to treatment_oxygen_therapy. --- docs/guide.rst | 8 +- isaric/parsers/ccp-cameroon.toml | 74 +++++++------- isaric/parsers/ccp-ghana.toml | 60 +++++++----- isaric/parsers/ccp-guinea.toml | 43 +++++++++ isaric/parsers/ccp-netherlands.toml | 12 +++ isaric/parsers/ccp-spain.toml | 41 -------- isaric/parsers/ccp-uganda-v2.toml | 16 +++- isaric/parsers/cocoa_pediatrics.toml | 8 +- isaric/parsers/idor-brazil.toml | 7 ++ isaric/parsers/isaric-ccpuk.toml | 24 +++++ isaric/parsers/isaric-core.toml | 32 ++++++- isaric/parsers/isaric-ecmo.toml | 117 ++++++++++++++--------- isaric/parsers/isaric-followup-fr.toml | 11 +++ isaric/parsers/isaric-rapid.toml | 37 +++++-- isaric/parsers/ncov-france.toml | 46 ++++++++- isaric/parsers/ncov-malaysia.toml | 76 ++++++++++++--- isaric/parsers/predicovid.toml | 2 +- isaric/parsers/sprintsari-australia.toml | 10 ++ isaric/parsers/stopcovid-russia.toml | 5 +- schemas/dev/observation.schema.json | 5 +- schemas/dev/parser.schema.json | 4 +- templates/template_parser.toml | 2 +- 22 files changed, 448 insertions(+), 192 deletions(-) diff --git a/docs/guide.rst b/docs/guide.rst index 2af05e7e..80a6aff5 100644 --- a/docs/guide.rst +++ b/docs/guide.rst @@ -868,12 +868,16 @@ fields describing symptoms, here. **oxygen_o2hb**: Value (g/dL). Heamoglobin level, lab test. -**oxygen_flow_volume_max**: Value. If the subject received O2 therapy, -record the maximum flow volume. +**oxygen_flow_rate**: Value (L/min). Flow rate of oxygen administered. +Where possible, record the method of oxygen therapy being used, and whether +this is a maximum or point value. Sometimes recorded in data as FiO2 (L/min). **oxygen_saturation_percent**: Value (20-100). Use context to note whether observation was made on room air, on while on oxygen. +**fio2_percent**: Value (21-100): Fraction of inspired oxygen (concentration +of oxygen in supplied gas mixture). + **pao2_mmHg**: Value (25-150). Use context to record whether this is an arterial, venous or capillary measurement if data is provided. Use mmHg as the default unit. diff --git a/isaric/parsers/ccp-cameroon.toml b/isaric/parsers/ccp-cameroon.toml index 08113507..e03aa546 100644 --- a/isaric/parsers/ccp-cameroon.toml +++ b/isaric/parsers/ccp-cameroon.toml @@ -487,7 +487,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q30_signs_symptoms = { "!=" = "" } }, ] @@ -529,7 +529,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q28_signs_symptoms = { "!=" = "" } }, ] @@ -571,7 +571,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q37_signs_symptoms = { "!=" = "" } }, ] @@ -613,7 +613,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q19_signs_symptoms = { "!=" = "" } }, ] @@ -647,7 +647,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q33_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q33_signs_symptoms", description = "33) Conjunctivitis", ref = "Y/N" } @@ -691,7 +691,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q12_signs_symptoms = { "!=" = "" } }, ] @@ -728,7 +728,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q12_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q12_signs_symptoms", description = "12) Cough / Toux", ref = "Y/N" } @@ -758,7 +758,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q13_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q13_signs_symptoms", description = "13) Cough - with sputum production", ref = "Y/N" } @@ -788,7 +788,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q14_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q14_signs_symptoms", description = "14) Cough - bloodysputum", ref = "Y/N" } @@ -818,7 +818,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q32_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q32_signs_symptoms", description = "32) Diarrhoea", ref = "Y/N" } @@ -848,7 +848,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q6_signs_symptoms = { "!=" = "" } }, ] value = { field = "q6_signs_symptoms", source_unit = "mmHg", description = "6) Diastolic BP" } @@ -878,7 +878,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q17_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q17_signs_symptoms", description = "17) Ear pain", ref = "Y/N" } @@ -908,7 +908,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q22_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q22_signs_symptoms", description = "22) Fatigue , Malaise", ref = "Y/N" } @@ -938,7 +938,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q27_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q27_signs_symptoms", description = "27) Headache", ref = "Y/N" } @@ -968,7 +968,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q3_signs_symptoms = { "!=" = "" } }, ] value = { field = "q3_signs_symptoms", description = "3) HR/ Fréquence cardiaque" } @@ -998,7 +998,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q11_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q11_signs_symptoms", description = "11) History of fever", ref = "Y/N" } @@ -1028,7 +1028,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q21_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q21_signs_symptoms", description = "21) Joint pain (Arthralgia)", ref = "Y/N" } @@ -1068,7 +1068,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q24_signs_symptoms = { "!=" = "" } }, ] [observation.is_present] @@ -1103,7 +1103,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q24_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q24_signs_symptoms", description = "24) Loss of sense of smell", ref = "Y/N" } @@ -1133,7 +1133,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q25_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q25_signs_symptoms", description = "25) Loss of flavour", ref = "Y/N" } @@ -1163,7 +1163,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q26_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q26_signs_symptoms", description = "26) Lower chest wall indrawing", ref = "Y/N" } @@ -1193,7 +1193,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q36_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q36_signs_symptoms", description = "36) Lymphadenopathy", ref = "Y/N" } @@ -1223,7 +1223,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q20_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q20_signs_symptoms", description = "20) Muscle aches (Myalgia)", ref = "Y/N" } @@ -1334,7 +1334,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q9_signs_symptoms = { "!=" = "" } }, ] value = { field = "q9_signs_symptoms", description = "9) Oxygen saturation" } @@ -1416,7 +1416,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q4_signs_symptoms = { "!=" = "" } }, ] value = { field = "q4_signs_symptoms", description = "4) RR / Fréquence Respiratoire" } @@ -1446,7 +1446,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q16_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q16_signs_symptoms", description = "16) Runny nose (Rhinorrhoea)", ref = "Y/N" } @@ -1476,7 +1476,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q29_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q29_signs_symptoms", description = "29) Seizures /Convulsions", ref = "Y/N" } @@ -1519,7 +1519,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q7_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q7_signs_symptoms", description = "7) Severe dehydration", ref = "Y/N" } @@ -1549,7 +1549,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q23_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q23_signs_symptoms", description = "23) Shortness of breath (Dyspnea)", ref = "Y/N" } @@ -1579,7 +1579,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q34_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q34_signs_symptoms", description = "34) Skin rash / Eruption cutanée", ref = "Y/N" } @@ -1609,7 +1609,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q35_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q35_signs_symptoms", description = "35) Skin ulcers", ref = "Y/N" } @@ -1639,7 +1639,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q15_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q15_signs_symptoms", description = "15) Sore throat", ref = "Y/N" } @@ -1673,7 +1673,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q8_signs_symptoms = { "!=" = "" } }, { q8_signs_symptoms = { "!=" = 3 } }, ] @@ -1705,7 +1705,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q5_signs_symptoms = { "!=" = "" } }, ] value = { field = "q5_signs_symptoms", description = "5) Systolic BP / Tension artérielle systolique", source_unit = "mmHg" } @@ -1745,7 +1745,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q1_signs_symptoms = { "!=" = "" } }, ] @@ -1780,7 +1780,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q31_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q31_signs_symptoms", description = "31) Vomiting / Nausea", ref = "Y/N" } @@ -1810,7 +1810,7 @@ phase = "followup" date = { field = "q0_signs_symptoms" } if.all = [ - { redcap_event_name = { "=~" = 'm*\d_arm_1' } }, + { redcap_event_name = { "=~" = 'm\d_arm_1' } }, { q18_signs_symptoms = { "!=" = "" } }, ] is_present = { field = "q18_signs_symptoms", description = "18) Wheezing", ref = "Y/N" } diff --git a/isaric/parsers/ccp-ghana.toml b/isaric/parsers/ccp-ghana.toml index cc012102..6e853c2b 100644 --- a/isaric/parsers/ccp-ghana.toml +++ b/isaric/parsers/ccp-ghana.toml @@ -841,6 +841,11 @@ description = "Extracorporeal (ECMO) support?" ref = "Y/N/NK" + [[visit.treatment_oxygen_therapy.fields]] + field = "fi02" + if.any = [{ fi02 = { ">" = 21 } }, { fi02 = 1 }] + apply = { function = "isNotNull" } + [visit.treatment_prone_position] combinedType = "any" excludeWhen = "none" @@ -882,38 +887,37 @@ # context = ["high-flow nasal cannula"] [[observation]] + name = "oxygen_flow_rate" phase = "study" - name = "oxygen_flow_volume_max" date.field = "outcome_date" + text = { field = "overall_oxygen_cmdose___1", values = { 1 = "1-5 L/min" } } + context = ["Maximum rate during hospital stay"] - [observation.text] # This is a multi-select, but we're only recording the MAX value - combinedType = "firstNonNull" - fields = [ - { field = "overall_oxygen_cmdose___4", values = { 1 = ">15 L/min", 0 = "None", "" = "None" } }, # Stop-gap until if parsing improves - { field = "overall_oxygen_cmdose___3", values = { 1 = "11-15 L/min", 0 = "None", "" = "None" } }, - { field = "overall_oxygen_cmdose___2", values = { 1 = "6-10 L/min", 0 = "None", "" = "None" } }, - { field = "overall_oxygen_cmdose___1", values = { 1 = "1-5 L/min", 0 = "None", "" = "None" } }, - ] - - [observation.context] - combinedType = 'set' - excludeWhen = "none" - fields = [ - { field = "daily_oxygen_cmtype_1", values = { 1 = "Nasal prongs", 2 = "HF nasal cannula", 3 = "Mask", 4 = "Mask with reservoir", 5 = "CPAP/NIV mask" } }, - ] +[[observation]] + name = "oxygen_flow_rate" + phase = "study" + date.field = "outcome_date" + text = { field = "overall_oxygen_cmdose___2", values = { 1 = "6-10 L/min" } } + context = ["Maximum rate during hospital stay"] - [observation.if] # need to improve the auto-if for this, - any = [ - { overall_oxygen_cmdose___4 = { "!=" = "" } }, - { overall_oxygen_cmdose___3 = { "!=" = "" } }, - { overall_oxygen_cmdose___2 = { "!=" = "" } }, - { overall_oxygen_cmdose___1 = { "!=" = "" } }, - ] +[[observation]] + name = "oxygen_flow_rate" + phase = "study" + date.field = "outcome_date" + text = { field = "overall_oxygen_cmdose___3", values = { 1 = "11-15 L/min" } } + context = ["Maximum rate during hospital stay"] [[observation]] + name = "oxygen_flow_rate" phase = "study" - name = "oxygen_flow_volume_max" - date.field = "o2_date" + date.field = "outcome_date" + text = { field = "overall_oxygen_cmdose___4", values = { 1 = ">15 L/min" } } + context = ["Maximum rate during hospital stay"] + +[[observation]] + phase = "admission" + name = "oxygen_flow_rate" + date = { ref = "admissionDateHierarchy" } text = { field = "daily_oxygen_cmdose_1", values = { 1 = "1-5 L/min", 2 = "6-10 L/min", 3 = "11-15 L/min", 4 = ">15 L/min" } } [observation.context] @@ -1380,6 +1384,12 @@ date = { field = "icu_date" } value = { field = "ph", description = "pH" } +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "vitals_date" } + value = { field = "fi02", apply = { function = "Percentage" } } + [[observation]] name = "pao2_mmHg" phase = "study" diff --git a/isaric/parsers/ccp-guinea.toml b/isaric/parsers/ccp-guinea.toml index 800180c0..eae70c77 100644 --- a/isaric/parsers/ccp-guinea.toml +++ b/isaric/parsers/ccp-guinea.toml @@ -662,6 +662,13 @@ { field = "non_inv_vent", ref = "Y/N" }, { field = "inv_vent", ref = "Y/N" }, { field = "ecls", ref = "Y/N" }, + { field = "fio2", if = { fio2 = { ">" = 21 } }, apply = { function = "isNotNull" } }, + { field = "any_supplemental_oxygen_value", if = { fio2_0_21_1_0_unit = 2 }, apply = { function = "isNotNull" } }, + { field = "any_supplemental_oxygen_value", if.all = [ + { fio2_0_21_1_0_unit = 1 }, + { any_supplemental_oxygen_value = { ">" = 21 } }, + ], apply = { function = "isNotNull" } }, + { field = "daily_oxygen_cmdose_1", values = { 1 = true, 2 = true, 3 = true, 4 = true } }, ] [visit.treatment_prone_position] @@ -1391,6 +1398,42 @@ date = { field = "vitals_date" } value = { field = "temperature", description = "Value Temperature" } +[[observation]] + name = "fio2_percent" + phase = "admission" + date = { field = "constantes_date_t", source_date = "%d/%m/%Y %H:%M" } + value = { field = "any_supplemental_oxygen_value", apply = { function = "Percentage" }, if.any = [ + { fio2_0_21_1_0_unit = 1 }, # percentage + { any_supplemental_oxygen_value = { "!=" = "" } }, + ] } + +[[observation]] + name = "oxygen_flow_rate" + phase = "admission" + date = { field = "constantes_date_t", source_date = "%d/%m/%Y %H:%M" } + text = { field = "daily_oxygen_cmdose_1", values = { 1 = "1-5", 2 = "6-10", 3 = "11-15", 4 = ">15" } } + [observation.context] + combinedType = "set" + excludeWhen = "none" + fields = [ + { field = "daily_oxygen_cmtype_1", values = { 1 = "nasal cannula", 2 = "HFNC", 3 = "mask", 4 = "mask with reservoir", 5 = "CPAP/NIV mask", 6 = "Unknown" } }, + ] + +[[observation]] + name = "oxygen_flow_rate" + phase = "admission" + date = { field = "constantes_date_t", source_date = "%d/%m/%Y %H:%M" } + value = { field = "any_supplemental_oxygen_value", if.any = [ + { fio2_0_21_1_0_unit = 2 }, # L/min + { any_supplemental_oxygen_value = { "!=" = "" } }, + ] } + +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "icu_date" } + value = { field = "fio2", apply = { function = "Percentage" } } + [[observation]] name = "pao2_mmHg" phase = "study" diff --git a/isaric/parsers/ccp-netherlands.toml b/isaric/parsers/ccp-netherlands.toml index 92e07e38..942dce7d 100644 --- a/isaric/parsers/ccp-netherlands.toml +++ b/isaric/parsers/ccp-netherlands.toml @@ -310,6 +310,8 @@ { field = "patient_interventions#Highflow_nasal_canula_oxygen_therapy", values = { 1 = true, 0 = false } }, { field = "patient_interventions#Extra_corporeal_life_support_ECLS", values = { 1 = true, 0 = false } }, { field = "Extracorporeal_support", ref = "Y/N" }, + { field = "fio2_1", if = { fio2_1 = { ">" = 21 } }, apply = { function = "isNotNull" } }, + { field = "signssymp_L_oxygen", apply = { function = "isNotNull" } }, ] [visit.treatment_prone_position] @@ -709,6 +711,16 @@ { field = "oxygen_saturation_on", values = { 1 = "room air", 2 = "on oxygen" } }, ] +[[observation]] + name = "fio2_percent" + date = { field = "assessment_dt" } + phase = "study" + value = { field = "fio2_1" } + if.all = [ + { report_name_custom = { "=~" = "Daily case record form" } }, + { fio2_1 = { "!=" = "" } }, + ] + [[observation]] name = "pao2_mmHg" date = { field = "assessment_dt" } diff --git a/isaric/parsers/ccp-spain.toml b/isaric/parsers/ccp-spain.toml index f9726c56..9fbf5025 100644 --- a/isaric/parsers/ccp-spain.toml +++ b/isaric/parsers/ccp-spain.toml @@ -540,44 +540,3 @@ date = { field = "fchadminsion" } phase = "admission" is_present = { field = "ss_malest", ref = "Y/N/NK" } # this field onlz captured malaise, not fatigue - - ### Obervation attributes not mapped here... - # bleeding - # has_immunosuppression - # avpu - # clinical_classification_critical_illness_scale - # clinical_classification_pneumonia_needing_oxygen - # clinical_frailty_score - # anorexia - # base_excess - # conjunctivitis - # cyanosis - # ear_pain - # fatigue_malaise - # feeding_intolerence_peadiatrics - # hepatomegaly - # inability_to_walk - # inability_to_walk_scale - # irritability_peadiatrics - # loss_of_taste - # lung_sounds - # lymphadenopathy - # lower_chest_wall_indrawing - # muscle_aches - # total_fluid_output_m - # heart_sounds - # mid_upper_arm_circumference_cm - # mean_arterial_blood_pressure_mmHg - # severe_dehydration - # skin_ulcers - # richmond_agitation-sedation_scale - # riker_sedation-agitation_scale - # pH - # transfer_from_other_facility - # time_of_admission - # sternal_capillary_refill_time_greater_2s - # runny_nose - # wheezing - # oxygen_flow_volume_max - # oxygen_o2hb - # sore_throat diff --git a/isaric/parsers/ccp-uganda-v2.toml b/isaric/parsers/ccp-uganda-v2.toml index 8a7c0572..17940e75 100644 --- a/isaric/parsers/ccp-uganda-v2.toml +++ b/isaric/parsers/ccp-uganda-v2.toml @@ -327,6 +327,11 @@ { field = "non_inv_vent", values = { 1 = true, 0 = false } }, { field = "overall_extracorp_prtrt", values = { 1 = true, 0 = false } }, { field = "ecls", ref = "Y/N" }, + { field = "fi02", if.all = [ + { fi02 = { ">" = 21 } }, + { fi02 = { "!=" = 999 } }, + ], apply = { function = "isNotNull" } }, + { field = "ttl_oxy", if = { ttl_oxy = { "!=" = 999 } }, apply = { function = "isNotNull" } }, ] [visit.treatment_prone_position] @@ -861,6 +866,13 @@ { field = "ox_type", values = { 1 = "Room air", 2 = "Oxygen therapy" } }, ] +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "icu_date" } + value = { field = "fi02", apply = { function = "Percentage" } } + if.all = [{ fi02 = { "!=" = "" } }, { fi02 = { "!=" = 0 } }] + [[observation]] name = "pao2_mmHg" phase = "study" @@ -943,10 +955,10 @@ if.all = [{ temp_study = { "!=" = "" } }, { temp_study = { "!=" = 0 } }] [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" date = { ref = "admissionDateHierarchy" } phase = "study" - value = { field = "ttl_oxy" } + value = { field = "ttl_oxy", description = "how many litres of oxygen?" } if.all = [{ ttl_oxy = { "!=" = "" } }, { ttl_oxy = { "!=" = 999 } }] [[observation]] diff --git a/isaric/parsers/cocoa_pediatrics.toml b/isaric/parsers/cocoa_pediatrics.toml index ac9d0f62..0535be17 100644 --- a/isaric/parsers/cocoa_pediatrics.toml +++ b/isaric/parsers/cocoa_pediatrics.toml @@ -286,6 +286,8 @@ fields = [ { field = "oxygen_prtrt_v3", description = "Oxygen therapy?", ref = "Y/N/NK" }, { field = "noninvasive_prtrt_v3", description = "Non-invasive ventilation ? (e.g. BIPAP, CPAP)", ref = "Y/N/NK" }, + { field = "xygn_thrpintfc_trt_v3", values = { 1 = true, 2 = true } }, + { field = "xygn_thrpintfc_mask_v3", apply = { function = "isNotNull" } }, ] [visit.treatment_oxygen_mask_prongs] @@ -559,16 +561,16 @@ ] [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" phase = "study" start_date = { field = "hostdat" } date = { field = "dsstdtc" } duration_type = "event" - context = ["over entire visit"] + context = ["Maximum flow rate over entire visit", "Nasal prongs/mask"] [observation.value] field = "xygn_thrpintfc_mask_v3" - description = "If NP or Mask selected what wa the maximum flow rate recorded in L/min" + description = "If NP or Mask selected what was the maximum flow rate recorded in L/min" [[observation]] name = "oxygen_saturation_percent" diff --git a/isaric/parsers/idor-brazil.toml b/isaric/parsers/idor-brazil.toml index 2ea0d3ce..c667e53f 100644 --- a/isaric/parsers/idor-brazil.toml +++ b/isaric/parsers/idor-brazil.toml @@ -594,6 +594,7 @@ { field = "noninvasive_proccur", ref = "Y/N/NK" }, { field = "daily_noninvasive_prtrt", ref = "Y/N/NK" }, { field = "daily_ecmo_prtrt", ref = "Y/N/NK" }, + { field = "daily_fio2_lborres", if = { daily_fio2_lborres = { ">" = 0.21 } }, apply = { function = "isNotNull" } }, ] [visit.treatment_cardiovascular_support] @@ -922,6 +923,12 @@ date = { ref = "admissionDate" } is_present = { field = "skinulcers_ceoccur_v2", ref = "Y/N/NK" } +[[observation]] + name = "fio2_percent" + phase.ref = "phaseFromRedcapEvent" + date = { ref = "dailyDate" } + value = { field = "daily_fio2_lborres", apply = { function = "Percentage" } } + [[observation]] name = "pao2_mmHg" phase.ref = "phaseFromRedcapEvent" diff --git a/isaric/parsers/isaric-ccpuk.toml b/isaric/parsers/isaric-ccpuk.toml index 947799e2..8a2cfaec 100644 --- a/isaric/parsers/isaric-ccpuk.toml +++ b/isaric/parsers/isaric-ccpuk.toml @@ -611,6 +611,12 @@ { field = "daily_noninvasive_prtrt", ref = "Y/N/NK" }, { field = "extracorp_prtrt", ref = "Y/N/NK" }, { field = "daily_ecmo_prtrt", ref = "Y/N/NK" }, + { field = "daily_fio2_lborres", if.all = [ + { daily_fio2_lborres = { ">" = 0.21 } }, + { daily_fio2_lborres = { "<=" = 1 } }, + ], apply = { function = "isNotNull" } }, + { field = "daily_fio2b_lborres", if = { daily_fio2b_lborres = { ">" = 21 } }, apply = { function = "isNotNull" } }, + { field = "daily_fio2c_lborres", apply = { function = "isNotNull" } }, ] @@ -1077,6 +1083,24 @@ date = { field = "daily_dsstdat", description = "Date of assessment" } context = ['Highest'] +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "daily_dsstdat", description = "Date of assessment" } + value = { field = "daily_fio2b_lborres", apply = { function = "Percentage" } } + +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "daily_dsstdat", description = "Date of assessment" } + value = { field = "daily_fio2_lborres", apply = { function = "Percentage" } } + +[[observation]] + name = "oxygen_flow_rate" + phase = "study" + date = { field = "daily_dsstdat", description = "Date of assessment" } + value = { field = "daily_fio2c_lborres" } + [[observation]] name = "pao2_mmHg" phase = "study" diff --git a/isaric/parsers/isaric-core.toml b/isaric/parsers/isaric-core.toml index fa00bd9f..fe0c7af9 100644 --- a/isaric/parsers/isaric-core.toml +++ b/isaric/parsers/isaric-core.toml @@ -517,6 +517,10 @@ description = "Employed a a healthcare worker?" ref = "Y/N/NK" +[subject.works_lab] + field = "labwork_erterm" + values = { 1 = true } + [subject.works_microbiology_lab] field = "labwork_erterm" description = "Employed in a microbiology laboratory?" @@ -876,6 +880,23 @@ description = "Mechanical Ventilation?" values = { 1 = true, 2 = true, 3 = true, 4 = true } + [[visit.treatment_oxygen_therapy.fields]] + field = "daily_fio2_lborres" + if.all = [ + { daily_fio2_lborres = { ">" = 0.21 } }, + { daily_fio2_lborres = { "<=" = 1 } }, + ] + apply = { function = "isNotNull" } + + [[visit.treatment_oxygen_therapy.fields]] + field = "daily_fio2b_lborres" + if = { daily_fio2_lborres = { ">" = 21 } } + apply = { function = "isNotNull" } + + [[visit.treatment_oxygen_therapy.fields]] + field = "daily_fio2c_lborres" + apply = { function = "isNotNull" } + [visit.treatment_oxygen_mask_prongs] field = "oxygen_cminterface" values = { 1 = false, 2 = true, 3 = true, 4 = false } @@ -1671,8 +1692,8 @@ duration_type = "event" text = { field = "flw2_other_symp" } -[[observation]] # PL: look at this one - name = "oxygen_flow_volume_max" +[[observation]] + name = "oxygen_flow_rate" phase = "study" start_date = { ref = "admissionDateHierarchy" } date = { field = "dsstdtc" } @@ -1981,3 +2002,10 @@ phase = "study" date = { field = "daily_dsstdat" } value = { field = "daily_fio2_lborres", apply = { function = "Percentage" } } + +[[observation]] + name = "oxygen_flow_rate" + phase = "study" + date = { field = "daily_dsstdat" } + value = { field = "daily_fio2c_lborres" } + context = ["Maximum value over 24hrs"] diff --git a/isaric/parsers/isaric-ecmo.toml b/isaric/parsers/isaric-ecmo.toml index 1e28677c..11e8f27d 100644 --- a/isaric/parsers/isaric-ecmo.toml +++ b/isaric/parsers/isaric-ecmo.toml @@ -638,51 +638,51 @@ { field = "icu_hostdat", if = { "Date Of ICU Admission (Treatment) 6.1 Date of ICU admission [dischargeoutcome_arm_1][icu_hostdat]" = "" } }, ] -[visit.transfer_from_other_facility] - field = "hooccur" - values = { 1 = true, 2 = true, 3 = false } + [visit.transfer_from_other_facility] + field = "hooccur" + values = { 1 = true, 2 = true, 3 = false } -[visit.treatment_antivirals] - field = "antiviral_cmyn" - ref = "Y/N/NK" - description = "Antiviral agent?" + [visit.treatment_antivirals] + field = "antiviral_cmyn" + ref = "Y/N/NK" + description = "Antiviral agent?" -[visit.treatment_antiviral_type] - combinedType = "set" - description = "Antiviral ot COVID-19 targeted agent" - excludeWhen = 'none' - fields = [ - { field = "antiviral_cmtrt___1", values = { 1 = "Ribavirin" } }, - { field = "antiviral_cmtrt___2", values = { 1 = "Lopinavir/Ritonavir" } }, - { field = "antiviral_cmtrt___3", values = { 1 = "Interferon alpha" } }, - { field = "antiviral_cmtrt___4", values = { 1 = "Interferon beta" } }, - { field = "antiviral_cmtrt___5", values = { 1 = "Neuraminidase inhibitor" } }, - { field = "antiviral_cmtrt___6", values = { 1 = "Other" } }, - { field = "antiviral_cmtrt___7", values = { 1 = "Remdesivir" } }, - { field = "antiviral_cmtrt___9", values = { 1 = "IL6 inhibitor" } }, - { field = "antiviral_cmtrt___10", values = { 1 = "Convalescent plasma" } }, - { field = "antiviral_cmtrt___11", values = { 1 = "Anti-influenza antiviral" } }, - ] - -[visit.treatment_antiviral_type_other] - combinedType = "set" - excludeWhen = "none" - fields = [{ field = "antiviral_cmtype" }] + [visit.treatment_antiviral_type] + combinedType = "set" + description = "Antiviral ot COVID-19 targeted agent" + excludeWhen = 'none' + fields = [ + { field = "antiviral_cmtrt___1", values = { 1 = "Ribavirin" } }, + { field = "antiviral_cmtrt___2", values = { 1 = "Lopinavir/Ritonavir" } }, + { field = "antiviral_cmtrt___3", values = { 1 = "Interferon alpha" } }, + { field = "antiviral_cmtrt___4", values = { 1 = "Interferon beta" } }, + { field = "antiviral_cmtrt___5", values = { 1 = "Neuraminidase inhibitor" } }, + { field = "antiviral_cmtrt___6", values = { 1 = "Other" } }, + { field = "antiviral_cmtrt___7", values = { 1 = "Remdesivir" } }, + { field = "antiviral_cmtrt___9", values = { 1 = "IL6 inhibitor" } }, + { field = "antiviral_cmtrt___10", values = { 1 = "Convalescent plasma" } }, + { field = "antiviral_cmtrt___11", values = { 1 = "Anti-influenza antiviral" } }, + ] -[visit.treatment_antimalarial] - field = "antiviral_cmtrt___8" - values = { 1 = true } + [visit.treatment_antiviral_type_other] + combinedType = "set" + excludeWhen = "none" + fields = [{ field = "antiviral_cmtype" }] -[visit.treatment_antimalarial_type] - combinedType = "set" - excludeWhen = "none" - fields = [ - { field = "antiviral_cmtrt___8", values = { 1 = "Chloroquine/Hydroxychloroquine" } }, - ] + [visit.treatment_antimalarial] + field = "antiviral_cmtrt___8" + values = { 1 = true } -[visit.treatment_neuromuscular_blocking_agents] - field = "daily_neuro_cmtrt" - ref = "Y/N/NK" + [visit.treatment_antimalarial_type] + combinedType = "set" + excludeWhen = "none" + fields = [ + { field = "antiviral_cmtrt___8", values = { 1 = "Chloroquine/Hydroxychloroquine" } }, + ] + + [visit.treatment_neuromuscular_blocking_agents] + field = "daily_neuro_cmtrt" + ref = "Y/N/NK" [visit.treatment_antibiotics] description = "Antibiotics?" @@ -832,6 +832,12 @@ { field = "daily_ecmo_prtrt", ref = "Y/N/NK" }, # { field = "pronevent_prtrt", description = "Ventilation in prone position?", ref = "Y/N/NK" }, { field = "daily_prone_cmtype", description = "Prone while on invasive ventilation", values = { 1 = true } }, + { field = "daily_fio2_lborres", if.all = [ + { daily_fio2_lborres = { ">" = 0.21 } }, + { daily_fio2_lborres = { "<=" = 1 } }, + ], apply = { function = "isNotNull" } }, + { field = "daily_fio2b_lborres", if = { daily_fio2b_lborres = { ">" = 21 } }, apply = { function = "isNotNull" } }, + { field = "daily_fio2c_lborres", apply = { function = "isNotNull" } }, ] [visit.treatment_inhaled_nitric_oxide] @@ -1168,6 +1174,31 @@ date = { field = "daily_dsstdat" } value = { field = "daily_temp_vsorres", unit = "°C", source_unit = { field = "daily_temp_vsorresu", values = { 1 = "°C", 2 = "°F" } } } +[[observation]] + name = "fio2_percent" + phase = "study" + date = { ref = "dailyDateHierarchy" } + value = { field = "daily_fio2b_lborres", apply = { function = "Percentage" } } + +[[observation]] + name = "fio2_percent" + phase = "study" + date = { ref = "dailyDateHierarchy" } + value = { field = "daily_fio2_lborres", apply = { function = "Percentage" } } + +[[observation]] + name = "oxygen_flow_rate" + phase = "study" + date = { ref = "dailyDateHierarchy" } + value = { field = "daily_fio2c_lborres" } + +[[observation]] + name = "oxygen_flow_rate" + phase = "study" + date = { field = "daily_dsstdat" } + text = { field = "oxygen_cmdose", values = { 1 = "<2 L/min", 2 = "6-10 L/min", 3 = "11-15 L/min", 4 = ">15 L/min", 6 = "2-5 L/min" } } + context = ['Maximum dose over entire visit'] + [[observation]] name = "pao2_mmHg" phase = "study" @@ -1225,12 +1256,6 @@ value = { field = "sas_vsorres", apply = { function = "getFloat" } } # if.any = [{ sas_vsyn = 1 }, { rass_sas_vsyn = 4 }] -[[observation]] - name = "oxygen_flow_volume_max" - phase = "study" - date = { field = "daily_dsstdat" } - text = { field = "oxygen_cmdose", values = { 1 = "<2 L/min", 2 = "6-10 L/min", 3 = "11-15 L/min", 4 = ">15 L/min", 6 = "2-5 L/min" } } - [[observation]] name = "altered_consciousness_confusion" date = { ref = "admissionDateHierarchy" } diff --git a/isaric/parsers/isaric-followup-fr.toml b/isaric/parsers/isaric-followup-fr.toml index b79ecbbc..c5d7a2d1 100644 --- a/isaric/parsers/isaric-followup-fr.toml +++ b/isaric/parsers/isaric-followup-fr.toml @@ -72,6 +72,11 @@ field = "subjid" sensitive = true + [visit.treatment_oxygen_therapy] + field = "fio2_pao2" + if = { fio2_pao2 = { ">" = 21 } } + apply = { function = "isNotNull" } + [visit.outcome] field = "ca_hospit" values = { 1 = "hospitalised" } @@ -262,6 +267,12 @@ date = { field = "ca_date" } value = { field = "ca_hb_lborres", unit = "g/dL", source_unit = { field = "ca_hb_lborresu", values = { 1 = "g/L", 2 = "g/dL", 3 = "mg/dl" } } } #, 4 = "mmol/L" +[[observation]] + name = "fio2_percent" + phase = "followup" + date = { field = "abg_date" } + value = { field = "fio2_pao2", unit = "%" } + [[observation]] name = "pao2_mmHg" phase = "followup" diff --git a/isaric/parsers/isaric-rapid.toml b/isaric/parsers/isaric-rapid.toml index a10faf33..0b1fe870 100644 --- a/isaric/parsers/isaric-rapid.toml +++ b/isaric/parsers/isaric-rapid.toml @@ -873,6 +873,12 @@ { fieldPattern = ".*noninvasive_proccur", ref = "Y/N/NK", description = "Non-invasive ventilation?" }, { field = "ccm_b_noninvasive_prtrt", ref = "Y/N/NK", description = "Non-invasive ventilation?" }, { fieldPattern = ".*extracorp_prtrt", ref = "Y/N/NK" }, + { field = "ccm_a_fio2_lborres", if.all = [ + { ccm_a_fio2_lborres = { ">" = 0.21 } }, + { ccm_a_fio2_lborres = { "<=" = 1 } }, + ], apply = { function = "isNotNull" } }, + { field = "ccm_a_fio2b_lborres", if = { daily_fio2b_lborres = { ">" = 21 } }, apply = { function = "isNotNull" } }, + { field = "ccm_a_fio2c_lborres", apply = { function = "isNotNull" } }, ] [visit.treatment_prone_position] @@ -1815,6 +1821,24 @@ value = { field = "daily_temp_vsorres" } # there is no source unit field context = ['Most abnormal reading'] +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "ccm_a_dat" } + value = { field = "ccm_a_fio2b_lborres", apply = { function = "Percentage" } } + +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "ccm_a_dat" } + value = { field = "ccm_a_fio2_lborres", apply = { function = "Percentage" } } + +[[observation]] + name = "oxygen_flow_rate" + phase = "study" + date = { field = "ccm_a_dat" } + value = { field = "ccm_a_fio2c_lborres" } + [[observation]] name = "pao2_mmHg" phase = "study" @@ -1853,11 +1877,10 @@ value = { field = "ccm_a_baseex_lborres" } [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" phase = "admission" date = { ref = "admissionDateHierarchy" } text = { field = "oxygen_cmdose", values = { 1 = "1-5 L/min", 2 = "6-10 L/min", 3 = "11-15 L/min", 4 = ">15 L/min" } } - if.all = [{ oxygen_cmoccur = 1 }, { oxygen_cmdose = { "!=" = 5 } }] [observation.context] combinedType = "set" @@ -1867,14 +1890,10 @@ ] [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" phase = "study" date = { field = "daily_date" } text = { field = "daily_oxygen_cmdose", values = { 1 = "1-5 L/min", 2 = "6-10 L/min", 3 = "11-15 L/min", 4 = ">15 L/min" } } - if.all = [ - { daily_oxygen_cmoccur = 1 }, - { daily_oxygen_cmdose = { "!=" = 5 } }, - ] [observation.context] combinedType = "set" @@ -1884,12 +1903,12 @@ ] [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" phase = "study" startdate = { ref = "admissionDateHierarchy" } date = { field = "dsstdtc" } duration_type = "event" - # text = { field = "overall_oxygen_cmdose", values = { 1 = "1-5 L/min", 2 = "6-10 L/min", 3 = "11-15 L/min", 4 = ">15 L/min" } } + context = ["Maxiumum dose over entire visit"] [observation.text] combinedType = "firstNonNull" diff --git a/isaric/parsers/ncov-france.toml b/isaric/parsers/ncov-france.toml index 2c082d77..1acae087 100644 --- a/isaric/parsers/ncov-france.toml +++ b/isaric/parsers/ncov-france.toml @@ -466,14 +466,35 @@ is_present = { field = "signes_clin___6", values = { 1 = true } } [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" phase = "admission" date = { ref = "admissionDate" } + [observation.value] - combinedType = "max" + combinedType = "firstNonNull" fields = [ { field = "a_o2_on", description = "O2 flow (L/min), nasal O2" }, { field = "a_of_o2", description = "O2 flow (L/min), HFNC" }, + # { field = "a_vni_ti", description = "Inspiratory trigger (L/min)" }, + { field = "a_vm_di", description = "Inspiratory flow (L/min)" }, + ] + + [observation.context] + combinedType = "set" + excludeWhen = "none" + fields = [ + { field = "a_o2_on", apply = { function = "textIfNotNull", params = [ + "Nasal O2", + ] } }, + { field = "a_of_o2", apply = { function = "textIfNotNull", params = [ + "HFNC", + ] } }, + { field = "a_vni_ti", apply = { function = "textIfNotNull", params = [ + "Non-invasive ventilation", + ] } }, + { field = "a_vm_di", apply = { function = "textIfNotNull", params = [ + "Mechanical ventilation", + ] } }, ] [[observation]] @@ -494,6 +515,27 @@ date = { ref = "admissionDate" } value = { field = "ph_dose", description = "pH" } +[[observation]] + name = "fio2_percent" + phase = "admission" + date = { ref = "admissionDate" } + value = { field = "a_of_fio2", apply = { function = "Percentage" } } + context = ['nasal oxygen'] + +[[observation]] + name = "fio2_percent" + phase = "admission" + date = { ref = "admissionDate" } + value = { field = "a_vni_fio2", apply = { function = "Percentage" } } + context = ['non-invasive ventilation'] + +[[observation]] + name = "fio2_percent" + phase = "admission" + date = { ref = "admissionDate" } + value = { field = "a_vm_fio2", apply = { function = "Percentage" } } + context = ['mechanical ventilation'] + [[observation]] name = "pao2_mmHg" phase = "admission" diff --git a/isaric/parsers/ncov-malaysia.toml b/isaric/parsers/ncov-malaysia.toml index d6c57dc5..182b5a7f 100644 --- a/isaric/parsers/ncov-malaysia.toml +++ b/isaric/parsers/ncov-malaysia.toml @@ -351,7 +351,7 @@ { field = "mx_antiviral_type___4", values = { 1 = "Interferon beta" } }, { field = "mx_antiviral_type___5", values = { 1 = "Neuraminidase inhibitor" } }, { field = "mx_antiviral_type___6", values = { 1 = "Ritonavir" } }, - { field = "mx_antiviral_type___7", values = { 1 = "Favipravir" } }, + { field = "mx_antiviral_type___7", values = { 1 = "Favipiravir" } }, { field = "mx_antiviral_type___8", values = { 1 = "Atazanavir" } }, { field = "type_antiviral_dc___1", values = { 1 = "Ribavirin" } }, { field = "type_antiviral_dc___2", values = { 1 = "Lopinavir/Ritonavir" } }, @@ -359,7 +359,7 @@ { field = "type_antiviral_dc___4", values = { 1 = "Interferon beta" } }, { field = "type_antiviral_dc___5", values = { 1 = "Neuraminidase inhibitor" } }, { field = "type_antiviral_dc___6", values = { 1 = "Ritonavir" } }, - { field = "type_antiviral_dc___7", values = { 1 = "Favipravir" } }, + { field = "type_antiviral_dc___7", values = { 1 = "Favipiravir" } }, { field = "type_antiviral_dc___8", values = { 1 = "Atazanavir" } }, ] @@ -472,6 +472,9 @@ { field = "prone_dc", ref = "Y/N", description = "Prone Ventilation?" }, { description = "Oxygen interface - HFNC", field = "oxy_interface", values = { 1 = false, 2 = true, 3 = false, 4 = false, 5 = false, 6 = false } }, { field = "type_oxy_dc", values = { 1 = false, 2 = true, 7777 = false } }, + { field = "daily_fio2_data", if = { daily_fio2_data = { ">" = 0.21 } }, apply = { function = "isNotNull" } }, + { field = "fio_prone", if = { fio_prone = { ">" = 0.21 } }, apply = { function = "isNotNull" } }, + { field = "oxy_flow", apply = { function = "isNotNull" } }, ] [visit.treatment_prone_position] @@ -909,6 +912,40 @@ field = "daily_ph_data" description = "pH" +[[observation]] + name = "fio2_percent" + phase = "admission" + if.all = [ + { redcap_event_name = "on_admission_arm_1" }, + { daily_fio2_data = { "!=" = "" } }, + { daily_fio2_data = { "!=" = "9999" } }, + ] + date = { field = "daily_assess_date" } + value = { field = "daily_fio2_data", apply = { function = "Percentage" } } + +[[observation]] + name = "fio2_percent" + phase = "study" + if.all = [ + { redcap_event_name = "daily_progress_arm_1" }, + { daily_fio2_data = { "!=" = "" } }, + { daily_fio2_data = { "!=" = "9999" } }, + ] + date = { field = "daily_assess_date" } + value = { field = "daily_fio2_data", apply = { function = "Percentage" } } + +[[observation]] + name = "fio2_percent" + phase = "study" + if.all = [ + { redcap_event_name = "daily_progress_arm_1" }, + { fio_prone = { "!=" = "" } }, + { fio_prone = { "!=" = "9999" } }, + ] + date = { field = "daily_assess_date" } + value = { field = "fio_prone", apply = { function = "Percentage" } } + context = ["FiO2 while in prone position"] + [[observation]] name = "pao2_mmHg" phase = "admission" @@ -1083,13 +1120,6 @@ field = "t_sx" unit = "°C" - # Not very useful without fluid input, disabling - # [[observation]] # THIS NEEDS DISCUSSION - # name = "total_fluid_output_ml" - # phase = "study" - # date = { field = "daily_assess_date" } - # value = { field = "mx_fluid_out" } - [[observation]] name = "vomiting_nausea" phase = "admission" @@ -1114,7 +1144,7 @@ ref = "Y/N" [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" date = { field = "daily_assess_date" } phase = "admission" if.all = [ @@ -1122,11 +1152,20 @@ { oxy_flow = { "!=" = "" } }, { oxy_flow = { "!=" = "9999" } }, ] - text = { field = "oxy_flow", values = { 1 = "1-5 l/min", 2 = "6-10 l/min", 3 = "11-15 l/min", 4 = ">15 l/min" } } - context = ['Maximum over 24hr period'] + text = { field = "oxy_flow", values = { 1 = "1-5 L/min", 2 = "6-10 L/min", 3 = "11-15 L/min", 4 = ">15 L/min" } } + + [observation.context] + combinedType = "set" + excludeWhen = "none" + fields = [ + { field = "oxy_flow", apply = { function = "textIfNotNull", params = [ + 'Maximum rate over 24hr period', + ] } }, + { field = "oxy_interface", values = { 1 = "Nasal prongs", 2 = "HFNC", 3 = "Mask", 4 = "Mask with reservoir", 5 = "CPAP/NIV mask", 6 = "Invasive ventilation" } }, + ] [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" date = { field = "daily_assess_date" } phase = "study" if.all = [ @@ -1135,7 +1174,16 @@ { oxy_flow = { "!=" = "9999" } }, ] text = { field = "oxy_flow", values = { 1 = "1-5 l/min", 2 = "6-10 l/min", 3 = "11-15 l/min", 4 = ">15 l/min" } } - context = ['Maximum over 24hr period'] + + [observation.context] + combinedType = "set" + excludeWhen = "none" + fields = [ + { field = "oxy_flow", apply = { function = "textIfNotNull", params = [ + 'Maximum rate over 24hr period', + ] } }, + { field = "oxy_interface", values = { 1 = "Nasal prongs", 2 = "HFNC", 3 = "Mask", 4 = "Mask with reservoir", 5 = "CPAP/NIV mask", 6 = "Invasive ventilation" } }, + ] [[observation]] name = "heart_sounds" diff --git a/isaric/parsers/predicovid.toml b/isaric/parsers/predicovid.toml index 53f04052..2ab05de1 100644 --- a/isaric/parsers/predicovid.toml +++ b/isaric/parsers/predicovid.toml @@ -77,7 +77,7 @@ { field = "other_ethnic" }, ] - [subject.works_microbiology_lab] + [subject.works_lab] field = "labwork_erterm" ref = "Y/N/NK" diff --git a/isaric/parsers/sprintsari-australia.toml b/isaric/parsers/sprintsari-australia.toml index 40ecee16..1f753844 100644 --- a/isaric/parsers/sprintsari-australia.toml +++ b/isaric/parsers/sprintsari-australia.toml @@ -388,6 +388,10 @@ { field = "daily_noninvasive_prtrt", description = "Non-invasive ventilation (e.g. BIPAP, CPAP)?", ref = "Y/N" }, { field = "daily_invasive_prtrt", description = "Invasive ventilation?", ref = "Y/N" }, { field = "daily_ecmo_prtrt", description = "ECMO?", ref = "Y/N" }, + { field = "daily_fio2_lborres", if.all = [ + { daily_fio2_lborres = { ">" = 0.21 } }, + { daily_fio2_lborres = { "<=" = 1 } }, + ], apply = { function = "isNotNull" } }, ] [visit.treatment_prone_position] @@ -702,6 +706,12 @@ field = "daily_ph_lborres" description = "pH Document from same ABG with the worst P:F ratio" +[[observation]] + name = "fio2_percent" + phase = "study" + date = { field = "daily_dsstdat" } + value = { field = "daily_fio2_lborres", apply = { function = "Percentage" } } + [[observation]] name = "pao2_mmHg" phase = "study" diff --git a/isaric/parsers/stopcovid-russia.toml b/isaric/parsers/stopcovid-russia.toml index 0ac2fcaa..debc1aed 100644 --- a/isaric/parsers/stopcovid-russia.toml +++ b/isaric/parsers/stopcovid-russia.toml @@ -656,15 +656,16 @@ 5 = 4 # You are unable to walk about? [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" phase = "study" duration_type = "block" date.field = "dsstdtc" start_date.ref = "admissionDate" text.field = "oxygen_cmdose" + context = ["Maximum value"] [observation.text.values] - 1 = "< 2 L/min" + 1 = "<2 L/min" 6 = "2-5 L/min" 2 = "6-10 L/min" 3 = "11-15 L/min" diff --git a/schemas/dev/observation.schema.json b/schemas/dev/observation.schema.json index 77ff735a..1e89f4f7 100644 --- a/schemas/dev/observation.schema.json +++ b/schemas/dev/observation.schema.json @@ -53,7 +53,7 @@ ], "properties": { "name": { - "const": "oxygen_flow_volume_max" + "const": "oxygen_flow_rate" } } }, @@ -64,7 +64,7 @@ ], "properties": { "name": { - "const": "oxygen_flow_volume_max" + "const": "oxygen_flow_rate" } } }, @@ -430,7 +430,6 @@ "initial_illness", "pre-admission", "admission", - "initial_illness", "study", "followup" ], diff --git a/schemas/dev/parser.schema.json b/schemas/dev/parser.schema.json index 746ead61..47899024 100644 --- a/schemas/dev/parser.schema.json +++ b/schemas/dev/parser.schema.json @@ -787,7 +787,7 @@ "other_symptom", "acvpu", "avpu", - "oxygen_flow_volume_max" + "oxygen_flow_rate" ] } } @@ -811,7 +811,7 @@ "mid_upper_arm_circumference_cm", "oxygen_o2hb", "oxygen_saturation_percent", - "oxygen_flow_volume_max", + "oxygen_flow_rate", "fio2_percent", "pao2_mmHg", "pco2_mmHg", diff --git a/templates/template_parser.toml b/templates/template_parser.toml index dbdef4ff..4c921917 100644 --- a/templates/template_parser.toml +++ b/templates/template_parser.toml @@ -1001,7 +1001,7 @@ # if = { = { "!=" = } } [[observation]] - name = "oxygen_flow_volume_max" + name = "oxygen_flow_rate" date = "" phase = "" is_present = { field = "", ref = "Y/N/NK" }