Implementação MVP

This commit is contained in:
camilafagundes committed 2026-10-03 00:00:45 -03:00
commit 807b3d72cd
54 files changed
+5241

No files matched your search

@@ -0,0 +1,49 @@
# 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.