Aplicação full stack para gerenciamento de insumos (matérias-primas) e otimização de produção, sugerindo o que fabricar para obter o maior valor total de venda com base no estoque disponível.
O Production Optimizer foi desenvolvido com o objetivo de simular um cenário real de planejamento industrial, onde é necessário decidir o que produzir e em qual quantidade, considerando limitações de estoque e priorização por valor de venda.
A aplicação permite:
- Gerenciar matérias-primas disponíveis
- Cadastrar produtos com suas respectivas composições
- Executar um cálculo automático que determina a melhor estratégia de produção com base nos recursos disponíveis
O foco do projeto está na clareza da arquitetura, separação de responsabilidades e implementação objetiva da regra de negócio.
- Cadastro, edição e exclusão
- Controle de estoque
- Listagem completa via API REST
- Cadastro de produtos com valor de venda
- Associação de matérias-primas e quantidades necessárias
- Edição e exclusão
Implementação de algoritmo guloso que:
- Ordena produtos pelo maior valor de venda
- Calcula a quantidade máxima possível de produção com base no estoque
- Atualiza o saldo das matérias-primas após cada decisão
- Maximiza o retorno dentro das restrições disponíveis
- Java 17
- Spring Boot 3.2
- Spring Data JPA
- Banco H2 (em memória)
- Maven
- Vue.js 3
- Vite
- Vue Router
- Vue i18n
- Axios
production-optimizer/
├── backend/
│ ├── controller/
│ ├── service/
│ ├── repository/
│ ├── entity/
│ ├── dto/
│ └── exception/
│
├── frontend/
│ ├── views/
│ ├── router/
│ ├── api/
│ ├── i18n/
│ └── dist/
│
└── README.md
A organização segue uma arquitetura em camadas no backend (Controller → Service → Repository), garantindo separação clara de responsabilidades.
- Java 17+
- Node.js (LTS)
- Maven
bash
cd backend
./mvnw spring-boot:run
API disponível em: http://localhost:8080
Executar testes:
bash
./mvnw test
bash
cd frontend
npm install
npm run dev
Aplicação disponível em: http://localhost:3000
Gerar build de produção:
bash
npm run build
| Método | Endpoint |
|---|---|
| GET | /api/raw-materials |
| GET | /api/raw-materials/{id} |
| POST | /api/raw-materials |
| PUT | /api/raw-materials/{id} |
| DELETE | /api/raw-materials/{id} |
| Método | Endpoint |
|---|---|
| GET | /api/products |
| GET | /api/products/{id} |
| POST | /api/products |
| PUT | /api/products/{id} |
| DELETE | /api/products/{id} |
| Método | Endpoint |
|---|---|
| POST | /api/optimization/optimize |
O algoritmo implementado segue a abordagem gulosa:
- Produtos são ordenados por maior valor de venda
- Para cada produto, calcula-se o limite máximo de produção com base na matéria-prima disponível
- Produz-se o máximo possível
- Atualiza-se o estoque restante antes de avaliar o próximo item
Essa abordagem privilegia retorno financeiro imediato, mantendo a lógica simples, eficiente e previsível.
Console H2 disponível em: http://localhost:8080/h2-console
JDBC URL: jdbc:h2:mem:productiondb
Este projeto foi desenvolvido em aproximadamente 11h43m, no dia 24/02, com foco em:
- Estrutura organizada
- Clareza na regra de negócio
- Separação adequada entre backend e frontend
- Implementação funcional do algoritmo
Este projeto tem caráter educacional e demonstrativo, com foco na aplicação prática de conceitos de:
- Arquitetura em camadas
- API REST
- Integração frontend/backend
- Algoritmos de otimização
- Organização de código para avaliação técnica