Ugrás a tartalomra
kassza

Válasz

A query() egy TaxpayerInfo objektumot ad vissza. A mezők a NAV Online Számla QueryTaxpayerResponse válaszából jönnek, amelyet a Számlázz.hu változatlanul továbbít.

const ceg = await kassza.taxpayer.query('12345676-2-41')

if (ceg.valid && ceg.address) {
  console.log(ceg.name, ceg.taxNumber?.formatted, ceg.address.formatted)
}

TaxpayerInfo#

MezőTípusForrás a válaszbanLeírás
validbooleantaxpayerValidityÉrvényes-e az adószám. false esetén csak az addresses, az infoDate és a requestId szerepel.
namestring | undefinedtaxpayerNameAz adózó teljes neve. A kassza nem alakítja át, ezért jellemzően csupa nagybetű.
shortNamestring | undefinedtaxpayerShortNameRövid név, ha a NAV-nál van ilyen. Ez sincs átalakítva.
taxNumberTaxpayerTaxNumber | undefinedtaxNumberDetailAz adószám részei, lásd lent.
addressTaxpayerAddress | undefinedtaxpayerAddressListA székhely (HQ), ennek hiányában az első cím.
addressesreadonly TaxpayerAddress[]taxpayerAddressListAz összes cím a válasz sorrendjében. Üres tömb, ha nincs cím.
incorporationTaxpayerIncorporation | undefinedincorporationAz adózó típusa: 'ORGANIZATION' (gazdálkodó szervezet), 'SELF_EMPLOYED' (egyéni vállalkozó) vagy 'TAXABLE_PERSON' (adószámos magánszemély). Más értéket változatlanul továbbad.
vatGroupMembershipstring | undefinedvatGroupMembershipÁfacsoport tagjánál a csoport azonosítója.
infoDatestring | undefinedinfoDateA NAV adatainak dátuma ISO 8601 szövegként.
requestIdstring | undefinedheader/requestIdA NAV kérés azonosítója. - érték esetén undefined.

TaxpayerTaxNumber#

MezőTípusForrásLeírás
taxpayerIdstringtaxpayerIdA 8 jegyű törzsszám. Ha a válaszban nincs, a teljes taxNumber undefined.
vatCodestring | undefinedvatCodeAz áfakód, az adószám 9. számjegye.
countyCodestring | undefinedcountyCodeA megyekód, az adószám utolsó két számjegye.
formattedstring | undefinedkassza'12345676-2-41' alakú adószám. Csak akkor van, ha a vatCode és a countyCode is megjött.

TaxpayerAddress#

MezőTípusForrásLeírás
typeTaxpayerAddressTypetaxpayerAddressType'HQ' székhely, 'SITE' telephely, 'BRANCH' fióktelep. Nagybetűsítve, hiányzó típusnál ''.
countryCodestringcountryCodeOrszágkód nagybetűvel, például 'HU'. Hiányzó értéknél ''.
regionstring | undefinedregionMegye vagy régió, olvasható formában.
postalCodestringpostalCodeIrányítószám. Hiányzó értéknél ''.
citystringcityTelepülés, olvasható formában. Hiányzó értéknél ''.
streetstring | undefinedstreetNameA közterület neve, olvasható formában.
publicPlaceCategorystring | undefinedpublicPlaceCategoryA közterület jellege. Csupa nagybetűs értéknél kisbetűvel, például 'utca'.
numberstring | undefinednumberHázszám.
buildingstring | undefinedbuildingÉpület.
staircasestring | undefinedstaircaseLépcsőház.
floorstring | undefinedfloorEmelet.
doorstring | undefineddoorAjtó.
lotNumberstring | undefinedlotNumberHelyrajzi szám.
formattedstringkasszaEgysoros cím, például '1031 Budapest, Záhony utca 7.'.
rawNavDetailedAddresstaxpayerAddressA NAV eredeti értékei átalakítás nélkül.

A NAV a címeket jellemzően csupa nagybetűvel küldi. Az olvasható formában a kassza szavanként nagy kezdőbetűt ír, a kötőjeles neveket részenként alakítja, a római számot meghagyja: BUDAPEST XI.Budapest XI., BAJCSY-ZSILINSZKYBajcsy-Zsilinszky. A vegyes kis- és nagybetűs értékekhez nem nyúl. A raw mezőben (countryCode, region, postalCode, city, streetName, publicPlaceCategory, number, building, staircase, floor, door, lotNumber) az eredeti értékeket találod.

A formatted sorrendje: irányítószám és település, vessző, közterület, házszám, épület, lépcsőház, emelet, ajtó, vessző, helyrajzi szám, vessző, és a végén az országkód, ha nem HU. A csak számjegyből álló házszám, lépcsőház, emelet és ajtó után pontot tesz:

1111 Budapest XI., Bajcsy-Zsilinszky út 12. B ép. 2. lh. 3. em. 14. ajtó
2000 Szentendre, hrsz. 1234/5

Ha a valid false#

Ha a NAV szerint a törzsszámhoz nem tartozik érvényes adószám, a query() nem dob hibát, hanem ezt adja vissza:

{ valid: false, addresses: [], infoDate: undefined, requestId: '38046_g2z6726bg67ymdt3p56bg6' }

Ilyenkor:

  • ne töltsd ki a vevő adatait, és jelezd a felhasználónak, hogy ellenőrizze a beírt számot;
  • ne kérdezd le újra ugyanazt a számot, ez nem átmeneti hiba, hanem a NAV válasza;
  • ha később vissza kell nézned, mit válaszolt a NAV, naplózd a requestId mezőt.

A vevő kitöltése#

Az űrlapon beírt adószámot a böngésző előbb a kassza/validators modullal ellenőrzi, és csak érvényes formátumnál hívja a szervert. A szerver újra ellenőriz, lekérdezi a NAV-ot, és a válaszból összerakja a számla buyer mezőjét.

app/rendeles/adoszam-mezo.tsx
'use client'

import type { InvoiceBuyer } from 'kassza'
import { parseHungarianTaxNumber } from 'kassza/validators'
import { useState } from 'react'
import { vevoAdoszambol } from './actions'

export function AdoszamMezo({ onVevo }: { onVevo: (vevo: InvoiceBuyer) => void }) {
  const [hiba, setHiba] = useState<string>()

  async function kitolt(bevitt: string) {
    const adoszam = parseHungarianTaxNumber(bevitt)
    if (!adoszam) {
      setHiba('Hibás adószám. Így add meg: 12345676-2-41')
      return
    }
    const eredmeny = await vevoAdoszambol(adoszam.formatted)
    if (!eredmeny.ok) {
      setHiba(eredmeny.uzenet)
      return
    }
    setHiba(undefined)
    onVevo(eredmeny.vevo)
  }

  return (
    <label>
      Adószám
      <input name="adoszam" onBlur={(event) => kitolt(event.currentTarget.value)} />
      {hiba && <span role="alert">{hiba}</span>}
    </label>
  )
}
  • Az address a formatted első vessző utáni része, mert az irányítószám és a település külön mezőbe kerül.
  • A taxNumber a NAV válaszából jön, de ha abból hiányzik a megyekód, a beírt és ellenőrzött adószámot használja.
  • A retryable hibákat (maintenance, network, timeout) a kassza már újrapróbálta, mire a catch ágba érsz, ezért itt nem kell újra hívnod.

A mezőket a Számla létrehozás kérés oldala írja le.

Hibák#

KódKategóriaMikor fordul elő?
validationA bemenet a HU előtag, a szóközök és a kötőjelek nélkül nem 8 vagy 11 számjegy. A kassza kérést sem küld.
3authHibás Agent kulcs.
136accountLejárt előfizetés vagy rendezetlen díj.
57validationA kérés XML-je nem felel meg a sémának. A kassza formátum-ellenőrzése mellett nem jellemző.
unknownA NAV szöveges hibakóddal válaszolt, például INVALID_SECURITY_USER. A kód az üzenet elején áll.
1maintenanceKarbantartás. A kassza magától újrapróbálja.
network, timeoutHálózati hiba, 5xx válasz vagy időtúllépés. A kassza újrapróbálja, és csak az utolsó próbálkozás hibáját kapod meg.
unexpected_responseA válasz nem QueryTaxpayerResponse XML.

A NAV hibáját a válasz result eleme jelzi (funcCode értéke ERROR). Számjegyes errorCode esetén a kassza a Számlázz.hu hibakód táblája szerint adja a kategóriát. Az ott nem szereplő és a szöveges kódok unknown kategóriát kapnak. Az összes kódot a Hibakezelés, hibakódok oldal sorolja fel.

Tesztekben a mock kliens taxpayers opciójával adhatsz meg törzsszám szerinti válaszokat. Az ismeretlen törzsszámra a mock { valid: false, addresses: [] } választ ad.

Oldal szerkesztéseUtoljára frissítve: