def surgery_block_information_3(self):
     module_name = self.module_list[3]
     review_surgery_date, review_surgery_source, review_surgery_diagnosis, review_surgery_diagnosis_comment, \
     review_surgery_block_id, review_surgery_er, review_surgery_er_percent, review_surgery_pr, review_surgery_pr_percent, \
     review_surgery_her2, review_surgery_her2_grade, review_surgery_fish, review_surgery_ki67 = ['NA', ] * 13
     data_list = ['NA', ] * 13
     check = False
     while not check:
         review = ask.ask_y_n('Has a review (of diagnosis or IHC details) been done of this surgery block?')
         if review:
             review_surgery_date = ask.check_date('Date of review (if multiple dates?): ')
             review_surgery_source = input(
                 'Name of Review Laboratory (Enter multiple if required Lab_test): ')
             review_surgery_diagnosis = input('Enter diagnosis of review: ')
             review_surgery_diagnosis_comment = input('Additional comments for review diagnosis: ')
             review_surgery_block_id = self.surgery_block_id
             block_id = ask.ask_y_n('Has the block been relabelled in the review?')
             if block_id:
                 old_block_id = input('Please enter old block id: ')
                 new_block_id = input('Please enter new block id: ')
                 review_surgery_block_id = old_block_id + ' relabelled to ' + new_block_id
             review_ihc = ask.ask_y_n('Has the IHC result for any marker been reviewed by another lab?')
             if review_ihc:
                 review_surgery_er, review_surgery_er_percent, review_surgery_pr, review_surgery_pr_percent, \
                 review_surgery_her2, review_surgery_her2_grade, review_surgery_fish, review_surgery_ki67 = \
                     BlockDescription.ihc_report('review_surgery')
         data_list = [review_surgery_date, review_surgery_source, review_surgery_diagnosis,
                      review_surgery_diagnosis_comment, review_surgery_block_id, review_surgery_er,
                      review_surgery_er_percent, review_surgery_pr, review_surgery_pr_percent, review_surgery_her2,
                      review_surgery_her2_grade, review_surgery_fish, review_surgery_ki67]
         col_list = names(module_name)
         check = sql.review_input(self.file_number, col_list[:-2], data_list)
     data = data_list + [self.user_name, sql.last_update()]
     return data
 def add_path_report(self, table):
     file_number = 'test'
     table_type = table.split("_")[0]
     folder_next = True
     while folder_next:
         check = False
         while not check:
             file_number = input("File Number: ")
             print("File Number: " + file_number)
             check = ask.ask_y_n("Is this file number correct")
         block_list_table = BlockInformation(self.conn, self.cursor,
                                             file_number)
         pk, block_id, number_of_blocks = block_list_table.get_block_pk(
             self.user_name, col_filter_value=table_type)
         #print(block_id, number_of_blocks)
         check_path_report_entry(conn=self.conn,
                                 cursor=self.cursor,
                                 file_number=file_number,
                                 table_to_check=table,
                                 pk=pk,
                                 block_id=block_id,
                                 number_of_blocks=number_of_blocks,
                                 user_name=self.user_name)
         folder_next = ask.ask_y_n("Add/update another file for table " +
                                   table + "?")
 def add_data(self):
     col_list = names(self.module_list[0])
     enter = ask.ask_y_n("Enter " + self.print_statements[0])
     if enter:
         data = self.surgery_block_information_0()
         sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk,
                                 data=data)
     col_list = names(self.module_list[1])
     enter = ask.ask_y_n("Enter " + self.print_statements[1])
     if enter:
         data, block_desc_df = self.surgery_block_information_1
         sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk,
                                 data=data)
         block_desc_df.to_sql("block_data", self.conn, index=False, if_exists="append")
     col_list = names(self.module_list[2])
     enter = ask.ask_y_n("Enter " + self.print_statements[2])
     if enter:
         data = self.surgery_block_information_2()
         sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk,
                                 data=data)
     col_list = names(self.module_list[3])
     enter = ask.ask_y_n("Enter " + self.print_statements[3])
     if enter:
         data = self.surgery_block_information_3()
         sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk,
                                 data=data)
Beispiel #4
0
def add_data(conn, cursor, file_number, user_name):
    table = "radiology"
    #file_row(cursor, file_number)
    enter = ask_y_n("Enter Mammography Report?")
    if enter:
        data = mammography(conn, cursor, file_number)
        add_update_sql.update_multiple(conn, cursor, table,
                                       names("mammography"), file_number, data)
    enter = ask_y_n("Enter 3D Tomosynthesis?")
    if enter:
        data = tomosynthesis(file_number)
        add_update_sql.update_multiple(conn, cursor, table,
                                       names("tomosynthesis"), file_number,
                                       data)
    enter = ask_y_n("Enter Automated Breast Volume Scanner")
    if enter:
        data = abvs(file_number)
        add_update_sql.update_multiple(conn, cursor, table, names("abvs"),
                                       file_number, data)
    enter = ask_y_n("Enter Sono-Mammography")
    if enter:
        data = sonomammo(conn, cursor, file_number)
        add_update_sql.update_multiple(conn, cursor, table, names("sonomammo"),
                                       file_number, data)
    enter = ask_y_n("Enter MRI-Breast")
    if enter:
        data = mri_breast(conn, cursor, file_number, user_name)
        add_update_sql.update_multiple(conn, cursor, table,
                                       names("mri_breast"), file_number, data)
 def add_block_list(self):
     block_list = NewBlock(self.conn, self.cursor, self.user_name)
     add_data = True
     while add_data:
         categories = ['Add Block', 'Edit Block', 'Exit']
         new_update = ask.ask_list('you want to do?', categories)
         if new_update == 'Edit Block':
             block_list.edit_data()
             add_data = ask.ask_y_n(
                 'Do you want to add/edit another block?')
         elif new_update == 'Add Block':
             file_number = 'test'
             check_file = False
             while not check_file:
                 file_number = input("Enter File Number: ")
                 print("File Number: " + file_number)
                 check_file = ask.ask_y_n("Is this file number correct")
             if not sql.check_file_number_exist(
                     self.cursor, file_number, table='block_list'):
                 block_list.add_data(file_number)
             else:
                 print(
                     'This file_number already exists. Add a new block if for '
                     + file_number)
                 block_type = ask.ask_list('Block type',
                                           ['biopsy', 'surgery'])
                 block_list.add_new_pk(file_number, block_type)
             add_data = ask.ask_y_n(
                 'Do you want to add/edit another block?')
         else:
             add_data = False
def cancer_table(conn, cursor, file_number):
    table_cancer = "previous_cancer_history"
    type_of_cancer_list = []
    year_diagnosis_list = []
    treat_all = []
    type_all = []
    duration_all = []
    data_return = []
    add_cancer = True
    while add_cancer:
        type_of_cancer = input("Type of Cancer: ")
        type_of_cancer_list.append(type_of_cancer)
        year_diagnosis = input("Year of diagnosis: ")
        year_diagnosis_list.append(year_diagnosis)
        col = ("File_number, Type_Cancer, Year_diagnosis")
        data = file_number, type_of_cancer, year_diagnosis
        sql.insert(conn, cursor, table_cancer, col, data)
        print("Please enter the type of treatment used: ")
        treat_list = []
        type_list = []
        duration_list = []
        treated, type, duration = ("NA", ) * 3
        for treatment in PatientInfo.previous_cancer_treatment:
            treat = ask_y_n(treatment)
            if treat:
                treat_list.append(treatment)
                type_treat = input("Type of " + treatment)
                type_list.append(type_treat)
                duration_treat = input("Duration of " + treatment)
                duration_list.append(duration_treat)
                data = treatment, type_treat, duration_treat
                columns = [
                    treatment, ("type_" + treatment), ("duration_" + treatment)
                ]
                treated = "; ".join(treat_list)
                type = "; ".join(type_list)
                duration = "; ".join(duration_list)
                sql.update_multiple(conn, cursor, table_cancer, columns,
                                    file_number, data)
            elif not treat:
                index_no = "No " + treatment
                type_treat, duration_treat = ("NA", ) * 2
                data = index_no, type_treat, duration_treat
                columns = [
                    treatment, ("type_" + treatment), ("duration_" + treatment)
                ]
                sql.update_multiple(conn, cursor, table_cancer, columns,
                                    file_number, data)
        treat_all.append(treated)
        type_all.append(type)
        duration_all.append(duration)
        add_cancer = ask_y_n("Additional cancer history")
    all_data = [
        type_of_cancer_list, year_diagnosis_list, treat_all, type_all,
        duration_all
    ]
    for index in all_data:
        data_joint = "|".join(index)
        data_return.append(data_joint)
    return tuple(data_return)
Beispiel #7
0
def metastasis(file_number, user_name):
    check = False
    while not check:
        met_has = ask.ask_y_n(
            "Has the patient been examined for metastatic disease?")
        if not met_has:
            met_has = "Not examined for metastatic disease"
        else:
            met_has = "Examined for metastatic disease"
        date_last = ask.check_date("Date of last follow-up: ")
        recur = ask.ask_y_n("Has the patient experienced a recurrence?")
        if recur:
            time_recur = input("Time to disease recurrence: ")
            nature_recur = ask.ask_option("Nature of recurrence",
                                          ["Distant", "Local", "Other"])
            if nature_recur == "Distant":
                distant_site = input("Site of distant recurrence: ")
            else:
                distant_site = "NA"
        else:
            time_recur, nature_recur, distant_site = ("NA", ) * 3
        status = patient_status()
        data_list = [
            met_has, date_last, time_recur, nature_recur, distant_site, status,
            user_name,
            last_update()
        ]
        col_list = names.names_longterm("metastasis")
        check = review_input(file_number, col_list, data_list)
    return data_list
Beispiel #8
0
def clinical_tests():
    other_tests = {'USG Abdomen': ['Abnormal'],
                   'CECT Abdomen and Thorax': ['Visceral Metastasis'],
                   'PET Scan': ['Visceral Metastasis', 'Skeletal Metastasis'],
                   'Bone Scan': ['Skeletal Metastasis']}
    test_key = list(other_tests.keys())
    data_list = []
    for test in test_key:
        test_name = test
        test_done = ask.ask_y_n("Has "+test_name+" been done?")
        if test_done:
            test_done = test_name+" done"
            data_list.append(test_done)
            abnormal = other_tests[test]
            for diagnosis in abnormal:
                test_diag = ask.ask_y_n('Is the result ' + diagnosis + '?')
                if test_diag:
                    test_details = input("Please provide details of "
                                         + diagnosis + " diagnosis: ")
                else:
                    diagnosis = 'Normal'
                    test_details = "NA"
                data_list.append(diagnosis)
                data_list.append(test_details)
        else:
            test_done = test_name+"_not_done"
            data_list.append(test_done)
            abnormal = other_tests[test]
            for i in range(2*len(abnormal)):
                i = 'NA'
                data_list.append(i)
    return data_list
Beispiel #9
0
def edit_table(df, pk_col, df_col):
    import helper_function.ask_y_n_statement as ask
    rows = (df.shape)[0]
    for row in range(0,rows):
        print(df.iloc[row].to_string()+'\n')
    to_correct = ask.ask_y_n("Are entries correct?")
    if not to_correct:
        to_correct = ask.ask_y_n("Re-enter entire table?")
        if to_correct:
            return to_correct, df
        else:
            change_row = True
            while change_row:
                pk_list = list(df[pk_col])
                print(pk_list)
                pk = input("Enter " + pk_col + " to change: ")
                index = pk_list.index(id)
                to_do = True
                while to_do:
                    print(df.loc[index, :])
                    col_change = ask.ask_option("Name of column to change", df_col)
                    old_val = df.loc[index, col_change]
                    print(old_val + '\n')
                    new_val = input("Enter correct value for " + col_change + ' for ' + pk + ": ")
                    df.loc[index, col_change] = new_val
                    print(df.iloc[index].to_string() + '\n')
                    to_do = ask.ask_y_n("Make more changes to " + pk_col + ' ' + pk + '?')
                print_df(df)
                change_row = ask.ask_y_n("Change another row?")
            to_correct = False
    return to_correct, df
Beispiel #10
0
 def add_data(self):
     pk = uuid.uuid4().hex
     sql.add_pk_fk_to_table(self.conn,
                            self.cursor,
                            self.table_name,
                            col_name='pk',
                            pk=pk)
     pet_present = ask.ask_y_n(
         "Does the patient file contain a PET/CT report to be entered?")
     if not pet_present:
         data_length = len(self.col_list_all) - 3
         data = [self.file_number
                 ] + ['pet_report_not_present'] * data_length + [
                     self.user_name, sql.last_update()
                 ]
         sql.update_multiple_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 self.col_list_all,
                                 key_name='pk',
                                 key_value=pk,
                                 data=data)
     else:
         print(self.print_statements[0])
         col_list = names(self.module_list[0])
         enter = ask.ask_y_n("Enter " + self.print_statements[0])
         if enter:
             data = self.pet_report_identifier()
             sql.update_multiple_key(self.conn,
                                     self.cursor,
                                     self.table_name,
                                     col_list,
                                     key_name='pk',
                                     key_value=pk,
                                     data=data)
         col_list = names(self.module_list[1])
         enter = ask.ask_y_n("Enter " + self.print_statements[1])
         if enter:
             data = self.pet_report_findings()
             sql.update_multiple_key(self.conn,
                                     self.cursor,
                                     self.table_name,
                                     col_list,
                                     key_name='pk',
                                     key_value=pk,
                                     data=data)
         enter = ask.ask_y_n("Enter " + self.print_statements[2])
         col_list = names(self.module_list[2])
         if enter:
             data = self.pet_breast_cancer()
             sql.update_multiple_key(self.conn,
                                     self.cursor,
                                     self.table_name,
                                     col_list,
                                     key_name='pk',
                                     key_value=pk,
                                     data=data)
def node_excision (file_number):
    check = False
    while not check:
        surgery_guide, frozen, gross_tumour, skin, nodes, number_lymph, level_lymph, sentinel_method, sentinel_blue, \
        sentinel_hot, sentinel_blue_hot, sentinel_non_blue_hot, sentinel_palpable = (" ",)*13
        guide_add = True
        guide = []
        while guide_add:
            surgery_guide = ask_option("Excision guided by",
                                       ["Palpation", "USG guided", "Wire placement guided", 'Gamma camera guided',
                                        'Clipped node'])
            guide.append(surgery_guide)
            guide_add = ask_y_n("Add another method to guide?")
        surgery_guide = "; ".join(guide)
        frozen_samples = ask_option_y_n("Any samples sent for histopathology (frozen)?")
        if frozen_samples == 'Yes':
            frozen_samples = []
            sn_frozen = ask_y_n("Sentinel Node sent for histopathology (frozen)?", yes_ans="Sentinel Node")
            if sn_frozen == 'Sentinel Node':
                frozen_samples.append(sn_frozen)
            specimen_frozen = ask_y_n_na("Specimen sent for histopathology (frozen)?")
            if specimen_frozen == 'Yes':
                nipple_frozen = ask_y_n_na("Under Nipple Surface sent for histopathology (frozen)?",
                                           yes_ans='Under Nipple Surface')
                if nipple_frozen == 'Under Nipple Surface':
                    frozen_samples.append(nipple_frozen)
                other_frozen = ask_y_n_na("Any other specimen sent for histopathology (frozen)?")
                if other_frozen == 'Yes':
                    other_frozen = input("Type of tissue sent for histopathology (frozen): ")
                    frozen_samples.append(other_frozen)
            frozen = "; ".join(frozen_samples)
        else:
            frozen = "NA"
        gross_tumour = input ("Size of tumour on cross section (cm): ")
        skin = ask_option_y_n("Skin involved", yes_ans="Skin involved", no_ans="Skin not involved")
        nodes = ask_option("Nodes excised", ["Sentinel Node", "Sentinel and Axillary Nodes", "Axillary Nodes only",
                                             "Other"])
        number_lymph = input("Number of lymph nodes excised (if available): ")
        level_lymph = ask_option("Level of lymph node excised", ["I", "II", "III", "Data not available", "Other"])
        if nodes == 'Axillary Nodes only':
            sentinel_method, sentinel_blue, sentinel_hot, sentinel_blue_hot, sentinel_non_blue_hot, sentinel_palpable = \
                ('No Sentinel Node excised', )*6
        else:
            sentinel_method = ask_option("Method of labelling Sentinel Node", ["Isotope", "Blue Dye", "Isotope + Blue Dye",
                                                                               "Not done", "Other"])
            sentinel_blue = ask_option_y_n("Blue Node", yes_ans="Blue Node", no_ans="No Blue Node")
            sentinel_hot = ask_option_y_n("Hot Node", yes_ans="Hot Node", no_ans="No Hot Node")
            sentinel_blue_hot = ask_option_y_n("Blue Hot Node", yes_ans="Blue Hot Node", no_ans="No Blue Hot Node")
            sentinel_non_blue_hot = ask_option_y_n("Non Blue, Hot Node", yes_ans= "Non Blue, Hot Node",
                                               no_ans="No Non Blue, Hot Node")
            sentinel_palpable = ask_option_y_n("Palpable Node", yes_ans="Palpable Node", no_ans="No Palpable Node")
        data_list = [surgery_guide, frozen, gross_tumour, skin, nodes, number_lymph, level_lymph, sentinel_method,
                     sentinel_blue, sentinel_hot, sentinel_blue_hot, sentinel_non_blue_hot, sentinel_palpable]
        col_list = names("node_excision")
        check = add_update_sql.review_input(file_number, col_list, data_list)
    return data_list
Beispiel #12
0
def add_insert():
    import sqlite3
    import helper_function.ask_y_n_statement as ask
    import sql.add_update_sql as add_update_sql
    from datetime import datetime
    import os
    import textwrap
    from helper_function.pccm_names import db_tables

    folders = "d:/repos/pccm_db/main/DB"
    file = 'PCCM_BreastCancerDB_check_new_all_2_2019-05-27.db'
    #file = 'PCCM_BreastCancerDB_all_data_rituja_surgery_data.db'
    check_path = False
    while not check_path:
        print('\nDatabase file ' + file + ' in folder ' + folders +
              ' is being used\n')
        check_location = ask.ask_y_n('Is this correct?')
        if not check_location:
            print("\n File is currently set as " + file)
            file = input(
                'Please enter database file name (with .db extension): ')
            print("\n Folder is currently set as " + folders)
            folders = input(
                'Please enter database folder name (full path as given above): '
            )
        else:
            check_path = True
    path = os.path.join(folders, file)
    if os.path.isfile(path):
        conn = sqlite3.connect(path)
        cursor = conn.cursor()
        user_name = input("Please input username/user_id: ")
        folder_next = True
        files_table_added = []
        while folder_next:
            check = False
            while not check:
                file_number = input("File Number: ")
                print("File Number: " + file_number)
                check = ask.ask_y_n("Is this file number correct")
            check_table = True
            while check_table:
                table = ask.ask_list("Table", db_tables())
                file_table = file_number + "-" + table
                files_table_added.append(file_table)
                check_table = add_update_sql.check_file(
                    conn, cursor, table, file_number, user_name, folders, file)
            folder_next = ask.ask_y_n("Add/update another record?")
    else:
        note = "current path: '" + path + "' to database is not valid. Check path and database name and run " \
                                          "start_pccm_db() again."
        wrapper = textwrap.TextWrapper(width=100)
        string = wrapper.fill(text=note)
        print(string)
Beispiel #13
0
 def pet_breast_cancer(self):
     module_name = self.module_list[2]
     breast_report = [
         'NA',
     ] * 7
     check = False
     while not check:
         pet_breast = ask.ask_y_n(
             'Does this report describe a breast cancer?')
         if pet_breast:
             print('\nPlease describe primary breast lesion\n')
             pet_breast_lesion_size = input(
                 'Dimensions of breast lesion/s: ')
             pet_breast_lesion_size_unit = ask.ask_list(
                 'Unit of breast lesion size', ['mm', 'cm'])
             pet_breast_lesion_suv = ask.check_number_input(
                 'Please enter SUV max of breast lesion: ',
                 'Please enter only SUV not description')
             pet_breast_lesion_location = input(
                 'Please enter description of lesion location: ')
             pet_breast_lesion_type = input(
                 'Please input description of lesion: ')
             pet_breast_lesion_comments = input(
                 'Please input any additional notes for breast lesion: ')
             pet_breast_nodes = ask.ask_y_n(
                 'Does the report describe breast related nodes?')
             if pet_breast_nodes:
                 pet_breast_nodes_description = input(
                     'Please enter nodes description as given: ')
             else:
                 pet_breast_nodes_description = 'nodes_not_described'
             pet_breast_skin = ask.ask_y_n(
                 'Does the PET report describe any skin changes?')
             if pet_breast_skin:
                 pet_breast_lesion_skin = input(
                     'Please enter description of skin changes: ')
             else:
                 pet_breast_lesion_skin = 'skin_changes_not_described'
         else:
             pet_breast_lesion_size, pet_breast_lesion_size_unit, pet_breast_lesion_suv, pet_breast_lesion_location,\
             pet_breast_lesion_type, pet_breast_lesion_comments, pet_breast_nodes_description, \
             pet_breast_lesion_skin = ['no_breast_cancer', ] * 8
         breast_report = [
             pet_breast_lesion_size, pet_breast_lesion_size_unit,
             pet_breast_lesion_suv, pet_breast_lesion_location,
             pet_breast_lesion_type, pet_breast_lesion_comments,
             pet_breast_nodes_description, pet_breast_lesion_skin
         ]
         columns_list = names(module_name)
         check = sql.review_input(self.file_number, columns_list[:-2],
                                  breast_report)
     data_list = breast_report + [self.user_name, sql.last_update()]
     return data_list
 def add_data(self):
     block_list_table = BlockInformation(self.conn, self.cursor,
                                         self.file_number)
     enter = ask.ask_y_n("Enter Biopsy Report information?")
     if enter:
         data = self.biopsy_report_info()
         sql.update_multiple_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 names.names_biopsy("biopsy_report_info"),
                                 key_name='pk',
                                 key_value=self.pk,
                                 data=data)
     enter = ask.ask_y_n("Enter Biopsy data?")
     if enter:
         data = self.biopsy_details()
         sql.update_multiple_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 names.names_biopsy("biopsy_details"),
                                 key_name='pk',
                                 key_value=self.pk,
                                 data=data)
         data = self.ihc_biopsy_data()
         sql.update_multiple_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 names.names_biopsy("ihc_biopsy_data"),
                                 key_name='pk',
                                 key_value=self.pk,
                                 data=data)
         data = self.review_biopsy()
         sql.update_multiple_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 names.names_biopsy("review_biopsy"),
                                 key_name='pk',
                                 key_value=self.pk,
                                 data=data)
         is_surgery = ask.ask_y_n(
             'Is a surgery associated with this biopsy?')
         if is_surgery:
             surgery_block_id, surgery_number_of_blocks = block_list_table.get_block_id(
                 'surgery')
         else:
             surgery_block_id = 'NA'
         sql.update_single_key(self.conn,
                               self.cursor,
                               self.table_name,
                               'surgery_block_id',
                               key_name='pk',
                               key_value=self.pk,
                               var=surgery_block_id)
def tox_table(file_number, drug_cyc, tox_all):
    tox_index = 0
    check_tox = False
    while not check_tox:
        tox = ask.ask_y_n(
            "Were there any toxic effects in  administration of " + drug_cyc)
        if tox:
            add_tox = True
            while add_tox:
                check = False
                while not check:
                    tox_present = ask.ask_option("Toxic effects of type",
                                                 chemo.toxicity())
                    tox_grade = ask.ask_option(
                        ("the grade of " + tox_present + "? "),
                        ["Mild", "Moderate", "Severe", "Other"])
                    treatment = input("Treatment given for " + tox_grade +
                                      " " + tox_present +
                                      " (include all details): ")
                    resp_treatment = ask.ask_option(
                        ("Response to treatment given for " + tox_grade + " " +
                         tox_present),
                        ["Partial", "Complete", "No Effect", "Other"])
                    cyc_tox = input("Cycle at which toxicity occurred: ")
                    change_tox = ask.ask_option("Changes to treatment", [
                        "No change", "Therapy changed due to toxicity",
                        "Therapy "
                        "stopped  due to toxicity", "Therapy changed due "
                        "to other reasons",
                        "Therapy stopped due to other reasons"
                    ])
                    if change_tox == "Therapy changed due to toxicity" or change_tox == "Therapy changed due to other reasons":
                        change = input("Please describe changes to Therapy: ")
                        change_tox = change_tox + ": " + change
                data = [
                    file_number, drug_cyc, tox_present, tox_grade, treatment,
                    resp_treatment, cyc_tox, change_tox
                ]
                tox_all.loc[tox_index] = data
            check = review_df_row(tox_all)
            tox_index = tox_index + 1
            add_tox = ask.ask_y_n('Add another toxicity type?')
        else:
            tox_present, tox_grade, treatment, resp_treatment, cyc_tox,
            change_tox = ("No Toxicity", ) * 6
            data = [
                file_number, drug_cyc, tox_present, tox_grade, treatment,
                resp_treatment, cyc_tox, change_tox
            ]
            tox_all.loc[tox_index] = data
    check_tox = review_df(tox_all)
    return tox_all
Beispiel #16
0
def add_data(conn, cursor, file_number, user_name):
    #file_row(cursor, file_number)
    table = "hormonetherapy_survival"
    enter = ask.ask_y_n("Enter Hormone Therapy Details?")
    if enter:
        col_list = names.names_longterm(module_name="hormone")
        data = hormone(file_number)
        update_multiple(conn, cursor, table, col_list, file_number, data)
    enter = ask.ask_y_n("Enter Recurrence and follow-up status?")
    if enter:
        col_list = names.names_longterm(module_name="metastasis")
        data = metastasis(file_number, user_name)
        update_multiple(conn, cursor, table, col_list, file_number, data)
Beispiel #17
0
def add_gen_info(conn, cursor, file_number, user_name):
    table = "patient_information_history"
    #file_row(cursor, file_number)
    enter = ask_y_n("Enter Patient Biographical Information")
    if enter:
        data = bio_info(file_number)
        update_multiple(conn, cursor, table, pccm_names.names_info("bio_info"),
                        file_number, data)
    enter = ask_y_n("Enter Patient habits")
    if enter:
        data = phys_act(conn, cursor, file_number)
        update_multiple(conn, cursor, table, pccm_names.names_info("phys_act"),
                        file_number, data)
        data = habits(file_number)
        update_multiple(conn, cursor, table, pccm_names.names_info("habits"),
                        file_number, data)
        data = nut_supplements(conn, cursor, file_number)
        update_multiple(conn, cursor, table,
                        pccm_names.names_info("nut_supplements"), file_number,
                        data)
    enter = ask_y_n("Enter Patient family and reproductive details?")
    if enter:
        data = family_details(conn, cursor, file_number)
        update_multiple(conn, cursor, table,
                        pccm_names.names_info("family_details"), file_number,
                        data)
    enter = ask_y_n("Enter Patient and family medical history?")
    if enter:
        data = med_history(conn, cursor, file_number)
        update_multiple(conn, cursor, table,
                        pccm_names.names_info("med_history"), file_number,
                        data)
        data = cancer_history(conn, cursor, file_number)
        update_multiple(conn, cursor, table,
                        pccm_names.names_info("cancer_history"), file_number,
                        data)
        data = family_cancer(conn, cursor, file_number)
        update_multiple(conn, cursor, table,
                        pccm_names.names_info("family_cancer"), file_number,
                        data)
    enter = ask_y_n("Enter Patient Symptoms?")
    if enter:
        data = det_by(file_number)
        update_multiple(conn, cursor, table, pccm_names.names_info("det_by"),
                        file_number, data)
        data = breast_symptoms(file_number, user_name)
        update_multiple(conn, cursor, table,
                        pccm_names.names_info("breast_symptoms"), file_number,
                        data)
    print_info(cursor, file_number)
def review_data_key(conn, cursor, table, key_name, key_value, columns, col_name, col_value):
    if 'file_number' in columns:
        # remove 1st position from column names (assumes it is file_number)
        col_list = columns[1:]
    else:
        col_list = columns
    sql_statement = 'SELECT ' + ", ".join(col_list) + ' FROM ' + table + " WHERE " + key_name + "= '" + key_value + "'"
    data = cursor.execute(sql_statement)
    data_list = data.fetchall()
    if not data_list:
        print("This " + col_name + ' ' + col_value + ' has not been entered in ' + table)
        enter = ask.ask_y_n("Do you want to enter now")
        if enter:
            add_pk_fk_to_table(conn, cursor, table, col_name=key_name, pk=key_value)
            print('added new row for this ' + key_name)
            return enter
    else:
        data_list = list(data_list[0])
    col_number = len(col_list)
    if data_list == [None]*len(data_list):
        print("This section of the database has not been entered")
        enter = ask.ask_y_n("Do you want to enter now")
        return enter
    elif None in set(data_list):
        print("Some entries are missing from the database: ")
        for index in range(0, col_number):
            print(col_list[index] + " : " + str(data_list[index]))
        enter = ask.ask_option("Do you want to proceed?", ["Edit all", "Add new data only"])
        if enter == "Edit all":
            return True
        else:
            enter = edit_few(conn, cursor, table, col_list, key_value, data_list)
            return enter
    else:
        print("Entries present in database are as follows : ")
        for index in range(0, col_number):
            print(col_list[index] + " : " + str(data_list[index]))
        enter = ask.ask_option("Do you want to", ["Edit all", "Edit some entries", "Edit None"])
        if enter == "Edit some entries":
            for index in range(0, col_number):
                print(col_list[index] + " : " + str(data_list[index]))
                edit = ask.ask_y_n("Edit")
                if edit:
                    data = input("Data for " + col_list[index] + ": ")
                    update_single_pk(conn, cursor, table, col_list[index], pk_value=key_name, pk=key_value, var=data)
            return False
        elif enter == "Edit all":
            return True
        else:
            return False
def add_data(conn, cursor, file_number, user_name):
    table = "surgery_seport"
    #file_row(cursor, file_number)
    enter = ask_y_n("Do you want to enter Surgery Information?")
    if enter:
        data = surgery_information(file_number)
        add_update_sql.update_multiple(conn, cursor, table, names("surgery_information"), file_number, data)
    enter = ask_y_n("Do you want to enter dnter Node Excision Information?")
    if enter:
        data = node_excision(file_number)
        add_update_sql.update_multiple(conn, cursor, table, names("node_excision"), file_number, data)
    enter = ask_y_n("Do you want to enter details of Post-Surgery management (plans and complications)?")
    if enter:
        data = post_surgery(file_number, user_name)
        add_update_sql.update_multiple(conn, cursor, table, names("post_surgery"), file_number, data)
def drug_table_enter(file_number, drug_table):
    drug_add = True
    drug_index = 0
    while drug_add:
        check_drug = False
        while not check_drug:
            drugs_administered = ask.ask_option("Drug used for therapy",
                                                chemo.drug_list())
            dose_check = ask.ask_y_n('Is the drug dose available?')
            if dose_check:
                dose = ask.check_number_input(
                    "Dose of " + drugs_administered + ':',
                    'Please input dose amount'
                    'without unit')
                if dose == 'NA':
                    dose_unit = 'NA'
                else:
                    dose_unit = input("Dose unit: ")
            else:
                dose, dose_unit = [
                    'NA',
                ] * 2
            cycle_check = ask.ask_y_n('Is the drug cycle available?')
            if cycle_check:
                cycle_frequency_per_week = ask.check_number_input(
                    "Cycle Frequency: ", 'Please enter frequency per '
                    'week, so three weekly is 3 and '
                    'weekly is 1')
                number_cycle = ask.check_number_input(
                    "Number of cycles actually given: ",
                    'Please enter numbers only')
            else:
                cycle_frequency_per_week, number_cycle = [
                    'NA',
                ] * 2
            drug_dose = 'NA'
            if number_cycle != 'NA' and dose != 'NA':
                drug_dose = float(dose) * int(number_cycle)
            data_drug = [
                file_number, drugs_administered, number_cycle,
                cycle_frequency_per_week,
                str(drug_dose), dose_unit
            ]
            drug_table.loc[drug_index] = data_drug
            check_drug, drug_table = review_df_row(drug_table)
            drug_index = drug_index + 1
        drug_add = ask.ask_y_n("Add another drug")
    return drug_table
Beispiel #21
0
 def create_block_id(blocks_total):
     block_id_list = []
     frozen = ask.ask_y_n('Are frozen sections (labelled FS) present?')
     no_frozen = 0
     if frozen:
         no_frozen = int(input('Number of frozen sections: '))
         frozen_list = [str(x) for x in range(no_frozen + 1)]
         frozen_id = ['FS-' + s for s in frozen_list[1:]]
     else:
         frozen_id = []
     blocks = blocks_total - no_frozen
     block_id_chunks = list(divmod(blocks, 26))
     chunk = block_id_chunks[0]
     suffix = [i for i in range(chunk)]
     if chunk == 0:
         for j in range(block_id_chunks[1]):
             alph_list = string.ascii_uppercase[j]
             block_id_list.append(alph_list)
     else:
         for i in range(chunk):
             if i == chunk - 1:
                 for j in range(block_id_chunks[1]):
                     alph_list = string.ascii_uppercase[j] + str(i)
                     block_id_list.append(alph_list)
             else:
                 for j in range(26):
                     alph_list = string.ascii_uppercase[j] + suffix[i]
                     block_id_list.append(alph_list)
     block_id_list = block_id_list + frozen_id
     print(", ".join(block_id_list))
     check_list = ask.ask_y_n("Is block list correct?")
     while not check_list:
         block_id_list = []
         check = ask.ask_y_n('Is Frozen series correct?')
         if not check:
             for i in range(blocks_total):
                 block_id = input('Block id of block number ' + str(i + 1) +
                                  ': ')
                 block_id_list.append(block_id)
         else:
             block_id_list = frozen_id
             for i in range(blocks):
                 block_id = input('Block id of block number ' + str(i + 1) +
                                  ': ')
                 block_id_list.append(block_id)
         print((", ").join(block_id_list))
         check_list = ask.ask_y_n("Is block list correct?")
     return block_id_list
def family_cancer_table(conn, cursor, file_number):
    add_family = True
    type_cancer_list, relation_degree_list, type_relation_list, age_detect_list = [], [], [], []
    all_data = []
    while add_family:
        type_of_cancer = input("Type of Cancer: ")
        type_cancer_list.append(type_of_cancer)
        relation_to_patient = ask_option("Relation to patient",
                                         PatientInfo.family)
        relation_degree_list.append(relation_to_patient)
        type_relation = input("Specific Relationship:")
        type_relation_list.append(type_relation)
        age_at_detection_yrs = input('Age at detection (yrs) :')
        age_detect_list.append(age_at_detection_yrs)
        family_history = file_number, type_of_cancer, relation_to_patient, type_relation, age_at_detection_yrs
        family_history_list = "; ".join([
            type_of_cancer, relation_to_patient, type_relation,
            age_at_detection_yrs
        ])
        all_data.append(family_history_list)
        columns = 'file_number, type_cancer, relation_to_patient, type_relation, age_at_detection_yrs'
        table = "family_cancer_history"
        sql.insert(conn, cursor, table, columns, family_history)
        add_family = ask_y_n("Add more family cancer history? ")
    all_data_flat = "|".join(all_data)
    return (all_data_flat)
Beispiel #23
0
def add_data(conn, cursor, file_number, user_name):
    table = "clinical_exam"
    #file_row(cursor, file_number)
    enter = ask.ask_y_n("Enter Clinical Examination information")
    if enter:
        data = clinical_exam_initial(file_number, user_name)
        add_update_sql.update_multiple(
            conn, cursor, table,
            pccm_names.name_clinical("clinical_exam_initial"), file_number,
            data)
    enter = ask.ask_y_n("Enter Nipple Cytology report?")
    if enter:
        data = nipple_cytology(file_number)
        add_update_sql.update_multiple(
            conn, cursor, table, pccm_names.name_clinical("nipple_cytology"),
            file_number, data)
Beispiel #24
0
def review_input (file_number, columns, data):
    col_number = len (data)
    print ("Entries for database are as follows : ")
    for index in range (0, col_number):
        print (columns[index] +": " + data[index])
    ans = ask.ask_y_n("Are entries for file "+ file_number+ " correct ?", True, False)
    return ans
def get_folder_name():
    folders = "d:/repos/pccm_db/main/DB"
    file = 'PCCM_BreastCancerDB_2019_07_03.db'
    check_path = False
    path = os.path.join(folders, file)
    while not check_path:
        print('\nDatabase file ' + file + ' in folder ' + folders +
              ' is being used\n')
        check_location = ask.ask_y_n('Is this correct?')
        if not check_location:
            print("\n File is currently set as " + file)
            file = input(
                'Please enter database file name (with .db extension): ')
            print("\n Folder is currently set as " + folders)
            folders = input(
                'Please enter database folder name (full path as given above): '
            )
            path = os.path.join(folders, file)
        if os.path.isfile(path):
            check_path = True
        else:
            note = "current path: '" + path + "' to database is not valid. Check path and database name and enter " \
                                              "again"
            wrapper = textwrap.TextWrapper(width=100)
            string = wrapper.fill(text=note)
            print(string)
    user_name = input("Please input username/user_id: ")
    return folders, file, user_name
Beispiel #26
0
 def mri_mass(self, mass_id):
     check = False
     data_list = ask.default_data_list(self.col_list)
     while not check:
         if self.mammo_breast == "bilateral":
             mass_location = ask.ask_option("Location of mass " + str(
                                            mass_id), RadioTables.breast)
         else:
             mass_location = self.mammo_breast
         check_t1_t2 = ask.ask_y_n('Are both T1 and T2 image analysis'
                                   'available for this mass?')
         type_of_imaging = ['T1', 'T2']
         if not check_t1_t2:
             type_of_imaging = ask.ask_list('Observation of this mass is a'
                                            'result of which type of'
                                            'imaging? ',
                                            RadioTables.mri_image_type)
         data_list = self.mri_mass_detail(type_of_imaging, mass_id)
         if type_of_imaging in {'T1', 'T2'}:
             data_list = [('{0}_{1}'.format(type_of_imaging, data)) for
                          data in data_list]
         mass_name = "Lesion " + str(mass_id)
         data_list = [self.file_number, mass_location, mass_name]+data_list
         check = sql.review_input(self.file_number, columns=self.col_list,
                                  data=data_list)
         data_list = [data_list] + [self.user_name, sql.last_update()]
         data_list = data_list + [self.user_name, sql.last_update()]
     return data_list
def check_file(conn, cursor, table, file_number, user_name, folders, file):
    from add_edit.edit_record import edit_record
    from add_edit.add_new import add_new
    from reports.radiology import Radiology
    if table != 'radiology':
        sql_statement = "SELECT rowid FROM " + table + " WHERE file_number = ?"
        cursor.execute(sql_statement, (file_number, ))
        data = cursor.fetchall()
        if len(data) == 0:
            if table not in {"follow_up_data", "pet_reports", 'radiology'}:
                cursor.execute("INSERT INTO " + table + "(file_number) VALUES ('" + file_number + "')")
            print(file_number + " does not exist in table " + table + ". Enter new record")
            add_new(conn, cursor, file_number, table, user_name, folders, file)
        else:
            todo = ask.ask_list(file_number + " already exists in table " + table + ".", ["Edit record",
                                                                                        "Add new record for same file number",
                                                                                         "Edit None"])
            if todo == "Edit record":
                edit_record(conn, cursor, file_number, table, user_name, folders, file)
            elif todo == "Add new record for same file number":
                print("Add additional record module TBD")
        ask_table = ask.ask_y_n("Add another table?")
    else:
        radio = Radiology(conn, cursor, file_number, user_name)
        tables = radio.tables
        for tab in tables:
            ask_table = True
            while ask_table:
                sql_statement = "SELECT rowid FROM " + tab + " WHERE file_number = ?"
                cursor.execute(sql_statement, (file_number, ))
                dat = cursor.fetchall()
                if len(dat) == 0:
                    print(file_number + " does not exist in table " + tab)
                    enter_tab = ask.ask_y_n('Enter data?')
                    if enter_tab:
                        cursor.execute("INSERT INTO " + tab + "(file_number) VALUES ('" + file_number + "')")
                        add_new(conn, cursor, file_number, tab, user_name, folders, file)
                else:
                    todo = ask.ask_list(file_number + " already exists in table " + tab + ".", ["Edit record", "Edit None"])
                    if todo == "Edit record":
                        edit_record(conn, cursor, file_number, tab, user_name, folders, file)
            #     data.append(dat)
            # print(data, 'length data is =', len(data))          
            # # remove later - test_function
                ask_table = ask.ask_y_n("Add another data set for " + tab + "?")
    return ask_table
def review_df_row(df):
    check_row = len(df)-1
    print(df.iloc[check_row].to_string())
    check = ask.ask_y_n("Is data entered correct?")
    if check:
        return check, df
    else:
        df = df.drop(df.index[check_row])
        return check, df
 def add_ffpe(self):
     table_next = True
     while table_next:
         table = AddBlockData.get_table()
         if table == ffpe_db_tables()[0]:
             self.add_block_list()
         else:
             self.add_path_report(table)
         table_next = ask.ask_y_n("Add/update another table?")
Beispiel #30
0
 def add_data(self):
     add_block = True
     while add_block:
         data = self.add_update_patient()
         data.to_sql("block_list",
                     self.conn,
                     index=False,
                     if_exists="append")
         add_block = ask.ask_y_n('Add another block?')