7.6 KiB
Fluxo de Resolução e Criação de Entidades (GLPI)
Contexto
Quando um chamado de Implantação chega no Hub x GLPI, precisamos garantir que exista uma Entidade correta no GLPI para vincular o ticket.
Hoje, a resolução tenta encontrar a entidade pelo padrão de nome baseado em:
codigoClientecodigoServiconomeCliente
Caso não encontre, entra a feature de criação automática via API (GLPI v2 + OAuth).
Regra importante: criação/alteração de entidades sempre via API, nunca via banco do GLPI.
Convenções de Nome
Entidade mãe (Cliente)
- Formato:
{codigoCliente} - {nomeCliente} - Exemplo:
12345 - ACME Telecom
Entidade filha (Serviço)
- Formato:
{codigoCliente} - {codigoServico} - {nomeCliente} - Exemplo:
12345 - 67890 - ACME Telecom
Observação: O
{nomeCliente}é repetido na filha para manter legibilidade e facilitar busca manual no GLPI.
Busca de Entidades
Busca por Serviço (Entidade filha)
Procura por entidade que contenha:
{codigoCliente} - {codigoServico}(prefixo/like)
Busca por Cliente (Entidade mãe)
Procura por entidade que contenha:
{codigoCliente} -(prefixo/like)
Opção A — Criação hierárquica (Mãe + Filha quando necessário)
Objetivo
Garantir hierarquia consistente no GLPI:
- Cliente como entidade mãe
- Serviço como entidade filha
Fluxo (passo a passo)
-
Tentar encontrar entidade por Serviço
- Busca:
{codigoCliente} - {codigoServico}* - Se encontrou:
- ✅ usar essa entidade (filha) e finalizar
- Busca:
-
Se não encontrou por Serviço: tentar encontrar entidade por Cliente
- Busca:
{codigoCliente} -* - Se encontrou:
- ✅ criar entidade filha abaixo dessa mãe:
- Nome:
{codigoCliente} - {codigoServico} - {nomeCliente} - Parent:
{codigoCliente} - {nomeCliente}
- Nome:
- ✅ usar a entidade criada (filha) e finalizar
- ✅ criar entidade filha abaixo dessa mãe:
- Busca:
-
Se não encontrou nem por Serviço nem por Cliente
- Criar entidade mãe:
- Nome:
{codigoCliente} - {nomeCliente} - Parent: raiz (definir entidade pai padrão, ex.: Root)
- Nome:
- Criar entidade filha abaixo da mãe:
- Nome:
{codigoCliente} - {codigoServico} - {nomeCliente} - Parent:
{codigoCliente} - {nomeCliente}
- Nome:
- ✅ usar a entidade criada (filha) e finalizar
- Criar entidade mãe:
Resultado final (Opção A)
- Ticket sempre fica na entidade filha (serviço)
- Sempre tenta manter estrutura hierárquica consistente
Diagrama de Fluxo — Opção A (hierárquica: Mãe + Filha quando necessário)
flowchart TD
A[Chamado de Implantação chega do Hub] --> B[Extrair dados<br/>codigoCliente<br/>codigoServico<br/>nomeCliente]
B --> C{Existe entidade<br/>por Serviço?}
C -->|Sim| D[Usar entidade de Serviço]
D --> Z[Fim / Continua fluxo do ticket]
C -->|Não| E{Existe entidade<br/>por Cliente?}
E -->|Sim| F[Criar entidade de Serviço<br/>via API GLPI]
F --> G[Parent = Entidade Cliente<br/>Nome = codigoCliente-codigoServico-nomeCliente]
G --> Z
E -->|Não| H[Criar entidade Cliente<br/>via API GLPI]
H --> I[Parent = Contratos Ativos<br/>Nome = codigoCliente-nomeCliente]
I --> J[Criar entidade de Serviço<br/>via API GLPI]
J --> K[Parent = Entidade Cliente<br/>Nome = codigoCliente-codigoServico-nomeCliente]
K --> Z
Opção B — Criação simplificada (sem forçar hierarquia)
Objetivo
Criar o mínimo possível e evitar duplicação de entidades.
Fluxo (passo a passo)
-
Tentar encontrar entidade por Serviço
- Busca:
{codigoCliente} - {codigoServico}* - Se encontrou:
- ✅ usar essa entidade e finalizar
- Busca:
-
Se não encontrou por Serviço: tentar encontrar entidade por Cliente
- Busca:
{codigoCliente} -* - Se encontrou:
- ✅ usar essa entidade mãe
- ❌ não cria entidade filha
- Finaliza
- Busca:
-
Se não encontrou nem por Serviço nem por Cliente
- Criar uma entidade única (sem mãe):
- Nome:
{codigoCliente} - {codigoServico} - {nomeCliente} - Parent: raiz (ou padrão definido)
- Nome:
- ✅ usar essa entidade e finalizar
- Criar uma entidade única (sem mãe):
Resultado final (Opção B)
- Ticket pode ficar:
- na entidade de serviço (se existir)
- ou na entidade de cliente (se existir)
- ou numa entidade única criada
- Não garante hierarquia “mãe → filha”
Fluxo Opção B
flowchart TD
A[Chamado de Implantação chega do Hub] --> B[Extrair dados<br/>codigoCliente<br/>codigoServico<br/>nomeCliente]
B --> C{Existe entidade<br/>por Serviço?}
C -->|Sim| D[Usar entidade de Serviço]
D --> Z[Fim / Continua fluxo do ticket]
C -->|Não| E{Existe entidade<br/>por Cliente?}
E -->|Sim| F[Usar entidade de Cliente]
F --> Z
E -->|Não| G[Criar entidade Única<br/>via API GLPI]
G --> H[Parent = Root<br/>Nome = codigoCliente-codigoServico-nomeCliente]
H --> Z
Opção C — Híbrida (Implantação cria; demais apenas resolvem)
Objetivo
- Para Implantação: garantir estrutura correta criando entidades quando necessário (igual Opção A).
- Para demais tipos de chamado: não criar entidades, apenas resolver a melhor entidade existente; se não houver, usar fallback Contratos Ativos.
Fluxo (passo a passo)
1) Identificar tipo do chamado
- Se
tipo == Implantação→ executar Fluxo A (criação hierárquica). - Se
tipo != Implantação→ executar Fluxo de Resolução sem criação.
Fluxo A (quando Implantação)
Segue exatamente a Opção A:
- Buscar entidade por Serviço (
{codigoCliente} - {codigoServico}%) - Se não achar, buscar por Cliente (
{codigoCliente} -%) - Se achar Cliente, criar Serviço abaixo do Cliente
- Se não achar nenhum, criar Cliente (embaixo de Contratos Ativos) e depois criar Serviço abaixo do Cliente
- Retornar sempre a entidade de Serviço
Fluxo de Resolução (quando NÃO é Implantação)
- Buscar entidade por Serviço (
{codigoCliente} - {codigoServico}%)- Se achou: ✅ usar e finalizar
- Se não achou, buscar entidade por Cliente (
{codigoCliente} -%)- Se achou: ✅ usar e finalizar
- Se não achou nenhum dos dois:
- ✅ usar entidade Contratos Ativos (fallback)
- ❌ não criar nada
Resultado final (Opção C)
- Implantação: sempre aponta para entidade de Serviço, criando Cliente/Serviço quando faltar.
- Demais chamados: nunca criam entidades; ficam na melhor existente (Serviço → Cliente → Contratos Ativos).
Diagrama de Fluxo — Opção C (Híbrida)
flowchart TD
A[Chega chamado do Hub] --> B[Extrair dados<br/>codigoCliente<br/>codigoServico<br/>nomeCliente<br/>tipoChamado]
B --> C{Tipo é<br/>Implantação?}
%% ========== RAMO IMPLANTAÇÃO (OPÇÃO A) ==========
C -->|Sim| IA{Existe entidade<br/>por Serviço?}
IA -->|Sim| I1[Usar entidade de Serviço] --> Z[Fim / Continua fluxo do ticket]
IA -->|Não| IB{Existe entidade<br/>por Cliente?}
IB -->|Sim| I2[Criar entidade de Serviço<br/>via API GLPI<br/>Parent = Cliente] --> I3[Usar entidade criada] --> Z
IB -->|Não| I4[Criar entidade Cliente<br/>via API GLPI<br/>Parent = Contratos Ativos] --> I5[Criar entidade de Serviço<br/>via API GLPI<br/>Parent = Cliente] --> I6[Usar entidade criada] --> Z
%% ========== RAMO NÃO IMPLANTAÇÃO (RESOLVE ONLY) ==========
C -->|Não| NA{Existe entidade<br/>por Serviço?}
NA -->|Sim| N1[Usar entidade de Serviço] --> Z
NA -->|Não| NB{Existe entidade<br/>por Cliente?}
NB -->|Sim| N2[Usar entidade de Cliente] --> Z
NB -->|Não| N3[Usar entidade fallback<br/>Contratos Ativos] --> Z