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
}