Iniciativa Cidadã Independente · Transparência Parlamentar
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>
  )
}