Ir para conteúdo
Fórum Script Brasil
  • 0

Calcular o salário líquido a partir do bruto


FernandoG

Pergunta

Bom galera to levando um surra aki tentando criar um scrip para calcular o salario com os descontos de INSS e IR(imposto de renda)...

e outros descontos como transporte alimentação... Basedo nesse site http://www.microsoft.com/brasil/pequenasem...to.mspx?pf=true acho que consegui fazer o INSS... Mas os descontos do IR são complicados vão se elenvando... E to com algumas duvidas também em relação a que condição eu uso...

Bom se alguém ae tiver uma ideia por favor... valeu

<?php
// CALCULO DO INSS
//Declara variáveis (faixa dos valores da tabela do inss
$imp_1 = 965.67;
$imp_2 = 1609.45;
$imp_3 = 3218.90;

// Declara as porcentagens para aplicar no calculo 
$poc_1 = 0.08;
$poc_2 = 0.09;
$poc_3 = 0.11;

// Declara o valor fixo 
$VlrFixo = 334.99;

 Busca valor do Salário informado
$Salario = $_POST["Salario"];


if ($Salario <= $imp_1) {
                                                                     $calculo = $Salario * ($poc_1 / 100)*100;
                                                                     echo (double) "$calculo";
                     }
elseif ($Salario >= $imp_1 and $Salario <= $imp_2) {

                                                                     $calculo = $Salario * ($poc_2 / 100)*100;
                                                                     echo (double) "$calculo";
                                                               }

elseif ($Salario >= $imp_2 and $Salario <= $imp_3) {
                                                                     $calculo = $Salario * ($poc_3 / 100)*100;
                                                                     echo (double) "$calculo  ";
                                                               }

else ($Salario > $imp_3) {
                       echo (double) "$VlrFixo";
                                                               }
?>

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Sei que é antigo o post mas fiquei anos tentando achar uma solução pra esse problema:

Esse script é para as tabelas de 2021 a partir de janeiro

Na verdade é uma classe para ser usado como um MODEL para framework MVC como larável e Yii, mas dá pra adaptar pra usar sem framework.

calculo_inss_ir.php

 <?php
/**
 * 
 * Fabiano da Silva
 * fabianodesilva@gmail.com
 * 
 * Nessa classe calculo_inss_ir conseguimos obter os valores de calculo do INSS e IR 2021 tanto normal como ao contrário
 * No modo normal obtemos o os valores da seguinte forma:
 * 
 * 
 *  Salário Contribuição               | Alíquota | Parcela a Deduzir
 * Até R$ 1.100,00                       | 7,5 %      | R$ 0,000  
 * De R$ 1.101,01 até R$ 2.203,48       |   9 %      | R$ 16,500
 * De R$ 2.203,49 até R$ 3.305,22       |  12 %      | R$ 82,604
 * De R$ 3.305,23 até R$ 6.433,57       |  14 %    | R$ 148,708 
 * 
 * 
 * 1ª faixa salarial: R$ 1.100,00 x 7,5% = R$ 82,50
 * 2ª faixa salarial: (R$ 2.203,48 – R$ 1.100,01) x 9% = R$ 1.044,60 x 9% = R$ 99,31
 * 3ª faixa salarial: (R$ 3.305,22 – R$ 2.203,49) x 12% = R$ 1.101,73 x 12% = R$ 132,21
 * 4ª faixa salarial: (R$ 6.433,57 – R$ 3.305,23) x 14% = R$ 3.128,34 x 14% = R$ 437,97
 * Total máximo a recolher: R$ 82,50 + R$ 99,31 + R$ 132,21 + R$ 437,97 = R$ 751,99
 * Como você pode perceber, a contribuição para o INSS tem um teto de contribuição, que é de R$ 6.433,57. A parte do salário que ultrapassar esse  * teto fica isenta, o que significa dizer que um salário de 7 mil reais terá o mesmo valor de desconto de INSS que um salário de 20 mil reais,  *  que será de R$ 751,99. 
 * 
 * 
 * Tabela IRRF
 * Base de Cálculo Mensal            | Alíquota | Parcela a Deduzir
 * Até R$ 1.903,98    isento    R$ 0,00 |          |
 * De R$ 1.903,99 até R$ 2.826,65    |   7,5 %  | R$ 142,80
 * De R$ 2.826,66 até R$ 3.751,05    |    15 %  | R$ 354,80
 * De R$ 3.751,06 até R$ 4.664,68    |  22,5 %  | R$ 636,13
 * Acima de R$ 4.664,68                |  27,5 %  | R$ 869,36
 * 
 *
 * IRRF = BC * aliquota - parcela a deduzir
 * 
 * Agora quando você só tem o valor liquido e quer obter o valor bruto aonde foi descontado IR e INSS?
 * Veja
 * Para obter somente o valor bruto do INSS através de um liquido
 * Use a função getInss($valor) 
 * EX: echo getInss(2500)
 * 
 * Para obter somente o valor do IRRF através de um liquido
 * Use a função getIR($valor) 
 * EX: echo IrInss::getIr(2500)
 * 
 * Se o valor liquido é fruto de um desconto de IR e INSS juntos faça:
 * 
 *  $valorliquido =2500;
 * $vIr=calculo_inss_ir::getIr($valorliquido); //essa funcao retorna o IR e o valor da base de calulo
 * $bc=$vIr[0];
 * $ir=$vIr[1];
 *
 * O valor bruto obtido na função getIr(Base de Cáuculo) é o liquido do INSS, então pegamos ele e jogamos nessa função 
 * $vInss=calculo_inss_ir::getInss($bc); //essa funcao retorna o INSS e o valor da Bruto
 * $inss=$vInss[0];
 *  $bruto=$vInss[1];
 *
 * Descobrindo bruto atráves do Liquido 
 *
 * echo "Base de Cálculo IRRF<br/>";
 *  echo Yii::$app->formatter->asCurrency($bc)."<br/>";
 *
 *  echo "Valor do IRRF<br/>";
 *  echo Yii::$app->formatter->asCurrency($ir)."<br/>";
 *
 * echo "Valor do INSS<br/>";
 * echo Yii::$app->formatter->asCurrency($inss)."<br/>";
 *
 * echo "Valor Bruto Obtido<br/>";
 * echo Yii::$app->formatter->asCurrency($bruto)."<br/>";
 *
 * 
 * //Contra Prova 
 * $Vinss=calculo_inss_ir::CalculaInss($bruto); 
 * $baseCalculoIr=$Vinss[1];
 * $valorinss=$Vinss[0];
 * $vIrrf=calculo_inss_ir::CalculaIr($baseCalculoIr); 
 *
 * echo "---------------------------------------------------------------<br/>";
 * echo "Contra Prova<br/><br/>";
 * echo "Base de Cálculo IRRF<br/>";
 * echo Yii::$app->formatter->asCurrency($baseCalculoIr)."<br/>";
 * echo "Valor do IRRF<br/>";
 * echo Yii::$app->formatter->asCurrency($vIrrf)."<br/>";
 * echo "Valor do INSS<br/>";
 * echo Yii::$app->formatter->asCurrency($valorinss)."<br/>";
 * echo "Valor Bruto Obtido<br/>";
 * echo Yii::$app->formatter->asCurrency($baseCalculoIr+$valorinss)."<br/>";
 * 
 * 
 */
    //Retorna O valor bruto do INSS
    
    public function getInss($valor){
 
        require 'faixasIrInss.php';

 if( $valor <= $tetoFinalInss1*(1-$aliquotaInss1) ){
    $valorBruto=$valor/(1-$aliquotaInss1);
        $valorInss = ($valorBruto) * ($aliquotaInss1);
          return [$valorInss,$valorBruto];   
        } else
    
 if( $valor <= (($tetoFinalInss2-$tetoinicialInss2) * (1-$aliquotaInss2)+$tetoFinalInss1 * (1-$aliquotaInss1)) ){
    $valorBruto=($valor-$tetoinicialInss2 * $aliquotaInss2 + $tetoFinalInss1 * $aliquotaInss1)/(1-$aliquotaInss2);
      $valorInss = ($valorBruto -$tetoinicialInss2) * $aliquotaInss2 + 82.50;
      return [$valorInss,$valorBruto];   

        } else
 if( $valor <= (($tetoFinalInss3-$tetoinicialInss3) * (1-$aliquotaInss3)+($tetoFinalInss2-$tetoinicialInss2)*(1-$aliquotaInss2)+($tetoFinalInss1*(1-$aliquotaInss1))) ){
    $valorBruto=($valor-$tetoinicialInss2 * $aliquotaInss2 - $tetoFinalInss2 * $aliquotaInss3+$tetoFinalInss1*$aliquotaInss1+$tetoFinalInss2*$aliquotaInss2)/(1-$aliquotaInss3);
       $valorInss = ($valorBruto -$tetoinicialInss3) * $aliquotaInss3 + 82.50+99.31;
       return [$valorInss,$valorBruto];   
         }else

 if( $valor <= (($tetoFinalInss4-$tetoinicialInss4) * (1-$aliquotaInss4)+($tetoFinalInss3-$tetoinicialInss3)*(1-$aliquotaInss3)+($tetoFinalInss2-$tetoinicialInss2)*(1-$aliquotaInss2)+($tetoFinalInss1*(1-$aliquotaInss1)))){
     $valorBruto=($valor-$tetoFinalInss1 * $aliquotaInss2 - $tetoFinalInss2 * $aliquotaInss3-$tetoFinalInss3*$aliquotaInss4+$tetoFinalInss1*$aliquotaInss1+$tetoFinalInss2*$aliquotaInss2+$tetoFinalInss3*$aliquotaInss3)/(1-$aliquotaInss4);
       $valorInss = ($valorBruto -$tetoinicialInss4) * $aliquotaInss4 + 82.50+99.31+132.21;
       return [$valorInss,$valorBruto];   
         } else 
  if( $valor > (($tetoFinalInss4-$tetoinicialInss4) * (1-$aliquotaInss4)+($tetoFinalInss3-$tetoinicialInss3)*(1-$aliquotaInss3)+($tetoFinalInss2-$tetoinicialInss2)*(1-$aliquotaInss2)+($tetoFinalInss1*(1-$aliquotaInss1))) ){
       $valorBruto=($valor+751.99);
            $valorInss = 751.99;
            return [$valorInss,$valorBruto];   
       }
}
                        
  //Retorna O valor bruto do IRRF
public function getIr($valor){
    require 'faixasIrInss.php';
if( $valor <= $tetoIncialIR_1){
$ir = 0;
$valorBruto = 0;

return [$valorBruto, $ir];

} else
if( ($valor-$dedu2IR)/(1-$aliq2IR) <= $tetoFinalIR_2){
$ir =($valor-$dedu2IR)/(1-$aliq2IR)*$aliq2IR-$dedu2IR;
$valorBruto=($valor-$dedu2IR)/(1-$aliq2IR);
//return $ir;
return [$valorBruto, $ir];

} else
if( ($valor-$dedu3IR)/(1-$aliq3IR) <= $tetoFinalIR_3){
    $ir =($valor-$dedu3IR)/(1-$aliq3IR)*$aliq3IR-$dedu3IR;
    $valorBruto=($valor-$dedu3IR)/(1-$aliq3IR);
    //return $ir;
    return [$valorBruto, $ir];
} else
if( ($valor-$dedu4IR)/(1-$aliq4IR) <= $tetoFinalIR_4){
    $ir =($valor-$dedu4IR)/(1-$aliq4IR)*$aliq4IR-$dedu4IR;
    $valorBruto=($valor-$dedu4IR)/(1-$aliq4IR);
    //return $ir;
    return [$valorBruto, $ir];
} else
if( ($valor-$dedu5IR)/(1-$aliq5IR) > $tetoFinalIR_5){
    $ir =($valor-$dedu5IR)/(1-$aliq5IR)*$aliq5IR-$dedu5IR;
    $valorBruto=($valor-$dedu5IR)/(1-$aliq5IR);
    //return $ir;
    return [$valorBruto, $ir];
       } 
    }
  
//Função para calculo normal do IRRF
    public function CalculaIr($valor){
    
        require 'faixasIrInss.php';
  if($valor<=$tetoIncialIR_1){
    $vIr = 0; 
    return $vIr;
}
if($valor<=$tetoFinalIR_2){
    $vIr  = ($valor - $tetoIncialIR_2) * $aliq2IR; 
    return $vIr;
}
if($valor<=$tetoFinalIR_3){
    $vIr  = ($valor - $tetoIncialIR_3) * $aliq3IR +  ($tetoFinalIR_2 - $tetoIncialIR_2) * $aliq2IR;  
    return $vIr;
}
if($valor<=$tetoFinalIR_4){
    $vIr  = ($valor - $tetoIncialIR_4) * $aliq4IR + ($tetoFinalIR_3 - $tetoIncialIR_3) * $aliq3IR +  ($tetoFinalIR_2 - $tetoIncialIR_2) * $aliq2IR;   
    return $vIr;
}
if($valor > $tetoFinalIR_5){
    $vIr  = ($valor * $aliq5IR) -$dedu5IR;
    return $vIr;
}

    }


//Função para calculo normal do INSS
    public function CalculaInss($valor){
        require 'faixasIrInss.php';

if($valor<=$tetoFinalInss1){

    $vInss = $valor *  $aliquotaInss1;
    $bcIr=$valor-$vInss;
    
    return [$vInss, $bcIr];


}
if($valor<=$tetoFinalInss2){

    $vInss = ( $valor-$tetoinicialInss2 )*  $aliquotaInss2+82.50;
    $bcIr=$valor-$vInss;
    
    return [$vInss, $bcIr];

}
if($valor<=$tetoFinalInss3){

    $vInss = ($valor-$tetoinicialInss3) *  $aliquotaInss3+82.50+99.31;
    $bcIr=$valor-$vInss;
    
    return [$vInss, $bcIr];

}
if($valor<=$tetoFinalInss4){

    $vInss = ($valor - $tetoinicialInss4) * $aliquotaInss4 + 82.50+99.31+132.21;
    $bcIr=$valor-$vInss;
    
    return [$vInss, $bcIr];

}
if($valor > $tetoFinalInss4){

    $vInss = 82.50+99.31+132.21+437.97;
    $bcIr=$valor-$vInss;
    
    return [$vInss, $bcIr];

}

}

?>

 

faixasIrInss.php

<?php

//Faixas salariais INSS
//Valores tambem podem vir do banco
$tetoinicialInss1 = 0;
$tetoinicialInss2 = 1100.01;
$tetoinicialInss3 = 2203.49;
$tetoinicialInss4 = 3305.23;

$tetoFinalInss1 = 1100;
$tetoFinalInss2 = 2203.48;
$tetoFinalInss3 = 3305.22;
$tetoFinalInss4 = 6433.57;

//Percentual Deducao
$aliquotaInss1 = 0.075;
$aliquotaInss2 = 0.09;
$aliquotaInss3 = 0.12;
$aliquotaInss4 = 0.14;

//------------------------------------------------------------------------------
    //IRRF Faixas Salariais
    $tetoIncialIR_1 = 1903.98;
    $tetoIncialIR_2 = 1903.99;
    $tetoIncialIR_3 = 2826.66;
    $tetoIncialIR_4 = 3751.06;
    $tetoIncialIR_5 = 4664.68;
    
    $tetoFinalIR_1 = 0;
    $tetoFinalIR_2 = 2826.65;
    $tetoFinalIR_3 = 3751.05;
    $tetoFinalIR_4 = 4664.68;
    $tetoFinalIR_5 = 4664.69;
    //Percentuais
    $aliq1IR = 0;
    $aliq2IR = 0.075;
    $aliq3IR = 0.15;
    $aliq4IR = 0.225;
    $aliq5IR = 0.275;
    //Deducoes
    $dedu1IR = 0;
    $dedu2IR = 142.80;
    $dedu3IR = 354.80;
    $dedu4IR = 636.13;
    $dedu5IR = 869.36;

?>

Testando:

teste.php

<?php

 $valorliquido =2500;
  $vIr=calculo_inss_ir::getIr($valorliquido); //essa funcao retorna o IR e o valor da base de calulo
  $bc=$vIr[0];
  $ir=$vIr[1];

  //O valor bruto obtido do IRRF(Base de Cáuculo) é o liquido do INSS então pegamos ele e jogamos nessa função 
  $vInss=calculo_inss_ir::getInss($bc); //essa funcao retorna o INSS e o valor da Bruto
   $inss=$vInss[0];
   $bruto=$vInss[1];

//Descobrindo bruto atráves do Liquido 
    echo "Valor Liquido Informado<br/>";
    echo Yii::$app->formatter->asCurrency($valorliquido)."<br/>";

    echo "Base de Cálculo IRRF<br/>";
    echo Yii::$app->formatter->asCurrency($bc)."<br/>";

    echo "Valor do IRRF<br/>";
    echo Yii::$app->formatter->asCurrency($ir)."<br/>";

    echo "Valor do INSS<br/>";
    echo Yii::$app->formatter->asCurrency($inss)."<br/>";

    echo "Valor Bruto Obtido<br/>";
    echo Yii::$app->formatter->asCurrency($bruto)."<br/>";

  
//Contra Prova 
$Vinss=calculo_inss_ir::CalculaInss($bruto); 
$baseCalculoIr=$Vinss[1];
$valorinss=$Vinss[0];
 $vIrrf=calculo_inss_ir::CalculaIr($baseCalculoIr); 

 echo "---------------------------------------------------------------<br/>";
 echo "Contra Prova<br/><br/>";
 echo "Valor Bruto Obtido<br/>";
 echo Yii::$app->formatter->asCurrency($baseCalculoIr+$valorinss)."<br/>";
 echo "Valor do INSS<br/>";
 echo Yii::$app->formatter->asCurrency($valorinss)."<br/>";
 echo "Base de Cálculo IRRF<br/>";
 echo Yii::$app->formatter->asCurrency($baseCalculoIr)."<br/>";
 echo "Valor do IRRF<br/>";
 echo Yii::$app->formatter->asCurrency($vIrrf)."<br/>";
 echo "Valor Liquido <br/>";
 echo Yii::$app->formatter->asCurrency($valorliquido)."<br/>";

?>
 

Editado por fabianodesilva
Erro de digitação da classe
Link para o comentário
Compartilhar em outros sites

  • 0

Eu não consegui resolver o problema da anotação decimal do PHP e a brasileira. Aqui segue a minha contribuição (atenção a tabela do IR de 2022 é a mesma de 2015):

 

<style> tr {height:50px} </style>
<div style=width:500;height:550;background:lightblue;display:inline-block>
<div style=text-align:center>Salário 2022 = Bruto - INSS - IR - Pensão<br>Use o ponto como separador decimal</div>
<form method=get>
<table style=margin:30px>
<tr><td>Salário Bruto<td><td><input style=text-align:right name=bruto id=inpbruto>
<tr><td>INSS<td><td align=right><label id=lbinss></label>
<tr><td>IR<td><td align=right><label id=lbir></label>
<tr><td>Redução base do IR:
<tr><td>Dependentes<td><input id=inpdepende name=depende size=1> x 189.59
<tr><td>Pensão<td><td><input style=text-align:right id=inppensao name=pensao>
<tr><td>Líquido<td><td align=right><label id=lbliquido></label>
<tr><td><td><td align=right><input type=submit value=Calcular>
</form></table><p>
<div style=text-align:center>
<form action=astudy.php><input type=submit value="Novo Cálculo"></form></div>
</div>
<div style=position:fixed;width:500px;height:260px;background:lightgray;top:8;display:inline-block>
    <img src="https://www.pontotel.com.br/wp-content/uploads/2021/08/tabela-inss-2022.webp"  width=500 height=260">
</div>
<div style=position:fixed;width:500px;height:260px;background:lightgray;top:268;display:inline-block>
    <img src="https://www.dinamicasistemas.com.br/upload/images/TABELA%20PROGRESSIVA.jpg"  width=500 height=260>
</div>
<?php
if(isset($_GET['bruto'])){
    $bruto=$_GET['bruto'];
    $depende=$_GET['depende'];
    $pensao=$_GET['pensao'];
    if(empty($depende)){$descdepende=0;echo "<script>inpdepende.value=0</script>";} else {
        $descdepende=$depende*189.89;echo "<script>inpdepende.value=$depende</script>";}    
    if(empty($pensao)){$pensao=0;echo "<script>inppensao.value='0'</script>";} else {
        echo "<script>inppensao.value='$pensao'</script>";    }
    echo "<script>inpbruto.value='$bruto'</script>";
    $inss=0; // https://www.contabilizei.com.br/contabilidade-online/teto-inss/?utm_device=c&utm_term=&utm_source=google&utm_medium=cpc&utm_campaign=%5BMAX%5D_Performance_RMKT_SP&hsa_cam=14465064182&hsa_grp=&hsa_mt=&hsa_src=x&hsa_ad=&hsa_acc=1466761651&hsa_net=adwords&hsa_kw=&hsa_tgt=&hsa_ver=3&gclid=Cj0KCQjwj7CZBhDHARIsAPPWv3fDESQXO-54vamf5rr8EfwPos1rKQ5lA3-Huf5mSJp2y751DwFcdpsaAkihEALw_wcB
    if($bruto<=1212){$inss=$bruto*7.5/100;} 
    if($bruto>1212 and $bruto<=2427.35){$inss=1212*7.5/100+($bruto-1212)*9/100;}
    if($bruto>2427.35 and $bruto<=3641.03){$inss=1212*7.5/100+(2427.35-1212)*9/100+($bruto-2427.35)*12/100;}
    if($bruto>3641.03 and $bruto<=7087.22){$inss=(1212*7.5/100+(2427.35-1212)*9/100+(3641.03-2427.35)*12/100+$bruto-3641.03)*14/100;}
    if($bruto>7087.22){$inss=828.38;}
    $inss=round($inss,2);
    echo "<script>lbinss.innerHTML='$inss'</script>";
    $baseIR=$bruto-$inss-$descdepende-$pensao; // https://www.pontotel.com.br/calcular-irrf/
    if($baseIR<=1903.98){$ir=0;}
    if($baseIR>1903.98 and $baseIR<=2826.65){$ir=$baseIR*7.5/100-142.80;}
    if($baseIR>2826.65 and $baseIR<=3751.05){$ir=$baseIR*15/100-354.80;}
    if($baseIR>3751.05 and $baseIR<=4664.68){$ir=$baseIR*22.5/100-636.13;}
    if($baseIR>4664.68){$ir=$baseIR*27.5/100-869.36;}
    $ir=round($ir,2);
    $liquido=$bruto-$inss-$ir;
    echo "<script>lbir.innerHTML='$ir';lbliquido.innerHTML='$liquido'</script>";}
?>

 

Sem título.png

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...