Per-Line GST ITC — Block One Item, Not the Whole Invoice

Decide Input Tax Credit eligibility per PO line, per GRN line, and per asset cost component — with eleven statutory block reasons, a separate cess flag, audit-logged edits through approval, and a CSV report tuned for GSTR-3B Table 4(B) reconciliation.

The Challenge

Section 17(5) of the CGST Act blocks ITC on ten categories of supplies — motor vehicles, food and beverages, immovable construction, gifts and samples, CSR contributions, club and health, composition-dealer supplies, invalid GST, place-of-supply blocks, personal consumption. Every one of these is item-level, not invoice-level.

Most procurement systems hold ITC eligibility as an invoice-level Boolean — or, worse, as a free-text remarks field. That model forces an all-or-nothing decision at invoice booking, blurs the audit trail when one line is ineligible, and turns GSTR-3B reconciliation into a manual exercise of grep-and-sum across notes.

Tax auditors flag this under Section 17(5) (mis-claim of ineligible ITC) and GSTR-3B Table 4(B) (ineligible ITC reporting). Statutory auditors flag it under SA 250 — Consideration of Laws and Regulations.

How ProcureTrail Addresses This

Four ITC Columns at Three Levels

Every PO line, every GRN line, and every asset cost component carries four ITC columns — itc_eligible (Boolean, is GST ITC claimable), itc_blocked_reason (eleven-value statutory enum), itc_blocked_reason_note (free text, required when reason=OTHER), and cess_itc_eligible (Boolean, independent of itc_eligible so a cess-only block is expressible). Requisitions intentionally do not carry these columns — ITC is a procurement decision (at PO approval) and a receipt decision (for imports, on the GRN), not a requisition decision.

Eleven-Value Statutory Block-Reason Enum

The block-reason enumeration mirrors Section 17(5) plus three operational categories — MOTOR_VEHICLE, FOOD_BEVERAGE, CONSTRUCTION_IMMOVABLE, GIFT_SAMPLE_WELFARE, CSR, CLUB_HEALTH_LTA, COMPOSITION_DEALER, INVOICE_GST_INVALID, POS_BLOCKED, PERSONAL_CONSUMPTION, OTHER. Ad-hoc block strings are not accepted. The enumeration is the contract between the procurement team's tax decision and the GSTR-3B filing — every block ties to a specific statutory or operational reference.

Audit-Logged Edits at PO Approval

ITC values on a domestic PO line are decided at PO approval. The approver can pass an itc_overrides payload alongside the approve call; the system records PO_ITC_EDITED_AT_APPROVAL with before-and-after deltas for every changed line. Once approved, ITC values are locked through to posting — attempts to mutate via GRN endpoints return HTTP 409 ITC_LOCKED_POST_APPROVAL. The GRN inherits the PO's ITC posture line by line.

Import GRN Override — Pre-POSTED

Imports are different. The Bill of Entry with the actual IGST and Cess levied often lands after physical receipt. ProcureTrail allows ITC override on the GRN up to (but not including) POSTED: POST /grn/{grn_id}/itc-override accepts per-line overrides with grn_line_id, itc_eligible, itc_blocked_reason, itc_blocked_reason_note and cess_itc_eligible. Allowed only when the parent PO is flagged is_import=true AND the GRN is not yet POSTED. Audit action GRN_IMPORT_ITC_EDITED records every change. 409 envelopes: ITC_LOCKED_POST_APPROVAL (domestic), ITC_LOCKED_POST_POSTING (GRN already posted).

GSTR-3B Reconciliation CSV

GET /reports/itc-blocked-purchases streams a CSV designed specifically for GSTR-3B Table 4(B). Two row types: PO_LINE (every PO line with itc_eligible=false) and COMPONENT (every asset cost component with itc_eligible=false). Each row carries PO number, vendor name, vendor GSTIN, invoice number, GRN number, line description, basic amount, GST amount, block reason, reason note, and asset ID. Filters: date range on PO date, block-reason code, vendor. The CSV is the working file for the GSTR-3B preparer — every line that should NOT appear in Table 4(A) and SHOULD appear in Table 4(B), with documentation per block.

PO PDF Safety — ITC Stance Never Leaks to the Vendor

The vendor receives the PO; the vendor must not see the buyer's internal ITC stance on the line. The PO PDF builder explicitly excludes every ITC field name (itc_eligible, itc_blocked_reason, itc_blocked_reason_note, cess_itc_eligible), all eleven block-reason enum values, the free-text reason note, and the human labels ("ITC not claimed", "Claim GST ITC"). A regression test pins the absence — a future copy-paste cannot silently leak the field by accident.

Optional — Opt In Per Organisation

Per-line ITC is governed by a per-organisation flag, default off. While off, every per-line read site falls through to the legacy batch-level path — byte-identical Tally payloads, depreciation base, landed cost. Flipping the flag on per organisation requires a 48-hour bake period before re-enablement is treated as stable. AssetCostComponent rows automatically carry their own copy of the four ITC columns at goods receipt posting, so the per-line posture is traceable from PO line through GRN line to the asset cost component ledger.

Cross-Flag Invariants — Unreachable Combinations

Two ITC-related configuration flags interact in ways that the system enforces as invariants. Three of the four combinations are valid; one is structurally unreachable — and two more are statutorily incoherent.

Combo D — Unreachable

The combination GST_ITC_ENABLED=false plus PER_LINE_ITC_ENABLED=false would mean no ITC governance anywhere. Setting GST_ITC_ENABLED=false auto-flips PER_LINE_ITC_ENABLED=true (idempotent). Setting PER_LINE_ITC_ENABLED=false while GST_ITC_ENABLED is already false raises HTTP 422 PER_LINE_ITC_REQUIRED_WHEN_ORG_ITC_DISABLED.

Cess Requires GST

Compensation Cess ITC can only be set off against output cess liability (Section 11(2), GST Compensation Cess Act 2017). An org with GST_ITC_ENABLED=false cannot claim cess ITC either — the credit would be stranded. Setting GST_ITC_ENABLED=false auto-disables CESS_ITC_ELIGIBLE=false. Setting CESS_ITC_ELIGIBLE=true while GST_ITC_ENABLED=false raises HTTP 422 CESS_ITC_REQUIRES_GST_ITC.

Migration Retrofit

A migration retrofitted existing organisations at feature ship — every org with GST_ITC_ENABLED=false was flipped to PER_LINE_ITC_ENABLED=true so no pre-existing organisation is sitting in the unreachable combination by accident.

Audit Action Coverage

PO_ITC_EDITED_AT_APPROVAL, GRN_IMPORT_ITC_EDITED, and every SystemConfig flip that touches GST_ITC_ENABLED, PER_LINE_ITC_ENABLED, CESS_ITC_ELIGIBLE writes to the audit log. The chain from organisation-level switch to line-level decision is fully traceable.

The invariants exist so a misconfigured organisation cannot accidentally claim cess ITC after disabling regular ITC, and cannot accidentally leave ITC ungoverned at both the org and line level. Both checks live on the SystemConfig setter — there is no path that bypasses them.

11
Statutory block reasons
4
ITC columns per line
3
Levels carry ITC posture (PO / GRN / component)
0
ITC fields in the vendor PO PDF

Compliance Mapping

CGST Act 2017

Section 17(5)

Blocked ITC categories enumerated as an eleven-value enum on every line. Audit-logged edits through PO approval, locked through to posting — auditor can trace every blocked ITC decision to an approval event.

GST Compensation Cess Act 2017

Section 11(2)

Cess ITC set-off restriction. Separate cess_itc_eligible flag; Cess-Requires-GST invariant enforced at the SystemConfig setter — cess credit cannot be retained when regular GST ITC is disabled at the org level.

GSTR-3B Table 4(B)

Ineligible ITC Reporting

/reports/itc-blocked-purchases CSV streams every PO line and asset cost component with itc_eligible=false, with vendor name, vendor GSTIN, invoice and reason. The working file for the GSTR-3B preparer — Table 4(B) is just a sum.

Companies Act 2013

Section 143(3)(i)

Internal financial controls. PO PDF safety guard prevents the buyer's internal ITC stance leaking to vendor-facing documents; SA 250 (laws and regulations) covered by audit-logged edits + post-approval lock + GSTR-3B-tuned report.

Assess How This Applies to Your Organisation

Share a brief on your typical ITC profile — blocked-ITC volume, mix of domestic and import procurement, GSTR-3B reconciliation effort — and we will evaluate how per-line ITC governance fits your books.

Book a Consultation