Feat ajuste acesso #5

Merged
killer-cf merged 4 commits from feat-ajuste-acesso into master 2025-10-30 17:02:20 +00:00
42 changed files with 1574 additions and 5848 deletions
Showing only changes of commit 1b751efc5e - Show all commits

View File

@@ -1,371 +0,0 @@
# ✅ COMO ASSOCIAR FUNCIONÁRIO A USUÁRIO
**Data:** 30 de outubro de 2025
**Objetivo:** Associar cadastro de funcionário a usuários para habilitar funcionalidades como férias
---
## 🎯 PROBLEMA RESOLVIDO
**ANTES:**
❌ "Perfil de funcionário não encontrado" ao tentar solicitar férias
❌ Usuários não tinham acesso a funcionalidades de RH
❌ Sem interface para fazer associação
**DEPOIS:**
✅ Interface completa em **TI > Gerenciar Usuários**
✅ Busca e seleção visual de funcionários
✅ Validação de duplicidade
✅ Opção de associar, alterar e desassociar
---
## 🚀 COMO USAR (PASSO A PASSO)
### 1⃣ Acesse o Gerenciamento de Usuários
```
1. Faça login como TI_MASTER
2. Menu lateral > Tecnologia da Informação
3. Click em "Gerenciar Usuários"
```
---
### 2⃣ Localize o Usuário
**Opção A: Busca Direta**
- Digite nome, matrícula ou email no campo de busca
**Opção B: Filtros**
- Filtre por status: Todos / Ativos / Bloqueados / Inativos
**Visual:**
```
┌─────────────────────────────────────────────────┐
│ Matrícula │ Nome │ Email │ Funcionário │ Status │
├───────────┼──────┼───────┼─────────────┼────────┤
│ 00001 │ TI │ ti@ │ ⚠️ Não │ ✅ │
│ │Master│gov.br │ associado │ Ativo │
└─────────────────────────────────────────────────┘
```
---
### 3⃣ Associar Funcionário
**Click no botão azul "Associar" ou "Alterar"**
Um modal abrirá com:
```
┌─────────────────────────────────────────────┐
│ Associar Funcionário ao Usuário │
├─────────────────────────────────────────────┤
│ Usuário: Gestor TI Master (00001) │
│ │
│ Buscar Funcionário: │
│ [Digite nome, CPF ou matrícula...] │
│ │
│ Selecione o Funcionário: │
│ ┌─────────────────────────────────────────┐ │
│ │ ○ João da Silva │ │
│ │ CPF: 123.456.789-00 │ │
│ │ Cargo: Analista │ │
│ ├─────────────────────────────────────────┤ │
│ │ ● Maria Santos (SELECIONADO) │ │
│ │ CPF: 987.654.321-00 │ │
│ │ Cargo: Gestor │ │
│ └─────────────────────────────────────────┘ │
│ │
│ [Cancelar] [Desassociar] [Associar] │
└─────────────────────────────────────────────┘
```
---
### 4⃣ Buscar e Selecionar
1. **Busque o funcionário** (digite nome, CPF ou matrícula)
2. **Click no radio button** ao lado do funcionário correto
3. **Verifique os dados** (nome, CPF, cargo)
4. **Click em "Associar"**
---
### 5⃣ Confirmação
**Sucesso!** Você verá:
```
Alert: "Funcionário associado com sucesso!"
```
A coluna "Funcionário" agora mostrará:
```
✅ Associado (badge verde)
```
---
## 🧪 TESTAR O SISTEMA DE FÉRIAS
### Após associar o funcionário:
1. **Recarregue a página** (F5)
2. **Acesse seu Perfil:**
- Click no avatar (canto superior direito)
- "Meu Perfil"
3. **Vá para "Minhas Férias":**
- Agora deve mostrar o **Dashboard de Férias**
- Sem mais erro de "Perfil não encontrado"!
4. **Solicite Férias:**
- Click em "Solicitar Novas Férias"
- Siga o wizard de 3 passos
- Teste o calendário interativo
---
## 🔧 FUNCIONALIDADES DO MODAL
### ✅ Associar Novo Funcionário
- Busca em tempo real
- Ordenação alfabética
- Exibe nome, CPF, matrícula e cargo
### 🔄 Alterar Funcionário Associado
- Mesma interface
- Alert avisa se já tem associação
- Atualiza automaticamente
### ❌ Desassociar Funcionário
- Botão vermelho "Desassociar"
- Confirmação antes de executar
- Remove a associação
---
## 🛡️ VALIDAÇÕES E SEGURANÇA
### ✅ O Sistema Verifica:
1. **Funcionário existe?**
```
❌ Erro: "Funcionário não encontrado"
```
2. **Já está associado a outro usuário?**
```
❌ Erro: "Este funcionário já está associado ao usuário: João Silva (12345)"
```
3. **Funcionário selecionado?**
```
❌ Botão "Associar" fica desabilitado
```
---
## 🎨 INDICADORES VISUAIS
### Coluna "Funcionário"
**✅ Associado:**
```
🟢 Badge verde com ícone de check
```
**⚠️ Não Associado:**
```
🟡 Badge amarelo com ícone de alerta
```
### Botão de Ação
**🔵 Associar** (azul)
- Usuário sem funcionário
**🔵 Alterar** (azul)
- Usuário com funcionário já associado
---
## 📊 ESTATÍSTICAS
Você pode ver quantos usuários têm/não têm funcionários:
```
Cards no topo:
┌─────────┬─────────┬────────────┬──────────┐
│ Total │ Ativos │ Bloqueados │ Inativos │
│ 42 │ 38 │ 2 │ 2 │
└─────────┴─────────┴────────────┴──────────┘
```
---
## 🐛 TROUBLESHOOTING
### Problema: "Funcionário já está associado"
**Causa:** Funcionário está vinculado a outro usuário
**Solução:**
1. Identifique qual usuário tem o funcionário (mensagem de erro mostra)
2. Desassocie do usuário antigo primeiro
3. Associe ao usuário correto
---
### Problema: Lista de funcionários vazia
**Causa:** Nenhum funcionário cadastrado no sistema
**Solução:**
1. Vá em **Recursos Humanos > Gestão de Funcionários**
2. Click em "Cadastrar Funcionário"
3. Preencha os dados e salve
4. Volte para associar
---
### Problema: Busca não funciona
**Causa:** Nome/CPF/matrícula não confere
**Solução:**
1. Limpe o campo de busca
2. Veja lista completa
3. Procure visualmente
4. Click para selecionar
---
## 💡 DICAS PRO
### 1. Associação em Lote
Para associar vários usuários:
```
1. Filtre por "Não associado"
2. Associe um por vez
3. Use busca rápida de funcionários
```
### 2. Verificar Associações
```
Filtro de coluna "Funcionário":
- Badge verde = OK
- Badge amarelo = Pendente
```
### 3. Organização
```
Recomendação:
- Associe funcionários assim que criar usuários
- Mantenha dados sincronizados
- Revise periodicamente
```
---
## 🎯 CASO DE USO: SEU TESTE DE FÉRIAS
### Para o seu usuário TI Master:
1. **Acesse:** TI > Gerenciar Usuários
2. **Localize:** Seu usuário (ti.master@sgse.pe.gov.br)
3. **Click:** Botão azul "Associar"
4. **Busque:** Seu nome ou crie um funcionário de teste
5. **Selecione:** O funcionário correto
6. **Confirme:** Click em "Associar"
7. **Teste:** Perfil > Minhas Férias
✅ **Pronto!** Agora você pode testar todo o sistema de férias!
---
## 📝 CHECKLIST DE VERIFICAÇÃO
Após associar, verifique:
- [ ] Badge mudou de amarelo para verde
- [ ] Recarreguei a página
- [ ] Acessei meu perfil
- [ ] Abri aba "Minhas Férias"
- [ ] Dashboard carregou corretamente
- [ ] Não aparece mais erro
- [ ] Posso clicar em "Solicitar Férias"
- [ ] Wizard abre normalmente
---
## 🎉 RESULTADO ESPERADO
**Interface Completa:**
```
TI > Gerenciar Usuários
└── Tabela com coluna "Funcionário"
├── Badge: ✅ Associado / ⚠️ Não associado
└── Botão: [Associar] ou [Alterar]
└── Modal com:
├── Busca de funcionários
├── Lista com radio buttons
└── Botões: Cancelar | Desassociar | Associar
```
---
## 🔗 ARQUIVOS MODIFICADOS
### Frontend:
```
apps/web/src/routes/(dashboard)/ti/usuarios/+page.svelte
├── + Coluna "Funcionário" na tabela
├── + Badge de status (Associado/Não associado)
├── + Botão "Associar/Alterar"
├── + Modal de seleção de funcionários
├── + Busca em tempo real
└── + Funções: associar/desassociar
```
### Backend:
```
packages/backend/convex/usuarios.ts
├── + associarFuncionario() mutation
├── + desassociarFuncionario() mutation
└── + Validação de duplicidade
```
---
## ✅ CONCLUSÃO
Agora você tem uma **interface completa e profissional** para:
✅ Associar funcionários a usuários
✅ Alterar associações
✅ Desassociar quando necessário
✅ Buscar e filtrar funcionários
✅ Validações automáticas
✅ Feedback visual claro
**RESULTADO:** Todos os usuários podem agora acessar funcionalidades que dependem de cadastro de funcionário, como **Gestão de Férias**! 🎉
---
**Desenvolvido por:** Equipe SGSE
**Data:** 30 de outubro de 2025
**Versão:** 1.0.0 - Associação de Funcionários

View File

@@ -1,256 +0,0 @@
# ✅ CORREÇÕES COMPLETAS - Emails e Notificações
**Data:** 30/10/2025
**Status:****TUDO FUNCIONANDO 100%**
---
## 🎯 PROBLEMAS IDENTIFICADOS E RESOLVIDOS
### 1. ❌ → ✅ **Sistema de Email NÃO estava funcionando**
#### **Problema:**
- O sistema apenas **simulava** o envio de emails
- Mensagem no código: `"⚠️ AVISO: Envio de email simulado (nodemailer não instalado)"`
- Emails nunca eram realmente enviados, mesmo com SMTP configurado
#### **Solução Aplicada:**
```
✅ Instalado: nodemailer + @types/nodemailer
✅ Implementado: Envio REAL de emails via SMTP
✅ Validação: Requer configuração SMTP testada antes de enviar
✅ Tratamento: Erros detalhados + retry automático
✅ Cron Job: Processa fila a cada 2 minutos automaticamente
```
#### **Arquivo Modificado:**
- `packages/backend/convex/email.ts`
- Linha 147-243: Implementação real com nodemailer
- Linha 248-284: Processamento da fila corrigido
#### **Cron Job Adicionado:**
- `packages/backend/convex/crons.ts`
- Nova linha 36-42: Processa fila de emails a cada 2 minutos
---
### 2. ❌ → ✅ **Página de Notificações NÃO enviava nada**
#### **Problema:**
- Função `enviarNotificacao()` tinha `// TODO: Implementar envio`
- Apenas exibia `console.log` e alert de sucesso falso
- Nenhuma notificação era realmente enviada
#### **Solução Aplicada:**
```
✅ Implementado: Envio real para CHAT
✅ Implementado: Envio real para EMAIL
✅ Suporte: Envio combinado (AMBOS canais)
✅ Feedback: Mensagens específicas por canal
✅ Validações: Email obrigatório para envio por email
```
#### **Arquivo Modificado:**
- `apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte`
- Linha 20-130: Implementação completa do envio real
#### **Funcionalidades:**
- **Chat:** Cria conversa individual + envia mensagem
- **Email:** Enfileira email (processado pelo cron)
- **Ambos:** Envia pelos dois canais simultaneamente
- **Templates:** Suporte completo a templates de mensagem
---
### 3. ✅ **Warnings de Acessibilidade Corrigidos**
#### **Problemas Encontrados:**
- Botões sem `aria-label` (4 botões)
- Elementos não-interativos com eventos (form, ul)
- Labels sem controles associados (1 ocorrência)
#### **Arquivos Corrigidos:**
**1. `apps/web/src/lib/components/Sidebar.svelte`**
- Linha 232: Adicionado `svelte-ignore` para `<ul tabindex="0">`
- Linha 473-475: Adicionado `svelte-ignore` para `<form>` com onclick
**2. `apps/web/src/lib/components/FileUpload.svelte`**
- Linha 268: Trocado `<label>` por `<div>` (texto de erro)
**3. `apps/web/src/routes/(dashboard)/ti/perfis/+page.svelte`**
- Linha 414: Botão "Ver Detalhes" + `aria-label`
- Linha 443: Botão "Editar" + `aria-label`
- Linha 466: Botão "Clonar" + `aria-label`
- Linha 489: Botão "Excluir" + `aria-label`
- Linha 932-935: Botões com `type="button"`
---
## 📋 COMO TESTAR
### **1. Testar Envio de Email**
#### **Passo 1: Configurar SMTP** (se ainda não fez)
1. Vá em: `TI > Configurações de Email`
2. Preencha:
```
Servidor SMTP: smtp.gmail.com (ou seu servidor)
Porta: 587 (TLS) ou 465 (SSL)
Usuário: seu-email@gmail.com
Senha: sua-senha-app (Gmail requer senha de app)
```
3. Clique em **"Testar Conexão SMTP"**
4. Aguarde mensagem: ✅ "Conexão testada com sucesso!"
#### **Passo 2: Enviar Notificação**
1. Vá em: `TI > Notificações`
2. Selecione:
- **Destinatário:** Qualquer usuário
- **Canal:** Email (ou Ambos)
- **Template:** Escolha um template ou escreva mensagem
3. Clique em **"Enviar"**
4. Aguarde: ✅ "Email enfileirado para envio!"
#### **Passo 3: Verificar Envio**
- **Método 1:** Aguarde 2 minutos (cron processa automaticamente)
- **Método 2:** Verifique logs do Convex no terminal
**Resultado Esperado:**
```
✅ Email enviado com sucesso!
Para: destinatario@email.com
Assunto: [Assunto do email]
Message ID: <123abc@...>
```
---
### **2. Testar Envio de Chat**
1. Vá em: `TI > Notificações`
2. Selecione:
- **Destinatário:** Qualquer usuário online
- **Canal:** Chat
- **Mensagem:** Digite algo
3. Clique em **"Enviar"**
4. Abra o Chat (ícone no canto superior direito)
5. Verifique: A mensagem deve aparecer na conversa
---
## 🎯 FUNCIONALIDADES IMPLEMENTADAS
### **Sistema de Email:**
- ✅ Envio real via SMTP (nodemailer)
- ✅ Fila de emails pendentes
- ✅ Processamento automático (cron a cada 2 min)
- ✅ Retry automático (até 3 tentativas)
- ✅ Status detalhado (pendente, enviando, enviado, falha)
- ✅ Logs de erro detalhados
- ✅ Validação de configuração SMTP testada
### **Sistema de Notificações:**
- ✅ Envio para Chat (mensagem imediata)
- ✅ Envio para Email (enfileirado)
- ✅ Envio Combinado (Chat + Email)
- ✅ Suporte a Templates
- ✅ Mensagem Personalizada
- ✅ Feedback específico por canal
### **Acessibilidade:**
- ✅ Todos os botões com `aria-label`
- ✅ Botões com `type="button"` explícito
- ✅ Warnings do Svelte suprimidos apropriadamente
- ✅ Labels sem controles corrigidas
---
## 📦 DEPENDÊNCIAS INSTALADAS
```bash
✅ nodemailer@7.0.10
✅ @types/nodemailer@7.0.3
```
---
## 🔧 ARQUIVOS MODIFICADOS
### **Backend:**
1. ✅ `packages/backend/convex/email.ts` (implementação real)
2. ✅ `packages/backend/convex/crons.ts` (cron job adicionado)
### **Frontend:**
3. ✅ `apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte` (envio real)
4. ✅ `apps/web/src/lib/components/Sidebar.svelte` (acessibilidade)
5. ✅ `apps/web/src/lib/components/FileUpload.svelte` (acessibilidade)
6. ✅ `apps/web/src/routes/(dashboard)/ti/perfis/+page.svelte` (acessibilidade)
---
## ⚠️ IMPORTANTE: CONFIGURAÇÃO SMTP
### **Gmail:**
```
Servidor: smtp.gmail.com
Porta: 587 (TLS)
Usuário: seu-email@gmail.com
Senha: [Senha de App - não a senha normal]
```
**Como gerar Senha de App no Gmail:**
1. Vá em: https://myaccount.google.com/security
2. Ative a **"Verificação em duas etapas"**
3. Acesse: **"Senhas de app"**
4. Gere uma senha para "Email" ou "Outro"
5. Use essa senha de 16 dígitos
### **Outros Provedores:**
- **Outlook/Hotmail:** smtp-mail.outlook.com (porta 587)
- **Yahoo:** smtp.mail.yahoo.com (porta 587)
- **SMTP Corporativo:** Verifique com sua equipe de TI
---
## 🚀 PRÓXIMOS PASSOS
### **1. Configure o SMTP** (se ainda não fez)
- Vá em: `TI > Configurações de Email`
- Preencha os dados do servidor
- **TESTE A CONEXÃO** (botão "Testar Conexão SMTP")
### **2. Teste o Envio**
- Vá em: `TI > Notificações`
- Envie uma notificação de teste para você mesmo
### **3. Monitore os Logs**
- Observe o terminal do Convex
- Logs mostrarão: `✅ Email enviado com sucesso!` ou erros
---
## 📊 STATUS FINAL
```
✅ Sistema de Email: 100% Funcional
✅ Sistema de Notificações: 100% Funcional
✅ Envio para Chat: 100% Funcional
✅ Warnings Corrigidos: 100% Completo
✅ Cron Job: Ativo (processa a cada 2 min)
✅ Acessibilidade: Conforme padrões WCAG
```
---
## 🎉 **TUDO PRONTO E FUNCIONANDO!**
**Agora você pode:**
- ✅ Enviar emails REAIS via SMTP
- ✅ Enviar notificações pelo Chat
- ✅ Enviar por ambos os canais
- ✅ Usar templates de mensagem
- ✅ Sistema processa automaticamente
**Sem mais warnings de acessibilidade!** 🚀

View File

@@ -1,147 +0,0 @@
# 🧪 Guia: Criar Usuário de Teste para Férias
## 📋 Credenciais de Teste
```
Login: teste.ferias
Senha: Teste@2025
Email: teste.ferias@sgse.pe.gov.br
Nome: João Silva (Teste)
```
---
## 🔧 Passo a Passo
### **1. Criar um Símbolo (se não existir)**
1. Acesse: `http://localhost:5173/recursos-humanos/simbolos`
2. Clique em **"Novo Símbolo"**
3. Preencha:
- **Cargo:** Analista Administrativo
- **Tipo:** Cargo Comissionado
- **Nível:** CC-3
- **Valor:** R$ 3.500,00
4. Clique em **"Salvar"**
---
### **2. Criar Funcionário**
1. Acesse: `http://localhost:5173/recursos-humanos/funcionarios/cadastro`
2. Preencha os dados:
#### **Dados Pessoais:**
- **Nome Completo:** João Silva (Teste)
- **CPF:** 111.222.333-44
- **RG:** 1234567
- **Data de Nascimento:** 15/05/1990
#### **Contato:**
- **Email:** teste.ferias@sgse.pe.gov.br
- **Telefone:** (81) 98765-4321
- **Endereço:** Rua de Teste, 123
- **Bairro:** Centro
- **Cidade:** Recife
- **UF:** PE
- **CEP:** 50000-000
#### **Dados Funcionais:**
- **Matrícula:** teste.ferias
- **Data de Admissão:** 15/01/2023 ⚠️ **IMPORTANTE: Quase 2 anos atrás!**
- **Símbolo:** Selecione o símbolo criado acima
- **Regime de Trabalho:** CLT
- **Cargo/Função:** Analista Administrativo
- **Status de Férias:** Ativo
#### **Filiação:**
- **Nome do Pai:** José Silva
- **Nome da Mãe:** Maria Silva
#### **Outros:**
- **Naturalidade:** Recife/PE
- **Sexo:** Masculino
- **Estado Civil:** Solteiro
- **Nacionalidade:** Brasileira
- **Grau de Instrução:** Superior
3. Clique em **"Salvar"**
---
### **3. Criar Usuário e Associar**
1. Acesse: `http://localhost:5173/ti/usuarios`
2. Clique em **"Novo Usuário"**
3. Preencha:
- **Matrícula:** teste.ferias
- **Nome:** João Silva (Teste)
- **Email:** teste.ferias@sgse.pe.gov.br
- **Perfil/Role:** Usuario (perfil básico)
- **Senha Inicial:** Teste@2025
4. Clique em **"Criar"**
5. **Associar Funcionário:**
- Na lista de usuários, localize "João Silva (Teste)"
- Clique no botão **"Associar/Alterar"** (ao lado de "Não associado")
- Selecione o funcionário "João Silva (Teste)" criado anteriormente
- Clique em **"Associar"**
---
## ✅ Testar o Sistema de Férias
1. **Faça Logout** do usuário TI Master
2. **Faça Login** com:
```
Login: teste.ferias
Senha: Teste@2025
```
3. Acesse: `http://localhost:5173/perfil`
4. Clique na aba **"Minhas Férias"**
5. Clique em **"Solicitar Novas Férias"**
---
## 🎯 O Que Testar
### **Saldo Esperado:**
- **Ano 2024:** ~30 dias (ano completo)
- **Ano 2025:** ~30 dias (proporcionais até dez/2025)
### **Validações CLT:**
- ✅ Máximo 3 períodos por ano
- ✅ Mínimo 5 dias por período
- ✅ Um período deve ter pelo menos 14 dias
- ✅ Não pode usar mais dias que o saldo disponível
### **Teste:**
1. Selecione o ano (2024 ou 2025)
2. Adicione períodos no calendário
3. Verifique se as validações aparecem
4. Envie a solicitação
5. Como TI Master, aprove/reprove a solicitação
---
## 🔧 Dicas de Teste
### **Testar Servidor Público PE:**
Se quiser testar as regras de Servidor Público PE:
1. Edite o funcionário
2. Altere **"Regime de Trabalho"** para **"Servidor Público Estadual PE"**
3. As regras mudam para:
- ✅ Máximo 2 períodos
- ✅ Mínimo 10 dias por período
- ✅ Não permite abono
### **Testar Diferentes Anos de Admissão:**
- Data mais antiga = mais períodos aquisitivos
- Data recente = menos dias disponíveis
---
## 🎉 Pronto!
Agora você pode testar todo o sistema de férias com um usuário real! 🚀

View File

@@ -1,110 +0,0 @@
# 🚀 GUIA RÁPIDO: Enviar Emails e Notificações
## ⚡ 3 Passos para Começar
### 1⃣ **Configurar SMTP** (Fazer 1 vez)
1. Acesse: `http://localhost:5173/ti/configuracoes-email`
2. Preencha:
```
📧 Remetente: SGSE - Sistema de Gerenciamento
📧 Email: sgse@pe.gov.br (ou seu email)
🌐 Servidor: smtp.gmail.com
🔌 Porta: 587
🔐 Usuário: seu-email@gmail.com
🔑 Senha: sua-senha-de-app
🔒 TLS/SSL: Sim
```
3. Clique: **"Testar Conexão SMTP"**
4. Aguarde: ✅ "Conexão testada com sucesso!"
### 2⃣ **Enviar Notificação**
1. Acesse: `http://localhost:5173/ti/notificacoes`
2. Selecione:
- **Destinatário:** João Silva (ou qualquer usuário)
- **Canal:**
- 💬 Chat = Mensagem imediata
- 📧 Email = Envio em até 2 minutos
- 🔄 Ambos = Chat + Email
- **Mensagem:** Escolha template ou escreva
3. Clique: **"Enviar"**
### 3⃣ **Verificar Envio**
#### **Chat:**
- ✅ Imediato: Abra o chat e veja a mensagem
#### **Email:**
- ⏱️ Aguarde 2 minutos (processamento automático)
- 📋 Verifique logs no terminal do Convex:
```
✅ Email enviado com sucesso!
Para: destinatario@email.com
```
---
## 🔑 **IMPORTANTE: Senha de App do Gmail**
O Gmail **NÃO aceita** senha normal!
### **Como gerar:**
1. Acesse: https://myaccount.google.com/security
2. Ative: **"Verificação em duas etapas"**
3. Vá em: **"Senhas de app"**
4. Gere: Senha para "Email"
5. Use: Senha de 16 caracteres gerada
---
## ✅ **Canais Disponíveis**
| Canal | Velocidade | Ideal Para |
|-------|------------|------------|
| 💬 **Chat** | Imediato | Mensagens urgentes |
| 📧 **Email** | 2 minutos | Notificações formais |
| 🔄 **Ambos** | Variado | Comunicações importantes |
---
## 🧪 **Teste Rápido**
```
1. Configure SMTP (Gmail)
2. Envie notificação para você mesmo
3. Canal: Ambos
4. Verifique:
✅ Chat: Mensagem aparece imediatamente
✅ Email: Chega em até 2 minutos
```
---
## ❓ **Troubleshooting**
### **Email não chega?**
1. ✅ Configuração SMTP testada?
2. ✅ Senha de App (não senha normal)?
3. ✅ Aguardou 2 minutos?
4. ✅ Verifique spam/lixo eletrônico
### **Chat não funciona?**
1. ✅ Destinatário tem acesso ao chat?
2. ✅ Usuário está cadastrado?
### **Erro "Configuração não testada"?**
1. ✅ Clique em "Testar Conexão SMTP"
2. ✅ Aguarde mensagem de sucesso
3. ✅ Tente enviar novamente
---
## 📄 **Documentação Completa**
Veja: `CORRECOES_EMAILS_NOTIFICACOES_COMPLETO.md`
---
**✅ PRONTO PARA USO!** 🎉

View File

@@ -1,183 +0,0 @@
# Interface de Criação e Edição de Perfis Customizados - CONCLUÍDA ✅
## 📋 Resumo da Implementação
A interface completa para gerenciar perfis customizados foi implementada com sucesso em:
**`apps/web/src/routes/(dashboard)/ti/perfis/+page.svelte`**
## 🎯 Funcionalidades Implementadas
### 1. **Listagem de Perfis** 📊
- Visualização em tabela com:
- Nome e descrição
- Nível de acesso
- Número de usuários usando o perfil
- Criador e data de criação
- Ações disponíveis
### 2. **Criação de Novos Perfis**
- Formulário completo com:
- Nome do perfil (obrigatório)
- Descrição detalhada (obrigatório)
- Nível de acesso (mínimo 3 para perfis customizados)
- Opção para clonar permissões de perfil existente
- Validações:
- Campos obrigatórios
- Nível mínimo
- Autenticação do usuário
- Verificação de duplicidade (no backend)
### 3. **Edição de Perfis** ✏️
- Atualização de:
- Nome do perfil
- Descrição
- Informação sobre nível (não editável após criação)
- Validações de segurança
### 4. **Visualização Detalhada** 👁️
- Informações completas do perfil:
- Dados básicos
- Permissões de menu configuradas
- Lista de usuários com este perfil
- Links para:
- Editar permissões no Painel de Permissões
- Gerenciar usuários
### 5. **Clonagem de Perfis** 📋
- Criação rápida de novo perfil baseado em existente
- Copia todas as permissões automaticamente
- Prompt interativo para nome e descrição
### 6. **Exclusão de Perfis** 🗑️
- Verificação de uso (não permite excluir se houver usuários)
- Confirmação antes de excluir
- Remoção em cascata de:
- Role correspondente
- Permissões associadas
- Permissões de menu
## 🔧 Integrações Backend
A interface utiliza as seguintes funções do backend:
### Queries
- `api.perfisCustomizados.listarPerfisCustomizados` - Lista todos os perfis
- `api.perfisCustomizados.obterPerfilComPermissoes` - Detalhes completos
- `api.roles.listar` - Lista roles para clonagem
### Mutations
- `api.perfisCustomizados.criarPerfilCustomizado` - Cria novo perfil
- `api.perfisCustomizados.editarPerfilCustomizado` - Atualiza perfil
- `api.perfisCustomizados.excluirPerfilCustomizado` - Remove perfil
- `api.perfisCustomizados.clonarPerfil` - Clona perfil existente
## 🎨 UI/UX Features
### Design
- Layout responsivo (mobile-friendly)
- Cards e modais para diferentes modos
- Ícones SVG intuitivos
- Badges para status e informações
### Feedback ao Usuário
- Mensagens de sucesso/erro/aviso
- Estados de carregamento
- Confirmações para ações destrutivas
- Desabilitação de botões durante processamento
### Navegação
- Botão "Voltar" sempre visível fora do modo listagem
- Breadcrumbs implícitos
- Links contextuais
## 🔐 Segurança
### Controle de Acesso
- Uso do `ProtectedRoute` para TI_MASTER e ADMIN
- Verificação de autenticação antes de cada ação
- Uso do `authStore.usuario._id` para identificação
### Validações
- Frontend: Campos obrigatórios e regras de negócio
- Backend: Validações adicionais e controle de integridade
- Type-safe com TypeScript
## 📱 Responsividade
- Grid adaptável: 1 coluna (mobile) → 2 colunas (desktop)
- Tabelas com scroll horizontal em telas pequenas
- Botões e formulários otimizados para touch
## 🎯 Próximos Passos (Opcionais)
1. **Melhorias de UX:**
- Modal para criação/edição ao invés de troca de modo
- Drag-and-drop para reordenar permissões
- Busca e filtros na listagem
2. **Features Avançadas:**
- Histórico de alterações do perfil
- Exportar/importar configurações de perfis
- Preview das permissões antes de salvar
3. **Relatórios:**
- Matriz de acesso por perfil
- Comparativo entre perfis
- Auditoria de uso
## 📝 Como Usar
### Para Acessar:
1. Faça login como TI_MASTER ou ADMIN
2. Navegue para: **Dashboard TI → Gerenciar Perfis**
3. Ou acesse diretamente: `/ti/perfis`
### Para Criar um Perfil:
1. Clique em "Novo Perfil"
2. Preencha nome, descrição e nível
3. (Opcional) Selecione um perfil para clonar permissões
4. Clique em "Criar Perfil"
### Para Editar:
1. Na listagem, clique no ícone de editar (lápis)
2. Altere os campos desejados
3. Clique em "Salvar Alterações"
### Para Configurar Permissões:
1. Clique em "Ver Detalhes" (ícone de olho)
2. Na seção de permissões, clique em "Editar Permissões"
3. Será redirecionado para o Painel de Permissões
### Para Clonar:
1. Clique no ícone de clonar (dois quadrados)
2. Digite o nome do novo perfil
3. Digite a descrição
4. O perfil será criado com as mesmas permissões
### Para Excluir:
1. Clique no ícone de excluir (lixeira)
2. Confirme a ação
3. **Nota:** Só é possível excluir perfis sem usuários
## ✅ Status
- ✅ Backend completo e testado
- ✅ Interface frontend implementada
- ✅ Integração frontend-backend
- ✅ Validações e segurança
- ✅ Tratamento de erros
- ✅ UI/UX responsiva
- ✅ Sem erros de linting
- ✅ TypeScript type-safe
## 🎉 Conclusão
A interface de criação e edição de perfis customizados está **100% funcional e pronta para uso**. A implementação segue as melhores práticas de:
- Clean Code
- Segurança
- Usabilidade
- Manutenibilidade
O sistema permite que administradores TI criem perfis de acesso personalizados de forma intuitiva e segura, com controle total sobre permissões e usuários.

View File

@@ -1,350 +0,0 @@
# 📋 REGRAS DE FÉRIAS - CLT vs SERVIDOR PÚBLICO ESTADUAL DE PERNAMBUCO
**Data:** 30 de outubro de 2025
**Status:****IMPLEMENTADO NO SISTEMA**
---
## 🎯 VISÃO GERAL
O sistema SGSE agora suporta **2 regimes de trabalho** com regras específicas de férias:
1. **CLT** - Consolidação das Leis do Trabalho
2. **Servidor Público Estadual de Pernambuco** - Lei nº 6.123/1968
---
## ⚖️ CLT - CONSOLIDAÇÃO DAS LEIS DO TRABALHO
### **Legislação:**
- Art. 129 a 153 da CLT (Decreto-Lei nº 5.452/1943)
### **Regras Básicas:**
| Item | Regra |
|------|-------|
| **Dias de Férias** | 30 dias por ano trabalhado |
| **Período Aquisitivo** | 12 meses de trabalho |
| **Período Concessivo** | 12 meses após o período aquisitivo |
| **Divisão em Períodos** | Até **3 períodos** |
| **Período Principal** | Mínimo **14 dias corridos** |
| **Períodos Secundários** | Mínimo **5 dias corridos** cada |
| **Abono Pecuniário** | ✅ Permitido vender 1/3 (10 dias) |
| **Idade Especial** | < 18 anos ou > 50 anos: férias em 1 período único |
| **Vencimento** | Férias não gozadas perdem-se após período concessivo |
### **Validações no Sistema (CLT):**
```typescript
Máximo 3 períodos
Período principal: mínimo 14 dias
Períodos secundários: mínimo 5 dias
Total não pode exceder saldo disponível
Períodos não podem sobrepor
Abono pecuniário: até 10 dias
```
### **Exemplo Prático (CLT):**
**Funcionário:** João Silva (CLT)
**Admissão:** 01/01/2024
**Período Aquisitivo:** 01/01/2024 a 31/12/2024
**Período Concessivo:** 01/01/2025 a 31/12/2025
**Solicitação Válida:**
```
Período 1: 14 dias (Principal)
Período 2: 10 dias (Secundário)
Período 3: 6 dias (Secundário)
Total: 30 dias ✅
```
**Solicitação Inválida:**
```
Período 1: 10 dias ❌ (Falta período de 14 dias)
Período 2: 10 dias
Período 3: 10 dias
```
---
## 🏛️ SERVIDOR PÚBLICO ESTADUAL DE PERNAMBUCO
### **Legislação:**
- Lei nº 6.123/1968 - Estatuto dos Funcionários Públicos Civis do Estado de PE
- Art. 84 a 90
### **Regras Básicas:**
| Item | Regra |
|------|-------|
| **Dias de Férias** | 30 dias por ano de exercício |
| **Período Aquisitivo** | 12 meses de exercício |
| **Período Concessivo** | Ano subsequente ao aquisitivo |
| **Divisão em Períodos** | Até **2 períodos** (NÃO 3!) |
| **Dias Mínimos por Período** | **10 dias corridos** (NÃO 5!) |
| **Abono Pecuniário** | ❌ **NÃO PERMITIDO** |
| **Servidor > 10 anos** | Pode acumular até 2 períodos |
| **Docentes** | Preferência: 20/12 a 10/01 |
| **Gestante** | Pode antecipar ou prorrogar |
| **Vencimento** | Mais flexível que CLT |
### **Validações no Sistema (Servidor PE):**
```typescript
Máximo 2 períodos (NÃO 3)
Cada período: mínimo 10 dias (NÃO 5)
Total não pode exceder saldo disponível
Períodos não podem sobrepor
Abono pecuniário: NÃO PERMITIDO
📅 Aviso para docentes: período 20/12 a 10/01
```
### **Exemplo Prático (Servidor PE):**
**Funcionário:** Maria Santos (Servidor PE)
**Posse:** 01/03/2024
**Período Aquisitivo:** 01/03/2024 a 28/02/2025
**Período Concessivo:** 01/03/2025 a 28/02/2026
**Solicitação Válida:**
```
Período 1: 20 dias
Período 2: 10 dias
Total: 30 dias ✅
```
**Solicitação Inválida:**
```
Período 1: 10 dias
Período 2: 10 dias
Período 3: 10 dias ❌ (Máximo 2 períodos)
```
**Solicitação Inválida 2:**
```
Período 1: 20 dias
Período 2: 5 dias ❌ (Mínimo 10 dias por período)
```
---
## 📊 COMPARAÇÃO DIRETA
| Critério | CLT | Servidor Público PE |
|----------|-----|---------------------|
| **Dias Anuais** | 30 dias | 30 dias |
| **Max Períodos** | 3 | 2 |
| **Min Dias/Período** | 5 dias | 10 dias |
| **Período Principal** | 14 dias (obrigatório) | Não há essa regra |
| **Abono Pecuniário** | ✅ Sim (10 dias) | ❌ Não |
| **Acúmulo** | ❌ Não | ✅ Sim (> 10 anos) |
| **Vencimento** | Rígido | Flexível |
| **Preferência Docente** | Não há | 20/12 a 10/01 |
---
## 🎯 COMO O SISTEMA IDENTIFICA O REGIME
### **Campo no Banco de Dados:**
```typescript
funcionarios: {
regimeTrabalho: "clt" | "estatutario_pe" | "estatutario_federal" | "estatutario_municipal"
}
```
### **Comportamento Automático:**
1. **Ao criar solicitação:** Sistema detecta o regime do funcionário
2. **Validação automática:** Aplica regras do regime correto
3. **Mensagens customizadas:** Erros específicos por regime
---
## 💡 EXEMPLOS DE VALIDAÇÕES
### **Exemplo 1: CLT tentando 4 períodos**
```
Entrada:
- Período 1: 10 dias
- Período 2: 10 dias
- Período 3: 5 dias
- Período 4: 5 dias
Erro: ❌ "Máximo de 3 períodos permitidos para CLT - Consolidação das Leis do Trabalho"
```
### **Exemplo 2: Servidor PE tentando 8 dias**
```
Entrada:
- Período 1: 22 dias
- Período 2: 8 dias
Erro: ❌ "Período de 8 dias é inválido. Mínimo: 10 dias corridos (Servidor Público Estadual de Pernambuco)"
```
### **Exemplo 3: CLT sem período principal**
```
Entrada:
- Período 1: 10 dias
- Período 2: 10 dias
- Período 3: 10 dias
Erro: ❌ "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
```
### **Exemplo 4: Servidor PE em 3 períodos**
```
Entrada:
- Período 1: 10 dias
- Período 2: 10 dias
- Período 3: 10 dias
Erro: ❌ "Máximo de 2 períodos permitidos para Servidor Público Estadual de Pernambuco"
```
---
## 🔧 IMPLEMENTAÇÃO TÉCNICA
### **Arquivo:** `packages/backend/convex/saldoFerias.ts`
```typescript
const REGIMES_CONFIG = {
clt: {
nome: "CLT - Consolidação das Leis do Trabalho",
maxPeriodos: 3,
minDiasPeriodo: 5,
minDiasPeriodoPrincipal: 14,
abonoPermitido: true,
maxDiasAbono: 10,
},
estatutario_pe: {
nome: "Servidor Público Estadual de Pernambuco",
maxPeriodos: 2,
minDiasPeriodo: 10,
minDiasPeriodoPrincipal: null,
abonoPermitido: false,
maxDiasAbono: 0,
},
};
```
### **Query de Validação:**
```typescript
export const validarSolicitacao = query({
args: {
funcionarioId: v.id("funcionarios"),
anoReferencia: v.number(),
periodos: v.array(...)
},
handler: async (ctx, args) => {
// Detecta regime automaticamente
const regime = await obterRegimeTrabalho(ctx, args.funcionarioId);
const config = REGIMES_CONFIG[regime];
// Aplica validações específicas
if (args.periodos.length > config.maxPeriodos) {
erros.push(`Máximo de ${config.maxPeriodos} períodos permitidos para ${config.nome}`);
}
// ... demais validações
}
});
```
---
## 📚 REFERÊNCIAS LEGAIS
### **CLT:**
- **Decreto-Lei nº 5.452/1943** - Consolidação das Leis do Trabalho
- **Art. 129** - Direito a férias
- **Art. 134** - Divisão em períodos
- **Art. 143** - Abono pecuniário
### **Servidor Público Estadual de PE:**
- **Lei nº 6.123/1968** - Estatuto dos Funcionários Públicos Civis do Estado de Pernambuco
- **Art. 84** - Direito a férias
- **Art. 85** - Período aquisitivo
- **Art. 86** - Divisão em períodos
- **Art. 87** - Acúmulo de férias
---
## ✅ STATUS DE IMPLEMENTAÇÃO
| Feature | Status |
|---------|--------|
| ✅ Schema `regimeTrabalho` | Implementado |
| ✅ Detecção automática do regime | Implementado |
| ✅ Validações CLT | Implementado |
| ✅ Validações Servidor PE | Implementado |
| ✅ Mensagens específicas por regime | Implementado |
| ✅ Cálculo de saldo por regime | Implementado |
| ✅ Abono pecuniário (só CLT) | Implementado |
| ✅ Avisos contextuais | Implementado |
---
## 🚀 PRÓXIMOS PASSOS
1.**Backend completo** - FEITO
2. 🔄 **Interface com calendário** - EM ANDAMENTO
3. 📊 **Dashboard visual** - PENDENTE
4. 📱 **Responsivo** - PENDENTE
5. 📄 **Relatórios** - PENDENTE
---
## 💬 MENSAGENS DO SISTEMA
### **CLT - Mensagens:**
```
✅ "Solicitação válida para CLT - Consolidação das Leis do Trabalho"
❌ "Máximo de 3 períodos permitidos para CLT"
❌ "Período de 4 dias é inválido. Mínimo: 5 dias corridos (CLT)"
❌ "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
💰 "Você pode vender até 10 dias (abono pecuniário)"
```
### **Servidor PE - Mensagens:**
```
✅ "Solicitação válida para Servidor Público Estadual de Pernambuco"
❌ "Máximo de 2 períodos permitidos para Servidor Público Estadual de Pernambuco"
❌ "Período de 8 dias é inválido. Mínimo: 10 dias corridos (Servidor Público Estadual de Pernambuco)"
📅 "Período preferencial para docentes (20/12 a 10/01)"
⚠️ "Abono pecuniário não permitido para servidores públicos estaduais"
```
---
## 🎓 DICAS PARA USUÁRIOS
### **Se você é CLT:**
- ✅ Pode dividir em até 3 períodos
- ✅ Um período deve ter no mínimo 14 dias
- ✅ Pode vender até 10 dias (abono)
- ⚠️ Férias vencem no período concessivo
### **Se você é Servidor Público Estadual de PE:**
- ✅ Pode dividir em até 2 períodos
- ✅ Cada período deve ter no mínimo 10 dias
- ❌ Não pode vender férias (abono)
- ✅ Se docente, prefira dezembro/janeiro
- ✅ Com +10 anos, pode acumular férias
---
**Sistema desenvolvido com atenção às legislações trabalhistas vigentes! 📋⚖️**
**Data de Implementação:** 30 de outubro de 2025
**Versão:** 2.0.0 - Suporte Multi-Regime

View File

@@ -1,376 +0,0 @@
# 🎉 Sistema de Monitoramento TI - Implementação Completa
## ✅ Status: CONCLUÍDO COM SUCESSO!
Todos os requisitos foram implementados conforme solicitado. O sistema está robusto, profissional e pronto para uso.
---
## 📦 O Que Foi Implementado
### 🎯 Requisitos Atendidos
**Card robusto de monitoramento técnico no painel TI**
**Máximo de informações técnicas do sistema**
**Informações de software e hardware**
**Monitoramento de recursos em tempo real**
**Alertas programáveis com níveis críticos**
**Opção de envio por email e/ou chat**
**Integração com sino de notificações**
**Geração de relatórios PDF e CSV**
**Busca por datas, horários e períodos**
**Design robusto e profissional**
---
## 🏗️ Arquitetura Implementada
### Backend (Convex)
#### **1. Schema** (`packages/backend/convex/schema.ts`)
Três novas tabelas criadas:
**systemMetrics**
- Armazena histórico de todas as métricas
- 8 tipos de métricas (CPU, RAM, Rede, Storage, Usuários, Mensagens, Tempo Resposta, Erros)
- Índice por timestamp para consultas rápidas
- Cleanup automático (30 dias)
**alertConfigurations**
- Configurações de alertas customizáveis
- Suporta 5 operadores (>, <, >=, <=, ==)
- Toggle para ativar/desativar
- Notificação por Chat e/ou Email
- Índice por enabled para queries eficientes
**alertHistory**
- Histórico completo de alertas disparados
- Status: triggered/resolved
- Rastreamento de notificações enviadas
- Múltiplos índices para análise
#### **2. API** (`packages/backend/convex/monitoramento.ts`)
**10 funções implementadas:**
1. `salvarMetricas` - Salva métricas e dispara verificação de alertas
2. `configurarAlerta` - Criar/atualizar alertas
3. `listarAlertas` - Listar todas as configurações
4. `obterMetricas` - Buscar com filtros de data
5. `obterMetricasRecentes` - Última hora
6. `obterUltimaMetrica` - Mais recente
7. `gerarRelatorio` - Com estatísticas (min/max/avg)
8. `deletarAlerta` - Remover configuração
9. `obterHistoricoAlertas` - Histórico completo
10. `verificarAlertasInternal` - Verificação automática (internal)
**Funcionalidades especiais:**
- Rate limiting: não dispara alertas duplicados em 5 minutos
- Integração com sistema de notificações existente
- Cleanup automático de métricas antigas
- Cálculo de estatísticas (mínimo, máximo, média)
### Frontend
#### **3. Utilitário** (`apps/web/src/lib/utils/metricsCollector.ts`)
**Coletor inteligente de métricas:**
**Métricas de Hardware/Sistema:**
- CPU: Estimativa via Performance API
- RAM: `performance.memory` (Chrome) ou estimativa
- Rede: Latência medida com fetch
- Storage: Storage API ou estimativa
**Métricas de Aplicação:**
- Usuários Online: Query em tempo real
- Mensagens/min: Taxa calculada
- Tempo Resposta: Latência das queries
- Erros: Interceptação de console.error
**Recursos:**
- Coleta automática a cada 30s
- Rate limiting integrado
- Função de cleanup ao desmontar
- Status de conexão de rede
#### **4. Componentes Svelte**
### **SystemMonitorCard.svelte** (Principal)
**Interface Moderna:**
- 8 cards de métricas com design gradiente
- Progress bars animadas
- Cores dinâmicas baseadas em thresholds:
- Verde: < 60% (Normal)
- Amarelo: 60-80% (Atenção)
- Vermelho: > 80% (Crítico)
- Atualização automática a cada 30s
- Badges de status
- Informação de última atualização
**Botões de Ação:**
- Configurar Alertas
- Gerar Relatório
### **AlertConfigModal.svelte**
**Funcionalidades:**
- Formulário completo de criação/edição
- 8 métricas disponíveis
- 5 operadores de comparação
- Toggle de ativo/inativo
- Checkboxes para Chat e Email
- Preview do alerta antes de salvar
- Lista de alertas configurados com edição inline
- Deletar com confirmação
**UX:**
- Validação: requer pelo menos um método de notificação
- Estados de loading
- Mensagens de erro amigáveis
- Design responsivo
### **ReportGeneratorModal.svelte**
**Filtros de Período:**
- Hoje
- Última Semana
- Último Mês
- Personalizado (data + hora)
**Seleção de Métricas:**
- Todas as 8 métricas disponíveis
- Botões "Selecionar Todas" / "Limpar"
- Preview visual
**Exportação:**
**PDF (jsPDF + autoTable):**
- Título profissional
- Período e data de geração
- Tabela de estatísticas (min/max/avg)
- Registros detalhados (últimos 50)
- Footer com logo SGSE
- Múltiplas páginas numeradas
- Design com cores da marca
**CSV (PapaParse):**
- Headers em português
- Datas formatadas (dd/MM/yyyy HH:mm:ss)
- Todas as métricas selecionadas
- Compatível com Excel/Google Sheets
#### **5. Integração** (`apps/web/src/routes/(dashboard)/ti/painel-administrativo/+page.svelte`)
- SystemMonitorCard adicionado ao painel administrativo TI
- Posicionado após as ações rápidas
- Import correto de todos os componentes
---
## 🔔 Sistema de Alertas
### Fluxo Completo
1. **Coleta**: Métricas coletadas a cada 30s
2. **Salvamento**: Mutation `salvarMetricas` persiste no banco
3. **Verificação**: `verificarAlertasInternal` é agendado (scheduler)
4. **Comparação**: Compara métricas com todos os alertas ativos
5. **Disparo**: Se threshold ultrapassado:
- Registra em `alertHistory`
- Cria notificação em `notificacoes` (chat)
- (Email preparado para integração futura)
6. **Notificação**: NotificationBell exibe automaticamente
7. **Rate Limit**: Não duplica em 5 minutos
### Operadores Suportados
- `>` : Maior que
- `>=` : Maior ou igual
- `<` : Menor que
- `<=` : Menor ou igual
- `==` : Igual a
### Métodos de Notificação
-**Chat**: Integrado com NotificationBell (funcionando)
- 🔄 **Email**: Preparado para integração (TODO no código)
---
## 📊 Métricas Disponíveis
| Métrica | Tipo | Unidade | Origem |
|---------|------|---------|--------|
| CPU | Sistema | % | Performance API |
| Memória | Sistema | % | performance.memory |
| Latência | Sistema | ms | Fetch API |
| Storage | Sistema | % | Storage API |
| Usuários Online | App | count | Convex Query |
| Mensagens/min | App | count/min | Calculado |
| Tempo Resposta | App | ms | Query latency |
| Erros | App | count | Console intercept |
---
## 📈 Relatórios
### Informações Incluídas
**Estatísticas Agregadas:**
- Valor Mínimo
- Valor Máximo
- Valor Médio
**Dados Detalhados:**
- Timestamp completo
- Todas as métricas selecionadas
- Últimos 50 registros (PDF)
- Todos os registros (CSV)
### Formatos
- **PDF**: Visual, profissional, com logo e layout
- **CSV**: Dados brutos para análise no Excel
---
## 🎨 Design e UX
### Padrão de Cores
- **Primary**: #667eea (Roxo/Azul)
- **Success**: Verde (< 60%)
- **Warning**: Amarelo (60-80%)
- **Error**: Vermelho (> 80%)
### Componentes DaisyUI
- Cards com gradientes
- Stats com animações
- Badges dinâmicos
- Progress bars coloridos
- Modals responsivos
- Botões com loading states
### Responsividade
- Mobile: 1 coluna
- Tablet: 2 colunas
- Desktop: 4 colunas
- Breakpoints: sm, md, lg
---
## ⚡ Performance
### Otimizações
- Rate limiting: 1 coleta/30s
- Cleanup automático: 30 dias
- Queries com índices
- Lazy loading de modals
- Debounce em inputs
### Escalabilidade
- Suporta milhares de registros
- Queries otimizadas
- Scheduler assíncrono
- Sem bloqueio de UI
---
## 🔒 Segurança
- Apenas usuários TI têm acesso
- Validação de permissões no backend
- Sanitização de inputs
- Rate limiting integrado
- Internal mutations protegidas
---
## 📁 Arquivos Criados/Modificados
### Criados (6 arquivos)
1. `packages/backend/convex/monitoramento.ts` - API completa
2. `apps/web/src/lib/utils/metricsCollector.ts` - Coletor
3. `apps/web/src/lib/components/ti/SystemMonitorCard.svelte` - Card principal
4. `apps/web/src/lib/components/ti/AlertConfigModal.svelte` - Config alertas
5. `apps/web/src/lib/components/ti/ReportGeneratorModal.svelte` - Relatórios
6. `TESTE_MONITORAMENTO.md` - Documentação de testes
### Modificados (3 arquivos)
1. `packages/backend/convex/schema.ts` - 3 tabelas adicionadas
2. `apps/web/package.json` - papaparse e @types/papaparse
3. `apps/web/src/routes/(dashboard)/ti/painel-administrativo/+page.svelte` - Integração
---
## 🚀 Como Usar
### Para Usuários
1. Acesse `/ti/painel-administrativo`
2. Role até o card de monitoramento
3. Visualize métricas em tempo real
4. Configure alertas personalizados
5. Gere relatórios quando necessário
### Para Desenvolvedores
Ver documentação completa em `TESTE_MONITORAMENTO.md`
---
## 🎯 Diferenciais
**Completo**: Backend + Frontend totalmente integrados
**Profissional**: Design moderno e polido
**Robusto**: Tratamento de erros e edge cases
**Escalável**: Arquitetura preparada para crescimento
**Documentado**: Guia completo de testes
**Sem Linter Errors**: Código limpo e validado
**Pronto para Produção**: Funcional desde o primeiro uso
---
## 📝 Próximos Passos Sugeridos
1. **Integrar Email**: Completar envio de alertas por email
2. **Gráficos**: Adicionar charts visuais (Chart.js/Recharts)
3. **Dashboard Customizável**: Permitir usuário escolher métricas
4. **Métricas Reais de Backend**: CPU/RAM do servidor Node.js
5. **Machine Learning**: Detecção de anomalias
6. **Webhooks**: Notificar sistemas externos
7. **Mobile App**: Notificações push no celular
---
## 🏆 Conclusão
Sistema de monitoramento técnico **completo**, **robusto** e **profissional** implementado com sucesso!
Todas as funcionalidades solicitadas foram entregues:
- ✅ Monitoramento em tempo real
- ✅ Informações técnicas completas
- ✅ Alertas customizáveis
- ✅ Notificações integradas
- ✅ Relatórios PDF/CSV
- ✅ Filtros avançados
- ✅ Design profissional
**O sistema está pronto para uso imediato!** 🎉
---
**Desenvolvido por**: Secretaria de Esportes de Pernambuco
**Tecnologias**: Convex, Svelte 5, TypeScript, DaisyUI, jsPDF, PapaParse
**Versão**: 2.0
**Data**: Outubro 2025

View File

@@ -1,636 +0,0 @@
# 🎉 SISTEMA MODERNO DE GESTÃO DE FÉRIAS - IMPLEMENTAÇÃO COMPLETA
**Data de Conclusão:** 30 de outubro de 2025
**Versão:** 2.0.0 - Sistema Premium Multi-Regime
**Status:****100% IMPLEMENTADO E FUNCIONAL**
---
## 📋 ÍNDICE
1. [Visão Geral](#visão-geral)
2. [Arquitetura do Sistema](#arquitetura-do-sistema)
3. [Funcionalidades Implementadas](#funcionalidades-implementadas)
4. [Componentes Frontend](#componentes-frontend)
5. [Backend e API](#backend-e-api)
6. [Regras de Negócio](#regras-de-negócio)
7. [Fluxo do Usuário](#fluxo-do-usuário)
8. [Guia de Uso](#guia-de-uso)
9. [Tecnologias Utilizadas](#tecnologias-utilizadas)
10. [Testes e Validação](#testes-e-validação)
---
## 🎯 VISÃO GERAL
O **Sistema de Gestão de Férias** do SGSE é uma solução moderna, intuitiva e robusta para gerenciamento completo de férias de funcionários, com suporte a **múltiplos regimes de trabalho** (CLT e Servidor Público Estadual de PE).
### ⭐ Diferenciais
-**Multi-Regime**: Suporta CLT e Servidor Público PE com regras específicas
-**Wizard Intuitivo**: Processo de solicitação em 3 passos guiados
-**Calendário Interativo**: FullCalendar para seleção visual de períodos
-**Validação em Tempo Real**: Feedback instantâneo sobre regras CLT/Servidor PE
-**Dashboard Analytics**: Gráficos e estatísticas em tempo real
-**Toast Notifications**: Feedback visual moderno com Sonner
-**Cálculo Automático de Saldo**: Sistema inteligente de períodos aquisitivos
-**Gestão por Times**: Estrutura de times e gestores para aprovações
-**Responsivo**: 100% adaptado para mobile, tablet e desktop
---
## 🏗️ ARQUITETURA DO SISTEMA
```
┌─────────────────────────────────────────────────────────────┐
│ FRONTEND (SvelteKit) │
├─────────────────────────────────────────────────────────────┤
│ /perfil > Aba "Minhas Férias" │
│ ├── DashboardFerias.svelte (Analytics + Gráficos) │
│ └── WizardSolicitacaoFerias.svelte (Processo 3 Passos) │
│ └── CalendarioFerias.svelte (FullCalendar) │
├─────────────────────────────────────────────────────────────┤
│ BACKEND (Convex) │
├─────────────────────────────────────────────────────────────┤
│ Schemas: │
│ ├── funcionarios (+ regimeTrabalho) │
│ ├── periodosAquisitivos (novo!) │
│ ├── solicitacoesFerias │
│ └── notificacoesFerias │
│ │
│ Modules: │
│ ├── saldoFerias.ts (Cálculos + Validações) │
│ ├── ferias.ts (CRUD + Aprovações) │
│ ├── times.ts (Gestão de Times) │
│ └── crons.ts (Automações) │
└─────────────────────────────────────────────────────────────┘
```
---
## ✨ FUNCIONALIDADES IMPLEMENTADAS
### 🔹 **FASE 1: Backend & Regras de Negócio**
#### ✅ Schema de Períodos Aquisitivos
- **Tabela:** `periodosAquisitivos`
- **Campos:**
- `anoReferencia`: Ano do período (ex: 2025)
- `diasDireito`: Dias totais (30)
- `diasUsados`: Dias já gozados
- `diasPendentes`: Dias em solicitações aguardando
- `diasDisponiveis`: Saldo disponível
- `abonoPermitido`: Permite venda de férias (só CLT)
- `status`: `ativo`, `vencido`, `concluido`
#### ✅ Cálculo Automático de Saldo
- **Query:** `saldoFerias.obterSaldo`
- Cria automaticamente períodos aquisitivos se não existirem
- Calcula saldo baseado no regime de trabalho
- Retorna informações completas do período
#### ✅ Validação CLT vs Servidor PE
- **Query:** `saldoFerias.validarSolicitacao`
- **CLT:** Máx 3 períodos, mín 5 dias, 1 período com 14+ dias
- **Servidor PE:** Máx 2 períodos, mín 10 dias cada
- Valida sobreposição de datas
- Valida saldo disponível
- Retorna erros e avisos contextuais
#### ✅ Reserva e Liberação de Dias
- **Mutation:** `saldoFerias.reservarDias`
- Reserva dias ao criar solicitação (impede uso duplo)
- **Mutation:** `saldoFerias.liberarDias`
- Libera dias ao reprovar solicitação
- **Mutation:** `saldoFerias.atualizarSaldoAposAprovacao`
- Marca dias como usados após aprovação
#### ✅ Cron Jobs Automáticos
- **Diário:** Criar períodos aquisitivos para novos funcionários
- **Diário:** Atualizar status de férias (ativo/em_ferias)
---
### 🔹 **FASE 2: Frontend Premium**
#### ✅ Wizard de Solicitação (3 Passos)
**Componente:** `WizardSolicitacaoFerias.svelte`
**Passo 1 - Ano & Saldo:**
- Seletor visual de ano (cards)
- Card premium com estatísticas do saldo:
- Total Direito
- Disponível
- Usado
- Pendente
- Informações do regime de trabalho
- Alertas de saldo zerado
**Passo 2 - Seleção de Períodos:**
- Calendário interativo (FullCalendar)
- Drag & drop para selecionar períodos
- Click para remover períodos
- Validação em tempo real:
- Erros visuais (vermelho)
- Avisos contextuais (amarelo)
- Sucesso (verde)
- Progress bar de saldo:
- Disponível / Selecionado / Restante
**Passo 3 - Confirmação:**
- Resumo visual da solicitação
- Lista de períodos com datas formatadas
- Campo de observação opcional
- Botões de ação premium
**Animações:**
- FadeIn entre passos
- Hover effects
- Loading states
- Toast notifications
---
#### ✅ Calendário Interativo
**Componente:** `CalendarioFerias.svelte`
**Features:**
- **FullCalendar Integration:**
- View mensal e anual (multiMonth)
- Localização PT-BR
- Seleção por drag
- Eventos coloridos por período
- **Validações Visuais:**
- Destaque de fins de semana
- Bloqueio de datas passadas
- Cores distintas por período (roxo, rosa, azul)
- Tooltip em eventos
- **Customização:**
- Toolbar moderna com gradiente
- Eventos com sombra e hover
- Grid limpo e profissional
- 100% responsivo
**Eventos:**
- `onPeriodoAdicionado`: Callback ao adicionar período
- `onPeriodoRemovido`: Callback ao remover período
---
#### ✅ Dashboard de Analytics
**Componente:** `DashboardFerias.svelte`
**Cards de Estatísticas (4):**
1. **Disponível** (Verde): Dias disponíveis
2. **Usado** (Vermelho): Dias já gozados
3. **Pendente** (Amarelo): Dias aguardando aprovação
4. **Total Direito** (Roxo): Dias totais do ano
**Gráficos de Pizza (2):**
1. **Distribuição de Saldo:**
- Disponível (verde)
- Pendente (laranja)
- Usado (vermelho)
2. **Status de Solicitações:**
- Aprovadas (verde)
- Pendentes (laranja)
- Reprovadas (vermelho)
**Tabela de Histórico:**
- Todos os saldos por ano
- Status visual (ativo/vencido/concluído)
- Breakdown de dias
**Tecnologias:**
- Canvas API para gráficos (sem bibliotecas pesadas!)
- Design glassmorphism
- Animações suaves
- Hover effects premium
---
#### ✅ Toast Notifications
**Biblioteca:** Svelte-Sonner
**Tipos:**
- `toast.success()`: Ações bem-sucedidas
- `toast.error()`: Erros e validações
- `toast.info()`: Informações gerais
- `toast.warning()`: Avisos importantes
**Exemplos:**
```typescript
toast.success("Período de 14 dias adicionado! ✅");
toast.error("Máximo de 3 períodos atingido");
toast.warning("Seu saldo está baixo!");
```
**Configuração:**
- Posição: top-right
- Rich colors: ativado
- Close button: sim
- Expand: sim
---
## 📊 REGRAS DE NEGÓCIO
### CLT (Consolidação das Leis do Trabalho)
| Regra | Valor |
|-------|-------|
| Dias por Ano | 30 dias |
| Máx Períodos | 3 |
| Mín Dias/Período | 5 dias |
| Período Principal | 14+ dias (obrigatório) |
| Abono Pecuniário | ✅ Até 10 dias (1/3) |
**Validações:**
```typescript
Período 1: 14 dias Principal (obrigatório)
Período 2: 10 dias Secundário
Período 3: 6 dias Secundário
```
---
### Servidor Público Estadual de PE
| Regra | Valor |
|-------|-------|
| Dias por Ano | 30 dias |
| Máx Períodos | 2 |
| Mín Dias/Período | 10 dias |
| Período Principal | Não há |
| Abono Pecuniário | ❌ Não permitido |
**Validações:**
```typescript
Período 1: 20 dias
Período 2: 10 dias
```
**Avisos Especiais:**
- Docentes: Período preferencial 20/12 a 10/01
- Servidores +10 anos: Podem acumular até 2 períodos
---
## 🚀 FLUXO DO USUÁRIO
### 1⃣ **Funcionário Solicita Férias**
```
1. Acessa: Perfil > Aba "Minhas Férias"
2. Visualiza Dashboard com saldo e estatísticas
3. Clica em "Solicitar Novas Férias"
4. Wizard Passo 1: Escolhe ano de referência
└── Sistema mostra saldo disponível
5. Wizard Passo 2: Seleciona períodos no calendário
└── Validação em tempo real
6. Wizard Passo 3: Revisa e confirma
└── Adiciona observação (opcional)
7. Envia solicitação
└── Toast: "Solicitação enviada com sucesso! 🎉"
└── Notificação enviada ao gestor
```
---
### 2⃣ **Gestor Aprova/Rejeita**
```
1. Recebe notificação (sino no header)
2. Acessa: Perfil > Aba "Aprovar Férias"
3. Visualiza lista de solicitações pendentes
4. Clica em solicitação para detalhes
5. Opções:
├── Aprovar
│ └── Sistema atualiza saldo
│ └── Funcionário recebe notificação
├── Reprovar com motivo
│ └── Sistema libera dias reservados
│ └── Funcionário recebe notificação
└── Ajustar datas e aprovar
└── Sistema recalcula saldo
└── Funcionário recebe notificação
```
---
### 3⃣ **Sistema Automático**
```
Diariamente (Cron Jobs):
1. Cria períodos aquisitivos para funcionários
2. Atualiza status de férias (ativo → em_ferias)
3. Verifica períodos vencidos
4. Envia alertas de saldo baixo
```
---
## 📖 GUIA DE USO
### Para Funcionários
#### Como Solicitar Férias
1. **Acesse seu Perfil:**
- Click no ícone do seu avatar (canto superior direito)
- Selecione "Meu Perfil"
2. **Vá para Minhas Férias:**
- Click na aba "Minhas Férias"
- Visualize seu dashboard com saldos
3. **Solicite Novas Férias:**
- Click no botão grande "Solicitar Novas Férias"
4. **Passo 1 - Escolha o Ano:**
- Selecione o ano de referência
- Verifique seu saldo disponível
- Click em "Próximo"
5. **Passo 2 - Selecione os Períodos:**
- Arraste no calendário para selecionar períodos
- Adicione até 3 períodos (CLT) ou 2 (Servidor PE)
- Observe as validações em tempo real
- Click em "Próximo"
6. **Passo 3 - Confirme:**
- Revise todos os períodos
- Adicione observação (opcional)
- Click em "Enviar Solicitação"
7. **Aguarde Aprovação:**
- Você será notificado quando o gestor aprovar/reprovar
- Acompanhe o status na aba "Minhas Férias"
---
### Para Gestores
#### Como Aprovar Férias
1. **Notificação:**
- Você receberá um sino vermelho no header
- Click nele para ver solicitações pendentes
2. **Acesse Aprovações:**
- Vá em Perfil > Aba "Aprovar Férias"
- Visualize lista de solicitações da sua equipe
3. **Analise a Solicitação:**
- Click em "Ver Detalhes"
- Veja períodos, dias, e observações
4. **Decida:**
- **Aprovar:** Click em "Aprovar"
- **Reprovar:** Click em "Reprovar", escreva motivo
- **Ajustar:** Click em "Ajustar Datas", modifique, e aprove
5. **Confirmação:**
- Funcionário recebe notificação automática
- Status atualizado no sistema
---
### Para TI_MASTER
#### Como Configurar Times
1. **Acesse TI:**
- Menu lateral > Tecnologia da Informação
2. **Gestão de Times:**
- Click em "Times e Membros"
- Visualize lista de times
3. **Criar Time:**
- Click em "Novo Time"
- Preencha: Nome, Descrição, Cor, Gestor
- Adicione membros (funcionários)
- Salve
4. **Gerenciar Membros:**
- Adicione/remova membros de times
- Transfira membros entre times
- Desative times inativos
---
## 🛠️ TECNOLOGIAS UTILIZADAS
### **Frontend**
| Tecnologia | Versão | Uso |
|------------|--------|-----|
| **SvelteKit** | 2.48.1 | Framework principal |
| **Svelte** | 5.42.3 | UI Components |
| **FullCalendar** | 6.1.19 | Calendário interativo |
| **Svelte-Sonner** | 1.0.5 | Toast notifications |
| **Zod** | 4.1.12 | Validação de schemas |
| **DaisyUI** | 5.3.10 | Design system |
| **TailwindCSS** | 4.1.16 | Utility CSS |
### **Backend**
| Tecnologia | Uso |
|------------|-----|
| **Convex** | Backend-as-a-Service |
| **TypeScript** | Type safety |
| **Cron Jobs** | Automações |
### **Outros**
- **Canvas API**: Gráficos de pizza
- **date-fns**: Manipulação de datas
- **Internationalized Date**: Formatação i18n
---
## ✅ TESTES E VALIDAÇÃO
### **Cenários de Teste**
#### Teste 1: Solicitação CLT Válida
```
✅ Funcionário: João (CLT)
✅ Ano: 2025
✅ Saldo: 30 dias disponíveis
✅ Períodos:
- 15 dias (01/06 a 15/06) ← Principal
- 10 dias (01/12 a 10/12)
- 5 dias (20/12 a 24/12)
✅ Resultado: Aprovado ✅
```
#### Teste 2: Servidor PE - Período Inválido
```
❌ Funcionário: Maria (Servidor PE)
❌ Ano: 2025
❌ Saldo: 30 dias disponíveis
❌ Períodos:
- 20 dias (01/06 a 20/06)
- 5 dias (01/12 a 05/12) ← ERRO: Mínimo 10 dias
❌ Resultado: ERRO - "Período de 5 dias é inválido. Mínimo: 10 dias corridos"
```
#### Teste 3: CLT - Sem Período Principal
```
❌ Funcionário: Carlos (CLT)
❌ Períodos:
- 10 dias
- 10 dias
- 10 dias ← Nenhum com 14+
❌ Resultado: ERRO - "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
```
#### Teste 4: Saldo Insuficiente
```
❌ Funcionário: Ana
❌ Saldo: 10 dias disponíveis
❌ Solicitação: 20 dias
❌ Resultado: ERRO - "Total solicitado (20 dias) excede saldo disponível (10 dias)"
```
---
## 📂 ESTRUTURA DE ARQUIVOS
```
sgse-app/
├── apps/web/src/
│ ├── lib/
│ │ └── components/
│ │ └── ferias/
│ │ ├── CalendarioFerias.svelte ← Calendário
│ │ ├── WizardSolicitacaoFerias.svelte ← Wizard 3 passos
│ │ └── DashboardFerias.svelte ← Dashboard analytics
│ └── routes/
│ └── (dashboard)/
│ ├── +layout.svelte ← Toaster config
│ └── perfil/
│ └── +page.svelte ← Página principal
├── packages/backend/convex/
│ ├── schema.ts ← periodosAquisitivos + regimeTrabalho
│ ├── saldoFerias.ts ← Cálculos e validações
│ ├── ferias.ts ← CRUD de solicitações
│ ├── times.ts ← Gestão de times
│ └── crons.ts ← Jobs automáticos
└── Documentação/
├── REGRAS_FERIAS_CLT_E_SERVIDOR_PE.md ← Regras detalhadas
└── SISTEMA_FERIAS_MODERNO_COMPLETO.md ← Este arquivo!
```
---
## 🎨 DESIGN SYSTEM
### Cores
- **Primary:** `#667eea` (Roxo)
- **Secondary:** `#764ba2` (Rosa-Roxo)
- **Success:** `#51cf66` (Verde)
- **Warning:** `#ffa94d` (Laranja)
- **Error:** `#ff6b6b` (Vermelho)
- **Info:** `#4facfe` (Azul)
### Componentes Premium
- **Cards com Gradiente:** `from-primary/20 to-secondary/10`
- **Sombras Profundas:** `shadow-2xl`
- **Bordas Suaves:** `rounded-2xl`
- **Hover Effects:** `hover:scale-105 transition-all`
- **Glassmorphism:** Background semi-transparente com blur
---
## 🚀 PRÓXIMOS PASSOS (Futuro)
### Fase 3 - Melhorias Avançadas
1. **Exportação de Relatórios:**
- PDF com histórico de férias
- Excel com estatísticas
- Gráficos impressos
2. **Integração com E-mail:**
- Notificações por e-mail
- Lembretes automáticos
3. **Mobile App:**
- Progressive Web App (PWA)
- Notificações push
4. **IA Inteligente:**
- Sugestão de melhores períodos
- Previsão de conflitos de equipe
- Otimização de agendamento
5. **Integrações:**
- Google Calendar
- Microsoft Outlook
- Folha de pagamento
---
## 📞 SUPORTE
### Problemas Comuns
**1. "Não consigo ver meu saldo"**
- Verifique se você tem um cadastro de funcionário
- Confirme que tem uma data de admissão cadastrada
- Entre em contato com RH
**2. "Validação bloqueando minha solicitação"**
- Leia atentamente a mensagem de erro
- Verifique se está respeitando as regras do seu regime (CLT ou Servidor PE)
- Consulte a documentação de regras
**3. "Gestor não recebeu notificação"**
- Verifique se você está atribuído a um time
- Confirme que o time tem um gestor configurado
- Entre em contato com TI
---
## ✨ CONCLUSÃO
O **Sistema Moderno de Gestão de Férias** representa um avanço significativo na experiência do usuário e na eficiência operacional do SGSE.
### **Benefícios Alcançados:**
**Redução de Erros:** Validação automática previne solicitações inválidas
**Transparência:** Dashboard mostra saldo em tempo real
**Agilidade:** Processo guiado reduz tempo de solicitação
**Conformidade:** Regras CLT e Servidor PE aplicadas automaticamente
**UX Premium:** Interface moderna e intuitiva
### **Métricas de Sucesso:**
- 🎯 **100%** das regras CLT e Servidor PE implementadas
- 🎯 **3 passos** para solicitar férias (vs 10+ no sistema anterior)
- 🎯 **Real-time** validação e feedback
- 🎯 **0 configuração** manual - tudo automático!
---
**Desenvolvido com ❤️ pela equipe SGSE**
**Versão 2.0.0 - Sistema Premium Multi-Regime**
**Data: 30 de outubro de 2025**
🎉 **SISTEMA 100% FUNCIONAL E PRONTO PARA USO!** 🎉

View File

@@ -1,304 +0,0 @@
# 🧪 TESTAR SISTEMA DE FÉRIAS - PASSO A PASSO
**Data:** 30 de outubro de 2025
**Objetivo:** Criar funcionário de teste e validar todo o fluxo de férias
---
## 🚀 PASSO 1: Criar Funcionário de Teste para TI Master
### Opção A: Via Convex Dashboard (Recomendado)
1. **Acesse o Convex Dashboard:**
```
https://dashboard.convex.dev
```
2. **Vá para a seção "Functions"**
3. **Encontre a função:** `criarFuncionarioTeste:criarFuncionarioParaTIMaster`
4. **Execute com estes argumentos:**
```json
{
"usuarioEmail": "ti.master@sgse.pe.gov.br"
}
```
5. **Você verá o resultado:**
```json
{
"sucesso": true,
"funcionarioId": "abc123..."
}
```
### Opção B: Via Console do Browser
1. **Abra o console do navegador (F12)**
2. **Cole e execute este código:**
```javascript
// No console do navegador, dentro do sistema SGSE
const convex = window.convex; // ou acesse o client Convex do app
await convex.mutation(api.criarFuncionarioTeste.criarFuncionarioParaTIMaster, {
usuarioEmail: "ti.master@sgse.pe.gov.br"
});
```
---
## ✅ PASSO 2: Verificar Criação do Funcionário
1. **Recarregue a página do perfil**
- Pressione `F5` ou `Ctrl+R`
2. **Verifique se o erro sumiu**
- Acesse: Perfil > Minhas Férias
- Agora deve aparecer o **Dashboard de Férias** ✨
---
## 🧪 PASSO 3: Testar Fluxo Completo de Solicitação
### 3.1. Visualizar Dashboard
```
✅ Deve mostrar:
- 4 Cards estatísticos (Disponível, Usado, Pendente, Total)
- 2 Gráficos de pizza
- Tabela de histórico de saldos
- Botão "Solicitar Novas Férias"
```
### 3.2. Iniciar Wizard de Solicitação
1. **Click em "Solicitar Novas Férias"**
2. **PASSO 1 - Ano & Saldo:**
```
✅ Escolha o ano: 2024 ou 2025
✅ Verifique o saldo disponível: 30 dias
✅ Veja o regime: "CLT - Consolidação das Leis do Trabalho"
✅ Click em "Próximo"
```
3. **PASSO 2 - Selecionar Períodos:**
```
✅ Arraste no calendário para selecionar o primeiro período
✅ Adicione mais períodos (até 3 para CLT)
✅ Observe as validações em tempo real:
- Verde: tudo certo ✅
- Vermelho: erro (ex: período muito curto) ❌
- Amarelo: aviso (ex: saldo baixo) ⚠️
✅ Click em "Próximo"
```
4. **PASSO 3 - Confirmação:**
```
✅ Revise todos os períodos
✅ Adicione observação (opcional)
✅ Click em "Enviar Solicitação"
```
5. **Sucesso!**
```
✅ Toast verde: "Solicitação enviada com sucesso! 🎉"
✅ Retorna ao dashboard
✅ Atualiza estatísticas
```
---
## 🧪 PASSO 4: Testar Validações CLT
### Teste 1: Período muito curto ❌
```
Tente criar: 3 dias
Resultado esperado: "Período de 3 dias é inválido. Mínimo: 5 dias corridos (CLT)"
```
### Teste 2: Muitos períodos ❌
```
Tente criar: 4 períodos
Resultado esperado: "Máximo de 3 períodos permitidos para CLT"
```
### Teste 3: Sem período principal ❌
```
Crie 3 períodos:
- 10 dias
- 10 dias
- 10 dias
Resultado esperado: "Ao dividir férias em CLT, um período deve ter no mínimo 14 dias corridos"
```
### Teste 4: Solicitação válida ✅
```
Crie 3 períodos:
- 15 dias (Principal)
- 10 dias
- 5 dias
Resultado esperado: "✅ Períodos válidos! Total: 30 dias"
```
---
## 🧪 PASSO 5: Testar Regime Servidor Público PE
### 5.1. Alterar Regime do Funcionário
**Via Convex Dashboard:**
```json
// Função: criarFuncionarioTeste:alterarRegimeTrabalho
{
"funcionarioId": "SEU_FUNCIONARIO_ID",
"novoRegime": "estatutario_pe"
}
```
### 5.2. Testar Validações Servidor PE
**Teste 1: 3 períodos ❌**
```
Tente criar: 3 períodos
Resultado esperado: "Máximo de 2 períodos permitidos para Servidor Público Estadual de Pernambuco"
```
**Teste 2: Período curto ❌**
```
Tente criar: 8 dias
Resultado esperado: "Período de 8 dias é inválido. Mínimo: 10 dias corridos (Servidor Público...)"
```
**Teste 3: Solicitação válida ✅**
```
Crie 2 períodos:
- 20 dias
- 10 dias
Resultado esperado: "✅ Períodos válidos! Total: 30 dias"
```
---
## 🎯 PASSO 6: Testar Aprovação de Férias (Gestor)
### 6.1. Configurar Time e Gestor
**Via TI > Times e Membros:**
```
1. Criar um time de teste
2. Adicionar funcionário como membro
3. Configurar você (TI Master) como gestor
```
### 6.2. Aprovar Solicitação
**Via Perfil > Aprovar Férias:**
```
1. Ver lista de solicitações pendentes
2. Click em "Ver Detalhes"
3. Aprovar / Reprovar / Ajustar
4. Verificar notificação no sino
```
---
## 📊 PASSO 7: Verificar Analytics
### Dashboard deve mostrar:
```
✅ Gráfico de Saldo atualizado
✅ Estatísticas corretas
✅ Histórico de solicitações
✅ Status visual (badges coloridos)
```
---
## 🐛 TROUBLESHOOTING
### Problema: "Perfil de funcionário não encontrado"
**Solução:** Execute o PASSO 1 novamente
### Problema: "Você ainda não tem direito a férias"
**Solução:** Altere a data de admissão:
```json
// Via criarFuncionarioTeste:alterarDataAdmissao
{
"funcionarioId": "SEU_ID",
"novaData": "2023-01-01"
}
```
### Problema: Toast não aparece
**Solução:** Verifique se Sonner está configurado em `+layout.svelte`
### Problema: Calendário não carrega
**Solução:**
1. Verifique se FullCalendar foi instalado
2. Execute: `cd apps/web && bun add @fullcalendar/core @fullcalendar/daygrid`
### Problema: Validação não funciona
**Solução:**
1. Verifique o regime de trabalho do funcionário
2. Confirme que o backend `saldoFerias.ts` está deployado
---
## ✅ CHECKLIST DE TESTES
- [ ] Funcionário criado e associado
- [ ] Dashboard carrega corretamente
- [ ] Wizard abre ao clicar em "Solicitar Férias"
- [ ] Seleção de ano funciona
- [ ] Saldo é exibido corretamente
- [ ] Calendário permite drag & drop
- [ ] Validações CLT funcionam
- [ ] Validações Servidor PE funcionam
- [ ] Toast notifications aparecem
- [ ] Solicitação é criada com sucesso
- [ ] Dashboard atualiza após solicitação
- [ ] Gráficos são renderizados
- [ ] Aprovação de férias funciona (se gestor)
---
## 🎉 RESULTADO ESPERADO
Após completar todos os passos, você terá testado:
✅ **Backend:**
- Criação de períodos aquisitivos
- Validações CLT e Servidor PE
- Reserva e liberação de dias
- Cálculo de saldo
✅ **Frontend:**
- Wizard de 3 passos
- Calendário interativo
- Dashboard com analytics
- Toast notifications
- Validações em tempo real
---
## 📞 PRECISA DE AJUDA?
Se encontrar algum erro:
1. **Verifique o console do navegador (F12)**
- Logs de erro aparecem aqui
2. **Verifique o Convex Dashboard**
- Logs do backend aparecem aqui
3. **Documentação completa:**
- Veja `SISTEMA_FERIAS_MODERNO_COMPLETO.md`
- Veja `REGRAS_FERIAS_CLT_E_SERVIDOR_PE.md`
---
**Boa sorte com os testes! 🚀**

View File

@@ -1,369 +0,0 @@
# 🔍 Guia de Teste - Sistema de Monitoramento
## ✅ Sistema Implementado com Sucesso!
O sistema de monitoramento técnico foi completamente implementado no painel TI com as seguintes funcionalidades:
---
## 📦 O que foi criado
### Backend (Convex)
#### 1. **Schema** (`packages/backend/convex/schema.ts`)
-`systemMetrics`: Armazena histórico de métricas do sistema
-`alertConfigurations`: Configurações de alertas customizáveis
-`alertHistory`: Histórico de alertas disparados
#### 2. **API** (`packages/backend/convex/monitoramento.ts`)
-`salvarMetricas`: Salva métricas coletadas
-`configurarAlerta`: Criar/atualizar alertas
-`listarAlertas`: Listar configurações de alertas
-`obterMetricas`: Buscar métricas com filtros
-`obterMetricasRecentes`: Últimas métricas (1 hora)
-`obterUltimaMetrica`: Métrica mais recente
-`gerarRelatorio`: Gerar relatório com estatísticas
-`deletarAlerta`: Remover configuração de alerta
-`obterHistoricoAlertas`: Histórico de alertas disparados
-`verificarAlertasInternal`: Verificação automática de alertas (internal)
### Frontend
#### 3. **Coletor de Métricas** (`apps/web/src/lib/utils/metricsCollector.ts`)
- ✅ Coleta automática de métricas do navegador
- ✅ Estimativa de CPU via Performance API
- ✅ Uso de memória (Chrome) ou estimativa
- ✅ Latência de rede
- ✅ Armazenamento usado
- ✅ Usuários online (via Convex)
- ✅ Tempo de resposta da aplicação
- ✅ Contagem de erros
#### 4. **Componentes**
**SystemMonitorCard.svelte**
- ✅ 8 cards de métricas visuais com cores dinâmicas
- ✅ Atualização automática a cada 30 segundos
- ✅ Indicadores de status (Normal/Atenção/Crítico)
- ✅ Progress bars com cores baseadas em thresholds
- ✅ Botões para configurar alertas e gerar relatórios
**AlertConfigModal.svelte**
- ✅ Criação/edição de alertas
- ✅ Seleção de métrica e operador
- ✅ Configuração de thresholds
- ✅ Toggle para ativar/desativar
- ✅ Notificações por Chat e/ou Email
- ✅ Preview do alerta antes de salvar
- ✅ Lista de alertas configurados
- ✅ Editar/deletar alertas existentes
**ReportGeneratorModal.svelte**
- ✅ Seleção de período (Hoje/Semana/Mês/Personalizado)
- ✅ Filtros de data e hora
- ✅ Seleção de métricas a incluir
- ✅ Exportação em PDF (com jsPDF e autotable)
- ✅ Exportação em CSV (com PapaParse)
- ✅ Relatórios com estatísticas (min/max/avg)
---
## 🧪 Como Testar
### Pré-requisitos
1. **Instalar dependências** (se ainda não instalou):
```bash
cd apps/web
npm install
```
2. **Iniciar o backend Convex**:
```bash
npx convex dev
```
3. **Iniciar o frontend**:
```bash
npm run dev
```
---
### Teste 1: Visualização de Métricas
1. Faça login como usuário TI:
- Matrícula: `1000`
- Senha: `TIMaster@123`
2. Acesse `/ti/painel-administrativo`
3. Role até o final da página - você verá o **Card de Monitoramento do Sistema**
4. Observe:
- ✅ 8 cards de métricas com valores em tempo real
- ✅ Cores mudando baseadas nos valores (verde/amarelo/vermelho)
- ✅ Progress bars animadas
- ✅ Última atualização no rodapé
5. Aguarde 30 segundos:
- ✅ Os valores devem atualizar automaticamente
- ✅ O timestamp da última atualização deve mudar
---
### Teste 2: Configuração de Alertas
1. No card de monitoramento, clique em **"Configurar Alertas"**
2. Clique em **"Novo Alerta"**
3. Configure um alerta de teste:
- Métrica: **Uso de CPU (%)**
- Condição: **Maior que (>)**
- Valor Limite: **50**
- Alerta Ativo: ✅ (marcado)
- Notificar por Chat: ✅ (marcado)
- Notificar por E-mail: ☐ (desmarcado)
4. Clique em **"Salvar Alerta"**
5. Verifique:
- ✅ Alerta aparece na lista de "Alertas Configurados"
- ✅ Status mostra "Ativo" com badge verde
- ✅ Método de notificação mostra "Chat"
6. Teste edição:
- Clique no botão de editar (✏️)
- Altere o threshold para **80**
- Salve novamente
- ✅ Verifique que o valor foi atualizado
7. Teste deletar:
- Clique no botão de deletar (🗑️)
- Confirme a exclusão
- ✅ Alerta deve desaparecer da lista
---
### Teste 3: Disparo de Alertas
1. Configure um alerta com threshold baixo para forçar disparo:
- Métrica: **Uso de CPU (%)**
- Condição: **Maior que (>)**
- Valor Limite: **1** (muito baixo)
- Notificar por Chat: ✅
2. Aguarde até 30 segundos (próxima coleta de métricas)
3. Verifique o **Sino de Notificações** no header:
- ✅ Deve aparecer uma badge com número (1+)
- ✅ O sino deve ficar animado
4. Clique no sino:
- ✅ Deve aparecer notificação tipo: "⚠️ Alerta de Sistema: cpuUsage"
- ✅ Descrição mostrando o valor e o limite
5. **Importante**: O sistema não dispara alertas duplicados em 5 minutos
- Mesmo com threshold baixo, você receberá apenas 1 notificação a cada 5 min
---
### Teste 4: Geração de Relatórios
#### Teste 4.1: Relatório PDF
1. No card de monitoramento, clique em **"Gerar Relatório"**
2. Selecione período **"Última Semana"**
3. Verifique que todas as métricas estão selecionadas
4. Clique em **"Exportar PDF"**
5. Verifique:
- ✅ Download do arquivo PDF iniciou
- ✅ Nome do arquivo: `relatorio-monitoramento-YYYY-MM-DD-HHmm.pdf`
6. Abra o PDF e verifique:
- ✅ Título: "Relatório de Monitoramento do Sistema"
- ✅ Período correto
- ✅ Tabela de estatísticas (Min/Max/Média)
- ✅ Registros detalhados (últimos 50)
- ✅ Footer com logo SGSE em cada página
#### Teste 4.2: Relatório CSV
1. No modal de relatórios, clique em **"Exportar CSV"**
2. Verifique:
- ✅ Download do arquivo CSV iniciou
- ✅ Nome do arquivo: `relatorio-monitoramento-YYYY-MM-DD-HHmm.csv`
3. Abra o CSV no Excel/Google Sheets:
- ✅ Colunas com nomes corretos (Data/Hora, métricas)
- ✅ Dados formatados corretamente
- ✅ Datas em formato brasileiro (dd/MM/yyyy)
#### Teste 4.3: Filtros Personalizados
1. Selecione **"Personalizado"**
2. Configure:
- Data Início: Hoje
- Hora Início: 00:00
- Data Fim: Hoje
- Hora Fim: Hora atual
3. Desmarque algumas métricas (deixe só 3-4 marcadas)
4. Exporte PDF ou CSV
5. Verifique:
- ✅ Apenas as métricas selecionadas aparecem
- ✅ Período correto é respeitado
---
### Teste 5: Coleta Automática de Métricas
1. Abra o **Console do Navegador** (F12)
2. Vá para a aba **Network** (Rede)
3. Aguarde 30 segundos
4. Verifique:
- ✅ Aparece requisição para `salvarMetricas`
- ✅ Status 200 (sucesso)
5. No Console, digite:
```javascript
console.error("Teste de erro");
```
6. Aguarde 30 segundos
7. Verifique o card "Erros (30s)":
- ✅ Contador deve aumentar
---
## 📊 Métricas Coletadas
### Métricas de Sistema
- **CPU**: Estimativa baseada em Performance API (0-100%)
- **Memória**: `performance.memory` (Chrome) ou estimativa (0-100%)
- **Latência de Rede**: Tempo de resposta do servidor (ms)
- **Armazenamento**: Storage API ou estimativa (0-100%)
### Métricas de Aplicação
- **Usuários Online**: Contagem via query Convex
- **Mensagens/min**: Taxa de mensagens (a ser implementado)
- **Tempo de Resposta**: Latência de queries Convex (ms)
- **Erros**: Contagem de erros capturados (30s)
---
## ⚙️ Configurações Avançadas
### Alterar Intervalo de Coleta
Por padrão, métricas são coletadas a cada **30 segundos**. Para alterar:
```typescript
// Em SystemMonitorCard.svelte, linha ~52
stopCollection = startMetricsCollection(client, 30000); // 30s
```
Altere `30000` para o valor desejado em milissegundos.
### Alterar Thresholds de Cores
As cores mudam baseado nos valores:
- **Verde** (Normal): < 60%
- **Amarelo** (Atenção): 60-80%
- **Vermelho** (Crítico): > 80%
Para alterar, edite a função `getStatusColor` em `SystemMonitorCard.svelte`.
### Retenção de Dados
Por padrão, métricas são mantidas por **30 dias**. Após isso, são automaticamente deletadas.
Para alterar, edite `monitoramento.ts`:
```typescript
// Linha ~56
const dataLimite = Date.now() - 30 * 24 * 60 * 60 * 1000; // 30 dias
```
---
## 🐛 Solução de Problemas
### Métricas não aparecem
- ✅ Verifique se o backend Convex está rodando
- ✅ Abra o Console e veja se há erros
- ✅ Aguarde 30 segundos para primeira coleta
### Alertas não disparam
- ✅ Verifique se o alerta está **Ativo**
- ✅ Verifique se o threshold está configurado corretamente
- ✅ Lembre-se: alertas não duplicam em 5 minutos
### Relatórios vazios
- ✅ Verifique se há métricas no período selecionado
- ✅ Aguarde pelo menos 1 minuto após iniciar o sistema
- ✅ Verifique se selecionou pelo menos 1 métrica
### Erro ao exportar PDF/CSV
- ✅ Verifique se instalou as dependências (`npm install`)
- ✅ Veja o Console para erros específicos
- ✅ Tente período menor (menos dados)
---
## 🎯 Próximos Passos (Melhorias Futuras)
1. **Gráficos Visuais**: Adicionar charts com histórico
2. **Email de Alertas**: Integrar com sistema de email
3. **Dashboard Personalizado**: Permitir usuário escolher métricas
4. **Métricas de Backend**: CPU/RAM real do servidor Node.js
5. **Alertas Inteligentes**: Machine learning para anomalias
6. **Webhooks**: Notificar sistemas externos
7. **Métricas Customizadas**: Permitir criar métricas personalizadas
---
## ✨ Funcionalidades Destacadas
-**Monitoramento em Tempo Real**: Atualização automática a cada 30s
-**Alertas Customizáveis**: Configure thresholds personalizados
-**Notificações Integradas**: Via chat (sino de notificações)
-**Relatórios Profissionais**: PDF e CSV com estatísticas
-**Interface Moderna**: Design responsivo com DaisyUI
-**Performance**: Coleta eficiente sem sobrecarregar o sistema
-**Histórico**: 30 dias de dados armazenados
-**Sem Duplicatas**: Alertas inteligentes (1 a cada 5 min)
---
## 📝 Notas Técnicas
- **Browser API**: Usa APIs modernas do navegador (pode não funcionar em browsers antigos)
- **Chrome Memory**: `performance.memory` só funciona em Chrome/Edge
- **Rate Limiting**: Coleta limitada a 1x/30s para evitar sobrecarga
- **Cleanup Automático**: Métricas antigas são deletadas automaticamente
- **Timezone**: Todas as datas usam timezone do navegador
- **Permissões**: Apenas usuários TI podem acessar o monitoramento
---
## 🚀 Sistema Pronto para Produção!
Todos os componentes foram implementados e testados. O sistema está robusto e profissional, pronto para uso em produção.
**Desenvolvido por**: Secretaria de Esportes de Pernambuco
**Versão**: 2.0
**Data**: Outubro 2025