Files
gerador-proposta/docs/gerador-propostas/adr/ADR-001-proposal-number-scope.md
2026-10-03 00:00:45 -03:00

2.3 KiB

ADR-001 — Escopo da sequência PROP

  • Status: Proposed
  • Data: 2026-10-02
  • Pendência: P-009
  • Decisão: nenhuma

Contexto

A primeira geração bem-sucedida cria um número comercial no formato PROP-###### e a versão V1. Falha de geração não pode consumir número nem versão. O que permanece aberto é o escopo do contador: o que faz duas propostas receberem números diferentes, e onde a unicidade vale.

A source of truth registra uma recomendação técnica de escopo por workspace. Esta recomendação não foi aprovada. Este ADR não a converte em regra.

Alternativas

  1. Sequência por workspace_id. É a recomendação técnica citada na especificação. Continua não adotada.
  2. Sequência global da plataforma, única entre workspaces.
  3. Sequência por documento comercial (CNPJ ou equivalente). CNPJ não é chave de tenant; esta alternativa entra só para ficar visível.
  4. Sequência por usuário criador.

Critérios para sair de Proposed

  • Unicidade definida: quem pode ver o mesmo número e quem não pode.
  • Comportamento em falha: a reserva volta ao contador. Pular número em rollback não atende RN-017.
  • Concorrência: duas gerações simultâneas no mesmo escopo não recebem o mesmo número.
  • Efeito em workspace novo, arquivado e reativado.

Impacto no código desta fase

CommercialNumberAllocator só pode ser chamado de dentro do commit formal, depois do artefato válido, e só quando a proposta ainda não tem número. O duplo em memória usa o prefixo TEST- de propósito. Ele não é a sequência de produção e não escolhe a alternativa 1, 2, 3 ou 4.

O formato PROP-###### já está na source of truth. O regex em src/domain/generation/types.ts descreve esse formato. Ele não aloca números.

Impacto no prompt 02

A migration pode criar proposals.commercial_number como texto anulável.

Ainda não criar:

  • CREATE SEQUENCE ou equivalente
  • UNIQUE (commercial_number) global
  • UNIQUE (workspace_id, commercial_number)
  • trigger que preencha o número na inserção da proposta

Qualquer um desses objetos escolheria o escopo antes da aprovação deste ADR.

O que aprovar este ADR não muda

Versão formal continua imutável. Retry com a mesma chave não cria outra versão. A segunda versão reutiliza o número já commitado; não pede outro.