Relatório técnico

Fluxo Técnico do Pregão

Imagem padrão
Ouvir conteúdo
Clique para ouvir o texto completo

1. Inicialização do Pregão

  • Quando o usuário entra na página do pregão, o sistema faz uma consulta no banco para verificar quais peças (moedas ou cédulas) estão com status = 'aberto' na tabela lista_pregao.

  • O sistema carrega o catálogo na ordem definida pelo campo id ou fimPregao, dependendo se a peça já está em leilão ou aguardando.

  • A primeira peça da fila recebe destaque visual (primeira-moeda) e pode ter badge “PRÓXIMA” no frontend.

Queries envolvidas:

 
SELECT * FROM lista_pregao WHERE status = 'aberto' ORDER BY CASE WHEN fimPregao IS NOT NULL THEN 0 ELSE 1 END, id ASC;

2. Organização da Fila de Peças

  • Cada peça recebe uma posição na fila (posicao-fila), calculada pelo index da query.

  • No frontend, a posição é mostrada em um círculo, e os cards são renderizados em ordem sequencial.

  • A fila é atualizada automaticamente a cada 30 segundos via window.location.reload() ou, futuramente, via AJAX.


3. Lance Antecipado

  • Usuários podem dar lances antes da peça iniciar.

  • O sistema verifica:

    1. Se o valor do lance é maior que o maior lance atual.

    2. Se o usuário não deu um lance igual a outro já registrado.

  • Regra de empate: caso dois lances sejam iguais, vence o primeiro lance recebido. O segundo é rejeitado.

Queries envolvidas:

 
-- Maior lance atual da peça SELECT MAX(valor_lance) FROM lances WHERE idMoeda = :idMoeda AND idAnuncio = :idAnuncio; -- Contagem de lances SELECT COUNT(*) FROM lances WHERE idMoeda = :idMoeda AND idAnuncio = :idAnuncio;

4. Início do Leilão

  • Quando a peça inicia, fimPregao recebe timestamp de início + 60 segundos.

  • O contador de tempo é reiniciado se houver novos lances.

  • Todas as ações do usuário (lance, chat) são registradas para auditoria.


5. Recebimento de Lances

  • Cada lance é validado no backend antes de ser aceito:

    • valor_lance > maior_lance_atual

    • idUsuario não duplicado no mesmo lance

  • O banco recebe o registro:

 
INSERT INTO lances (idUsuario, idMoeda, idAnuncio, valor_lance, data_hora) VALUES (:idUsuario, :idMoeda, :idAnuncio, :valor_lance, NOW());

6. Encerramento Automático

  • Quando o tempo do pregão expira, a peça é marcada como status = 'vendido'.

  • O maior lance é identificado como vencedor.

  • O sistema atualiza tabelas relevantes:

 
UPDATE lista_pregao SET status = 'vendido', idVencedor = :idUsuario, valor_venda = :valor_lance WHERE id = :idPregao;
  • Caso não haja lances, a peça pode permanecer aberta ou ser cancelada conforme regras internas.


7. Notificações e Chat

  • Todas as ações do pregão são logadas no chat:

    • Lances realizados

    • Mensagens motivacionais e dúvidas

    • Futuramente: IA leiloeira, que irá participar do chat para tirar dúvidas sobre regras e postar mensagens motivacionais.


8. Encerramento Manual e Penalidades

  • Admin pode cancelar ou suspender o pregão manualmente via painel.

  • O sistema deve registrar motivo e usuário responsável.

  • Penalidades (ex.: lance inválido ou cancelamento) são aplicadas conforme regras legais.

Tire suas dúvidas

Cecília Romani
Cecília Romani

Especialista em Numismática

Tire suas dúvidas com Cecília Romani sobre este capítulo pelo WhatsApp.

Falar com Cecília

Comentários

Área de comentários em breve...