Plano de implementação — 0058, a documentação começa pelo andamento¶
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: o site de documentação abre no Andamento (gerado no build) e segue a ordem Roadmap → Especificações → Arquitetura → Implementação → Guias.
Architecture: um hook do MkDocs (docs/hooks/andamento.py) lê as notas de versão de apps/web/src/versoes/, o catálogo docs/metadata/catalog.yaml e o docs/roadmap.md, e substitui marcadores HTML (<!-- andamento -->, <!-- implementacao:<elemento> -->) por Markdown gerado no evento on_page_markdown. A lógica fica em funções puras testadas com pytest; o resto é conteúdo Markdown e a navegação do mkdocs.yml.
Tech Stack: MkDocs 1.6 + Material 9.5 (hooks nativos), Python 3.12, PyYAML, markdown.extensions.toc.slugify, pytest.
Spec: specification.md — leia junto; este plano argumenta a partir dela.
Global Constraints¶
- Nenhum arquivo existente de
docs/muda de caminho (RN8) — sómkdocs.yml(nav) e conteúdo. - O build é
mkdocs build --strict; qualquer link quebrado falha. - Fonte ausente (pasta de notas, catálogo, seção "❌ Ausente" ou "Plano de entregas" do roadmap) falha o build com mensagem que nomeia a fonte (RN5).
- Ordem de versões é semântica (
0.10.0>0.9.1), não por nome de arquivo (RN2). - "Em andamento" =
typeemspecification/fixcomstatusemrascunho,aprovada,em-implementacao(RN3). - Texto do site em português do Brasil; nenhum commit/push sem pedido explícito do usuário (
CLAUDE.md). apps/api,apps/web,apps/e2enão mudam.
Review Focus¶
- Nota de versão com item em várias linhas (continuação indentada) — o item sai inteiro, numa linha só.
- Arquivo não-versão na pasta de notas (
index.ts,rascunho.md) — ignorado, sem erro. - Título de roadmap com emoji e acento (
### 1. Sinistro — processo inteiro) — a âncora gerada é a mesma do sumário do MkDocs, e o link abre a seção. - Catálogo com entrada sem
componentsou semstatus— ignorada nas contagens, semKeyError. - Página sem marcador nenhum — o hook não toca o Markdown dela.
Cada uma tem teste na Task 1.
Task 1: as funções puras do hook¶
Files: - Create: docs/hooks/andamento.py - Create: docs/hooks/test_andamento.py - Create: docs/hooks/fixtures/versoes/0.9.1.md, docs/hooks/fixtures/versoes/0.10.0.md, docs/hooks/fixtures/versoes/0.8.0.md, docs/hooks/fixtures/versoes/index.ts - Create: docs/hooks/fixtures/catalog.yaml - Create: docs/hooks/fixtures/roadmap.md - Modify: .gitignore (acrescentar .venv-docs/)
Interfaces: - Produces (usadas na Task 2): - ler_notas(pasta: Path) -> list[Nota] — Nota = (versao: tuple[int,int,int], texto_versao: str, data: str | None, itens: list[str]), em ordem decrescente de versão; FonteAusente se a pasta não existe. - ler_catalogo(arquivo: Path) -> list[dict]; FonteAusente se não existe. - ler_proximos(roadmap: Path) -> list[tuple[str, str]] — (titulo, ancora) dos ### sob ## ❌ Ausente e ## Plano de entregas…; FonteAusente se o arquivo ou uma das duas seções falta. - montar_andamento(notas, catalogo, proximos) -> str — o Markdown da página. - montar_feito(catalogo, componente: str) -> str — lista Markdown das specs concluida e fixes corrigido com aquele componente. - class FonteAusente(Exception).
- [ ] Step 1: Ambiente de teste
cd /opt/garantora
python3 -m venv .venv-docs
.venv-docs/bin/pip install -q -r requirements-docs.txt pytest
grep -qx '.venv-docs/' .gitignore || echo '.venv-docs/' >> .gitignore
scripts/publicar-preview-docs.sh já usa .venv-docs quando ela existe.
- [ ] Step 2: Fixtures
docs/hooks/fixtures/versoes/0.10.0.md:
data: 2026-10-13
- **Mensalidade por tipo.** Em *Parâmetros*, a mensalidade passa a ter
uma faixa por tipo de inquilino.
- Segundo item.
docs/hooks/fixtures/versoes/0.9.1.md: docs/hooks/fixtures/versoes/0.8.0.md: docs/hooks/fixtures/versoes/index.ts: docs/hooks/fixtures/catalog.yaml: - id: SPEC-0001
type: specification
title: "Concluída de API"
path: specifications/0001-a/specification.md
status: concluida
components: [api, web]
- id: SPEC-0002
type: specification
title: "Em implementação"
path: specifications/0002-b/specification.md
status: em-implementacao
components: [web]
- id: FIX-0001
type: fix
title: "Fix corrigido"
path: fixes/0001-c.md
status: corrigido
components: [api]
- id: FIX-0002
type: fix
title: "Fix em rascunho"
path: fixes/0002-d.md
status: rascunho
- id: ADR-0001
type: decision
title: "Uma ADR"
path: decisions/ADR-0001.md
status: aceita
- id: SPEC-0003
type: specification
title: "Sem status"
path: specifications/0003-e/specification.md
docs/hooks/fixtures/roadmap.md: # Roadmap
## ✅ Implementado
### Não entra
## ❌ Ausente
### 1. Sinistro — processo inteiro
texto
### 2. Emissão de boleto
## Plano de entregas — validar a jornada por incrementos
### Trilha da jornada (sequencial)
## Dívida técnica conhecida
- [ ] Step 3: Escrever os testes que falham
docs/hooks/test_andamento.py:
from pathlib import Path
import pytest
from andamento import (
FonteAusente,
ler_catalogo,
ler_notas,
ler_proximos,
montar_andamento,
montar_feito,
)
F = Path(__file__).parent / "fixtures"
def test_notas_em_ordem_semantica_e_ignora_nao_versao():
notas = ler_notas(F / "versoes")
assert [n.texto_versao for n in notas] == ["0.10.0", "0.9.1", "0.8.0"]
def test_nota_com_data_e_item_de_varias_linhas():
nota = ler_notas(F / "versoes")[0]
assert nota.data == "2026-10-13"
assert nota.itens[0] == (
"**Mensalidade por tipo.** Em *Parâmetros*, a mensalidade passa a ter "
"uma faixa por tipo de inquilino."
)
assert nota.itens[1] == "Segundo item."
def test_nota_sem_data_nao_inventa():
assert ler_notas(F / "versoes")[2].data is None
def test_proximos_sao_os_h3_das_duas_secoes_com_ancora_do_mkdocs():
proximos = ler_proximos(F / "roadmap.md")
assert proximos == [
("1. Sinistro — processo inteiro", "1-sinistro-processo-inteiro"),
("2. Emissão de boleto", "2-emissao-de-boleto"),
("Trilha da jornada (sequencial)", "trilha-da-jornada-sequencial"),
]
@pytest.mark.parametrize(
"fonte",
[
lambda: ler_notas(F / "nao-existe"),
lambda: ler_catalogo(F / "nao-existe.yaml"),
lambda: ler_proximos(F / "nao-existe.md"),
],
)
def test_fonte_ausente_falha_nomeando_o_caminho(fonte):
with pytest.raises(FonteAusente, match="nao-existe"):
fonte()
def test_roadmap_sem_secao_falha(tmp_path):
r = tmp_path / "roadmap.md"
r.write_text("# Roadmap\n\n## ❌ Ausente\n\n### X\n", encoding="utf-8")
with pytest.raises(FonteAusente, match="Plano de entregas"):
ler_proximos(r)
def test_andamento_mostra_versao_no_ar_abertos_proximos_e_numeros():
md = montar_andamento(
ler_notas(F / "versoes"), ler_catalogo(F / "catalog.yaml"), ler_proximos(F / "roadmap.md")
)
assert "**0.10.0** — 2026-10-13" in md
assert "[SPEC-0002 — Em implementação](specifications/0002-b/specification.md)" in md
assert "[FIX-0002 — Fix em rascunho](fixes/0002-d.md)" in md
assert "SPEC-0001" not in md.split("## Números")[0].split("## Em andamento")[1]
assert "[1. Sinistro — processo inteiro](roadmap.md#1-sinistro-processo-inteiro)" in md
assert "| Specs concluídas | 1 |" in md
assert "| Fixes corrigidos | 1 |" in md
assert "| Versões publicadas | 3 |" in md
def test_andamento_sem_trabalho_aberto():
catalogo = [e for e in ler_catalogo(F / "catalog.yaml") if e.get("status") not in
{"rascunho", "aprovada", "em-implementacao"}]
md = montar_andamento(ler_notas(F / "versoes"), catalogo, ler_proximos(F / "roadmap.md"))
assert "Nenhum trabalho aberto." in md
def test_feito_por_componente_ignora_entrada_sem_components():
md = montar_feito(ler_catalogo(F / "catalog.yaml"), "api")
assert "[SPEC-0001 — Concluída de API](specifications/0001-a/specification.md)" in md
assert "[FIX-0001 — Fix corrigido](fixes/0001-c.md)" in md
assert "SPEC-0002" not in md
- [ ] Step 4: Rodar e ver falhar
Run: cd docs/hooks && ../../.venv-docs/bin/pytest -q Expected: FAIL — ModuleNotFoundError: No module named 'andamento'.
- [ ] Step 5: Implementar
docs/hooks/andamento.py:
"""Spec 0058 — gera o Andamento e o "feito" da Implementação no build do MkDocs.
Funções puras (ler e montar) testadas em ``test_andamento.py``; o evento do MkDocs só troca
marcadores no Markdown da página. Fonte ausente falha o build (RN5): uma página de
andamento vazia passaria por verdadeira.
"""
from __future__ import annotations
import re
from pathlib import Path
from typing import NamedTuple
import yaml
from markdown.extensions.toc import slugify
ABERTOS = {"rascunho", "aprovada", "em-implementacao"}
_VERSAO = re.compile(r"^(\d+)\.(\d+)\.(\d+)\.md$")
class FonteAusente(Exception):
"""Uma das fontes do Andamento não existe — o build tem de parar."""
class Nota(NamedTuple):
versao: tuple[int, int, int]
texto_versao: str
data: str | None
itens: list[str]
def ler_notas(pasta: Path) -> list[Nota]:
if not pasta.is_dir():
raise FonteAusente(f"pasta de notas de versão não encontrada: {pasta}")
notas = []
for arq in pasta.iterdir():
m = _VERSAO.match(arq.name)
if not m:
continue
data, itens = None, []
for linha in arq.read_text(encoding="utf-8").splitlines():
if linha.startswith("data:"):
data = linha.split(":", 1)[1].strip() or None
elif linha.startswith("- "):
itens.append(linha[2:].strip())
elif linha.startswith(" ") and itens and linha.strip():
itens[-1] = f"{itens[-1]} {linha.strip()}"
elif not linha.strip() or linha.startswith("#"):
continue
versao = tuple(int(x) for x in m.groups())
notas.append(Nota(versao, arq.name[:-3], data, itens))
return sorted(notas, key=lambda n: n.versao, reverse=True)
def ler_catalogo(arquivo: Path) -> list[dict]:
if not arquivo.is_file():
raise FonteAusente(f"catálogo não encontrado: {arquivo}")
return yaml.safe_load(arquivo.read_text(encoding="utf-8")) or []
def ler_proximos(roadmap: Path) -> list[tuple[str, str]]:
if not roadmap.is_file():
raise FonteAusente(f"roadmap não encontrado: {roadmap}")
secoes = {"❌ Ausente": False, "Plano de entregas": False}
atual, itens = None, []
for linha in roadmap.read_text(encoding="utf-8").splitlines():
if linha.startswith("## "):
titulo = linha[3:].strip()
atual = next((s for s in secoes if titulo.startswith(s)), None)
if atual:
secoes[atual] = True
elif linha.startswith("### ") and atual:
titulo = linha[4:].strip()
itens.append((titulo, slugify(titulo, "-")))
faltando = [s for s, achou in secoes.items() if not achou]
if faltando:
raise FonteAusente(f"seção do roadmap não encontrada: {', '.join(faltando)} ({roadmap})")
return itens
def _link(e: dict) -> str:
return f"[{e['id']} — {e['title']}]({e['path']})"
def montar_andamento(notas: list[Nota], catalogo: list[dict], proximos: list[tuple[str, str]]) -> str:
partes = []
if notas:
n = notas[0]
partes.append(f"## Versão no ar\n\n**{n.texto_versao}** — {n.data or 'sem data'}\n")
partes.append("## O que entrou nas últimas versões\n")
for n in notas[:3]:
partes.append(f"### {n.texto_versao} — {n.data or 'sem data'}\n")
partes.extend(f"- {i}" for i in n.itens)
partes.append("")
if len(notas) > 3:
partes.append('??? note "Histórico completo de versões"')
for n in notas[3:]:
partes.append(f" **{n.texto_versao}** — {n.data or 'sem data'}\n")
partes.extend(f" - {i}" for i in n.itens)
partes.append("")
abertos = [e for e in catalogo
if e.get("type") in {"specification", "fix"} and e.get("status") in ABERTOS]
partes.append("## Em andamento\n")
partes.extend(f"- {_link(e)} — `{e['status']}`" for e in abertos)
if not abertos:
partes.append("Nenhum trabalho aberto.")
partes.append("\n## Próximos passos\n")
partes.extend(f"- [{t}](roadmap.md#{a})" for t, a in proximos)
specs = sum(1 for e in catalogo if e.get("type") == "specification" and e.get("status") == "concluida")
fixes = sum(1 for e in catalogo if e.get("type") == "fix" and e.get("status") == "corrigido")
partes.append(
"\n## Números do projeto\n\n| | |\n|---|---|\n"
f"| Specs concluídas | {specs} |\n| Fixes corrigidos | {fixes} |\n"
f"| Versões publicadas | {len(notas)} |\n"
)
return "\n".join(partes)
def montar_feito(catalogo: list[dict], componente: str) -> str:
feitos = [e for e in catalogo
if componente in (e.get("components") or [])
and ((e.get("type") == "specification" and e.get("status") == "concluida")
or (e.get("type") == "fix" and e.get("status") == "corrigido"))]
return "\n".join(f"- {_link(e)}" for e in feitos) or "Nada concluído ainda."
- [ ] Step 6: Rodar e ver passar
Run: cd docs/hooks && ../../.venv-docs/bin/pytest -q Expected: todos os testes PASS.
- [ ] Step 7: Red-green de uma regra
Troque reverse=True por reverse=False em ler_notas, rode o pytest (FAIL em test_notas_em_ordem_semantica…), restaure, rode de novo (PASS).
- [ ] Step 8: Commit (só com pedido do usuário — ver Global Constraints)
Task 2: o hook no MkDocs e a página inicial¶
Files: - Modify: docs/hooks/andamento.py (acrescentar on_page_markdown) - Modify: mkdocs.yml (chaves hooks: e exclude_docs:) - Modify: docs/index.md (vira o Andamento) - Create: docs/guias.md (a orientação que estava em index.md) - Test: docs/hooks/test_andamento.py
Interfaces: - Consumes: ler_notas, ler_catalogo, ler_proximos, montar_andamento, montar_feito (Task 1). - Produces: on_page_markdown(markdown: str, page, config, files) -> str; marcadores <!-- andamento --> e <!-- implementacao:<componente> --> (usados na Task 3).
- [ ] Step 1: Teste que falha
Acrescentar a docs/hooks/test_andamento.py:
from andamento import aplicar_marcadores
def test_marcadores_sao_trocados_e_pagina_sem_marcador_fica_igual():
raiz = F
texto = "# Início\n\n<!-- andamento -->\n\n<!-- implementacao:api -->\n"
saida = aplicar_marcadores(texto, versoes=F / "versoes", catalogo=F / "catalog.yaml",
roadmap=F / "roadmap.md")
assert "<!--" not in saida
assert "**0.10.0**" in saida and "SPEC-0001" in saida
assert aplicar_marcadores("# Sem marcador\n", versoes=raiz / "x", catalogo=raiz / "x",
roadmap=raiz / "x") == "# Sem marcador\n"
Run: cd docs/hooks && ../../.venv-docs/bin/pytest -q → FAIL (ImportError: aplicar_marcadores).
- [ ] Step 2: Implementar
Acrescentar ao fim de docs/hooks/andamento.py:
_IMPL = re.compile(r"<!-- implementacao:([a-z0-9-]+) -->")
def aplicar_marcadores(markdown: str, *, versoes: Path, catalogo: Path, roadmap: Path) -> str:
"""Troca os marcadores; página sem marcador não lê fonte nenhuma e volta igual."""
if "<!-- andamento -->" not in markdown and not _IMPL.search(markdown):
return markdown
cat = ler_catalogo(catalogo)
if "<!-- andamento -->" in markdown:
markdown = markdown.replace(
"<!-- andamento -->", montar_andamento(ler_notas(versoes), cat, ler_proximos(roadmap))
)
return _IMPL.sub(lambda m: montar_feito(cat, m.group(1)), markdown)
def on_page_markdown(markdown, page, config, files): # evento do MkDocs
raiz = Path(config["config_file_path"]).parent
return aplicar_marcadores(
markdown,
versoes=raiz / "apps" / "web" / "src" / "versoes",
catalogo=Path(config["docs_dir"]) / "metadata" / "catalog.yaml",
roadmap=Path(config["docs_dir"]) / "roadmap.md",
)
Run o pytest → PASS.
- [ ] Step 3: Registrar no MkDocs
Em mkdocs.yml, depois de site_dir: site:
- [ ] Step 4: A orientação vai para
docs/guias.md
Criar docs/guias.md com front matter e o conteúdo de docs/index.md a partir de ## Onde entrar até o fim, sob o título # Como navegar:
---
id: GUIAS
type: operation
title: "Como navegar"
status: atual
---
# Como navegar
<conteúdo de docs/index.md a partir de "## Onde entrar", copiado sem alteração>
docs/ — todos continuam válidos, porque guias.md também está na raiz de docs/. - [ ] Step 5:
docs/index.mdvira o Andamento
Substituir o corpo de docs/index.md (mantendo o front matter, se houver) por:
# Andamento
Onde o Garantora está agora: a versão no ar, o que entrou nas últimas versões, o que está
sendo feito e o que vem a seguir. Esta página é **gerada no build** a partir das notas de
versão, do catálogo e do roadmap — não se edita à mão.
## Versão no ar
**0.14.1** — 2026-10-15
## O que entrou nas últimas versões
### 0.14.1 — 2026-10-15
- **Novidades por inteiro.** Os itens das notas de versão que ocupavam mais de uma linha apareciam cortados neste painel, no meio da frase. Agora aparecem completos, inclusive os das versões anteriores.
### 0.14.0 — 2026-10-13
- **Mensalidade por tipo de inquilino.** Em *Parâmetros*, os blocos *Taxas* e *Taxas — Analistas* viraram um só, **Mensalidade e atraso**. A mensalidade passa a ter uma faixa para **pessoa física** e outra para **pessoa jurídica**, cada uma com a mensalidade sugerida, a mínima e a máxima. A multa e os juros por atraso ficam no mesmo bloco.
- **A mensalidade se escolhe na aprovação.** No parecer da análise de crédito, ao lado da taxa de adesão, o campo **Mensalidade (%)** já vem com a sugerida do tipo do inquilino principal. Ao mudar o percentual, o valor em reais por mês aparece na hora, antes de salvar. Um percentual fora da faixa não é aceito.
- **Dá para rever antes de emitir a garantia.** Com a análise aprovada e a garantia ainda não emitida, quem pode aprovar ajusta a mensalidade em **Alterar**. Depois da emissão ela vale para todas as parcelas e não muda mais: para outro valor, a garantia precisa ser cancelada e uma nova emitida.
- A mensalidade escolhida aparece no resumo financeiro da análise, inclusive para a imobiliária, e na confirmação da emissão.
### 0.13.0 — 2026-10-12
- **Taxa de adesão.** Em *Parâmetros*, o antigo *Pagamento inicial* passa a se chamar **Taxa de adesão** e explica o que ela é: cobrada uma vez do inquilino, definida pela imobiliária e devolvida a ela, descontados os impostos, como comissão. Ali se define a regra padrão, se a análise pode editar o valor, o percentual de impostos e a comissão padrão.
- Cada imobiliária pode ter **regra própria**: sem taxa, valor fixo ou percentual, e um percentual de comissão só dela. Isso se configura no cadastro da imobiliária, e ela vê a própria regra em *Minha Imobiliária*.
- Quando a regra permite, quem preenche a análise de crédito informa o valor combinado no novo bloco **Taxa de adesão**, logo abaixo de *Locação e renda*. O bloco já vem com o valor da regra, e **Usar o valor da regra** desfaz a alteração. A garantia sai com o valor informado, sem precisar mexer no parecer.
- **Comissão no acerto mensal.** A comissão de cada adesão paga entra no acerto da imobiliária no mês do pagamento e abate o que ela deve. Quando é a garantidora que deve, o acerto mostra o valor a pagar, e o pagamento é registrado em **Registrar pagamento de comissão**. A imobiliária que não recolhe mensalidade também passa a ter acerto, só com a comissão.
??? note "Histórico completo de versões"
**0.12.0** — 2026-10-10
- **Acerto mensal com cada imobiliária.** Em *Cobranças*, a nova aba **Repasses** mostra, por imobiliária e por competência, quanto ela deve, quanto já chegou em transferências e quanto falta. Do mesmo lugar se abre o acerto de cada parceira.
- A imobiliária informa pelo próprio produto quais inquilinos pagaram a mensalidade no mês. Ela faz isso em *Minha Imobiliária → Repasses*, e a garantidora pode informar no lugar dela. **Marcar restantes como pagas** resolve o caso comum num toque, e basta corrigir as exceções: quem pagou atrasado (com a multa sugerida) e quem não pagou.
- Cada transferência recebida da imobiliária é registrada no acerto, inteira ou em partes.
- **Fechar a competência** dá baixa nas mensalidades pagas e passa as não pagas para atraso do inquilino. Elas deixam de ficar *Aguardando a imobiliária*. Um mês fechado só muda se alguém o reabrir, informando o motivo, e a reabertura fica registrada.
- A nota fiscal da imobiliária pode ser anexada ao acerto fechado a qualquer momento. A lista mostra quais acertos ainda estão sem nota.
**0.11.2** — 2026-10-09
- O e-mail não diferencia mais maiúscula de minúscula. Quem se cadastrou com alguma letra maiúscula agora entra e recupera a senha digitando o e-mail como preferir, e o link de recuperação chega.
- Um e-mail já cadastrado não pode mais ser usado de novo só trocando maiúsculas por minúsculas: o sistema avisa que ele já está em uso.
**0.11.1** — 2026-09-28
- Os campos que escolhem uma imobiliária — no cadastro de inquilino, no de imóvel, no filtro da lista de imóveis e na análise de crédito — agora alcançam **todas** as parceiras. Antes, com muitas imobiliárias cadastradas, as mais antigas não apareciam nem digitando o nome. Digitar busca em toda a base, e rolar a lista até o fim traz as próximas.
- O mesmo vale para escolher o inquilino, o imóvel e os demais participantes de uma análise de crédito: a lista continua carregando ao rolar, até mostrar todo mundo.
- A busca de imobiliárias acha também pelo **nome fantasia**, e a de imobiliárias e inquilinos **não diferencia acento**: "joao" encontra "João", e "imobiliaria" encontra "Imobiliária".
**0.11.0** — 2026-09-24
- Cada cobrança agora diz **de que ela é feita** — adesão, fiança, as duas juntas ou avulsa — e **por onde o dinheiro entra**: boleto da garantidora, PIX da garantidora ou PIX da imobiliária. A entrada que junta adesão e primeira mensalidade mostra as duas partes discriminadas, em vez de um valor só.
- A tela de Cobranças fecha o mês sozinha: um resumo por tipo e canal acima da lista, com o previsto, o recebido, o que falta receber, o que está com a imobiliária para repassar e o que está em atraso. Os números conversam entre si e com a lista logo abaixo.
- A competência vira o assunto da tela, e os atrasados ganham aba própria — a fila não tem mês, então uma parcela de março continua à vista em setembro. O menu mostra quantas são.
- Dá para exportar a competência em planilha, com o resumo e a lista nas duas abas do arquivo, respeitando os filtros que estiverem aplicados.
- A garantidora pode configurar **juros de mora e carência** em Parâmetros. Deixando os campos em branco, ela simplesmente não cobra aquela parcela do encargo — e a tela diz isso, em vez de calcular pela metade.
- Registrar um pagamento deixou de ser um campo de valor: o painel abre a conta na data em que o dinheiro entrou, permite distribuir entre adesão, fiança, avulsa e multa, aceita abonar o encargo com motivo registrado, e guarda o comprovante junto da cobrança — que passa a poder ser reaberto direto da linha.
- Lançar o pagamento de ontem produz o encargo de ontem, não o de hoje.
- Quem cobra é a imobiliária parceira? Isso passa a ser um campo da parceria, e é ele que decide o canal das mensalidades daquela carteira.
- Novos filtros na lista: tipo, canal e situação. *Aguardando a imobiliária* aparece com tom próprio — é espera por um repasse, não inadimplência do inquilino.
**0.10.0** — 2026-09-20
- A Ajuda virou uma página só, na ordem em que se usa o produto: configurar a garantidora, trazer as imobiliárias parceiras e operar as análises. Todos os tutoriais ficam à vista, sem abrir assunto por assunto.
- Dá para procurar pelo que se quer fazer — "API Full", "corretor", "documentos" —, e cada tutorial diz para quem é, se para a garantidora ou para a imobiliária parceira.
- Na página do tutorial, os capítulos ficam ao lado do vídeo e acompanham o que está tocando: clicar num deles pula para o trecho sem perder o vídeo de vista.
- O botão que leva à tela ensinada passa a dizer o nome dela — "Ir para Imobiliárias", por exemplo — e agora também aparece com rótulo no celular.
- Os tutoriais gravados no celular deixam de aparecer espremidos: eles tocam em pé, no tamanho em que dá para ler a tela.
**0.9.1** — 2026-09-17
- A Ajuda ganhou um tutorial em vídeo sobre as consultas de crédito: como conectar a conta da API Full, escolher quais consultas rodam em cada análise e ver quanto cada uma custa antes de salvar.
- Os tutoriais passam a ter um assunto novo, "Gestão da garantidora", para as telas de administração — parâmetros, acesso e integrações.
**0.9.0** — 2026-09-17
- A garantidora escolhe quais consultas de crédito rodam em cada análise, e vê o preço de cada uma antes de salvar.
- Em Análise de Créditos, no menu, fica o passo a passo para conectar a conta da API Full: criar a conta, pôr saldo, colar o token e testá-lo.
- Na análise, cada consulta vira um cartão com o resultado e o custo. Dá para reexecutar uma consulta ou pedir uma avulsa, sempre confirmando o valor antes.
- O mesmo inquilino consultado de novo em pouco tempo reaproveita o resultado, sem custo — a janela é configurável.
- Consultas de Crédito mostra o gasto do mês, o previsto, o gasto por consulta e as diferenças entre o que foi cobrado e o que estava previsto.
- O extrato da conta é conferido todos os dias: cada cobrança é casada com a consulta que a gerou, e o preço passa a valer o último valor cobrado quando ninguém definiu um preço à mão.
- O Painel ganhou o gasto do mês com consultas, comparado ao mesmo período do mês anterior.
- A tela do inquilino lista as consultas dele, com a análise em que cada uma rodou.
- Seis consultas disponíveis: Boa Vista, Dados Financeiros, Quod, CADIN, Protesto Nacional e SCR Premium.
**0.8.1** — 2026-09-07
- Inquilino cadastrado direto no formulário de análise agora fica corretamente vinculado à imobiliária que fez a indicação
- O painel de Consulta de crédito não usa mais a cor de "aprovado" quando não há restrição — passou para um tom neutro, já que ele é só informativo
**0.8.0** — 2026-09-06
- Agora dá para ver e administrar quem tem acesso por cada imobiliária parceira: convidar, reenviar convite, cancelar e remover acesso — direto na página da imobiliária
- A imobiliária ganhou um responsável, que pode cuidar da própria equipe pela nova página "Minha Imobiliária", sem depender da garantidora para cada troca de funcionário
**0.7.0** — 2026-09-05
- Ao enviar uma solicitação para análise, o sistema consulta sozinho o bureau de crédito do inquilino e mostra o resultado na própria tela — score, pendências financeiras, protestos, cheques sem fundo e renda presumida
- A consulta roda em segundo plano: a tela abre na hora, avisa que está consultando e se atualiza sozinha quando o resultado chega
- O mesmo painel aparece no cadastro do inquilino, e um botão permite refazer a consulta quando o dado estiver desatualizado
- Uma linha no painel explica o que cada número quer dizer, para quem não convive com indicador de crédito todo dia
- A consulta é opcional e se liga em Parâmetros, por garantidora; só a garantidora vê o resultado, nunca a imobiliária
- No celular, o aviso de "salvo" não bloqueia mais os botões do menu do rodapé
**0.6.0** — 2026-09-03
- Agora dá para remover imobiliárias, inquilinos, imóveis, análises de crédito, garantias e cobranças — e restaurar em até 60 dias, se for engano
- Diálogo de confirmação mais enxuto no celular, sem ocupar a tela inteira quando não precisa
**0.5.0** — 2026-09-01
- Nova tela **Cobranças**, no menu, com todas as cobranças de todas as garantias num só lugar — filtre por status ou por competência, sem precisar abrir garantia por garantia.
- As cobranças mensais passam a ser geradas sozinhas: ao registrar o contrato assinado, o calendário completo até o fim da vigência já nasce pronto, sem precisar lançar mês a mês.
- Na emissão da garantia, escolha o dia do mês em que a cobrança mensal vence.
- Registre o pagamento ou marque uma cobrança como em atraso direto na tela nova, sem abrir a garantia — o valor sugerido já soma a multa quando a cobrança está vencida.
- Ao encerrar uma garantia, as cobranças futuras do calendário automático são canceladas sozinhas; uma cobrança lançada à mão continua de pé.
**0.4.5** — 2026-08-30
**0.4.4** — 2026-08-30
- Análise de crédito passa a exigir a renda comprovada do inquilino principal, com aviso no próprio campo
**0.4.3** — 2026-08-30
**0.4.2** — 2026-08-30
- Quando um formulário é recusado, a mensagem agora aparece junto ao campo com o problema — não mais só um aviso genérico no topo da tela sem dizer o quê. Vale para login, cadastro de conta, recuperação de senha, times, perfis de acesso, parâmetros da garantidora e a análise de crédito.
**0.4.1** — 2026-08-29
**0.4.0** — 2026-08-26
- CPF, CNPJ e telefone agora se formatam sozinhos enquanto você digita, em todas as telas onde aparecem: análise de crédito, inquilino, imóvel, imobiliária e no cadastro da sua garantidora. Você digita só os números e a pontuação aparece na medida certa — inclusive no documento do proprietário, que aceita CPF ou CNPJ no mesmo campo e se ajusta pela quantidade de dígitos.
- O dígito verificador passou a ser conferido. Um CPF ou CNPJ que não existe é recusado na hora em que você termina de digitar, e não depois de preencher o resto da ficha. Documento pela metade continua em silêncio: enquanto você está digitando, a tela não interrompe.
- A busca por documento encontra do jeito que você digitar. Antes, procurar por `139.778.672-88` não achava quem estava gravado sem pontuação — e o mesmo inquilino acabava cadastrado duas vezes, com o histórico partido em dois. Agora tanto faz digitar com pontos e traço ou só os números.
- O erro de formulário passou a aparecer **no campo**, com uma frase que diz o que fazer. Antes o campo ficava vermelho exibindo o texto de ajuda — "Somente ligações" num telefone inválido —, o que informava tudo menos o problema.
- Quando o sistema recusa o que você enviou, cada mensagem vai para o campo a que ela pertence, e a tela rola até o primeiro deles. No celular, ela leva em conta o teclado que abre por cima: o campo e a explicação ficam visíveis juntos.
- Colar um telefone com o código do país deixou de entrar pela metade. Antes o campo aceitava os primeiros dígitos e descartava o resto em silêncio, guardando um número plausível e errado; agora ele recusa a colagem e diz por quê.
- Documento e telefone aparecem formatados nas listas e nas telas de detalhe, mesmo estando gravados só com números.
**0.3.0** — 2026-08-24
- A Ajuda agora é organizada por assunto. No computador, uma barra ao lado da tela abre e fecha cada assunto sem tirar você do lugar; no celular, os assuntos ficam um sob o outro e os vídeos aparecem dentro do que você abrir.
- Um mesmo tutorial pode ter duas gravações: uma feita no computador e outra no celular. O produto toca a da interface em que você está — e, quando existe a outra, oferece a troca ali mesmo, sem recomeçar.
- Quando um tutorial só existe numa das interfaces, a tela diz isso em vez de deixar você concluir que gravaram na tela errada.
- No celular, a tela da Ajuda passou a mostrar todos os assuntos de uma vez. Antes eles ficavam numa faixa que rolava para o lado, e metade do material ficava escondida atrás de um gesto que nada anunciava.
- No celular, a Ajuda parou de rolar junto com o menu: ela fica fixa no fim da gaveta, sempre no mesmo lugar, como a linha de novidades.
**0.2.1** — 2026-08-23
**0.2.0** — 2026-08-23
- As novidades agora têm tela própria, com endereço. Dá para mandar o link de uma versão específica a um colega, abrir numa aba ao lado da tela que mudou, e voltar pelo histórico do navegador — o que antes só existia dentro de uma caixinha que sumia ao clicar fora.
- O ícone passa a dizer **quantas** publicações você ainda não leu, e o número cai de uma em uma conforme você lê. Ser interrompido no meio deixou de custar o rastro: o que ficou por ler continua por ler, mesmo dias depois.
- Cada publicação tem seu próprio estado de lida, então você pode ler fora de ordem — abrir a mais nova por um link não marca as anteriores como vistas.
- Para quem voltou de muito tempo fora e não quer ler o histórico inteiro, há um "marcar todas como lidas" na tela. Ele é um botão que você aperta de propósito, e não o efeito colateral de ter aberto a tela por engano.
**0.1.0** — 2026-08-23
- O produto agora tem versão, e ela aparece: no menu da sua conta, no desktop, e numa linha própria da gaveta, no celular. É o número a dar quando alguém do suporte perguntar "qual versão você está usando?".
- Este painel. A cada publicação nova, o ícone da barra traz uma marca, e aqui fica escrito o que entrou — na sua língua, não em nome de commit. Ler é opcional e nunca interrompe o que você está fazendo.
- O que você já leu fica registrado na sua conta, e não no navegador. Leu no computador do escritório, não vê o aviso de novo ao abrir o celular; e limpar o navegador não o ressuscita.
## Em andamento
- [PRODUCT-BUSINESS-RULES — Regras de negócio centrais](product/business-rules.md) — `em-implementacao`
- [PRODUCT-BUSINESS-FLOW — Fluxo de negócio — da análise ao repasse](product/fluxo-de-negocio.md) — `em-implementacao`
- [PRODUCT-VISION — Visão de produto](product/vision.md) — `em-implementacao`
## Próximos passos
- [1. Sinistro — processo inteiro](roadmap.md#1-sinistro-processo-inteiro)
- [2. Emissão de boleto](roadmap.md#2-emissao-de-boleto)
- [3. Assinatura eletrônica — Autentique + biometria facial](roadmap.md#3-assinatura-eletronica-autentique-biometria-facial)
- [Trilha da jornada (sequencial)](roadmap.md#trilha-da-jornada-sequencial)
- [Trilha de base (habilitadores — antes ou em paralelo)](roadmap.md#trilha-de-base-habilitadores-antes-ou-em-paralelo)
## Números do projeto
| | |
|---|---|
| Specs concluídas | 58 |
| Fixes corrigidos | 24 |
| Versões publicadas | 25 |
- [ ] Step 6: Build local
Run: .venv-docs/bin/mkdocs build --strict Expected: Documentation built; site/index.html contém "Versão no ar" e o número da nota mais alta de apps/web/src/versoes/.
- [ ] Step 7: Commit (com pedido do usuário)
git add docs/hooks docs/index.md docs/guias.md mkdocs.yml
git commit -m "docs(0058): o Andamento é a página inicial, gerado no build"
Task 3: Implementação, roadmap e navegação¶
Files: - Create: docs/implementacao.md - Modify: docs/roadmap.md (a seção "Dívida técnica conhecida" sai; entra o ponteiro) - Modify: mkdocs.yml (nav: com as seis abas) - Modify: docs/metadata/catalog.yaml (entrada IMPLEMENTACAO e GUIAS, se o docs_lint.py exigir)
Interfaces: - Consumes: marcador <!-- implementacao:<componente> --> (Task 2); componentes do catálogo web, api, infra, e2e.
- [ ] Step 1:
docs/implementacao.md
---
id: IMPLEMENTACAO
type: architecture
title: "Implementação — o que foi feito e o que falta"
status: atual
---
# Implementação
O que a [arquitetura](architecture/index.md) define, o que já foi construído e o que falta,
elemento por elemento. O **feito** de Web, API, Infra e Testes é gerado no build a partir do
catálogo; o **falta** e a **dívida técnica** são escritos à mão — são decisão, não dado.
## Web — `apps/web`
### Feito
- [SPEC-0001 — Recuperação de senha por e-mail](specifications/0001-recuperacao-de-senha/specification.md)
- [SPEC-0002 — Onboarding: usuário conectado, cancelamento e logo](specifications/0002-onboarding-e-logo/specification.md)
- [SPEC-0003 — Análise completa: taxa setup pelo analista, cláusula obrigatória e corresponsável](specifications/0003-analise-completa/specification.md)
- [SPEC-0004 — Implementação mobile (PWA responsivo) conforme o Figma](specifications/0004-implementacao-mobile/specification.md)
- [SPEC-0005 — Aviso de atualização do PWA (banner com botão "Atualizar")](specifications/0005-pwa-prompt-de-atualizacao/specification.md)
- [SPEC-0006 — Pacote Locatício como base de cálculo + limpeza das configurações padrão](specifications/0006-pacote-locaticio-e-limpeza-de-settings/specification.md)
- [SPEC-0007 — Análise de Crédito: rename completo (Proposal → CreditAnalysis) + visão mobile](specifications/0007-analise-de-credito-linguagem-e-mobile/specification.md)
- [SPEC-0008 — Documentos obrigatórios da Análise de Crédito](specifications/0008-documentos-obrigatorios-analise-credito/specification.md)
- [SPEC-0009 — Remoção do i18n](specifications/0009-remocao-do-i18n/specification.md)
- [SPEC-0010 — Parametrização de documentos por área: botões e seleção do tipo](specifications/0010-parametrizacao-documentos-por-area/specification.md)
- [SPEC-0011 — Gaveta de navegação do mobile conforme o design system 1.5.0](specifications/0011-gaveta-de-navegacao-mobile/specification.md)
- [SPEC-0012 — Iconografia Phosphor, conforme o design system 2.3.0](specifications/0012-iconografia-phosphor/specification.md)
- [SPEC-0013 — Inquilinos e Imóveis conforme o design system](specifications/0013-inquilinos-imoveis-design-system/specification.md)
- [SPEC-0014 — MUI 9 e design system 2.10.0](specifications/0014-atualizacao-mui-e-design-system/specification.md)
- [SPEC-0015 — Telas de Análise de Crédito no design system](specifications/0015-telas-de-analise-de-credito/specification.md)
- [SPEC-0016 — Topo e espaçamento no mobile: listas e formulários](specifications/0016-layout-mobile-listas-forms/specification.md)
- [SPEC-0017 — Internalizar o design system e aposentar o pacote](specifications/0017-internalizar-design-system/specification.md)
- [SPEC-0018 — Respiro do label dos campos de formulário](specifications/0018-respiro-do-label-dos-campos/specification.md)
- [SPEC-0019 — Contraste dos neutros e adoção da paleta de marca](specifications/0019-contraste-e-adocao-da-paleta/specification.md)
- [SPEC-0020 — Padronizar o topo de página](specifications/0020-padronizar-topo-de-pagina/specification.md)
- [SPEC-0021 — Borda do topo e tom das linhas, iguais nos dois viewports](specifications/0021-linhas-e-borda-do-header/specification.md)
- [SPEC-0022 — Paginação no mobile: Inquilinos, Imóveis e Análise de Crédito](specifications/0022-paginacao-compacta-no-mobile/specification.md)
- [SPEC-0023 — Padronizar os filtros das listas](specifications/0023-padronizar-filtros-das-listas/specification.md)
- [SPEC-0024 — Ações do formulário no topo](specifications/0024-acoes-do-formulario-no-topo/specification.md)
- [SPEC-0025 — Organização da visualização da análise de crédito](specifications/0025-visualizacao-da-analise-de-credito/specification.md)
- [SPEC-0027 — Contrato vira Garantia](specifications/0027-contrato-vira-garantia/specification.md)
- [SPEC-0028 — Ambiente de produção (app.garantora.com.br na box srv01)](specifications/0028-ambiente-de-producao/specification.md)
- [SPEC-0030 — Skill `ship`: deploy do main em produção](specifications/0030-skill-ship-deploy/specification.md)
- [SPEC-0031 — Convite de garantidora por link](specifications/0031-convite-de-garantidora-por-link/specification.md)
- [SPEC-0032 — Templates de e-mail no design system](specifications/0032-templates-de-email-no-design-system/specification.md)
- [SPEC-0033 — Interface do SaaS admin no design system](specifications/0033-saas-admin-no-design-system/specification.md)
- [SPEC-0034 — Isolamento de tenant e de imobiliária, e login sem credencial pré-preenchida](specifications/0034-isolamento-de-tenant-e-login/specification.md)
- [SPEC-0035 — Autorização: fechar os portões, sanear as permissões, e o menu obedecer a elas](specifications/0035-menu-por-permissao/specification.md)
- [SPEC-0036 — O passo de analisar, e o caminho de volta para a imobiliária](specifications/0036-retorno-da-analise-a-imobiliaria/specification.md)
- [SPEC-0037 — Pendências tipificadas na análise de crédito, e um histórico que diz o que mudou](specifications/0037-tipos-de-pendencia-na-analise/specification.md)
- [SPEC-0038 — Emissão da garantia e a espera pela assinatura](specifications/0038-emissao-e-assinatura-da-garantia/specification.md)
- [SPEC-0039 — Emitir a garantia conferindo, e sem poder divergir da análise](specifications/0039-emissao-de-garantia-na-analise/specification.md)
- [SPEC-0040 — Assinou, fecha o dossiê: alterar arquivo vira exceção nomeada e visível](specifications/0040-dossie-da-garantia-fechado/specification.md)
- [SPEC-0041 — A Equipe passa a administrar de verdade: no celular, sem 403, e sem mudar acesso em silêncio](specifications/0041-equipe-e-perfis-no-mobile/specification.md)
- [SPEC-0042 — Tutoriais em vídeo, e onde encontrá-los](specifications/0042-tutoriais-em-video/specification.md)
- [SPEC-0043 — Ninguém consegue dizer que versão está no ar, nem o que mudou nela](specifications/0043-versao-e-novidades/specification.md)
- [SPEC-0044 — O que mudou não cabe onde está sendo contado](specifications/0044-pagina-de-novidades/specification.md)
- [SPEC-0045 — Assuntos, navegação e a versão certa para cada aparelho](specifications/0045-grupos-e-navegacao-na-ajuda/specification.md)
- [SPEC-0046 — Documento e telefone com máscara, e erro de formulário que a pessoa consegue ler](specifications/0046-mascaras-e-erros-na-analise-de-credito/specification.md)
- [SPEC-0047 — Correção no web sem forma de provar que está certa](specifications/0047-suite-unitaria-do-web/specification.md)
- [FIX-0001 — Borda e placeholder dos campos de formulário fora dos tokens](fixes/0001-borda-placeholder-campos-formulario.md)
- [FIX-0002 — Zoom automático no mobile ao focar qualquer campo](fixes/0002-zoom-automatico-no-mobile.md)
- [FIX-0003 — A API responde antes de comitar a transação](fixes/0003-api-responde-antes-de-comitar.md)
- [FIX-0004 — Separadores escuros demais depois da spec 0019](fixes/0004-separadores-escuros-demais.md)
- [FIX-0005 — O topo da imobiliária não mostra título no mobile](fixes/0005-topo-da-imobiliaria-sem-titulo.md)
- [FIX-0006 — Erros encontrados na jornada da análise de crédito](fixes/0006-erros-encontrados-pela-jornada.md)
- [FIX-0007 — Documento do cadastro do inquilino aparece como "Entregue" numa análise recém-criada, sem nenhuma pista de que veio de antes](fixes/0007-cpf-ja-vem-entregue.md)
- [FIX-0008 — A caixa azul do passo Documentos afirma o que o sistema não faz](fixes/0008-caixa-azul-do-passo-documentos.md)
- [FIX-0009 — A aprovação pede num modal o que a tela já mostra, e o setup é um campo vazio sem referência](fixes/0009-aprovacao-em-modal-duplicado.md)
- [FIX-0010 — O anexo grande não sobe, e o que subiu quebrado abre em branco](fixes/0010-preview-de-documento-da-garantia.md)
- [FIX-0011 — A imobiliária troca e edita documento com a análise na garantidora](fixes/0011-troca-de-arquivo-fura-janela-da-imobiliaria.md)
- [FIX-0012 — A tela decide com dado que não é dela: identidade congelada, e formulário preenchido pelo navegador](fixes/0012-onboarding-nao-leva-ao-painel.md)
- [FIX-0014 — No celular, a Ajuda esconde metade do índice atrás de um gesto que a tela não anuncia](fixes/0014-ajuda-mobile-pilulas-scroll-horizontal.md)
- [FIX-0015 — A recusa do servidor não aponta o campo em três formulários](fixes/0015-recusa-da-api-nao-aponta-o-campo.md)
- [FIX-0016 — Renda comprovada do inquilino principal não é obrigatória](fixes/0016-renda-do-inquilino-nao-e-obrigatoria.md)
- [FIX-0017 — Salvar em Parâmetros (mobile) trava os botões da tab bar do rodapé](fixes/0017-parametros-mobile-trava-tab-bar.md)
- [FIX-0021 — Seletor de parceira só alcança a primeira página, e em Inquilinos nem a busca resolve](fixes/0021-seletor-imobiliaria-limitado-a-50.md)
- [FIX-0024 — O painel de Novidades corta no meio o item de nota que ocupa mais de uma linha](fixes/0024-novidades-cortam-item-longo.md)
- [SPEC-0048 — Geração automática de cobranças e tela de gestão](specifications/0048-gestao-de-cobrancas/specification.md)
- [SPEC-0049 — Remoção lógica e recuperação: imobiliária, inquilino, imóvel, análise de crédito, garantia e cobrança](specifications/0049-remocao-logica-de-registros/specification.md)
- [SPEC-0050 — Consulta ao Boa Vista (Cadastro Positivo) na análise de crédito, configurável por tenant](specifications/0050-analise-credito-boavista/specification.md)
- [SPEC-0051 — Usuários da imobiliária: quem tem acesso, e como tirá-lo](specifications/0051-usuarios-da-imobiliaria/specification.md)
- [SPEC-0052 — Catálogo de consultas de crédito configurável, com custo e conciliação (API Full)](specifications/0052-consultas-credito-api-full/specification.md)
- [SPEC-0053 — Central de ajuda na ordem da jornada: tudo visível, busca e capítulos ao lado do vídeo](specifications/0053-central-ajuda-jornada/specification.md)
- [SPEC-0054 — Cobrança com tipo, canal e parcela, e o resumo do mês que hoje mora na planilha](specifications/0054-cobranca-por-tipo-e-canal/specification.md)
- [SPEC-0055 — O acerto com a imobiliária: o que ela recolheu, o que repassou, e o mês fechado](specifications/0055-repasse-por-imobiliaria/specification.md)
- [FIX-0018 — Inquilino cadastrado no formulário de análise não fica vinculado à imobiliária](fixes/0018-inquilino-inline-sem-imobiliaria.md)
- [FIX-0019 — O painel de Consulta de crédito usa a cor de aprovação para um resultado que não aprova nada](fixes/0019-cor-verde-painel-consulta-credito.md)
- [SPEC-0056 — A taxa de adesão: da imobiliária, por imobiliária, e de volta como comissão](specifications/0056-taxa-de-adesao/specification.md)
- [SPEC-0057 — A mensalidade da garantia: uma faixa por tipo de tomador, escolhida na aprovação](specifications/0057-taxa-da-mensalidade/specification.md)
### Falta
- Tela de sinistro (o processo não existe — ver [roadmap](roadmap.md#1-sinistro-processo-inteiro)).
## API — `apps/api`
### Feito
- [SPEC-0001 — Recuperação de senha por e-mail](specifications/0001-recuperacao-de-senha/specification.md)
- [SPEC-0002 — Onboarding: usuário conectado, cancelamento e logo](specifications/0002-onboarding-e-logo/specification.md)
- [SPEC-0003 — Análise completa: taxa setup pelo analista, cláusula obrigatória e corresponsável](specifications/0003-analise-completa/specification.md)
- [SPEC-0004 — Implementação mobile (PWA responsivo) conforme o Figma](specifications/0004-implementacao-mobile/specification.md)
- [SPEC-0005 — Aviso de atualização do PWA (banner com botão "Atualizar")](specifications/0005-pwa-prompt-de-atualizacao/specification.md)
- [SPEC-0006 — Pacote Locatício como base de cálculo + limpeza das configurações padrão](specifications/0006-pacote-locaticio-e-limpeza-de-settings/specification.md)
- [SPEC-0007 — Análise de Crédito: rename completo (Proposal → CreditAnalysis) + visão mobile](specifications/0007-analise-de-credito-linguagem-e-mobile/specification.md)
- [SPEC-0008 — Documentos obrigatórios da Análise de Crédito](specifications/0008-documentos-obrigatorios-analise-credito/specification.md)
- [SPEC-0009 — Remoção do i18n](specifications/0009-remocao-do-i18n/specification.md)
- [SPEC-0010 — Parametrização de documentos por área: botões e seleção do tipo](specifications/0010-parametrizacao-documentos-por-area/specification.md)
- [SPEC-0011 — Gaveta de navegação do mobile conforme o design system 1.5.0](specifications/0011-gaveta-de-navegacao-mobile/specification.md)
- [SPEC-0012 — Iconografia Phosphor, conforme o design system 2.3.0](specifications/0012-iconografia-phosphor/specification.md)
- [SPEC-0013 — Inquilinos e Imóveis conforme o design system](specifications/0013-inquilinos-imoveis-design-system/specification.md)
- [SPEC-0014 — MUI 9 e design system 2.10.0](specifications/0014-atualizacao-mui-e-design-system/specification.md)
- [SPEC-0015 — Telas de Análise de Crédito no design system](specifications/0015-telas-de-analise-de-credito/specification.md)
- [SPEC-0023 — Padronizar os filtros das listas](specifications/0023-padronizar-filtros-das-listas/specification.md)
- [SPEC-0025 — Organização da visualização da análise de crédito](specifications/0025-visualizacao-da-analise-de-credito/specification.md)
- [SPEC-0027 — Contrato vira Garantia](specifications/0027-contrato-vira-garantia/specification.md)
- [SPEC-0028 — Ambiente de produção (app.garantora.com.br na box srv01)](specifications/0028-ambiente-de-producao/specification.md)
- [SPEC-0030 — Skill `ship`: deploy do main em produção](specifications/0030-skill-ship-deploy/specification.md)
- [SPEC-0031 — Convite de garantidora por link](specifications/0031-convite-de-garantidora-por-link/specification.md)
- [SPEC-0032 — Templates de e-mail no design system](specifications/0032-templates-de-email-no-design-system/specification.md)
- [SPEC-0034 — Isolamento de tenant e de imobiliária, e login sem credencial pré-preenchida](specifications/0034-isolamento-de-tenant-e-login/specification.md)
- [SPEC-0035 — Autorização: fechar os portões, sanear as permissões, e o menu obedecer a elas](specifications/0035-menu-por-permissao/specification.md)
- [SPEC-0036 — O passo de analisar, e o caminho de volta para a imobiliária](specifications/0036-retorno-da-analise-a-imobiliaria/specification.md)
- [SPEC-0037 — Pendências tipificadas na análise de crédito, e um histórico que diz o que mudou](specifications/0037-tipos-de-pendencia-na-analise/specification.md)
- [SPEC-0038 — Emissão da garantia e a espera pela assinatura](specifications/0038-emissao-e-assinatura-da-garantia/specification.md)
- [SPEC-0039 — Emitir a garantia conferindo, e sem poder divergir da análise](specifications/0039-emissao-de-garantia-na-analise/specification.md)
- [SPEC-0040 — Assinou, fecha o dossiê: alterar arquivo vira exceção nomeada e visível](specifications/0040-dossie-da-garantia-fechado/specification.md)
- [SPEC-0041 — A Equipe passa a administrar de verdade: no celular, sem 403, e sem mudar acesso em silêncio](specifications/0041-equipe-e-perfis-no-mobile/specification.md)
- [SPEC-0042 — Tutoriais em vídeo, e onde encontrá-los](specifications/0042-tutoriais-em-video/specification.md)
- [SPEC-0043 — Ninguém consegue dizer que versão está no ar, nem o que mudou nela](specifications/0043-versao-e-novidades/specification.md)
- [SPEC-0044 — O que mudou não cabe onde está sendo contado](specifications/0044-pagina-de-novidades/specification.md)
- [SPEC-0046 — Documento e telefone com máscara, e erro de formulário que a pessoa consegue ler](specifications/0046-mascaras-e-erros-na-analise-de-credito/specification.md)
- [FIX-0002 — Zoom automático no mobile ao focar qualquer campo](fixes/0002-zoom-automatico-no-mobile.md)
- [FIX-0003 — A API responde antes de comitar a transação](fixes/0003-api-responde-antes-de-comitar.md)
- [FIX-0006 — Erros encontrados na jornada da análise de crédito](fixes/0006-erros-encontrados-pela-jornada.md)
- [FIX-0007 — Documento do cadastro do inquilino aparece como "Entregue" numa análise recém-criada, sem nenhuma pista de que veio de antes](fixes/0007-cpf-ja-vem-entregue.md)
- [FIX-0008 — A caixa azul do passo Documentos afirma o que o sistema não faz](fixes/0008-caixa-azul-do-passo-documentos.md)
- [FIX-0009 — A aprovação pede num modal o que a tela já mostra, e o setup é um campo vazio sem referência](fixes/0009-aprovacao-em-modal-duplicado.md)
- [FIX-0010 — O anexo grande não sobe, e o que subiu quebrado abre em branco](fixes/0010-preview-de-documento-da-garantia.md)
- [FIX-0011 — A imobiliária troca e edita documento com a análise na garantidora](fixes/0011-troca-de-arquivo-fura-janela-da-imobiliaria.md)
- [FIX-0012 — A tela decide com dado que não é dela: identidade congelada, e formulário preenchido pelo navegador](fixes/0012-onboarding-nao-leva-ao-painel.md)
- [FIX-0016 — Renda comprovada do inquilino principal não é obrigatória](fixes/0016-renda-do-inquilino-nao-e-obrigatoria.md)
- [FIX-0021 — Seletor de parceira só alcança a primeira página, e em Inquilinos nem a busca resolve](fixes/0021-seletor-imobiliaria-limitado-a-50.md)
- [FIX-0023 — E-mail de usuário guarda a maiúscula, e quem digita em minúsculas não entra nem recupera a senha](fixes/0023-email-com-maiuscula.md)
- [SPEC-0048 — Geração automática de cobranças e tela de gestão](specifications/0048-gestao-de-cobrancas/specification.md)
- [SPEC-0049 — Remoção lógica e recuperação: imobiliária, inquilino, imóvel, análise de crédito, garantia e cobrança](specifications/0049-remocao-logica-de-registros/specification.md)
- [SPEC-0050 — Consulta ao Boa Vista (Cadastro Positivo) na análise de crédito, configurável por tenant](specifications/0050-analise-credito-boavista/specification.md)
- [SPEC-0051 — Usuários da imobiliária: quem tem acesso, e como tirá-lo](specifications/0051-usuarios-da-imobiliaria/specification.md)
- [SPEC-0052 — Catálogo de consultas de crédito configurável, com custo e conciliação (API Full)](specifications/0052-consultas-credito-api-full/specification.md)
- [SPEC-0054 — Cobrança com tipo, canal e parcela, e o resumo do mês que hoje mora na planilha](specifications/0054-cobranca-por-tipo-e-canal/specification.md)
- [SPEC-0055 — O acerto com a imobiliária: o que ela recolheu, o que repassou, e o mês fechado](specifications/0055-repasse-por-imobiliaria/specification.md)
- [FIX-0018 — Inquilino cadastrado no formulário de análise não fica vinculado à imobiliária](fixes/0018-inquilino-inline-sem-imobiliaria.md)
- [SPEC-0056 — A taxa de adesão: da imobiliária, por imobiliária, e de volta como comissão](specifications/0056-taxa-de-adesao/specification.md)
- [SPEC-0057 — A mensalidade da garantia: uma faixa por tipo de tomador, escolhida na aprovação](specifications/0057-taxa-da-mensalidade/specification.md)
### Falta
- Sinistro, emissão de boleto e assinatura eletrônica (ver [roadmap](roadmap.md)).
### Dívida técnica
- `make lint` não passa — a maior parte é `line-too-long`; o código nunca passou por
`ruff format`, e pagar essa dívida é decisão do usuário (o diff é enorme).
- `[tool.mypy]` ausente do `pyproject.toml` — sem os plugins de pydantic/SQLAlchemy a maioria
dos erros é falso positivo.
- Cobertura desigual: os módulos de maior risco financeiro eram os menos cobertos
(`credit.py`, `decision_service.py`, `guarantee_service.py`, `billing_service.py`). Não
remedida desde a criação do monorepo — rode `make test-cov` antes de afirmar.
## Worker e jobs agendados
### Feito
- Consulta ao bureau de crédito em fila (`run_credit_check_job`) — spec 0050.
- Job diário das 6h: purga do payload bruto vencido e sincronização de extrato e preços das
consultas — specs 0050 e 0052.
- Job das 7h: marca as cobranças vencidas — spec 0048.
### Falta
- Nada previsto na arquitetura além dos três jobs.
## Integrações externas
### Feito
- API Full — consultas de crédito e extrato (specs 0050 e 0052).
- ViaCEP — busca de endereço.
- E-mail — Mailpit em desenvolvimento, AWS SES em produção.
### Falta
- Assinatura eletrônica (Autentique + biometria facial) — planejada, não integrada.
- Emissão de boleto — hoje "boleto" é só o rótulo do canal, e a baixa é manual.
## Infra — local, dev-remote, produção
### Feito
- [SPEC-0017 — Internalizar o design system e aposentar o pacote](specifications/0017-internalizar-design-system/specification.md)
- [SPEC-0028 — Ambiente de produção (app.garantora.com.br na box srv01)](specifications/0028-ambiente-de-producao/specification.md)
- [FIX-0010 — O anexo grande não sobe, e o que subiu quebrado abre em branco](fixes/0010-preview-de-documento-da-garantia.md)
- [FIX-0013 — O `make seed` some do log do deploy, e o deploy diz que deu certo](fixes/0013-seed-some-do-log-do-deploy.md)
- [SPEC-0058 — A documentação começa pelo andamento: roadmap, especificações, arquitetura e implementação](specifications/0058-documentacao-pelo-andamento/specification.md)
### Falta
- Sem CI.
## Testes
### Feito
- [SPEC-0001 — Recuperação de senha por e-mail](specifications/0001-recuperacao-de-senha/specification.md)
- [SPEC-0002 — Onboarding: usuário conectado, cancelamento e logo](specifications/0002-onboarding-e-logo/specification.md)
- [SPEC-0003 — Análise completa: taxa setup pelo analista, cláusula obrigatória e corresponsável](specifications/0003-analise-completa/specification.md)
- [SPEC-0004 — Implementação mobile (PWA responsivo) conforme o Figma](specifications/0004-implementacao-mobile/specification.md)
- [SPEC-0005 — Aviso de atualização do PWA (banner com botão "Atualizar")](specifications/0005-pwa-prompt-de-atualizacao/specification.md)
- [SPEC-0006 — Pacote Locatício como base de cálculo + limpeza das configurações padrão](specifications/0006-pacote-locaticio-e-limpeza-de-settings/specification.md)
- [SPEC-0007 — Análise de Crédito: rename completo (Proposal → CreditAnalysis) + visão mobile](specifications/0007-analise-de-credito-linguagem-e-mobile/specification.md)
- [SPEC-0008 — Documentos obrigatórios da Análise de Crédito](specifications/0008-documentos-obrigatorios-analise-credito/specification.md)
- [SPEC-0009 — Remoção do i18n](specifications/0009-remocao-do-i18n/specification.md)
- [SPEC-0010 — Parametrização de documentos por área: botões e seleção do tipo](specifications/0010-parametrizacao-documentos-por-area/specification.md)
- [SPEC-0011 — Gaveta de navegação do mobile conforme o design system 1.5.0](specifications/0011-gaveta-de-navegacao-mobile/specification.md)
- [SPEC-0012 — Iconografia Phosphor, conforme o design system 2.3.0](specifications/0012-iconografia-phosphor/specification.md)
- [SPEC-0013 — Inquilinos e Imóveis conforme o design system](specifications/0013-inquilinos-imoveis-design-system/specification.md)
- [SPEC-0014 — MUI 9 e design system 2.10.0](specifications/0014-atualizacao-mui-e-design-system/specification.md)
- [SPEC-0015 — Telas de Análise de Crédito no design system](specifications/0015-telas-de-analise-de-credito/specification.md)
- [SPEC-0016 — Topo e espaçamento no mobile: listas e formulários](specifications/0016-layout-mobile-listas-forms/specification.md)
- [SPEC-0018 — Respiro do label dos campos de formulário](specifications/0018-respiro-do-label-dos-campos/specification.md)
- [SPEC-0019 — Contraste dos neutros e adoção da paleta de marca](specifications/0019-contraste-e-adocao-da-paleta/specification.md)
- [SPEC-0020 — Padronizar o topo de página](specifications/0020-padronizar-topo-de-pagina/specification.md)
- [SPEC-0021 — Borda do topo e tom das linhas, iguais nos dois viewports](specifications/0021-linhas-e-borda-do-header/specification.md)
- [SPEC-0022 — Paginação no mobile: Inquilinos, Imóveis e Análise de Crédito](specifications/0022-paginacao-compacta-no-mobile/specification.md)
- [SPEC-0023 — Padronizar os filtros das listas](specifications/0023-padronizar-filtros-das-listas/specification.md)
- [SPEC-0024 — Ações do formulário no topo](specifications/0024-acoes-do-formulario-no-topo/specification.md)
- [SPEC-0025 — Organização da visualização da análise de crédito](specifications/0025-visualizacao-da-analise-de-credito/specification.md)
- [SPEC-0027 — Contrato vira Garantia](specifications/0027-contrato-vira-garantia/specification.md)
- [SPEC-0028 — Ambiente de produção (app.garantora.com.br na box srv01)](specifications/0028-ambiente-de-producao/specification.md)
- [SPEC-0030 — Skill `ship`: deploy do main em produção](specifications/0030-skill-ship-deploy/specification.md)
- [SPEC-0031 — Convite de garantidora por link](specifications/0031-convite-de-garantidora-por-link/specification.md)
- [SPEC-0032 — Templates de e-mail no design system](specifications/0032-templates-de-email-no-design-system/specification.md)
- [SPEC-0033 — Interface do SaaS admin no design system](specifications/0033-saas-admin-no-design-system/specification.md)
- [SPEC-0034 — Isolamento de tenant e de imobiliária, e login sem credencial pré-preenchida](specifications/0034-isolamento-de-tenant-e-login/specification.md)
- [SPEC-0035 — Autorização: fechar os portões, sanear as permissões, e o menu obedecer a elas](specifications/0035-menu-por-permissao/specification.md)
- [SPEC-0036 — O passo de analisar, e o caminho de volta para a imobiliária](specifications/0036-retorno-da-analise-a-imobiliaria/specification.md)
- [SPEC-0037 — Pendências tipificadas na análise de crédito, e um histórico que diz o que mudou](specifications/0037-tipos-de-pendencia-na-analise/specification.md)
- [SPEC-0038 — Emissão da garantia e a espera pela assinatura](specifications/0038-emissao-e-assinatura-da-garantia/specification.md)
- [SPEC-0039 — Emitir a garantia conferindo, e sem poder divergir da análise](specifications/0039-emissao-de-garantia-na-analise/specification.md)
- [SPEC-0040 — Assinou, fecha o dossiê: alterar arquivo vira exceção nomeada e visível](specifications/0040-dossie-da-garantia-fechado/specification.md)
- [SPEC-0041 — A Equipe passa a administrar de verdade: no celular, sem 403, e sem mudar acesso em silêncio](specifications/0041-equipe-e-perfis-no-mobile/specification.md)
- [SPEC-0042 — Tutoriais em vídeo, e onde encontrá-los](specifications/0042-tutoriais-em-video/specification.md)
- [SPEC-0043 — Ninguém consegue dizer que versão está no ar, nem o que mudou nela](specifications/0043-versao-e-novidades/specification.md)
- [SPEC-0044 — O que mudou não cabe onde está sendo contado](specifications/0044-pagina-de-novidades/specification.md)
- [SPEC-0045 — Assuntos, navegação e a versão certa para cada aparelho](specifications/0045-grupos-e-navegacao-na-ajuda/specification.md)
- [SPEC-0046 — Documento e telefone com máscara, e erro de formulário que a pessoa consegue ler](specifications/0046-mascaras-e-erros-na-analise-de-credito/specification.md)
- [FIX-0002 — Zoom automático no mobile ao focar qualquer campo](fixes/0002-zoom-automatico-no-mobile.md)
- [FIX-0003 — A API responde antes de comitar a transação](fixes/0003-api-responde-antes-de-comitar.md)
- [FIX-0006 — Erros encontrados na jornada da análise de crédito](fixes/0006-erros-encontrados-pela-jornada.md)
- [FIX-0007 — Documento do cadastro do inquilino aparece como "Entregue" numa análise recém-criada, sem nenhuma pista de que veio de antes](fixes/0007-cpf-ja-vem-entregue.md)
- [FIX-0008 — A caixa azul do passo Documentos afirma o que o sistema não faz](fixes/0008-caixa-azul-do-passo-documentos.md)
- [FIX-0009 — A aprovação pede num modal o que a tela já mostra, e o setup é um campo vazio sem referência](fixes/0009-aprovacao-em-modal-duplicado.md)
- [FIX-0010 — O anexo grande não sobe, e o que subiu quebrado abre em branco](fixes/0010-preview-de-documento-da-garantia.md)
- [FIX-0012 — A tela decide com dado que não é dela: identidade congelada, e formulário preenchido pelo navegador](fixes/0012-onboarding-nao-leva-ao-painel.md)
- [FIX-0014 — No celular, a Ajuda esconde metade do índice atrás de um gesto que a tela não anuncia](fixes/0014-ajuda-mobile-pilulas-scroll-horizontal.md)
- [FIX-0021 — Seletor de parceira só alcança a primeira página, e em Inquilinos nem a busca resolve](fixes/0021-seletor-imobiliaria-limitado-a-50.md)
- [FIX-0022 — A faxina do e2e e quatro specs falam com um container de banco que não existe mais](fixes/0022-faxina-e2e-container-inexistente.md)
- [SPEC-0048 — Geração automática de cobranças e tela de gestão](specifications/0048-gestao-de-cobrancas/specification.md)
- [SPEC-0049 — Remoção lógica e recuperação: imobiliária, inquilino, imóvel, análise de crédito, garantia e cobrança](specifications/0049-remocao-logica-de-registros/specification.md)
- [SPEC-0050 — Consulta ao Boa Vista (Cadastro Positivo) na análise de crédito, configurável por tenant](specifications/0050-analise-credito-boavista/specification.md)
- [SPEC-0051 — Usuários da imobiliária: quem tem acesso, e como tirá-lo](specifications/0051-usuarios-da-imobiliaria/specification.md)
- [SPEC-0052 — Catálogo de consultas de crédito configurável, com custo e conciliação (API Full)](specifications/0052-consultas-credito-api-full/specification.md)
- [SPEC-0053 — Central de ajuda na ordem da jornada: tudo visível, busca e capítulos ao lado do vídeo](specifications/0053-central-ajuda-jornada/specification.md)
- [SPEC-0054 — Cobrança com tipo, canal e parcela, e o resumo do mês que hoje mora na planilha](specifications/0054-cobranca-por-tipo-e-canal/specification.md)
- [SPEC-0055 — O acerto com a imobiliária: o que ela recolheu, o que repassou, e o mês fechado](specifications/0055-repasse-por-imobiliaria/specification.md)
- [SPEC-0056 — A taxa de adesão: da imobiliária, por imobiliária, e de volta como comissão](specifications/0056-taxa-de-adesao/specification.md)
- [SPEC-0057 — A mensalidade da garantia: uma faixa por tipo de tomador, escolhida na aprovação](specifications/0057-taxa-da-mensalidade/specification.md)
### Falta
- A suíte e2e inteira roda só sob pedido (política de testes do `CLAUDE.md`); não há
execução agendada.
Antes de gravar, confirmar cada item de "Feito" do Worker e de Integrações contra apps/api/app/worker.py e apps/api/app/services/ (a spec exige não descrever como existente o que não está no código).
- [ ] Step 2: Roadmap
Em docs/roadmap.md, substituir a seção inteira ## Dívida técnica conhecida (do título até antes do próximo ## ou do fim do arquivo) por:
## Dívida técnica
A dívida técnica e o que falta construir em cada parte da arquitetura estão em
[Implementação](implementacao.md).
git log). - [ ] Step 3: Navegação
Substituir o bloco nav: de mkdocs.yml por:
nav:
- Andamento: index.md
- Roadmap:
- Visão: product/vision.md
- Roadmap: roadmap.md
- Especificações:
- product/index.md
- Regras de negócio: product/business-rules.md
- Glossário: product/glossary.md
- Design tokens: design-tokens.md
- Padrões de UI: ui-patterns.md
- Navegação-alvo: navigation-brief.md
- Contexto de marca: impeccable.md
- Specs: specifications/index.md
- Fixes: fixes/index.md
- Arquitetura:
- architecture/index.md
- Contexto do sistema: architecture/system-context.md
- Containers: architecture/containers.md
- Componentes: architecture/components.md
- Modelo de dados: architecture/data-model.md
- Deployment: architecture/deployment.md
- Decisões (ADRs): decisions/index.md
- Implementação: implementacao.md
- Guias:
- Como navegar: guias.md
- getting-started/index.md
- Setup: getting-started/setup.md
- Dia a dia: getting-started/development.md
- API: api/index.md
- operations/index.md
- Deploy do produto: operations/deployment.md
- Plataforma de documentação: operations/documentation-platform.md
- Troubleshooting: operations/troubleshooting.md
- Template de spec: doc-templates/specification.md
- Template de fix: doc-templates/fix.md
- Template de ADR: doc-templates/adr.md
- Guia para IA: ai-guide.md
- Metadados: metadata/README.md
- Tweaks (histórico): tweaks/index.md
- [ ] Step 4: Lint e build
Run: python3 scripts/docs_lint.py && .venv-docs/bin/mkdocs build --strict Expected: docs_lint: ok e Documentation built. Se o docs_lint exigir entrada no catálogo para implementacao.md ou guias.md, acrescentar no mesmo formato das existentes (type: architecture/operation, status: atual).
- [ ] Step 5: Conferir o gerado
Run: grep -c "SPEC-" site/implementacao/index.html → maior que zero; grep -c "<!-- implementacao" site/implementacao/index.html → 0.
- [ ] Step 6: Commit (com pedido do usuário)
git add docs/implementacao.md docs/roadmap.md mkdocs.yml docs/metadata/catalog.yaml
git commit -m "docs(0058): Implementação (feito × falta) e a navegação em seis abas"
Task 4: o build do container leva as notas de versão¶
Files: - Modify: infra/dev-remote/docs.Dockerfile - Modify: scripts/publicar-preview-docs.sh
- [ ] Step 1: Dockerfile
Depois de COPY docs/ ./docs/:
# Spec 0058, RN9 — o hook do Andamento lê as notas de versão do app.
COPY apps/web/src/versoes/ ./apps/web/src/versoes/
- [ ] Step 2: Script de publicação
Depois da linha cp "$CONTEUDO/requirements-docs.txt" "$BASE/requirements-docs.txt":
mkdir -p "$BASE/apps/web/src/versoes"
rsync -a --delete "$CONTEUDO/apps/web/src/versoes/" "$BASE/apps/web/src/versoes/"
echo acima delas para citar apps/web/src/versoes/. - [ ] Step 3: Sintaxe
Run: bash -n scripts/publicar-preview-docs.sh && echo ok → ok.
- [ ] Step 4: Commit (com pedido do usuário)
git add infra/dev-remote/docs.Dockerfile scripts/publicar-preview-docs.sh
git commit -m "docs(0058): o build do site de docs leva as notas de versão"
Task 5: verificação final¶
- [ ] Step 1:
cd docs/hooks && ../../.venv-docs/bin/pytest -q→ todos PASS. - [ ] Step 2:
.venv-docs/bin/mkdocs build --strict→Documentation built. - [ ] Step 3: revisão da branch inteira com o
requesting-code-reviewdo Superpowers e a rubrica.claude/rubrics/implementacao.md(as seções de autorização saem da conta — spec sem superfície de segurança). - [ ] Step 4: com pedido do usuário: merge na
main, push, ebash scripts/publicar-preview-docs.sh main(só aqui o Dockerfile novo vale — RN9). - [ ] Step 5: prints de
https://docs.garantora.com.br/ehttps://docs.garantora.com.br/implementacao/em 1440px e 375px, comdocument.documentElement.scrollWidth - clientWidth == 0(CA8). - [ ] Step 6: marcar os CAs da spec, preencher o Registro e passar o status para
concluida(front matter, cabeçalho, catálogo, índice).