# Freedom Radar Licitações — contexto recuperado

## Arquitetura aprovada pelo usuário

- Frontend em HTML, CSS e JavaScript, aproveitando o visual do protótipo aprovado.
- Backend em Node.js com Express.
- Banco de dados: MySQL, conforme decisão explícita do usuário. Conexão configurada no `.env`.
- Na inicialização, criar automaticamente o banco configurado se não existir, depois aplicar migrações. Requer permissão CREATE DATABASE somente para banco ausente; o serviço MySQL deve estar instalado e disponível.
- `npm start` inicia a aplicação e aplica migrações necessárias; o serviço MySQL deve estar disponível no ambiente de implantação.
- Interface, API e regras de negócio no mesmo projeto.
- `npm install` instala as dependências; `npm start` inicia o sistema inteiro, sem comandos separados para frontend e backend.
- Configurações e credenciais em `.env`; não versionar segredos.
- Atualizações do banco integradas ao processo de inicialização.
- Todas as próximas implementações e atualizações devem preservar esse padrão de execução unificado.
- IA e pagamentos podem usar serviços externos configurados por variáveis de ambiente.
- A sugestão anterior de Next.js + Supabase não é a arquitetura aprovada.
- Incluir administração Freedom e visão do cliente, com permissões reais no backend. A alternância atual no HTML é apenas demonstrativa.


Recuperado em 04/10/2026 dos chats “Criar radar de licitações” e “Sistema de licitações”.

## Produto

SaaS para encontrar oportunidades, analisar editais com IA, comparar requisitos com o perfil da empresa, organizar documentos e prazos e acompanhar a participação.

Fontes planejadas: Banco do Brasil/Licitações-e, PNCP e Compras.gov.br, priorizando fontes públicas e APIs disponíveis. A disponibilidade das integrações ainda precisa ser validada. Envio de propostas, lances e aceite não fazem parte da automação inicial.

Perfil inicial Freedom: software sob medida, fábrica de software, sustentação, BPM, ECM, Fluig, TOTVS, integrações/API, aplicativos, sistemas web, automação, IA, chatbot, OCR e transformação digital.

Análise prevista: aderência, requisitos técnicos, atestados, equipe mínima, condições financeiras, documentos exigidos, riscos, prazos, valor estimado e recomendação, com trechos do edital justificando os resultados.

Pipeline: Encontrada → Em análise → Interessante → Preparar documentação → Participar → Proposta enviada → Ganha/Perdida. Alertas por e-mail e WhatsApp foram propostos.

## Decisão final do MVP V2

- Evoluir o protótipo anterior, sem reconstruir o projeto.
- Plano gratuito sem prazo de expiração, com 2 análises completas gratuitas.
- Mostrar a jornada e o valor do produto no primeiro acesso.
- Mostrar prévia da oportunidade antes de consumir uma análise.
- Depois das duas análises, manter a visualização de oportunidades e bloquear novas análises completas com convite ao upgrade.
- Tela Plano e cobrança com Grátis, Start, Pro e Business.
- As sugestões anteriores de 5 análises gratuitas/mês e trials de 14 ou 7 dias foram substituídas pela decisão final de 2 análises gratuitas sem prazo.

O chat informa a geração do arquivo freedom_radar_licitacoes_mvp_v2.html, com link sandbox:/mnt/data/freedom_radar_licitacoes_mvp_v2.html. O arquivo não foi recuperado para este workspace; a pasta estava vazia na consulta. Recuperar contexto não confirma acesso ao código do protótipo.

Fluxo de teste sugerido: Dashboard → Licitações → Detalhes → Usar análise gratuita → repetir em outra licitação → tentar uma terceira análise → Planos.

## Planos propostos

| Plano | Mensalidade proposta | Usuários | Radares | Análises IA |
|---|---:|---:|---|---|
| Grátis | R$ 0 | 1 | Básico | 2 completas gratuitas, sem prazo |
| Start | R$ 99 | 1 | 3 | 15/mês |
| Pro | R$ 249 | 3 | Ilimitados | 50/mês |
| Business | R$ 499 | 10 | Ilimitados | 150/mês |

Start: alertas e favoritos. Pro: pipeline e documentos, plano principal a destacar. Business: múltiplos CNPJs, relatórios, permissões e suporte prioritário. Os preços e limites foram sugestões comerciais usadas como referência; não há confirmação de cobrança real implementada.

Sugestões adicionais ainda não confirmadas: R$ 49 por usuário adicional no Pro, cartão recorrente e PIX via gateway brasileiro.

Plano e cobrança deve mostrar plano atual, uso mensal, limites de usuários, próxima cobrança, forma de pagamento, alteração de plano e histórico de faturas. Login normal leva ao sistema; seleção de plano após cadastro e upgrade contextual.

## Pontos a definir na implementação

- Política de reutilização das análises já abertas e consumo de créditos em falhas.
- Limites exatos da listagem, buscas, filtros, favoritos e funcionalidades demonstrativas gratuitas.
- Backend, autenticação, persistência, coleta real, processamento de editais e gateway de cobrança.
- Recuperação do HTML V2 para preservar o protótipo existente.

## Implementação iniciada nesta pasta

- Base funcional em `server/` e `public/`, com Express, MySQL2, HTML/CSS/JavaScript e inicialização por `npm start`.
- Migração versionada em `migrations/001_base.sql`, executada na inicialização com lock e checksum.
- Cadastro de empresa/gestor, login/logout, sessão MySQL, permissões na API, CSRF e controle transacional de análises por empresa.
- Perfil, favoritos, checklist e pipeline persistidos no MySQL; administração de planos, empresas, status dos usuários e preferências operacionais.
- Administrador inicial configurado no `.env`; não há senha padrão. MySQL80 local está instalado e em execução, mas a conexão precisa de credenciais válidas.
- `SEED_DEMO=true` insere exemplos fictícios; coleta real, IA, cobrança e convites de equipe permanecem pendentes.
- Limites pagos são por mês calendário UTC; benefício grátis é vitalício. Reabertura não consome créditos.
- O arquivo HTML independente continua como referência de protótipo. Ele não é a aplicação funcional e não transfere automaticamente dados do localStorage para MySQL.
- Consulte `README.md` para configurar, iniciar e testar.

IDs das fontes: Criar radar de licitações = 6ac0e4d1-8a48-83e9-b0f4-6293e5022a63; Sistema de licitações = 6ac0ffcc-0c84-83e9-a1c1-c64218b5b245.

## Integração PNCP implementada

- Consulta oficial por data de publicação com paginação, padrão de sete dias e modalidades 6/8, configurável no `.env`.
- Coletor automático no mesmo processo de `npm start`, usando intervalo administrativo, lock MySQL, status persistente, tratamento de HTTP 429 e retomada de consultas parciais.
- Botão e status na Administração; dados reais com link oficial, identificador PNCP, prazo, valor, modalidade e situação.
- Migração 002 preserva dados existentes e adiciona metadados da origem.
- Filtro por palavras-chave das empresas; percentual representa cobertura textual e não aderência técnica por IA.
- Análise IA de dados reais continua pendente e não consome créditos. Pipeline real pode ser usado sem análise pronta.
- Primeira consulta real importou 26 registros compatíveis antes de HTTP 429; controles de ritmo e retomada foram adicionados.

## Integração de fontes adicionais

- Compras.gov.br: conector próprio implementado na API pública oficial, módulo Contratações PNCP 14133, com modalidades próprias 5/6, janela/paginação configuráveis, status e sincronização independentes. Iniciado pelo mesmo `npm start`.
- Migração 003 adiciona canais. Identificador PNCP unifica oportunidades entre fontes preservando pipeline e créditos. Payloads por canal são guardados separados.
- BB/Licitações-e: portal público retornou HTTP 403 na validação em 04/10/2026; API pública específica não foi confirmada. Coleta direta não implementada; interface deve mostrar indisponibilidade e desabilitar/desmarcar o controle correspondente.
- `BB via PNCP` é identificação de registros cujo linkSistemaOrigem aponta ao domínio HTTPS oficial do Licitações-e; não afirmar que isso é coleta direta BB.
- Primeira coleta Compras.gov.br validada no banco real: 1.880 registros consultados e 48 oportunidades compatíveis, todas unificadas com registros PNCP existentes; status concluído sem erros.
- Identificados nove registros já coletados com origem oficial BB via PNCP; migração 004 faz a identificação retroativa dos links existentes sem coletar diretamente no BB.

## Triagem gratuita por regras — decisão e implementação

- Usuário aprovou processamento sem API paga. PDF.js extrai texto de PDFs oficiais do PNCP em worker Node.js; o mesmo `npm start` inicia tudo.
- Não utiliza modelo de IA, API paga ou serviço externo de análise. Custos de servidor permanecem os da infraestrutura.
- A tela permite selecionar um documento oficial, identifica menções técnicas/documentais, pontos de atenção e datas numéricas, com trechos e páginas. Menções não são conclusões sobre obrigatoriedade; contexto e anexos exigem revisão humana.
- Triagem pública é armazenada no JSON existente da oportunidade com documento, sequência, SHA256, data e versão do motor. Primeira triagem concluída é reutilizada, sem regeneração automática; não certifica mudanças posteriores do edital.
- Mantém dois créditos gratuitos vitalícios por empresa: débito somente na liberação concluída, reabertura sem consumo, administrador sem débito. Falhas de PDF não gastam créditos. Bloqueio transacional preserva limites em concorrência.
- Limites: PDF de até 20 MB, 300 páginas, texto até 1,5 milhão de caracteres e leitura de até 60 segundos; duas leituras simultâneas por processo. PDF digitalizado sem texto exige OCR, ainda não implementado.
- Validação em 04/10/2026: edital público de 70 páginas, dez categorias de menções encontradas; PDF digitalizado rejeitado; testes unitários e MySQL real aprovados.

## Evolução visual e apresentação comercial

- Interface funcional mantém HTML/CSS/JavaScript, Express e MySQL. Camada visual em public/experience.js, sem alterar autenticação ou consumo de créditos.
- Menu com ícones SVG locais e cartões por cor: oportunidades, favoritos, prazos até os próximos sete dias e pipeline. Percentuais reais continuam identificados como cobertura de palavras-chave.
- Abaixo do login/cadastro: benefícios, jornada de uso, convite à conta gratuita e perguntas frequentes. Texto comercial descreve apenas capacidades disponíveis e esclarece triagem por regras, fontes, alertas e cobrança pendentes.
- Duas análises gratuitas sem prazo e reabertura sem novo crédito continuam preservadas.
- Validação: 19 testes existentes aprovados; teste MySQL real ignorado pela configuração da suíte. Login e acesso ao cadastro pelo convite comercial conferidos no navegador.

- Fontes recebem ícones locais coloridos e nome acessível nos cards e detalhes: PNCP, Compras.gov.br e BB via PNCP. Todos os canais da oportunidade são mostrados; não são logotipos oficiais nem identificação do órgão comprador. Exemplos Licitações-e mantêm a identificação demonstrativa existente.

## Detalhes e dashboard com gráficos

- Detalhes com resumo do órgão e objeto, favorito, seis cartões com ícones (fonte, prazo, valor, situação, correspondência e identificação), palavras encontradas, medidor percentual e acesso oficial. Triagem, checklist e consumo de créditos preservados. Campos ausentes são identificados como não informados.
- Dashboard com distribuição por fontes, publicações dos últimos seis meses e participações por etapa. Usa registros reais disponíveis; não inventa histórico de coleta. Fontes múltiplas contam ocorrências por canal e isso é explicado na tela.

## Pipeline visual com arraste

- Kanban com sete etapas coloridas, contadores, fonte, órgão, valor e prazo nos cartões. Títulos longos limitados visualmente a três linhas; texto completo nos detalhes.
- Arrastar entre colunas salva pela API de pipeline existente, preservando favorito e checklist. Interface aguarda confirmação do servidor, impede arrastes simultâneos e informa falhas. Seletor permanece para celular e teclado.

## Entrada comercial com navegação

- Referência analisada: https://licitacaoprotegida.com.br/. Freedom posicionada em busca, triagem e organização de oportunidades, conforme recursos existentes.
- Menu fixo com O Radar, Recursos, Como funciona, Para quem, Planos e Dúvidas, além de Entrar e Começar grátis. Âncoras, apresentação visual ilustrativa, públicos e plano gratuito.
- Não anuncia seguro garantia, emissão de apólices, depoimentos ou métricas sem comprovação. Plano pago permanece consultável no sistema com cobrança online pendente.
- Login, menu e abertura de cadastro gratuito conferidos no navegador; testes de pipeline continuam aprovados.

## Marca oficial

- Logo fornecido pelo usuário em logoAPI.png copiado para public/assets/freedom-original.png. Apenas símbolo é exibido via enquadramento CSS; palavra FREEDOM inferior fica fora da área visível. Original preservado.
- Símbolo aplicado no cabeçalho público, apresentação do login, menu lateral e rodapé público, mantendo proporções e cores originais.

- Atualização da marca: versão transparente em public/assets/freedom-symbol-transparent.png, produzida pela ferramenta integrada de edição de imagens com pedido de retirar fundo/texto e preservar símbolo e cores. Na página pública, logo somente no cabeçalho; removido do bloco azul e rodapé conforme solicitação. Menu lateral do sistema mantém o símbolo.

- Fundo da apresentação pública atualizado com imagem fornecida “Mapa Holográfico do Brasil e Conexões Públicas.png”, copiada para public/assets/radar-brasil-background.png. Camada escura e enquadramento responsivo mantêm legibilidade; aplicação somente no bloco anteriormente azul da entrada.

## Identidade institucional Freedom na entrada

- Site https://www.freedomsuite.com.br/ inspecionado em 04/10/2026: tons escuros, ciano e gradientes azuis adotados apenas na apresentação pública do Radar.
- Rodapé institucional com descrição da empresa, navegação do Radar, história, soluções, expertise, conteúdo e contato. E-mail contato@freedom.net.br e localização Joinville/SC conferidos no rodapé oficial. Links externos abrem em nova aba.
- Logo continua somente no cabeçalho da página pública. Tela interna mantém a identidade clara aprovada. Link de privacidade é explicitamente do site institucional; não afirma política própria do Radar.

## Decisão atual: PIX e planos (04/10/2026)

Esta decisão substitui os preços/cotas gratuitos anteriores neste documento e nas instruções anteriores do projeto: Grátis sem prazo com **1 análise completa gratuita**; Start **R$ 49/mês com 5 análises/mês**; Pro R$ 249/mês com 50 análises/mês; Business R$ 499/mês com 150 análises/mês. Reabertura sem novo crédito e dados existentes preservados.

Mercado Pago selecionado pelo usuário. Migração 005 aplica novos valores em bancos existentes e cria cobranças/contas de validade. PIX avulso mensal, QR Code/copia e cola, histórico, consulta de status, webhook HMAC e liberação transacional idempotente. Validade de um mês, renovação manual; cotas continuam por mês calendário UTC. Estorno/contestação revogam a concessão correspondente. Mudança de plano sem rateio, informada na tela.

Configuração somente via .env, conforme PAGAMENTOS_PIX.md. Sem credenciais da conta Freedom, cobrança fica desabilitada. Testes MySQL real aprovados com API Mercado Pago simulada; validação externa da conta recebedora ainda necessária.

## Mercado Pago via Orders (04/10/2026)

Usuário autorizou teste de cobrança de R$ 1 como administrador. MP_ADMIN_TEST_ONE_REAL=true aplica valor 100 centavos somente role admin e MP_LIVE_MODE=false, validado no servidor. Clientes e produção preservam preço do plano. Interface identifica sandbox sem movimentação real. Não é teste de PIX financeiro real.

Teste local do webhook: cloudflared oficial baixado em .tools (ignorado no controle de versão), com túnel temporário para scripts/webhook-proxy.js na porta 3001. Proxy publica somente POST /api/payments/mercadopago/webhook, encaminhado para o Radar local, e bloqueia demais rotas. URL temporária registrada em MP_NOTIFICATION_URL no .env sem alterar segredos ou habilitar PIX. Terminais devem permanecer ativos; novo túnel requer atualizar URL no painel. Uso restrito a desenvolvimento.

Aplicação Freedom Radar criada pelo usuário como Checkout Transparente via Orders, após aviso de descontinuação Payments. Novas cobranças usam /v1/orders, valores decimais do banco, uma transação PIX, modo automático e validade de 24h. QR e status normalizados, incluindo processamento assíncrono. Webhook order valida assinatura com ID ORD em minúsculas, consulta autenticada e dados da cobrança. Aprovação exige crédito confirmado e total pago integral. /users/me verifica conta recebedora brasileira e ambiente pela tag test_user, sem inferir modo pelo prefixo do token. Histórico numérico e pedidos legados preservados. Nenhuma migração aplicada alterada. PIX continua dependente de configuração completa e teste externo; credenciais não são expostas.

Usuário autorizou pagamento real de R$ 1. Token produtivo validado em /users/me, ID recebedor corrigido no .env. MP_ADMIN_LIVE_ONE_REAL=true permite R$ 1 exclusivamente para admin em produção; clientes preservam preços. Interface informa transferência real. Aplicação reiniciada; confirmação financeira e webhook produtivo ainda precisam ser testados.

Usuário autorizou ativação para clientes: PIX_ENABLED=true e MP_LIVE_MODE=true mantidos; MP_ADMIN_LIVE_ONE_REAL e MP_ADMIN_TEST_ONE_REAL desativados. Preços MySQL conferidos Start49/5 Pro249/50 Business499/150. Cobrança real de R$ 1 consta aprovada no banco; outra cobrança de R$ 1 pendente preservada. Aplicação reiniciada com rede. Sistema ainda local e webhook em túnel temporário, exige hospedagem pública e URL estável para operação contínua com clientes.

Pacote de servidor preparado em dist/freedom-radar-servidor.zip por solicitação do usuário. Projeto sem build, npm ci --omit=dev e npm start no servidor com Node24/MySQL8. .env.production.example sem segredos, domínio https://radar.freedomsuite.com.br, cookie seguro, demo desativado, PIX depende de credenciais. DEPLOY_SERVIDOR.md cobre HTTPS/proxy/webhook e transferência separada do banco. 28 testes incluindo MySQL aprovados. Implantação remota não executada.

## Biblioteca documental e checklist (05/10/2026)

Implementação autorizada pelo usuário. Migração 006 cria armazenamento privado de PDFs no MySQL por empresa, categorias, emissão, validade e observações. Gestor/admin envia e remove, analista consulta apenas sua empresa. Limites 10 MB/arquivo e 100 MB/empresa. Dashboard e biblioteca mostram vencidos/vencimento em 30 dias. Triagem extrai menções documentais com evidência por página e compara dinamicamente a biblioteca ao abrir/liberar análise. Resultado faltando/vencido/conferir adequação, sem aprovação automática de habilitação. Identificadores de origem, modalidade e datas coletadas aparecem na análise. Sem OCR, extração automática da validade dos arquivos privados ou alertas externos. DOCUMENTOS_EMPRESA.md documenta operação e backup. 29 testes aprovados, incluindo isolamento, permissões, CSRF e upload privado no MySQL.

Configuração MySQL aceita DB_PORTA, DB_USUARIO, DB_SENHA e DB_NOME no .env (06/10/2026). Nomes originais em inglês continuam compatíveis e têm precedência se ambos estiverem presentes. Exemplos e nomes no .env local atualizados preservando valores existentes, banco e credenciais. 30 testes aprovados.

Entrada de hospedagem na raiz app.js (06/10/2026), ao lado do package.json já existente. npm start executa node app.js, que carrega .env e inicia server/index.js com banco e migrações. Pastas server/public/migrations continuam necessárias na hospedagem.
