Blog/GST & ITC
One photocopy, two series

Steel, freight, and installation on the same invoice. HSN will not cover the last two.

Goods use HSN. Services use SAC. Format only asks whether the string is 2, 4, 6 or 8 digits. It will not stop you putting chapter 72 on a freight line. We do not auto-rewrite.

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 vs SAC

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.

One invoice, mixed linesexample codes, not a tariff
LineCodeSeries
TMT bar72142000HSN goods
Freight9965...SAC service
Installation9954...SAC service

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.

Sources
Frequently asked questions
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.

Three lines, three codes

Upload a mixed invoice. See whether each line kept its own HSN or SAC.