feat: Fee Validity status (Ongoing, Expired, Completed)
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: