# 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: - `codigoCliente` - `codigoServico` - `nomeCliente` 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) 1. **Tentar encontrar entidade por Serviço** - Busca: `{codigoCliente} - {codigoServico}*` - Se encontrou: - ✅ usar essa entidade (filha) e finalizar 2. **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}` - ✅ usar a entidade criada (filha) e finalizar 3. **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) - Criar **entidade filha** abaixo da mãe: - Nome: `{codigoCliente} - {codigoServico} - {nomeCliente}` - Parent: `{codigoCliente} - {nomeCliente}` - ✅ usar a entidade criada (filha) e finalizar ### 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) ```mermaid flowchart TD A[Chamado de Implantação chega do Hub] --> B[Extrair dados
codigoCliente
codigoServico
nomeCliente] B --> C{Existe entidade
por Serviço?} C -->|Sim| D[Usar entidade de Serviço] D --> Z[Fim / Continua fluxo do ticket] C -->|Não| E{Existe entidade
por Cliente?} E -->|Sim| F[Criar entidade de Serviço
via API GLPI] F --> G[Parent = Entidade Cliente
Nome = codigoCliente-codigoServico-nomeCliente] G --> Z E -->|Não| H[Criar entidade Cliente
via API GLPI] H --> I[Parent = Contratos Ativos
Nome = codigoCliente-nomeCliente] I --> J[Criar entidade de Serviço
via API GLPI] J --> K[Parent = Entidade Cliente
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) 1. **Tentar encontrar entidade por Serviço** - Busca: `{codigoCliente} - {codigoServico}*` - Se encontrou: - ✅ usar essa entidade e finalizar 2. **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 3. **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) - ✅ usar essa entidade e finalizar ### 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 ```mermaid flowchart TD A[Chamado de Implantação chega do Hub] --> B[Extrair dados
codigoCliente
codigoServico
nomeCliente] B --> C{Existe entidade
por Serviço?} C -->|Sim| D[Usar entidade de Serviço] D --> Z[Fim / Continua fluxo do ticket] C -->|Não| E{Existe entidade
por Cliente?} E -->|Sim| F[Usar entidade de Cliente] F --> Z E -->|Não| G[Criar entidade Única
via API GLPI] G --> H[Parent = Root
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**: 1. Buscar entidade por Serviço (`{codigoCliente} - {codigoServico}%`) 2. Se não achar, buscar por Cliente (`{codigoCliente} -%`) 3. Se achar Cliente, criar Serviço abaixo do Cliente 4. Se não achar nenhum, criar Cliente (embaixo de Contratos Ativos) e depois criar Serviço abaixo do Cliente 5. Retornar sempre a **entidade de Serviço** --- ### Fluxo de Resolução (quando NÃO é Implantação) 1. Buscar entidade por Serviço (`{codigoCliente} - {codigoServico}%`) - Se achou: ✅ usar e finalizar 2. Se não achou, buscar entidade por Cliente (`{codigoCliente} -%`) - Se achou: ✅ usar e finalizar 3. 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) ```mermaid flowchart TD A[Chega chamado do Hub] --> B[Extrair dados
codigoCliente
codigoServico
nomeCliente
tipoChamado] B --> C{Tipo é
Implantação?} %% ========== RAMO IMPLANTAÇÃO (OPÇÃO A) ========== C -->|Sim| IA{Existe entidade
por Serviço?} IA -->|Sim| I1[Usar entidade de Serviço] --> Z[Fim / Continua fluxo do ticket] IA -->|Não| IB{Existe entidade
por Cliente?} IB -->|Sim| I2[Criar entidade de Serviço
via API GLPI
Parent = Cliente] --> I3[Usar entidade criada] --> Z IB -->|Não| I4[Criar entidade Cliente
via API GLPI
Parent = Contratos Ativos] --> I5[Criar entidade de Serviço
via API GLPI
Parent = Cliente] --> I6[Usar entidade criada] --> Z %% ========== RAMO NÃO IMPLANTAÇÃO (RESOLVE ONLY) ========== C -->|Não| NA{Existe entidade
por Serviço?} NA -->|Sim| N1[Usar entidade de Serviço] --> Z NA -->|Não| NB{Existe entidade
por Cliente?} NB -->|Sim| N2[Usar entidade de Cliente] --> Z NB -->|Não| N3[Usar entidade fallback
Contratos Ativos] --> Z ```