Skip to content

OpenFiscaとは?

Naoya Furuhashi edited this page Feb 25, 2023 · 5 revisions

OpenFiscaの概要

OpenFiscaは、社会制度などをソフトウェアコードとして記述できる(Rule as Code)、フランス発のOSSです。
公式HP
Githubリポジトリ
OpenFiscaのドキュメント
ライセンスはAGPLです。
フランスにはMes Aidesという、福祉制度が機械可読に実装され、自分のプロフィールを入力すると自分が受けられる福祉制度が確認できるWebサイトがあります。
その裏側がOpenFiscaです。

Rule as Codeとは

Rule as Codeとは、法や条例、社会制度などを、ソフトウェアコードとして記述しようという概念です。

OpenFiscaの特徴

  • NumPyによるベクトル演算で社会制度を記述します。
    それにより、複数の世帯や個人に対し、if分岐なしで一括でロジックを適用できます。
    (例)

    • if 文の場合:
      200 if their salary is less than 500;
      100 if their salary is strictly more than 500, but less than 1000;
      50 if their salary is strictly more than 1000, but less than 1500;
      0 otherwise.
      
    • OpenFiscaの場合:
      def formula(person, period):
         salary = person('salary', period)
         return select(
         ## 以下の二行がベクトル
             [salary <= 500, salary <= 1000, salary <= 1500, salary > 1500],
             [200, 100, 50, 0],
             )
      
  • 社会制度のソフトウェアテストができます。
    静的な制度の情報はPythonではなくYAMLによって簡単に記述、メンテナンスできるように工夫されています。
    たとえば児童手当の額が変わったとして、YAMLを数行書き換えるだけで反映できます。

OpenFiscaの利点

  • OpenFiscaは、期間によって制度が変化すること前提にしており、 成人年齢、税率などが変わっても簡単に対応できます。

  • Pythonなので英語以外の文字列で記述できます。 そのため、各国の法律用語や福祉用語を翻訳する必要がありません。
    (例)児童手当 = parameters(対象期間).福祉.児童手当

OpenFiscaの欠点

  • NumPyをベースにしているので、数値以外の処理が難しいです。

OpenFiscaの主要概念

  • parameters
    使い回され変化しうるような、様々な制度に共通する、ある時点で静的な値

  • reforms
    制度のロジックの上書き表現

  • situation_examples
    制度のテスト

  • tests
    制度のテスト

  • variables
    制度のロジック
    個人、世帯、法人の持つ属性情報