kassza 0.4.0 → 0.5.1
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 +392 -45
- package/assets/logo-wordmark.svg +5 -24
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
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
|
+
|
|
1
3
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/futozs/kassza/main/assets/
|
|
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>
|
|
3
5
|
</p>
|
|
4
6
|
|
|
5
7
|
<p align="center">
|
|
6
8
|
<b>Számlázz.hu, TypeScriptben, egyszerűbben.</b><br>
|
|
7
|
-
|
|
9
|
+
Nem hivatalos TypeScript wrapper a Számlázz.hu Számla Agenthez. Mind a 11 Agent művelet, 0 függőség, nulla runtime kompromisszum.
|
|
8
10
|
</p>
|
|
9
11
|
|
|
10
12
|
<p align="center">
|
|
11
|
-
<a href="https://www.npmjs.com/package/kassza"><img src="https://img.shields.io/npm/v/kassza?
|
|
12
|
-
<a href="https://www.npmjs.com/package/kassza"><img src="https://img.shields.io/npm/dm/kassza?
|
|
13
|
-
<img src="https://img.shields.io/badge/
|
|
14
|
-
<img src="https://img.shields.io/
|
|
15
|
-
|
|
13
|
+
<a href="https://www.npmjs.com/package/kassza"><img src="https://img.shields.io/npm/v/kassza?label=npm&style=flat-square&labelColor=1c2620&color=167337" alt="npm verzió"></a>
|
|
14
|
+
<a href="https://www.npmjs.com/package/kassza"><img src="https://img.shields.io/npm/dm/kassza?label=let%C3%B6lt%C3%A9s&style=flat-square&labelColor=1c2620&color=167337" alt="havi letöltés"></a>
|
|
15
|
+
<a href="https://github.com/futozs/kassza/blob/main/package.json"><img src="https://img.shields.io/badge/f%C3%BCgg%C5%91s%C3%A9g-0-167337?style=flat-square&labelColor=1c2620" alt="0 futásidejű függőség"></a>
|
|
16
|
+
<a href="https://github.com/futozs/kassza/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/kassza?label=licenc&style=flat-square&labelColor=1c2620&color=167337" alt="MIT licenc"></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
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>
|
|
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>
|
|
16
25
|
</p>
|
|
17
26
|
|
|
18
27
|
```bash
|
|
@@ -34,12 +43,26 @@ console.log(szamla.number, szamla.grossTotal)
|
|
|
34
43
|
|
|
35
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.
|
|
36
45
|
|
|
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>
|
|
49
|
+
</p>
|
|
50
|
+
|
|
37
51
|
## Miért kassza?
|
|
38
52
|
|
|
39
53
|
<p align="center">
|
|
40
|
-
<img src="https://raw.githubusercontent.com/futozs/kassza/main/assets/
|
|
54
|
+
<picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/matrix-dark.svg"><img src="https://raw.githubusercontent.com/futozs/kassza/main/readme/assets/matrix-light.svg" alt="Számla Agent műveletek: a kassza mind a 11-et tudja, a többi csomag 2 vagy 3 műveletet" width="100%"></picture>
|
|
41
55
|
</p>
|
|
42
56
|
|
|
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
|
+
- **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.
|
|
60
|
+
- **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
|
+
- **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
|
+
|
|
63
|
+
<details>
|
|
64
|
+
<summary><b>Részletes összehasonlítás</b> · 6 csomag, 12 szempont</summary>
|
|
65
|
+
|
|
43
66
|
| | **kassza** | szamlazz.js | @ribbery009/ szamlazz-ts | @halftome/ szamlazz-client | szamlazz.ts | szamlazzhu-client |
|
|
44
67
|
|---|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
45
68
|
| Számla, sztornó | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
@@ -57,20 +80,67 @@ Ennyi. A kerekítést, a magyar dátumot, az XML-t, a session cookie-t és a hib
|
|
|
57
80
|
|
|
58
81
|
<sub>A műveleteket 2026 szeptemberében a publikált csomagok kódjában ellenőriztük (melyik Agent form mezőt küldik). Az Edge oszlopban ❌ az axios, tough-cookie vagy form-data függőség miatt szerepel, ezek nem futnak Workers alatt. A „–” azt jelenti, hogy nem teszteltük.</sub>
|
|
59
82
|
|
|
83
|
+
</details>
|
|
84
|
+
|
|
85
|
+
<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>
|
|
87
|
+
</p>
|
|
88
|
+
|
|
60
89
|
## Tartalom
|
|
61
90
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- [
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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) | | |
|
|
98
|
+
|
|
99
|
+
## Weboldal, sandbox és receptek
|
|
100
|
+
|
|
101
|
+
A teljes magyar dokumentáció, a sandbox és a receptek a **[kassza-amber.vercel.app](https://kassza-amber.vercel.app)** oldalon vannak.
|
|
102
|
+
|
|
103
|
+
<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>
|
|
105
|
+
</p>
|
|
106
|
+
|
|
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).
|
|
111
|
+
- 📦 **[npm csomag](https://www.npmjs.com/package/kassza)** · 🏛️ **[Hivatalos Számlázz.hu Agent dokumentáció](https://docs.szamlazz.hu/hu/agent/)**
|
|
112
|
+
|
|
113
|
+
<details>
|
|
114
|
+
<summary>🍳 <b>Mind a 11 recept</b></summary>
|
|
115
|
+
|
|
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.
|
|
127
|
+
|
|
128
|
+
</details>
|
|
129
|
+
|
|
130
|
+
<details>
|
|
131
|
+
<summary>▶️ <b>Mind a 27 sandbox példa</b></summary>
|
|
132
|
+
|
|
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)
|
|
134
|
+
|
|
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)
|
|
136
|
+
|
|
137
|
+
**NAV:** [Adószám lekérdezése](https://kassza-amber.vercel.app/sandbox?pelda=adoszam)
|
|
138
|
+
|
|
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)
|
|
140
|
+
|
|
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)
|
|
142
|
+
|
|
143
|
+
</details>
|
|
74
144
|
|
|
75
145
|
## Beállítás
|
|
76
146
|
|
|
@@ -86,6 +156,9 @@ import { createKassza } from 'kassza'
|
|
|
86
156
|
export const kassza = createKassza()
|
|
87
157
|
```
|
|
88
158
|
|
|
159
|
+
<details>
|
|
160
|
+
<summary><b>Alapbeállítások és a kulcs ellenőrzése</b> · <code>defaults</code>, <code>verifyCredentials()</code></summary>
|
|
161
|
+
|
|
89
162
|
Az ismétlődő adatokat elég egyszer megadni:
|
|
90
163
|
|
|
91
164
|
```ts
|
|
@@ -106,9 +179,22 @@ await kassza.verifyCredentials()
|
|
|
106
179
|
|
|
107
180
|
A `verifyCredentials()` visszatérési értéke `true`, ha a kulcs jó.
|
|
108
181
|
|
|
182
|
+
📖 **Dokumentáció:** [Hitelesítés (Agent kulcs)](https://kassza-amber.vercel.app/docs/alapok/hitelesites) · ▶️ **Sandbox:** [Agent kulcs ellenőrzése](https://kassza-amber.vercel.app/sandbox?pelda=kulcs-ellenorzes)
|
|
183
|
+
|
|
184
|
+
</details>
|
|
185
|
+
|
|
186
|
+
<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>
|
|
190
|
+
</p>
|
|
191
|
+
|
|
109
192
|
## Számlák
|
|
110
193
|
|
|
111
|
-
|
|
194
|
+
Egyetlen metódus, az `invoices.create()` állít ki számlát, díjbekérőt, előleg-, vég- és helyesbítő számlát vagy szállítólevelet. Mellette ott a sztornó, a befizetés, a PDF és a lekérdezés.
|
|
195
|
+
|
|
196
|
+
<details>
|
|
197
|
+
<summary><b>Számla</b> · <code>invoices.create()</code></summary>
|
|
112
198
|
|
|
113
199
|
```ts
|
|
114
200
|
const szamla = await kassza.invoices.create({
|
|
@@ -138,6 +224,13 @@ szamla.pdf
|
|
|
138
224
|
- Az `orderNumber` a saját azonosítód, ezzel később vissza is keresheted a számlát.
|
|
139
225
|
- A `szamla.pdf` egy `Uint8Array`.
|
|
140
226
|
|
|
227
|
+
📖 **Dokumentáció:** [Számla létrehozás › Kérés](https://kassza-amber.vercel.app/docs/szamla-letrehozas/keres) · ▶️ **Sandbox:** [Számla kiállítása](https://kassza-amber.vercel.app/sandbox?pelda=szamla)
|
|
228
|
+
|
|
229
|
+
</details>
|
|
230
|
+
|
|
231
|
+
<details>
|
|
232
|
+
<summary><b>Nettó vagy bruttó ár, áfakulcsok</b> · <code>netUnitPrice</code>, <code>grossUnitPrice</code>, <code>vat</code></summary>
|
|
233
|
+
|
|
141
234
|
Az ár megadható nettóban vagy bruttóban, a kerekítés a hivatalos szabályok szerint történik:
|
|
142
235
|
|
|
143
236
|
```ts
|
|
@@ -147,9 +240,14 @@ Az ár megadható nettóban vagy bruttóban, a kerekítés a hivatalos szabályo
|
|
|
147
240
|
{ name: 'Oktatás', netUnitPrice: 50_000, vat: 'AAM' }
|
|
148
241
|
```
|
|
149
242
|
|
|
150
|
-
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.
|
|
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.
|
|
244
|
+
|
|
245
|
+
📖 **Dokumentáció:** [Kerekítés](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/kerekites) · ▶️ **Sandbox:** [Webshop számla bruttó árakkal](https://kassza-amber.vercel.app/sandbox?pelda=szamla-brutto)
|
|
246
|
+
|
|
247
|
+
</details>
|
|
151
248
|
|
|
152
|
-
|
|
249
|
+
<details>
|
|
250
|
+
<summary><b>Díjbekérő, majd számla</b> · <code>type: 'proforma'</code></summary>
|
|
153
251
|
|
|
154
252
|
```ts
|
|
155
253
|
const dijbekero = await kassza.invoices.create({
|
|
@@ -168,13 +266,23 @@ const szamla = await kassza.invoices.create({
|
|
|
168
266
|
})
|
|
169
267
|
```
|
|
170
268
|
|
|
171
|
-
|
|
269
|
+
📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) · ▶️ **Sandbox:** [Díjbekérő, majd számla](https://kassza-amber.vercel.app/sandbox?pelda=dijbekero-szamla)
|
|
270
|
+
|
|
271
|
+
</details>
|
|
272
|
+
|
|
273
|
+
<details>
|
|
274
|
+
<summary><b>Díjbekérő törlése</b> · <code>invoices.deleteProforma()</code></summary>
|
|
172
275
|
|
|
173
276
|
```ts
|
|
174
277
|
await kassza.invoices.deleteProforma({ orderNumber: 'NEV-42' })
|
|
175
278
|
```
|
|
176
279
|
|
|
177
|
-
|
|
280
|
+
📖 **Dokumentáció:** [Díjbekérő törlése](https://kassza-amber.vercel.app/docs/dijbekero-torlese) · ▶️ **Sandbox:** [Díjbekérő törlése](https://kassza-amber.vercel.app/sandbox?pelda=dijbekero-torlese)
|
|
281
|
+
|
|
282
|
+
</details>
|
|
283
|
+
|
|
284
|
+
<details>
|
|
285
|
+
<summary><b>Előleg- és végszámla</b> · <code>type: 'advance'</code>, <code>'final'</code></summary>
|
|
178
286
|
|
|
179
287
|
```ts
|
|
180
288
|
const eloleg = await kassza.invoices.create({
|
|
@@ -196,7 +304,12 @@ await kassza.invoices.create({
|
|
|
196
304
|
})
|
|
197
305
|
```
|
|
198
306
|
|
|
199
|
-
|
|
307
|
+
📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) · ▶️ **Sandbox:** [Előleg- és végszámla](https://kassza-amber.vercel.app/sandbox?pelda=eloleg-vegszamla)
|
|
308
|
+
|
|
309
|
+
</details>
|
|
310
|
+
|
|
311
|
+
<details>
|
|
312
|
+
<summary><b>Helyesbítő számla</b> · <code>type: 'corrective'</code></summary>
|
|
200
313
|
|
|
201
314
|
```ts
|
|
202
315
|
await kassza.invoices.create({
|
|
@@ -207,13 +320,23 @@ await kassza.invoices.create({
|
|
|
207
320
|
})
|
|
208
321
|
```
|
|
209
322
|
|
|
210
|
-
|
|
323
|
+
📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok) · ▶️ **Sandbox:** [Helyesbítő számla](https://kassza-amber.vercel.app/sandbox?pelda=helyesbito-szamla)
|
|
324
|
+
|
|
325
|
+
</details>
|
|
326
|
+
|
|
327
|
+
<details>
|
|
328
|
+
<summary><b>Szállítólevél</b> · <code>type: 'deliveryNote'</code></summary>
|
|
211
329
|
|
|
212
330
|
```ts
|
|
213
331
|
await kassza.invoices.create({ type: 'deliveryNote', buyer, items })
|
|
214
332
|
```
|
|
215
333
|
|
|
216
|
-
|
|
334
|
+
📖 **Dokumentáció:** [Bizonylattípusok](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/bizonylattipusok)
|
|
335
|
+
|
|
336
|
+
</details>
|
|
337
|
+
|
|
338
|
+
<details>
|
|
339
|
+
<summary><b>Devizás számla, külföldi vevő</b> · <code>currency</code>, <code>language</code></summary>
|
|
217
340
|
|
|
218
341
|
```ts
|
|
219
342
|
await kassza.invoices.create({
|
|
@@ -232,15 +355,25 @@ await kassza.invoices.create({
|
|
|
232
355
|
})
|
|
233
356
|
```
|
|
234
357
|
|
|
235
|
-
Az árfolyam, ha nem adod meg, automatikusan az MNB aktuális árfolyama.
|
|
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).
|
|
359
|
+
|
|
360
|
+
📖 **Dokumentáció:** [Támogatott devizanemek](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/penznemek) · ▶️ **Sandbox:** [Devizás számla EU-s vevőnek](https://kassza-amber.vercel.app/sandbox?pelda=devizas-szamla)
|
|
236
361
|
|
|
237
|
-
|
|
362
|
+
</details>
|
|
363
|
+
|
|
364
|
+
<details>
|
|
365
|
+
<summary><b>Előnézet, számla kiállítása nélkül</b> · <code>invoices.preview()</code></summary>
|
|
238
366
|
|
|
239
367
|
```ts
|
|
240
368
|
const { pdf, grossTotal } = await kassza.invoices.preview({ buyer, items })
|
|
241
369
|
```
|
|
242
370
|
|
|
243
|
-
|
|
371
|
+
📖 **Dokumentáció:** [Előnézet](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/elonezet) · ▶️ **Sandbox:** [Számlaelőnézet](https://kassza-amber.vercel.app/sandbox?pelda=elonezet)
|
|
372
|
+
|
|
373
|
+
</details>
|
|
374
|
+
|
|
375
|
+
<details>
|
|
376
|
+
<summary><b>Melléklet az e-mailhez</b> · <code>attachments</code></summary>
|
|
244
377
|
|
|
245
378
|
```ts
|
|
246
379
|
await kassza.invoices.create({
|
|
@@ -252,13 +385,23 @@ await kassza.invoices.create({
|
|
|
252
385
|
|
|
253
386
|
Legfeljebb 5 melléklet adható meg, darabonként 2 MB.
|
|
254
387
|
|
|
255
|
-
|
|
388
|
+
📖 **Dokumentáció:** [Számlaértesítő küldés](https://kassza-amber.vercel.app/docs/szamla-letrehozas/beallitasok-es-szabalyok/ertesito-email)
|
|
389
|
+
|
|
390
|
+
</details>
|
|
391
|
+
|
|
392
|
+
<details>
|
|
393
|
+
<summary><b>Sztornó</b> · <code>invoices.reverse()</code></summary>
|
|
256
394
|
|
|
257
395
|
```ts
|
|
258
396
|
const sztorno = await kassza.invoices.reverse('E-WEB-2026-12')
|
|
259
397
|
```
|
|
260
398
|
|
|
261
|
-
|
|
399
|
+
📖 **Dokumentáció:** [Számla sztornó](https://kassza-amber.vercel.app/docs/szamla-sztorno) · ▶️ **Sandbox:** [Számla sztornózása](https://kassza-amber.vercel.app/sandbox?pelda=sztorno)
|
|
400
|
+
|
|
401
|
+
</details>
|
|
402
|
+
|
|
403
|
+
<details>
|
|
404
|
+
<summary><b>Befizetés rögzítése</b> · <code>invoices.registerPayment()</code></summary>
|
|
262
405
|
|
|
263
406
|
```ts
|
|
264
407
|
await kassza.invoices.registerPayment({ invoiceNumber: 'E-WEB-2026-12', amount: 12_700 })
|
|
@@ -276,7 +419,12 @@ await kassza.invoices.clearPayments('E-WEB-2026-12')
|
|
|
276
419
|
|
|
277
420
|
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.
|
|
278
421
|
|
|
279
|
-
|
|
422
|
+
📖 **Dokumentáció:** [Befizetés rögzítése](https://kassza-amber.vercel.app/docs/befizetes-rogzitese) · ▶️ **Sandbox:** [Befizetések rögzítése](https://kassza-amber.vercel.app/sandbox?pelda=befizetes)
|
|
423
|
+
|
|
424
|
+
</details>
|
|
425
|
+
|
|
426
|
+
<details>
|
|
427
|
+
<summary><b>PDF letöltése utólag</b> · <code>invoices.getPdf()</code></summary>
|
|
280
428
|
|
|
281
429
|
```ts
|
|
282
430
|
import { writeFile } from 'node:fs/promises'
|
|
@@ -287,7 +435,12 @@ await writeFile('szamla.pdf', pdf)
|
|
|
287
435
|
|
|
288
436
|
Rendelésszám vagy külső azonosító alapján is működik: `getPdf({ orderNumber: 'REND-1001' })`, `getPdf({ externalId: 'a1b2' })`.
|
|
289
437
|
|
|
290
|
-
|
|
438
|
+
📖 **Dokumentáció:** [Bizonylat lekérése PDF-ben](https://kassza-amber.vercel.app/docs/bizonylat-pdf) · ▶️ **Sandbox:** [PDF lekérése utólag](https://kassza-amber.vercel.app/sandbox?pelda=pdf-lekeres)
|
|
439
|
+
|
|
440
|
+
</details>
|
|
441
|
+
|
|
442
|
+
<details>
|
|
443
|
+
<summary><b>Számla adatainak lekérése</b> · <code>invoices.get()</code>, <code>invoices.find()</code></summary>
|
|
291
444
|
|
|
292
445
|
```ts
|
|
293
446
|
const adatok = await kassza.invoices.get({ orderNumber: 'REND-1001' })
|
|
@@ -301,9 +454,22 @@ const talan = await kassza.invoices.find({ orderNumber: 'REND-9999' })
|
|
|
301
454
|
|
|
302
455
|
A `find` `null`-t ad, ha nincs ilyen számla, a `get` ilyenkor hibát dob.
|
|
303
456
|
|
|
457
|
+
📖 **Dokumentáció:** [Számla adatainak lekérése](https://kassza-amber.vercel.app/docs/szamla-adatai) · ▶️ **Sandbox:** [Számla adatainak lekérése](https://kassza-amber.vercel.app/sandbox?pelda=szamla-adatai)
|
|
458
|
+
|
|
459
|
+
</details>
|
|
460
|
+
|
|
461
|
+
<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>
|
|
465
|
+
</p>
|
|
466
|
+
|
|
304
467
|
## Nyugták
|
|
305
468
|
|
|
306
|
-
|
|
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.
|
|
470
|
+
|
|
471
|
+
<details>
|
|
472
|
+
<summary><b>Nyugta</b> · <code>receipts.create()</code></summary>
|
|
307
473
|
|
|
308
474
|
```ts
|
|
309
475
|
const nyugta = await kassza.receipts.create({
|
|
@@ -323,27 +489,57 @@ nyugta.pdf
|
|
|
323
489
|
|
|
324
490
|
A `callId` véd a dupla nyugta ellen.
|
|
325
491
|
|
|
326
|
-
|
|
492
|
+
📖 **Dokumentáció:** [Nyugta létrehozás](https://kassza-amber.vercel.app/docs/nyugta-letrehozas) · ▶️ **Sandbox:** [Nyugta kiállítása](https://kassza-amber.vercel.app/sandbox?pelda=nyugta)
|
|
493
|
+
|
|
494
|
+
</details>
|
|
495
|
+
|
|
496
|
+
<details>
|
|
497
|
+
<summary><b>Kiküldés e-mailben</b> · <code>receipts.send()</code></summary>
|
|
327
498
|
|
|
328
499
|
```ts
|
|
329
500
|
await kassza.receipts.send({ receiptNumber: nyugta.number, emails: 'vevo@ceg.hu' })
|
|
330
501
|
```
|
|
331
502
|
|
|
332
|
-
|
|
503
|
+
📖 **Dokumentáció:** [Nyugta kiküldés](https://kassza-amber.vercel.app/docs/nyugta-kikuldes) · ▶️ **Sandbox:** [Nyugta kiküldése e-mailben](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-kikuldes)
|
|
504
|
+
|
|
505
|
+
</details>
|
|
506
|
+
|
|
507
|
+
<details>
|
|
508
|
+
<summary><b>Lekérdezés</b> · <code>receipts.get()</code>, <code>receipts.find()</code></summary>
|
|
333
509
|
|
|
334
510
|
```ts
|
|
335
511
|
const ugyanaz = await kassza.receipts.get(nyugta.number)
|
|
336
512
|
const rendelesbol = await kassza.receipts.find({ orderNumber: 'REND-1001' })
|
|
337
513
|
```
|
|
338
514
|
|
|
339
|
-
|
|
515
|
+
📖 **Dokumentáció:** [Nyugta lekérdezés](https://kassza-amber.vercel.app/docs/nyugta-lekerdezes) · ▶️ **Sandbox:** [Nyugta lekérdezése](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-lekerdezes)
|
|
516
|
+
|
|
517
|
+
</details>
|
|
518
|
+
|
|
519
|
+
<details>
|
|
520
|
+
<summary><b>Sztornó</b> · <code>receipts.reverse()</code></summary>
|
|
340
521
|
|
|
341
522
|
```ts
|
|
342
523
|
await kassza.receipts.reverse(nyugta.number)
|
|
343
524
|
```
|
|
344
525
|
|
|
526
|
+
📖 **Dokumentáció:** [Nyugta sztornó](https://kassza-amber.vercel.app/docs/nyugta-sztorno) · ▶️ **Sandbox:** [Nyugta sztornózása](https://kassza-amber.vercel.app/sandbox?pelda=nyugta-sztorno)
|
|
527
|
+
|
|
528
|
+
</details>
|
|
529
|
+
|
|
530
|
+
<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>
|
|
534
|
+
</p>
|
|
535
|
+
|
|
345
536
|
## Adószám lekérdezés
|
|
346
537
|
|
|
538
|
+
Egy adószámból megkapod a cég nevét és székhelyét, így a vevő adatait nem kell kézzel begépelni.
|
|
539
|
+
|
|
540
|
+
<details>
|
|
541
|
+
<summary><b>Cégadatok adószám alapján</b> · <code>taxpayer.query()</code></summary>
|
|
542
|
+
|
|
347
543
|
```ts
|
|
348
544
|
const ceg = await kassza.taxpayer.query('13421739')
|
|
349
545
|
|
|
@@ -356,10 +552,23 @@ if (ceg.valid) {
|
|
|
356
552
|
|
|
357
553
|
A cégadatok a NAV-tól jönnek, a cím formázva, például `1031 Budapest, Záhony utca 7.`
|
|
358
554
|
|
|
555
|
+
📖 **Dokumentáció:** [Adószám lekérdezés](https://kassza-amber.vercel.app/docs/adoszam-lekerdezes) · ▶️ **Sandbox:** [Adószám lekérdezése](https://kassza-amber.vercel.app/sandbox?pelda=adoszam)
|
|
556
|
+
|
|
557
|
+
</details>
|
|
558
|
+
|
|
559
|
+
<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>
|
|
563
|
+
</p>
|
|
564
|
+
|
|
359
565
|
## Hibakezelés
|
|
360
566
|
|
|
361
567
|
Minden hiba `SzamlazzError`, magyar üzenettel és javítási tippel.
|
|
362
568
|
|
|
569
|
+
<details>
|
|
570
|
+
<summary><b>Duplikált rendelésszám és validációs hiba</b> · <code>isSzamlazzError()</code></summary>
|
|
571
|
+
|
|
363
572
|
```ts
|
|
364
573
|
import { isSzamlazzError } from 'kassza'
|
|
365
574
|
|
|
@@ -377,6 +586,13 @@ try {
|
|
|
377
586
|
- `error.code`: a Számlázz.hu hibakódja, például `57`.
|
|
378
587
|
- `error.hint`: magyar javítási tipp.
|
|
379
588
|
|
|
589
|
+
📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kassza-amber.vercel.app/docs/alapok/hibakezeles) · ▶️ **Sandbox:** [Idempotens számlázás hiba után](https://kassza-amber.vercel.app/sandbox?pelda=hibakezeles-idempotens)
|
|
590
|
+
|
|
591
|
+
</details>
|
|
592
|
+
|
|
593
|
+
<details>
|
|
594
|
+
<summary><b>Hibakategóriák</b> · <code>error.category</code></summary>
|
|
595
|
+
|
|
380
596
|
| `error.category` | Jelentés |
|
|
381
597
|
|---|---|
|
|
382
598
|
| `validation` | Hibás adat, a kérés el sem ment, vagy a Számlázz.hu elutasította |
|
|
@@ -386,11 +602,24 @@ try {
|
|
|
386
602
|
| `auth` / `account` | Rossz kulcs, lejárt előfizetés |
|
|
387
603
|
| `network` / `timeout` / `maintenance` | Átmeneti hiba |
|
|
388
604
|
|
|
389
|
-
|
|
605
|
+
📖 **Dokumentáció:** [Hibakezelés, hibakódok](https://kassza-amber.vercel.app/docs/alapok/hibakezeles) · ▶️ **Sandbox:** [Validációs hibák](https://kassza-amber.vercel.app/sandbox?pelda=hibakezeles-validacio)
|
|
606
|
+
|
|
607
|
+
</details>
|
|
608
|
+
|
|
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.
|
|
610
|
+
|
|
611
|
+
<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>
|
|
615
|
+
</p>
|
|
390
616
|
|
|
391
617
|
## Fizetési értesítés (IPN)
|
|
392
618
|
|
|
393
|
-
A Számlázz.hu értesít, ha egy számlát kifizettek.
|
|
619
|
+
A Számlázz.hu értesít, ha egy számlát kifizettek.
|
|
620
|
+
|
|
621
|
+
<details>
|
|
622
|
+
<summary><b>Next.js route handler</b> · <code>readIpnNotification()</code></summary>
|
|
394
623
|
|
|
395
624
|
```ts
|
|
396
625
|
import { ipnOkResponse, readIpnNotification } from 'kassza/ipn'
|
|
@@ -404,6 +633,13 @@ export async function POST(request: Request) {
|
|
|
404
633
|
}
|
|
405
634
|
```
|
|
406
635
|
|
|
636
|
+
📖 **Dokumentáció:** [IPN fizetési értesítés](https://kassza-amber.vercel.app/docs/befizetes-rogzitese/ipn) · ▶️ **Sandbox:** [IPN fizetési értesítés](https://kassza-amber.vercel.app/sandbox?pelda=ipn)
|
|
637
|
+
|
|
638
|
+
</details>
|
|
639
|
+
|
|
640
|
+
<details>
|
|
641
|
+
<summary><b>Csak a Számlázz.hu IP-címeiről</b> · <code>isSzamlazzIp()</code></summary>
|
|
642
|
+
|
|
407
643
|
Csak a Számlázz.hu IP-címeiről jövő kérést érdemes elfogadni:
|
|
408
644
|
|
|
409
645
|
```ts
|
|
@@ -412,9 +648,22 @@ import { isSzamlazzIp } from 'kassza/ipn'
|
|
|
412
648
|
isSzamlazzIp(request.headers.get('x-forwarded-for') ?? '')
|
|
413
649
|
```
|
|
414
650
|
|
|
651
|
+
📖 **Dokumentáció:** [IPN fizetési értesítés](https://kassza-amber.vercel.app/docs/befizetes-rogzitese/ipn)
|
|
652
|
+
|
|
653
|
+
</details>
|
|
654
|
+
|
|
655
|
+
<p>
|
|
656
|
+
<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>
|
|
657
|
+
<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>
|
|
658
|
+
<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>
|
|
659
|
+
</p>
|
|
660
|
+
|
|
415
661
|
## PDF mentése tárhelyre
|
|
416
662
|
|
|
417
|
-
S3, Cloudflare R2, MinIO vagy Backblaze esetén nem kell az AWS SDK
|
|
663
|
+
S3, Cloudflare R2, MinIO vagy Backblaze esetén nem kell az AWS SDK.
|
|
664
|
+
|
|
665
|
+
<details>
|
|
666
|
+
<summary><b>S3 és Cloudflare R2</b> · <code>s3FetchStorage()</code>, <code>storePdf()</code></summary>
|
|
418
667
|
|
|
419
668
|
```ts
|
|
420
669
|
import { invoicePdfKey, s3FetchStorage, storePdf } from 'kassza/storage'
|
|
@@ -435,7 +684,12 @@ fajl.key
|
|
|
435
684
|
|
|
436
685
|
A kulcs például `szamlak/2026/09/E-WEB-2026-12.pdf` lesz.
|
|
437
686
|
|
|
438
|
-
|
|
687
|
+
📖 **Dokumentáció:** [PDF tárhely](https://kassza-amber.vercel.app/docs/kiegeszitok/pdf-tarhely) · ▶️ **Sandbox:** [PDF mentése tárhelyre](https://kassza-amber.vercel.app/sandbox?pelda=pdf-tarhely)
|
|
688
|
+
|
|
689
|
+
</details>
|
|
690
|
+
|
|
691
|
+
<details>
|
|
692
|
+
<summary><b>Fájlrendszer (Node)</b> · <code>fsStorage()</code></summary>
|
|
439
693
|
|
|
440
694
|
```ts
|
|
441
695
|
import { fsStorage } from 'kassza/storage/fs'
|
|
@@ -443,11 +697,24 @@ import { fsStorage } from 'kassza/storage/fs'
|
|
|
443
697
|
const tarhely = fsStorage({ directory: './szamlak' })
|
|
444
698
|
```
|
|
445
699
|
|
|
700
|
+
📖 **Dokumentáció:** [PDF tárhely](https://kassza-amber.vercel.app/docs/kiegeszitok/pdf-tarhely)
|
|
701
|
+
|
|
702
|
+
</details>
|
|
703
|
+
|
|
446
704
|
További adapterek: `s3Storage` (AWS SDK), `r2BindingStorage`, `vercelBlobStorage`, `uploadthingStorage`, `supabaseStorage`, `memoryStorage`.
|
|
447
705
|
|
|
706
|
+
<p>
|
|
707
|
+
<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>
|
|
708
|
+
<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>
|
|
709
|
+
<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>
|
|
710
|
+
</p>
|
|
711
|
+
|
|
448
712
|
## Serverless és edge
|
|
449
713
|
|
|
450
|
-
A session cookie újrahasznosítása gyorsítja a hívásokat. Serverless környezetben tedd közös tárolóba
|
|
714
|
+
A session cookie újrahasznosítása gyorsítja a hívásokat. Serverless környezetben tedd közös tárolóba.
|
|
715
|
+
|
|
716
|
+
<details>
|
|
717
|
+
<summary><b>Upstash Redis</b> · <code>upstashRedisCookieStore()</code></summary>
|
|
451
718
|
|
|
452
719
|
```ts
|
|
453
720
|
import { Redis } from '@upstash/redis'
|
|
@@ -456,7 +723,12 @@ import { upstashRedisCookieStore } from 'kassza/cookie-stores'
|
|
|
456
723
|
const kassza = createKassza({ cookieStore: upstashRedisCookieStore(Redis.fromEnv()) })
|
|
457
724
|
```
|
|
458
725
|
|
|
459
|
-
|
|
726
|
+
📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kassza-amber.vercel.app/docs/alapok/munkamenet) · ▶️ **Sandbox:** [Közös session több kliens között](https://kassza-amber.vercel.app/sandbox?pelda=munkamenet)
|
|
727
|
+
|
|
728
|
+
</details>
|
|
729
|
+
|
|
730
|
+
<details>
|
|
731
|
+
<summary><b>Cloudflare Workers</b> · <code>cloudflareKvCookieStore()</code></summary>
|
|
460
732
|
|
|
461
733
|
```ts
|
|
462
734
|
import { cloudflareKvCookieStore } from 'kassza/cookie-stores'
|
|
@@ -464,12 +736,25 @@ import { cloudflareKvCookieStore } from 'kassza/cookie-stores'
|
|
|
464
736
|
const kassza = createKassza({ agentKey: env.SZAMLAZZ_AGENT_KEY, cookieStore: cloudflareKvCookieStore(env.KASSZA_KV) })
|
|
465
737
|
```
|
|
466
738
|
|
|
739
|
+
📖 **Dokumentáció:** [Serverless és edge](https://kassza-amber.vercel.app/docs/kiegeszitok/serverless-es-edge)
|
|
740
|
+
|
|
741
|
+
</details>
|
|
742
|
+
|
|
467
743
|
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.
|
|
468
744
|
|
|
745
|
+
<p>
|
|
746
|
+
<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>
|
|
747
|
+
<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>
|
|
748
|
+
<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>
|
|
749
|
+
</p>
|
|
750
|
+
|
|
469
751
|
## Tesztelés
|
|
470
752
|
|
|
471
753
|
A mock kliens valódi API-hívás nélkül működik, de ugyanazt a validációt és kerekítést futtatja, mint az éles kliens.
|
|
472
754
|
|
|
755
|
+
<details>
|
|
756
|
+
<summary><b>Vitest példa</b> · <code>createMockKassza()</code></summary>
|
|
757
|
+
|
|
473
758
|
```ts
|
|
474
759
|
import { createMockKassza } from 'kassza/testing'
|
|
475
760
|
|
|
@@ -490,8 +775,23 @@ test('hálózati hibánál nem számláz kétszer', async () => {
|
|
|
490
775
|
})
|
|
491
776
|
```
|
|
492
777
|
|
|
778
|
+
📖 **Dokumentáció:** [Tesztelés](https://kassza-amber.vercel.app/docs/kiegeszitok/teszteles) · ▶️ **Sandbox:** [Mock kliens tesztekhez](https://kassza-amber.vercel.app/sandbox?pelda=mock-kliens)
|
|
779
|
+
|
|
780
|
+
</details>
|
|
781
|
+
|
|
782
|
+
<p>
|
|
783
|
+
<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>
|
|
784
|
+
<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>
|
|
785
|
+
<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>
|
|
786
|
+
</p>
|
|
787
|
+
|
|
493
788
|
## Validátorok és pénzszámítás
|
|
494
789
|
|
|
790
|
+
Magyar adószám, bankszámla, IBAN, EU adószám és cím ellenőrzése űrlapokhoz, és ugyanaz a kerekítés, amit a számlák is használnak.
|
|
791
|
+
|
|
792
|
+
<details>
|
|
793
|
+
<summary><b>Validátorok</b> · <code>kassza/validators</code></summary>
|
|
794
|
+
|
|
495
795
|
```ts
|
|
496
796
|
import {
|
|
497
797
|
isValidHungarianBankAccount,
|
|
@@ -506,6 +806,13 @@ parseHungarianAddress('1031 Budapest, Záhony utca 7.')
|
|
|
506
806
|
|
|
507
807
|
A `parseHungarianAddress` eredménye `{ zip: '1031', city: 'Budapest', address: 'Záhony utca 7.' }`. Ezen kívül van `isValidHungarianIban`, `isValidHungarianZipCode`, `isValidEuVatNumber` és `isValidEmail` is.
|
|
508
808
|
|
|
809
|
+
📖 **Dokumentáció:** [Validátorok](https://kassza-amber.vercel.app/docs/kiegeszitok/validatorok) · ▶️ **Sandbox:** [Validátorok](https://kassza-amber.vercel.app/sandbox?pelda=validatorok)
|
|
810
|
+
|
|
811
|
+
</details>
|
|
812
|
+
|
|
813
|
+
<details>
|
|
814
|
+
<summary><b>Pénzszámítás</b> · <code>kassza/money</code></summary>
|
|
815
|
+
|
|
509
816
|
```ts
|
|
510
817
|
import { calculateInvoiceItem, calculateReceiptItem } from 'kassza/money'
|
|
511
818
|
|
|
@@ -515,8 +822,22 @@ calculateReceiptItem({ grossUnitPrice: 1_000, vat: 27 })
|
|
|
515
822
|
|
|
516
823
|
Az első eredménye `{ netAmount: 1181, vatAmount: 319, grossAmount: 1500, ... }`, a másodiké `{ netAmount: 787.4, vatAmount: 212.6, grossAmount: 1000, ... }`.
|
|
517
824
|
|
|
825
|
+
📖 **Dokumentáció:** [Pénzszámítás](https://kassza-amber.vercel.app/docs/kiegeszitok/penzszamitas) · ▶️ **Sandbox:** [Kerekítés és összegzés](https://kassza-amber.vercel.app/sandbox?pelda=kerekites)
|
|
826
|
+
|
|
827
|
+
</details>
|
|
828
|
+
|
|
829
|
+
<p>
|
|
830
|
+
<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>
|
|
831
|
+
<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>
|
|
832
|
+
</p>
|
|
833
|
+
|
|
518
834
|
## Haladó beállítások
|
|
519
835
|
|
|
836
|
+
Időkorlát, újrapróbálás a lekérdezéseknél, naplózás hookokkal és megszakítás `AbortSignal`-lal.
|
|
837
|
+
|
|
838
|
+
<details>
|
|
839
|
+
<summary><b>Időkorlát, újrapróbálás és hookok</b> · <code>timeoutMs</code>, <code>maxAttempts</code>, <code>hooks</code></summary>
|
|
840
|
+
|
|
520
841
|
```ts
|
|
521
842
|
const kassza = createKassza({
|
|
522
843
|
timeoutMs: 30_000,
|
|
@@ -534,12 +855,28 @@ await kassza.invoices.getPdf('E-WEB-2026-12', { signal: AbortSignal.timeout(5_00
|
|
|
534
855
|
- A hookok soha nem kapják meg az Agent kulcsot.
|
|
535
856
|
- Minden metódus fogad `AbortSignal`-t.
|
|
536
857
|
|
|
858
|
+
📖 **Dokumentáció:** [Hálózat és biztonság](https://kassza-amber.vercel.app/docs/alapok/halozat-es-biztonsag) · ▶️ **Sandbox:** [Hookok és újrapróbálás](https://kassza-amber.vercel.app/sandbox?pelda=hookok)
|
|
859
|
+
|
|
860
|
+
</details>
|
|
861
|
+
|
|
862
|
+
<details>
|
|
863
|
+
<summary><b>Új session kérése</b> · <code>resetSession()</code></summary>
|
|
864
|
+
|
|
537
865
|
A `resetSession()` új sessiont kér. Hívd meg, ha a Számlázz.hu fiókban megváltoztak a cégadatok:
|
|
538
866
|
|
|
539
867
|
```ts
|
|
540
868
|
await kassza.resetSession()
|
|
541
869
|
```
|
|
542
870
|
|
|
871
|
+
📖 **Dokumentáció:** [Munkamenet (session cookie)](https://kassza-amber.vercel.app/docs/alapok/munkamenet) · ▶️ **Sandbox:** [Közös session több kliens között](https://kassza-amber.vercel.app/sandbox?pelda=munkamenet)
|
|
872
|
+
|
|
873
|
+
</details>
|
|
874
|
+
|
|
875
|
+
<p>
|
|
876
|
+
<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>
|
|
877
|
+
<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>
|
|
878
|
+
</p>
|
|
879
|
+
|
|
543
880
|
## AI-val kódolsz?
|
|
544
881
|
|
|
545
882
|
A csomagban van egy `agents/` mappa. Ebből a Claude Code, a Cursor, a Copilot és a többi asszisztens megtudja, hogyan kell jól használni a kasszát, és mik a buktatók. Szólj rá az AI-ra:
|
|
@@ -548,6 +885,16 @@ A csomagban van egy `agents/` mappa. Ebből a Claude Code, a Cursor, a Copilot
|
|
|
548
885
|
|
|
549
886
|
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.
|
|
550
887
|
|
|
888
|
+
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.
|
|
889
|
+
|
|
890
|
+
<p>
|
|
891
|
+
<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>
|
|
892
|
+
</p>
|
|
893
|
+
|
|
551
894
|
---
|
|
552
895
|
|
|
896
|
+
<p align="center">
|
|
897
|
+
<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>
|
|
898
|
+
</p>
|
|
899
|
+
|
|
553
900
|
<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>
|
package/assets/logo-wordmark.svg
CHANGED
|
@@ -1,25 +1,6 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<stop offset="0" stop-color="#14532D"/>
|
|
7
|
-
<stop offset="1" stop-color="#052E16"/>
|
|
8
|
-
</linearGradient>
|
|
9
|
-
<linearGradient id="paper" x1="0" y1="0" x2="0" y2="1">
|
|
10
|
-
<stop offset="0" stop-color="#FFFDF5"/>
|
|
11
|
-
<stop offset="1" stop-color="#F3EBD3"/>
|
|
12
|
-
</linearGradient>
|
|
13
|
-
</defs>
|
|
14
|
-
<g transform="translate(24 24) scale(0.53125)">
|
|
15
|
-
<rect width="512" height="512" rx="112" fill="url(#bg)"/>
|
|
16
|
-
<path d="M146 84H366A20 20 0 0 1 386 104V428l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18V104A20 20 0 0 1 146 84Z" fill="#000" opacity=".22" transform="translate(0 10)"/>
|
|
17
|
-
<path d="M146 84H366A20 20 0 0 1 386 104V428l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18V104A20 20 0 0 1 146 84Z" fill="url(#paper)"/>
|
|
18
|
-
<path d="M170 136h40v88l76-88h50l-80 90 86 116h-50l-62-86-20 22v64h-40z" fill="#14532D"/>
|
|
19
|
-
<rect x="160" y="368" width="120" height="12" rx="6" fill="#14532D" opacity=".28"/>
|
|
20
|
-
<rect x="304" y="368" width="48" height="12" rx="6" fill="#F59E0B"/>
|
|
21
|
-
</g>
|
|
22
|
-
<text x="340" y="196" font-family="ui-rounded, 'SF Pro Rounded', 'Nunito', 'Inter', system-ui, sans-serif" font-size="168" font-weight="800" letter-spacing="-6" fill="url(#bg)">kassza</text>
|
|
23
|
-
<rect x="348" y="226" width="96" height="14" rx="7" fill="#F59E0B"/>
|
|
24
|
-
<text x="464" y="240" font-family="ui-monospace, 'SF Mono', 'JetBrains Mono', monospace" font-size="30" font-weight="500" class="tag">Számlázz.hu, TypeScriptben</text>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="994" height="312" viewBox="0 0 994 312" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">kassza</title>
|
|
3
|
+
<desc id="desc">kassza logó: Számlázz.hu, TypeScriptben</desc>
|
|
4
|
+
<defs><linearGradient id="logo-tile" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#14532D"/><stop offset="1" stop-color="#052E16"/></linearGradient><linearGradient id="logo-paper" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#FFFDF5"/><stop offset="1" stop-color="#F3EBD3"/></linearGradient><path id="t0" d="M194 0L36 0L36-700L194-700L194-329Q228-347 253-370Q277-393 294-419Q311-446 322-473Q332-501 339-528L525-528Q514-488 494-450Q473-413 443-380Q413-348 374-322Q334-296 286-279L286-271Q348-281 388-273Q427-266 450-245Q473-225 486-194Q498-163 505-125L528 0L353 0L342-88Q338-120 331-148Q324-176 304-193Q284-211 241-211L194-211"/><path id="t1" d="M175 14Q135 14 99 0Q63-14 40-45Q17-77 17-130Q17-179 36-209Q55-240 87-258Q119-277 157-286Q195-296 232-303Q284-313 310-319Q336-325 346-333Q355-341 355-355Q355-384 334-399Q312-414 277-414Q255-414 233-406Q211-398 197-377Q183-357 184-319L40-329Q38-392 59-433Q80-475 117-498Q153-522 197-532Q240-542 283-542Q362-542 413-512Q464-483 489-427Q513-372 513-293L513-199Q513-166 513-132Q513-99 513-66Q513-33 513 0L373 0Q373-36 373-73Q373-110 373-151L367-151Q363-106 338-68Q312-31 271-8Q229 14 175 14M242-104Q259-104 279-110Q298-117 316-132Q333-147 344-173Q355-200 355-239L355-263L382-266Q374-253 356-245Q337-237 314-232Q291-228 268-223Q244-219 224-211Q204-204 192-191Q179-179 179-157Q179-131 198-117Q216-104 242-104"/><path id="t2" d="M267 14Q214 14 169 4Q123-7 90-30Q56-53 39-91Q21-130 24-185L165-197Q167-164 180-142Q193-121 216-111Q239-101 272-101Q303-101 326-111Q348-122 348-147Q348-160 340-168Q332-177 311-184Q289-192 248-202Q197-215 156-228Q115-241 86-259Q57-277 42-303Q27-330 27-369Q27-424 57-462Q86-501 138-521Q190-542 258-542Q319-542 372-523Q425-504 456-461Q486-418 478-347L340-334Q343-363 332-383Q321-404 300-414Q279-425 249-425Q215-425 197-412Q178-400 178-381Q178-366 190-355Q201-345 226-337Q250-330 289-321Q323-314 360-303Q397-292 429-273Q461-255 481-225Q501-195 501-149Q501-100 474-63Q447-26 395-6Q343 14 267 14"/><path id="t3" d="M463 0L20 0L20-136L271-392L271-398L25-398L25-528L460-528L460-391L209-134L209-130L463-130"/><path id="t4" d="M309 16Q232 16 175-15Q117-46 83-101Q49-157 43-231L151-238Q158-187 179-152Q200-117 234-99Q268-82 313-82Q357-82 387-93Q417-105 433-127Q449-149 449-181Q449-213 434-236Q419-259 380-278Q341-298 266-319Q193-339 147-364Q101-390 80-427Q59-465 59-520Q59-581 88-627Q116-674 170-700Q223-726 298-726Q372-726 425-697Q477-668 508-616Q538-565 545-496L437-490Q432-531 415-562Q397-593 367-610Q337-628 295-628Q236-628 202-600Q167-572 167-525Q167-495 181-474Q195-454 230-438Q265-423 328-405Q413-382 463-351Q513-321 535-280Q557-239 557-181Q557-123 526-78Q495-33 440-8Q384 16 309 16"/><path id="t5" d="M522 0L78 0L78-95L400-447L88-447L88-532L514-532L514-437L191-85L522-85"/><path id="t6" d="M228 12Q178 12 138-6Q98-24 75-57Q51-90 51-134Q51-202 93-240Q134-278 218-294L390-330Q390-392 363-423Q336-454 282-454Q232-454 204-431Q176-408 166-367L60-374Q75-450 133-497Q191-544 282-544Q384-544 438-486Q491-428 491-326L491-116Q491-98 499-90Q507-83 522-83L552-83L552 0Q546 1 533 2Q519 3 506 3Q470 3 445-9Q420-21 408-46Q395-72 393-111L409-111Q403-76 378-48Q353-20 314-4Q275 12 228 12M243-71Q291-71 324-88Q357-105 374-136Q390-167 390-209L390-250L242-220Q194-211 175-192Q156-173 156-142Q156-109 179-90Q202-71 243-71M325-596L239-596L304-730L415-730"/><path id="t7" d="M134 0L36 0L36-532L124-532L128-412L117-415Q127-476 157-510Q186-544 231-544Q279-544 304-510Q328-476 334-409L323-409Q332-473 364-508Q396-544 444-544Q507-544 536-500Q564-457 564-359L564 0L466 0L466-342Q466-406 453-431Q439-456 411-456Q393-456 379-444Q364-432 356-406Q348-381 348-340L348 0L252 0L252-342Q252-404 240-430Q227-456 198-456Q179-456 165-444Q151-432 143-406Q134-381 134-340"/><path id="t8" d="M365-32L264-32L264-559Q264-590 247-607Q229-625 198-625L76-625L76-710L209-710Q286-710 326-670Q365-631 365-554L365-32M544 0L56 0L56-85L544-85"/><path id="t9" d="M368 0L232 0L232-132L368-132"/><path id="ta" d="M194 0L93 0L93-710L194-710L194-416L184-420Q194-463 218-490Q242-518 276-531Q310-544 351-544Q407-544 446-518Q484-493 504-447Q523-402 523-343L523 0L422 0L422-317Q422-389 397-422Q371-456 321-456Q264-456 229-420Q194-384 194-314"/><path id="tb" d="M254 12Q177 12 131-40Q85-93 85-188L85-532L186-532L186-214Q186-142 211-109Q236-76 287-76Q342-76 376-113Q409-150 409-218L409-532L510-532L510 0L415 0L414-139L428-133Q414-64 369-26Q324 12 254 12"/><path id="tc" d="M304 162L236 162L292 0L234 0L234-132L366-132L366-11"/><path id="te" d="M352 0L248 0L248-611L40-611L40-710L560-710L560-611L352-611"/><path id="tf" d="M204 150L129 150L129 65L194 65Q221 65 235 57Q249 48 256 29L273-18L240-18L46-532L154-532L305-113L446-532L554-532L342 60Q326 108 293 129Q260 150 204 150"/><path id="tg" d="M173 150L72 150L72-532L168-532L170-411L158-417Q178-479 224-511Q269-544 331-544Q408-544 457-505Q506-467 530-404Q554-341 554-266Q554-191 530-128Q506-65 457-26Q408 12 331 12Q290 12 255-1Q220-15 196-40Q171-66 160-102L173-116L173 150M312-81Q376-81 412-129Q448-177 448-266Q448-355 412-403Q376-451 312-451Q270-451 239-430Q208-410 191-369Q173-328 173-266Q173-204 190-163Q207-122 239-101Q270-81 312-81"/><path id="th" d="M305 12Q230 12 175-22Q119-56 89-119Q58-182 58-266Q58-350 89-412Q119-474 174-509Q228-544 302-544Q372-544 427-510Q481-477 512-414Q542-352 542-264L542-236L163-236Q168-160 206-120Q243-81 306-81Q353-81 384-103Q415-126 427-162L532-155Q509-79 450-33Q391 12 305 12M164-317L432-317Q427-385 391-418Q355-451 301-451Q245-451 210-417Q174-383 164-317"/><path id="ti" d="M312 12Q238 12 182-22Q125-57 95-119Q64-182 64-266Q64-350 95-412Q125-474 182-509Q238-544 312-544Q373-544 421-521Q469-499 500-456Q531-413 541-353L438-346Q426-397 393-424Q360-451 313-451Q246-451 208-401Q169-352 169-266Q169-180 208-130Q246-81 313-81Q361-81 396-109Q430-138 441-194L544-188Q534-127 502-82Q470-38 422-13Q373 12 312 12"/><path id="tj" d="M486 0L84 0L84-85L265-85L219-39L219-493L265-447L84-447L84-532L299-532L308-384L299-391Q306-462 340-497Q373-532 433-532L546-532L546-444L437-444Q399-444 373-429Q347-415 334-386Q320-358 320-316L320-39L274-85L486-85"/><path id="tk" d="M284 0L76 0L76-85L284-85L284-493L331-447L86-447L86-532L386-532L386-85L564-85L564 0L386 0L284 0M382-609L278-609L278-714L382-714"/><path id="tl" d="M524 0L376 0Q295 0 256-37Q216-75 216-153L216-657L317-657L317-158Q317-121 335-103Q352-85 387-85L524-85L524 0M524-447L48-447L48-532L524-532"/><path id="tm" d="M342 12Q298 12 263-3Q228-18 204-46Q180-74 168-110L181-127L176 0L82 0L82-710L183-710L183-412L173-433Q182-462 205-487Q228-512 264-528Q299-544 342-544Q410-544 460-510Q510-477 537-414Q564-352 564-266Q564-180 537-117Q510-55 460-21Q410 12 342 12M325-81Q388-81 423-130Q458-180 458-266Q458-353 423-402Q388-451 327-451Q282-451 250-429Q218-407 201-366Q183-325 183-266Q183-209 201-167Q218-126 250-103Q281-81 325-81"/><path id="tn" d="M181 0L80 0L80-532L173-532L176-393L165-401Q175-450 201-481Q226-513 263-528Q300-544 342-544Q402-544 441-517Q480-491 500-445Q520-400 520-343L520 0L419 0L419-317Q419-386 393-421Q366-456 313-456Q276-456 247-440Q217-424 199-392Q181-361 181-315"/></defs>
|
|
5
|
+
<g transform="translate(28 28) scale(0.5)"><rect width="512" height="512" rx="112" fill="url(#logo-tile)"/><path d="M146 84H366A20 20 0 0 1 386 104V428l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18V104A20 20 0 0 1 146 84Z" fill="#000" opacity="0.22" transform="translate(0 10)"/><path d="M146 84H366A20 20 0 0 1 386 104V428l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18 l-13 -18 l-13 18V104A20 20 0 0 1 146 84Z" fill="url(#logo-paper)"/><path d="M170 136h40v88l76-88h50l-80 90 86 116h-50l-62-86-20 22v64h-40z" fill="#14532D"/><rect x="160" y="368" width="120" height="12" rx="6" fill="#14532D" opacity="0.28"/><rect x="304" y="368" width="48" height="12" rx="6" fill="#F59E0B"/></g><g transform="translate(327.57 188.27) scale(0.212)" fill="#2d8949"><use href="#t0" x="0"/><use href="#t1" x="516"/><use href="#t2" x="1039"/><use href="#t2" x="1536"/><use href="#t3" x="2033"/><use href="#t1" x="2494"/></g><rect x="335.2" y="250.16" width="84.8" height="15.26" rx="7.63" fill="#F59E0B"/><g transform="translate(438.02 266.71) scale(0.0335)" fill="#787f79"><use href="#t4" x="0"/><use href="#t5" x="609"/><use href="#t6" x="1217"/><use href="#t7" x="1826"/><use href="#t8" x="2434"/><use href="#t6" x="3043"/><use href="#t5" x="3651"/><use href="#t5" x="4260"/><use href="#t9" x="4869"/><use href="#ta" x="5477"/><use href="#tb" x="6086"/><use href="#tc" x="6694"/><use href="#te" x="7911"/><use href="#tf" x="8520"/><use href="#tg" x="9129"/><use href="#th" x="9737"/><use href="#t4" x="10346"/><use href="#ti" x="10954"/><use href="#tj" x="11563"/><use href="#tk" x="12171"/><use href="#tg" x="12780"/><use href="#tl" x="13388"/><use href="#tm" x="13997"/><use href="#th" x="14606"/><use href="#tn" x="15214"/></g>
|
|
25
6
|
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kassza",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"author": "futozs",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"@biomejs/biome": "^2.5.13",
|
|
14
14
|
"@types/node": "^26.6.0",
|
|
15
15
|
"@vitest/coverage-v8": "^5.0.1",
|
|
16
|
+
"opentype.js": "^2.0.0",
|
|
16
17
|
"publint": "^0.3.24",
|
|
17
18
|
"tsdown": "^0.23.0",
|
|
18
19
|
"typescript": "^7.0.2",
|
|
@@ -114,7 +115,7 @@
|
|
|
114
115
|
"assets",
|
|
115
116
|
"llms.txt"
|
|
116
117
|
],
|
|
117
|
-
"homepage": "https://
|
|
118
|
+
"homepage": "https://kassza-amber.vercel.app",
|
|
118
119
|
"keywords": [
|
|
119
120
|
"billing",
|
|
120
121
|
"dijbekero",
|
|
@@ -145,7 +146,9 @@
|
|
|
145
146
|
"lint": "biome check .",
|
|
146
147
|
"lint:fix": "biome check --write .",
|
|
147
148
|
"check:package": "publint --pack npm && attw --pack . --profile node16",
|
|
148
|
-
"
|
|
149
|
+
"readme": "node readme/art/index.mjs && node readme/build.mjs",
|
|
150
|
+
"readme:check": "node readme/build.mjs --check",
|
|
151
|
+
"ci": "npm run lint && npm run typecheck && npm run readme:check && npm run test:coverage && npm run build && npm run check:package",
|
|
149
152
|
"xsd:fetch": "node scripts/fetch-xsd.mjs",
|
|
150
153
|
"prepublishOnly": "npm run ci",
|
|
151
154
|
"release": "node scripts/release.mjs",
|