From cb15c747b6250f64536200e025189fadb10ab79b Mon Sep 17 00:00:00 2001 From: Junior Date: Sat, 14 Mar 2026 10:33:49 -0300 Subject: [PATCH] feat: tipos TypeScript globais --- front-end/app/types/index.ts | 112 +++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 front-end/app/types/index.ts diff --git a/front-end/app/types/index.ts b/front-end/app/types/index.ts new file mode 100644 index 0000000..64e0ce0 --- /dev/null +++ b/front-end/app/types/index.ts @@ -0,0 +1,112 @@ +// front-end/app/types/index.ts + +export type StatusEdital = + | 'em_analise' + | 'elaborando_proposta' + | 'impugnacao' + | 'recurso' + | 'participando' + | 'vencida' + | 'perdida' + | 'deserta' + +export interface Edital { + id: string + numero: string + orgao: string + modalidade: 'pregao_eletronico' | 'pregao_presencial' | 'concorrencia' | 'dispensa' | 'inexigibilidade' + objeto: string + plataforma: string + valorEstimado: number + dataPublicacao: Date + dataAbertura: Date + status: StatusEdital +} + +export interface Documento { + id: string + nome: string + tipo: 'certidao' | 'contrato_social' | 'balanco' | 'atestado' | 'procuracao' + dataVencimento: Date | null + status: 'valida' | 'vencendo' | 'vencida' | 'sem_vencimento' +} + +export interface Prazo { + id: string + titulo: string + descricao: string + dataLimite: Date + urgencia: 'critico' | 'urgente' | 'normal' + editalId: string +} + +export interface DashboardStats { + totalEditais: number + taxaVitoria: number + valorGanho: number + alertasAtivos: number + editalsPorEtapaPipeline: Record +} + +export interface Orgao { + id: string + nome: string + esfera: 'federal' | 'estadual' | 'municipal' + estado: string + contatos: string[] + totalParticipacoes: number + totalVitorias: number +} + +export interface Concorrente { + id: string + cnpj: string + nome: string + totalDisputas: number + totalVitorias: number + historicoDisputas: { editalId: string; venceu: boolean; valor: number }[] +} + +export interface Contrato { + id: string + numero: string + editalId: string + orgao: string + valor: number + dataInicio: Date + dataFim: Date + fiscalContrato: string + reajusteAnual: number + prorrogacaoMaxima: number + sla: string +} + +export interface Usuario { + id: string + nome: string + email: string + perfil: 'comercial' | 'juridico' | 'tecnico' | 'diretoria' | 'administrador' + status: 'ativo' | 'inativo' +} + +export const STATUS_EDITAL_CONFIG: Record = { + em_analise: { label: 'Em Análise', bg: '#eff6ff', color: '#0284c7' }, + elaborando_proposta: { label: 'Elaborando Proposta', bg: '#faf5ff', color: '#7c3aed' }, + impugnacao: { label: 'Impugnação', bg: '#fff7ed', color: '#ea580c' }, + recurso: { label: 'Recurso', bg: '#fffbeb', color: '#d97706' }, + participando: { label: 'Participando', bg: '#eff6ff', color: '#3b82f6' }, + vencida: { label: 'Vencida', bg: '#f0fdf4', color: '#16a34a' }, + perdida: { label: 'Perdida', bg: '#fef2f2', color: '#dc2626' }, + deserta: { label: 'Deserta / Fracassada', bg: '#f8fafc', color: '#64748b' }, +} + +export const PIPELINE_ETAPAS = [ + 'Identificado', + 'Análise de Viabilidade', + 'Elaborando Proposta', + 'Disputa / Lances', + 'Habilitação', + 'Recurso / Contrarrazões', + 'Adjudicação', + 'Contrato', +] as const