Nordlet

← Blogi

Maakohtaisten arvonlisäveroraporttien ja VIES-tarkistusten automatisointi

Käytännön opas kehittäjille EU:n arvonlisäverosäännösten integroimiseen markkinapaikoille ja alustoille pilvipohjaisen taloushallinto-ohjelmisto rajapinnan kautta.

Nordlet Team · · 9 min lukuaika

Useimmat alustakoodin arvonlisäverovirheet juontavat juurensa yhteen oletukseen: siihen, että kelvollinen VIES-tulos tarkoittaa myynnin nollaverokantaa. Näin ei kuitenkaan ole. Tähän oikopolkuun tukeutuminen tuottaa ilmoituksia, jotka näyttävät hyviltä siihen asti, kunnes tilintarkastaja kysyy, miksi EU-sisäistä verovapautta sovellettiin ilman kuljetusasiakirjoja tai johdonmukaista suorituspaikkatietoa. Kuilu "ALV-tunnus on kunnossa" -todellisuuden ja "tämä myynti on käsitelty oikein" -tilanteen välillä on se paikka, jossa useimmat integraatiot menevät vähän kerrallaan pieleen.

Tässä oppaassa käydään läpi, miten maakohtainen arvonlisäveroraportointi ja VIES-tarkistukset automatisoidaan pilvipohjaisen taloushallinnon rajapinnan avulla. Toteutusesimerkkinä käytetään Nordletin taloushallinnon rajapintaa. Tavoitteena on luoda järjestelmä, joka tallentaa oikeat todisteet myyntihetkellä, kirjaa tapahtumat muuttumattomaan pääkirjaan ja tuottaa ilmoitusvalmista dataa järjestelmän ja jäsenvaltion mukaan ryhmiteltynä ilman myöhempää lukujen laskemista uudelleen taulukkolaskentaohjelmassa.

Mitä VIES-järjestelmä todellisuudessa kertoo ja mitä se ei kerro

VIES on EU:n arvonlisäverotietojen vaihtojärjestelmä (VAT Information Exchange System). Kun järjestelmään syötetään maakoodi ja ALV-tunnus, se tekee reaaliaikaisen kyselyn asianomaiseen kansalliseen tietokantaan ja palauttaa tiedon siitä, onko ALV-tieto voimassa vai ei. Siinä on koko järjestelmän laajuus. Se vahvistaa, että tunnus on rekisteröity ja, mikäli jäsenvaltio sitä tukee, aktivoitu EU-sisäiseen kaupankäyntiin.

Se ei kuitenkaan luo oikeutta vapauttaa yhteisömyyntiä arvonlisäverosta. Euroopan komissio sanoo tämän täysin suoraan. Vastaus VIES-järjestelmästä on yksi todiste muiden joukossa. Ostajan on edelleen oltava todellinen vastaanottaja, myynnin on täytettävä yhteisömyynnin edellytykset, kuljetus- tai lähetysasiakirjojen on oltava olemassa, ja laskussa on oltava vaaditut maininnat käännetystä verovelvollisuudesta.

Ensimmäinen arkkitehtuuria koskeva päätös onkin rakenteellinen: pidä VIES-tila ja arvonlisäverokäsittely erillisillä kentillä. Älä koskaan kytke arvoa viesStatus: valid suoraan arvoon zeroRated: true. Hti kun nämä kaksi asiaa niputetaan yhteen, menetetään kyky perustella verokäsittelyä, jos sen todisteita kyseenalaistetaan.

Ennen integrointikoodin kirjoittamista

Ennen kuin yhtäkään rajapintakutsua tehdään, raportoitava laajuus on rajattava tarkasti. Tämä vaihe on tylsä, mutta sen ohittaminen tulee kalliiksi.

  • Maat, joissa yrityksellä on kotipaikka tai kiinteä toimipaikka
  • Maat, joissa yrityksellä on arvonlisäverorekisteröinti
  • Myydäänkö tavaroita, palveluita, digitaalisia palveluita vai näiden yhdistelmää
  • Ovatko tapahtumat B2B-, B2C-myyntiä vai molempia
  • Käytetäänkö paikallisia rekisteröintejä, OSS-järjestelmää, IOSS-järjestelmää, käännettyä verovelvollisuutta vai markkinapaikan oletettua myyjää koskevia sääntöjä (deemed-supplier)
  • Mitä tulosteita rajapinnan on tuotettava: kotimaisen arvonlisäveroilmoituksen tiedot, OSS/IOSS-tiedot, laskuluettelot kuten Liettuan i.SAF, pelkät pääkirjakirjaukset tai siirtotiedostot erilliselle ilmoituspalvelulle

Tämä on tärkeää siksi, että OSS ei kata kaikkia tapahtumia. Palvelut, jotka luovutetaan maassa, jossa yrityksellä on kiinteä toimipaikka, kuuluvat pääsääntöisesti kyseisen maan kotimaiseen alv-ilmoitukseen eivätkä OSS-ilmoitukseen. Mallinna kiinteät toimipaikat erikseen heti alusta alkaen, sillä muuten nämä myynnit ohjautuvat väärään paikkaan tietoja koottaessa.

Älä myöskään kovakoodaa yhtä arvonlisäverokantaa maata kohden. EU:ssa on yleisiä, alennettuja, erityisen alhaisia, pysäköinti-, nollaverokantoja ja tuotekohtaisia käsittelyjä, ja ne voivat muuttua. Luotettava lähde tietyn tuotteen verokannalle tietyssä jäsenvaltiossa on kyseisen maan veroviranomainen, ja komission TEDB-tietokanta tarjoaa yleiskuvan maiden välisistä eroista. Tallenna verokannan valinnan taustalla oleva lähde ja versio, jotta myöhempi verokantataulukon päivitys ei muuta huomaamatta vanhan tapahtuman käsittelytapaa.

Veropäätöksen mallintaminen pelkän verokannan sijaan

Toimivan integraation ytimessä on veroluokkataso (tax category), joka sijoittuu tuotteiden ja verokantojen väliin. Tuotteet eritellään luokkiin, luokat maakohtaisiin verokoodeihin ja edelleen voimassaoloajaltaan määriteltyihin verokantoihin:

tuote/palvelu
    → veroluokka
    → maakohtainen verokoodi
    → aikaleimattu verokanta ja käsittelytapa

Virheellinen ja raportointipoikkeamia aiheuttava tapa on käyttää mallia tuotteen SKU → 21 % ALV. Sama tuote voi olla eri maissa erikoiden verokantojen alainen, ja verokanta voi muuttua kesken kauden. Nordletin oma ohje arvonlisäverojen noudattamisesta pilvipohjaisessa taloushallinnossa suositteleekin juuri tällaista luokkapohjaista mallinnusta tuotteiden suoran prosenttisidonnaisuuden sijaan.

Veroluokituksen tulee olla vakaa ja sisäinen: yleisen verokannan tavarat, alennetun verokannan tavarat, sähköisesti tuotetut palvelut, tavalliset palvelut, verottomat myynnit, nollaverokannan myynnit, EU-sisäinen B2B-käännetty verovelvollisuus, EU-sisäinen etämyynti, IOSS-maahantuonti ja alustamyyjän säännön alaiset tapahtumat. Kaikki jatkotoiminnot perustuvat tähän luokitukseen.

VIES-tarkistus asynkronisena varmennusprosessina

Virallinen VIES-palvelu tarjoaa SOAP/WSDL-rajapinnan, joka ottaa vastaan kaksikirjaimisen maakoodin ja ALV-tunnuksen. Sen tunnetut rajoitukset on otettava huomioon virheidenkäsittelyssä: virheelliset syötteet, maailmanlaajuiset ja jäsenvaltiokohtaiset samanaikaisuusrajat, palvelun käyttökatkot, jäsenvaltion palvelun käyttökatkot ja aikakatkaisut. Käsittele näitä erillisinä lopputuloksina äläkä yhtenä "epäonnistunut"-tilana.

Kuormitusta ja tarkastuksia kestävä prosessi toimii seuraavasti:

  1. Normalisoi ALV-tunnus: muuta etuliite isoiksi kirjaimilla, poista sallitut välilyönnit tai välimerkit ja säilytä käyttäjän alunperin syöttämä arvo erillisenä.
  2. Tarkista maakoodin ja tunnuksen muoto paikallisesti ennen verkkokutsun tekemistä.
  3. Lähetä normalisoitu tunnus VIES-järjestelmään.
  4. Tallenna normalisoitu tunnus, pyynnön ja vastauksen aikaleimat, tila (voimassa, ei voimassa tai ei voitu käsitellä), raakavastaus, mahdolliset palveluvirheet, asiakas- ja laskutunnukset sekä sovelluksen tekemä päätös.
  5. Välimuistita onnistuneet tulokset määritellyksi ja dokumentoiduksi ajaksi.
  6. Tee tilapäisille teknisille virheille uusia yrityksiä takaisinvetoalgoritmia (backoff) käyttäen.
  7. Ohjaa ratkaisemattomat tai ristiriitaiset tapaukset manuaaliseen tarkistukseen.
  8. Tarkista voimassaolo uudelleen, kun välimuistissa oleva tulos on vanhentunut tai ennen tapahtumaa, jonka todisteet ovat keskeisiä.

Nordlet tarkistaa EU:n ALV-tunnuksen asiakkaan lisäämisen yhteydessä ja uudelleen ennen laskutusta, jos aiempi tulos on vanhentunut. Tämä on toimintatapa, joka kannattaa toteuttaa riippumatta siitä, tehdäänkö tarkistus alustalla vai omassa koodissa.

Tärkein sääntö: älä tee kassaprosessista synkronista VIES-tarkistuksen kanssa. Palvelukatkko ei tarkoita, että tunnus olisi virheellinen. Jos VIES-palvelu aikakatkaistaan myyntitapahtuman aikana, aseta tapahtuma odottamaan tarkistusta tai määritä sille väliaikainen tila. Kassaprosessin pysäyttäminen komission palvelun käytettävyyden vuoksi tuottaa tukipyyntöjä, ja hyvän asiakkaan virheellinen leimaaminen virheelliseksi on vielä pahempi vaihtoehto.

Varmennustilan erottaminen verokäsittelystä

Kun VIES-tulos on saatu, päätösmoottorilla on vielä työtä jäljellä. Tallenna nämä tiedot erillisinä kenttinä:

{
  "viesStatus": "valid",
  "vatTreatment": "intra_eu_b2b_reverse_charge",
  "evidenceStatus": "reviewed",
  "placeOfSupply": "DE"
}

Ennen käännetyn verovelvollisuuden tai vapautuksen soveltamista moottorin tulee tarkistaa, onko asiakas todella vastaanottaja, vastaavatko asiakkaan maa ja ALV-etuliite toisiaan, täyttääkö myynti EU-sisäisen kaupan edellytykset, sovelletaanko erityisiä suorituspaikkasääntöjä, onko kuljetusasiakirjoja olemassa, toimiiko myyjä oletettuna myyjänä ja sisältääkö lasku vaaditut maininnat. VIES-tarkistuksen hyväksymä tila, joka ei läpäise näitä muita testejä, ei ole vihreä valo.

Muuttumattoman alv-päätöksen luominen laskutushetkellä

Kun lasku luodaan, tallenna sen yhteyteen koko päätösketju pelkän lopullisen verokannan sijaan:

lasku
  ├─ rivin veroluokka
  ├─ suorituspaikka (place of supply)
  ├─ arvonlisäverojärjestelmä
  ├─ maakohtainen verokanta
  ├─ verokantataulukon versio
  ├─ VIES-todistusviite
  ├─ sijaintitodistusviitteet
  ├─ oikeusperustaviite
  └─ markkinapaikan rooliliput

EU:n laskutussäännöt edellyttävät toimittajan ja asiakkaan tiedot, laskun numeron, kuvauksen, verottoman summan, verokannan, arvonlisäveron määrän sekä mahdolliset maininnat käännetystä verovelvollisuudesta tai vapautuksesta. Hyvityslaskuissa ja korjauksissa on oltava yksiselytinen viittaus alkuperäiseen laskuun.

Nordletin pääkirja on muuttumaton, joten korjaukset tehdään uusien kirjausten, kuten hyvityslaskujen tai oikaisukirjausten, kautta sen sijaan, että suljettuja tietoja muokattaisiin. Rakenna järjestelmäsi tämän mallin ympärille, vaikka tallennuskerros teknisesti sallisikin tietojen ylikirjoittamisen. Suljetun laskun muokkaaminen tuottaa katkoksen alkuperäisen ilmoituksen ja korjauksen väliseen ketjuun, ja juuri tätä ketjua tilintarkastaja seuraa.

Kirjaukset, verkkopalvelukutsut (webhooks) ja idempotenssi

Myyntitapahtuma synnyttää kahdenkertaisen kirjanpidon kirjaukset, jotka säilyttävät sekä kaupallisen tapahtuman että maittain ja järjestelmittä eritellyn arvonlisäverovastuun. Kotimainen myynti kirjataan seuraavasti:

Dr Myyntisaamiset / maksukertymä
    Cr Myynti
    Cr Suoritettava ALV - DE - kotimainen

EU-sisäinen B2B-myynti käännitetyllä verovelvollisuudella kirjaa myynnin ilman lähtevää arvonlisäveroa ja liittää mukaan viitteen käännetyn verovelvollisuuden todisteisiin. Tilikartta on vapaasti valittavissa; tärkeintä on, että raportointidimensiot säilytetään jokaisella kirjauksella: jäsenvaltio, järjestelmä, veroluokka, verokanta, kausi, lähdelasku ja korjaushistoria.

Ohjaa tilanmuutoksia verkkopalvelukutsujen (webhooks) avulla äläkä kyselemällä (polling). Nordlet lähettää tapahtumia, kuten sale_invoice.paid, allekirjoittaa sanomat ja yrittää uudelleen takaisinvetoalgoritmilla. Anna jokaiselle kirjoitukselle deterministinen idempotenssiavain:

sale:{platform_order_id}:invoice:{invoice_version}

Myös kuluttajakoodisi on oltava idempotentti. Verkkopalvelukutsu saattaa saapua kahdesti, myöhässä tai sen jälkeen, kun alkuperäinen pyyntö on jo onnistunut. Tarkista allekirjoitukset, tallenna tapahtumatunnukset, eristä virheelliset tapahtumat, käsittele ne kestävän jonon kautta ja täsmäytä verkkopalvelukutsujen tila rajapinnan kanssa säännöllisesti. Jos allekirjoitetut verkkopalvelukutsut ja idempotenssiavaimet eivät ole ennestään tuttuja, tässä piilevät kaikkein hienovaraisimmat kaksoiskirjausvirheet.

Ryhmittely OSS-järjestelmää varten ja ilmoitusvalmiiden vientien tuottaminen

Ryhmittele OSS-kelpoiset tapahtumat järjestelmän, kulutusjäsenvaltion, myyntityypin, veroluokan, verokannan, verottoman summan, arvonlisäveron määrän, lähetys- tai kiinteän toimipaikan jäsenvaltion, valuutan ja korjauskauden mukaan.

Unionin järjestelmän ilmoitus erottelee myynnit kulutusjäsenvaltion mukaan ja erottaa rekisteröintijäsenvaltion palvelut, muiden kiinteiden toimipaikkojen palvelut sekä eri jäsenvaltioista lähetetyt tavarat. Se ilmoittaa verottomat summat ja arvonlisäverot erikseen yleiselle ja alennetulle verokannalle. Verottomat ja nollaverokannan myynnit jätetään kokonaan OSS-ilmoituksen ulkopuolelle.

Muutamia käytännön yksityiskohtia, jotka aiheuttavat helposti virheitä:

  • Unionin ja Unionin ulkopuolisen järjestelmän OSS-kaudet ovat neljännesvuosittaisia; IOSS on kuukausittainen. Ilmoitukset ja maksut erääntyvät seuraavan kuukauden loppuun mennessä.
  • Nolla-ilmoitus on annettava jokaiselta kaudelta silloinkin, kun asiaankuuluvia myyntejä ei ole tehty. Luo kausittainen tarkistuslista ja muodosta nolla-arvoinen ilmoitus automaattisesti.
  • OSS-ilmoitukset tehdään euroina käyttäen EKP:n viitekurssia verokauden viimeisenä päivänä, mikäli muunnosta tarvitaan. Tallenna lähdevaluutta, valuuttakurssi, kurssin päivämäärä, muunnettu summa ja käytetty menetelmä.

Vientien tulee perustua lukittuun pääkirjaan, ei koskaan erilliseen taulukkolaskelmaan. Taulukkolaskennan summat hukkaavat korjaukset, lähetysmaat, verokannat ja todisteet. Vienti sisältää ilmoituskauden, järjestelmän, kulutusjäsenvaltion, lähetysmaan, myyntiluokan, verokannan, verottoman ja verollisen summan, valuutan ja sovelletun valuuttakurssin, kuluvan ja edellisen kauden korjaussummat, lähdelaskujen tunnukset, hyvityslaskuviitteet sekä täsmäytyssummat.

Määrittele tarkasti, mitä rajapinta tässä kohtaa tuottaa. Nordlet laskee OSS- ja IOSS-ilmoitukset laskuista ja pääkirjasta mukaan lukien edellisen kauden korjaukset, toimittaa kotimaiset ilmoituspaketit Liettualle (FR0600), Saksalle (UStVA) ja Puolalle (JPK_V7M) sekä tuottaa VMI-valmiit i.SAF-rekisterit Liettualle. Tämä on ilmoitusvalmista dataa. Yksi rajapintakutsu ei lähetä minkään maan alv-ilmoitusta kunkin kansallisen verohallinnon yhdyskäytävän kautta, eikä mitään ilmoitusta toimiteta veroviranomaiselle puolestasi. Pidä kirjanpito, ilmoitusten muodostaminen, vienti, yhdyskäytävälähetys ja maksun vahvistaminen järjestelmässäsi erillisinä tiloina. EU-alv-moottorin oppaassa on dokumentoitu ne tapaukset, jotka moottori ratkaisee, ja tilanteet, joissa sen varoitukset aktivoituvat.

Kauden lukitseminen

Tarkistuksen ja hyväksynnän jälkeen laskut täsmäytetään pääkirjan kirjauksiin, pääkirjan alv-saldot täsmäytetään ilmoitusaineistoon, ilmoitus viedään ulos, ilmoitus- ja maksureferenssit tallennetaan ja kausi lukitaan. Nordlet estää kirjaamisen lukittuun kuukauteen myös rajapinnan kautta. Lukituksen jälkeiset korjaukset tehdään myöhemmälle kaudelle siten, että niissä on selkeät viittaukset alkuperäiseen asiakirjaan ja kyseessä olevaan ilmoituskkauteen.

Yleiset virhetyypit ja niiden välttäminen

Virhetyyppi Miksi se tapahtuu Korjaustoimenpide
Pidetään kelvollista VIES-tulosta riittävänä todisteena nollaverokannasta VIES ei vahvista verovapausoikeutta Tallenna asiakas-, myynti-, kuljetus- ja laskutodisteet tuloksen oheen
Pidetään virheellistä tulosta todisteena rekisteröinnin puuttumisesta Tunnusta ei ehkä ole aktivoitu EU-sisäiseen kauppaan tai tietokanta laahaa jäljessä Erota virheellinen, käsittelemätön ja tekninen vika; ohjaa kiistatilanteet tarkistettavaksi
Tehdään kassaprosessista synkroninen VIES-palvelun kanssa Samanaikaisuusrajat, aikakatkaisut, käyttökatkot Asynkroninen varmennus, lyhytaikainen välimuisti, takaisinveto, väliaikaiset tilat
Välimuistitetaan tuloksia ikuisesti Rekisteröinti- ja aktivointitila voivat muuttua Tallenna aikaleimat ja voimassaoloaika; tarkista uudelleen ennen laskutusta, jos vanhentunut
Mallinnetaan tuotteet suoraan alv-prosentteihin Verokannat ja verovapaudet riippuvat maasta ja päivämäärästä Tuote -> veroluokka -> maakoodi -> aikaleimattu verokanta
Muodostetaan OSS-raportti taulukkolaskennasta Summat jättävät pois korjaukset, lähetysmaat ja todisteet Johda tiedot muuttumattomasta pääkirjasta ja tallenna dimensiot jokaiselle kirjaukselle
Sisällytetään kiinteän toimipaikan palvelut OSS-järjestelmään Tietyt palvelut kuuluvat kotimaiseen ilmoitukseen Mallinna toimipaikat erikseen, ohjaa järjestelmän mukaan ennen tietojen yhdistelyä
Jätetään nolla-ilmoitukset antamatta OSS vaatii ilmoituksen jokaiselta kaudelta Luo tarkistuslista ja luo nolla-arvoiset ilmoitukset automaattisesti
Muokataan suljettuja laskuja korjaustarkoituksessa Tuottaa katkoksen ilmoituksen ja korjauksen väliseen ketjuun Käytä myöhemmän kauden hyvityslaskuja ja oikaisukirjauksia

Mistä kannattaa aloittaa

Jos tämä integraatio aloitettaisiin huomenna, veroluokkataso ja arvonlisäveropäätöksen tietorakenne rakennettaisiin ennen yhtäkään raportointirajapintakutsua. Luokituksesta tehdään vakaa, tuotteet sidotaan luokkiin ja päätöstietueeseen tallennetaan raa'at maakohtaiset signaalit sekä peruste sille, miksi suorituspaikka valittiin. Kaikki muu – VIES, kirjaukset, OSS-ryhmittely, vienti – on riippuvainen siitä, että tämä malli on oikein.

Sen jälkeen VIES kytkettäisiin asynkroniseksi varmennusvaiheeksi, jossa on neljä erillistä tilaa, ja sitä testattaisiin hiekkalaatikko-organisaatiossa käyttäen vaikeita tapauksia (aikakatkaisut, käsittelemättömät tulokset, yhteensopimattomat etuliitteet) ennen tuotantoon siirtymistä. Edellä mainitut virheet ovat lähes kokonaan vältettävissä, jos tietomalli kuljettaa todisteita ja raportointidimensioita mukanaan ensimmäisestä kirjauksesta lähtien.

UKK

Tarkoittaako kelvollinen VIES-vastaus sitä, että voin myydä EU-sisäisen B2B-myynnin nollaverokannalla?

Ei tarkoita. VIES vahvistaa, että ALV-tunnus on rekisteröity ja, mikäli sitä tuetaan, aktivoitu EU-sisäiseen kauppaan. Oikeus yhteisömyynnin vapauttamiseen verosta riippuu lisätodisteista: siitä, että asiakas on todellinen vastaanottaja, kuljetus- tai lähetysasiakirjoista, oikeasta suorituspaikasta ja vaadituista laskumerkinnöistä. Tallenna VIES-tulos yhtenä syötteenä äläkä lopullisena päätöksenä.

Pitäisikö VIES-varmennuksen pysäyttää kassaprosessi?

Ei pitäisi. VIES-palvelussa voi olla aikakatkaisuja tai samanaikaisuusrajoja, eikä palvelukatkko vastaa virheellistä tunnusta. Suorita tarkistus asynkronisesti, välimuistita onnistuneet tulokset dokumentoidun ajan, yritä tilapäisiä virheitä uudelleen ja siirrä epäselvät tapaukset tarkastettaviksi väliaikaisella tilalla sen sijaan, että myynti epäonnistuisi.

Voiko pilvipohjainen taloushallinnon rajapinta lähettää arvonlisäveroilmoitukseni automaattisesti?

Se voi tuottaa ilmoitusvalmista dataa järjestelmän ja jäsenvaltion mukaan ryhmiteltynä, laskettuna muuttumattomasta pääkirjasta korjaukset huomioiden. Se, lähetetäänkö tiedot myös kunkin kansallisen veroviranomaisen yhdyskäytävän kautta, riippuu tuotteesta ja maasta. Nordlet laskee OSS- ja IOSS-ilmoitukset, toimittaa kotimaiset ilmoituspaketit Liettualle, Saksalle ja Puolalle sekä tuottaa VMI-valmiit i.SAF-rekisterit Liettualle, mutta se ei lähetä mitään veroviranomaiselle puolestasi. Käsittele kirjanpito, ilmoitusten muodostaminen, vienti, yhdyskäytävälähetys ja maksaminen erillisinä tiloina sen sijaan, että olettaisit yhden kutsun hoitavan kaiken kaikkialla.

Miten käsittelen korjaukset kauden lukitsemisen jälkeen?

Kirjaa ne myöhemmälle kaudelle selkeillä viittauksilla alkuperäiseen asiakirjaan ja kyseessä olevaan ilmoituskauteen. Nordlet estää uusien kirjausten tekemisen lukittuun kuukauteen myös rajapinnan kautta, joten korjaukset kulkevat hyvityslaskujen tai oikaisukirjausten kautta suoran muokkaamisen sijaan. Tämä säilyttää alkuperäisen ilmoituksen ja korjauksen välisen ketjun.

Lisätietoa aiheesta