UnB - Universidade de Brasilia
FGA - Faculdade do Gama
TPPE - Técnicas de Programação para Plataformas Emergentes
Matrícula | Aluno |
---|---|
17/0039668 | Lucas Ganda Carvalho |
17/0047326 | Wictor Bastos Girardi |
17/0056155 | Andŕe Aben-Athar de Freitas |
17/0039803 | Lucas Medeiros |
Utilização
Primeiro é necessário instalar a biblioteca de testes pytest
utilizando o comando:
pip install pytest
Lembre de isolar o ambiente utilizando um ambiente virtual
Após finalizar a instalação basta rodar os testes presentes no arquivo src/test.py
utilizando o comando:
pytest src/test.py
Enunciado do trabalho
Seja o seguinte cenário descrito a seguir:
De um modo bastante resumido, o Imposto de Renda de Pessoa Física (IRPF) de todo contribuinte é calculado mensalmente considerando os rendimentos tributáveis recebidos no mês corrente e as deduções legais. Da subtração desses valores (rendimentos - deduções) obtem-se a base de cálculo, sobre o qual será calculado o valor do imposto. Há 5 faixas de cálculo de imposto, cada qual com sua alíquota (definida em %) a ser aplicada sobre o valor que a base de cálculo ocupou da faixa. O valor do imposto final é a soma dos valores de impostos a serem pagos para cada faixa e a alíquota efetiva total (em %) é o resultado do valor do imposto dividido pelo total de rendimentos. Cada um desses passos está detalhado a seguir.
Como rendimentos tributáveis entende-se todos aqueles valores recebidos pelo contribuinte tais como salários, aluguéis, participação em lucros e rendimentos de empresas, dividendos, lucros de aplicações financeiras, dentre outros. O valor total desses rendimentos deve ser utilizado para efeitos do cálculo do IRPF.
O contribuinte tem direito a vários deduções no mês corrente. Como deduções integrais entende-se aquelas cujos valores totais serão abatidos do valor total de rendimentos. São exemplos de deduções integrais:
- Contribuição previdenciária oficial (podendo ser mais de uma contribuição, por exemplo, no contracheque + contribuição via carnê INSS);
- Pensão alimentícia;
- Previdência privada ou Fundo de Previdência dos Servidores públicos (Funpresp);
- Valores pagos via carnê-leão, dentre outros.
O contribuinte poderá ainda deduzir para cada dependente legal o valor de R$189,59 por mês.
Todas essas deduções deverão ser somadas para efeitos de cálculo do total de deduções a que o contribuinte tem direito.A base de cálculo do IRPF é dada pela subtração do total de rendimentos pelo total de deduções.
Para o valor da base de cálculo, é calculado o valor de cada uma das 5 faixas de imposto. As faixas possuem as seguintes alíquotas:
Faixa Alíquota 1a. 0% (isenta) 2a. 7,5% 3a. 15% 4a. 22,5% 5a. 27,5% Portanto, baseado na tabela acima, os valores da base de cálculo que atingiram as faixas serão multiplicados pelas respectivas alíquotas para cálculo do valor do imposto de cada uma das faixas. O valor total do imposto a ser pago naquele mês é a soma dos valores dos impostos de todas as faixas.
Por fim, a alíquota efetiva é calculada como sendo a taxa (%) do valor total do imposto pelo valor total de rendimentos.
Todo esses cálculos podem ser realizados através do Simulador de IRPF da Receita Federal Brasileira (RFB).
Com base na descrição do cálculo do IRPF acima, o trabalho a ser realizado pelo grupo consiste na criação de um simulador similar ao simulador disponibilizado pela RFB. Esse simulador deverá ser construído através do método de TDD utilizando, obrigatoriamente, as técnicas de falsificação, duplicação e triangulação de testes.
O projeto resultante do desenvolvimento através de TDD deverá ser capaz de:
-
Cadastro de rendimentos:
- Cadastrar rendimentos com a descrição (salario, aluguel, etc...) e valor
- Não permitir descrição em branco (nesse caso lançar uma exceção do tipo
DescricaoEmBrancoException
- Não permitir informar valores de rendimentos em branco ou inválidos
(negativos por exemplo). Nesses casos lançar exceção do tipo
ValorRendimentoInvalidoException
-
Cadastro de deduções:
- Cadastrar deduções através de sua descrição (Previdencia privada, Funpresp,
etc...) e valor:
- Não permitir cadastro de deduções com descrição em branco. Nesse caso
lançar
DescricaoEmBrancoException
. - Não permitir cadastro de valores em branco ou inválidos para as deduções.
Nesses casos lançar uma exceção do tipo
ValorDeducaoInvalidoException
- Não permitir cadastro de deduções com descrição em branco. Nesse caso
lançar
- Cadastrar uma ou mais contribuição previdenciária oficial, informando
descrição e valores.
- As restrições apresentadas no caso acima se aplicam integralmente para contribuições previdenciárias.
- Cadastrar uma ou mais pensão alimentícia, informando valores.
- As restrições apresentadas no caso acima se aplicam integralmente para contribuições previdenciárias.
- Cadastrar dependentes (zero ou mais), informando o nome e a data de
nascimento de cada dependente.
- Não permitir o cadastro de um dependente com o nome em branco. Nesse caso
deverá lançar uma exceção do tipo
NomeEmBrancoException
.
- Não permitir o cadastro de um dependente com o nome em branco. Nesse caso
deverá lançar uma exceção do tipo
- Cadastrar deduções através de sua descrição (Previdencia privada, Funpresp,
etc...) e valor:
-
Calculo dos impostos das faixas de impostos:
- Calcular o valor de faixa de base de cálculo de cada uma das faixas e o valor do imposto para cada uma das faixas.
- Calcular o valor total das faixas de base de cálculo e o valor total do imposto de todas as faixas.
-
Calcular a alíquota efetiva.
O trabalho deverá apresentar o emprego das três técnicas de TDD (falsificação, duplicação e triangulação) em, pelo menos, nas três seguintes situações:
- Calculo do total de deduções;
- Cálculos da base de calculo e do valor de imposto da faixa 1;
- Cálculo da aliquota efetiva.
Nesses três casos deverá, para efeito de evidência, ter a seguinte sequencia de commits:
- falsificação;
- duplicação;
- triangulação.
❗❗❗ATENÇÃO: todos os testes finais deverão estar triangulados por parametrização, com exceção dos testes de exceções.
Grupos de alunos
Os trabalhos deverão ser executados por grupos de até 6 alunos. O grupo deverá criar um repositório público no GitHub, cujo arquivo README.md deverá conter os nomes e matrículas dos componentes.
Entrega do trabalho
Os trabalhos deverão ser entregues através de repositório no GitHub, até as 23:59:59hs do dia 25 de fevereiro de 2022, impreterivelmente.
Os grupos deverão informar ao professor o endereço do repositório do projeto antes da data final de entrega.
Valor do trabalho
30 pontos.
Forma de avaliação
Os trabalhos serão avaliados através:
- da corretude dos cálculos realizados pelo simulador;
- da utilização de testes parametrizados em todos os testes funcionais;
- da utilização de testes de exceção e, por fim,
- das seqüências de commits para os casos em que o emprego das técnicas de falsificação, duplicação e triangulação é obrigatório.