====== Egyablakos (OSS) bizonylatok ====== Az egyablakos (OSS -- One Stop Shop) értékesítés az EU-n belüli, külföldi **magánszemély** (nem adóalany) vevőknek történő értékesítés, amelynél a számlát a vevő címe szerinti ország áfakulcsával kell kiállítani (áfa törzsben "Külföldi" jelölésű, áfakörös kulcsok), és a számla **nem kerül beküldésre** a NAV Online Számla rendszerbe. Korábban az egyablakos számla csak szolgáltatást tudott számlázni. Ez a fejlesztés kiterjesztette termék értékesítésre (cikktörzsből és raktárból), létrehozta az egyablakos szállítólevelet, az export és egyablakos vevői rendelést, valamint a webshop connector (wconn) számára a rendelés engine típusos interface-ét. ===== Bizonylattípusok ===== ^ Bizonylat ^ dok= ^ Menü jog ^ Feltétel (modul) ^ | Egyablakos számla | egyablakos_szamla | se02 | dok::egyablakos_szamla | | Egyablakos helyesbítő számla | helyesbito_egyablakos_szamla | (se02) | dok::egyablakos_szamla | | Egyablakos szállítólevél | egyablakosszallito | sz36 | dok::szallito + dok::egyablakos_szamla | | Egyablakos proforma | egyablakosproforma_szamla | sp09 | dok::proforma + dok::egyablakos_szamla | | Egyablakos rendelés | egyablakosrendeles | re76 | dok::rendeles + dok::egyablakos_szamla | | Export rendelés | exportrendeles | re75 | dok::rendeles + dok::exportszamla | Az egyablakos szállítólevél, proforma és rendelés a befogadó modul (szallito, proforma, rendeles) **modulon belüli változata**, menüpontjuk csak akkor jelenik meg, ha a ''dok::egyablakos_szamla'' modul telepítve van (''#MENU-IF''). Az export rendelés a ''dok::exportszamla'' modultól függ. ===== Felhasználói működés ===== ==== Partner szabályok ==== * **Egyablakos** bizonylatra csak **Magyarországon kívüli, de EU-n belüli** címmel rendelkező **személy** típusú partner választható, aki nem adóalany (nincs adószáma). HU vagy közösségen kívüli (THIRD) cím esetén a rendszer figyelmeztet, rögzítéskor (felvesz) hibát ad. * **Export** bizonylatra Magyarországon kívüli partner választható (EU-s vagy harmadik országbeli). ==== ÁFA kezelés ==== * Egyablakos bizonylaton a fejben a **Külföldi ÁFA** mezőben választható az alapértelmezett kulcs (áfa törzs: áfakörös + export jelölésű kulcsok). Minden tétel ezt a kulcsot kapja, de a tételeken a kulcs **egyenként átírható**. * Export bizonylaton a fejben a mentes (áfakörön kívüli, export jelölésű) **áfakód** választható, a tételek 0%-os kulccsal, ezzel a kóddal készülnek; a kód tételenként átírható. * A tételek nettó árasak; az árat és az áfa kulcsot a felhasználó az adatrögzítéskor adja meg. ==== Tétel típusok ==== Az egyablakos számla és szállítólevél tud: * szolgáltatást (cikktörzsből), * **terméket cikktörzsből** ("Termékek bizonylatra" -- ha a megfelelő ''termekek_cikktorzsbol'' beállítás aktív), * **terméket raktárból** (készletkivéttel, gyáriszám/sarzs/szavatosság támogatással). Az egyablakos/export rendelés cikktörzsből vett terméket, szolgáltatást, végösszegi engedményt és korábbi rendelés másolását támogatja. ==== Bizonylatláncok ==== * egyablakos rendelés → egyablakos szállítólevél → egyablakos számla * egyablakos rendelés → egyablakos számla (közvetlenül) * export rendelés → export szállítólevél / export számla * egyablakos/export rendelés → egyablakos/export proforma A rendelés nézetén a **Számlázás** és **Proforma** gombok típusazonosak: export rendelésről export számlát/proformát, egyablakos rendelésről egyablakos számlát/proformát céloznak, a gombfelirat is ehhez igazodik. A folyamat **felülbírálható**: ha a rendelés adatai hibásak, a felhasználó a normál (vagy másik típusú) számla/szállítólevél űrlapjáról is behúzhatja a rendelést -- ilyenkor a cél bizonylat saját áfa logikája érvényesül. **Áfa öröklés a láncban:** ha a cél bizonylat típusa megegyezik a forrás rendelés típusával (pl. egyablakos rendelésből egyablakos számla), akkor a rendelésen **tételenként rögzített áfa öröklődik** -- a fej Külföldi ÁFA mezője nem írja felül. Eltérő típusú cél esetén (felülbírálás) a cél bizonylat áfa logikája érvényesül. ==== Stornó és helyesbítő ==== Mindkettő a normál bizonylatokkal azonos módon működik. A stornó tételei az eredeti külföldi áfakulcsot viszik, raktári termék esetén a készlet visszaíródik a forrásraktárba. Az egyablakos helyesbítő számla terméket is kezel. ==== Tömeges számlázás ==== A rendeléslistákban látható és szűrhető a rendelés **Típus** oszlopa. A tömeges számlázás továbbra is normál (gépi) számlát készít, ezért **export vagy egyablakos rendelést tartalmazó kijelöléssel nem indítható** -- ilyenkor hibaüzenet jelenik meg. A típusos rendelések a rendelés nézetének típusazonos Számlázás gombjával számlázhatók. ==== NAV Online Számla ==== Az egyablakos számla nem tartozik a NAV Online Számla adatszolgáltatás alá: a modul az ''onlineszamla_check'' működést kikapcsolja, az onlineszámla close_trigger pedig ''EU_VAT'' indokkal nem kötelezőnek jelöli az adatszolgáltatást. Az **export** számla továbbra is adatszolgáltatás-köteles. ===== Fejlesztői dokumentáció ===== ==== Architektúra ==== * Nincs külön tábla vagy flag oszlop: a megkülönböztetés a fejtáblák (''szlafej'', ''szlvfej'', ''pfszfej'', ''rendfej'') **tipus** oszlopában történik (''gépi'' / ''export'' / ''egyablakos''). * A változatok vékony öröklésű osztálypárok (bizonylat osztály + komponista) a befogadó modulon belül, a proforma változatok mintájára: ''SUPER::old'' + ''apply_spec_afa=1'' (+''partner_szemely'', ''partner_nem_adoalany'' egyablakosnál), ''_tipus()'' felülírás, ''apply_spec_afa'' → ''apply_eu_afa'' (egyablakos) ill. ''apply_export_afa'' (export), országtípus-ellenőrzés az ''_update''-ben. * A tételszintű áfa szerkesztést a metadata ''qtype_merge'' köré tett ''hack_afakulcs'' (egyablakos) ill. ''hack_afakod'' (export) lokalizált hack adja. * Fontos: az ''apply_*_afa'' csak az ''add_lib'' pillanatában fut (''set_value_first''), az utána történt tétel-szintű ''set_value'' megmarad. Erre épül a tételenkénti áfa átadás (engine) és öröklés (rend_keres). * A ''rend_keres'' (rendelés → bizonylat lánc) **forrás-tudatos**: ha a ''rendfej.tipus'' export/egyablakos ÉS megegyezik a cél komponista ''_tipus''-ával, a tétel áfáját a ''rendtet''-ből örökíti (nem a cikktörzsből). ==== wconn / rendeles_engine interface ==== A webshop connector rendelés-rögzítése a ''dok::rendeles::rendeles_engine''-en át történik. A típusos rendelésekhez az interface így bővült (**visszafele kompatibilis**: a régi, paraméter nélküli hívás változatlanul gépi rendelést készít, változatlan működéssel): # gépi (változatlan, régi hívási mód): my $engine = dok::rendeles::rendeles_engine->new; # egyablakos (OSS) rendelés: my $engine = dok::rendeles::rendeles_engine->new({tipus=>'egyablakos'}); # export rendelés: my $engine = dok::rendeles::rendeles_engine->new({tipus=>'export'}); my $result = $engine->felvesz($input); # {status=>'Ok', szlaszam=>...} Az engine input (hash vagy ''elib::engine_input'') új mezői: ^ Mező ^ Szint ^ Jelentés ^ | ''eu_afa'' | fej | Külföldi áfakulcs (egyablakos): minden tétel alapértelmezett kulcsa. Áfa törzs: ''afakor AND export'' kulcsok. | | ''export_afa'' | fej | Mentes áfakód (export): a tételek 0%-kal, ezzel a kóddal készülnek. Áfa törzs: ''NOT afakor AND export'' kódok. | | ''tetel_afakulcs'' | tétel | Tételenkénti áfakörös kulcs -- felülbírálja a fej ''eu_afa''-t az adott tételen (OSS-ben pl. kedvezményes kulcsú termék). | | ''tetel_afakod'' | tétel | Tételenkénti mentes áfakód (áfakörön kívüli tétel). | Szabályok: * ''tipus'' nélkül (vagy ''gépi''-vel) hívva az ''eu_afa''/''export_afa''/''tetel_afakulcs''/''tetel_afakod'' mezőket nem szabad átadni -- a gépi rendelés áfája változatlanul a cikktörzsből jön. * Egyablakos rendelésnél a partner **személy** legyen EU (nem HU) címmel, különben a felvesz országtípus-hibával elhal. * A ''termék_beszállítótól'' (''termekek_beszallitoi'') tétel típus export/egyablakos rendelésen **nem támogatott**. * A rendelésből történő későbbi számlázás a tételenkénti kulcsokat örökíti (ld. forrás-tudatos ''rend_keres''). ==== Tesztek ==== ^ Teszt ^ Mit fed le ^ | ''t/unit/egyablakos_szamla_metadata.t'' | qtype regisztráció, tételszintű áfakulcs hack | | ''t/unit/egyablakos_szamla.t'' | egyablakos számla raktári termékkel, EU_EU ügylet, készletkivét, HU tiltás | | ''t/unit/egyablakos_szallito.t'' | egyablakos szállítólevél + lánc számlára | | ''t/unit/egyablakos_szallito_storno.t'' | stornó áfa- és készlet-visszaírással | | ''t/unit/egyablakos_rendeles.t'' | egyablakos rendelés + lánc számlára és szállítólevélre, HU tiltás | | ''t/unit/export_rendeles.t'' | export rendelés + lánc export számlára, HU tiltás | | ''t/unit/rendeles_engine_tipus.t'' | engine tipus interface, visszafele kompatibilitás, tételenkénti kulcs + öröklés | | ''t/app/egyablakos_*.t'' | form smoke tesztek | Fixture-ök: ''create_egyablakoskepes_partner'' (EU személy), ''create_exportszamlakepes_partner'' (EU cég közösségi adószámmal) -- ''t/lib/Test/EVIR/Fixtures/Partner.pm''.