W naszych serwisach bardzo często pojawia się zarządzanie cenami różnych produktów (wyliczanie cen, stawek VAT oraz innych skomplikowanych obliczeń). W większości przypadków podstawą jest cena netto, natomiast problem pojawia się, kiedy klient zażyczy aby podstawą była cena brutto!
Przy reprezentacji cen w postaci DECIMAL(X, 2) nie możliwe jest ustalenie dokładnej ceny netto, VAT oraz brutto w przypadku, gdy musimy ją pomnożyć przez jakąś liczbę. Rozpatrzmy przypadek, kiedy cena brutto wynosi 2.70zł a stawka podstawowa VAT to 22%:
Cena brutto: 2.70zł
Cena netto (to cena brutto podzielona przez 122%): 2.70zł / 1.22 = 2.21zł (po zaokrągleniu)
Kwota VAT (to cena netto pomnożona przez 22%): 2.21zł * 0.22 = 0.49 (po zaokrągleniu)
A więc jak ja powyższym przykładzie widzimy, że kwota netto + kwota VAT daje nam dokładną cenę brutto. Radośnie zapisujemy do bazy cenę jednostkową i cieszymy się, że nasza aplikacja działa ale popatrzmy co się dzieje, kiedy zamawiamy 100 takich produktów:
Cena brutto: 270zł
Cena netto: 221zł
Kwota VAT: 49zł
Zgadza się! 221zł + 49zł = 270zł Cieszymy się (niestety zbyt wcześnie) ponieważ nasza aplikacja potrafi dodawać i mnożyć, ale jeżeli spojrzy na to bystre oko pani sekretarki z urzędu skarbowego to nam powie, że nie znamy podstaw matematyki ;( Ponieważ oto co następuje:
Cena brutto (cena porządana): 270zł
Cena netto: 270zł / 1.22 = 221.31zł (nie zaś 221zł)
Kwota VAT: 221.31zł * 0.22 = 48.69zł (a nie 49zł)
Powyżej już widać gołym okiem, że wszystkie stawki sie zgadzją. Jednakowoż za każdym razem wyliczamy cenę netto, na podstawie której znowu obliczamy kwotę VAT. Jeżeli chcemy przechowywać obie ceny (netto i brutto) jednostkowe w bazie danych należy to zrobić z odpowiednią precyzją, w moim przypadku było to 6 miejsc po przecinku (DECIMAL(X,6)) ponieważ mało prawdopodobne jest to, że ktoś zamówi x-set tysięcy sztuk jednego produktu.
Cena jednostkowa brutto: 2.70zł
Cena jednostkowa netto: 2.70zł / 1.22 = 2.213114zł
Kwota jednostkowa VAT: 2.213114zł * 1.22 = 0.486885zł
Cena złożona brutto: 270zł (100 sztuk)
Cena złożona netto: 221.311475zł (221.31zł)
Kwota złożona VAT: 221.311475zł * 0.22 = 48.688524zł (48.69zł)
Z ciekawości też poszukałem informacji na tego w jaki sposób rozwiązywane jest to w programach typowo magazynowych (np.: Subiekt) i okazało się, że w bazie przechowywana jest jednynie cena podstawowa, na której na bierząco wykonywane są obliczenia o dużej precyzji liczb :)
4 Komentarze
i dokładnie tak to sie powinno robić ze przchowujesz cene jednostkowa i na tej podstawie wyliczać podatki, przy twoim założeniu vat jednostkowy na produkcie może być inny przy zamówieniu 100 sztuk niż przy zamawianiu 10000 sztuk a tak być nie może.
Więc właśnie – nieważne czy w moim przypadku ceną wejściową jest netto czy brutto, ja mam zawsze zapisaną cenę netto o określonej precyzji, na podstawie której wykonuje pozostałe obliczenia ;)
Polecam zapoznać się z podstawą prawną dotyczącą zaokrąglania :)
Mówi ona że ważne są wyliczenia poszczególnych pozycji faktury, a nie suma.
Czyli: Cena brutto: 270zł, Cena netto: 221zł, Kwota VAT: 49zł jest prawidłowe.
Proponowalbym poczytac troche na sieci o wyliczaniu cen netto i brutto. Bo to co piszesz moze wyglada na sprytne ale jest nie zgodne z prawem. Prawo dopuszcza ‘poslizgi’ na groszach. Wymaga jedynie zgodnosci z ustawa i rozporzadzeniami, ktore te kwestie reguluja. Tym bardziej ze nie trudno wyobrazic sobie branze, w ktorej sprzedaje sie nie w setkach sztuk ale milionach sztuk i juz Twoje rozwiazanie nie jest prawdziwe. Ponizej linka, w ktorej dyskusja sie toczyla jak prawidlowo rozwiazac ten problem:
http://prawo.money.pl/grupa-pl_soc_prawo/ceny;netto;i;brutto;na;dokumentach;sprzedazy,watek,881001.html
Thank you.