Clinical functions - ndobb/clinical-trials-seq2seq-annotation GitHub Wiki
Clinical functions are the core of the LCT Logical Form Annotation, corresponding to biomedical measurements and physiological phenomena common in clinical trials criteria.
Arguments - arguments to clinical functions are generally quoted text, e.g., cond("diabetes")
. (The exception to this is allergy()
, which can alternatively take drug()
or proc()
as arguments). Clinical functions which have no arguments, such as cond()
or proc()
indicate non-specific functions (i.e., any condition or procedure).
allergy()
clin_score()
cond()
code()
drug()
enc()
lab()
measurement()
org()
proc()
obs()
social_habit()
spec()
survey_or_questionnaire()
vital()
allergy()
allergy()
represent allergies to a drug or other object or thing.
Arguments -
- Quoted Text, e.g.,
allergy("pollen")
, or - A
drug()
orproc()
.
Example -
'EXC'
'- Allergy or contraindication to the use of morphine'
'- allergy() or contraindication() to the use of drug("morphine")'
union(
allergy(
drug("morphine")
),
contraindication(
drug("morphine")
)
)
clin_score()
clin_score()
represents clinical scoring systems by which a patient is scored by.
Arguments -
- Quoted Text, e.g.,
clin_score("Eastern Cooperative Oncology Group")
Example -
'EXC'
'- Heart failure NYHA class III or IV ,'
'- cond("Heart failure") clin_score("NYHA") class eq(val("III"), val("IV")) ,'
union(
cond("Heart failure"),
clin_score("NYHA")
.num_filter(
eq(val("III"), val("IV"))
)
)
cond()
cond()
are conditions, illnesses, or any other kind of afflictions patients may have.
Arguments -
- Quoted Text, e.g.,
cond("hypertension")
, or - A function with no arguments is also acceptable as a general reference to any condition.
Example -
'- Type 1 or Type 2 Diabetes diagnosed in the past 2 years'
'- mod("Type 1") or mod("Type 2") cond("Diabetes") eq(temporal_per(PAST), val("2"), temporal_unit(YEAR))'
cond("Diabetes")
.mod("Type 1")
.mod("Type 2")
.temporality(
eq(temporal_per(PAST), val("2"), temporal_unit(YEAR))
)
code()
code()
are references to medical or other codes within coding systems such as ICD-10.
Arguments -
- Quoted Text, e.g.,
code("J14")
.
Example -
'- Diagnosed with rheumatic chorea ( ICD-10 I02.0 )'
'- Diagnosed with cond("rheumatic chorea") ( ICD-10 code("I02.0") )'
cond("rheumatic chorea")
.equiv(
code("I02.0")
)
drug()
drug()
represents medications given to a patient.
Arguments -
- Quoted Text, e.g.,
drug("psychotropic medications")
, or - A function with no arguments is also acceptable as a general reference to any drug.
Example -
'EXC'
'- Current use of psychotropic medications .'
'- eq(temporal_per(PRESENT)) use of drug("psychotropic medications") .'
drug("psychotropic medications")
.temporality(
eq(temporal_per(PRESENT))
)
enc()
enc()
represents encounters at a clinic or hospital.
Arguments -
- An all-caps enum-like value of one of the following:
INPATIENT
OUTPATIENT
EMERGENCY
TRANSFER
REFERRAL
, or
- A function with no argument is also acceptable as a general reference to any type of encounter.
Example -
'INC'
'adult patients ( age 18 and above ) who admitted to burn unit during sampling period'
'adult() patients ( eq(op(GTEQ),val("18")) ) who enc(INPATIENT) to
loc(unit("burn unit")) during sampling period'
intersect(
adult()
.equiv(
age().num_filter(eq(op(GTEQ), val("18")))
),
enc(INPATIENT)
.loc(unit("burn unit"))
)
lab()
lab()
represents a laboratory test performed.
Arguments -
- Quoted Text, e.g.,
drug("psychotropic medications")
, or - A function with no arguments is also acceptable as a general reference to any lab.
Example -
'EXC'
'- Chronic kidney disease with a Glomerular Filtration Rate < 50 ml / min'
'- chronic() cond("kidney disease") with a lab("Glomerular Filtration Rate")
eq(op(LT), val("50"), unit("ml"), per(MINUTE))'
intersect(
cond("kidney disease")
.chronic(),
lab("Glomerular Filtration Rate")
.num_filter(
eq(op(LT), val("50"), unit("ml"), per(MINUTE))
)
)
measurement()
measurement()
represents any sort of measurement that is not a lab, vital, or other specified type.
Arguments -
- Quoted Text, e.g.,
measurement("Macular thickness")
, or - A function with no arguments is also acceptable as a general reference to any lab.
Example -
'EXC'
'- Macular thickness above 300 microns at baseline'
'- measurement("Macular thickness") eq(op(GT), val("300"), unit("microns"))
at baseline'
measurement("Macular thickness")
.num_filter(
eq(op(GT), val("300"), unit("microns"))
)
org()
org()
represents an organism (often a bacteria).
Arguments -
- Quoted Text, e.g.,
org("Staphylococcus")
Example -
'INC'
'- First positive CRE culture within 48 hours of admission ( in case of hospitalization )'
'- eq(temporal_rec(FIRST_TIME)) pol(POSITIVE) org("CRE culture")
eq(op(LTEQ), val("48"), temporal_unit(HOUR), enc(INPATIENT)) of enc(INPATIENT)
( in case of enc(INPATIENT) )'
seq(
enc(INPATIENT),
after(
org("CRE culture")
.temporality(
eq(temporal_rec(FIRST_TIME))
)
.pol(POSITIVE),
eq(op(LTEQ), val("48"), temporal_unit(HOUR))
)
)
proc()
proc()
represents a procedure performed or treatment provided.
Arguments -
- Quoted Text, e.g.,
proc("chemotherapy")
, or - A function with no arguments is also acceptable as a general reference to any procedure.
Example -
'EXC'
'1. history of prior laser treatment or vitrectomy in the study eye ;'
'1. eq(temporal_per(PAST)) proc("laser treatment") or proc("vitrectomy")
in the study mod("eye") ;'
union(
proc("laser treatment"),
proc("vitrectomy")
)
.temporality(
eq(temporal_per(PAST))
)
.mod("eye")
obs()
ops()
represents any kind of general observation not otherwise specified.
Arguments -
- Quoted Text, e.g.,
obs("trauma")
, or - A function with no arguments is also acceptable as a general reference to any observation.
Example -
'EXC'
'- Severe orbital or ophthalmic injury'
'- severity(SEVERE) mod("orbital") or mod("ophthalmic") obs("injury")'
obs("injury")
.severity(SEVERE)
.mod("orbital")
.mod("ophthalmic")
social_habit()
social_habit()
represents a personal habit outside of a hospital setting.
Arguments -
- Quoted Text, e.g.,
social_habit("resistance exercise")
Example -
'INC'
'- Not drinking more than 2 alcoholic drinks per day'
'- neg() social_habit("drinking") eq(op(GT), val("2"), unit("alcoholic drinks"), per(DAY))'
neg(
social_habit("drinking")
.num_filter(
eq(op(GT), val("2"), unit("alcoholic drinks"), per(DAY))
)
)
spec()
spec()
represents a specimen, usual used as part of a lab or microbiology test.
Arguments -
- Quoted Text, e.g.,
spec("blood samples")
Example -
'EXC'
'- Children with congenital anomalies or without valid arterial and venous umbilical cord samples'
'- child() with cond("congenital anomalies") or neg() valid mod("arterial") and mod("venous") spec("umbilical cord samples")'
union(
child(),
union(
cond("congenital anomalies"),
neg(
spec("umbilical cord samples")
.mod("arterial")
.mod("venous")
)
)
)
survey_or_questionnaire()
survey_or_questionnaire()
represents a patients response to a survey or questionnaire.
Arguments -
- Quoted Text, e.g.,
survey_or_questionnaire("Personal Happiness Scale test")
Example -
'INC'
'2. Screen positive for PTSD ( Child Trauma Screening Questionnaire = 5 or higher )'
'2. Screen pol(POSITIVE) for cond("PTSD") (
survey_or_questionnaire("Child Trauma Screening Questionnaire")
eq(op(EQ), val("5"), op(GTEQ)) )'
cond("PTSD")
.pol(POSITIVE)
.equiv(
survey_or_questionnaire("Child Trauma Screening Questionnaire")
.num_filter(
eq(op(EQ), val("5"), op(GTEQ))
)
)
vital()
vital()
represents a blood pressure reading, weight, height, or related measurement type.
Arguments -
- Quoted Text, e.g.,
vital("body mass index")
Example -
'INC'
'- Systolic blood pressure ≥ 130 mmHg OR diastolic blood pressure ≥ 80 mmHg
( or on hypertension medication )'
'- vital("Systolic blood pressure") eq(op(GTEQ), val("130"), unit("mmHg"))
OR vital("diastolic blood pressure") eq(op(GTEQ), val("80"), unit("mmHg"))
( or eq(temporal_per(PRESENT)) cond("hypertension") drug() )'
union(
vital("Systolic blood pressure")
.num_filter(
eq(op(GTEQ), val("130"), unit("mmHg"))
),
vital("diastolic blood pressure")
.num_filter(
eq(op(GTEQ), val("80"), unit("mmHg"))
),
drug()
.for(
cond("hypertension")
)
.temporality(
eq(temporal_per(PRESENT))
)
)