Appearance
Diagnóstico
Comece pelo sintoma, faça verificações somente de leitura e registre evidências. Não altere dados diretamente no banco e não reinicie todos os serviços sem identificar qual processo falhou.
Evidências mínimas para escalar
Anote ambiente, empresa, usuário/perfil, tela ou rota, horário com fuso, ID do registro/execução/job, resultado esperado, resultado observado e passos para reproduzir. Inclua status HTTP e código técnico quando houver. Oculte senhas, tokens, cookies, documentos pessoais e payloads sensíveis.
Usuário não consegue acessar uma área
- Confirme que o usuário pertence à empresa correta e está ativo.
- Consulte Usuários e permissões e compare o perfil com a área.
- Teste novamente após sair e entrar; uma sessão antiga pode preservar estado anterior.
- No navegador, registre rota e status:
401indica sessão,403indica permissão e404também pode representar isolamento entre empresas.
Evidência esperada: outro usuário com o mesmo perfil apresenta o mesmo limite; um perfil autorizado abre a área.
Escalone quando: matriz e cadastro permitem acesso, mas o backend retorna 403/404; envie rota, usuário, empresa e horário.
Colaborador não vê projeto no modo de campo
- Confirme que o login está ligado a um colaborador ativo.
- Confirme que o colaborador pertence a uma equipe.
- Confirme que essa equipe está atribuída ao projeto.
- Confirme que o usuário saiu e entrou novamente após mudanças de vínculo.
Evidência esperada: o projeto aparece em Campo para um usuário autenticado ligado a colaborador ativo cuja equipe está atribuída. Perfil operator e equipe do tipo campo controlam o redirecionamento automático.
Escalone quando: vínculos estão ativos e corretos, mas a lista continua vazia; informe IDs do usuário, colaborador, equipe e projeto.
Cliente ou atualização não aparece no portal
- Abra o link copiado da tela do próprio projeto; não reutilize token de outro projeto.
- Confirme que projeto, cliente e atualização pertencem à mesma empresa.
- Verifique se a atualização foi publicada e se fotos terminaram o upload.
- Teste em janela anônima e registre o status HTTP.
Evidência esperada: o token abre um único projeto e mostra as atualizações publicadas daquele histórico.
Escalone quando: a tela interna mostra o conteúdo no projeto correto, mas o mesmo token não o apresenta; envie projeto, atualização, horário e status, nunca o link público completo em canal aberto.
E-mail não chega
- Confirme endereço do usuário e
MAIL_MAILERdo ambiente. - Em local, abra Mailpit. Em homologação/produção, confira log do provedor.
- Valide remetente, host, porta, TLS e autenticação.
- Consulte spam, bloqueio, bounce e políticas SPF/DKIM/DMARC.
Evidência esperada: a aplicação entrega ao SMTP e o provedor atribui um ID à mensagem.
Escalone quando: o provedor aceitou e não entregou, ou Laravel registrou exceção; envie horário, destinatário mascarado e ID do provedor.
Imagem ou arquivo não carrega
- Registre a URL e o status HTTP sem compartilhar token de portal.
- Confirme a existência do arquivo no disco
publice a permissão de leitura. - Confira
storage/app/public, o link criado porphp artisan storage:linke a persistência do volume. - Em mais de uma instância, confirme que
storage/app/publicé compartilhado.
Evidência esperada: o arquivo existe no disco public e a URL gerada responde 200 com o tipo correto.
Escalone quando: o banco referencia um caminho inexistente ou a URL é gerada incorretamente; envie ID do anexo, disco, caminho e status.
WhatsApp não envia ou não recebe
- Em Config. WhatsApp, confirme conta ativa e use Verificar conexão.
- Para recebimento, confira retorno do webhook, assinatura e Phone number ID.
- Para envio, confira status e erro da mensagem, worker da fila
whatsappe validade do token. - Confirme número normalizado, regras da Meta e bloqueio/atribuição da conversa.
Evidência esperada: entrada cria uma mensagem única; saída passa de queued para enviada ou registra erro do provedor.
Escalone quando: Meta aceitou a entrega e nada foi criado, ou a mensagem falha sem detalhe; envie ID da conta/mensagem, horário, direção e status, sem token.
Webhook não é validado
- Identifique se é webhook Meta ou trigger de flow.
- Meta: confira URL HTTPS, modo
subscribe, challenge e verify token do mesmo ambiente. - Flow: confira URL publicada,
Idempotency-Keye, se usada, assinatura HMAC/timestamp. - Registre status:
403aponta validação/assinatura;404, chave ou trigger inativo;422, cabeçalho obrigatório/payload.
Evidência esperada: verificação Meta devolve o challenge; trigger retorna 202 com executionId.
Escalone quando: bytes assinados, horário e configuração estão corretos e ainda há 403; envie cabeçalhos não secretos, hash do corpo, status e horário.
Flow não inicia, não publica, fica aguardando ou falha
- Não publica: valide o draft e abra cada erro/aviso de node, conexão e credencial.
- Não inicia: confirme versão publicada, flow ativo e trigger publicado.
- Aguardando: abra a espera e confirme scheduler, callback, evento/correlação ou resposta esperada.
- Falha: abra node, código, entrada permitida, política de erro e serviço externo.
- Confirme worker
workflowseworkflows:tickno scheduler.
Evidência esperada: histórico mostra trigger, versão, sequência de nodes e transição de queued para estado final ou espera conhecida.
Escalone quando: a execução permanece sem node ativo ou a espera elegível não retoma; envie flow, versão, execução, node/wait e horários.
Evento interno não dispara automação
- Confirme que a ação realmente emite o evento listado em Automações e flows.
- Confira a fila
eventse o listenerStoreInternalEvent. - Localize o evento interno e seu
processed_at. - Confirme assinatura do trigger, empresa, versão publicada e flow ativo.
- Para WhatsApp, confirme conversa sem atendente e sem bloqueio de automação.
Evidência esperada: evento é persistido, processado e cria uma execução idempotente por assinatura.
Escalone quando: evento processado e assinatura ativa não geram execução; envie IDs do evento, assinatura, flow e empresa.
Job permanece pendente
- Descubra a fila:
events,whatsapp,workflowsoudefault. - Verifique se o worker está vivo e consumindo explicitamente essa fila.
- Confira conexão Redis e jobs falhos.
- Compare
retry_aftercom timeout do worker e duração real. - Após deploy, confirme que workers foram reiniciados.
Evidência esperada: a profundidade da fila cai e o job muda de estado ou aparece como falho com exceção.
Escalone quando: worker saudável reserva o job repetidamente ou processo morre; envie fila, classe, ID, tentativas e exceção sanitizada.
Atualização em tempo real não aparece
- Atualize a página. Se o dado aparece, persistência está correta e o problema é realtime.
- Confira
BROADCAST_CONNECTION, processo Reverb e variáveisVITE_REVERB_*usadas no build. - No navegador, verifique conexão
ws/wss, host, porta, TLS e erro no console. - Confirme que proxy aceita upgrade de websocket e que o usuário está autenticado no canal.
Evidência esperada: websocket conecta e eventos de conversa/execução atualizam a tela sem reload.
Escalone quando: evento é publicado mas não chega ao canal; envie nome do evento, canal, horário e erro websocket, sem chaves.
Financeiro ou folha mostra valor inesperado
- Confira empresa e período/filtros.
- Financeiro: valide tipo, competência/vencimento, valor, pagamentos parciais, status e lançamento de caixa.
- Folha: valide colaborador ativo, compensação vigente, referência, salário, adicionais, descontos e adiantamentos.
- Recalcule o preview e compare a fórmula descrita em RH e folha.
- Confirme se a folha está em rascunho, fechada ou reaberta.
Evidência esperada: soma dos componentes e pagamentos reproduz o total e o saldo exibidos.
Escalone quando: os registros persistidos não reproduzem o cálculo; envie IDs, período e valores, removendo dados pessoais desnecessários.
Comandos seguros de apoio
Execute no ambiente correto e preserve a saída necessária:
bash
php artisan about
php artisan schedule:list
php artisan queue:failed
php artisan migrate:statusUse logs do serviço web, worker, scheduler e Reverb filtrados pelo horário. Não rode migrate:fresh, limpeza global de filas, exclusão em massa ou comandos de banco destrutivos como diagnóstico comum.