50 lines
2.3 KiB
Markdown
50 lines
2.3 KiB
Markdown
# 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.
|