Structures de données
On définit les entrées et sortie de nos simulations.
Résultat d’une simulation
CompareBeforeAfter
CompareBeforeAfter (total:int, non_zero_before:int, non_zero_after:int,
above_after:int|None=None, lower_after:int|None=None,
neutral:int|None=None, tolerance_factor_used:float,
weight_factor:float)
This is the result of the comparaison of two simulation.
before_after = CompareBeforeAfter(
total= 1 ,
non_zero_before= 2 ,
non_zero_after= 3 ,
above_after= 4 ,
lower_after= 5 ,
neutral= 6 ,
tolerance_factor_used= 7 ,
weight_factor= 0.79 ,
)
before_after
CompareBeforeAfter(total=1, non_zero_before=2, non_zero_after=3, above_after=4, lower_after=5, neutral=6, tolerance_factor_used=7.0, weight_factor=0.79)
OneSimulationResult
OneSimulationResult (state_budget:Dict[str,float],
quantiles:Optional[List[Dict[str,float]]]=None, comp
are_before_after:Optional[Dict[str,__main__.CompareB
eforeAfter]]=None)
This is the output for one simulation
result = OneSimulationResult(
state_budget= {
"assiette_csg_abattue" : 707659989877.222 ,
}
)
result.compare_before_after = before_after
result
OneSimulationResult(state_budget={'assiette_csg_abattue': 707659989877.222}, quantiles=None, compare_before_after=CompareBeforeAfter(total=1, non_zero_before=2, non_zero_after=3, above_after=4, lower_after=5, neutral=6, tolerance_factor_used=7.0, weight_factor=0.79))
AllSimulationResult : résultats de toutes les simulations
AllSimulationResult
AllSimulationResult
(result:Optional[Dict[str,__main__.OneSimulationResu
lt]]=None, errors:Optional[List[str]]=None)
This is the API Output for all simulations
AllSimulationResult(result= {"base" : result})
AllSimulationResult(result={'base': OneSimulationResult(state_budget={'assiette_csg_abattue': 707659989877.222}, quantiles=None, compare_before_after=CompareBeforeAfter(total=1, non_zero_before=2, non_zero_after=3, above_after=4, lower_after=5, neutral=6, tolerance_factor_used=7.0, weight_factor=0.79))}, errors=None)
AllSimulationResult(errors= ["1" , " error 2" ])
AllSimulationResult(result=None, errors=['1', ' error 2'])
ReformeSocioFiscale.Config.schema_extra["example" ]
{'base': 2023,
'plf': 2024,
'amendement': {'prelevements_sociaux.contributions_sociales.csg.activite.deductible.taux': {'start': '2022-01-01',
'type': 'parameter',
'value': 0.068},
'prelevements_sociaux.contributions_sociales.csg.activite.imposable.abattement': {'scale': [{'rate': {'value': 0.0175},
'threshold': {'value': 0}},
{'rate': {'value': 0}, 'threshold': {'value': 4}}],
'start': '2022-01-01',
'type': 'scale'}},
'output_variables': ['rfr',
'csg_imposable_salaire',
'csg_deductible_salaire'],
'quantile_nb': 10,
'quantile_base_variable': ['rfr'],
'quantile_compare_variables': ['csg_imposable_salaire',
'csg_deductible_salaire']}
Analyse de l’état du projet
Status
Status (cache:bool, queue:bool, simulations:bool,
version_openfisca:List[str], last_commit:str)
This returns the status of the current projet
Status(
cache= True ,
queue= True ,
simulations= True ,
version_openfisca= ["openfisca-fidji" , "0.1.0" ],
last_commit= "007benito" ,
)
Status(cache=True, queue=True, simulations=True, version_openfisca=['openfisca-fidji', '0.1.0'], last_commit='007benito')
Custom JSON Serialization
NpEncoder
NpEncoder (skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, sort_keys=False, indent=None, separators=None,
default=None)
Custom serializer to export our data to Redis
simu_result = OneSimulationResult(
state_budget= {"base" : 50_000_000 }, quantiles= [{"fraction" : 1 }, {"fraction" : 2 }]
)
simu_result
OneSimulationResult(state_budget={'base': 50000000.0}, quantiles=[{'fraction': 1.0}, {'fraction': 2.0}], compare_before_after=None)
all_result = AllSimulationResult(
result= {"base" : simu_result},
compare_before_after= before_after,
errors= ["Ca marche pas" ],
)
res_json = json.dumps(
all_result,
cls= NpEncoder,
)
res_json
'{"result": {"base": {"state_budget": {"base": 50000000.0}, "quantiles": [{"fraction": 1.0}, {"fraction": 2.0}], "compare_before_after": null}}, "errors": ["Ca marche pas"]}'
{'result': {'base': {'state_budget': {'base': 50000000.0},
'quantiles': [{'fraction': 1.0}, {'fraction': 2.0}],
'compare_before_after': None}},
'errors': ['Ca marche pas']}
AllSimulationResult.parse_obj(json.loads(res_json))
AllSimulationResult(result={'base': OneSimulationResult(state_budget={'base': 50000000.0}, quantiles=[{'fraction': 1.0}, {'fraction': 2.0}], compare_before_after=None)}, errors=['Ca marche pas'])
cached = b'"{ \\ "result \\ ": { \\ "base \\ ": { \\ "state_budget \\ ": { \\ "base \\ ": 50000000.0}, \\ "quantiles \\ ": [{ \\ "fraction \\ ": 1.0}, { \\ "fraction \\ ": 2.0}], \\ "compare_before_after \\ ": null}}, \\ "errors \\ ": [ \\ "Ca marche pas \\ "]}"'
json_loaded = json.loads(json.loads(cached))
type (json_loaded)
# {"result": {"base": {"state_budget": {"csg_imposable_salaire": -15739674769.496641}, "quantiles": null, "compare_before_after": null}}, "errors": []}
AllSimulationResult.parse_obj(json_loaded)
AllSimulationResult(result={'base': OneSimulationResult(state_budget={'base': 50000000.0}, quantiles=[{'fraction': 1.0}, {'fraction': 2.0}], compare_before_after=None)}, errors=['Ca marche pas'])