v1.0 · Owner: Ueslei C. Nascimento · Revisão trimestral · Junho 2026


Todos os exemplos

Exemplo Preenchido: Low-Level Design / TDD

Projeto fictício para servir de referência de preenchimento do template-lld-tdd.md. Os números são ilustrativos. Mesmo projeto de referência dos demais exemplos (SAP-Peças).

Identificação

CampoValor
ProjetoPortal de Autoatendimento de Solicitação de Peças (SAP-Peças)
Dev Lead / ArquitetoTiago Mota (Dev Lead)
Aprovador (Tech Lead Aprovador)Carlos Menezes
Versão / Data1.0 / 01/07/2026
HLD de origemexemplo-hld-preenchido.md

1. Diagrama de Componentes (C4 L3)

Contêiner API (NestJS), módulos: CatalogoModule (busca, cache de catálogo), PedidosModule (carrinho, criação, status), IntegracaoErpModule (cliente REST, outbox, poller de status), AuthModule (OIDC, escopo por CNPJ).

[link do diagrama no Confluence: C4 L3 · SAP-Peças]

2. Modelo de Dados

[link do diagrama ER (dbdiagram.io)]. Naming: snake_case, tabelas no singular, PKs id (UUID v7).

Tabela/EntidadeCampos-chaveÍndicesConstraints
pecaid, codigo, descricao, modelo_equipamento, ts_busca (tsvector)GIN em ts_busca; UNIQUE em codigocodigo NOT NULL
pedidoid, cnpj_concessionario, status, criado_em, erp_numeroB-tree em (cnpj_concessionario, criado_em)status ∈ (rascunho, enviado, registrado, em_separacao, faturado, erro)
pedido_itemid, pedido_id, peca_id, quantidadeFK compostaquantidade > 0
outbox_erpid, pedido_id, payload, tentativas, proximo_retry_emB-tree em proximo_retry_emtentativas ≤ 10

3. Definição de APIs e Contratos

[repo: docs/api/openapi.yaml]

EndpointMétodoAuthPayloadRespostas / Erros
/pecas?q=&modelo=GETOIDC (operador)-200 lista paginada / 401
/pecas/{codigo}/disponibilidadeGETOIDC (operador)-200 {qtd, atualizado_em} / 404 / 401
/pedidosPOSTOIDC (operador){itens: [{codigo, qtd}]}201 / 409 sem-estoque / 422 / 401
/pedidos?status=GETOIDC (operador)-200 lista do próprio CNPJ / 401
/pedidos/{id}/exportGETOIDC (gestor)-200 CSV / 403 / 401

4. Fluxos de Processo Detalhados

[Confluence: diagramas de sequência]: (a) busca com cache hit/miss; (b) confirmação de pedido com validação direta no ERP e gravação na outbox; (c) retry da outbox com backoff exponencial; (d) poller de status (10 min) atualizando pedido.status e disparando e-mail (SES).

5. Estratégia de Tratamento de Erros

Exceções de domínio mapeadas para HTTP via filtro global (RFC 9457, problem+json). Erros de integração ERP não vazam ao usuário: pedido fica enviado e a outbox faz retry; após 10 tentativas → status erro + alerta ao time e e-mail ao concessionário. Todos os erros logados com trace_id e cnpj (sem dados pessoais no log).

6. Estratégia de Cache

O queTTLInvalidaçãoFerramenta
Catálogo de peças24hRecarga noturna (job 2h) + alerta staleness > 26hRedis
Disponibilidade de estoque5 minExpiração natural; bypass na confirmação do pedidoRedis
Assets da SPA7 diasHash no nome do arquivo a cada deployCloudFront

7. Instrumentação de Observabilidade

ComponenteLogsMétricasTracesSLI/SLO associado
CatalogoModuleBusca (termo, hits)busca_p95, cache_hit_ratioOpenTelemetryLatência busca P95 < 800ms
PedidosModuleCiclo de vida do pedidopedido_para_erp_segundosOpenTelemetryPedido→ERP < 1 min
IntegracaoErpModuleTentativas/falhas outboxerp_erro_ratio, outbox_pendentesOpenTelemetryTaxa de erro < 0,5%
API (global)Acesso estruturadodisponibilidade_api-≥ 99,5% (6h-22h)

8. Pontos de Rollback / Feature Flags

Deploy rolling com rollback = redeploy da imagem anterior (mantidas as 5 últimas). Feature flags (variável de ambiente + tabela feature_flag): exportacao_csv, notificacao_email; permitem desligar funções secundárias sem deploy. Migrations sempre retrocompatíveis com a versão anterior da aplicação (expand/contract).

9. Migrations e Versionamento de Schema

ItemDefinição
FerramentaFlyway (SQL versionado em db/migrations/)
Estratégia de rollbackExpand/contract: nunca dropar coluna em uso; script de down apenas para dev; produção reverte por nova migration

10. Estratégia de Testes

Massa de teste: catálogo sintético de 5k peças + CNPJs fictícios (sem dados reais). Ambientes: integração roda contra ERP mock (WireMock); staging usa homologação do ERP.

TipoCobertura mínimaFerramentaResponsável
Unitário80% (módulos de domínio)JestDevs
IntegraçãoFluxos críticos (busca, pedido, outbox)Jest + Testcontainers + WireMockDevs
E2ECA-001 e CA-002 + smoke por releasePlaywrightQA

11. Dependências e Bibliotecas

BibliotecaVersãoLicençaJustificativa
NestJS11.xMITFramework base (HLD §4)
ioredis5.xMITCliente Redis
openid-client6.xMITOIDC com IdP corporativo
@opentelemetry/sdk-node0.5xApache-2.0Traces/métricas (§7)

12. Considerações de Performance

Ponto crítico: busca de catálogo (RNF-001). Benchmark alvo: 200 req/s com P95 < 800ms, atendido com cache (hit ~95%, ver spike). Full-text do PostgreSQL com GIN testado até 5k itens (P95 110ms no miss). Confirmação de pedido depende do ERP (P95 1,8s), comunicada na UI como etapa de “validação final”.

13. Matriz de Rastreabilidade

Versão consolidada em exemplo-matriz-rastreabilidade-preenchida.md.

RF/RNFComponenteEndpoint/APICaso de TesteCritério de Aceite
RF-001CatalogoModuleGET /pecasTC-001CA-001
RF-002CatalogoModule + RedisGET /pecas/{codigo}/disponibilidadeTC-002CA-001
RF-003PedidosModule + IntegracaoErpModulePOST /pedidosTC-003CA-002

14. Reestimativa (pós-LLD)

ItemEsforço estimadoVariação acumulada vs. BRD
Desenvolvimento3,5 squads-mês+17% (dentro de ±25%; Solicitante ciente)

Ver no GitHub