Skip to main content

A python client library for the hungarian Online Invoice System API

Project description

ois_api_client

Online Invoice System API Client

PyPI Latest Release Package Status License

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

MIT

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ois_api_client-0.1.1.tar.gz (46.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ois_api_client-0.1.1-py3-none-any.whl (99.1 kB view details)

Uploaded Python 3

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

Hashes for ois_api_client-0.1.1.tar.gz
Algorithm Hash digest
SHA256 527309152a0dfdec2ebcdc920543cc86c5370d001a326fde4b15006755286cd3
MD5 3a45377451dbf063f2f4db877d6dfdb5
BLAKE2b-256 ebf09c52268fed3104f67255cb53b7badd9108b73da666f7714e886c267368b6

See more details on using hashes here.

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

Hashes for ois_api_client-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c9bce14a79be9df9d67f02b338b8e98f680ff6bcc3920c1d5045d501060a8a10
MD5 ac0456aa5fd62a9d1f748571f17cbe43
BLAKE2b-256 87802bf41df20f5e99ff6a3b3bc5278597a98c6f8f1cab206f40a42750eeb601

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page