// Termo de Abertura — esqueleto Typst (lumo-scope)
// Gere o conteúdo a partir do bundle escopo/ e compile:
//   typst compile escopo/termo-abertura.typ escopo/termo-abertura.pdf
// Sóbrio de propósito: preto/cinza, sem cor de marca — o cliente aprova conteúdo.

#let cliente = "[CLIENTE]"
#let projeto = "[NOME DO PROJETO DE BI]"
#let versao = "v1.0"
#let data = "[AAAA-MM-DD]"
#let status = "Em aprovação" // Rascunho | Em aprovação | Aprovado

#set document(title: projeto + " — Termo de Abertura " + versao)
#set page(paper: "a4", margin: (x: 2.2cm, y: 2.4cm),
  footer: context [#set text(8pt, gray); #cliente — #projeto #versao #h(1fr) #counter(page).display("1/1", both: true)])
#set text(font: "Libertinus Serif", size: 10.5pt, lang: "pt")
#set heading(numbering: "1.")
#show heading: it => { v(0.6em); it; v(0.3em) }
#set table(stroke: 0.5pt + gray.darken(20%), inset: 6pt)

// ---------- Capa ----------
#v(4cm)
#align(center)[
  #text(22pt, weight: "bold")[#projeto]
  #v(0.5em)
  #text(14pt)[Termo de Abertura e Declaração de Escopo]
  #v(2em)
  #table(columns: 2, stroke: none, align: left,
    [*Cliente:*], [#cliente],
    [*Versão:*], [#versao — #status],
    [*Data:*], [#data],
    [*Aprovador (cliente):*], [[NOME, CARGO]],
    [*Responsável (fornecedor):*], [[ANALISTA / EMPRESA]],
  )
]
#pagebreak()
#outline(depth: 1)
#pagebreak()

= Contexto e objetivo
// A dor de negócio (fase 0) e as decisões que o projeto habilita. 2-3 parágrafos.
// Inclua 1 frase de valor esperado por decisão-chave (cite magnitude_estimada
// do KPI card quando houver — nunca preço, só a direção do custo de decidir
// tarde ou errado).

= Dashboards e público
#table(columns: (auto, auto, 1fr),
  table.header([*Dashboard*], [*Público*], [*A pergunta que responde*]),
  // uma linha por dashboards/<dash>.md
)

= Matriz de escopo
// Bus matrix: ✓ = incluído e aprovado; célula vazia = FORA de escopo (ver §8).
#table(columns: 5, align: center,
  table.header([*Processo / Cubo*], [*Calendário*], [*Loja*], [*Produto*], [*…*]),
  // uma linha por processos/<processo>.md
)

= De onde vêm os dados
// Diagrama de lineage table-level (Origem → Carga → Tabela DW → Dashboard).
// Exporte o mermaid do bundle como imagem, ou desenhe com retângulos/setas Typst.
// Abaixo, só as regras de negócio relevantes ao cliente (o STM técnico fica no bundle):
// "Vendas: apenas cupons com status FATURADO; devoluções abatem no mês da devolução."

= Métricas e fórmulas
// Um bloco por metricas/*.md — versão de negócio do KPI card:
// *Receita Líquida* — soma do valor dos itens vendidos, menos descontos e devoluções.
//   Inclui: FATURADO, ENTREGUE. Exclui: cancelados, bonificações. Dono: [PESSOA]. Atualização: diária (D-1).
// Itens [A CONFIRMAR] aparecem marcados, consolidados também em §10.

= Wireframes (dados ilustrativos)
// PREFERIDO: embuta direto o SVG que a lumo-mockup já gerou por widget
// (vl-convert, vetorial, sem redesenhar nada em Typst — ver
// lumo-mockup:references/pipeline.md §7, testado nesta base):
//   #image("wireframes/<dash>-widget-<n>.svg", width: 90%)
//   ...uma chamada por ficha aprovada, na ordem/posicao do dashboard...
// Alternativa (paridade pixel com o que o analista viu no live view; também
// testada em pipeline.md §6.1/§6.2/§7):
//   screenshot do HTML via navegador headless e #image("wireframes/<dash>.png").
// Em ambos, anotações numeradas resumidas abaixo do desenho.
// Nota fixa:
#emph[Os desenhos abaixo validam conteúdo, estrutura e hierarquia — não cores,
tipografia ou estilo visual, definidos na implementação sobre os dados reais.]

= Fora de escopo
// Integral de fora-de-escopo.md: item, motivo, custo aproximado em tiers.
// "Qualquer item não listado nas seções 2-7 está fora do escopo desta fase."

= Critérios de aceite
// Versão de negócio de aceite.md — binários e mensuráveis:
// [ ] Receita do dashboard confere com a origem (tolerância ≤ 0,5%)
// [ ] Dado disponível até 07:00 (D-1)
// [ ] Acesso: [papéis nomeados]; sem acesso: [papéis nomeados]

= Dimensionamento
// Inventário de componentes com T-shirt size + faixa por fase (rolling wave).
// SEM horas, SEM preço — conversão é etapa comercial à parte.
#table(columns: (1fr, auto, auto, auto),
  table.header([*Entrega*], [*Componentes*], [*Tier*], [*Fase*]),
)

= Premissas, riscos e pendências
// Riscos do profiling (premissas não validadas) + lista única de [A CONFIRMAR],
// cada item com dono e forma de resolução. RACI curto:
#table(columns: 4,
  table.header([*Responsável (fornecedor)*], [*Aprovador (cliente)*], [*Consultado*], [*Informado*]),
)

= Mudanças após a aprovação
Ajustes cosméticos e extensões aditivas menores são absorvidos como adendos
(versões minor deste documento, com ciência do cliente). Mudanças que alterem a
granularidade dos dados, removam ou redefinam colunas/métricas aprovadas, ou
adicionem novos processos de negócio exigem novo ciclo de aprovação, com impacto
de esforço reavaliado antes de qualquer implementação.

= Aprovação
Aprovado o presente escopo, qualquer alteração fora deste documento requer novo
ciclo de aprovação conforme a seção 11.
#v(2em)
#grid(columns: (1fr, 1fr), gutter: 2cm,
  [#line(length: 100%, stroke: 0.5pt) #v(0.3em) #cliente \ [NOME, CARGO] \ Data: \_\_\_\_\_\_\_\_ \ #text(8pt)[Declara possuir poderes para aprovar escopo e orçamento em nome da empresa.]],
  [#line(length: 100%, stroke: 0.5pt) #v(0.3em) [EMPRESA RESPONSÁVEL] \ [ANALISTA] \ Data: \_\_\_\_\_\_\_\_],
)
