Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Code calcul IRPP?

13 réponses
Avatar
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.

10 réponses

1 2
Avatar
Cleo
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;


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</doc>. Ensuite ne
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 <= 8392) $imp = ($irpp * 0.0683) - 291.09;
elseif ($irpp <= 14753) $imp = ($irpp * 0.1914) - 1322.92;
elseif ($irpp <= 23888) $imp = ($irpp * 0.2826) - 2668.39;
elseif ($irpp <= 38868) $imp = ($irpp * 0.3738) - 4846.98;
elseif ($irpp <= 47932) $imp = ($irpp * 0.4262) - 6883.66;
else $imp = ($irpp * 0.4809) - 9505.54;

Amicalement.
--
Cléo.

Avatar
Paul Delannoy
Ralph Nader 2008 a écrit:
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 ?


Il n'a rien de 'bovin' ! un code clair et lisible est toujours
préférable....

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) :

Ne serait ce pas parce qu'ils éliminent les centimes au départ?


Avatar
Ralph Nader 2008
On 17 Nov 2004 14:03:30 GMT, Paul Delannoy
wrote:
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 :-)

Ne serait ce pas parce qu'ils éliminent les centimes au départ?


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.

Avatar
marc.quinton-PAS-DE-
Ralph Nader 2008 wrote:

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 ?



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";


?>

Avatar
Paul Delannoy
Ralph Nader 2008 a écrit:
On 17 Nov 2004 14:03:30 GMT, Paul Delannoy
wrote:

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 switch ? http://fr.php.net/manual/fr/control-structures.switch.php
J'eqça


Avatar
Ralph Nader 2008
On 17 Nov 2004 16:36:02 GMT,
wrote:
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.


Merci bp :-) Je n'avais pas encore regardé l'OOP en PHP, mais c'est
très sympa.

Ralph.

Avatar
Eric Demeester
dans (in) fr.comp.lang.php, Paul Delannoy
ecrivait (wrote) :

Bonsoir,

Peut être switch ? http://fr.php.net/manual/fr/control-structures.switch.php


Pas adapté à mon avis, car switch ne permet que de tester l'égalité, pas
les autres conditions :

http://www.siteduzero.com/php/conditions.php#switch

--
Eric

Avatar
Philippe Chaissac
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 ?



Bon allez, ma contribution puisque je me suis fais griller sur la
version objet :-) :

$irpp = max((0.8 * (0.9 * $rbe)),0);
$bareme = array(
array( 0 , 0 , 0 ),
array( 4262 , 0.0683 , 291.09 ),
array( 8392 , 0.1914 , 1322.92 ),
array( 14753 , 0.2826 , 2668.39 ),
array( 23888 , 0.3738 , 4846.98 ),
array( 38868 , 0.4262 , 6883.66 ),
array( 47932 , 0.4809 , 9505.54 )
) ;
$i = count($bareme)-1 ;
while($irpp<=$bareme[$i][0]) $i--;
$irpp = ($irpp*$bareme[$i][1])-$bareme[$i][2] ;
print "IRPP célibataire, sans QF = $irpp €<br />";

Avatar
Ralph Nader 2008
On 17 Nov 2004 21:15:06 GMT, Philippe Chaissac
wrote:
Bon allez, ma contribution puisque je me suis fais griller sur la
version objet :-) :


De fait, je commençais à penser utiliser un tableau à plusieurs
dimensions :-)

Merci
Ralph.

Avatar
marc.quinton-PAS-DE-
Philippe Chaissac wrote:


Bon allez, ma contribution puisque je me suis fais griller sur la
version objet :-) :


harrrhhh, désolé !

$irpp = max((0.8 * (0.9 * $rbe)),0);


ici, il s'agit du calcul du revenu imposable. Pourquoi 'pp' ?


$bareme = array(
array( 0 , 0 , 0 ),
array( 4262 , 0.0683 , 291.09 ),
array( 8392 , 0.1914 , 1322.92 ),
array( 14753 , 0.2826 , 2668.39 ),
array( 23888 , 0.3738 , 4846.98 ),
array( 38868 , 0.4262 , 6883.66 ),
array( 47932 , 0.4809 , 9505.54 )
) ;
$i = count($bareme)-1 ;
while($irpp<=$bareme[$i][0]) $i--;


en sortie de boucle, $i vaut ce qu'on appelle la tranche
d'imposition, appelons un chat un chat.

$irpp = ($irpp*$bareme[$i][1])-$bareme[$i][2] ;
print "IRPP célibataire, sans QF = $irpp €<br />";


par la suite, il n'est pas tres compliqué de tenir compte
du nombre de part.

1 2