Konfiguracja podatków UE w Liferay: Praktyczny przewodnik

Konfiguracja wyliczania podatków być skomplikowanym zadaniem, szczególnie w przypadku prowadzenia działalności w Unii Europejskiej. Zróżnicowane przepisy dotyczące sprzedaży krajowej, transakcji transgranicznych i eksportu wymagają od firm nawigowania w zawiłościach regulacji, aby zapewnić zgodność z prawem. Ten wpis to praktyczny przewodnik po wymogach podatkowych w UE i ich konfiguracji w Liferay. Omówimy różne scenariusze - sprzedaż w obrębie kraju, sprzedaż transgraniczną w UE i poza UE - oraz wskażemy potencjalne wyzwania, w tym ograniczenia domyślne Liferay i sposoby ich rozwiązania.

Podatki UE w Liferayu - zdjęcie główne

Wprowadzenie

Zacznijmy od omówienia tematów, które poruszymy w tym artykule. Jak sugerują tytuł i opis, będziemy mówić o podatkach, a konkretnie o podatkach w Liferayu.

Artykuł został podzielony na trzy części:

  • Najpierw przyjrzymy się ustawieniom podatkowym dostępnym w Liferay Commerce.
  • Następnie omówimy podstawy opodatkowania w UE i zidentyfikujemy braki w Liferay Commerce.
  • Na koniec zaproponujemy potencjalne rozwiązania problemów zdefiniowanych w drugiej części.

Pierwsze dwie sekcje powinny być zrozumiałe nawet dla osób, które nie są ekspertami w Liferay, deweloperami czy specjalistami ds. podatków. Trzecia sekcja natomiast będzie zawierała bardziej techniczne rozwiązania, które mogą być trudniejsze do zrozumienia dla czytelników bez wcześniejszego doświadczenia z Liferay Commerce. Mimo to postaramy się, aby treść była możliwie przystępna, bez nadmiernego wchodzenia w szczegóły.

Mam nadzieję, że ten artykuł będzie dla Ciebie interesujący! I jak zawsze, jeśli potrzebujesz pomocy w kwestiach poruszonych w tym wpisie, skontaktuj się z nami – nasi eksperci chętnie Ci pomogą.

Zastrzeżenie

Przed przejściem do szczegółów warto zaznaczyć, że choć jesteśmy ekspertami w Liferay, nie jesteśmy doradcami podatkowymi. Przepisy podatkowe są złożone i różnią się w zależności od modelu biznesowego, lokalizacji oraz lokalizacji klientów. Zawsze konsultuj się z wykwalifikowanym doradcą prawnym lub podatkowym, aby upewnić się, że konfiguracja podatków jest zgodna z lokalnymi i międzynarodowymi przepisami. Ten artykuł ma jedynie pomóc w rozpoczęciu konfiguracji. Pamiętaj również, że opisane tutaj zasady są aktualne w momencie pisania, ale mogły ulec zmianie, co również należy wziąć pod uwagę.

Na potrzeby tego artykułu zakładamy, że opisywana działalność (e-commerce) jest zarejestrowana w kraju znajdującym się w Unii Europejskiej. Przedstawione wskazówki mogą być jednak przydatne również dla firm spoza UE, nawet jeśli szczegółowe przepisy się różnią.

Najpierw opiszmy trzy przypadki, z którymi możesz się spotkać przy obsłudze podatków, oraz co można zrobić „out of the box”, a co wymaga dodatkowej obsługi:

  • Sprzedaż w tym samym kraju
  • Sprzedaż do innego kraju w obrębie UE
  • Sprzedaż do kraju spoza UE

Podatki w Liferay Commerce

Ustawienia podatkowe w Liferay Commerce są dość proste:

  • Ustawienia podatków są powiązane z kanałem.
  • Domyślnie dostępne są trzy silniki podatkowe (przepraszamy, nie mamy pomysłu na lepsze tłumaczenie ;): By Address, Remote, Fixed Tax Rate.
  • Możesz również zdefiniować własne silniki podatkowe, jeśli zajdzie taka potrzeba.

Panel ustawień podatków w kanale

Trzy silniki podatkowe mają różne zastosowania:

  • Fixed Tax Rate: po prostu stosuje tę samą stawkę podatkową dla każdego klienta.
  • By Address: umożliwia definiowanie niestandardowych stawek podatkowych dla każdego kraju, regionu, a nawet kodu pocztowego.
  • Remote: stawka podatkowa jest obliczana zdalnie.

Dla silników "Fixed Tax Rate" i "By Address" możesz również zdefiniować różne stawki dla różnych produktów. W UE jest to powszechne, ponieważ różne grupy produktów mogą podlegać różnym stawkom podatkowym. Na przykład żywność może mieć inną stawkę podatkową niż samochody. Ten przypadek jest w pełni obsługiwany – wystarczy zdefiniować kategorie podatkowe: Panel kategorii podatkowych

Następnie upewnij się, że są one poprawnie przypisane do produktów: Przypisanie kategorii podatkowej do produktu

Możliwe jest również zdefiniowanie kategorii podatkowej dla wysyłki: Panel kategorii podatkowych dla wysyłki w kanale

Ustawienia są naprawdę proste i nie powinny sprawiać problemów podczas konfiguracji.

Podstawy podatku VAT przy sprzedaży w EU

Najpierw opiszmy trzy przypadki, z którymi możesz się spotkać przy obsłudze podatków, oraz co można zrobić „out of the box”, a co wymaga dodatkowej konfiguracji:

  • Sprzedaż w tym samym kraju
  • Sprzedaż do innego kraju w obrębie UE
  • Sprzedaż do kraju spoza UE

Pamiętaj, że używamy uproszczonych zasad, które nie mają zastosowania do wszystkich rodzajów działalności. Omówienie wszystkich możliwych scenariuszy wykracza poza zakres tego artykułu.

Jednak przedstawione tutaj zasady są szeroko stosowane i mogą zostać dostosowane do innych rodzajów działalności, po wcześniejszej weryfikacji odpowiednich przepisów dla Twojej konkretnej sytuacji z doradcą podatkowym. Warto również zaznajomić się z artykułem Komisji Europejskiej "Where to Tax", który może pomóc Ci w odnalezieniu zasad związanych z Twoją działalnością.

Sprzedaż w tym samym kraju

To najprostszy przypadek. Gdy sprzedajesz produkty lub usługi klientom w tym samym kraju, co Twoja firma:

  • B2C (Business to Consumer): Stosujesz stałą stawkę VAT obowiązującą w Twoim kraju, zgodnie z lokalnymi przepisami podatkowymi.
  • B2B (Business to Business): Również stosujesz stałą stawkę VAT, chyba że obowiązują szczególne przepisy (np. odwrotne obciążenie).

Na przykład, jeśli Twoja firma znajduje się w Polsce oraz Twój klient jest z Polski, naliczasz standardową stawkę VAT dla danego typu produktu (w większości przypadków 23%).

Jak skonfigurować w Liferay:

  • Użyj wbudowanego silnika podatkowego "By Address" i ustaw stawkę podatkową dla swojego kraju w sekcji "Commerce Settings" w panelu sterowania. Silnik podatkowy "By Address" - ustawienia krajów

Możesz także utworzyć różne typy produktów, z których każdy będzie miał swoją własną stawkę np. 8% lub 5%.

Dla uproszczenia w dalszej części tego artykułu będziemy używać standardowej stawki VAT w wysokości 23%. Pamiętaj jednak, że możesz stosować różne stawki podatkowe dla różnych krajów i typów produktów. Nie stanowi to żadnego problemu i można tym łatwo zarządzać, dodając kolejne rekordy w konfiguracji "By Address".

Sprzedaż do innych krajów UE

W przypadku sprzedaży do innych krajów UE przepisy podatkowe zależą od tego, czy transakcja jest B2C czy B2B.

B2B (Business to Business)

Zacznijmy od B2B, które jest stosunkowo proste:

  • Zasadniczo VAT nie jest naliczany. Zamiast tego stosuje się mechanizm "odwrotnego obciążenia", co oznacza, że klient jest odpowiedzialny za rozliczenie VAT w swoim kraju.
  • Aby zastosować mechanizm "odwrotnego obciążenia", musisz zweryfikować numer VAT klienta za pomocą systemu VIES.

Pojawia się pytanie: jak zweryfikować numer VAT? To pierwsze wyzwanie, z którym możesz się spotkać, i którego możliwe rozwiązania przedstawimy w dalszej części.

B2C (Business to Consumer)

  • Jeśli Twoja całkowita sprzedaż transgraniczna do konsumentów w innych krajach UE przekracza próg (obecnie 10 000 € rocznie dla całej UE), musisz naliczać VAT na podstawie kraju klienta. Aspekty prawne i administracyjne, takie jak rejestracja podatkowa, zostały jednak znacznie uproszczone dzięki wprowadzeniu kilka lat temu systemu OSS (One-Stop Shop).
  • Jeśli Twoja sprzedaż znajduje się poniżej tego progu, możesz stosować lokalną stawkę VAT bez korzystania z systemu OSS, chyba że zdecydujesz się na dobrowolne przystąpienie do niego w celu uproszczenia procedur.

Ważne ograniczenie w Liferayu

Jak widać, przy sprzedaży do innego kraju mogą obowiązywać dwie, a nawet trzy różne stawki VAT.
Weźmy jako przykład firmę zarejestrowaną w Polsce. Przy sprzedaży do:

  • Niemieckiej firmy z ważnym numerem VAT UE: Obowiązuje mechanizm odwrotnego obciążenia, co oznacza 0% VAT z perspektywy zamówienia.
  • Niemieckiego konsumenta (nie firmy) przy sprzedaży poniżej rocznego progu 10 000 euro: Możesz zastosować polską stawkę VAT np. 23%.
  • Niemieckiego konsumenta (nie firmy) przy sprzedaży powyżej rocznego progu 10 000 euro: Musisz zastosować niemiecką stawkę VAT np. 19%.

Domyślnie Liferay nie pozwala na ustawienie różnych stawek VAT dla tego samego kraju. Na przykład:

  • Jeśli sprzedajesz z Polski do Niemiec, nie możesz skonfigurować Liferay Commerce tak, aby stosował 0% VAT dla sprzedaży B2B i jednocześnie stosował niemiecką stawkę VAT dla sprzedaży B2C.

Ponadto Liferay nie śledzi, czy Twoja sprzedaż przekracza próg sprzedaży w UE. Te dane muszą być przechowywane i zarządzane osobno.

Wkrótce omówimy potencjalne rozwiązania obu tych wyzwań.

Sprzedaż do krajów spoza UE

W przypadku sprzedaży klientom spoza UE:

  • B2C: VAT zazwyczaj nie jest naliczany, ponieważ takie transakcje są traktowane jako eksport. Jednak w kraju klienta mogą obowiązywać lokalne podatki lub cła.
  • B2B: Podobnie, VAT nie jest naliczany, ale należy zapewnić odpowiednią dokumentację dla celów celnych i podatkowych.

Wymagana dokumentacja

Aby zastosować stawkę VAT 0%, często potrzebne są dowody wysyłki, takie jak list przewozowy, potwierdzenie wysyłki lub dowód dostawy. Bez tej dokumentacji urząd podatkowy może odrzucić stawkę 0% i wymagać zapłaty VAT. Niemniej posiadanie odpowiedniej dokumentacji nie jest stricte związane z obliczaniem podatków w Liferay więc pominiemy tę kwestie.

Jak skonfigurować Liferay Commerce:

  • Aby zastosować stawkę 0% VAT: wystarczy nie konfigurować danego kraju w mechanizmie "By Address".

Wypełnianie luk w obliczeniach podatkowych w Liferay

Teraz zajmiemy się problemami zidentyfikowanymi wcześniej i omówimy, jak można je rozwiązać w Liferayu. Na początek szybka uwaga: ta sekcja będzie bardziej techniczna. Chociaż nie zagłębimy się aż do poziomu kodu to jednak znajdziesz tutaj odniesienia wymagające pewnej znajomości Liferaya.

Pamiętaj jednak: jeśli napotykasz trudności z konfiguracją podatków w Liferay Commerce i nie masz w zespole osób, które mogłyby je rozwiązać, chętnie Ci pomożemy. Dzięki wieloletniemu doświadczeniu w pracy z Liferay Commerce dobrze rozumiemy te wyzwania. Przez lata zdobywaliśmy wiedzę podczas licznych wdrożeń i jesteśmy gotowi dostarczyć profesjonalne rozwiązania dopasowane do Twoich potrzeb.

Wracając do tematu. Podsumujmy kluczowe problemy, które należy rozwiązać:

  • Walidacja numerów VAT UE.
  • Stosowanie różnych stawek podatkowych dla transakcji B2B i B2C.
  • (Opcjonalnie) Obsługa progów sprzedaży w UE.

Walidacja numerów VAT

Walidacja numerów VAT jest niezbędna do prawidłowych obliczeń podatkowych. Bez właściwej walidacji zastosowanie odpowiednich stawek podatkowych, jak opisano wcześniej, staje się niemożliwe. Na szczęście Komisja Europejska udostępnia API SOAP, które pozwala na weryfikację numerów VAT.

Dokładny proces wdrożenia zależy od procesu tworzenia klientów. Oto kilka czynników, które należy uwzględnić:

  • Czy klienci B2B mogą rejestrować się samodzielnie, czy są zarządzani przez Twoich pracowników?
  • Kiedy numer VAT jest podawany? Podczas tworzenia konta klienta, przy realizacji zamówienia czy w innym momencie?
  • Co powinno się stać, jeśli numer VAT, który wcześniej został zweryfikowany, przestanie być ważny?

Możliwe rozwiązania

  • Utwórz niestandardowe pole (custom field) typu boolean (true/false) na poziomie Account Entry, np. vatIdValid, i ustaw je jako ukryte.
  • Skonfiguruj CRONa (job schedulera) do nocnej weryfikacji wszystkich kont. Jeśli numer VAT dla danego konta przestanie być ważny, ustaw vatIdValid na fałsz.
  • Zdefiniuj akcje w przypadku nieprawidłowych numerów VAT zgodnie z potrzebami biznesowymi, np. powiadamianie menedżera konta e-mailem lub blokowanie użytkowników przed realizacją zamówień do momentu rozwiązania problemu.

Dla firm z dużą liczbą klientów b2b (tysiące lub więcej) codzienna weryfikacja każdego konta może być jednak obciążająca, szczególnie jeśli wiele kont jest nieaktywnych lub rzadko używanych.

W celu optymalizacji można weryfikować numer VAT tylko wtedy, gdy użytkownik danego konta się loguje i dodatkowo ograniczyć to do maksymalnie jednej weryfikacji dziennie. Takie podejście minimalizuje zbędne weryfikacje dla nieaktywnych kont.

Istnieje wiele sposobów rozwiązania tego problemu, a najlepsze rozwiązanie zależy od specyficznych potrzeb Twojej firmy. Niezależnie od tego, czy integrujesz weryfikację z procesem tworzenia klientów, automatyzujesz powiadomienia, czy optymalizujesz częstotliwość weryfikacji, kluczowe jest dostosowanie rozwiązania do Twojej działalności.

Różne stawki podatkowe dla B2B i B2C

Kolejnym wyzwaniem jest stosowanie różnych stawek podatkowych dla transakcji B2B i B2C w tym samym kraju w UE. Choć może kusić stworzenie osobnych kanałów dla każdego z nich, takie podejście często jest nieefektywne na dłuższą mete. Nie rozwiązuje też w pełni problemów, takich jak scenariusze B2C, w których stawka podatkowa zależy od przekroczenia progu sprzedaży.

Bardziej elastycznym i efektywnym rozwiązaniem jest zastosowanie niestandardowej implementacji "tax engine", który obsłuży logikę za Ciebie. Istnieją dwa potencjalne podejścia:

  • Nadpisanie zachowania silnika "By Address" i zmiana tylko potrzebnych części.
  • Stworzenie całkowicie nowego silnika ("tax engine"), ewentualnie wykorzystującego części "By Address".

Oba podejścia są stosunkowo proste.

Nadpisanie silnika podatkowego "By Address"

  • Zdefiniuj niestandardowy komponent OSGi.
  • W właściwościach komponentu ustaw commerce.tax.engine.key=by-address i przypisz mu wyższy priorytet niż oryginalnej implementacji.
  • Zaimplementuj wymagane metody w swojej niestandardowej klasie.
  • Aby ponownie wykorzystać metody z oryginalnej implementacji "By Address", wstrzyknij ją do swojej klasy za pomocą adnotacji @Reference.

Tworzenie nowego silnika podatkowego

  • Zdefiniuj niestandardowy komponent OSGi z unikalnym kluczem silnika podatkowego.
  • Zaimplementuj wymagane metody, dostosowując je do swojej logiki biznesowej.
  • Opcjonalnie możesz ponownie wykorzystać części implementacji "By Address" dla funkcji wspólnych. Możesz uzyskać do niej dostęp za pomocą @Reference.

Wybór właściwego podejścia

Decyzja między nadpisaniem a tworzeniem nowego silnika zależy od Twoich potrzeb:

  • Nadpisanie to dobra opcja, jeśli potrzebujesz jedynie drobnych zmian, zachowując większość domyślnego zachowania.
  • Tworzenie nowego silnika daje większą elastyczność, jeśli Twoje wymagania znacznie różnią się od domyślnej implementacji.

Obsługa progów sprzedaży

Ten krok jest konieczny tylko wtedy, gdy Twój portal ma być gotowy zarówno na sprzedaż poniżej, jak i powyżej progów sprzedaży. Jeśli zawsze przekraczasz próg (lub nigdy go nie przekraczasz), teoretycznie możesz „zaszyć na stałe” odpowiednią logikę. Choć takie podejście nie jest optymalne, może wystarczyć w przypadku ograniczeń czasowych i/lub ograniczeń budżetowych.

Aby śledzić, czy Twoja sprzedaż przekracza progi sprzedaży na odległość, musisz przechowywać te informacje w Liferay. Możesz to zrobić w ustawieniach instancji lub ustawieniach kanału, w zależności od potrzeb:

Użycie ustawień instancji:

  • Jeśli wszystkie kanały dzielą ten sam próg sprzedaży, dane dotyczące progów można przechowywać w ustawieniach instancji.
  • Podejście to sprawdza się, gdy wszystkie transakcje są przypisane do jednej jednostki prawnej.

Użycie ustawień kanału:

  • Jeśli każdy kanał ma własny próg sprzedaży (np. w przypadku różnych dostawców lub oddzielnych jednostek prawnych w Twojej firmie), dane można przechowywać w ustawieniach kanału.
  • To podejście pozwala na większą elastyczność i niezależność w zarządzaniu progami sprzedaży dla poszczególnych kanałów.

Jak przechowywać dane dotyczące progów

Istnieją dwa podejścia do przechowywania danych o progach:

  1. Przechowywanie kwoty sprzedaży:
  • Prowadzenie bieżącej sumy sprzedaży w danym roku.
  • Zapewnia dokładne dane, ale wymaga śledzenia wszystkich sprzedaży w portalu. W przypadku sprzedaży poza Liferay należy je wprowadzać ręcznie.
  1. Flaga logiczna (True/False):
  • Użycie prostego pola logicznego (np. „Próg przekroczony”) do wskazania, czy próg został osiągnięty.
  • Prostsze rozwiązanie, które unika potrzeby obliczeń, ale wymaga ręcznej aktualizacji w momencie przekroczenia progu.
  • W wielu przypadkach jest to najlepsze rozwiązanie: wiele firm i tak nie kwalifikuje się do uproszczonych zasad lub wręcz przeciwnie: wiemy, że nie przekroczą progu

Kroki wdrożenia:

  • Utwórz niestandardowe pole w ustawieniach instancji lub kanału, w zależności od wymagań.
  • Aktualizuj pole dynamicznie dla sprzedaży realizowanej przez portal lub ręcznie dla sprzedaży zewnętrznej.
  • Zaimplementuj logikę w swoim niestandardowym silniku podatkowym, aby odnosił się do zapisanych danych o progach i stosował odpowiednią stawkę VAT.

Przechowywanie listy krajów UE

Jeśli zdecydujesz się śledzić progi sprzedaży w UE, ważne jest, aby wiedzieć, które kraje należą do UE, a które nie.

Domyślnie Liferay nie posiada tych informacji. Aby zapewnić dokładne obliczenia, musisz przechowywać te dane w odpowiednim miejscu. Przykładowo można to zrobić poprzez:

  • Dodanie niestandardowego pola na poziomie kraju, które wskazuje przynależność do UE.
  • Utworzenie ustawienia systemowego zawierającego kody A2 krajów UE. Jest to szczególnie przydatne, jeśli masz wiele instancji, ponieważ unikasz konieczności konfiguracji każdej z nich osobno.
  • Uwzględnienie tych danych jako właściwości portalu, co czyni je dostępnymi w całym systemie.

Ostateczne przemyślenia

Choć narzędzia oferowane przez Liferay ułatwiają konfigurowanie zasad podatkowych, ich domyślna konfiguracja nie wystarcza do obsługi złożonych scenariuszy podatkowych w UE, szczególnie przy sprzedaży transgranicznej. Wdrożenie niestandardowego silnika podatkowego z odpowiednim zarządzaniem progami - z użyciem ustawień instancji lub kanału - zapewnia zgodność z przepisami VAT i elastyczność niezbędną w operacjach wielokanałowych.

W InnRay rozumiemy wyzwania, przed którymi stoją firmy w zakresie konfiguracji podatkowych. Po wdrożeniu podobnych rozwiązań dla różnych klientów, jesteśmy gotowi pomóc dostosować Liferay do Twoich specyficznych potrzeb. Jeśli potrzebujesz wsparcia lub wskazówek dotyczących ustawień podatkowych, skontaktuj się z nami - chętnie pomożemy.