--- name: Integração Social Media ↔ Demandas description: Sistema completo de criação automática de demandas ao aprovar cronograma, fluxo aprovação/rejeição com WhatsApp, permissões granulares type: project --- ## Status: EM PRODUÇÃO (2026-04-07) ### Fluxo completo implementado: 1. Admin cria cronograma com posts (título, planejamento, conteúdo, hashtags, referências) 2. Envia para cliente aprovar (link público ou área do cliente) 3. Cliente aprova cronograma → cria 1 demanda por post automaticamente 4. Demanda tem imagem de referência na descrição HTML + anexos + dados do planejamento no histórico 5. Colaborador executa, anexa arte, move para "Aguardando Aprovação" 6. Hook copia anexos da **última movimentação** (workflow) como mídia de publicação do post 7. Usa `notificarClienteAprovacao()` do SocialMedia.php (mensagem original WhatsApp com link) 8. Cliente aprova → demanda move para "Aprovada" (etapa 5) 9. Cliente rejeita → demanda move para "Recusada" (etapa 7) com motivo 10. Auto-aprovação 4h → demanda move para "Aprovada" automaticamente 11. CronSocialMedia publica na hora certa → post fica "publicado" ### Hooks em TODOS os controllers de aprovação/rejeição: 1. `AreaClienteSocial::aprovar/rejeitar` - área do cliente 2. `AprovacaoExterna::aprovar/rejeitar` - link externo 3. **`AprovacaoPublica::aprovar/rejeitar`** - link público WhatsApp (IMPORTANTE: este é o principal!) 4. `CronSocialMedia::autoAprovar` - auto 4h 5. `AprovacaoCronograma::aprovar/aprovarPost` - aprovação do cronograma (cria demandas) 6. `DemandasEtapas::moverDemanda` - quando tipo_etapa='aprovacao' (envia para cliente) ### Tabelas criadas: - `social_demanda_config` (ativo, solicitante_id, prioridade_padrao) - `social_demanda_colaboradores` (colaborador_id, ativo) - Coluna `social_post_id` em `demandas` ### Permissões GRANULARES (cada uma separada): | ID | Permissão | Controla | |----|-----------|----------| | 257 | `social_media_ver_cronograma` | Menu + acessar página + ver posts + AJAX calendário | | 258 | `social_media_criar_cronograma` | Botão "Criar Cronograma" + salvar | | 259 | `social_media_editar_cronograma` | Botão "Editar" nos posts | | 260 | `social_media_excluir_cronograma` | Botão "Excluir" nos posts | | 261 | `social_media_ver_driver` | Botão "Driver" + listar/baixar/upload arquivos | | 262 | `social_media_enviar_aprovacao` | Enviar cronograma para aprovação do cliente | | 163 | `social_media_gerenciar` | Configurações do Social Media (menu Configurações) | - Permissões antigas (162-166) ainda funcionam nas rotas como fallback - Admin (nivel_acesso_id=1) sempre tem acesso total via `$isAdmin` - Variável JS `_perm` controla botões no frontend - `$isAdmin` e `$permNomes` definidos NO TOPO da view (antes do HTML) ### Lógica de status no calendário (admin e cliente): - `status=rascunho + aprovacao=pendente` → "Aguardando aprov. **planejamento**" (azul) - `status=rascunho + aprovacao=rejeitado` → "Planj. recusado" (vermelho) - `status=aceito + aprovacao=pendente` → "Aguardando aprov. **publicação**" (laranja) - `status=aceito + aprovacao=rejeitado` → "Pub. recusada" (vermelho) - Usa `ePlan = (st==='rascunho')` para distinguir ### Demandas de social NÃO bloqueiam colaborador: - Em `DemandasEtapas::moverDemanda()`, se demanda atual ou ativa tem `social_post_id`, não bloqueia execução simultânea ### Arquivos principais: - `app/Libraries/SocialDemandaService.php` - toda lógica centralizada - `app/Views/social_media/index.php` - calendário admin com permissões JS - `app/Views/area_cliente/social/calendario.php` - calendário cliente - `app/Views/aprovacao_publica/cronograma.php` - aprovação link público (conteúdo + hashtags) - `app/Views/demandas/partials/modal_processo.php` - histórico com imagem de recusa ### Formulário cronograma: - Campos: título, data, hora, planejamento, **conteúdo** (NOVO), **hashtags** (NOVO), tipo, arquivo referência - Backend `cronogramaSalvarCompleto()` salva conteúdo e hashtags (antes salvava vazio) ### Config: - Menu "Social Media Config" em **Configurações** (não Marketing Digital) - Seção "Integração com Demandas" com toggle, pool colaboradores, solicitante - Usuario "Sistema" ID=11 como solicitante padrão ### Bugs corrigidos: - `getEtapaAprovada()` buscava `tipo_etapa='aprovada'` mas banco tem `aprovacao_final` - Workflow anexos: path `demandas_workflow/` precisa fallback `uploads/demandas_workflow/` - `usuario_id` NOT NULL em `demandas_workflow_anexos` - usa ID do Sistema - `[Anexo: nome.jpg]` renderizado como imagem nos modais (cliente, admin, histórico demandas) ### Área do Cliente (cliente.gotechbr.com.br): - Subdomínio com SSL Let's Encrypt (válido até Jul 2026) - Rotas sem `/area-cliente/` prefix - Login moderno dark glassmorphism (cores da logo verde) - Proteção: sanitização, rate limiting 5/15min, CSRF - Favicon GO verde/amarelo (favicon.png) - Card avisos sistema no dashboard (admin CRUD em /avisos) - Paginação boletos pagos e tickets suporte - Modal novo chamado suporte - "Minha Empresa" (ex "Meu Perfil") sem código acesso e histórico - Boleto PDF busca direto Sicoob (isolado do admin) - Download direto (attachment, sem nova aba) - Contratos sem "Dados Cadastrais" e sem botão PDF - Login bloqueia se sem contrato ativo ### Backup: - DB: `/home/gotechbr/backup_db_2026_04_07.sql` (25MB) - Code: `/home/gotechbr/backup_code_2026_04_07.tar.gz` ### Nginx fixes: - `aprovacao.gotechbr.com.br` proxy fix (127.0.0.1 → 107.150.43.90) - `cliente.gotechbr.com.br` ACME challenge location para SSL