kassza 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +376 -111
  2. package/agents/README.md +20 -5
  3. package/agents/api.md +165 -2
  4. package/agents/pitfalls.md +16 -3
  5. package/agents/recipes.md +215 -45
  6. package/agents/skills/kassza/SKILL.md +11 -8
  7. package/dist/cli.cjs +552 -0
  8. package/dist/cli.d.cts +1 -0
  9. package/dist/cli.d.ts +1 -0
  10. package/dist/cli.js +552 -0
  11. package/dist/client-6MkeuFqD.d.ts +268 -0
  12. package/dist/client-B5FryKxJ.d.cts +268 -0
  13. package/dist/client-C-PdfL_P.cjs +1275 -0
  14. package/dist/client-CfaS1-Jx.js +1228 -0
  15. package/dist/context-BxQlIlug.d.ts +425 -0
  16. package/dist/context-DXNbTPwz.d.cts +425 -0
  17. package/dist/create-once-Cz621l8r.js +330 -0
  18. package/dist/create-once-DgMtKKcG.cjs +395 -0
  19. package/dist/crypto-Dpn4FHQ6.cjs +65 -0
  20. package/dist/crypto-usDg8L2K.js +36 -0
  21. package/dist/data-link/index.cjs +232 -0
  22. package/dist/data-link/index.d.cts +79 -0
  23. package/dist/data-link/index.d.ts +79 -0
  24. package/dist/data-link/index.js +224 -0
  25. package/dist/{dates-DtHzwNU6.d.cts → dates-9zvESP0i.d.cts} +2 -1
  26. package/dist/{dates-DtHzwNU6.d.ts → dates-9zvESP0i.d.ts} +2 -1
  27. package/dist/{dates-PPxH0n5H.cjs → dates-CPgBodkP.cjs} +44 -1
  28. package/dist/{dates-D2XebOIg.js → dates-CXyj7Azy.js} +39 -2
  29. package/dist/delegation/index.cjs +396 -0
  30. package/dist/delegation/index.d.cts +100 -0
  31. package/dist/delegation/index.d.ts +100 -0
  32. package/dist/delegation/index.js +378 -0
  33. package/dist/{errors-DapdV5DK.js → errors-DLrb0g64.js} +122 -5
  34. package/dist/{errors-B0QJhUW1.cjs → errors-DxeuTslP.cjs} +127 -4
  35. package/dist/get-Byc9T5WO.d.cts +151 -0
  36. package/dist/get-Byc9T5WO.d.ts +151 -0
  37. package/dist/get-Csm2n0rZ.cjs +445 -0
  38. package/dist/get-DT3JEgQ6.js +380 -0
  39. package/dist/index.cjs +21 -1410
  40. package/dist/index.d.cts +20 -3
  41. package/dist/index.d.ts +20 -3
  42. package/dist/index.js +8 -1409
  43. package/dist/ipn/index.cjs +1 -1
  44. package/dist/ipn/index.js +1 -1
  45. package/dist/issue-AGRohSm7.cjs +914 -0
  46. package/dist/issue-DtSLpVdJ.js +777 -0
  47. package/dist/json-4y4E2xxS.cjs +61 -0
  48. package/dist/json-B70TwoX1.d.cts +4 -0
  49. package/dist/json-B70TwoX1.d.ts +4 -0
  50. package/dist/json-DjnqnaJK.js +32 -0
  51. package/dist/mcp/index.cjs +10 -0
  52. package/dist/mcp/index.d.cts +71 -0
  53. package/dist/mcp/index.d.ts +71 -0
  54. package/dist/mcp/index.js +2 -0
  55. package/dist/money/index.cjs +12 -10
  56. package/dist/money/index.js +3 -1
  57. package/dist/{money-DkiGukAw.cjs → money-BxytJW6f.cjs} +42 -177
  58. package/dist/{money-C9j7nBNP.js → money-t7uy1n91.js} +29 -110
  59. package/dist/nav/index.cjs +1046 -0
  60. package/dist/nav/index.d.cts +247 -0
  61. package/dist/nav/index.d.ts +247 -0
  62. package/dist/nav/index.js +1012 -0
  63. package/dist/nav-BEwcX7-N.cjs +203 -0
  64. package/dist/nav-CK1WgYo7.js +156 -0
  65. package/dist/parse-BJj-aqKy.cjs +380 -0
  66. package/dist/parse-C608ehqM.js +291 -0
  67. package/dist/payments/barion.cjs +208 -0
  68. package/dist/payments/barion.d.cts +28 -0
  69. package/dist/payments/barion.d.ts +28 -0
  70. package/dist/payments/barion.js +199 -0
  71. package/dist/payments/index.cjs +16 -0
  72. package/dist/payments/index.d.cts +31 -0
  73. package/dist/payments/index.d.ts +31 -0
  74. package/dist/payments/index.js +3 -0
  75. package/dist/payments/paypal.cjs +351 -0
  76. package/dist/payments/paypal.d.cts +59 -0
  77. package/dist/payments/paypal.d.ts +59 -0
  78. package/dist/payments/paypal.js +337 -0
  79. package/dist/payments/revolut.cjs +261 -0
  80. package/dist/payments/revolut.d.cts +48 -0
  81. package/dist/payments/revolut.d.ts +48 -0
  82. package/dist/payments/revolut.js +249 -0
  83. package/dist/payments/simplepay.cjs +313 -0
  84. package/dist/payments/simplepay.d.cts +86 -0
  85. package/dist/payments/simplepay.d.ts +86 -0
  86. package/dist/payments/simplepay.js +299 -0
  87. package/dist/payments/stripe.cjs +315 -0
  88. package/dist/payments/stripe.d.cts +49 -0
  89. package/dist/payments/stripe.d.ts +49 -0
  90. package/dist/payments/stripe.js +303 -0
  91. package/dist/reports/index.cjs +103 -0
  92. package/dist/reports/index.d.cts +70 -0
  93. package/dist/reports/index.d.ts +70 -0
  94. package/dist/reports/index.js +94 -0
  95. package/dist/request-body-CH6ZGOrq.cjs +34 -0
  96. package/dist/request-body-uZHMRlQr.js +29 -0
  97. package/dist/rounding-BLyHjjI5.js +20 -0
  98. package/dist/rounding-TxoWy2ww.cjs +37 -0
  99. package/dist/serialize-BXOww1Uq.cjs +286 -0
  100. package/dist/serialize-DSE_o9RK.js +215 -0
  101. package/dist/server-C6PoNkdD.cjs +1557 -0
  102. package/dist/server-Cd8HB661.js +1504 -0
  103. package/dist/storage/fs.cjs +1 -1
  104. package/dist/storage/fs.js +1 -1
  105. package/dist/storage/index.cjs +2 -2
  106. package/dist/storage/index.d.cts +1 -1
  107. package/dist/storage/index.d.ts +1 -1
  108. package/dist/storage/index.js +2 -2
  109. package/dist/tax-number-BYFkBp4A.cjs +141 -0
  110. package/dist/tax-number-BdqKsxNR.js +76 -0
  111. package/dist/testing/index.cjs +1656 -84
  112. package/dist/testing/index.d.cts +203 -3
  113. package/dist/testing/index.d.ts +203 -3
  114. package/dist/testing/index.js +1653 -83
  115. package/dist/types-BVeR7KyU.d.cts +56 -0
  116. package/dist/types-BVeR7KyU.d.ts +56 -0
  117. package/dist/types-DH8QoNZK.d.cts +135 -0
  118. package/dist/types-k--zHf4l.d.ts +135 -0
  119. package/dist/validators/index.cjs +14 -88
  120. package/dist/validators/index.js +1 -75
  121. package/dist/vat-g35srbNG.cjs +116 -0
  122. package/dist/vat-v_dcWCto.js +81 -0
  123. package/dist/webhook-81giRMdQ.cjs +223 -0
  124. package/dist/webhook-CpCMHhn2.d.ts +6 -0
  125. package/dist/webhook-CpMJuP6c.d.cts +6 -0
  126. package/dist/webhook-CrEGohbg.js +152 -0
  127. package/llms.txt +4 -4
  128. package/package.json +148 -2
  129. package/dist/client-B9kbKKBf.d.cts +0 -748
  130. package/dist/client-zv4enyq7.d.ts +0 -748
  131. package/dist/create-5YkUcJSe.js +0 -957
  132. package/dist/create-DZsl3Z4m.cjs +0 -1178
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <!-- Ezt a fájlt a readme/build.mjs generálja a readme/template.md alapján. Ne szerkeszd kézzel: írd át a sablont, és futtasd az npm run readme parancsot. -->
2
2
 
3
3
  <p align="center">
4
- <a href="https://kassza-amber.vercel.app"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/hero-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/hero-light.svg" alt="kassza: Számlázz.hu, TypeScriptben. Telepítés: npm i kassza" width="100%"></picture></a>
4
+ <a href="https://kasszajs.hu"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/hero-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/hero-light.svg" alt="kassza: Számlázz.hu, TypeScriptben. Telepítés: npm i kassza" width="100%"></picture></a>
5
5
  </p>
6
6
 
7
7
  <p align="center">
@@ -17,11 +17,11 @@
17
17
  </p>
18
18
 
19
19
  <p align="center">
20
- <a href="https://kassza-amber.vercel.app"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-web-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-web-light.svg" alt="Weboldal: kassza-amber.vercel.app" width="428"></picture></a>
21
- <a href="https://kassza-amber.vercel.app/docs"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-docs-light.svg" alt="Dokumentáció: 92 oldal, magyarul" width="428"></picture></a>
20
+ <a href="https://kasszajs.hu"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-web-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-web-light.svg" alt="Weboldal: kasszajs.hu" width="428"></picture></a>
21
+ <a href="https://kasszajs.hu/docs"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-docs-light.svg" alt="Dokumentáció: 113 oldal, magyarul" width="428"></picture></a>
22
22
  <br>
23
- <a href="https://kassza-amber.vercel.app/sandbox"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-sandbox-light.svg" alt="Sandbox: 27 futtatható példa" width="428"></picture></a>
24
- <a href="https://kassza-amber.vercel.app/docs/receptek"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-recipes-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-recipes-light.svg" alt="Receptek: 11 kész integráció" width="428"></picture></a>
23
+ <a href="https://kasszajs.hu/sandbox"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-sandbox-light.svg" alt="Sandbox: 28 futtatható példa" width="428"></picture></a>
24
+ <a href="https://kasszajs.hu/docs/receptek"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-recipes-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/nav-recipes-light.svg" alt="Receptek: 11 kész integráció" width="428"></picture></a>
25
25
  </p>
26
26
 
27
27
  ```bash
@@ -44,8 +44,8 @@ console.log(szamla.number, szamla.grossTotal)
44
44
  Ennyi. A kerekítést, a magyar dátumot, az XML-t, a session cookie-t és a hibakezelést a kassza intézi, a vevő pedig e-mailben megkapja a számlát.
45
45
 
46
46
  <p>
47
- <a href="https://kassza-amber.vercel.app/docs/alapok/telepites"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Telepítés" height="44"></picture></a>
48
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Számla kiállítása" height="44"></picture></a>
47
+ <a href="https://kasszajs.hu/docs/alapok/telepites"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Telepítés" height="44"></picture></a>
48
+ <a href="https://kasszajs.hu/sandbox?pelda=szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Számla kiállítása" height="44"></picture></a>
49
49
  </p>
50
50
 
51
51
  ## Miért kassza?
@@ -56,7 +56,9 @@ Ennyi. A kerekítést, a magyar dátumot, az XML-t, a session cookie-t és a hib
56
56
 
57
57
  - **Mind a 11 Agent művelet.** Számla, díjbekérő, nyugta, sztornó, befizetés, PDF és adószám, nem csak a számla kiállítása.
58
58
  - **Pontos kerekítés.** A tételek nettó, áfa és bruttó értékét a Számlázz.hu szabályai szerint számolja, mert egy forint eltérés is elég, hogy a számla ne készüljön el.
59
- - **Nincs dupla számla.** Számlát a kassza soha nem küld újra magától, bizonytalan hiba után pedig a rendelésszámmal visszakeresheted.
59
+ - **Nincs dupla számla.** Számlát a kassza soha nem küld újra magától. A `createOnce()` kiállítás előtt megkeresi a bizonylatot, bizonytalan hiba után pedig visszakeresi.
60
+ - **Fizetésből bizonylat.** Stripe, SimplePay, Barion, Revolut és PayPal webhookból pontosan egyszer nyugta vagy számla, visszatérítéskor sztornó.
61
+ - **NAV nyugta-adatszolgáltatás.** Napi összesítő és egyeztetés a 2026. szeptember 1-jétől kötelező adatszolgáltatáshoz.
60
62
  - **Egy hibatípus.** A Számlázz.hu háromféle hibaformátumából egyetlen `SzamlazzError` lesz, magyar üzenettel és javítási tippel.
61
63
  - **Serverless és edge.** Node, Bun, Deno, Cloudflare Workers és Vercel Edge alatt is fut, a session cookie közös tárolóban is lehet.
62
64
 
@@ -83,62 +85,62 @@ Ennyi. A kerekítést, a magyar dátumot, az XML-t, a session cookie-t és a hib
83
85
  </details>
84
86
 
85
87
  <p>
86
- <a href="https://kassza-amber.vercel.app/docs/alapok/mi-a-kassza"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Mi a kassza?" height="44"></picture></a>
88
+ <a href="https://kasszajs.hu/docs/alapok/mi-a-kassza"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Mi a kassza?" height="44"></picture></a>
87
89
  </p>
88
90
 
89
91
  ## Tartalom
90
92
 
91
- | Kezdés | Műveletek | Kiegészítők |
92
- | --- | --- | --- |
93
- | 🌐 [Weboldal, sandbox és receptek](#weboldal-sandbox-és-receptek) | 📄 [Számlák](#számlák) | 🗄️ [PDF mentése tárhelyre](#pdf-mentése-tárhelyre) |
94
- | ⚙️ [Beállítás](#beállítás) | 🧾 [Nyugták](#nyugták) | ⚡ [Serverless és edge](#serverless-és-edge) |
95
- | 🚨 [Hibakezelés](#hibakezelés) | 🏛️ [Adószám lekérdezés](#adószám-lekérdezés) | 🧪 [Tesztelés](#tesztelés) |
96
- | 🎛️ [Haladó beállítások](#haladó-beállítások) | 🔔 [Fizetési értesítés (IPN)](#fizetési-értesítés-ipn) | 🧮 [Validátorok és pénzszámítás](#validátorok-és-pénzszámítás) |
97
- | 🤖 [AI-val kódolsz?](#ai-val-kódolsz) | | |
93
+ | Kezdés | Műveletek | Integrációk | Kiegészítők |
94
+ | --- | --- | --- | --- |
95
+ | 🌐 [Weboldal, sandbox és receptek](#weboldal-sandbox-és-receptek) | 📄 [Számlák](#számlák) | 💳 [Fizetésből bizonylat](#fizetésből-bizonylat) | 🗄️ [PDF mentése tárhelyre](#pdf-mentése-tárhelyre) |
96
+ | ⚙️ [Beállítás](#beállítás) | 🧾 [Nyugták](#nyugták) | 📊 [NAV nyugta-adatszolgáltatás](#nav-nyugta-adatszolgáltatás) | ⚡ [Serverless és edge](#serverless-és-edge) |
97
+ | 🚨 [Hibakezelés](#hibakezelés) | 🏛️ [Adószám lekérdezés](#adószám-lekérdezés) | 🤝 [Megbízotti számlázás](#megbízotti-számlázás) | 🧪 [Tesztelés](#tesztelés) |
98
+ | 🎛️ [Haladó beállítások](#haladó-beállítások) | 🔔 [Fizetési értesítés (IPN)](#fizetési-értesítés-ipn) | 🔗 [Pénzügyi adatkapcsolat](#pénzügyi-adatkapcsolat) | 🧮 [Validátorok és pénzszámítás](#validátorok-és-pénzszámítás) |
99
+ | 🤖 [AI-val kódolsz?](#ai-val-kódolsz) | | | 💻 [Parancssor és MCP szerver](#parancssor-és-mcp-szerver) |
98
100
 
99
101
  ## Weboldal, sandbox és receptek
100
102
 
101
- A teljes magyar dokumentáció, a sandbox és a receptek a **[kassza-amber.vercel.app](https://kassza-amber.vercel.app)** oldalon vannak.
103
+ A teljes magyar dokumentáció, a sandbox és a receptek a **[kasszajs.hu](https://kasszajs.hu)** oldalon vannak.
102
104
 
103
105
  <p align="center">
104
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/showcase-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/showcase-light.svg" alt="A kassza sandbox: futtatható példák, TypeScript kód és a ténylegesen elküldött XML" width="100%"></picture></a>
106
+ <a href="https://kasszajs.hu/sandbox?pelda=szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/showcase-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/showcase-light.svg" alt="A kassza sandbox: futtatható példák, TypeScript kód és a ténylegesen elküldött XML" width="100%"></picture></a>
105
107
  </p>
106
108
 
107
- - 📖 **[Dokumentáció](https://kassza-amber.vercel.app/docs)**: 92 oldal magyarul. Minden Agent művelethez kérés, válasz és futtatható minta, a beállítások, a szabályok és az összes ismert hibakód.
108
- - ▶️ **[Sandbox](https://kassza-amber.vercel.app/sandbox)**: 27 példa, amit a böngészőben futtathatsz Agent kulcs nélkül, szimulált Számlázz.hu ellen, a ténylegesen elküldött XML-lel. A saját kódodat linkként meg is oszthatod.
109
- - 🍳 **[Receptek](https://kassza-amber.vercel.app/docs/receptek)**: 11 teljes, bemásolható integráció webshophoz, Stripe és IPN webhookhoz, díjbekérőhöz, pénztári nyugtához, PDF tárhelyhez, Cloudflare Workershez és tesztekhez.
110
- - 🤖 **[llms.txt](https://kassza-amber.vercel.app/llms.txt)**: a dokumentáció tartalomjegyzéke AI asszisztenseknek, a teljes szöveg egy fájlban: [llms-full.txt](https://kassza-amber.vercel.app/llms-full.txt).
109
+ - 📖 **[Dokumentáció](https://kasszajs.hu/docs)**: 113 oldal magyarul. Minden Agent művelethez kérés, válasz és futtatható minta, a beállítások, a szabályok és az összes ismert hibakód.
110
+ - ▶️ **[Sandbox](https://kasszajs.hu/sandbox)**: 28 példa, amit a böngészőben futtathatsz Agent kulcs nélkül, szimulált Számlázz.hu ellen, a ténylegesen elküldött XML-lel. A saját kódodat linkként meg is oszthatod.
111
+ - 🍳 **[Receptek](https://kasszajs.hu/docs/receptek)**: 11 teljes, bemásolható integráció webshophoz, Stripe és IPN webhookhoz, díjbekérőhöz, pénztári nyugtához, PDF tárhelyhez, Cloudflare Workershez és tesztekhez.
112
+ - 🤖 **[llms.txt](https://kasszajs.hu/llms.txt)**: a dokumentáció tartalomjegyzéke AI asszisztenseknek, a teljes szöveg egy fájlban: [llms-full.txt](https://kasszajs.hu/llms-full.txt).
111
113
  - 📦 **[npm csomag](https://www.npmjs.com/package/kassza)** · 🏛️ **[Hivatalos Számlázz.hu Agent dokumentáció](https://docs.szamlazz.hu/hu/agent/)**
112
114
 
113
115
  <details>
114
116
  <summary>🍳 <b>Mind a 11 recept</b></summary>
115
117
 
116
- - **[Közös kliens](https://kassza-amber.vercel.app/docs/receptek/kozos-kliens)**: Egyetlen szerveroldali kassza kliens alapbeállításokkal, hibanaplózással és közös munkamenettel, amelyet a többi recept importál.
117
- - **[Fizetett rendelés számlája](https://kassza-amber.vercel.app/docs/receptek/fizetett-rendeles-szamla)**: Idempotens számlázás rendelésszámmal.
118
- - **[Stripe webhook](https://kassza-amber.vercel.app/docs/receptek/stripe-webhook)**: Számla a Stripe Checkout checkout.session.completed eseményéből.
119
- - **[Nevezés díjbekérővel](https://kassza-amber.vercel.app/docs/receptek/nevezes-dijbekerovel)**: Versenynevezés vagy rendezvényjelentkezés átutalásos fizetéssel.
120
- - **[IPN webhook](https://kassza-amber.vercel.app/docs/receptek/ipn-webhook)**: A Számlázz.hu fizetési értesítésének (IPN) fogadása Next.js route handlerben, IP-ellenőrzéssel, a számla állapotának visszaellenőrzésével és idempotens mentéssel.
121
- - **[Pénztári nyugta](https://kassza-amber.vercel.app/docs/receptek/penztari-nyugta)**: Nyugta egy pénztári eladásról hívásazonosítóval, a dupla nyugta kezelésével és e-mail kiküldéssel, Next.js route handlerben.
122
- - **[PDF mentése S3-ba vagy R2-be](https://kassza-amber.vercel.app/docs/receptek/pdf-mentes-s3-r2)**: A számla PDF-jének mentése saját Amazon S3 vagy Cloudflare R2 tárhelyre AWS SDK nélkül, stabil kulccsal és rövid ideig érvényes letöltési linkkel.
123
- - **[Adószám alapú kitöltés](https://kassza-amber.vercel.app/docs/receptek/adoszam-urlap)**: Számlázási űrlap, amely a beírt adószám alapján a NAV adataiból tölti ki a cégnevet és a székhely címét.
124
- - **[Devizás számla EU-s cégnek](https://kassza-amber.vercel.app/docs/receptek/devizas-eu-szamla)**: Euróban kiállított, angol nyelvű számla másik tagállambeli cégnek, közösségi adószámmal, MNB árfolyammal és angol értesítő e-maillel.
125
- - **[Cloudflare Workers](https://kassza-amber.vercel.app/docs/receptek/cloudflare-workers)**: Cloudflare Worker, amely a kasszával lekérdezi a számlákat, a munkamenetet KV-ben tartja, a számla PDF-eket pedig R2-ben gyorsítótárazza.
126
- - **[Egységtesztek](https://kassza-amber.vercel.app/docs/receptek/egysegtesztek)**: Vitest tesztek a receptek kódjához mock klienssel.
118
+ - **[Közös kliens](https://kasszajs.hu/docs/receptek/kozos-kliens)**: Egyetlen szerveroldali kassza kliens alapbeállításokkal, hibanaplózással és közös munkamenettel, amelyet a többi recept importál.
119
+ - **[Fizetett rendelés számlája](https://kasszajs.hu/docs/receptek/fizetett-rendeles-szamla)**: Idempotens számlázás rendelésszámmal.
120
+ - **[Stripe webhook](https://kasszajs.hu/docs/receptek/stripe-webhook)**: Számla a Stripe Checkout checkout.session.completed eseményéből.
121
+ - **[Nevezés díjbekérővel](https://kasszajs.hu/docs/receptek/nevezes-dijbekerovel)**: Versenynevezés vagy rendezvényjelentkezés átutalásos fizetéssel.
122
+ - **[IPN webhook](https://kasszajs.hu/docs/receptek/ipn-webhook)**: A Számlázz.hu fizetési értesítésének (IPN) fogadása Next.js route handlerben, IP-ellenőrzéssel, a számla állapotának visszaellenőrzésével és idempotens mentéssel.
123
+ - **[Pénztári nyugta](https://kasszajs.hu/docs/receptek/penztari-nyugta)**: Nyugta egy food truck pénztárprogramjából a receipts.createOnce metódussal, a dupla nyugta kezelésével és e-mail kiküldéssel, Next.js route handlerben.
124
+ - **[PDF mentése S3-ba vagy R2-be](https://kasszajs.hu/docs/receptek/pdf-mentes-s3-r2)**: A számla PDF-jének mentése saját Amazon S3 vagy Cloudflare R2 tárhelyre AWS SDK nélkül, stabil kulccsal és rövid ideig érvényes letöltési linkkel.
125
+ - **[Adószám alapú kitöltés](https://kasszajs.hu/docs/receptek/adoszam-urlap)**: Számlázási űrlap, amely a beírt adószám alapján a NAV adataiból tölti ki a cégnevet és a székhely címét.
126
+ - **[Devizás számla EU-s cégnek](https://kasszajs.hu/docs/receptek/devizas-eu-szamla)**: Euróban kiállított, angol nyelvű számla másik tagállambeli cégnek, közösségi adószámmal, MNB árfolyammal és angol értesítő e-maillel.
127
+ - **[Cloudflare Workers](https://kasszajs.hu/docs/receptek/cloudflare-workers)**: Cloudflare Worker, amely a kasszával lekérdezi a számlákat, a munkamenetet KV-ben tartja, a számla PDF-eket pedig R2-ben gyorsítótárazza.
128
+ - **[Egységtesztek](https://kasszajs.hu/docs/receptek/egysegtesztek)**: Vitest tesztek a receptek kódjához mock klienssel.
127
129
 
128
130
  </details>
129
131
 
130
132
  <details>
131
- <summary>▶️ <b>Mind a 27 sandbox példa</b></summary>
133
+ <summary>▶️ <b>Mind a 28 sandbox példa</b></summary>
132
134
 
133
- **Számlák:** [Számla kiállítása](https://kassza-amber.vercel.app/sandbox?pelda=szamla) · [Webshop számla bruttó árakkal](https://kassza-amber.vercel.app/sandbox?pelda=szamla-brutto) · [Díjbekérő, majd számla](https://kassza-amber.vercel.app/sandbox?pelda=dijbekero-szamla) · [Előleg- és végszámla](https://kassza-amber.vercel.app/sandbox?pelda=eloleg-vegszamla) · [Helyesbítő számla](https://kassza-amber.vercel.app/sandbox?pelda=helyesbito-szamla) · [Devizás számla EU-s vevőnek](https://kassza-amber.vercel.app/sandbox?pelda=devizas-szamla) · [Számlaelőnézet](https://kassza-amber.vercel.app/sandbox?pelda=elonezet) · [Számla sztornózása](https://kassza-amber.vercel.app/sandbox?pelda=sztorno) · [Befizetések rögzítése](https://kassza-amber.vercel.app/sandbox?pelda=befizetes) · [PDF lekérése utólag](https://kassza-amber.vercel.app/sandbox?pelda=pdf-lekeres) · [Számla adatainak lekérése](https://kassza-amber.vercel.app/sandbox?pelda=szamla-adatai) · [Díjbekérő törlése](https://kassza-amber.vercel.app/sandbox?pelda=dijbekero-torlese)
135
+ **Számlák:** [Számla kiállítása](https://kasszajs.hu/sandbox?pelda=szamla) · [Webshop számla bruttó árakkal](https://kasszajs.hu/sandbox?pelda=szamla-brutto) · [Díjbekérő, majd számla](https://kasszajs.hu/sandbox?pelda=dijbekero-szamla) · [Előleg- és végszámla](https://kasszajs.hu/sandbox?pelda=eloleg-vegszamla) · [Helyesbítő számla](https://kasszajs.hu/sandbox?pelda=helyesbito-szamla) · [Devizás számla EU-s vevőnek](https://kasszajs.hu/sandbox?pelda=devizas-szamla) · [Számlaelőnézet](https://kasszajs.hu/sandbox?pelda=elonezet) · [Számla sztornózása](https://kasszajs.hu/sandbox?pelda=sztorno) · [Befizetések rögzítése](https://kasszajs.hu/sandbox?pelda=befizetes) · [PDF lekérése utólag](https://kasszajs.hu/sandbox?pelda=pdf-lekeres) · [Számla adatainak lekérése](https://kasszajs.hu/sandbox?pelda=szamla-adatai) · [Díjbekérő törlése](https://kasszajs.hu/sandbox?pelda=dijbekero-torlese)
134
136
 
135
- **Nyugták:** [Nyugta kiállítása](https://kassza-amber.vercel.app/sandbox?pelda=nyugta) · [Nyugta sztornózása](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-sztorno) · [Nyugta lekérdezése](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-lekerdezes) · [Nyugta kiküldése e-mailben](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-kikuldes)
137
+ **Nyugták:** [Nyugta kiállítása](https://kasszajs.hu/sandbox?pelda=nyugta) · [Pénztári nyugta, dupla gombnyomás](https://kasszajs.hu/sandbox?pelda=penztari-nyugta) · [Nyugta sztornózása](https://kasszajs.hu/sandbox?pelda=nyugta-sztorno) · [Nyugta lekérdezése](https://kasszajs.hu/sandbox?pelda=nyugta-lekerdezes) · [Nyugta kiküldése e-mailben](https://kasszajs.hu/sandbox?pelda=nyugta-kikuldes)
136
138
 
137
- **NAV:** [Adószám lekérdezése](https://kassza-amber.vercel.app/sandbox?pelda=adoszam)
139
+ **NAV:** [Adószám lekérdezése](https://kasszajs.hu/sandbox?pelda=adoszam)
138
140
 
139
- **Hibakezelés:** [Idempotens számlázás hiba után](https://kassza-amber.vercel.app/sandbox?pelda=hibakezeles-idempotens) · [Validációs hibák](https://kassza-amber.vercel.app/sandbox?pelda=hibakezeles-validacio) · [Agent kulcs ellenőrzése](https://kassza-amber.vercel.app/sandbox?pelda=kulcs-ellenorzes) · [Hookok és újrapróbálás](https://kassza-amber.vercel.app/sandbox?pelda=hookok)
141
+ **Hibakezelés:** [Idempotens számlázás hiba után](https://kasszajs.hu/sandbox?pelda=hibakezeles-idempotens) · [Validációs hibák](https://kasszajs.hu/sandbox?pelda=hibakezeles-validacio) · [Agent kulcs ellenőrzése](https://kasszajs.hu/sandbox?pelda=kulcs-ellenorzes) · [Hookok és újrapróbálás](https://kasszajs.hu/sandbox?pelda=hookok)
140
142
 
141
- **Eszközök:** [Közös session több kliens között](https://kassza-amber.vercel.app/sandbox?pelda=munkamenet) · [Mock kliens tesztekhez](https://kassza-amber.vercel.app/sandbox?pelda=mock-kliens) · [Kerekítés és összegzés](https://kassza-amber.vercel.app/sandbox?pelda=kerekites) · [Validátorok](https://kassza-amber.vercel.app/sandbox?pelda=validatorok) · [IPN fizetési értesítés](https://kassza-amber.vercel.app/sandbox?pelda=ipn) · [PDF mentése tárhelyre](https://kassza-amber.vercel.app/sandbox?pelda=pdf-tarhely)
143
+ **Eszközök:** [Közös session több kliens között](https://kasszajs.hu/sandbox?pelda=munkamenet) · [Mock kliens tesztekhez](https://kasszajs.hu/sandbox?pelda=mock-kliens) · [Kerekítés és összegzés](https://kasszajs.hu/sandbox?pelda=kerekites) · [Validátorok](https://kasszajs.hu/sandbox?pelda=validatorok) · [IPN fizetési értesítés](https://kasszajs.hu/sandbox?pelda=ipn) · [PDF mentése tárhelyre](https://kasszajs.hu/sandbox?pelda=pdf-tarhely)
142
144
 
143
145
  </details>
144
146
 
@@ -179,14 +181,14 @@ await kassza.verifyCredentials()
179
181
 
180
182
  A `verifyCredentials()` visszatérési értéke `true`, ha a kulcs jó.
181
183
 
182
- 📖 **Dokumentáció:** [Hitelesítés (Agent kulcs)](https://kassza-amber.vercel.app/docs/alapok/hitelesites) &nbsp;·&nbsp; ▶️ **Sandbox:** [Agent kulcs ellenőrzése](https://kassza-amber.vercel.app/sandbox?pelda=kulcs-ellenorzes)
184
+ 📖 **Dokumentáció:** [Hitelesítés (Agent kulcs)](https://kasszajs.hu/docs/alapok/hitelesites) &nbsp;·&nbsp; ▶️ **Sandbox:** [Agent kulcs ellenőrzése](https://kasszajs.hu/sandbox?pelda=kulcs-ellenorzes)
183
185
 
184
186
  </details>
185
187
 
186
188
  <p>
187
- <a href="https://kassza-amber.vercel.app/docs/alapok/kliens-beallitasa"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Kliens beállítása" height="44"></picture></a>
188
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=kulcs-ellenorzes"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Agent kulcs ellenőrzése" height="44"></picture></a>
189
- <a href="https://kassza-amber.vercel.app/docs/receptek/kozos-kliens"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-kozos-kliens-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-kozos-kliens-light.svg" alt="Recept: Közös kliens" height="44"></picture></a>
189
+ <a href="https://kasszajs.hu/docs/alapok/kliens-beallitasa"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Kliens beállítása" height="44"></picture></a>
190
+ <a href="https://kasszajs.hu/sandbox?pelda=kulcs-ellenorzes"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Agent kulcs ellenőrzése" height="44"></picture></a>
191
+ <a href="https://kasszajs.hu/docs/receptek/kozos-kliens"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-kozos-kliens-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-kozos-kliens-light.svg" alt="Recept: Közös kliens" height="44"></picture></a>
190
192
  </p>
191
193
 
192
194
  ## Számlák
@@ -207,7 +209,7 @@ const szamla = await kassza.invoices.create({
207
209
  city: 'Budapest',
208
210
  address: 'Fő utca 1.',
209
211
  email: 'vevo@ceg.hu',
210
- taxNumber: '12345678-2-42',
212
+ taxNumber: '12345676-2-42',
211
213
  },
212
214
  items: [
213
215
  { name: 'Póló', quantity: 2, grossUnitPrice: 5_990, vat: 27 },
@@ -224,7 +226,7 @@ szamla.pdf
224
226
  - Az `orderNumber` a saját azonosítód, ezzel később vissza is keresheted a számlát.
225
227
  - A `szamla.pdf` egy `Uint8Array`.
226
228
 
227
- 📖 **Dokumentáció:** [Számla létrehozás › Kérés](https://kassza-amber.vercel.app/docs/szamla-letrehozas/keres) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számla kiállítása](https://kassza-amber.vercel.app/sandbox?pelda=szamla)
229
+ 📖 **Dokumentáció:** [Számla létrehozás › Kérés](https://kasszajs.hu/docs/szamla-letrehozas/keres) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számla kiállítása](https://kasszajs.hu/sandbox?pelda=szamla)
228
230
 
229
231
  </details>
230
232
 
@@ -240,9 +242,9 @@ Az ár megadható nettóban vagy bruttóban, a kerekítés a hivatalos szabályo
240
242
  { name: 'Oktatás', netUnitPrice: 50_000, vat: 'AAM' }
241
243
  ```
242
244
 
243
- A nettó ár a B2B számlákhoz, a bruttó ár a B2C számlákhoz való. Az `'AAM'` alanyi adómentes tételt jelöl, a többi áfakódot a [Áfakulcsok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/afakulcsok) oldal sorolja fel.
245
+ A nettó ár a B2B számlákhoz, a bruttó ár a B2C számlákhoz való. Az `'AAM'` alanyi adómentes tételt jelöl, a többi áfakódot a [Áfakulcsok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/afakulcsok) oldal sorolja fel.
244
246
 
245
- 📖 **Dokumentáció:** [Kerekítés](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/kerekites) &nbsp;·&nbsp; ▶️ **Sandbox:** [Webshop számla bruttó árakkal](https://kassza-amber.vercel.app/sandbox?pelda=szamla-brutto)
247
+ 📖 **Dokumentáció:** [Kerekítés](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/kerekites) &nbsp;·&nbsp; ▶️ **Sandbox:** [Webshop számla bruttó árakkal](https://kasszajs.hu/sandbox?pelda=szamla-brutto)
246
248
 
247
249
  </details>
248
250
 
@@ -266,7 +268,7 @@ const szamla = await kassza.invoices.create({
266
268
  })
267
269
  ```
268
270
 
269
- 📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Díjbekérő, majd számla](https://kassza-amber.vercel.app/sandbox?pelda=dijbekero-szamla)
271
+ 📖 **Dokumentáció:** [Bizonylattípusok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Díjbekérő, majd számla](https://kasszajs.hu/sandbox?pelda=dijbekero-szamla)
270
272
 
271
273
  </details>
272
274
 
@@ -277,7 +279,7 @@ const szamla = await kassza.invoices.create({
277
279
  await kassza.invoices.deleteProforma({ orderNumber: 'NEV-42' })
278
280
  ```
279
281
 
280
- 📖 **Dokumentáció:** [Díjbekérő törlése](https://kassza-amber.vercel.app/docs/dijbekero-torlese) &nbsp;·&nbsp; ▶️ **Sandbox:** [Díjbekérő törlése](https://kassza-amber.vercel.app/sandbox?pelda=dijbekero-torlese)
282
+ 📖 **Dokumentáció:** [Díjbekérő törlése](https://kasszajs.hu/docs/dijbekero-torlese) &nbsp;·&nbsp; ▶️ **Sandbox:** [Díjbekérő törlése](https://kasszajs.hu/sandbox?pelda=dijbekero-torlese)
281
283
 
282
284
  </details>
283
285
 
@@ -304,7 +306,7 @@ await kassza.invoices.create({
304
306
  })
305
307
  ```
306
308
 
307
- 📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Előleg- és végszámla](https://kassza-amber.vercel.app/sandbox?pelda=eloleg-vegszamla)
309
+ 📖 **Dokumentáció:** [Bizonylattípusok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Előleg- és végszámla](https://kasszajs.hu/sandbox?pelda=eloleg-vegszamla)
308
310
 
309
311
  </details>
310
312
 
@@ -320,7 +322,7 @@ await kassza.invoices.create({
320
322
  })
321
323
  ```
322
324
 
323
- 📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Helyesbítő számla](https://kassza-amber.vercel.app/sandbox?pelda=helyesbito-szamla)
325
+ 📖 **Dokumentáció:** [Bizonylattípusok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Helyesbítő számla](https://kasszajs.hu/sandbox?pelda=helyesbito-szamla)
324
326
 
325
327
  </details>
326
328
 
@@ -331,7 +333,7 @@ await kassza.invoices.create({
331
333
  await kassza.invoices.create({ type: 'deliveryNote', buyer, items })
332
334
  ```
333
335
 
334
- 📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok)
336
+ 📖 **Dokumentáció:** [Bizonylattípusok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok)
335
337
 
336
338
  </details>
337
339
 
@@ -355,9 +357,9 @@ await kassza.invoices.create({
355
357
  })
356
358
  ```
357
359
 
358
- Az árfolyam, ha nem adod meg, automatikusan az MNB aktuális árfolyama. Kész minta: [Devizás számla EU-s cégnek](https://kassza-amber.vercel.app/docs/receptek/devizas-eu-szamla).
360
+ Az árfolyam, ha nem adod meg, automatikusan az MNB aktuális árfolyama. Kész minta: [Devizás számla EU-s cégnek](https://kasszajs.hu/docs/receptek/devizas-eu-szamla).
359
361
 
360
- 📖 **Dokumentáció:** [Támogatott devizanemek](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/penznemek) &nbsp;·&nbsp; ▶️ **Sandbox:** [Devizás számla EU-s vevőnek](https://kassza-amber.vercel.app/sandbox?pelda=devizas-szamla)
362
+ 📖 **Dokumentáció:** [Támogatott devizanemek](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/penznemek) &nbsp;·&nbsp; ▶️ **Sandbox:** [Devizás számla EU-s vevőnek](https://kasszajs.hu/sandbox?pelda=devizas-szamla)
361
363
 
362
364
  </details>
363
365
 
@@ -368,7 +370,7 @@ Az árfolyam, ha nem adod meg, automatikusan az MNB aktuális árfolyama. Kész
368
370
  const { pdf, grossTotal } = await kassza.invoices.preview({ buyer, items })
369
371
  ```
370
372
 
371
- 📖 **Dokumentáció:** [Előnézet](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/elonezet) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számlaelőnézet](https://kassza-amber.vercel.app/sandbox?pelda=elonezet)
373
+ 📖 **Dokumentáció:** [Előnézet](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/elonezet) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számlaelőnézet](https://kasszajs.hu/sandbox?pelda=elonezet)
372
374
 
373
375
  </details>
374
376
 
@@ -385,7 +387,7 @@ await kassza.invoices.create({
385
387
 
386
388
  Legfeljebb 5 melléklet adható meg, darabonként 2 MB.
387
389
 
388
- 📖 **Dokumentáció:** [Számlaértesítő küldés](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/ertesito-email)
390
+ 📖 **Dokumentáció:** [Számlaértesítő küldés](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/ertesito-email)
389
391
 
390
392
  </details>
391
393
 
@@ -396,7 +398,7 @@ Legfeljebb 5 melléklet adható meg, darabonként 2 MB.
396
398
  const sztorno = await kassza.invoices.reverse('E-WEB-2026-12')
397
399
  ```
398
400
 
399
- 📖 **Dokumentáció:** [Számla sztornó](https://kassza-amber.vercel.app/docs/szamla-sztorno) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számla sztornózása](https://kassza-amber.vercel.app/sandbox?pelda=sztorno)
401
+ 📖 **Dokumentáció:** [Számla sztornó](https://kasszajs.hu/docs/szamla-sztorno) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számla sztornózása](https://kasszajs.hu/sandbox?pelda=sztorno)
400
402
 
401
403
  </details>
402
404
 
@@ -419,7 +421,7 @@ await kassza.invoices.clearPayments('E-WEB-2026-12')
419
421
 
420
422
  A `registerPayment` egyetlen befizetést és több részletet is fogad. A `clearPayments` az összes befizetést törli a számláról.
421
423
 
422
- 📖 **Dokumentáció:** [Befizetés rögzítése](https://kassza-amber.vercel.app/docs/befizetes-rogzitese) &nbsp;·&nbsp; ▶️ **Sandbox:** [Befizetések rögzítése](https://kassza-amber.vercel.app/sandbox?pelda=befizetes)
424
+ 📖 **Dokumentáció:** [Befizetés rögzítése](https://kasszajs.hu/docs/befizetes-rogzitese) &nbsp;·&nbsp; ▶️ **Sandbox:** [Befizetések rögzítése](https://kasszajs.hu/sandbox?pelda=befizetes)
423
425
 
424
426
  </details>
425
427
 
@@ -435,7 +437,7 @@ await writeFile('szamla.pdf', pdf)
435
437
 
436
438
  Rendelésszám vagy külső azonosító alapján is működik: `getPdf({ orderNumber: 'REND-1001' })`, `getPdf({ externalId: 'a1b2' })`.
437
439
 
438
- 📖 **Dokumentáció:** [Bizonylat lekérése PDF-ben](https://kassza-amber.vercel.app/docs/bizonylat-pdf) &nbsp;·&nbsp; ▶️ **Sandbox:** [PDF lekérése utólag](https://kassza-amber.vercel.app/sandbox?pelda=pdf-lekeres)
440
+ 📖 **Dokumentáció:** [Bizonylat lekérése PDF-ben](https://kasszajs.hu/docs/bizonylat-pdf) &nbsp;·&nbsp; ▶️ **Sandbox:** [PDF lekérése utólag](https://kasszajs.hu/sandbox?pelda=pdf-lekeres)
439
441
 
440
442
  </details>
441
443
 
@@ -454,19 +456,19 @@ const talan = await kassza.invoices.find({ orderNumber: 'REND-9999' })
454
456
 
455
457
  A `find` `null`-t ad, ha nincs ilyen számla, a `get` ilyenkor hibát dob.
456
458
 
457
- 📖 **Dokumentáció:** [Számla adatainak lekérése](https://kassza-amber.vercel.app/docs/szamla-adatai) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számla adatainak lekérése](https://kassza-amber.vercel.app/sandbox?pelda=szamla-adatai)
459
+ 📖 **Dokumentáció:** [Számla adatainak lekérése](https://kasszajs.hu/docs/szamla-adatai) &nbsp;·&nbsp; ▶️ **Sandbox:** [Számla adatainak lekérése](https://kasszajs.hu/sandbox?pelda=szamla-adatai)
458
460
 
459
461
  </details>
460
462
 
461
463
  <p>
462
- <a href="https://kassza-amber.vercel.app/docs/szamla-letrehozas"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Számla létrehozás" height="44"></picture></a>
463
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Számla kiállítása" height="44"></picture></a>
464
- <a href="https://kassza-amber.vercel.app/docs/receptek/fizetett-rendeles-szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-light.svg" alt="Recept: Fizetett rendelés számlája" height="44"></picture></a>
464
+ <a href="https://kasszajs.hu/docs/szamla-letrehozas"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Számla létrehozás" height="44"></picture></a>
465
+ <a href="https://kasszajs.hu/sandbox?pelda=szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Számla kiállítása" height="44"></picture></a>
466
+ <a href="https://kasszajs.hu/docs/receptek/fizetett-rendeles-szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-light.svg" alt="Recept: Fizetett rendelés számlája" height="44"></picture></a>
465
467
  </p>
466
468
 
467
469
  ## Nyugták
468
470
 
469
- Nyugta kiállítása, kiküldése e-mailben, lekérdezése és sztornózása, forintos kerekítéssel és a dupla nyugta elleni hívásazonosítóval.
471
+ Nyugta kiállítása, kiküldése e-mailben, lekérdezése és sztornózása, forintos kerekítéssel és a dupla nyugta elleni hívásazonosítóval. A Számla Agent nyugtája számítógéppel előállított nyugta, online pénztárgépet nem pótol: csak nem pénztárgép-köteles tevékenységhez adható, például webshopban vagy food truckban. Részletek: [Nyugta vagy számla?](https://kasszajs.hu/docs/alapok/nyugta-vagy-szamla).
470
472
 
471
473
  <details>
472
474
  <summary><b>Nyugta</b> · <code>receipts.create()</code></summary>
@@ -489,7 +491,7 @@ nyugta.pdf
489
491
 
490
492
  A `callId` véd a dupla nyugta ellen.
491
493
 
492
- 📖 **Dokumentáció:** [Nyugta létrehozás](https://kassza-amber.vercel.app/docs/nyugta-letrehozas) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta kiállítása](https://kassza-amber.vercel.app/sandbox?pelda=nyugta)
494
+ 📖 **Dokumentáció:** [Nyugta létrehozás](https://kasszajs.hu/docs/nyugta-letrehozas) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta kiállítása](https://kasszajs.hu/sandbox?pelda=nyugta)
493
495
 
494
496
  </details>
495
497
 
@@ -500,7 +502,7 @@ A `callId` véd a dupla nyugta ellen.
500
502
  await kassza.receipts.send({ receiptNumber: nyugta.number, emails: 'vevo@ceg.hu' })
501
503
  ```
502
504
 
503
- 📖 **Dokumentáció:** [Nyugta kiküldés](https://kassza-amber.vercel.app/docs/nyugta-kikuldes) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta kiküldése e-mailben](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-kikuldes)
505
+ 📖 **Dokumentáció:** [Nyugta kiküldés](https://kasszajs.hu/docs/nyugta-kikuldes) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta kiküldése e-mailben](https://kasszajs.hu/sandbox?pelda=nyugta-kikuldes)
504
506
 
505
507
  </details>
506
508
 
@@ -512,7 +514,7 @@ const ugyanaz = await kassza.receipts.get(nyugta.number)
512
514
  const rendelesbol = await kassza.receipts.find({ orderNumber: 'REND-1001' })
513
515
  ```
514
516
 
515
- 📖 **Dokumentáció:** [Nyugta lekérdezés](https://kassza-amber.vercel.app/docs/nyugta-lekerdezes) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta lekérdezése](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-lekerdezes)
517
+ 📖 **Dokumentáció:** [Nyugta lekérdezés](https://kasszajs.hu/docs/nyugta-lekerdezes) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta lekérdezése](https://kasszajs.hu/sandbox?pelda=nyugta-lekerdezes)
516
518
 
517
519
  </details>
518
520
 
@@ -523,14 +525,41 @@ const rendelesbol = await kassza.receipts.find({ orderNumber: 'REND-1001' })
523
525
  await kassza.receipts.reverse(nyugta.number)
524
526
  ```
525
527
 
526
- 📖 **Dokumentáció:** [Nyugta sztornó](https://kassza-amber.vercel.app/docs/nyugta-sztorno) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta sztornózása](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-sztorno)
528
+ 📖 **Dokumentáció:** [Nyugta sztornó](https://kasszajs.hu/docs/nyugta-sztorno) &nbsp;·&nbsp; ▶️ **Sandbox:** [Nyugta sztornózása](https://kasszajs.hu/sandbox?pelda=nyugta-sztorno)
529
+
530
+ </details>
531
+
532
+ <details>
533
+ <summary><b>Nyugta vagy számla?</b> · <code>chooseDocument()</code>, <code>receipts.convertToInvoice()</code></summary>
534
+
535
+ ```ts
536
+ import { chooseDocument } from 'kassza'
537
+
538
+ const dontes = chooseDocument({ grossTotal: 18_990, invoiceRequested: false })
539
+
540
+ dontes.type
541
+ dontes.reasons
542
+ ```
543
+
544
+ Nyugta csak akkor adható, ha a vevő nem adóalany és nem jogi személy, az összeg 900 000 Ft alatti, a teljesítésig kifizetik, és a vevő nem kér számlát. Ha a vevő utólag kér számlát, a `convertToInvoice()` sztornózza a nyugtát, és számlát állít ki helyette, pontosan egyszer:
545
+
546
+ ```ts
547
+ const atalakitas = await kassza.receipts.convertToInvoice({
548
+ receiptNumber: nyugta.number,
549
+ buyer: { name: 'Példa Kft.', zip: '1111', city: 'Budapest', address: 'Fő utca 1.', taxNumber: '12345676-2-42' },
550
+ })
551
+
552
+ atalakitas.invoice.number
553
+ ```
554
+
555
+ 📖 **Dokumentáció:** [Nyugta vagy számla?](https://kasszajs.hu/docs/alapok/nyugta-vagy-szamla)
527
556
 
528
557
  </details>
529
558
 
530
559
  <p>
531
- <a href="https://kassza-amber.vercel.app/docs/nyugta-letrehozas"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Nyugta létrehozás" height="44"></picture></a>
532
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=nyugta"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Nyugta kiállítása" height="44"></picture></a>
533
- <a href="https://kassza-amber.vercel.app/docs/receptek/penztari-nyugta"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-penztari-nyugta-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-penztari-nyugta-light.svg" alt="Recept: Pénztári nyugta" height="44"></picture></a>
560
+ <a href="https://kasszajs.hu/docs/nyugta-letrehozas"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Nyugta létrehozás" height="44"></picture></a>
561
+ <a href="https://kasszajs.hu/sandbox?pelda=nyugta"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Nyugta kiállítása" height="44"></picture></a>
562
+ <a href="https://kasszajs.hu/docs/receptek/penztari-nyugta"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-penztari-nyugta-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-penztari-nyugta-light.svg" alt="Recept: Pénztári nyugta" height="44"></picture></a>
534
563
  </p>
535
564
 
536
565
  ## Adószám lekérdezés
@@ -552,14 +581,14 @@ if (ceg.valid) {
552
581
 
553
582
  A cégadatok a NAV-tól jönnek, a cím formázva, például `1031 Budapest, Záhony utca 7.`
554
583
 
555
- 📖 **Dokumentáció:** [Adószám lekérdezés](https://kassza-amber.vercel.app/docs/adoszam-lekerdezes) &nbsp;·&nbsp; ▶️ **Sandbox:** [Adószám lekérdezése](https://kassza-amber.vercel.app/sandbox?pelda=adoszam)
584
+ 📖 **Dokumentáció:** [Adószám lekérdezés](https://kasszajs.hu/docs/adoszam-lekerdezes) &nbsp;·&nbsp; ▶️ **Sandbox:** [Adószám lekérdezése](https://kasszajs.hu/sandbox?pelda=adoszam)
556
585
 
557
586
  </details>
558
587
 
559
588
  <p>
560
- <a href="https://kassza-amber.vercel.app/docs/adoszam-lekerdezes"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Adószám lekérdezés" height="44"></picture></a>
561
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=adoszam"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Adószám lekérdezése" height="44"></picture></a>
562
- <a href="https://kassza-amber.vercel.app/docs/receptek/adoszam-urlap"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-adoszam-urlap-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-adoszam-urlap-light.svg" alt="Recept: Adószám alapú kitöltés" height="44"></picture></a>
589
+ <a href="https://kasszajs.hu/docs/adoszam-lekerdezes"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Adószám lekérdezés" height="44"></picture></a>
590
+ <a href="https://kasszajs.hu/sandbox?pelda=adoszam"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Adószám lekérdezése" height="44"></picture></a>
591
+ <a href="https://kasszajs.hu/docs/receptek/adoszam-urlap"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-adoszam-urlap-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-adoszam-urlap-light.svg" alt="Recept: Adószám alapú kitöltés" height="44"></picture></a>
563
592
  </p>
564
593
 
565
594
  ## Hibakezelés
@@ -586,7 +615,7 @@ try {
586
615
  - `error.code`: a Számlázz.hu hibakódja, például `57`.
587
616
  - `error.hint`: magyar javítási tipp.
588
617
 
589
- 📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kassza-amber.vercel.app/docs/alapok/hibakezeles) &nbsp;·&nbsp; ▶️ **Sandbox:** [Idempotens számlázás hiba után](https://kassza-amber.vercel.app/sandbox?pelda=hibakezeles-idempotens)
618
+ 📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kasszajs.hu/docs/alapok/hibakezeles) &nbsp;·&nbsp; ▶️ **Sandbox:** [Idempotens számlázás hiba után](https://kasszajs.hu/sandbox?pelda=hibakezeles-idempotens)
590
619
 
591
620
  </details>
592
621
 
@@ -601,17 +630,37 @@ try {
601
630
  | `not_found` | Nincs ilyen bizonylat |
602
631
  | `auth` / `account` | Rossz kulcs, lejárt előfizetés |
603
632
  | `network` / `timeout` / `maintenance` | Átmeneti hiba |
633
+ | `rate_limit` | A tesztfiókban túl sok bizonylat készült rövid idő alatt (167) |
634
+ | `attempt_limit` | Ezt a kérést már ötször sikertelenül küldték el, ezért a kassza el sem küldi |
604
635
 
605
- 📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kassza-amber.vercel.app/docs/alapok/hibakezeles) &nbsp;·&nbsp; ▶️ **Sandbox:** [Validációs hibák](https://kassza-amber.vercel.app/sandbox?pelda=hibakezeles-validacio)
636
+ 📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kasszajs.hu/docs/alapok/hibakezeles) &nbsp;·&nbsp; ▶️ **Sandbox:** [Validációs hibák](https://kasszajs.hu/sandbox?pelda=hibakezeles-validacio)
606
637
 
607
638
  </details>
608
639
 
609
- > **Számlát a kassza soha nem küld újra.** Újraküldés csak ott történik magától, ahol biztonságos: lekérdezéseknél, hálózati hibánál, legfeljebb 5-ször. A Számlázz.hu kitiltja azt, aki ciklusban próbálkozik. Bizonytalan hiba után a `find({ orderNumber })` megmondja, elkészült-e a számla.
640
+ <details>
641
+ <summary><b>Pontosan egyszer</b> · <code>invoices.createOnce()</code>, <code>receipts.createOnce()</code></summary>
642
+
643
+ ```ts
644
+ const { number, created } = await kassza.invoices.createOnce({
645
+ orderNumber: 'REND-1001',
646
+ paid: true,
647
+ buyer,
648
+ items,
649
+ })
650
+ ```
651
+
652
+ Kiállítás előtt megkeresi a számlát, hálózati hiba, időtúllépés vagy 56-os hiba után pedig visszakeresi. Ha a webhook kétszer fut le, a második hívás `created: false` eredménnyel a meglévő számlát adja. Ha ugyanazt a kérést több szerver is küldheti, az `attemptLedger` opció a folyamatok között is betartja az öt próbálkozásos korlátot.
653
+
654
+ 📖 **Dokumentáció:** [Pontosan egyszer](https://kasszajs.hu/docs/alapok/pontosan-egyszer) &nbsp;·&nbsp; ▶️ **Sandbox:** [Pénztári nyugta, dupla gombnyomás](https://kasszajs.hu/sandbox?pelda=penztari-nyugta)
655
+
656
+ </details>
657
+
658
+ > **Számlát a kassza soha nem küld újra.** Újraküldés csak ott történik magától, ahol biztonságos: lekérdezéseknél, hálózati hibánál, legfeljebb 5-ször. A Számlázz.hu kitiltja azt, aki ciklusban próbálkozik. Bizonytalan hiba után a `find({ orderNumber })` megmondja, elkészült-e a számla, a `createOnce()` pedig ezt el is végzi helyetted.
610
659
 
611
660
  <p>
612
- <a href="https://kassza-amber.vercel.app/docs/alapok/hibakezeles"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Hibakezelés, hibakódok" height="44"></picture></a>
613
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=hibakezeles-idempotens"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Idempotens számlázás hiba után" height="44"></picture></a>
614
- <a href="https://kassza-amber.vercel.app/docs/receptek/fizetett-rendeles-szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-light.svg" alt="Recept: Fizetett rendelés számlája" height="44"></picture></a>
661
+ <a href="https://kasszajs.hu/docs/alapok/hibakezeles"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Hibakezelés, hibakódok" height="44"></picture></a>
662
+ <a href="https://kasszajs.hu/sandbox?pelda=hibakezeles-idempotens"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Idempotens számlázás hiba után" height="44"></picture></a>
663
+ <a href="https://kasszajs.hu/docs/receptek/fizetett-rendeles-szamla"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-fizetett-rendeles-szamla-light.svg" alt="Recept: Fizetett rendelés számlája" height="44"></picture></a>
615
664
  </p>
616
665
 
617
666
  ## Fizetési értesítés (IPN)
@@ -633,7 +682,7 @@ export async function POST(request: Request) {
633
682
  }
634
683
  ```
635
684
 
636
- 📖 **Dokumentáció:** [IPN fizetési értesítés](https://kassza-amber.vercel.app/docs/befizetes-rogzitese/ipn) &nbsp;·&nbsp; ▶️ **Sandbox:** [IPN fizetési értesítés](https://kassza-amber.vercel.app/sandbox?pelda=ipn)
685
+ 📖 **Dokumentáció:** [IPN fizetési értesítés](https://kasszajs.hu/docs/befizetes-rogzitese/ipn) &nbsp;·&nbsp; ▶️ **Sandbox:** [IPN fizetési értesítés](https://kasszajs.hu/sandbox?pelda=ipn)
637
686
 
638
687
  </details>
639
688
 
@@ -650,14 +699,145 @@ isSzamlazzIp(request.headers.get('x-forwarded-for'))
650
699
 
651
700
  Az `x-forwarded-for` fejlécből a **jobb szélső** címet vizsgálja, vagyis azt, amit a hozzád legközelebbi proxy látott, mert a fejléc bal oldalát a kliens is írhatja. Ha több megbízható proxy van előtted, add meg a számukat: `isSzamlazzIp(fejlec, { trustedProxies: 1 })`.
652
701
 
653
- 📖 **Dokumentáció:** [IPN fizetési értesítés](https://kassza-amber.vercel.app/docs/befizetes-rogzitese/ipn)
702
+ 📖 **Dokumentáció:** [IPN fizetési értesítés](https://kasszajs.hu/docs/befizetes-rogzitese/ipn)
703
+
704
+ </details>
705
+
706
+ <p>
707
+ <a href="https://kasszajs.hu/docs/befizetes-rogzitese/ipn"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: IPN fizetési értesítés" height="44"></picture></a>
708
+ <a href="https://kasszajs.hu/sandbox?pelda=ipn"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: IPN fizetési értesítés" height="44"></picture></a>
709
+ <a href="https://kasszajs.hu/docs/receptek/ipn-webhook"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-ipn-webhook-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-ipn-webhook-light.svg" alt="Recept: IPN webhook" height="44"></picture></a>
710
+ </p>
711
+
712
+ ## Fizetésből bizonylat
713
+
714
+ Stripe, SimplePay, Barion, Revolut vagy PayPal fizetésből nyugta vagy számla, a szolgáltató SDK-ja nélkül. A webhookkezelő ellenőrzi az aláírást, az `issueForPayment()` pedig eldönti, hogy nyugta vagy számla jár, és pontosan egyszer kiállítja.
715
+
716
+ <details>
717
+ <summary><b>Stripe webhook</b> · <code>stripeWebhook()</code>, <code>issueForPayment()</code></summary>
718
+
719
+ ```ts
720
+ import { stripeWebhook } from 'kassza/payments/stripe'
721
+
722
+ export const POST = stripeWebhook({
723
+ secret: process.env.STRIPE_WEBHOOK_SECRET!,
724
+ apiKey: process.env.STRIPE_SECRET_KEY,
725
+ onPayment: (payment) => kassza.issueForPayment(payment, { vat: 27 }),
726
+ })
727
+ ```
728
+
729
+ - Az újraküldött webhook nem állít ki második bizonylatot.
730
+ - Teljes visszatérítéskor a kassza sztornózza a bizonylatot.
731
+ - Ugyanígy működik a `simplePayWebhook`, a `barionWebhook`, a `revolutWebhook` és a `payPalWebhook`.
732
+
733
+ 📖 **Dokumentáció:** [Fizetésből bizonylat](https://kasszajs.hu/docs/fizetesek)
654
734
 
655
735
  </details>
656
736
 
657
737
  <p>
658
- <a href="https://kassza-amber.vercel.app/docs/befizetes-rogzitese/ipn"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: IPN fizetési értesítés" height="44"></picture></a>
659
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=ipn"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: IPN fizetési értesítés" height="44"></picture></a>
660
- <a href="https://kassza-amber.vercel.app/docs/receptek/ipn-webhook"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-ipn-webhook-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-ipn-webhook-light.svg" alt="Recept: IPN webhook" height="44"></picture></a>
738
+ <a href="https://kasszajs.hu/docs/fizetesek"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Fizetésből bizonylat" height="44"></picture></a>
739
+ <a href="https://kasszajs.hu/docs/receptek/stripe-webhook"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-stripe-webhook-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-stripe-webhook-light.svg" alt="Recept: Stripe webhook" height="44"></picture></a>
740
+ </p>
741
+
742
+ ## NAV nyugta-adatszolgáltatás
743
+
744
+ 2026. szeptember 1-jétől a számítógéppel előállított nyugtákról is napi összesítőt kell küldeni a NAV-nak. A Számlázz.hu a nála kiállított nyugtákat a NAV összekötés után maga jelenti, a kassza abban segít, hogy ellenőrizd: minden napod megérkezett.
745
+
746
+ <details>
747
+ <summary><b>Napi összesítő és egyeztetés</b> · <code>navDailyReports()</code>, <code>reconcileNavReports()</code></summary>
748
+
749
+ ```ts
750
+ import { createNavReceiptClient, reconcileNavReports } from 'kassza/nav'
751
+ import { navDailyReports } from 'kassza/reports'
752
+
753
+ const nav = createNavReceiptClient({
754
+ environment: 'production',
755
+ login: process.env.NAV_LOGIN!,
756
+ password: process.env.NAV_PASSWORD!,
757
+ signatureKey: process.env.NAV_SIGNATURE_KEY!,
758
+ taxNumber: process.env.NAV_TAX_NUMBER!,
759
+ })
760
+
761
+ const helyi = navDailyReports(nyugtak)
762
+ const nalNav = await nav.listAllReports({ from: '2026-09-01', to: '2026-09-30' })
763
+ const { missing, mismatched } = reconcileNavReports(helyi, nalNav)
764
+ ```
765
+
766
+ A NAV kliens alapból csak olvas: a Számlázz.hu által jelentett nyugtákat ne küldd be te is, mert az kettős adatszolgáltatás. Beküldeni csak a kézi tartalék nyugtatömb összesítőjét kell (`paperReceiptReport()`).
767
+
768
+ 📖 **Dokumentáció:** [NAV nyugta-adatszolgáltatás](https://kasszajs.hu/docs/nav-nyugta)
769
+
770
+ </details>
771
+
772
+ <p>
773
+ <a href="https://kasszajs.hu/docs/nav-nyugta"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: NAV nyugta-adatszolgáltatás" height="44"></picture></a>
774
+ </p>
775
+
776
+ ## Megbízotti számlázás
777
+
778
+ Platformoknak, amelyek sok cég nevében állítanak ki bizonylatot, a cégek saját Számlázz.hu fiókjában.
779
+
780
+ <details>
781
+ <summary><b>Csatlakozás és kliens megbízónként</b> · <code>connectPrincipal()</code>, <code>createKasszaPool()</code></summary>
782
+
783
+ ```ts
784
+ import { connectPrincipal, createKasszaPool } from 'kassza/delegation'
785
+
786
+ const { status } = await connectPrincipal({
787
+ principal: {
788
+ name: 'Példa Kft.',
789
+ taxNumber: '12345676-2-42',
790
+ invoicePrefix: 'PLDA',
791
+ zip: '1111',
792
+ city: 'Budapest',
793
+ address: 'Fő utca 1.',
794
+ email: 'penzugy@pelda.hu',
795
+ },
796
+ user: { email: 'kassza+pelda@platform.hu', password: process.env.DELEGATE_PASSWORD!, firstName: 'Platform' },
797
+ })
798
+
799
+ const pool = createKasszaPool({ resolve: (megbizoId) => megbizoAdatai(megbizoId) })
800
+ const kliens = await pool.get('pelda')
801
+ await kliens.invoices.createOnce({ orderNumber: 'FOGLALAS-881', buyer, items })
802
+ ```
803
+
804
+ A megbízó e-mailt kap, és a fiók birtokba vétele vagy a csatlakozási kérelem elfogadása után lehet a nevében kiállítani.
805
+
806
+ 📖 **Dokumentáció:** [Megbízotti számlázás](https://kasszajs.hu/docs/megbizott-szamlazas)
807
+
808
+ </details>
809
+
810
+ <p>
811
+ <a href="https://kasszajs.hu/docs/megbizott-szamlazas"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Megbízotti számlázás" height="44"></picture></a>
812
+ </p>
813
+
814
+ ## Pénzügyi adatkapcsolat
815
+
816
+ Könyvelő- és ERP-rendszereknek: a Számlázz.hu átküldi a kiállított és befogadott számlákat, a banki tranzakciókat és a nyugtákat.
817
+
818
+ <details>
819
+ <summary><b>Fogadó végpont</b> · <code>dataLinkHandler()</code></summary>
820
+
821
+ ```ts
822
+ import { dataLinkHandler } from 'kassza/data-link'
823
+
824
+ export const POST = dataLinkHandler({
825
+ verifyKey: async (kulcs) => (await ugyfelKulcsai()).includes(kulcs),
826
+ onPush: async (push) => {
827
+ const iktatoszam = await bizonylatMentese(push)
828
+ return { registrationNumber: iktatoszam }
829
+ },
830
+ })
831
+ ```
832
+
833
+ A kulcs ellenőrzése kötelező, mert az üzeneteknek nincs aláírása. A Számlázz.hu által elvárt válasz XML-t a kezelő készíti el.
834
+
835
+ 📖 **Dokumentáció:** [Pénzügyi adatkapcsolat](https://kasszajs.hu/docs/adatkapcsolat)
836
+
837
+ </details>
838
+
839
+ <p>
840
+ <a href="https://kasszajs.hu/docs/adatkapcsolat"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Pénzügyi adatkapcsolat" height="44"></picture></a>
661
841
  </p>
662
842
 
663
843
  ## PDF mentése tárhelyre
@@ -686,7 +866,7 @@ fajl.key
686
866
 
687
867
  A kulcs például `szamlak/2026/09/E-WEB-2026-12.pdf` lesz.
688
868
 
689
- 📖 **Dokumentáció:** [PDF tárhely](https://kassza-amber.vercel.app/docs/kiegeszitok/pdf-tarhely) &nbsp;·&nbsp; ▶️ **Sandbox:** [PDF mentése tárhelyre](https://kassza-amber.vercel.app/sandbox?pelda=pdf-tarhely)
869
+ 📖 **Dokumentáció:** [PDF tárhely](https://kasszajs.hu/docs/kiegeszitok/pdf-tarhely) &nbsp;·&nbsp; ▶️ **Sandbox:** [PDF mentése tárhelyre](https://kasszajs.hu/sandbox?pelda=pdf-tarhely)
690
870
 
691
871
  </details>
692
872
 
@@ -699,16 +879,16 @@ import { fsStorage } from 'kassza/storage/fs'
699
879
  const tarhely = fsStorage({ directory: './szamlak' })
700
880
  ```
701
881
 
702
- 📖 **Dokumentáció:** [PDF tárhely](https://kassza-amber.vercel.app/docs/kiegeszitok/pdf-tarhely)
882
+ 📖 **Dokumentáció:** [PDF tárhely](https://kasszajs.hu/docs/kiegeszitok/pdf-tarhely)
703
883
 
704
884
  </details>
705
885
 
706
886
  További adapterek: `s3Storage` (AWS SDK), `r2BindingStorage`, `vercelBlobStorage`, `uploadthingStorage`, `supabaseStorage`, `memoryStorage`.
707
887
 
708
888
  <p>
709
- <a href="https://kassza-amber.vercel.app/docs/kiegeszitok/pdf-tarhely"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: PDF tárhely" height="44"></picture></a>
710
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=pdf-tarhely"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: PDF mentése tárhelyre" height="44"></picture></a>
711
- <a href="https://kassza-amber.vercel.app/docs/receptek/pdf-mentes-s3-r2"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-pdf-mentes-s3-r2-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-pdf-mentes-s3-r2-light.svg" alt="Recept: PDF mentése S3-ba vagy R2-be" height="44"></picture></a>
889
+ <a href="https://kasszajs.hu/docs/kiegeszitok/pdf-tarhely"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: PDF tárhely" height="44"></picture></a>
890
+ <a href="https://kasszajs.hu/sandbox?pelda=pdf-tarhely"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: PDF mentése tárhelyre" height="44"></picture></a>
891
+ <a href="https://kasszajs.hu/docs/receptek/pdf-mentes-s3-r2"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-pdf-mentes-s3-r2-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-pdf-mentes-s3-r2-light.svg" alt="Recept: PDF mentése S3-ba vagy R2-be" height="44"></picture></a>
712
892
  </p>
713
893
 
714
894
  ## Serverless és edge
@@ -725,7 +905,7 @@ import { upstashRedisCookieStore } from 'kassza/cookie-stores'
725
905
  const kassza = createKassza({ cookieStore: upstashRedisCookieStore(Redis.fromEnv()) })
726
906
  ```
727
907
 
728
- 📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kassza-amber.vercel.app/docs/alapok/munkamenet) &nbsp;·&nbsp; ▶️ **Sandbox:** [Közös session több kliens között](https://kassza-amber.vercel.app/sandbox?pelda=munkamenet)
908
+ 📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kasszajs.hu/docs/alapok/munkamenet) &nbsp;·&nbsp; ▶️ **Sandbox:** [Közös session több kliens között](https://kasszajs.hu/sandbox?pelda=munkamenet)
729
909
 
730
910
  </details>
731
911
 
@@ -738,16 +918,16 @@ import { cloudflareKvCookieStore } from 'kassza/cookie-stores'
738
918
  const kassza = createKassza({ agentKey: env.SZAMLAZZ_AGENT_KEY, cookieStore: cloudflareKvCookieStore(env.KASSZA_KV) })
739
919
  ```
740
920
 
741
- 📖 **Dokumentáció:** [Serverless és edge](https://kassza-amber.vercel.app/docs/kiegeszitok/serverless-es-edge)
921
+ 📖 **Dokumentáció:** [Serverless és edge](https://kasszajs.hu/docs/kiegeszitok/serverless-es-edge)
742
922
 
743
923
  </details>
744
924
 
745
925
  Van még `ioredisCookieStore`, `nodeRedisCookieStore` és `customCookieStore` is. Ha a tároló elérhetetlen, a számlázás attól még működik.
746
926
 
747
927
  <p>
748
- <a href="https://kassza-amber.vercel.app/docs/kiegeszitok/serverless-es-edge"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Serverless és edge" height="44"></picture></a>
749
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=munkamenet"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Közös session több kliens között" height="44"></picture></a>
750
- <a href="https://kassza-amber.vercel.app/docs/receptek/cloudflare-workers"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-cloudflare-workers-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-cloudflare-workers-light.svg" alt="Recept: Cloudflare Workers" height="44"></picture></a>
928
+ <a href="https://kasszajs.hu/docs/kiegeszitok/serverless-es-edge"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Serverless és edge" height="44"></picture></a>
929
+ <a href="https://kasszajs.hu/sandbox?pelda=munkamenet"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Közös session több kliens között" height="44"></picture></a>
930
+ <a href="https://kasszajs.hu/docs/receptek/cloudflare-workers"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-cloudflare-workers-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-cloudflare-workers-light.svg" alt="Recept: Cloudflare Workers" height="44"></picture></a>
751
931
  </p>
752
932
 
753
933
  ## Tesztelés
@@ -777,14 +957,36 @@ test('hálózati hibánál nem számláz kétszer', async () => {
777
957
  })
778
958
  ```
779
959
 
780
- 📖 **Dokumentáció:** [Tesztelés](https://kassza-amber.vercel.app/docs/kiegeszitok/teszteles) &nbsp;·&nbsp; ▶️ **Sandbox:** [Mock kliens tesztekhez](https://kassza-amber.vercel.app/sandbox?pelda=mock-kliens)
960
+ 📖 **Dokumentáció:** [Tesztelés](https://kasszajs.hu/docs/kiegeszitok/teszteles) &nbsp;·&nbsp; ▶️ **Sandbox:** [Mock kliens tesztekhez](https://kasszajs.hu/sandbox?pelda=mock-kliens)
961
+
962
+ </details>
963
+
964
+ <details>
965
+ <summary><b>Hamis Számla Agent</b> · <code>createFakeAgentFetch()</code></summary>
966
+
967
+ ```ts
968
+ import { createFakeAgentFetch } from 'kassza/testing'
969
+
970
+ const agent = createFakeAgentFetch()
971
+ const kassza = createKassza({ agentKey: 'teszt-kulcs', fetch: agent.fetch, retryDelayMs: 0 })
972
+
973
+ agent.fail('ghostSuccess', { action: 'createInvoice' })
974
+ const eredmeny = await kassza.invoices.createOnce({ orderNumber: 'WEB-1', buyer, items })
975
+
976
+ eredmeny.created
977
+ agent.invoices.size
978
+ ```
979
+
980
+ A valódi kliens fut, csak a Számlázz.hu helyett egy memóriában futó hamis Agent válaszol. Elveszett választ, karbantartást, részleges sikert és a Számlázz.hu hibakódjait is szimulálja.
981
+
982
+ 📖 **Dokumentáció:** [Hamis Számla Agent](https://kasszajs.hu/docs/kiegeszitok/hamis-agent)
781
983
 
782
984
  </details>
783
985
 
784
986
  <p>
785
- <a href="https://kassza-amber.vercel.app/docs/kiegeszitok/teszteles"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Tesztelés" height="44"></picture></a>
786
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=mock-kliens"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Mock kliens tesztekhez" height="44"></picture></a>
787
- <a href="https://kassza-amber.vercel.app/docs/receptek/egysegtesztek"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-egysegtesztek-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-egysegtesztek-light.svg" alt="Recept: Egységtesztek" height="44"></picture></a>
987
+ <a href="https://kasszajs.hu/docs/kiegeszitok/teszteles"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Tesztelés" height="44"></picture></a>
988
+ <a href="https://kasszajs.hu/sandbox?pelda=mock-kliens"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Mock kliens tesztekhez" height="44"></picture></a>
989
+ <a href="https://kasszajs.hu/docs/receptek/egysegtesztek"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-egysegtesztek-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-recipe-egysegtesztek-light.svg" alt="Recept: Egységtesztek" height="44"></picture></a>
788
990
  </p>
789
991
 
790
992
  ## Validátorok és pénzszámítás
@@ -808,7 +1010,7 @@ parseHungarianAddress('1031 Budapest, Záhony utca 7.')
808
1010
 
809
1011
  A `parseHungarianAddress` eredménye `{ zip: '1031', city: 'Budapest', address: 'Záhony utca 7.' }`. Ezen kívül van `isValidHungarianIban`, `isValidHungarianZipCode`, `isValidEuVatNumber` és `isValidEmail` is.
810
1012
 
811
- 📖 **Dokumentáció:** [Validátorok](https://kassza-amber.vercel.app/docs/kiegeszitok/validatorok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Validátorok](https://kassza-amber.vercel.app/sandbox?pelda=validatorok)
1013
+ 📖 **Dokumentáció:** [Validátorok](https://kasszajs.hu/docs/kiegeszitok/validatorok) &nbsp;·&nbsp; ▶️ **Sandbox:** [Validátorok](https://kasszajs.hu/sandbox?pelda=validatorok)
812
1014
 
813
1015
  </details>
814
1016
 
@@ -824,13 +1026,13 @@ calculateReceiptItem({ grossUnitPrice: 1_000, vat: 27 })
824
1026
 
825
1027
  Az első eredménye `{ netAmount: 1181, vatAmount: 319, grossAmount: 1500, ... }`, a másodiké `{ netAmount: 787.4, vatAmount: 212.6, grossAmount: 1000, ... }`.
826
1028
 
827
- 📖 **Dokumentáció:** [Pénzszámítás](https://kassza-amber.vercel.app/docs/kiegeszitok/penzszamitas) &nbsp;·&nbsp; ▶️ **Sandbox:** [Kerekítés és összegzés](https://kassza-amber.vercel.app/sandbox?pelda=kerekites)
1029
+ 📖 **Dokumentáció:** [Pénzszámítás](https://kasszajs.hu/docs/kiegeszitok/penzszamitas) &nbsp;·&nbsp; ▶️ **Sandbox:** [Kerekítés és összegzés](https://kasszajs.hu/sandbox?pelda=kerekites)
828
1030
 
829
1031
  </details>
830
1032
 
831
1033
  <p>
832
- <a href="https://kassza-amber.vercel.app/docs/kiegeszitok"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Kiegészítők" height="44"></picture></a>
833
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=validatorok"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Validátorok" height="44"></picture></a>
1034
+ <a href="https://kasszajs.hu/docs/kiegeszitok"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Kiegészítők" height="44"></picture></a>
1035
+ <a href="https://kasszajs.hu/sandbox?pelda=validatorok"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Validátorok" height="44"></picture></a>
834
1036
  </p>
835
1037
 
836
1038
  ## Haladó beállítások
@@ -857,7 +1059,7 @@ await kassza.invoices.getPdf('E-WEB-2026-12', { signal: AbortSignal.timeout(5_00
857
1059
  - A hookok soha nem kapják meg az Agent kulcsot.
858
1060
  - Minden metódus fogad `AbortSignal`-t.
859
1061
 
860
- 📖 **Dokumentáció:** [Hálózat és biztonság](https://kassza-amber.vercel.app/docs/alapok/halozat-es-biztonsag) &nbsp;·&nbsp; ▶️ **Sandbox:** [Hookok és újrapróbálás](https://kassza-amber.vercel.app/sandbox?pelda=hookok)
1062
+ 📖 **Dokumentáció:** [Hálózat és biztonság](https://kasszajs.hu/docs/alapok/halozat-es-biztonsag) &nbsp;·&nbsp; ▶️ **Sandbox:** [Hookok és újrapróbálás](https://kasszajs.hu/sandbox?pelda=hookok)
861
1063
 
862
1064
  </details>
863
1065
 
@@ -870,13 +1072,76 @@ A `resetSession()` új sessiont kér. Hívd meg, ha a Számlázz.hu fiókban meg
870
1072
  await kassza.resetSession()
871
1073
  ```
872
1074
 
873
- 📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kassza-amber.vercel.app/docs/alapok/munkamenet) &nbsp;·&nbsp; ▶️ **Sandbox:** [Közös session több kliens között](https://kassza-amber.vercel.app/sandbox?pelda=munkamenet)
1075
+ 📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kasszajs.hu/docs/alapok/munkamenet) &nbsp;·&nbsp; ▶️ **Sandbox:** [Közös session több kliens között](https://kasszajs.hu/sandbox?pelda=munkamenet)
1076
+
1077
+ </details>
1078
+
1079
+ <details>
1080
+ <summary><b>Bizonylat-események és karbantartási szünet</b> · <code>onDocument</code>, <code>maintenanceCooldownMs</code></summary>
1081
+
1082
+ ```ts
1083
+ const kassza = createKassza({
1084
+ maintenanceCooldownMs: 60_000,
1085
+ hooks: {
1086
+ onDocument: async (esemeny) => {
1087
+ await auditNaplo(esemeny.kind, esemeny.action, esemeny.number)
1088
+ },
1089
+ },
1090
+ })
1091
+ ```
1092
+
1093
+ - Az `onDocument` minden kiállított és sztornózott bizonylat, valamint rögzített befizetés után lefut. Ha hibát dob, a bizonylat attól még elkészült.
1094
+ - A `maintenanceCooldownMs` karbantartási hiba után ennyi ideig nem küld kérést, hanem azonnal `maintenance` hibát ad, így átválthatsz tartalék folyamatra.
1095
+
1096
+ 📖 **Dokumentáció:** [Pontosan egyszer](https://kasszajs.hu/docs/alapok/pontosan-egyszer)
1097
+
1098
+ </details>
1099
+
1100
+ <p>
1101
+ <a href="https://kasszajs.hu/docs/alapok/halozat-es-biztonsag"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Hálózat és biztonság" height="44"></picture></a>
1102
+ <a href="https://kasszajs.hu/sandbox?pelda=hookok"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Hookok és újrapróbálás" height="44"></picture></a>
1103
+ </p>
1104
+
1105
+ ## Parancssor és MCP szerver
1106
+
1107
+ <details>
1108
+ <summary><b>Parancssor</b> · <code>npx kassza</code></summary>
1109
+
1110
+ ```bash
1111
+ npx kassza doctor
1112
+ npx kassza xml preview szamla.json
1113
+ npx kassza invoice get --order REND-1001
1114
+ ```
1115
+
1116
+ A `doctor` ellenőrzi a Node.js-t, az Agent kulcsot, a gép óráját és a munkamenetet. Az `xml preview` kiírja a küldendő XML-t az Agent kulcs nélkül, így supportjegyhez is csatolható.
1117
+
1118
+ 📖 **Dokumentáció:** [Parancssor](https://kasszajs.hu/docs/kiegeszitok/parancssor)
1119
+
1120
+ </details>
1121
+
1122
+ <details>
1123
+ <summary><b>MCP szerver</b> · <code>npx kassza mcp</code></summary>
1124
+
1125
+ ```json
1126
+ {
1127
+ "mcpServers": {
1128
+ "kassza": {
1129
+ "command": "npx",
1130
+ "args": ["-y", "kassza", "mcp"],
1131
+ "env": { "SZAMLAZZ_AGENT_KEY": "..." }
1132
+ }
1133
+ }
1134
+ }
1135
+ ```
1136
+
1137
+ Claude, Cursor és más MCP kliensek számára. Alapból csak olvas. Az `--allow-write` kapcsolóval kiállíthat és sztornózhat is, de minden íráshoz kell a megfelelő előnézeti eszköz megerősítő kódja.
1138
+
1139
+ 📖 **Dokumentáció:** [MCP szerver](https://kasszajs.hu/docs/kiegeszitok/mcp-szerver)
874
1140
 
875
1141
  </details>
876
1142
 
877
1143
  <p>
878
- <a href="https://kassza-amber.vercel.app/docs/alapok/halozat-es-biztonsag"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Hálózat és biztonság" height="44"></picture></a>
879
- <a href="https://kassza-amber.vercel.app/sandbox?pelda=hookok"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-sandbox-light.svg" alt="Futtasd a sandboxban: Hookok és újrapróbálás" height="44"></picture></a>
1144
+ <a href="https://kasszajs.hu/docs/kiegeszitok/parancssor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: Parancssor" height="44"></picture></a>
880
1145
  </p>
881
1146
 
882
1147
  ## AI-val kódolsz?
@@ -887,16 +1152,16 @@ A csomagban van egy `agents/` mappa. Ebből a Claude Code, a Cursor, a Copilot
887
1152
 
888
1153
  Claude Code-hoz kész skill is van: másold a `node_modules/kassza/agents/skills/kassza` mappát a projekted `.claude/skills/` mappájába.
889
1154
 
890
- A weboldal is AI-barát: az [llms.txt](https://kassza-amber.vercel.app/llms.txt) a dokumentáció tartalomjegyzéke, az [llms-full.txt](https://kassza-amber.vercel.app/llms-full.txt) a teljes dokumentáció egy fájlban, és minden oldal Markdownként is elérhető, ha az URL végére `.md` kerül.
1155
+ A weboldal is AI-barát: az [llms.txt](https://kasszajs.hu/llms.txt) a dokumentáció tartalomjegyzéke, az [llms-full.txt](https://kasszajs.hu/llms-full.txt) a teljes dokumentáció egy fájlban, és minden oldal Markdownként is elérhető, ha az URL végére `.md` kerül.
891
1156
 
892
1157
  <p>
893
- <a href="https://kassza-amber.vercel.app/docs/kiegeszitok/ai-asszisztensek"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: AI asszisztensek" height="44"></picture></a>
1158
+ <a href="https://kasszajs.hu/docs/kiegeszitok/ai-asszisztensek"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/button-docs-light.svg" alt="Dokumentáció: AI asszisztensek" height="44"></picture></a>
894
1159
  </p>
895
1160
 
896
1161
  ---
897
1162
 
898
1163
  <p align="center">
899
- <a href="https://kassza-amber.vercel.app">Weboldal</a> · <a href="https://kassza-amber.vercel.app/docs">Dokumentáció</a> · <a href="https://kassza-amber.vercel.app/sandbox">Sandbox</a> · <a href="https://kassza-amber.vercel.app/docs/receptek">Receptek</a> · <a href="https://www.npmjs.com/package/kassza">npm</a> · <a href="https://github.com/futozs/kassza/blob/main/CHANGELOG.md">Változásnapló</a>
1164
+ <a href="https://kasszajs.hu">Weboldal</a> · <a href="https://kasszajs.hu/docs">Dokumentáció</a> · <a href="https://kasszajs.hu/sandbox">Sandbox</a> · <a href="https://kasszajs.hu/docs/receptek">Receptek</a> · <a href="https://www.npmjs.com/package/kassza">npm</a> · <a href="https://github.com/futozs/kassza/blob/main/CHANGELOG.md">Változásnapló</a>
900
1165
  </p>
901
1166
 
902
1167
  <sub>Nem hivatalos csomag, nem kapcsolódik a KBOSS.hu Kft.-hez (Számlázz.hu). A hivatalos dokumentáció a <a href="https://docs.szamlazz.hu/hu/agent/">docs.szamlazz.hu</a> oldalon érhető el. MIT licenc.</sub>