You receive a purchase invoice from a steel supplier. Three lines. Line 1: TMT bars, 5 tonnes, ₹2,80,000, HSN 72142000. Line 2: freight, ₹18,000. Line 3: installation at your plant, ₹12,000. The supplier used the same HSN on all three lines: 72142000. That is wrong. Freight is a service. Installation is a service. Both need SAC, not HSN. But the page looks like a steel invoice, the HSN looks like steel, and the OCR copies the last code it saw.
HSN list is headings you see on factory goods. HSN validation is format and a laggy directory. This page is the mix: material plus transport plus installation on one tax invoice. Classification is still the CA's. The gate is still digit shape.
HSN: goods. SAC: services. Look up both on the GST HSN/SAC search and rates on CBIC. A familiar rupee rate on both lines does not make the code interchangeable.
Ellipsis on SAC: look up the full code. Do not copy these digits into a return. 72142000 is the goods example from the HSN posts; directory snapshot may split it.
What format allows
Valid lengths 2, 4, 6, 8. Digits only after we strip dots. Five or seven digits fail. Empty HSN on a line does not fail format today; we only validate codes that are present. Directory is shadow by default. None of that asks "is this a service." A six-digit SAC that looks like an HSN will pass format. The clerk's job is series, not length.
How OCR mixes them
One tax table. Header "HSN." Freight sits in the same grid. The model copies 7214 onto the freight row because that is the last code it saw. Arithmetic can still close. Regime can still match. You have a goods code on a service. Filing and 2B care. We will not silently rewrite it to a transport SAC. Review shows the line index. The PO tells you what you bought.
Place of supply for services is a different legal tree than for goods. Link POS. If half the invoice is installation, do not assume the two-prefix goods rule is enough. That row should make a human nervous. The software should not paper over it.
Rates
Do not assume goods and services on the same page share a rate. Notifications change. CBIC rate page. If taxable times printed rate does not equal tax on that line, arithmetic fails for mixed rates the same as for one rate: we check per line when rate and tax are present. Link totals. A round-off row is still not a product.
9987-style maintenance codes vs 72xx steel: if OCR drops a 9 and leaves 72, you have a goods code on a repair line. Format still passes. The PO is the authority. We will not guess from the description string. Descriptions on photocopies are worse than codes.
Tally
Service lines may need different ledgers than goods. Mapping by vendor only will dump freight into "MS purchase." That is a books problem after a clean GSTIN. Import still needs the ledger to exist. We do not invent SAC-specific Tally groups.
Bake-off
Give a three-line invoice: goods HSN, freight SAC, installation SAC. If the vendor copies one code onto all three and still auto-exports, they have format without classification. We may do the same if each code is well-formed. Score whether the clerk sees three lines with three codes, not whether we "knew" freight. Honesty over a magic classifier we do not have.
- GST searchHSN/SAC search
Official lookup.
- CBICGST rates
Current notifications. Not this table.
- EntryLedgerHSN validation
Format 2/4/6/8. Directory shadow. No series rewrite.
HSN vs SAC?+
Goods vs services. Search on the GST tool. Rates on CBIC.
Do you rewrite freight to SAC?+
No. Format on the printed code. Clerk picks the series.
Empty HSN on a service line?+
Format not run if empty. Completeness of tax fields still applies. Review if you need a code on every line.