fix: Multiple fixes in GSTR-3b Report
diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html
index 77a9b63..2da79a6 100644
--- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html
+++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html
@@ -222,17 +222,17 @@
 			</tr>
 			<tr>
 				<td>&nbsp (1) {{__("As per rules 42 & 43 of CGST Rules")}}</td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[0].iamt, 2) }}</td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[0].camt, 2) }}</td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[0].samt, 2) }}</td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[0].csamt, 2) }}</td>
 			</tr>
 			<tr>
 				<td>&nbsp (2) {{__("Others")}}</td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[1].iamt, 2) }}</td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[1].camt, 2) }}</td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[1].samt, 2) }}</td>
+				<td class="right">{{ flt(data.itc_elg.itc_rev[1].csamt, 2) }}</td>
 			</tr>
 			<tr>
 				<td><b>(C) {{__("Net ITC Available(A) - (B)")}}</b></td>
diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
index 6569833..448abe8 100644
--- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
+++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
@@ -91,10 +91,10 @@
 					},
 					{
 						"ty": "ISD",
-						"iamt": 1,
-						"camt": 1,
-						"samt": 1,
-						"csamt": 1
+						"iamt": 0,
+						"camt": 0,
+						"samt": 0,
+						"csamt": 0
 					},
 					{
 						"samt": 0,
@@ -104,6 +104,22 @@
 						"iamt": 0
 					}
 				],
+				"itc_rev": [
+					{
+						"ty": "RUL",
+						"iamt": 0,
+						"camt": 0,
+						"samt": 0,
+						"csamt": 0
+					},
+					{
+						"ty": "OTH",
+						"iamt": 0,
+						"camt": 0,
+						"samt": 0,
+						"csamt": 0
+					}
+				],
 				"itc_net": {
 					"samt": 0,
 					"csamt": 0,
@@ -173,6 +189,10 @@
 		net_itc = self.report_dict["itc_elg"]["itc_net"]
 
 		for d in self.report_dict["itc_elg"]["itc_avl"]:
+
+			itc_type = itc_type_map.get(d["ty"])
+			gst_category = "Registered Regular"
+
 			if d["ty"] == 'ISRC':
 				reverse_charge = "Y"
 			else:
@@ -180,24 +200,22 @@
 
 			for account_head in self.account_heads:
 
-				d["iamt"] = flt(itc_details.get((itc_type_map.get(d["ty"]), reverse_charge, account_head.get('igst_account')), {}).get("amount"), 2)
-				net_itc["iamt"] += flt(d["iamt"], 2)
+				d["iamt"] += flt(itc_details.get((gst_category, itc_type, reverse_charge, account_head.get('igst_account')), {}).get("amount"), 2)
+				d["camt"] += flt(itc_details.get((gst_category, itc_type, reverse_charge, account_head.get('cgst_account')), {}).get("amount"), 2)
+				d["samt"] += flt(itc_details.get((gst_category, itc_type, reverse_charge, account_head.get('sgst_account')), {}).get("amount"), 2)
+				d["csamt"] += flt(itc_details.get((gst_category, itc_type, reverse_charge, account_head.get('cess_account')), {}).get("amount"), 2)
 
-				d["camt"] = flt(itc_details.get((itc_type_map.get(d["ty"]), reverse_charge, account_head.get('cgst_account')), {}).get("amount"), 2)
-				net_itc["camt"] += flt(d["camt"], 2)
-
-				d["samt"] = flt(itc_details.get((itc_type_map.get(d["ty"]), reverse_charge, account_head.get('sgst_account')), {}).get("amount"), 2)
-				net_itc["samt"] += flt(d["samt"], 2)
-
-				d["csamt"] = flt(itc_details.get((itc_type_map.get(d["ty"]), reverse_charge, account_head.get('cess_account')), {}).get("amount"), 2)
-				net_itc["csamt"] += flt(d["csamt"], 2)
+			net_itc["iamt"] += flt(d["iamt"], 2)
+			net_itc["camt"] += flt(d["camt"], 2)
+			net_itc["samt"] += flt(d["samt"], 2)
+			net_itc["csamt"] += flt(d["csamt"], 2)
 
 		for account_head in self.account_heads:
-
-			self.report_dict["itc_elg"]["itc_inelg"][1]["iamt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("igst_account")), {}).get("amount"), 2)
-			self.report_dict["itc_elg"]["itc_inelg"][1]["camt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("cgst_account")), {}).get("amount"), 2)
-			self.report_dict["itc_elg"]["itc_inelg"][1]["samt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("sgst_account")), {}).get("amount"), 2)
-			self.report_dict["itc_elg"]["itc_inelg"][1]["csamt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("cess_account")), {}).get("amount"), 2)
+			itc_inelg = self.report_dict["itc_elg"]["itc_inelg"][1]
+			itc_inelg["iamt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("igst_account")), {}).get("amount"), 2)
+			itc_inelg["camt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("cgst_account")), {}).get("amount"), 2)
+			itc_inelg["samt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("sgst_account")), {}).get("amount"), 2)
+			itc_inelg["csamt"] = flt(itc_details.get(("Ineligible", "N", account_head.get("cess_account")), {}).get("amount"), 2)
 
 	def prepare_data(self, doctype, tax_details, supply_type, supply_category, gst_category_list, reverse_charge="N"):
 
@@ -226,20 +244,22 @@
 
 	def set_inter_state_supply(self, inter_state_supply):
 
+		osup_det = self.report_dict["sup_details"]["osup_det"]
+
 		for d in inter_state_supply.get("Unregistered", []):
 			self.report_dict["inter_sup"]["unreg_details"].append(d)
-			self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d["txval"], 2)
-			self.report_dict["sup_details"]["osup_det"]["iamt"] += flt(d["iamt"], 2)
+			osup_det["txval"] = flt(osup_det["txval"] + d["txval"], 2)
+			osup_det["iamt"] = flt(osup_det["iamt"] + d["iamt"], 2)
 
 		for d in inter_state_supply.get("Registered Composition", []):
 			self.report_dict["inter_sup"]["comp_details"].append(d)
-			self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d["txval"], 2)
-			self.report_dict["sup_details"]["osup_det"]["iamt"] += flt(d["iamt"], 2)
+			osup_det["txval"] = flt(osup_det["txval"] + d["txval"], 2)
+			osup_det["iamt"] = flt(osup_det["iamt"] + d["iamt"], 2)
 
 		for d in inter_state_supply.get("UIN Holders", []):
 			self.report_dict["inter_sup"]["uin_details"].append(d)
-			self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d["txval"], 2)
-			self.report_dict["sup_details"]["osup_det"]["iamt"] += flt(d["iamt"], 2)
+			osup_det["txval"] = flt(osup_det["txval"] + d["txval"], 2)
+			osup_det["iamt"] = flt(osup_det["iamt"] + d["iamt"], 2)
 
 	def get_total_taxable_value(self, doctype, reverse_charge):
 
@@ -268,7 +288,7 @@
 		itc_details = {}
 
 		for d in itc_amount:
-			itc_details.setdefault((d.eligibility_for_itc, d.reverse_charge, d.account_head),{
+			itc_details.setdefault((d.gst_category, d.eligibility_for_itc, d.reverse_charge, d.account_head),{
 				"amount": d.tax_amount
 			})
 
@@ -315,9 +335,10 @@
 					"iamt": flt(inter_state_supply_tax_mapping.get(d.place_of_supply), 2)
 				})
 			else:
-				self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d.total, 2)
-				self.report_dict["sup_details"]["osup_det"]["camt"] += flt(inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2)
-				self.report_dict["sup_details"]["osup_det"]["samt"] += flt(inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2)
+				osup_det = self.report_dict["sup_details"]["osup_det"]
+				osup_det["txval"] = flt(osup_det["txval"] + d.total, 2)
+				osup_det["camt"] = flt(osup_det["camt"] + inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2)
+				osup_det["samt"] = flt(osup_det["samt"] + inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2)
 
 		return inter_state_supply_details