Como calcular o custo (e outras coisas) de um jeito escalável e mensurável
Utilizando conceitos simples de dados e desenvolvimento para entender custos no detalhe.
Geralmente, quando pensamos em automatizações pensamos em melhorar fluxos operacionais, ou seja, como conseguimos cortar etapas manuais para otimizar o tempo do time.
No entanto, automatizações podem ser mais do que isso. Elas podem ser utilizadas para tratar informações e fornecer insights valiosos para diversas partes do seu negócio, ajudando, por exemplo, a definir a precificação dos produtos ou serviços core da sua empresa. Vamos exemplificar isso com uma estrutura de custos.
O problema de custos
Imagine que você vende um produto. Obviamente, uma das suas primeiras preocupações é qual o custo efetivo que você tem com o produto final.
Geralmente, acabamos fazendo esse controle inicial num planilha, o que funciona bem em um primeiro momento. Afinal, a flexibilidade que uma planilha tem para receber diversos inputs de custos diferentes e facilidade para consolidar essas informações em uma única linha facilitam muito o desenvolvimento desse tipo de controle.
No entanto, isso gera um problema grande de ter informações importantes em um local isolado, que não conversa bem com outras informações. Conforme a empresa cresce, processos importantes saem da planilha para serem incorporados em sistemas, mas nenhum sistema parece possuir a estrutura para realizar o controle de custos que a planilha realizava. Além disso, a planilha comum é facilmente corruptível e, quanto mais pessoas utilizam, mais caótica ela tende a se tornar.
E aí a empresa se depara com um dilema: manter isso como um controle isolado de outras informações, ou adotar um controle mais genérico que não possui insights tão relevantes quanto aquela planilha do começo do negócio, quando você ainda controlava as informações na unha?
A ideia aqui é mostrar como podemos criar uma estrutura tão flexível quanto aquele controle mas ainda mais robusto e personalizável. E, dessa vez, não utilizaremos nenhum módulo pré-pronto do Jestor. Faremos tudo do zero e de forma extremamente rápida ;)
Todo produto é uma receita
A forma que montaremos a solução é bem simples: será, basicamente, uma receita. Assim como uma receita culinária, um produto muitas vezes é composto de duas variáveis: processos e matéria-prima.
A ideia aqui, então, é montar uma estrutura que quantifique o consumo de matéria-prima e precifique o esforço de processos envolvidos para a confecção do produto. Faremos isso com algumas etapas:
- Criar um cadastro de Produto Final com seu custo total;
- Criar um cadastro de Matéria-Prima, com quantidade disponível e preço unitário;
- Criar um cadastro de Processos, com custo por unidade relevante;
- Criar um cadastro que atrele uma quantidade de Matéria-Prima consumida por um Produto Final;
- Criar um cadastro que atrela Processos realizados para confeccionar um Produto-Final.
Parecem muitos passos, certo? Mas não são. Na realidade, a construção dessa estrutura pode ser realizada em apenas alguns minutos, bastando apertar o botão +, nomear o cadastro e depois criar os campos necessários.
De fato, eu cronometrei a criação de todas as etapas e o tempo total foi de apenas 3 minutos e 42 segundos. Nada mal para um setup do zero!

Começando a desenvolver!
Bem, como você conseguiu captar da lógica do passo anterior, o processo de inserção de dados funciona da seguinte forma:
- Usuário cadastra um Produto Final;
- Em MP Utilizado, o usuário lança todos os “ingredientes” do produto;
- Em Processos realizados, o usuário lança todos os processos pertinentes ao produto.
Dessas etapas, conseguimos inferir que existem dois tipos de automatização:
- Quando um registro em MP Utilizado é criado, atualizado ou excluído, deve-se calcular o custo parcial referente a este registro e alterar o custo total do Produto Final;
- Similarmente, quando um registro em Processos realizados é criado, atualizado ou excluído, deve-se calcular o custo parcial referente a este registro e alterar o custo total do Produto Final.
Vamos começar, então, pelo ponto número (1). Podemos fazer isso acessando a área de desenvolvimento do Jestor no menu principal na lateral esquerda:

Depois, acessamos o objeto MP Utilizada, seguimos para o fim da página e criamos um trigger.
A lógica aqui é bem simples:
- Sempre que um registro for criado, procurar o custo unitário no módulo Matéria Prima e calcular o custo multiplicando este valor pela quantidade;
- Quando um registro for editado, procurar o custo unitário no módulo Matéria Prima e calcular o custo multiplicando este valor pela quantidade:
- É importante que possam haver variações tanto positivas quanto negativas de custo (caso o usuário aumente ou diminua a quantidade de itens);
- Caso o usuário mude o Produto Final atrelado, lembrar de abater o custo do produto antigo.
- Sempre que um registro for excluído, abater o custo total.
A primeira automatização então é a de criação, e para isso adicionamos nossa primeira trigger, que chamaremos de CriarMP e será ativada Antes de o registro ser criado. Utilizando os conhecimentos dos métodos nativos do Jestor (que você pode verificar de forma rápida na documentação ou na nossa introdução de PHP), sabemos que o código será algo como:

O que esse código está fazendo? Procurando as informações tanto da Matéria Prima selecionada quanto do Produto Final atrelados, calculando o custo parcial desse lançamento e somando ao valor que já existia de custo total do Produto Final.
Vamos verificar se de fato a automatização funciona, criando primeiramente um produto:

Depois, criamos algum tipo de matéria prima que possamos atrelar a esse produto:

Ao final, basta criar um registro em MP Utilizada para atrelar uma quantidade dessa matéria prima a um produto!

Aqui vemos que pelo menos uma parte da automatização já funcionou. Como o Hardware Alfa consome apenas uma Placa PCB, o custo parcial é de R$1,50. Vamos voltar para o cadastro de Produto Final e ver se o custo total do produto reflete esse lançamento:

Sucesso! O custo total foi atualizado. E se quisermos ver o que compõe esse custo total, basta clicar no produto:

A segunda automatização a ser criada é a de edição, que chamaremos de EditarMP e será ativada Antes de o registro ser atualizado. O código aqui é um pouquinho mais complexo, mas mais uma questão de lógica do que técnica. A princípio, o código permanece o mesmo:

Logo em seguida, verificamos se o produto atrelado manteve-se o mesmo. Caso tenha sido alterado, fazemos o processo de:
- Abater o custo parcial antigo do produto antigo (utilizando as informações que estavam em $objectOld, ou seja, estavam salvas no registro antes da edição do usuário);
- Somar o custo novo ao produto novo.
Essa parte intermediária do código terá o seguinte formato:

A parte final seria apenas replicar o código de criação na condição else, ou seja, quando o produto do $objectNew e $objectOld forem o mesmo. No entanto, aqui precisamos não apenas incrementar o custo total, mas somar a diferença do custo parcial anterior com o novo (para que, se o custo parcial anterior fosse de R$4,50 e o novo de R$1,50, o custo total seja diminuído em R$3,00).

Agora vamos testar atribuindo aquele registro de MP Utilizada para outro produto e alterar a quantidade utilizada para três. O resultado final é esse:

Perfeito! Conferindo outros casos (como apenas alterar o quantidade), vemos aqui que a automatização funciona conforme esperado. Agora vamos para a atualização mais simples: a exclusão.
Para isso criaremos uma trigger chamada DeletarMP que será ativada Antes de o registro ser deletado. O código é bem mais simples, apenas abatendo o custo parcial do custo total do produto antes da exclusão.

E, ao excluir o lançamento existente, podemos ver que funciona como planejado:

Últimos toques ?
Para a parte dos processos, criaremos as exatas três mesmas automatizações, apenas tomando cuidado para modificar os nomes corretos das variáveis e módulos. Nada que um bom copiar e colar e alguns minutinhos não resolvam.
Para não alongar muito o texto, já vou mostrar o resultado final abaixo :D
Solução personalizada e eficiente
Depois de lançar alguns produtos e montar a “receitinha” de cada um, o resultado final é algo que me agrada bastante. Fica bem fácil de ver o custo total de cada produto:

O custo da receita em si já fica evidente quando abrimos o lançamento. Na imagem abaixo, abri o Hardware Delta para que vocês possam ver como as informações ficam organizadas:

Iterar e melhorar
Existem, claro, coisas que podem ser melhoradas nessa solução:
- Posso criar uma trava para que o custo inicial de um produto seja sempre R$0,00;
- Posso criar um módulo de compras para alimentar o registro Matéria Prima (inclusive calculando o custo médio da peça, caso haja variação de preço de uma compra para outra);
- Posso criar um módulo de manufatura que consuma automaticamente a matéria-prima (inclusive travando a operação caso não haja a quantidade necessária de peças) e alimente um estoque de produtos finalizados.
Lembrando que toda essa solução foi criada em menos de uma hora. Na realidade, demorei mais para escrever e estruturar este texto do que utilizando a ferramenta (o que é ótimo!). Às vezes, gasto menos tempo desenvolvendo e mais pensando nas opções para resolver um problema.
E as opções são, claro, infinitas. A ideia do Jestor é essa: que você seja o próprio criador da sua solução e que ela seja o mais próximo da ferramenta ideal para a sua empresa. E iterar, iterar, iterar conforme sua empresa cresce. Se muitas vezes desenvolvemos um MVP a ser melhorado continuamente, porque não aplicar a mesma lógica aos nossos processos?
Afinal, sua empresa não vai ser igual daqui três meses, seis meses ou um ano. Escolha uma ferramenta que acompanhe seu crescimento.