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
- Sequência por
workspace_id. É a recomendação técnica citada na especificação. Continua não adotada. - Sequência global da plataforma, única entre workspaces.
- Sequência por documento comercial (CNPJ ou equivalente). CNPJ não é chave de tenant; esta alternativa entra só para ficar visível.
- 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 SEQUENCEou equivalenteUNIQUE (commercial_number)globalUNIQUE (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.