diff --git a/erpnext/patches/v12_0/generate_leave_ledger_entries.py b/erpnext/patches/v12_0/generate_leave_ledger_entries.py
index ffb2e3f..8a92bb3 100644
--- a/erpnext/patches/v12_0/generate_leave_ledger_entries.py
+++ b/erpnext/patches/v12_0/generate_leave_ledger_entries.py
@@ -6,88 +6,96 @@
 from frappe.utils import getdate
 
 def execute():
-    """ Generates leave ledger entries for leave allocation/application/encashment
-        for last allocation """
-    frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
-    frappe.reload_doc("HR", "doctype", "Leave Encashment")
-    if frappe.db.a_row_exists("Leave Ledger Entry"):
-        return
+	""" Generates leave ledger entries for leave allocation/application/encashment
+		for last allocation """
+	frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
+	frappe.reload_doc("HR", "doctype", "Leave Encashment")
+	if frappe.db.a_row_exists("Leave Ledger Entry"):
+		return
 
-    generate_allocation_ledger_entries()
-    generate_application_leave_ledger_entries()
-    generate_encashment_leave_ledger_entries()
+	generate_allocation_ledger_entries()
+	generate_application_leave_ledger_entries()
+	generate_encashment_leave_ledger_entries()
+	generate_expiry_allocation_ledger_entries()
 
 def generate_allocation_ledger_entries():
-    ''' fix ledger entries for missing leave allocation transaction '''
-    allocation_list = get_allocation_records()
+	''' fix ledger entries for missing leave allocation transaction '''
+	allocation_list = get_allocation_records()
 
-    for allocation in allocation_list:
-        if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name}):
-            allocation.update(dict(doctype="Leave Allocation"))
-            allocation_obj = frappe.get_doc(allocation)
-            allocation_obj.create_leave_ledger_entry()
-            if allocation.to_date <= getdate():
-                allocation_obj.expire_allocation()
-
+	for allocation in allocation_list:
+		if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name}):
+			allocation.update(dict(doctype="Leave Allocation"))
+			allocation_obj = frappe.get_doc(allocation)
+			allocation_obj.create_leave_ledger_entry()
 
 def generate_application_leave_ledger_entries():
-    ''' fix ledger entries for missing leave application transaction '''
-    leave_applications = get_leaves_application_records()
+	''' fix ledger entries for missing leave application transaction '''
+	leave_applications = get_leaves_application_records()
 
-    for application in leave_applications:
-        if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Application', 'transaction_name': application.name}):
-            application.update(dict(doctype="Leave Application"))
-            frappe.get_doc(application).create_leave_ledger_entry()
+	for application in leave_applications:
+		if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Application', 'transaction_name': application.name}):
+			application.update(dict(doctype="Leave Application"))
+			frappe.get_doc(application).create_leave_ledger_entry()
 
 def generate_encashment_leave_ledger_entries():
-    ''' fix ledger entries for missing leave encashment transaction '''
-    leave_encashments = get_leave_encashment_records()
+	''' fix ledger entries for missing leave encashment transaction '''
+	leave_encashments = get_leave_encashment_records()
 
-    for encashment in leave_encashments:
-        if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Encashment', 'transaction_name': encashment.name}):
-            encashment.update(dict(doctype="Leave Encashment"))
-            frappe.get_doc(encashment).create_leave_ledger_entry()
+	for encashment in leave_encashments:
+		if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Encashment', 'transaction_name': encashment.name}):
+			encashment.update(dict(doctype="Leave Encashment"))
+			frappe.get_doc(encashment).create_leave_ledger_entry()
+
+def generate_expiry_allocation_ledger_entries():
+	''' fix ledger entries for missing leave allocation transaction '''
+	allocation_list = get_allocation_records()
+
+	for allocation in allocation_list:
+		if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name, 'is_expired': 1}):
+			allocation.update(dict(doctype="Leave Allocation"))
+			allocation_obj = frappe.get_doc(allocation)
+			allocation_obj.expire_allocation()
 
 def get_allocation_records():
-    return frappe.db.sql("""
-        SELECT
-            DISTINCT name,
-            employee,
-            leave_type,
-            new_leaves_allocated,
-            carry_forwarded_leaves,
-            from_date,
-            to_date,
-            carry_forward
-        FROM `tabLeave Allocation`
-        WHERE
-            docstatus=1
-        ORDER BY to_date ASC
-    """, as_dict=1)
+	return frappe.db.sql("""
+		SELECT
+			name,
+			employee,
+			leave_type,
+			new_leaves_allocated,
+			carry_forwarded_leaves,
+			from_date,
+			to_date,
+			carry_forward
+		FROM `tabLeave Allocation`
+		WHERE
+			docstatus=1
+		ORDER BY to_date ASC
+	""", as_dict=1)
 
 def get_leaves_application_records():
-    return frappe.db.sql("""
-            SELECT
-                DISTINCT name,
-                employee,
-                leave_type,
-                total_leave_days,
-                from_date,
-                to_date
-            FROM `tabLeave Application`
-            WHERE
-                docstatus=1
-        """, as_dict=1)
+	return frappe.db.sql("""
+			SELECT
+				name,
+				employee,
+				leave_type,
+				total_leave_days,
+				from_date,
+				to_date
+			FROM `tabLeave Application`
+			WHERE
+				docstatus=1
+		""", as_dict=1)
 
 def get_leave_encashment_records():
-    return frappe.db.sql("""
-            SELECT
-                DISTINCT name,
-                employee,
-                leave_type,
-                encashable_days,
-                encashment_date
-            FROM `tabLeave Encashment`
-            WHERE
-                docstatus=1
-        """, as_dict=1)
\ No newline at end of file
+	return frappe.db.sql("""
+			SELECT
+				name,
+				employee,
+				leave_type,
+				encashable_days,
+				encashment_date
+			FROM `tabLeave Encashment`
+			WHERE
+				docstatus=1
+		""", as_dict=1)
\ No newline at end of file
