TSX406 linhas15.560 bytes
apps/web/src/app/premiacao/page.tsx
SHA-256
e5cd86d28d76909caea00482112e5319ec833b6f0ed4d371fa3c99bb1fd35723
Somente leiturafonte-eb8a54281800
import Link from 'next/link'
import ShareButtons from '@/components/ShareButtons'
// Página de apresentação do prêmio: só categorias e regras. A apuração da
// Leg 57 não é exibida enquanto a legislatura não terminar.
/** Regiões do IBGE — espelha REGIOES em apps/worker/src/services/premiacao.ts. */
const REGIOES: { id: string; nome: string; ufs: [string, string][] }[] = [
{
id: 'N',
nome: 'Norte',
ufs: [
['AC', 'Acre'],
['AM', 'Amazonas'],
['AP', 'Amapá'],
['PA', 'Pará'],
['RO', 'Rondônia'],
['RR', 'Roraima'],
['TO', 'Tocantins'],
],
},
{
id: 'NE',
nome: 'Nordeste',
ufs: [
['AL', 'Alagoas'],
['BA', 'Bahia'],
['CE', 'Ceará'],
['MA', 'Maranhão'],
['PB', 'Paraíba'],
['PE', 'Pernambuco'],
['PI', 'Piauí'],
['RN', 'Rio Grande do Norte'],
['SE', 'Sergipe'],
],
},
{
id: 'CO',
nome: 'Centro-Oeste',
ufs: [
['DF', 'Distrito Federal'],
['GO', 'Goiás'],
['MS', 'Mato Grosso do Sul'],
['MT', 'Mato Grosso'],
],
},
{
id: 'SE',
nome: 'Sudeste',
ufs: [
['ES', 'Espírito Santo'],
['MG', 'Minas Gerais'],
['RJ', 'Rio de Janeiro'],
['SP', 'São Paulo'],
],
},
{
id: 'S',
nome: 'Sul',
ufs: [
['PR', 'Paraná'],
['RS', 'Rio Grande do Sul'],
['SC', 'Santa Catarina'],
],
},
]
/** Pesos do IDS — espelha WEIGHTS em apps/worker/src/services/ranking.ts. */
const TEMATICAS: { titulo: string; descricao: string; peso: number }[] = [
{
titulo: 'Produtividade Legislativa',
descricao:
'Volume de proposições de autoria própria, ponderado por tipo e por mês de exercício.',
peso: 0.2,
},
{
titulo: 'Efetividade Legislativa',
descricao:
'Proporção das proposições próprias que avançaram, ponderada por status e tipo.',
peso: 0.24,
},
{
titulo: 'Presença e Participação',
descricao: 'Comparecimento às votações: 60% plenário e 40% comissões.',
peso: 0.2,
},
{
titulo: 'Fiscalização e Relatoria',
descricao:
'Relatorias assumidas por mês de exercício, descontado o peso dos cargos de liderança.',
peso: 0.13,
},
{
titulo: 'Uso Responsável do CEAP',
descricao:
'Menor gasto da cota parlamentar por mês, com penalidade sobre a fatia gasta em divulgação.',
peso: 0.11,
},
{
titulo: 'Transparência e Atividade',
descricao:
'Discursos e apartes em plenário por mês de exercício — atividade pública registrada.',
peso: 0.12,
},
]
const MESES_MINIMOS = 12
const MESES_MINIMOS_VITORIA = 24
const TOTAL_UFS = REGIOES.reduce((n, r) => n + r.ufs.length, 0)
const TOTAL_CATEGORIAS = 1 + REGIOES.length + TOTAL_UFS + TEMATICAS.length
function Etapa({
valor,
rotulo,
nota,
}: {
valor: number | string
rotulo: string
nota: string
}) {
return (
<div className="bg-surface px-4 py-4">
<div className="font-mono text-2xl font-bold text-ink">{valor}</div>
<div className="mt-0.5 text-xs font-medium text-ink">{rotulo}</div>
<div className="mt-1 text-[11px] leading-snug text-muted">{nota}</div>
</div>
)
}
function Secao({
eyebrow,
titulo,
children,
nota,
}: {
eyebrow: string
titulo: string
nota?: React.ReactNode
children: React.ReactNode
}) {
return (
<section className="space-y-5">
<header>
<p className="eyebrow">{eyebrow}</p>
<h2 className="mt-1 font-serif text-2xl font-semibold text-ink">{titulo}</h2>
{nota && <p className="mt-2 max-w-3xl text-sm leading-relaxed text-muted">{nota}</p>}
</header>
{children}
</section>
)
}
export default function PremiacaoPage() {
return (
<div className="space-y-14 fade-in">
{/* ============= ABERTURA ============= */}
<section className="border-b border-border pb-10">
<p className="eyebrow">Prêmio da 57ª Legislatura · 2023 — 2027</p>
<h1 className="mt-3 font-serif text-4xl sm:text-5xl font-semibold leading-tight tracking-tight text-ink">
Prêmio Observatório do Senado
</h1>
<p className="mt-5 max-w-3xl text-base sm:text-lg leading-relaxed text-muted">
{TOTAL_CATEGORIAS} reconhecimentos que serão atribuídos{' '}
<strong className="text-ink">por cálculo, não por escolha</strong>. Não
há júri, indicação, voto popular nem curadoria editorial: cada
categoria premiará quem liderar um critério numérico definido antes da
apuração, calculado sobre as bases públicas oficiais do Senado Federal.
</p>
<p className="mt-4 max-w-3xl text-sm leading-relaxed text-muted">
A fórmula está na{' '}
<Link href="/metodologia" className="text-primary underline-offset-2 hover:underline">
metodologia
</Link>{' '}
e o código que fará a apuração está publicado em{' '}
<Link href="/codigo" className="text-primary underline-offset-2 hover:underline">
código auditável
</Link>
, para que o resultado possa ser refeito de forma independente.
</p>
</section>
{/* ============= SITUAÇÃO ============= */}
<section className="rounded-sm border-l-4 border-primary bg-panel px-5 py-4">
<p className="eyebrow text-primary">Vencedores ainda não definidos</p>
<p className="mt-2 max-w-3xl text-sm leading-relaxed text-muted">
A 57ª Legislatura está em curso e o trabalho dos senadores segue sendo
registrado. Os premiados só serão conhecidos ao fim da legislatura,
quando a apuração for fechada sobre um retrato definitivo dos dados.
Até lá, esta página apresenta apenas os prêmios, as categorias e as
regras de participação.
</p>
</section>
{/* ============= ESTRUTURA ============= */}
<Secao
eyebrow="Estrutura"
titulo="Como o prêmio está organizado"
nota="Quatro eixos de reconhecimento, todos medidos pelo mesmo Índice de Desempenho Senatorial (IDS) e suas dimensões."
>
<div className="grid grid-cols-2 gap-px overflow-hidden rounded-sm border border-border bg-border sm:grid-cols-4">
<Etapa valor={1} rotulo="Grande Prêmio" nota="Maior IDS do país" />
<Etapa valor={REGIOES.length} rotulo="Por região" nota="Uma por região do IBGE" />
<Etapa valor={TOTAL_UFS} rotulo="Por estado" nota="Uma por unidade da federação" />
<Etapa valor={TEMATICAS.length} rotulo="Temáticas" nota="Uma por dimensão do IDS" />
</div>
</Secao>
{/* ============= QUEM CONCORRE ============= */}
<Secao eyebrow="Participação" titulo="Quem concorre">
<div className="rounded-sm border border-border bg-panel px-5 py-4 text-sm leading-relaxed text-muted">
<p>
<strong className="text-ink">Duas réguas de tempo, propositalmente distintas.</strong>{' '}
Recebe nota quem exercer ao menos {MESES_MINIMOS} meses de mandato na
57ª Legislatura; concorre aos prêmios quem exercer ao menos{' '}
{MESES_MINIMOS_VITORIA} — metade dos 48 meses da legislatura. Quem
fica entre as duas segue com nota publicada, apenas fora da disputa.
</p>
<p className="mt-3">
Quem encerrar o mandato antes do fim da legislatura continua
concorrendo: o trabalho feito não é apagado pela saída.
</p>
</div>
</Secao>
{/* ============= GRANDE PRÊMIO ============= */}
<Secao eyebrow="Eixo geral" titulo="Grande Prêmio">
<div className="card max-w-2xl">
<h3 className="font-serif text-lg font-semibold text-ink">Grande Prêmio</h3>
<p className="mt-2 text-sm leading-relaxed text-muted">
Maior Índice de Desempenho Senatorial entre todos os concorrentes da
57ª Legislatura, somadas as seis dimensões com seus pesos.
</p>
</div>
</Secao>
{/* ============= REGIONAIS ============= */}
<Secao
eyebrow="Eixo regional"
titulo="Destaques por região"
nota={
<>
Um reconhecimento por região do IBGE, para o maior IDS entre os
concorrentes das UFs da região. As notas{' '}
<strong className="text-ink">não são renormalizadas dentro da região</strong>:
todos são medidos na mesma régua nacional. As regiões têm números
diferentes de concorrentes — o Nordeste tem quase o triplo do Sul.
</>
}
>
<div className="grid gap-5 md:grid-cols-2">
{REGIOES.map((r) => (
<div key={r.id} className="card">
<h3 className="font-serif text-base font-semibold text-ink">
Destaque {r.nome}
</h3>
<p className="mt-2 text-sm leading-relaxed text-muted">
Maior IDS entre os concorrentes de {r.ufs.length} UFs:{' '}
{r.ufs.map(([uf]) => uf).join(', ')}.
</p>
</div>
))}
</div>
</Secao>
{/* ============= ESTADUAIS ============= */}
<Secao
eyebrow="Eixo estadual"
titulo="Destaques por estado"
nota={
<>
Um reconhecimento para cada uma das {TOTAL_UFS} unidades da federação,
para o maior IDS entre os senadores que concorrem por aquela UF. Como
nos prêmios regionais, vale a{' '}
<strong className="text-ink">mesma régua nacional</strong>. Cada estado
tem três cadeiras, mas suplentes que assumiram o mandato também
concorrem, então o número de concorrentes varia entre as UFs.
</>
}
>
<div className="space-y-6">
{REGIOES.map((r) => (
<div key={r.id}>
<h3 className="text-xs font-semibold uppercase tracking-wide text-subtle">
{r.nome}
</h3>
<ul className="mt-2 grid gap-px overflow-hidden rounded-sm border border-border bg-border sm:grid-cols-2 lg:grid-cols-3">
{r.ufs.map(([uf, nome]) => (
<li key={uf} className="flex items-baseline gap-3 bg-surface px-4 py-3">
<span className="w-8 shrink-0 font-mono text-xs font-bold text-primary">
{uf}
</span>
<span className="text-sm text-ink">Destaque {nome}</span>
</li>
))}
</ul>
</div>
))}
</div>
</Secao>
{/* ============= TEMÁTICAS ============= */}
<Secao
eyebrow="Eixo temático"
titulo="Categorias por dimensão"
nota={
<>
Uma categoria para cada dimensão que compõe o IDS, com o peso que ela
tem no índice. Os pesos são os mesmos publicados na metodologia e não
foram ajustados para esta premiação.
</>
}
>
<div className="grid gap-5 md:grid-cols-2">
{TEMATICAS.map((c) => (
<div key={c.titulo} className="card">
<div className="flex items-baseline justify-between gap-3">
<h3 className="font-serif text-base font-semibold text-ink">{c.titulo}</h3>
<span className="shrink-0 font-mono text-xs text-muted">
peso {Math.round(c.peso * 100)}%
</span>
</div>
<p className="mt-2 text-sm leading-relaxed text-muted">{c.descricao}</p>
</div>
))}
</div>
</Secao>
{/* ============= REGRAS ============= */}
<Secao eyebrow="Regras" titulo="Critérios que valem para todas as categorias">
<div className="grid gap-5 md:grid-cols-2">
<div className="card">
<h3 className="font-serif text-base font-semibold text-ink">Acúmulo de prêmios</h3>
<p className="mt-2 text-sm leading-relaxed text-muted">
Um senador pode vencer em mais de um eixo. Nenhuma categoria remove
alguém da disputa nas outras — suprimir isso distorceria os dados
para distribuir prêmios.
</p>
</div>
<div className="card">
<h3 className="font-serif text-base font-semibold text-ink">Partido não conta</h3>
<p className="mt-2 text-sm leading-relaxed text-muted">
O partido não entra em nenhum critério de cálculo. Quando o
resultado for publicado, a distribuição partidária dos premiados
será exibida para que qualquer viés eventual fique visível.
</p>
</div>
</div>
</Secao>
{/* ============= LIMITES ============= */}
<section className="rounded-sm border-l-4 border-accent bg-panel px-5 py-5">
<p className="eyebrow text-accent">O que este prêmio não mede</p>
<div className="mt-3 space-y-3 text-sm leading-relaxed text-muted">
<p>
O IDS é um indicador{' '}
<strong className="text-ink">quantitativo de atividade parlamentar</strong>.
Ele conta atos registrados nas bases oficiais — proposições,
votações, relatorias, discursos, despesas de cota. Não avalia o{' '}
<strong className="text-ink">mérito, o conteúdo ou as consequências</strong>{' '}
do que foi proposto ou votado, nem posições ideológicas.
</p>
<p>
Um número alto significa atividade intensa e regular, não
necessariamente boa representação; um número baixo indica pouca
atividade registrada, não necessariamente mau desempenho. Trabalho
que não deixa registro formal nas bases do Senado — articulação,
atuação em base eleitoral, negociação — não é capturado por
nenhuma das dimensões.
</p>
<p>
Os critérios e pesos foram definidos antes da apuração e valem
igualmente para todos. Divergências sobre a escolha dos critérios
são legítimas e devem ser dirigidas à{' '}
<Link href="/metodologia" className="text-primary underline-offset-2 hover:underline">
metodologia
</Link>
; erro de dado ou de cálculo pode ser verificado no{' '}
<Link href="/codigo" className="text-primary underline-offset-2 hover:underline">
código auditável
</Link>{' '}
e reportado pelo{' '}
<Link href="/contato" className="text-primary underline-offset-2 hover:underline">
contato
</Link>
.
</p>
</div>
</section>
<section className="border-t border-border pt-8">
<ShareButtons
variante="card"
titulo="Divulgue o prêmio"
url="https://observasenado.org/premiacao"
texto={
`Prêmio Observatório do Senado — 57ª Legislatura: ${TOTAL_CATEGORIAS} ` +
`categorias (geral, por região, por estado e temáticas), apuradas por ` +
`cálculo sobre os dados abertos do Senado.`
}
/>
</section>
</div>
)
}