国民健康保険料の計算ツールを作ってみた

March 5, 2014 – 1:04 pm

国民健康保険料算出用ツールを作成してみた。

所得税など国税を計算するには国税局の「確定申告書等作成コーナー」を活用することができる。私も今年でこれを利用するのは8回目となる。実に便利なツールだ。ところが、ここで計算した所得額から地方税とか国民健康保険税を計算しようにも対応するツールが見当たらない。

ということで、国民健康保険料を比較的簡便に計算するためのツールを作ってみた。以下に、Web上で動作する計算ツールを提供するとともに、このツールのソースをアップしておいた。

国民健康保険料の計算ツール: なにはともあれ、以下にツールを掲げる。ここに見られるように、この計算ツールは「国民健康保険税税率設定フォーム」と「国民健康保険税算出フォーム」のふたつのフォームから構成されている。

前者で、各自治体が設定している国民健康保険税の税率などを入力、設定する。初期値として、私の居住する自治体の平成26年度分の税率を与えていた。ここに税率などを入力すると、その他のエリアに、その入力値が反映される。

後者で国民健康保険税を算出する。ここで各世帯の国民健康保険被保険者の年齢、所得額(円)を入力すると被保険者各々の所得割、均等割に対応する計算値が示され、被保険者データの入力に伴い、世帯が支払うべき国民健康保険料がこのフォームの下方に表示される。

国民健康保険税税率設定フォーム:

合 計
所得割料率 医療分
支援分
介護分
均等割 医療分
支援分
介護分
平等割 医療分
支援分
賦課限度額 医療分
支援分
介護分

国民健康保険税算出フォーム:

所得割 均等割
世帯 年齢 所得 医療分 支援分 介護分 医療分 支援分 介護分
(1)
(2)
(3)
(4)
(5)
(6)

国民健康保険料を自分で算出する意味は?: 国税として支払う所得税と比較し、地方税あるいは国民健康保険料が高額となることが多い。

また、地方税、国民健康保険料は、居住する地域により、算出方法(料率など)が異なることから、その計算根拠そして支払額を確認することは、そう容易ではない。

特に、源泉徴収済みの株式売却益とか配当などの申告に際しては、申告すると一見節税したように思えても、これに地方税、国民健康保険税を合算をしてみると、逆に支払う税額が多くなってしまうこともある。

注意が必要だ。

この計算ツールは、そうした場面で、役立つことを期待している。

今後の課題: この計算ツール、まだまだ改善する余地はある。例えば、個々の保険税税率を入力・設定するのに代えて、市町村毎の税率をデータベース化し、自動的に料率を設定することも考えられる。

厄介な問題はなくはない。ここで示した国民健康保険料の算出方法が市町村別に料率を変更することにより計算が可能というわけにはいかない。このページに掲げた計算では、固定資産税に料率を掛ける「資産割」については取り扱っていない。また、前年所得額をベースとする算出法ではなく、住民税を基礎に算出する市町村もある。

更に、今回示した計算方式では議論していないが、国民健康保険については軽減措置が適用される。また、75歳以上の高齢者については、「後期高齢者医療制度」が適用されることになるため、75歳未満とは取り扱いが別になることにも注意が必要だ。

今後、住民税、国民健康保険、介護保険、そして後期高齢者医療制度などをトータルに取り扱うことができるツールを考えてみたい。

計算ツール使用上のご注意: このページに示した計算ツールについては、あくまで個人的に作成したものである。この使用に際して、正確さなどについては、作成者は何の責を負わない、ということに注意してほしい。

参 考:
HTML ソース:

  <table id='kokuho00' border='1' style='border-collapse: collapse'>
     <tr>
       <td colspan="3" style="width:100px;"></td>
       <td>合  計</td>
     <tr>
       <td rowspan="3" style="width:100px;">所得割料率</td>
       <td style="width:65px;">医療分</td>
       <td style="width:65px;"><input type="number" name="coef_i_incum" value="" style="width:63px;"></td>
       <td rowspan="3" align=right><span class="shotoku_total"></span></td>
     </tr>
     <tr>
       <td style="width:65px;">支援分</td>
       <td style="width:65px;"><input type="number" name="coef_s_incum" value="" style="width:63px;"></td>
     </tr>
     <tr>
       <td style="width:65px;">介護分</td>
       <td style="width:65px;"><input type="number" name="coef_k_incum" value="" style="width:63px;"></td>
     </tr>
     <tr>
       <td rowspan="3" style="width:100px;">均等割</td>
       <td style="width:65px;">医療分</td>
       <td style="width:65px;"><input type="number" name="coef_i_kinto" value="" style="width:63px;"></td>
       <td rowspan="3" align=right><span class="kinto_total"></span></td>
     </tr>
     <tr>
       <td style="width:65px;">支援分</td>
       <td style="width:65px;"><input type="number" name="coef_s_kinto" value="" style="width:63px;"></td>
     </tr>
     <tr>
       <td style="width:65px;">介護分</td>
       <td style="width:65px;"><input type="number" name="coef_k_kinto" value="" style="width:63px;"></td>
     </tr>
     <tr>
       <td rowspan="2" style="width:100px;">平等割</td>
       <td style="width:65px;">医療分</td>
       <td style="width:65px;"><input type="number" name="coef_i_shotai" value="" style="width:63px;"></td>
       <td rowspan="2" align=right><span class="byoudo_total"></span></td>
     </tr>
     <tr>
       <td style="width:65px;">支援分</td>
       <td style="width:65px;"><input type="number" name="coef_s_shotai" value="" style="width:63px;"></td>
     </tr>
     <tr>
       <td rowspan="3" style="width:100px;">賦課限度額</td>
       <td style="width:65px;">医療分</td>
       <td style="width:65px;"><input type="number" name="coef_shotai_iryou_max" value="" style="width:63px;"></td>
       <td rowspan="3" align=right><span class="gendo_total"></span></td>
     </tr>
     <tr>
       <td style="width:65px;">支援分</td>
       <td style="width:65px;"><input type="number" name="coef_shotai_shien_max" value="" style="width:63px;"></td>
     </tr>
     <tr>
       <td style="width:65px;">介護分</td>
       <td style="width:65px;"><input type="number" name="coef_shotai_kaigo_max" value="" style="width:63px;"></td>
     </tr>
  </table>



  <table id='kokuho02' border='1' style='border-collapse: collapse' >
     <tr>
       <td rowspan="2" style="width:35px;">世帯</td>
       <td rowspan="2" style="width:40px;">年齢</td>
       <td rowspan="2" style="width:75px;">所得</td>
     <td colspan="3">所得割額</td>
       <td colspan="3">均等割額</td> 
     </tr>
     <tr>
       <td style="width:60px;">医療分</td>
       <td style="width:60px;">支援分</td>
       <td style="width:60px;">介護分</td>
       <td style="width:60px;">医療分</td>
       <td style="width:60px;">支援分</td>
       <td style="width:60px;">介護分</td>
     </tr>
     <tr>
       <td>(1)</td>
       <td><input type="number" name="age01" value="" style="width:39px;"></td>
       <td><input type="number" name="inc01" value="" style="width:73px;"></td>
       <td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td>
     </tr>
     <tr>
       <td>(2)</td>
       <td><input type="number" name="age02" value="" style="width:39px; "></td>
       <td><input type="number" name="inc02" value="" style="width:73px;"></td>
       <td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td>
     </tr>
     <tr>
       <td>(3)</td>
       <td><input type="number" name="age03" value="" style="width:39px;"></td>
       <td><input type="number" name="inc03" value="" style="width:73px;"></td>
       <td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td>
     </tr>
     <tr>
       <td>(4)</td>
       <td><input type="number" name="age04" value="" style="width:39px;"></td>
       <td><input type="number" name="inc04" value="" style="width:73px;"></td>
       <td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td>
     </tr>
     <tr>
       <td>(5)</td>
       <td><input type="number" name="age05" value="" style="width:39px;"></td>
       <td><input type="number" name="inc05" value="" style="width:73px;"></td>
       <td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td>
     </tr>
     <tr>
       <td>(6)</td>
       <td><input type="number" name="age06" value="" style="width:39px;"></td>
       <td><input type="number" name="inc06" value="" style="width:73px;"></td>
       <td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td><td align=right></td> 
     </tr>
  </table>

  <div id="kokuho_total" style="margin:20px 100px;"></div>


JavaScript(JQuery) ソース:

    $(document).ready(function(){

          var coef = [];

          coef['i_incum'] = 6.4;
          coef['s_incum'] = 1.8;
          coef['k_incum'] = 1.55; 
          coef['i_kinto'] = 18500;
          coef['s_kinto'] = 5500;
          coef['k_kinto'] = 11600; 
          coef['i_shotai']= 19500;
          coef['s_shotai']= 5500;
       //
          var shotoku_total = coef['i_incum'] + coef['s_incum'] + coef['k_incum'];
          $(".shotoku_total").html( shotoku_total.toFixed(2) + ' %' );
          var kinto_total   = coef['i_kinto'] + coef['s_kinto'] + coef['k_kinto'];
          $(".kinto_total").html( comadd(kinto_total) + ' 円' );
          var shotai_total  = coef['i_shotai']+ coef['s_shotai'];
          $(".byoudo_total").html( comadd(shotai_total) + ' 円');
       //
          coef['shotai_iryou_max'] = 510000 ; 
          coef['shotai_shien_max'] = 140000 ;
          coef['shotai_kaigo_max'] = 120000 ;
          var gendo_total = coef['shotai_iryou_max'] + coef['shotai_shien_max'] + coef['shotai_kaigo_max'];
          $(".gendo_total").html( comadd(gendo_total) + ' 円');

          $("input[name='coef_i_incum']").val(coef['i_incum']);
          $("input[name='coef_s_incum']").val(coef['s_incum']);
          $("input[name='coef_k_incum']").val(coef['k_incum']);
          $("input[name='coef_i_kinto']").val(coef['i_kinto']);
          $("input[name='coef_s_kinto']").val(coef['s_kinto']);
          $("input[name='coef_k_kinto']").val(coef['k_kinto']);
          $("input[name='coef_i_shotai']").val(coef['i_shotai']);
          $("input[name='coef_s_shotai']").val(coef['s_shotai']);

          $("input[name='coef_shotai_iryou_max']").val(coef['shotai_iryou_max']);
          $("input[name='coef_shotai_shien_max']").val(coef['shotai_shien_max']);
          $("input[name='coef_shotai_kaigo_max']").val(coef['shotai_kaigo_max']);

          koujo   = 330000;
       // 
        var age_val = [];
        var inc_val = [];
        var cell    = [];
        for ( k=0; k<6; ++k ) {
            cell[k] = [];
        }

        function round( value ) {
            var num   = parseFloat(value);
            return Math.floor(num);
        }  
        function round100( value ) {
            var num100 = parseFloat(value)/100.0 ;
            return Math.floor(num100)*100;
        }        

        function comadd( value ) {
            value = "" + value;
            value = value.replace(/,/g,"");
            var num = "" + parseInt(value) ;
            while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
            return num;
        }

        function set_value( n_array ) {
          if( age_val[n_array]<75 ) {
             if ( age_val[n_array] && inc_val[n_array] ) {
                var incum = inc_val[n_array] - koujo;
                if (incum <= 0 ) incum = 0.;
                cell[n_array][0] = round(incum*coef['i_incum']/100.0);
                cell[n_array][1] = round(incum*coef['s_incum']/100.0);
                if (age_val[n_array]<40 || age_val[n_array]>=65 ) cell[n_array][2] = 0;
                else if ( age_val[n_array] <65 )                  cell[n_array][2] = round(incum*coef['k_incum']/100.0);
                cell[n_array][3] = coef['i_kinto'];
                cell[n_array][4] = coef['s_kinto'];
                if (age_val[n_array]<40 || age_val[n_array]>=65 ) cell[n_array][5] = 0;                
                else if ( age_val[n_array] <65 )                  cell[n_array][5] = coef['k_kinto'];
                var k = 0;
                var tr_no = n_array + 2;
                for ( k=0; k<6; ++k ) {
                   var td_no = k + 3;
                   var val_set = comadd( cell[n_array][k] );                   
                   $('#kokuho02>tbody>tr:eq('+tr_no+')>td:eq('+td_no+')').html(val_set);
                }
                cal_total();
            }
         }else {
                alert(" 75歳以上は後期高齢者医療制度を適用!");
                var n_a = n_array + 1;
                var strnm = "age0" + n_a;
                // alert(" strnm: " + strnm );
                $("input[name=" + strnm + "]").val("");
                tr_no = n_array + 2;
                td_no = 1;                var ipt = 'age';
                reset_value( n_array, ipt );
        }
      }

        function cal_total() {
           var shotai_iryou = 0;
           var shotai_shien = 0;
           var shotai_kaigo = 0;
           for ( j=0; j<6; ++j) {
              if( cell[j][0] || cell[j][0]==0 ) {
                  shotai_iryou = cell[j][0] + cell[j][3] + shotai_iryou; 
                  shotai_shien = cell[j][1] + cell[j][4] + shotai_shien;
                  shotai_kaigo = cell[j][2] + cell[j][5] + shotai_kaigo;
              }
           }
           if ( shotai_iryou != 0 ) {
              shotai_iryou = shotai_iryou + coef['i_shotai'];
              shotai_shien = shotai_shien + coef['s_shotai'];
           }
           if ( shotai_iryou >= coef['shotai_iryou_max'] ) shotai_iryou = coef['shotai_iryou_max'];
           if ( shotai_shien >= coef['shotai_shien_max'] ) shotai_shien = coef['shotai_shien_max'];
           if ( shotai_kaigo >= coef['shotai_kaigo_max'] ) shotai_kaigo = coef['shotai_kaigo_max'];
           var kokuho_total = round100(shotai_iryou) + shotai_shien + shotai_kaigo;
           var output   = comadd(round100(kokuho_total));
           var sh_iryou = comadd(round100(shotai_iryou));
           var sh_shien = comadd(round100(shotai_shien));
           var sh_kaigo = comadd(round100(shotai_kaigo)); 

           if ( kokuho_total != 0 ) 
              $("#kokuho_total").html(
               "<p><strong>国民健康保険料 :  <span>" + output + "</span>  円</strong></p>"
        +"<table style='margin:0px 50px;'>"
        +" <tr><td><strong>内 訳:</strong></td><td><strong> 基礎(医療)分 </strong></td><td align=right><strong>"+ sh_iryou + " 円</strong></td></tr>"
        +" <tr><td></td><td><strong> 支援分 </strong></td><td align=right><strong>"+ sh_shien + " 円</strong></td></tr>"
        +" <tr><td></td><td><strong> 介護分 </strong></td><td align=right><strong>"+ sh_kaigo + " 円</strong></td></tr></table>"  );
            
           else 
              $("#kokuho_total").html("");

           return;
        }
        
        function reset_value( n_array, ipt ) {
           // alert ( " in reset_value " + ipt );
           if      ( ipt === "age" ) age_val[n_array] = "";
           else if ( ipt === "inc" ) inc_val[n_array] = ""; 

           var tr_no = n_array + 2;
           // alert ( "tr_no = " + tr_no )
           for ( var k=0; k<6; ++k ) {
               td_no = k + 3;
               val_set = "";
               cell[n_array][k] =0;
               $('#kokuho02>tbody>tr:eq('+tr_no+')>td:eq('+td_no+')').html(val_set);
           }
           cal_total(); 
        }

        $(':input[name^=age],:input[name^=inc]').blur ( function() {
            //get row no. and value being set to process 
            var str01 = this.name; 
            if ( str01.match( /age([0-9]+)/ ) ) {
               var n_array = parseInt( RegExp.$1 ) - 1 ;
               if ( $(this).val() !== "" ) {
                    age_val[ n_array ] = $(this).val();
                    set_value( n_array );
               } else {
                    var ipt = "age";
                    reset_value( n_array, ipt );
               }
            } 
            if ( str01.match( /inc([0-9]+)/ )) {
               var n_array = parseInt( RegExp.$1 ) - 1;
               if ( $(this).val() !== "" ) {
                  inc_val[ n_array ] = $(this).val();
                  set_value( n_array );
               } else {
                    var ipt = "inc";
                    reset_value( n_array, ipt ); 
               }
            }
        });

        $(':input[name^=coef]').blur ( function() {
            var str02 = this.name;
            if ( str02.match(/coef_([^<]+)/ ) ) {
               var str_coef = RegExp.$1;
               coef[str_coef] = parseFloat( $(this).val() );
               var shotoku_total = coef['i_incum'] + coef['s_incum'] + coef['k_incum'];
               $(".shotoku_total").html( shotoku_total.toFixed(2) + ' %' );
               var kinto_total   = coef['i_kinto'] + coef['s_kinto'] + coef['k_kinto'];
               $(".kinto_total").html( comadd(kinto_total) + ' 円' );
               var shotai_total  = coef['i_shotai']+ coef['s_shotai'];
               $(".byoudo_total").html( comadd(shotai_total) + ' 円');

               var gendo_total = coef['shotai_iryou_max'] + coef['shotai_shien_max'] + coef['shotai_kaigo_max'];
               $(".gendo_total").html( comadd(gendo_total) + ' 円');
            }
            for ( var l_array=0; l_array<6; ++l_array ) {
              set_value( l_array );
            } 

        })
    });

   
   


Post a Comment