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()

allergy() represent allergies to a drug or other object or thing.

Arguments -

  • Quoted Text, e.g., allergy("pollen"), or
  • A drug() or proc().

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))
        )
)