diff --git a/erpnext/healthcare/utils.py b/erpnext/healthcare/utils.py
index f1f9564..40db1b7 100644
--- a/erpnext/healthcare/utils.py
+++ b/erpnext/healthcare/utils.py
@@ -45,7 +45,7 @@
 	fee_validity_details = []
 	items_to_invoice = []
 	valid_days = frappe.db.get_single_value('Healthcare Settings', 'valid_days')
-	max_visit = frappe.db.get_single_value('Healthcare Settings', 'max_visit')
+	max_visits = frappe.db.get_single_value('Healthcare Settings', 'max_visits')
 	for appointment in patient_appointments:
 		if appointment.procedure_template:
 			if frappe.db.get_value('Clinical Procedure Template', appointment.procedure_template, 'is_billable'):
@@ -63,7 +63,7 @@
 						practitioner_exist_in_list = True
 						if validity['valid_till'] >= appointment.appointment_date:
 							validity['visits'] = validity['visits'] + 1
-							if int(max_visit) > validity['visits']:
+							if int(max_visits) > validity['visits']:
 								skip_invoice = True
 						if not skip_invoice:
 							validity['visits'] = 1
@@ -72,9 +72,9 @@
 			if not practitioner_exist_in_list:
 				valid_till = appointment.appointment_date + datetime.timedelta(days=int(valid_days))
 				visits = 0
-				validity_exist = check_validity_exists(appointment.practitioner, appointment.patient)
-				if validity_exist:
-					fee_validity = frappe.get_doc('Fee Validity', validity_exist[0][0])
+				validity = check_validity_exists(appointment.practitioner, appointment.patient)
+				if validity:
+					fee_validity = frappe.get_doc('Fee Validity', validity)
 					valid_till = fee_validity.valid_till
 					visits = fee_validity.visited
 				fee_validity_details.append({'practitioner': appointment.practitioner,
@@ -348,19 +348,16 @@
 
 
 def check_validity_exists(practitioner, patient):
-	return frappe.db.exists({
-			'doctype': 'Fee Validity',
-			'practitioner': practitioner,
-			'patient': patient})
+	return frappe.db.get_value('Fee Validity', {'practitioner': practitioner, 'patient': patient}, 'name')
 
 
 def manage_fee_validity(appointment_name, method, ref_invoice=None):
 	appointment_doc = frappe.get_doc('Patient Appointment', appointment_name)
-	validity_exists = check_validity_exists(appointment_doc.practitioner, appointment_doc.patient)
+	validity = check_validity_exists(appointment_doc.practitioner, appointment_doc.patient)
 	do_not_update = False
 	visited = 0
-	if validity_exist:
-		fee_validity = frappe.get_doc('Fee Validity', validity_exists.name)
+	if validity:
+		fee_validity = frappe.get_doc('Fee Validity', validity)
 		# Check if the validity is valid
 		if fee_validity.valid_till >= appointment_doc.appointment_date:
 			if method == 'on_cancel' and appointment_doc.status != 'Closed':
@@ -370,7 +367,7 @@
 						visited = 0
 					frappe.db.set_value('Fee Validity', fee_validity.name, 'visited', visited)
 				do_not_update = True
-			elif method == 'on_submit' and fee_validity.visited < fee_validity.max_visit:
+			elif method == 'on_submit' and fee_validity.visited < fee_validity.max_visits:
 				visited = fee_validity.visited + 1
 				frappe.db.set_value('Fee Validity', fee_validity.name, 'visited', visited)
 				do_not_update = True
@@ -383,12 +380,7 @@
 		fee_validity = create_fee_validity(appointment_doc.practitioner, appointment_doc.patient, appointment_doc.appointment_date, ref_invoice)
 
 	visited = fee_validity.visited
-	mark_appointments_as_invoiced(fee_validity, ref_invoice, method)
-
-	if method == 'on_cancel':
-		invoiced = True
-	else:
-		invoiced = False
+	mark_appointments_as_invoiced(fee_validity, ref_invoice, method, appointment_doc)
 
 	if method == 'on_cancel':
 		ref_invoice_in_fee_validity = frappe.db.get_value('Fee Validity', fee_validity.name, 'ref_invoice')
@@ -396,7 +388,12 @@
 			frappe.delete_doc('Fee Validity', fee_validity.name)
 
 
-def mark_appointments_as_invoiced(fee_validity, ref_invoice, method):
+def mark_appointments_as_invoiced(fee_validity, ref_invoice, method, appointment_doc):
+	if method == 'on_cancel':
+		invoiced = True
+	else:
+		invoiced = False
+
 	patient_appointments = appointments_valid_in_fee_validity(appointment_doc, invoiced)
 	if patient_appointments and fee_validity:
 		visit = visited
@@ -409,7 +406,7 @@
 					frappe.db.set_value('Fee Validity', fee_validity.name, 'visited', visited)
 				frappe.db.set_value('Patient Appointment', appointment.name, 'invoiced', False)
 				manage_doc_for_appoitnment('Patient Encounter', appointment.name, False)
-			elif method == 'on_submit' and int(fee_validity.max_visit) > visit:
+			elif method == 'on_submit' and int(fee_validity.max_visits) > visit:
 				if ref_invoice == fee_validity.ref_invoice:
 					visited += 1
 					frappe.db.set_value('Fee Validity', fee_validity.name, 'visited', visited)
@@ -421,9 +418,9 @@
 
 def appointments_valid_in_fee_validity(appointment, invoiced):
 	valid_days = frappe.db.get_single_value('Healthcare Settings', 'valid_days')
-	max_visit = frappe.db.get_single_value('Healthcare Settings', 'max_visit')
-	if int(max_visit) < 1:
-		max_visit = 1
+	max_visits = frappe.db.get_single_value('Healthcare Settings', 'max_visits')
+	if int(max_visits) < 1:
+		max_visits = 1
 	valid_days_date = add_days(getdate(appointment.appointment_date), int(valid_days))
 
 	return frappe.get_list('Patient Appointment',{
@@ -432,12 +429,12 @@
 		'appointment_date':('<=', valid_days_date),
 		'appointment_date':('>=', getdate(appointment.appointment_date)),
 		'practitioner': appointment.practitioner
-	}, order_by='appointment_date', limit=int(max_visit)-1)
+	}, order_by='appointment_date', limit=int(max_visits)-1)
 
 
 def manage_doc_for_appoitnment(dt_from_appointment, appointment, invoiced):
-	dn_from_appointment = frappe.db.exists(
-		doctype=dt_from_appointment,
+	dn_from_appointment = frappe.db.get_value(
+		dt_from_appointment,
 		filters={'appointment': appointment}
 	)
 	if dn_from_appointment:
