diff --git a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.py b/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.py
index 09f2df1..bc1e479 100644
--- a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.py
+++ b/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.py
@@ -32,7 +32,7 @@
 	added_item = []
 	for d in item_list:
 		if (d.parent, d.item_code) not in added_item:
-			row = [d.gst_hsn_code, d.description, d.stock_uom, d.stock_qty]
+			row = [d.gst_hsn_code, d.description, d.stock_uom, d.stock_qty, d.tax_rate]
 			total_tax = 0
 			for tax in tax_columns:
 				item_tax = itemised_tax.get((d.parent, d.item_code), {}).get(tax, {})
@@ -40,11 +40,9 @@
 
 			row += [d.base_net_amount + total_tax]
 			row += [d.base_net_amount]
-
 			for tax in tax_columns:
 				item_tax = itemised_tax.get((d.parent, d.item_code), {}).get(tax, {})
 				row += [item_tax.get("tax_amount", 0)]
-
 			data.append(row)
 			added_item.append((d.parent, d.item_code))
 	if data:
@@ -59,7 +57,41 @@
 			"label": _("HSN/SAC"),
 			"fieldtype": "Link",
 			"options": "GST HSN Code",
+<<<<<<< HEAD
 			"width": 100,
+=======
+			"width": 100
+		},
+		{
+			"fieldname": "description",
+			"label": _("Description"),
+			"fieldtype": "Data",
+			"width": 300
+		},
+		{
+			"fieldname": "stock_uom",
+			"label": _("Stock UOM"),
+			"fieldtype": "Data",
+			"width": 100
+		},
+		{
+			"fieldname": "stock_qty",
+			"label": _("Stock Qty"),
+			"fieldtype": "Float",
+			"width": 90
+		},
+		{
+			"fieldname": "tax_rate",
+			"label": _("Tax Rate"),
+			"fieldtype": "Data",
+			"width": 90
+		},
+		{
+			"fieldname": "total_amount",
+			"label": _("Total Amount"),
+			"fieldtype": "Currency",
+			"width": 120
+>>>>>>> 363752510e (fix: HSN-wise-summary of outward supplies Updated Report)
 		},
 		{"fieldname": "description", "label": _("Description"), "fieldtype": "Data", "width": 300},
 		{"fieldname": "stock_uom", "label": _("Stock UOM"), "fieldtype": "Data", "width": 100},
@@ -106,14 +138,24 @@
 			sum(`tabSales Invoice Item`.stock_qty) as stock_qty,
 			sum(`tabSales Invoice Item`.base_net_amount) as base_net_amount,
 			sum(`tabSales Invoice Item`.base_price_list_rate) as base_price_list_rate,
-			`tabSales Invoice Item`.parent, `tabSales Invoice Item`.item_code,
-			`tabGST HSN Code`.description
-		from `tabSales Invoice`, `tabSales Invoice Item`, `tabGST HSN Code`
-		where `tabSales Invoice`.name = `tabSales Invoice Item`.parent
+			`tabSales Invoice Item`.parent,
+			`tabSales Invoice Item`.item_code,
+			`tabGST HSN Code`.description,
+			json_extract(`tabSales Taxes and Charges`.item_wise_tax_detail,
+			concat('$."' , `tabSales Invoice Item`.item_code, '"[0]')) * count(distinct `tabSales Taxes and Charges`.name) as tax_rate
+		from
+			`tabSales Invoice`,
+			`tabSales Invoice Item`,
+			`tabGST HSN Code`,
+			`tabSales Taxes and Charges`
+		where
+			`tabSales Invoice`.name = `tabSales Invoice Item`.parent
+			and `tabSales Taxes and Charges`.parent = `tabSales Invoice`.name
 			and `tabSales Invoice`.docstatus = 1
 			and `tabSales Invoice Item`.gst_hsn_code is not NULL
 			and `tabSales Invoice Item`.gst_hsn_code = `tabGST HSN Code`.name %s %s
 		group by
+<<<<<<< HEAD
 			`tabSales Invoice Item`.parent, `tabSales Invoice Item`.item_code
 
 		"""
@@ -121,6 +163,11 @@
 		filters,
 		as_dict=1,
 	)
+=======
+			`tabSales Invoice Item`.parent,
+			`tabSales Invoice Item`.item_code
+		""" % (conditions, match_conditions), filters, as_dict=1)
+>>>>>>> 363752510e (fix: HSN-wise-summary of outward supplies Updated Report)
 
 	return items
 
@@ -213,8 +260,10 @@
 	result = []
 
 	for row in data:
-		merged_hsn_dict.setdefault(row[0], {})
+		key = row[0] + '-' + str(row[4])
+		merged_hsn_dict.setdefault(key, {})
 		for i, d in enumerate(columns):
+<<<<<<< HEAD
 			if d["fieldtype"] not in ("Int", "Float", "Currency"):
 				merged_hsn_dict[row[0]][d["fieldname"]] = row[i]
 			else:
@@ -222,6 +271,15 @@
 					merged_hsn_dict[row[0]][d["fieldname"]] += row[i]
 				else:
 					merged_hsn_dict[row[0]][d["fieldname"]] = row[i]
+=======
+			if d['fieldtype'] not in ('Int', 'Float', 'Currency'):
+				merged_hsn_dict[key][d['fieldname']] = row[i]
+			else:
+				if merged_hsn_dict.get(key, {}).get(d['fieldname'], ''):
+					merged_hsn_dict[key][d['fieldname']] += row[i]
+				else:
+					merged_hsn_dict[key][d['fieldname']] = row[i]
+>>>>>>> 363752510e (fix: HSN-wise-summary of outward supplies Updated Report)
 
 	for key, value in merged_hsn_dict.items():
 		result.append(value)
@@ -240,9 +298,14 @@
 
 	fp = "%02d%s" % (getdate(filters["to_date"]).month, getdate(filters["to_date"]).year)
 
+<<<<<<< HEAD
 	gst_json = {"version": "GST2.3.4", "hash": "hash", "gstin": gstin, "fp": fp}
 
 	gst_json["hsn"] = {"data": get_hsn_wise_json_data(filters, report_data)}
+=======
+	gst_json = {"version": "GST3.0.3",
+		"hash": "hash", "gstin": gstin, "fp": fp}
+>>>>>>> 363752510e (fix: HSN-wise-summary of outward supplies Updated Report)
 
 	return {"report_name": report_name, "data": gst_json}
 
@@ -271,7 +334,7 @@
 			"desc": hsn.get("description"),
 			"uqc": hsn.get("stock_uom").upper(),
 			"qty": hsn.get("stock_qty"),
-			"val": flt(hsn.get("total_amount"), 2),
+			"rt": flt(hsn.get("tax_rate"), 2),
 			"txval": flt(hsn.get("taxable_amount", 2)),
 			"iamt": 0.0,
 			"camt": 0.0,
