Skip to content

OpenFiscaフレームワークのTips

Naoya Furuhashi edited this page Jun 10, 2023 · 2 revisions

OpenFiscaフレームワークは高機能ですが、それゆえ想定と異なる挙動を示すこともあります。
公式のマニュアルに載っていない内容もあるため、それらを以下に記載します。

テスト

  • テスト実行

    • 全てのテストを実行 (2023/2/14時点では失敗するため、下の「一部のテストを実行」でテストしてください)
      make test
    • 一部のテストを実行
      openfisca test --country-package openfisca_japan openfisca_japan/tests/<実行したいテストファイル或いはディレクトリパス>
      上記コマンド実行時にテストファイル(~.yaml)を読み込みます。そのため、テストファイルのみ修正する場合はそれ自身を修正してコマンド実行すれば良いです。
  • 内部計算方法の修正
    openfisca_japan/variables/~.py等の計算方法を規定するファイルを修正する。
    以下のコマンドでビルドを行わないとテスト時に修正が反映されない。
    make build
    その後、上述のテストを行う。

  • openfisca_japan/tests以下のテストファイルでテストするとき、テストに成功した場合はopenfisca_japan/variables以下のpythonファイル内で記載した標準出力(print関数の出力)はコンソールに表示されません。
    テストに失敗した場合、標準出力は表示されます。そのため、デバッグのためにわざと失敗するテストファイルでテストするというやり方があります。
    また、variablesのpythonファイル内でエラーが発生した場合はそのファイル内で宣言した変数の値も表示されます。
    variablesのpythonファイル内でエラーが発生せず、出力された結果がtestsのテストファイルと一致しない場合は、print関数で明示的に出力した内容しか表示されません。

  • テストファイルに記載された小数の値を対象世帯.members等で読み出す際、classのvalue_typeをfloatにしていても、0.5単位で丸められて読み出されます。
    丸めの範囲は、以下の通りです。

    • 閉区間[-0.25, 0.25] -> 0
    • 開区間(0.25, 0.75) -> 0.5
  • yamlのテストファイル上での入力情報は、本来は途中で算出される値を手入力してもエラーになりません。
    例えば、所得は本来は収入から給与所得控除を差し引いて算出されますが、yamlファイルのinput所得の値を手入力しても、正しくoutputが算出されます。
    これにより、各種手当等の算出方法をテストする際、所得制限額から所得ベースのテストを作成することができます。
    ただし、openfiscaのAPIにjsonをポストする際は、途中で算出される値を入力するとエラーになるため、大元の情報を入力する必要があります。
    フロントエンドを実装する際はこの点に注意してください。

計算ロジック (variables)

API

  • (APIのURL)/spec から仕様のjsonをgetできる。

    • definitions.世帯.properties : 世帯に関する変数
    • definitions.人物.properties : 人物に関する変数
    • paths : APIのエンドポイント
  • テスト用APIでは日付の月と日は0埋めの2桁でなくても正しく計算されるが、web APIでは月と日は0埋めの2桁でないと正しく計算されずエラーも出ない。
    即ち、日付は「YYYY-MM-DD」のフォーマットで入力する必要がある。