Uma aplicação em Rails para cálculo progressivo de desconto do INSS com listagem paginada de funcionários e geração de relatório com gráfico.
- Ruby on Rails: 7.x
- PostgreSQL: Banco de dados
- Redis: Para processamento de jobs em background
- Sidekiq: Processamento de jobs com Redis
- Bootstrap: Estilização do frontend
- Chart.js: Visualização de gráficos
- Kaminari: Paginação de dados
- Rubocop-rails: Para linting e boas práticas de Rails
- RSpec: Para testes unitários e de integração
- capybara: Para testes interface
- requestjs: Encapsula a lógica para enviar por padrão alguns cabeçalhos que são necessários para aplicativos Rails como o X-CSRF-Token.
- CRUD de Proponentes: Gerenciamento dos proponentes, incluindo dados pessoais, endereço, telefone e salário.
- Cálculo do Desconto INSS: Cálculo progressivo do INSS baseado em faixas salariais com atualização via AJAX.
- Relatório de Faixas Salariais: Exibição do total de proponentes em cada faixa salarial, tanto em listagem quanto em gráfico.
- Atualização de Salário: Uso do Sidekiq para atualização de salários em background.
- Autenticação: Implementada com Devise para segurança do sistema.
- Docker (para execução com Docker)
- Ruby 3.2.2 e Rails 7.x (para execução sem Docker)
- PostgreSQL
- Redis
- Clone o repositório e acesse o diretório:
git clone [URL do repositório]
cd nome_do_projeto
- Construa e inicie os containers:
docker compose -f ./.devcontainer/docker-compose.yml up --build
- Execute as migrations e seeds:
docker-compose -f ./.devcontainer/docker-compose.yml run rails_app rails db:create db:migrate db:seed
- Acesse a aplicação em
http://localhost:3000
.
- Clone o repositório e acesse o diretório:
git clone [URL do repositório]
cd nome_do_projeto
- Instale as dependências do projeto:
bundle install
-
Crie o arquivo
.env
baseado no.env.example
e configure as variáveis de ambiente. -
Execute as migrations e seeds:
rails db:create db:migrate db:seed
- Inicie o Redis e o Sidekiq para os jobs em background:
redis-server
bundle exec sidekiq
- Inicie o servidor Rails:
bin/rails s
Testes foram desenvolvidos em RSpec seguindo o TDD. Para executar:
bundle exec rspec
Para manter a consistência do código, utilize o Rubocop:
bundle exec rubocop
- app/models: Modelos e cálculos de desconto de INSS.
- app/controllers: CRUD de proponentes e lógica de relatórios.
- app/jobs: Jobs para atualização de salários.
- app/views: Templates com Bootstrap para UI e Chart.js para gráficos.
Este projeto foi desenvolvido com foco em boas práticas de desenvolvimento em Rails, implementando um sistema de cálculo progressivo de INSS e uma funcionalidade de relatório com gráficos. Utilizamos o Sidekiq para o processamento de tarefas em segundo plano, e o RSpec para testes unitários, garantindo a qualidade do código. Também foi implementado o Capybara para testes de interface. Para a interação dinâmica no frontend, utilizamos o Stimulus para calcular o INSS e atualizar o valor em tempo real, proporcionando uma experiência mais fluida ao usuário. Além disso, o Request.js foi utilizado para otimizar e ajustar as requisições, garantindo uma comunicação eficiente entre o frontend e o backend.
Durante o desenvolvimento, percebi alguns pontos de melhoria para projetos futuros:
- Paginação: Em vez de utilizar o Kaminari, recomendaria o uso do Pagy, que apresenta um desempenho superior e é mais leve, especialmente em aplicações com grande volume de dados.
- Arquitetura de Frontend: Para tornar a interface mais modular e reutilizável, sugeriria a adoção do conceito de componentes, utilizando ferramentas como o Phlex ou o ViewComponents. Esses frameworks proporcionam uma maneira mais eficiente e escalável de organizar as views.
- Design Customizado: Para um design mais flexível e com total controle sobre o estilo, recomendaria o uso do Tailwind CSS em vez do Bootstrap. O Tailwind oferece uma abordagem utilitária que permite um design totalmente customizado, além de ser mais leve e eficiente para personalização.
Essas melhorias podem proporcionar uma maior performance, escalabilidade e flexibilidade ao projeto, mantendo a consistência e a modularidade ao longo do desenvolvimento.