Iniciativa Cidadã Independente · Transparência Parlamentar
TS143 linhas3.712 bytes

apps/worker/src/types.ts

SHA-256

a13eb89407f503ff67c2188f5b7b1eddf4dc2fd294ace5a94d757f10b5cbe745

Somente leiturafonte-acf635076da2
// Types shared between worker services and routes

/**
 * Taxonomia do mandato. NÃO adicionar valores novos sem antes garantir que o
 * frontend publicado tolere desconhecidos: o campo é indexado em dicionários
 * de rótulo e um valor novo derrubou observasenado.org em 2026-08-08.
 * Sinalize estado novo com campo booleano próprio (ver `emExercicio`).
 */
export type SenadorStatus =
  | 'titular_pleno'
  | 'titular_voltou'
  | 'suplente_efetivo'
  | 'suplente_recente'
  | 'recente'
  | 'afastado'

export type Confianca = 'alta' | 'media' | 'baixa'

export interface Senador {
  codigo: string
  nome: string
  partido: string
  uf: string
  bloco: string
  fotoUrl: string
  email?: string
  dataInicioExercicio?: string
  mesesAtivos?: number
  status?: SenadorStatus
  confianca?: Confianca
  /** false = exerceu o mandato na Leg 57 mas já saiu (prêmio da legislatura). */
  emExercicio?: boolean
  /** Última DataFim de exercício na Leg 57 — só para quem já saiu. */
  dataFimExercicio?: string
}

export interface SenadorAfastado {
  codigo: string
  nome: string
  partido: string
  uf: string
  fotoUrl?: string
  motivo: string
  dataInicio: string
  dataFim?: string
}

export interface IdsScore {
  senadorCod: string
  nome: string
  partido: string
  uf: string
  bloco: string
  fotoUrl?: string
  dataInicioExercicio?: string
  mesesAtivos?: number
  auxilioMoradia?: boolean
  imovelFuncional?: boolean
  idsTotal: number
  // Dimensões IDS v2 (0-100, normalizadas)
  dimProdutividade: number
  dimEfetividade: number
  dimParticipacao: number
  dimFiscalizacao: number
  dimCeap: number
  dimTransparencia: number
  // Indicadores brutos
  autoriasTotal: number
  autoriasAprovadas: number
  votacaoPresentes: number
  votacoesTotal: number
  votacoesComissaoPresentes?: number
  votacoesComissaoTotal?: number
  relatoriasTotal: number
  discursosTotal: number
  apartesTotal: number
  ceapTotalAno: number
  // CEAP breakdown (IDS v2 Fase 2)
  ceapDivulgacao?: number
  ceapEscritorio?: number
  ceapLocomocao?: number
  ceapConsultoria?: number
  ceapOutros?: number
  pctDivulgacao?: number
  escritoriosCount?: number
  // Cargos exercidos (informativo, não entra no IDS)
  cargosLideranca?: number
  cargosTitulos?: string[]
  // IDS v3: shrinkage por tempo de mandato + status
  status?: SenadorStatus
  confianca?: Confianca
  idsTotalBruto?: number
  // IDS v4: coorte da legislatura + elegibilidade ao prêmio
  emExercicio?: boolean
  dataFimExercicio?: string
  /** Concorre ao prêmio da Leg 57 (≥ MESES_MIN_PREMIO meses de exercício). */
  elegivelPremio?: boolean
}

export interface RawDimensions {
  autoriasTotal: number
  autoriasAprovadas: number
  // IDS v2: produtividade ponderada por tipo de proposição
  produtividadePonderada: number
  // IDS v2: efetividade ponderada por status × tipo
  efetividadePonderada: number
  efetividadeBase: number // soma de pesos das proposições (denominador)
  votacoesPresentes: number
  votacoesTotal: number
  votacoesComissaoPresentes: number
  votacoesComissaoTotal: number
  relatoriasTotal: number
  discursosTotal: number
  apartesTotal: number
  cargosLideranca: number
  cargosTitulos: string[]
  ceapTotalAno: number
  // CEAP breakdown (Fase 2)
  ceapDivulgacao?: number
  ceapEscritorio?: number
  ceapLocomocao?: number
  ceapConsultoria?: number
  ceapOutros?: number
  escritoriosCount?: number
}

export interface CeapMes {
  mes: number
  ano: number
  valorTotal: number
}

export interface Env {
  SENADO_CACHE: KVNamespace
  SENADO_DB: D1Database
  LEGIS_BASE_URL: string
  ADM_BASE_URL: string
  CACHE_TTL: string
  ENVIRONMENT: string
  ADMIN_SECRET: string
  RESEND_API_KEY?: string
}