Voltar

Sistema de Gestão da Loja de Ferragens El Mallín

Link do projeto:

Uma solução Full-Stack robusta de ponto de venda e estoque, projetada para modernizar um negócio familiar tradicional. Transforma registros manuais em um ecossistema digital de alto desempenho, com controle de estoque em tempo real, gestão inteligente de dívidas e integridade transacional atômica.

Tecnologias utilizadas

PHP 8.2Laravel 11React.jsInertia.jsPostgreSQLTailwind CSSSupabaseRailwayArquitetura de Sistemas
Painel e interface de estoque

🛠️ O Desafio

“El Mallín” é uma tradicional loja de ferragens familiar que já tinha superado suas raízes analógicas. Gerenciar mais de 20.000 itens diferentes em registros de papel criava gargalos críticos:

  • 📉 Divergência de estoque: diferenças entre o estoque real e os valores registrados.
  • 🐌 Caixa lento: a consulta manual de preços e o registro de dívidas atrasavam o atendimento.
  • 💸 Gestão da inflação: atualizar milhares de preços manualmente em uma economia volátil era impossível.

Projetei e desenvolvi uma Solução de Transformação Digital sob medida para centralizar as operações, garantir rigorosamente a integridade dos dados e oferecer inteligência de negócio em tempo real.

🚀 Principais Funcionalidades

📦 Motor Inteligente de Estoque e Preços

  • Busca de alto desempenho: Implementei indexação otimizada por SKU e por texto para consultar milhares de produtos em milissegundos.
  • Preços à prova de inflação: Criei uma Ferramenta de Atualização em Massa que usa transações de banco de dados para aplicar aumentos percentuais a categorias inteiras instantaneamente, um recurso essencial para se adaptar à economia.
  • Controle visual de estoque: Alertas automáticos na interface e no backend para itens com estoque baixo, evitando vendas perdidas.

💳 PDV Integrado e Livro de Dívidas

  • Transações atômicas: Vendas e registros de dívidas são envolvidos em transações de banco de dados (compatíveis com ACID). Uma única ação reduz o estoque, atualiza o saldo do cliente e registra a movimentação. Se qualquer parte falhar, toda a operação é revertida, garantindo 100% de consistência dos dados.
  • Armazenamento híbrido: Usei colunas JSON do PostgreSQL na tabela account_movements para guardar os detalhes não estruturados do carrinho (itens, quantidades), mantendo os dados financeiros principais estruturados para relatórios rápidos.
  • Limpeza inteligente do histórico: Desenvolvi um algoritmo que arquiva ou exclui automaticamente o histórico de transações quando o saldo do cliente chega a zero, otimizando o armazenamento e o desempenho das consultas ao longo do tempo.
  • Faturamento profissional: Integrei o dompdf para gerar na hora extratos de conta e recibos em PDF com a identidade visual da loja.

🔐 Segurança de Nível Empresarial e UX

  • Controle de acesso baseado em funções (RBAC): Permissões granulares que separam o perfil ‘Admin’ (dados financeiros sensíveis, permissão de exclusão) do perfil ‘Funcionário’ (vendas, consulta de estoque).
  • Experiência ‘de corredor’ mobile-first: Uma interface totalmente responsiva construída com Tailwind CSS, permitindo que a equipe consulte estoque e preços pelo celular enquanto atende os clientes na loja.

💻 Arquitetura Técnica: O “Monólito Moderno”

Escolhi uma arquitetura Laravel 11 + Inertia.js para combinar a simplicidade de um monólito com a interatividade de uma Single Page Application (SPA).

  • Gerenciamento de estado fluido: O Inertia.js funciona como a cola que me permite construir um frontend React completo, fortemente integrado ao backend em Laravel, eliminando a necessidade de uma camada de API complexa ou de stores de estado no cliente (como Redux).
  • Confiabilidade do banco de dados: Implantado no Supabase (PostgreSQL), aproveitando o connection pooling para lidar com eficiência com as requisições simultâneas do PDV.
  • Backend robusto: O uso intensivo do Service Container e dos Form Requests do Laravel para validação garante que nenhum dado inválido entre no sistema.
// Example: Atomic Consistency in Debt Registration
DB::transaction(function () use ($request, $client) {
    // 1. Log the financial movement
    AccountMovement::create([
        'client_id' => $client->id,
        'amount' => $request->total_amount,
        'type' => 'debt',
        'items' => json_encode($request->items)
    ]);

    // 2. Update Stock for every item in the cart
    foreach ($request->items as $item) {
        Product::find($item['id'])->decrement('stock', $item['quantity']);
    }

    // 3. Update Client Balance
    $client->increment('balance', $request->total_amount);
});

📊 Impacto no Negócio

  • ⚡ Redução de 60% no tempo de atendimento no caixa por cliente, melhorando significativamente o fluxo de atendimento.
  • 🎯 Zero divergência entre o estoque físico e os registros digitais desde o lançamento do sistema.
  • 📈 Visibilidade em tempo real da saúde financeira para os donos, algo inédito nos 20 anos de história do negócio.
  • 🚀 Adaptabilidade econômica com atualizações de preço em massa instantâneas, protegendo as margens de lucro contra a inflação.