HSN Codes and GST 2.0 Slabs in Bharat GST Invoice: Product Setup Guide

How to set HSN codes and GST 2.0 slabs (0/5/18/40) on WooCommerce products with Bharat GST Invoice, plus checkout GSTIN validation and the intra vs inter-state tax split.

Why HSN codes and slabs are set per product

Under GST every taxable supply carries an HSN (Harmonised System of Nomenclature) code and a tax rate. WooCommerce does not model Indian GST natively, so Bharat GST Invoice adds its own "GST (India)" tab to every product's data — there you set the HSN code and the GST slab the product belongs to. The invoice prints an HSN summary with rate-wise totals, and the GSTR-1 HSN export is built from the same data.

Setting the HSN code on a product

Edit a product in WooCommerce and open Product data > GST (India). Enter the HSN code — 4 to 8 digits — in the HSN Code field. Variations can override the parent HSN, which is handy when a variable product spans different chapters. Leave the variation field blank to inherit the parent value.

The code is stored as digits only, so spacing or dashes typed by mistake are cleaned automatically. On the invoice the HSN summary groups identical code + rate combinations and shows taxable value, CGST, SGST/UTGST, IGST and CESS per group.

Choosing the GST slab (GST 2.0 rates)

The slab picker follows the current GST 2.0 structure. Choose 0% for essentials and nil-rated goods, 5% for standard-rate goods, 18% for standard services and most goods, and 40% for sin and luxury goods. Products without an explicit slab fall back to the default slab on the settings page, so you can leave niche products untagged and control their rate centrally.

SlabTypical goods and servicesExample
0%Essentials, fresh produce, nil-rated goodsUnprocessed food grains
5%Standard-rate essentials and packaged goodsPackaged snacks, apparel below the threshold
18%Standard goods and servicesElectronics, professional services, SaaS
40%Sin and luxury goodsAerated drinks, premium vehicles

GSTIN at checkout and automatic tax split

The plugin adds an optional GSTIN field to the checkout billing fields. The value is normalised and checksum-validated on the spot; an invalid GSTIN blocks checkout with a clear message, and a valid one is stored on the order. Orders carrying a buyer GSTIN are treated as B2B — they appear in the B2B section of GSTR-1 and become eligible for e-invoicing.

The tax split itself is automatic: the seller state from the settings page is compared with the buyer's place of supply. Same state produces CGST + SGST (or CGST + UTGST for union territories without a legislature such as Ladakh, Chandigarh, Lakshadweep, Andaman & Nicobar, and Dadra & Nagar Haveli and Daman & Diu); a different state produces IGST. Union territories are handled by name, so the split is correct even for the tricky cases.

Quick checklist

Set the HSN and slab on every sellable product, pick a sensible default slab for anything untagged, enable the checkout GSTIN field if you sell B2B, and place a test order in both an intra-state and an inter-state scenario to see the split before going live.

Wasim Akram digitalwasim.com buy the developer a coffee