Ao longo da minha trajetória profissional, atuando na intersecção entre a contabilidade, o direito e a tecnologia, tenho observado um desafio constante nas empresas: o abismo que muitas vezes existe entre o chão de fábrica e as demonstrações financeiras.
Sabemos que uma cadeia de suprimentos é um sistema por meio do qual empresas e organizações interligadas entregam produtos e serviços a seus consumidores. Para que haja verdadeira eficiência, precisamos olhar para todos os estágios envolvidos, direta ou indiretamente, em suprir a necessidade de um cliente. No coração dessa engrenagem, garantindo que o produto certo esteja disponível no momento certo, está a Gestão de Estoques.
O Desafio da Acurácia: Muito Mais que Apenas "Contar Caixas"
Do ponto de vista contábil e financeiro, o estoque costuma ser uma das contas mais representativas do ativo circulante. A precisão do inventário físico não é um mero capricho logístico; ela é determinante para a correta apuração do Custo das Mercadorias Vendidas (CMV), o que afeta diretamente a margem de lucro e o planejamento tributário de um negócio.
Para ilustrar a importância dessa exatidão, gosto de usar uma analogia com medições volumétricas industriais, onde pequenos detalhes mudam tudo. É como calcular com exatidão volumes fracionados em um tanque: interpretar que a capacidade de 1/1 representa o volume total (como 60 litros), ¾ equivale a 45 litros, ½ a 30 litros e ¼ a 15 litros. Se a régua de medição estiver incorreta, o saldo reportado será irreal. Da mesma forma, no estoque, se a ferramenta de contagem for falha, o balanço patrimonial será apenas uma ficção.
A Concepção do Tracker: Uma Ferramenta Nascida da Necessidade
Foi observando a dificuldade de equipes operacionais em realizar inventários rápidos e seguros que decidi colocar a mão na massa. Assim nasceu o projeto Tracker, uma solução que desenvolvi com o propósito de conectar, de forma simples e acessível, o auditor no corredor do estoque ao gestor financeiro em sua mesa.
Recentemente, dediquei-me a modernizar a arquitetura do Tracker. Para evitar as dores de cabeça com instalações de aplicativos móveis corporativos, dividi o sistema em duas frentes:
- Um aplicativo Desktop robusto, focado no Gestor de Inventário para análise de dados e cadastro de equipes.
- Um aplicativo PWA (Progressive Web App) para o Auditor de Campo, que roda direto no navegador do celular, mas se comporta como um app nativo, permitindo até a leitura de códigos de barras pela câmera do dispositivo.
Exemplo da interface de login do Tracker Desktop, agora integrada à nova camada de autenticação segura MFA.
Por Dentro da Engenharia: As Tecnologias que Sustentam o Tracker
Como profissional da área, sei que a segurança da informação é inegociável, especialmente com a LGPD. Não basta a ferramenta funcionar; ela precisa proteger os dados do cliente. Para isso, utilizei um conjunto de tecnologias maduras (stack) focadas em performance e segurança.
1. Nuvem e Segurança: PostgreSQL e Supabase (RLS)
Para a nuvem, escolhi o Supabase (baseado em PostgreSQL). O passo mais importante dessa arquitetura foi
remover o armazenamento de senhas do banco de dados comum e transferi-las para um "Cofre" criptografado
nativo (auth.users). Além disso, implementei o conceito de Row Level Security
(RLS), garantindo que um usuário só acesse o dado se tiver a chave certa.
-- 1. Exclusão da coluna de senhas (boas práticas de compliance) ALTER TABLE cliente_dht_tintas.usuarios DROP COLUMN IF EXISTS "Senha"; -- 2. Criação de um vínculo com o cofre de autenticação ALTER TABLE cliente_dht_tintas.usuarios ADD COLUMN IF NOT EXISTS id_auth UUID REFERENCES auth.users(id) ON DELETE CASCADE; -- 3. Definição da Política de Segurança (RLS) CREATE POLICY "Ler itens de contagem" ON cliente_dht_tintas.itens_contagem AS PERMISSIVE FOR SELECT TO authenticated -- Apenas portas abertas para quem tem Token JWT válido USING (true);
Painel de configuração onde defino as políticas de Row Level Security (RLS) para blindar as tabelas.
2. O Motor de Gestão: Python no Desktop
Para o sistema do gestor, o Python foi a escolha natural devido à sua excelência na
manipulação de dados (usando a biblioteca pandas). O aplicativo Desktop conecta-se ao banco
ERP local, consolida as divergências e sincroniza tudo com a nuvem de forma segura via API REST.
import requests import pandas as pd from sqlalchemy import text def validar_login_nuvem(email, senha, motor_db, esquema): """ Valida as credenciais no cofre do Supabase e retorna os dados do usuário """ # 1. Requisição POST segura para o módulo Auth (Validação) auth_url = f"{SUPABASE_URL}/auth/v1/token?grant_type=password" headers = {"apikey": SUPABASE_ANON_KEY, "Content-Type": "application/json"} payload = {"email": email, "password": senha} resp = requests.post(auth_url, headers=headers, json=payload) if not resp.ok: return False, "Credenciais inválidas." # 2. Se a porta abrir, busca o perfil complementar no banco de dados query = text(f'SELECT "Nome_Completo", "Perfil" FROM {esquema}.usuarios WHERE "Login" = :email') with motor_db.connect() as conexao: df_user = pd.read_sql(query, con=conexao, params={"email": email}) if not df_user.empty: return True, df_user.iloc[0].to_dict() return False, "Usuário não localizado."
3. Mobilidade e Agilidade: PWA e JavaScript Modular
A mágica no chão de fábrica acontece através do PWA. Utilizando HTML, CSS e JavaScript puro (Vanilla JS), o Auditor acessa o sistema pelo navegador do celular. Integrei o SDK oficial do Supabase para o front-end, garantindo que o token de sessão gerencie as permissões automaticamente, mitigando riscos de injeção de código malicioso (XSS).
// Instância do cliente Supabase no Front-end const db = supabase.createClient(SUPABASE_URL, SUPABASE_KEY); async function fazerLoginMobile(email, senha, cliente) { try { // 1. O SDK faz a ponte segura com o cofre de senhas const { data: authData, error: authError } = await db.auth.signInWithPassword({ email: email, password: senha, }); if (authError) throw new Error('Acesso negado'); // 2. Coleta os dados de filial do usuário autenticado const { data: userData, error: userError } = await db.schema(cliente) .from('usuarios') .select('Nome_Completo, Filial_Acesso') .eq('Login', email); if (userData && userData.length > 0) { iniciarDashboard(userData[0]); // Libera a tela de contagem de lotes } } catch (error) { console.error("Tentativa de acesso falhou:", error.message); } }
Reflexões e Próximos Passos
Desenvolver o Tracker tem sido uma jornada de aprendizado contínuo. Entender que a tecnologia é um meio — e não o fim — nos ajuda a criar soluções que de fato facilitem a vida das pessoas que estão operando o negócio no dia a dia. Com a redução dos erros manuais e o abandono de pranchetas e papéis, o departamento financeiro recebe informações nas quais pode confiar.
Fico muito feliz em poder compartilhar um pouco dessa arquitetura com vocês. Para os gestores, contadores ou desenvolvedores que desejam ver a solução funcionando na prática e dar um passo além na gestão de suas cadeias de suprimentos, convido-os a testar a versão Desktop do sistema: