forked from SnoozingJellyfish/OpenFisca-Yuisekin
-
Notifications
You must be signed in to change notification settings - Fork 6
OpenFiscaとは?
Naoya Furuhashi edited this page Feb 25, 2023
·
5 revisions
OpenFiscaは、社会制度などをソフトウェアコードとして記述できる(Rule as Code)、フランス発のOSSです。
公式HP
Githubリポジトリ
OpenFiscaのドキュメント
ライセンスはAGPLです。
フランスにはMes Aidesという、福祉制度が機械可読に実装され、自分のプロフィールを入力すると自分が受けられる福祉制度が確認できるWebサイトがあります。
その裏側がOpenFiscaです。
Rule as Codeとは、法や条例、社会制度などを、ソフトウェアコードとして記述しようという概念です。
-
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], )
- if 文の場合:
-
社会制度のソフトウェアテストができます。
静的な制度の情報はPythonではなくYAMLによって簡単に記述、メンテナンスできるように工夫されています。
たとえば児童手当の額が変わったとして、YAMLを数行書き換えるだけで反映できます。
-
OpenFiscaは、期間によって制度が変化すること前提にしており、 成人年齢、税率などが変わっても簡単に対応できます。
-
Pythonなので英語以外の文字列で記述できます。 そのため、各国の法律用語や福祉用語を翻訳する必要がありません。
(例)児童手当 = parameters(対象期間).福祉.児童手当
- NumPyをベースにしているので、数値以外の処理が難しいです。
-
parameters
使い回され変化しうるような、様々な制度に共通する、ある時点で静的な値 -
reforms
制度のロジックの上書き表現 -
situation_examples
制度のテスト -
tests
制度のテスト -
variables
制度のロジック
個人、世帯、法人の持つ属性情報