[Conta Azul] Como tratar o relatório Extrato de Movimentações

As atualizações da Conta Azul vieram para ajudar no controle financeiro da empresa, pode ter certeza disso, mas também pode gerar uma dor de cabeça para você que precisa analisar os dados no EXCEL ou POWER BI.

Deixa-me explicar o motivo dessa dor de cabeça. 🤔

Agora é possível detalhar os lançamentos do Contas a Pagar e Contas a Receber por CATEGORIAS e CENTRO DE CUSTOS.
Para quem gosta dos controles minuciosos isso é fantástico, conforme imagem abaixo:

Este lançamento foi dividido em duas categorias:

  1.  Bens de Pequeno Valor;
  2.  Seguro de Bens de Pequeno Valor;
 

E cada categoria foi dividida em dois centros de custos:

  1.  Bens de Pequeno Valor;
  2.  Seguro de Bens de Pequeno Valor;
 
 
Quando fiz o DOWNLOAD do arquivo EXCEL do Extrato de Movimentos da Conta Azul eu me assustei com a quantidade de colunas que foi criada por causa dos centros de custos e categorias:

A Conta Azul disponibiliza o arquivo com uma coluna para cada categoria mais uma coluna para cada centro de custo que pertence a categoria informada.
Só como exemplo neste lançamento, de 2 (duas) categorias e 2 (dois) centros de custos para cada categoria foram criadas 12 colunas no arquivo, pensa quantas serão criadas se o lançamento na Conta Azul ter mais que duas categorias e vários centros de custos nas categorias.

É preciso um tratamento no Power Query, por exemplo, que contemple o maior número de detalhamentos possíveis e imagináveis. Além disso precisa torcer para que as etapas do Power Query não demorem para realizar a atualização.

Para título de testes, o acesso que tenho na Conta Azul é para testes e tenho poucos lançamentos no ano de 2022 e ele demorou mais de 10 (dez) minutos para atualizar gerando um total de 201 (duzentas e uma) linhas e o arquivo original possuía 183 (cento e oitenta e três) linhas.

O incremento de linhas foi pequeno porque tenho somente um lançamento recorrente com esse detalhamento de categorias e centros de custos.

Se você chegou até aqui já deve ter imaginado o quanto de tempo levará para processar todos os teus lançamentos na Conta Azul, estou certo?

Já que demorou mais de 10 minutos para realizar as atualizações de 2022 via arquivo de EXCEL, resolvi testar a API do Extrato de Movimento que o curso CHORA API (link para o curso) ensina a coletar e como já imaginava a coleta de dados levou menos de 2 minutos e ainda os dados já vem organizados de forma colunar eliminando várias etapas aplicadas na consulta do Power Query.

Na imagem abaixo está o exemplo do lançamento na IMAGEM 1 deste post:

A coluna “value.2” são os valores detalhados por centro de custos e você pode observar a coluna “value.1” que é o valor total do lançamento na Categoria e o “value.2” está dividido pelos centros de custos.
Todas as etapas aplicadas para padronizar os dados da forma que o Power BI é mais performático estão disponíveis para os alunos no módulo BÔNUS do curso CHORA API (link para o curso).
Somente quem é aluno terá acesso ao que produzi e mais os vídeos que produzirei para explicar o passo a passo do que fiz.
Além do módulo Conta Azul o curso possui outras consultas de API como por exemplo:
  • Hotmart;
  • OMIE;
  • Bling;
  • Facebook Ads;
  • Trello;
  • Previsão do Tempo.
 
Em janeiro/2023 já tem programação para novos exemplos de consultas de API que serão disponibilizados aos alunos.
Além das mentorias mensais que iniciarão neste mesmo mês e um conteúdo programático para os alunos se beneficiarem das descobertas que vou realizando nas consultas de API.

E por você ter chegou até aqui, você terá acesso ao script do Editor Avançado, precisa copiar o código e colar na consulta e alterar a fonte de dados, que neste exemplo seria uma consulta do Power Query com o nome “Fonte_Dados”.

let
  Fonte = Fonte_Dados, //Planilhas com os extratos de movimentações
  Transforma = Table.UnpivotOtherColumns( //Transforma as colunas com categorias e centro de custos em linhas
    Fonte, 
    {
      "Observações", 
      "Data prevista", 
      "Data original de vencimento", 
      "Data de competência", 
      "Taxas (R$)", 
      "Desconto (R$)", 
      "Multa (R$)", 
      "Juros (R$)", 
      "Valor original (R$)", 
      "Situação", 
      "Saldo conta (R$)", 
      "Valor (R$)", 
      "Forma de pgto/recbto", 
      "Conta bancária", 
      "Tipo da operação", 
      "Agendado", 
      "Descrição", 
      "Recorrência", 
      "Nome do fornecedor/cliente", 
      "Identificador do fornecedor/cliente", 
      "Data movimento"
    }, 
    "Atributo", 
    "Valor"
  ), 
  Indice_1 = Table.AddIndexColumn(Transforma, "indice", 0, 1, Int64.Type), // Adiciona uma coluna de ÍNDICE para realizar o tratamento das categorias e centros de custos
  Trata_Valor = Table.AddColumn( //Adiciona uma coluna para realizar o tratamento dos valores e textos => Importante para validação das colunas
    Indice_1, 
    "transforma_valor", 
    each try Number.FromText([Valor]) otherwise [Valor]
  ), 
  Verifica_Valor = Table.AddColumn(Trata_Valor, "é_numero", each [transforma_valor] is number),  //Verifica se a coluna criada anteriormente é número ou texto => Importante para entender como faremos a classificação das categorias e centros de custos
  Categoria = Table.AddColumn( //Adiciona uma coluna com a informação da categoria ao lado do valor do lançamento
    Verifica_Valor, 
    "Categoria", 
    each 
        // Se o valor da coluna [Atributo] inicia com "Valor na Categoria " pegará os dados da linha anterior da coluna [Valor]
      if [é_numero] and Text.Start([Atributo], 19) = "Valor na Categoria " then
        Verifica_Valor[Valor]{[indice] - 1} 
      else
        null
  ), 
  Centro_de_custo = Table.AddColumn(
    Categoria, 
    "Centro de Custo", 
    each 
        // Se o valor da coluna [Atributo] inicia com "Valor no Centro de Custo " pegará os dados da linha anterior da coluna [Valor]
      if [é_numero] and Text.Start([Atributo], 25) = "Valor no Centro de Custo " then
        Verifica_Valor[Valor]{[indice] - 1}
      else
        null
  ), 
  FiltraNumeros = Table.SelectRows(Centro_de_custo, each ([é_numero] = true)), // Filtra a coluna [é_numero] se for verdadeiro para eliminar as linhas sem valores lançados 
  Indice_2 = Table.AddIndexColumn(FiltraNumeros, "indice_filtro", 0, 1, Int64.Type), // Adiciona novo índice para realizar mais um filtro por causa do detalhamento das Categorias e dos Centros de Custos
  Filtro_Detalhes = Table.AddColumn(
    Indice_2, // Adiciona nova coluna para fazer novo filtro e remover os valores "cheios" sem o rateio das categorias e centros de custos
    "Filtro", 
    each try
      (
        Indice_2[Categoria]{[indice_filtro] + 1}
          is null and Indice_2[Centro de Custo]{[indice_filtro] + 1}
          <> null
      )
        and ([Categoria] <> null and [Centro de Custo] is null)
    otherwise
      false
  ), 
  Preenche_Null = Table.FillDown(Filtro_Detalhes, {"Categoria"}), // Preenche para baixa a coluna categoria para trazer
  Filtra_Linhas = Table.SelectRows(Preenche_Null, each ([Filtro] = false)), // Filtra todas as linhas com valores "cheios"
  Remove_Colunas = Table.SelectColumns( // Seleciona colunas que serão necessárias para análise
    Filtra_Linhas,  
    { // Você pode remover aqui as colunas que não trabalhará
      "Data movimento", 
      "Identificador do fornecedor/cliente", 
      "Nome do fornecedor/cliente", 
      "Recorrência", 
      "Descrição", 
      "Agendado", 
      "Tipo da operação", 
      "Conta bancária", 
      "Forma de pgto/recbto", 
      "Valor (R$)", 
      "Saldo conta (R$)", 
      "Situação", 
      "Valor original (R$)", 
      "Juros (R$)", 
      "Multa (R$)", 
      "Desconto (R$)", 
      "Taxas (R$)", 
      "Data de competência", 
      "Data original de vencimento", 
      "Data prevista", 
      "Observações", 
      "Valor", 
      "Categoria", 
      "Centro de Custo"
    }
  ), 
  Null_Preenchido = Table.ReplaceValue( // Altera os valores nulos do centros de custo para "Não informado"
    Remove_Colunas, 
    null, 
    "Não informado", 
    Replacer.ReplaceValue, 
    {"Centro de Custo"}
  ), 
  Tipo_Alterado = Table.TransformColumnTypes( // Altera o tipo dos dados
    Null_Preenchido, 
    {{"Valor", type number}, {"Categoria", type text}, {"Centro de Custo", type text}}
  )
in
  Tipo_Alterado
Gostou?

Você pode se cadastrar para receber as novidades do BLOG:

Cadastre-se para receber atualizações por email

Para você receber as novidades do meu blog sempre que eu postar novo artigo.