Archived, see #23
An unofficial package help developers to implement ZATCA (Fatoora) QR code easily which required for e-invoicing
Table of Contents
- Python >= 3.8
$ pip3 install fatoora
$ git clone https://github.com/TheAwiteb/fatoora/
$ cd fatoora
$ python3 setup.py install
Here the features of the variables of the Fatoora class will be explained
- Seller’s name.
- Seller’ tax number, which is the VAT registration number.
- Invoice date, which is the timestamp of the electronic invoice.
- Invoice total amount, which is the electronic invoice total with VAT.
- Tax amount, which is the VAT total.
Name | Feature | How will it be in the tag | How will it be when you call |
---|---|---|---|
seller_name | saved directly without processing | No changes will be made to it | No changes will be made to it |
tax_number | receives the tax number as a text and a number as well, and save it as string | number as string | number as string |
invoice_date | receives the date as timestamp or datetime object, or string ISO 8601 Zulu format | string of date as ISO 8601 Zulu format | datetime object |
total_amount | receives the tax number as a text and a number as well | It is of type str as float | It is of type float |
tax_amount | same total_amount Accept None value to get VAT auto from total_amount |
same total_amount | same total_amount |
Note: The
tax_amount
is rounded to the nearest two decimal places, if it is greater than that ( iftax_amount
==15
its will be15.0
)
Note: If you set
tax_amount
toNone
thevat_rates
==0.15
you can change it inFatoora
object
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891, # or "1234567891"
invoice_date=1635872693.3186214, # timestamp or datetime object, or string ISO 8601 Zulu format
total_amount=100, # or 100.0, 100.00, "100.0", "100.00"
tax_amount=15, # or 15.0, 15.00, "15.0", "15.00"
)
print(fatoora_obj.base64)
# AQZBd2l0ZWICCjEyMzQ1Njc4OTEDFDIwMjEtMTEtMDJUMTc6MDQ6NTNaBAUxMDAuMAUEMTUuMA==
You can render the tags as QR code image easily
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=100,
tax_amount=15,
)
fatoora_obj.qrcode("qr_code.png")
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=100,
tax_amount=15,
qrcode_url="https://example.com"
)
fatoora_obj.qrcode("qr_code_with_url.png")
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=100,
tax_amount=15,
)
print(fatoora_obj.hash)
# 20b8ddb6ed9cb98be3d8535a1f4f28e35888842c1b0aed0e90c3e7fb51080dd9
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=100,
tax_amount=15,
)
fatoora_obj.qrcode("qr_code.png")
print(Fatoora.read_qrcode("qr_code.png", dct=True))
# {'seller_name': 'Awiteb', 'tax_number': '1234567891', 'invoice_date': '2021-11-02T17:04:53Z', 'total_amount': '100.0', 'tax_amount': '15.0'}
print(Fatoora.read_qrcode("qr_code.png", dct=False))
# AQZBd2l0ZWICCjEyMzQ1Njc4OTEDFDIwMjEtMTEtMDJUMTc6MDQ6NTNaBAUxMDAuMAUEMTUuMA==
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=100,
tax_amount=15,
)
print(fatoora_obj.invoice_date.year)
# 2021
print(fatoora_obj.invoice_date.isoformat())
# 2021-11-02T17:04:53
print(fatoora_obj.invoice_date.timestamp())
# 1635861893.0
print(fatoora_obj.json())
# '{"seller_name": "Awiteb", "tax_number": "1234567891", "invoice_date": "2021-11-02T17:04:53Z", "total_amount": "100.0", "tax_amount": "15.0"}'
print(fatoora_obj.dict())
# {'seller_name': 'Awiteb', 'tax_number': '1234567891', 'invoice_date': '2021-11-02T17:04:53Z', 'total_amount': '100.0', 'tax_amount': '15.0'}
# Use class to get fatoora details by base64
print(Fatoora.base2dict(fatoora_obj.base64))
# {'seller_name': 'Awiteb', 'tax_number': '1234567891', 'invoice_date': '2021-11-02T17:04:53Z', 'total_amount': '100.0', 'tax_amount': '15.0'}
import fatoora
print(fatoora.is_valid_iso8601_zulu_format("invalid date"))
# False
print(fatoora.is_valid_iso8601_zulu_format("2021-11-02T17:04:53Z"))
# True
Question, feature request, discuss about fatoora here
You can report a bug from here
If you discover any security related issues.
Currency | Address |
---|---|
Binance BNB BEP20 | 0xD89c146B03B72191be91064D313610981dCAF6d4 |
USD Coin USDC BEP20 | 0xD89c146B03B72191be91064D313610981dCAF6d4 |
Bitcoin BTC | bc1q0ltmqmsc4qs740ssyf9k9jq99nwxtqu8aupmdj |
Bitcoin Cash BCH | qrpm6zyte3d4z2u9r24l04m3havc2wd9vgqlz8sjgr |
The MIT License (MIT). Please see License File for more information.