import frappe from frappe.model.utils.rename_field import rename_field from frappe.modules import get_doctype_module, scrub field_rename_map = { 'Healthcare Settings': [ ['patient_master_name', 'patient_name_by'], ['max_visit', 'max_visits'], ['reg_sms', 'send_registration_msg'], ['reg_msg', 'registration_msg'], ['app_con', 'send_appointment_confirmation'], ['app_con_msg', 'appointment_confirmation_msg'], ['no_con', 'avoid_confirmation'], ['app_rem', 'send_appointment_reminder'], ['app_rem_msg', 'appointment_reminder_msg'], ['rem_before', 'remind_before'], ['manage_customer', 'link_customer_to_patient'], ['create_test_on_si_submit', 'create_lab_test_on_si_submit'], ['require_sample_collection', 'create_sample_collection_for_lab_test'], ['require_test_result_approval', 'lab_test_approval_required'], ['manage_appointment_invoice_automatically', 'automate_appointment_invoicing'] ], 'Drug Prescription':[ ['use_interval', 'usage_interval'], ['in_every', 'interval_uom'] ], 'Lab Test Template':[ ['sample_quantity', 'sample_qty'], ['sample_collection_details', 'sample_details'] ], 'Sample Collection':[ ['sample_quantity', 'sample_qty'], ['sample_collection_details', 'sample_details'] ], 'Fee Validity': [ ['max_visit', 'max_visits'] ] } def execute(): for dn in field_rename_map: if frappe.db.exists('DocType', dn): if dn == 'Healthcare Settings': frappe.reload_doctype('Healthcare Settings') else: frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) for dt, field_list in field_rename_map.items(): if frappe.db.exists('DocType', dt): for field in field_list: if dt == 'Healthcare Settings': rename_field(dt, field[0], field[1]) elif frappe.db.has_column(dt, field[0]): rename_field(dt, field[0], field[1]) # first name mandatory in Patient if frappe.db.exists('DocType', 'Patient'): patients = frappe.db.sql("select name, patient_name from `tabPatient`", as_dict=1) frappe.reload_doc('healthcare', 'doctype', 'patient') for entry in patients: name = entry.patient_name.split(' ') frappe.db.set_value('Patient', entry.name, 'first_name', name[0]) # mark Healthcare Practitioner status as Disabled if frappe.db.exists('DocType', 'Healthcare Practitioner'): practitioners = frappe.db.sql("select name from `tabHealthcare Practitioner` where 'active'= 0", as_dict=1) practitioners_lst = [p.name for p in practitioners] frappe.reload_doc('healthcare', 'doctype', 'healthcare_practitioner') if practitioners_lst: frappe.db.sql("update `tabHealthcare Practitioner` set status = 'Disabled' where name IN %(practitioners)s""", {"practitioners": practitioners_lst}) # set Clinical Procedure status if frappe.db.exists('DocType', 'Clinical Procedure'): frappe.reload_doc('healthcare', 'doctype', 'clinical_procedure') frappe.db.sql(""" UPDATE `tabClinical Procedure` SET docstatus = (CASE WHEN status = 'Cancelled' THEN 2 WHEN status = 'Draft' THEN 0 ELSE 1 END) """) # set complaints and diagnosis in table multiselect in Patient Encounter if frappe.db.exists('DocType', 'Patient Encounter'): field_list = [ ['visit_department', 'medical_department'], ['type', 'appointment_type'] ] encounter_details = frappe.db.sql("""select symptoms, diagnosis, name from `tabPatient Encounter`""", as_dict=True) frappe.reload_doc('healthcare', 'doctype', 'patient_encounter') frappe.reload_doc('healthcare', 'doctype', 'patient_encounter_symptom') frappe.reload_doc('healthcare', 'doctype', 'patient_encounter_diagnosis') for field in field_list: if frappe.db.has_column(dt, field[0]): rename_field(dt, field[0], field[1]) for entry in encounter_details: doc = frappe.get_doc('Patient Encounter', entry.name) symptoms = entry.symptoms.split('\n') if entry.symptoms else [] for symptom in symptoms: if not frappe.db.exists('Complaint', symptom): frappe.get_doc({ 'doctype': 'Complaint', 'complaints': symptom }).insert() row = doc.append('symptoms', { 'complaint': symptom }) row.db_update() diagnosis = entry.diagnosis.split('\n') if entry.diagnosis else [] for d in diagnosis: if not frappe.db.exists('Diagnosis', d): frappe.get_doc({ 'doctype': 'Diagnosis', 'diagnosis': d }).insert() row = doc.append('diagnosis', { 'diagnosis': d }) row.db_update() doc.db_update() if frappe.db.exists('DocType', 'Fee Validity'): # update fee validity status frappe.db.sql(""" UPDATE `tabFee Validity` SET status = (CASE WHEN visited >= max_visits THEN 'Completed' ELSE 'Pending' END) """)