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

./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!