Nébula
GitHub

Engenharia

Entities

Mapeia entidades, atributos, relacionamentos e regras do domínio para reduzir ambiguidade técnica.

entities.mdMARKDOWNLeitura: 3 minSeções: 34

Entities define o modelo de domínio do projeto — as entidades, seus atributos, tipos lógicos, estados, ciclo de vida, relacionamentos e regras de negócio. É o documento que garante que arquitetura, contrato de API e implementação falem sobre os mesmos conceitos com os mesmos nomes.

Fase: 4 — Design de Sistema
Pré-requisito: Docs/user-stories.md · Docs/pages.md · Docs/flow.md aprovados
Template: Templates/Full/entities.md ou Templates/Quick/entities.md
Artefato oficial: Docs/entities.md
Próximos artefatos: Docs/architecture.md · Docs/contract.yaml


Quando criar ou revisar

  • Projeto entra na fase de Design de Sistema
  • Nova entidade de domínio identificada em user story, page ou flow
  • Contrato de API precisa ser definido ou revisado
  • Conflito de nomenclatura entre documentos
  • Mudança de regra de negócio que afeta o ciclo de vida

Full vs Quick

SituaçãoTemplate
Domínio novo com múltiplas entidades, estados e relações N:NTemplates/Full/entities.md
Feature com 1-2 entidades simples em domínio já conhecidoTemplates/Quick/entities.md
Ambiguidade de regra ou relação surgiuMigrar para Full na mesma task

Tipos de entidade reconhecidos

central       — conceito principal do domínio (ex.: Pedido, Usuário, Chamado)
apoio         — suporta entidades centrais (ex.: Endereço, Configuração)
associação    — representa relação N:N (ex.: UsuarioPerfil, ProdutoPedido)
configuração  — parametrização do sistema (ex.: Preferências, Regra)
evento        — registro de acontecimento (ex.: LogAuditoria, Notificação)
histórico     — snapshot de estado anterior (ex.: HistóricoPedido)
transacional  — operação com estado transitório (ex.: Pagamento, Transação)
catálogo      — dado de referência estável (ex.: Categoria, TipoProduto)

Estrutura — Entities Full

O template Full tem 13 seções.

1. Identificação

Nome do projeto:
Versão do documento:
Status: [rascunho | revisando | aprovado]
Documentos base: Docs/project.md, Docs/user-stories.md, Docs/pages.md, Docs/flow.md
Data de criação:
Última atualização:

2. Objetivo do Documento

Cobre: entidades do domínio, atributos e tipos lógicos, identificadores, regras, validações, relacionamentos, estados, ciclo de vida.
Não cobre: SQL final, migrations, implementação de ORM, contrato detalhado de API, arquitetura de módulos.

3. Regras Gerais de Modelagem

Princípios:
- modelar conceitos do domínio antes da estrutura técnica
- evitar duplicidade conceitual
- nomear entidades de forma clara e estável
- separar entidade de apoio de entidade central
- refletir regras reais de negócio
 
Convenções obrigatórias:
- nomes de entidades no singular (User, Order, Ticket)
- atributos com nomes sem ambiguidade
- identificadores explícitos
- estados relevantes modelados
- relações descritas de forma legível
 
Diretriz para Dev e AI:
[como interpretar este documento antes de modelar banco, contrato ou código]

4. Visão Geral do Domínio

Resumo do domínio:       [o que o sistema gerencia em poucas linhas]
Entidades centrais:
  - [entidade 1]
  - [entidade 2]
Entidades auxiliares:
  - [entidade de apoio]
Observações gerais:      [preencher]

5. Entidades do Projeto

Estrutura completa de cada entidade (ENT-001, ENT-002, ...):

### ENT-001 — [nome da entidade]
 
Nome:                   [singular, ex.: Ticket]
Descrição:              [o que representa no domínio]
Tipo:                   [central | apoio | associação | evento | transacional | ...]
Responsabilidade:       [qual papel cumpre no sistema]
Origem funcional:       [quais histórias, páginas ou fluxos justificam]
 
Identificador principal:
- `id`: [UUID | autoincrement | ULID | ...]
 
Atributos:
- `id`:        [tipo lógico] — [descrição]
- `status`:    [enum]        — [descrição]
- `createdAt`: [datetime]    — [descrição]
- `updatedAt`: [datetime]    — [descrição]
- `[campo]`:   [tipo]        — [descrição]
 
Atributos obrigatórios:
- [atributo 1]
 
Atributos opcionais:
- [atributo 1]
 
Regras de validação:
- [regra 1: ex.: name deve ter entre 3 e 100 caracteres]
- [regra 2: ex.: email deve ser único por organização]
 
Regras de negócio:
- [regra 1: ex.: Ticket só pode ser encerrado por quem o abriu ou pelo gestor]
 
Estados possíveis:
- [estado 1]
- [estado 2]
 
Transições de estado:
- [estado A] → [estado B]: [evento/ação que causa a transição]
 
Relacionamentos:
- pertence a [entidade]
- possui muitos [entidade]
- depende de [entidade] para existir
- referencia [entidade] (fraca)
 
Observações: [preencher]

6. Relações Entre Entidades

Mapa textual de relações:
- [A] 1:N [B]       — um A possui muitos B
- [A] N:N [C]       — via tabela associativa [D]
- [A] 1:1 [E]       — relação exclusiva
 
Entidades agregadoras ou pivôs:
- [entidade associativa]
 
Relações críticas do sistema:
- [relação que não pode ser violada]
 
Restrições de relacionamento:
- [entidade B só existe se A existir]

7. Regras Transversais do Domínio

Regras que afetam múltiplas entidades:
- [regra 1]
- [regra 2]
 
Validações transversais:
- [validação que envolve 2+ entidades]
 
Restrições por perfil ou contexto:
- [perfil A não pode acessar entidade B]

8. Estados e Ciclos de Vida

Para cada entidade com ciclo de vida relevante:

### Ciclo de vida: [Entidade]
 
Estados:
- rascunho → ativo → encerrado → arquivado
 
Eventos que causam transição:
- [usuário confirma] → rascunho para ativo
- [prazo expirado] → ativo para encerrado
 
Estados inválidos ou proibidos:
- [ex.: não pode voltar de encerrado para rascunho sem reabertura explícita]

9. Campos Sensíveis, Críticos ou Auditáveis

Campos sensíveis:         [senhas, tokens, CPF, dados bancários]
Campos críticos:          [status, total, id de autor]
Campos auditáveis:        [createdAt, updatedAt, changedBy]
Observações de compliance:[LGPD, PCI-DSS, retenção de dados]

10. Dependências Funcionais

Entidades fundamentais para o MVP:
- [entidade 1]
- [entidade 2]
 
Entidades que dependem de outras para existir:
- [A depende de B]
- [C depende de D]
 
Entidades futuras ou opcionais:
- [entidade planejada para fase posterior]

11. Diretrizes para os Próximos Documentos

Docs/architecture.md — como as entidades impactam módulos, serviços e camadas
Docs/contract.yaml   — quais entidades são expostas ou trafegadas na API
Docs/structure.md    — como o domínio influencia organização de pastas
Docs/deploy.md       — dependências operacionais de persistência ou consistência
Docs/plan.md         — entidades fundacionais que determinam ordem de implementação

12. Síntese Operacional para Dev e AI

Entidades centrais:               [preencher]
Relações mais importantes:        [preencher]
Regras que não podem ser quebradas:[preencher]
Estados críticos do domínio:      [preencher]
O que ainda está indefinido:      [ponto 1]

13. Aprovação

Status: [pendente | aprovado | revisando]
Aprovado por:
Data de aprovação:
Observações finais:

Exemplo preenchido — entidade completa

### ENT-003 — Atendimento
 
Nome:              Atendimento
Descrição:         Registro de execução de um serviço técnico em campo,
                   vinculado a um chamado e a um técnico.
Tipo:              transacional
Responsabilidade:  Centraliza a prova de execução do serviço com foto,
                   assinatura e geolocalização.
Origem funcional:  US-007 (registrar atendimento), US-008 (encerrar chamado),
                   PG-012 (tela de registro), FL-007 (fluxo de encerramento)
 
Identificador principal:
- `id`: UUID v4
 
Atributos:
- `id`:          UUID     — identificador único do atendimento
- `chamadoId`:   UUID     — chamado ao qual pertence (FK obrigatória)
- `tecnicoId`:   UUID     — técnico responsável (FK obrigatória)
- `fotoUrl`:     string   — URL da foto armazenada (obrigatória)
- `assinatura`:  base64   — assinatura digital coletada (obrigatória ou justificativa)
- `justificativa`:string  — motivo se cliente recusou assinar (opcional)
- `localizacao`: object   — lat/lng no momento do registro
- `observacao`:  string   — nota textual do técnico (opcional)
- `status`:      enum     — [registrado, validado, rejeitado]
- `criadoEm`:   datetime  — timestamp de criação
- `atualizadoEm`:datetime — timestamp de última atualização
 
Atributos obrigatórios:
- chamadoId, tecnicoId, fotoUrl, (assinatura ou justificativa), criadoEm
 
Atributos opcionais:
- observacao, localizacao
 
Regras de validação:
- fotoUrl deve ser URL válida de storage configurado
- assinatura e justificativa são mutuamente exclusivos mas um é obrigatório
- localizacao.lat entre -90 e 90, localizacao.lng entre -180 e 180
 
Regras de negócio:
- Atendimento só pode existir se chamado estiver em status "em andamento"
- Criação de Atendimento move chamado para "aguardando confirmação"
- Apenas o técnico responsável pode criar o Atendimento do chamado
 
Estados possíveis:
- registrado, validado, rejeitado
 
Transições de estado:
- registrado → validado: gestor confirma atendimento
- registrado → rejeitado: gestor rejeita com justificativa
- rejeitado → registrado: técnico corrige e reenvia
 
Relacionamentos:
- pertence a Chamado (1:1 por chamado, em um dado momento)
- pertence a Tecnico (N:1)
- referencia Arquivo (fotoUrl aponta para Arquivo)
 
Observações:
- Dados de localização são opcionais mas recomendados para auditoria

Estrutura — Entities Quick

Para domínio já conhecido com poucas entidades novas:

## Resumo do domínio
[o que o sistema gerencia]
 
## Entidades principais
 
### ENT-001 — [nome]
Descrição: [o que representa]
Atributos principais:
- `id`: [tipo]
- `[campo]`: [tipo]
Regras principais:
- [regra]
Relacionamentos:
- [relacionamento]
Estados:
- [estado 1]
 
---
 
## Relações principais
- [A] 1:N [B]
- [A] N:N [C]
 
## Regras transversais
- [regra]
 
## Entidades críticas para o MVP
- [entidade]
 
## Direção para os próximos documentos
Docs/architecture.md: [orientação]
Docs/contract.yaml:   [orientação]
 
## Síntese para Dev e AI
Entidades mais importantes: [preencher]
Relações críticas: [preencher]
Regras que precisam ser respeitadas: [preencher]
O que ainda está indefinido: [ponto]

Prompt para gerar com agente

Atue como SystemAgent.
Objetivo: criar Docs/entities.md com base em Docs/user-stories.md
 
Carregue contexto base:
- GUIDE.md
- Skills/contracts.md
- Templates/Full/entities.md
- Docs/user-stories.md
- Docs/pages.md
- Docs/flow.md
 
Preencha as 13 seções do template Full.
Seção 4: resuma o domínio e liste entidades centrais vs auxiliares.
Seção 5: crie uma entrada completa por entidade identificada nas histórias.
Seção 6: mapa textual com cardinalidade de todas as relações.
Seção 8: ciclo de vida apenas para entidades com estado mutável.
Seção 9: liste campos sensíveis, críticos e auditáveis.
Seção 11: preencha orientação por artefato seguinte.
Não confunda campo técnico de implementação com entidade de domínio.
Marque [indefinido] onde houver lacuna.

Definição de pronto

O entities está pronto quando:

  1. Todas as entidades centrais identificadas nas user stories têm entrada completa
  2. Atributos têm tipo lógico e descrição — não apenas nome
  3. Relacionamentos descritos com cardinalidade explícita
  4. Ciclo de vida documentado para entidades com estados mutáveis
  5. Seção 7 lista regras que afetam múltiplas entidades
  6. Seção 9 identifica campos sensíveis e auditáveis
  7. Seção 11 tem orientação para cada artefato seguinte
  8. Aprovação registrada na seção 13
Atenção

Entidade de domínio ≠ tabela de banco. Entities não define SQL — define conceitos do negócio. A modelagem de banco nasce daqui, mas não é este documento. Misturar os dois gera um entities que só funciona para um banco específico e perde o valor conceitual.


Erros comuns

ErroCorreção
Campo técnico tratado como entidade ("RecordSet", "DTO")Entidade de domínio representa conceito de negócio, não estrutura técnica
Atributo sem tipo lógicoTodo atributo tem tipo: string, UUID, enum, datetime, boolean, number
Relacionamento sem cardinalidadeEspecificar 1:1, 1:N ou N:N com o que está em qual lado
Estados sem transiçõesCiclo de vida sem eventos que causam transição não é ciclo de vida
Campos sensíveis não identificadosLGPD e compliance exigem que esses campos sejam marcados antes do contrato
Seção 11 em brancoArchitecture e contract.yaml perdem a base conceitual do domínio

Documentos que nascem de Entities

Docs/entities.md (aprovado)

Docs/architecture.md — módulos e serviços organizados em torno das entidades
Docs/contract.yaml   — schemas da API derivados dos atributos das entidades
Docs/structure.md    — organização de pastas influenciada pelos agregados do domínio