Exemplul RON - RON cu discount valoric net pe factură

Atenționare

La nivelul header-ului facturii, NU la nivelul detaliilor:

{
    'discountType': 'Value',
    'discountPercent': null,
    'discountValueOnNet': true,
    'discountNetValue': 20,
    'discountVatValue': 3.79,
    'discountGrossValue': 23.79
}
  • Discount-ul NET trebuie specificat la nivel de detaliu de factură și trebuie însumat la nivelul întregii facturi

  • In exemplul de mai jos se poate observa cum la nivelul detaliilor avem discount-urile nete 7.5 + 10 + 2.5, iar însumat acestea sunt de 20 RON la nivelul întregii facturi

from working_examples.keez_public_api import KeezPublicApi


class Service:
    def __init__(self):
        token_url = 'https://staging.keez.ro/idp/connect/token'
        api_url = f'https://staging.keez.ro/api/v1.0/public-api'

        application_id = {APPLICATION_ID}
        secret = {SECRET}
        self.client_eid = {CLIENT_EID}

        self.wrapper_service = KeezPublicApi(application_id=application_id, secret=secret, token_url=token_url, api_url=api_url)

    def getItems(self):
        return self.wrapper_service.items(self.client_eid)

    def validateInvoice(self, invoiceEid):
        self.wrapper_service.validate_invoice(self.client_eid, invoiceEid)

    def createItem(self):
        code = 'SERV_DIV'  # Se completează codul articolului pe baza căruia articolul poate fi găsit ulterior
        data = {
            'code': 'SERV_DIV',
            'name': 'Servicii diverse',  # Se completează numele articolului, acesta trebuie să fie unic, iar dacă mai există în aplicație, se va căuta pe baza codului
            'currencyCode': 'RON',
            'measureUnitId': 1,
            'isActive': True,
            'categoryExternalId': 'MISCSRV'
        }

        # Se caută articolul deja existent pe baza codului, dacă acesta există se va folosi, dacă nu, se va crea
        items = self.getItems()
        itemExternalId = next((p for p in items if p['code'] == code), None)
        if itemExternalId:
            return itemExternalId

        return self.wrapper_service.create_item(self.client_eid, data)

    def createInvoice(self, itemEid):
        data = {
            'series': 'SERIE',
            'documentDate': 20241212,
            'dueDate': 20241212,
            'vatOnCollection': False,
            'currencyCode': 'RON',
            'paymentTypeId': 3,
            'originalNetAmount': 80,
            'originalVatAmount': 15.2,
            'netAmount': 60,
            'vatAmount': 11.41,
            'grossAmount': 71.41,
            'discountType': 'Value',
            'discountPercent': None,
            'discountValueOnNet': True,
            'discountNetValue': 20,
            'discountVatValue': 3.79,
            'discountGrossValue': 23.79,
            'partner': {
                'isLegalPerson': True,
                'partnerName': 'DIGITAL KEEZ SRL',
                'identificationNumber': '37888790',
                'countryCode': 'RO'
            },
            'invoiceDetails': [
                {
                    'itemExternalId': itemEid,
                    'measureUnitId': 1,
                    'unitPrice': 15,
                    'quantity': 2,
                    'originalNetAmount': 30,
                    'originalVatAmount': 5.7,
                    'netAmount': 22.5,
                    'vatPercent': 19,
                    'vatAmount': 4.28,
                    'grossAmount': 26.78,
                    'discountType': 'Value',
                    'discountPercent': None,
                    'discountValueOnNet': True,
                    'discountNetValue': 7.5,
                    'discountVatValue': 1.42,
                    'discountGrossValue': 8.92,
                },
                {
                    'itemExternalId': itemEid,
                    'measureUnitId': 1,
                    'unitPrice': 10,
                    'quantity': 4,
                    'originalNetAmount': 40,
                    'originalVatAmount': 7.6,
                    'netAmount': 30,
                    'vatPercent': 19,
                    'vatAmount': 5.7,
                    'grossAmount': 35.7,
                    'discountType': 'Value',
                    'discountPercent': None,
                    'discountValueOnNet': True,
                    'discountNetValue': 10,
                    'discountVatValue': 1.9,
                    'discountGrossValue': 11.9,
                },
                {
                    'itemExternalId': itemEid,
                    'measureUnitId': 1,
                    'unitPrice': 10,
                    'quantity': 1,
                    'originalNetAmount': 10,
                    'originalVatAmount': 1.9,
                    'netAmount': 7.5,
                    'vatPercent': 19,
                    'vatAmount': 1.43,
                    'grossAmount': 8.93,
                    'discountType': 'Value',
                    'discountPercent': None,
                    'discountValueOnNet': True,
                    'discountNetValue': 2.5,
                    'discountVatValue': 0.47,
                    'discountGrossValue': 2.97,
                }
            ]
        }

        return self.wrapper_service.create_invoice(self.client_eid, data)


if __name__ == '__main__':
    service = Service()

    itemEid = service.createItem().get('externalId')
    print('Create item all good!')

    invoiceEid = service.createInvoice(itemEid).get('externalId')
    print('Create invoice all good!')

    service.validateInvoice(invoiceEid)
    print('Validate invoice all good!')

    print('Done!')