決済処理を作る時の消費税計算

  • 2020年2月24日
  • 2020年2月24日
  • PHP

 商品の売買を取り扱う時、消費税は必ず現れます。消費税の計算は倍率をかけるだけといってもいくつか計算方法が考えられます。いくつか計算方法が考えられますが国が定めている計算方法があるので調べて従う必要があります。この記事では消費税についての資料とその内の計算方法に特に関わる部分を紹介します。
 参照資料は財務省が公表している次のwebページ以下のいくつかのページになります。
消費税の総額表示義務と転嫁対策に関する資料 : 財務省
 この中の内、決済に関するプログラミングに特に関係がある項目を二つ紹介します。
 一つは税込み価格の端数処理に関する定義です。詳しい引用は次です。
総額表示に関する主な質問 : 財務省#9

 

(Q9


) 現在の「税抜価格」を基に「税込価格」を設定する場合に円未満の端数が生じることがありますが、どのように処理して値付けを行えば良いのですか。

(答


.総額表示の義務付けは、消費者が値札や広告などを見れば、『消費税相当額を含む支払総額』を一目で分かるようにするためのものです。したがって、「税込価格」の設定に当たっては、一義的には、現在の「税抜価格」に消費税相当額を上乗せした金額を「税込価格」として価格設定することになります。

.この場合、ご質問のように「税抜価格」に上乗せする消費税相当額に1円未満の端数が生じる場合がありますが、その端数をどのように処理 (切捨て、切上げ、四捨五入など)して「税込価格」を設定するかは、それぞれの事業者のご判断によることとなります。

 

(注

1) 「消費税改正と物価」(平成9年4月 経済企画庁物価局)において、『事業全体で、適正な転嫁をしている場合には、ある特定の商品・サービスで税率の上昇を上回る値上げを行っても、便乗値上げには該当しない。』とされています。

(注

2) 消費税は商品の価格の一部を構成するものですので、取引金額には10%(又は軽減税率8%)の消費税相当額が含まれており、具体的には、税込価格に含まれる消費税相当額は「税込価格×10/110(又は8/108)」であるというのが原則的な考え方です。

 重要なのは”端数をどのように処理 (切捨て、切上げ、四捨五入など)して「税込価格」を設定するかは、それぞれの事業者のご判断によることとなります”の一文です。大方切り上げでしょうが顧客にどうしたいか聞く必要があります。加えて計算が変わりやすい部分なので独立した単一のメソッドにした方が扱いやすいです。
 もう一つは税込み価格の合計の計算の仕方の定義です。
総額表示に関する主な質問 : 財務省#18

(Q18


) 端数処理の特例は、例えば、税込172円(うち税15円)と値札表示した商品を3個販売した場合に、15円×3個なので消費税相当額45円とレシート表示するというように単品毎に端数処理を行っても認められますか。

(答


.消費税は、物やサービスの販売価格に織り込まれ、最終的には消費者に転嫁されることが予定された間接税です。このため消費者が支払った金額の中には、間接的に10%(又は8%)の税相当分が含まれていることになりますので、事業者の税込受取総額×10/110(又は8/108)が売上げに対して課される消費税相当額というのが原則です。したがって、ご質問のケースでは、172円×3個×10/110の『46.909…円』が売上げに対して課される消費税相当額となります。

.また、Q16で説明している端数処理の特例(経過措置)は、一領収単位(レシート)ごとに生ずる端数、すなわち税込172円×3個×10/110=46.909…円の0.909…円という1円未満の端数を処理した後の『46円』を消費税相当額としてレシート等に表示した場合に認められるものであり、単品毎の端数処理は認められていません。

 

(注

) Q161及び3に該当する場合には、これまでの端数処理の特例(旧消費税法施行規則第22条第1項:平成16年3月末で廃止)と同様、税抜157円×3個×10%=47.1円という一領収単位で生ずる1円未満の端数処理の特例が認められます。

.したがってご質問のような領収方法においては、この端数処理の特例は適用できませんので、税額計算においては、原則どおり、516円(172円×3個)×10/110の46.909…円が売上げに対する消費税額となることにご注意ください。

.なお、消費税額の計算においてご質問のような単品毎の端数処理を認めることは、原則的な考え方による消費税相当額(税込受取総額の10/110(又は8/108)との乖離が大きくなり、また、ユニット価格商品(肉などの量り売り商品)では、例えば、100グラム当たりの表示単価を10グラム当たりで表示することによって、消費税額等が生じないような値付けも可能となるなどの問題があり、認められていません。

 重要なのは”単品毎の端数処理は認められていません。”の一文です。処理順と型次第で国の定める法に反する動作になるので特に要注意です。やってはいけない処理は次です。

$total = 0;
foreach( $producs as $product ){
  $total += ceil($product * 0.1); // 一つ一つ消費税の端数を切り上げて加算
}

 対策は次の二通りがよさそうです。どちらも”あるモノの税込み料金”をオブジェクトの中にまとめる作りです。例なのでシンプルにまとめましたが色々込みの計算が複雑になったり、多岐にわたるモノの税込み料金を考える必要がある際は更に計算用クラスを別に作るのがよいです。そのようにすると処理の一元化ができ開発もチェックも簡単になります。

// 商品一つ毎に税込みを計算する必要があるなら
class Product(){
  // 商品クラスを用意
  public function withTaxAmount(){
    // ここに切り上げ、切り捨て、四捨五入が入れられていないかだけチェック
    return $this->amount * config('税率');
  }
}
// 総額の計算はクラスメソッドから得られる値を利用
$total = 0;
foreach( $producs as $product ){
  $total += $product->withTaxAmount();
}
$total = ceil($total);
// 総額だけでいいなら
class TotalAmount(){
  // 総額クラスを用意
  public function withTax(){
    return ceil($this->amount * config('税率'));
  }
}
// 総額クラス上でのみ計算
foreach( $producs as $product ){
  $totalAmount->add($product->amount);
}
$total = $totalAmount->withTax();
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG