GST Purchase Match
GST Purchase Match is a three-step workflow that imports your GSTR-2A data from the GST portal, automatically matches it against your recorded purchases, and shows you exactly which invoices do not line up so you can fix your books or follow up with suppliers before claiming Input Tax Credit.
Overview
This single sidebar item actually opens three separate pages, one per step of the reconciliation process: Upload GSTR-2A, Match Invoices, and Mismatch Report. They are meant to be used in that order once a month, around your GST filing date.
Step 1 (Upload GSTR-2A) takes the JSON file you download from the government GST portal and imports its invoice data into BazaarPOS.
Step 2 (Match Invoices) runs an automatic matching engine that compares each imported GSTR-2A invoice against your own purchase records and classifies every invoice as Matched, Partial, Mismatch or Unmatched.
Step 3 (Mismatch Report) is a focused, exportable view of only the problem invoices — mismatched and unmatched — with the ITC impact of each, so you know exactly how much Input Tax Credit is at risk before you file.
The whole feature is gated to India-only stores — every one of these three pages is hidden behind a "Not available for your region" message if your store's country is not India.
Before You Start
- You must have downloaded your GSTR-2A JSON file from the GST portal for the relevant filing period before starting Step 1.
- Your purchases for that period should already be recorded in BazaarPOS (via Purchases) — the auto-reconcile engine can only match against purchases that exist in the system.
- Requires the Advanced plan tier or above and a role with GST/Reports permission.
Step-by-Step Guide
1 Step 1 — Upload GSTR-2A
This is the Upload GSTR-2A page, the first child page of GST Purchase Match.
- Follow the on-screen instructions panel, which walks through downloading the GSTR-2A JSON from the GST portal for your filing period.
- Click the upload area (or drag the file onto it) and choose the
.jsonfile you downloaded — only.jsonfiles are accepted; any other extension is rejected with an error. - Once selected, the file is parsed in your browser; a green checkmark plus the file name and size (in KB) confirm it parsed successfully. If the JSON is invalid, you get a parse-error toast instead and nothing is uploaded.
- Click Import to send the parsed data to BazaarPOS, or Cancel to discard the selection and pick a different file.
- After import, review the result screen: Total Invoices, Total Suppliers, Taxable Value and Total ITC imported, plus a breakdown by invoice type (e.g. B2B, CDNR) showing count and value per type.
- Click "Go to Reconciliation" to move straight to Step 2, or "Import Another" to reset the form and upload a different file (e.g. a correction, or another period).
2 Step 2 — Match Invoices (auto-reconciliation)
This is the Match Invoices page.
- Choose the Month and Year you want to reconcile, and optionally set Status to All / Matched / Partial / Mismatch / Unmatched to pre-filter the list.
- Click Apply to load whatever reconciliation records already exist for that filter.
- Click Auto-Reconcile to run the matching engine against the chosen month/year — this compares every imported GSTR-2A invoice for that period with your recorded purchases and (re)computes each one's match status and match score.
- Read the four summary cards: Total Records (with matched count), Matched (with % of total), Unmatched (with total value difference), and ITC Claimed (with rejected amount).
- Scroll the reconciliation table — Invoice (number + date), Supplier (name + GSTIN), Amount (with the value difference shown if non-zero), Status badge (Matched/Partial/Mismatch/Unmatched), and Match Score % (with a "Manual" label if someone already manually resolved that row).
- Click the chevron on any row to open that invoice's detail/resolution screen.
- Click "Mismatch Report" in the header at any time to jump to Step 3 for the same period.
3 Step 3 — Review the Mismatch Report
This is the Mismatch Report page — the output you actually act on before filing.
- Choose Month and Year, then click Generate to compute the report for that period.
- Read the three summary cards: Total Records (with matched count), Mismatch Count (with % of total), and Unmatched Count (with total value difference).
- Check the ITC Summary card: Total Adjustments, Approved, Total Claimed and Total Rejected — this tells you the actual rupee impact of the mismatches on your Input Tax Credit claim.
- Review the Mismatched Invoices table — each row shows the invoice, supplier, amount (with the value difference), and the specific Mismatch Reasons text explaining why it did not match cleanly.
- Review the Unmatched Invoices table below it — invoices from GSTR-2A that could not be linked to any purchase entry at all.
- Click Export CSV to download every mismatched and unmatched row (Invoice Number, Invoice Date, Supplier Name, Supplier GSTIN, Invoice Value, Match Status, Mismatch Reasons, Value Difference, Tax Difference) — useful for sharing with your accountant or following up with suppliers.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
File upload (.json only) | Accepts only the GSTR-2A JSON export from the GST portal; any other file type is rejected before parsing is attempted. |
Import | Posts the parsed JSON plus the original filename to the server, which stores every invoice and computes the import summary. |
Import summary | Total Invoices, Total Suppliers, Taxable Value, Total ITC plus a by-invoice-type breakdown, computed once immediately after a successful import. |
Month / Year (Reconciliation & Mismatch pages) | The GST filing period being reconciled or reported on. |
Status filter (Reconciliation page) | All / Matched / Partial / Mismatch / Unmatched — narrows the reconciliation table without re-running the matching engine. |
Auto-Reconcile | Runs (or re-runs) the matching engine for the chosen month/year, comparing every GSTR-2A invoice against your recorded purchases. |
Match Score | A percentage confidence score the engine assigns to each match; rows resolved by a person instead of the engine are labelled "Manual". |
Value Difference / Tax Difference | The rupee gap between what GSTR-2A says the supplier reported and what you have recorded, shown per invoice. |
Mismatch Reasons | Free-text explanation (e.g. amount mismatch, GSTIN mismatch, date mismatch) generated by the matching engine for each mismatched invoice. |
Export CSV (Mismatch Report) | A client-side CSV download of every mismatched + unmatched row, generated entirely in the browser from the already-loaded report data. |
Tips & Best Practices
- Always run Step 1 (Upload) with the latest GSTR-2A JSON before running Auto-Reconcile — reconciling against stale, previously-imported data will not reflect the supplier's latest filings.
- Work through the Mismatch Report before filing GSTR-3B — every rupee in "Total Rejected" under ITC Summary is credit you should not claim until the discrepancy is resolved.
- If the same supplier keeps appearing as Mismatch every month, check whether your purchase entries are using their correct GSTIN — a GSTIN mismatch is one of the most common reasons invoices fail to auto-match.
- Re-run Auto-Reconcile after you correct a purchase entry — matching does not update automatically, it only runs when you click the button.
Troubleshooting & FAQ
The whole GST Purchase Match section is missing from my sidebar.
Import fails with a JSON parse error.
Auto-Reconcile ran but many invoices are still Unmatched.
Match Score is not shown for some rows.
The Mismatch Report Export CSV button is disabled.
Numbers between the Reconciliation summary and the Mismatch Report do not match exactly.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/GSTR2AImportPage.jsxfrontend-app/packages/pos-react-lib/src/pages/GSTR2AReconciliationPage.jsxfrontend-app/packages/pos-react-lib/src/pages/GSTR2AMismatchReport.jsx
Backend endpoints used:
POST /gstr2a/importGET /gstr2a/reconciliationGET /gstr2a/reconciliation/summaryPOST /gstr2a/reconcileGET /gstr2a/reports/mismatch
Related tables (db-core repositories):
GSTR-2A imported invoice recordsPurchase reconciliation/match recordsPurchaseSupplier
Redux slices:
scope (selectCurrentScope)
Feature flag key: gst (requires advanced plan tier or above)
All three pages independently gate on storeFmt.isIndia and render the same "Not available for your region" placeholder if false. The GSTR-2A JSON is parsed entirely client-side with FileReader before being POSTed, so a malformed file never reaches the server. The Mismatch Report's CSV export is generated client-side from already-fetched data via a Blob + object URL, not a server-generated file.