Validare factură

Descriere - Validare factură

  • Această secțiune este dedicată validarii unei facturi

  • Operațiunea de validare va schimba statusul facturii în Validated Vezi informații status factură

  • Factura odată validată își va schimba definiția contabilă din Factură Proforma (Draft) în Factură Fiscală

  • O factură validă are impact contabil

  • O factură validă nu poate fi ștearsă ci doar anulată

Operații care se pot realiza după ce o factură a fost validată:
  1. Vezi Anulare factură

  2. Vezi Trimite pe email

  3. Vezi Descărcare factură

  4. Vezi Trimitere în sistemul eFactura

Model de utilizare API - Validare factură

Notă

  • Verb: POST

  • Endpoint: /{clientEid}/invoices/valid

  • Request parameter: {clientEid}

  • Request body: {data_body}

  • Returns: Success Response

Atenționare

  • A se observa parametrul {clientEid} și tipul acestuia (path variable)

Model de request body - Validare factură

  • Request body-ul se creează în prealabil, înaintea apelului către API

  • Acesta va conține 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 conține doar o singură proprietate și anume externalId

Validări - Validare factură

La momentul executării acestui apel se vor verifica și valida următoarele:

  • Dacă există factura

  • Toate proprietățile obligatorii trebuie să fie completate

  • Seria facturii nu permite spații

  • Se verifică dacă factura este aferenta unei luni închise fiscal

  • Nu se poate valida o factură anulată sau deja validată

  • Se verifică atât sumele cât și valorile fiecărui articol de pe factură astfel încât factura să fie consistentă:

    • Valoarea netă inițială fără discount pentru articol

    • Valoarea TVA inițială fără discount pentru articol

    • Valoarea netă de discount pentru articol

    • Valoarea TVA de discount pentru articol

    • Valoarea net + TVA (brută) de discount pentru articol

    • Valoarea netă pentru articol

    • Valoarea TVA pentru articol

    • Valoarea net + TVA (brută) pentru articol

    • Valoarea accizei pentru articol

    • Valoarea totală netă inițială fără discount

    • Valoarea totală TVA inițială fără discount

    • Valoarea totală netă de discount

    • Valoarea totală TVA de discount

    • Valoarea totală net + TVA (brută) de discount

    • Valoarea totală netă

    • Valoarea totală net + TVA (brută)

    • Valoarea totală a accizei

    • Valoarea totală net + TVA (brută) de discount

    • Valoarea totală TVA

Verificările și validările vor arunca (throw) mesaje de eroare sub formă de excepție (Vezi Model Excepție) atașate de un cod HTTP error 500. Vezi Coduri eroare posibile

Mod de folosire - Wrapper - Validare factură

  • Dacă se folosește wrapper-ul scris în Python se utilizează astfel:
    1. Se preia token-ul Vezi Autorizarea

    2. Se apelează metoda specifică 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_id, secret=secret, token_url=token_url, api_url=api_url)
    
    invoiceExternalId = '{ID_EXTERN_FACTURA}'
    
    result = api.validate_invoice(client_eid, invoiceExternalId)
    

Mod de folosire - Fără Wrapper - Validare factură

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 găsește la secțiunea Autorizarea: Vezi Autorizarea