OpenFiscaによるRule as Codeで誰一人取り残さない社会を一緒に実現しよう
5分まで:OpenFiscaの概要、Rule as Codeとは
OpenFiscaの概要
OpenFiscaはフランス発のOSSです
ライセンスはAGPLです
フランスには、福祉制度が機械可読に実装され、自分のプロフィールを入力すると自分が受けられる福祉制度が確認できるWebサイトがあります
その裏側がOpenFiscaです
Rule as Codeとは
Rule as Codeとは、法や条例、社会制度などを、ソフトウェアコードとして記述しようという概念です
15分まで:OpenFiscaの特徴、利点と欠点
OpenFiscaの特徴
YAMLによって社会制度に関わる定数を記述するという発明
NumPyによるベクトル演算で社会制度を記述するという発明
社会制度のソフトウェアテストをするという発明
OpenFiscaの利点
社会制度を検討する公務員は、どれだけ複雑な社会制度を作ってもなんのデメリットもないため、理論上いくらでも複雑な社会制度が作られれうる
ゆえに、社会制度を記述する言語はチューリング完全でなければならない
OpenFiscaは、期間によって制度が変化すること前提にしている
成人年齢、税率などが変わっても簡単に対応できる
OpenFiscaの欠点
NumPyをベースにしているので、数値以外の処理が難しい
一日単位での状態変化を扱うことが難しい
一ヶ月、一年単位になる
25分まで:OpenFiscaによる渋谷区の子育て支援制度の実装を紹介
実装された制度
児童手当
児童扶養手当
特別児童扶養手当
児童手当の実装の様子
YAMLによって児童手当にかかわる定数を記述
渋谷区のWebサイト
https://gyazo.com/130db3919a01ea8269a8bf6d110d3e97
code:openfisca_yuisekin/parameters/福祉/育児/児童手当/金額/三歳未満.yaml
description: 児童手当の金額
metadata:
reference: https://www.city.shibuya.tokyo.jp/kodomo/teate/teate/jido_t.html
unit: currency-JPY
values:
2022-05-01:
value: 15000
metadata:
reference: https://www.city.shibuya.tokyo.jp/kodomo/teate/teate/jido_t.html
code:openfisca_yuisekin/parameters/福祉/育児/児童手当/所得上限限度額/扶養人数1人.yaml
description: 渋谷区の児童手当の所得上限限度額
metadata:
threshold_unit: person
rate_unit: 1
brackets:
- rate:
2000-05-01:
value: 8580000
threshold:
2000-05-01:
value: 0
- rate:
2000-05-01:
value: 8960000
threshold:
2000-05-01:
value: 1
- rate:
2000-05-01:
value: 9340000
threshold:
2000-05-01:
value: 2
- rate:
2000-05-01:
value: 9720000
threshold:
2000-05-01:
value: 3
- rate:
2000-05-01:
value: 10100000
threshold:
2000-05-01:
value: 4
- rate:
2000-05-01:
value: 10480000
threshold:
2000-05-01:
value: 5
Pythonで児童手当のロジックを実装
code:openfisca_yuisekin/variables/福祉/育児/児童手当.py
class 児童手当(Variable):
value_type = float
entity = 世帯
definition_period = MONTH
label = "保護者への児童手当"
reference = "https://www.city.shibuya.tokyo.jp/kodomo/teate/teate/jido_t.html"
def formula(対象世帯, 対象期間, parameters):
児童手当 = parameters(対象期間).福祉.育児.児童手当
扶養控除所得金額 = parameters(対象期間).税金.扶養控除所得金額
# 世帯で最も高い所得の人が基準となる
世帯高所得 = 対象世帯("世帯高所得", 対象期間)
# 扶養人数が1人ではない場合を考慮する
世帯所得一覧 = 対象世帯.members("所得", 対象期間)
扶養人数 = 対象世帯.sum(世帯所得一覧 < 扶養控除所得金額)
所得上限限度額 = 児童手当.所得上限限度額.calc(扶養人数)
所得条件 = 世帯高所得 <= 所得上限限度額
児童一覧の年齢 = 対象世帯.members("年齢", 対象期間)
三歳未満の児童の人数 = 対象世帯.sum(児童一覧の年齢 < 3)
三歳から小学校修了前の児童の人数 = 対象世帯.sum(児童一覧の年齢 < 13) - 三歳未満の児童の人数
中学生の児童の人数 = 対象世帯.sum(児童一覧の年齢 < 16) - 三歳から小学校修了前の児童の人数 - 三歳未満の児童の人数
手当条件 = 所得条件
手当金額 = \
np.sum(
+ (児童手当.金額.三歳未満 * 三歳未満の児童の人数)
+ (児童手当.金額.三歳から小学校修了前 * 三歳から小学校修了前の児童の人数)
+ (児童手当.金額.中学生 * 中学生の児童の人数),
)
return 手当条件 * 手当金額
30分まで:誰でも簡単に協力できます!
参加方法
Code for JapanのSlackでチャンネル#proj-inclusiveに参加する
Code for JapanのSocial Hack Dayに参加する
最低限必要な知識
Slackをインストールして使える
Visual Studio Codeをインストールして使える
GitHubにアカウントを作れる
リポジトリをForkできる
Fetch upstreamしてFork元の変更に追随できる
作業用のBranchを立てられる
Fork元にPull requestを送れる
YAMLを書ける
以上