@zenuinebit/gstr-export
v0.1.0
Published
Turns a gst-report summary into GSTR-1 style JSON (offline-tool layout).
Readme
@zenuinebit/gstr-export
Turns a @zenuinebit/gst-report summary into GSTR-1 style JSON.
Check before you file. This follows the GST offline-tool layout as commonly documented: sections
b2b,b2cl,b2cs,cdnr,hsn, amounts in rupees, dates asDD-MM-YYYY. The portal changes its schema from time to time, and some sections are not covered (see below). Validate the file with the official offline tool or the portal before filing, and treat the result as plain data you can adjust. It does not replace your accountant.
import { generateReport } from "@zenuinebit/gst-report";
import { toGstr1, toGstr1Json } from "@zenuinebit/gstr-export";
const report = generateReport(invoices, { supplier: "27AAPFU0939F1ZV" });
const json = toGstr1(report, {
gstin: "27AAPFU0939F1ZV",
period: { month: 4, year: 2025 }, // -> fp "042025"
grossTurnover: 12_345_600, // previous year, minor units (optional)
hsn: { "0902": { desc: "Tea", uqc: "KGS" } }, // description and unit per HSN (unit defaults to NOS)
});
await fs.writeFile("GSTR1_042025.json", toGstr1Json(report, { gstin, period }));What goes where
b2b: invoices to registered buyers, grouped by their GSTIN. Each invoice lists one item per tax rate.cdnr: credit notes to registered buyers, sent as positive notes (ntty: "C").b2cl: large inter-state consumer invoices, only when you setb2clThresholdin the report.b2cs: other consumer sales added up by state and rate.INTRArows carrycamtandsamt,INTERrows carryiamt.hsn: quantity and tax per HSN code and rate.- Amounts are converted from minor units to rupees with two decimals. Dates become
DD-MM-YYYY.
Not included: exports and SEZ, nil-rated and exempt supplies, advances, cess, amendments, credit notes to consumers (they stay as negative rows in b2cs), e-invoice details, reverse-charge invoices, and the HSN B2B/B2C split used by newer portal versions.
