Hintojen pyöristys

Started by Rutja76, 13.12.17 - klo:09:23

Previous topic - Next topic

Rutja76

Hei
Vuosia sitten keskusteltiin hintojen pyöristyksestä ja muokattiin mlinvoicen laskelma sen mukaan, kuten voi lukea vanhassa viestiketjussa: https://www.labs.fi/discussion/index.php?topic=421.msg1750

Avaan uudestaan tämän keskustelun koska huomasi, että yllä oleva väitteeni hintojen pyöristyksestä ei ole yhdenmukaista Verohallinnon Laskutusvaatimukset arvonlisäverotuksessa -ohjeiden kanssa: https://www.vero.fi/syventavat-vero-ohjeet/ohje-hakusivu/48090/laskutusvaatimukset_arvonlisaverotukses3/

Siinä lukee, pykälässä 6.1.10 Suoritettavan veron määrä: "[...] Veron määrä ilmoitetaan kahden desimaalin tarkkuudella. Matemaattisen pyöristyssäännön mukaan, kun desimaaliluku katkaistaan, niin viimeinen mukaan tuleva numero korotetaan yhdellä, jos ensimmäinen pois jäävä numero on 5 tai sitä suurempi numero. Pyöristys tehdään laskun loppusumman osalta."

Pyöristys tehdään siis laskun loppusumman osalta, ei jokaiselta laskuriviltä kuten nyt mlinvoice tekee.

Tässä ohjeet arvonlisäveron määrän laskemisesta (arvonlisäverollisesta sekä arvonlisäverottomasta hinnasta): https://www.vero.fi/yritykset-ja-yhteisot/tietoa-yritysverotuksesta/arvonlisaverotus/miten_arvonlisaveron_maara_lasketaa/

Huomio: arvonlisäveron määrä lasketaan eri tavalla riippuen siitä, onko lähtöhinta arvonlisäverollinen tai arvonlisäveroton.

Näiden ohjeiden perusteella pitäisi tehdä seuraavat muutokset. Käytössäni oleva mlinvoicen versio on 1.15.5.

Tiedostossa form.php rivit 698-709 sekä 761-772 (kyseessä on sama koodi):

if (VATIncluded == 1)
      {
           sumVAT = round_number(items * price, 2);
           sum = round_number(sumVAT / (1 + VATPercent / 100), 2);
           VAT = sumVAT - sum;
      }
      else
      {
           sum = round_number(items * price, 2);
           VAT = round_number(sum * (VATPercent / 100), 2);
           sumVAT = sum + VAT;
      }


muutetaan seuraavaksi (eli poistetaan pyöristys ja lasketaan määrät verohallinnon ohjeiden mukaan):

if (VATIncluded == 1)
      {
        sumVAT = items * price;
        sum = sumVAT / (1 + VATPercent / 100);
        VAT = sumVAT / (VATPercent / 100);
      }
      else
      {
        sum = items * price;
        VAT = sum * (VATPercent / 100);
        sumVAT = sum + VAT;
      }


Pyöristys tehdään sen sijaan loppusummassa, eli rivin 777 jälkeen lisätään:

if (VATIncluded == 1)
      {
        totSumVAT = round_number(totSumVAT, 2);
        totSum = round_number(totSumVAT / (1 + VATPercent / 100), 2);
        totVAT = round_number(totSum * (VATPercent / 100), 2);
      }
      else
      {
        totSum = round_number(totSum, 2);
        totVAT = round_number(totSum * (VATPercent / 100), 2);
        totSumVAT = totSum + totVAT;
      }


Tiedostossa miscfuncs.php rivit 505-513:

if ($VATIncluded) {
        $rowSumVAT = round($count * $price, 2);
        $rowSum = round(($rowSumVAT / (1 + $VAT / 100)), 2);
        $rowVAT = $rowSumVAT - $rowSum;
    } else {
        $rowSum = round($count * $price, 2);
        $rowVAT = round(($rowSum * ($VAT / 100)), 2);
        $rowSumVAT = $rowSum + $rowVAT;
    }


muutetaan seuraavaksi:

if ($VATIncluded) {
$rowSumVAT = $count * $price;
$rowSum = $rowSumVAT / (1 + $VAT / 100);
$rowVAT = $rowSumVAT / ($VAT / 100);
}
else {
$rowSum = $count * $price;
$rowVAT = $rowSum * ($VAT / 100);
$rowSumVAT = $rowSum + $rowVAT;
}


Ongelma jää kuitenkin pdf:n tulostamiseen: functionissa printSummary (tiedostossa invoice_printer_base.php) olen muokannut seuraavat rivit, jotta pyöristys tapahtuisi loppusummassa per verokanta erikseen:

foreach ($this->groupedVATs as $group) {
                $pdf->SetXY($startX, $pdf->getY() + $CellHeight);

                $pdf->Cell(
                    $CellWidth, $CellHeight, $this->formatNumber($group['vat'], 1, true), 0, 0, 'R'
                );
                $pdf->Cell(
                    $CellWidth, $CellHeight, $this->formatCurrency(round($group['totalsum'], 2)), 0, 0, 'R'
                );
                $pdf->Cell(
                    $CellWidth-10, $CellHeight, $this->formatCurrency(round($group['totalsum']*$group['vat']/100, 2)), 0, 0, 'R'
                );
                $pdf->Cell(
                    $CellWidth, $CellHeight, $this->formatCurrency(round($group['totalsum'], 2)+round($group['totalsum']*$group['vat']/100, 2)), 0, 0, 'R'
                );


En kuitenkaan ole varma, toimiiko tämä myös mikäli käytetään arvonlisäverollinen hinta lähtöhintana. Itse käytän arvonlisäverottoman ja siitä lasken alvin ja arvonlisäverollisen hinnan.

Ere Maijala

Täytyy nyt ensi alkuun todeta, ettei tuo nyt ihan selkeä ohje vieläkään ole. Minä ymmärsin lauseen "Pyöristys tehdään laskun loppusumman osalta." niin, että se koskee nimenomaan laskun loppusummaa eikä arvonlisäveron osuutta loppusummasta. Näin ollen arvonlisäveron summaakaan ei pitäisi pyöristää, mutta jos se (ja yksittäisen laskurivin ALV-osuudet) ilmoitetaan kahdella desimaalilla, niin pitääkö ne vain katkaista, vai saako pyöristää? Esimerkit menevät harmillisesti tasan kahteen desimaaliin, jolloin niistäkään ei ole tässä iloa. Joka tapauksessa jos pyöristys tehdään vasta loppusummasta, käy hyvin helposti niin, että arvonlisäveroton summa + ALV ei ole sama kuin loppusumma. Erityisen hämmentävältä tuo näyttää, jos laskulla on vain yksi rivi, jonka tiedot eivät vastaa loppusummaa. No, kaipa tälle pitää jotain tehdä taas, mutta en ole ihan varma mitä. Ehkäpä asetus, jolla voi määritellä, missä kohdassa pyöristys tapahtuu, niin toimii sitten kaikissa tilanteissa..

Rutja76

#2
Quote from: Ere Maijala on 13.12.17 - klo:20:03
Täytyy nyt ensi alkuun todeta, ettei tuo nyt ihan selkeä ohje vieläkään ole. Minä ymmärsin lauseen "Pyöristys tehdään laskun loppusumman osalta." niin, että se koskee nimenomaan laskun loppusummaa eikä arvonlisäveron osuutta loppusummasta.

Mielestäni kyseinen lause käsittää alvia joten, jos lähdetään alvittomasta summasta, pyöristys pitää tehdä ensin alvittomasta summasta, josta lasketaan alvia ja sekin pyöristetään. Tällä tavalla alviton summa + ALV on aina sama kuin alvillinen summa koska loppusumma (alvillinen) lasketaan juuri näin.

Ongelma syntyy kun lähtösumma on alvillinen, koska verohallinnon sivulla lasketaan muut määrät näin:

Arvonlisäveron määrä = sovellettava verokanta x verollinen hinta / (100 + sovellettava verokanta)

Veron peruste = 100 x verollinen hinta /  (100 + sovellettava verokanta)

Tässä tapauksessa Arvonlisäveron määrä + Veron peruste ei ole välttämättä sama kuin lähtöhinta eli alvillinen hinta.

Selvä on mielestäni ainoastaan se, että pyöristys tehdään lopussa, ei yksittäisillä riveillä erikseen. Tämä toki vaikuttaa siihen, että jos laskee rivien määrät yhteen, niin lopputulos ei ole välttämättä samaa kuin loppusummat, mutta siihen ei mielestäni ole ratkaisu. Olenhan itse huomannut että ruokakaupoissa ja muissa laskuissa tulee välillä sentin heittoja. Jopa loppusummasta kun esim. ruokakaupoista lasketaan alvit ja alvittomat hinnat alvillisista määristä.

Rutja76

Quote from: Ere Maijala on 13.12.17 - klo:20:03
Täytyy nyt ensi alkuun todeta, ettei tuo nyt ihan selkeä ohje vieläkään ole. Minä ymmärsin lauseen "Pyöristys tehdään laskun loppusumman osalta." niin, että se koskee nimenomaan laskun loppusummaa eikä arvonlisäveron osuutta loppusummasta. Näin ollen arvonlisäveron summaakaan ei pitäisi pyöristää, mutta jos se (ja yksittäisen laskurivin ALV-osuudet) ilmoitetaan kahdella desimaalilla, niin pitääkö ne vain katkaista, vai saako pyöristää? Esimerkit menevät harmillisesti tasan kahteen desimaaliin, jolloin niistäkään ei ole tässä iloa. Joka tapauksessa jos pyöristys tehdään vasta loppusummasta, käy hyvin helposti niin, että arvonlisäveroton summa + ALV ei ole sama kuin loppusumma. Erityisen hämmentävältä tuo näyttää, jos laskulla on vain yksi rivi, jonka tiedot eivät vastaa loppusummaa. No, kaipa tälle pitää jotain tehdä taas, mutta en ole ihan varma mitä. Ehkäpä asetus, jolla voi määritellä, missä kohdassa pyöristys tapahtuu, niin toimii sitten kaikissa tilanteissa..
Tähän liittyen sain vastauksen verohallinnon vastauspankkiin: https://vero24.vero.fi/vastauspankki/#!singlePublishedAnswer?id=82ee2815-4e57-d0eb-2f28-975f50d83ba9

jossa sanotaan:

"Silloin, kun samaan liiketapahtumaan sisältyy usean saman verokannan piirissä olevan hyödykkeen myynti, ei arvonlisäveron pyöristämistä tule tehdä hyödykekohtaisesti. Pyöristäminen tulee suorittaa vasta loppusummasta, jolloin mahdollisuus pyöristämisestä aiheutuvan virheen kumuloitumiseen poistuu.

Veron määrä lasketaan pyöristetystä veron perusteesta, muutoin lopullinen veron määrä ei vastaa laskutettua veron perustetta, koska veloitus tapahtuu joka tapauksessa pyöristetyillä luvuilla."

Eli ymmärtääkseni tuoterivien laskelmissä ei pyöristetä mitään, vaan loppusummat (erikseen per verokanta) pyöristetään kahdella desimaalilla. Jos arvonlisäverottomasta hinnasta lasketaan alvit (nettoperuste), niin arvonlisäveroton lopullinen hinta ensin pyöristetään kahdella desimaalilla ja sitten lasketaan alv (pyöristämällä sekin). Jos arvonlisäverollisesta hinnasta lasketaan alvit (bruttoperuste), niin ymmärtääkseni menetellään samalla tavalla.

Ere Maijala

Kiitos, kun selvitit asiaa. Täytyy siis paneutua tuohon.