Merge branch 'master' into feat-controle-ponto
This commit is contained in:
@@ -120,11 +120,78 @@ export const reportStatus = v.union(
|
||||
v.literal("falhou")
|
||||
);
|
||||
|
||||
export const situacaoContrato = v.union(
|
||||
v.literal("em_execucao"),
|
||||
v.literal("rescendido"),
|
||||
v.literal("aguardando_assinatura"),
|
||||
v.literal("finalizado")
|
||||
);
|
||||
|
||||
export default defineSchema({
|
||||
contratos: defineTable({
|
||||
contratadaId: v.id("empresas"),
|
||||
objeto: v.string(),
|
||||
numeroNotaEmpenho: v.string(),
|
||||
responsavelId: v.id("funcionarios"),
|
||||
departamento: v.string(),
|
||||
situacao: situacaoContrato,
|
||||
numeroProcessoLicitatorio: v.string(),
|
||||
modalidade: v.string(),
|
||||
numeroContrato: v.string(),
|
||||
anoContrato: v.number(),
|
||||
dataInicioVigencia: v.string(),
|
||||
dataFimVigencia: v.string(),
|
||||
nomeFiscal: v.string(),
|
||||
valorTotal: v.string(),
|
||||
dataAditivoPrazo: v.optional(v.string()),
|
||||
diasAvisoVencimento: v.number(),
|
||||
criadoPor: v.id("usuarios"),
|
||||
criadoEm: v.number(),
|
||||
atualizadoEm: v.optional(v.number()),
|
||||
})
|
||||
.index("by_responsavel", ["responsavelId"])
|
||||
.index("by_situacao", ["situacao"])
|
||||
.index("by_vigencia_inicio", ["dataInicioVigencia"])
|
||||
.index("by_vigencia_fim", ["dataFimVigencia"]),
|
||||
|
||||
todos: defineTable({
|
||||
text: v.string(),
|
||||
completed: v.boolean(),
|
||||
}),
|
||||
enderecos: defineTable({
|
||||
cep: v.string(),
|
||||
logradouro: v.string(),
|
||||
numero: v.string(),
|
||||
complemento: v.optional(v.string()),
|
||||
bairro: v.string(),
|
||||
cidade: v.string(),
|
||||
uf: v.string(),
|
||||
criadoPor: v.optional(v.id("usuarios")),
|
||||
atualizadoPor: v.optional(v.id("usuarios")),
|
||||
}).index("by_cep", ["cep"]),
|
||||
empresas: defineTable({
|
||||
razao_social: v.string(),
|
||||
nome_fantasia: v.optional(v.string()),
|
||||
cnpj: v.string(),
|
||||
telefone: v.string(),
|
||||
email: v.string(),
|
||||
descricao: v.optional(v.string()),
|
||||
enderecoId: v.optional(v.id("enderecos")),
|
||||
criadoPor: v.optional(v.id("usuarios")),
|
||||
})
|
||||
.index("by_razao_social", ["razao_social"])
|
||||
.index("by_cnpj", ["cnpj"]),
|
||||
contatosEmpresa: defineTable({
|
||||
empresaId: v.id("empresas"),
|
||||
nome: v.string(),
|
||||
funcao: v.string(),
|
||||
email: v.string(),
|
||||
telefone: v.string(),
|
||||
adicionadoPor: v.optional(v.id("usuarios")),
|
||||
descricao: v.optional(v.string()),
|
||||
})
|
||||
.index("by_empresa", ["empresaId"])
|
||||
.index("by_email", ["email"]),
|
||||
funcionarios: defineTable({
|
||||
// Campos obrigatórios existentes
|
||||
nome: v.string(),
|
||||
@@ -447,24 +514,6 @@ export default defineSchema({
|
||||
valor: v.string(),
|
||||
}),
|
||||
|
||||
solicitacoesAcesso: defineTable({
|
||||
nome: v.string(),
|
||||
matricula: v.string(),
|
||||
email: v.string(),
|
||||
telefone: v.string(),
|
||||
status: v.union(
|
||||
v.literal("pendente"),
|
||||
v.literal("aprovado"),
|
||||
v.literal("rejeitado")
|
||||
),
|
||||
dataSolicitacao: v.number(),
|
||||
dataResposta: v.optional(v.number()),
|
||||
observacoes: v.optional(v.string()),
|
||||
})
|
||||
.index("by_status", ["status"])
|
||||
.index("by_matricula", ["matricula"])
|
||||
.index("by_email", ["email"]),
|
||||
|
||||
// Sistema de Autenticação e Controle de Acesso
|
||||
usuarios: defineTable({
|
||||
authId: v.string(),
|
||||
@@ -486,7 +535,7 @@ export default defineSchema({
|
||||
ultimaTentativaLogin: v.optional(v.number()), // timestamp da última tentativa
|
||||
|
||||
// Campos de Chat e Perfil
|
||||
avatar: v.optional(v.string()), // "avatar-1" até "avatar-15" ou storageId
|
||||
|
||||
fotoPerfil: v.optional(v.id("_storage")),
|
||||
setor: v.optional(v.string()),
|
||||
statusMensagem: v.optional(v.string()), // max 100 chars
|
||||
@@ -712,7 +761,7 @@ export default defineSchema({
|
||||
v.literal("sala_reuniao")
|
||||
),
|
||||
nome: v.optional(v.string()), // nome do grupo/sala
|
||||
avatar: v.optional(v.string()), // avatar do grupo/sala
|
||||
|
||||
participantes: v.array(v.id("usuarios")), // IDs dos participantes
|
||||
administradores: v.optional(v.array(v.id("usuarios"))), // IDs dos administradores (apenas para sala_reuniao)
|
||||
ultimaMensagem: v.optional(v.string()),
|
||||
|
||||
Reference in New Issue
Block a user