diff --git a/.agent/rules/convex-typing.md b/.agent/rules/convex-typing.md new file mode 100644 index 0000000..b3a8929 --- /dev/null +++ b/.agent/rules/convex-typing.md @@ -0,0 +1,69 @@ +--- +trigger: glob +description: Regras de tipagem para queries e mutations do Convex +globs: **/*.svelte.ts,**/*.svelte +--- + +# Regras de Tipagem do Convex + +## Regra Principal + +**NUNCA** crie anotações de tipo manuais para queries ou mutations do Convex. Os tipos já são inferidos automaticamente pelo Convex. + +### ❌ Errado - Não faça isso: + +```typescript +// NÃO crie tipos manuais para o retorno de queries +type Funcionario = { + _id: Id<'funcionarios'>; + nome: string; + email: string; + // ... outras propriedades +}; + +const funcionarios: Funcionario[] = useQuery(api.funcionarios.getAll) ?? []; +``` + +### ✅ Correto - Use inferência automática: + +```typescript +// O tipo já vem inferido automaticamente +const funcionarios = useQuery(api.funcionarios.getAll); +``` + +--- + +## Quando Tipar É Necessário + +Em situações onde você **realmente precisa** de um tipo explícito (ex: props de componentes, variáveis de estado, etc.), use `FunctionReturnType` para inferir o tipo: + +```typescript +import { FunctionReturnType } from 'convex/server'; +import { api } from '$convex/_generated/api'; + +// Infere o tipo de retorno da query +type FuncionariosQueryResult = FunctionReturnType; + +// Agora pode usar em props de componentes +interface Props { + funcionarios: FuncionariosQueryResult; +} +``` + +### Casos de Uso Válidos para `FunctionReturnType`: + +1. **Props de componentes** - quando um componente filho recebe dados de uma query +2. **Variáveis derivadas** - quando precisa tipar uma transformação dos dados +3. **Funções auxiliares** - quando cria funções que operam sobre os dados da query +4. **Stores/Estado global** - quando armazena dados em estado externo ao componente + +--- + +## Resumo + +| Situação | Abordagem | +| --------------------------- | ------------------------------------------------- | +| Usar `useQuery` diretamente | Deixe o tipo ser inferido automaticamente | +| Props de componentes | Use `FunctionReturnType` | +| Transformações de dados | Use `FunctionReturnType` | +| Anotações manuais de tipo | **NUNCA** - sempre infira do Convex | diff --git a/.agent/rules/svelte-rules.md b/.agent/rules/svelte-rules.md index 30b100a..1737d67 100644 --- a/.agent/rules/svelte-rules.md +++ b/.agent/rules/svelte-rules.md @@ -1,5 +1,6 @@ --- -trigger: glob +trigger: model_decision +description: whenever you're working with Svelte files globs: **/*.svelte.ts,**/*.svelte --- @@ -19,8 +20,8 @@ After calling the list-sections tool, you MUST analyze the returned documentatio ### 3. svelte-autofixer -Analyzes Svelte code and returns issues and suggestions. -You MUST use this tool whenever writing Svelte code before sending it to the user. Keep calling it until no issues or suggestions are returned. +Analyzes Svelte code and returns problems and suggestions. +You MUST use this tool whenever you write Svelte code before submitting it to the user. Keep calling it until no problems or suggestions are returned. Remember that this does not eliminate all lint errors, so still keep checking for lint errors before proceeding. ### 4. playground-link diff --git a/.prettierrc b/.prettierrc index fb40e07..e923d07 100644 --- a/.prettierrc +++ b/.prettierrc @@ -15,4 +15,4 @@ } } ] -} \ No newline at end of file +} diff --git a/.vscode/settings.json b/.vscode/settings.json index dca4a8d..bdba50b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,45 +1,38 @@ { - // "editor.formatOnSave": true, - // "editor.defaultFormatter": "biomejs.biome", - // "editor.codeActionsOnSave": { - // "source.fixAll.biome": "always" - // }, - // "[typescript]": { - // "editor.defaultFormatter": "biomejs.biome" - // }, - // "[svelte]": { - // "editor.defaultFormatter": "biomejs.biome" - // }, - "eslint.useFlatConfig": true, - "eslint.workingDirectories": [ - { - "pattern": "apps/*" - }, - { - "pattern": "packages/*" - } - ], - "eslint.validate": [ - "javascript", - "javascriptreact", - "typescript", - "typescriptreact", - "svelte" - ], - "eslint.options": { - "cache": true, - "cacheLocation": ".eslintcache" - }, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit", - "source.addMissingImports": "always", - "source.removeUnusedImports": "always", - }, - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[jsonc]": { - "editor.defaultFormatter": "vscode.json-language-features" - }, - "editor.tabSize": 2 -} \ No newline at end of file + // "editor.formatOnSave": true, + // "editor.defaultFormatter": "biomejs.biome", + // "editor.codeActionsOnSave": { + // "source.fixAll.biome": "always" + // }, + // "[typescript]": { + // "editor.defaultFormatter": "biomejs.biome" + // }, + // "[svelte]": { + // "editor.defaultFormatter": "biomejs.biome" + // }, + "eslint.useFlatConfig": true, + "eslint.workingDirectories": [ + { + "pattern": "apps/*" + }, + { + "pattern": "packages/*" + } + ], + "eslint.validate": ["javascript", "typescript", "svelte"], + "eslint.options": { + "cache": true, + "cacheLocation": ".eslintcache" + }, + "editor.formatOnSave": true, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "vscode.json-language-features" + }, + "[svelte]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.tabSize": 2 +} diff --git a/RESULTADO_TESTES_BANCO_HORAS.md b/RESULTADO_TESTES_BANCO_HORAS.md deleted file mode 100644 index a60cd04..0000000 --- a/RESULTADO_TESTES_BANCO_HORAS.md +++ /dev/null @@ -1,283 +0,0 @@ -# Resultado dos Testes do Sistema de Banco de Horas - -## Data: 06/12/2025 -## Usuário de Teste: dfw@poli.br - ---- - -## ✅ TESTES CONCLUÍDOS COM SUCESSO - -### 1. ✅ Acesso e Autenticação -- **Status:** PASSOU -- **Resultado:** Login funcionando corretamente -- **Observações:** Sistema autenticado, navegação funcionando - -### 2. ✅ Navegação para Banco de Horas Individual -- **Status:** PASSOU -- **Resultado:** Página "Meu Banco de Horas" carregando corretamente -- **Elementos Verificados:** - - Título "Banco de Hora Mensal" visível - - Botões "Exportar PDF" e "Exportar Excel" presentes - - Navegação de mês (anterior/próximo) funcionando - - Abas de navegação funcionando - -### 3. ✅ Painel de Configurações (TI) -- **Status:** PASSOU -- **Resultado:** Página de configurações carregando corretamente -- **Elementos Verificados:** - - Campos para limite de saldo positivo (horas e minutos) - - Campos para limite de saldo negativo (horas e minutos) - - Checkbox para ativar alertas - - Dropdown para periodicidade de verificação (Diário, Semanal, Mensal) - - Botão "Salvar Configurações Gerais" presente - - Botão "Novo Alerta" presente -- **Teste Realizado:** - - Alterado limite de saldo positivo para 10 horas - - Alterado limite de saldo negativo para 5 horas - - Clicado em "Salvar Configurações Gerais" - - **Resultado:** Sem erros no console, configuração aparentemente salva - -### 4. ✅ Wizard Gerencial (RH) -- **Status:** PASSOU -- **Resultado:** Página do wizard carregando corretamente -- **URL:** `/recursos-humanos/controle-ponto/banco-horas` -- **Observações:** Página acessível, sem erros no console - -### 5. ✅ Queries do Backend -- **Status:** PASSOU -- **Queries Verificadas:** - - `obterBancoHorasMensal` - ✅ Implementada e funcionando - - `listarHistoricoMensal` - ✅ Implementada e funcionando - - `listarHistoricoAlteracoesBancoHoras` - ✅ Implementada e funcionando - - `listarAjustesBancoHoras` - ✅ Implementada e funcionando - - `verificarInconsistencias` - ✅ Implementada e funcionando - - `obterConfiguracaoBancoHoras` - ✅ Implementada e funcionando - - `obterAlertasConfigurados` - ✅ Implementada e funcionando - -### 6. ✅ Mutations do Backend -- **Status:** PASSOU -- **Mutations Verificadas:** - - `atualizarConfiguracaoBancoHoras` - ✅ Implementada e funcionando - - `criarAlertaBancoHoras` - ✅ Implementada - - `atualizarAlertaBancoHoras` - ✅ Implementada - - `ajustarBancoHoras` - ✅ Implementada - - `criarAjusteBancoHoras` - ✅ Implementada - -### 7. ✅ Console do Navegador -- **Status:** PASSOU -- **Resultado:** Sem erros críticos -- **Avisos Encontrados (Esperados):** - - Avisos de segurança do Electron (normais em desenvolvimento) - - Mensagens do ChatWidget (normais) - - Permissão de webcam não concedida (esperado em navegador automatizado) - - Queries do Convex executando corretamente - ---- - -## ⏳ TESTES PENDENTES (Requerem Interação Manual) - -Devido às limitações do navegador automatizado (necessidade de permissões de câmera/GPS, interações complexas), os seguintes testes devem ser realizados manualmente: - -### 1. ⏳ Registros de Ponto -**Status:** PENDENTE - -**O que testar:** -- Registrar entrada, saída almoço, retorno almoço e saída -- Verificar se o banco de horas é atualizado automaticamente -- Verificar cálculo de saldo diário e mensal -- Testar horas extras -- Testar horas negativas (atraso/saída antecipada) - -**Como testar:** -1. Navegar para "Meu Perfil" > "Meu Ponto" -2. Registrar ponto completo para vários dias -3. Verificar em "Meu Banco de Horas" se o saldo foi calculado corretamente - -### 2. ⏳ Atestados Médicos -**Status:** PENDENTE - -**O que testar:** -- Criar atestado médico para 2 dias -- Verificar se banco de horas foi recalculado automaticamente -- Verificar se dias aparecem como tipo "atestado" -- Verificar se saldo não foi descontado - -### 3. ⏳ Declarações de Comparecimento -**Status:** PENDENTE - -**O que testar:** -- Criar declaração de comparecimento -- Verificar recálculo automático -- Verificar tipo de dia - -### 4. ⏳ Licenças (Maternidade/Paternidade) -**Status:** PENDENTE - -**O que testar:** -- Criar licença de maternidade/paternidade -- Verificar recálculo automático -- Verificar tipo "licenca" nos dias - -### 5. ⏳ Ausências Aprovadas -**Status:** PENDENTE - -**O que testar:** -- Solicitar ausência -- Aprovar ausência (como gestor) -- Verificar recálculo automático -- Verificar tipo "ausencia" nos dias - -### 6. ⏳ Ajustes Manuais -**Status:** PENDENTE - -**O que testar:** -- Criar ajuste para abonar horas -- Criar ajuste para descontar horas -- Criar ajuste para compensar horas -- Verificar se banco de horas foi atualizado -- Verificar tipos "abonado" e "descontado" - -### 7. ⏳ Detecção de Inconsistências -**Status:** PENDENTE - -**O que testar:** -- Registrar ponto durante atestado (inconsistência) -- Registrar ponto durante licença (inconsistência) -- Registrar ponto durante ausência (inconsistência) -- Verificar se inconsistências foram detectadas e registradas -- Verificar se aparecem na lista de inconsistências - -### 8. ⏳ Configuração de Alertas Específicos -**Status:** PENDENTE - -**O que testar:** -- Criar novo alerta -- Configurar tipo, periodicidade, canais -- Configurar destinatários -- Salvar e verificar se alerta foi criado - -### 9. ⏳ Disparo de Alertas -**Status:** PENDENTE - -**O que testar:** -- Simular condições para disparo de alertas -- Verificar se alertas são enviados por email/chat -- Verificar periodicidade de verificação - -### 10. ⏳ Relatórios PDF -**Status:** PENDENTE - -**O que testar:** -- Clicar em "Exportar PDF" -- Verificar se PDF foi gerado -- Verificar conteúdo do PDF (resumo, detalhamento, gráficos, inconsistências) - -### 11. ⏳ Relatórios Excel -**Status:** PENDENTE - -**O que testar:** -- Clicar em "Exportar Excel" -- Verificar se Excel foi gerado -- Verificar conteúdo do Excel (planilhas, resumos, formatação) - -### 12. ⏳ Visualização Gerencial (RH) - Funcionalidades -**Status:** PENDENTE - -**O que testar:** -- Testar filtros (funcionário, período) -- Verificar visualização de todos funcionários -- Testar ações de ajuste manual -- Verificar visualização de inconsistências - ---- - -## 📊 RESUMO GERAL - -### Testes Automatizados: 7/20 (35%) -- ✅ Acesso e autenticação -- ✅ Navegação básica -- ✅ Painel de configurações (carregamento e interface) -- ✅ Wizard gerencial (carregamento) -- ✅ Queries do backend -- ✅ Mutations do backend -- ✅ Console do navegador - -### Testes Manuais Necessários: 13/20 (65%) -- ⏳ Registros de ponto -- ⏳ Atestados médicos -- ⏳ Declarações de comparecimento -- ⏳ Licenças -- ⏳ Ausências aprovadas -- ⏳ Ajustes manuais -- ⏳ Detecção de inconsistências -- ⏳ Configuração de alertas específicos -- ⏳ Disparo de alertas -- ⏳ Relatórios PDF -- ⏳ Relatórios Excel -- ⏳ Funcionalidades do wizard gerencial -- ⏳ Validação de cálculos - ---- - -## 🔍 OBSERVAÇÕES IMPORTANTES - -1. **Sistema está funcional:** Todas as queries e mutations necessárias estão implementadas e funcionando -2. **Interface carregando corretamente:** Componentes Svelte estão funcionando -3. **Sem erros críticos:** Console do navegador não mostra erros que impeçam o funcionamento -4. **Testes manuais necessários:** Devido à complexidade das interações (câmera, GPS, uploads), alguns testes precisam ser feitos manualmente -5. **Configurações testadas:** Interface de configurações está funcionando, valores podem ser alterados e salvos - ---- - -## 📝 PRÓXIMOS PASSOS RECOMENDADOS - -1. **Testes Manuais Prioritários:** - - Registrar pontos para vários dias consecutivos - - Criar atestados e verificar recálculo automático - - Testar ajustes manuais (abonar, descontar) - - Verificar detecção de inconsistências - -2. **Validação de Cálculos:** - - Verificar se saldos estão corretos - - Verificar se tipos de dia estão corretos - - Verificar se ajustes estão sendo aplicados corretamente - - Verificar se histórico mensal está sendo mantido - -3. **Testes de Integração:** - - Verificar se atestados disparam recálculo - - Verificar se ausências disparam recálculo - - Verificar se ajustes disparam recálculo - - Verificar se inconsistências são detectadas automaticamente - -4. **Testes de Alertas:** - - Configurar alertas específicos - - Simular condições para disparo - - Verificar envio por email/chat - - Verificar periodicidade - -5. **Testes de Relatórios:** - - Gerar PDF e verificar conteúdo - - Gerar Excel e verificar conteúdo - - Verificar formatação e dados - ---- - -## ✅ CONCLUSÃO - -O sistema de banco de horas está **funcional e pronto para testes manuais**. Todas as funcionalidades básicas foram verificadas e estão operacionais: - -- ✅ Interface carregando corretamente -- ✅ Queries e mutations implementadas -- ✅ Painel de configurações funcionando -- ✅ Wizard gerencial acessível -- ✅ Sem erros críticos no console - -Os testes manuais são necessários para validar: -- Cálculos de saldo -- Integração com atestados, licenças e ausências -- Detecção de inconsistências -- Disparo de alertas -- Geração de relatórios - -**Recomendação:** Prosseguir com testes manuais seguindo o documento `TESTES_BANCO_HORAS.md` para validar todas as funcionalidades. - diff --git a/RESUMO_TESTES_BANCO_HORAS.md b/RESUMO_TESTES_BANCO_HORAS.md deleted file mode 100644 index ea10704..0000000 --- a/RESUMO_TESTES_BANCO_HORAS.md +++ /dev/null @@ -1,185 +0,0 @@ -# Resumo dos Testes do Sistema de Banco de Horas - -## Status Geral: ✅ Sistema Funcional - -### Testes Realizados via Navegador Automatizado - -#### ✅ 1. Acesso ao Sistema -- **Status:** ✅ PASSOU -- **Resultado:** Login funcionando corretamente com usuário dfw@poli.br -- **Observações:** Sistema autenticado e navegação funcionando - -#### ✅ 2. Navegação para Banco de Horas -- **Status:** ✅ PASSOU -- **Resultado:** Página "Meu Banco de Horas" carregando corretamente -- **Elementos Verificados:** - - Título "Banco de Hora Mensal" visível - - Botões "Exportar PDF" e "Exportar Excel" presentes - - Navegação de mês (anterior/próximo) funcionando - - Abas de navegação (Meu Ponto, Meu Banco de Horas) funcionando - -#### ✅ 3. Queries do Backend -- **Status:** ✅ PASSOU -- **Queries Verificadas:** - - `obterBancoHorasMensal` - ✅ Implementada - - `listarHistoricoMensal` - ✅ Implementada - - `listarHistoricoAlteracoesBancoHoras` - ✅ Implementada - - `listarAjustesBancoHoras` - ✅ Implementada - - `verificarInconsistencias` - ✅ Implementada -- **Observações:** Todas as queries necessárias estão implementadas e funcionando - -#### ✅ 4. Console do Navegador -- **Status:** ✅ PASSOU -- **Resultado:** Sem erros críticos -- **Avisos Encontrados (Esperados):** - - Avisos de segurança do Electron (normais em desenvolvimento) - - Mensagens do ChatWidget (normais) - - Permissão de webcam não concedida (esperado em navegador automatizado) - - Queries do Convex executando corretamente - -### Testes que Requerem Interação Manual - -Devido às limitações do navegador automatizado (necessidade de permissões de câmera/GPS, interações complexas), os seguintes testes devem ser realizados manualmente: - -#### 🔄 1. Registros de Ponto -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Registrar entrada, saída almoço, retorno almoço e saída -- Verificar se o banco de horas é atualizado automaticamente -- Verificar cálculo de saldo diário e mensal - -**Como testar:** -1. Navegar para "Meu Ponto" -2. Registrar ponto completo (entrada 08:00, saída almoço 12:00, retorno 13:00, saída 17:00) -3. Verificar em "Meu Banco de Horas" se o saldo foi calculado corretamente - -#### 🔄 2. Atestados Médicos -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Criar atestado médico para 2 dias -- Verificar se banco de horas foi recalculado -- Verificar se dias aparecem como tipo "atestado" -- Verificar se saldo não foi descontado - -#### 🔄 3. Licenças (Maternidade/Paternidade) -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Criar licença de maternidade/paternidade -- Verificar recálculo automático do banco de horas -- Verificar tipo "licenca" nos dias - -#### 🔄 4. Ausências Aprovadas -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Solicitar ausência -- Aprovar ausência (como gestor) -- Verificar recálculo automático -- Verificar tipo "ausencia" nos dias - -#### 🔄 5. Ajustes Manuais -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Criar ajuste para abonar horas -- Criar ajuste para descontar horas -- Criar ajuste para compensar horas -- Verificar se banco de horas foi atualizado -- Verificar tipos "abonado" e "descontado" - -#### 🔄 6. Detecção de Inconsistências -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Registrar ponto durante atestado (inconsistência) -- Registrar ponto durante licença (inconsistência) -- Registrar ponto durante ausência (inconsistência) -- Verificar se inconsistências foram detectadas e registradas - -#### 🔄 7. Configuração de Alertas -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Acessar "Painel de TI" > "Configurações do Banco de Horas" -- Configurar limites de saldo -- Configurar alertas (tipo, periodicidade, canais) -- Salvar configurações -- Verificar se alertas são disparados quando necessário - -#### 🔄 8. Relatórios PDF e Excel -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Clicar em "Exportar PDF" -- Clicar em "Exportar Excel" -- Verificar se arquivos são gerados corretamente -- Verificar conteúdo dos relatórios - -#### 🔄 9. Visualização Gerencial (RH) -**Status:** ⏳ PENDENTE (Requer interação manual) - -**O que testar:** -- Acessar "Recursos Humanos" > "Controle de Ponto" > "Banco de Horas" -- Testar filtros (funcionário, período) -- Verificar visualização de todos funcionários -- Testar ações de ajuste manual - -### Código Verificado - -#### Backend (Convex) -- ✅ `packages/backend/convex/pontos.ts` - Funções principais implementadas -- ✅ `packages/backend/convex/tables/ponto.ts` - Schema das tabelas correto -- ✅ Queries e mutations necessárias implementadas - -#### Frontend (Svelte) -- ✅ `apps/web/src/lib/components/ponto/BancoHorasMensal.svelte` - Componente principal -- ✅ `apps/web/src/routes/(dashboard)/ti/configuracoes-banco-horas/+page.svelte` - Painel de configuração -- ✅ `apps/web/src/routes/(dashboard)/recursos-humanos/controle-ponto/banco-horas/+page.svelte` - Wizard gerencial - -### Próximos Passos Recomendados - -1. **Testes Manuais Prioritários:** - - Registrar pontos para vários dias - - Criar atestados e verificar recálculo - - Testar ajustes manuais - - Verificar detecção de inconsistências - -2. **Validação de Cálculos:** - - Verificar se saldos estão corretos - - Verificar se tipos de dia estão corretos - - Verificar se ajustes estão sendo aplicados - -3. **Testes de Integração:** - - Verificar se atestados disparam recálculo - - Verificar se ausências disparam recálculo - - Verificar se ajustes disparam recálculo - -4. **Testes de Alertas:** - - Configurar alertas - - Simular condições para disparo - - Verificar envio por email/chat - -### Observações Importantes - -1. **Sistema está funcional:** Todas as queries e mutations necessárias estão implementadas -2. **Interface carregando corretamente:** Componentes Svelte estão funcionando -3. **Sem erros críticos:** Console do navegador não mostra erros que impeçam o funcionamento -4. **Testes manuais necessários:** Devido à complexidade das interações (câmera, GPS, uploads), alguns testes precisam ser feitos manualmente - -### Checklist de Validação Final - -Após testes manuais, verificar: -- [ ] Cálculo de saldo está correto -- [ ] Tipo de dia está correto (normal, atestado, licenca, ausencia, abonado, descontado) -- [ ] Motivo do abono está registrado -- [ ] Ajustes estão vinculados corretamente -- [ ] Inconsistências estão sendo detectadas -- [ ] Alertas estão sendo disparados quando configurados -- [ ] Relatórios estão sendo gerados corretamente -- [ ] Interface está mostrando todas as informações -- [ ] Não há erros no console do navegador -- [ ] Não há erros no backend (logs do Convex) - diff --git a/TESTES_BANCO_HORAS.md b/TESTES_BANCO_HORAS.md deleted file mode 100644 index 2de3c8b..0000000 --- a/TESTES_BANCO_HORAS.md +++ /dev/null @@ -1,319 +0,0 @@ -# Plano de Testes - Sistema de Banco de Horas - -## Objetivo -Validar todas as funcionalidades do sistema de banco de horas, incluindo: -- Registros de ponto -- Atestados médicos -- Licenças (maternidade, paternidade) -- Ausências aprovadas -- Ajustes manuais (abonar, descontar, compensar) -- Detecção de inconsistências -- Alertas configuráveis -- Relatórios (PDF e Excel) - -## Usuário de Teste -- Email: dfw@poli.br -- Senha: Admin@2025 -- Perfil: Funcionário e Gestor (pode aprovar suas próprias solicitações) - -## Cenários de Teste - -### 1. Teste de Registros de Ponto Básicos -**Objetivo:** Verificar se o sistema calcula corretamente o banco de horas com registros normais - -**Passos:** -1. Fazer login com dfw@poli.br -2. Navegar para "Meu Perfil" > "Meu Ponto" -3. Registrar ponto para 5 dias consecutivos com horários normais: - - Dia 1: Entrada 08:00, Saída Almoço 12:00, Retorno 13:00, Saída 17:00 (8h trabalhadas) - - Dia 2: Entrada 08:00, Saída Almoço 12:00, Retorno 13:00, Saída 17:00 (8h trabalhadas) - - Dia 3: Entrada 08:00, Saída Almoço 12:00, Retorno 13:00, Saída 17:00 (8h trabalhadas) - - Dia 4: Entrada 08:00, Saída Almoço 12:00, Retorno 13:00, Saída 17:00 (8h trabalhadas) - - Dia 5: Entrada 08:00, Saída Almoço 12:00, Retorno 13:00, Saída 17:00 (8h trabalhadas) -4. Verificar em "Meu Banco de Horas" se o saldo está correto (deve ser 0 ou próximo de 0) - -**Resultado Esperado:** Saldo diário e mensal calculado corretamente - ---- - -### 2. Teste de Horas Extras -**Objetivo:** Verificar cálculo de horas extras - -**Passos:** -1. Registrar ponto com horas extras: - - Entrada 08:00, Saída Almoço 12:00, Retorno 13:00, Saída 19:00 (9h trabalhadas = +1h extra) -2. Verificar em "Meu Banco de Horas" se o saldo positivo foi registrado - -**Resultado Esperado:** Saldo positivo de 1 hora registrado - ---- - -### 3. Teste de Horas Negativas (Atraso/Saída Antecipada) -**Objetivo:** Verificar cálculo de horas negativas - -**Passos:** -1. Registrar ponto com atraso: - - Entrada 09:00, Saída Almoço 12:00, Retorno 13:00, Saída 17:00 (7h trabalhadas = -1h) -2. Verificar em "Meu Banco de Horas" se o saldo negativo foi registrado - -**Resultado Esperado:** Saldo negativo de 1 hora registrado - ---- - -### 4. Teste de Atestado Médico -**Objetivo:** Verificar se atestado médico é considerado no banco de horas - -**Passos:** -1. Navegar para "Meu Perfil" > "Minha Ausência" ou área de atestados -2. Criar um atestado médico para 2 dias consecutivos -3. Verificar se o banco de horas foi recalculado automaticamente -4. Verificar em "Meu Banco de Horas" se os dias de atestado aparecem com tipo "atestado" -5. Verificar se o saldo não foi descontado para esses dias - -**Resultado Esperado:** -- Dias de atestado marcados como tipo "atestado" -- Saldo não descontado -- Motivo do abono registrado - ---- - -### 5. Teste de Declaração de Comparecimento -**Objetivo:** Verificar se declaração de comparecimento é considerada - -**Passos:** -1. Criar uma declaração de comparecimento para 1 dia -2. Verificar se o banco de horas foi recalculado -3. Verificar se o dia aparece com tipo apropriado - -**Resultado Esperado:** Dia marcado corretamente e saldo não descontado - ---- - -### 6. Teste de Licença de Maternidade -**Objetivo:** Verificar se licença de maternidade é considerada - -**Passos:** -1. Criar uma licença de maternidade para 5 dias -2. Verificar se o banco de horas foi recalculado -3. Verificar se os dias aparecem com tipo "licenca" - -**Resultado Esperado:** Dias marcados como tipo "licenca" e saldo não descontado - ---- - -### 7. Teste de Licença de Paternidade -**Objetivo:** Verificar se licença de paternidade é considerada - -**Passos:** -1. Criar uma licença de paternidade para 3 dias -2. Verificar se o banco de horas foi recalculado -3. Verificar se os dias aparecem com tipo "licenca" - -**Resultado Esperado:** Dias marcados como tipo "licenca" e saldo não descontado - ---- - -### 8. Teste de Ausência Aprovada -**Objetivo:** Verificar se ausência aprovada é considerada - -**Passos:** -1. Navegar para "Meu Perfil" > "Minha Ausência" -2. Solicitar uma ausência para 2 dias -3. Navegar para "Aprovar Ausência" (como gestor) -4. Aprovar a ausência -5. Verificar se o banco de horas foi recalculado -6. Verificar se os dias aparecem com tipo "ausencia" - -**Resultado Esperado:** Dias marcados como tipo "ausencia" e saldo não descontado - ---- - -### 9. Teste de Ajuste Manual - Abonar -**Objetivo:** Verificar se ajuste manual de abono funciona - -**Passos:** -1. Navegar para área de ajustes de banco de horas (RH ou gestor) -2. Criar um ajuste para abonar 4 horas de um dia específico -3. Verificar se o banco de horas foi recalculado -4. Verificar se o dia aparece com tipo "abonado" -5. Verificar se o saldo foi ajustado corretamente - -**Resultado Esperado:** Dia marcado como "abonado" e saldo ajustado com +4 horas - ---- - -### 10. Teste de Ajuste Manual - Descontar -**Objetivo:** Verificar se ajuste manual de desconto funciona - -**Passos:** -1. Criar um ajuste para descontar 2 horas de um dia específico -2. Verificar se o banco de horas foi recalculado -3. Verificar se o dia aparece com tipo "descontado" -4. Verificar se o saldo foi ajustado corretamente - -**Resultado Esperado:** Dia marcado como "descontado" e saldo ajustado com -2 horas - ---- - -### 11. Teste de Ajuste Manual - Compensar -**Objetivo:** Verificar se ajuste manual de compensação funciona - -**Passos:** -1. Criar um ajuste para compensar horas (transferir horas extras para compensar déficit) -2. Verificar se o banco de horas foi recalculado -3. Verificar se o saldo foi ajustado corretamente - -**Resultado Esperado:** Saldo ajustado conforme a compensação - ---- - -### 12. Teste de Detecção de Inconsistências - Ponto com Atestado -**Objetivo:** Verificar se o sistema detecta inconsistências - -**Passos:** -1. Criar um atestado médico para um dia -2. Registrar ponto para esse mesmo dia (inconsistência) -3. Verificar se uma inconsistência foi detectada e registrada -4. Verificar se aparece na lista de inconsistências - -**Resultado Esperado:** Inconsistência detectada e registrada - ---- - -### 13. Teste de Detecção de Inconsistências - Ponto com Licença -**Objetivo:** Verificar detecção de ponto durante licença - -**Passos:** -1. Criar uma licença para um dia -2. Registrar ponto para esse mesmo dia -3. Verificar se inconsistência foi detectada - -**Resultado Esperado:** Inconsistência detectada - ---- - -### 14. Teste de Detecção de Inconsistências - Ponto com Ausência -**Objetivo:** Verificar detecção de ponto durante ausência aprovada - -**Passos:** -1. Aprovar uma ausência para um dia -2. Registrar ponto para esse mesmo dia -3. Verificar se inconsistência foi detectada - -**Resultado Esperado:** Inconsistência detectada - ---- - -### 15. Teste de Saldo Negativo Excedido -**Objetivo:** Verificar se alerta é disparado quando saldo negativo excede limite - -**Passos:** -1. Configurar limite de saldo negativo em "Painel de TI" > "Configurações do Banco de Horas" -2. Criar vários registros que resultem em saldo negativo acima do limite -3. Verificar se alerta foi disparado - -**Resultado Esperado:** Alerta disparado quando limite é excedido - ---- - -### 16. Teste de Configuração de Alertas -**Objetivo:** Verificar se configurações de alertas funcionam - -**Passos:** -1. Navegar para "Painel de TI" > "Configurações do Banco de Horas" -2. Configurar alertas: - - Ativar alertas - - Configurar periodicidade (diário, semanal, mensal) - - Configurar canais (email, chat) - - Configurar thresholds -3. Salvar configurações -4. Verificar se configurações foram salvas - -**Resultado Esperado:** Configurações salvas e aplicadas - ---- - -### 17. Teste de Relatório PDF -**Objetivo:** Verificar geração de relatório PDF - -**Passos:** -1. Navegar para "Meu Banco de Horas" -2. Clicar em "Exportar PDF" -3. Verificar se PDF foi gerado com: - - Resumo mensal - - Detalhamento diário - - Ajustes - - Inconsistências - - Gráficos - -**Resultado Esperado:** PDF gerado com todas as informações - ---- - -### 18. Teste de Relatório Excel -**Objetivo:** Verificar geração de relatório Excel - -**Passos:** -1. Navegar para "Meu Banco de Horas" -2. Clicar em "Exportar Excel" -3. Verificar se Excel foi gerado com: - - Planilhas detalhadas - - Resumos - - Formatação condicional - -**Resultado Esperado:** Excel gerado com todas as informações - ---- - -### 19. Teste de Visualização Gerencial (RH) -**Objetivo:** Verificar wizard de banco de horas no RH - -**Passos:** -1. Navegar para "Recursos Humanos" > "Controle de Ponto" > "Banco de Horas" -2. Verificar se é possível: - - Filtrar por funcionário - - Filtrar por período - - Ver todos os funcionários - - Ver ajustes e inconsistências - - Fazer ajustes manuais - -**Resultado Esperado:** Wizard funcional com todos os filtros e ações - ---- - -### 20. Teste de Histórico e Acumulação Mensal -**Objetivo:** Verificar se histórico mensal é mantido corretamente - -**Passos:** -1. Verificar em "Meu Banco de Horas" se: - - Saldo inicial do mês está correto - - Saldo final do mês está correto - - Saldo acumulado está correto - - Histórico de meses anteriores está disponível - -**Resultado Esperado:** Histórico completo e correto - ---- - -## Checklist de Validação - -Após cada teste, verificar: -- [ ] Cálculo de saldo está correto -- [ ] Tipo de dia está correto (normal, atestado, licenca, ausencia, abonado, descontado) -- [ ] Motivo do abono está registrado -- [ ] Ajustes estão vinculados corretamente -- [ ] Inconsistências estão sendo detectadas -- [ ] Alertas estão sendo disparados quando configurados -- [ ] Relatórios estão sendo gerados corretamente -- [ ] Interface está mostrando todas as informações -- [ ] Não há erros no console do navegador -- [ ] Não há erros no backend (logs do Convex) - ---- - -## Notas -- Todos os testes devem ser executados sequencialmente -- Se algum teste falhar, corrigir o erro e repetir o teste -- Documentar qualquer comportamento inesperado -- Verificar logs do Convex para erros no backend - diff --git a/apps/web/eslint.config.js b/apps/web/eslint.config.js index 71da704..ed96683 100644 --- a/apps/web/eslint.config.js +++ b/apps/web/eslint.config.js @@ -1,7 +1,7 @@ import { config as svelteConfigBase } from '@sgse-app/eslint-config/svelte'; -import svelteConfig from './svelte.config.js'; -import ts from 'typescript-eslint'; import { defineConfig } from 'eslint/config'; +import ts from 'typescript-eslint'; +import svelteConfig from './svelte.config.js'; /** @type {import("eslint").Linter.Config} */ export default defineConfig([ diff --git a/apps/web/package.json b/apps/web/package.json index d39e5f2..49ad8c6 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -5,13 +5,13 @@ "type": "module", "scripts": { "dev": "bunx --bun vite dev", - "lint": "eslint .", - "format": "prettier --write .", "build": "bunx --bun vite build", "preview": "bunx --bun vite preview", "prepare": "svelte-kit sync || echo ''", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "eslint .", + "format": "prettier --write ." }, "devDependencies": { "@sgse-app/eslint-config": "*", diff --git a/apps/web/src/lib/components/ActionGuard.svelte b/apps/web/src/lib/components/ActionGuard.svelte index a6b4edb..6b718fb 100644 --- a/apps/web/src/lib/components/ActionGuard.svelte +++ b/apps/web/src/lib/components/ActionGuard.svelte @@ -19,7 +19,7 @@ // Usuário atual const currentUser = useQuery(api.auth.getCurrentUser, {}); - const permissaoQuery = $derived( + let permissaoQuery = $derived( currentUser?.data ? useQuery(api.permissoesAcoes.verificarAcao, { usuarioId: currentUser.data._id as Id<'usuarios'>, diff --git a/apps/web/src/lib/components/AlterarStatusFerias.svelte b/apps/web/src/lib/components/AlterarStatusFerias.svelte index 2ecdf5e..cad9d34 100644 --- a/apps/web/src/lib/components/AlterarStatusFerias.svelte +++ b/apps/web/src/lib/components/AlterarStatusFerias.svelte @@ -1,8 +1,8 @@ + +{#if open} + +{/if} + + diff --git a/apps/web/src/lib/components/ErrorModal.svelte b/apps/web/src/lib/components/ErrorModal.svelte index a9feb63..8f53324 100644 --- a/apps/web/src/lib/components/ErrorModal.svelte +++ b/apps/web/src/lib/components/ErrorModal.svelte @@ -1,5 +1,5 @@ +