import collections
import json
import urllib2
simulation = dict(
scenarios = [
dict(
test_case = dict(
familles = [
dict(
parents = ['ind0', 'ind1'],
enfants = ['ind2', 'ind3', 'ind4'],
),
],
foyers_fiscaux = [
dict(
declarants = ['ind0', 'ind1'],
personnes_a_charge = ['ind2', 'ind3', 'ind4'],
),
],
individus = [
dict(
activite = u'Actif occupé',
birth = '1970-01-01',
cadre = True,
id = 'ind0',
sali = 130000,
statmarit = u'Marié',
),
dict(
activite = u'Actif occupé',
birth = '1970-01-02',
cadre = True,
id = 'ind1',
sali = 130000,
statmarit = u'Marié',
),
dict(
activite = u'Étudiant, élève',
birth = '2000-01-03',
id = 'ind2',
),
dict(
activite = u'Étudiant, élève',
birth = '2000-01-04',
id = 'ind3',
),
dict(
activite = u'Étudiant, élève',
birth = '2000-01-05',
id = 'ind4',
),
],
menages = [
dict(
personne_de_reference = 'ind0',
conjoint = 'ind1',
enfants = ['ind2', 'ind3', 'ind4'],
),
],
),
year = 2013,
),
],
)
request = urllib2.Request('http://api.openfisca.fr/api/1/simulate', headers = {
'Content-Type': 'application/json',
'User-Agent': 'OpenFisca-Notebook',
})
try:
response = urllib2.urlopen(request, json.dumps(simulation))
except urllib2.HTTPError as response:
print response.read()
raise
response_dict = json.loads(response.read(), object_pairs_hook = collections.OrderedDict)
tree = response_dict['value']
def any(iterator):
for item in iterator:
if item:
return True
return False
def iter_columns_from_tree(node, base_values = None):
children = node.get('children')
if children:
child_base_values = base_values
for child in children:
for column in iter_columns_from_tree(child, base_values = child_base_values):
yield column
if child_base_values is None:
child_base_values = child['values']
else:
child_base_values = [
base_value + value
for base_value, value in zip(child_base_values, child['values'])
]
if any(value != 0 for value in node['values']):
column = dict(
base_values = base_values or [0] * len(node['values']),
code = node['code'],
)
column.update(node)
yield column
for column_index, column in enumerate(iter_columns_from_tree(tree)):
print u'{:40s} | {}'.format(column['name'], ' | '.join('{:6.0f}'.format(value) for value in column['values']))
Salaires super bruts | 429061 Cotisations sociales patronales | -123008 Salaires bruts | 306053 Cotisations sociales salariées | -30709 CSG déductible (salaires) | -15344 Salaires imposables | 260000 CSG non déductible (salaires) | -7221 CRDS (salaires) | -1504 Salaires nets | 251275 Revenu du travail | 251275 Revenus nets | 251275 Allocations familiales | 3495 CRDS (prestations familiales) | -17 Prestations familiales | 3478 Prestations sociales | 3478 Impôt sur le revenu | -69831 Impôts directs | -69831 Revenu disponible | 184922