diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py
index 4b2fcec..0c481fa 100644
--- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py
+++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py
@@ -276,10 +276,10 @@
 			if self.is_return and entry.amount > 0:
 				frappe.throw(_("Row #{0} (Payment Table): Amount must be negative").format(entry.idx))
 
-		if self.is_return:
-			invoice_total = self.rounded_total or self.grand_total
-			if total_amount_in_payments and total_amount_in_payments < invoice_total:
-				frappe.throw(_("Total payments amount can't be greater than {}").format(-invoice_total))
+		# if self.is_return:
+		# 	invoice_total = self.rounded_total or self.grand_total
+		# 	if total_amount_in_payments and total_amount_in_payments < invoice_total:
+		# 		frappe.throw(_("Total payments amount can't be greater than {}").format(-invoice_total))
 
 	def validate_loyalty_transaction(self):
 		if self.redeem_loyalty_points and (
@@ -595,7 +595,6 @@
 		.where(
 			(p_inv.name == p_item.parent)
 			& (IfNull(p_inv.consolidated_invoice, "") == "")
-			& (p_inv.is_return == 0)
 			& (p_item.docstatus == 1)
 			& (p_item.item_code == item_code)
 			& (p_item.warehouse == warehouse)
diff --git a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py
index d8cbcc1..da69e1b 100644
--- a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py
+++ b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py
@@ -83,20 +83,30 @@
 		pos_invoice_docs = [
 			frappe.get_cached_doc("POS Invoice", d.pos_invoice) for d in self.pos_invoices
 		]
+		batched_invoices = self.get_batched_invoices(pos_invoice_docs)
 
-		returns = [d for d in pos_invoice_docs if d.get("is_return") == 1]
-		sales = [d for d in pos_invoice_docs if d.get("is_return") == 0]
+		for invoice in batched_invoices:
+			sales_invoice, credit_note = "", ""
+			if not invoice[0].get("is_return"):
+				sales_invoice = self.process_merging_into_sales_invoice(invoice)
+			else:
+				credit_note = self.process_merging_into_credit_note(invoice)
 
-		sales_invoice, credit_note = "", ""
-		if returns:
-			credit_note = self.process_merging_into_credit_note(returns)
+			self.save()  # save consolidated_sales_invoice & consolidated_credit_note ref in merge log
+			self.update_pos_invoices(pos_invoice_docs, sales_invoice, credit_note)
 
-		if sales:
-			sales_invoice = self.process_merging_into_sales_invoice(sales)
+		# returns = [d for d in pos_invoice_docs if d.get("is_return") == 1]
+		# sales = [d for d in pos_invoice_docs if d.get("is_return") == 0]
 
-		self.save()  # save consolidated_sales_invoice & consolidated_credit_note ref in merge log
+		# sales_invoice, credit_note = "", ""
+		# if returns:
+		# 	credit_note = self.process_merging_into_credit_note(returns)
 
-		self.update_pos_invoices(pos_invoice_docs, sales_invoice, credit_note)
+		# if sales:
+		# 	sales_invoice = self.process_merging_into_sales_invoice(sales)
+
+		# self.save()  # save consolidated_sales_invoice & consolidated_credit_note ref in merge log
+		# self.update_pos_invoices(pos_invoice_docs, sales_invoice, credit_note)
 
 	def on_cancel(self):
 		pos_invoice_docs = [
@@ -108,7 +118,6 @@
 
 	def process_merging_into_sales_invoice(self, data):
 		sales_invoice = self.get_new_sales_invoice()
-
 		sales_invoice = self.merge_pos_invoice_into(sales_invoice, data)
 
 		sales_invoice.is_consolidated = 1
@@ -276,6 +285,21 @@
 			si.flags.ignore_validate = True
 			si.cancel()
 
+	def get_batched_invoices(self, pos_invoice_docs):
+		grouped_batch = []
+		current_batch = []
+		for item in pos_invoice_docs:
+			if not current_batch:
+				current_batch.append(item)
+			elif current_batch[-1].get("is_return") != item.get("is_return"):
+				grouped_batch.append(current_batch)
+				current_batch = [item]
+			else:
+				current_batch.append(item)
+
+		grouped_batch.append(current_batch)
+		return grouped_batch
+
 
 def update_item_wise_tax_detail(consolidate_tax_row, tax_row):
 	consolidated_tax_detail = json.loads(consolidate_tax_row.item_wise_tax_detail)
@@ -385,13 +409,15 @@
 		for d in invoices
 		if d.is_return and d.return_against
 	]
+	print(pos_return_docs, invoices, _invoices, sep="-")
+	# breakpoint()
 	for pos_invoice in pos_return_docs:
 		for item in pos_invoice.items:
 			if not item.serial_no and not item.serial_and_batch_bundle:
 				continue
 
 			return_against_is_added = any(
-				d for d in _invoices if d.pos_invoice == pos_invoice.return_against
+				d for d in invoices if d.pos_invoice == pos_invoice.return_against
 			)
 			if return_against_is_added:
 				break
