カナダの給与控除計算の複雑さ
- カナダ歳入庁(CRA)は定期的に「給与控除の計算式(Payroll Deductions Formulas)」文書を発行している。この文書には、CRAが徴収するカナダ年金制度、雇用保険、所得税のすべての計算式が含まれている。
- カナダで小規模事業を営み、外部の給与サービス提供業者を利用していない Colin Percival は、これらの計算式をスプレッドシートに直接実装した。
- 税制の多くの側面と同様に複雑さは増しており、今年はカナダ年金制度に「基本」保険料と「追加」保険料だけでなく「第2追加」保険料まで含まれるようになり、スプレッドシートを一から書き直さなければならなかった。
依存関係チャートの作成
- 文書の著者たちはソフトウェアにおける重要な細部、つまり値は使用する前に計算されていなければならないという点を見落としていた。そのため、文書を見ながら計算すべき各値がどこにあるのかを行き来しなければならない。
- これを助けるため、Colin Percival は GraphViz を使って依存関係チャートを描いた。グラフには「年間最大年金算入額」($73200)のような値から始まり、「給与控除合計」に至るまで79個のノードがある。
- チャートには数式は書かず、各数式が依存するほかの値だけを記録し、チャートを見る人が何を先に計算すべきかを簡単に把握できるようにしている。
単純化した前提
- 単純化のため、Colin Percival は手数料を受け取る従業員、カナダ年金制度に加入または脱退する従業員、ケベック、ノバスコシア、ユーコン、オンタリオ(それぞれ独自の税務上の複雑さがある)に居住する人々は扱わないと仮定している。
GN⁺の見解
- この記事は、カナダの給与控除計算がどれほど複雑かをよく示している。特に、小規模事業主が直面する課題と、それを解決するための創造的なアプローチを強調している。
- 依存関係チャートを作成することは、複雑なシステムを理解し管理するうえで非常に有用なツールであり、ソフトウェアエンジニアリングだけでなくさまざまな分野での問題解決にも応用できる。
- この記事は、税計算の複雑さを単純化しようとする事業主の努力を示しており、その取り組みはほかの事業主たちにも刺激を与えるかもしれない。
1件のコメント
Hacker Newsの意見
政府がコード形式の公開された数式を提供していないのは残念だ。
カナダの小さな給与計算会社を運営していた経験から、ルールが更新されるたびにCRA計算機向けのスクレイパーを実行して、さまざまな地域と給与帯の給与を計算し、
rspecで出力してコンプライアンスをテストしていた。税法の複雑さは次のような循環プロセスをたどる。
数年前にIRS向けに似たようなものを作ったことがある。
給与計算プロバイダーが存在する理由を示すチャートだ。
CRAがすべての数式の参照実装を公開すべきだという点で、著者に拍手を送りたい。
フランスでは、こうしたルールはWebサイト、API、NPMパッケージ、そして publi.codes 言語による生のルールとして提供されている。
カナダ人口の約75%が住むケベック、ノバスコシア、ユーコン、オンタリオの住民を除けば、すべての人に適用される。
米国に住んでいるが、この複雑さは自分のLLCで従業員を雇わない主な理由の一つだ。
どんなアルゴリズムも、ソフトウェアであれそうでなかれ、複雑さを追加して望ましい結果を得られるような混沌とした状態にされてしまう。