By Marcos Oliveira,

Função Shell Script para cálculo do Imposto de Renda e INSS

Hoje vamos mostrar como é feito o cálculo do INSS e do Imposto de Renda e usaremos como ferramenta uma função em Shell Script.

Quando você precisa saber quando é recolhido seu quando você trabalha mensalmente para o INSS e o IRRF ou IR ou a até mesmo, mais conhecido como Imposto de Renda.

Para o INSS há umas faixas de contribuição e o TETO máximo, bem como também para o IRRF!

Verifique, baixe e execute o script/função abaixo e leia os comentários ( linhas iniciadas com # ) para entendimento.

Como nosso intuito aqui é mais o Shell Script do que, não menos importante , a Contabilização , segue a função/script , e não esqueça de consultar os links úteis para melhor entendimento e informação!

Informe o salário e o número de dependentes para efetuar o cálculo, utilizando o

  • -s para p salário;
  • -d para dependentes;
  • -h para dúvidas.
./imposto.sh -s 2.500,84 -d 1

A saída será mais ou menos isso, com detalhamento do INSS, IR e outros

Para dúvidas

./imposto.sh -h

Ou

./imposto.sh --helper

irrf.sh

#!/bin/bash
# 
# NOME          : 	imposto.sh - Faz o cálculo do IRRF (Imposto de Renda Retido na Fonte)
#
# SINOPSE       : 	./imposto.sh -s [SALARIO] -d [DEPENDENTES]
#					ou
#					./imposto.sh --salario [SALARIO] --dependentes [DEPENDENTES]
#
# DESCRICAO     : 	É necessário passar o -s e o -d com seus respectivos valores
#
# EXEMPLO       :	$ ./imposto.sh -s 2.500,84 -d 4 
#
# AUTHOR        : 	Marcos da B. M. Oliveira <binbash@linuxmail.org>
#
# VERSAO        : 	v1.0 2015-12-13
#
# REPORTING BUGS:	<http://www.terminalroot.com.br/>
#
# COPYRIGHT     :	Copyright © 2014 Free Software Foundation, Inc.  License GPLv3+: GNU GPL version 3 or later 
#					<http://gnu.org/licenses/gpl.html>.
#       			This is free software: you are free to change and redistribute it.  There is NO WARRANTY, 
#       			to the extent permitted by law.
#
# DEPENDENCIAS  : 	sed, bc
# 

#Valida fomatação
valida(){
	if [ -z $1 ]; then
		echo "$0: falta operando";
		echo "Tente '$0 -h ou --help' para mais informações.";
		exit 1
	fi

	if [ $1 = "-h" ] || [ $1 = "--help" ]; then
		sed -n '2,$s/^# //p' $0
		exit 1
	fi

	case $1 in
		    -s|--salario) 
				SAL=$2
		     	DEP=$4
		     	;;
		    -d|--dependentes) 
		    	DEP=$2
		    	SAL=$4
		     	;;
		             
			*) 	echo "Erro."
				exit 1;
		        ;;
	esac
}

#faz o cálculo dos dependentes
dependentes(){
	CAL="18959";
	DEP=$(echo "$DEP*$CAL" | bc);
	NDEP=$(echo "$DEP/$CAL" | bc);
}

#formata números para moeda real brasileiro
formata_num(){

	NUM=$2;

	E2=$(echo $NUM | rev | cut -c1-2 | rev);
	E1=$(echo $NUM | rev | cut -c3- | rev);
	
	if [ "${#E1}" -gt 3 ]; then
		ONE=$(echo $E1 | rev | cut -c1-3 | rev);
		TWO=$(echo $E1 | rev | cut -c4- | rev);
		NUM="$TWO.$ONE,$E2";
	else
	
		if [ -z $E1 ]; then
			NUM="0";
		else
			NUM="$E1,$E2";
		fi
	fi
	
	echo -e "$1 $NUM""\033[0m";
}

#Encontra a porcentagem do INSS
inss(){
	# caso o usuario digite só 1 numero depois da vírgula
	if [ "$(echo $SAL | grep '\,')" ]; then
		A=$(echo $SAL | cut -d, -f2);
	
		if [ ${#A} -lt 2 ]; then
			echo "Formato do número inválido";
			exit 1;
		fi
	
	fi

	# caso o usuario digite só 1 numero depois do ponto
	if [ "$(echo $SAL | grep '\.')" ]; then
		B=$(echo $SAL | cut -d. -f2);
	
		if [ ${#B} -lt 2 ]; then
			echo "Formato do número inválido";
			exit 1;
		fi
	fi

	# elimina ponto e virgula do salario para poder efetuar validação e calculo posteriormente
	SAL=$(echo $SAL | tr -d '. ,');	

	# se o usuario nao digitar o ',00' ou ',' põe o ',00'  para quantidade de algarismos menores que 5
	if [ ! "$(echo $SAL | grep '\, ')" ] && [ "${#SAL}" -lt 6 ] && [ ! "$(echo $SAL | grep '\. ')" ]; then
		SAL=$SAL"00";
	fi
	
	# Valores da tabela para cálculo do INSS
	MIN="139912";
	MED="233188";
	MAX="466375";


	if [ "$SAL" -le "$MIN" ]; then

		INSS=$(echo "($SAL* 8)/100" | bc);
	
	elif [ "$SAL" -gt "$MIN" ] && [ "$SAL" -le "$MED" ]; then

		INSS=$(echo "($SAL* 9)/100" | bc);
	
	elif [ "$SAL" -gt "$MED" ] && [ "$SAL" -le "$MAX" ]; then

		INSS=$(echo "($SAL* 11)/100" | bc);		
	
	else
	
		INSS=$(echo "(466375* 11)/100" | bc);
				
	fi	
}

#Encontra o valor da base para multiplicar à alíquota
base(){

#base para aliquota e parcela a deduzir
	BASE=$(echo "$SAL-$DEP-$INSS" | bc);

#cria variaveis para validação , eliminado os . e , baseado no valor inteiro
	MIN="190398";
	MED="282665";
	SUB="375105";
	MAX="466468";
	
	
	if [ "$BASE" -le "$MIN" ]; then
		
		QUOTA="0";
		PARC="0";
		
	elif [ "$BASE" -gt "$MIN" ] && [ "$BASE" -le "$MED" ]; then
	
		QUOTA="7.5";
		PARC="14280";		
		
	elif [ "$BASE" -gt "$MED" ] && [ "$BASE" -le "$SUB" ]; then
	
		QUOTA="15";
		PARC="35480";		
		
	elif [ "$BASE" -gt "$SUB" ] && [ "$BASE" -le "$MAX" ]; then
	
		QUOTA="22.5";
		PARC="63613";		
		
	elif [ "$BASE" -gt "$MAX" ]; then
	
		QUOTA="27.5";
		PARC="86936";	
		
	else	
		echo "Erro. Salário incorreto.";
		exit 1	
	fi
}

#chama demais funções para encontrar desejados valores e fazer o cálculo do IRRF
#encontra o valor do Imposto de Renda para depois subtrair pela parcela a deduzir
irrf(){

	valida $*
	dependentes
	inss
	base
	
	VALOR=$(echo "($BASE*$QUOTA) / 100" | bc);
	IRRF=$(echo "$VALOR-$PARC" | bc);
	echo
	echo "|--------------------------------------------------------|";
	formata_num "|Salário: R$" $SAL ;
	echo "|--------------------------------------------------------|";
	echo "|N° Dependente(s): $NDEP";
	echo "|--------------------------------------------------------|";
	formata_num "|INSS: R$" $INSS;
	echo "|--------------------------------------------------------|";
	echo		"|Alíquota: $QUOTA%";
	echo "|--------------------------------------------------------|";
	formata_num "|Parcela a deduzir: R$" $PARC;
	echo "|--------------------------------------------------------|";
	
	if [ "$IRRF" -eq "0" ]; then
		echo -e "|\033[0;1mImposto de renda à recolher: ISENTO\033[0m";
		echo "|--------------------------------------------------------|";
	else
		formata_num "|\033[0;1mImposto de renda à recolher: R$" $IRRF;
		echo -e "|--------------------------------------------------------|";
	fi
	echo
	exit 0
}

#Chama a função que irá pegar os dados e gerar o valor do IRRF
irrf $*

https://is.gd/LblNpV

http://www.previdencia.gov.br/servicos-ao-cidadao/todos-os-servicos/gps/tabela-contribuicao-mensal/

http://idg.receita.fazenda.gov.br/acesso-rapido/tributos/irpf-imposto-de-renda-pessoa-fisica

http://economia.uol.com.br/empregos-e-carreiras/noticias/redacao/2013/01/01/imposto-de-renda-e-inss-entenda-os-descontos-no-seu-salario.htm

http://www.calculador.com.br

https://pt.wikipedia.org/wiki/Imposto_de_Renda_de_Pessoa_F%C3%ADsica

http://www.receita.fazenda.gov.br/PessoaFisica/IRPF/

http://www.receita.fazenda.gov.br/Aplicacoes/ATRJO/Simulador/simulador.asp?tipoSimulador=M

http://www.dpc.com.br/pt-br/show/tabela-progressiva-do-imposto-de-renda

Valeu até a próxima!

Curso Extremamente Avançado em Shell Script Bash

Você irá descobrir técnicas avançadas de escrever em Shell Script. Como criar instaladores para distribuições Linux, Animações, Documentações, além de tudo sobre Processos em sistemas tipo UNIX, detalhes sobre Comandos Avançados e Muito Mais !