Bem vindo(a)! Esse é o Tech Challenge Elixir!
Aqui você terá todas as informações para o sucesso do seu desafio. Ele consiste em aplicar a linguagem funcional Elixir. Não se preocupe! Não cobramos experiência prévia com essa linguagem. Junto com o desafio disponibilizamos um material para estudo.
Precisamos de pessoas com energia, integridade e inteligência, que aprendam rápido e que gostem de conhecer e aplicar novas tecnologias.
O tempo sugerido para conclusão do desafio é de um mês, mas não é uma regra! Não temos prazo para entrega, queremos que você se dedique e demonstre a qualidade de seu código. Estamos mais interessados em observar a qualidade da solução do que o tempo que você vai demorar.
Quando sua solução estiver pronta, envie um e-mail para [email protected] com o link do seu repositório no Github. Você receberá um e-mail com a confirmação de recebimento.
Em seguida, enviaremos o feedback e as instruções dos próximos passos!
Caso tenha alguma dúvida, nós estamos disponíveis no twitter @StonePagamentos através da #StoneTechChallenge
Bom desafio!
O Sistema Financeiro precisa representar valores monetários. A ideia básica é ter uma estrutura de dados que permita realizar operações financeiras com dinheiro dentro de uma mesma moeda. Isso é pelo motivo de pontos flutuantes terem problemas de aritmética, logo encodificamos valores decimais/fracionais/reais como uma estrutura de dados com campos em inteiros, além de mapeamos operações aritméticas sobre tal estrutura. No fim, a implementação acaba sendo uma Estrutura de Dados Abstrata.
Essas operações financeiras precisam ser seguras e devem interromper a execução do programa em caso de erros críticos.
Sobre as operações financeiras que serão realizadas no sistema, é correto afirmar que os valores monetários devem suportar as seguintes operaçoes:
-
O sistema realizará split de transações financeiras, então deve ser possível realizar a operação de rateio de valores monetários entre diferentes indivíduos.
-
O sistema permite realizar câmbio então os valores monetários possuem uma operação para conversão de moeda.
-
O sistema precisa estar em compliance com as organizações internacionais, então é desejável estar em conformidade com a ISO 4217.
- O código do desafio está na linguagem Elixir
iex -S mix
Para rodar em modo interativo
mix test
Para testar a aplicação
- O candidato está livre para adicionar sua própria lógica desde que mantenha a estrutura base que foi proposta.
-
A lógica da aplicação deve contemplar os testes configurados na pasta
/test
-
Toda lógica que for adicionada no projeto deve ser testada também.
O desafio será avaliado através de cinco critérios.
- O código possui algum controle de dependências?
- O resultado final está completo para ser executado?
- O resultado final atende ao que se propõe fazer?
- O resultado final atende totalmente aos requisitos propostos?
- O código está de acordo com o guia de estilo do Elixir?
- O código está bem estruturado?
- O código está fluente na linguagem?
- O código faz o uso correto de Design Patterns?
- O código foi entregue com um arquivo de README claro de como se guiar?
- O código possui comentários pertinentes?
- O código está em algum controle de versão?
- Os commits são pequenos e consistentes?
- As mensagens de commit são claras?
- O código possibilita expansão para novas funcionalidades?
- O código é Don't Repeat Yourself?
- O código é fácil de compreender?
- O código possui configuração de lint?
- O código possui testes unitários?
- O código possui teste de cobertura?
- O código está em Integração Contínua?