- 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
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.tsxfrontend/services/apiService.tsfrontend/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.tsxfrontend/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.tsxfrontend/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:
- Identifica tipo de profissional por palavras-chave no campo
role - Conta apenas profissionais com status "ACEITO"
- Calcula diferença entre necessário e confirmado
- Aplica cores semânticas (verde/vermelho)
Arquivos Modificados:
frontend/components/EventTable.tsxfrontend/pages/Dashboard.tsx
🔧 Detalhes Técnicos
Arquitetura
TypeScript:
- Extensão da interface
EventDatacom 8 novos campos - Tipos seguros para todas as operações
- Enums preservados para consistência
Componentes Modulares:
EventForm: Formulário condicional baseado em rolesEventTable: Tabela com colunas dinâmicasDashboard: Coordenação de estados e filtrosDataContext: 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:
- Cliente (EVENT_OWNER) cria solicitação básica de evento
- Sistema gera evento com status "Pendente de Aprovação"
- Empresa (BUSINESS_OWNER) visualiza na gestão geral
- Empresa edita evento definindo quantidades de recursos
- Empresa aprova/rejeita baseado na análise
- Sistema calcula automaticamente status da equipe
- 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:
EventForm.tsx- Formulário condicionalEventTable.tsx- Tabela expandidaDashboard.tsx- Coordenação de funcionalidadesCourseManagement.tsx- Restrições FOTDataContext.tsx- Lógica de filtrostypes.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:
- Performance: Cálculos de status executam para cada evento da tabela
- Escalabilidade: Filtros podem precisar de paginação com muitos profissionais
- Sincronização: Mudanças em assignments devem refletir imediatamente
Melhorias Futuras Sugeridas:
- Cache de cálculos de status da equipe
- Paginação nos filtros de profissionais
- Notificações push para mudanças de status
- Relatórios de desempenho da equipe
- Integração com calendário para disponibilidade
📚 Referências Técnicas
APIs Utilizadas:
checkFotHasEvents- Verificação de eventos associados ao FOTupdateAssignmentStatus- Atualização de status de atribuiçõescreateAgenda- Criação de eventos com novos campos
Tipos TypeScript Principais:
EventData- Interface principal de eventosAssignment- Interface de atribuiçõesProfessional- Interface de profissionaisUserRole- 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