Nível: Junior, Pleno
Tipo: Off
Duração: Máximo 10 dias
Na empresa existe um setor responsável pela contabilidade e pagamento de seus funcionários, entretanto, a parte contábil é realizada por uma consultoria externa. Gerir essas informações é algo bem importante e, dado que há uma confidencialidade no tráfego desses dados e também há uma possibilidade de economizar tirando essa consultoria do jogo, você foi escalado para criar uma aplicação responsável por criar o extrato da folha salarial dos funcionários. Esse extrato deve expôr o salário líquido do funcionário e todos os seus descontos discriminados.
A API tem como principal entidade o Funcionário, ele possui:
- Id
- Nome
- Sobrenome
- Documento (CPF válido)
- Setor
- Salário bruto
- Data de admissão
- Possui desconto no plano de saúde (bool)
- Possui desconto no plano dental (bool)
- Possui desconto de vale transporte (bool)
Os descontos que o funcionário possui são:
-
INSS (em cima do salário bruto):
- Salário de Contribuição
- Alíquota INSS
- até 1.045,00: 7,5%
- de 10.045,01 até 2.089,60: 9%
- de 2.089,61 até 3.134,40: 12%
- de 3.134,41 até 6.101,06: 14%
-
Imposto de renda retido na fonte (em cima do salário bruto):
- Base de cálculo (R$)
- Alíquota (%)
- Parcela a deduzir do IRPF (R$)
- Até 1.903,98: -
- De 1.903,90 até 2.826,65: 7,5 (142,80)
- De 2.826,66 até 3.751,05: 15 (354,80)
- De 3.751,06 até 4.664,68: 22,5 (636,13)
- Acima de 4.664,68: 27,5 (869,36)
-
Plano de saúde (R$ 10 fixos em cima do salário bruto, se o funcionário optar pelo plano)
-
Plano dental (R$ 5 fixos em cima do salário bruto, se o funcionário optar pelo plano)
-
Vale transporte (6% em cima do salário bruto, se o funcionário optar pelo vale transporte) (Caso o funcionário ganhe menos que R$ 1500, não há esse desconto)
-
FGTS (8% em cima do salário bruto)
- Deve ser possível fazer GET em um funcionário dado o seu Id, retornando a entidade
- Deve ser possível inserir um funcionário dados todos os seus dados, exceto Id, que deve ser gerado automaticamente. Esse Id deve vir na resposta da criação do funcionário
- Extrato de contracheque:
- Deve ser possível expor via endpoint o extrato de contracheque dado o Id de um funcionário
- Não há necessidade de persistir os dados do contracheque, ele pode ser construído em tempo de execução
- O contracheque deve ser capaz de expor:
- Mês de referência
- Lista de lançamentos
- Salário bruto
- Total de descontos (Valor negativo)
- Salário líquido
- Um lançamento é composto da seguinte maneira:
- Tipo (Desconto, remuneração)
- Valor
- Descrição (Vale transporte, INSS, IRRF, etc)
- Utilizar .NET Core em sua última versão para o desenvolvimento;
- Utilizar todo seu conhecimento em orientação a objetos, SOLID e Clean Code;
- Faça um bom uso de recursos RESTful, rotas, verbos, status codes e afins;
- Todo ambiente deve ser containerizado (Docker) e preferencialmente executado com todos serviços dependentes em um único comando;
- Para o armazenamento das informações utilizar qualquer banco SQL ou NoSQL da sua preferência;
- Testes são muito importantes. Crie alguns casos de testes unitários (com uso de Mock);
- Use frameworks com sabedoria, sem poluir seu código;
- Ter um repositório organizado, documentação e fácil de utilizar, um ou poucos comandos para levantar todo ambiente e suas dependências;
- O repositório deve ser público e ter integração com qualquer serviço de CI (seja Azure DevOps, AppVeyor, CircleCI, etc);
- A aplicação tem que estar funcional e cumprir os requisitos que foram apresentados no desafio;
- Não é necessária qualquer implementação de interface front-end. Isso não será avaliado! Coloque seus esforços em deixar seu backend bem modelado.