- 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
276 lines
No EOL
9.2 KiB
Markdown
276 lines
No EOL
9.2 KiB
Markdown
# 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:**
|
|
```typescript
|
|
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:**
|
|
```typescript
|
|
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 |