project-inclusive / OpenFisca-Japan

日本の制度を記述したOpenFisca API、及びそのWebアプリ(フロントエンド)のリポジトリです。
GNU Affero General Public License v3.0
20 stars 19 forks source link

複数世帯の情報を処理できるようにする #143

Open SnoozingJellyfish opened 1 year ago

SnoozingJellyfish commented 1 year ago

政策シミュレータアプリ用に、複数世帯の情報をOpenFiscaで処理できるようにする必要があります。 OpenFiscaバックエンドに複数世帯の情報をPOSTすると、それぞれの世帯での結果が算出されます。 (POST方法:世帯員に全ての世帯の構成員を並列に記載する。世帯以下に各世帯(世帯1, 世帯2等)を記載する)

yamlファイルを使ったOpenFiscaのテストでは複数世帯のinputに対応していなさそうですが、調べ切れてはいません。

Syuparn commented 1 year ago

value_nth_person にsort機能はありませんが、「第n子のインデックス取得 get_rank」→「インデックスに対応する値取得 value_nth_person」と組み合わせることで第n子の値を抽出できるかもしれません。

https://github.com/openfisca/openfisca-core/blob/05980c4bcd44f70485a35855ec5b887abe4bba33/openfisca_core/populations/population.py#L262

https://github.com/openfisca/openfisca-core/blob/05980c4bcd44f70485a35855ec5b887abe4bba33/openfisca_core/populations/group_population.py#L269 使い方: https://github.com/openfisca/openfisca-core/blob/05980c4bcd44f70485a35855ec5b887abe4bba33/tests/core/test_entities.py#L324

Syuparn commented 1 year ago

yamlファイルを使ったOpenFiscaのテストでは複数世帯のinputに対応していなさそうですが、調べ切れてはいません。

entities.pyで、世帯の複数形を「世帯一覧」という別の名前にすることでテスト可能になりました。(少しまとめてPR化します)

Syuparn commented 1 year ago

条件式による判定も、複数世帯の場合次元が変わってしまい計算できなくなってしまいました。こちらも対応が必要そうです。

if 居住都道府県 != "東京都":
    return 0
FAILED openfisca_japan/tests/東京都/福祉/重度心身障害者手当.yaml:: - ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Syuparn commented 12 months ago

条件式による判定

判定式のうち、out of boundsを回避するための早期リターンを兼ねている箇所は置き換えられませんでした。

https://github.com/project-inclusive/OpenFisca-Japan/blob/develop/openfisca_japan/variables/%E6%89%80%E5%BE%97%E7%A8%8E.py#L263

解決策はまだ思いついていません。(あったとしても設計を根本から変える必要がありそうです)

SnoozingJellyfish commented 11 months ago

197 で複数世帯入力の場合の対応例を実装しました。以下、検討した方針です。

SnoozingJellyfish commented 11 months ago

value_nth_person にsort機能はありませんが、「第n子のインデックス取得 get_rank」→「インデックスに対応する値取得 value_nth_person」と組み合わせることで第n子の値を抽出できるかもしれません。

https://github.com/openfisca/openfisca-core/blob/05980c4bcd44f70485a35855ec5b887abe4bba33/openfisca_core/populations/population.py#L262

https://github.com/openfisca/openfisca-core/blob/05980c4bcd44f70485a35855ec5b887abe4bba33/openfisca_core/populations/group_population.py#L269 使い方: https://github.com/openfisca/openfisca-core/blob/05980c4bcd44f70485a35855ec5b887abe4bba33/tests/core/test_entities.py#L324

上記情報をもとに、複数世帯の場合の第n子判別方法を検討しました。(情報とても助かりました!) 以下の世帯のとき、

世帯1:
        自分一覧:
          - 親1
        配偶者一覧:
          - 配偶者1
        子一覧:
          - 子1_1  # 小3
          - 子1_2  # 小1
世帯2:
  自分一覧:
    - 親2
  配偶者一覧:
    - 配偶者2
  子一覧:
    - 子2  # 小2
子である = 対象世帯.has_role(世帯.子)
子の学年降順 = 対象世帯.get_rank(対象世帯, - 学年, condition=子である)
# 子の学年降順: [-1 -1  0  1 -1 -1  0]

児童手当から実装修正してみます。

Syuparn commented 11 months ago

@SnoozingJellyfish

児童手当から実装修正してみます。

よろしくお願いします! 実装にあたり、もしかしたら 高等学校奨学給付金 のテストが落ちてしまい修正が必要になるかもしれません... (私も複数世帯化を試してみようとした際に上記の問題にはまってしまいました...原因は調査中ですが、非課税世帯の計算で依存しているため影響していそうです) 問題が起きなかった際はこのコメントは気にしないでください :bow:

Syuparn commented 11 months ago

高等学校奨学給付金 のテストが落ちてしまい修正が必要になるかもしれません

調査も兼ねてこちらの複数世帯化は別PRで進めています。

Syuparn commented 9 months ago

生活保護の複数世帯化着手したいと思います。

Syuparn commented 9 months ago

生活福祉資金貸付制度の複数世帯化着手します。

Syuparn commented 9 months ago

入学、就学関連制度(受験生チャレンジ支援貸付, 高等学校等就学支援金)の複数世帯化着手します。

Syuparn commented 9 months ago

生活福祉資金貸付制度、入学、就学関連制度対応済み

242 #243

Syuparn commented 9 months ago

続いて児童扶養手当着手します。

Syuparn commented 9 months ago

残りの3制度は軽微な修正で済みそうなので、まとめて対処したいと思います。