add stenosis measurements

This commit is contained in:
Ross
2025-05-05 09:04:59 +01:00
parent 38d286f43d
commit e2ec05af43
+66 -16
View File
@@ -8,13 +8,16 @@ def report_stroke():
'haemorrhage': '',
'ischaemia': '',
'lvo': '',
'stenosis': ''
'ica_disease': '',
'ica_side': '',
'quantify_stenosis': '',
'left_stenosis': '',
'right_stenosis': ''
}
custom_text = {
'haemorrhage': '',
'ischaemia': '',
'lvo': '',
'stenosis': ''
}
def update_result():
@@ -23,8 +26,21 @@ def report_stroke():
f"There is evidence of intracranial haemorrhage: {answers['haemorrhage']} {custom_text['haemorrhage']}\n"
f"There is evidence of acute ischaemia: {answers['ischaemia']} {custom_text['ischaemia']}\n"
f"There is an intracranial LVO: {answers['lvo']} {custom_text['lvo']}\n"
f"There is significant stenosis of the internal carotid arteries: {answers['stenosis']} {custom_text['stenosis']}"
f"There is significant extracranial internal carotid artery disease: {answers['ica_disease']}\n"
)
if answers['ica_disease'] == 'YES':
formatted_text += (
f"Side of ICA disease: {answers['ica_side']}\n"
)
if answers['quantify_stenosis'] == 'YES':
formatted_text += (
f"Left ICA stenosis: {answers['left_stenosis']}\n"
f"Right ICA stenosis: {answers['right_stenosis']}\n"
)
elif answers['quantify_stenosis'] == 'NO':
formatted_text += (
"Please discuss with a Vascular Radiologist and consider contemporaneous duplex imaging if the patient is a candidate for Carotid endarterectomy.\n"
)
result_box.value = formatted_text
def toggle_visibility(button, input_field):
@@ -33,10 +49,14 @@ def report_stroke():
def set_all_to_false():
answers.update({
'haemorrhage': 'False',
'ischaemia': 'False',
'lvo': 'False',
'stenosis': 'False'
'haemorrhage': 'NO',
'ischaemia': 'NO',
'lvo': 'NO',
'ica_disease': 'NO',
'ica_side': '',
'quantify_stenosis': '',
'left_stenosis': '',
'right_stenosis': ''
})
update_result()
@@ -45,7 +65,7 @@ def report_stroke():
with ui.row():
ui.label('There is evidence of intracranial haemorrhage')
ui.radio(['True', 'False'], on_change=lambda e: (answers.update({'haemorrhage': e.value}), update_result())).props('inline')
ui.radio(['YES', 'NO'], on_change=lambda e: (answers.update({'haemorrhage': e.value}), update_result())).props('inline')
custom_input_haemorrhage = ui.input('Custom text', on_change=lambda e: (custom_text.update({'haemorrhage': e.value}), update_result()))
custom_input_haemorrhage.visible = False
toggle_button = ui.button(icon='add', on_click=lambda: toggle_visibility(toggle_button, custom_input_haemorrhage)).props('flat dense')
@@ -53,7 +73,7 @@ def report_stroke():
with ui.row():
ui.label('There is evidence of acute ischaemia')
ui.radio(['True', 'False'], on_change=lambda e: (answers.update({'ischaemia': e.value}), update_result())).props('inline')
ui.radio(['YES', 'NO'], on_change=lambda e: (answers.update({'ischaemia': e.value}), update_result())).props('inline')
custom_input_ischaemia = ui.input('Custom text', on_change=lambda e: (custom_text.update({'ischaemia': e.value}), update_result()))
custom_input_ischaemia.visible = False
toggle_button = ui.button(icon='add', on_click=lambda: toggle_visibility(toggle_button, custom_input_ischaemia)).props('flat dense')
@@ -61,19 +81,49 @@ def report_stroke():
with ui.row():
ui.label('There is an intracranial LVO')
ui.radio(['True', 'False'], on_change=lambda e: (answers.update({'lvo': e.value}), update_result())).props('inline')
ui.radio(['YES', 'NO'], on_change=lambda e: (answers.update({'lvo': e.value}), update_result())).props('inline')
custom_input_lvo = ui.input('Custom text', on_change=lambda e: (custom_text.update({'lvo': e.value}), update_result()))
custom_input_lvo.visible = False
toggle_button = ui.button(icon='add', on_click=lambda: toggle_visibility(toggle_button, custom_input_lvo)).props('flat dense')
ui.tooltip('Add custom text for this option').on(toggle_button)
with ui.row():
ui.label('There is significant stenosis of the internal carotid arteries')
ui.radio(['True', 'False'], on_change=lambda e: (answers.update({'stenosis': e.value}), update_result())).props('inline')
custom_input_stenosis = ui.input('Custom text', on_change=lambda e: (custom_text.update({'stenosis': e.value}), update_result()))
custom_input_stenosis.visible = False
toggle_button = ui.button(icon='add', on_click=lambda: toggle_visibility(toggle_button, custom_input_stenosis)).props('flat dense')
ui.tooltip('Add custom text for this option').on(toggle_button)
ui.label('There is significant extracranial internal carotid artery disease')
ui.radio(['YES', 'NO'], on_change=lambda e: (answers.update({'ica_disease': e.value}), update_result(), toggle_ica_options(e.value))).props('inline')
# Additional options for ICA disease
def toggle_ica_options(value):
ica_side_row.visible = value == 'YES'
quantify_stenosis_row.visible = value == 'YES'
ica_side_row = ui.row() # Create the row
ica_side_row.visible = False # Set visibility to False
with ica_side_row:
ui.label('Please indicate the side of ICA disease')
ui.radio(['R', 'L', 'Bilateral'], on_change=lambda e: (answers.update({'ica_side': e.value}), update_result())).props('inline')
quantify_stenosis_row = ui.row() # Create the row
quantify_stenosis_row.visible = False # Set visibility to False
with quantify_stenosis_row:
ui.label('Are you happy to quantify the degree of stenosis?')
ui.radio(['YES', 'NO'], on_change=lambda e: (answers.update({'quantify_stenosis': e.value}), update_result(), toggle_stenosis_options(e.value))).props('inline')
# Additional options for quantifying stenosis
def toggle_stenosis_options(value):
left_stenosis_row.visible = value == 'YES'
right_stenosis_row.visible = value == 'YES'
left_stenosis_row = ui.row() # Create the row
left_stenosis_row.visible = False # Set visibility to False
with left_stenosis_row:
ui.label('Left ICA stenosis')
ui.radio(['Unobstructed', 'Less than 50%', '50 to 70%', '70 to 90%', 'Greater than 90%', 'Occluded'], on_change=lambda e: (answers.update({'left_stenosis': e.value}), update_result())).props('inline')
right_stenosis_row = ui.row() # Create the row
right_stenosis_row.visible = False # Set visibility to False
with right_stenosis_row:
ui.label('Right ICA stenosis')
ui.radio(['Unobstructed', 'Less than 50%', '50 to 70%', '70 to 90%', 'Greater than 90%', 'Occluded'], on_change=lambda e: (answers.update({'right_stenosis': e.value}), update_result())).props('inline')
# Text box to display the selected answers
result_box = ui.textarea('Selected Answers:', value='').props('rows=10 style="width: 100%;" readonly')