DSDiego Salles
← Todos os projetos
Case secundárioEntregueEntregue

Verificar Licitação

Consulta e análise de licitações públicas com IA

API local e interface web para buscar, filtrar e analisar licitações a partir de arquivos CSV, com enriquecimento via modelo Gemini.

Node.jsExpressJavaScriptHTMLCSScsv-parsericonv-lite@google/genaidotenvcors
01

Visão geral

O Verificar Licitação é uma aplicação full stack que permite consultar dados de licitações públicas armazenados localmente. O sistema carrega um arquivo JSON mestre, gerado a partir de CSVs do governo, e expõe endpoints para busca por órgão e objeto, além de uma análise agregada com métricas de sucesso e valores. A interface web consome a API e oferece filtros dinâmicos, tabela de resultados e gráficos. A análise é enriquecida por um modelo de linguagem (Gemini) que gera insights sobre os dados filtrados, como padrões e destaques. A construção prioriza simplicidade e execução local: um servidor Express serve os dados e a lógica de análise, enquanto o front-end estático (HTML, CSS e JavaScript) é servido separadamente ou aberto diretamente no navegador.

A dor

Consultar e analisar licitações públicas dispersas em arquivos CSV é trabalhoso e pouco produtivo. Profissionais precisam cruzar informações manualmente, sem uma visão agregada de sucesso, valores e distribuição geográfica.

A solução

Uma API local que carrega os dados em memória, aplica filtros normalizados e calcula métricas relevantes. Uma interface web consome esses endpoints e apresenta os resultados de forma visual, com suporte de IA para análises textuais.

02

Abordagem de engenharia

01

Ingestão e normalização de dados

Conversão de arquivos CSV (codificação latin1, separador ponto e vírgula) para JSON estruturado, com normalização de strings para busca insensível a acentos e maiúsculas.

02

API de consulta e análise

Endpoints REST para busca filtrada por órgão e objeto, e para análise agregada com cálculo de taxa de sucesso, valor total e distribuição por município.

03

Integração com IA

Uso do SDK do Google Gen AI para gerar análises textuais sobre os dados filtrados, complementando as métricas numéricas.

04

Interface web interativa

Front-end em HTML, CSS e JavaScript que consome a API, exibe tabelas e gráficos, e permite filtros adicionais no lado do cliente.

03

O que o projeto entrega

  • Busca normalizada que ignora acentos e diferenças de caixa
  • Cálculo de métricas de sucesso baseado em múltiplos status
  • Integração com modelo Gemini para análises textuais
  • Interface com filtros dinâmicos e gráficos
04

Arquitetura e desafios técnicos

Arquitetura do Verificar Licitação

Aplicação full stack local que carrega licitações de um JSON mestre em memória, expõe uma API REST para consulta e análise agregada, e serve uma interface web estática com suporte de IA via Gemini.

Renderizando diagrama...

Desafios técnicos

Armazenamento em memória vs. persistência em disco

Contexto

Os dados de licitações são volumosos e precisam ser consultados rapidamente, mas o ambiente é local e não há banco de dados dedicado.

Decisão

Carregar o JSON mestre inteiro em memória na inicialização do servidor, evitando I/O a cada requisição.

Trade-off

Consome memória proporcional ao tamanho do dataset e exige reinicialização para atualizações. Mitigado pelo escopo local e pela possibilidade de regenerar o JSON mestre quando necessário.

Normalização de strings para busca insensível a acentos e maiúsculas

Contexto

Os CSVs originais contêm variações de codificação (latin1) e formatos de texto que dificultam buscas consistentes.

Decisão

Aplicar normalização (remoção de acentos, conversão para minúsculas) durante a ingestão e também nos termos de busca.

Trade-off

A normalização pode perder informações de formatação original, mas garante que consultas por órgão ou objeto sejam tolerantes a variações. A mitigação é manter os dados originais no JSON e normalizar apenas para indexação de busca.

Integração com IA sem comprometer a latência da API

Contexto

A geração de análises textuais via Gemini é uma operação externa e potencialmente lenta, que não deve bloquear consultas simples.

Decisão

Separar os endpoints de consulta (rápidos, baseados em memória) dos endpoints de análise com IA, que são acionados sob demanda.

Trade-off

O usuário precisa aguardar a resposta da IA para obter insights textuais, mas as consultas e métricas numéricas permanecem instantâneas. A mitigação é oferecer feedback visual durante a chamada e manter a análise agregada local independente da IA.

Front-end estático servido separadamente vs. integrado ao Express

Contexto

A aplicação prioriza simplicidade e execução local, mas o front-end pode ser aberto diretamente no navegador ou servido pelo Express.

Decisão

Manter o front-end como arquivos estáticos independentes, consumindo a API via CORS habilitado.

Trade-off

A separação facilita o desenvolvimento e o deploy estático, mas exige configuração de CORS e um servidor à parte para a API. A mitigação é documentar o fluxo de execução local e usar o middleware cors para permitir requisições de diferentes origens.

05

Resultados

Busca em memória com normalização, retornando resultados em tempo real.

Consulta eficiente

Cálculo de taxa de sucesso, valor total e top municípios a partir dos dados filtrados.

Análise agregada

Geração de análises textuais sobre o conjunto de licitações consultado.

Insights com IA

06

Stack

Node.jsExpressJavaScriptHTMLCSScsv-parsericonv-lite@google/genaidotenvcors
07

Temas

#licitações#dados públicos#API REST#análise de dados#IA#Gemini#JavaScript

Vamos conversar sobre a próxima oportunidade.

Infraestrutura, IA aplicada, mobile/edge ou integrações críticas — se o desafio exige profundidade, me conte o contexto.