Deterministic where money moves. AI where words do.
Every credit decision in this product is made by rules you can read and test: the match cascade, eligibility under Section 17(5), place of supply, the IMS state model and the statutory clocks. A small model is used for three language jobs, each checked before it is shown. This page is the evidence.
From the books to a defensible GSTR-3B
- Purchase register and payments from the ERP
- GSTR-2B and IMS records for every GSTIN, through a GSP
- Travel bookings, airline and hotel invoices
- Match cascade with global one-to-one allocation
- Eligibility: Section 17(5) and place of supply
- Clocks: GSTR-2B, GSTR-3B, Section 16(4), Rule 37
- Reconciliation review and supplier follow-up
- IMS actions with preview and reason codes
- Every decision on a hash-chained log
- IMS actions back through the GSP
- GSTR-3B Table 4 figures
- Evidence packs for ASMT-10 and DRC-01
Eight outcomes, one constant
Tiers are tried top down for every candidate pair; all surviving pairs are then ranked (tier, then smallest amount gap, then smallest date gap) and allocated one-to-one, best first. Auto-accept at 85% and above. A tax-head disagreement caps any tier at 70%. Dates must agree within 7 days; late filing is looked for up to 3 months on.
- Exact100%
Same supplier GSTIN, same invoice number, same date, same amount, in the invoice's own 2B period.
Action: Auto-accept
- Normalised95%
Invoice numbers equal after removing separators and case, or after removing leading zeros, or after the 16-character cut of Rule 46; amount and date equal.
Action: Auto-accept
- FY variant90%
Invoice numbers equal once the financial-year token is rewritten (26-27, 2026-27, FY26-27); amount and date equal.
Action: Auto-accept
- Tolerance85%
Same document by number; amount within max(₹1, 0.01%) and date within 7 days.
Action: Auto-accept, 10% sample audit
- Late filing70%
Same document, amount within tolerance, but it sits in a 2B up to 3 months after the invoice's period. Credit moves to that period.
Action: Review: claim in the period it appears
- Supplier GSTIN differs60%
Same PAN, different GSTIN (a typo in the books or another registration of the supplier); number, amount and date agree.
Action: Review: correct the master or ask the supplier
- Value mismatch50%
Same supplier, number, period and date, but the amount differs beyond tolerance (an added freight line, a price change).
Action: Review: book the difference or ask for a credit note
- Not in 2B-
No tier fires. Either the supplier has not filed yet, or has not filed at all.
Action: Chase the supplier before the credit deadline
| Tier | Confidence | Rule | Action |
|---|---|---|---|
| Exact | 100% | Same supplier GSTIN, same invoice number, same date, same amount, in the invoice's own 2B period. | Auto-accept |
| Normalised | 95% | Invoice numbers equal after removing separators and case, or after removing leading zeros, or after the 16-character cut of Rule 46; amount and date equal. | Auto-accept |
| FY variant | 90% | Invoice numbers equal once the financial-year token is rewritten (26-27, 2026-27, FY26-27); amount and date equal. | Auto-accept |
| Tolerance | 85% | Same document by number; amount within max(₹1, 0.01%) and date within 7 days. | Auto-accept, 10% sample audit |
| Late filing | 70% | Same document, amount within tolerance, but it sits in a 2B up to 3 months after the invoice's period. Credit moves to that period. | Review: claim in the period it appears |
| Supplier GSTIN differs | 60% | Same PAN, different GSTIN (a typo in the books or another registration of the supplier); number, amount and date agree. | Review: correct the master or ask the supplier |
| Value mismatch | 50% | Same supplier, number, period and date, but the amount differs beyond tolerance (an added freight line, a price change). | Review: book the difference or ask for a credit note |
| Not in 2B | - | No tier fires. Either the supplier has not filed yet, or has not filed at all. | Chase the supplier before the credit deadline |
One definition feeds the engine, the reconciliation screen and this table, so the three cannot disagree.
Two scores, and which one to believe
Set A is the demo books: every defect in it was generated to be recoverable, so it is a regression harness, not evidence. Set B was built to break matching engines. Read B.
A is the demo books; B is the adversarial set.
| Measure | AA · demo books | BB · adversarial |
|---|---|---|
| Invoices scored | 211 | 208 |
| Precision (links that are right) | 100.0% | 100.0% |
| Recall (true records found) | 100.0% | 86.3% |
| False matches | 0 | 0 |
| Missed credits | 0 | 26 |
| Correct refusals (never filed) | 36 | 18 |
| Right link, wrong root cause | - | 0 |
Both run the same engine in-process on synthetic, labelled data. A false match books credit against the wrong invoice; once used, it carries 18% interest under Section 50(3), which is why it is scored separately from a miss.
Benchmark B, class by class
8 of 10 classes are handled with no miss and no false match. The misses are confined to vendor re-coded series and digit transposition: defects no string rule can recover, left to a person rather than guessed.
- Clean (control)Handled
Identical record on both sides: the positive control.
Expected: Exact link
96 rows · 96 linked · 0 refused · 0 missed · 0 false - Paise driftHandled
Amount off by ₹0.10 to ₹0.99, inside the ₹1 band: the boundary control.
Expected: Tolerance link, coded as rounding
18 rows · 18 linked · 0 refused · 0 missed · 0 false - Freight line addedHandled
The supplier adds a ₹150 to ₹900 freight or insurance line the books never recorded. Beyond every tolerance band, so it must not auto-accept; it should surface as the same document with a value gap, coded as an amount difference.
Expected: Linked for review as a value mismatch
16 rows · 16 linked · 0 refused · 0 missed · 0 false - Series collision (recurring billing)Handled
Two same-amount monthly invoices whose numbers normalise identically, twelve days apart; one was filed a month late. A greedy engine cross-links the pair. Global ranking must keep each on its own record.
Expected: Both invoices linked to their own records
8 rows · 8 linked · 0 refused · 0 missed · 0 false - Document number reusedHandled
A small vendor reuses document number 21 three months later for a different transaction. Only April's was filed. January's must stay unmatched, not borrow April's credit.
Expected: Correct refusal for the unfiled one
8 rows · 4 linked · 4 refused · 0 missed · 0 false - Vendor re-coded seriesMissed
The books carry the PO or proforma reference; the supplier files its tax-invoice series. Recovering these needs amount, date and PAN candidate blocking, which this engine deliberately does not do yet.
Expected: Miss (no string rule can recover it)
14 rows · 0 linked · 0 refused · 14 missed · 0 false - Digit transpositionMissed
Two adjacent digits swapped at data entry (…19 keyed as …91). The normalised numbers differ.
Expected: Miss
12 rows · 0 linked · 0 refused · 12 missed · 0 false - 16-character cut (Rule 46)Handled
CGST Rule 46(b) caps an invoice serial at 16 characters; longer ERP numbers are clipped when GSTR-1 is prepared. The engine compares the first 16 characters of a longer number.
Expected: Normalised link via the 16-character rule
12 rows · 12 linked · 0 refused · 0 missed · 0 false - Supplier filed from another branchHandled
The books record the supplier's Karnataka registration; it filed from its Delhi registration of the same PAN. Same legal entity, different GSTIN: link it, but a person confirms.
Expected: Linked for review (same PAN, different GSTIN)
10 rows · 10 linked · 0 refused · 0 missed · 0 false - Never filed (control)Handled
The supplier never filed: the negative control.
Expected: Correct refusal
14 rows · 0 linked · 14 refused · 0 missed · 0 false
20 ways reconciliation goes wrong, and what happens to each
18 are handled by the engine running on this site; the rest are marked as roadmap rather than claimed.
01IdentityHandled by the engineSupplier GSTIN mistyped in the booksThe vendor master has one character wrong (0 keyed as O). The supplier's filing is right; the books never match it.
- Detection
- A books GSTIN that fails its checksum, or is one character away from a GSTIN in 2B, with the same number, amount and date.
- Resolution
- Linked at 60% for review with the cause 'GSTIN mistyped in books'. Never auto-accepted.
- Operator sees
- The supplier filed under 33AARCC9021N1Z…; your master has 33AARCC9O21N1Z…. Correct the master?
- Logged
- books_gstin, 2b_gstin, edit_distance, operator_decision
- Reference
- GSTIN = state code + PAN + entity number + Z + check character.
02FormatHandled by the engineLeading zeros dropped by a spreadsheetThe supplier's number is INV-0042; an Excel export drops the zeros and the books carry INV-42.
- Detection
- Second normalised key: split into letter and digit runs and strip leading zeros from each digit run.
- Resolution
- Normalised tier, 95%, auto-accepted when amount and date agree.
- Operator sees
- None: resolved automatically.
- Logged
- books_number, 2b_number, normalised_key
03FormatHandled by the engineFinancial-year token written differentlyThe books carry KPC/26-27/0112; the supplier files KPC/2026-27/0112.
- Detection
- Rewrite the FY token (26-27, 2026-27, 2026-2027, FY26-27) and compare normalised.
- Resolution
- FY-variant tier, 90%, auto-accepted when amount and date agree.
- Operator sees
- None: resolved automatically.
- Logged
- fy_token_books, fy_token_2b
04FormatHandled by the engineSeparators and caseSSP-0417 in the books, SSP0417 in 2B.
- Detection
- First normalised key: lowercase and strip everything but letters and digits.
- Resolution
- Normalised tier, 95%.
- Operator sees
- None: resolved automatically.
- Logged
- books_number, 2b_number
05FormatHandled by the engineNumber cut to 16 charactersThe ERP number is 19 characters; Rule 46(b) allows 16, so GSTR-1 carries the first 16.
- Detection
- When the books number is longer than 16 characters, compare its first 16 with the 2B number.
- Resolution
- Normalised tier, 95%, when amount and date agree.
- Operator sees
- None: resolved automatically; the ERP series should be shortened.
- Logged
- books_number, 2b_number, truncation
- Reference
- CGST Rule 46(b).
06AmountHandled by the enginePaise roundingThe supplier rounds per line, the books per invoice; the totals differ by 50 paise.
- Detection
- Amount within the larger of ₹1 and 0.01%, date within 7 days.
- Resolution
- Tolerance tier, 85%, auto-accepted and sampled for audit.
- Operator sees
- None.
- Logged
- books_amount, 2b_amount, tolerance
07AmountHandled by the engineFiled value higher than bookedThe supplier added a freight or insurance line the books never recorded.
- Detection
- Same supplier, number, period and date; amount outside tolerance.
- Resolution
- Value-mismatch tier, 50%: linked for review, never auto-accepted. IMS suggestion: keep pending.
- Operator sees
- Filed ₹X more than booked. Book the extra line, or ask for a credit note?
- Logged
- books_amount, 2b_amount, gap, operator_decision
08Tax headsHandled by the engineWrong tax head for the place of supplyA Karnataka supplier charges IGST to a Karnataka buyer. The total agrees; the tax is in the wrong head.
- Detection
- Compare tax heads on both sides at every tier. A disagreement is a place-of-supply error.
- Resolution
- Confidence capped at 70% whatever the tier; IMS suggestion: reject so the supplier amends it (GSTR-1A, or a later GSTR-1 once that period has closed).
- Operator sees
- Filed as IGST; expected CGST + SGST. Reject and request an amendment?
- Logged
- supplier_state, place_of_supply, books_heads, 2b_heads
09TimingHandled by the engineSupplier filed lateAn invoice dated in one month appears in the next month's GSTR-2B.
- Detection
- Same document found in a 2B up to three months after the invoice's period, amount within tolerance.
- Resolution
- Late-filing tier, 70%: credit is claimable in the period it appears.
- Operator sees
- Found in the next period's 2B. Claim it there.
- Logged
- invoice_period, 2b_period, drift_months
- Reference
- Credit follows GSTR-2B: CGST Act s.16(2)(aa).
10TimingHandled by the engineCredit deadlineAn invoice still missing from 2B approaches 30 November after its financial year.
- Detection
- Every unmatched invoice carries its section 16(4) cutoff; the chase list is ordered by it.
- Resolution
- Past the cutoff the status becomes 'lost at 16(4)'.
- Operator sees
- ₹X of FY credit is lost on 30 November unless these suppliers file.
- Logged
- invoice_fy, cutoff, days_left
- Reference
- CGST Act s.16(4).
11TimingHandled by the engineSupplier not paid within 180 daysCredit was claimed; payment is withheld in a dispute.
- Detection
- Matched, unpaid, and more than 180 days past the invoice date.
- Resolution
- Flagged for reversal in the next GSTR-3B; re-claimable on payment.
- Operator sees
- Rule 37: reverse ₹X now; re-claim when paid.
- Logged
- invoice_date, paid_on, rule37_due
- Reference
- CGST Rule 37.
12AllocationHandled by the engineRecurring same-amount invoicesMonthly rentals with the same amount and numbers that normalise alike. A greedy matcher cross-links them.
- Detection
- Rank every candidate pair globally and assign one-to-one, best first, instead of in file order.
- Resolution
- Each invoice keeps its own record (verified in the adversarial benchmark).
- Operator sees
- None.
- Logged
- candidate_pairs, allocation_rank
13AllocationHandled by the engineDocument number reused months laterA small vendor restarts numbering; number 21 recurs three months later for a different sale.
- Detection
- Late-filing and value tiers require the amount to agree, or the same period and date.
- Resolution
- The unfiled invoice stays unmatched instead of borrowing the later one's credit.
- Operator sees
- None: correctly refused.
- Logged
- near_miss_record, refusal_reason
14ComplianceHandled by the engineBlocked credit that matches perfectlyAn executive SUV, staff catering or a club membership matches exactly in 2B.
- Detection
- HSN/SAC master maps each line to its s.17(5) clause.
- Resolution
- Status 'blocked by law': accept the record in IMS, report the reversal in GSTR-3B Table 4(B)(1).
- Operator sees
- Matched but blocked under s.17(5)(a). Not claimed.
- Logged
- hsn_sac, blocked_clause
- Reference
- CGST Act s.17(5).
15ComplianceHandled by the engineReverse chargeGoods transport agency services under reverse charge: the buyer, not the supplier, pays the tax.
- Detection
- RCM SAC codes in the master; the invoice carries no tax.
- Resolution
- Claimable once the tax is paid in cash through GSTR-3B.
- Operator sees
- Pay ₹X under reverse charge in cash; the credit follows.
- Logged
- rcm_flag, cash_payment_ref
- Reference
- CGST Act s.9(3).
16TravelHandled by the engineHotel invoice billed to the wrong state's GSTINA Pune stay invoiced to the Bengaluru GSTIN. Maharashtra CGST + SGST cannot be claimed in Karnataka.
- Detection
- Place of supply of lodging is the property (IGST s.12(3)); the invoice must carry the company GSTIN of that state.
- Resolution
- Recoverable: ask the hotel to re-issue before the cutoff. With no registration in that state: lost.
- Operator sees
- Re-issue to 27AADCM4821K1Z…, the Maharashtra registration.
- Logged
- hotel_state, invoice_gstin, required_gstin
- Reference
- IGST Act s.12(3).
17TravelHandled by the engineTicket booked without the company GSTINThe traveller booked without entering the GSTIN, so the airline issued a B2C ticket.
- Detection
- Travel feed booking with no GSTIN, or a portal invoice without one.
- Resolution
- Recoverable if the airline amends the ticket; tracked to the cutoff.
- Operator sees
- Ask the airline to add the GSTIN and issue a B2B tax invoice.
- Logged
- pnr, gstin_on_ticket, fetch_status
- Reference
- IGST Act s.12(9).
18RecordsHandled by the engineFiled against you, booked by nobodyA record in 2B with no invoice in the books, sometimes from a supplier nobody has heard of.
- Detection
- 2B records left unassigned after matching; vendor-master lookup by PAN.
- Resolution
- IMS suggestion: hold for a known supplier, reject for an unknown one.
- Operator sees
- Not in the books. Did we receive this?
- Logged
- 2b_record, vendor_master_hit
19LifecycleOn the roadmapAmended or credit-noted after acceptanceThe supplier amends an accepted invoice or issues a credit note in a later period.
- Detection
- Track amendment and credit-note records against the original; re-open the original decision.
- Resolution
- Original decision re-opened; the credit-note reversal amount is declared in IMS (from the October 2025 period).
- Operator sees
- Amended by the supplier: review the new value.
- Logged
- original_record, amendment_record, declared_reversal
20RecordsOn the roadmapISD distributions and importsCredit distributed by an Input Service Distributor, and bills of entry for imports, sit in separate sections of 2B and IMS.
- Detection
- Separate record types with their own keys (ISD document number; bill of entry and port code).
- Resolution
- Matched separately from B2B invoices; never cross-matched.
- Operator sees
- None.
- Logged
- record_type, isd_document, bill_of_entry
- Reference
- CGST Act s.20; GSTN advisory of 30 October 2025.
Suggest, preview, commit, log
Every period, each GSTIN's IMS fills with supplier records. Records left alone are deemed accepted into GSTR-2B, including the ones the company disputes, and the evidence for why anything was accepted lives in spreadsheets.
Principles
- Suggest, never decide: every record carries the engine's suggestion and the reason, taken from reconciliation.
- Filter, preview, then commit: a bulk action shows the credit it moves into or out of GSTR-2B before anything changes.
- The clock is real: the 14th (deemed acceptance) and the GSTR-3B date (freeze) are on screen for the period.
- Reason codes come from a fixed list, so decisions can be reported on and audited.
- Every decision is appended to a hash-chained log.
What success is measured by
- Records left to deemed acceptance that the engine flagged. Zero at each GSTR-2B date
- Share of records decided by accepting the suggestion. Tracked; a falling share means the suggestions need work
- Time to clear a period's inbox per GSTIN. Under half a day at 10,000 records
- Decisions with a reason code and an actor. 100%
Targets are design goals for a pilot, not measured results.
Not built yet
- Maker-checker for bulk actions above a value threshold
- Credit-note reversal amounts (October 2025 IMS change)
- Bills of entry in IMS (30 October 2025 advisory)
- Pushing actions to GSTN through a GSP, with read-back reconciliation
Answers that cannot cite what the sources do not say
- Corpus
Paraphrased, reviewed sources: Act sections, rules, circulars, Council recommendations, GSTN advisories, a judgement, and the author's playbooks. Each links to an official page.
- Retrieval
BM25 with bigram boosts over content, title and reference, plus an exact-reference boost that normalises numbers (207/01/2024 equals 207/1/2024).
- Strict gate
Below a retrieval threshold the desk declines, without calling a model or spending budget.
- Generation
A small model writes 2 to 5 sentences from the retrieved sources only. The question travels as JSON data; the system prompt is static.
- Verification
Every [n] must exist; every section, rule, circular or notification number must appear in a cited source. Failing drafts are withheld.
- Fallback
The grounded extract: the most relevant sentences of the top sources, each cited. Used when the model is off, over budget, late or unverified.
- Confidence
Computed from retrieval strength and verification. The model is told not to state one.
- Evaluation
Twenty golden questions (hotel ITC, Circular 207, GSTR-9C, IMS deemed acceptance, 16(4), Rule 37 and more) run against the deterministic pipeline on every change.
Try it on the research desk.
What runs, and what stands in for a connection
- Matching engine, eligibility rules, deadline clocks and the travel five-way check
- Both benchmarks, recomputed on the server
- E-invoice pre-checks and the IRN hash, in the browser
- Research desk retrieval, verification, and a live model inside a daily budget
- Explanations and supplier emails from a live model, figures checked
- A hash-chained audit log of your own decisions, in your browser
- The tenant and its books: an invented manufacturer with checksum-valid GSTINs
- GSTR-2B and IMS data (production pulls them through a licensed GSP)
- Airline portals, hotel invoices and the travel desk feed
- The Invoice Registration Portal: nothing is registered or signed
- Sign-in, roles and a server-side audit store
From concept to a customer's books
Data in
- GSTR-2B and IMS pulls through a licensed GSP for every GSTIN
- ERP connectors (SAP, Oracle, Tally) for the purchase register and payment status
- Airline-portal and hotel-mailbox invoice capture for travel
Engine
- Amount, date and PAN candidate blocking for re-coded invoice series
- Credit notes, amendments, ISD and bills of entry as first-class records
- Rate master versioned by effective date
Control
- SSO with roles; maker-checker on bulk actions
- Append-only server-side audit log and per-notice evidence export
- IMS actions pushed back through the GSP, reconciled by read-back
Proof
- A pilot on three months of a customer's real GSTR-2B, scored with the same false-match and recall definitions as the benchmark