* Medical module for erpnext * Changes in core for Medical module * patient registration updated * fix - appointment invioce - fields missing * pages- indicator instead of bg-color * Lab Test field renamed service type * Department added Lab Test * procedure name in prescription * fixes sample collection * filter disabled patient * fix patient admission * updated patient age * availability check msg updated * fixes, removed procedure from invoice * sample print renamed * fixes, validation * service desk physician in filter * refactor scheduler * Appointment -field property - set only once = 1 * Appointment - Mark closed and pending buttons removed * Appointment - readonly = 1 if value set * Appointment - availabilty * Appointment - Cancel - info - cancel invoice * Appointment - set pending appointments * Dosage form - new DT * Drug Prescription - Dosage form added * Facility - Floor - removed from Fecility * Floor - removed * Lab Test Template - item creation validation * Procedure - Create Procedure * Procedure Appointment - new DT * Service Unit - Floor reference removed * Zone Fcilities - Unused DT removed * Appointment Desk - fixed * Service Desk - method pointing from procedure changed to procedure_appointment * Consultation print - got featured * Consultation - removed patient refernce to procedure prescription * Procedure Prescription - removed patient refernce * Lab Test - Changed field properties and value * Lab Test - field property changed * Lab Test - methods rewrite - lab test doc creation * Lab Test - create lab test from invoice and consultaion - got changed * Button History changed to Medical Record * Service Desk - Updated * Notification - Procedure Appointment * fix-get procedure prescription * fix field added to test prescription * msgprint on invoice creation * fix data on install * Merge branch erpnext/develop * fixes- minor * Setup wizard - Create Sensitivity * Appointment - Validate and Save if there is no schedule for Physician * Consultation - Button create vital signs and medical record * Review Type - New DocType * Review Detail and Treatment Plan - Childs - Consultation * Patient Medical Record - field Attach doc * Consultation - New Fields * Consultation - Manage new Fields - Medical record add action * Patient Relation - Child DocType - Patient * Patient - Patient Relation added * Patient - collapsible = 1 * Laboratory Settings - fields - message for lab test * Laboratory Settings - get message for lab test * SMS text for lab test and invoice test report * Procedure Stock Detail - Stock detail for Procedure and Template * Template Stage Detail - Stage detail for Procedure Template * Procedure Stage Detail - Stage detail for Procedure * Service Unit - field - warehouse * Scheduler - msg - content changed * Laboratory Settings - defualt - msg content * Invoice Test Report - msg print * Print Format-Changed-Consultation-Invoice Test Report-Lab Test * OP Settings - Expnse Account for Stock Entry in Procedure * Procedure and Procedure Template - Manage Stock Stage and Sample Collection * Procedure Appointment - Manage Stock and Stage * Lab Test - fixed - resource not find * Invoice Test Report - fixed - resource not find * Procedure - doc reload after insert * Patient Medical Record - fixed - refernce missed * Create Vital Signs -on client side * Rename module Medical to Healthcare * Remove In Patient (IP) Feature. * Rename - Procedure to Clinical Procedure * Remove spaces in Naming Series * Rename Duration to Drug Prescription Duration * Duration to Drug Prescription Duration * Merge All Settings to Healthcare Settings * Healthcare settings - import fixed * Procedure related documents are removed * Appointment Desk and Sevrvice Desk are removed * Consultation - minimal * Consultation - minimal * Consultation - minimal - patient detials in collapsible section * Message Print to Alerts * Patient - some fields removed * Patient - create consultation - message print to alerts * Consultation - show patient details updated * Setup wizard - Duration to Drug Prescritpion Duration * Healthcare Settings - patient registration - fee collection * Lab Test - Create Sales Invoice bug fixed * Healthcare menu rearranged * Healthcare Settings - Optimised and Rearragnged * Healthcare Settings - Expense account removed * Receivable account removed from patient * Patient - Optimised and Rearragnged * Removed Referring Physician * Healthcare Settings - bold headings removed * Physician - Patient - Fields are Segregated * Remove Service Unit * Remove - Service Type * Consultation invoice * Lab Test - invoice * Patient - Invoice * Rename Appointment to Patient Appointment * wip * Patient Dashboard, Physician Form cleanup * Dosage renamed to Prescription Dosage * Renamed Drug Prescription Duration to Prescription Duration * Patient Appointment booking modal * Patient Age - calculate by dob * Remove - scheduler * Consultation - Appointment to Patient Appointment * Patient Dashboard - rearranged * Patient Appointment * Removed rer_physician from lab test and consultation * Patient Appontment Changes * Appointment and Consultation - optimized * Patient Appointment - fee validity code optimized * Consultation and Patient Appointment - Invoice validate two side * fix: #13 remove relation to admission * Healthcare - Patient Portal * fix import error * domain Healthcare added on install * Removed - Invoice Test Report * Physician Schedule - menu * Consultation - patient details - re write * New Doctype-Medical Code * Consultation - Daignosis codification * Medical Code - Codification - Settings * Medical Code Standard - Medical Code - Codification - Settings * fix appointment calendar * fix appointment analytics * Menu Medical Code Standard * New Doctype - Medical Code Standard * Set Physician Role insted of IP Physician and OP Physician Role * fixed some json files * Medical code - permission to physician * Unused Childs - Work Schedule and User List - Removed * Label Procedure to Lab Test * Lab Test and Patient - code optimised * Add Item Groups - setup wizard * Healthcare Settings - add Role - Medical Administrator * Healthcare - Demo setup - Make Demo * Fee Validity - Logic Test * Test Fee Validity - Optimised * Healthcare Doctypes - Restricted to Domain Healthcare * Domainify - remove Healthcare Roles - Other Domains * Healthcare doctypes - beta checked * Codacy fixes * Codacy - fixes * Codacy - fixes * Codacy - fixes * Codacy - fixes * Codacy - fixes * Lab Test - print hide =1 for some fields * Consultation - Codification field label to Medical Coding * Codacy fixes - import frappe and etc. * Codacy fixes - import frappe in test_vital_signs * Codacy fixes * Codacy fixes * Codacy fixes and remove delete perm for patient * send_sms - import form frappe * Healthcare Settings * Lab Prescription - Consultation - Test Code - read_only = 0 * Portal fixes * Patient Appointment - filter physician - if has schedule * Physician - IP Charge - Removed * test - files * Web Form - Patient Profile - removed * Role Medical Administrator to Healthcare Administrator * WIP healthcare documentation * Coday - fixes * Travis - fixes * Lab Test Report - menu * Reorder Healthcare settings - group lab config to bottom * Sample Collection - New - allow Sample and patient Selection * Rate - similar behaviour and Label as in Item Standard Selling Rate * Healthcare documentation * Lab Test Samples to Lab Test sample * Commplaints to Complaint * Commplaints to Complaint * Antibiotics to Antibiotic * Appointment Token Number - remove * View - Medical record * Codacy fixes * update healthcare docs * Cleanup Docs - Search, quick entry, trsck change, etc. * [minor] ux changes
		
			
				
	
	
		
			167 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 | 
						|
# License: GNU General Public License v3. See license.txt
 | 
						|
 | 
						|
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_consultation()
 | 
						|
	frappe.db.commit()
 | 
						|
	frappe.clear_cache()
 | 
						|
 | 
						|
def make_masters():
 | 
						|
	import_json("Physician")
 | 
						|
	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:
 | 
						|
		physician = get_random("Physician")
 | 
						|
		department = frappe.get_value("Physician", physician, "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.physician = physician
 | 
						|
		appointment.department = department
 | 
						|
		appointment.save(ignore_permissions = True)
 | 
						|
		i += 1
 | 
						|
 | 
						|
def make_consulation():
 | 
						|
	for i in xrange(3):
 | 
						|
		physician = get_random("Physician")
 | 
						|
		department = frappe.get_value("Physician", physician, "department")
 | 
						|
		patient = get_random("Patient")
 | 
						|
		patient_sex = frappe.get_value("Patient", patient, "sex")
 | 
						|
		consultation = set_consultation(patient, patient_sex, physician, department, getdate(), i)
 | 
						|
		consultation.save(ignore_permissions=True)
 | 
						|
 | 
						|
def consulation_on_appointment():
 | 
						|
	for i in xrange(3):
 | 
						|
		appointment = get_random("Patient Appointment")
 | 
						|
		appointment = frappe.get_doc("Patient Appointment",appointment)
 | 
						|
		consultation = set_consultation(appointment.patient, appointment.patient_sex, appointment.physician, appointment.department, appointment.appointment_date, i)
 | 
						|
		consultation.appointment = appointment.name
 | 
						|
		consultation.save(ignore_permissions=True)
 | 
						|
 | 
						|
def set_consultation(patient, patient_sex, physician, department, consultation_date, i):
 | 
						|
	consultation = frappe.new_doc("Consultation")
 | 
						|
	consultation.patient = patient
 | 
						|
	consultation.patient_sex = patient_sex
 | 
						|
	consultation.physician = physician
 | 
						|
	consultation.visit_department = department
 | 
						|
	consultation.consultation_date = consultation_date
 | 
						|
	if i > 2 and patient_sex=='Female':
 | 
						|
		consultation.symptoms = "Having chest pains for the last week."
 | 
						|
		consultation.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:
 | 
						|
		consultation = append_drug_rx(consultation)
 | 
						|
		consultation = append_test_rx(consultation)
 | 
						|
	return consultation
 | 
						|
 | 
						|
def make_lab_test():
 | 
						|
	physician = get_random("Physician")
 | 
						|
	patient = get_random("Patient")
 | 
						|
	patient_sex = frappe.get_value("Patient", patient, "sex")
 | 
						|
	template = get_random("Lab Test Template")
 | 
						|
	set_lab_test(patient, patient_sex, physician, template)
 | 
						|
 | 
						|
def lab_test_on_consultation():
 | 
						|
	i = 1
 | 
						|
	while i <= 2:
 | 
						|
		test_rx = get_random("Lab Prescription", filters={'test_created': 0})
 | 
						|
		test_rx = frappe.get_doc("Lab Prescription", test_rx)
 | 
						|
		consultation = frappe.get_doc("Consultation", test_rx.parent)
 | 
						|
		set_lab_test(consultation.patient, consultation.patient_sex, consultation.physician, test_rx.test_code, test_rx.name)
 | 
						|
		i += 1
 | 
						|
 | 
						|
def set_lab_test(patient, patient_sex, physician, template, rx=None):
 | 
						|
	lab_test = frappe.new_doc("Lab Test")
 | 
						|
	lab_test.physician = physician
 | 
						|
	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(consultation):
 | 
						|
	i = 1
 | 
						|
	while i <= 2:
 | 
						|
		test_rx = consultation.append("test_prescription")
 | 
						|
		test_rx.test_code = get_random("Lab Test Template")
 | 
						|
		i += 1
 | 
						|
	return consultation
 | 
						|
 | 
						|
def append_drug_rx(consultation):
 | 
						|
	i = 1
 | 
						|
	while i <= 3:
 | 
						|
		drug = get_random("Item", filters={"item_group":"Drug"})
 | 
						|
		drug = frappe.get_doc("Item", drug)
 | 
						|
		drug_rx = consultation.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 consultation
 | 
						|
 | 
						|
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')
 |