168 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 | |
| # License: GNU General Public License v3. See license.txt
 | |
| from __future__ import unicode_literals
 | |
| 
 | |
| import frappe, json
 | |
| from frappe.utils.make_random import get_random
 | |
| import datetime
 | |
| from erpnext.demo.setup.setup_data import import_json
 | |
| from frappe.utils import getdate
 | |
| from erpnext.healthcare.doctype.lab_test.lab_test import create_test_from_template
 | |
| 
 | |
| def setup_data():
 | |
| 	frappe.flags.mute_emails = True
 | |
| 	make_masters()
 | |
| 	make_patient()
 | |
| 	make_lab_test()
 | |
| 	make_consulation()
 | |
| 	make_appointment()
 | |
| 	consulation_on_appointment()
 | |
| 	lab_test_on_encounter()
 | |
| 	frappe.db.commit()
 | |
| 	frappe.clear_cache()
 | |
| 
 | |
| def make_masters():
 | |
| 	import_json("Healthcare Practitioner")
 | |
| 	import_drug()
 | |
| 	frappe.db.commit()
 | |
| 
 | |
| def make_patient():
 | |
| 	file_path = get_json_path("Patient")
 | |
| 	with open(file_path, "r") as open_file:
 | |
| 		patient_data = json.loads(open_file.read())
 | |
| 		count = 1
 | |
| 
 | |
| 		for d in enumerate(patient_data):
 | |
| 			patient = frappe.new_doc("Patient")
 | |
| 			patient.patient_name = d[1]['patient_name'].title()
 | |
| 			patient.sex = d[1]['gender']
 | |
| 			patient.blood_group = "A Positive"
 | |
| 			patient.date_of_birth = datetime.datetime(1990, 3, 25)
 | |
| 			patient.email_id = d[1]['patient_name'] + "_" + patient.date_of_birth.strftime('%m/%d/%Y') + "@example.com"
 | |
| 			if count <5:
 | |
| 				patient.insert()
 | |
| 				frappe.db.commit()
 | |
| 			count+=1
 | |
| 
 | |
| def make_appointment():
 | |
| 	i = 1
 | |
| 	while i <= 4:
 | |
| 		practitioner = get_random("Healthcare Practitioner")
 | |
| 		department = frappe.get_value("Healthcare Practitioner", practitioner, "department")
 | |
| 		patient = get_random("Patient")
 | |
| 		patient_sex = frappe.get_value("Patient", patient, "sex")
 | |
| 		appointment = frappe.new_doc("Patient Appointment")
 | |
| 		startDate = datetime.datetime.now()
 | |
| 		for x in random_date(startDate,0):
 | |
| 			appointment_datetime = x
 | |
| 		appointment.appointment_datetime = appointment_datetime
 | |
| 		appointment.appointment_time = appointment_datetime
 | |
| 		appointment.appointment_date = appointment_datetime
 | |
| 		appointment.patient = patient
 | |
| 		appointment.patient_sex = patient_sex
 | |
| 		appointment.practitioner = practitioner
 | |
| 		appointment.department = department
 | |
| 		appointment.save(ignore_permissions = True)
 | |
| 		i += 1
 | |
| 
 | |
| def make_consulation():
 | |
| 	for i in range(3):
 | |
| 		practitioner = get_random("Healthcare Practitioner")
 | |
| 		department = frappe.get_value("Healthcare Practitioner", practitioner, "department")
 | |
| 		patient = get_random("Patient")
 | |
| 		patient_sex = frappe.get_value("Patient", patient, "sex")
 | |
| 		encounter = set_encounter(patient, patient_sex, practitioner, department, getdate(), i)
 | |
| 		encounter.save(ignore_permissions=True)
 | |
| 
 | |
| def consulation_on_appointment():
 | |
| 	for i in range(3):
 | |
| 		appointment = get_random("Patient Appointment")
 | |
| 		appointment = frappe.get_doc("Patient Appointment",appointment)
 | |
| 		encounter = set_encounter(appointment.patient, appointment.patient_sex, appointment.practitioner, appointment.department, appointment.appointment_date, i)
 | |
| 		encounter.appointment = appointment.name
 | |
| 		encounter.save(ignore_permissions=True)
 | |
| 
 | |
| def set_encounter(patient, patient_sex, practitioner, department, encounter_date, i):
 | |
| 	encounter = frappe.new_doc("Patient Encounter")
 | |
| 	encounter.patient = patient
 | |
| 	encounter.patient_sex = patient_sex
 | |
| 	encounter.practitioner = practitioner
 | |
| 	encounter.visit_department = department
 | |
| 	encounter.encounter_date = encounter_date
 | |
| 	if i > 2 and patient_sex=='Female':
 | |
| 		encounter.symptoms = "Having chest pains for the last week."
 | |
| 		encounter.diagnosis = """This patient's description of dull, aching,
 | |
| 		exertion related substernal chest pain is suggestive of ischemic
 | |
| 		cardiac origin. Her findings of a FH of early ASCVD, hypertension,
 | |
| 		and early surgical menopause are pertinent risk factors for development
 | |
| 		of coronary artery disease. """
 | |
| 	else:
 | |
| 		encounter = append_drug_rx(encounter)
 | |
| 		encounter = append_test_rx(encounter)
 | |
| 	return encounter
 | |
| 
 | |
| def make_lab_test():
 | |
| 	practitioner = get_random("Healthcare Practitioner")
 | |
| 	patient = get_random("Patient")
 | |
| 	patient_sex = frappe.get_value("Patient", patient, "sex")
 | |
| 	template = get_random("Lab Test Template")
 | |
| 	set_lab_test(patient, patient_sex, practitioner, template)
 | |
| 
 | |
| def lab_test_on_encounter():
 | |
| 	i = 1
 | |
| 	while i <= 2:
 | |
| 		test_rx = get_random("Lab Prescription", filters={'test_created': 0})
 | |
| 		test_rx = frappe.get_doc("Lab Prescription", test_rx)
 | |
| 		encounter = frappe.get_doc("Patient Encounter", test_rx.parent)
 | |
| 		set_lab_test(encounter.patient, encounter.patient_sex, encounter.practitioner, test_rx.test_code, test_rx.name)
 | |
| 		i += 1
 | |
| 
 | |
| def set_lab_test(patient, patient_sex, practitioner, template, rx=None):
 | |
| 	lab_test = frappe.new_doc("Lab Test")
 | |
| 	lab_test.practitioner = practitioner
 | |
| 	lab_test.patient = patient
 | |
| 	lab_test.patient_sex = patient_sex
 | |
| 	lab_test.template = template
 | |
| 	lab_test.prescription = rx
 | |
| 	create_test_from_template(lab_test)
 | |
| 
 | |
| def append_test_rx(encounter):
 | |
| 	i = 1
 | |
| 	while i <= 2:
 | |
| 		test_rx = encounter.append("test_prescription")
 | |
| 		test_rx.test_code = get_random("Lab Test Template")
 | |
| 		i += 1
 | |
| 	return encounter
 | |
| 
 | |
| def append_drug_rx(encounter):
 | |
| 	i = 1
 | |
| 	while i <= 3:
 | |
| 		drug = get_random("Item", filters={"item_group":"Drug"})
 | |
| 		drug = frappe.get_doc("Item", drug)
 | |
| 		drug_rx = encounter.append("drug_prescription")
 | |
| 		drug_rx.drug_code = drug.item_code
 | |
| 		drug_rx.drug_name = drug.item_name
 | |
| 		drug_rx.dosage = get_random("Prescription Dosage")
 | |
| 		drug_rx.period = get_random("Prescription Duration")
 | |
| 		i += 1
 | |
| 	return encounter
 | |
| 
 | |
| def random_date(start,l):
 | |
|    current = start
 | |
|    while l >= 0:
 | |
|       curr = current + datetime.timedelta(minutes=60)
 | |
|       yield curr
 | |
|       l-=1
 | |
| 
 | |
| def import_drug():
 | |
| 	frappe.flags.in_import = True
 | |
| 	data = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'drug_list.json')).read())
 | |
| 	for d in data:
 | |
| 		doc = frappe.new_doc("Item")
 | |
| 		doc.update(d)
 | |
| 		doc.insert()
 | |
| 	frappe.flags.in_import = False
 | |
| 
 | |
| def get_json_path(doctype):
 | |
| 		return frappe.get_app_path('erpnext', 'demo', 'data', frappe.scrub(doctype) + '.json')
 |