qtx-nav-m2m 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. qtx_nav_m2m-0.1.0/.gitignore +12 -0
  2. qtx_nav_m2m-0.1.0/AGENTS.md +32 -0
  3. qtx_nav_m2m-0.1.0/PKG-INFO +223 -0
  4. qtx_nav_m2m-0.1.0/README.md +208 -0
  5. qtx_nav_m2m-0.1.0/docs/specifications/M2M ad/303/263z/303/263i adatok lek/303/251rdez/303/251se interf/303/251sz specifik/303/241ci/303/263 1.2.docx +0 -0
  6. qtx_nav_m2m-0.1.0/docs/specifications/M2M /303/201NYK bizonylat interf/303/251sz specifik/303/241ci/303/263 0.7.docx +0 -0
  7. qtx_nav_m2m-0.1.0/docs/specifications/M2M /303/241ltal/303/241nos interf/303/251sz specifik/303/241ci/303/263 0.4.docx +0 -0
  8. qtx_nav_m2m-0.1.0/docs/specifications/M2M /303/272j bizonylat interf/303/251sz specifik/303/241ci/303/263 1.0.docx +0 -0
  9. qtx_nav_m2m-0.1.0/docs/specifications/README.md +4 -0
  10. qtx_nav_m2m-0.1.0/main.py +36 -0
  11. qtx_nav_m2m-0.1.0/openapi/NAVGOVHU-m2m_adozo-1.0.yaml +1688 -0
  12. qtx_nav_m2m-0.1.0/openapi/NAVGOVHU-m2m_bizonylat-1.0.yaml +752 -0
  13. qtx_nav_m2m-0.1.0/openapi/NAVGOVHU-m2m_common-1.1.yaml +420 -0
  14. qtx_nav_m2m-0.1.0/openapi/NAVGOVHU-m2m_document-1.2.yaml +338 -0
  15. qtx_nav_m2m-0.1.0/openapi/README.md +9 -0
  16. qtx_nav_m2m-0.1.0/pyproject.toml +43 -0
  17. qtx_nav_m2m-0.1.0/requirements.txt +3 -0
  18. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/__init__.py +187 -0
  19. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/client.py +126 -0
  20. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/config.py +20 -0
  21. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/core/__init__.py +1 -0
  22. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/core/authentication.py +11 -0
  23. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/core/exceptions.py +39 -0
  24. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/core/http_client.py +124 -0
  25. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/core/message.py +9 -0
  26. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/core/signature.py +18 -0
  27. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/__init__.py +2 -0
  28. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/__init__.py +109 -0
  29. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/_base.py +52 -0
  30. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/employment.py +36 -0
  31. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/legal_relationship.py +40 -0
  32. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/models/__init__.py +115 -0
  33. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/models/foglalkoztatas.py +175 -0
  34. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/models/jogviszony.py +245 -0
  35. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/models/koztartozas.py +91 -0
  36. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/models/simple.py +157 -0
  37. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/models/teteles.py +297 -0
  38. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/public_debt.py +24 -0
  39. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/returns.py +15 -0
  40. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/service.py +73 -0
  41. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/adozo/tax_account.py +36 -0
  42. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/bizonylat/__init__.py +47 -0
  43. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/bizonylat/models.py +280 -0
  44. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/bizonylat/service.py +302 -0
  45. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/__init__.py +59 -0
  46. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/filestore.py +77 -0
  47. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/models/__init__.py +24 -0
  48. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/models/filestore.py +67 -0
  49. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/models/registration.py +69 -0
  50. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/models/token.py +33 -0
  51. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/registration.py +73 -0
  52. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/common/token.py +41 -0
  53. qtx_nav_m2m-0.1.0/src/qtx_nav_m2m/services/document/__init__.py +2 -0
  54. qtx_nav_m2m-0.1.0/tests/__init__.py +2 -0
  55. qtx_nav_m2m-0.1.0/tests/test_package.py +738 -0
@@ -0,0 +1,12 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ build/
8
+ dist/
9
+ .idea/
10
+ .vscode/
11
+ .pypirc
12
+
@@ -0,0 +1,32 @@
1
+ # AGENTS.md
2
+
3
+ ## Projekt célja
4
+
5
+ A NAV M2M REST/JSON API Python wrapperének elkészítése. A publikus API Python
6
+ függvényeket és típusos Python válaszmodelleket biztosítson; a hívónak ne kelljen
7
+ ismernie a HTTP útvonalakat, headereket, query paramétereket vagy a nyers JSON-t.
8
+
9
+ ## Alapelvek
10
+
11
+ - A NAV specifikációk és az OpenAPI fájlok az elsődleges források.
12
+ - A közös kommunikációs, token- és aláíráskezelés ne kerüljön a service-ekbe.
13
+ - Az üzleti végpontokat a `services` alatti modulok különítsék el.
14
+ - A NAV mezőnevei csak a szerializációs rétegben jelenjenek meg.
15
+ - A publikus Python API snake_case elnevezést használjon.
16
+ - A visszaadott értékek nyers `dict` helyett típusos modellek legyenek.
17
+ - Titkokat, tokent, aláírókulcsot és teljes kérésadatot tilos naplózni.
18
+ - A régi `qtx-nav-core` csomaggal ne jöjjön létre függőség.
19
+
20
+ ## Projektállapot
21
+
22
+ - A `common` végpontok elkészültek és rendben vannak: token létrehozása,
23
+ nonce beváltása, regisztráció aktiválása, fájl feltöltése és
24
+ vírusellenőrzési állapot lekérdezése.
25
+ - A common végpontok leképezését unit tesztek ellenőrzik; módosításuk esetén
26
+ a meglévő regressziós teszteket is futtatni kell.
27
+
28
+ ## Ellenőrzés
29
+
30
+ - Új végpont implementálásakor készüljön unit teszt.
31
+ - A request mappinget az OpenAPI definícióval kell összevetni.
32
+ - A Word és OpenAPI eltéréseit dokumentálni kell, nem szabad találgatással elfedni.
@@ -0,0 +1,223 @@
1
+ Metadata-Version: 2.5
2
+ Name: qtx-nav-m2m
3
+ Version: 0.1.0
4
+ Summary: Python client library for the NAV M2M REST API
5
+ Author: Pongracz Istvan
6
+ License: MIT
7
+ Requires-Python: >=3.11
8
+ Requires-Dist: httpx<1.0,>=0.28
9
+ Requires-Dist: pydantic<3.0,>=2.11
10
+ Provides-Extra: dev
11
+ Requires-Dist: pytest-asyncio<2.0,>=1.1; extra == 'dev'
12
+ Requires-Dist: pytest<9.0,>=8.4; extra == 'dev'
13
+ Requires-Dist: ruff<1.0,>=0.12; extra == 'dev'
14
+ Description-Content-Type: text/markdown
15
+
16
+ # qtx-nav-m2m
17
+
18
+ Python klienskönyvtár a NAV M2M REST API szolgáltatásaihoz.
19
+
20
+ ## Cél
21
+
22
+ Az API-végpontok technikai részleteinek elfedése Python függvényekkel, valamint
23
+ a JSON válaszok típusos Python modellekké alakítása.
24
+
25
+ ## Támogatott területek
26
+
27
+ - `common`: tokenkezelés, nonce beváltás, regisztráció aktiválása, NAV közös fájltár
28
+ - `bizonylat`: új formátumú bizonylatok kalkulációja, validációja és beküldése
29
+ - `adozo`: adózói adatok lekérdezése
30
+ - `document`: régi ÁNYK-formátumú bizonylatok kezelése, későbbre hagyva
31
+
32
+ ## Megvalósítási állapot
33
+
34
+ A `common` végpontok elkészültek és unit tesztekkel ellenőrzöttek:
35
+
36
+ - token létrehozása
37
+ - nonce beváltása és regisztráció aktiválása
38
+ - fájl feltöltése a NAV közös fájltárába, majd a vírusellenőrzési állapot lekérdezése
39
+
40
+ A kliens futás közben is használható új tokennel és a regisztráció után összeálló
41
+ végleges aláírókulccsal. A `set_config()` új HTTP-klienst hoz létre, és eldobja a
42
+ régi tokeneket és a hozzájuk tartozó runtime állapotot.
43
+
44
+ ## Egylépéses regisztráció
45
+
46
+ A teljes NAV-regisztrációt a kliens `register()` metódusa vezényli le. A `nonce`
47
+ továbbra is bemenő adat, mert ezt a NAV ideiglenes jelszóként kéri a nonce
48
+ végponton; a második kulcsrész már a NAV válaszából érkezik.
49
+
50
+ ```python
51
+ result = client.register(
52
+ key_first_part="...",
53
+ nonce="...",
54
+ activation_message_id="...",
55
+ )
56
+
57
+ signature_key = result.signature_key
58
+ ```
59
+
60
+ Az aktiválás után a kliens automatikusan új access tokent kér, így a
61
+ `register()` visszatérésekor a kliens már közvetlenül használható.
62
+
63
+ ## Adózó service
64
+
65
+ Az adózói adatlekérdezések a `client.adozo` szolgáltatáson keresztül érhetők el.
66
+ A kliens automatikusan generálja a `messageId` értéket, valamint a NAV
67
+ specifikáció szerinti signature-t.
68
+
69
+ Támogatott végpontok:
70
+
71
+ - összesített és tételes adószámla
72
+ - köztartozás-egyenleg
73
+ - hiányzó bevallások
74
+ - biztosítotti jogviszony és a lekérdezés státusza
75
+ - egyszerűsített foglalkoztatás egy foglalkoztatottra vagy foglalkoztatói listára
76
+ - köztartozásmentesség (KOMA)
77
+
78
+ Példa köztartozás-egyenleg lekérdezésére:
79
+
80
+ ```python
81
+ from qtx_nav_m2m import M2mClient
82
+
83
+ with M2mClient(config) as client:
84
+ response = client.adozo.get_koztartozas_egyenleg(
85
+ adoalany_azonosito="12345678",
86
+ )
87
+
88
+ if response.koztartozas_egyenleg is not None:
89
+ print(response.koztartozas_egyenleg.osszes_eloiras)
90
+ ```
91
+
92
+ ## Bizonylat service
93
+
94
+ Az új formátumú bizonylatok végpontjai a `client.bizonylat` szolgáltatáson
95
+ keresztül érhetők el:
96
+
97
+ - `create_kalkulacio` és `get_kalkulacio`
98
+ - `create_validacio` és `get_validacio`
99
+ - `create_bizonylat` és `get_bizonylat`
100
+
101
+ A létrehozó műveletek `bytes` típusú XML-t fogadnak. A kliens elvégzi az
102
+ opcionális GZIP tömörítést, a SHA-256 hash képzését, a NAV signature
103
+ előállítását és a Base64 kódolást. A státuszlekérdezésekhez az indító művelet
104
+ által visszaadott `ugy_azonosito` szükséges.
105
+
106
+ ```python
107
+ with M2mClient(config) as client:
108
+ response = client.bizonylat.create_validacio(
109
+ bizonylat_tipus="T1042E",
110
+ bizonylat_verzio="1.0",
111
+ bizonylat_xml=b"<Bizonylat />",
112
+ )
113
+
114
+ if response.ugy_azonosito is not None:
115
+ status = client.bizonylat.get_validacio(response.ugy_azonosito)
116
+ ```
117
+
118
+ A `*_from_path()` kényelmi metódusok csak beolvassák a fájlt, majd továbbadják
119
+ a meglévő `bytes`-os API-nak. Ez hasznos a fájlválasztós felhasználói flow-nál,
120
+ de a core logikát nem duplikálja.
121
+
122
+ ## Dokumentált specifikációs eltérés: bizonylat
123
+
124
+ A bizonylat specifikációk között két eltérés található:
125
+
126
+ - az OpenAPI leírás 30 másodperces, a DOCX specifikáció 60 másodperces
127
+ szinkron válaszidőt említ;
128
+ - a signature műveletfüggő adata a bizonylat XML SHA-256 hash-e. A hash
129
+ reprezentációját az OpenAPI nem részletezi, ezért a NAV általános
130
+ interfészpéldáját követve a hexadecimális SHA-256 értéket használjuk.
131
+
132
+ Ezeket az eltéréseket nem fedjük el találgatással; az implementáció és a
133
+ tesztek ezt a döntést követik.
134
+
135
+ ## HTTP-kliens és API-verziók
136
+
137
+ A `M2mClient` egy közös `M2mHttpClient` példányt használ, amelyet az összes
138
+ service megoszt. A token és a közös HTTP-beállítások így minden service számára
139
+ elérhetők.
140
+
141
+ A `common.filestore` nem ugyanaz, mint a `bizonylat` service:
142
+
143
+ - a `common.filestore` a NAV közös fájltárába tölt fel egy nyers fájlt, majd a
144
+ fájlazonosító alapján a feldolgozási állapotot lehet lekérdezni;
145
+ - a `bizonylat` service XML-alapú NAV dokumentumküldést kezel, saját signature-
146
+ és payload-szabályokkal.
147
+
148
+ Az API-verzió nem a klienshez kötött, hanem az egyes kéréseknél adható meg. Ez
149
+ lehetővé teszi, hogy a common végpontok a `/rest-api/1.1`, míg például az adozo
150
+ végpontok a saját specifikációjuk szerinti `/rest-api/1.0` útvonalon működjenek
151
+ ugyanazzal a HTTP-klienssel és tokennel.
152
+
153
+ ## Projekt-előkészítés
154
+
155
+ ```bash
156
+ python -m venv .venv
157
+ ```
158
+
159
+ Windows PowerShell:
160
+
161
+ ```powershell
162
+ .venv\Scripts\Activate.ps1
163
+ python -m pip install -U pip
164
+ python -m pip install -e ".[dev]"
165
+ ```
166
+
167
+ ## Dokumentációk elhelyezése
168
+
169
+ - A NAV DOCX specifikációk helye: `docs/specifications/`
170
+ - A Swagger/OpenAPI YAML fájlok helye: `openapi/`
171
+
172
+ Ezek a forrásanyagok nincsenek a kezdőcsomagba bemásolva.
173
+
174
+ ## Forráskód és aktuális mappastruktúra
175
+
176
+ ```text
177
+ qtx_nav_m2m/
178
+ ├── main.py
179
+ ├── openapi/
180
+ ├── docs/
181
+ ├── README.md
182
+ ├── src/
183
+ │ └── qtx_nav_m2m/
184
+ │ ├── __init__.py
185
+ │ ├── client.py
186
+ │ ├── config.py
187
+ │ ├── core/
188
+ │ │ ├── authentication.py
189
+ │ │ ├── exceptions.py
190
+ │ │ ├── http_client.py
191
+ │ │ ├── message.py
192
+ │ │ └── signature.py
193
+ │ └── services/
194
+ │ ├── adozo/
195
+ │ │ ├── _base.py
196
+ │ │ ├── employment.py
197
+ │ │ ├── legal_relationship.py
198
+ │ │ ├── models/
199
+ │ │ ├── public_debt.py
200
+ │ │ ├── returns.py
201
+ │ │ ├── service.py
202
+ │ │ └── tax_account.py
203
+ │ ├── bizonylat/
204
+ │ │ ├── models/
205
+ │ │ └── service.py
206
+ │ └── common/
207
+ │ ├── __init__.py
208
+ │ ├── filestore.py
209
+ │ ├── models/
210
+ │ ├── registration.py
211
+ │ └── token.py
212
+ └── tests/
213
+ └── test_package.py
214
+ ```
215
+
216
+ ## Smoke test
217
+
218
+ A gyökérben található `main.py` placeholder hitelesítési adatokkal meghívja a
219
+ token végpontot. Ezzel ellenőrizhető, hogy a NAV szerver elérhető-e:
220
+
221
+ ```powershell
222
+ .venv\Scripts\python.exe main.py
223
+ ```
@@ -0,0 +1,208 @@
1
+ # qtx-nav-m2m
2
+
3
+ Python klienskönyvtár a NAV M2M REST API szolgáltatásaihoz.
4
+
5
+ ## Cél
6
+
7
+ Az API-végpontok technikai részleteinek elfedése Python függvényekkel, valamint
8
+ a JSON válaszok típusos Python modellekké alakítása.
9
+
10
+ ## Támogatott területek
11
+
12
+ - `common`: tokenkezelés, nonce beváltás, regisztráció aktiválása, NAV közös fájltár
13
+ - `bizonylat`: új formátumú bizonylatok kalkulációja, validációja és beküldése
14
+ - `adozo`: adózói adatok lekérdezése
15
+ - `document`: régi ÁNYK-formátumú bizonylatok kezelése, későbbre hagyva
16
+
17
+ ## Megvalósítási állapot
18
+
19
+ A `common` végpontok elkészültek és unit tesztekkel ellenőrzöttek:
20
+
21
+ - token létrehozása
22
+ - nonce beváltása és regisztráció aktiválása
23
+ - fájl feltöltése a NAV közös fájltárába, majd a vírusellenőrzési állapot lekérdezése
24
+
25
+ A kliens futás közben is használható új tokennel és a regisztráció után összeálló
26
+ végleges aláírókulccsal. A `set_config()` új HTTP-klienst hoz létre, és eldobja a
27
+ régi tokeneket és a hozzájuk tartozó runtime állapotot.
28
+
29
+ ## Egylépéses regisztráció
30
+
31
+ A teljes NAV-regisztrációt a kliens `register()` metódusa vezényli le. A `nonce`
32
+ továbbra is bemenő adat, mert ezt a NAV ideiglenes jelszóként kéri a nonce
33
+ végponton; a második kulcsrész már a NAV válaszából érkezik.
34
+
35
+ ```python
36
+ result = client.register(
37
+ key_first_part="...",
38
+ nonce="...",
39
+ activation_message_id="...",
40
+ )
41
+
42
+ signature_key = result.signature_key
43
+ ```
44
+
45
+ Az aktiválás után a kliens automatikusan új access tokent kér, így a
46
+ `register()` visszatérésekor a kliens már közvetlenül használható.
47
+
48
+ ## Adózó service
49
+
50
+ Az adózói adatlekérdezések a `client.adozo` szolgáltatáson keresztül érhetők el.
51
+ A kliens automatikusan generálja a `messageId` értéket, valamint a NAV
52
+ specifikáció szerinti signature-t.
53
+
54
+ Támogatott végpontok:
55
+
56
+ - összesített és tételes adószámla
57
+ - köztartozás-egyenleg
58
+ - hiányzó bevallások
59
+ - biztosítotti jogviszony és a lekérdezés státusza
60
+ - egyszerűsített foglalkoztatás egy foglalkoztatottra vagy foglalkoztatói listára
61
+ - köztartozásmentesség (KOMA)
62
+
63
+ Példa köztartozás-egyenleg lekérdezésére:
64
+
65
+ ```python
66
+ from qtx_nav_m2m import M2mClient
67
+
68
+ with M2mClient(config) as client:
69
+ response = client.adozo.get_koztartozas_egyenleg(
70
+ adoalany_azonosito="12345678",
71
+ )
72
+
73
+ if response.koztartozas_egyenleg is not None:
74
+ print(response.koztartozas_egyenleg.osszes_eloiras)
75
+ ```
76
+
77
+ ## Bizonylat service
78
+
79
+ Az új formátumú bizonylatok végpontjai a `client.bizonylat` szolgáltatáson
80
+ keresztül érhetők el:
81
+
82
+ - `create_kalkulacio` és `get_kalkulacio`
83
+ - `create_validacio` és `get_validacio`
84
+ - `create_bizonylat` és `get_bizonylat`
85
+
86
+ A létrehozó műveletek `bytes` típusú XML-t fogadnak. A kliens elvégzi az
87
+ opcionális GZIP tömörítést, a SHA-256 hash képzését, a NAV signature
88
+ előállítását és a Base64 kódolást. A státuszlekérdezésekhez az indító művelet
89
+ által visszaadott `ugy_azonosito` szükséges.
90
+
91
+ ```python
92
+ with M2mClient(config) as client:
93
+ response = client.bizonylat.create_validacio(
94
+ bizonylat_tipus="T1042E",
95
+ bizonylat_verzio="1.0",
96
+ bizonylat_xml=b"<Bizonylat />",
97
+ )
98
+
99
+ if response.ugy_azonosito is not None:
100
+ status = client.bizonylat.get_validacio(response.ugy_azonosito)
101
+ ```
102
+
103
+ A `*_from_path()` kényelmi metódusok csak beolvassák a fájlt, majd továbbadják
104
+ a meglévő `bytes`-os API-nak. Ez hasznos a fájlválasztós felhasználói flow-nál,
105
+ de a core logikát nem duplikálja.
106
+
107
+ ## Dokumentált specifikációs eltérés: bizonylat
108
+
109
+ A bizonylat specifikációk között két eltérés található:
110
+
111
+ - az OpenAPI leírás 30 másodperces, a DOCX specifikáció 60 másodperces
112
+ szinkron válaszidőt említ;
113
+ - a signature műveletfüggő adata a bizonylat XML SHA-256 hash-e. A hash
114
+ reprezentációját az OpenAPI nem részletezi, ezért a NAV általános
115
+ interfészpéldáját követve a hexadecimális SHA-256 értéket használjuk.
116
+
117
+ Ezeket az eltéréseket nem fedjük el találgatással; az implementáció és a
118
+ tesztek ezt a döntést követik.
119
+
120
+ ## HTTP-kliens és API-verziók
121
+
122
+ A `M2mClient` egy közös `M2mHttpClient` példányt használ, amelyet az összes
123
+ service megoszt. A token és a közös HTTP-beállítások így minden service számára
124
+ elérhetők.
125
+
126
+ A `common.filestore` nem ugyanaz, mint a `bizonylat` service:
127
+
128
+ - a `common.filestore` a NAV közös fájltárába tölt fel egy nyers fájlt, majd a
129
+ fájlazonosító alapján a feldolgozási állapotot lehet lekérdezni;
130
+ - a `bizonylat` service XML-alapú NAV dokumentumküldést kezel, saját signature-
131
+ és payload-szabályokkal.
132
+
133
+ Az API-verzió nem a klienshez kötött, hanem az egyes kéréseknél adható meg. Ez
134
+ lehetővé teszi, hogy a common végpontok a `/rest-api/1.1`, míg például az adozo
135
+ végpontok a saját specifikációjuk szerinti `/rest-api/1.0` útvonalon működjenek
136
+ ugyanazzal a HTTP-klienssel és tokennel.
137
+
138
+ ## Projekt-előkészítés
139
+
140
+ ```bash
141
+ python -m venv .venv
142
+ ```
143
+
144
+ Windows PowerShell:
145
+
146
+ ```powershell
147
+ .venv\Scripts\Activate.ps1
148
+ python -m pip install -U pip
149
+ python -m pip install -e ".[dev]"
150
+ ```
151
+
152
+ ## Dokumentációk elhelyezése
153
+
154
+ - A NAV DOCX specifikációk helye: `docs/specifications/`
155
+ - A Swagger/OpenAPI YAML fájlok helye: `openapi/`
156
+
157
+ Ezek a forrásanyagok nincsenek a kezdőcsomagba bemásolva.
158
+
159
+ ## Forráskód és aktuális mappastruktúra
160
+
161
+ ```text
162
+ qtx_nav_m2m/
163
+ ├── main.py
164
+ ├── openapi/
165
+ ├── docs/
166
+ ├── README.md
167
+ ├── src/
168
+ │ └── qtx_nav_m2m/
169
+ │ ├── __init__.py
170
+ │ ├── client.py
171
+ │ ├── config.py
172
+ │ ├── core/
173
+ │ │ ├── authentication.py
174
+ │ │ ├── exceptions.py
175
+ │ │ ├── http_client.py
176
+ │ │ ├── message.py
177
+ │ │ └── signature.py
178
+ │ └── services/
179
+ │ ├── adozo/
180
+ │ │ ├── _base.py
181
+ │ │ ├── employment.py
182
+ │ │ ├── legal_relationship.py
183
+ │ │ ├── models/
184
+ │ │ ├── public_debt.py
185
+ │ │ ├── returns.py
186
+ │ │ ├── service.py
187
+ │ │ └── tax_account.py
188
+ │ ├── bizonylat/
189
+ │ │ ├── models/
190
+ │ │ └── service.py
191
+ │ └── common/
192
+ │ ├── __init__.py
193
+ │ ├── filestore.py
194
+ │ ├── models/
195
+ │ ├── registration.py
196
+ │ └── token.py
197
+ └── tests/
198
+ └── test_package.py
199
+ ```
200
+
201
+ ## Smoke test
202
+
203
+ A gyökérben található `main.py` placeholder hitelesítési adatokkal meghívja a
204
+ token végpontot. Ezzel ellenőrizhető, hogy a NAV szerver elérhető-e:
205
+
206
+ ```powershell
207
+ .venv\Scripts\python.exe main.py
208
+ ```
@@ -0,0 +1,4 @@
1
+ # NAV specifikációk
2
+
3
+ Ide másold a NAV M2M interfészleírásokat DOCX formátumban.
4
+
@@ -0,0 +1,36 @@
1
+ """Minimal NAV M2M connectivity smoke test."""
2
+
3
+ from qtx_nav_m2m import M2mClient, M2mConfig
4
+ from qtx_nav_m2m.core.exceptions import (
5
+ M2mConnectionError,
6
+ M2mError,
7
+ M2mHttpError,
8
+ M2mTimeoutError,
9
+ )
10
+
11
+
12
+ def main() -> None:
13
+ config = M2mConfig(
14
+ client_id="smoke-test-client",
15
+ client_secret="smoke-test-secret",
16
+ username="smoke-test-user",
17
+ password="smoke-test-password",
18
+ signature_key="smoke-test-signature-key",
19
+ )
20
+
21
+ try:
22
+ with M2mClient(config) as client:
23
+ response = client.common.create_token(message_id="smoke-test-message")
24
+ print(f"NAV server response: {response.result_code.value}")
25
+ except M2mHttpError as exc:
26
+ print(f"NAV server reached; HTTP error: {exc.status_code}")
27
+ except M2mTimeoutError:
28
+ print("NAV server could not be reached: request timed out")
29
+ except M2mConnectionError:
30
+ print("NAV server could not be reached: connection error")
31
+ except M2mError as exc:
32
+ print(f"NAV M2M client error: {exc}")
33
+
34
+
35
+ if __name__ == "__main__":
36
+ main()