かつては、理工学でも、対数や三角関数等の初等関数とか、 ベッセル関数や楕円関数といった、たくさんの特殊関数の数値を集めた、 「数表」が手放せない時代がありました。 そして、はるか昔、日常よく使う関数のほとんどが、 Hewlett-Packard 社の HP-35 に始まる「関数電卓」によって駆逐され、 今は、その残りも含めて、コンピュータのプログラミングに吸収されています。 理工学は、非能率を嫌うためです。 クリエイティヴに生きたいというのが、 理工学の原点です。
一方、「非能率こそ官僚が生きる基盤」という、 文系事務の官庁手続きは別世界で、 お役所の世界になると、 これだけコンピュータが普及した今でも、 数式とアルゴリズムとは無縁な、 「表」を使った計算こそが日常で、 理工学の能率と合理性は排除されます。
例えば、給与所得の源泉徴収作業を見てみましょう。 地球環境を考えれば、 毎月の源泉徴収というインチキ(源泉徴収義務者に報酬を払わないし、 先取りした税金の利子も払わない)を別にしても、 「源泉所得税」を「表」ベースから 「数式」ベースに変えておくのが当然で、 たった、それだけの改善で、分厚い表を延々と引く単純繰り返し作業は消滅して、 下記の利点が生まれます。
最近は、さすがに気が惹けたのか、「所得税法 第 819 条」に、
「.. その給与等の支払額に関する計算を事務機械によって処理しているときは、 これらの規定に規定する別表第二の甲欄に掲げる税額は、当該税額が算定された 方法に準ずるものとして大蔵大臣が定める方法によって計算した金額をもって代え ることができる。」
というのがあって、あいも変わらず、わけのわからない日本語ですが、 言いたいことは、
この「大蔵大臣が定める方法」というのは、 「経済社会の変化等に対応して早急に講ずべき所得税及び法人税の 負担軽減措置に関する法律 第 11 条」という長い名前の法律でダメ押しした上で、 「経済社会の変化等に対応して早急に講ずべき所得税及び法人税の 負担軽減措置に関する法律施行規則」という短い省令で、 (awk 流の構文で書き直せば)下記のような (表を使った計算とは一致しない!) アルゴリズムを提示しています。
別表第一 給与所得控除の額(m, x) { # m = その月の社会保険料控除後の給与等の金額 if (m <= 135416) x = 54167 else if (m <= 149999) x = m * 0.40 else if (m <= 299999) x = m * 0.30 + 15000 else if (m <= 549999) x = m * 0.20 + 45000 else if (m <= 833333) x = m * 0.10 + 100000 else x = m * 0.05 + 141667 reurn int(x + 0.999999) } 別表第二 基礎控除・配偶者控除・扶養控除額(配偶者数、扶養者数) { return 31667 * (1 + 控除対象配偶者数 +扶養者数) } 別表第三 税額(k, x) { # k = その月の課税給与所得金額 if (k <= 275000) x = k * 0.10 else if (k <= 750000) x = k * 0.20 - 27500 else if (k <= 1500000) x = k * 0.30 - 102500 else if (k <= 2500000) x = k * 0.40 - 252500 else x = k * 0.50 - 502500 return int(x / 10 + 0.5) * 10 } 2006-01-01 以降は増税で、下記のように変わります。 税額(k, x) { # k = その月の課税給与所得金額 if (k <= 275000) x = k * 0.09 else if (k <= 658333) x = k * 0.18 - 24750 else if (k <= 750000) x = k * 0.20 - 37917 else if (k <= 1500000) x = k * 0.30 - 112917 else x = k * 0.37 - 217917 return int(x / 10 + 0.5) * 10 }
実際の計算は、
課税所得 = 所得総額 - 非課税の手当 - 社会保険料 - 給与所得控除 - (基礎控除 + (控除対象)配偶者控除 + 扶養控除) 源泉徴収税額 = 税額(課税所得)になりますが、「給与所得控除」というのはサラリーマンの必要経費だそうで、 サラリーマンはあまり勉強しない人種と見られています。 基礎控除と配偶者控除、扶養控除は、 本人とその家族の最低生計費と言う意味あいになります。
別表第三とか第一が、
税額 = 所得 * 税率 - 控除額の形式(y = a * x - b)になっているのは、 課税所得の全体に同じ税率が適用されるわけではないためで、 先の方針で、数式のセンスが少しでもあれば、 連続性を前提に、もっと明解な表現が作れます。
理系人間から見たら、どう考えても、
しかし、これでは済まないのが現場の仕事で、 例え「日額表」の要らないところでも、すぐに、 「月額表の乙欄はどうする」ということになります。
何のために作ったのかわからない、 前記の法律では、「コンピュータはダメ」というわけですから、 表を真似するしかないわけですが、 いくらなんでも、表をプログラムに組み込んでしまうなんてことをやったら、 馬鹿さ加減丸だしで、コンピュータが可哀想。
で、昔、いろいろ調べているうちに、やっとわかった(注1)のが、
乙欄の税額 = 独身者が 2.5 倍の金額を受け取ったときの税額 - 独身者が 1.5 倍の金額を受け取ったときの税額という、理解しがたいルールを根拠にした表であるということで、 後は、 乙表の刻みかた とまるめかたの観察 を元に、別記のプログラムが書けます。
事務処理というのは、所詮この程度の仕事で、 最近のパーソナル・コンピュータの速度とメモリなら、 C でプログラムを書く必要がほとんどなくなりました。 SOHO の皆さんは、まず、awk 等のスクリプトで事務をやってみましょう。
それにしても、 乙欄の計算根拠が明文化されている様子もなくて、 とても現代民主国家の法律とは思えませんが、 シュミットさん(昔のドイツの首相)が、 「日本は民主国家になりません」と言い切っていたのを思いだします。
一国のリーダが、 「集団レイプは元気があっていい」(太田誠一総務庁長官)とか、 「天皇中心の ..」「子供を産まない女性を税金で面倒をみるのはおかしい」 (森喜朗前首相)なんて言い出すわけですから、 まともな人間を前提とする民主国家は無理ですね。
注1 - 今は、 http://www.nta.go.jp/category/pamph/gensen/1405/13/01.htmで見られるようです。