Validare factura

Descriere - Validare factura

  • Aceasta sectiune este dedicata validarii unei facturi

  • Operatiunea de validate va schimba statusul facturii in Validated Vezi informatii status factura

  • Factura odata validata isi va schimba definitia contabila din Factura Proforma (Draft) in Factura Fiscala

  • O factura valida are impact contabil

  • O factura valida nu poate fi stearsa ci doar anulata

Operatii care se pot realiza dupa ce o factura a fost validata:
  1. Vezi Anulare factura

  2. Vezi Trimite pe email

  3. Vezi Descarcare factura

Model de utilizare API - Validare factura

  • Asa cum este explicat in zona de Informatii generale utilizare API orice apel catre API se face catre un URL de baza la care apoi se adauga endpoint-ul respectivei operatii

Notă

  • Verb: POST

  • Endpoint: /{clientEid}/invoices/valid

  • Request parameter: {clientEid}

  • Request body: {data_body}

  • Returns: Success

Atenționare

  • A se observa parametru {clientEid} si tipul acestuia (path variable)

Model de request body - Validare factura

  • Request body -ul se creaza in prealabil, inaintea apelului catre API

  • Acesta va contine doar identificatorul Keez al facturii care se va anula: externalId

data_body = {
    'externalId': '{ID_EXTERN_FACTURA}'
}
  • Se poate observa cum JSON-ului de mai sus contine doar o singura proprietate si anume externalId

Validari - Validare factura

La momentul executarii acestul apel se vor verifica/valida urmatoarele:

  • Daca exista factura

  • Toate proprietatiile obligatorii trebuie sa fie completate

  • Seria facturii nu permite spatii

  • Se verifica daca factura este aferenta unei luni inchise fiscal

  • Nu se poate valida o factura anulata sau deja validata

  • Se verifica atat sumele cat si valorile fiecarui articol de pe factura astfel incat factura sa fie consistenta:

    • Valoarea neta initiala fara discount pentru articol

    • Valoarea TVA initiala fara discount pentru articol

    • Valoarea neta de discount pentru articol

    • Valoarea TVA de discount pentru articol

    • Valoarea net + TVA (bruta) de discount pentru articol

    • Valoarea neta pentru articol

    • Valoarea TVA pentru articol

    • Valoarea net + TVA (bruta) pentru articol

    • Valoarea accizei pentru articol

    • Valoarea totala neta initiala fara discount

    • Valoarea totala TVA initiala fara discount

    • Valoarea totala neta de discount

    • Valoarea totala TVA de discount

    • Valoarea totala net + TVA (bruta) de discount

    • Valoarea totala neta

    • Valoarea totala net + TVA (bruta)

    • Valoarea totala a accizei

    • Valoarea totala net + TVA (bruta) de discount

    • Valoarea totala TVA

Verificarile si validarile vor arunca (throw) mesaje de eroare sub forma de exceptie (Vezi Model Exceptie) atasate de un cod HTTP error 500. Vezi Coduri eroare posibile

Mod de folosire - Wrapper - Validare factura

  • Daca se foloseste wrapper -ul scris in Python se utilizeaza astfel:
    1. Se preia token-ul pe baza parametrilor specifici

    2. Se apeleaza metoda specifica acestui request POST

    token_url = 'https://staging.keez.ro/idp/connect/token'
    api_url = f'https://{ENVIRONMENT}.keez.ro/api/v1.0/public-api'
    
    client_eid = '{RECEIVED_CLIENT_EID}'
    application_id = '{RECEIVED_APPLICATION_ID}'
    secret = '{RECEIVED_SECRET}'
    
    api = KeezPublicApi(app=application, secret=secret, token_url=token_url, api_url=api_url)
    
    invoiceExternalId = '{ID_EXTERN_FACTURA}'
    
    result = api.validate_invoice(client_eid, invoiceExternalId)
    

Mod de folosire - Fara Wrapper - Validare factura

class InvoiceService:
    def __init__(self):
        token = TokenService()
        self.auth_token = token.generate_token()
        self.token = f'{self.auth_token.get("token_type")} {self.auth_token.get("access_token")}'

        self.client_eid = token.client_eid
        self.api_endpoint = token.api_endpoint

    def validateInvoice(self):
        invoice_url = f'{self.api_endpoint}/{self.client_eid}/invoices/valid'

        data_body = {
            'externalId': '{ID_EXTERN_FACTURA}'
        }

        _req = requests.post(url=invoice_url, headers={'Content-Type': 'application/json', 'Authorization': self.token}, json=data_body)
        return _req.json()


if __name__ == '__main__':
    service = InvoiceService()
    invoice = service.validateInvoice()
    print(invoice)

Notă

Clasa TokenService() se gaseste la sectiunea Autorizarea: Vezi Autorizarea