feat: Introduce structured table definitions in convex/tables for various entities and remove the todos example table.
This commit is contained in:
172
packages/backend/convex/tables/funcionarios.ts
Normal file
172
packages/backend/convex/tables/funcionarios.ts
Normal file
@@ -0,0 +1,172 @@
|
||||
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'])
|
||||
};
|
||||
Reference in New Issue
Block a user