コード例 #1
0
 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)
コード例 #2
0
 def edit_data(self):
     print(self.print_statements[0])
     col_list = names(self.module_list[0])
     enter = sql.review_data_key(self.conn, self.cursor, self.table_name, key_name='fk', key_value=self.fk,
                                 columns=col_list, col_name='surgery_block_id', col_value=self.surgery_block_id)
     if enter:
         data = self.surgery_block_information_0()
         sql.update_multiple(self.conn, self.cursor, self.table_name, col_list, self.file_number, data)
     print(self.print_statements[1])
     col_list = names(self.module_list[1])
     enter = sql.review_data_key(self.conn, self.cursor, self.table_name, key_name='fk', key_value=self.fk,
                                 columns=col_list, col_name='surgery_block_id', col_value=self.surgery_block_id)
     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")
     print(self.print_statements[2])
     col_list = names(self.module_list[2])
     enter = sql.review_data_key(self.conn, self.cursor, self.table_name, key_name='fk', key_value=self.fk,
                                 columns=col_list, col_name='surgery_block_id', col_value=self.surgery_block_id)
     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)
     print(self.print_statements[3])
     col_list = names(self.module_list[3])
     enter = sql.review_data_key(self.conn, self.cursor, self.table_name, key_name='fk', key_value=self.fk,
                                 columns=col_list, col_name='surgery_block_id', col_value=self.surgery_block_id)
     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)
コード例 #3
0
    def edit_data(self):
        table = "neo_adjuvant_therapy"
        enter = sql.review_data(self.conn, self.cursor, table,
                                self.file_number, names(table))
        if enter:
            sql.delete_rows(self.cursor, 'nact_drug_table', "file_number",
                            self.file_number)
            sql.delete_rows(self.cursor, 'nact_tox_table', "file_number",
                            self.file_number)
            data = self.nact_test()
            data_sql, drug_table, tox_response = data
            sql.update_multiple(self.conn, self.cursor, table, names(table),
                                self.file_number, data_sql)
            drug_table.to_sql("nact_drug_table",
                              self.conn,
                              index=False,
                              if_exists="append")
            tox_response.to_sql("nact_tox_table",
                                self.conn,
                                index=False,
                                if_exists="append")

        print("clip information")
        module = "clip_information"
        col_list = names(module)
        enter = sql.review_data(self.conn, self.cursor, table,
                                self.file_number, col_list)
        if enter:
            data = self.clip_information()
            sql.update_multiple(self.conn, self.cursor, table, col_list,
                                self.file_number, data)
コード例 #4
0
def edit_data(conn, cursor, file_number, user_name):
    table = "surgery_seport"
    print("Surgery Information")
    col_list = names("surgery_information")
    enter = add_update_sql.review_data(conn, cursor, table, file_number,
                                       col_list)
    if enter:
        data = surgery_information(file_number)
        add_update_sql.update_multiple(conn, cursor, table, col_list,
                                       file_number, data)
    print("Node Excision")
    col_list = names("node_excision")
    enter = add_update_sql.review_data(conn, cursor, table, file_number,
                                       col_list)
    if enter:
        data = node_excision(file_number)
        add_update_sql.update_multiple(conn, cursor, table, col_list,
                                       file_number, data)
    print("Post-Surgery management")
    col_list = names("post_surgery")
    enter = add_update_sql.review_data(conn, cursor, table, file_number,
                                       col_list)
    if enter:
        data = post_surgery(file_number, user_name)
        add_update_sql.update_multiple(conn, cursor, table, col_list,
                                       file_number, data)
コード例 #5
0
 def edit_data_pk(self, pk, value_row_to_edit):
     print(self.print_statements[0])
     col_list = names(self.module_list[0])
     enter = sql.review_data_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 key_name='pk',
                                 key_value=pk,
                                 columns=col_list,
                                 col_name='pet_scan_date',
                                 col_value=value_row_to_edit)
     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)
     print(self.print_statements[1])
     col_list = names(self.module_list[1])
     enter = sql.review_data_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 key_name='pk',
                                 key_value=pk,
                                 columns=col_list,
                                 col_name='pet_scan_date',
                                 col_value=value_row_to_edit)
     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)
     print(self.print_statements[2])
     col_list = names(self.module_list[2])
     enter = sql.review_data_key(self.conn,
                                 self.cursor,
                                 self.table_name,
                                 key_name='pk',
                                 key_value=pk,
                                 columns=col_list,
                                 col_name='pet_scan_date',
                                 col_value=value_row_to_edit)
     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)
コード例 #6
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)
コード例 #7
0
 def __init__(self, conn, cursor, file_number, user_name):
     self.table_name = 'pet_reports'
     self.file_number = file_number
     self.cursor = cursor
     self.user_name = user_name
     self.conn = conn
     self.module_list = [
         'pet_report_identifier', 'pet_report_findings', 'pet_breast_cancer'
     ]
     self.col_list_all = names(self.module_list[0]) + names(
         self.module_list[1]) + names(self.module_list[2])
     self.print_statements = [
         '\nPET report identifier\n', '\nPET report findings\n',
         '\nPET breast cancer details\n'
     ]
コード例 #8
0
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)
コード例 #9
0
 def __init__(self, conn, cursor, file_number, user_name):
     self.conn = conn
     self.cursor = cursor
     self.file_number = file_number
     self.user_name = user_name
     self.table = "mri_breast"
     self.col_list_all = names(self.table)
コード例 #10
0
 def edit_radio(self, table):
     col_list = names(table)
     enter = sql.view_multiple(self.conn, table, col_list, self.file_number)
     if enter == "Add data":
         self.add_radio(table)
     elif enter == "Edit data":
         sql_statement = ('SELECT ' + ", ".join(col_list) + " FROM '" +
                          table + "' WHERE file_number = '" +
                          self.file_number + "'")
         df = pd.read_sql(sql_statement, self.conn)
         sql.print_df(df)
         pk, value_row_to_edit = sql.retrieve_with_pk_to_edit(
             df,
             value_col='reason_report',
             table=table,
             cursor=self.cursor,
             pk=False)
         print('value_row_to_edit: ', value_row_to_edit)
         if not value_row_to_edit:
             sql.delete_rows(self.cursor,
                             table,
                             col_name="file_number",
                             col_data=self.file_number)
             self.add_radio(table)
         else:
             self.edit_data_pk(pk, value_row_to_edit, table)
     else:
         print('\n No edits will be made to this table\n')
コード例 #11
0
 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
コード例 #12
0
 def __init__(self, conn, cursor, file_number, user_name):
     self.conn = conn
     self.cursor = cursor
     self.file_number = file_number
     self.user_name = user_name
     self.table = "follow_up_data"
     self.col_list = names()
コード例 #13
0
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
コード例 #14
0
 def add_data(self):
     table = "neo_adjuvant_therapy"
     data = self.nact_test()
     data_sql, drug_table, tox_response = data
     sql.update_multiple(self.conn, self.cursor, table, names(table),
                         self.file_number, data_sql)
     drug_table.to_sql("nact_drug_table",
                       self.conn,
                       index=False,
                       if_exists="append")
     tox_response.to_sql("nact_tox_table",
                         self.conn,
                         index=False,
                         if_exists="append")
     enter = ask.ask_y_n("Input Clip Information")
     if enter:
         data = self.clip_information()
         col_list = names("clip_information")
         sql.update_multiple(self.conn, self.cursor, table, col_list,
                             self.file_number, data)
コード例 #15
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
コード例 #16
0
 def pet_report_identifier(self):
     module_name = self.module_list[0]
     check = False
     report_identifier = ['NA'] * 12
     while not check:
         pet_scan_date = ask.check_date('Please enter PET report date: ')
         pet_scan_number = input(
             'Please enter PET scan number as given on the report: ')
         pet_scan_source = input(
             'Please enter the facility at which PET scan was done: ')
         pet_scan_reg_number = input(
             "Please enter PET report registration number: ")
         pet_scan_history = input(
             'Please input patient history as given on report: ')
         pet_carcinoma_status = ask.ask_option(
             'Please enter breast cancer status',
             MultiTest.carcinoma_status)
         pet_cancer_location = ask.ask_list(
             'What is the location of the cancer', MultiTest.breast_cancer)
         pet_recurrence = ask.ask_y_n(
             'Does the patient have a previously detected recurrence/mets?')
         if pet_recurrence:
             pet_recurrence_known = input(
                 'Please describe the recurrence/metastasis: ')
         else:
             pet_recurrence_known = 'no_known_recurrence_or_metastasis'
         pet_procedure_body_region = ask.ask_list(
             "Region of body monitored by PET scan", PetReport.body_region)
         pet_procedure_fdg_dose_mci = ask.check_number_input(
             "Please enter dose of 18F-FDG used in mCi. ",
             "(Please enter only dose. If given in other units "
             "enter under additional notes.): ")
         pet_procedure_bsl = input(
             "Please enter basal sugar level with units as given: ")
         pet_scanner_name = ask.ask_list('Please enter name of scanner',
                                         PetReport.machine_name)
         pet_procedure_additional_notes = input(
             'Please enter additional notes, if any for PET scan and patient '
             'conditions: ')
         report_identifier = [
             self.file_number, pet_scan_date, pet_scan_number,
             pet_scan_source, pet_scan_reg_number, pet_scan_history,
             pet_carcinoma_status, pet_cancer_location,
             pet_recurrence_known, pet_procedure_body_region,
             pet_procedure_fdg_dose_mci, pet_procedure_bsl,
             pet_scanner_name, pet_procedure_additional_notes
         ]
         columns_list = names(module_name)
         check = sql.review_input(self.file_number, columns_list,
                                  report_identifier)
     return report_identifier
コード例 #17
0
def add_data(conn, cursor, file_number, user_name):
    table = "adjuvant_chemotherapy"
    data = chemotherapy(file_number, user_name)
    data_sql, drug_table, tox_response = data
    sql.update_multiple(conn, cursor, table, names(table), file_number,
                        data_sql)
    drug_table.to_sql("chemo_drug_table",
                      conn,
                      index=False,
                      if_exists="append")
    tox_response.to_sql("chemo_tox_table",
                        conn,
                        index=False,
                        if_exists="append")
コード例 #18
0
 def clip_information(self):
     clip_number, clip_date, clip_cycle = ['NA, '] * 3
     data_list = clip_number, clip_date, clip_cycle
     check = False
     while not check:
         clip = ask.ask_y_n("Was Clip inserted for surgery?")
         if clip:
             clip_number = input("Number of clips inserted: ")
             clip_date = ask.check_date("Date of clip insertion: ")
             clip_cycle = input("Clip inserted after cycle? ")
         else:
             clip_date, clip_number, clip_cycle = ("NA", ) * 3
         data_list = clip_number, clip_date, clip_cycle
         col_list = names("clip_information")
         check = sql.review_input(self.file_number, col_list, data_list)
     return data_list
コード例 #19
0
 def edit_data_pk(self, pk, value_row_to_edit, table):
     col_list = names(table)
     enter = sql.review_data_key(self.conn,
                                 self.cursor,
                                 table,
                                 key_name='pk',
                                 key_value=pk,
                                 columns=col_list,
                                 col_name='report_date',
                                 col_value=value_row_to_edit)
     if enter:
         data = self.table_fx().get(table)
         sql.update_multiple_key(self.conn,
                                 self.cursor,
                                 table,
                                 col_list,
                                 key_name='pk',
                                 key_value=pk,
                                 data=data)
コード例 #20
0
 def surgery_block_information_0(self):
     module_name = self.module_list[0]
     check = False
     data_list = ['NA']*17
     surgery_block_data_type = 'primary'
     while not check:
         data_type = ask.ask_y_n("Is surgery type: '" + surgery_block_data_type + "'")
         if not data_type:
             surgery_block_data_type = ask.ask_option("Type of surgery", ['revision', 'recurrence'])
         block_list_table = BlockInformation(self.conn, self.cursor, self.file_number)
         block_data = ['block_sr_number', 'block_location', 'current_block_location', 'block_series']
         block_sr_number, block_location, current_block_location, surgery_block_series = \
             block_list_table.get_block_information(self.surgery_block_id, block_data)
         surgery_block_source = ask.ask_option("Pathology Lab (source of block)", PathReports.path_labs)
         breast_cancer_yes_no = ask.ask_y_n('Is this a case of breast cancer (Unilateral OR Bilateral)',
                                            yes_ans="breast_cancer_yes", no_ans="breast_cancer_no")
         pathology_report_available_yes_no = ask.ask_y_n('Is the pathology report available', yes_ans="yes",
                                                         no_ans="no")
         nat = ask.ask_y_n('Has Neo-Adjuvant therapy been administered to the patient (NACT or NAHT)?')
         if nat:
             nact = ask.ask_list('What type of therapy has been givent to the patient?',
                                 ['NACT', 'NAHT', 'NACT_and_NAHT'])
             neoadjuvant_therapy = nact.lower() + '_yes'
             surgery_block_primary_tissue = 'treated_tissue'
         else:
             neoadjuvant_therapy = 'nact_no'
             surgery_block_primary_tissue = 'primary_tissue'
         date_of_surgery = ask.check_date("Date of Surgery: ")
         surgeon_s = ask.ask_option("Name of the Surgeon/s", PathReports.surgeon)
         surgery_hospital_id = input("Hospital ID: ")
         surgery_lesion_site = ask.ask_list("Lesion on", ["right_breast", "left_breast", "bilateral"])
         surgery_type = self.bilateral_treatment(surgery_lesion_site, 'Type of surgery', PathReports.surgery_type)
         data_list = [self.file_number, surgery_block_data_type, block_sr_number, block_location,
                      current_block_location, self.surgery_block_id, self.surgery_number_of_blocks,
                      surgery_block_series, breast_cancer_yes_no, pathology_report_available_yes_no,
                      neoadjuvant_therapy, str(surgery_block_primary_tissue).lower(), surgery_block_source,
                      date_of_surgery, surgeon_s, surgery_hospital_id, surgery_lesion_site, surgery_type]
         columns_list = names(module_name)
         check = sql.review_input(self.file_number, columns_list, data_list)
     return data_list
コード例 #21
0
 def add_radio(self, table):
     pk = uuid.uuid4().hex
     sql.add_pk_fk_to_table(self.conn,
                            self.cursor,
                            table,
                            col_name='pk',
                            pk=pk)
     print(table)
     enter = ask.ask_y_n("Enter " + table)
     col_list = names(table)
     if enter:
         data = self.table_fx().get(table)
         try:
             sql.update_multiple_key(self.conn,
                                     self.cursor,
                                     table,
                                     col_list,
                                     key_name='pk',
                                     key_value=pk,
                                     data=data)
         except TypeError:
             print(data)
コード例 #22
0
 def edit_data(self):
     enter = sql.view_multiple(self.conn, self.table, self.col_list,
                               self.file_number)
     if enter == "Add data":
         data = self.follow_up()
         data.to_sql(self.table, self.conn, index=False, if_exists="append")
     elif enter == "Edit data":
         col_list_all = ["file_number"] + self.col_list
         sql_statement = ('SELECT ' + ", ".join(col_list_all) + " FROM '" +
                          self.table + "' WHERE file_number = '" +
                          self.file_number + "'")
         df = pd.read_sql(sql_statement, self.conn)
         #df = df.dropna()
         # any row with None in it will be deleted.
         sql.print_df(df)
         # check_edit = False
         # while check_edit:
         check_edit, df = sql.edit_table(df,
                                         pk_col='follow_up_period',
                                         df_col=names(),
                                         update_by=self.user_name)
         if check_edit:
             sql.delete_rows(self.cursor, self.table, "file_number",
                             self.file_number)
             df = self.follow_up()
             df.to_sql(self.table,
                       self.conn,
                       index=False,
                       if_exists="append")
         else:
             sql.delete_rows(self.cursor, self.table, "file_number",
                             self.file_number)
             df.to_sql("follow_up_data",
                       self.conn,
                       index=False,
                       if_exists="append")
     else:
         print('\n No edits will be made to this t able\n')
コード例 #23
0
 def surgery_block_information_2(self):
     module_name = self.module_list[2]
     data_list = ['NA', ] * 18
     check = False
     while not check:
         ihc_report = BlockDescription.ihc_report(ihc_type='Tumour_surgery_block')
         surgery_er, surgery_er_percent, surgery_pr, surgery_pr_percent, surgery_her2, surgery_her2_grade, \
         surgery_fish, surgery_ki67 = ihc_report
         surgery_subtype = breast_cancer_subtype('surgery', surgery_er, surgery_pr, surgery_her2,
                                                surgery_her2_grade, surgery_fish)
         node_details = self.node_details()
         sentinel_node_number_removed, sentinel_node_number_positive, axillary_node_number_removed, \
         axillary_node_number_positive, apical_node_number_removed, apical_node_number_positive = node_details
         surgery_perinodal_spread = ask.ask_list('Perinodal Spread',
                                                 ask.create_yes_no_options
                                                 ('Perinodal Spread', not_cancer='requires_follow_up'))
         pathological_pt = input('Pathological T Status (Enter T0/T1/T2 etc as given in report): ')
         pathological_pn = input('Pathological N Status (Enter N0/N1/N2 etc as given in report): ')
         metastasis = ask.ask_y_n('Did the patient have metastasis at diagnosis?')
         nat = sql.get_value(col_name='neoadjuvant_therapy', table=self.table_name, pk=self.fk, cursor=self.cursor,
                             pk_name='fk', error_statement='what is the nact status?')
         if nat != 'nact_no':
             prefix = 'yp'
         else:
             prefix = 'p'
         pathological_stage, clinical_stage = BlockDescription.stage(pathological_pt, pathological_pn, metastasis,
                                                                     prefix)
         data_list = [surgery_er, surgery_er_percent, surgery_pr, surgery_pr_percent, surgery_her2,
                      surgery_her2_grade, surgery_fish, surgery_ki67, surgery_subtype, sentinel_node_number_removed,
                      sentinel_node_number_positive, axillary_node_number_removed, axillary_node_number_positive,
                      apical_node_number_removed, apical_node_number_positive, surgery_perinodal_spread,
                      pathological_pt, pathological_pn, str(metastasis).lower(), pathological_stage, clinical_stage,
                      self.user_name, sql.last_update()]
         columns_list = names(module_name)
         check = sql.review_input(self.file_number, columns_list[:-2], data_list[:-2])
     return data_list
コード例 #24
0
def surgery_information(file_number):
    check = False
    while not check:
        surgery_date,surgery_hospital,surgery_patient_hospital_id,surgery_date_admission, surgery_hospital_ward, \
        surgery_name_anaesthetist, surgery_name_surgeon, surgery_lesion_location, surgery_type, surgery_incision, \
        surgery_type_subtype, surgery_type_level_subtype, oncoplastic_surgery_type, oncoplastic_surgery_flap, \
        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle, reconstruction_surgery_implant_type,\
        reconstruction_surgery_implant_size, contralateral_surgery, contralateral_surgery_type, \
        contralateral_surgery_type_details, surgery_notes = (" ", )*25
        surgery_date = input("Date of surgery: ")
        surgery_hospital = ask_option("Name of hospital", ['Ruby Hall Clinic', 'RHC Wanowarie','Jehangir Hospital',
                                                           'Oyster and Pearl', 'Inamdar Hospital'])
        surgery_patient_hospital_id = input("Patient ID at the hospital: ")
        surgery_hospital_ward = input("Name of hospital ward: ")
        surgery_date_admission = input("Date of admission: ")
        surgery_name_anaesthetist = ask_option("Name of Anaesthetist", ["Dr.Sachin Arbhi", "Dr. Sandhya Sathe",
                                                                        'Dr. Sagar Sanjay', 'Dr. Amol Ramekar',
                                                                        "Dr. Nita D'Souza"])
        surgery_name_surgeon = ask_option("Name of the Surgeon/s", ["Dr. C. B. Koppiker"])
        lesion = ask_option("Location of lesion", ["Right Breast", "Left Breast", "Both Breasts", "Other","Not known"])
        if lesion in {"Right Breast", "Left Breast", "Both Breasts"}:
           surgery_lesion_location = lesion_location(lesion)
        else:
           surgery_lesion_location = 'Requires specialist Input'
        surgery_type = ask_option("Types of Surgery", ["Conservative Breast Surgery", "Implant Based Reconstruction",
                                                      'Requires Specialist Input'])
        if surgery_type == "Conservative Breast Surgery":
            surgery_incision = ask_option("Type of Incisions", surgery_tables.incision("conservative_incision"))
            if surgery_incision == "Circum-areolar":
                incisions_type = ask_option("Circum-areolar incision is", ["at areolar margin", 'Away from margin',
                                                                           'Other'])
                surgery_incision = surgery_incision + " " + incisions_type
            surgery_type_subtype = ask_option("Type of Breast Conservation Surgery", ['Conventional Surgery',
                                                                                      'Oncoplastic Surgery', 'Other'])
            if surgery_type_subtype == "Conventional Surgery":
                surgery_type_level_subtype = ask_option("type of conventional surgery", ["Lumpectomy", "Quadrantectomy",
                                                                      "Wedge Resection"])
                oncoplastic_surgery_type, oncoplastic_surgery_flap, oncoplastic_surgery_plan, \
                oncoplastic_surgery_tumour_filled_by,oncoplastic_surgery_nac_graft, oncoplastic_surgery_primary_pedicle, \
                oncoplastic_surgery_secondary_pedicle, reconstruction_surgery_implant_type, \
                reconstruction_surgery_implant_size = ("Not applicable for Conventional Breast Conservation", )*9
            elif surgery_type_subtype == "Oncoplastic Surgery":
                surgery_type_level_subtype = ask_option("Level of oncoplastic surgery", ["Level 1",
                                                                                         "Level 2: Therapeutic Mammoplasty",
                                                        'Level 3: Volume Replacement'])
                if surgery_type_level_subtype == "Level 1":
                    oncoplastic_surgery_type = ask_option("Type of level 1 oncoplastic surgery",
                                                          ["Type 1: Simple oncoplastic – mammoplasty",
                                                           "Type 2: Volume Displacement"])
                    if oncoplastic_surgery_type == "Type 2: Volume Displacment":
                        oncoplastic_surgery_flap = ask_option("Type of flap used", ["Grisotti Flap", "Round Block",
                                                                        "Batwing Procedure"])
                        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
                        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle, \
                        reconstruction_surgery_implant_type, reconstruction_surgery_implant_size, \
                        surgery_type_level_subtype = ("Not applicabel for Level 1: Type 2 Oncolplastic Surgery with " \
                                                      "volume displacement",)* 8
                    elif oncoplastic_surgery_type == 'Type 1: Simple oncoplastic – mammoplasty':
                        oncoplastic_surgery_flap = "No flap for Simple oncoplastic – mammoplasty"
                        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
                        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle, \
                        reconstruction_surgery_implant_type, reconstruction_surgery_implant_size, \
                        surgery_type_level_subtype = ("Not applicabel for Level 1: Type 1 Simple oncoplastic – "
                                                      "mammoplasty",) * 8
                elif surgery_type_level_subtype =="Level 2: Therapeutic Mammoplasty":
                    oncoplastic_surgery_type = ask_option("Subtypes of Level 2 oncoplastic surgery, Therapeutic Mammoplastty",
                                      ["Simple Therapeutic", "Complex Therapeutic", "Extreme Therapeutic"])
                    oncoplastic_surgery_flap = "Therapeutic Mammoplasty"
                    if oncoplastic_surgery_type in {"Simple Therapeutic"}:
                        oncoplastic_surgery_plan = ask_option("Type of Plan used", ["Wise pattern", "Vertical Scar"])
                        oncoplastic_surgery_tumour_filled_by = oncoplastic_surgery_type
                        oncoplastic_surgery_nac_graft = "No NAC Graft, "+ oncoplastic_surgery_type
                        oncoplastic_surgery_primary_pedicle = ask_option("Type of pedicle used", surgery_tables.pedicle("primary"))
                        oncoplastic_surgery_secondary_pedicle = "No secondary pedicle, "+ oncoplastic_surgery_type
                    if oncoplastic_surgery_type in {"Complex Therapeutic", "Extreme Therapeutic"}:
                        oncoplastic_surgery_tumour_filled_by = ask_option("Tumour filled by", ["Extended Primary Pedicle", "Secondary Pedicle"])
                        oncoplastic_surgery_plan = ask_option("Type of Plan used", ["Wise pattern", "Vertical Scar"])
                        oncoplastic_surgery_nac_graft = ask_option_y_n("Is NAC graft done?")
                        if not oncoplastic_surgery_nac_graft:
                            oncoplastic_surgery_nac_graft = "Nipple areola complex is not grafted "
                            oncoplastic_surgery_primary_pedicle = ask_option("What is Nipple On (primary pedicle) pedicle used?",
                                                         surgery_tables.pedicle("primary"))

                            oncoplastic_surgery_secondary_pedicle = ask_option("What is the secondary pedicle used?",
                                                            surgery_tables.pedicle("secondary"))
                        else:
                            oncoplastic_surgery_nac_graft = "Nipple areola complex is grafted"
                            oncoplastic_surgery_primary_pedicle = oncoplastic_surgery_nac_graft
                            oncoplastic_surgery_secondary_pedicle = ask_option("What is the pedicle used?",
                                                            surgery_tables.pedicle("secondary"))
                        reconstruction_surgery_implant_type, reconstruction_surgery_implant_size = \
                            (oncoplastic_surgery_plan, )*2
                elif surgery_type_level_subtype == "Level 3: Volume Replacement":
                    oncoplastic_surgery_flap = ask_option("Type of flap used", ["Local Flaps", "LD Flaps", "Mini LD"])
                    if oncoplastic_surgery_flap == "Local Flaps":
                        flap_type = ask_option("type of flap", ["Thoraco-epigastric Flap", "LICAP", "TDAP"])
                        oncoplastic_surgery_flap = "Local "+flap_type
                        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
                        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle = \
                            ("Not applicable for volume replacment oncoplasty", )*5
            else:
                other = surgery_type_subtype
                oncoplastic_surgery_type, oncoplastic_surgery_flap, oncoplastic_surgery_plan, \
                oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, oncoplastic_surgery_primary_pedicle, \
                oncoplastic_surgery_secondary_pedicle, reconstruction_surgery_implant_type, \
                reconstruction_surgery_implant_size, surgery_type_level_subtype = (other,) * 10
        elif surgery_type == "Implant Based Reconstruction":
            surgery_type_subtype = ask_option("Type of surgery", ['Non Sling – Conventional IBRS', 'Sling ALDS',
                                                                  'Advanced Sling (AALDS)', 'LD Flap',
                                                                  'LD Flap + Implant', 'TDAP + Implant',
                                                                  'LICAP + Implant', 'Implant'])
            reconstruction_surgery_implant_type = ask_option("Type of implant used", ["Fixed Volume", "Dual Lumen"])
            if reconstruction_surgery_implant_type == "Fixed Volume":
                fixed_type = ask_option("Type of fixed volume implant", ["Smooth", "Textured", "Microtextured"])
                reconstruction_surgery_implant_type = reconstruction_surgery_implant_type + " " + fixed_type
            reconstruction_surgery_implant_size = input("Size of implant used: ")
            surgery_incision = ask_option("Type of incision used", surgery_tables.incision("reconstruction"
                                                                                           "_incision"))
            surgery_type_level_subtype, oncoplastic_surgery_type, oncoplastic_surgery_flap, \
            oncoplastic_surgery_plan,oncoplastic_surgery_tumour_filled_by,oncoplastic_surgery_nac_graft,\
            oncoplastic_surgery_primary_pedicle,oncoplastic_surgery_secondary_pedicle = \
                ("Not applicable for reconstruction surgery", )*8
        else:
            surgery_incision,surgery_type_subtype,surgery_type_level_subtype,oncoplastic_surgery_type,\
            oncoplastic_surgery_flap,oncoplastic_surgery_plan,oncoplastic_surgery_tumour_filled_by,\
            oncoplastic_surgery_nac_graft,oncoplastic_surgery_primary_pedicle,oncoplastic_surgery_secondary_pedicle,\
            reconstruction_surgery_implant_type,reconstruction_surgery_implant_size = (surgery_type, ) *12
        contralateral_surgery = ask_option("Was Contralateral Surgery done?", ["Yes", "No", "Requires Specialist Input"])
        if contralateral_surgery == "Yes":
            contralateral_surgery_type = ask_option("Type of Contralateral Surgery Done", ["Symmetrisation",
                                    "Prophylactic Masstectomy with Reconstruction", "Other"])
            if contralateral_surgery_type == "Symmetrisation":
                contralateral_surgery_type_details = ask_option("Type of Symmetrisation", ["Same as other side",
                                                                "Different from other side"])
                if contralateral_surgery_type_details == "Different from other side":
                    contralateral_surgery_type_details = input ("Please give details of symmetrisation: ")
            else:
                contralateral_surgery_type_details = input ("Please give details of "+contralateral_surgery_type)
            contralateral_surgery = "Contralateral Surgery Performed"
        elif contralateral_surgery == "No":
            contralateral_surgery, contralateral_surgery_type, contralateral_surgery_type_details = \
                ("Contralateral Surgery Not Performed", )*3
        elif contralateral_surgery == "Requires Specialist Input":
             contralateral_surgery_type, contralateral_surgery_type_details = ('Requires Specialist Input', )*2
        surgery_notes = input("Additional Surgery Notes and comments (if available): ")
        data_list = [surgery_date,
                        surgery_hospital,
                        surgery_patient_hospital_id,
                        surgery_date_admission,
                        surgery_hospital_ward,
                        surgery_name_anaesthetist,
                        surgery_name_surgeon,
                        surgery_lesion_location,
                        surgery_type,
                        surgery_incision,
                        surgery_type_subtype,
                        surgery_type_level_subtype,
                        oncoplastic_surgery_type,
                        oncoplastic_surgery_flap,
                        oncoplastic_surgery_plan,
                        oncoplastic_surgery_tumour_filled_by,
                        oncoplastic_surgery_nac_graft,
                        oncoplastic_surgery_primary_pedicle,
                        oncoplastic_surgery_secondary_pedicle,
                        reconstruction_surgery_implant_type,
                        reconstruction_surgery_implant_size,
                        contralateral_surgery,
                        contralateral_surgery_type,
                        contralateral_surgery_type_details,
                        surgery_notes]
        col_list = names('surgery_information')
        check = add_update_sql.review_input(file_number, col_list, data_list)
    return data_list
コード例 #25
0
 def pet_report_findings(self):
     module_name = self.module_list[1]
     report_findings = [
         'NA',
     ] * 21
     report_list = []
     check = False
     while not check:
         pet_general_findings = input(
             'Please enter general findings of PET scan: ')
         for region in PetReport.pet_regions:
             print('\n' + region.title() + ' Report\n')
             normal_report = input('Please enter normal features of ' +
                                   str(region) +
                                   ' region. Separate features by'
                                   ' ";": ')
             abnormal = ask.ask_y_n('Are there any abnormal features in ' +
                                    str(region) + ' region?')
             if abnormal:
                 abnormal_report = input(
                     'Please enter abnormal features of ' + str(region) +
                     'region. Separate '
                     'features by ";": ')
             else:
                 abnormal_report = 'no_abnormal_features'
             report_list = report_list + [normal_report, abnormal_report]
         pet_head_neck_normal_report, pet_head_neck_abnormal_report, pet_thorax_normal_report, \
         pet_thorax_abnormal_report, pet_abdomen_pelvis_normal_report, pet_abodmen_pelvis_abnormal_report, \
         pet_musculoskeletal_normal_report, pet_musculoskeletal_abnormal_report = report_list
         pet_impression = input('Please enter PET impressions statements: ')
         pet_primary_disease = ask.ask_y_n(
             'Does the report describe a primary untreated breast cancer?',
             yes_ans='primary_disease',
             no_ans='not_primary_disease')
         pet_local_spread = ask.ask_y_n_na(
             'Does the report describe local/regional spread of the disease?',
             yes_ans='local_spread_present',
             no_ans='no_local_spread',
             na_ans='local_spread_resolved')
         pet_recurrence = ask.ask_y_n_na(
             'Does the report describe recurrence of the disease?',
             yes_ans='recurrence_present',
             no_ans='no_recurrence_present',
             na_ans='possible_recurrence')
         pet_distant_metastasis = ask.ask_y_n_na(
             'Does the report describe distant metastasis of the disease?',
             yes_ans='metastasis',
             no_ans='no_metastasis',
             na_ans='possible_metastasis')
         report_findings = [
             pet_general_findings, pet_head_neck_normal_report,
             pet_head_neck_abnormal_report, pet_thorax_normal_report,
             pet_thorax_abnormal_report, pet_abdomen_pelvis_normal_report,
             pet_abodmen_pelvis_abnormal_report,
             pet_musculoskeletal_normal_report,
             pet_musculoskeletal_abnormal_report, pet_impression,
             pet_primary_disease, pet_local_spread, pet_recurrence,
             pet_distant_metastasis
         ]
         columns_list = names(module_name)
         check = sql.review_input(self.file_number, columns_list,
                                  report_findings)
     return report_findings
コード例 #26
0
def post_surgery(file_number, user_name):
    check = False
    while not check:
        check_drain = ask_y_n('Was drain inserted post surgery?')
        drain, total_drain = ('No drain used', )*2
        if check_drain:
            drain = input("Drain removal date: ")
            total_drain = input("Total drain days: ")
        post_comp = ask_y_n("Did post-surgery complications occur?")
        if post_comp:
            df_complications_col = ["Day", "Complication", "Treatment"]
            df_complications = pd.DataFrame(columns = df_complications_col)
            day_add = True
            index = 0
            while day_add:
                comp =surgery_tables.surg_complications("post_surgery_comp")
                day = "Day "+input("Days post surgery: ")
                treatment_list = []
                complication = []
                for i in comp:
                    data = ask_y_n("On "+str(day)+ " did post surgery complication "+i+" occur?")
                    if data:
                        complication.append(i)
                        treatment = ask_option("What treatment was done for "+str(i),
                                               surgery_tables.surg_complications("surgical_treatment"))
                        if treatment == 'Non surgical treatment':
                            treatment = input ("What type of non surgical treatment was used?")
                        else:
                            treatment = "Surgical treatment - "+ treatment
                        treatment_list.append(treatment)
                complication= "; ".join(complication)
                treatment_list = "; ".join(treatment_list)
                data = [day, complication, treatment_list]
                df_complications.loc[index] = data
                index = index + 1
                day_add = ask_y_n("Add another day for post surgery complications? ")
            all_data = []
            for index in df_complications_col:
                data = "; ".join(list(df_complications.loc[:, index]))
                all_data.append(data)
            days, complications, treatments = all_data
        else:
            days, complications, treatments = ("No post surgical complications", )*3
        chemo = ask_option_y_n("Is chemotherapy planned?", "Chemotherapy planned", "No Chemotherapy")
        radio = ask_option_y_n("Is radiotherapy planned?", "RadiotherapyOptions planned", "No RadiotherapyOptions")
        other = ask_option_y_n("Are there any other post-surgery plans")
        if other == 'Yes':
            other = input("Please specify other post-surgery plans: ")
        elif other == 'No':
            other = "No other post surgery plans"
        recur = ask_option_y_n("Did recurrence occur post surgery?")
        if recur == 'Yes':
            recurs = []
            days_recurs = []
            late_add = True
            recur = surgery_tables.surg_complications("recurrence_sites")
            while late_add:
                day = "Day " + input("Days post surgery: ")
                for i in recur:
                    data = ask_y_n("On " + str(day) + " did " + i + " recurrence occur?")
                    if data:
                        recurs.append(i)
                if recurs == []:
                    recurs = "No recurrence post surgery"
                days_recurs.append(day)
                late_add = ask_y_n("Add another day for post surgery recurrence? ")
            all_data = [days_recurs, recurs]
            days_recurs, recurs = join_lists(all_data, "; ")
        elif recur == 'No':
            days_recurs, recurs = ("No recurrence post surgery",) * 2
        else:
            days_recurs, recurs = (recur,) * 2
        opd = input("Please input OPD notes (if any): ")
        data_list = [chemo, radio, other,drain, total_drain, days, complications, treatments, days_recurs, recurs, opd,
                     user_name, add_update_sql.last_update()]
        col_list = names("post_surgery")
        check = add_update_sql.review_input(file_number, col_list, data_list)
    return data_list
コード例 #27
0
def chemotherapy(file_number, user_name):
    col_drug = names("chemo_drug_table")
    drug_table = pd.DataFrame(columns=col_drug)
    col_tox = names('chemo_tox_table')
    toxicity = pd.DataFrame(columns=col_tox)
    data_list = [
        'data_to_be_entered',
    ] * 27 + [user_name, sql.last_update()]
    check = False
    while not check:
        chemo = ask.ask_y_n_na(
            "Has adjuvant chemotherapy been done for the patient?")
        if chemo == 'Yes':
            place_chemo = ask.ask_y_n_na(
                "Has Adjuvant Chemotherapy been done at PCCM?", "At PCCM",
                "Outside", "Not Certain, requires follow-up")
            details_chemo = ask.ask_y_n(
                "Are Adjuvant Chemotherapy details available?",
                "Details Available", "Follow-up required")
            chemo = "act_given"
            if details_chemo == "Follow-up required":
                plan_chemo, date_start_chemo, cyc_number, drug_cyc, drug_doses, drug_units, tox_type, tox_grade, \
                tox_treat, tox_response, tox_cycle, change_tox,chemo_response_by, chemo_response, chemo_size, \
                chemo_size_date, trast_chemo, trast_regime, trast_courses,date_complete, reason_incomplete, \
                hormone_therapy, therapy_type, therapy_duration, therapy_side, ovary_status, patient_wt, drug_freq\
                    = (details_chemo,)*28
            elif details_chemo == "Details Available":
                plan_chemo = input(
                    "What is the plan of Adjuvant Chemotherapy (for eg., "
                    "4 cycles AC followed by 12 cycles Paclitaxel):")
                date_start_chemo = ask.check_date(
                    "Date of starting Adjuvant Chemotherapy: ")
                patient_wt = ask.check_number_input(
                    "Weight of patient at start of therapy (in kgs): ",
                    'Weight must '
                    'be a number')
                check_wt = ask.ask_y_n(
                    "Is weight at any other time point mentioned in report?")
                while check_wt:
                    other_wt = input("Time point at which weight mentioned: ")
                    other_wt = other_wt + " " + input("Weight of patient at " +
                                                      other_wt + ": ")
                    patient_wt = patient_wt + "; " + other_wt
                    check_wt = ask.ask_y_n(
                        "Is weight at any other time point mentioned in report "
                        "(with date, if given)?")
                drug_table = drug_table_enter(file_number, drug_table)
                data_drug = col_drug[1:]
                data_drug_list = []
                for index in data_drug:
                    data_drug = "; ".join(list(drug_table.loc[:, index]))
                    data_drug_list.append(data_drug)
                drug_cyc, cyc_number, drug_freq, drug_doses, drug_units = data_drug_list
                toxicity = tox_table(file_number, drug_cyc, toxicity)
                columns = col_tox
                tox_details = []
                for column in columns:
                    tox_detail = toxicity.loc[:, column].drop_duplicates()
                    tox_details.append(list(tox_detail))
                tox_details = ask.join_lists(tox_details, "; ")
                file_number_tox, drug_tox, tox_type, tox_grade, tox_treat, tox_response, tox_cycle, change_tox \
                    = tox_details
                trast_chemo = ask.ask_y_n("Trastuzumab used?")
                if trast_chemo:
                    trast_regime = ask.ask_option("Trastuzumab use was",
                                                  ["Sequential", "Concurrent"])
                    trast_chemo = "Trastuzumab used"
                    trast_courses = ask.check_number_input(
                        "Number of courses of trastuzumab/herceptin taken: ",
                        'Enter number only')
                else:
                    trast_chemo, trast_regime, trast_courses, therapy_side = (
                        "Trastuzumab not used", ) * 4
                date_complete = ask.check_date(
                    "Date of completion of Adjuvant Chemotherapy: ")
                complete_chemo = ask.ask_y_n(
                    "Was Adjuvant Chemotherapy completed as per schedule?")
                if complete_chemo:
                    reason_incomplete = "Adjuvant Chemotherapy completed as per schedule"
                else:
                    reason_incomplete = ask.ask_option(
                        "Reason for discontinuation", [
                            "Toxicity", "Reluctance of patient",
                            "Progression on chemotherapy",
                            "Advised by treating doctor",
                            "Death due to toxicity",
                            "Death due to progressive disease",
                            "Preferred treatment at another centre",
                            "Death due to unrelated cause",
                            "Patient was unable to afford treatment"
                        ])
                    reason_incomplete = "Adjuvant Chemotherapy incomplete: " + reason_incomplete
                menopause = ask.ask_option("Menopausal Status", [
                    "Pre-menopausal", "Peri-menopausal", "Post-Menopausal",
                    "Other"
                ])
                if menopause in {"Pre-menopausal", "Peri-menopausal"}:
                    ovary_status = ask.ask_option(
                        "Status of ovarian function after Chemotherapy", [
                            "Menses ongoing", "Amenorrhoea on Chemo",
                            "Amenorrhoea post Chemotherapy"
                        ])
                else:
                    ovary_status = menopause
                #hormone_therapy, therapy_type, therapy_duration, therapy_side = hormone_therapy_chemo()
                hormone_therapy, therapy_type, therapy_duration, therapy_side = (
                    'NA', ) * 4
            else:
                plan_chemo, date_start_chemo, cyc_number, drug_cyc, drug_doses, drug_units, drug_freq,tox_type, \
                tox_grade, tox_treat, tox_response, tox_cycle, change_tox,chemo_response_by, chemo_response, \
                chemo_size, chemo_size_date, trast_chemo, trast_regime, trast_courses, hormone_therapy,  therapy_type, \
                therapy_duration, therapy_side, date_complete, reason_incomplete,ovary_status, patient_wt \
                    = (details_chemo,)*28
        elif chemo == 'No':
            place_chemo, plan_chemo, date_start_chemo, cyc_number, drug_cyc, drug_doses, drug_units, \
            drug_freq,tox_type, tox_grade, tox_treat, tox_response, tox_cycle, change_tox, chemo_response_by, \
            chemo_response, chemo_size, chemo_size_date, trast_chemo, trast_regime, trast_courses, hormone_therapy, \
            therapy_type, therapy_duration, therapy_side, date_complete, reason_incomplete, details_chemo, chemo, \
            ovary_status, patient_wt = ("Adjuvant Chemotherapy not given",)*31
        else:
            place_chemo, plan_chemo, date_start_chemo, cyc_number, drug_cyc, drug_doses, drug_units, drug_freq, \
            tox_type, tox_grade, tox_treat, tox_response, tox_cycle, change_tox, chemo_response_by, chemo_response, \
            chemo_size, chemo_size_date, trast_chemo, trast_regime, trast_courses, hormone_therapy, therapy_type, \
            therapy_duration,ovary_status, therapy_side, date_complete, reason_incomplete, details_chemo, patient_wt \
                = (chemo,)*30
        data_list = [
            chemo, place_chemo, details_chemo, plan_chemo, date_start_chemo,
            patient_wt, drug_cyc, cyc_number, drug_freq, drug_doses,
            drug_units, tox_type, tox_grade, tox_treat, tox_response,
            tox_cycle, change_tox, reason_incomplete, date_complete,
            trast_chemo, trast_regime, trast_courses, ovary_status,
            hormone_therapy, therapy_type, therapy_duration, therapy_side,
            user_name,
            sql.last_update()
        ]
        col_list = names("adjuvant_chemotherapy")
        check = sql.review_input(file_number, col_list, data_list)
    return data_list, drug_table, toxicity
コード例 #28
0
def surgery_information(file_number):
    check = False
    while not check:
        surgery_date,surgery_hospital,surgery_patient_hospital_id,surgery_date_admission, surgery_hospital_ward, \
        surgery_name_anaesthetist, surgery_name_surgeon, surgery_lesion_location, surgery_type, surgery_incision, \
        surgery_type_subtype, surgery_type_level_subtype, oncoplastic_surgery_type, oncoplastic_surgery_flap, \
        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle, reconstruction_surgery_implant_type,\
        reconstruction_surgery_implant_size, contralateral_surgery, contralateral_surgery_type, \
        contralateral_surgery_type_details, surgery_notes = (" ", )*25
        surgery_date = input("Date of surgery: ")
        surgery_hospital = ask.ask_list("Name of hospital",
                                        SurgeryLists.hospitals)
        surgery_patient_hospital_id = input("Patient ID at the hospital: ")
        surgery_hospital_ward = input("Name of hospital ward: ")
        surgery_date_admission = input("Date of admission: ")
        surgery_name_anaesthetist = ask.ask_list("Name of Anaesthetist",
                                                 SurgeryLists.anesthetists)
        surgery_name_surgeon = ask.ask_list("Name of the Surgeon/s",
                                            SurgeryLists.surgeon)
        lesion = ask.ask_list("Location of lesion", SurgeryLists.lesion)
        if lesion in {"Right Breast", "Left Breast", "Both Breasts"}:
            surgery_lesion_location = lesion_location(lesion)
        else:
            surgery_lesion_location = 'Requires specialist Input'
        surgery_incision = ask.ask_list('Incision type', SurgeryLists.incision)
        if surgery_incision == 'Circum-areolar':
            type = ask.ask_list('Pleaes define margine', [
                'At areolar margin', 'Away from margin', 'Data not in report'
            ])
            surgery_incision = surgery_incision + ': ' + type
        surgery_type = ask.ask_list("Types of Surgery", [
            "Conservative Breast Surgery", "Implant Based Reconstruction",
            'Requires Specialist Input'
        ])
        if surgery_type == "Conservative Breast Surgery":
            surgery_type_subtype = ask.ask_list(
                "Type of Breast Conservation Surgery",
                ['Conventional Surgery', 'Oncoplastic Surgery', 'Other'])
            if surgery_type_subtype == "Conventional Surgery":
                surgery_type_level_subtype = ask.ask_list(
                    "type of conventional surgery",
                    SurgeryLists.conventional_surgery_subtype)
                if surgery_type_level_subtype == 'Extreme Resection':
                    guide = ask.ask_list('Surgery guide', SurgeryLists.guide)
                    surgery_type_level_subtype = surgery_type_level_subtype + ': ' + guide
                oncoplastic_surgery_type, oncoplastic_surgery_flap, oncoplastic_surgery_plan, \
                oncoplastic_surgery_tumour_filled_by,oncoplastic_surgery_nac_graft, oncoplastic_surgery_primary_pedicle, \
                oncoplastic_surgery_secondary_pedicle, reconstruction_surgery_implant_type, \
                reconstruction_surgery_implant_size = ("Not applicable for Conventional Breast Conservation", )*9
            elif surgery_type_subtype == "Oncoplastic Surgery":
                surgery_type_level_subtype = ask.ask_option(
                    "Level of oncoplastic surgery",
                    SurgeryLists.oncoplastic_levels)
                if surgery_type_level_subtype == "Level 1":
                    oncoplastic_surgery_type = ask.ask_list(
                        "Type of level 1 oncoplastic surgery",
                        SurgeryLists.level_1_type)
                    if oncoplastic_surgery_type == "Type 2: Volume Displacment":
                        oncoplastic_surgery_flap = ask.ask_list(
                            "Type of flap used", SurgeryLists.level_2_flap)
                        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
                        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle, \
                        reconstruction_surgery_implant_type, reconstruction_surgery_implant_size, \
                        surgery_type_level_subtype = ("Not applicabel for Level 1, Type 2 Oncolplastic Surgery with " \
                                                      "volume displacement",)* 8
                    elif oncoplastic_surgery_type == 'Type 1: Simple oncoplastic – mammoplasty':
                        oncoplastic_surgery_flap = "No flap for Simple oncoplastic – mammoplasty"
                        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
                        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle, \
                        reconstruction_surgery_implant_type, reconstruction_surgery_implant_size, \
                        surgery_type_level_subtype = ("Not applicabel for Level 1: Type 1 Simple oncoplastic – "
                                                      "mammoplasty",) * 8
                elif surgery_type_level_subtype == "Level 2: Therapeutic Mammoplasty":
                    oncoplastic_surgery_type = ask.ask_list(
                        "Subtypes of Therapeutic Mammoplastty",
                        ["Simple "
                         "Therapeutic", "Extreme "
                         "Therapeutic"])
                    oncoplastic_surgery_flap = "Therapeutic Mammoplasty"
                    if oncoplastic_surgery_type == "Simple Therapeutic":
                        oncoplastic_surgery_plan = ask.ask_list(
                            "Type of Plan used", SurgeryLists.simple_plan)
                        oncoplastic_surgery_tumour_filled_by = oncoplastic_surgery_type
                        oncoplastic_surgery_nac_graft = "No NAC Graft, " + oncoplastic_surgery_type
                        oncoplastic_surgery_primary_pedicle = ask.ask_list(
                            "Type of pedicle used",
                            SurgeryLists.simple_pedicle)
                        oncoplastic_surgery_secondary_pedicle = "No secondary pedicle, " + oncoplastic_surgery_type
                    if oncoplastic_surgery_type == "Extreme Therapeutic":
                        oncoplastic_surgery_tumour_filled_by = ask.ask_list(
                            "Tumour filled by",
                            ["Extended Primary Pedicle", "Secondary Pedicle"])
                        oncoplastic_surgery_plan = ask.ask_list(
                            "Type of Plan used", SurgeryLists.simple_plan)
                        oncoplastic_surgery_nac_graft = ask.ask_y_n(
                            "Is NAC graft done?")
                        if not oncoplastic_surgery_nac_graft:
                            oncoplastic_surgery_nac_graft = "NAC not grafted "
                            oncoplastic_surgery_primary_pedicle = ask.ask_list(
                                "What is Nipple On (primary pedicle) "
                                "pedicle used?", SurgeryLists.primary_pedicle)
                            oncoplastic_surgery_secondary_pedicle = ask.ask_list(
                                "What is the secondary pedicle used?",
                                surgery_tables.pedicle("secondary"))
                        else:
                            oncoplastic_surgery_nac_graft = "Nipple areola complex is grafted"
                            oncoplastic_surgery_primary_pedicle = oncoplastic_surgery_nac_graft
                            oncoplastic_surgery_secondary_pedicle = ask_option(
                                "What is the pedicle used?",
                                surgery_tables.pedicle("secondary"))
                        reconstruction_surgery_implant_type, reconstruction_surgery_implant_size = \
                            (oncoplastic_surgery_plan, )*2
                elif surgery_type_level_subtype == "Level 3: Volume Replacement":
                    oncoplastic_surgery_flap = ask_option(
                        "Type of flap used",
                        ["Local Flaps", "LD Flaps", "Mini LD"])
                    if oncoplastic_surgery_flap == "Local Flaps":
                        flap_type = ask_option(
                            "type of flap",
                            ["Thoraco-epigastric Flap", "LICAP", "TDAP"])
                        oncoplastic_surgery_flap = "Local " + flap_type
                        oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, \
                        oncoplastic_surgery_primary_pedicle, oncoplastic_surgery_secondary_pedicle = \
                            ("Not applicable for volume replacment oncoplasty", )*5
            else:
                other = surgery_type_subtype
                oncoplastic_surgery_type, oncoplastic_surgery_flap, oncoplastic_surgery_plan, \
                oncoplastic_surgery_tumour_filled_by, oncoplastic_surgery_nac_graft, oncoplastic_surgery_primary_pedicle, \
                oncoplastic_surgery_secondary_pedicle, reconstruction_surgery_implant_type, \
                reconstruction_surgery_implant_size, surgery_type_level_subtype = (other,) * 10
        elif surgery_type == "Implant Based Reconstruction":
            surgery_type_subtype = ask_option("Type of surgery", [
                'Non Sling – Conventional IBRS', 'Sling ALDS',
                'Advanced Sling (AALDS)', 'LD Flap', 'LD Flap + Implant',
                'TDAP + Implant', 'LICAP + Implant', 'Implant'
            ])
            reconstruction_surgery_implant_type = ask_option(
                "Type of implant used", ["Fixed Volume", "Dual Lumen"])
            if reconstruction_surgery_implant_type == "Fixed Volume":
                fixed_type = ask_option(
                    "Type of fixed volume implant",
                    ["Smooth", "Textured", "Microtextured"])
                reconstruction_surgery_implant_type = reconstruction_surgery_implant_type + " " + fixed_type
            reconstruction_surgery_implant_size = input(
                "Size of implant used: ")
            surgery_incision = ask_option(
                "Type of incision used",
                surgery_tables.incision("reconstruction"
                                        "_incision"))
            surgery_type_level_subtype, oncoplastic_surgery_type, oncoplastic_surgery_flap, \
            oncoplastic_surgery_plan,oncoplastic_surgery_tumour_filled_by,oncoplastic_surgery_nac_graft,\
            oncoplastic_surgery_primary_pedicle,oncoplastic_surgery_secondary_pedicle = \
                ("Not applicable for reconstruction surgery", )*8
        else:
            surgery_incision,surgery_type_subtype,surgery_type_level_subtype,oncoplastic_surgery_type,\
            oncoplastic_surgery_flap,oncoplastic_surgery_plan,oncoplastic_surgery_tumour_filled_by,\
            oncoplastic_surgery_nac_graft,oncoplastic_surgery_primary_pedicle,oncoplastic_surgery_secondary_pedicle,\
            reconstruction_surgery_implant_type,reconstruction_surgery_implant_size = (surgery_type, ) *12
        contralateral_surgery = ask_option(
            "Was Contralateral Surgery done?",
            ["Yes", "No", "Requires Specialist Input"])
        if contralateral_surgery == "Yes":
            contralateral_surgery_type = ask_option(
                "Type of Contralateral Surgery Done", [
                    "Symmetrisation",
                    "Prophylactic Masstectomy with Reconstruction", "Other"
                ])
            if contralateral_surgery_type == "Symmetrisation":
                contralateral_surgery_type_details = ask_option(
                    "Type of Symmetrisation",
                    ["Same as other side", "Different from other side"])
                if contralateral_surgery_type_details == "Different from other side":
                    contralateral_surgery_type_details = input(
                        "Please give details of symmetrisation: ")
            else:
                contralateral_surgery_type_details = input(
                    "Please give details of " + contralateral_surgery_type)
            contralateral_surgery = "Contralateral Surgery Performed"
        elif contralateral_surgery == "No":
            contralateral_surgery, contralateral_surgery_type, contralateral_surgery_type_details = \
                ("Contralateral Surgery Not Performed", )*3
        elif contralateral_surgery == "Requires Specialist Input":
            contralateral_surgery_type, contralateral_surgery_type_details = (
                'Requires Specialist Input', ) * 2
        surgery_notes = input(
            "Additional Surgery Notes and comments (if available): ")
        data_list = [
            surgery_date, surgery_hospital, surgery_patient_hospital_id,
            surgery_date_admission, surgery_hospital_ward,
            surgery_name_anaesthetist, surgery_name_surgeon,
            surgery_lesion_location, surgery_type, surgery_incision,
            surgery_type_subtype, surgery_type_level_subtype,
            oncoplastic_surgery_type, oncoplastic_surgery_flap,
            oncoplastic_surgery_plan, oncoplastic_surgery_tumour_filled_by,
            oncoplastic_surgery_nac_graft, oncoplastic_surgery_primary_pedicle,
            oncoplastic_surgery_secondary_pedicle,
            reconstruction_surgery_implant_type,
            reconstruction_surgery_implant_size, contralateral_surgery,
            contralateral_surgery_type, contralateral_surgery_type_details,
            surgery_notes
        ]
        col_list = names('surgery_information')
        check = add_update_sql.review_input(file_number, col_list, data_list)
    return data_list
コード例 #29
0
    def surgery_block_information_1(self):
        module_name = self.module_list[1]
        data_list = ['NA', ] * 21
        block_desc_df = pd.DataFrame()
        check = False
        while not check:
            blocks = BlockDescription(fk=self.fk, file_number=self.file_number, block_id=self.surgery_block_id,
                                      block_no=self.surgery_number_of_blocks, user_name=self.user_name)
            block_desc_df, block_descriptions_all = blocks.block_description()
            breast_cancer_yes_no = sql.get_value_no_error(col_name='breast_cancer_yes_no', table=self.table_name,
                                                 pk=self.fk, cursor=self.cursor, pk_name='fk')
            if not breast_cancer_yes_no:
                breast_cancer_yes_no = ask.ask_y_n('Is this a case of breast cancer (Unilateral OR Bilateral)',
                                               yes_ans="breast_cancer_yes", no_ans="breast_cancer_no")
            surgery_lesion_site = sql.get_value_no_error(col_name='surgery_lesion_site', table=self.table_name,
                                                pk=self.file_number, cursor=self.cursor, pk_name='file_number')
            if not surgery_lesion_site:
                surgery_lesion_site = ask.ask_list("Lesion on", ["right_breast", "left_breast", "bilateral"])
            block_info = BlockInformation(self.conn, self.cursor, self.file_number)
            specimen_resection_size, margin_size, cut_margin_size, margin_report = block_info.margin_info()
            tumour_size, tumour_size_unit, tumour_grade, surgery_diagnosis, surgery_diagnosis_comments, dcis_yes_no, \
            dcis_percent, surgery_perineural_invasion, surgery_necrosis, surgery_lymphovascular_invasion, \
            percent_lymph_invasion, stromal_tils_percent, tumour_desmoplastic_response = [breast_cancer_yes_no, ] * 13
            print('breast_cancer_yes_no: ' + breast_cancer_yes_no)
            check_answer = ask.ask_y_n('Is this correct?')
            while not check_answer:
                breast_cancer_yes_no = ask.ask_y_n('Is this a case of breast cancer (Unilateral OR Bilateral)',
                                                   yes_ans="breast_cancer_yes", no_ans="breast_cancer_no")
                check_answer = ask.ask_y_n('Is this correct?')
            if breast_cancer_yes_no == 'breast_cancer_yes':
                tumour_size = input("Tumour size (please input dimension only, e.g, 1 x 3 x 4): ")
                tumour_size_unit = ask.ask_list("Tumour size unit", ['mm', 'cm'])
                tumour_grade = ask.ask_option("Tumour Grade", ["I", "II", "III"])
                surgery_diagnosis = self.bilateral_treatment(surgery_lesion_site, "Surgery Diagnosis: ",
                                                             PathReports.diagnosis)
                surgery_diagnosis_comments = self.bilateral_treatment(surgery_lesion_site, 'Descriptive or indicative '
                                                                                           'notes for surgery '
                                                                                           'diagnosis: ', 'input')
                dcis_yes_no = self.bilateral_treatment(surgery_lesion_site, 'DCIS', ask.create_yes_no_options('DCIS'))
                dcis_percent = dcis_yes_no
                if 'dcis_yes' in dcis_yes_no:
                    dcis_percent = self.bilateral_treatment(surgery_lesion_site, "Percent DCIS (number only if given "
                                                                                 "else NA): ", 'input')
                surgery_perineural_invasion = self.bilateral_treatment(surgery_lesion_site, "Perineural Invasion: ",
                                                                       ask.create_yes_no_options('Perineural Invasion',
                                                                                                  yes='yes', no='no'))
                surgery_necrosis = self.bilateral_treatment(surgery_lesion_site, "Necrosis", ask.create_yes_no_options(
                    'Necrosis'))
                surgery_lymphovascular_invasion = self.bilateral_treatment(surgery_lesion_site,
                                                                           "Lymphovascular Invasion: ",
                                                                           ask.create_yes_no_options
                                                                           ('Lymphovascular Invasion'))
                percent_lymph_invasion = self.bilateral_treatment(surgery_lesion_site, "Percent Lymphocyte Invasion "
                                                                                       "Enter number only; Enter "
                                                                                       "'data_not_in_report' "
                                                                                       "if not available: ", 'input')
                stromal_tils_percent = self.bilateral_treatment(surgery_lesion_site, 'Stromal Tumor infiltrating '
                                                                                     'lymphocytes: ', 'input')
                tumour_desmoplastic_response = self.bilateral_treatment(surgery_lesion_site,
                                                                        "Tumor desmoplastic response: ",
                                                                        ask.create_yes_no_options
                                                                        ('Tumor desmoplastic response'))

            tumour_block_ref, node_block_ref, ad_normal_block_ref, red_tissue_block_ref \
                = ask.join_lists(block_descriptions_all, sep="; ")
            data_list = [specimen_resection_size, tumour_block_ref, margin_size, cut_margin_size, margin_report,
                        node_block_ref, ad_normal_block_ref, red_tissue_block_ref, tumour_size, tumour_size_unit,
                        tumour_grade, surgery_diagnosis, surgery_diagnosis_comments, dcis_yes_no, dcis_percent,
                        surgery_perineural_invasion, surgery_necrosis, surgery_lymphovascular_invasion,
                         percent_lymph_invasion, stromal_tils_percent, tumour_desmoplastic_response]
            columns_list = names(module_name)
            check = sql.review_input(self.file_number, columns_list, data_list)
        return tuple(data_list), block_desc_df
コード例 #30
0
 def nact_test(self):
     col_drug = names("nact_drug_table")
     drug_table = pd.DataFrame(columns=col_drug)
     col_tox = names('nact_tox_table')
     toxicity = pd.DataFrame(columns=col_tox)
     nact_status, place_nact, details_nact, plan_nact, date_start_nact,
     patient_weight_nact, nact_drugs_administered, number_cycles_nact,
     cycle_weekly_frequency, drugs_totaldose, drugs_unit, toxicity_type,
     toxicity_grade, toxicity_treatment, toxicity_response,
     nact_change_due_to_toxicity, tumour_response_check_method,
     tumour_response_nact, tumour_size, tumour_size_unit,
     date_tumour_size_checked, nact_response_impression,
     nact_response_node, nact_completion_status, nact_end_date,
     trastuzumab_use_nact, trastuzumab_regime_nact,
     trastuzumab_courses_taken_nact, hormone_therapy_nact,
     hormone_therapy_type_nact, hormone_therapy_duration,
     horomone_therapy_side_effects = [
         'NA',
     ] * 33
     data_list = [
         'NA',
     ] * 30 + [self.user_name, sql.last_update()]
     check = False
     while not check:
         nact_status = ask.ask_y_n_na(
             "Has neo adjuvant therapy been done for the patient (Please check for chemotherapy and/hormone therapy)?"
         )
         if nact_status == 'Yes':
             place_nact = ask.ask_y_n_na(
                 "Has neo adjuvant therapy been done at PCCM?", "At PCCM",
                 "Outside", "Not Certain, requires follow-up")
             details_nact = ask.ask_y_n(
                 "Are neo adjuvant therapy details available?",
                 "Details Available", "Follow-up required")
             if details_nact == "Follow-up required":
                 plan_nact, date_start_nact, patient_weight_nact, nact_drugs_administered, number_cycles_nact, cycle_weekly_frequency, drugs_totaldose, drugs_unit, toxicity_type, toxicity_grade, toxicity_treatment, toxicity_response, toxicity_at_cycle, nact_change_due_to_toxicity, tumour_response_check_method, tumour_response_nact, tumour_size, tumour_size_unit, date_tumour_size_checked, nact_response_impression, nact_response_node, nact_completion_status, nact_end_date, trastuzumab_use_nact, trastuzumab_regime_nact, trastuzumab_courses_taken_nact, hormone_therapy_nact, hormone_therapy_type_nact, hormone_therapy_duration, dhoromone_therapy_side_effects = (
                     details_nact, ) * 30
             elif details_nact == "Details Available":
                 plan_nact = input(
                     "What is the plan of NACT (for eg., 4 cycles AC followed by 12 cycles Paclitaxel; "
                     "Include hormone therapy plan here):")
                 date_start_nact = ask.check_date(
                     "Date of starting neo-adjuvant therapy: ")
                 patient_weight_nact = input(
                     "Weight of patient at start of therapy (in kgs): ")
                 check_wt = ask.ask_y_n(
                     "Is weight at any other time point mentioned in report "
                     "(with date, if given)?")
                 while check_wt:
                     other_wt = input(
                         "Time point at which weight mentioned: ")
                     other_wt = other_wt + " " + \
                         input("Weight of patient at " + other_wt + ": ")
                     patient_weight_nact = patient_weight_nact + "; " + other_wt
                     check_wt = ask.ask_y_n(
                         "Is weight at any other time point mentioned in report "
                         "(with date, if given)?")
                 drug_admin = drug_table_enter(file_number, drug_table)
                 data_drug = col_drug[1:]
                 data_drug_list = []
                 for index in data_drug:
                     data_drug = "; ".join(list(drug_admin.loc[:, index]))
                     data_drug_list.append(data_drug)
                 nact_drugs_administered, number_cycles_nact, cycle_weekly_frequency, drugs_totaldose, drugs_unit\
                     = data_drug_list
                 toxicity = tox_table(file_number, nact_drugs_administered,
                                      toxicity)
                 columns = col_tox
                 tox_details = []
                 for column in columns:
                     tox_detail = toxicity.loc[:, column].drop_duplicates()
                     tox_details.append(list(tox_detail))
                 tox_details = ask.join_lists(tox_details, "; ")
                 print(tox_details)
                 file_number, nact_drugs_administered, toxicity_type, toxicity_grade, toxicity_treatment, toxicity_response, \
                     toxicity_at_cycle, nact_change_due_to_toxicity = tox_details
                 tumour_response_check_method = ask.ask_option(
                     "Response to NACT measured by",
                     ['Mammography', 'SonoMammography'])
                 if tumour_response_check_method not in {
                         'Mammography', 'SonoMammography'
                 }:
                     tumour_response_nact, tumour_size, tumour_size_unit, date_tumour_size_checked, nact_response_impression, \
                         nact_response_node, nact_response_impression, nact_response_node = (
                             tumour_response_check_method,)*8
                 else:
                     tumour_response_nact = ask.ask_list(
                         "Response of tumour",
                         ["Partial", "Complete", "No Effect", "Other"])
                     tumour_size = input(
                         "Tumour size (without unit, e.g., 2 x 4 x 5) after treatment: "
                     )
                     tumour_size_unit = ask.ask_option(
                         "Tumour size unit", ['mm', 'cm'])
                     date_tumour_size_checked = ask.check_date(
                         "Date tumour size checked: ")
                     nact_response_impression = input(
                         'Please input impression given in report for NACT response: '
                     )
                     nact_node = ask.ask_y_n(
                         'Does the report mention node response? ')
                     nact_response_node = 'nact_node_response_not_mentioned'
                     if nact_node:
                         nact_response_node = input(
                             'Please input statement on node response to NACT: '
                         )
                 trast_nact = ask.ask_y_n("Trastuzumab used?")
                 if trast_nact:
                     trastuzumab_regime_nact = ask.ask_option(
                         "Trastuzumab use was",
                         ["Sequential", "Concurrent"])
                     trastuzumab_use_nact = "Trastuzumab used"
                     trastuzumab_courses_taken_nact = input(
                         "Number of courses of trastuzumab/herceptin taken: "
                     )
                 else:
                     trastuzumab_use_nact, trastuzumab_regime_nact, trastuzumab_courses_taken_nact, \
                         = ("no_neo_adjuvant_trastuzumab", )*3
                 nact_end_date = ask.check_date(
                     "Date of completion of NACT: ")
                 complete_nact = ask.ask_y_n(
                     "Was NACT completed as per schedule? ")
                 if complete_nact:
                     nact_completion_status = "nact_complete"
                 else:
                     nact_completion_status = ask.ask_option(
                         "Reason for discontinuation", [
                             "Toxicity", "Reluctance of patient",
                             "Progression on chemotherapy",
                             "Advised by treating doctor",
                             "Death due to toxicity",
                             "Death due to progressive disease",
                             "Preferred treatment at another centre",
                             "Death due to unrelated cause",
                             "Patient was unable to afford treatment"
                         ])
                     nact_completion_status = "NACT incomplete: " + nact_completion_status
                 hormone_therapy = ask.ask_y_n_na(
                     "Was hormone therapy given?")
                 if hormone_therapy == 'Yes':
                     hormone_therapy_nact = "naht_given"
                     hormone_therapy_type_nact = ask.ask_option(
                         "Hormone therapy type",
                         ["Sequential", "Concurrent"])
                     hormone_therapy_duration = input(
                         "What was the duration of therapy? ")
                     therapy_side = ask.ask_y_n_na(
                         "Were any side effects observed ?")
                     horomone_therapy_side_effects = 'no_side_effects'
                     if therapy_side == 'Yes':
                         horomone_therapy_side_effects = input(
                             "Please give details of side effects observed: "
                         )
                     nact_naht = ask.ask_y_n(
                         'Was chemotherapy given in addition to hormone therapy?'
                     )
                     if nact_naht:
                         nact_status = 'nact_and_naht_given'
                     else:
                         nact_status = 'naht_given'
                 elif hormone_therapy == 'No':
                     hormone_therapy = "no_naht"
                     nact_status = "nact_given"
                     hormone_therapy_nact, hormone_therapy_type_nact, hormone_therapy_duration, \
                         horomone_therapy_side_effects = (
                             hormone_therapy,) * 4
                 else:
                     hormone_therapy_nact, hormone_therapy_type_nact, hormone_therapy_duration, \
                         horomone_therapy_side_effects = (
                             hormone_therapy,) * 4
                     nact_status = "nact_given"
         data_list = [
             nact_status, place_nact, details_nact, plan_nact,
             date_start_nact, patient_weight_nact, nact_drugs_administered,
             number_cycles_nact, cycle_weekly_frequency, drugs_totaldose,
             drugs_unit, toxicity_type, toxicity_grade, toxicity_treatment,
             toxicity_response, toxicity_at_cycle,
             nact_change_due_to_toxicity, tumour_response_check_method,
             tumour_response_nact, tumour_size, tumour_size_unit,
             nact_response_impression, nact_response_node,
             date_tumour_size_checked, nact_completion_status,
             nact_end_date, trastuzumab_use_nact, trastuzumab_regime_nact,
             trastuzumab_courses_taken_nact, hormone_therapy_nact,
             hormone_therapy_type_nact, hormone_therapy_duration,
             horomone_therapy_side_effects, self.user_name,
             sql.last_update()
         ]
         col_list = names("neo_adjuvant_therapy")
         check = sql.review_input(file_number, col_list, data_list)
     return data_list, drug_table, toxicity