<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: taxgarden</title>
    <description>The latest articles on DEV Community by taxgarden (@taxgarden_40fc262ae923ad6).</description>
    <link>https://dev.to/taxgarden_40fc262ae923ad6</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3953825%2F5a88567e-bd8c-441e-97c7-fcc4f5bbed6b.png</url>
      <title>DEV Community: taxgarden</title>
      <link>https://dev.to/taxgarden_40fc262ae923ad6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/taxgarden_40fc262ae923ad6"/>
    <language>en</language>
    <item>
      <title>Your Billing Software Probably Gets Tractor Parts Wrong (Here's the Fix)</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Mon, 28 Sep 2026 12:13:56 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/your-billing-software-probably-gets-tractor-parts-wrong-heres-the-fix-16a5</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/your-billing-software-probably-gets-tractor-parts-wrong-heres-the-fix-16a5</guid>
      <description>&lt;p&gt;If you write or maintain billing software for Indian retailers, here's a bug class that quietly over- or under-charges GST: rates that depend on a tag like "for tractor".&lt;/p&gt;

&lt;p&gt;Since 22 September 2025, most vehicle parts, tyres, tubes, batteries, filters and engine oil are 18%. But Schedule I of Notification 9/2025-Central Tax (Rate) puts a named list of tractor parts at 5% (clutch assembly, gear box, brake assembly, radiator, silencer, steering wheel, hydraulics, fuel tank and a few more, S. No. 443 to 454), plus tractor tyres and tubes.&lt;/p&gt;

&lt;p&gt;The trap: a tractor battery, bearing, filter or starter is not on that list. Those sit under their own headings at 18% whatever vehicle they go into. So "is_tractor_part = true" cannot decide the rate. The 5% is a whitelist of named items.&lt;/p&gt;

&lt;p&gt;A small way to model it:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```python FIVE_PERCENT_TRACTOR = { "clutch assembly", "gear box", "brake assembly", "radiator assembly", "silencer assembly", "steering wheel", "hydraulics", "fuel tank", "tractor tyre", "tractor tube", } # extend from Schedule I, S. No. 443-454, 426, 269-273&lt;/p&gt;

&lt;p&gt;def gst_rate(item: str, fits_tractor: bool) -&amp;gt; int: if fits_tractor and item in FIVE_PERCENT_TRACTOR: return 5 return 18&lt;/p&gt;

&lt;p&gt;assert gst_rate("clutch assembly", True) == 5 assert gst_rate("battery", True) == 18 # not on the list assert gst_rate("bearing", True) == 18 assert gst_rate("clutch assembly", False) == 18 ```&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The consequence of getting this wrong is real money at the counter. On a Rs 4,000 clutch assembly, 5% is Rs 200 and 18% is Rs 720, so habit-billing at 18% overcharges the farmer by Rs 520. Billing a tractor battery at 5% under-collects, and the shop owns the shortfall.&lt;/p&gt;

&lt;p&gt;Two practical notes for your item master: keep the HSN and the rate as separate, versioned fields (the rate changed on a date, and old invoices must keep their old rate), and let the shop owner add items to the 5% set explicitly rather than by category.&lt;/p&gt;

&lt;p&gt;The full rate table and the warranty-replacement rules from CBIC circulars are in this &lt;a href="https://taxgarden.in/blog/income-tax-gst-for-auto-spare-parts-tyre-shop-owners-india-ay-2026-27" rel="noopener noreferrer"&gt;GST guide for auto spare parts and tyre shops&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Section 194Q as Code: The Rules Your Purchase Module Probably Ignores</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Fri, 25 Sep 2026 06:51:02 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/section-194q-as-code-the-rules-your-purchase-module-probably-ignores-523b</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/section-194q-as-code-the-rules-your-purchase-module-probably-ignores-523b</guid>
      <description>&lt;p&gt;If you build billing, procurement or ERP software for Indian companies, one tax rule quietly changes how a purchase ledger must behave: Section 194Q, TDS on purchase of goods. Here it is as logic.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;``` def tds_194q(prev_year_turnover, seller_is_resident, seller_purchases_ytd, this_payment): if prev_year_turnover &amp;lt;= 10_00_00_000: return 0&lt;/p&gt;

&lt;p&gt;if not seller_is_resident: return 0 # other sections apply excess = max(0, seller_purchases_ytd + this_payment - 50_00_000) - max(0, seller_purchases_ytd - 50_00_000) return excess * 0.001 # 0.1% if seller has PAN ```&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The rules behind it:&lt;/p&gt;

&lt;p&gt;The buyer's turnover in the preceding financial year must be above Rs 10 crore. FY 2025-26 turnover decides FY 2026-27.&lt;br&gt;
The threshold is per seller, not overall: aggregate purchases from one resident seller above Rs 50 lakh in the year.&lt;br&gt;
TDS applies only to the amount above Rs 50 lakh, at 0.1%. Total purchases of Rs 80 lakh from one seller means tax on Rs 30 lakh, which is Rs 3,000.&lt;br&gt;
If the seller has no PAN, the rate jumps to 5%. Your vendor master needs a PAN field that is actually validated.&lt;br&gt;
Deduction happens at the earlier of credit to the seller's account or payment. Booking an invoice can trigger it before any money moves.&lt;br&gt;
Edge cases worth a ticket: purchase returns, GST shown separately on the invoice, and sellers where a different TDS section already applies. Test those with your finance team, not from a blog, since treatment can change with circulars.&lt;/p&gt;

&lt;p&gt;Missing the deduction has a real cost for your customer: 30% of that purchase expenditure can be disallowed as a business expense under Section 40(a)(ia).&lt;/p&gt;

&lt;p&gt;The section is being consolidated into Section 393 of the Income Tax Act 2025, effective 1 April 2026, so keep the section reference configurable in your reports instead of hard-coded. A fuller explanation of who counts as buyer and how the threshold works is in this &lt;a href="https://taxgarden.in/blog/tds-on-purchase-of-goods-section-194q-393-guide-india-fy-2026-27" rel="noopener noreferrer"&gt;Section 194Q TDS on purchase of goods guide&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Validating GST Invoice Numbers: The 16-Character Rule That Breaks Imports</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Thu, 24 Sep 2026 05:49:12 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/validating-gst-invoice-numbers-the-16-character-rule-that-breaks-imports-42cb</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/validating-gst-invoice-numbers-the-16-character-rule-that-breaks-imports-42cb</guid>
      <description>&lt;p&gt;If you build billing or ERP software for Indian businesses, one small piece of GST law causes a surprising number of rejected uploads: the invoice number format.&lt;/p&gt;

&lt;p&gt;Rule 46 of the CGST Rules says an invoice needs a consecutive serial number of not more than 16 characters, in one or multiple series, using alphabets, numerals, and only hyphen and slash as special characters. That's all. Underscores, spaces and dots are out, and 17 characters is out.&lt;/p&gt;

&lt;p&gt;A plain check:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```python import re INVOICE_NO = re.compile(r"^[A-Za-z0-9/-]{1,16}$")&lt;/p&gt;

&lt;p&gt;def valid_invoice_no(s: str) -&amp;gt; bool: return bool(INVOICE_NO.match(s))&lt;/p&gt;

&lt;p&gt;assert valid_invoice_no("INV/2026-27/00042") assert not valid_invoice_no("INV_2026_27_000042") assert not valid_invoice_no("FY2026-27/INV/0000042") # 21 chars ```&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The classic trap is a financial-year prefix plus a long counter. "FY2026-27/INV/0000042" is a perfectly natural thing to generate and it is over the limit. Decide on a short series prefix early, because changing the numbering scheme mid-year breaks the "consecutive" requirement.&lt;/p&gt;

&lt;p&gt;A few other constraints worth encoding while you're there:&lt;/p&gt;

&lt;p&gt;B2C invoice to an unregistered customer of Rs 50,000 or more: customer name, address, delivery address, state name and code are mandatory. Below that, they're optional.&lt;br&gt;
HSN: 4 digits on B2B invoices for businesses up to Rs 5 crore turnover in the previous year, 6 digits above that.&lt;br&gt;
Sales below Rs 200 to an unregistered customer who doesn't ask for an invoice can be covered by a consolidated invoice at the end of the day.&lt;br&gt;
E-invoices don't need a signature, because the IRP signs them and adds the QR code. Ordinary PDF invoices do.&lt;br&gt;
Validation at entry time is much cheaper than fixing a GSTR-1 after the fact. The full field list and edge cases are in this &lt;a href="https://taxgarden.in/blog/gst-invoice-rules-format-mandatory-fields-e-invoice-india-2026" rel="noopener noreferrer"&gt;GST invoice format and mandatory fields reference&lt;/a&gt;, which I keep open when writing tests.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>E-Invoicing Under Rs 5 Crore , What Your GST Integration Needs to Handle</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Wed, 23 Sep 2026 07:22:35 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/e-invoicing-under-rs-5-crore-what-your-gst-integration-needs-to-handle-4efm</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/e-invoicing-under-rs-5-crore-what-your-gst-integration-needs-to-handle-4efm</guid>
      <description>&lt;p&gt;April 2026 brought e-invoicing mandatory for businesses with Rs 5+ crore aggregate turnover. If you're building billing, ERP, or accounting software for Indian SMBs, here's the integration checklist.&lt;/p&gt;

&lt;p&gt;What changed in April 2026&lt;br&gt;
Threshold dropped from Rs 10 crore to Rs 5 crore. Approximately 150,000 more taxpayers were brought in. Your integration now needs to handle this cohort: smaller transaction volumes, less IT capability, more manual exception handling.&lt;/p&gt;

&lt;p&gt;IRP flow (quick reference)&lt;br&gt;
Generate invoice in your system with all mandatory fields (Seller/Buyer GSTIN, invoice number, date, HSN code, taxable value, tax amounts)&lt;br&gt;
POST to IRP (Invoice Registration Portal) , NIC operates the primary IRP; 5 private IRPs also exist&lt;br&gt;
IRP returns IRN (Invoice Reference Number , 64-character hash), QR code, and digital signature&lt;br&gt;
Print/embed IRN + QR code on invoice before delivery&lt;br&gt;
Mandatory fields that trips sub-5Cr integrations&lt;br&gt;
BillToPinCode: required even for services, set 000000 if not applicable&lt;br&gt;
SupTyp: supply type (B2B, SEZWP, SEZWOP, EXPWP, EXPWOP, DEXP) , most SMBs only ever use B2B&lt;br&gt;
DocTyp: INV, CRN, DBN , credit notes need IRN too&lt;br&gt;
IgstAmt vs CgstAmt+SgstAmt: must match supply place vs seller state, not editable post-IRN&lt;br&gt;
Cancellation window: 24 hours only&lt;br&gt;
IRN can be cancelled within 24 hours of generation on the IRP. After 24 hours, you can't cancel , you must issue a credit note. Your integration should surface the 24-hour window clearly. Most SMB-facing UIs don't.&lt;/p&gt;

&lt;p&gt;Exemptions still in place&lt;br&gt;
E-invoicing does NOT apply to: banks, insurance companies, NBFCs, GTA (goods transport agencies), passenger transport, multiplex cinema operators, Special Economic Zones, and transactions to unregistered buyers (B2C). Build a isEInvoiceRequired() check in your pre-generation layer.&lt;/p&gt;

&lt;p&gt;Testing environment&lt;br&gt;
Sandbox IRP: einvoice1.gst.gov.in (prod) has a test API. Always test with sandbox credentials before production. IRN generated in test does not appear in GSTR-1.&lt;/p&gt;

&lt;p&gt;Full implementation guide for Indian e-invoicing: taxgarden.in/blog/gst-e-invoice-einvoicing-irp-portal-guide-india-2026&lt;/p&gt;

</description>
      <category>gst</category>
      <category>india</category>
      <category>api</category>
      <category>fintech</category>
    </item>
    <item>
      <title>GSTR-1 vs GSTR-3B Mismatch in 2026 , A Reconciliation Reference</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Tue, 22 Sep 2026 09:49:06 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/gstr-1-vs-gstr-3b-mismatch-in-2026-a-reconciliation-reference-amb</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/gstr-1-vs-gstr-3b-mismatch-in-2026-a-reconciliation-reference-amb</guid>
      <description>&lt;p&gt;If you build anything touching India's GST filings, the GSTR-1 vs GSTR-3B mismatch is what generates most automated notices. Here is a structured reference.&lt;/p&gt;

&lt;p&gt;The filings&lt;br&gt;
GSTR-1&lt;br&gt;
Outward supplies. Every invoice issued, filed by the 11th of next month.&lt;br&gt;
GSTR-3B&lt;br&gt;
Tax summary and payment, filed by 20th/22nd/24th of next month.&lt;br&gt;
They should agree. Most mismatches are timing: invoice in GSTR-1 for August, taxed in September's GSTR-3B because it was future-dated.&lt;/p&gt;

&lt;p&gt;Three mismatches the portal auto-detects (2026)&lt;br&gt;
Mismatch 1 , GSTR-1 liability &amp;gt; GSTR-3B payment:&lt;/p&gt;

&lt;p&gt;Notice: DRC-01B (Rule 88C). Deadline: 7 days. Response: pay via DRC-03 or explain in Part B. No response = next GSTR-1 blocked.&lt;/p&gt;

&lt;p&gt;Mismatch 2 , GSTR-3B ITC &amp;gt; GSTR-2B ITC:&lt;/p&gt;

&lt;p&gt;Notice: DRC-01C (Rule 88D). Deadline: 7 days. Response: reverse excess ITC via DRC-03 or explain in Part B. No response = GSTR-1/IFF blocked.&lt;/p&gt;

&lt;p&gt;Mismatch 3 , E-way bill vs GSTR-1:&lt;/p&gt;

&lt;p&gt;Trigger: Movement without invoices pattern. Notice: ASMT-10 (30 days to reply via ASMT-11).&lt;/p&gt;

&lt;p&gt;Zero Mismatch Policy (April 1, 2026)&lt;br&gt;
Portal flags all differences immediately on filing. No grace thresholds for large taxpayers. The moment GSTR-1 and GSTR-3B diverge beyond zero, the flag fires.&lt;/p&gt;

&lt;p&gt;Reconciliation sequence&lt;br&gt;
Books → GSTR-1 → GSTR-3B Table 3.1(a) → GSTR-2B → E-invoice → E-way bill&lt;/p&gt;

&lt;p&gt;Invoice Management System (IMS) , mandatory 2026&lt;br&gt;
IMS shows supplier invoices as uploaded. Accept, reject, or pend each. Only accepted invoices flow into GSTR-2B for ITC. Supplier uploads an invoice on the 10th but you don't action it before the cut-off? ITC deferred to next month's GSTR-2B.&lt;/p&gt;

&lt;p&gt;Building alerts for GST integrations&lt;br&gt;
DRC-01B/C notices appear on the GST portal after each return filing date (11th, 20th, 22nd, 24th). 7-day response deadline. Build alerts for Day 1 and Day 5. Filing blockage on Day 8 is a serious compliance event.&lt;/p&gt;

&lt;p&gt;Full reconciliation guide: taxgarden.in/blog/gstr-1-vs-gstr-3b-mismatch-reconciliation-guide-2026&lt;/p&gt;

</description>
      <category>gst</category>
      <category>india</category>
      <category>finance</category>
      <category>compliance</category>
    </item>
    <item>
      <title>UPI MDR From October 15, 2026: What Platform Developers and Finance Teams Need to Know</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Fri, 18 Sep 2026 06:40:49 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/upi-mdr-from-october-15-2026-what-platform-developers-and-finance-teams-need-to-know-po7</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/upi-mdr-from-october-15-2026-what-platform-developers-and-finance-teams-need-to-know-po7</guid>
      <description>&lt;p&gt;If you build fintech products, handle merchant payouts, or run a platform that processes UPI payments in India, the UPI MDR framework that kicks in October 15, 2026 affects your integration and your GST accounting.&lt;/p&gt;

&lt;p&gt;What Changed&lt;br&gt;
A 0.4% Merchant Discount Rate now applies to P2M (person-to-merchant) UPI transactions above Rs 2,000, capped at Rs 300 per transaction. The Ministry of Finance announced this September 15, 2026.&lt;/p&gt;

&lt;p&gt;Key implementation points:&lt;/p&gt;

&lt;p&gt;P2P transfers remain free. Your user-to-user transfer flows are unaffected.&lt;br&gt;
P2M below Rs 2,000 remains free. No logic changes for small transactions.&lt;br&gt;
Small merchants (P2PM category) under Rs 1 lakh/month stay at zero MDR. If you have a "small merchant" tier in your product, that segment is protected.&lt;br&gt;
MDR is merchant-side only. There is no customer-facing charge to implement. Do not add a surcharge UI.&lt;br&gt;
The GST Integration Point&lt;br&gt;
The MDR is treated as a financial service. 18% GST applies on the MDR amount (not the transaction value).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;transaction = Rs 5,000 MDR = 0.4% * 5,000 = Rs 20 GST on MDR = 18% * 20 = Rs 3.60 Total fee to merchant = Rs 23.60&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For GST-registered merchants, this Rs 3.60 is ITC-eligible , but only if the merchant's GSTIN is linked in the payment aggregator's system so the charge flows to GSTR-2B.&lt;/p&gt;

&lt;p&gt;API/integration checklist before Oct 15:&lt;/p&gt;

&lt;p&gt;[ ] Confirm with your payment gateway that GSTIN registration is live on the merchant account&lt;br&gt;
[ ] Verify MDR settlement line items will appear separately in payout reports (for GST reconciliation)&lt;br&gt;
[ ] If you aggregate payments for sub-merchants, confirm each sub-merchant's GSTIN mapping&lt;br&gt;
[ ] Update your invoicing module if you generate MDR-related settlement receipts to merchants&lt;br&gt;
Special Categories&lt;br&gt;
Railways, telecom, insurance, fuel and agricultural inputs get a flat Rs 5 per transaction instead of 0.4%. Capital market transactions (mutual funds, securities): 0.02% capped at Rs 300.&lt;/p&gt;

&lt;p&gt;For these categories your product may need routing logic if you serve multiple merchant verticals.&lt;/p&gt;

&lt;p&gt;Full breakdown: &lt;a href="https://taxgarden.in/blog/upi-mdr-charges-above-2000-gst-itc-october-2026" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/upi-mdr-charges-above-2000-gst-itc-october-2026&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ITR-2 vs ITR-3 vs ITR-4: A Developer's Guide to Picking the Right Form</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Thu, 17 Sep 2026 07:00:00 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/itr-2-vs-itr-3-vs-itr-4-a-developers-guide-to-picking-the-right-form-4383</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/itr-2-vs-itr-3-vs-itr-4-a-developers-guide-to-picking-the-right-form-4383</guid>
      <description>&lt;p&gt;Filing the wrong ITR form is one of the most common mistakes among Indian freelancers and developers. The department processes it, but it counts as a defective return, and you'll get a notice asking you to refile.&lt;/p&gt;

&lt;p&gt;ITR-4 (Sugam): Freelancers Under Presumptive Scheme&lt;br&gt;
If you're a freelancer, consultant, or developer with professional income &amp;lt; Rs 75 lakh (FY 2026-27 limit under Section 44ADA), no capital gains, and no more than one house property, file ITR-4 and declare 50% of gross receipts as profit. No books required.&lt;/p&gt;

&lt;p&gt;When it breaks: Foreign assets or income flagged as business income from a partnership takes you out of ITR-4.&lt;/p&gt;

&lt;p&gt;ITR-3: Full Business/Profession Books&lt;br&gt;
Opted out of presumptive taxation? File ITR-3 with full P&amp;amp;L and balance sheet. Also mandatory for F&amp;amp;O/intraday trading, multiple business heads, or audit requirement (receipts &amp;gt; Rs 75L for professionals).&lt;/p&gt;

&lt;p&gt;ITR-2: Capital Gains, No Business Income&lt;br&gt;
Salaried developer who sold stocks, mutual funds, or crypto? Has multiple house properties or foreign assets? ITR-2 is your form.&lt;/p&gt;

&lt;p&gt;The Most Common Wrong Filing&lt;br&gt;
Salaried developer who also freelanced and sold ELSS units. They think it's ITR-2 (capital gains). It's actually ITR-3 (because freelance = business/profession, overrides ITR-2).&lt;/p&gt;

&lt;p&gt;Full guide with AY 2026-27 examples: &lt;a href="https://taxgarden.in/blog/itr-2-vs-itr-3-vs-itr-4-comparison-guide-2026" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/itr-2-vs-itr-3-vs-itr-4-comparison-guide-2026&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>TDS Section Selector: 194C vs 194J vs 194Q vs 194H, The Definitive Decision Tree</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Wed, 16 Sep 2026 06:28:04 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/tds-section-selector-194c-vs-194j-vs-194q-vs-194h-the-definitive-decision-tree-4c45</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/tds-section-selector-194c-vs-194j-vs-194q-vs-194h-the-definitive-decision-tree-4c45</guid>
      <description>&lt;p&gt;If you're building invoicing software, payroll automation, or a payment platform for Indian businesses, TDS section selection is one of the trickiest parts to get right. Wrong section = wrong rate = tax department notice for your client.&lt;/p&gt;

&lt;p&gt;Here's the decision tree our CA team uses:&lt;/p&gt;

&lt;p&gt;STEP 1: Is the payment for goods or services?&lt;/p&gt;

&lt;p&gt;Goods only: Section 194Q applies if the buyer's turnover &amp;gt; Rs 10 crore. Rate: 0.1% on purchases above Rs 50 lakh/year per vendor. If buyer's turnover is lower, no TDS required under this section.&lt;/p&gt;

&lt;p&gt;Services: Continue to Step 2.&lt;/p&gt;

&lt;p&gt;STEP 2: Is it a contract for work/labour OR a professional/technical service?&lt;/p&gt;

&lt;p&gt;Contract for work (manufacturing, construction, catering, transport, housekeeping): Section 194C. Rate: 1% for individuals/HUF, 2% for companies/firms. Threshold: Rs 30,000 per contract or Rs 1 lakh aggregate per year.&lt;/p&gt;

&lt;p&gt;Professional services (legal, medical, engineering, accounting) OR technical services (IT consulting, software development, maintenance): Section 194J. Rate: 10% (2% for technical services since Budget 2020). Threshold: Rs 30,000 per year per vendor.&lt;/p&gt;

&lt;p&gt;STEP 3: Is it a commission/brokerage payment?&lt;/p&gt;

&lt;p&gt;Section 194H. Rate: 5%. Threshold: Rs 15,000/year.&lt;/p&gt;

&lt;p&gt;The overlap zone (and how courts have ruled):&lt;/p&gt;

&lt;p&gt;The 194C vs 194J distinction is litigated constantly. Key principles:&lt;/p&gt;

&lt;p&gt;If the output is a specific result (a designed building, a software feature), 194J applies.&lt;br&gt;
If the output is labour/effort (construction workers, drivers), 194C applies.&lt;br&gt;
An IT outsourcing contract where the vendor provides developers? Courts have gone both ways. Conservative approach: 194J.&lt;br&gt;
Section 393 codes (FY 2026-27):&lt;/p&gt;

&lt;p&gt;Budget 2025 introduced new section codes. When filing TDS returns, use the correct 393 sub-code for each nature of payment. Refer to TRACES for updated codes, old section codes still work for historical corrections.&lt;/p&gt;

&lt;p&gt;Implementation note for payroll/invoicing systems:&lt;/p&gt;

&lt;p&gt;Store vendor category at onboarding. Map: contractor → 194C, professional → 194J, goods_vendor → 194Q, commission_agent → 194H. Auto-select based on vendor type, override manually for edge cases.&lt;/p&gt;

&lt;p&gt;Full TDS section reference (with threshold chart): &lt;a href="https://taxgarden.in/blog/which-tds-section-applies-to-your-payment-194c-vs-194j-vs-194q-vs-194h" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/which-tds-section-applies-to-your-payment-194c-vs-194j-vs-194q-vs-194h&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  india #tax #tds #fintech #payroll
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Section 44AD for Tradespeople in India: Why Electricians, Bakers, and Jewellers Use Different Presumptive Rules</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Tue, 15 Sep 2026 11:50:43 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/section-44ad-for-tradespeople-in-india-why-electricians-bakers-and-jewellers-use-different-2bp7</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/section-44ad-for-tradespeople-in-india-why-electricians-bakers-and-jewellers-use-different-2bp7</guid>
      <description>&lt;p&gt;Three new blogs published at Tax Garden this week cover income tax for home bakers, electricians/plumbers, and jewellers. While writing them, one pattern kept showing up: people in these trades consistently confuse Section 44AD and Section 44ADA, or try to apply whichever one gives them lower tax, which is not how it works.&lt;/p&gt;

&lt;p&gt;Section 44AD vs Section 44ADA&lt;br&gt;
Section 44AD, for businesses (retail, manufacturing, trading, contract work)&lt;/p&gt;

&lt;p&gt;Turnover limit: Rs 2 crore (cash-heavy) or Rs 3 crore (if 95%+ receipts are non-cash)&lt;br&gt;
Deemed profit: 8% of cash receipts, 6% of digital receipts&lt;br&gt;
Section 44ADA, for specified professions only&lt;/p&gt;

&lt;p&gt;Professions: legal, medical, engineering, architecture, accountancy, technical consultancy, interior decoration, IT, company secretary, authorised representative, CBDT-notified film artists&lt;br&gt;
Deemed profit: 50% of gross receipts&lt;br&gt;
Limit: Rs 75 lakh gross receipts&lt;br&gt;
Who uses which?&lt;br&gt;
Home bakers and bakery owners, Section 44AD Bakery is manufacturing/retail, not a profession. Code 01099 or 09002.&lt;/p&gt;

&lt;p&gt;Electricians and plumbers, Section 44AD Works contract is business activity. Not "engineering profession" in 44ADA sense. Code 06003.&lt;/p&gt;

&lt;p&gt;Jewellers and goldsmiths, Section 44AD Retail trade and manufacturing. Code 02002.&lt;/p&gt;

&lt;p&gt;The common mistake&lt;br&gt;
People see "engineering" in the 44ADA list and think any technically skilled work qualifies. It does not. 44ADA engineering means consulting firms, not electricians doing wiring jobs.&lt;/p&gt;

&lt;p&gt;Using 44ADA when 44AD applies results in a higher deemed profit rate (50% vs 6-8%), harming the taxpayer.&lt;/p&gt;

&lt;p&gt;Practical numbers&lt;br&gt;
Electrician, Rs 15L turnover, 80% digital:&lt;/p&gt;

&lt;p&gt;44AD deemed profit: Rs 96,000 taxable income, zero tax under new regime&lt;br&gt;
Jeweller, Rs 50L turnover, 70% digital:&lt;/p&gt;

&lt;p&gt;44AD deemed profit: Rs 3.3L taxable income, 5% slab on small amount&lt;br&gt;
Full guides:&lt;/p&gt;

&lt;p&gt;Bakery: &lt;a href="https://taxgarden.in/blog/income-tax-for-bakery-owners-home-bakers-india-ay-2026-27" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/income-tax-for-bakery-owners-home-bakers-india-ay-2026-27&lt;/a&gt;&lt;br&gt;
Electricians: &lt;a href="https://taxgarden.in/blog/income-tax-for-electricians-plumbers-india-ay-2026-27" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/income-tax-for-electricians-plumbers-india-ay-2026-27&lt;/a&gt;&lt;br&gt;
Jewellers: &lt;a href="https://taxgarden.in/blog/income-tax-for-jewellers-goldsmiths-india-ay-2026-27" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/income-tax-for-jewellers-goldsmiths-india-ay-2026-27&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Python Function to Select Correct ITR Form (AY 2026-27)</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Thu, 10 Sep 2026 05:22:35 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/python-function-to-select-correct-itr-form-ay-2026-27-5936</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/python-function-to-select-correct-itr-form-ay-2026-27-5936</guid>
      <description>&lt;p&gt;Filing the wrong ITR form is one of the most common compliance errors for self-employed developers. Here's a deterministic function that returns the correct form given your income sources:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```python def get_itr_form(&lt;/p&gt;

&lt;p&gt;has_salary&lt;br&gt;
bool = False,&lt;br&gt;
has_capital_gains&lt;br&gt;
bool = False,&lt;br&gt;
has_business_income&lt;br&gt;
bool = False,&lt;br&gt;
is_presumptive&lt;br&gt;
bool = False, # 44AD/44ADA/44AE&lt;br&gt;
foreign_assets_or_income&lt;br&gt;
bool = False,&lt;br&gt;
is_company_or_llp&lt;br&gt;
bool = False,&lt;br&gt;
is_director_or_unlisted_equity&lt;br&gt;
bool = False,&lt;br&gt;
total_income_above_50L&lt;br&gt;
bool = False,&lt;br&gt;
agricultural_income_above_5k&lt;br&gt;
bool = False,&lt;br&gt;
) -&amp;gt; str: """Returns correct ITR form for AY 2026-27.""" if is_company_or_llp: return 'ITR-6'&lt;/p&gt;

&lt;p&gt;if foreign_assets_or_income or is_director_or_unlisted_equity: if has_business_income: return 'ITR-3' return 'ITR-2'&lt;/p&gt;

&lt;p&gt;if has_business_income: if is_presumptive: return 'ITR-4' # 44AD/44ADA if income &amp;lt; 3Cr/75L return 'ITR-3'&lt;/p&gt;

&lt;p&gt;if has_capital_gains: return 'ITR-2'&lt;/p&gt;

&lt;p&gt;if total_income_above_50L or agricultural_income_above_5k: return 'ITR-2'&lt;/p&gt;

&lt;p&gt;return 'ITR-1'&lt;/p&gt;

&lt;h1&gt;
  
  
  Examples print(get_itr_form(has_salary=True)) # ITR-1 print(get_itr_form(has_salary=True, has_capital_gains=True)) # ITR-2 print(get_itr_form(has_business_income=True, is_presumptive=True)) # ITR-4 print(get_itr_form(has_business_income=True)) # ITR-3 ```
&lt;/h1&gt;



&lt;p&gt;Key edge cases AY 2026-27:&lt;/p&gt;

&lt;p&gt;LTCG on listed shares (112A) triggers ITR-2, NOT ITR-1 even if otherwise salary-only&lt;br&gt;
Freelancers under 44ADA (professions) use ITR-4 if income under Rs 75 lakh&lt;br&gt;
Crypto/VDA income: many file ITR-2 to be safe&lt;br&gt;
Director in private company: mandatory ITR-2 even with only salary&lt;br&gt;
Form deadlines AY 2026-27:&lt;/p&gt;

&lt;p&gt;ITR-1/2/4 (non-audit): July 31, 2026&lt;br&gt;
ITR-3 with tax audit: October 31, 2026&lt;br&gt;
ITR-6 (companies): November 30, 2026&lt;br&gt;
Full ITR form guide: &lt;a href="https://taxgarden.in/blog/which-itr-form-ay-2026-27-key-changes" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/which-itr-form-ay-2026-27-key-changes&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  python #tax #india #incometax #ITR
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Python Function to Validate GSTIN Checksum: The Algorithm Behind India's 15-Digit GST Number</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Tue, 08 Sep 2026 05:16:17 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/python-function-to-validate-gstin-checksum-the-algorithm-behind-indias-15-digit-gst-number-5f9c</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/python-function-to-validate-gstin-checksum-the-algorithm-behind-indias-15-digit-gst-number-5f9c</guid>
      <description>&lt;p&gt;Every Indian GST registration number (GSTIN) has a checksum in the 15th character. For invoicing software, ERP integrations, or vendor onboarding tools, validating before save prevents downstream pain.&lt;/p&gt;

&lt;p&gt;GSTIN STRUCTURE&lt;/p&gt;

&lt;p&gt;Position 1-2&lt;br&gt;
State code (01-38)&lt;br&gt;
Position 3-12&lt;br&gt;
PAN of the entity&lt;br&gt;
Position 13&lt;br&gt;
Entity number (1-9 or A-Z)&lt;br&gt;
Position 14&lt;br&gt;
Always 'Z'&lt;br&gt;
Position 15&lt;br&gt;
Checksum&lt;br&gt;
THE ALGORITHM (modified Luhn with custom 36-character set):&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```python def validate_gstin(gstin: str) -&amp;gt; dict: import re CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" gstin = gstin.strip().upper()&lt;/p&gt;

&lt;p&gt;pattern = r'^[0-3][0-9][A-Z]{5}[0-9]{4}[A-Z][1-9A-Z]Z[0-9A-Z]$' if not re.match(pattern, gstin): return {"valid": False, "error": "GSTIN format invalid"}&lt;/p&gt;

&lt;p&gt;state_code = int(gstin[:2]) if not (1 &amp;lt;= state_code &amp;lt;= 38): return {"valid": False, "error": f"Invalid state code: {gstin[:2]}"}&lt;/p&gt;

&lt;p&gt;def calculate_checksum(g14: str) -&amp;gt; str: total, factor = 0, 2 for char in reversed(g14): code = CHARS.index(char) addend = factor * code factor = 1 if factor == 2 else 2 addend = (addend // len(CHARS)) + (addend % len(CHARS)) total += addend return CHARS[(len(CHARS) - total % len(CHARS)) % len(CHARS)]&lt;/p&gt;

&lt;p&gt;expected = calculate_checksum(gstin[:14]) if expected != gstin[14]: return {"valid": False, "error": f"Checksum mismatch: expected {expected}, got {gstin[14]}"}&lt;/p&gt;

&lt;p&gt;return {"valid": True, "state_code": gstin[:2], "pan": gstin[2:12]}&lt;/p&gt;

&lt;h1&gt;
  
  
  Test for g in ["29AAACB2230M1ZP", "27AADCB2230M1ZA", "99AAACB2230M1ZP"]: print(g, validate_gstin(g)) ```
&lt;/h1&gt;



&lt;p&gt;COMMON GOTCHAS&lt;/p&gt;

&lt;p&gt;Always normalize to uppercase first&lt;br&gt;
O vs 0 confusion from OCR on scanned invoices&lt;br&gt;
Position 14 is always 'Z'; foreign OIDAR entities differ&lt;br&gt;
State 37 = current AP, 28 = legacy AP (both valid)&lt;br&gt;
For GST registration process and all state codes: &lt;a href="https://taxgarden.in/blog/gst-registration-process-india-2026" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/gst-registration-process-india-2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;#python #gst #india #fintech #validation&lt;/p&gt;

</description>
    </item>
    <item>
      <title>TDS Compliance with Node.js: Calling TRACES API to Verify Deduction Certificates</title>
      <dc:creator>taxgarden</dc:creator>
      <pubDate>Fri, 04 Sep 2026 06:45:49 +0000</pubDate>
      <link>https://dev.to/taxgarden_40fc262ae923ad6/tds-compliance-with-nodejs-calling-traces-api-to-verify-deduction-certificates-1j0d</link>
      <guid>https://dev.to/taxgarden_40fc262ae923ad6/tds-compliance-with-nodejs-calling-traces-api-to-verify-deduction-certificates-1j0d</guid>
      <description>&lt;p&gt;TDS compliance is not just an accounting problem , it is a data problem. Every quarter, finance teams reconcile 26AS with vendor invoices manually. It takes hours and misses errors.&lt;/p&gt;

&lt;p&gt;Here is a basic Node.js fetch call to check a TAN holder's deduction summary via the TRACES (TDS Reconciliation Analysis and Correction Enabling System) portal API:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```js const axios = require("axios");&lt;/p&gt;

&lt;p&gt;async function getTDSSummary(tan, fy) { const response = await axios.post( "&lt;a href="https://www.tdscpc.gov.in/app/api/tdssummary" rel="noopener noreferrer"&gt;https://www.tdscpc.gov.in/app/api/tdssummary&lt;/a&gt;", { tan, financialYear: fy }, {&lt;/p&gt;

&lt;p&gt;headers: { "Content-Type": "application/json",&lt;/p&gt;

&lt;p&gt;Authorization: Bearer ${process.env.TRACES_TOKEN}, }, } ); return response.data; } ```&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;TRACES requires authentication via DSC or Aadhaar OTP. The API returns quarter-wise deduction data including:&lt;/p&gt;

&lt;p&gt;Total TDS deducted&lt;br&gt;
Total TDS deposited&lt;br&gt;
Challan mapping status&lt;br&gt;
Number of deductees per quarter&lt;br&gt;
Match deducted vs deposited: any delta means a short-deduction notice risk under Section 201.&lt;/p&gt;

&lt;p&gt;For a complete TDS rate reference by payment type (194C, 194J, 194Q, etc.), see: &lt;a href="https://taxgarden.in/blog/tds-rate-chart-2026-to-2027" rel="noopener noreferrer"&gt;https://taxgarden.in/blog/tds-rate-chart-2026-to-2027&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quality gate: Remove link mentally. Still useful? YES , gives real code + explains what TRACES API returns and why gaps matter.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
