13 KiB
S37 — Central de Conteúdos — lideranças que aparecem nas peças (propriedade e filtro)
Status: rascunho Atualizado em: 2026-09-23 Issue: #1303 Priority: P2 Impeccable: C — propriedade nova na ficha interna (C211) + faceta nova no catálogo público (S27) Design UI: docs/plans/central-conteudos-liderancas-ui-design.html Appetite: ~2 dias eng; um outcome verificável (a peça registra quem aparece e o catálogo público filtra por isso) Responsável: —
Intenção
A campanha já tem a Central de Conteúdos interna (C211), onde a assessoria cataloga as peças, e a Central pública (S27), onde o eleitor filtra por Tipo, Cidade, Região, Tema e Instituição — mas "quem aparece na peça" não existe em lugar nenhum. Numa campanha de dobradinhas, é exatamente esse o recorte que o eleitor procura: o material em que a liderança dele ou o estadual dele aparece, para repassar no grupo. A comunicação quer registrar isso na peça; o eleitor quer filtrar por isso. A decisão do humano no planejamento foi "Os dois": a peça registra as lideranças da campanha que aparecem E as figuras públicas (dobradinhas/estaduais e outras personalidades), e o catálogo público tem os dois recortes na mesma faceta Lideranças. O cuidado que define o item: o que é interno (liderança é PII, escopada por perfil) não pode vazar no que é público — a faceta mostra só nomes de quem aparece em peça publicada.
Persona e fluxo
- Persona / contexto: dois atores. A assessoria de comunicação, na mesa, editando a ficha da peça (o mesmo gate que já edita a ficha hoje); o eleitor/liderança, no celular, na Central, procurando o material em que a referência dele aparece.
- Job principal: (comunicação) registrar quem aparece na peça; (eleitor) achar a peça em que uma pessoa aparece e repassá-la.
- Fluxo desejado: comunicação abre a ficha da peça → marca as lideranças da campanha que aparecem e as figuras públicas (dobradinhas/personalidades) → publica; eleitor abre
/conteudos→ filtra pela facetaLideranças→ vê só nomes de quem aparece em peça publicada → abre a peça e compartilha. - Anti-goals de produto: segundo cadastro de pessoa; expor qualquer dado interno de liderança; virar diretório de lideranças ou placar de aparições; página pública por pessoa; mudar o que a liderança vê hoje (leader lockdown intocado).
Esboço de fluxo (C)
[assessoria] ficha da peça (C211)
→ marca quem aparece: lideranças da campanha (registros de Liderança) + figuras públicas (dobradinhas/personalidades)
→ publica a peça
[eleitor] /conteudos → faceta `Lideranças` (os dois recortes no mesmo filtro)
→ só nomes de quem aparece em pelo menos uma peça publicada (fail-closed)
→ abre a peça → baixa/compartilha
[peça despublicada] → o nome some da faceta se não houver outra peça publicada com ele
Design UI (C)
- Design UI (gate):
docs/plans/central-conteudos-liderancas-ui-design.html(+ assets emcentral-conteudos-liderancas-ui-design-assets/) — cenas: ficha interna com os dois recortes (lideranças + figuras públicas), facetaLiderançasno catálogo público (mobile/desktop) e o estado de peça sem ninguém marcado.
Objetivo e aceite
- A ficha da peça registra dois recortes de "quem aparece": (1) as lideranças da campanha — os registros de Liderança existentes, sem cadastro novo — e (2) figuras públicas (dobradinhas/estaduais e outras personalidades), em texto curado com catálogo, no molde de Instituição.
- O catálogo público ganha a faceta
Lideranças, unindo os dois recortes no mesmo filtro (decisão do humano: "Os dois"); os filtros continuam combinando entre si como hoje. - Fail-closed de exposição: a faceta mostra só NOMES de pessoas referenciadas por pelo menos uma peça publicada; nunca expõe liderança ou figura que não aparece em peça publicada.
- Nada de dado interno: sem contato, telefone, e-mail, municípios, organizações, status ou votos (declarados/estimados) de liderança; o leader lockdown segue intocado.
- Quem edita é quem já edita a ficha hoje (gate da assessoria de comunicação); a catalogação pode sugerir, mas nunca sobrescreve curadoria humana.
- Os nomes marcados entram na busca por termo da Central como qualquer outro conteúdo — buscar o nome de quem aparece acha a peça.
- Publicar/despublicar atualiza a faceta na hora: sem peça publicada com o nome, ele não aparece.
- Guardrails: sem cadastro paralelo de pessoa (relaciona ao dono existente ou usa o molde texto+catálogo); nada novo de PII é capturado e Consent/LGPD ficam intocados — a metade "lideranças da campanha" só mostra dados quando existirem lideranças (o dado de liderança segue atrás do bloqueio LGPD de produção).
Dados (intenção)
- Vou apresentar dados? Não — a faceta é uma lista de nomes; sem contagem, sem ranking, sem placar de aparições.
- Decisões desbloqueadas: a comunicação decide quem aparece em cada peça; o eleitor decide qual peça procurar pelo nome de quem aparece nela.
- Forma: adiada ao plano de implementação — restrição de produto: só nomes de exibição (sem número, sem contagem por pessoa, sem métrica de aparições).
Dados da decisão (literais)
- ID
S37; slugcentral-conteudos-liderancas(arquivodocs/plans/central-conteudos-liderancas.md); tipofeature; PriorityP2. - Faceta pública: rótulo
Lideranças(uma só), unindo os dois recortes no mesmo filtro. - Recorte 1 — lideranças da campanha: os registros de
Liderançaexistentes (dono atual; não criar cadastro de pessoa). - Recorte 2 — figuras públicas: dobradinhas/estaduais do roster público e outras personalidades, em texto curado com catálogo (molde de
Instituição), semeado com os nomes das dobradinhas. - Regra de exposição (fail-closed): só NOMES de pessoas que aparecem em pelo menos uma peça publicada; sem peça publicada, o nome não aparece.
- Resposta do humano no planejamento (verbatim): "Os dois" — a peça registra lideranças da campanha E figuras públicas, e o filtro público tem os dois recortes na mesma faceta.
- Guardrail literal: sem cadastro paralelo de pessoa; sem exposição de contato/território/votos da liderança.
Direção no codebase (hipótese)
- Áreas prováveis: ficha interna da peça (
src/components/campaign/content/ContentPieceForm.tsx,src/utilities/content/…); contrato/filtro público (src/lib/contentPieceCatalog.ts,src/components/conteudos/ContentPieceFilters.tsx); catalogação (src/utilities/content/contentPieceCataloging.ts). - Precedente a olhar:
institution— campo texto na peça (src/collections/ContentPiece.ts:303-307) + catálogo (src/lib/institutionCatalog.ts) + aliases (src/lib/institutionNameAliases.ts) + match na catalogação (contentPieceCataloging.ts:181-193); a faceta pública deriva rótulos das peças publicadas porslugify(contentPieceCatalog.ts:155-184,252-269), parâmetroinstituicao(:39-55,96-107).Speech.mentionedPeople(src/collections/Speech.ts:306-312) é precedente de "pessoas citadas" por texto, mas sem filtro público — não copiar o par acervo/C200. - Roster público de pessoas:
src/lib/stateDeputyCatalog.ts(53 dobradinhas, nome+número, público via S30). - Risco de acoplamento:
leadershipé interno e PII-bound (leitura escopada por perfil —src/utilities/access/leaderships.ts:31-32); a superfície pública não pode lerleadership,Contact,campaignUserouelectionCandidatenem expor campo interno — os nomes públicos derivam só das peças publicadas. A busca pública casa o texto normalizado da peça (src/lib/contentPiece.ts:323), então o nome precisa ser encontrável por lá. Leader lockdown intocado.
Dependências
- C211 (peças catalogadas/publicadas) e S27 (catálogo público com facetas) entregues — dura: sem peça publicada não há nome na faceta.
- Roster das dobradinhas (S30) como semente do recorte de figuras públicas — soft.
- Design hi-fi aprovado no gate.
Fora de escopo
- Cards personalizados: a escolha do estadual no estúdio (S30/S31) é do visitante, não propriedade da peça.
- C200 (separação por pessoa no acervo / speakers em gravações, #1167) — superfície distinta; não acoplar.
- Expor qualquer dado interno de liderança (contato, telefone, e-mail, municípios, organizações, votos declarados/estimados).
- Mudanças de LGPD/Consent: nada novo de PII é capturado; o dado de liderança segue atrás do bloqueio LGPD de produção (a metade campanha só mostra quando houver lideranças).
- Filtro/coluna na lista interna de peças — só se o gate pedir (ver Q(a)).
- Página pública por pessoa, diretório/ranking de aparições, analytics de circulação (C213).
Rabbit holes de produto
- Cadastro paralelo de pessoa. Se alguém "só completar": collection de "pessoas que aparecem" com nome/telefone/cidade. Corte neste item: liderança = registro existente; figura pública = texto curado + catálogo; nenhum cadastro novo.
- A faceta virar diretório de lideranças. Se alguém "só completar": listar todas as lideranças, com município e status. Corte neste item: só nomes de quem aparece em peça publicada; nada de dado interno.
- Placar de aparições. Se alguém "só completar": contador por pessoa, "quem aparece mais", ranking. Corte neste item: lista de nomes sem número.
- Página por pessoa. Se alguém "só completar":
/conteudos/pessoa/<nome>ou um hub da liderança. Corte neste item: uma faceta no catálogo existente; a peça continua sendo a unidade. - A catalogação automática decidir por gente. Se alguém "só completar": o pipeline preenche e sobrescreve os nomes. Corte neste item: sugestão só quando confiável; curadoria humana manda.
Questões em aberto (produto)
- Filtro só público ou também filtro/coluna na lista interna? Opções: A) faceta pública (o pedido) + propriedade visível/editável na ficha interna | B) também filtro/coluna na lista interna. Recomendação: A — é o pedido; filtro/coluna interno só se o gate pedir. (assumido — validar com produto)
- Uma faceta unindo os dois recortes ou duas facetas? Opções: A) uma faceta
Liderançascom os dois recortes | B)Lideranças+Figuras públicas. Recomendação: A — o humano escolheu "Os dois" no mesmo filtro; B fica registrada como alternativa se o volume de figuras públicas justificar separar. (assumido — validar com produto) - O recorte de figuras públicas reusa o roster das dobradinhas ou é texto com aliases? Opções: A) texto curado + catálogo no molde de Instituição, semeado com os nomes das dobradinhas | B) só o roster fechado das 53 dobradinhas | C) texto livre sem catálogo. Recomendação: A — cobre dobradinhas e outras personalidades sem inventar cadastro; C perde o casamento de grafias. (assumido — validar com produto)
- Que nome da liderança aparece? Opções: A) o nome do contato (é o título da Liderança hoje) | B) algum rótulo composto. Recomendação: A — só o nome; nunca telefone, e-mail ou município. (assumido — validar com produto)
Referências
- GitHub Issue — a registrar (
pnpm agent:register). - Design UI (gate):
docs/plans/central-conteudos-liderancas-ui-design.html(+ assets emcentral-conteudos-liderancas-ui-design-assets/). - Planos irmãos:
docs/plans/central-conteudos-ingestao.md(C211),docs/plans/central-conteudos-publica.md(S27),docs/plans/cards-estadual-dobradinha.md(S30),docs/plans/acervo-separacao-por-pessoa.md(C200 — fora de escopo). - Arquivos-pista:
src/collections/ContentPiece.ts,src/components/campaign/content/ContentPieceForm.tsx,src/lib/contentPieceCatalog.ts,src/components/conteudos/ContentPieceFilters.tsx,src/lib/institutionCatalog.ts,src/lib/institutionNameAliases.ts,src/utilities/content/contentPieceCataloging.ts,src/lib/stateDeputyCatalog.ts,src/collections/Leadership.ts,src/utilities/access/leaderships.ts,src/collections/Speech.ts. AGENTS.md— convenções já travadas (Contact como dono da pessoa; sem cadastro paralelo; migrations para schema).
Self-score (shaping)
5/5 — um outcome verificável, appetite declarado e nenhuma decisão dura de engenharia.
- Fatia = um outcome verificável: a peça registra quem aparece e o catálogo público filtra por isso.
- Appetite ~2 dias cabe: uma propriedade na ficha existente + uma faceta no catálogo existente, sem fluxo novo.
- Persona + job + aceite claros, em linguagem de produto, sem jargão de stack.
- Direção no codebase é hipótese: arquivos citados como pista, nenhum nome novo cravado.
- Zero schema/migration/signature no plano; literais são só de produto (rótulo, recortes, regra de exposição e a resposta do humano).