--- name: Sessao 13/04 - Social Media aprovacao e melhorias description: Aprovacao publica fix, preloader global, upload chunks, video streaming ffmpeg, calendario status, formatacao telefone, mensagens WA type: project originSessionId: 49749810-a24e-4620-90ae-4d4f86d2f8be --- ## Sessao 13/04/2026 - Social Media e Melhorias Gerais ### Aprovacao Publica - Rotas e Midias - Rota `aprovacao-publica/` criada (CronSocialMedia gerava links com esse path que nao existia) - `SocialDemandaService::onDemandaConcluida()` corrigido: busca TODOS os workflow_anexos (antes so ultimo historico) - `DemandasEtapas::solicitarAprovacao()` agora chama `onDemandaConcluida` quando tem `social_post_id` - Suporte a `chunked_files` JSON no `moverDemanda` para arquivos grandes ### Preloader Global (PreloaderFilter) - Filtro CI4 After injeta preloader em todas as paginas HTML automaticamente - Logo GO com anel girando + "Carregando..." - Espera `window.load` + `jQuery.ajaxStop` + 200ms (cobre DataTables AJAX) - Excluido de: api/*, cron/*, webhooks ### Upload em Chunks - Endpoint: `demandas-etapas/upload-chunk` - Arquivos >10MB divididos em chunks de 5MB no JS - Servidor monta em `writable/uploads/demandas_temp/` - Timeout JS: 0 (sem limite), servidor aceita 500MB - `DemandaWorkflowAnexoModel`: limite 500MB (era 50MB) - Preview dos arquivos com miniaturas no modal ### Video Streaming e ffmpeg - ffmpeg instalado: `/usr/local/bin/ffmpeg` (binario estatico) - Videos auto-comprimidos: 720p, CRF 26, AAC 128k, `-movflags +faststart` - `AprovacaoPublica::midia()`: streaming em chunks 1MB + Range requests - Symlinks `media-temp/` para LiteSpeed servir direto (sem PHP) - View: `object-fit: cover` (sem tarja preta), view toggle removido, swipe touch carrossel ### Calendario Status - Labels claros: "Cliente nao aprovou planj.", "Cliente recusou arte", "Aprovado", etc. - "Aprovado" = verde (#dcfce7/#166534) - `ajaxPostsCalendario` retorna `cronograma_status` - Scroll nos dias (sem "+4 mais"), `dayMaxEvents: false` - Contador clientes inclui status `aceito` ### Mensagens WhatsApp Diferenciadas - `notificarClienteAprovacao`: detecta planejamento vs publicacao automaticamente - Planejamento: "O planejamento de abril esta pronto!" + link cronograma - Publicacao: "Conteudo pronto para aprovacao" + link post - Bug `Undefined variable $mes` corrigido no `cronogramaEnviarCliente` - Formatacao duplicada removida (so `enviarMensagemTexto` formata via global) - `CronSocialMedia::formatarTelefone()` agora usa `WhatsApp::formatarTelefoneDDD()` - **Regra Baileys**: DDD >= 31 remove o 9 (confirmado pelo usuario) ### Links de Aprovacao - **Planejamento**: link NUNCA expira - **Publicacao**: link expira em 4h (auto-aprovacao) - Verificacao expiracao removida do `AprovacaoCronograma::index()` ### Dados Corrigidos - Posts Juliana (122,123): aprovacao_status pendente→nao_requer - Posts Daniela (129,130): status rascunho→aceito + demandas 1920,1921 criadas - Video Juliana (post 121): 86MB→12MB via ffmpeg