-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
171 lines (151 loc) · 5.69 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<style>
div.block {
padding: 1em;
}
</style>
</head>
<body>
<h1>PPA expliquée</h1>
<script src="d3.js" type="text/javascript"></script>
<script src="common.js" type="text/javascript"></script>
<script type="text/javascript">
var round = function(v) {
return Math.round(v * 100 ) / 100
}
var logic = {
name: "OK",
condition: function(d) { return this("ppa", d.M); },
if: {
text: function(d) {
var montant = round(this("ppa", d.M));
return `Selon notre simulateur, en ${d.labels.M}, vous pouvez bénéficier de la prime d'activité pour un montant de ${montant} € / mois.`;
},
next: {
name: "Détail 3 mois",
intro: "La prime d'activité est calculée en faisant la moyenne de 3 valeurs appelées primes d'activité fictives. Il y a une prime d'activité fictive par mois du trimestre de référence.",
condition: function(d) {
var mois = ['Mm1', 'Mm2', 'Mm3'];
var first = this("ppa_fictive", d[mois[0]]);
return mois.map(m => this("ppa_fictive", d[m])).reduce((a, v) => a && v == first, true);
},
if: {
text: function(d) {
return `Vos primes d'activité fictives valent ${round(this("ppa_fictive", d.Mm1))} € sur chacun des mois du trimestre de référence.`;
}
},
else: {
text: function(d) {
return `Vos primes d'activité fictives valent :<br>\
- ${round(this("ppa_fictive", d.Mm3))} € pour ${d.labels.Mm3},<br>\
- ${round(this("ppa_fictive", d.Mm2))} € pour ${d.labels.Mm2} et<br>\
- ${round(this("ppa_fictive", d.Mm1))} € pour ${d.labels.Mm1}.`;
}
}
}
},
else: {
text: "Selon notre simulateur, vous ne pouvez pas bénéficier de la prime d'activité.",
next: {
name: "KO étudiant",
intro: "La prime d'activité est calculée en faisant la moyenne de 3 valeurs appelées primes d'activité fictives. Il y a une prime d'activité fictive par mois du trimestre de référence.",
condition: function(d) { return ! this("ppa_eligibilite_etudiants", d.M); },
if: {
text: function(d) {
var params = this.p("ppa_eligibilite_etudiants", d.M);
var seuil = 169 *
params("cotsoc.gen.smic_h_b", d.D) *
params("prestations.prestations_familiales.af.seuil_rev_taux", d.D);
var roundedSeuil = round(seuil);
var mois = ['Mm1', 'Mm2', 'Mm3'];
var moisSousSeuil = mois.filter(m => this('ppa_revenu_activite_individu', d[m])<seuil);
return `En tant qu'étudiant.e, pour être éligible à la prime d'activité,\
il faut que pour chaque mois vos ressources d'activité soient supérieures à ${roundedSeuil} € or\
pour le${moisSousSeuil.length>1 ? 's' : ''} mois de ${moisSousSeuil.map(m=> d.labels[m]).join(' et ')},\
vos ressources n'ont été que de ${moisSousSeuil.map(m => round(this('ppa_revenu_activite_individu', d[m])) + ' €').join(' et ')} respectivement.`
},
//next: {}
},
else: {
text: '',
next: {
name: 'KO seuil',
condition: function(d) {
var mois = ['Mm1', 'Mm2', 'Mm3'];
var moyenne = mois.reduce((a, m) => a + this('ppa_fictive', d[m]), 0) / 3.0;
var params = this.p("ppa", d.M);
var minimum = params('prestations.minima_sociaux.ppa.seuil_non_versement', d.D);
return moyenne < minimum;
},
if: {
text: function(d) {
var mois = ['Mm1', 'Mm2', 'Mm3'];
var moyenne = mois.reduce((a, m) => a + this('ppa_fictive', d[m]), 0) / 3.0;
var params = this.p("ppa", d.M);
var minimum = params('prestations.minima_sociaux.ppa.seuil_non_versement', d.D);
return `La prime d'activité n'est pas versée lorsque la moyenne des primes d'activité fictives est en dessous de ${round(minimum)} €\
or dans votre cas elle vaut ${round(moyenne)} €.`;
}
},
},
},
},
},
};
;
var tests = [];
function rec(obj) {
tests.push(obj);
if (obj.if && obj.if.next) {
rec(obj.if.next);
}
if (obj.else && obj.else.next) {
rec(obj.else.next);
}
}
rec(logic);
d3.json('openfisca-trace.json').then(function(data) {
var requested = data.requestedCalculations;
var ppas = requested.filter(function(name) { return name.startsWith("ppa"); });
ppas.sort();
var ppaKey = ppas[ppas.length - 1];
var todo = ppaKey
var ppa = data.trace[ppaKey];
var depths = {};
depths[ppaKey] = 0;
var result = Object.assign({}, ppa);
var root = document.body;
var compo = compoConstructor(data);
var appendText = function(element, text) {
var t = document.createElement('div');
t.innerHTML = text;
element.appendChild(t);
}
var compute = function (parent, block) {
var node = document.createElement('div');
node.classList.add('block');
parent.appendChild(node);
appendText(node, 'En savoir plus:');
appendText(node, 'name: ' + block.name);
if (block.intro) {
appendText(node, 'intro: ' + block.intro);
}
var condition = compo.evl(block.condition);
appendText(node, 'condition: ' + condition);
appendText(node, 'text if: ' + compo.evl(block.if && block.if.text));
if (block.if && block.if.next) {
compute(node, block.if.next);
}
appendText(node, 'text else: ' + compo.evl(block.else && block.else.text));
if (block.else && block.else.next) {
compute(node, block.else.next);
}
}
compute(root, logic);
});
</script>
</body>
</html>