# 🔍 NAV API v3 Fix Audit - Hiányosságjelentés **Dátum:** 2026-06-07 **Vizsgált Issue:** #227 **Forrásdokumentáció:** [`docs/nav_api_v3_fix_summary.md`](docs/nav_api_v3_fix_summary.md) ## Összefoglaló A [`docs/nav_api_v3_fix_summary.md`](docs/nav_api_v3_fix_summary.md) dokumentációban leírt 3 javítási lépésből **egyik sem lett végrehajtva**. Az alábbi táblázat mutatja a pontos állapotot. ## Részletes Hiányosság-leképezés ### 1. `.env` fájl - ❌ Idezőjelek még mindig jelen | Mező | Jelenlegi érték | Helyes érték | |------|----------------|--------------| | [`NAV_API_PASSWORD`](.env:91) | `'Tevelegelek&99'` (aposztrófokkal, 14 karakter) | `Tevelegelek&99` (12 karakter) | | [`NAV_API_CALLER_TAX_NUMBER`](.env:94) | `"48952046133"` (idézőjellel, 12 karakter) | `48952046133` (11 karakter) | **Következmény:** - `passwordHash = SHA-512("'Tevelegelek&99'")` → **ROSSZ hash** (aposztrófokkal) - `caller_tax_number_core[:8]` → `'"4895204'` → **ROSSZ adószám** ### 2. [`backend/app/core/config.py`](backend/app/core/config.py) - ❌ HIÁNYZIK a `strip_quotes` field_validator A [`config.py:130-136`](backend/app/core/config.py:130) sorokban a NAV_API_* mezők definiálva vannak, de **nincs hozzáadva** a `field_validator`. **Hiányzó kód** (beszúrandó a [`config.py:136`](backend/app/core/config.py:136) sor után): ```python @field_validator('NAV_API_PASSWORD', 'NAV_API_SIGN_KEY', 'NAV_API_EXCHANGE_KEY', 'NAV_API_CALLER_TAX_NUMBER') @classmethod def strip_quotes(cls, v: str) -> str: if v: v = v.strip() if len(v) >= 2 and v[0] == v[-1] and v[0] in ('"', "'"): v = v[1:-1] return v ``` ### 3. [`backend/app/services/nav_service.py`](backend/app/services/nav_service.py) - ❌ HIÁNYZIK a `.strip()` hívás A [`nav_service.py:134-138`](backend/app/services/nav_service.py:134) sorokban és a [`nav_service.py:127-131`](backend/app/services/nav_service.py:127) sorokban is hiányzik a `.strip()`: ```python # JELENLEGI (hibás): target_tax_number_core = ( tax_number .replace("-", "") .replace(" ", "")[:8] ) # HELYES: target_tax_number_core = ( tax_number .strip() .replace("-", "") .replace(" ", "")[:8] ) ``` ```python # JELENLEGI (hibás) - caller_tax_number_core: caller_tax_number_core = ( settings.NAV_API_CALLER_TAX_NUMBER .replace("-", "") .replace(" ", "")[:8] ) # HELYES: caller_tax_number_core = ( settings.NAV_API_CALLER_TAX_NUMBER .strip() .replace("-", "") .replace(" ", "")[:8] ) ``` ## Javítási Sorrend (Kötelező) | # | Fájl | Művelet | Parancs | |---|------|---------|---------| | 1 | `.env` | Idézőjelek eltávolítása | Kézi szerkesztés | | 2 | [`backend/app/core/config.py`](backend/app/core/config.py) | `strip_quotes` field_validator hozzáadása | Szerkesztés | | 3 | [`backend/app/services/nav_service.py`](backend/app/services/nav_service.py) | `.strip()` hozzáadása mindkét helyen | Szerkesztés | | 4 | Konténer újraindítás | `docker compose restart sf_api` | `docker compose restart sf_api` | | 5 | Teszt | Lekérdezés futtatása | `docker exec sf_api python3 -c "from app.services.nav_service import NavService; import asyncio; result = asyncio.run(NavService.query_taxpayer('24742063')); print(result)"` | ## Gyökérok Elemzés A jelenlegi `INVALID_REQUEST_SIGNATURE` hiba oka: 1. A `passwordHash` aposztrófokkal együtt lett hash-elve → a NAV szerver nem ismeri fel a jelszót 2. A `caller_tax_number` idézőjellel együtt kerül a `` mezőbe → a NAV szerver a hívó felet sem tudja azonosítani 3. Mivel a fenti két érték hibás, a teljes `requestSignature` is érvénytelen lesz, mert a NAV szerver a felhasználó azonosítása után számolja ki a saját oldalán a várható signature-t