fix: added code for batched items in POS
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