Automação de Recibos e Categorias
Use Coda, Make.com e IA para automatizar a categorização de recibos.
Imagina você poder simplesmente tirar uma foto de um recibo, e todos os itens deste recibo serem inseridos no seu sistema no Coda, sendo categorizados de forma automática? Pois é exatamente isso que vamos fazer hoje.
Comece criando um DOC no Coda, e três páginas. Uma para ter o banco de dados do Recibo e outra para o de Categorias e outra para Itens. Eu costumo separar banco de dados em páginas diferentes para não confundir na hora de dar suporte - é uma boa prática.
Coda - Criando as tabelas
Tabela DB_Recibo
Na página “Recibos”, crie uma tabela com o nome "DB_Recibo” e insira as colunas:
Data - date and time
Foto Recibo - file
Processar - button
Processado - checkbox
Tabela DB_Item
Na página “Itens” crie uma tabela com o nome DB_Item, que irá conter as colunas:
ID - fórmulas: “RowId(thisRow)”
Item - text
Item - relation (com a outra tabela qua vamos criar ainda)
Quantidade - number
Valor unitário - currency R$
Total - currency - R$
Recibo - relation com a tabela DB_Recibo. Pode criar a relação entre elas. Isso vai criar uma coluna na tabela DB_Recibo chamada DB_Item.
Tabela DB_Categoria
Na página “Categorias”, crie uma tabela usando inteligência artificial, usando o seguinte prompt:
crie uma tabela em português com 15 categorias de itens de supermercado para categorizar compras, e uma coluna de descrição com itens de exemplo
Mude o nome da tabela para DB_Categoria. Quando você criar, pode ser que as categorias criadas sejam um pouco diferentes. Não tem problema, pode arrumar como quiser.
Make - Criando o webhook
Entre no Make.com, crie um cenário e inclua um módulo de Webhook:
Clique em “Add” para adicionar um Webhook, e mude o “Webhook name” para WH-recibos. Você pode dar o nome que quiser. Eu costumo padronizar os nomes para facilitar o suporte depois.
Clique em “Save” e copie a URL no webhook para usar.
Coda - Inserir pack do Make
Insira o pack “Make.com w/ Payload” que eu criei - Elber Domingos
Depois que você inseriu, vá na tabela DB_Recibo, clique com o botão direito na coluna “Processar”, vá em “On click”, selecione “Packs”, depois “Make.com w/ payload” e “Post”
Depois adicione na parte “Url”, o link do webhook que você pegou no passo anterior do Make.
Na parte do “Payload”, adicione a seguinte fórmula:
Explicação:
Object("urlRecibo", ...): A função Object() cria um objeto no Coda, que basicamente é uma estrutura de chave-valor - como JSON. No caso, a chave é "urlRecibo", e o valor será definido pelo código que vem a seguir.
thisRow.[Foto Recibo]: Acessa o conteúdo da coluna “Foto Recibo” da linha atual (thisRow). Esta coluna contém a imagem.
First(): Seleciona o primeiro item da lista de anexos (ou imagens) contidos na célula “Foto Recibo”. Se houver mais de um anexo, ele pega apenas o primeiro.
_Merge(): Combina as informações do arquivo. Esta função interna (_Merge()) é usada para consolidar os dados do arquivo em um formato que pode ser manipulado. Em geral, isso se refere a metadados ou à URL do arquivo.
ToText(): Converte os dados mesclados do anexo em uma string de texto.
ParseJSON("$.publicUrl"): A função ParseJSON() interpreta o texto como um objeto JSON. O argumento "$.publicUrl" é uma expressão JSONPath que extrai o valor associado à chave publicUrl, que contém o link público para o anexo (como uma URL acessível externamente).
Copie o código abaixo para usar:
Object("urlRecibo", thisRow.[Foto Recibo].First()._Merge().ToText().ParseJSON("$.publicUrl"))
Automação no Make
Volte para o Make.com e clique em “Run once”. Quando você faz isso, pode enviar uma requisição API de teste.
Depois que clicou, volte para a tabela “Recibos”, e tenha certeza que inseriu uma imagem na coluna “Foto Recibo”. Depois clique no botão “Processar”.
Você deverá ver o resultado no Make.com, com o link da imagem.
Garantir JPG
O GPT 4o não aceita muitos formatos de imagens, e as vezes celulares tiram fotos em formatos diferentes, como HEIC. Portanto, precisamos rodar um módulo no Make.com para garantir que as imagens sejam sempre em JPG. Para isso, vamos usar o módulo “Convert a File” do “CloudConvert” - veja a imagem:
Crie uma conta gratuitamente no CloudConvert se ainda não tiver, e depois volte e adicione uma conexão para trabalhar com este módulo. Preencha as informações como na imagem abaixo:
Depois que você finalizou, rode clique em “Run once” novamente, e clique no botão da tabela do recibos para enviar novamente. Ele pode demorar um pouco a depender do tamanho do arquivo, mas quando finalizar, ele vai te revolver um link temporário para fazer o download do arquivo JPG. Este link nós usaremos no próximo passo.
Agora você vai precisar pegar uma API Key da OpenAI para rodar o próximo módulo. Ente em platform.openai.com e siga as instruções da imagem abaixo:
Siga as instruções e copie a API Key que você criar.
Depois insira o módulo de “Analyze Images (Vision)” da OpenAI:
Adicione uma conexão usando a API Key que você criou acima, e preencha os campos como mostrado abaixo:
O prompt você deve adaptar para sua realidade do seu recibo. No meu caso, eu testei algumas alternativas, até chegar num resultado um pouco mais satisfatório. O recibo deve estar em boas condições para que ele consiga ler corretamente (um pouco diferente do meu…rs).
No nosso caso, eu estou extraindo algumas informações, e preciso que ele me retorne em formato JSON para não falhar nos próximos passos. Veja como ficou o prompt:
A imagem é um recibo de supermercado. Extraia os dados com precisão e retorne apenas em JSON puro no seguinte formato:
{
"Item": "item",
"Quantidade": "quantidade",
"Valor Unitário": "valor unitário",
"Total": "total"
}
1. Certifique-se de que o Item seja sempre um texto descritivo.
2. Quantidade deve ser sempre um número inteiro.
3. Valor Unitário e Total devem ser números decimais com ponto (.) separando as casas decimais.
4. O Total é o último número na linha, à direita. Tenha certeza de checar na extrema direita por linha que é o total.
5. Não inclua texto adicional, formatação, ou caracteres especiais. Retorne somente o JSON puro, sem markdown.
Depois, como fizemos anteriormente, clique em Run Once, depois copie o JSON do resultado que virá dentro de “Content”. Copie logo após e antes dos colchetes [] - se você copiar os colchetes, vai dar problema para reconhecer o JSON.
Depois, adicione o módulo “Parse JSON”, clique em “Add” em Data Structure, clique em Generate, e cole o JSON que você copiou no passo anterior. Isso vai fazer com que ele gere uma estrutura de JSON com Item, Quantidade, Valor Unitário e Total - exatamente o que a gente precisa. Você pode fazer isso manualmente também, mas como te passei fica mais simples. Adicione o “Content” do módulo anterior do GPT no “JSON string”. Veja a imagem:
Adicione um módulo “Sleep” e coloque 2 segundos. Isso é importante porque o Coda tem limite de chamadas de API. A gente poderia enviar tudo de uma vez, mas nesta demonstração quero fazer assim. Fica o desafio para você enviar tudo de uma vez no Coda.
Por fim, adicione o módulo “Create a Row” no Coda, preenchendo os campos com as informações do módulo JSON Parse.
Lembre-se: se você não estiver vendo o resultado de algum módulo para usá-lo no seguinte, precisa rodar o cenário antes, para depois continuar. Assim o Make.com vai saber quais informações
Parte final
Depois que você criou todos os módulos, rode uma última vez e você verá as linhas sendo criadas no Coda.
O que fazer se não estiver lendo as informações do recibo corretamente? A inteligência artificial está muito boa, mas não é perfeita. Para melhorarmos os resultados, você pode tentar:
Trocar o modelo do gpt-4o-mini para o gpt-4o. É um pouco mais caro, mas pode trazer resultados melhores
Melhorar o prompt. Existem diversas técnicas de prompts hoje em dia. Testar é a palavra correta. Use exemplos. Talvez valha a pena você testar primeiro no chatGPT o prompt, e depois usar o que estiver funcionando.
Fine Tuning - este é bem mais avançado. Se você realmente quer um modelo bem mais avançado, fazer o fine tuning pode melhorar significativamente os resultados, mas é bem mais complexo e caro, mas pode valer muito a pena.
Assista o vídeo do meu canal do YouTube com a explicação:
ABSOLUTAMENTE SENSACIONAL! Parabéns!