mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 06:43:06 +00:00
docs(plans): registra C152–C155 — acervo de falas do Solla na vertical Comunicação
This commit is contained in:
parent
52a2ef6dd1
commit
524aa4963c
5 changed files with 766 additions and 0 deletions
434
docs/plans/acervo-videos-comunicacao-ui-draft.html
Normal file
434
docs/plans/acervo-videos-comunicacao-ui-draft.html
Normal file
|
|
@ -0,0 +1,434 @@
|
|||
<!doctype html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
|
||||
<title>UI draft — Vertical Comunicação + Acervo de falas (C154)</title>
|
||||
</head>
|
||||
<body class="bg-zinc-950 text-zinc-100 antialiased">
|
||||
<main class="mx-auto max-w-5xl p-6 sm:p-8">
|
||||
<h1 class="text-lg font-medium text-zinc-100">
|
||||
UI draft — Vertical Comunicação + Acervo de falas (C154)
|
||||
</h1>
|
||||
<p class="mt-1 text-sm text-zinc-400">
|
||||
Assessor de comunicação busca uma fala por assunto/tema/município, abre no trecho exato, lê
|
||||
a transcrição clicável e baixa o vídeo. Papel próprio (<code>communicator</code>) com
|
||||
navegação restrita à vertical.
|
||||
</p>
|
||||
<p class="mt-2 text-sm text-zinc-500">
|
||||
Cinza = estrutura existente · <span class="text-amber-400">acento</span> = novo neste item.
|
||||
Cenas estáticas: sem interação, sem dados reais.
|
||||
</p>
|
||||
|
||||
<section class="mt-8">
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">
|
||||
Cena 1 · desktop — Acervo: busca e resultados
|
||||
</p>
|
||||
<div class="mt-3 overflow-hidden rounded-lg border border-zinc-800 bg-zinc-900">
|
||||
<div class="flex min-h-[560px]">
|
||||
<!-- Sidebar da vertical (papel communicator) -->
|
||||
<aside class="w-56 shrink-0 border-r border-zinc-800 px-3 py-4">
|
||||
<div class="flex items-center gap-2 px-2">
|
||||
<div class="h-6 w-6 rounded bg-zinc-800"></div>
|
||||
<span class="text-sm font-medium text-zinc-300">Campanha</span>
|
||||
</div>
|
||||
<nav class="mt-5 space-y-1">
|
||||
<div class="flex items-center gap-2 rounded-lg bg-zinc-800 px-3 py-2">
|
||||
<span class="h-4 w-4 rounded bg-zinc-700"></span>
|
||||
<span class="text-sm text-zinc-100">Comunicação</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-2 rounded-lg px-3 py-2">
|
||||
<span class="h-4 w-4 rounded bg-zinc-800"></span>
|
||||
<span class="text-sm text-zinc-500">Perfil</span>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="mt-64 border-t border-zinc-800 pt-3">
|
||||
<div class="flex items-center gap-2 px-3 py-2">
|
||||
<span class="h-4 w-4 rounded bg-zinc-800"></span>
|
||||
<span class="text-sm text-zinc-500">Sair</span>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Conteúdo -->
|
||||
<div class="min-w-0 flex-1">
|
||||
<header class="border-b border-zinc-800 px-6 py-5">
|
||||
<h2 class="text-base font-medium text-zinc-100">Acervo de falas</h2>
|
||||
<p class="mt-0.5 text-sm text-zinc-500">
|
||||
Discursos do Deputado Jorge Solla na Câmara
|
||||
</p>
|
||||
<div class="mt-4 flex gap-2">
|
||||
<div
|
||||
class="flex h-11 min-w-0 flex-1 items-center gap-2 rounded-lg border border-zinc-700 bg-zinc-950/60 px-3"
|
||||
>
|
||||
<span class="h-4 w-4 rounded bg-zinc-700"></span>
|
||||
<span class="truncate text-sm text-zinc-300">Farmácia Popular</span>
|
||||
</div>
|
||||
<button
|
||||
class="h-11 shrink-0 rounded-lg bg-amber-500 px-4 text-sm font-medium text-zinc-950"
|
||||
>
|
||||
Buscar
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-3 flex flex-wrap items-center gap-2">
|
||||
<span
|
||||
class="inline-flex h-8 items-center gap-1 rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Ano: 2026 ▾</span
|
||||
>
|
||||
<span
|
||||
class="inline-flex h-8 items-center gap-1 rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Tema: Saúde ▾</span
|
||||
>
|
||||
<span
|
||||
class="inline-flex h-8 items-center gap-1 rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Alcance ▾</span
|
||||
>
|
||||
<span
|
||||
class="inline-flex h-8 items-center gap-1 rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Fase ▾</span
|
||||
>
|
||||
<span
|
||||
class="inline-flex h-8 items-center gap-1 rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Município ▾</span
|
||||
>
|
||||
<span
|
||||
class="inline-flex h-8 items-center gap-1 rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Duração ▾</span
|
||||
>
|
||||
<span class="text-xs text-zinc-500">Limpar filtros</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="px-6 py-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<p class="text-xs text-zinc-500">23 falas encontradas</p>
|
||||
<p class="text-xs text-zinc-500">Mais recentes ▾</p>
|
||||
</div>
|
||||
|
||||
<!-- Card de resultado -->
|
||||
<article class="mt-3 rounded-lg border border-zinc-800 bg-zinc-950/40 p-4">
|
||||
<div class="flex items-center gap-2 text-xs text-zinc-500">
|
||||
<span>11/08/2026 · 18:48</span>
|
||||
<span>·</span>
|
||||
<span>Breves Comunicações</span>
|
||||
<span>·</span>
|
||||
<span>4min25s</span>
|
||||
<span>·</span>
|
||||
<span>Presidiu: [placeholder]</span>
|
||||
</div>
|
||||
<p class="mt-2 text-sm leading-relaxed text-zinc-300">
|
||||
… o Governo Lula retomou a
|
||||
<mark class="rounded bg-amber-500/20 px-0.5 text-amber-300"
|
||||
>Farmácia Popular</mark
|
||||
>
|
||||
e ampliou o acesso a medicamentos, com recorde de unidades credenciadas na Bahia
|
||||
…
|
||||
</p>
|
||||
<div class="mt-3 flex flex-wrap gap-1.5">
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Saúde</span
|
||||
>
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Bahia</span
|
||||
>
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>Farmácia Popular</span
|
||||
>
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>Medicamento</span
|
||||
>
|
||||
</div>
|
||||
<div class="mt-3 flex items-center gap-3">
|
||||
<button
|
||||
class="h-9 rounded-lg bg-amber-500 px-3 text-sm font-medium text-zinc-950"
|
||||
>
|
||||
Assistir no trecho
|
||||
</button>
|
||||
<button
|
||||
class="h-9 rounded-lg border border-zinc-700 px-3 text-sm text-zinc-300"
|
||||
>
|
||||
Baixar
|
||||
</button>
|
||||
<span class="text-xs text-zinc-500">Abrir fonte</span>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<!-- Card de resultado 2 -->
|
||||
<article class="mt-3 rounded-lg border border-zinc-800 bg-zinc-950/40 p-4">
|
||||
<div class="flex items-center gap-2 text-xs text-zinc-500">
|
||||
<span>05/06/2026 · 16:12</span>
|
||||
<span>·</span>
|
||||
<span>Discussão e Votação</span>
|
||||
<span>·</span>
|
||||
<span>7min02s</span>
|
||||
</div>
|
||||
<p class="mt-2 text-sm leading-relaxed text-zinc-300">
|
||||
… defendeu o financiamento do SUS e citou o impacto da
|
||||
<mark class="rounded bg-amber-500/20 px-0.5 text-amber-300"
|
||||
>Farmácia Popular</mark
|
||||
>
|
||||
nos municípios baianos, especialmente no interior …
|
||||
</p>
|
||||
<div class="mt-3 flex flex-wrap gap-1.5">
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Saúde</span
|
||||
>
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Brasil</span
|
||||
>
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>Sistema Único de Saúde (SUS)</span
|
||||
>
|
||||
</div>
|
||||
<div class="mt-3 flex items-center gap-3">
|
||||
<button
|
||||
class="h-9 rounded-lg bg-amber-500 px-3 text-sm font-medium text-zinc-950"
|
||||
>
|
||||
Assistir no trecho
|
||||
</button>
|
||||
<button
|
||||
class="h-9 rounded-lg border border-zinc-700 px-3 text-sm text-zinc-300"
|
||||
>
|
||||
Baixar
|
||||
</button>
|
||||
<span class="text-xs text-zinc-500">Abrir fonte</span>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="mt-8">
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">
|
||||
Cena 2 · desktop — detalhe da fala (player + transcrição clicável)
|
||||
</p>
|
||||
<div class="mt-3 overflow-hidden rounded-lg border border-zinc-800 bg-zinc-900">
|
||||
<div class="px-6 py-5">
|
||||
<p class="text-xs text-zinc-500">← Voltar ao acervo</p>
|
||||
<h2 class="mt-2 text-base font-medium text-zinc-100">
|
||||
Solla destaca retomada da Farmácia Popular e recorde na Bahia
|
||||
</h2>
|
||||
<p class="mt-1 text-xs text-zinc-500">
|
||||
11/08/2026 · 18:48 · Breves Comunicações · 4min25s · Plenário · Presidiu:
|
||||
[placeholder]
|
||||
</p>
|
||||
|
||||
<div class="mt-4 grid grid-cols-[1fr_260px] gap-5">
|
||||
<div>
|
||||
<div
|
||||
class="relative flex aspect-video items-center justify-center rounded-lg border border-zinc-800 bg-zinc-950"
|
||||
>
|
||||
<div
|
||||
class="flex h-12 w-12 items-center justify-center rounded-full bg-zinc-800 text-zinc-400"
|
||||
>
|
||||
▶
|
||||
</div>
|
||||
<div class="absolute inset-x-4 bottom-4">
|
||||
<div class="h-1 rounded bg-zinc-800">
|
||||
<div class="relative h-1 w-1/3 rounded bg-amber-500">
|
||||
<span
|
||||
class="absolute -right-1.5 -top-1 h-3 w-3 rounded-full bg-amber-500"
|
||||
></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-1 flex justify-between text-[10px] text-zinc-500">
|
||||
<span>01:12</span>
|
||||
<span>04:25</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 flex items-center gap-3">
|
||||
<button
|
||||
class="h-9 rounded-lg bg-amber-500 px-3 text-sm font-medium text-zinc-950"
|
||||
>
|
||||
Baixar vídeo (MP4)
|
||||
</button>
|
||||
<button class="h-9 rounded-lg border border-zinc-700 px-3 text-sm text-zinc-300">
|
||||
Abrir fonte
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<p class="mt-5 text-xs uppercase tracking-wide text-zinc-500">
|
||||
Transcrição (clique para posicionar)
|
||||
</p>
|
||||
<div class="mt-2 space-y-1">
|
||||
<div class="flex gap-3 rounded-lg px-2 py-1.5">
|
||||
<span class="w-12 shrink-0 text-xs text-zinc-500">00:00</span>
|
||||
<span class="text-sm text-zinc-400"
|
||||
>… agradeço, Presidente. Quero falar sobre a saúde …</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex gap-3 rounded-lg bg-zinc-800/60 px-2 py-1.5">
|
||||
<span class="w-12 shrink-0 text-xs text-amber-400">01:12</span>
|
||||
<span class="text-sm text-zinc-100"
|
||||
>… o Governo Lula retomou a Farmácia Popular e ampliou o acesso a
|
||||
medicamentos, com recorde de unidades credenciadas na Bahia …</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex gap-3 rounded-lg px-2 py-1.5">
|
||||
<span class="w-12 shrink-0 text-xs text-zinc-500">02:40</span>
|
||||
<span class="text-sm text-zinc-400"
|
||||
>… e é preciso garantir o financiamento tripartite …</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex gap-3 rounded-lg px-2 py-1.5">
|
||||
<span class="w-12 shrink-0 text-xs text-zinc-500">03:58</span>
|
||||
<span class="text-sm text-zinc-400">… muito obrigado, Presidente. …</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside class="space-y-4">
|
||||
<div>
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">Temas</p>
|
||||
<div class="mt-1.5 flex flex-wrap gap-1.5">
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Saúde</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">Alcance</p>
|
||||
<div class="mt-1.5 flex flex-wrap gap-1.5">
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Bahia</span
|
||||
>
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Brasil</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">Municípios citados</p>
|
||||
<div class="mt-1.5 flex flex-wrap gap-1.5">
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>[Município A]</span
|
||||
>
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>[Município B]</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">Keywords oficiais</p>
|
||||
<div class="mt-1.5 flex flex-wrap gap-1.5">
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>Farmácia Popular</span
|
||||
>
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>Medicamento</span
|
||||
>
|
||||
<span
|
||||
class="rounded-full border border-zinc-700 px-2 py-0.5 text-xs text-zinc-400"
|
||||
>Sistema Único de Saúde (SUS)</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-t border-zinc-800 pt-3">
|
||||
<p class="text-xs text-zinc-500">Fonte: Câmara dos Deputados · CC BY 4.0</p>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="mt-8">
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">
|
||||
Cena 3 · mobile (~390px) — busca e resultados
|
||||
</p>
|
||||
<div class="mt-3 w-[390px] overflow-hidden rounded-lg border border-zinc-800 bg-zinc-900">
|
||||
<div class="flex items-center justify-between border-b border-zinc-800 px-4 py-3">
|
||||
<span class="text-zinc-400">☰</span>
|
||||
<span class="text-sm font-medium text-zinc-200">Comunicação</span>
|
||||
<span class="h-6 w-6 rounded-full bg-zinc-800"></span>
|
||||
</div>
|
||||
<div class="px-4 py-3">
|
||||
<div class="flex gap-2">
|
||||
<div
|
||||
class="flex h-11 min-w-0 flex-1 items-center rounded-lg border border-zinc-700 bg-zinc-950/60 px-3"
|
||||
>
|
||||
<span class="truncate text-sm text-zinc-300">Farmácia Popular</span>
|
||||
</div>
|
||||
<button class="h-11 shrink-0 rounded-lg bg-amber-500 px-3 text-sm text-zinc-950">
|
||||
Buscar
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 flex gap-2 overflow-hidden">
|
||||
<span
|
||||
class="inline-flex h-8 shrink-0 items-center rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Ano: 2026 ▾</span
|
||||
>
|
||||
<span
|
||||
class="inline-flex h-8 shrink-0 items-center rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Tema: Saúde ▾</span
|
||||
>
|
||||
<span
|
||||
class="inline-flex h-8 shrink-0 items-center rounded-full border border-zinc-700 px-3 text-xs text-zinc-300"
|
||||
>Alcance ▾</span
|
||||
>
|
||||
</div>
|
||||
<p class="mt-3 text-xs text-zinc-500">23 falas encontradas</p>
|
||||
<article class="mt-2 rounded-lg border border-zinc-800 bg-zinc-950/40 p-3">
|
||||
<p class="text-xs text-zinc-500">11/08/2026 · 4min25s</p>
|
||||
<p class="mt-1.5 text-sm leading-relaxed text-zinc-300">
|
||||
… retomou a
|
||||
<mark class="rounded bg-amber-500/20 px-0.5 text-amber-300">Farmácia Popular</mark>
|
||||
e ampliou o acesso …
|
||||
</p>
|
||||
<div class="mt-2 flex gap-1.5">
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Saúde</span
|
||||
>
|
||||
<span class="rounded-full bg-zinc-800 px-2 py-0.5 text-xs text-zinc-300"
|
||||
>Bahia</span
|
||||
>
|
||||
</div>
|
||||
<button
|
||||
class="mt-3 h-9 w-full rounded-lg bg-amber-500 text-sm font-medium text-zinc-950"
|
||||
>
|
||||
Assistir no trecho
|
||||
</button>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="mt-8">
|
||||
<p class="text-xs uppercase tracking-wide text-zinc-500">
|
||||
Cena 4 · estado vazio — nenhum resultado
|
||||
</p>
|
||||
<div class="mt-3 rounded-lg border border-zinc-800 bg-zinc-900 px-6 py-10 text-center">
|
||||
<p class="text-sm font-medium text-zinc-200">Nenhuma fala encontrada para "termo"</p>
|
||||
<p class="mt-1 text-sm text-zinc-500">
|
||||
Tente outro termo, remova filtros ou busque por um tema.
|
||||
</p>
|
||||
<div class="mt-4 flex flex-wrap justify-center gap-2">
|
||||
<span class="rounded-full border border-zinc-700 px-3 py-1 text-xs text-zinc-300"
|
||||
>Saúde</span
|
||||
>
|
||||
<span class="rounded-full border border-zinc-700 px-3 py-1 text-xs text-zinc-300"
|
||||
>Educação</span
|
||||
>
|
||||
<span class="rounded-full border border-zinc-700 px-3 py-1 text-xs text-zinc-300"
|
||||
>Bahia</span
|
||||
>
|
||||
<span class="rounded-full border border-zinc-700 px-3 py-1 text-xs text-zinc-300"
|
||||
>Limpar filtros</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
93
docs/plans/acervo-videos-comunicacao.md
Normal file
93
docs/plans/acervo-videos-comunicacao.md
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# Vertical Comunicação: papel communicator + Acervo pesquisável
|
||||
|
||||
Status: rascunho
|
||||
Atualizado em: 2026-09-12
|
||||
Issue: #956
|
||||
Priority: P1
|
||||
Impeccable: C — fluxo novo na vertical `/campanha/comunicacao`
|
||||
Rascunho UI: docs/plans/acervo-videos-comunicacao-ui-draft.html
|
||||
Appetite: ~2–3 dias; um outcome verificável — o assessor de comunicação entra com acesso próprio, busca uma fala por tema/município e assiste/baixa o trecho
|
||||
Responsável: —
|
||||
|
||||
## Intenção
|
||||
|
||||
A comunicação da campanha depende de garimpar falas do Solla em YouTube e no portal da Câmara — sem busca, sem minutagem e sem saber o contexto. Este item abre a vertical de comunicação para quem produz conteúdo: um acesso próprio (`communicator`) que mostra só essa área, e o Acervo de falas — busca textual com destaque, filtros por tema/alcance/ano/fase/município e player que já abre no trecho, com transcrição clicável e download.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** assessoria de comunicação (jornalista/videomaker), no escritório ou em campo, produzindo card, áudio e vídeo com prazo curto; o Sollinha e o resto da campanha não são o trabalho dela.
|
||||
- **Job principal:** achar a fala/trecho sobre um assunto, tema ou município e levar para a peça — assistindo no ponto exato e baixando o arquivo.
|
||||
- **Fluxo desejado:** login → nav "Comunicação" → busca (ex.: "Farmácia Popular") → resultados com trecho destacado e chips de tema → abrir o detalhe → player já no timestamp do trecho → ler a transcrição clicável → baixar/abrir a fonte.
|
||||
- **Anti-goals de produto:** editor de vídeo/corte no browser; segundo cadastro de pessoas; exposição pública do acervo; permissão por município (comunicação é global, não é carteira).
|
||||
|
||||
### Esboço de fluxo (B/C/D)
|
||||
|
||||
```text
|
||||
[login] → nav Comunicação → busca/filtros → resultado com trecho destacado
|
||||
→ detalhe: player no timestamp + transcrição clicável + baixar → [outcome: matéria-prima na mão]
|
||||
```
|
||||
|
||||
### Rascunho UI (B/C/D)
|
||||
|
||||
- Rascunho UI (gate): `docs/plans/acervo-videos-comunicacao-ui-draft.html` — cenas desktop (resultados e detalhe), mobile (~390px) e vazio.
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Papel `communicator` ("Assessor de Comunicação"): vê e navega **só** a vertical (nav própria, sem as demais áreas da campanha); `coordinator`/`candidate` também veem; `advisor`/`leader` não têm acesso.
|
||||
- `/campanha/comunicacao/acervo` com busca textual sobre os segmentos, destaque do termo e filtros: ano, tema, alcance, fase do discurso, município citado, duração.
|
||||
- Keywords oficiais aparecem como chips e também são pesquisáveis (termo exato).
|
||||
- Detalhe com player iniciando no trecho, transcrição clicável por segmento, sumário, contexto da sessão (fase, quem presidia) e ações: baixar (VOD) e abrir fonte.
|
||||
- Estados críticos: vazio (sem resultado), carregando e sem permissão.
|
||||
- Mobile utilizável (a assessoria trabalha em campo).
|
||||
- **Guardrails:** vídeo servido do VOD da Câmara nesta fase (sem espelho); crédito à Câmara (CC BY 4.0); nenhum dashboard de vaidade.
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim, superfície — resultados com trecho e contagem por faceta.
|
||||
- **Decisões desbloqueadas:** a assessoria escolhe qual fala cortar para um tema e qual material cobre um município.
|
||||
- **Forma:** _adiada ao plano de implementação_ — aqui só a restrição: nada de % estadual absoluto nem KPI de vaidade.
|
||||
|
||||
## Dados da decisão (literais)
|
||||
|
||||
- **Papel:** `communicator` — rótulo "Assessor de Comunicação".
|
||||
- **Rotas:** home da vertical `/campanha/comunicacao`; acervo `/campanha/comunicacao/acervo`; detalhe `/campanha/comunicacao/acervo/[id]`.
|
||||
- **Filtros:** ano · tema · alcance · fase do discurso · município citado · duração.
|
||||
- **Facetas (rótulos):** os 18 temas e os 3 alcances definidos no C153.
|
||||
- **Comportamento do player:** abrir no início do segmento selecionado; transcrição clicável posiciona o vídeo.
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** `src/app/(campaign)/campanha/(app)/comunicacao/…` (páginas + server actions), `src/components/campaign/comunicacao/`, `src/lib/campaignRoles.ts` (predicado do papel), `src/components/campaign/shell/nav.ts` (nav do communicator), `src/lib/campaignPageChrome.ts` (título/aba), `src/utilities/campaignPageActor.ts` (gate novo), módulo de access reexportado por `campaignAccess.ts`, e busca em endpoint `POST` no wrapper `campaignJsonMutationRoute`.
|
||||
- **Precedente a olhar:** `src/components/campaign/supporter/` (lista + filtros), `home-search` (busca com `contains`), `src/app/(campaign)/campanha/(app)/assessores/` (página gated).
|
||||
- **Risco de acoplamento:** não abrir as demais áreas para o `communicator` (ele não é staff); leader lockdown intocado; nada de permissão por município.
|
||||
|
||||
## Dependências
|
||||
|
||||
- **C153** (acervo no banco) — sem dados não há busca; o rascunho UI pode ser validado antes.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Clipes/editor e espelhamento em S3.
|
||||
- Busca semântica/IA (item futuro próprio).
|
||||
- Exposição pública e compartilhamento externo.
|
||||
- Comissões/audiências (Plenário apenas).
|
||||
- Notificações, favoritos e listas editoriais (avaliar depois de uso real).
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **"Cortar o trecho no browser."** Se alguém "só completar": editor de vídeo, fila de render, storage. **Corte neste item:** player + download; corte é ferramenta externa.
|
||||
- **"Permissão por município para a comunicação."** Se alguém "só completar": a vertical inteira vira carteira. **Corte neste item:** acesso global à vertical.
|
||||
- **"Baixar em lote / coleções."** Se alguém "só completar": gerenciador de projetos. **Corte neste item:** busca e download por trecho.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Home do communicator?** **Opções:** A) a própria vertical `/campanha/comunicacao` (recomendado) | B) Início genérico da campanha. **Recomendação:** A — ele não pertence ao fluxo de municípios.
|
||||
- **Buscar também nas keywords cruas?** **Opções:** A) sim, como termo exato (recomendado) | B) só no texto. **Recomendação:** A — captura termos que a taxonomia não tem (ex.: "Banco Master").
|
||||
- **Transcrição exibida: oficial ou ASR?** **Opções:** A) oficial para leitura + ASR para posicionar (recomendado) | B) só ASR. **Recomendação:** A — taquigrafia é limpa para citar.
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue: — (após `pnpm agent:register`)
|
||||
- Rascunho UI (gate): `docs/plans/acervo-videos-comunicacao-ui-draft.html`
|
||||
- `AGENTS-campaign.md` (auth e roles) · `src/lib/campaignRoles.ts` · `src/components/campaign/shell/nav.ts` · `docs/research/persona-emendas-coordenador-comunicacao.md`
|
||||
- C153 (catálogo e facetas) · C155 (backfill/produção)
|
||||
80
docs/plans/backfill-acervo-falas.md
Normal file
80
docs/plans/backfill-acervo-falas.md
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
# Backfill 2011–2026 + import de produção do acervo de falas
|
||||
|
||||
Status: rascunho
|
||||
Atualizado em: 2026-09-12
|
||||
Issue: #957
|
||||
Priority: P2
|
||||
Impeccable: A — N/A (dados/ops, sem UI)
|
||||
Rascunho UI: N/A — sem UI
|
||||
Appetite: ~1–2 dias + tempo de máquina; um outcome verificável — o acervo completo (54ª–57ª) está em produção com relatório de cobertura por legislatura
|
||||
Responsável: —
|
||||
|
||||
## Intenção
|
||||
|
||||
O C153 prova o acervo com a 57ª legislatura; o valor pleno da vertical é o histórico — "o Solla sempre defendeu isso" só existe se as falas de 2011–2023 estiverem no catálogo. Este item roda o pipeline no acervo completo (~1.011 discursos) e coloca em produção, com relatório honesto de cobertura: quantos têm vídeo, quantos caíram no fallback, o que ficou de fora e por quê.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** agente/coordenação técnica rodando o import completo uma vez; a assessoria consome o resultado no Acervo (C154).
|
||||
- **Job principal:** rodar o backfill, ver o relatório por legislatura e ter os dados disponíveis em produção.
|
||||
- **Fluxo desejado:** executar o import completo (54ª–57ª) → acompanhar o relatório (processados, sem trecho, falhas) → validar uma amostra no Acervo → registrar pendências.
|
||||
- **Anti-goals de produto:** não é o momento de expandir fonte (comissões), nem de automatizar recorrência, nem de corrigir sessão faltante à mão.
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- 54ª–57ª processadas com o pipeline do C153; idempotente em reexecução.
|
||||
- Relatório por legislatura: total, processados, com vídeo, sem trecho, falhas, custo de transcrição e tempo.
|
||||
- Dados disponíveis em produção (a vertical C154 os enxerga).
|
||||
- Links do VOD validados na amostra (reprodução e download) e pendências documentadas (sessões sem trecho, limitações de fonte antiga).
|
||||
- **Guardrail:** nenhuma escrita fora do acervo; nada de mídia espelhada nesta fase; crédito CC BY mantido.
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim, derivado — o relatório de cobertura é insumo de decisão sobre o que falta; a superfície de consulta é o C154.
|
||||
- **Decisões desbloqueadas:** coordenação decide se vale buscar fallback para sessões sem trecho e se o acervo já é suficiente para a produção de conteúdo.
|
||||
- **Forma:** _adiada ao plano de implementação_ — aqui só a restrição: cobertura relatada por legislatura, sem maquiar falha como sucesso.
|
||||
|
||||
## Dados da decisão (literais)
|
||||
|
||||
- **Acervo esperado (API, em 2026-09-12):** 54ª = 1 · 55ª = 362 · 56ª = 414 · 57ª = 234 (total ~1.011 discursos).
|
||||
- **Fonte/transcrição:** as mesmas do C152/C153 (`vod.camara.leg.br`; Deep Infra `openai/whisper-large-v3`, US$ 0,00045/min; licença CC BY 4.0).
|
||||
- **Escopo de fonte:** Plenário apenas (a API de discursos não cobre comissões).
|
||||
- **Idempotência:** chave natural por áudio+trecho (mesma do C153).
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** mesmo script do C153 (parametrizado por legislatura/período) + execução no ambiente de produção (homeserver) no padrão de manutenção já documentado em `docs/ops/teqo-1313-deploy.md`.
|
||||
- **Precedente a olhar:** `scripts/recover-media.mjs` (relatório e guard), `scripts/deploy-homeserver.sh` (execução no runner self-hosted).
|
||||
- **Risco de acoplamento:** produção é dado real — executar com guard explícito e idempotência comprovada antes.
|
||||
|
||||
## Dependências
|
||||
|
||||
- **C153** (pipeline e catálogo) — sem ele não há o que rodar.
|
||||
- C154 (opcional) — não bloqueia os dados, mas é a validação visual recomendada antes de considerar o acervo entregue.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Comissões/audiências e outras fontes (YouTube próprio, redes).
|
||||
- Agendamento recorrente do import (avaliar depois; se doer, item próprio).
|
||||
- Espelhamento de mídia no S3 e geração de clipes.
|
||||
- Correção manual de sessões sem trecho.
|
||||
- Busca semântica (item futuro próprio).
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **"Cobrir comissões agora."** Se alguém "só completar": segunda fonte, segundo parser, segundo modelo. **Corte neste item:** Plenário apenas; comissões é item futuro.
|
||||
- **"Completar à mão as sessões sem trecho."** Se alguém "só completar": curadoria manual interminável. **Corte neste item:** relatar e seguir.
|
||||
- **"Automatizar o refresh semanal."** Se alguém "só completar": scheduler/worker sem demanda. **Corte neste item:** execução manual documentada.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Incluir a 54ª legislatura (1 discurso)?** **Opções:** A) sim, por completude | B) não, irrelevante. **Recomendação:** A — custo zero e o relatório fica íntegro. _(assumido)_
|
||||
- **O que fazer com sessões sem trecho?** **Opções:** A) fallback YouTube quando houver VOD | B) só reportar. **Recomendação:** A quando viável, B documentado; sem trabalho manual. _(assumido — depende do C152)_
|
||||
- **Publicar o acervo completo antes ou depois do C154?** **Opções:** A) importar produção após o C154 validar a experiência | B) importar em paralelo. **Recomendação:** A — evita mexer em produção sem consumidor pronto. _(assumido)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue: — (após `pnpm agent:register`)
|
||||
- Rascunho UI: N/A
|
||||
- `docs/ops/teqo-1313-deploy.md` (execução em produção) · C153 (pipeline) · C154 (consumidor)
|
||||
- Pesquisa do planejamento (2026-09-12): contagens por legislatura e confirmação do MP4 por trecho no VOD da Câmara.
|
||||
83
docs/plans/catalogo-falas-solla.md
Normal file
83
docs/plans/catalogo-falas-solla.md
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
# Catálogo de falas do Solla: import idempotente e busca textual
|
||||
|
||||
Status: rascunho
|
||||
Atualizado em: 2026-09-12
|
||||
Issue: #955
|
||||
Priority: P1
|
||||
Impeccable: A — N/A (dados; a superfície de produto é o C154)
|
||||
Rascunho UI: N/A — sem UI
|
||||
Appetite: ~2–3 dias; um outcome verificável — o acervo da 57ª legislatura existe no banco, com transcrição, segmentos com minutagem e facetas filtráveis, e pode ser reimportado sem duplicar
|
||||
Responsável: —
|
||||
|
||||
## Intenção
|
||||
|
||||
O acervo de falas precisa existir antes de virar tela. Este item cria a base de dados do catálogo e o import idempotente que a popula a partir das fontes da Câmara: transcrição oficial, sumário, palavras-chave, segmentos com minutagem e facetas curadas (tema/alcance) mais menções extraídas (municípios, pessoas, programas, projetos). A 57ª legislatura entra como prova de ponta a ponta; o histórico completo é o C155. O texto oficial da taquigrafia é a fonte de leitura; a transcrição ASR entra para dar a minutagem que o texto oficial não tem.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** agente/coordenação técnica rodando o import; o consumidor final é o assessor de comunicação (UI no C154).
|
||||
- **Job principal:** rodar o import uma vez e obter o acervo da 57ª legislatura com cobertura e falhas reportadas, podendo re-rodar a qualquer momento sem duplicar.
|
||||
- **Fluxo desejado:** executar o script → ele varre os discursos, casa evento/trecho, baixa e transcreve, classifica e grava → imprime relatório (processados, com vídeo, sem trecho, falhas, custo).
|
||||
- **Anti-goals de produto:** não é CMS de vídeo genérico; não é UI; não espelha mídia; não normaliza pessoas citadas como `Contact`.
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Cada discurso do Solla vira um registro com: data/hora, legislatura, ano, duração, fase do discurso, tipo de sessão, quem presidia, sumário, transcrição oficial, **keywords oficiais preservadas**, segmentos com timestamps, facetas de tema/alcance e menções (municípios/pessoas/programas/projetos), além dos links do VOD (reproduzir/baixar) e do evento.
|
||||
- Reexecutar o import não duplica registros (chave natural por áudio+trecho) e atualiza o que mudou.
|
||||
- Relatório por execução: total, com vídeo, sem trecho, falhas, tempo e custo de transcrição.
|
||||
- A busca textual por palavra funciona sobre os segmentos (acentos/variações ok) e é o motor do C154.
|
||||
- **Guardrails:** facetas têm proveniência (`gazetteer | llm | manual`); keyword crua nunca é substituída pela faceta; leitura restrita a `communicator`, `coordinator` e `candidate`; nenhum espelhamento de vídeo nesta fase.
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim, derivado — a superfície é o C154; aqui o compromisso é que as facetas existem, são filtráveis e as menções são pesquisáveis.
|
||||
- **Decisões desbloqueadas:** o assessor decide qual fala/trecho cortar por tema, alcance, ano, fase e município citado.
|
||||
- **Forma:** _adiada ao plano de implementação_ — aqui só a restrição: leitura relativa/local (nada de dashboard de vaidade).
|
||||
|
||||
## Dados da decisão (literais)
|
||||
|
||||
- **Temas (facetas de política pública):** Saúde · Educação · Cultura · Esporte · Segurança Pública · Meio Ambiente · Economia e Trabalho · Direitos Humanos e Assistência Social · Infraestrutura e Transporte · Ciência e Tecnologia · Política e Instituições · Agricultura e Agropecuária · Habitação e Cidades · Comunicação e Mídia · Igualdade Racial · Mulheres e Gênero · Juventude · Pessoa com Deficiência.
|
||||
- **Alcance:** Bahia · Brasil · Internacional (multi-seleção).
|
||||
- **Proveniência da classificação:** `classifiedBy`: `gazetteer | llm | manual`.
|
||||
- **Papel leitor:** `communicator` ("Assessor de Comunicação") + `coordinator`/`candidate`.
|
||||
- **Fontes:** as mesmas do C152 (discursos, eventos, trecho/VOD, Deep Infra `openai/whisper-large-v3`, US$ 0,00045/min; licença CC BY 4.0 com crédito).
|
||||
- **Escopo desta prova:** 57ª legislatura (2023+); histórico completo no C155.
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** collections novas em `src/collections/` (discurso + segmento), módulo de access em `src/utilities/access/` reexportado por `src/utilities/campaignAccess.ts`, migration + `pnpm generate:types`, script `scripts/…` no padrão de `scripts/recover-media.mjs` (guard de banco local, `--dry-run`, relatório) e índice de busca no padrão `pg_trgm` já existente.
|
||||
- **Precedente a olhar:** `src/migrations/20260719_020000_add_contact_trgm_index.ts` (índice trigram), `scripts/recover-media.mjs` (script idempotente), `src/utilities/ai/deepInfraTranscribe.ts`.
|
||||
- **Risco de acoplamento:** não criar um "segundo cadastro de pessoa" para as menções; usar os catálogos existentes de municípios/deputados como gazetteer.
|
||||
|
||||
## Dependências
|
||||
|
||||
- **C152** (piloto da fonte) — decide endpoints/fallbacks antes de modelar.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- UI/busca do assessor (C154).
|
||||
- Backfill 2011–2026 e import de produção (C155).
|
||||
- Espelhamento no S3 e geração de clipes.
|
||||
- Comissões/audiências (a API de discursos cobre Plenário).
|
||||
- Agendamento recorrente do import.
|
||||
- Busca semântica/IA (item futuro próprio).
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **"Normalizar pessoas citadas como `Contact`."** Se alguém "só completar": segundo cadastro de pessoa paralelo. **Corte neste item:** menções como texto pesquisável; normalização é conversa futura.
|
||||
- **"Classificação perfeita antes de importar."** Se alguém "só completar": taxonomia infinita e curadoria manual de mil discursos. **Corte neste item:** facetas com proveniência + correção manual depois.
|
||||
- **"Baixar os vídeos para o S3 já."** Se alguém "só completar": ~6 GB e pipeline de mídia. **Corte neste item:** links do VOD da Câmara; espelho é fase própria.
|
||||
- **"Transcrever por segmento e classificar cada segmento."** Se alguém "só completar": custo/ruído sem ganho — o discurso é a unidade. **Corte neste item:** segmentos herdam as facetas do discurso.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Qual LLM classifica as facetas?** **Opções:** A) DeepSeek flash do Sollinha, com saída validada | B) modelo barato da Deep Infra (mesma chave da transcrição) | C) só gazetteers. **Recomendação:** A, com validação e fallback C. _(assumido — validar no gate)_
|
||||
- **Classificar no nível do discurso ou do segmento?** **Opções:** A) discurso (segmento herda) | B) segmento. **Recomendação:** A. _(assumido)_
|
||||
- **Onde rodar a primeira importação?** **Opções:** A) banco local de dev (recomendado; produção é C155) | B) já em produção. **Recomendação:** A. _(assumido)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue: — (após `pnpm agent:register`)
|
||||
- Rascunho UI: N/A
|
||||
- `AGENTS.md` ("Campaign Municípios model", convenções de access) · `src/utilities/campaignAccess.ts` · `src/lib/municipalityCatalog.ts`
|
||||
- Pesquisa do planejamento (2026-09-12): keywords oficiais ruidosas (268 distintas em 47 discursos) — preservar cruas e usar como insumo do classificador.
|
||||
76
docs/plans/piloto-fonte-videos-camara.md
Normal file
76
docs/plans/piloto-fonte-videos-camara.md
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
# Piloto da fonte: vídeos e transcrição minutada de um discurso da Câmara
|
||||
|
||||
Status: rascunho
|
||||
Atualizado em: 2026-09-12
|
||||
Issue: #954
|
||||
Priority: P1
|
||||
Impeccable: A — N/A (spike de fonte de dados, sem UI)
|
||||
Rascunho UI: N/A — sem UI
|
||||
Appetite: ~1 dia; um outcome verificável — 2–3 discursos de legislaturas diferentes processados ponta a ponta com relatório de viabilidade
|
||||
Responsável: —
|
||||
|
||||
## Intenção
|
||||
|
||||
O catálogo de falas do Solla depende de uma fonte externa (a Câmara dos Deputados) que nunca foi usada neste repo. Antes de construir banco, import e tela, é preciso provar que o caminho existe de ponta a ponta e travar as quatro incógnitas que decidem o desenho do acervo: os links de vídeo por discurso são permanentes? Sessões antigas (2011–2015) têm trechos por orador? A transcrição via Deep Infra devolve segmentos com minutagem? O casamento discurso ↔ evento ↔ trecho funciona em anos antigos? Este item responde isso com 2–3 discursos reais e um relatório curto — sem construir o acervo.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** agente de engenharia no terminal, sem UI; o resultado interessa a quem vai construir o acervo (C153).
|
||||
- **Job principal:** processar 2–3 discursos de legislaturas diferentes e responder as quatro incógnitas com evidência (URL, arquivo, JSON).
|
||||
- **Fluxo desejado:** escolher discursos (um recente, um da 55ª/56ª) → achar o evento e o trecho do orador → baixar o MP4 do VOD → extrair áudio → transcrever com segmentos → imprimir relatório (tempos, custos, links, falhas).
|
||||
- **Anti-goals de produto:** não é o acervo; não cria collection, UI nem importa em produção; não baixa o acervo inteiro.
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- 2–3 discursos processados ponta a ponta, com o MP4 do VOD baixado e a transcrição com segmentos exibida (início/fim/texto).
|
||||
- Relatório responde: (1) permanência dos links `vod.camara.leg.br`; (2) cobertura de trechos na 55ª/56ª; (3) timestamps no Deep Infra (qual endpoint/param funciona); (4) casamento discurso ↔ evento ↔ trecho em anos antigos.
|
||||
- Custos e tempos medidos (download, extração de áudio, transcrição) e fallback recomendado para cada incógnita que falhar.
|
||||
- **Guardrail:** nada escrito em banco de produção; artefatos do piloto ficam fora do repo (ou em `data/`, gitignored).
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** N/A — relatório técnico de engenharia, sem superfície de produto; quem consome é o C153.
|
||||
|
||||
## Dados da decisão (literais)
|
||||
|
||||
- Lista de discursos: `GET https://dadosabertos.camara.leg.br/api/v2/deputados/178857/discursos?dataInicio=…&dataFim=…&itens=100&ordenarPor=dataHoraInicio&ordem=ASC` (header `X-Total-Count`; campos `transcricao`, `sumario`, `keywords`; `urlVideo`/`urlAudio` vêm nulos).
|
||||
- Eventos: `GET https://dadosabertos.camara.leg.br/api/v2/eventos?dataInicio=…&dataFim=…` e `GET …/eventos/{id}` (campo `urlRegistro` = YouTube do evento).
|
||||
- Página do evento (trechos por orador): `https://www.camara.leg.br/evento-legislativo/{id}` — cada trecho tem orador, partido, horário, duração, `a` (= idAudio) e `t` (= epoch ms do início).
|
||||
- Vídeo do trecho: `GET https://www.camara.leg.br/evento-legislativo/{id}/video-sob-demanda?idAudio={a}&trecho={t}` → JSON `{ estado, video: { titulo, subtitulo, duracao, horario, linkParaDownload, linkParaReproducao } }`.
|
||||
- Fallback YouTube: `startTimestamp` do VOD; offset = `t / 1000 − startTimestamp`.
|
||||
- Transcrição: Deep Infra `openai/whisper-large-v3`, `language=pt`, US$ 0,00045/min; testar o endpoint compatível (`verbose_json` + segmentos) e, se não houver timestamp, o nativo (`chunk_level: segment|word`).
|
||||
- Licença da fonte: transmissões de atividades legislativas são CC BY 4.0 — crédito obrigatório, marca d'água intocada.
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** script `.mjs` em `scripts/` no padrão de `scripts/lib/cli.mjs` (`loadCliEnv`, `dieWithLabel`) e `scripts/recover-media.mjs` (download + cache + relatório); sem collection, sem Payload.
|
||||
- **Precedente a olhar:** `scripts/recover-media.mjs` (download com cache/`sha256`), `src/utilities/ai/deepInfraTranscribe.ts` (chamada Deep Infra existente).
|
||||
- **Risco de acoplamento:** nenhum com o app; só não deixar artefatos de mídia no git.
|
||||
|
||||
## Dependências
|
||||
|
||||
- Nenhuma — é a raiz do encadeamento (C153 depende deste).
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Construir o acervo/import (C153), UI (C154), backfill (C155).
|
||||
- Classificação por facetas e enriquecimento de metadados.
|
||||
- ASR local em GPU própria; worker/scheduler; espelhamento em S3.
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **"Já baixar o acervo inteiro."** Se alguém "só completar": ~25 GB e horas de máquina antes de validar a fonte. **Corte neste item:** 2–3 discursos.
|
||||
- **"Montar o pipeline definitivo de import."** Se alguém "só completar": desenho de collection/transação cedo demais. **Corte neste item:** prova descartável + relatório.
|
||||
- **"Transcrever na GPU local."** Se alguém "só completar": setup CUDA/Blackwell vira o projeto. **Corte neste item:** Deep Infra; GPU é assunto separado.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Deep Infra compat ou nativo?** **Opções:** A) endpoint compatível (`/v1/openai/audio/transcriptions` com `verbose_json`) | B) endpoint nativo (`/v1/inference/…` com `chunk_level`). **Recomendação:** A se devolver segmentos (menos código, reusa o padrão do B173); B como fallback. _(assumido — validar no piloto)_
|
||||
- **Sessão antiga sem trecho por orador?** **Opções:** A) cair para o YouTube do evento (offset pelo `startTimestamp`) | B) reportar e seguir. **Recomendação:** A quando houver VOD; B documentado no relatório. _(assumido — validar no piloto)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue: — (após `pnpm agent:register`)
|
||||
- Rascunho UI: N/A
|
||||
- `src/utilities/ai/deepInfraTranscribe.ts` · `scripts/recover-media.mjs` · `scripts/lib/cli.mjs`
|
||||
- Pesquisa do planejamento (2026-09-12): acervo 54ª–57ª = 1/362/414/234 discursos; trechos por orador confirmados na página do evento; MP4 direto do VOD com Range/206.
|
||||
Loading…
Reference in a new issue