diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
index 5c18d11..3324ede 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
@@ -3,6 +3,7 @@
 
 
 from itertools import groupby
+from typing import Dict, List, Tuple
 
 import frappe
 from frappe import _
@@ -14,10 +15,9 @@
 	get_leaves_for_period,
 )
 
+Filters = frappe._dict
 
-def execute(filters=None):
-	filters = frappe._dict(filters or {})
-
+def execute(filters: Filters = None) -> Tuple:
 	if filters.to_date <= filters.from_date:
 		frappe.throw(_('"From Date" can not be greater than or equal to "To Date"'))
 
@@ -26,8 +26,9 @@
 	charts = get_chart_data(data)
 	return columns, data, None, charts
 
-def get_columns():
-	columns = [{
+
+def get_columns() -> List[Dict]:
+	return [{
 		'label': _('Leave Type'),
 		'fieldtype': 'Link',
 		'fieldname': 'leave_type',
@@ -72,9 +73,8 @@
 		'width': 150,
 	}]
 
-	return columns
 
-def get_data(filters):
+def get_data(filters: Filters) -> List:
 	leave_types = frappe.db.get_list('Leave Type', pluck='name', order_by='name')
 	conditions = get_conditions(filters)
 
@@ -128,7 +128,7 @@
 	return data
 
 
-def get_opening_balance(employee, leave_type, filters, carry_forwarded_leaves):
+def get_opening_balance(employee: str, leave_type: str, filters: Filters, carry_forwarded_leaves: float) -> float:
 	# allocation boundary condition
 	# opening balance is the closing leave balance 1 day before the filter start date
 	opening_balance_date = add_days(filters.from_date, -1)
@@ -146,7 +146,7 @@
 	return opening_balance
 
 
-def get_conditions(filters):
+def get_conditions(filters: Filters) -> Dict:
 	conditions={
 		'status': 'Active',
 	}
@@ -162,7 +162,7 @@
 	return conditions
 
 
-def get_department_leave_approver_map(department=None):
+def get_department_leave_approver_map(department: str = None):
 	# get current department and all its child
 	department_list = frappe.get_list('Department',
 		filters={'disabled': 0},
@@ -190,7 +190,7 @@
 	return approvers
 
 
-def get_allocated_and_expired_leaves(from_date, to_date, employee, leave_type):
+def get_allocated_and_expired_leaves(from_date: str, to_date: str, employee: str, leave_type: str) -> Tuple[float, float, float]:
 	new_allocation = 0
 	expired_leaves = 0
 	carry_forwarded_leaves = 0
@@ -219,7 +219,7 @@
 	return new_allocation, expired_leaves, carry_forwarded_leaves
 
 
-def get_leave_ledger_entries(from_date, to_date, employee, leave_type):
+def get_leave_ledger_entries(from_date: str, to_date: str, employee: str, leave_type: str) -> List[Dict]:
 	ledger = frappe.qb.DocType('Leave Ledger Entry')
 	records = (
 		frappe.qb.from_(ledger)
@@ -243,7 +243,7 @@
 	return records
 
 
-def get_chart_data(data):
+def get_chart_data(data: List) -> Dict:
 	labels = []
 	datasets = []
 	employee_data = data
@@ -263,7 +263,7 @@
 	return chart
 
 
-def get_dataset_for_chart(employee_data, datasets, labels):
+def get_dataset_for_chart(employee_data: List, datasets: List, labels: List) -> List:
 	leaves = []
 	employee_data = sorted(employee_data, key=lambda k: k['employee_name'])
 
diff --git a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
index aecf0a4..b2ed72c 100644
--- a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
@@ -59,11 +59,11 @@
 		leave_application = make_leave_application(self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), '_Test Leave Type')
 		leave_application.reload()
 
-		filters = {
+		filters = frappe._dict({
 			'from_date': allocation1.from_date,
 			'to_date': allocation2.to_date,
 			'employee': self.employee_id
-		}
+		})
 
 		report = execute(filters)
 
@@ -93,30 +93,30 @@
 		leave_application.reload()
 
 		# Case 1: opening balance for first alloc boundary
-		filters = {
+		filters = frappe._dict({
 			'from_date': self.year_start,
 			'to_date': self.year_end,
 			'employee': self.employee_id
-		}
+		})
 		report = execute(filters)
 		self.assertEqual(report[1][0].opening_balance, 0)
 
 		# Case 2: opening balance after leave application date
-		filters = {
+		filters = frappe._dict({
 			'from_date': add_days(leave_application.to_date, 1),
 			'to_date': self.year_end,
 			'employee': self.employee_id
-		}
+		})
 		report = execute(filters)
 		self.assertEqual(report[1][0].opening_balance, (allocation1.new_leaves_allocated - leave_application.total_leave_days))
 
 		# Case 3: leave balance shows actual balance and not consumption balance as per remaining days near alloc end date
 		# eg: 3 days left for alloc to end, leave balance should still be 26 and not 3
-		filters = {
+		filters = frappe._dict({
 			'from_date': add_days(self.year_end, -3),
 			'to_date': self.year_end,
 			'employee': self.employee_id
-		}
+		})
 		report = execute(filters)
 		self.assertEqual(report[1][0].opening_balance, (allocation1.new_leaves_allocated - leave_application.total_leave_days))
 
@@ -139,22 +139,22 @@
 			carry_forward=True, leave_type=leave_type.name)
 
 		# Case 1: carry forwarded leaves considered in opening balance for second alloc
-		filters = {
+		filters = frappe._dict({
 			'from_date': add_days(self.mid_year, 1),
 			'to_date': self.year_end,
 			'employee': self.employee_id
-		}
+		})
 		report = execute(filters)
 		# available leaves from old alloc
 		opening_balance = allocation1.new_leaves_allocated - leave_application.total_leave_days
 		self.assertEqual(report[1][0].opening_balance, opening_balance)
 
 		# Case 2: opening balance one day after alloc boundary = carry forwarded leaves + new leaves alloc
-		filters = {
+		filters = frappe._dict({
 			'from_date': add_days(self.mid_year, 2),
 			'to_date': self.year_end,
 			'employee': self.employee_id
-		}
+		})
 		report = execute(filters)
 		# available leaves from old alloc
 		opening_balance = allocation2.new_leaves_allocated + (allocation1.new_leaves_allocated - leave_application.total_leave_days)
