mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
docs(C186): plano + designs hi-fi do dossiê Solla por cidade (Related #1132)
Some checks are pending
Deploy / preflight (push) Waiting to run
Deploy / verify (push) Blocked by required conditions
Deploy / deploy staging (teqo-staging) (push) Blocked by required conditions
Deploy / requeue when main advanced (push) Blocked by required conditions
Deploy / deploy production (teqo-1313) (push) Blocked by required conditions
Some checks are pending
Deploy / preflight (push) Waiting to run
Deploy / verify (push) Blocked by required conditions
Deploy / deploy staging (teqo-staging) (push) Blocked by required conditions
Deploy / requeue when main advanced (push) Blocked by required conditions
Deploy / deploy production (teqo-1313) (push) Blocked by required conditions
This commit is contained in:
parent
2364b3e2d9
commit
b9de38212c
3 changed files with 2214 additions and 0 deletions
538
docs/plans/dossie-solla-cidade-boletim-ui-design.html
Normal file
538
docs/plans/dossie-solla-cidade-boletim-ui-design.html
Normal file
|
|
@ -0,0 +1,538 @@
|
|||
<!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>Design — Boletim informativo modelo por cidade</title>
|
||||
<style type="text/tailwindcss">
|
||||
@theme inline {
|
||||
--font-sans: 'Fira Sans', 'DejaVu Sans', Arial, sans-serif;
|
||||
--color-ink: #172033;
|
||||
--color-ink-soft: #435264;
|
||||
--color-paper: #ffffff;
|
||||
--color-workspace: #d8dde1;
|
||||
--color-line: #cbd5dc;
|
||||
--color-wash: #f3f6f8;
|
||||
--color-accent: #315c75;
|
||||
--color-accent-soft: #e8f0f4;
|
||||
--color-warning: #8a5a18;
|
||||
--color-warning-soft: #fff7e8;
|
||||
--radius-sm: 0.125rem;
|
||||
--radius-md: 0.25rem;
|
||||
}
|
||||
|
||||
:root {
|
||||
--ink: #172033;
|
||||
--ink-soft: #435264;
|
||||
--paper: #ffffff;
|
||||
--workspace: #d8dde1;
|
||||
--line: #cbd5dc;
|
||||
--wash: #f3f6f8;
|
||||
--accent: #315c75;
|
||||
--accent-soft: #e8f0f4;
|
||||
--warning: #8a5a18;
|
||||
--warning-soft: #fff7e8;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
html {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Fira Sans', 'DejaVu Sans', Arial, sans-serif;
|
||||
color: var(--ink);
|
||||
background: var(--workspace);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.sheet {
|
||||
position: relative;
|
||||
width: 210mm;
|
||||
height: 297mm;
|
||||
padding: 8mm 10mm 7mm 12mm;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: var(--paper);
|
||||
box-shadow: 0 18px 44px rgb(23 32 51 / 18%);
|
||||
font-size: 10.25pt;
|
||||
line-height: 1.26;
|
||||
}
|
||||
|
||||
.sheet::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0 auto 0 0;
|
||||
width: 3.5mm;
|
||||
background: var(--accent);
|
||||
}
|
||||
|
||||
.sheet p,
|
||||
.sheet h1,
|
||||
.sheet h2,
|
||||
.sheet h3,
|
||||
.sheet ul {
|
||||
margin-top: 0;
|
||||
}
|
||||
.tabular {
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
.model-label {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
min-height: 6mm;
|
||||
padding: 1mm 2.5mm;
|
||||
border: 0.35mm solid var(--warning);
|
||||
border-radius: 99px;
|
||||
color: #68420f;
|
||||
background: var(--warning-soft);
|
||||
font-size: 7.3pt;
|
||||
line-height: 1;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.kicker,
|
||||
.section-label {
|
||||
color: var(--accent);
|
||||
font-size: 7.4pt;
|
||||
line-height: 1.1;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.section-label {
|
||||
margin-bottom: 1.2mm;
|
||||
}
|
||||
|
||||
.asset-box {
|
||||
border: 0.4mm dashed #748894;
|
||||
color: #40535f;
|
||||
background:
|
||||
linear-gradient(135deg, transparent 49.6%, #cbd5dc 50%, transparent 50.4%),
|
||||
linear-gradient(45deg, transparent 49.6%, #cbd5dc 50%, transparent 50.4%), #f7f9fa;
|
||||
}
|
||||
|
||||
.highlight-card {
|
||||
min-height: 31mm;
|
||||
padding: 2.8mm 3mm 2.5mm;
|
||||
border: 0.3mm solid var(--line);
|
||||
border-top: 1.15mm solid var(--accent);
|
||||
background: var(--paper);
|
||||
}
|
||||
|
||||
.highlight-eyebrow {
|
||||
margin-bottom: 1.5mm;
|
||||
color: var(--ink-soft);
|
||||
font-size: 6.7pt;
|
||||
line-height: 1;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.highlight-number {
|
||||
margin: 0;
|
||||
color: var(--accent);
|
||||
font-size: 18.5pt;
|
||||
line-height: 0.96;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.035em;
|
||||
}
|
||||
|
||||
.highlight-title {
|
||||
margin: 1.5mm 0 0;
|
||||
font-size: 10.8pt;
|
||||
line-height: 1.08;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
|
||||
.highlight-note {
|
||||
margin: 1.3mm 0 0;
|
||||
color: var(--ink-soft);
|
||||
font-size: 8.15pt;
|
||||
line-height: 1.22;
|
||||
}
|
||||
|
||||
.timeline-step {
|
||||
position: relative;
|
||||
padding: 4.5mm 2.5mm 1.5mm;
|
||||
border-top: 0.4mm solid #97aab6;
|
||||
}
|
||||
|
||||
.timeline-step::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -1.6mm;
|
||||
left: 2.5mm;
|
||||
width: 3mm;
|
||||
height: 3mm;
|
||||
border: 0.65mm solid var(--accent-soft);
|
||||
border-radius: 99px;
|
||||
background: var(--accent);
|
||||
box-shadow: 0 0 0 0.3mm var(--accent);
|
||||
}
|
||||
|
||||
.more-item {
|
||||
position: relative;
|
||||
min-height: 11mm;
|
||||
padding: 0 0 2mm 5mm;
|
||||
border-bottom: 0.25mm solid var(--line);
|
||||
font-size: 9pt;
|
||||
line-height: 1.22;
|
||||
}
|
||||
|
||||
.more-item::before {
|
||||
content: '✓';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
color: var(--accent);
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@media print {
|
||||
html,
|
||||
body {
|
||||
width: 210mm;
|
||||
height: 297mm;
|
||||
background: #fff;
|
||||
}
|
||||
.gate-header,
|
||||
.scene-label {
|
||||
display: none !important;
|
||||
}
|
||||
.pages {
|
||||
display: block !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.scene {
|
||||
width: 210mm;
|
||||
height: 297mm;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.sheet {
|
||||
width: 210mm;
|
||||
height: 297mm;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="gate-header mx-auto max-w-[1100px] px-6 pt-8 text-ink">
|
||||
<p class="text-xs font-bold uppercase tracking-[0.14em] text-accent">
|
||||
Gate visual · Impeccable C
|
||||
</p>
|
||||
<h1 class="mt-1 text-2xl font-semibold tracking-tight">
|
||||
Boletim informativo modelo — uma página A4
|
||||
</h1>
|
||||
<p class="mt-2 max-w-3xl text-sm leading-6 text-ink-soft">
|
||||
Síntese densa para eleitores: muitas entregas em leitura rápida, números legíveis e
|
||||
linguagem direta. A folha abaixo é o único quadro imprimível, com altura fixa e sem chamada
|
||||
eleitoral.
|
||||
</p>
|
||||
<div class="mt-4 flex flex-wrap gap-2 text-xs">
|
||||
<span class="rounded-full border border-line bg-white px-3 py-1">A4 · 210 × 297 mm</span>
|
||||
<span class="rounded-full border border-line bg-white px-3 py-1">corpo 10–10,5 pt</span>
|
||||
<span class="rounded-full border border-line bg-white px-3 py-1"
|
||||
>6 destaques + 14 itens + trajetória</span
|
||||
>
|
||||
<span class="rounded-full border border-line bg-white px-3 py-1"
|
||||
>sem fontes no boletim</span
|
||||
>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="pages mx-auto flex max-w-[1100px] justify-center px-6 py-10">
|
||||
<section class="scene" aria-labelledby="bulletin-title">
|
||||
<p class="scene-label mb-2 text-xs font-bold uppercase tracking-[0.12em] text-ink-soft">
|
||||
Cena única · Boletim completo · impressão 1/1
|
||||
</p>
|
||||
|
||||
<article class="sheet" aria-label="Modelo de boletim informativo de uma página">
|
||||
<header
|
||||
class="flex items-center justify-between gap-[6mm] border-b-[0.55mm] border-ink pb-[2.5mm]"
|
||||
>
|
||||
<div>
|
||||
<p class="kicker mb-[1mm]">Boletim informativo · atuação pública</p>
|
||||
<p class="m-0 text-[10pt] font-bold text-ink-soft">Município de Exemplo · Bahia</p>
|
||||
</div>
|
||||
<div class="flex items-center gap-[3mm]">
|
||||
<p
|
||||
class="m-0 max-w-[44mm] text-right text-[6.8pt] font-semibold leading-[1.2] text-warning"
|
||||
>
|
||||
Dados ilustrativos: substituir apenas pelo que o dossiê comprovar.
|
||||
</p>
|
||||
<span class="model-label">Modelo — insumo interno</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section
|
||||
class="mt-[3.5mm] grid grid-cols-[1fr_46mm] gap-[5mm]"
|
||||
aria-label="Abertura do boletim"
|
||||
>
|
||||
<div>
|
||||
<p class="section-label">Trabalho que chega à cidade e à região</p>
|
||||
<h1
|
||||
id="bulletin-title"
|
||||
class="m-0 text-[23pt] font-semibold leading-[1] tracking-[-0.038em]"
|
||||
>
|
||||
O que Jorge Solla fez por <span class="text-accent">Município de Exemplo</span>
|
||||
</h1>
|
||||
<p class="mb-0 mt-[2.6mm] max-w-[125mm] text-[10.5pt] leading-[1.33] text-ink-soft">
|
||||
Da gestão da saúde ao trabalho na Câmara: recursos, serviços, obras e equipamentos
|
||||
que melhoram a vida de quem mora aqui.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="asset-box flex min-h-[36mm] flex-col items-center justify-center rounded-sm p-[3mm] text-center"
|
||||
>
|
||||
<svg
|
||||
class="mb-[1.5mm] h-6 w-6 text-accent"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.8"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<rect x="3" y="5" width="18" height="14" rx="2" />
|
||||
<circle cx="8.5" cy="10" r="1.5" />
|
||||
<path d="m21 15-5-5L5 19" />
|
||||
</svg>
|
||||
<p class="m-0 text-[7.5pt] font-extrabold uppercase tracking-[.08em]">
|
||||
NEEDS ASSET · foto real
|
||||
</p>
|
||||
<p class="mb-0 mt-[1mm] text-[7pt] leading-[1.25]">
|
||||
Solla na cidade ou no serviço citado<br />origem, autoria e licença
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="mt-[3.8mm]" aria-labelledby="highlights-title">
|
||||
<div
|
||||
class="flex items-end justify-between gap-4 border-b-[0.3mm] border-line pb-[1.5mm]"
|
||||
>
|
||||
<div>
|
||||
<p class="section-label">Destaques</p>
|
||||
<h2
|
||||
id="highlights-title"
|
||||
class="m-0 text-[14pt] font-semibold leading-none tracking-[-0.015em]"
|
||||
>
|
||||
Entregas que fazem diferença
|
||||
</h2>
|
||||
</div>
|
||||
<p
|
||||
class="m-0 text-right text-[7pt] font-bold uppercase tracking-[.07em] text-ink-soft"
|
||||
>
|
||||
cidade ≠ região · cada alcance vem identificado
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mt-[2.5mm] grid grid-cols-3 gap-[2.2mm]">
|
||||
<article class="highlight-card rounded-sm">
|
||||
<p class="highlight-eyebrow">Saúde · cidade</p>
|
||||
<p class="highlight-number tabular">R$ 1,2 milhão</p>
|
||||
<h3 class="highlight-title">para ampliar o atendimento</h3>
|
||||
<p class="highlight-note">Valor e finalidade entram somente quando confirmados.</p>
|
||||
</article>
|
||||
|
||||
<article class="highlight-card rounded-sm">
|
||||
<p class="highlight-eyebrow">Obras · cidade</p>
|
||||
<p class="highlight-number tabular">2 UPAs</p>
|
||||
<h3 class="highlight-title">mais cuidado perto de casa</h3>
|
||||
<p class="highlight-note">Dizer se foram construídas, ampliadas ou equipadas.</p>
|
||||
</article>
|
||||
|
||||
<article class="highlight-card rounded-sm">
|
||||
<p class="highlight-eyebrow">Equipamentos · cidade</p>
|
||||
<p class="highlight-number tabular">18 itens</p>
|
||||
<h3 class="highlight-title">para unidades de saúde</h3>
|
||||
<p class="highlight-note">Nomear os principais itens e os locais atendidos.</p>
|
||||
</article>
|
||||
|
||||
<article class="highlight-card rounded-sm">
|
||||
<p class="highlight-eyebrow">Atendimento · região</p>
|
||||
<p class="highlight-number tabular">1 hospital</p>
|
||||
<h3 class="highlight-title">referência para a região</h3>
|
||||
<p class="highlight-note">Explicar em uma linha como a cidade é atendida.</p>
|
||||
</article>
|
||||
|
||||
<article class="highlight-card rounded-sm">
|
||||
<p class="highlight-eyebrow">Mandato · cidade</p>
|
||||
<p class="highlight-number tabular">6 ações</p>
|
||||
<h3 class="highlight-title">com resultado no município</h3>
|
||||
<p class="highlight-note">Agrupar só entregas concluídas e claramente descritas.</p>
|
||||
</article>
|
||||
|
||||
<article class="highlight-card rounded-sm">
|
||||
<p class="highlight-eyebrow">Vínculo local</p>
|
||||
<p class="highlight-number tabular">2 títulos</p>
|
||||
<h3 class="highlight-title">de reconhecimento público</h3>
|
||||
<p class="highlight-note">Usar o nome oficial de cada homenagem confirmada.</p>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section
|
||||
class="mt-[3.5mm] rounded-sm bg-accent-soft px-[3mm] pb-[2.6mm] pt-[2.8mm]"
|
||||
aria-labelledby="timeline-title"
|
||||
>
|
||||
<div class="flex items-center justify-between gap-4">
|
||||
<h2 id="timeline-title" class="m-0 text-[11pt] font-semibold">
|
||||
Desde 1999, uma trajetória na saúde pública
|
||||
</h2>
|
||||
<p class="m-0 text-[6.7pt] font-bold uppercase tracking-[.08em] text-accent">
|
||||
experiência que virou trabalho pela Bahia
|
||||
</p>
|
||||
</div>
|
||||
<div class="mt-[3mm] grid grid-cols-4">
|
||||
<div class="timeline-step">
|
||||
<p class="mb-[.7mm] text-[7.2pt] font-extrabold text-accent">1999–2002</p>
|
||||
<p class="m-0 text-[8.4pt] font-semibold leading-[1.18]">
|
||||
Saúde municipal em Vitória da Conquista
|
||||
</p>
|
||||
</div>
|
||||
<div class="timeline-step">
|
||||
<p class="mb-[.7mm] text-[7.2pt] font-extrabold text-accent">2003–2005</p>
|
||||
<p class="m-0 text-[8.4pt] font-semibold leading-[1.18]">
|
||||
Atenção à saúde no Ministério da Saúde
|
||||
</p>
|
||||
</div>
|
||||
<div class="timeline-step">
|
||||
<p class="mb-[.7mm] text-[7.2pt] font-extrabold text-accent">2007–2014</p>
|
||||
<p class="m-0 text-[8.4pt] font-semibold leading-[1.18]">
|
||||
Secretaria da Saúde da Bahia
|
||||
</p>
|
||||
</div>
|
||||
<div class="timeline-step">
|
||||
<p class="mb-[.7mm] text-[7.2pt] font-extrabold text-accent">DESDE 2015</p>
|
||||
<p class="m-0 text-[8.4pt] font-semibold leading-[1.18]">
|
||||
Atuação na Câmara Federal
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section
|
||||
class="mt-[3.5mm] grid grid-cols-[1fr_43mm] gap-[4mm]"
|
||||
aria-labelledby="more-title"
|
||||
>
|
||||
<div>
|
||||
<div
|
||||
class="flex items-end justify-between gap-4 border-b-[0.3mm] border-line pb-[1.4mm]"
|
||||
>
|
||||
<div>
|
||||
<p class="section-label">E mais</p>
|
||||
<h2 id="more-title" class="m-0 text-[12.5pt] font-semibold leading-none">
|
||||
Outras ações que entram no boletim
|
||||
</h2>
|
||||
</div>
|
||||
<p class="m-0 text-[6.7pt] font-bold uppercase tracking-[.07em] text-ink-soft">
|
||||
frases curtas · fatos confirmados
|
||||
</p>
|
||||
</div>
|
||||
<div class="mt-[2.3mm] grid grid-cols-2 gap-x-[4mm] gap-y-[1.7mm]">
|
||||
<p class="more-item mb-0">
|
||||
<strong>Reforma de posto:</strong> nome da unidade e bairro.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Nova ambulância:</strong> serviço que recebeu o veículo.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Mais Médicos:</strong> resultado direto para a população.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Mutirão de saúde:</strong> atendimentos realizados.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Água e saneamento:</strong> comunidade beneficiada.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Defesa do SUS:</strong> ação ligada à cidade ou região.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Obra regional:</strong> por que também atende o município.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Reconhecimento local:</strong> homenagem e ano.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Atendimento especializado:</strong> serviço e público atendido.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Medicamentos:</strong> melhoria concreta para os pacientes.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>SAMU:</strong> base, veículo ou melhoria confirmada.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Formação profissional:</strong> equipes beneficiadas.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Exames e cirurgias:</strong> ampliação comprovada.
|
||||
</p>
|
||||
<p class="more-item mb-0">
|
||||
<strong>Defesa da cidade:</strong> audiência ou ação na Câmara.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside class="grid grid-rows-2 gap-[2.3mm]" aria-label="Ativos visuais pendentes">
|
||||
<div
|
||||
class="asset-box flex min-h-[25mm] items-center justify-center rounded-sm p-[2.5mm] text-center"
|
||||
>
|
||||
<p class="m-0 text-[7.1pt] leading-[1.25]">
|
||||
<strong class="uppercase tracking-[.06em]">NEEDS ASSET · selo</strong><br />marca
|
||||
institucional aprovada<br />arquivo vetorial
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
class="asset-box flex min-h-[25mm] items-center justify-center rounded-sm p-[2.5mm] text-center"
|
||||
>
|
||||
<p class="m-0 text-[7.1pt] leading-[1.25]">
|
||||
<strong class="uppercase tracking-[.06em]">NEEDS ASSET · recorte</strong
|
||||
><br />imagem real de cobertura<br />origem e licença
|
||||
</p>
|
||||
</div>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<footer class="mt-auto border-t-[0.35mm] border-line pt-[2.2mm]">
|
||||
<div class="flex items-end justify-between gap-[5mm]">
|
||||
<div>
|
||||
<p class="mb-[.8mm] text-[7.2pt] font-semibold leading-[1.25] text-accent">
|
||||
Fatos selecionados do dossiê da cidade.
|
||||
</p>
|
||||
<p class="m-0 max-w-[142mm] text-[7.4pt] leading-[1.28] text-ink-soft">
|
||||
<strong class="text-warning">Defeso eleitoral:</strong> material informativo em
|
||||
preparação. Não publicar sem revisão editorial e jurídica.
|
||||
</p>
|
||||
</div>
|
||||
<p
|
||||
class="m-0 shrink-0 text-right text-[7.2pt] font-semibold leading-[1.3] text-ink-soft"
|
||||
>
|
||||
MODELO · INSUMO INTERNO<br />A4 · página 1/1
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
1538
docs/plans/dossie-solla-cidade-ui-design.html
Normal file
1538
docs/plans/dossie-solla-cidade-ui-design.html
Normal file
File diff suppressed because it is too large
Load diff
138
docs/plans/dossie-solla-cidade.md
Normal file
138
docs/plans/dossie-solla-cidade.md
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
# Dossiê Solla por cidade — o que ele fez pela cidade e pela região (skill → dossiê + boletim modelo)
|
||||
|
||||
Status: rascunho
|
||||
Atualizado em: 2026-09-17
|
||||
Issue: #1132
|
||||
Priority: P2
|
||||
Impeccable: C — fluxo novo (dossiê/relatório + boletim modelo por cidade)
|
||||
Design UI: docs/plans/dossie-solla-cidade-ui-design.html + docs/plans/dossie-solla-cidade-boletim-ui-design.html
|
||||
Appetite: ~3–4 dias eng; um outcome verificável — rodar `/dossie-solla-cidade <cidade>` e obter PDF+`.md` (seções por era, números com fonte, lacunas) **e** o PDF do Boletim Informativo modelo (1 página A4, público eleitor)
|
||||
Responsável: —
|
||||
|
||||
## Intenção
|
||||
|
||||
A equipe de comunicação precisa montar **boletins informativos por município da Bahia** e hoje não tem de onde partir: para dizer "o que Solla fez por esta cidade", a pessoa garimpa memória, WhatsApp e notícia solta. A skill existente `/relatorio-cidade` não resolve isso — ela é um **briefing pré-viagem** do cenário eleitoral atual (quem manda, o que está quente, o que anunciar), não um levantamento da **obra de uma vida**. Este item cria uma skill nova que reúne, com fonte e data, **tudo o que Jorge Solla fez pela cidade e sua região ao longo de toda a carreira** — epidemiologista na SESAB, secretário municipal de Saúde de Vitória da Conquista, Secretário de Atenção à Saúde do Ministério da Saúde, secretário estadual de Saúde da Bahia e deputado federal. O `/relatorio-cidade` inspira o fluxo (skill + command + subagente, sub-agentes por etapa, build local de PDF), mas o conteúdo e o recorte são outros. Além do dossiê, a skill entrega um **Boletim Informativo modelo** — **uma página A4** com a síntese, em linguagem de **público eleitor**, de tudo o que Solla fez por aquela cidade e/ou região; o pessoal de comunicação parte do dossiê + desse modelo para produzir o boletim final.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** equipe de comunicação (`communicator`/assessoria), na mesa, montando um boletim por cidade para pauta de mandato; sem tempo de garimpo e obrigada a não publicar sem lastro.
|
||||
- **Job principal:** numa invocação, obter (1) um dossiê **datado e com fonte** de tudo o que Solla entregou àquela cidade e região — com números sempre que existirem — e (2) um **boletim modelo de 1 página**, em linguagem de eleitor, sintetizando essas entregas, para basear o boletim final da cidade.
|
||||
- **Fluxo desejado:** pede `/dossie-solla-cidade <cidade>` → o orquestrador resolve o slug, dispara pesquisadores (um por era da carreira) em paralelo, roda a extração read-only do acervo e monta os dois PDFs (+ `.md`) nos layouts já desenhados pelo `designer` → a comunicação lê a linha do tempo, escolhe tema/ângulo, confere as fontes e adapta o boletim modelo; lacunas ficam explícitas.
|
||||
- **Anti-goals de produto:** publicar peça de campanha/propaganda pelo próprio pipeline (defeso 2026 — o boletim modelo sai rotulado como insumo interno); repetir o recorte do `/relatorio-cidade` (cenário eleitoral atual); inventar fato sem fonte; somar região/polo como se fosse da cidade; virar biografia oficial de vida inteira sem foco local; segundo cadastro de pessoa/dado.
|
||||
- **Público do boletim modelo:** eleitores da cidade/região — linguagem simples, sem jargão técnico/orçamentário, números destacados e legíveis; **não** é documento de gestor.
|
||||
|
||||
### Esboço de fluxo (C)
|
||||
|
||||
```text
|
||||
[pede: /dossie-solla-cidade Ilheus] → [orquestrador resolve slug canônico]
|
||||
→ [1 researcher por era (A/B/C) por cidade, em paralelo] ─┐
|
||||
→ [extração read-only do acervo (serializada, 1 cidade)] ─┼→ [build local: HTML dos designers → PDF dossiê + .md]
|
||||
→ [summary: ok|failed + recibo curto por cidade/era] ─────┘ [+ Boletim modelo 1×A4, público eleitor]
|
||||
→ [comunicação escolhe tema/ângulo, confere fonte e adapta o boletim modelo; lacunas explícitas]
|
||||
```
|
||||
|
||||
### Design UI (C)
|
||||
|
||||
- Design UI (gate) — dossiê: `docs/plans/dossie-solla-cidade-ui-design.html` — layout do **relatório A4** (página 1 "resumo de uma olhada" + seções por era, tabelas de números/fontes e a tabela de lacunas), produzido pelo `designer` **antes** da montagem final da skill e portado pelo build.
|
||||
- Design UI (gate) — boletim modelo: `docs/plans/dossie-solla-cidade-boletim-ui-design.html` — layout do **Boletim Informativo modelo (1 página A4, público eleitor)**, também produzido pelo `designer` antes da montagem final e portado pelo build.
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Com uma cidade, sai um par **PDF A4 datado + companion `.md`** com: resumo de uma olhada; linha do tempo da carreira (períodos + como cada um foi recuperado); seções por era **A** (carreira técnica/SESAB + Secretaria Municipal de Saúde de Vitória da Conquista + SAS/MS, até 2006), **B** (SESAB 2007–2014) e **C** (deputado federal 2015–2027); região/polo; títulos/honrarias e vínculos locais; ganchos para o boletim; fontes e limites; nota de defeso.
|
||||
- Com a mesma cidade, sai também o **Boletim Informativo modelo**: **1 página A4**, em linguagem de público eleitor, **denso e direto ao ponto** (mais entregas por página, frases curtas), sintetizando o que Solla fez pela cidade/região, com os números em destaque e o rótulo de **insumo interno/modelo** (não é a peça final publicável). **Sem declaração de fontes** — as fontes vivem só no dossiê.
|
||||
- **Toda afirmação não trivial do dossiê tem fonte visível** (URL + data); o que não foi achado vira **lacuna explícita** — nunca inferência. **Números sempre que a fonte informar.** O boletim modelo herda só fatos com fonte do dossiê — nunca introduz fato novo.
|
||||
- Os layouts (dossiê e boletim modelo) vêm dos artefatos hi-fi do `designer` (fonte de verdade do port), não inventados na implementação.
|
||||
- Pesquisa roda em **sub-agente por era, por cidade, em paralelo**; o orquestrador agrega **apenas recibos curtos** (nunca o corpo dos JSONs) e serializa a extração read-only.
|
||||
- Guardrails de produto: "sem fonte, não publica"; **empenho ≠ pagamento** (separar autorizado/empenhado/liquidado/pago/restos); **esfera explícita** (município / região / polo — nunca somar); leitura relativa (nunca % estadual absoluto); atribuição de emenda de bancada/relator só com autoria checada; PII mínima; artefato **gitignored** (repo público); falha isolada no lote não cancela as demais.
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim, superfície neste item — o dossiê é documento de dados (números com fonte, séries e tabelas de lacunas) e o boletim modelo destaca números legíveis ao eleitor.
|
||||
- **Decisões desbloqueadas:** a comunicação escolhe **qual entrega/tema** vira o boletim da cidade; em que **ângulo** (por era, por área — saúde/obras/emendas); **o que entra na 1 página do boletim modelo** (o recorte que fala com o eleitor); e **qual lacuna** buscar antes de publicar.
|
||||
- **Forma:** _adiada ao plano de implementação_ — aqui só restrições de produto: esfera rotulada em cada linha; empenho nunca tratado como pago; sem % estadual absoluto; lacuna explícita em vez de silêncio; ruído eleitoral fora.
|
||||
|
||||
## Dados da decisão (literais)
|
||||
|
||||
**Boletim Informativo modelo (literais de produto):** **1 página A4**; público-alvo **eleitores** (linguagem simples, sem jargão orçamentário); síntese **densa e direta** do que Solla fez pela cidade/região (mais entregas na página, frases curtas) com **números destacados** quando houver; **sem declaração de fontes** (as fontes ficam exclusivamente no dossiê — o boletim pode citar o dossiê como origem); rótulo **"modelo — insumo interno"** + nota de defeso; **sem CTA/propaganda** (o CTA é decisão da peça final da campanha, fora deste item); `NEEDS ASSET` para foto/selo/clipping. Herda **apenas fatos já com fonte** do dossiê.
|
||||
|
||||
**Linha do tempo da carreira (carregar verbatim; incertezas ficam marcadas, nunca inventadas):**
|
||||
|
||||
| Período | Papel | Como recuperar |
|
||||
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
||||
| 1985–1987 | Residência em Medicina Social (UFBA/INAMPS) | Biografia Câmara |
|
||||
| 1989/1990–1998 | SESAB (epidemiologista no Distrito Sanitário de Itapagipe; sanitarista no nível central — PACS/PSF/DEPAS; cedido à SMS Salvador; apoio a Amargosa 1997–98) | Pronunciamento dele 03/01/2007 (saude.ba.gov.br); biografia Câmara. **[INCERTO: 1989 vs 1990]** |
|
||||
| 1995–1999 | Consultor do Ministério da Saúde (Brasília) | Biografia Câmara |
|
||||
| 1998 | Professor (Escola Bahiana de Medicina) + pesquisador ISC/UFBA | Biografia Câmara / PT-BA |
|
||||
| **1999–2002** | **Secretário Municipal de Saúde de Vitória da Conquista** (prefeito Guilherme Menezes) | Biografia Câmara (oficial), PT-BA |
|
||||
| **2003–2005** | **Secretário de Atenção à Saúde do Ministério da Saúde** (ministro Humberto Costa) | Biografia Câmara; discurso 2007. **[INCERTO: 2005 vs 2006 — fonte oficial Câmara = 2005]** |
|
||||
| 2006–2009 | Doutorado em Clínica Médica (UFRJ) | Biografia Câmara |
|
||||
| **01/01/2007–18/01/2014** | **Secretário Estadual de Saúde da Bahia (SESAB)** — governo Jaques Wagner | Wikipedia com refs + notícias SESAB |
|
||||
| **2015–2019** | Deputado Federal, 55ª legislatura (125.159 votos) | API Câmara `/deputados/178857` |
|
||||
| **2019–2023** | Deputado Federal, 56ª legislatura (135.657 votos) | idem |
|
||||
| **2023–2027** | Deputado Federal, 57ª legislatura (128.968 votos) | idem |
|
||||
|
||||
- **Outros literais:** nascimento **11/04/1961** (Salvador-BA) — **não** 1962; Câmara deputy id **178857**; **nunca** foi deputado estadual; Comenda Dois de Julho (ALBA, 2013); Cidadão Ilheense / Santamarense.
|
||||
- **Comissões 57ª:** Comissão de Saúde (titular), CFFC (suplente), PEC 014/21 agentes de saúde, Vice-líder da Federação Brasil da Esperança desde 02/06/2026. **56ª:** Comissão de Saúde; relator da renovação do Mais Médicos (2018). **55ª:** coordenador da bancada do PT na Comissão de Seguridade Social e Família (2016).
|
||||
- **APIs/portais (documentar no SKILL):** Câmara dados abertos v2 (sem auth) `https://dadosabertos.camara.leg.br/api/v2` — `/deputados/178857`, `/deputados/178857/discursos?dataInicio=&dataFim=` (**default 7 dias!**), `/deputados/178857/orgaos|frentes`, `/proposicoes?idDeputadoAutor=178857` (itens=100; ~3.338), `/proposicoes/{id}/tramitacoes` (relatorias saem daqui — `/relatorias` **não existe**, 405), `/votacoes`, `/eventos`; site `https://www.camara.leg.br/deputados/178857`.
|
||||
- **Portal da Transparência (CGU):** base `https://api.portaldatransparencia.gov.br/api-de-dados`, header `chave-api-dados`, env `PORTAL_TRANSPARENCIA_API_KEY`; `/emendas` (params `codigoEmenda,numeroEmenda,nomeAutor,tipoEmenda,ano,codigoFuncao,codigoSubfuncao,pagina` — **não filtra por município**; parsear `localidadeDoGasto`); `/emendas/documentos/{codigo}`; **`/convenios` este sim** filtra por `codigoIBGE`/`uf`. **Anos do mandato: 2015–2026.**
|
||||
- **Siga Brasil (Senado)** painel de emendas por autor/ano/município; **TCU – Painel de Execução de Emendas** (por município e parlamentar).
|
||||
- **DATASUS:** OpenDataSUS CKAN `https://opendatasus.saude.gov.br/api/3/action/package_list`; TabNet `http://tabnet.datasus.gov.br/` (CNES/SIH/SIA, export CSV); **CNES** `https://cnes.datasus.gov.br/`; **SIOPS** `http://siops.datasus.gov.br/` (gasto público em saúde — chave para provar gestão municipal/estadual).
|
||||
- **IBGE:** `https://servicodados.ibge.gov.br/api/v1/localidades/estados/BA/municipios`; malhas v3; SIDRA `https://apisidra.ibge.gov.br/values/t/{tabela}/n6/{codigoIBGE}/v/{var}/p/{ano}`.
|
||||
- **TSE:** `https://dadosabertos.tse.jus.br/` datasets "Votação nominal por município e zona" (CSV); CDN `cdn.tse.jus.br/estatistica/sead/odsele/...` (pode 403).
|
||||
- **Diário Oficial:** DOU `https://www.in.gov.br/consulta` (dados abertos grátis desde 2020); DOE-BA **DOOL** `https://dool.egba.ba.gov.br/` (desde 30/06/2007); acervo histórico EGBA desde 1915 (sem API); **Transparência Bahia** `https://www.transparencia.ba.gov.br/` (FIPLAN).
|
||||
- **Acervo de falas (Teqo, interno, read-only):** collections `Speech`/`SpeechSegment`/`SpeechCut`; filtros `src/utilities/speech/speechListFilters.ts`; facetas `src/lib/speechFacets.ts` (18 temas); cobre 54ª–57ª legislaturas (2011+) — **não cobre a carreira pré-2011**; extração read-only no homeserver como no `/relatorio-cidade`.
|
||||
- **Estratégia de busca web:** `"Jorge Solla" <cidade>` / `<tema>`; recorte por data `after:YYYY-MM-DD before:YYYY-MM-DD`; `site:` por veículo (atarde.com.br, correio24horas.com.br, bahianoticias.com.br, metro1.com.br, bnews.com.br, bahia.ba, acordacidade.com.br, g1.globo.com/ba, camara.leg.br, ptnacamara.org.br, ptbahia.org.br, saude.ba.gov.br, jorgesolla.com.br); **excluir ruído de campanha 2026** (`-eleição -candidato -voto -coligação -pesquisa`) e preferir verbos de entrega (emenda, recurso, repassado, hospital, UPA, SAMU, obra, inaugura, audiência, relator); templates por período (1999–2002 Conquista; 2003–2005 MS; 2007–2014 SESAB; 2015–2026 Câmara).
|
||||
- **Decomposição (intenção):** orquestrador (parse do lote, catálogo `src/lib/municipalityCatalog.ts`, Salvador = `salvador-ze-N`, fan-out, agrega só recibos, extração read-only serializada 1 cidade por vez, build local) + **um researcher sub-agent por era (A/B/C) por cidade, em paralelo**; cada um escreve `<slug>.<era>.research.json` com `{item, answer, numbers, sourceUrl, sourceDate}` e devolve **recibo curto** (status, path, itemCount, gapCount, gaps[]) no padrão do `/relatorio-cidade`. Guarda de concorrência para lotes grandes (não estourar limite).
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** skill `.agents/skills/dossie-solla-cidade/SKILL.md`, command `.opencode/commands/dossie-solla-cidade.md`, subagente `.opencode/agent/dossie-solla-cidade.md`; build reusando `scripts/build-city-report.mjs` + `scripts/lib/cityReport*.mjs` (dossiê) e um build irmão de 1 página para o boletim; fetch Câmara `scripts/lib/camaraFetch.mjs`/`camaraSpeeches.mjs` (`SOLLA_DEPUTY_ID=178857`) e emendas `scripts/lib/portalTransparenciaEmendas.mjs` (match `localidadeDoGasto`, fail-closed → lacuna).
|
||||
- **Precedente a olhar:** `.agents/skills/relatorio-cidade/SKILL.md` (lote, recibo, guardrails), `.opencode/agent/relatorio-cidade.md`, `.agents/skills/plan-issue/ui-design-html.md` (artefato hi-fi do `designer`), `scripts/build-solla-ceuci-salvador-report.mjs` (narrativa PDF), `.opencode/skills/solla-comunicacao/referencia/perfil-e-posicoes.md` (bio).
|
||||
- **Risco de acoplamento:** extração read-only à produção (guard de confirmação + `default_transaction_read_only=on`); NÃO duplicar o `/relatorio-cidade` — compartilhar scripts/lib quando fizer sentido; território = Território de Identidade (`src/lib/municipalityCatalog.ts`, `bahiaTerritories.ts`); acervo cobre só 2011+.
|
||||
|
||||
## Dependências
|
||||
|
||||
- **Nenhuma dura** — o `/relatorio-cidade` (skill+command+agent), o acervo de falas e o molde de PDF já existem; o `designer` produz o layout do relatório.
|
||||
- Soft: `PORTAL_TRANSPARENCIA_API_KEY` para emendas (sem chave → lacuna); a API de emendas não atribui ao município — aqui o match é por `localidadeDoGasto` e degrada para lacuna.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Redigir/aprovar/veicular a **peça final publicável** do boletim — a skill entrega o dossiê + o **boletim modelo** (1 página); a versão final, aprovada e veiculada, é da comunicação/campanha.
|
||||
- Publicar/distribuir (site, redes, imprensa); qualquer peça de campanha eleitoral; CTA de campanha no boletim modelo.
|
||||
- Persistir dados novos na base, segundo cadastro, ou qualquer schema/migration.
|
||||
- Índice/PDF agregado de lote (uma cidade = um par PDF+MD).
|
||||
- Alterar o `/relatorio-cidade`; reconstruir a carreira pré-2011 fora do acervo (surge como lacuna, não invenção).
|
||||
- Design gráfico/arte final do boletim — só o layout do relatório hi-fi.
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **"Cobrir a vida inteira vira biografia oficial."** Se alguém "só completar": dossiê de 60 páginas sem foco local. **Corte neste item:** eras fixas A/B/C, foco cidade+região, teto por seção.
|
||||
- **"IA plausível sem fonte."** Se alguém "só completar": texto bonito sem lastro. **Corte neste item:** sem fonte não publica; lacuna explícita; números só com URL+data.
|
||||
- **"Somar região/polo como da cidade."** Se alguém "só completar": inflar a entrega local. **Corte neste item:** esfera rotulada (`município`/`região`/`polo`), nunca somada.
|
||||
- **"Vira peça de campanha."** Se alguém "só completar": publicidade institucional no defeso, ou o boletim modelo ser veiculado como peça final sem revisão. **Corte neste item:** dossiê + boletim modelo rotulados como insumo interno gitignored + nota de defeso; sem CTA; a peça final é da comunicação.
|
||||
- **"Boletim modelo vira fact-oide sem fonte."** Se alguém "só completar": síntese bonita para o eleitor sem lastro. **Corte neste item:** o boletim modelo herda apenas fatos já com fonte do dossiê e traz a linha de fontes; número sem fonte não entra.
|
||||
- **"Fan-out infinito de sub-agentes."** Se alguém "só completar": N cidades × N eras × N buscas. **Corte neste item:** pesquisador por era por cidade + guarda de concorrência; extração serializada.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Nome da skill?** **Opções:** A) `dossie-solla-cidade` | B) `boletim-solla-cidade` | C) `realizacoes-solla-cidade`. **Recomendação:** A — "dossiê" descreve o artefato interno (insumo), não promete a peça final "boletim"; B pode confundir com o boletim pronto. _(assumido — validar com a comunicação)_
|
||||
- **Recorte das eras?** **Opções:** A) 3 eras (até 2006 / 2007–2014 / 2015–2027) | B) por cargo (6+ blocos) | C) por área. **Recomendação:** A — equilibra fan-out e coerência narrativa (técnica+MS / SESAB / Câmara). _(assumido)_
|
||||
- **Salvador?** **Opções:** A) exigir `salvador-ze-N` como no `/relatorio-cidade` | B) aceitar "Salvador" e agregar as 19 zonas. **Recomendação:** A — consistência com o catálogo; B vira produto novo. _(assumido)_
|
||||
- **Lote de cidades?** **Opções:** A) só 1 cidade no v1 | B) lote por vírgula já no v1. **Recomendação:** B — o lote e o fan-out são o motivo do appetite; herdar o contrato do `/relatorio-cidade`, com falha isolada. _(assumido)_
|
||||
- **Destino do artefato?** **Opções:** A) gitignored (`docs/research/…`) | B) commitado. **Recomendação:** A — dado sensível/defeso em repo público; só skill/scripts/changelog entram no git. _(assumido)_
|
||||
- **Teto do relatório?** **Opções:** A) resumo + seções por era com teto de itens | B) sem teto. **Recomendação:** A — leitura de bolso; detalhe na tabela de fontes/lacunas. _(assumido)_
|
||||
- **Boletim modelo tem CTA de campanha?** **Opções:** A) sem CTA (só informativo, rótulo de modelo) | B) com CTA "vote 1313". **Recomendação:** A — em ano de defeso o pipeline não entrega peça de campanha; o CTA é decisão da peça final da campanha. _(assumido)_
|
||||
- **Boletim modelo traz fontes?** **Opções:** A) **sem fontes** no boletim (as fontes vivem só no dossiê) | B) com linha de fontes. **Recomendação:** A — decisão do produto (2026-09-17): o boletim vai direto ao ponto para o eleitor; a conferência de fonte fica no dossiê, que o acompanha. _(decidido pelo humano)_
|
||||
- **Boletim modelo é 1 por cidade?** **Opções:** A) 1 página por cidade, sempre | B) emitir só quando houver conteúdo suficiente. **Recomendação:** A — entrega previsível; se faltar conteúdo, a página sai com o que há e lacunas explícitas. _(assumido)_
|
||||
- **Densidade do boletim?** **Opções:** A) mais entregas por página, frases curtas, direto ao ponto | B) poucos destaques grandes. **Recomendação:** A — direção do produto (2026-09-17): o boletim deve carregar o máximo de informação útil ao eleitor sem virar documento técnico. _(decidido pelo humano)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue #1132; skill inspiradora: `.agents/skills/relatorio-cidade/SKILL.md` e `docs/plans/relatorio-cidade-viagem.md` + `ops118-relatorio-cidade-lote-municipios-sub-agentes.md`.
|
||||
- Design UI (gate) — dossiê: `docs/plans/dossie-solla-cidade-ui-design.html` (+ `docs/plans/dossie-solla-cidade-ui-design-assets/` se houver SVG próprio).
|
||||
- Design UI (gate) — boletim modelo: `docs/plans/dossie-solla-cidade-boletim-ui-design.html` (+ `docs/plans/dossie-solla-cidade-boletim-ui-design-assets/` se houver SVG próprio).
|
||||
- Padrão a espelhar: `.opencode/commands/relatorio-cidade.md`, `.opencode/agent/relatorio-cidade.md`; build `scripts/build-city-report.mjs`, `scripts/lib/cityReport*.mjs`, `scripts/extract-city-report-snapshot.mjs`, `scripts/cityReportSnapshot.mjs`.
|
||||
- Fontes/APIs: `scripts/lib/camaraFetch.mjs`, `scripts/lib/camaraSpeeches.mjs`, `scripts/lib/portalTransparenciaEmendas.mjs`; `src/lib/municipalityCatalog.ts`, `src/lib/bahiaTerritories.ts`, `src/lib/speechFacets.ts`, `src/utilities/speech/speechListFilters.ts`, `src/collections/Speech.ts`.
|
||||
- Bio: `.opencode/skills/solla-comunicacao/referencia/perfil-e-posicoes.md`; narrativa PDF: `scripts/build-solla-ceuci-salvador-report.mjs`, `docs/plans/relatorio-cidade-viagem-a4-draft.html`.
|
||||
- Testes a espelhar: `tests/unit/opencodeCommands.unit.spec.ts`, `tests/unit/cityReportBatchSkill.unit.spec.ts`, `tests/unit/cityReport*.unit.spec.ts`; changelog: `docs/changelog/2026-09-17-c186.md`.
|
||||
- `AGENTS.md` — regras de defeso, PII mínima, artefato gitignored e "edite o dono, não gema um irmão".
|
||||
Loading…
Reference in a new issue