Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
abf6a82
correct name and arity of previous vaccines more than 2
harshitgupta412 Apr 5, 2024
5d118ce
Merge branch 'main' into harshit-dev
harshitgupta412 Apr 12, 2024
d6508b6
Merge remote-tracking branch 'origin/abhinav-dev' into harshit-dev
harshitgupta412 Apr 12, 2024
d5e9313
page 20
harshitgupta412 Apr 12, 2024
041a05e
Merge branch 'unstable' into harshit-dev
harshitgupta412 Apr 23, 2024
d64cdc2
Merge branch 'abhinav-dev' into harshit-dev
harshitgupta412 Apr 23, 2024
e20b2af
add in cause for infertility
harshitgupta412 Apr 23, 2024
7dc2b9f
add data sources
harshitgupta412 Apr 23, 2024
717d567
Add descriptions to schema
harshitgupta412 Apr 26, 2024
be14dc1
add dme
harshitgupta412 Apr 26, 2024
dd4c830
add testcases for infertility and dme
harshitgupta412 May 3, 2024
c5bef28
Merge pull request #41 from codexstanford/abhinav-dev
harshitgupta412 May 3, 2024
38db5c0
Merge branch 'unstable' into harshit-dev
harshitgupta412 May 3, 2024
eb8fa20
correct schema
harshitgupta412 May 3, 2024
430488a
add test cases for transplant
harshitgupta412 May 3, 2024
daa9778
Merge branch 'unstable' into harshit-dev
harshitgupta412 May 3, 2024
caaed54
correct typos
harshitgupta412 May 5, 2024
fbd9c56
Merge pull request #19 from codexstanford/harshit-dev
labhinav May 6, 2024
39fee3e
Merge pull request #50 from codexstanford/main
labhinav May 18, 2024
c6dc5b3
update documentation for immunization
labhinav May 30, 2024
d5838c0
update documentation
labhinav May 30, 2024
e9ff7f1
Merge branch 'abhinav-dev' of https://github.com/codexstanford/cardin…
labhinav May 30, 2024
b987bf0
correct testcases
harshitgupta412 May 31, 2024
1c13a3c
Merge pull request #51 from codexstanford/abhinav-dev
harshitgupta412 May 31, 2024
e5e0a12
add specialized screening tests
labhinav Jun 3, 2024
659df9d
add specialized screening tests
labhinav Jun 3, 2024
6f5b6cc
Merge branch 'abhinav-dev' of https://github.com/codexstanford/cardin…
labhinav Jun 3, 2024
e485960
add lung cancer screening tests
labhinav Jun 3, 2024
945ef23
update documentation
labhinav Jun 3, 2024
2508fc3
Merge pull request #56 from codexstanford/abhinav-dev
harshitgupta412 Jun 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.DS_Store
data/*
.venv
*traces/*
159 changes: 154 additions & 5 deletions claims_analysis/cardinal_care/all_test_case_data.hdf
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
%% expected - covered(X) - claim3,claim5,claim6,claim8,claim11,claim12,
%% claim_a1, claim_a2, claim_a3, claim_a4, claim_a6, claim_a9, claim_a11,claim_a14,claim_a17
%% claim_a1, claim_a2, claim_a3, claim_a4, claim_a6, claim_a9, claim_a11,claim_a14,claim_a17,claim_a18, claim_a21, claim_a24

%% test cases for routine_physical

Expand Down Expand Up @@ -495,7 +495,7 @@ person.occupation(person_a14,other)
person.immunocompromised(person_a14,no)
claim.consequence_of_occupation(claim_a14,no)
claim.location(claim_a14,phys_office)
claim.previous_vaccines_flu_more_than_2(claim_a14,no)
claim.previous_vaccines_flu_more_than_equal_2(claim_a14,no)
claim.vaccine_dose_count(claim_a14,2)

claim.policy(claim_a15,policy1)
Expand All @@ -513,7 +513,7 @@ person.occupation(person_a15,other)
person.immunocompromised(person_a15,no)
claim.consequence_of_occupation(claim_a15,no)
claim.location(claim_a15,phys_office)
claim.previous_vaccines_flu_more_than_2(claim_a15,yes)
claim.previous_vaccines_flu_more_than_equal_2(claim_a15,yes)
claim.vaccine_dose_count(claim_a15,2)

claim.policy(claim_a16,policy1)
Expand All @@ -531,7 +531,7 @@ person.occupation(person_a16,other)
person.immunocompromised(person_a16,no)
claim.consequence_of_occupation(claim_a16,no)
claim.location(claim_a16,phys_office)
claim.previous_vaccines_flu_more_than_2(claim_a16,yes)
claim.previous_vaccines_flu_more_than_equal_2(claim_a16,yes)
claim.vaccine_dose_count(claim_a16,2)

claim.policy(claim_a17,policy1)
Expand All @@ -549,5 +549,154 @@ person.occupation(person_a17,other)
person.immunocompromised(person_a17,no)
claim.consequence_of_occupation(claim_a17,no)
claim.location(claim_a17,phys_office)
claim.previous_vaccines_flu_more_than_2(claim_a17,yes)
claim.previous_vaccines_flu_more_than_equal_2(claim_a17,yes)
claim.vaccine_dose_count(claim_a17,1)


%% test cases for comprehensive_infertility_services

%% expected - covered(claim_a18) - yes
%% covered(claim_a19) - no. incorrect cause
%% covered(claim_a20) - no. not covered service
claim.policy(claim_a18,policy_a18)
claim.claimant(claim_a18,person_a18)
policy.insuree(policy_a18,person_a18)
policy.startdate(policy_a18,person_a18,01_08_2023)
policy.enddate(policy_a18,person_a18,30_06_2024)
claim.hosp_start_time(claim_a18,03_09_2023,00_00)
claim.hosp_end_time(claim_a18,03_09_2023,01_13)
claim.hospital(claim_a18,stanford_medical_center)
claim.reason(claim_a18,comprehensive_infertility_services)
person.dob(person_a18,04_02_2023)
person.occupation(person_a18,other)
person.immunocompromised(person_a18,no)
claim.consequence_of_occupation(claim_a18,no)
claim.is_infertile(claim_a18, yes)
claim.had_sterlization(claim_a18, no)
claim.infertility_service(claim_a18, artificial_insemination)
claim.cause_of_infertility(claim_a18, mild_endometriosis)


claim.policy(claim_a19,policy_a19)
claim.claimant(claim_a19,person_a19)
policy.insuree(policy_a19,person_a19)
policy.startdate(policy_a19,person_a19,01_08_2023)
policy.enddate(policy_a19,person_a19,30_06_2024)
claim.hosp_start_time(claim_a19,03_09_2023,00_00)
claim.hosp_end_time(claim_a19,03_09_2023,01_13)
claim.hospital(claim_a19,stanford_medical_center)
claim.reason(claim_a19,comprehensive_infertility_services)
person.dob(person_a19,04_02_2023)
person.occupation(person_a19,other)
person.immunocompromised(person_a19,no)
claim.consequence_of_occupation(claim_a19,no)
claim.is_infertile(claim_a19, yes)
claim.had_sterlization(claim_a19, no)
claim.infertility_service(claim_a19, artificial_insemination)
claim.cause_of_infertility(claim_a19, other)

claim.policy(claim_a20,policy_a20)
claim.claimant(claim_a20,person_a20)
policy.insuree(policy_a20,person_a20)
policy.startdate(policy_a20,person_a20,01_08_2023)
policy.enddate(policy_a20,person_a20,30_06_2024)
claim.hosp_start_time(claim_a20,03_09_2023,00_00)
claim.hosp_end_time(claim_a20,03_09_2023,01_13)
claim.hospital(claim_a20,stanford_medical_center)
claim.reason(claim_a20,comprehensive_infertility_services)
person.dob(person_a20,04_02_2023)
person.occupation(person_a20,other)
person.immunocompromised(person_a20,no)
claim.consequence_of_occupation(claim_a20,no)
claim.is_infertile(claim_a20, yes)
claim.had_sterlization(claim_a20, no)
claim.infertility_service(claim_a20, ivf)
claim.cause_of_infertility(claim_a20, mild_endometriosis)


%% test cases for durable_medical_and_surgical_equipment

%% expected - covered(claim_a21) - yes
%% covered(claim_a22) - no. equipment type not supported by corresponding provider
%% covered(claim_a20) - no. provider not in tier 1
claim.policy(claim_a21,policy_a21)
claim.claimant(claim_a21,person_a21)
policy.insuree(policy_a21,person_a21)
policy.startdate(policy_a21,person_a21,01_08_2023)
policy.enddate(policy_a21,person_a21,30_06_2024)
claim.hosp_start_time(claim_a21,03_09_2023,00_00)
claim.hosp_end_time(claim_a21,03_09_2023,01_13)
claim.hospital(claim_a21,stanford_medical_center)
claim.reason(claim_a21,durable_medical_and_surgical_equipment)
person.dob(person_a21,04_02_2023)
person.occupation(person_a21,other)
person.immunocompromised(person_a21,no)
claim.consequence_of_occupation(claim_a21,no)
claim.dme_provider(claim_a21, byram_healthcare)
claim.equipment_type(claim_a21, diabetic_testing_supplies)

claim.policy(claim_a22,policy_a22)
claim.claimant(claim_a22,person_a22)
policy.insuree(policy_a22,person_a22)
policy.startdate(policy_a22,person_a22,01_08_2023)
policy.enddate(policy_a22,person_a22,30_06_2024)
claim.hosp_start_time(claim_a22,03_09_2023,00_00)
claim.hosp_end_time(claim_a22,03_09_2023,01_13)
claim.hospital(claim_a22,stanford_medical_center)
claim.reason(claim_a22,durable_medical_and_surgical_equipment)
person.dob(person_a22,04_02_2023)
person.occupation(person_a22,other)
person.immunocompromised(person_a22,no)
claim.consequence_of_occupation(claim_a22,no)
claim.dme_provider(claim_a22, byram_healthcare)
claim.equipment_type(claim_a22, bipap_supplies)

claim.policy(claim_a23,policy_a23)
claim.claimant(claim_a23,person_a23)
policy.insuree(policy_a23,person_a23)
policy.startdate(policy_a23,person_a23,01_08_2023)
policy.enddate(policy_a23,person_a23,30_06_2024)
claim.hosp_start_time(claim_a23,03_09_2023,00_00)
claim.hosp_end_time(claim_a23,03_09_2023,01_13)
claim.hospital(claim_a23,stanford_medical_center)
claim.reason(claim_a23,durable_medical_and_surgical_equipment)
person.dob(person_a23,04_02_2023)
person.occupation(person_a23,other)
person.immunocompromised(person_a23,no)
claim.consequence_of_occupation(claim_a23,no)
claim.dme_provider(claim_a23, after_the_fall)
claim.equipment_type(claim_a23, bipap_supplies)

%% test cases for transplant_travel_and_lodging

%% expected - covered(claim_a24) - yes
%% covered(claim_a25) - no. recepient not a covered person
claim.policy(claim_a24,policy_a24)
claim.claimant(claim_a24,person_a24)
policy.insuree(policy_a24,person_a24)
policy.startdate(policy_a24,person_a24,01_08_2023)
policy.enddate(policy_a24,person_a24,30_06_2024)
policy.covered_people(policy_a24, [person_a24])
claim.hosp_start_time(claim_a24,03_09_2023,00_00)
claim.hosp_end_time(claim_a24,03_09_2023,01_13)
claim.hospital(claim_a24,stanford_medical_center)
claim.reason(claim_a24,transplant_travel_and_lodging)
person.dob(person_a24,04_02_2023)
person.occupation(person_a24,other)
person.immunocompromised(person_a24,no)
claim.recipient(claim_a24,person_a24)

claim.policy(claim_a25,policy_a25)
claim.claimant(claim_a25,person_a25)
policy.insuree(policy_a25,person_a25)
policy.startdate(policy_a25,person_a25,01_08_2023)
policy.enddate(policy_a25,person_a25,30_06_2024)
policy.covered_people(policy_a25, [person_a25])
claim.hosp_start_time(claim_a25,03_09_2023,00_00)
claim.hosp_end_time(claim_a25,03_09_2023,01_13)
claim.hospital(claim_a25,stanford_medical_center)
claim.reason(claim_a25,transplant_travel_and_lodging)
person.dob(person_a25,04_02_2023)
person.occupation(person_a25,other)
person.immunocompromised(person_a25,no)
claim.recipient(claim_a25,person_a21)
117 changes: 95 additions & 22 deletions claims_analysis/cardinal_care/cardinal_care.hrf
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,28 @@ eligible_service(C,P,Service):-
claim.location(C,L) &
valid_location(Service,L).

% service provider and location
eligible_service(C,P,X):-
covered_list_with_service_provider_and_location(List) &
member(X,List) &
claim.service_provider(C,O) &
valid_service_provider(X,O) &
claim.location(C,L) &
valid_location(X,L).

% services that have only location restriction
eligible_service(C,P,X):-
covered_list_with_location(List) &
member(X,List) &
claim.location(C,L) &
valid_location(X,L).

% yearly limit
eligible_service(C,P,X):-
covered_list_with_yearly_limit(List) &
member(X,List) &
check_policy_year_limit(C,Service)

% services that have only service provider restriction
eligible_service(C,P,X):-
covered_list_with_service_provider(List) &
Expand All @@ -78,7 +93,7 @@ eligible_service(C,P,specialized_screening_counseling):-
eligible_service(C,P,specialized_screening_counseling):-
claim.screening_type(C,cancer) &
claim.cancer_type(C,lung) &
evaluate(countofall(X,lung_cancer_past_twelve_months(C,X)),0).
evaluate(countofall(X,lung_cancer_past_twelve_months(C,X)),1).

eligible_service(C,P,specialized_screening_counseling):-
claim.screening_type(C,cancer) &
Expand Down Expand Up @@ -120,6 +135,7 @@ eligible_service(C,P,preventive_care):-
claim.vaccine_dose_count(C,D) &
leq(D,N).

% https://www.cdc.gov/mmwr/volumes/72/rr/rr7202a1.htm
% Not implementing as these are recommendations and not mandatory requirements
% LAIV4 should not be used during pregnancy but can be used postpartum.
% >= 65: recommend inactivated influenza vaccine (HD-IIV4), quadrivalent recombinant influenza vaccine (RIV4), or quadrivalent adjuvanted inactivated influenza vaccine (aIIV4).
Expand All @@ -139,29 +155,41 @@ eligible_service(C,P,preventive_care):-
leq(D,N).

eligible_service(C,P,female_contraceptives):-
claim.claimant(C,Cl) &
claim.contraceptive_service(C,Service) &
fda_approved(Service) &
claim.location(C,L) &
contraceptive_location_check(Service,L).

eligible_service(C,P,inpatient_surgical_services):-
claim.location(C,L) &
valid_location(inpatient_surgical_services,L) &
claim.service_provider(C,O) &
valid_service_provider(inpatient_surgical_services, O).

eligible_service(C,P,outpatient_surgical_services):-
claim.location(C,L) &
valid_location(outpatient_surgical_services,L) &
claim.service_provider(C,O) &
valid_service_provider(outpatient_surgical_services, O).
eligible_service(C,P,transplant_travel_and_lodging):-
claim.recipient(C,Recipient) &
policy.covered_people(P,List) &
member(Recipient,List).

eligible_service(C,P,comprehensive_infertility_services):-
claim.is_infertile(C,yes) &
claim.had_sterlization(C, no) &
claim.cause_of_infertility(C, Cause) &
valid_infertility_cause_for_artificial_insemination(List) &
member(Cause, List) &
claim.infertility_service(C,artificial_insemination) &
check_policy_year_limit(C,artificial_insemination).
% not covered: injectible_infertility_medication,
% (Part of ART)thawing_frozen_eggs_sperm, donor_charges, surrogacy_charges, gestational_charges, home_kits, ovulation_induction
% IVF, ZIFT, GIFT, cryptopreserved_embryos_transfer_or_service
% https://www.aetna.com/cpb/medical/data/300_399/0327.html


eligible_service(C,P,durable_medical_and_surgical_equipment):-
claim.dme_provider(C,Provider) &
tier_one_dme_providers(List) &
member(Provider,List) &
claim.equipment_type(C,Type) &
dme_products(Provider,Products) &
member(Type,Products) &
dme_excluded_list(Excluded) &
~member(Type, Excluded).


eligible_service(C,P,outpatient_surgery_facility_charges):-
claim.location(C,L) &
valid_location(outpatient_surgery_facility_charges,L).

%%%%%%%%%%%%%%%%%%% Range Limit Checks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Age limits for children are taken from https://www.cdc.gov/vaccines/schedules/hcp/imz/child-schedule-notes.html#
% Age limits for adults are taken from https://www.cdc.gov/vaccines/schedules/hcp/imz/adult-schedule-notes.html
Expand Down Expand Up @@ -373,10 +401,13 @@ lung_cancer_past_twelve_months(Claim1,Claim2):-
claim.screening_type(Claim2,cancer) &
claim.cancer_type(Claim1,lung) &
claim.cancer_type(Claim2,lung) &
claim.time(Claim1,C1_D,C1_T) &
claim.time(Claim2,C2_D,C2_T) &
evaluate(parsedate(C1_D),[D,M,Y]) &
evaluate(parsedate(C2_D),[D2,M2,Y2]) &
get_date_diff(C1_D, C2_D, Age) &
same(Age, 0)
get_date_diff_in_months(C1_D, C2_D, Months) &
leq(Months,12) &
leq(0, Months).

% Count number of visits for a service in the policy year
check_policy_year_limit(C,Service):-
Expand Down Expand Up @@ -460,6 +491,7 @@ yearly_visit_limit(routine_physical,0,22,0).
yearly_visit_limit(routine_physical,22,200,1)
yearly_visit_limit(gynecological_exam,0,200,1).
yearly_visit_limit(home_health_care,0,200,100).
yearly_visit_limit(artificial_insemination,0,200,6)

valid_location(routine_physical,phys_office).
valid_location(preventive_care,phys_office).
Expand Down Expand Up @@ -488,6 +520,8 @@ valid_location(home_health_care,home)
valid_location(non_surgical_physican_service,hospital)
valid_location(well_newborn_nursery_care,hospital)
valid_location(well_newborn_nursery_care,birthing_center)
valid_location(inpatient_mental_health,hospital)


contraceptive_location_check(Service, contra_office).
contraceptive_location_check(sterilization_surgery_for_women,L).
Expand All @@ -509,12 +543,27 @@ valid_service_provider(voluntary_sterilization_reversal, specialist_surgeon)


valid_screening_list([obesity,healthy_diet,alcohol_drug_misuse,tobacco_missuse,depression,sti,
genetic_risk_cancer_breast_ovarian,stress_management,chronic_condition,lactation,prenatal_postpartum]).
covered_list_with_location([physician_consultation,allergy,inpatient_care,non_surgical_physican_service,inpatient_surgical_services,well_newborn_nursery_care,home_health_care]) % list of services that are covered with location restrictions

genetic_risk_cancer_breast_ovarian,stress_management,chronic_condition,lactation,prenatal_postpartum]).
covered_list_with_location([physician_consultation,allergy,inpatient_care,non_surgical_physican_service,inpatient_surgical_services,well_newborn_nursery_care,home_health_care,inpatient_mental_health,outpatient_surgery_facility_charges]) % list of services that are covered with location restrictions

covered_list_with_service_provider([abortion,voluntary_sterilization_reversal]) % list of services that are covered with service provider restrictions
covered_list([breast_pump_supplies,hospice,skilled_nursing,skilled_nursing,maternity_care]). %always covered
covered_list_with_service_provider_and_location([inpatient_surgical_services, outpatient_surgical_services]) % list of services that are covered with service provider restrictions and location restrictions
covered_list([breast_pump_supplies,hospice,skilled_nursing,maternity_care, outpatient_mental_office_visit, outpatient_mental_other_services, advanced_reproductive_technology_care]). %always covered
home_not_covered_list([transportation,homemaker_service,home_delivery,maintenance_therapy]).

% https://www.aetna.com/cpb/medical/data/300_399/0327.html
% a. infertile couples with mild male-factor fertility problems; (when 2 or more semen analyses, measured at least two weeks apart, have 1 or more variables below the 5th percentile)
% b. unexplained infertility problems;
% c. minimal to mild endometriosis;
% d. medically refractory erectile dysfunction or vaginismus preventing intercourse;
% e. couples where the man is HIV positive and undergoing sperm washing;
% f. couples undergoing menotropin ovarian stimulation; or
% g. clomiphene-citrate-stimulated artificial insemination (intra-cervical insemination or IUI) medically necessary for infertile women with WHO Group II ovulation disorders such as polycystic ovarian syndrome who ovulate with clomiphene citrate but have not become pregnant after ovulation induction with clomiphene.
valid_infertility_cause_for_artificial_insemination([mild_male_problems, unexplained, mild_endometriosis, ed_or_vaginismus_preventing, male_hiv_positive, menotropin_stimulation, group_two_disorders])


% From https://www.fda.gov/consumers/free-publications-women/birth-control
fda_approved(counseling).
fda_approved(rod).
fda_approved(larc).
Expand All @@ -537,6 +586,22 @@ fda_approved(spermicide).
fda_approved(levonorgestrel_15_mg).
fda_approved(ulipristal_acetate).


% vendors for dme. Taken from https://vaden.stanford.edu/news/durable-medical-equipment-dme-and-laboratory-benefits-under-cardinal-care
tier_one_dme_providers([byram_healthcare,advanced_diabetes_supply,edgepark_medical,apria])

% products by each provider
% https://www.aetna.com/dsepublicContent/assets/pdf/en/DME_National_Provider_Listing.pdf
% https://www.northcoastmed.com/browse-our-products/

dme_products(byram_healthcare, [diabetic_testing_supplies, ostomy_supplies, urological_supplies, wound_care, breast_pumps_and_supplies, continuous_glucose_monitors, blood_pressure_monitors ])
dme_products(advanced_diabetes_supply, [diabetic_testing_supplies, continuous_glucose_monitors, insulin_pumps_and_supplies, insulin, inpen, glucose_meters])
dme_products(edgepark_medical, [diabetic_testing_supplies, ostomy_supplies, urological_supplies, wound_care, incontinence, insulin_pumps_and_supplies, continuous_glucose_monitors, breast_pumps_and_supplies, pleurx_kits ])
dme_products(apria, [oxygen_concentrators, ventilators, cpap_supplies, bipap_supplies, ambulatory_aids, hospital_beds, sad_light_boxes, knee_walker ])


dme_excluded_list([whirlpools,portable_whirlpool_pumps,sauna_baths,massage_devices,over_bed_tables,elevators,communication_aids,vision_aids,telephone_alert_systems,personal_hygiene_and_convenience_items])

%%%%%%%%%%%%%%%%%%% Helper Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

get_timestamp_from_datetime(DATE,TIME,STAMP) :-
Expand Down Expand Up @@ -583,3 +648,11 @@ minor_or_dependent(C,Cl):-
get_date_diff(C_D, DOB, Age) &
leq(Age,17).

person.immunocompromised(Cl,Immuno_Status):-
person.condition(Cl,immunocompromised) &
eval(yes, Immuno_Status).

person.immunocompromised(Cl,Immuno_Status):-
~person.condition(Cl,immunocompromised) &
eval(no, Immuno_Status).

Loading