specifica-br 1.2.2 → 1.5.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 (46) hide show
  1. package/README.md +114 -44
  2. package/dist/boilerplate/commands/executar-task.md +133 -0
  3. package/dist/boilerplate/commands/gerar-contexto.md +1462 -0
  4. package/dist/boilerplate/commands/gerar-prd.md +289 -0
  5. package/dist/boilerplate/commands/gerar-tasks.md +168 -0
  6. package/dist/boilerplate/commands/gerar-techspec.md +1467 -0
  7. package/dist/boilerplate/commands/gerar-visao.md +731 -0
  8. package/dist/boilerplate/commands/realizar-codereview.md +288 -0
  9. package/dist/boilerplate/opencode-commands/executar-task.md +55 -48
  10. package/dist/boilerplate/opencode-commands/gerar-contexto.md +1462 -0
  11. package/dist/boilerplate/opencode-commands/gerar-prd.md +232 -40
  12. package/dist/boilerplate/opencode-commands/gerar-tasks.md +112 -31
  13. package/dist/boilerplate/opencode-commands/gerar-techspec.md +1464 -80
  14. package/dist/boilerplate/opencode-commands/gerar-visao.md +731 -0
  15. package/dist/boilerplate/opencode-commands/realizar-codereview.md +288 -0
  16. package/dist/boilerplate/skills/product-manager/SKILL.md +32 -0
  17. package/dist/boilerplate/skills/techspec-generator/SKILL.md +489 -0
  18. package/dist/boilerplate/skills/techspec-generator/references/api-contracts.md +421 -0
  19. package/dist/boilerplate/skills/techspec-generator/references/architecture-patterns.md +316 -0
  20. package/dist/boilerplate/skills/techspec-generator/references/database-modeling.md +436 -0
  21. package/dist/boilerplate/skills/techspec-generator/references/observability-testing.md +436 -0
  22. package/dist/boilerplate/skills/techspec-generator/references/security-hardening.md +238 -0
  23. package/dist/boilerplate/skills/techspec-generator/references/ux-ui-accessibility.md +511 -0
  24. package/dist/boilerplate/specs-templates/architecture-template.md +736 -0
  25. package/dist/boilerplate/specs-templates/codereview-template.md +95 -0
  26. package/dist/boilerplate/specs-templates/prd-template.md +101 -19
  27. package/dist/boilerplate/specs-templates/product_vision-template.md +284 -0
  28. package/dist/boilerplate/specs-templates/task-template.md +64 -18
  29. package/dist/boilerplate/specs-templates/tasks-template.md +12 -4
  30. package/dist/boilerplate/specs-templates/techspec-template.md +1227 -89
  31. package/dist/boilerplate/templates/architecture-template.md +736 -0
  32. package/dist/boilerplate/templates/codereview-template.md +95 -0
  33. package/dist/boilerplate/templates/prd-template.md +167 -0
  34. package/dist/boilerplate/templates/product_vision-template.md +284 -0
  35. package/dist/boilerplate/templates/task-template.md +169 -0
  36. package/dist/boilerplate/templates/tasks-template.md +15 -0
  37. package/dist/boilerplate/templates/techspec-template.md +1306 -0
  38. package/dist/commands/help.js +33 -11
  39. package/dist/commands/init.js +39 -43
  40. package/dist/tools-mapping.json +32 -0
  41. package/dist/types/init.d.ts +14 -17
  42. package/dist/utils/file-service.d.ts +5 -3
  43. package/dist/utils/file-service.js +168 -56
  44. package/dist/utils/message-formatter.d.ts +2 -1
  45. package/dist/utils/message-formatter.js +39 -22
  46. package/package.json +1 -1
@@ -0,0 +1,436 @@
1
+ # Observabilidade e Testes
2
+
3
+ Referência técnica para logging, métricas, tracing e estratégia de testes ao gerar Tech Specs.
4
+
5
+ ## Sumário
6
+
7
+ 1. [Logging Estruturado](#1-logging-estruturado)
8
+ 2. [Métricas](#2-metricas)
9
+ 3. [Distributed Tracing](#3-distributed-tracing)
10
+ 4. [Estratégia de Testes](#4-estrategia-de-testes)
11
+ 5. [Testes por Camada](#5-testes-por-camada)
12
+ 6. [Dados de Teste](#6-dados-de-teste)
13
+ 7. [Checklist de Observabilidade](#7-checklist-de-observabilidade)
14
+ 8. [Checklist de Testes](#8-checklist-de-testes)
15
+
16
+ ---
17
+
18
+ ## 1. Logging Estruturado
19
+
20
+ ### 1.1. Níveis de Log
21
+
22
+ | Nível | Quando usar | Exemplo |
23
+ |:---|:---|:---|
24
+ | **ERROR** | Falha que afeta o usuário ou dados | Pagamento rejeitado, DB indisponível |
25
+ | **WARN** | Situação inesperada, recuperável | Retry com sucesso, estoque baixo |
26
+ | **INFO** | Evento de negócio significativo | Pedido criado, usuário registrado |
27
+ | **DEBUG** | Informação de depuração (desligar em prod) | Query executada, payload recebido |
28
+
29
+ ### 1.2. Contexto Obrigatório
30
+
31
+ Todo log deve incluir:
32
+ ```
33
+ {
34
+ "timestamp": "2024-03-01T10:00:00.000Z",
35
+ "level": "INFO",
36
+ "message": "Order created successfully",
37
+ "context": {
38
+ "orderId": "uuid",
39
+ "customerId": "uuid",
40
+ "totalAmount": 99.99,
41
+ "correlationId": "uuid"
42
+ },
43
+ "service": "order-service",
44
+ "environment": "production",
45
+ "version": "1.2.0"
46
+ }
47
+ ```
48
+
49
+ ### 1.3. Padrões de Log por Evento
50
+
51
+ **Criação de recurso (sucesso):**
52
+ ```
53
+ Level: INFO
54
+ Message: "Order created successfully"
55
+ Context: { orderId, customerId, totalAmount, itemCount, correlationId }
56
+ ```
57
+
58
+ **Falha de processamento:**
59
+ ```
60
+ Level: ERROR
61
+ Message: "Payment processing failed"
62
+ Context: { orderId, paymentId, errorCode, errorMessage, correlationId }
63
+ NUNCA: { creditCardNumber, cvv, password }
64
+ ```
65
+
66
+ **Retry:**
67
+ ```
68
+ Level: WARN
69
+ Message: "Retrying payment processing (attempt 2/3)"
70
+ Context: { orderId, attempt, backoffMs, correlationId }
71
+ ```
72
+
73
+ **Performance:**
74
+ ```
75
+ Level: INFO
76
+ Message: "Slow query detected"
77
+ Context: { query, durationMs, threshold, correlationId }
78
+ ```
79
+
80
+ ### 1.4. Dados Sensíveis - NUNCA Logar
81
+
82
+ | Dado | Log como | Exemplo |
83
+ |:---|:---|:---|
84
+ | Password | NÃO logar | - |
85
+ | Token JWT | NÃO logar | - |
86
+ | CPF | Mascaraar | "***.***.***-**" |
87
+ | Email | Mascarar | "j***@example.com" |
88
+ | Cartão | NÃO logar | - |
89
+ | API Key | NÃO logar | - |
90
+
91
+ ---
92
+
93
+ ## 2. Métricas
94
+
95
+ ### 2.1. Frameworks RED e USE
96
+
97
+ **RED (para services/requests):**
98
+ | Métrica | Tipo | Descrição |
99
+ |:---|:---|:---|
100
+ | **Rate** | Counter | Requests por segundo |
101
+ | **Errors** | Counter | Taxa de erros |
102
+ | **Duration** | Histogram | Distribuição de latência |
103
+
104
+ **USE (para recursos):**
105
+ | Métrica | Tipo | Descrição |
106
+ |:---|:---|:---|
107
+ | **Utilization** | Gauge | % de uso do recurso |
108
+ | **Saturation** | Gauge | Fila/espera do recurso |
109
+ | **Errors** | Counter | Erros do recurso |
110
+
111
+ ### 2.2. Métricas por Feature
112
+
113
+ **Para APIs/Endpoints:**
114
+ ```
115
+ - orders_created_total (Counter): Total de pedidos criados
116
+ - orders_failed_total (Counter): Total de pedidos que falharam (by reason)
117
+ - order_creation_duration_seconds (Histogram): Tempo de criação do pedido
118
+ - order_amount_histogram (Histogram): Distribuição de valores de pedidos
119
+ ```
120
+
121
+ **Para Processamento Assíncrono:**
122
+ ```
123
+ - payment_processing_duration_seconds (Histogram): Tempo de processamento
124
+ - payment_queue_depth (Gauge): Mensagens na fila de pagamento
125
+ - payment_retry_total (Counter): Total de retries de pagamento
126
+ - payment_dead_letter_total (Counter): Mensagens na dead letter queue
127
+ ```
128
+
129
+ **Para Banco de Dados:**
130
+ ```
131
+ - db_query_duration_seconds (Histogram): Tempo de queries (by operation)
132
+ - db_connection_pool_active (Gauge): Conexões ativas
133
+ - db_connection_pool_idle (Gauge): Conexões idle
134
+ - db_query_errors_total (Counter): Erros de query (by type)
135
+ ```
136
+
137
+ ### 2.3. Nomenclatura
138
+
139
+ **Formato:** `{namespace}_{subsystem}_{metric_name}_{unit}`
140
+
141
+ ```
142
+ orders_creation_duration_seconds
143
+ payments_processing_errors_total
144
+ inventory_stock_level_current
145
+ ```
146
+
147
+ **Labels úteis:**
148
+ ```
149
+ orders_created_total{ status="success" | "failed" }
150
+ payment_duration_seconds{ gateway="stripe" | "pagarme" }
151
+ api_request_duration_seconds{ method="GET", path="/api/v1/orders", status="200" }
152
+ ```
153
+
154
+ ### 2.4. Alertas
155
+
156
+ Na TechSpec, definir alertas críticos:
157
+
158
+ ```
159
+ Alertas:
160
+ - Error rate > 5% por 5 minutos → PagerDuty (critical)
161
+ - Latência p99 > 2s por 5 minutos → Slack (warning)
162
+ - Queue depth > 1000 por 10 minutos → Slack (warning)
163
+ - DB connection pool > 80% → Slack (warning)
164
+ - Payment success rate < 95% → PagerDuty (critical)
165
+ ```
166
+
167
+ ---
168
+
169
+ ## 3. Distributed Tracing
170
+
171
+ ### 3.1. Correlation ID
172
+
173
+ **Obrigatório para:**
174
+ - Todas as APIs (inbound request → response)
175
+ - Todas as mensagens/events (publish → consume)
176
+ - Todas as chamadas a serviços externos
177
+ - Todos os logs
178
+
179
+ **Implementação:**
180
+ ```
181
+ 1. Gerar correlationId no entry point (API gateway / controller)
182
+ 2. Propagar via header: X-Request-Id ou X-Correlation-Id
183
+ 3. Incluir em todos os logs
184
+ 4. Incluir em respostas de erro (para suporte)
185
+ 5. Propagar para mensagens/events
186
+ 6. Propagar para chamadas externas
187
+ ```
188
+
189
+ ### 3.2. Na TechSpec
190
+
191
+ ```
192
+ Tracing:
193
+ - Correlation ID: UUID v4 gerado no controller/middleware
194
+ - Header: X-Request-Id (inbound), X-Correlation-Id (outbound)
195
+ - Propagação: Todos os logs, eventos, chamadas externas
196
+ - Error response: Incluir requestId no body (para suporte)
197
+ - Framework: OpenTelemetry (se configurado) ou manual
198
+
199
+ Span Tree (exemplo para criação de pedido):
200
+ [API] POST /orders (correlationId: uuid)
201
+ → [Application] CreateOrderHandler
202
+ → [Infrastructure] OrderRepository.AddAsync
203
+ → [Infrastructure] ProductRepository.ValidateStock
204
+ → [Infrastructure] EventBus.Publish(OrderCreated)
205
+ → [API] Response 201
206
+ ```
207
+
208
+ ---
209
+
210
+ ## 4. Estratégia de Testes
211
+
212
+ ### 4.1. Pirâmide de Testes
213
+
214
+ ```
215
+ / E2E \ Poucos, lentos, caros
216
+ /Integration \ Alguns, médios
217
+ / Unit Tests \ Muitos, rápidos, baratos
218
+ ```
219
+
220
+ | Tipo | Quantidade | Velocidade | Custo | O que testa |
221
+ |:---|:---|:---|:---|:---|
222
+ | **Unit** | 70% | < 100ms | Baixo | Lógica isolada (entities, handlers, validators) |
223
+ | **Integration** | 20% | < 5s | Médio | Repositories, serviços com DB real |
224
+ | **E2E** | 10% | < 30s | Alto | Fluxos completos (API → DB → Response) |
225
+
226
+ ### 4.2. Cobertura por Criticidade
227
+
228
+ | Criticidade | Coverage Mínimo | O que é obrigatório |
229
+ |:---|:---|:---|
230
+ | **Crítica** (pagamento, auth) | 90% | Unit + Integration + E2E |
231
+ | **Alta** (CRUD principal) | 80% | Unit + Integration |
232
+ | **Média** (listagens, filtros) | 70% | Unit + alguns Integration |
233
+ | **Baixa** (utils, helpers) | 60% | Unit |
234
+
235
+ ---
236
+
237
+ ## 5. Testes por Camada
238
+
239
+ ### 5.1. Domain (Unit)
240
+
241
+ **O que testar:**
242
+ - Entidades: criação com dados válidos, rejeição de dados inválidos, invariantes
243
+ - Value Objects: igualdade, imutabilidade, validação
244
+ - Domain Services: lógica complexa de negócio
245
+
246
+ **Exemplo de especificação:**
247
+ ```
248
+ Testes de Domínio:
249
+ - Order.Create() com items válidos → sucesso
250
+ - Order.Create() sem items → DomainException
251
+ - Order.Total com múltiplos items → soma correta
252
+ - Order.Cancel() quando PENDING → sucesso
253
+ - Order.Cancel() quando PAID → DomainException
254
+ - Money.Add() com valores negativos → DomainException
255
+ ```
256
+
257
+ ### 5.2. Application (Unit)
258
+
259
+ **O que testar:**
260
+ - Handlers: fluxo principal, casos de erro, validações
261
+ - Validators: regras de validação de input
262
+ - DTOs: mapeamento correto
263
+
264
+ **Exemplo:**
265
+ ```
266
+ Testes de Application:
267
+ - CreateOrderHandler com request válido → Order criado + evento publicado
268
+ - CreateOrderHandler com produto inexistente → ProductNotFoundException
269
+ - CreateOrderHandler com estoque insuficiente → InsufficientStockException
270
+ - CreateOrderValidator sem items → ValidationError em items
271
+ - CreateOrderValidator com quantity <= 0 → ValidationError em quantity
272
+ - CreateOrderValidator com total > 10000 → status REVIEW_PENDING
273
+ ```
274
+
275
+ **Padrão AAA (Arrange-Act-Assert):**
276
+ ```
277
+ Test: CreateOrder_Should_CreateOrder_When_ValidRequest
278
+ Arrange:
279
+ - Mock IOrderRepository.Setup(AddAsync) → returns void
280
+ - Mock IProductRepository.Setup(GetByIdAsync) → returns Product
281
+ - Mock IEventBus.Setup(PublishAsync) → returns void
282
+ - Command = valid CreateOrderCommand
283
+ Act:
284
+ - Result = handler.Handle(command)
285
+ Assert:
286
+ - Result.IsSuccess == true
287
+ - Result.Value.OrderId != empty
288
+ - IOrderRepository.Verify(AddAsync, Called.Once)
289
+ - IEventBus.Verify(PublishAsync, Called.Once)
290
+ ```
291
+
292
+ ### 5.3. Infrastructure (Integration)
293
+
294
+ **O que testar:**
295
+ - Repositories: CRUD com banco real (ou container)
296
+ - External services: integração com APIs (usando mocks de HTTP)
297
+ - Migrations: schema válido
298
+
299
+ **Setup necessário:**
300
+ ```
301
+ Integration Tests:
302
+ - Database: PostgreSQL container (TestContainers)
303
+ - Seed: dados mínimos para testes
304
+ - Transaction: cada teste em transaction com rollback
305
+ - Cleanup: truncar tabelas após cada teste (ou transaction rollback)
306
+ ```
307
+
308
+ **Exemplo:**
309
+ ```
310
+ Testes de Infrastructure:
311
+ - OrderRepository.AddAsync → persiste no banco
312
+ - OrderRepository.GetByIdAsync → retorna Order com Items
313
+ - OrderRepository.GetByCustomerIdAsync → retorna lista paginada
314
+ - OrderRepository.UpdateAsync → atualiza status
315
+ - OrderRepository com optimistic locking → lança ConcurrencyException
316
+ ```
317
+
318
+ ### 5.4. Interface (E2E / Integration)
319
+
320
+ **O que testar:**
321
+ - Endpoints: status codes, headers, response body
322
+ - Auth: token ausente/inválido/expirado
323
+ - Fluxos: criar → buscar → atualizar → deletar
324
+
325
+ **Exemplo:**
326
+ ```
327
+ Testes E2E (API):
328
+ - POST /api/v1/orders com token válido → 201 + order body
329
+ - POST /api/v1/orders sem token → 401
330
+ - POST /api/v1/orders com token de outro user → 403
331
+ - POST /api/v1/orders com body inválido → 400 + validation errors
332
+ - GET /api/v1/orders/{id} → 200 + order
333
+ - GET /api/v1/orders/{id} com id inexistente → 404
334
+ - DELETE /api/v1/orders/{id} com status PENDING → 204
335
+ - DELETE /api/v1/orders/{id} com status PAID → 409
336
+ ```
337
+
338
+ ---
339
+
340
+ ## 6. Dados de Teste
341
+
342
+ ### 6.1. Factories
343
+
344
+ ```
345
+ Test Data Factory: OrderFactory
346
+ Métodos:
347
+ - create(partial?): Order → cria Order com dados válidos padrão
348
+ - withItems(count): Order → cria Order com N items
349
+ - pending(): Order → status PENDING
350
+ - paid(): Order → status PAID
351
+ - cancelled(): Order → status CANCELLED
352
+
353
+ Exemplo:
354
+ const order = OrderFactory.create({ customerId: 'specific-uuid' });
355
+ const pendingOrder = OrderFactory.pending().withItems(3);
356
+ ```
357
+
358
+ ### 6.2. Fixtures
359
+
360
+ ```
361
+ Seed de teste:
362
+ - 1 User ADMIN (admin@test.com)
363
+ - 1 User CUSTOMER (customer@test.com)
364
+ - 5 Products (disponíveis)
365
+ - 3 Orders (PENDING, PAID, CANCELLED)
366
+
367
+ Load: antes de cada suite de integration tests
368
+ Cleanup: após cada suite
369
+ ```
370
+
371
+ ### 6.3. Fakes vs Mocks
372
+
373
+ | Tipo | Quando usar | Exemplo |
374
+ |:---|:---|:---|
375
+ | **Fake** | Implementação simplificada que funciona | InMemoryOrderRepository para unit tests |
376
+ | **Mock** | Verificar comportamento (chamadas) | Mock<IOrderRepository> com Setup/Verify |
377
+ | **Stub** | Retornar dados fixos | Stub<IProductService>.GetPrice → 99.99 |
378
+
379
+ ---
380
+
381
+ ## 7. Checklist de Observabilidade
382
+
383
+ Antes de finalizar a seção de observabilidade na TechSpec, verificar:
384
+
385
+ ### Logging
386
+ - [ ] Eventos de negócio logados (INFO)
387
+ - [ ] Erros com contexto suficiente (ERROR)
388
+ - [ ] Retries e warnings documentados (WARN)
389
+ - [ ] NENHUM dado sensível nos logs
390
+ - [ ] Correlation ID em todos os logs
391
+ - [ ] Formato estruturado (JSON)
392
+ - [ ] Framework de logging especificado (Winston, Serilog, Pino)
393
+
394
+ ### Métricas
395
+ - [ ] Contadores para eventos de negócio (created, failed)
396
+ - [ ] Histogramas para latência (duration_seconds)
397
+ - [ ] Gauges para estado atual (queue depth, connections)
398
+ - [ ] Labels para segmentação (status, method, path)
399
+ - [ ] Alertas críticos definidos
400
+
401
+ ### Tracing
402
+ - [ ] Correlation ID gerado no entry point
403
+ - [ ] Propagação em logs, eventos e chamadas externas
404
+ - [ ] Incluído em respostas de erro
405
+ - [ ] Framework especificado (OpenTelemetry, manual)
406
+
407
+ ---
408
+
409
+ ## 8. Checklist de Testes
410
+
411
+ Antes de finalizar a seção de testes na TechSpec, verificar:
412
+
413
+ ### Estratégia
414
+ - [ ] Pirâmide de testes definida (70/20/10)
415
+ - [ ] Framework de testes especificado
416
+ - [ ] Coverage mínimo definido por criticidade
417
+ - [ ] CI pipeline inclui testes
418
+
419
+ ### Por Camada
420
+ - [ ] Domain: entidades, value objects, invariantes
421
+ - [ ] Application: handlers, validação, casos de erro
422
+ - [ ] Infrastructure: repositories com DB real (TestContainers)
423
+ - [ ] Interface: endpoints, auth, fluxos
424
+
425
+ ### Dados
426
+ - [ ] Factories para criação de dados de teste
427
+ - [ ] Fixtures para dados recorrentes
428
+ - [ ] Seed para integration tests
429
+ - [ ] Cleanup strategy definida
430
+
431
+ ### Cenários Críticos
432
+ - [ ] Happy path testado
433
+ - [ ] Cada edge case da TechSpec tem teste
434
+ - [ ] Concorrência testada (se aplicável)
435
+ - [ ] Erros de integração externa testados (timeout, retry)
436
+ - [ ] Auth/authorization testado (unauthorized, forbidden)
@@ -0,0 +1,238 @@
1
+ # Segurança e Hardening
2
+
3
+ Referência técnica para segurança ao gerar Tech Specs.
4
+
5
+ ## Sumário
6
+
7
+ 1. [OWASP Top 10 no Contexto de Specs](#1-owasp-top-10-no-contexto-de-specs)
8
+ 2. [Autenticação e Autorização](#2-autenticacao-e-autorizacao)
9
+ 3. [Proteção de Dados](#3-protecao-de-dados)
10
+ 4. [Validação de Input](#4-validacao-de-input)
11
+ 5. [Configuração de Segurança](#5-configuracao-de-seguranca)
12
+ 6. [Matriz de Segurança por Endpoint](#6-matriz-de-seguranca-por-endpoint)
13
+
14
+ ---
15
+
16
+ ## 1. OWASP Top 10 no Contexto de Specs
17
+
18
+ ### O que especificar na TechSpec para cada risco:
19
+
20
+ | # | Risco OWASP | O que documentar na TechSpec |
21
+ |:---|:---|:---|
22
+ | **A01** | Broken Access Control | Auth por endpoint, ownership checks, role-based access |
23
+ | **A02** | Cryptographic Failures | Dados sensíveis criptografados, TLS, hashing de senhas |
24
+ | **A03** | Injection | Query parametrizada, input sanitization, ORM usage |
25
+ | **A04** | Insecure Design | Threat modeling, validação em todas as camadas |
26
+ | **A05** | Security Misconfiguration | Headers de segurança, CORS, error messages sem stack trace |
27
+ | **A06** | Vulnerable Components | Verificar versões de dependências, lock files |
28
+ | **A07** | Auth Failures | Rate limiting em auth, session management, MFA |
29
+ | **A08** | Software/Data Integrity | CI/CD pipeline seguro, validação de webhooks |
30
+ | **A09** | Logging Failures | Audit logging, dados sensíveis NOS logs |
31
+ | **A10** | SSRF | Validar URLs de webhook, whitelist de serviços |
32
+
33
+ ---
34
+
35
+ ## 2. Autenticação e Autorização
36
+
37
+ ### 2.1. Padrões de Autenticação
38
+
39
+ | Padrão | Quando usar | O que especificar |
40
+ |:---|:---|:---|
41
+ | **JWT Bearer** | APIs stateless | Algoritmo (RS256), expiry, refresh token strategy |
42
+ | **OAuth2** | Login social, third-party | Provider, scopes, flow (Authorization Code) |
43
+ | **API Key** | Service-to-service | Header (X-API-Key), rotation, scope |
44
+ | **Session** | Apps web tradicionais | Cookie httpOnly, secure, sameSite |
45
+
46
+ ### 2.2. JWT - O que Especificar
47
+
48
+ ```
49
+ Authentication: JWT Bearer Token
50
+ Header: Authorization: Bearer {token}
51
+ Algoritmo: RS256 (asymmetric, recomendado) ou HS256
52
+ Expiry: 15 minutos (access token) + 7 dias (refresh token)
53
+ Issuer: auth.example.com
54
+ Audience: api.example.com
55
+ Claims: { sub: userId, role: user_role, exp: timestamp }
56
+ Refresh: POST /api/v1/auth/refresh com refresh_token no body
57
+ Blacklist: Redis para tokens revogados (TTL = expiry)
58
+ ```
59
+
60
+ ### 2.3. Autorização
61
+
62
+ **Role-Based Access Control (RBAC):**
63
+ ```
64
+ Roles: ADMIN, MANAGER, CUSTOMER
65
+
66
+ Permissions por endpoint:
67
+ | Role | POST /orders | GET /orders | DELETE /orders/{id} |
68
+ |:---|:---|:---|:---|
69
+ | ADMIN | Qualquer | Todos | Qualquer |
70
+ | MANAGER | Qualquer | Todos | Qualquer |
71
+ | CUSTOMER | Próprio | Próprios | Próprio (se PENDING) |
72
+ ```
73
+
74
+ **Ownership Check (Resource-Level):**
75
+ ```
76
+ GET /api/v1/orders/{id}:
77
+ 1. Verificar se order existe (404 se não)
78
+ 2. Verificar se user.role == ADMIN OU order.userId == user.id (403 se não)
79
+ ```
80
+
81
+ ---
82
+
83
+ ## 3. Proteção de Dados
84
+
85
+ ### 3.1. Dados Sensíveis
86
+
87
+ | Categoria | Exemplos | Tratamento |
88
+ |:---|:---|:---|
89
+ | **Credenciais** | Senhas, tokens, API keys | Hash (Argon2id/bcrypt), NUNCA logar, NUNCA retornar em API |
90
+ | **PII** | CPF, RG, endereço | Criptografia em repouso (AES-256), masking em logs |
91
+ | **Financeiro** | Cartão, conta bancária | Tokenização, PCI compliance, NUNCA armazenar completo |
92
+ | **Saúde** | Dados médicos | Criptografia forte, LGPD/HIPAA compliance |
93
+ | **Children** | Dados de menores | Consentimento parental, proteção reforçada |
94
+
95
+ ### 3.2. Criptografia
96
+
97
+ | Contexto | Algoritmo | Uso |
98
+ |:---|:---|:---|
99
+ | **Senhas (hashing)** | Argon2id (preferido) ou bcrypt (cost ≥ 12) | Armazenamento de senhas |
100
+ | **Dados em repouso** | AES-256-GCM | Campos sensíveis no banco |
101
+ | **Dados em trânsito** | TLS 1.3 (mínimo TLS 1.2) | HTTPS para todas as APIs |
102
+ | **Assinatura** | RS256 / ES256 | JWT, webhooks |
103
+ | **Chaves simétricas** | HKDF para derivação | Derivar chaves de master key |
104
+
105
+ ### 3.3. Especificação na TechSpec
106
+
107
+ ```
108
+ Dados Sensíveis:
109
+ - password: Hash com Argon2id (conforme padrão em AuthService)
110
+ - cpf: AES-256-GCM em repouso, masking em logs (***.***.***-**)
111
+ - credit_card: NÃO armazenar, usar tokenização do gateway (Stripe)
112
+ - email: Armazenado em claro, mas NÃO logar
113
+
114
+ Logs:
115
+ - NUNCA logar: password, token, credit_card, cpf completo
116
+ - SEMPRE mascarar em logs: cpf → "***.***.***-**", email → "j***@example.com"
117
+ ```
118
+
119
+ ---
120
+
121
+ ## 4. Validação de Input
122
+
123
+ ### 4.1. Estratégia por Camada
124
+
125
+ | Camada | Validação | Objetivo |
126
+ |:---|:---|:---|
127
+ | **Interface** | Schema validation (Zod, Joi, FluentValidation) | Rejeitar requests inválidos cedo |
128
+ | **Application** | Business rules validation | Garantir regras de negócio |
129
+ | **Domain** | Entity invariants | Garantir consistência do domínio |
130
+ | **Database** | Constraints (CHECK, NOT NULL, FK) | Última barreira de integridade |
131
+
132
+ ### 4.2. Sanitização
133
+
134
+ | Tipo | Risco | Prevenção |
135
+ |:---|:---|:---|
136
+ | **SQL Injection** | Acesso não autorizado ao banco | Query parametrizada (ORM prepared statements) |
137
+ | **XSS** | Execução de script no browser | Escape HTML, Content-Security-Policy, sanitize input |
138
+ | **CSV Injection** | Execução de fórmulas em Excel | Sanitizar prefixos (=, +, -, @) |
139
+ | **Path Traversal** | Acesso a arquivos do sistema | Validar paths, whitelist de diretórios |
140
+ | **Command Injection** | Execução de comandos do SO | NUNCA concatenar input em commands |
141
+
142
+ ### 4.3. Na TechSpec
143
+
144
+ ```
145
+ Validação de Input:
146
+ - Schema: Zod (conforme padrão do projeto)
147
+ - Campos de texto: trim + escape HTML
148
+ - Email: regex + verificação de formato
149
+ - UUID: validação de formato v4
150
+ - Números: min/max bounds
151
+ - Arrays: max length + item validation
152
+ - SQL: Prisma ORM com prepared statements (sem raw queries)
153
+ - Upload: whitelist de extensões, max size 5MB, magic bytes validation
154
+ ```
155
+
156
+ ---
157
+
158
+ ## 5. Configuração de Segurança
159
+
160
+ ### 5.1. HTTP Headers
161
+
162
+ ```
163
+ Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'
164
+ X-Content-Type-Options: nosniff
165
+ X-Frame-Options: DENY
166
+ X-XSS-Protection: 0 (desativar, usar CSP)
167
+ Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
168
+ Referrer-Policy: strict-origin-when-cross-origin
169
+ Permissions-Policy: camera=(), microphone=(), geolocation=()
170
+ ```
171
+
172
+ ### 5.2. CORS
173
+
174
+ ```
175
+ Origins permitidos: https://app.example.com, https://admin.example.com
176
+ Methods: GET, POST, PUT, PATCH, DELETE
177
+ Headers: Content-Type, Authorization, X-Request-Id
178
+ Credentials: true (para cookies)
179
+ Max Age: 86400 (24h)
180
+
181
+ NUNCA: Access-Control-Allow-Origin: * em produção
182
+ ```
183
+
184
+ ### 5.3. Rate Limiting
185
+
186
+ ```
187
+ Rate Limiting:
188
+ - Storage: Redis (conforme padrão do projeto)
189
+ - Key: user_id para autenticado, IP para anônimo
190
+ - Strategy: Sliding window
191
+ - Response: 429 com Retry-After header
192
+
193
+ Endpoints:
194
+ | Endpoint | Limite | Janela |
195
+ |:---|:---|:---|
196
+ | POST /auth/login | 5 req | 1 minuto por IP |
197
+ | POST /auth/refresh | 20 req | 1 minuto por user |
198
+ | POST /orders | 10 req | 1 minuto por user |
199
+ | GET /orders | 100 req | 1 minuto por user |
200
+ ```
201
+
202
+ ### 5.4. Secrets Management
203
+
204
+ ```
205
+ NUNCA:
206
+ - Hardcoded secrets no código
207
+ - Secrets em arquivos versionados (.env em .gitignore)
208
+ - Secrets em logs ou error messages
209
+
210
+ SEMPRE:
211
+ - Environment variables para configuração
212
+ - Secret Manager para produção (AWS Secrets Manager, Vault)
213
+ - Rotação de secrets planejada
214
+
215
+ Na TechSpec:
216
+ - Listar variáveis de ambiente necessárias (NOMES apenas, sem valores)
217
+ - Documentar rotación policy
218
+ - Documentar onde secrets são armazenados em cada ambiente
219
+ ```
220
+
221
+ ---
222
+
223
+ ## 6. Matriz de Segurança por Endpoint
224
+
225
+ Template para documentar segurança na TechSpec:
226
+
227
+ ```
228
+ | Endpoint | Auth | Role/Permission | Dados Sensíveis | Rate Limit | Notas |
229
+ |:---|:---|:---|:---|:---|:---|
230
+ | POST /api/v1/auth/login | Nenhum | Público | Password (transit only) | 5/min/IP | Retorna JWT |
231
+ | POST /api/v1/auth/refresh | JWT | Qualquer | Refresh token | 20/min/user | Renova access token |
232
+ | GET /api/v1/users | JWT | ADMIN | Email (masked) | 100/min/user | Listar todos |
233
+ | GET /api/v1/users/{id} | JWT | ADMIN ou owner | Email, CPF (masked) | 100/min/user | Ownership check |
234
+ | POST /api/v1/orders | JWT | CUSTOMER+ | Nenhum | 10/min/user | Idempotent key |
235
+ | GET /api/v1/orders | JWT | ADMIN=all, CUSTOMER=own | Nenhum | 100/min/user | Filtered by role |
236
+ | DELETE /api/v1/orders/{id} | JWT | ADMIN ou owner (PENDING) | Nenhum | 5/min/user | Soft delete |
237
+ | POST /api/v1/payments | JWT + Idempotency | CUSTOMER+ | Card token (Stripe) | 5/min/user | Non-retryable errors |
238
+ ```