Voltar para todos os projetos
Capa do projeto Sistema de Controle de Estoque Industrial

Sistema de Controle de Estoque Industrial

JavaQuarkusReact
Ver no GitHub

Este sistema Full-Stack foi desenvolvido para revolucionar o Planejamento e Controle de Produção (PCP) no chão de fábrica. A solução vai muito além de um simples CRUD: ela gerencia ativamente os estoques de matéria-prima, organiza a engenharia de produtos (Fichas Técnicas/Receitas) e fornece inteligência de negócios para maximizar a rentabilidade industrial.

A Escolha do Quarkus (Java 17) no Backend

Para o back-end, a escolha do Quarkus aliado ao Hibernate Panache permitiu criar uma API REST extremamente rápida, com inicialização quase instantânea e baixo consumo de memória. Toda a persistência de dados foi modelada em um banco relacional PostgreSQL e a infraestrutura conteinerizada via Docker.

Dashboard do Sistema Industrial

Visualização dos Endpoints da API.

Front-end Reativo e UX Avançada

A interface de operador foi construída utilizando React.js (Vite) e TypeScript para garantir segurança e escalabilidade na tipagem dos dados. O visual moderno e Full-Screen baseia-se no Material UI (MUI v5), contando com painéis inteligentes e dashboards de BI que calculam o lucro potencial da fábrica em tempo real.

Dashboard do Sistema Industrial

Interface da aplicação renderizando o Dashboard de BI e Planejamento.

Inteligência Algorítmica: Otimização de Produção

O grande diferencial técnico deste software é o seu Simulador de Produção. Implementei um Algoritmo Guloso que cruza a disponibilidade de insumos com o valor agregado dos produtos finais. Ele analisa os gargalos e sugere automaticamente o plano de produção ideal para extrair o maior lucro possível com o estoque atual, gerando relatórios precisos de "Uso vs. Sobra".

Endpoints RESTful e Clean Code

A arquitetura do código obedece a uma separação clara de responsabilidades (Model, DTO, Resource, Service). Abaixo, um exemplo bem estruturado proporcionado pelo padrão Active Record do Panache na manipulação de entidades diretamente nos controllers JAX-RS:

ProductResource.java
import jakarta.ws.rs.*;import jakarta.ws.rs.core.Response;import jakarta.validation.Valid;import org.jboss.logging.Logger; @Path("/api/estoque")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)public class ProdutoResource {     private static final Logger LOG = Logger.getLogger(ProdutoResource.class);     @GET    @Path("/critico")    public List<Produto> listarEstoqueCritico() {        LOG.info("Monitoramento: Buscando produtos abaixo da margem de segurança");        // Query declarativa simplificada via Hibernate Panache        return Produto.find("quantidadeAtual <= quantidadeMinima").list();    }     @POST    @Transactional    public Response adicionarProduto(@Valid Produto produto) {        if (Produto.count("sku", produto.sku) > 0) {            LOG.warnv("Tentativa de duplicidade. SKU: {0}", produto.sku);            return Response.status(Response.Status.CONFLICT)                           .entity("SKU já cadastrado no sistema.").build();        }                produto.persist();        LOG.infov("Novo produto integrado ao estoque. ID: {0}", produto.id);        return Response.status(Response.Status.CREATED).entity(produto).build();    }}

Destaques da Implementação

  • Observabilidade (Logs)Em chãos de fábrica, a rastreabilidade é inegociável. A injeção do `Logger` (JBoss) garante auditoria em tempo real sobre quem consulta dados críticos ou tenta inserir duplicidades.
  • Regras de Negócio ExpressivasO uso do método `.find("quantidadeAtual <= quantidadeMinima")` do Panache elimina a necessidade de consultas SQL complexas, focando a leitura diretamente na regra de negócio do estoque.
  • Integridade de Dados (@Valid)A anotação na assinatura do método garante que o payload JSON seja validado (ex: campos nulos, limites de caracteres) antes mesmo de a requisição atingir a lógica do banco de dados.
  • Controle de Concorrência (Conflict)O sistema protege a base contra inconsistências industriais (como o cadastro duplo de um mesmo código SKU), retornando o status HTTP 409 (Conflict) adequadamente.
  • Transações Seguras (@Transactional)Garante o princípio ACID. Caso haja qualquer falha de rede ou validação no meio do processo de salvamento, toda a operação sofre rollback automático, evitando dados pela metade.