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.
- package/README.md +252 -167
- package/bin/cli.js +70 -70
- package/lib/init.js +92 -92
- package/lib/update.js +132 -132
- package/package.json +1 -1
- package/templates/.ai/memory/napkin.md +68 -68
- package/templates/.github/CHANGELOG.md +560 -533
- package/templates/.github/adapters/SETUP.md +314 -314
- package/templates/.github/adapters/confluence.md +295 -295
- package/templates/.github/adapters/errors.md +234 -234
- package/templates/.github/adapters/filesystem.md +353 -353
- package/templates/.github/adapters/interface.md +301 -301
- package/templates/.github/adapters/naming.md +241 -241
- package/templates/.github/adapters/registry.md +244 -244
- package/templates/.github/agents/backend-coder.md +215 -215
- package/templates/.github/agents/db-coder.md +165 -165
- package/templates/.github/agents/doc-writer.md +66 -66
- package/templates/.github/agents/frontend-coder.md +222 -222
- package/templates/.github/agents/infra-coder.md +341 -341
- package/templates/.github/agents/reviewer.md +99 -99
- package/templates/.github/agents/security-reviewer.md +153 -153
- package/templates/.github/copilot-instructions.md +272 -272
- package/templates/.github/instructions/docs.instructions.md +147 -145
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
- package/templates/.github/rules.md +229 -229
- package/templates/.github/scripts/bootstrap-confluence.js +289 -289
- package/templates/.github/skills/sf-design/SKILL.md +161 -161
- package/templates/.github/skills/sf-dev/SKILL.md +204 -204
- package/templates/.github/skills/sf-discovery/SKILL.md +415 -415
- package/templates/.github/skills/sf-extract/SKILL.md +225 -225
- package/templates/.github/skills/sf-load/SKILL.md +296 -296
- package/templates/.github/skills/sf-mcp/SKILL.md +386 -386
- package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -152
- package/templates/.github/skills/sf-plan/SKILL.md +152 -152
- package/templates/.github/skills/sf-publish/SKILL.md +144 -144
- package/templates/.github/skills/sf-session-finish/SKILL.md +93 -93
- package/templates/.github/skills/sf-start/SKILL.md +192 -192
- package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
- package/templates/.github/templates/estrutura/architecture.template.md +169 -168
- package/templates/.github/templates/estrutura/conventions.template.md +214 -212
- package/templates/.github/templates/estrutura/decisions.template.md +107 -107
- package/templates/.github/templates/estrutura/domain.template.md +161 -160
- package/templates/.github/templates/feature/PRD.template.md +279 -279
- package/templates/.github/templates/feature/Progresso.template.md +141 -141
- package/templates/.github/templates/feature/TRD.template.md +358 -358
- package/templates/.github/templates/feature/context.template.md +89 -89
- package/templates/.github/templates/feature/extract-log.template.md +49 -49
- package/templates/.github/templates/feature/projetos.template.yaml +79 -79
- package/templates/.github/templates/global/progresso_global.template.md +59 -57
- package/templates/.github/templates/specs/brief.template.md +66 -66
- package/templates/.github/templates/specs/contracts.template.md +147 -147
- package/templates/.github/templates/specs/scenarios.template.md +125 -125
- package/templates/.github/templates/specs/tasks.template.md +65 -65
- package/templates/_gitignore +35 -35
- 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
|
-
-
|
|
20
|
-
auth scheme, estratégia de testes) → transcritas aqui como ADR-001, ADR-002...
|
|
21
|
-
|
|
22
|
-
ATUALIZAÇÃO (feature): /sf-merge-docs
|
|
23
|
-
introduz
|
|
24
|
-
nova dependência crítica, trade-off significativo). REMOVED nunca
|
|
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
|
|
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
|
-
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
ATUALIZAÇÃO (feature): /sf-merge-docs
|
|
23
|
-
quando feature adiciona/altera tabelas,
|
|
24
|
-
ou termos de domínio. Catálogo
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
<!--
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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-DB — tabelas 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ódulos → vive no backlog faseado, não no Estrutura
|
|
42
|
+
- Containers, stack, deploy → architecture.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
|
+
| | | | |
|