132 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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)
 | |
| 		"""
 | |
| 		)
 |