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.
- package/README.md +376 -111
- package/agents/README.md +20 -5
- package/agents/api.md +165 -2
- package/agents/pitfalls.md +16 -3
- package/agents/recipes.md +215 -45
- package/agents/skills/kassza/SKILL.md +11 -8
- package/dist/cli.cjs +552 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +552 -0
- package/dist/client-6MkeuFqD.d.ts +268 -0
- package/dist/client-B5FryKxJ.d.cts +268 -0
- package/dist/client-C-PdfL_P.cjs +1275 -0
- package/dist/client-CfaS1-Jx.js +1228 -0
- package/dist/context-BxQlIlug.d.ts +425 -0
- package/dist/context-DXNbTPwz.d.cts +425 -0
- package/dist/create-once-Cz621l8r.js +330 -0
- package/dist/create-once-DgMtKKcG.cjs +395 -0
- package/dist/crypto-Dpn4FHQ6.cjs +65 -0
- package/dist/crypto-usDg8L2K.js +36 -0
- package/dist/data-link/index.cjs +232 -0
- package/dist/data-link/index.d.cts +79 -0
- package/dist/data-link/index.d.ts +79 -0
- package/dist/data-link/index.js +224 -0
- package/dist/{dates-DtHzwNU6.d.cts → dates-9zvESP0i.d.cts} +2 -1
- package/dist/{dates-DtHzwNU6.d.ts → dates-9zvESP0i.d.ts} +2 -1
- package/dist/{dates-PPxH0n5H.cjs → dates-CPgBodkP.cjs} +44 -1
- package/dist/{dates-D2XebOIg.js → dates-CXyj7Azy.js} +39 -2
- package/dist/delegation/index.cjs +396 -0
- package/dist/delegation/index.d.cts +100 -0
- package/dist/delegation/index.d.ts +100 -0
- package/dist/delegation/index.js +378 -0
- package/dist/{errors-DapdV5DK.js → errors-DLrb0g64.js} +122 -5
- package/dist/{errors-B0QJhUW1.cjs → errors-DxeuTslP.cjs} +127 -4
- package/dist/get-Byc9T5WO.d.cts +151 -0
- package/dist/get-Byc9T5WO.d.ts +151 -0
- package/dist/get-Csm2n0rZ.cjs +445 -0
- package/dist/get-DT3JEgQ6.js +380 -0
- package/dist/index.cjs +21 -1410
- package/dist/index.d.cts +20 -3
- package/dist/index.d.ts +20 -3
- package/dist/index.js +8 -1409
- package/dist/ipn/index.cjs +1 -1
- package/dist/ipn/index.js +1 -1
- package/dist/issue-AGRohSm7.cjs +914 -0
- package/dist/issue-DtSLpVdJ.js +777 -0
- package/dist/json-4y4E2xxS.cjs +61 -0
- package/dist/json-B70TwoX1.d.cts +4 -0
- package/dist/json-B70TwoX1.d.ts +4 -0
- package/dist/json-DjnqnaJK.js +32 -0
- package/dist/mcp/index.cjs +10 -0
- package/dist/mcp/index.d.cts +71 -0
- package/dist/mcp/index.d.ts +71 -0
- package/dist/mcp/index.js +2 -0
- package/dist/money/index.cjs +12 -10
- package/dist/money/index.js +3 -1
- package/dist/{money-DkiGukAw.cjs → money-BxytJW6f.cjs} +42 -177
- package/dist/{money-C9j7nBNP.js → money-t7uy1n91.js} +29 -110
- package/dist/nav/index.cjs +1046 -0
- package/dist/nav/index.d.cts +247 -0
- package/dist/nav/index.d.ts +247 -0
- package/dist/nav/index.js +1012 -0
- package/dist/nav-BEwcX7-N.cjs +203 -0
- package/dist/nav-CK1WgYo7.js +156 -0
- package/dist/parse-BJj-aqKy.cjs +380 -0
- package/dist/parse-C608ehqM.js +291 -0
- package/dist/payments/barion.cjs +208 -0
- package/dist/payments/barion.d.cts +28 -0
- package/dist/payments/barion.d.ts +28 -0
- package/dist/payments/barion.js +199 -0
- package/dist/payments/index.cjs +16 -0
- package/dist/payments/index.d.cts +31 -0
- package/dist/payments/index.d.ts +31 -0
- package/dist/payments/index.js +3 -0
- package/dist/payments/paypal.cjs +351 -0
- package/dist/payments/paypal.d.cts +59 -0
- package/dist/payments/paypal.d.ts +59 -0
- package/dist/payments/paypal.js +337 -0
- package/dist/payments/revolut.cjs +261 -0
- package/dist/payments/revolut.d.cts +48 -0
- package/dist/payments/revolut.d.ts +48 -0
- package/dist/payments/revolut.js +249 -0
- package/dist/payments/simplepay.cjs +313 -0
- package/dist/payments/simplepay.d.cts +86 -0
- package/dist/payments/simplepay.d.ts +86 -0
- package/dist/payments/simplepay.js +299 -0
- package/dist/payments/stripe.cjs +315 -0
- package/dist/payments/stripe.d.cts +49 -0
- package/dist/payments/stripe.d.ts +49 -0
- package/dist/payments/stripe.js +303 -0
- package/dist/reports/index.cjs +103 -0
- package/dist/reports/index.d.cts +70 -0
- package/dist/reports/index.d.ts +70 -0
- package/dist/reports/index.js +94 -0
- package/dist/request-body-CH6ZGOrq.cjs +34 -0
- package/dist/request-body-uZHMRlQr.js +29 -0
- package/dist/rounding-BLyHjjI5.js +20 -0
- package/dist/rounding-TxoWy2ww.cjs +37 -0
- package/dist/serialize-BXOww1Uq.cjs +286 -0
- package/dist/serialize-DSE_o9RK.js +215 -0
- package/dist/server-C6PoNkdD.cjs +1557 -0
- package/dist/server-Cd8HB661.js +1504 -0
- package/dist/storage/fs.cjs +1 -1
- package/dist/storage/fs.js +1 -1
- package/dist/storage/index.cjs +2 -2
- package/dist/storage/index.d.cts +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +2 -2
- package/dist/tax-number-BYFkBp4A.cjs +141 -0
- package/dist/tax-number-BdqKsxNR.js +76 -0
- package/dist/testing/index.cjs +1656 -84
- package/dist/testing/index.d.cts +203 -3
- package/dist/testing/index.d.ts +203 -3
- package/dist/testing/index.js +1653 -83
- package/dist/types-BVeR7KyU.d.cts +56 -0
- package/dist/types-BVeR7KyU.d.ts +56 -0
- package/dist/types-DH8QoNZK.d.cts +135 -0
- package/dist/types-k--zHf4l.d.ts +135 -0
- package/dist/validators/index.cjs +14 -88
- package/dist/validators/index.js +1 -75
- package/dist/vat-g35srbNG.cjs +116 -0
- package/dist/vat-v_dcWCto.js +81 -0
- package/dist/webhook-81giRMdQ.cjs +223 -0
- package/dist/webhook-CpCMHhn2.d.ts +6 -0
- package/dist/webhook-CpMJuP6c.d.cts +6 -0
- package/dist/webhook-CrEGohbg.js +152 -0
- package/llms.txt +4 -4
- package/package.json +148 -2
- package/dist/client-B9kbKKBf.d.cts +0 -748
- package/dist/client-zv4enyq7.d.ts +0 -748
- package/dist/create-5YkUcJSe.js +0 -957
- 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://
|
|
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://
|
|
21
|
-
<a href="https://
|
|
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://
|
|
24
|
-
<a href="https://
|
|
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://
|
|
48
|
-
<a href="https://
|
|
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
|
|
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://
|
|
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 **[
|
|
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://
|
|
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://
|
|
108
|
-
- ▶️ **[Sandbox](https://
|
|
109
|
-
- 🍳 **[Receptek](https://
|
|
110
|
-
- 🤖 **[llms.txt](https://
|
|
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://
|
|
117
|
-
- **[Fizetett rendelés számlája](https://
|
|
118
|
-
- **[Stripe webhook](https://
|
|
119
|
-
- **[Nevezés díjbekérővel](https://
|
|
120
|
-
- **[IPN webhook](https://
|
|
121
|
-
- **[Pénztári nyugta](https://
|
|
122
|
-
- **[PDF mentése S3-ba vagy R2-be](https://
|
|
123
|
-
- **[Adószám alapú kitöltés](https://
|
|
124
|
-
- **[Devizás számla EU-s cégnek](https://
|
|
125
|
-
- **[Cloudflare Workers](https://
|
|
126
|
-
- **[Egységtesztek](https://
|
|
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
|
|
133
|
+
<summary>▶️ <b>Mind a 28 sandbox példa</b></summary>
|
|
132
134
|
|
|
133
|
-
**Számlák:** [Számla kiállítása](https://
|
|
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://
|
|
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://
|
|
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://
|
|
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://
|
|
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://
|
|
184
|
+
📖 **Dokumentáció:** [Hitelesítés (Agent kulcs)](https://kasszajs.hu/docs/alapok/hitelesites) · ▶️ **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://
|
|
188
|
-
<a href="https://
|
|
189
|
-
<a href="https://
|
|
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: '
|
|
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://
|
|
229
|
+
📖 **Dokumentáció:** [Számla létrehozás › Kérés](https://kasszajs.hu/docs/szamla-letrehozas/keres) · ▶️ **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://
|
|
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://
|
|
247
|
+
📖 **Dokumentáció:** [Kerekítés](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/kerekites) · ▶️ **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://
|
|
271
|
+
📖 **Dokumentáció:** [Bizonylattípusok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) · ▶️ **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://
|
|
282
|
+
📖 **Dokumentáció:** [Díjbekérő törlése](https://kasszajs.hu/docs/dijbekero-torlese) · ▶️ **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://
|
|
309
|
+
📖 **Dokumentáció:** [Bizonylattípusok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) · ▶️ **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://
|
|
325
|
+
📖 **Dokumentáció:** [Bizonylattípusok](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) · ▶️ **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://
|
|
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://
|
|
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://
|
|
362
|
+
📖 **Dokumentáció:** [Támogatott devizanemek](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/penznemek) · ▶️ **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://
|
|
373
|
+
📖 **Dokumentáció:** [Előnézet](https://kasszajs.hu/docs/szamla-letrehozas/beallitasok-es-szabalyok/elonezet) · ▶️ **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://
|
|
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://
|
|
401
|
+
📖 **Dokumentáció:** [Számla sztornó](https://kasszajs.hu/docs/szamla-sztorno) · ▶️ **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://
|
|
424
|
+
📖 **Dokumentáció:** [Befizetés rögzítése](https://kasszajs.hu/docs/befizetes-rogzitese) · ▶️ **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://
|
|
440
|
+
📖 **Dokumentáció:** [Bizonylat lekérése PDF-ben](https://kasszajs.hu/docs/bizonylat-pdf) · ▶️ **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://
|
|
459
|
+
📖 **Dokumentáció:** [Számla adatainak lekérése](https://kasszajs.hu/docs/szamla-adatai) · ▶️ **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://
|
|
463
|
-
<a href="https://
|
|
464
|
-
<a href="https://
|
|
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://
|
|
494
|
+
📖 **Dokumentáció:** [Nyugta létrehozás](https://kasszajs.hu/docs/nyugta-letrehozas) · ▶️ **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://
|
|
505
|
+
📖 **Dokumentáció:** [Nyugta kiküldés](https://kasszajs.hu/docs/nyugta-kikuldes) · ▶️ **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://
|
|
517
|
+
📖 **Dokumentáció:** [Nyugta lekérdezés](https://kasszajs.hu/docs/nyugta-lekerdezes) · ▶️ **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://
|
|
528
|
+
📖 **Dokumentáció:** [Nyugta sztornó](https://kasszajs.hu/docs/nyugta-sztorno) · ▶️ **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://
|
|
532
|
-
<a href="https://
|
|
533
|
-
<a href="https://
|
|
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://
|
|
584
|
+
📖 **Dokumentáció:** [Adószám lekérdezés](https://kasszajs.hu/docs/adoszam-lekerdezes) · ▶️ **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://
|
|
561
|
-
<a href="https://
|
|
562
|
-
<a href="https://
|
|
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://
|
|
618
|
+
📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kasszajs.hu/docs/alapok/hibakezeles) · ▶️ **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://
|
|
636
|
+
📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kasszajs.hu/docs/alapok/hibakezeles) · ▶️ **Sandbox:** [Validációs hibák](https://kasszajs.hu/sandbox?pelda=hibakezeles-validacio)
|
|
606
637
|
|
|
607
638
|
</details>
|
|
608
639
|
|
|
609
|
-
>
|
|
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) · ▶️ **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://
|
|
613
|
-
<a href="https://
|
|
614
|
-
<a href="https://
|
|
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://
|
|
685
|
+
📖 **Dokumentáció:** [IPN fizetési értesítés](https://kasszajs.hu/docs/befizetes-rogzitese/ipn) · ▶️ **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://
|
|
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://
|
|
659
|
-
<a href="https://
|
|
660
|
-
|
|
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://
|
|
869
|
+
📖 **Dokumentáció:** [PDF tárhely](https://kasszajs.hu/docs/kiegeszitok/pdf-tarhely) · ▶️ **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://
|
|
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://
|
|
710
|
-
<a href="https://
|
|
711
|
-
<a href="https://
|
|
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://
|
|
908
|
+
📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kasszajs.hu/docs/alapok/munkamenet) · ▶️ **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://
|
|
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://
|
|
749
|
-
<a href="https://
|
|
750
|
-
<a href="https://
|
|
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://
|
|
960
|
+
📖 **Dokumentáció:** [Tesztelés](https://kasszajs.hu/docs/kiegeszitok/teszteles) · ▶️ **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://
|
|
786
|
-
<a href="https://
|
|
787
|
-
<a href="https://
|
|
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://
|
|
1013
|
+
📖 **Dokumentáció:** [Validátorok](https://kasszajs.hu/docs/kiegeszitok/validatorok) · ▶️ **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://
|
|
1029
|
+
📖 **Dokumentáció:** [Pénzszámítás](https://kasszajs.hu/docs/kiegeszitok/penzszamitas) · ▶️ **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://
|
|
833
|
-
<a href="https://
|
|
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://
|
|
1062
|
+
📖 **Dokumentáció:** [Hálózat és biztonság](https://kasszajs.hu/docs/alapok/halozat-es-biztonsag) · ▶️ **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://
|
|
1075
|
+
📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kasszajs.hu/docs/alapok/munkamenet) · ▶️ **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://
|
|
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://
|
|
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://
|
|
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://
|
|
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>
|