GNT sans publicité, site mobile, fonctionnalitées exclusives...

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

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Cleo
Le #692485
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 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.

Paul Delannoy
Le #692480
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?


Ralph Nader 2008
Le #692242
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.

marc.quinton-PAS-DE-
Le #692243
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";


?>

Paul Delannoy
Le #692240
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...switch.php
J'eqça


Publicité
Suivre les réponses
Poster une réponse
Anonyme