EN Iniciar projeto

produto próprio · construído e operado por nós

TRINTA

Um radar de concursos públicos. Lê as fontes oficiais todos os dias, lê a documentação anexa, pontua cada concurso de 0 a 100 conforme a adequação real da empresa e entrega o que interessa. Não é um caso de estudo escrito de fora: a TRINTA é nossa, da primeira linha de código aos clientes que a usam hoje.

1.000+ plataformas de compras públicas mapeadas
~30 línguas no motor de relevância
0 a 100 pontuação auditada por IA em cada concurso
700.000€ o primeiro concurso encontrado, ganho em 2 semanas

O problema não era falta de concursos.

Era não os ver a tempo. Estão espalhados por centenas de portais oficiais, cada um com o seu formato, a sua língua e o seu calendário. O que não fosse encontrado numa segunda-feira de manhã ficava por concorrer.

01

Cada país publica onde quer e como quer. Alguns em portais que só abrem com JavaScript, outros só em PDF.

02

O prazo que interessa muitas vezes não está nos metadados. Está escondido a meio de um documento anexo.

03

O mesmo concurso chega por três fontes diferentes, com referências que não se parecem umas com as outras.

04

Procurar por palavras é ingénuo. "Oxigénio" aparece em vinte línguas, com acentos, plurais e casos gramaticais.

como funciona

Cinco passos, todos os dias.

01

Ler

Um conector dedicado por portal vai buscar os anúncios à fonte oficial. Cada um corre isolado, com tentativas e limite de tempo próprios, para que um portal em baixo nunca pare a recolha.

02

Filtrar

O motor de relevância decide o que interessa, em cerca de 30 línguas, com códigos CPV e um nível fraco que deixa passar casos duvidosos para a IA julgar.

03

Enriquecer

Os documentos do concurso são resolvidos e lidos. Muitas vezes o prazo real só existe dentro de um PDF, e é lá que o vamos buscar.

04

Pontuar

Triagem determinística primeiro, auditoria com IA depois. A auditoria lê a documentação e escreve a pontuação final, de 0 a 100.

05

Entregar

O que interessa aparece no topo do painel, no email das 7h e, se for caso disso, no WhatsApp. O resto não rouba tempo a ninguém.

a frota

Mais de mil plataformas, uma a uma.

Não existe um raspador universal que resolva compras públicas. Cada portal tem o seu formato, e por isso cada portal tem o seu código. O trabalho não é escrever o primeiro conector, é manter oitocentos vivos enquanto os portais mudam por baixo.

Um conector por portal

Não é um scraper genérico. Cada plataforma tem código próprio que percebe o seu formato, seja API oficial, HTML ou RSS. Os portais construídos em JavaScript são abertos com um browser sem interface.

Falhar sem cair

Cada fonte corre dentro do seu próprio limite de tempo, com repetições e recuo exponencial. Um portal que rebente regista o erro e a recolha continua. Nunca há um ponto único de falha.

Saber quando um parser apodrece

Contamos as linhas que o parser oferece, não só as que dão resultado. Assim distingue-se um portal genuinamente calmo de um parser partido que devolve zero em silêncio.

Sonda semanal ativa

Todas as segundas, os conectores calados há três semanas são reexecutados de propósito. Dois zeros seguidos marcam o conector como suspeito e enviam alerta.

o motor de relevância

Procurar por palavras não chega.

Um concurso relevante pode aparecer em polaco, árabe ou finlandês. Pode ter acentos, plurais irregulares ou um código europeu em vez de palavras. O motor trata disso antes de a IA ser sequer chamada, porque chamar a IA a tudo seria lento e caro.

Acentos e alfabetos

Tudo é normalizado dos dois lados da comparação: latino, grego, cirílico, harakat árabe e niqqud hebraico. "Oxigénio" e "OXIGENIO" são a mesma palavra, e o turco "LİKİT" também.

Plurais derivados, não escritos à mão

As variantes são geradas por regra a partir da raiz, cobrindo as terminações portuguesas, francesas, italianas e alemãs. Os casos gramaticais eslavos e bálticos são listados à mão, porque não se derivam com segurança.

Códigos CPV

Os códigos europeus fortes valem por si, sem depender de língua nenhuma. Os fracos só contam com uma âncora de saúde ao lado, e chegam sinalizados.

Uma rede de segurança para os duvidosos

Quando nada forte bate certo, um substantivo genérico mais uma âncora de saúde ainda deixam o anúncio entrar, marcado. A IA é que julga. O nível fraco só garante a chegada.

Testes contra concursos reais

93 casos de regressão, cada um retirado de um anúncio verdadeiro, com a referência anotada. 75 têm de acertar, 18 têm de falhar. Se um deles quebrar, a compilação falha e nada é publicado.

a pontuação

A IA pontua. As regras impedem-na de exagerar.

Um modelo entusiasmado é pior do que nenhum modelo, porque produz confiança falsa. Por isso a pontuação da IA passa por limites deterministas que ela não pode contornar.

Duas fases

Primeiro uma triagem determinística por adequação de produto, geografia, valor e prazo. Depois a auditoria com IA, que lê a página oficial e até seis documentos anexos e escreve a pontuação final.

Travões contra otimismo

A pontuação é limitada por regras deterministas que a IA não pode contornar. Sem correspondências de produto o teto é 40. Só com correspondências de baixa confiança, 55. Só uma correspondência de confiança alta pode passar de 72.

Proibido inventar

Se nenhum documento foi realmente lido, todas as correspondências que o modelo tenha devolvido são apagadas e a pontuação é limitada a 25. Esta regra nasceu de um caso real em que a auditoria mapeou produtos num concurso que nunca tinha lido.

Auditar sempre, ou não publicar

Se ficar algum concurso por auditar, o processo termina em erro. Como a publicação vem depois, um concurso não auditado nunca chega ao site. A regra está no código, não no procedimento.

Se a documentação não foi lida, a pontuação não sobe. Preferimos um número baixo e honesto a um número alto e inventado.

documentos

O prazo está dentro do PDF.

Foi um concurso já encerrado a aparecer no topo do quadro que originou esta parte do sistema. A data existia, mas só dentro do documento. Hoje vamos lá buscá-la.

Encontrar os ficheiros

No TED lemos o XML do anúncio e seguimos a referência oficial dos documentos até ao portal nacional do comprador. Noutros portais derivamos a API de ficheiros ou seguimos a página de anexos.

Ler mesmo o PDF

O tipo de ficheiro é detetado pelos bytes, não pelo cabeçalho, porque muitos portais servem PDFs com o cabeçalho errado. PDFs cifrados ou digitalizados devolvem vazio, e vazio significa "não lido", nunca licença para adivinhar.

O prazo escondido

Muitos concursos não publicam o prazo nos metadados. Extraímos a data do texto, com âncoras em cinco línguas que distinguem prazo de entrega de duração de contrato. Quando há duas fases, fica a mais cedo, porque é essa que fecha a porta a quem chega agora.

automação

Corre sozinho, e avisa quando adoece.

Quatro passagens por dia

Corre na nuvem, em dias úteis, com uma passagem profunda à segunda-feira. Não depende de nenhum computador ligado.

Sair em dois segundos

A primeira coisa que o processo faz é ver se o dia já foi recolhido. Se sim, termina antes de instalar o que quer que seja. As passagens de recuperação só custam alguma coisa quando a principal falhou mesmo.

Travão de disparada

Se uma corrida fosse auditar mais de 1.200 concursos, falha antes de fazer a primeira chamada à IA. É a proteção contra um erro que multiplique custos.

Custo em camadas

Um modelo barato triaga tudo, o modelo forte só reaudita o que pode ser acionável. As auditorias seguem em lote, a metade do preço.

Avisa quando adoece

Cinco dias seguidos de erro num conector geram alerta por email, sem repetir o mesmo aviso no mesmo dia.

para lá de encontrar

Encontrar é metade. A outra metade é ganhar.

Quem ganha, e por quanto

Recolhemos anúncios de adjudicação com vencedor e valor. Daí saem incumbentes por comprador, bandas de preço, número esperado de concorrentes e uma leitura de probabilidade de vitória.

Antes do concurso existir

Os anúncios de pré-informação europeus são recolhidos como sinais. E um contrato-quadro a envelhecer é, por si só, um sinal de que vem aí novo concurso.

Retrato do comprador

Cada entidade adjudicante tem página própria, com histórico e fornecedores habituais.

Parceiros locais

Em mercados que exigem representação local, a plataforma investiga candidatos e verifica se o site de cada empresa responde mesmo. Quem não responde é descartado, diga o modelo o que disser.

Rascunho de proposta

A partir do concurso e da sua auditoria sai uma matriz de conformidade requisito a requisito. O que não tiver prova é marcado como lacuna, não é preenchido com boa vontade.

Lista de oportunidades pontuadas
oportunidades, pontuadas
Detalhe de um concurso com auditoria
a auditoria, por concurso
Sinais de pré-concurso
sinais, antes do concurso

plataforma

Um motor, vários clientes.

O mesmo sistema serve setores diferentes. O que muda é o perfil de palavras-chave de cada cliente, e esse perfil é gerado a partir do catálogo da própria empresa.

Multi-cliente por domínio

O domínio do pedido decide o inquilino. O cabeçalho interno é sempre reescrito pelo servidor, por isso não pode ser forjado de fora. Se o contexto não estiver preenchido, o código rebenta em vez de mostrar dados errados.

Isolamento verificado na compilação

Um script confirma que todas as rotas preenchem o contexto do inquilino. Falha a compilação se alguma esquecer.

API e integrações

API pública com chaves guardadas apenas como resumo criptográfico, webhooks para Slack e Teams, e um servidor MCP com nove ferramentas de leitura para ligar assistentes de IA aos dados.

a prova

700.000€ na primeira semana.

A TRINTA nasceu dentro da Ultra Controlo, uma industrial portuguesa de gases medicinais com 40 anos e clientes em mais de 80 países. Na primeira semana de utilização, encontrou um concurso de 700.000€ que a empresa não tinha visto. Ganhou-o duas semanas depois. No primeiro mês, o radar identificou mais de 30 milhões de euros em oportunidades qualificadas.

Dizemos isto com clareza: a Ultra Controlo é a empresa familiar do fundador. Foi lá que o sistema se provou, no pipeline real, antes de ser vendido a alguém.

construído com

  • TypeScript
  • Next.js 16
  • React 19
  • Tailwind v4
  • Claude Sonnet 4.6
  • Claude Haiku 4.5
  • Playwright
  • Vitest
  • GitHub Actions
  • Vercel

Quer um destes para a sua operação?

A TRINTA é o que conseguimos construir quando o problema é nosso. Se tem um problema parecido, falamos quinze minutos e dizemos-lhe honestamente se compensa.