import { defineTable } from 'convex/server'; import { v } from 'convex/values'; export const pedidosTables = { pedidos: defineTable({ numeroSei: v.optional(v.string()), status: v.union( v.literal('em_rascunho'), v.literal('aguardando_aceite'), v.literal('em_analise'), v.literal('precisa_ajustes'), v.literal('cancelado'), v.literal('concluido') ), // acaoId removed criadoPor: v.id('usuarios'), aceitoPor: v.optional(v.id('funcionarios')), descricaoAjuste: v.optional(v.string()), // Required when status is 'precisa_ajustes' criadoEm: v.number(), atualizadoEm: v.number() }) .index('by_numeroSei', ['numeroSei']) .index('by_status', ['status']) .index('by_criadoPor', ['criadoPor']), objetoItems: defineTable({ pedidoId: v.id('pedidos'), objetoId: v.id('objetos'), // was produtoId ataId: v.optional(v.id('atas')), acaoId: v.optional(v.id('acoes')), // Moved from pedidos modalidade: v.union( v.literal('dispensa'), v.literal('inexgibilidade'), v.literal('adesao'), v.literal('consumo') ), valorEstimado: v.string(), valorReal: v.optional(v.string()), quantidade: v.number(), adicionadoPor: v.id('funcionarios'), criadoEm: v.number() }) .index('by_pedidoId', ['pedidoId']) .index('by_objetoId', ['objetoId']) .index('by_adicionadoPor', ['adicionadoPor']) .index('by_acaoId', ['acaoId']), solicitacoesItens: defineTable({ pedidoId: v.id('pedidos'), tipo: v.union( v.literal('adicao'), v.literal('alteracao_quantidade'), v.literal('exclusao'), v.literal('alteracao_detalhes') ), dados: v.string(), // JSON string with details status: v.union(v.literal('pendente'), v.literal('aprovado'), v.literal('rejeitado')), solicitadoPor: v.id('funcionarios'), criadoEm: v.number() }) .index('by_pedidoId', ['pedidoId']) .index('by_status', ['status']), historicoPedidos: defineTable({ pedidoId: v.id('pedidos'), usuarioId: v.id('usuarios'), acao: v.string(), // "criacao", "alteracao_status", "adicao_item", "remocao_item", "edicao_item" detalhes: v.optional(v.string()), // JSON string data: v.number() }) .index('by_pedidoId', ['pedidoId']) .index('by_usuarioId', ['usuarioId']) .index('by_data', ['data']), // Documentos anexados diretamente ao pedido (ilimitado) pedidoDocumentos: defineTable({ pedidoId: v.id('pedidos'), descricao: v.string(), nome: v.string(), storageId: v.id('_storage'), tipo: v.string(), // MIME type tamanho: v.number(), // bytes criadoPor: v.id('funcionarios'), criadoEm: v.number(), origemSolicitacaoId: v.optional(v.id('solicitacoesItens')) }) .index('by_pedidoId', ['pedidoId']) .index('by_criadoPor', ['criadoPor']) .index('by_origemSolicitacaoId', ['origemSolicitacaoId']), // Documentos anexados a uma solicitação (somente solicitante; pode ter mais de um) solicitacoesItensDocumentos: defineTable({ requestId: v.id('solicitacoesItens'), pedidoId: v.id('pedidos'), descricao: v.string(), nome: v.string(), storageId: v.id('_storage'), tipo: v.string(), // MIME type tamanho: v.number(), // bytes criadoPor: v.id('funcionarios'), criadoEm: v.number() }) .index('by_requestId', ['requestId']) .index('by_pedidoId', ['pedidoId']) .index('by_criadoPor', ['criadoPor']) };