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 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379
| var prenom = document.getElementById("prenom").value;
//document.write("Prénom : ",prenom,"<br>");
var instit = parseInt(document.getElementById("instit").value);
//document.write("Instit ? ",instit,"<br>");
var catarr = parseInt(document.getElementById("catarr").value);
//document.write("Catarr ? ",catarr,"<br>");
var catai = parseInt(document.getElementById("catai").value);
//document.write("Catai ? ",catai,"<br>");
var trav = parseFloat(document.getElementById("trav").value);
//document.write("Trav ? ",trav,"<br>");
var remp = parseFloat(document.getElementById("remp").value);
//document.write("Remp ? ",remp,"<br>");
var autres = parseFloat(document.getElementById("autres").value);
//document.write("Autres ? ",autres,"<br>");
var part = parseFloat(document.getElementById("part").value);
//document.write("Part ? ",part,"<br>");
var noncum = parseFloat(document.getElementById("noncum").value);
//document.write("Non cum ? ",noncum,"<br>");
//
const lastUpdate = "01/06/2020";
document.write("Dernière mise à jour le : ");
document.write(lastUpdate);
// variables à indexer régulièrement
/* ici les différents barèmes concernant l'ARR
A, B et C sont les catégories de ménage. AP/G/T sont les abattements sur le revenu du partenaire (P), sur les autres revenus (G) et sur le travail (T) à 50% (T50) et à 25% (T25)
*/
const BARR = {
A : 7523.29,
B : 11284.94,
C : 15250.89,
AP : 3761.65,
AG : 700.10,
AT50 : 4973.19,
AT25 : 7459.78
};
/* ici les différents barèmes concernant l'AI
b1 à b5 sont les catégories de points. AP/T/R sont les abattements sur le revenu du partenaire (P), sur les revenus du travail(T) et sur les revenus de remplacement (R et R2 suivant le seuil)
*/
const BAI = {
b1 : 1271.84,
b2 : 4206.76,
b3 : 6690.30,
b4 : 9722.78,
b5 : 11022.78,
AP : 40073.35,
AT : 22899.05,
AR : 19627.77,
AR2 : 3270.83
};
/* Affichage des variables, pour vérifier si tout fonctionne bien ce côté là
// A supprimer quand le code est correct
document.write("<br>","BARR.A : ",BARR.A,"<br>","BARR.B : ",BARR.B,"<br>","BARR.C : ",BARR.C,"<br>","BARR.AP : ",BARR.AP,"<br>","BARR.AG : ",BARR.AG,"<br>","BARR.AT50 : ",BARR.AT50,"<br>","BARR.AT25 : ",BARR.AT25,"<br>","<br>");
document.write("BAI.b1 : ",BAI.b1,"<br>","BAI.b2 : ",BAI.b2,"<br>","BAI.b3 : ",BAI.b3,"<br>","BAI.b4 : ",BAI.b4,"<br>","BAI.b5 : ",BAI.b5,"<br>","BAI.AP : ",BAI.AP,"<br>","BAI.AT : ",BAI.AT,"<br>","BAI.AR : ",BAI.AR,"<br>","BAI.AR2 : ",BAI.AR2,"<br>","<br>");
*/
/* création des variables qu'il faudra nourrir avec les données du formulaire
Idéalement, ils devraient en être issus directement mais comme je n'y arrive pas encore, je les crée avec une valeur de base de zéro
*/
/*
var instit = 0;
var catarr = 0;
var catai = 0;
var trav = 0;
var remp = 0;
var autres = 0;
var part = 0;
var noncum = 0;
*/
/* si la personne mentionne des revenus du partenaire en catégorie A ou B, il y aura forcément un problème dans le calcul car ce n'est normalement pas possible.
Par souci de facilité, l'usager est prévenu directement sur le formulaire de ne pas le faire et on en tiendra pas compte dans les calculs par la suite.
*/
/* Création des variables qui serviront à déduire le barème de base
Valeurs à zéro pour permettre de tester les calculs avant d'avoir réussi à les récupérer depuis les champs de formulaire
*/
var DeducARR;
var DeducAI;
/* Création des variable pour les calculs de déduction intermédiares
ARR est Allocation de remplacement de revenus. AI est allocation d'intégration
*/
var DeduARR_RevP = 0;
var DeduARR_RevT = 0;
var DeduARR_RevG = 0;
// RevG comprend les revenus de remplacement et les autres revenus, pour l'ARR
var DeduAI_RevP = 0;
var DeduAI_RevT = 0;
var DeduAI_RevR = 0;
var DeduAI_RevG = 0;
/* RevG comprend les autres revenus et la part non immunisée des revenus de remplacement pour l'AI. Doit donc se calculer en deux temps. Premier temps --> juste les autres revenus
*/
var Dedu_NonCum = noncum;
// dans l'excel, ils sont mentionnés séparément pour l'ARR et l'AI mais je n'ai pas trouvé de raison pour justifier cela. Doit être approfondi
//puis créer la variable qui contiendra toutes les autres
var DeduARR = 0;
var DeduAI = 0;
// Calculs qui suivent concernent les abattements et les déductions pour l'ARR
/*Si les revenus du partenaire sont inférieurs ou égaux à l'abattement, ils ne seront donc pas pris en considération. Dans le cas contraire, seuls les revenus qui excèdent l'abattement seront déduits.
*/
if (part <= BARR.AP){
var DeduARR_RevP = 0;
}
else {
var DeduARR_RevP = part - BARR.AP;
}
/* Calcul de la déduction des revenus du travail
Si les revenus du travail sont inférieurs ou égaux au barême 50, on ne déduira que la moitié.
S'ils sont supérieur au barème 50 et inférieurs au barème 25. La première tranche ne sera compté que pour la moitié et la seconde au quart.
Au delà de 25, tout est déduit.
*/
if (trav === 0){
var DeduAI_RevT = 0;
}
else if (trav <= BARR.AT50){
var DeduARR_RevT = trav / 2;
}
else if (trav <= BARR.AT25){
var DeduARR_RevT = (BARR.AT50 / 2) + (((trav - BARR.AT50) / 4) * 3);
}
else {
var DeduARR_RevT = (BARR.AT50 / 2) + (((BARR.AT25 - BARR.AT50) / 4) * 3) + (trav - BARR.AT25);
}
/*
Calcul de la déduction des autres revenus.
Il y a un abattement égal au barème AG. On va reprendre le même calcul que pour les revenus du partenaire basé sur un même principe
Mais on doit y ajouter la fusion des autres revenus et des revenus de remplacement en ARR dans une nouvelle variable autres2 (pour ne pas que la variable autre ne soit plus utilisable en AI).
*/
var autres2 = (autres + remp);
if (autres2 <= BARR.AG){
var DeduARR_RevG = 0;
}
else {
var DeduARR_RevG = autres2 - BARR.AG;
}
/* on va additionner toutes les différentes déductions dans une seule variable pour l'ARR
*/
var DeduARR = DeduARR_RevG + DeduARR_RevP + DeduARR_RevT + Dedu_NonCum;
/* suivant le choix fait dans le formulaire, on va définir ce qu'est ARR au début du calcul puis déduire les revenus. Si le résultat final est négatif, on le met à 0.
*/
if (catarr === 0) {
var ARR = 0;
}
else if (catarr === 1) {
var ARR = BARR.A - DeduARR;
}
else if (catarr === 2) {
var ARR = BARR.B - DeduARR;
}
else {
var ARR = BARR.C - DeduARR;
}
if (ARR < 0) {
var ARR = 0;
}
else {
var ARR = ARR;
}
/* ARR, derniers calculs
si catégorie C et que deux au moins le sont dans le couple, alors ce sera le barème B qui sera octroyé au maximum
Autrement dit, si le montant final calculé est > à B --> B. Sinon, le calcul reste bon (s'il on en croit le fichier excel)
*/
if (catarr === 4 && ARR > BARR.B) {
ARR = BARR.B;
}
else {
ARR = ARR;
}
// Calculs qui suivent concernent les abattements et les déductions pour l'AI
/* on va d'abord calculer la déduction des revenus du partenaire
Il est important de savoir que, ici, si le montant est supérieur à 0, on doit encore le diviser par deux ensuite.
*/
if (part <= BAI.AP){
var DeduAI_RevP = 0;
}
else {
var DeduAI_RevP = (part - BAI.AP) / 2;
}
/* on va faire un calcul très similaire pour les revenus du travail de la personne handicapée
on doit créer une variable avec l'abattement car ce sera utile dans une étape ultérieure
*/
if (trav <= BAI.AT){
var DeduAI_RevT = 0;
}
else {
var DeduAI_RevT = (trav - BAI.AT) / 2;
}
var AbattAI_T = trav - DeduAI_RevT;
/* c'est ici que ça commence à se compliquer le plus !!
l'immunisation des revenus de remplacement ne dépend pas que d'un seul barème mais aussi du montant total immunisé en revenus du travail.
Si tout le pot de l'immunisation des revenus du travail a été utilisé, alors on immunise rien en revenus de remplacement.
Le total des immunisations revenus du travail et revenus de remplacement ne peut jamais dépasser le barème des revenus du travail.
Exemple, si ce barème était de 100 pour les revenus du travail et de 10 pour les revenus de remplacement, on pourrait immuniser le maximum des revenus de remplacement uniquement si les revenus du travail n'excèdent pas dix. Et si les revenus du travail étaient entre 90 et 100, on ne pourrait immuniser que le restant du pot jusqu'à 100.
La variable BAI.AR représente le seuil de revenus au delà duquel on commence à manger BAI.AR2 qui est le maximum déductible en revenus de remplacement.
Concrètement, ici, on regarde si les revenus de remplacement ne sont pas tout simplement égaux à 0 alors rien à déduire.
Ensuite on regarde si les revenus du travail laissent la possibilité d'un abattement des revenus de remplacement, sinon on déduit tous les revenus de remplacement.
Ensuite on regarde si les revenus du travail ne mangent pas la marge et si les revenus de remplacement sont inférieurs à leur propre marge maximale. Dans ce cas, on ne déduit rien.
Ensuite on regarde si les revenus du travail ne mangent pas la marge et si les revenus de remplacement sont supérieur à leur propre marge. Dans ce cas, on déduit la différence entre revenus de remplacement et leur propre marge.
Ensuite, on regarde si les revenus du travail mangent une partie de la marge et si cette marge n'est pas supérieur aux revenus de remplacement. Dans ce cas, les revenus de remplacement ne sont pas déduits.
Enfin, je pense qu'on a épuisé tous les cas de figure, on calcule la différence entre revenus de remplacement et la marge laissée par les revenus du travail.
On doit aussi créer une variable avec l'abattement effectué car ce sera utile dans une étape ultérieure.
*/
if (remp === 0) {
var DeduAI_RevR = 0;
}
else if (trav >= BAI.AT) {
var DeduAI_RevR = remp;
}
else if (trav <= BAI.AR && remp <= BAI.AR2) {
var DeduAI_RevR = 0;
}
else if (trav <= BAI.AR && remp > BAI.AR2) {
var DeduAI_RevR = remp - BAI.AR2;
}
else if (trav > BAI.AR && remp <= (BAI.AR2 - (trav - BAI.AR))) {
var DeduAI_RevR = 0;
}
else {
var DeduAI_RevR = remp - (BAI.AR2 - (trav - BAI.AR));
}
var AbattAI_R = remp - DeduAI_RevR;
/* pour calculer la déduction des autres revenus, il faut additionner les revenus de remplacement non immunisés (à ce stade DeduAI_RevR) aux autres revenus dans une nouvelle variable autres3.
Ensuite, on détermine le montant de l'allocation ARR théorique avant déduction.
Ensuite, on va voir si le total de ce qui a été abattu précédemment en revenus du travail et de remplacement ne dépasse pas le montant du barème sélectionné en ARR et on va calculer l'abbattement maximal pour cette étape.
Ensuite, on fait l'abattement pour obtenir la dernière déduction à effectuer.
*/
var autres3 = autres +DeduAI_RevR;
// détemination du barème théorique
if (catarr === 0) {
var BarTheoARR = 0;
}
else if (catarr === 1) {
var BarTheoARR = BARR.A;
}
else if (catarr === 2) {
var BarTheoARR = BARR.B;
}
else {
var BarTheoARR = BARR.C;
}
// détemination de l'abattement maximum
if (BarTheoARR <= (AbattAI_T + AbattAI_R)) {
var AMAX_RevG = 0;
}
else {
var AMAX_RevG = BarTheoARR - (AbattAI_R + AbattAI_T);
}
// détermination de la déduction
if (AMAX_RevG === 0) {
var DeduAI_RevG = autres3;
}
else if (AMAX_RevG >= autres3) {
var DeduAI_RevG = 0;
}
else {
var DeduAI_RevG = autres3 - AMAX_RevG;
}
/* on va additionner toutes les différentes déductions dans une seule variable pour l'AI. On remarquera qu'on ne déduit par les revenus de remplacement car ils sont déjà présents dans le calcul des revenus généraux.
*/
var DeduAI = DeduAI_RevG + DeduAI_RevP + DeduAI_RevT + Dedu_NonCum;
/* Derniers calculs pour l'AI
D'abord, choix du barème. Ensuite on enlève du barème toutes les déductions.
Si la personne handicapée vit en instution, le montant doit être réduit de 28%.
Enfin, on s'assure que le résultat ne soit pas négatif et on remet à zéro si c'est le cas.*/
if (catai === 0) {
var AI = 0;
}
else if (catai === 1) {
var AI = BAI.b1 - DeduAI;
}
else if (catai === 2) {
var AI = BAI.b2 - DeduAI;
}
else if (catai === 3) {
var AI = BAI.b3 - DeduAI;
}
else if (catai === 4) {
var AI = BAI.b4 - DeduAI;
}
else {
var AI = BAI.b5 - DeduAI;
}
if (AI < 0) {
var AI = 0;
}
else {
var AI = AI;
}
if (instit === 1) {
var AI = AI * 0.72;
}
else {
var AI = AI;
}
/* Addition du résultat du calcul pour l'ARR et pour l'AI pour obtenir le montant annuel.
Création d'une variable_div12 pour obtenir le montant par mois
*/
var ARRAI = ARR + AI;
var AI = (Math.round(AI * 100)) / 100;
var ARR = (Math.round(ARR * 100)) / 100;
var ARRAI = (Math.round(ARRAI * 100)) / 100;
var ARRAIdivDOUZE = ARRAI / 12;
var ARRAIdivDOUZE = (Math.round(ARRAIdivDOUZE * 100)) / 100;
document.write("<br>",prenom,", le montant de votre allocation sera de ",ARRAI," par an et ",ARRAIdivDOUZE," par mois.<br>Ce montant est composé de : ",ARR," (ARR) et de ",AI," (AI).");
$("form :input").change(function(){
$("#bizut").replaceWith("<br>",prenom,", le montant de votre allocation sera de ",ARRAI," par an et ",ARRAIdivDOUZE," par mois.<br>Ce montant est composé de : ",ARR," (ARR) et de ",AI," (AI).")
}); |
Partager