Repository navigation
Cadastro de Pessoas
Esta página é a referência do backend para o cadastro de pessoas, empresas, contatos, usuários e vendedores. A visão de telas está na wiki do ui-people.
People é o cadastro de PF e PJ. PeopleLink relaciona uma pessoa a uma empresa e guarda o papel ou relação (client, provider, employee, manager, owner, salesman, franchisee, sellers-client e outros vínculos do domínio). Autenticação pertence a User, associado a uma pessoa física.
flowchart LR
P[People PF] -->|pode ter| U[User de autenticação]
J[People PJ] -->|não possui| NU[User próprio]
J -->|possui contatos| L[PeopleLink]
L --> C[People PF contato]
C -->|pode ter| CU[User do contato]
P -->|vínculo direto| R[PeopleLink de papel]
P -->|salesman| S[Recebe clientes]
S -->|sellers-client| K[Cliente da empresa]
sequenceDiagram
participant UI as ui-people/ui-customers
participant API as People API
participant DB as People/PeopleLink
participant CRM as ui-crm
UI->>API: POST/PUT People PF ou PJ
API->>DB: valida escopo e salva cadastro
UI->>API: cria contato PF e/ou PeopleLink
API->>DB: salva vínculo PJ-contato
UI->>API: cria User somente para PF, se necessário
API->>DB: associa User à pessoa física
UI->>API: adiciona linkType=client
API->>API: SalesmanService verifica vendedor
API->>API: distribui ou usa vendedor atual
API->>DB: salva linkType=sellers-client
API-->>CRM: vínculo pronto para o fluxo comercial
Cada fluxo abaixo conclui o cadastro cadastral e do vínculo antes de executar, como última etapa opcional, a criação/associação de User para a pessoa física.
- Criar ou reutilizar
PeoplePF/PJ. - Persistir dados cadastrais e recursos relacionados.
- Para PJ, persistir contatos como
PeoplePF e seusPeopleLink. - Criar
PeopleLink.linkType=clientno contexto da empresa. - Se necessário, disparar a atribuição específica de vendedor.
-
Último passo opcional: criar/vincular
Usersomente para a PF que acessará o sistema.
- Criar ou reutilizar
PeoplePF/PJ. - Persistir dados cadastrais e contatos da PJ, se houver.
- Criar
PeopleLink.linkType=provider. -
Último passo opcional: criar/vincular
Userpara uma PF responsável ou contato; nunca para a PJ.
- Criar/reutilizar uma
PeoplePF. - Criar
PeopleLink.linkType=salesmanentre PF e empresa. - Quando um cliente for criado sem vendedor,
SalesmanServiceprocura o vendedor autenticado ou chamaSalesmanDistributionService. - Persistir
PeopleLink.linkType=sellers-clientpara a atribuição comercial. - Aplicar proteção de escopo e de comissão no backend.
-
Último passo opcional: criar/vincular
Userpara o vendedor PF.
- Criar/reutilizar
PeoplePF. - Criar o vínculo humano de funcionário com a empresa.
- Persistir dados de
EmployeeProfilee recursos de RH nos módulos responsáveis. -
Último passo opcional: criar/vincular
Userpara o funcionário PF.
- Criar/reutilizar
PeoplePJ. - Persistir dados empresariais.
- Não criar
Userpara a PJ. - Criar cada contato como
PeoplePF. - Persistir o vínculo PJ-contato em
PeopleLink. -
Último passo opcional de cada contato: criar/vincular
Userpara o contato PF.
É sempre a etapa final de cada fluxo: validar PF, vínculo/contexto e então criar ou associar o User. O usuário autentica a PF; permissões vêm dos vínculos e não transformam a PJ em conta autenticável.
- PJ não recebe
Userpróprio. - Contato é PF vinculada à PJ; o contato pode receber
Userpróprio. - PF não apresenta aba de contatos; somente PJ pode manter contatos empresariais.
- Um usuário autenticável representa uma PF. O contexto da empresa é resolvido pelos vínculos e pela empresa selecionada.
- Cadastro cadastral, vínculo com empresa e autenticação são etapas distintas e podem ter permissões diferentes.
Vendedor é um fluxo especializado. salesman identifica a PF que atua como vendedor de uma empresa. sellers-client identifica a atribuição comercial dessa pessoa a um cliente. Não reutilizar employee, client ou contato para representar essa atribuição.
Quando uma empresa recebe um cliente sem vendedor, SalesmanService:
- ignora a reação quando o vínculo não é
client; - evita a recursão quando a empresa atual já é vendedor;
- usa o usuário atual se ele for vendedor da empresa;
- caso contrário chama
SalesmanDistributionService; - cria o vínculo
sellers-clientidempotentemente e notifica o cliente quando aplicável.
As estratégias de distribuição são random, round_robin, least_clients e last_received. Comissão (comission, minimum_comission) e alterações de vendedor exigem contexto de gestão autorizado. A API deve proteger leitura e escrita com escopo próprio; a UI não é uma barreira de segurança.
-
People: recurso cadastral e operações de leitura/escrita. -
PeopleLink: relacionamento pessoa-empresa e relações comerciais. -
PeopleService/PeopleLinkService: criação, descoberta, escopo e proteção de vínculos. -
AccountRegistrationService/CreateAccountAction: criação de conta pública para pessoa física. -
SalesmanService/SalesmanDistributionService: seleção e associação de vendedor. - Controllers de empresas, contatos, mídia e exportação: entradas especializadas que continuam submetidas ao escopo de pessoas.
- Nenhuma rota cria usuário para PJ.
- Contato PJ é PF persistida e vinculada por
PeopleLink. - Usuário de contato é associado ao contato PF, não à PJ.
- PF não recebe representação de aba/coleção de contatos.
- Vendedor autenticado é preferido quando atribui cliente.
- Sem vendedor autenticado, a estratégia da empresa é aplicada.
- Vínculo de vendedor existente não é duplicado ou substituído indevidamente.
- Escopo de empresa e campos de comissão são aplicados no backend.
- Soft-delete remove a pessoa das listas operacionais sem apagar fisicamente seus vínculos históricos.