Code calcul IRPP?
Le
Ralph Nader 2008
Bonjour
Je suis plutôt débutant en programmation et pas expert non plus en
PHP. Je me demandais si quelqu'un aurait un code moins bovin pour
générer une estimation de l'impôt sur le revenu ?
$irpp = (0.8 * (0.9 * $rbe)); //Abattement 10% puis 20%
print "Revenu imposable après abattements = $irpp E<p>";
if ($irpp <= 4262)
$irpp = 0;
elseif ($irpp > 4262 && $irpp <= 8392)
$irpp = ($irpp * 0.0683) - 291.09;
elseif ($irpp > 8392 && $irpp <= 14753)
$irpp = ($irpp * 0.1914) - 1322.92;
elseif ($irpp > 14753 && $irpp <= 23888)
$irpp = ($irpp * 0.2826) - 2668.39;
elseif ($irpp > 23888 && $irpp <= 38868)
$irpp = ($irpp * 0.3738) - 4846.98;
elseif ($irpp > 38868 && $irpp <= 47932)
$irpp = ($irpp * 0.4262) - 6883.66;
elseif ($irpp > 47932)
$irpp = ($irpp * 0.4809) - 9505.54;
print "IRPP célibataire, sans QF = $irpp E<p>";
Pour ceux que ça intéresse, la formule et les barèmes sont dispo ici
(quoi que le module de calcul sur le site de Bercy donne un chiffre un
chouia plus faible) :
http://ameliko.free.fr/vos-impots/impotrevenu.htm
Merci,
Ralph.
Je suis plutôt débutant en programmation et pas expert non plus en
PHP. Je me demandais si quelqu'un aurait un code moins bovin pour
générer une estimation de l'impôt sur le revenu ?
$irpp = (0.8 * (0.9 * $rbe)); //Abattement 10% puis 20%
print "Revenu imposable après abattements = $irpp E<p>";
if ($irpp <= 4262)
$irpp = 0;
elseif ($irpp > 4262 && $irpp <= 8392)
$irpp = ($irpp * 0.0683) - 291.09;
elseif ($irpp > 8392 && $irpp <= 14753)
$irpp = ($irpp * 0.1914) - 1322.92;
elseif ($irpp > 14753 && $irpp <= 23888)
$irpp = ($irpp * 0.2826) - 2668.39;
elseif ($irpp > 23888 && $irpp <= 38868)
$irpp = ($irpp * 0.3738) - 4846.98;
elseif ($irpp > 38868 && $irpp <= 47932)
$irpp = ($irpp * 0.4262) - 6883.66;
elseif ($irpp > 47932)
$irpp = ($irpp * 0.4809) - 9505.54;
print "IRPP célibataire, sans QF = $irpp E<p>";
Pour ceux que ça intéresse, la formule et les barèmes sont dispo ici
(quoi que le module de calcul sur le site de Bercy donne un chiffre un
chouia plus faible) :
http://ameliko.free.fr/vos-impots/impotrevenu.htm
Merci,
Ralph.

Poser une question


Salut,
Déjà pour simplifier tu peux virer la première clause $irpp> *** dans chaque
elseif, elle fait double emploi car <doc>L'expression elseif est exécutée
seulement si le if précédent et tout autre elseif précédent sont évalués
comme FALSE, et que votre elseif est évalué à TRUE réaffecte pas le résultat à la valeur $irpp sinon tu pourrais passer dans
plusieurs elseif (c'est peut probable quand même car l'impot est en général
inférieur au revenu, mais bon ...).
$imp = 0;
if ($irpp > 4262 && $irpp elseif ($irpp elseif ($irpp elseif ($irpp elseif ($irpp else $imp = ($irpp * 0.4809) - 9505.54;
Amicalement.
--
Cléo.
Il n'a rien de 'bovin' ! un code clair et lisible est toujours
préférable....
Je suis d'accord, mais je me demandais s'il n'y aurait pas un truc un
peu plus intelligent que ces longues séries de if/elseif. J'ai vu des
trucs comme min(), max(), ou la structure simplifiée du type ($a ($b? $c : $d), d'où l'idée que quelqu'un a peut-être un algo plus
sympa :-)
Peut-être, ou alors parce que les barèmes ont un peu changé depuis le
début de l'année, mais la différence n'étant pas très importante et ce
script n'est pensé que pour donner une idée, ça devrait aller.
Merci à tous les deux pour votre aide :-)
Ralph.
pour le plaisir, j'ai réalisé ceci ; si cela peut aider certains
a apprenhender les technologies objets, au moins je n'aurai pas
perdu mon temps.
si vous voulez un peu d'explication, je veux bien encore passer du temps.
- il est facile de creer les classes de bareme pour chaques années.
- une methode calcule le revenu imposable ; c'est une methode simplifiée
- une methode permet d'obtenir la tranche d'imposition en fonction du
montant du revenu imposable.
- connaissant la tranche d'impostion et le nombre de part, (et le bareme)
on peut aisément calculer l'impot sur le revenu.
<?php
error_reporting(E_ALL);
# Marc Quinton ; nov 2004;
#
# calculs d'imposition
#
# ces classes ne sont pas validées ; elles sont sujettes a erreurs.
class AbstractBareme {
var $annee;
var $taux = array();
function Bareme(){
die ("c'est une classe abstraite qui doit etre surchargée");
}
function tranche($revenu){
$tranche = 6;
foreach(array_reverse(array_keys($this->taux)) as $key){
if($revenu>$this->taux[$key]['seuil'])
return $tranche;
$tranche--;
}
}
function pourcentage($tranche){
return $this->taux[$tranche]['pourcentage'];
}
function deduction($tranche){
return $this->taux[$tranche]['deduction'];
}
}
class Bareme2002 extends AbstractBareme{
# ...
}
class Bareme2003 extends AbstractBareme{
# ...
}
class Bareme2004 extends AbstractBareme{
function Bareme2004(){
$this->annee = 2004;
$this->taux = array(
# tranche 0
array(
'seuil' => 0,
'pourcentage' => 0,
'deduction' => 0
),
# tranche 1
array(
'seuil' => 4262,
'pourcentage' => 6.83,
'deduction' => 291.09
),
# tranche 2
array(
'seuil' => 8392,
'pourcentage' => 19.14,
'deduction' => 1322.92
),
# tranche 3
array(
'seuil' => 14753,
'pourcentage' => 28.26,
'deduction' => 2668.39
),
# tranche 4
array(
'seuil' => 23888,
'pourcentage' => 37.38,
'deduction' => 4846.98
),
# tranche 5
array(
'seuil' => 38868,
'pourcentage' => 42.62,
'deduction' => 6883.66
),
# tranche 6
array(
'seuil' => 47932,
'pourcentage' => 48.09,
'deduction' => 9505.54
)
);
}
}
class ImpotsSurRevenu{
var $bareme;
function ImpotsSurRevenu(&$bareme){
$this->bareme = &$bareme;
}
function tranche($revenu){
return $this->bareme->tranche($revenu);
}
# cas simple : abatement de 20% suivi de 10%
function revenu_imposable($revenu){
return (0.8 * (0.9 * $revenu));
}
function calculer($revenu, $nombre_part){
# http://ameliko.free.fr/vos-impots/impotrevenu.htm
# ir = revenu_imposable * pourcentage - N * deduction
$revenu = intval($revenu);
$tranche = $this->bareme->tranche($this->revenu_imposable($revenu));
$ir = $revenu * $this->bareme->pourcentage($tranche)/100 - $nombre_part *
$this->bareme->deduction($tranche);
if($ir < 0) $ir = 0;
return $ir;
}
}
$bareme = new Bareme2004();
$impots = new ImpotsSurRevenu($bareme);
$revenu = 25000;
$nombre_parts = 2;
# echo "tranche imposition : " . $impots->tranche(35000) . "n";
echo $impots->calculer($revenu, $nombre_parts) . "n";
?>
Peut être switch ? http://fr.php.net/manual/fr/control...switch.php
J'eqça