173 lines
5.7 KiB
TypeScript
173 lines
5.7 KiB
TypeScript
import { defineTable } from 'convex/server';
|
|
import { Infer, v } from 'convex/values';
|
|
|
|
export const simboloTipo = v.union(
|
|
v.literal('cargo_comissionado'),
|
|
v.literal('funcao_gratificada')
|
|
);
|
|
export type SimboloTipo = Infer<typeof simboloTipo>;
|
|
|
|
export const funcionariosTables = {
|
|
simbolos: defineTable({
|
|
nome: v.string(),
|
|
tipo: simboloTipo,
|
|
descricao: v.string(),
|
|
vencValor: v.string(),
|
|
repValor: v.string(),
|
|
valor: v.string()
|
|
}),
|
|
|
|
funcionarios: defineTable({
|
|
// Campos obrigatórios existentes
|
|
nome: v.string(),
|
|
nascimento: v.string(),
|
|
rg: v.string(),
|
|
cpf: v.string(),
|
|
endereco: v.string(),
|
|
cep: v.string(),
|
|
cidade: v.string(),
|
|
uf: v.string(),
|
|
telefone: v.string(),
|
|
email: v.string(),
|
|
matricula: v.optional(v.string()),
|
|
admissaoData: v.optional(v.string()),
|
|
desligamentoData: v.optional(v.string()),
|
|
simboloId: v.id('simbolos'),
|
|
simboloTipo: simboloTipo,
|
|
gestorId: v.optional(v.id('usuarios')),
|
|
statusFerias: v.optional(v.union(v.literal('ativo'), v.literal('em_ferias'))),
|
|
|
|
// Regime de trabalho (para cálculo correto de férias)
|
|
regimeTrabalho: v.optional(
|
|
v.union(
|
|
v.literal('clt'), // CLT - Consolidação das Leis do Trabalho
|
|
v.literal('estatutario_pe'), // Servidor Público Estadual de Pernambuco
|
|
v.literal('estatutario_federal'), // Servidor Público Federal
|
|
v.literal('estatutario_municipal') // Servidor Público Municipal
|
|
)
|
|
),
|
|
|
|
// Dados Pessoais Adicionais (opcionais)
|
|
nomePai: v.optional(v.string()),
|
|
nomeMae: v.optional(v.string()),
|
|
naturalidade: v.optional(v.string()),
|
|
naturalidadeUF: v.optional(v.string()),
|
|
sexo: v.optional(v.union(v.literal('masculino'), v.literal('feminino'), v.literal('outro'))),
|
|
estadoCivil: v.optional(
|
|
v.union(
|
|
v.literal('solteiro'),
|
|
v.literal('casado'),
|
|
v.literal('divorciado'),
|
|
v.literal('viuvo'),
|
|
v.literal('uniao_estavel')
|
|
)
|
|
),
|
|
nacionalidade: v.optional(v.string()),
|
|
|
|
// Documentos Pessoais
|
|
rgOrgaoExpedidor: v.optional(v.string()),
|
|
rgDataEmissao: v.optional(v.string()),
|
|
carteiraProfissionalNumero: v.optional(v.string()),
|
|
carteiraProfissionalSerie: v.optional(v.string()),
|
|
carteiraProfissionalDataEmissao: v.optional(v.string()),
|
|
reservistaNumero: v.optional(v.string()),
|
|
reservistaSerie: v.optional(v.string()),
|
|
tituloEleitorNumero: v.optional(v.string()),
|
|
tituloEleitorZona: v.optional(v.string()),
|
|
tituloEleitorSecao: v.optional(v.string()),
|
|
pisNumero: v.optional(v.string()),
|
|
|
|
// Formação e Saúde
|
|
grauInstrucao: v.optional(
|
|
v.union(
|
|
v.literal('fundamental'),
|
|
v.literal('medio'),
|
|
v.literal('superior'),
|
|
v.literal('pos_graduacao'),
|
|
v.literal('mestrado'),
|
|
v.literal('doutorado')
|
|
)
|
|
),
|
|
formacao: v.optional(v.string()),
|
|
formacaoRegistro: v.optional(v.string()),
|
|
grupoSanguineo: v.optional(
|
|
v.union(v.literal('A'), v.literal('B'), v.literal('AB'), v.literal('O'))
|
|
),
|
|
fatorRH: v.optional(v.union(v.literal('positivo'), v.literal('negativo'))),
|
|
|
|
// Cargo e Vínculo
|
|
descricaoCargo: v.optional(v.string()),
|
|
nomeacaoPortaria: v.optional(v.string()),
|
|
nomeacaoData: v.optional(v.string()),
|
|
nomeacaoDOE: v.optional(v.string()),
|
|
pertenceOrgaoPublico: v.optional(v.boolean()),
|
|
orgaoOrigem: v.optional(v.string()),
|
|
aposentado: v.optional(v.union(v.literal('nao'), v.literal('funape_ipsep'), v.literal('inss'))),
|
|
|
|
// Dados Bancários
|
|
contaBradescoNumero: v.optional(v.string()),
|
|
contaBradescoDV: v.optional(v.string()),
|
|
contaBradescoAgencia: v.optional(v.string()),
|
|
|
|
// Documentos Anexos (Storage IDs)
|
|
certidaoAntecedentesPF: v.optional(v.id('_storage')),
|
|
certidaoAntecedentesJFPE: v.optional(v.id('_storage')),
|
|
certidaoAntecedentesSDS: v.optional(v.id('_storage')),
|
|
certidaoAntecedentesTJPE: v.optional(v.id('_storage')),
|
|
certidaoImprobidade: v.optional(v.id('_storage')),
|
|
rgFrente: v.optional(v.id('_storage')),
|
|
rgVerso: v.optional(v.id('_storage')),
|
|
cpfFrente: v.optional(v.id('_storage')),
|
|
cpfVerso: v.optional(v.id('_storage')),
|
|
situacaoCadastralCPF: v.optional(v.id('_storage')),
|
|
tituloEleitorFrente: v.optional(v.id('_storage')),
|
|
tituloEleitorVerso: v.optional(v.id('_storage')),
|
|
comprovanteVotacao: v.optional(v.id('_storage')),
|
|
carteiraProfissionalFrente: v.optional(v.id('_storage')),
|
|
carteiraProfissionalVerso: v.optional(v.id('_storage')),
|
|
comprovantePIS: v.optional(v.id('_storage')),
|
|
certidaoRegistroCivil: v.optional(v.id('_storage')),
|
|
certidaoNascimentoDependentes: v.optional(v.id('_storage')),
|
|
cpfDependentes: v.optional(v.id('_storage')),
|
|
reservistaDoc: v.optional(v.id('_storage')),
|
|
comprovanteEscolaridade: v.optional(v.id('_storage')),
|
|
comprovanteResidencia: v.optional(v.id('_storage')),
|
|
comprovanteContaBradesco: v.optional(v.id('_storage')),
|
|
|
|
// Dependentes do funcionário (uploads opcionais)
|
|
dependentes: v.optional(
|
|
v.array(
|
|
v.object({
|
|
parentesco: v.union(
|
|
v.literal('filho'),
|
|
v.literal('filha'),
|
|
v.literal('conjuge'),
|
|
v.literal('outro')
|
|
),
|
|
nome: v.string(),
|
|
cpf: v.string(),
|
|
nascimento: v.string(),
|
|
documentoId: v.optional(v.id('_storage')),
|
|
// Benefícios/declarações por dependente
|
|
salarioFamilia: v.optional(v.boolean()),
|
|
impostoRenda: v.optional(v.boolean())
|
|
})
|
|
)
|
|
),
|
|
|
|
// Declarações (Storage IDs)
|
|
declaracaoAcumulacaoCargo: v.optional(v.id('_storage')),
|
|
declaracaoDependentesIR: v.optional(v.id('_storage')),
|
|
declaracaoIdoneidade: v.optional(v.id('_storage')),
|
|
termoNepotismo: v.optional(v.id('_storage')),
|
|
termoOpcaoRemuneracao: v.optional(v.id('_storage'))
|
|
})
|
|
.index('by_matricula', ['matricula'])
|
|
.index('by_nome', ['nome'])
|
|
.index('by_simboloId', ['simboloId'])
|
|
.index('by_simboloTipo', ['simboloTipo'])
|
|
.index('by_cpf', ['cpf'])
|
|
.index('by_rg', ['rg'])
|
|
.index('by_gestor', ['gestorId'])
|
|
};
|