TS356 linhas7.718 bytes
apps/web/src/lib/types.ts
SHA-256
12ab9dab5e65803afad255a17a3d0122a88d378c9054049f7d1b0442ffa5c230
Somente leiturafonte-e58fe007b6ee
export type SenadorStatus =
| 'titular_pleno'
| 'titular_voltou'
| 'suplente_efetivo'
| 'suplente_recente'
| 'recente'
| 'afastado'
export type Confianca = 'alta' | 'media' | 'baixa'
export type FilterPreset =
| 'premio'
| 'geral'
| 'ativos'
| 'titulares'
| 'suplentes'
| 'recentes'
| 'encerrados'
| 'afastados'
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
dimProdutividade: number
dimEfetividade: number
dimParticipacao: number
dimFiscalizacao: number
dimCeap: number
dimTransparencia: number
autoriasTotal: number
autoriasAprovadas: number
votacaoPresentes: number
votacoesTotal: number
relatoriasTotal: number
discursosTotal: number
apartesTotal: number
votacoesComissaoPresentes?: number
votacoesComissaoTotal?: number
ceapTotalAno: number
ceapDivulgacao?: number
ceapEscritorio?: number
ceapLocomocao?: number
ceapConsultoria?: number
ceapOutros?: number
pctDivulgacao?: number
escritoriosCount?: number
cargosLideranca?: number
cargosTitulos?: string[]
posicao?: number
totalSenadores?: number
status?: SenadorStatus
confianca?: Confianca
idsTotalBruto?: number
// IDS v4: coorte da legislatura + prêmio da Leg 57
emExercicio?: boolean
dataFimExercicio?: string
elegivelPremio?: boolean
}
export interface SenadorAfastado {
codigo: string
nome: string
partido: string
uf: string
fotoUrl?: string
motivo: string
dataInicio: string
dataFim?: string
}
export interface RankingResponse {
total: number
filter?: FilterPreset
ordenar?: string
computedAt?: string | null
empty?: boolean
data: IdsScore[]
}
export interface AfastadosResponse {
total: number
filter: 'afastados'
data: SenadorAfastado[]
}
export interface MetaResponse {
partidos: string[]
ufs: string[]
blocos: string[]
statuses?: string[]
filtros?: FilterPreset[]
ordenacao?: string[]
premio?: {
legislatura: number
mesesMinimos: number
elegiveis: number
total: number
}
}
// ─── Premiação Leg 57 ─────────────────────────────────────────────────────
export type RegiaoId = 'N' | 'NE' | 'CO' | 'SE' | 'S'
export type EixoPremio = 'grande_premio' | 'regional' | 'tematico'
/** Dado contado por trás da nota normalizada de uma categoria. */
export interface IndicadorBruto {
rotulo: string
valor: number
unidade: string
detalhe: string
/** Decomposição por dimensão, presente nas categorias medidas pelo IDS. */
composicao?: { rotulo: string; valor: number }[]
}
export interface Premiado {
posicao: number
senadorCod: string
nome: string
partido: string
uf: string
regiao?: RegiaoId
fotoUrl?: string
idsTotal: number
/** Valor da métrica que ordena a categoria. */
valor: number
mesesAtivos: number
emExercicio: boolean
dataFimExercicio?: string
indicador: IndicadorBruto
}
export interface CategoriaPremio {
id: string
eixo: EixoPremio
titulo: string
descricao: string
criterio: string
/** Peso da dimensão no IDS — só no eixo temático. */
peso?: number
regiao?: RegiaoId
ufs?: string[]
elegiveis: number
vencedor: Premiado
podio: Premiado[]
/** true quando o 1º lugar empatou na métrica e caiu no critério secundário. */
houveDesempate: boolean
}
export interface PremiacaoResponse {
edicao: string
legislatura: number
congelado: boolean
snapshot: string
apuradoEm: string
coorte: {
avaliados: number
elegiveis: number
concorrentes: number
mesesMinimos: number
mesesMinimosVitoria: number
}
categorias: CategoriaPremio[]
}
/** Resposta de 503 quando a apuração recusa dados parciais. */
export interface PremiacaoIndisponivelResponse {
error: string
motivo: 'sem_snapshot' | 'snapshot_incompleto' | 'sem_elegiveis'
detalhe: string
}
// ─── Detalhe ──────────────────────────────────────────────────────────────
export interface ListResultBase<T> {
codigo: string
total: number
pagina: number
porPagina: number
data: T[]
fonte: string
atualizadoEm: string
}
export interface AutoriaItem {
idProcesso: number
identificacao: string
ementa: string
dataApresentacao: string
sigla: string
numero: string
ano: string
autoriaTexto?: string
primeiroAutor?: boolean
situacao?: string
ultimoLocal?: string
url?: string
}
export interface RelatoriaItem {
idProcesso: number
codigoMateria?: number
identificacao?: string
ementa: string
comissaoCodigo?: number
comissaoSigla?: string
comissaoNome?: string
papel: string
dataDesignacao: string
dataDestituicao?: string
encerramento?: string
url?: string
}
export interface VotacaoItem {
codigoSessao: number
codigoVotacao: number
dataSessao: string
identificacao: string
ementa: string
descricaoVotacao: string
voto: string
resultado?: string
url?: string
}
export interface ComissaoItem {
codigo: string
sigla: string
nome: string
casa?: string
participacao: string
dataInicio: string
dataFim?: string
ativo: boolean
}
export interface CargoItem {
cargo: string
comissaoCodigo?: string
comissaoSigla?: string
comissaoNome?: string
casa?: string
dataInicio: string
dataFim?: string
ativo: boolean
}
export interface DiscursoItem {
codigoPronunciamento: string
data: string
casa: string
tipoUsoPalavra: string
resumo: string
urlTextoIntegral?: string
urlTextoBinario?: string
}
export interface DespesaItem {
id: number
ano: number
mes: number
data?: string
tipoDocumento: string
tipoDespesa: string
cpfCnpj: string
fornecedor: string
documento?: string
detalhamento?: string
valor: number
}
export interface DespesasResumo {
totalAno: number
totalTransacoes: number
porTipo: Array<{ tipo: string; total: number; transacoes: number }>
porMes: Array<{ mes: number; total: number }>
topFornecedores: Array<{ nome: string; cpfCnpj: string; total: number; transacoes: number }>
}
export interface DespesasResponse extends ListResultBase<DespesaItem> {
resumo: DespesasResumo
}
export interface PerfilSenador {
codigo: string
nome: string
partido?: string
uf?: string
email?: string
telefones?: string[]
fotoUrl?: string
paginaSenado?: string
endereco?: string
mandatos: Array<{
legislatura: string
inicio: string
fim?: string
participacao: string
partido?: string
suplentes?: Array<{ descricao: string; nome: string }>
}>
filiacoes: Array<{ partido: string; dataFiliacao: string; dataDesfiliacao?: string }>
profissoes: string[]
formacao: Array<{ nivel: string; curso: string; instituicao?: string }>
fonte: string
atualizadoEm: string
}
export type AbaSenador =
| 'resumo'
| 'autorias'
| 'relatorias'
| 'votacoes'
| 'comissoes'
| 'cargos'
| 'discursos'
| 'apartes'
| 'despesas'
| 'perfil'
export interface CeapMes {
mes: number
ano: number
valorTotal: number
}
export interface CeapResponse {
codigo: string
ano: number
meses: CeapMes[]
}
export type SortKey = keyof Pick<
IdsScore,
| 'idsTotal'
| 'dimProdutividade'
| 'dimEfetividade'
| 'dimParticipacao'
| 'dimFiscalizacao'
| 'dimCeap'
| 'dimTransparencia'
| 'nome'
| 'partido'
| 'uf'
>
export type SortDir = 'asc' | 'desc'