A python client library for the hungarian Online Invoice System API
Project description
ois_api_client
Online Invoice System API Client
API Version: 2.0
The library is under active development!
What is it?
ois_api_client is a python client for the hungarian, offical Online Invoice System public API. You can find the API documentation here:
https://onlineszamla.nav.gov.hu/dokumentaciok
Implemented API requests:
- query_invoice_digest
- query_invoice_data
- token_exchange
Where to get it
# PyPI
pip install ois_api_client
License
Usage
- Build up your client
import ois_api_client as ois
from datetime import datetime, timezone
client = ois.Client(
uri='https://api-test.onlineszamla.nav.gov.hu/invoiceService/v2',
signature_key='your_signature_key',
replacement_key='youre_replacement_key',
password='your_password'
)
- Build up general parameters for each request
user = ois.UserHeader(
login='your_login',
tax_number='your_taxnumbers_first_8_character')
software = ois.Software(
id='your_software_id',
name='your_software_name',
operation='LOCAL_SOFTWARE',
main_version='your_software_version',
dev_name='your_software_dev_name',
dev_contact='your_software_dev_email',
dev_country_code='your_software_dev_country_code',
dev_tax_number='yourc_software_dev_tax_number')
- List invoices
digest_request = ois.QueryInvoiceDigestRequest(
header=ois.BasicHeader(
request_id='your_generated_unique_request_id',
timestamp=datetime.now().astimezone(tz=timezone.utc)),
user=user,
software=software,
page=1,
invoice_direction=ois.InvoiceDirection.INBOUND,
invoice_query_params=ois.InvoiceQueryParams(
# mandatory_query_params=ois.MandatoryQueryParams(
# parameter=ois.MandatoryQueryParams.OriginalInvoiceNumber(
# original_invoice_number='12345678/2020'
# )),
# mandatory_query_params=ois.MandatoryQueryParams(
# parameter=ois.MandatoryQueryParams.InvoiceIssueDate(
# invoice_issue_date=ois.DateIntervalParam(
# date_from=date(2020, 10, 1),
# date_to=date(2020, 11, 1)
# ))),
mandatory_query_params=ois.MandatoryQueryParams(
parameter=ois.MandatoryQueryParams.InsDate(
ins_date=ois.DateTimeIntervalParam(
date_time_from=datetime(2020, 10, 1),
date_time_to=datetime(2020, 10, 30)
))
),
)
)
try:
digest_response = client.query_invoice_digest(digest_request)
print(digest_response.invoice_digest_result.available_page)
print(digest_response.invoice_digest_result.current_page)
if digest_response.invoice_digest_result.invoice_digest is not None:
for i in digest_response.invoice_digest_result.invoice_digest:
print(i.invoice_number)
# ...
except ois.GeneralError as err:
gen_err: ois.GeneralErrorResponse = ois.deserialize_general_error_response(err.general_error_response)
print(gen_err.result.message)
print(gen_err.result.error_code)
print(gen_err.result.func_code)
for tvm in gen_err.technical_validation_messages:
print(tvm.message)
print(tvm.validation_error_code)
print(tvm.validation_result_code)
except Exception as err:
print(err)
- Get details of an invoice
data_request = ois.QueryInvoiceDataRequest(
header=ois.BasicHeader(
request_id='your_generated_unique_request_id',
timestamp=datetime.now()),
user=user,
software=software,
invoice_number_query=ois.InvoiceNumberQuery(
invoice_number='12345678/2020',
invoice_direction=ois.InvoiceDirection.OUTBOUND,
batch_index=None,
supplier_tax_number=None
)
)
try:
data_response = client.query_invoice_data(data_request)
invoice_xml_as_string = ois.decode_invoice_data(data_response.invoice_data_result.invoice_data)
print(invoice_xml_as_string)
invoice_data = ois.deserialize_invoice_data(invoice_xml_as_string)
print(invoice_data.invoiceNumber)
print(invoice_data.invoiceIssueDate)
invoice = invoice_data.invoiceMain.invoice
supplier_info = invoice.invoice_head.supplier_info
print(supplier_info.supplier_tax_number)
print(supplier_info.supplier_name)
if hasattr(supplier_info.supplier_address, 'simple_address'):
simple_address = supplier_info.supplier_address.simple_address
print(simple_address.country_code)
print(simple_address.city)
elif hasattr(supplier_info.supplier_address, 'detailed_address'):
detailed_address = supplier_info.supplier_address.detailed_address
print(detailed_address.country_code)
print(detailed_address.city)
lines = invoice.invoice_lines
for line in lines.items:
print(line.line_number)
print(line.unit_price)
print(line.unit_price_huf)
print(line.line_amounts)
if isinstance(line.line_amounts, LineAmountsNormal):
line_gross_amount_data = line.line_amounts.line_gross_amount_data
line_net_amount_data = line.line_amounts.line_net_amount_data
line_vat_data = line.line_amounts.line_vat_data
line_vat_rate = line.line_amounts.line_vat_rate
print(line_gross_amount_data.line_gross_amount_normal)
print(line_gross_amount_data.line_gross_amount_normal_huf)
print(line_net_amount_data.line_net_amount)
print(line_net_amount_data.line_net_amount_huf)
print(line_vat_data.line_vat_amount)
print(line_vat_data.line_vat_amount_huf)
print(line_vat_rate.vat_exemption)
print(line_vat_rate.vat_percentage)
print(line_vat_rate.margin_scheme_no_vat)
print(line_vat_rate.margin_scheme_vat)
print(line_vat_rate.vat_domestic_reverse_charge)
print(line_vat_rate.vat_out_of_scope)
# ...
except ois.GeneralError as err:
gen_err: ois.GeneralErrorResponse = ois.deserialize_general_error_response(err.general_error_response)
print(gen_err.result.message)
print(gen_err.result.error_code)
print(gen_err.result.func_code)
for tvm in gen_err.technical_validation_messages:
print(tvm.message)
print(tvm.validation_error_code)
print(tvm.validation_result_code)
except Exception as err:
print(err)
- List invoices with optional parameters
digest_request = ois.QueryInvoiceDigestRequest(
header=ois.BasicHeader(
request_id='your_generated_unique_request_id',
timestamp=datetime.now().astimezone(tz=timezone.utc)),
user=user,
software=software,
page=1,
invoice_direction=ois.InvoiceDirection.INBOUND,
invoice_query_params=ois.InvoiceQueryParams(
mandatory_query_params=ois.MandatoryQueryParams(
parameter=ois.MandatoryQueryParams.InsDate(
ins_date=ois.DateTimeIntervalParam(
date_time_from=datetime(2020, 10, 1),
date_time_to=datetime(2020, 10, 30)
))),
additional_query_params=ois.AdditionalQueryParams(
tax_number='12345678',
name='SUPPLIER NAME',
invoice_category=ois.InvoiceCategory.NORMAL,
payment_method=ois.PaymentMethod.TRANSFER,
invoice_appearance=ois.InvoiceAppearance.PAPER,
source=ois.Source.XML,
currency="HUF"
),
relational_query_params=ois.RelationalQueryParams(
# invoice_delivery=ois.RangeDate(
# from_operator=ois.RangeDate.FromOperator.GT,
# from_value=date(2020, 10, 1),
# to_operator=ois.RangeDate.ToOperator.LT,
# to_value=date(2020, 11, 1)
# ),
# invoice_delivery=ois.RelationQueryDate(
# query_operator=ois.QueryOperator.LT,
# query_value=date(2020, 10, 21)
# ),
invoice_delivery=date(2020, 10, 9),
# payment_date=ois.RangeDate(
# from_operator=ois.RangeDate.FromOperator.GT,
# from_value=date(2020, 10, 1),
# to_operator=ois.RangeDate.ToOperator.LT,
# to_value=date(2020, 11, 1)
# ),
# payment_date=ois.RelationQueryDate(
# query_operator=ois.QueryOperator.LT,
# query_value=date(2020, 10, 21)
# ),
# payment_date=date(2020, 10, 20),
# invoice_net_amount=ois.RangeMonetary(
# from_operator=ois.RangeMonetary.FromOperator.GT,
# from_value=1,
# to_operator=ois.RangeMonetary.ToOperator.LT,
# to_value=2000000.15
# ),
# invoice_net_amount=ois.RelationQueryMonetary(
# query_operator=ois.QueryOperator.GTE,
# query_value=40
# ),
invoice_net_amount=40,
# invoice_net_amount_huf=ois.RangeMonetary(
# from_operator=ois.RangeMonetary.FromOperator.GTE,
# from_value=40,
# to_operator=ois.RangeMonetary.ToOperator.LT,
# to_value=2000000.15
# ),
# invoice_net_amount_huf=ois.RelationQueryMonetary(
# query_operator=ois.QueryOperator.GTE,
# query_value=40
# ),
invoice_net_amount_huf=40,
# invoice_vat_amount=ois.RangeMonetary(
# from_operator=ois.RangeMonetary.FromOperator.GTE,
# from_value=4.2,
# to_operator=ois.RangeMonetary.ToOperator.LT,
# to_value=2000000.15
# ),
# invoice_vat_amount=ois.RelationQueryMonetary(
# query_operator=ois.QueryOperator.GTE,
# query_value=4.1
# ),
invoice_vat_amount=4.2,
# invoice_vat_amount_huf=ois.RangeMonetary(
# from_operator=ois.RangeMonetary.FromOperator.GTE,
# from_value=4.2,
# to_operator=ois.RangeMonetary.ToOperator.LTE,
# to_value=4.3
# ),
# invoice_vat_amount_huf=ois.RelationQueryMonetary(
# query_operator=ois.QueryOperator.GTE,
# query_value=4.1
# ),
invoice_vat_amount_huf=4.2
),
transaction_query_params=ois.TransactionQueryParams(
transaction_id='34NYMAM1OO7VON33',
index=1,
invoice_operation=ois.ManageInvoiceOperation.CREATE
)
)
)
try:
digest_response = client.query_invoice_digest(digest_request)
print(digest_response.invoice_digest_result.available_page)
print(digest_response.invoice_digest_result.current_page)
if digest_response.invoice_digest_result.invoice_digest is not None:
for i in digest_response.invoice_digest_result.invoice_digest:
print(i.invoice_number)
# ...
except ois.GeneralError as err:
gen_err: ois.GeneralErrorResponse = ois.deserialize_general_error_response(err.general_error_response)
print(gen_err.result.message)
print(gen_err.result.error_code)
print(gen_err.result.func_code)
for tvm in gen_err.technical_validation_messages:
print(tvm.message)
print(tvm.validation_error_code)
print(tvm.validation_result_code)
except Exception as err:
print(err)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ois_api_client-0.1.1.tar.gz.
File metadata
- Download URL: ois_api_client-0.1.1.tar.gz
- Upload date:
- Size: 46.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
527309152a0dfdec2ebcdc920543cc86c5370d001a326fde4b15006755286cd3
|
|
| MD5 |
3a45377451dbf063f2f4db877d6dfdb5
|
|
| BLAKE2b-256 |
ebf09c52268fed3104f67255cb53b7badd9108b73da666f7714e886c267368b6
|
File details
Details for the file ois_api_client-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ois_api_client-0.1.1-py3-none-any.whl
- Upload date:
- Size: 99.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9bce14a79be9df9d67f02b338b8e98f680ff6bcc3920c1d5045d501060a8a10
|
|
| MD5 |
ac0456aa5fd62a9d1f748571f17cbe43
|
|
| BLAKE2b-256 |
87802bf41df20f5e99ff6a3b3bc5278597a98c6f8f1cab206f40a42750eeb601
|