Skip to content

Commit

Permalink
feat(#608): add new phenotype guideline
Browse files Browse the repository at this point in the history
  • Loading branch information
tamslo committed May 11, 2023
1 parent cabab52 commit 2491f55
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 18 deletions.
47 changes: 35 additions & 12 deletions scripts/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,18 @@ def add_missing_drugs(data, updated_external_data):
add_log.append(log_item(drug_name))
return data, add_log

def get_guideline_phenotypes(guidelines):
guideline_phenotypes = []
for guideline in guidelines:
phenotype_key = get_phenotype_key(guideline)
if phenotype_key in guideline_phenotypes:
raise Exception('Phenotypes should be unique per drug guideline!')
guideline_phenotypes.append(phenotype_key)
return guideline_phenotypes

def remove_outdated_guidelines(data, drug, guidelines, updated_guidelines):
remove_log = []
updated_guideline_phenotypes = []
for updated_guideline in updated_guidelines:
phenotype_key = get_phenotype_key(updated_guideline)
if phenotype_key in updated_guideline_phenotypes:
raise Exception('Phenotypes should be unique per drug guideline!')
updated_guideline_phenotypes.append(phenotype_key)
updated_guideline_phenotypes = get_guideline_phenotypes(updated_guidelines)
stale_guidelines = list(filter(
lambda guideline: get_phenotype_key(guideline) not in \
updated_guideline_phenotypes,
Expand Down Expand Up @@ -115,12 +119,31 @@ def remove_outdated_guidelines(data, drug, guidelines, updated_guidelines):
def update_guidelines(data, guidelines, updated_guidelines):
update_log = []
update_log.append(log_item('TODO: update guidelines', level=1))
return guidelines, update_log
return update_log

def add_missing_guidelines(data, guidelines, updated_guidelines):
def add_missing_guidelines(data, drug, guidelines, updated_guidelines):
add_log = []
add_log.append(log_item('TODO: add guidelines', level=1))
return guidelines, add_log
present_guideline_phenotypes = get_guideline_phenotypes(guidelines)
new_guidelines = list(filter(
lambda guideline: get_phenotype_key(guideline) not in \
present_guideline_phenotypes,
updated_guidelines
))
new_guideline_ids = list(map(
lambda guideline: guideline['_id'],
new_guidelines
))
if len(new_guidelines) > 0:
update_version(data, DRUG_COLLECTION_NAME, drug)
drug['guidelines'] += new_guideline_ids
data[GUIDELINE_COLLECTION_NAME] += new_guidelines
add_log += list(map(
lambda guideline: log_item(
f'Added guideline for {get_phenotype_key(guideline)}',
level=1),
new_guidelines
))
return add_log

def update_drugs(data, updated_external_data):
update_log = []
Expand Down Expand Up @@ -158,8 +181,8 @@ def update_drugs(data, updated_external_data):
data, current_drug, current_guidelines, updated_guidelines)
drug_updates += \
update_guidelines(data, current_guidelines, updated_guidelines)
drug_updates += \
add_missing_guidelines(data, current_guidelines, updated_guidelines)
drug_updates += add_missing_guidelines(
data, current_drug, current_guidelines, updated_guidelines)

if len(drug_updates) != 0:
update_log.append(drug_log_item)
Expand Down
22 changes: 16 additions & 6 deletions scripts/update_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ def build_data(drug_guideline_map, rx_norms={}, phenotypes={}):
ADDED_DRUG = 'drug and guidelines should be added'
RX_NORM_CHANGED_DRUG = 'drug rxNorm changed'
GUIDELINE_REMOVED_DRUG = 'drug with guideline for phenotype removed'
GUIDELINE_ADDED_DRUG = 'drug with guideline for new phenotype'
ADDED_GUIDELINE_ID = 'new.add-guideline'
STANDARD_PHENOTYPES = [{
'CYP2C19': [ 'Poor Metabolizer' ],
'CYP2D6': [ 'Poor Metabolizer' ]
Expand All @@ -82,6 +84,7 @@ def data():
UNCHANGED_DRUG: ['old.unchanged.1', 'old.unchanged.2'],
RX_NORM_CHANGED_DRUG: ['old.rx-change.1', 'old.rx-change.2'],
GUIDELINE_REMOVED_DRUG: ['old.rm-guideline', 'old.keep-guideline'],
GUIDELINE_ADDED_DRUG: ['old.present-guideline']
}
rx_norms = { RX_NORM_CHANGED_DRUG: 'rx.old' }
phenotypes = {
Expand All @@ -100,6 +103,8 @@ def updated_data():
ADDED_DRUG: ['new.add-drug.1', 'new.add-drug.2'],
RX_NORM_CHANGED_DRUG: ['new.rx-change.1', 'new.rx-change.2'],
GUIDELINE_REMOVED_DRUG: ['new.keep-guideline'],
GUIDELINE_ADDED_DRUG: ['new.present-guideline', ADDED_GUIDELINE_ID]

}
rx_norms = { RX_NORM_CHANGED_DRUG: 'rx.new' }
phenotypes = {
Expand Down Expand Up @@ -150,12 +155,15 @@ def test_update_drugs(data, updated_data):
copy.deepcopy(expected_data[GUIDELINE_COLLECTION_NAME][7]))
del expected_data[GUIDELINE_COLLECTION_NAME][7]

# from pprint import pprint
# pprint(data)
# pprint(expected_data)

# New (phenotype) guideline is added to drug and guidelines; drug and
# guideline histories added
# New (phenotype) guideline is added to drug and guidelines; drug
# history added
expected_data[DRUG_HISTORY_COLLECTION_NAME].append(
copy.deepcopy(expected_data[DRUG_COLLECTION_NAME][4]))
expected_data[DRUG_COLLECTION_NAME][4]['guidelines'].append(
ADDED_GUIDELINE_ID)
expected_data[DRUG_COLLECTION_NAME][4]['_v'] += 1
expected_data[GUIDELINE_COLLECTION_NAME].append(
copy.deepcopy(updated_data[GUIDELINE_COLLECTION_NAME][8]))
# TODO

# Guideline lookupkey is updated; guideline history added
Expand All @@ -177,6 +185,8 @@ def test_update_drugs(data, updated_data):
data[DRUG_COLLECTION_NAME][2]['_vDate']
expected_data[DRUG_COLLECTION_NAME][3]['_vDate'] = \
data[DRUG_COLLECTION_NAME][3]['_vDate']
expected_data[DRUG_COLLECTION_NAME][4]['_vDate'] = \
data[DRUG_COLLECTION_NAME][4]['_vDate']
# import pprint
# print('Expected:')
# pprint.pprint(expected_data)
Expand Down

0 comments on commit 2491f55

Please sign in to comment.