spec-first-copilot 0.7.0-beta.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +252 -167
  2. package/bin/cli.js +70 -70
  3. package/lib/init.js +92 -92
  4. package/lib/update.js +132 -132
  5. package/package.json +1 -1
  6. package/templates/.ai/memory/napkin.md +68 -68
  7. package/templates/.github/CHANGELOG.md +560 -533
  8. package/templates/.github/adapters/SETUP.md +314 -314
  9. package/templates/.github/adapters/confluence.md +295 -295
  10. package/templates/.github/adapters/errors.md +234 -234
  11. package/templates/.github/adapters/filesystem.md +353 -353
  12. package/templates/.github/adapters/interface.md +301 -301
  13. package/templates/.github/adapters/naming.md +241 -241
  14. package/templates/.github/adapters/registry.md +244 -244
  15. package/templates/.github/agents/backend-coder.md +215 -215
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -66
  18. package/templates/.github/agents/frontend-coder.md +222 -222
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +99 -99
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -272
  23. package/templates/.github/instructions/docs.instructions.md +147 -145
  24. package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
  25. package/templates/.github/rules.md +229 -229
  26. package/templates/.github/scripts/bootstrap-confluence.js +289 -289
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -161
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -204
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -415
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -225
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -296
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -386
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -152
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -152
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -144
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -93
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -192
  38. package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
  39. package/templates/.github/templates/estrutura/architecture.template.md +169 -168
  40. package/templates/.github/templates/estrutura/conventions.template.md +214 -212
  41. package/templates/.github/templates/estrutura/decisions.template.md +107 -107
  42. package/templates/.github/templates/estrutura/domain.template.md +161 -160
  43. package/templates/.github/templates/feature/PRD.template.md +279 -279
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -358
  46. package/templates/.github/templates/feature/context.template.md +89 -89
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -49
  48. package/templates/.github/templates/feature/projetos.template.yaml +79 -79
  49. package/templates/.github/templates/global/progresso_global.template.md +59 -57
  50. package/templates/.github/templates/specs/brief.template.md +66 -66
  51. package/templates/.github/templates/specs/contracts.template.md +147 -147
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -125
  53. package/templates/.github/templates/specs/tasks.template.md +65 -65
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
@@ -1,107 +1,107 @@
1
- # Decisões — Architecture Decision Records
2
-
3
- > Registro de decisões arquiteturais com contexto, alternativas e consequências.
4
- > Cada decisão é imutável após aceita. Novas decisões podem substituir anteriores.
5
-
6
- ---
7
-
8
- <!--
9
- =============================================================================
10
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
- =============================================================================
12
-
13
- PAPEL: Registro APPEND-ONLY de decisões arquiteturais do projeto.
14
- Histórico de "por que fizemos assim?" — imutável uma vez aceita.
15
- Consultado por features pra não refazer decisões; feature que queira contestar
16
- cria nova ADR com status "substituída por ADR-NNN".
17
-
18
- ORIGEM (first-run, via /sf-design):
19
- - SDD §2 Decisões de Design (ADRs de bootstrap: escolha de stack, arquitetura,
20
- auth scheme, estratégia de testes) → transcritas aqui como ADR-001, ADR-002...
21
-
22
- ATUALIZAÇÃO (feature): /sf-merge-docs aplica SDD §11 ADDED quando feature
23
- introduz decisão arquitetural nova (raro mas acontece: mudança de padrão,
24
- nova dependência crítica, trade-off significativo). REMOVED nunca apaga ADR
25
- existente — muda status pra "substituída".
26
-
27
- COMO GERAR:
28
- 1. Para cada decisão significativa, criar registro com TODOS os campos
29
- 2. Contexto: POR QUE essa decisão foi necessária (não apenas "precisávamos")
30
- 3. Alternativas: OBRIGATÓRIO listar ao menos 1 alternativa (com motivo da rejeição)
31
- 4. Consequências: o que MUDA por causa da decisão (positivo E negativo)
32
-
33
- REGRAS:
34
- - IDs sequenciais: ADR-001, ADR-002... nunca reutilizar
35
- - NUNCA editar decisão com status "aceita" — criar nova com "substituída por ADR-XXX"
36
- - Status "proposta" = ainda em discussão, não implementar até aceitar
37
- - Toda mudança de stack, banco, framework DEVE ter registro aqui
38
- - Decisões são APPEND-ONLY — histórico importa
39
-
40
- QUANDO CRIAR:
41
- - Escolha de tecnologia/framework (em first-run, alimenta a seção inicial)
42
- - Mudança de padrão de design (feature que introduz)
43
- - Decisão de infra (cloud provider, DB engine)
44
- - Trade-off significativo (performance vs simplicidade, etc.)
45
- - /sf-merge-docs detecta §11 ADDED com impacto arquitetural
46
-
47
- QUANDO NÃO CRIAR:
48
- - Escolha de nome de variável
49
- - Implementação seguindo padrão já definido
50
- - Bug fix
51
- - Refactor sem mudança de interface
52
-
53
- =============================================================================
54
- -->
55
-
56
- ## Índice
57
-
58
- | ADR | Título | Status | Data |
59
- |-----|--------|--------|------|
60
- | ADR-001 | {{Título}} | proposta / aceita / substituída / descartada | |
61
-
62
- ## Formato
63
-
64
- Cada decisão segue este modelo:
65
-
66
- ```markdown
67
- ### ADR-NNN: Título da Decisão
68
- - **Status**: proposta | aceita | substituída por ADR-XXX | descartada
69
- - **Data**: YYYY-MM-DD
70
- - **Contexto**: Por que essa decisão foi necessária?
71
- - **Decisão**: O que decidimos?
72
- - **Alternativas consideradas**:
73
- 1. Alternativa A — rejeitada porque...
74
- 2. Alternativa B — rejeitada porque...
75
- - **Consequências**:
76
- - Positivas: ...
77
- - Negativas: ...
78
- - Riscos: ...
79
- ```
80
-
81
- ---
82
-
83
- ## Decisões
84
-
85
- ### ADR-001: {{Título}}
86
- - **Status**: aceita
87
- - **Data**:
88
- - **Contexto**:
89
- - **Decisão**:
90
- - **Alternativas consideradas**:
91
- 1. —
92
- - **Consequências**:
93
- - Positivas:
94
- - Negativas:
95
- - Riscos:
96
-
97
- ---
98
-
99
- > **Regra**: Decisões aceitas são imutáveis. Para reverter, criar nova decisão com status "substituída por ADR-XXX" na original.
100
-
101
- ---
102
-
103
- ## Changelog
104
-
105
- | Data | Feature | Tipo | Descrição |
106
- |------|---------|------|-----------|
107
- | | | | |
1
+ # Decisões — Architecture Decision Records
2
+
3
+ > Registro de decisões arquiteturais com contexto, alternativas e consequências.
4
+ > Cada decisão é imutável após aceita. Novas decisões podem substituir anteriores.
5
+
6
+ ---
7
+
8
+ <!--
9
+ =============================================================================
10
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
+ =============================================================================
12
+
13
+ PAPEL: Registro APPEND-ONLY de decisões arquiteturais do projeto.
14
+ Histórico de "por que fizemos assim?" — imutável uma vez aceita.
15
+ Consultado por features pra não refazer decisões; feature que queira contestar
16
+ cria nova ADR com status "substituída por ADR-NNN".
17
+
18
+ ORIGEM (first-run, via /sf-design):
19
+ - TRD §9 Decisões Técnicas (ADRs de bootstrap: escolha de stack, arquitetura,
20
+ auth scheme, estratégia de testes) → transcritas aqui como ADR-001, ADR-002...
21
+
22
+ ATUALIZAÇÃO (feature): /sf-merge-docs faz diff semântico TRD §9 docs/decisions.md
23
+ e aplica ADDED quando feature introduz ADR nova (raro mas acontece: mudança
24
+ de padrão, nova dependência crítica, trade-off significativo). REMOVED nunca
25
+ apaga ADR existente — muda status pra "substituída".
26
+
27
+ COMO GERAR:
28
+ 1. Para cada decisão significativa, criar registro com TODOS os campos
29
+ 2. Contexto: POR QUE essa decisão foi necessária (não apenas "precisávamos")
30
+ 3. Alternativas: OBRIGATÓRIO listar ao menos 1 alternativa (com motivo da rejeição)
31
+ 4. Consequências: o que MUDA por causa da decisão (positivo E negativo)
32
+
33
+ REGRAS:
34
+ - IDs sequenciais: ADR-001, ADR-002... nunca reutilizar
35
+ - NUNCA editar decisão com status "aceita" — criar nova com "substituída por ADR-XXX"
36
+ - Status "proposta" = ainda em discussão, não implementar até aceitar
37
+ - Toda mudança de stack, banco, framework DEVE ter registro aqui
38
+ - Decisões são APPEND-ONLY — histórico importa
39
+
40
+ QUANDO CRIAR:
41
+ - Escolha de tecnologia/framework (em first-run, alimenta a seção inicial)
42
+ - Mudança de padrão de design (feature que introduz)
43
+ - Decisão de infra (cloud provider, DB engine)
44
+ - Trade-off significativo (performance vs simplicidade, etc.)
45
+ - /sf-merge-docs detecta §11 ADDED com impacto arquitetural
46
+
47
+ QUANDO NÃO CRIAR:
48
+ - Escolha de nome de variável
49
+ - Implementação seguindo padrão já definido
50
+ - Bug fix
51
+ - Refactor sem mudança de interface
52
+
53
+ =============================================================================
54
+ -->
55
+
56
+ ## Índice
57
+
58
+ | ADR | Título | Status | Data |
59
+ |-----|--------|--------|------|
60
+ | ADR-001 | {{Título}} | proposta / aceita / substituída / descartada | |
61
+
62
+ ## Formato
63
+
64
+ Cada decisão segue este modelo:
65
+
66
+ ```markdown
67
+ ### ADR-NNN: Título da Decisão
68
+ - **Status**: proposta | aceita | substituída por ADR-XXX | descartada
69
+ - **Data**: YYYY-MM-DD
70
+ - **Contexto**: Por que essa decisão foi necessária?
71
+ - **Decisão**: O que decidimos?
72
+ - **Alternativas consideradas**:
73
+ 1. Alternativa A — rejeitada porque...
74
+ 2. Alternativa B — rejeitada porque...
75
+ - **Consequências**:
76
+ - Positivas: ...
77
+ - Negativas: ...
78
+ - Riscos: ...
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Decisões
84
+
85
+ ### ADR-001: {{Título}}
86
+ - **Status**: aceita
87
+ - **Data**:
88
+ - **Contexto**:
89
+ - **Decisão**:
90
+ - **Alternativas consideradas**:
91
+ 1. —
92
+ - **Consequências**:
93
+ - Positivas:
94
+ - Negativas:
95
+ - Riscos:
96
+
97
+ ---
98
+
99
+ > **Regra**: Decisões aceitas são imutáveis. Para reverter, criar nova decisão com status "substituída por ADR-XXX" na original.
100
+
101
+ ---
102
+
103
+ ## Changelog
104
+
105
+ | Data | Feature | Tipo | Descrição |
106
+ |------|---------|------|-----------|
107
+ | | | | |
@@ -1,160 +1,161 @@
1
- # Domínio
2
-
3
- > Visão de negócio + modelo de dados.
4
- > O que o sistema é, quem usa, com o que integra, quais entidades existem e como se relacionam.
5
-
6
- ---
7
-
8
- <!--
9
- =============================================================================
10
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
- =============================================================================
12
-
13
- PAPEL: Síntese da visão de negócio + modelo de dados cross-feature.
14
- Onboarding responde: "o que este sistema é? quem usa? com o que integra? quais tabelas existem?"
15
- Modelo de dados detalhado por feature vive no SDD §6 do scope; aqui é o consolidado.
16
-
17
- ORIGEM (first-run, via /sf-design):
18
- - PRD §1 Contexto + §2 Atores + §8 Integrações → "O que é este sistema" + "Usuários" + "Integrações"
19
- - SDD §6 §Área-DB (do setup) → "Modelo de Dados" (diagrama ER, catálogo, convenções)
20
- - SDD §3.2 Arquitetura (integrações listadas em containers) → complementa Integrações
21
-
22
- ATUALIZAÇÃO (feature): /sf-merge-docs aplica SDD §11 ADDED/MODIFIED/REMOVED
23
- quando feature adiciona/altera tabelas, entidades, atores, integrações externas
24
- ou termos de domínio. Catálogo de tabelas cresce; glossário expande.
25
-
26
- COMO GERAR (first-run):
27
- 1. Ler PRD §1 + §2 + §8 — contexto, atores, integrações (se PRD não-empty)
28
- 2. Ler SDD §6 §Área-DBtabelas iniciais, convenções de nomenclatura
29
- 3. Ler SDD §3.2 Arquiteturaintegrações que aparecem como containers/serviços
30
- 4. Descrever o sistema em 2-3 frases objetivas (O QUE, PARA QUEM, QUAL PROBLEMA)
31
- 5. Listar TODOS os atores com permissões gerais (o que PODE e o que NÃO pode)
32
- 6. Listar TODAS as integrações externas com direção explícita
33
- 7. Gerar diagrama ER textual com TODAS as relações
34
- 8. Catálogo de tabelas com tipos EXATOS do banco (varchar(255), não "string")
35
- 9. Glossário (DDD ubiquitous language) é obrigatório
36
- 10. Se PRD empty (bootstrap puro-técnico): atores e integrações podem ficar vazios
37
- preencher o que vier do SDD
38
-
39
- O QUE NÃO VAI AQUI:
40
- - Roadmap de módulos → vive no backlog faseado, não no Estrutura
41
- - Containers, stack, deployarchitecture.md
42
- - Autorização, LGPD, auditoriaconventions.md
43
-
44
- REGRAS:
45
- - Atores devem ter permissões gerais claras
46
- - Integrações devem ter direção explícita (envia/recebe/ambos)
47
- - Toda FK define ON DELETE/ON UPDATE
48
- - Índices precisam de justificativa (query que justifica)
49
- - Convenções de nomenclatura são LEI — SDDs seguem à risca
50
- - Glossário não é opcionaltermos ambíguos geram bugs
51
-
52
- =============================================================================
53
- -->
54
-
55
- ## O que é este sistema?
56
-
57
- <!-- Descrição em 2-3 frases. O que ele faz, para quem, qual problema resolve. -->
58
-
59
-
60
- ## Usuários e Papéis
61
-
62
- | Papel | O que faz | O que NÃO pode fazer | Nível de acesso |
63
- |-------|-----------|----------------------|-----------------|
64
- | | | | |
65
-
66
- ## Integrações Externas
67
-
68
- | Sistema/Serviço | Tipo (API/Webhook/Arquivo/Fila) | Direção (Envia/Recebe/Ambos) | Descrição | SLA/Disponibilidade |
69
- |-----------------|--------------------------------|------------------------------|-----------|---------------------|
70
- | | | | | |
71
-
72
- ## Restrições e Premissas
73
-
74
- ### Restrições técnicas
75
- -
76
-
77
- ### Restrições de negócio
78
- -
79
-
80
- ### Premissas
81
- -
82
-
83
- ## Glossário
84
-
85
- > Termos do domínio usados em todo o projeto. Linguagem ubíqua (DDD).
86
-
87
- | Termo | Definição | Exemplo de uso |
88
- |-------|-----------|----------------|
89
- | | | |
90
-
91
- ## Modelo de Dados
92
-
93
- ### Diagrama ER
94
-
95
- ```
96
- <!-- Representação textual do ER -->
97
- <!-- Formato: [tabela_a] 1---N [tabela_b] (campo_fk) -->
98
- ```
99
-
100
- ### Convenções de Nomenclatura
101
-
102
- | Elemento | Convenção | Exemplo |
103
- |----------|-----------|---------|
104
- | Tabelas | snake_case, plural | `clientes`, `pedidos` |
105
- | Colunas | snake_case | `nome_completo`, `criado_em` |
106
- | PKs | `id` (UUID ou SERIAL) | `id UUID PRIMARY KEY DEFAULT gen_random_uuid()` |
107
- | FKs | `{tabela_singular}_id` | `cliente_id`, `cidade_id` |
108
- | Índices | `idx_{tabela}_{colunas}` | `idx_clientes_cpf` |
109
- | Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
110
- | Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
111
- | Soft delete | `ativo` (boolean) | `ativo BOOLEAN DEFAULT true` |
112
- | Auditoria | `criado_por`, `atualizado_por` | `UUID REFERENCES usuarios(id)` |
113
-
114
- ### Catálogo de Tabelas
115
-
116
- <!-- Repetir bloco para cada tabela -->
117
-
118
- #### {{tabela}}
119
-
120
- > Descrição breve da tabela.
121
-
122
- | Coluna | Tipo | Nullable | Default | Constraint | Descrição |
123
- |--------|------|----------|---------|------------|-----------|
124
- | | | | | | |
125
-
126
- **Relações:**
127
- - `campo_id` → `tabela_ref(id)` — ON DELETE CASCADE / SET NULL / RESTRICT
128
-
129
- **Índices:**
130
-
131
- | Nome | Colunas | Tipo | Justificativa |
132
- |------|---------|------|---------------|
133
- | | | btree / unique / gin | <!-- Qual query justifica este índice? --> |
134
-
135
- ### Estratégia de Migrations
136
-
137
- | Aspecto | Convenção |
138
- |---------|-----------|
139
- | Ferramenta | <!-- Ex: knex, prisma, flyway, alembic, EF Core --> |
140
- | Nomenclatura | <!-- Ex: 001_create_tabela.sql, YYYYMMDD_descricao --> |
141
- | Rollback | <!-- Toda migration TEM rollback? Testado como? --> |
142
- | Execução | <!-- Sequencial? Transacional? --> |
143
- | Dados existentes | <!-- Como lidar com migrations em tabelas com dados? --> |
144
-
145
- ### Regras Globais de Dados
146
-
147
- | Regra | Descrição |
148
- |-------|-----------|
149
- | Soft delete | <!-- Todas as tabelas usam? Quais exceções? --> |
150
- | Auditoria | <!-- criado_por/atualizado_por em todas? --> |
151
- | Timestamps | <!-- criado_em/atualizado_em obrigatórios? --> |
152
- | Encoding | <!-- UTF-8? Collation? --> |
153
-
154
- ---
155
-
156
- ## Changelog
157
-
158
- | Data | Feature | Tipo | Descrição |
159
- |------|---------|------|-----------|
160
- | | | | |
1
+ # Domínio
2
+
3
+ > Visão de negócio + modelo de dados.
4
+ > O que o sistema é, quem usa, com o que integra, quais entidades existem e como se relacionam.
5
+
6
+ ---
7
+
8
+ <!--
9
+ =============================================================================
10
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
+ =============================================================================
12
+
13
+ PAPEL: Síntese da visão de negócio + modelo de dados cross-feature.
14
+ Onboarding responde: "o que este sistema é? quem usa? com o que integra? quais tabelas existem?"
15
+ Modelo de dados detalhado por feature vive no TRD §4 §Área-DB do scope; aqui é o consolidado.
16
+
17
+ ORIGEM (first-run, via /sf-design):
18
+ - PRD §1 Contexto + §2 Atores + §8 Integrações → "O que é este sistema" + "Usuários" + "Integrações"
19
+ - TRD §4 §Área-DB (do setup) → "Modelo de Dados" (diagrama ER, catálogo, convenções)
20
+ - TRD §1.2 Arquitetura (integrações listadas em containers) + §6 Integrações Externas → complementa Integrações
21
+
22
+ ATUALIZAÇÃO (feature): /sf-merge-docs faz diff semântico PRD+TRD ↔ docs/
23
+ e aplica ADDED/MODIFIED/REMOVED quando feature adiciona/altera tabelas,
24
+ entidades, atores, integrações externas ou termos de domínio. Catálogo
25
+ de tabelas cresce; glossário expande.
26
+
27
+ COMO GERAR (first-run):
28
+ 1. Ler PRD §1 + §2 + §8 contexto, atores, integrações (se PRD existe)
29
+ 2. Ler TRD §4 §Área-DBtabelas iniciais, convenções de nomenclatura
30
+ 3. Ler TRD §1.2 Arquitetura + §6 Integrações Externas containers/serviços e integrações
31
+ 4. Descrever o sistema em 2-3 frases objetivas (O QUE, PARA QUEM, QUAL PROBLEMA)
32
+ 5. Listar TODOS os atores com permissões gerais (o que PODE e o que NÃO pode)
33
+ 6. Listar TODAS as integrações externas com direção explícita
34
+ 7. Gerar diagrama ER textual com TODAS as relações
35
+ 8. Catálogo de tabelas com tipos EXATOS do banco (varchar(255), não "string")
36
+ 9. Glossário (DDD ubiquitous language) é obrigatório
37
+ 10. Se PRD ausente (bootstrap puro-técnico): atores e integrações podem ficar vazios
38
+ — preencher só o que vier do TRD
39
+
40
+ O QUE NÃO VAI AQUI:
41
+ - Roadmap de módulosvive no backlog faseado, não no Estrutura
42
+ - Containers, stack, deployarchitecture.md
43
+ - Autorização, LGPD, auditoria → conventions.md
44
+
45
+ REGRAS:
46
+ - Atores devem ter permissões gerais claras
47
+ - Integrações devem ter direção explícita (envia/recebe/ambos)
48
+ - Toda FK define ON DELETE/ON UPDATE
49
+ - Índices precisam de justificativa (query que justifica)
50
+ - Convenções de nomenclatura são LEI TRDs seguem à risca
51
+ - Glossário não é opcional — termos ambíguos geram bugs
52
+
53
+ =============================================================================
54
+ -->
55
+
56
+ ## O que é este sistema?
57
+
58
+ <!-- Descrição em 2-3 frases. O que ele faz, para quem, qual problema resolve. -->
59
+
60
+
61
+ ## Usuários e Papéis
62
+
63
+ | Papel | O que faz | O que NÃO pode fazer | Nível de acesso |
64
+ |-------|-----------|----------------------|-----------------|
65
+ | | | | |
66
+
67
+ ## Integrações Externas
68
+
69
+ | Sistema/Serviço | Tipo (API/Webhook/Arquivo/Fila) | Direção (Envia/Recebe/Ambos) | Descrição | SLA/Disponibilidade |
70
+ |-----------------|--------------------------------|------------------------------|-----------|---------------------|
71
+ | | | | | |
72
+
73
+ ## Restrições e Premissas
74
+
75
+ ### Restrições técnicas
76
+ -
77
+
78
+ ### Restrições de negócio
79
+ -
80
+
81
+ ### Premissas
82
+ -
83
+
84
+ ## Glossário
85
+
86
+ > Termos do domínio usados em todo o projeto. Linguagem ubíqua (DDD).
87
+
88
+ | Termo | Definição | Exemplo de uso |
89
+ |-------|-----------|----------------|
90
+ | | | |
91
+
92
+ ## Modelo de Dados
93
+
94
+ ### Diagrama ER
95
+
96
+ ```
97
+ <!-- Representação textual do ER -->
98
+ <!-- Formato: [tabela_a] 1---N [tabela_b] (campo_fk) -->
99
+ ```
100
+
101
+ ### Convenções de Nomenclatura
102
+
103
+ | Elemento | Convenção | Exemplo |
104
+ |----------|-----------|---------|
105
+ | Tabelas | snake_case, plural | `clientes`, `pedidos` |
106
+ | Colunas | snake_case | `nome_completo`, `criado_em` |
107
+ | PKs | `id` (UUID ou SERIAL) | `id UUID PRIMARY KEY DEFAULT gen_random_uuid()` |
108
+ | FKs | `{tabela_singular}_id` | `cliente_id`, `cidade_id` |
109
+ | Índices | `idx_{tabela}_{colunas}` | `idx_clientes_cpf` |
110
+ | Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
111
+ | Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
112
+ | Soft delete | `ativo` (boolean) | `ativo BOOLEAN DEFAULT true` |
113
+ | Auditoria | `criado_por`, `atualizado_por` | `UUID REFERENCES usuarios(id)` |
114
+
115
+ ### Catálogo de Tabelas
116
+
117
+ <!-- Repetir bloco para cada tabela -->
118
+
119
+ #### {{tabela}}
120
+
121
+ > Descrição breve da tabela.
122
+
123
+ | Coluna | Tipo | Nullable | Default | Constraint | Descrição |
124
+ |--------|------|----------|---------|------------|-----------|
125
+ | | | | | | |
126
+
127
+ **Relações:**
128
+ - `campo_id` → `tabela_ref(id)` — ON DELETE CASCADE / SET NULL / RESTRICT
129
+
130
+ **Índices:**
131
+
132
+ | Nome | Colunas | Tipo | Justificativa |
133
+ |------|---------|------|---------------|
134
+ | | | btree / unique / gin | <!-- Qual query justifica este índice? --> |
135
+
136
+ ### Estratégia de Migrations
137
+
138
+ | Aspecto | Convenção |
139
+ |---------|-----------|
140
+ | Ferramenta | <!-- Ex: knex, prisma, flyway, alembic, EF Core --> |
141
+ | Nomenclatura | <!-- Ex: 001_create_tabela.sql, YYYYMMDD_descricao --> |
142
+ | Rollback | <!-- Toda migration TEM rollback? Testado como? --> |
143
+ | Execução | <!-- Sequencial? Transacional? --> |
144
+ | Dados existentes | <!-- Como lidar com migrations em tabelas com dados? --> |
145
+
146
+ ### Regras Globais de Dados
147
+
148
+ | Regra | Descrição |
149
+ |-------|-----------|
150
+ | Soft delete | <!-- Todas as tabelas usam? Quais exceções? --> |
151
+ | Auditoria | <!-- criado_por/atualizado_por em todas? --> |
152
+ | Timestamps | <!-- criado_em/atualizado_em obrigatórios? --> |
153
+ | Encoding | <!-- UTF-8? Collation? --> |
154
+
155
+ ---
156
+
157
+ ## Changelog
158
+
159
+ | Data | Feature | Tipo | Descrição |
160
+ |------|---------|------|-----------|
161
+ | | | | |