From 8a0a4552f7f9af8cfe461838ee27388e66d0b55a Mon Sep 17 00:00:00 2001 From: deyvisonwanderley Date: Tue, 11 Nov 2025 16:10:08 -0300 Subject: [PATCH] refactor: enhance employee management with regime de trabalho integration - Added regime de trabalho selection to employee forms for better categorization. - Updated backend validation to include regime de trabalho options for employees. - Enhanced employee data handling by integrating regime de trabalho into various components. - Removed the print modal for financial data to streamline the employee profile interface. - Improved overall code clarity and maintainability across multiple files. --- apps/web/src/lib/components/PrintModal.svelte | 64 +- .../components/ferias/CalendarioFerias.svelte | 680 +++--- .../components/ferias/DashboardFerias.svelte | 765 ++++--- .../ferias/WizardSolicitacaoFerias.svelte | 1308 ++++++----- .../routes/(dashboard)/perfil/+page.svelte | 49 +- .../recursos-humanos/ferias/+page.svelte | 1915 +++++++++++++++-- .../funcionarios/[funcionarioId]/+page.svelte | 159 +- .../[funcionarioId]/editar/+page.svelte | 28 + .../funcionarios/cadastro/+page.svelte | 27 + bun.lock | 1 + packages/backend/convex/funcionarios.ts | 10 + packages/backend/convex/saldoFerias.ts | 9 +- 12 files changed, 3213 insertions(+), 1802 deletions(-) diff --git a/apps/web/src/lib/components/PrintModal.svelte b/apps/web/src/lib/components/PrintModal.svelte index 566f550..0811111 100644 --- a/apps/web/src/lib/components/PrintModal.svelte +++ b/apps/web/src/lib/components/PrintModal.svelte @@ -30,14 +30,27 @@ endereco: true, contato: true, cargo: true, + financeiro: true, bancario: true, }); + const REGIME_LABELS: Record = { + clt: "CLT", + estatutario_municipal: "Estatutário Municipal", + estatutario_pe: "Estatutário PE", + estatutario_federal: "Estatutário Federal", + }; + function getLabelFromOptions(value: string | undefined, options: Array<{value: string, label: string}>): string { if (!value) return "-"; return options.find(opt => opt.value === value)?.label || value; } + function getRegimeLabel(value?: string) { + if (!value) return "-"; + return REGIME_LABELS[value] ?? value; + } + function selectAll() { Object.keys(sections).forEach(key => { sections[key as keyof typeof sections] = true; @@ -173,6 +186,9 @@ if (funcionario.carteiraProfissionalNumero) { documentosData.push(['Cart. Profissional', `Nº ${funcionario.carteiraProfissionalNumero}${funcionario.carteiraProfissionalSerie ? ' - Série: ' + funcionario.carteiraProfissionalSerie : ''}`]); } + if (funcionario.carteiraProfissionalDataEmissao) { + documentosData.push(['Emissão Cart. Profissional', funcionario.carteiraProfissionalDataEmissao]); + } if (funcionario.reservistaNumero) { documentosData.push(['Reservista', `Nº ${funcionario.reservistaNumero}${funcionario.reservistaSerie ? ' - Série: ' + funcionario.reservistaSerie : ''}`]); } @@ -287,18 +303,19 @@ ['Tipo', funcionario.simboloTipo === 'cargo_comissionado' ? 'Cargo Comissionado' : 'Função Gratificada'], ]; - if (funcionario.simbolo) { - cargoData.push(['Símbolo', funcionario.simbolo.nome]); + const simboloInfo = funcionario.simbolo ?? funcionario.simboloDetalhes ?? funcionario.simboloDados; + if (simboloInfo) { + cargoData.push(['Símbolo', simboloInfo.nome]); + if (simboloInfo.descricao) cargoData.push(['Descrição do Símbolo', simboloInfo.descricao]); } if (funcionario.descricaoCargo) cargoData.push(['Descrição', funcionario.descricaoCargo]); + if (funcionario.regimeTrabalho) cargoData.push(['Regime do Funcionário', getRegimeLabel(funcionario.regimeTrabalho)]); if (funcionario.admissaoData) cargoData.push(['Data Admissão', funcionario.admissaoData]); if (funcionario.nomeacaoPortaria) cargoData.push(['Portaria', funcionario.nomeacaoPortaria]); if (funcionario.nomeacaoData) cargoData.push(['Data Nomeação', funcionario.nomeacaoData]); if (funcionario.nomeacaoDOE) cargoData.push(['DOE', funcionario.nomeacaoDOE]); - if (funcionario.pertenceOrgaoPublico) { - cargoData.push(['Pertence Órgão Público', 'Sim']); - if (funcionario.orgaoOrigem) cargoData.push(['Órgão Origem', funcionario.orgaoOrigem]); - } + cargoData.push(['Pertence Órgão Público', funcionario.pertenceOrgaoPublico ? 'Sim' : 'Não']); + if (funcionario.pertenceOrgaoPublico && funcionario.orgaoOrigem) cargoData.push(['Órgão Origem', funcionario.orgaoOrigem]); if (funcionario.aposentado && funcionario.aposentado !== 'nao') { cargoData.push(['Aposentado', getLabelFromOptions(funcionario.aposentado, APOSENTADO_OPTIONS)]); } @@ -315,6 +332,36 @@ yPosition = (doc as any).lastAutoTable.finalY + 10; } + // Dados Financeiros + if (sections.financeiro && funcionario.simbolo) { + const simbolo = funcionario.simbolo; + const financeiroData: any[] = [ + ['Símbolo', simbolo.nome], + ['Tipo', simbolo.tipo === 'cargo_comissionado' ? 'Cargo Comissionado' : 'Função Gratificada'], + ['Remuneração Total', `R$ ${simbolo.valor}`], + ]; + + if (funcionario.simboloTipo === 'cargo_comissionado') { + if (simbolo.vencValor) { + financeiroData.push(['Vencimento', `R$ ${simbolo.vencValor}`]); + } + if (simbolo.repValor) { + financeiroData.push(['Representação', `R$ ${simbolo.repValor}`]); + } + } + + autoTable(doc, { + startY: yPosition, + head: [['DADOS FINANCEIROS', '']], + body: financeiroData, + theme: 'grid', + headStyles: { fillColor: [41, 128, 185], fontStyle: 'bold' }, + styles: { fontSize: 9 }, + }); + + yPosition = (doc as any).lastAutoTable.finalY + 10; + } + // Dados Bancários if (sections.bancario && funcionario.contaBradescoNumero) { const bancarioData: any[] = [ @@ -428,6 +475,11 @@ Cargo e Vínculo + +