photum/frontend/docs/CHANGELOG_GESTAO_EQUIPE.md
JoaoVitorMS0 93d603da6c feat: implementa visualização de agenda para profissionais e melhorias no sistema
- Adiciona role 'agenda_viewer' para profissionais visualizarem apenas suas agendas
- Implementa middleware de autorização baseado em roles
- Adiciona validação de permissões nos endpoints de agenda
- Melhora exibição de dados financeiros e logísticos
- Atualiza componentes frontend para melhor UX
- Adiciona documentação sobre o papel de visualização de agenda
2026-01-19 17:06:27 -03:00

9.2 KiB

Sistema de Gestão de Equipe e Recursos - Changelog

Data de Implementação: 13 de janeiro de 2026
Commit: a1d5434
Branch: dev

📋 Visão Geral

Implementação completa de um sistema de gestão de equipe para eventos, incluindo controle de recursos, filtros avançados, restrições de integridade e cálculos automáticos de status da equipe.

🚀 Funcionalidades Implementadas

1. Sistema de Restrições FOT

Objetivo: Proteção da integridade referencial dos dados

Implementações:

  • Verificação automática de eventos associados antes da exclusão
  • Indicador visual "Com eventos" ao lado do número FOT
  • Botão de exclusão inteligente (habilitado/desabilitado)
  • Tooltip explicativo para restrições
  • Dupla verificação (API + interface)

Arquivos Modificados:

  • frontend/pages/CourseManagement.tsx
  • frontend/services/apiService.ts
  • frontend/contexts/DataContext.tsx

2. Sistema de Gestão de Recusas

Objetivo: Melhorar comunicação sobre recusas de eventos

Para Empresas:

  • Tooltips informativos no status "Recusado"
  • Exibição do motivo da recusa quando fornecido
  • Fallback para casos sem motivo específico

Para Fotógrafos:

  • Filtragem automática de eventos recusados
  • Lista limpa apenas com eventos relevantes
  • Melhoria na experiência do usuário

Arquivos Modificados:

  • frontend/pages/Dashboard.tsx
  • frontend/contexts/DataContext.tsx

3. Sistema de Filtros Avançados

Objetivo: Facilitar gerenciamento de profissionais

Filtros Disponíveis:

  • Busca textual: Nome e email dos profissionais
  • Por função: Fotógrafos, Videomakers, Editores, Assistentes
  • Por status: Designados, Disponíveis, Ocupados, Rejeitados
  • Por disponibilidade: Disponíveis vs Indisponíveis

Funcionalidades:

  • Botão "Limpar filtros" com reset automático
  • Mensagens contextuais inteligentes
  • Limpeza automática ao fechar modal
  • Interface responsiva

Arquivos Modificados:

  • frontend/pages/Dashboard.tsx

4. Sistema de Gestão de Equipe Completo

Objetivo: Controle total sobre recursos necessários

Novos Campos Implementados:

Campo Tipo Obrigatório Visibilidade
QTD Formandos Numérico Sim Todos
Qtd. Fotógrafos Numérico Sim* Empresa
Qtd. Recepcionistas Numérico Não Empresa
Qtd. Cinegrafistas Numérico Não Empresa
Qtd. Estúdios Numérico Não Empresa
Qtd. Pontos de Foto Numérico Não Empresa
Qtd. Pontos Decorados Numérico Não Empresa
Qtd. Pontos LED Numérico Não Empresa

*Obrigatório apenas para usuários empresa

Controle de Visibilidade:

  • EVENT_OWNER (Clientes): Apenas campos básicos
  • BUSINESS_OWNER (Empresas): Seção completa de gestão
  • SUPERADMIN: Acesso total

Arquivos Modificados:

  • frontend/components/EventForm.tsx
  • frontend/types.ts

5. Tabela de Gestão Geral Expandida

Objetivo: Visão imediata do status de todos os eventos

Novas Colunas:

Coluna Descrição Tipo de Cálculo
QTD Form. Quantidade de formandos Valor direto
Fotóg. Fotógrafos necessários Valor direto
Recep. Recepcionistas necessários Valor direto
Cine. Cinegrafistas necessários Valor direto
Estúd. Estúdios necessários Valor direto
Pts. Foto Pontos de foto necessários Valor direto
Pts. Dec. Pontos decorados necessários Valor direto
Pts. LED Pontos LED necessários Valor direto
Prof. OK? Status da equipe ✓ Completo / ✗ Incompleto
Fot. Falt. Fotógrafos faltantes Necessário - Aceitos
Rec. Falt. Recepcionistas faltantes Necessário - Aceitos
Cin. Falt. Cinegrafistas faltantes Necessário - Aceitos

Algoritmo de Cálculo:

  1. Identifica tipo de profissional por palavras-chave no campo role
  2. Conta apenas profissionais com status "ACEITO"
  3. Calcula diferença entre necessário e confirmado
  4. Aplica cores semânticas (verde/vermelho)

Arquivos Modificados:

  • frontend/components/EventTable.tsx
  • frontend/pages/Dashboard.tsx

🔧 Detalhes Técnicos

Arquitetura

TypeScript:

  • Extensão da interface EventData com 8 novos campos
  • Tipos seguros para todas as operações
  • Enums preservados para consistência

Componentes Modulares:

  • EventForm: Formulário condicional baseado em roles
  • EventTable: Tabela com colunas dinâmicas
  • Dashboard: Coordenação de estados e filtros
  • DataContext: Lógica centralizada de dados

Algoritmos Implementados

Cálculo de Status da Equipe:

const calculateTeamStatus = (event: EventData) => {
  const assignments = event.assignments || [];
  
  // Conta profissionais aceitos por tipo
  const acceptedFotografos = assignments.filter(a => {
    if (a.status !== "ACEITO") return false;
    const professional = professionals.find(p => p.id === a.professionalId);
    return professional && (professional.role || "").toLowerCase().includes("fot");
  }).length;
  
  // Calcula faltantes
  const fotoFaltante = Math.max(0, qtdFotografos - acceptedFotografos);
  
  // Determina se está completo
  const profissionaisOK = fotoFaltante === 0 && recepFaltante === 0 && cineFaltante === 0;
  
  return { /* status object */ };
};

Filtros de Profissionais:

const getFilteredTeamProfessionals = () => {
  return professionals.filter((professional) => {
    // Filtro por busca textual
    if (teamSearchTerm) {
      const searchLower = teamSearchTerm.toLowerCase();
      const nameMatch = (professional.name || "").toLowerCase().includes(searchLower);
      const emailMatch = (professional.email || "").toLowerCase().includes(searchLower);
      if (!nameMatch && !emailMatch) return false;
    }
    
    // Filtros por status, função e disponibilidade
    // ... lógica de filtros
    
    return true;
  });
};

🔄 Fluxo de Trabalho

Processo Estruturado:

  1. Cliente (EVENT_OWNER) cria solicitação básica de evento
  2. Sistema gera evento com status "Pendente de Aprovação"
  3. Empresa (BUSINESS_OWNER) visualiza na gestão geral
  4. Empresa edita evento definindo quantidades de recursos
  5. Empresa aprova/rejeita baseado na análise
  6. Sistema calcula automaticamente status da equipe
  7. Empresa gerencia profissionais usando filtros avançados

Benefícios:

  • Separação clara de responsabilidades
  • Análise estruturada antes de definir recursos
  • Controle total da empresa sobre planejamento
  • Dados consistentes com validação adequada

📊 Métricas da Implementação

Estatísticas do Commit:

  • Arquivos modificados: 10
  • Linhas adicionadas: +937
  • Linhas removidas: -78
  • Novos campos: 8 campos de gestão
  • Novas colunas: 12 colunas na tabela
  • Novos filtros: 4 tipos diferentes

Componentes Atualizados:

  1. EventForm.tsx - Formulário condicional
  2. EventTable.tsx - Tabela expandida
  3. Dashboard.tsx - Coordenação de funcionalidades
  4. CourseManagement.tsx - Restrições FOT
  5. DataContext.tsx - Lógica de filtros
  6. types.ts - Definições TypeScript

🎯 Impacto e Benefícios

Para Empresas (BUSINESS_OWNER):

  • Controle total sobre planejamento de recursos
  • Visão imediata do status de todos os eventos
  • Filtros poderosos para gerenciar grandes equipes
  • Cálculos automáticos de profissionais faltantes
  • Interface otimizada para gestão eficiente

Para Clientes (EVENT_OWNER):

  • Interface simplificada com campos relevantes
  • Processo de solicitação streamlined
  • Separação clara de responsabilidades

Para Fotógrafos (PHOTOGRAPHER):

  • Lista limpa sem eventos rejeitados
  • Experiência otimizada
  • Menos confusão na interface

Para o Sistema:

  • Integridade referencial protegida
  • Dados consistentes
  • Fluxo de trabalho estruturado
  • Performance otimizada

🚧 Considerações de Manutenção

Pontos de Atenção:

  1. Performance: Cálculos de status executam para cada evento da tabela
  2. Escalabilidade: Filtros podem precisar de paginação com muitos profissionais
  3. Sincronização: Mudanças em assignments devem refletir imediatamente

Melhorias Futuras Sugeridas:

  1. Cache de cálculos de status da equipe
  2. Paginação nos filtros de profissionais
  3. Notificações push para mudanças de status
  4. Relatórios de desempenho da equipe
  5. Integração com calendário para disponibilidade

📚 Referências Técnicas

APIs Utilizadas:

  • checkFotHasEvents - Verificação de eventos associados ao FOT
  • updateAssignmentStatus - Atualização de status de atribuições
  • createAgenda - Criação de eventos com novos campos

Tipos TypeScript Principais:

  • EventData - Interface principal de eventos
  • Assignment - Interface de atribuições
  • Professional - Interface de profissionais
  • UserRole - Enum de tipos de usuário

Componentes de UI:

  • Tooltips informativos
  • Badges de status coloridos
  • Filtros com reset automático
  • Tabelas responsivas
  • Formulários condicionais

Desenvolvido em: Janeiro 2026
Status: Implementado e Testado
Próximos Passos: Monitoramento de performance e feedback dos usuários