🗺️ Mapa de Fluxos — Ecossistema ADMS/SIGOD

Guia visual de diagnóstico para sustentação
API
Worker
Middleware
Kafka topic
Endpoint HTTP
Redis queue
MongoDB
Oracle
💡 Interativo — clique nos cards e badges

📌 Resumo do Ecossistema

50
Serviços
mapeados
~130
Tópicos
Kafka únicos
3
Instâncias
Sensedia
9
Fluxos
documentados
4
Sistemas
integrados
Panorama atual: 50 serviços mapeados (46 do ecossistema + 4 de suporte), ~130 tópicos Kafka únicos e pipeline híbrido Kafka + Redis + Oracle + MongoDB com integrações ADMS via Sensedia.
Kafka e Mensageria
~130 tópicos Kafka únicos (ContextDefinition + CRM/SGM/IQOS/outbound) e filas Redis dedicadas no fluxo de callback técnico.
Sensedia (3 instâncias)
Agrupamentos: EMR/EMS=3, EPB/ESE=1, EMT/ETO/EAC/ERO=2.
Ambientes do OpenShift
PRD: adms-pr, sigod-pr, call-back, api-comercial · DEV/HML: adms-ds, adms-ho.
Stack observável e plataforma: Datadog APM, ELK (Energisa.ELK.ConnectorCore), JFrog Artifactory, Unleash (feature flags), Sensedia, ksqlDB, Schema Registry.

🔁 Visão de Ciclo — Como os Fluxos 1 a 4 conversam entre si

Os Fluxos 2, 3 e 4 NÃO são lineares. Existe um ciclo de comunicação: o SIGOD retorna status para o ADMS (Fluxo 3) enquanto simultaneamente propaga eventos para os canais de atendimento (Fluxo 4), e novas atualizações de despacho/encerramento reiniciam o ciclo. Clique em qualquer seta para ir ao fluxo detalhado.
Cada seta representa um trecho do fluxo. Clique para ir ao detalhe.
Os Fluxos 2, 3 e 4 NÃO são lineares — há retorno de status do SIGOD para o ADMS (Fluxo 3) e propagação simultânea para os canais de atendimento (Fluxo 4).
Setas pulsantes (Passo 6) indicam ciclo bidirecional recorrente a cada despacho ou encerramento de OS.

📲 Fluxo 1 — Atendimento ao Cliente → ADMS

📲 Entrada multi-canal de ocorrência técnica (Energisa ON, agência virtual, chatbot, URA, SIATT) → WSROT (REST) — valida e retorna protocolo sincronamente → ciclo Kafka (ADMS) → MSAttOcorrenciaTecnica → MSCrmMiddleware → ADMS.
📱 Fluxo 1 — Canais Digitais + PDA → Sensedia → WSROT → ADMS (Origens 1.A e 1.B unificadas)
Origens de entrada — 1.A (Canais Digitais) e 1.B (PDA) convergem via Sensedia no WSROT
📱 1.A — Canais Digitais
📲
Solicitação do Cliente
Energisa ON · Ag. Virtual
Chatbot · URA / IVR
SIATT
📱 1.B — PDA (Eletricista em Campo)
OS criada em campo pelo eletricista (app Android) — não pelo cliente. CDC captura PDA.SOLICITACAO_OS_PDA e o worker invoca o WSROT via HTTP.
📱
PDA
App Android
🗄️ Oracle PDA
SOLICITACAO_OS_PDA
CDC Avro
Kafka CDC (Avro)
Cdc.Queue
.SolicitacaoOsPda
🟠 OrdemServico.Legacy.Worker
SolicitacaoOsPdaWorker
▼ Cdc.Queue.SolicitacaoOsPda ↗ POST /OcorrenciaTecnica/
↗ Fluxo 5 (detalhes do worker)
🔵
Sensedia
API Gateway
🌐 WSROT
API REST · Ponto único de entrada
📖 Regra de Negócio

✅ O que faz: API REST que recebe a abertura de ocorrências técnicas de múltiplos canais: Energisa ON, agência virtual, chatbot, URA/IVR, SIATT (canais convencionais, desde a entrada do ADMS) e PDA (eletricista em campo via OrdemServico.Legacy.Worker). Valida o formulário, gera protocolo de atendimento e o retorna sincronamente ao canal chamador. Enfileira em Kafka (ADMS) para processamento assíncrono.

🛑 Se parar: Nenhuma ocorrência técnica entra no pipeline, independentemente do canal de origem. Todo o atendimento técnico ao cliente para.

📌 Regras:

  • POST /OcorrenciaTecnica/ valida formulário, gera protocolo e retorna ao canal de forma síncrona.
  • Empresas ADMS: publica crm_chamada_ocorrencia_tecnica para processamento no MSAttOcorrenciaTecnica.
  • Empresas não-ADMS: roteia para RabbitMQ/MSGOT pelo caminho legado, conforme parâmetro SIATT:70.
  • Avisos de restabelecimento publicam evento para o subfluxo MSFaltaEnergiaCallback; não atribuir tópico genérico de callback CRM ao WSROT sem evidência.
  • Redis é usado como cache anti-duplicidade por CDC/empresa por aproximadamente 2 minutos.
Swagger: wsrot.apps.ocpp1.energisa.corp
Roteamento (SIATT:70): ADMS → Kafka · não-ADMS → RabbitMQ (MSGOT)
Ocorrência técnica e restabelecimento
  • POST /OcorrenciaTecnica/ → registra OS técnica; valida canal, gera protocolo e inicia fluxo ADMS ou legado.
  • GET /OcorrenciaTecnica/ServicosTecnicos/{codigoEmpresaWeb} → lista serviços técnicos por grupo/empresa.
  • POST /OcorrenciaTecnica/AvisoReestabelecimento → recebe aviso "Minha Energia Voltou" por CDC/instalação e publica para callback.
  • POST /OcorrenciaTecnica/AvisoReestabelecimentoPorProtocolo → recebe aviso de restabelecimento vinculado a protocolo.
  • POST /OcorrenciaTecnica/DefeitoFalha e /NivelTensao → obsoletos; redirecionam para POST /OcorrenciaTecnica/.
Callback e mailing
  • PUT /CallBack/AtualizaMailling → atualiza lista de mailing de callback.
  • GET /CallBack/ListaMailingTelefone/{codEmpresaWeb} → recupera lista de mailing OLOS mais recente.
  • GET /CallBack/ListaMailingTelefone/{codEmpresaWeb}/{codigoLista} → recupera lista de mailing OLOS por código.
  • GET /CallBack/Historico/Protocolo/{codigoEmpresaWeb}/{protocolo} → consulta histórico de callbacks por protocolo.
  • GET /CallBack/Historico/Ocorrencia/{codigoEmpresaWeb}/{ocorrencia} → consulta histórico de callbacks por ocorrência.
  • POST /CallBack/EncerraOcorencia → obsoleto/desabilitado; retorna 405.
Grupo A, integrações e saídas
  • POST /ServicosGrupoA/DesligamentoProgramado → solicita OS de desligamento/religação para clientes Grupo A.
  • crm_chamada_ocorrencia_tecnica → abertura de ocorrência para o MSAttOcorrenciaTecnica.
  • crm_encerramento_ocorrencia_tecnica → encerramento/restabelecimento para o MSAttOcorrenciaTecnica.
  • RabbitMQ ordemservico.tecnico.create.crm → caminho legado para empresas não-ADMS, consumido pelo MSGOT.
⊙ POST /OcorrenciaTecnica/ ⊙ POST /OcorrenciaTecnica/AvisoReestabelecimento ▲ crm_chamada_ocorrencia_tecnica ▲ crm_encerramento_ocorrencia_tecnica ▲ Rabbit · ordemservico.tecnico.create.crm Redis anti-duplicidade
WSROT → Kafka → MSAttOcorrenciaTecnica
crm_chamada_ocorrencia_tecnica
abertura de ocorrência técnica segue para o worker principal
WSROT → RabbitMQ → MSFaltaEnergiaCallback
crm_encerramento_ocorrencia_tecnica → MSAttOcorrenciaTecnica
aviso de reestabelecimento segue para MSFaltaEnergiaCallback (ver Fluxo 2)
Worker principal — MSAttOcorrenciaTecnica
🟠 MSAttOcorrenciaTecnica
Worker · Atendimento ao Cliente
📖 Regra de Negócio

✅ O que faz: Worker principal do fluxo de abertura de ocorrência técnica. Consome os tópicos do WSROT, grava a ocorrência no Oracle ATD (protocolo, atendimento, ligações, interações), grava no MongoDB (OcorrenciaTecnica) e produz crm_registra_ocorrencia_sistema_tecnico para envio ao ADMS.

🛑 Se parar: Ocorrências de atendimento ao cliente não são registradas em nenhum banco. O ciclo completo de abertura de OS para, independentemente do canal de origem (Energisa ON, chatbot, URA).

📌 Regras:

  • Consome crm_chamada_ocorrencia_tecnica e crm_encerramento_ocorrencia_tecnica; ambos produzem em crm_registra_ocorrencia_sistema_tecnico (diferença apenas no conteúdo da mensagem)
  • Consome crm_retorno_ocorrencia_sistema_tecnico (confirmação do ciclo com o ADMS)
  • Grava em 5 tabelas Oracle ATD + MongoDB
  • Produz crm_registra_ocorrencia_sistema_tecnico → MSCrmMiddleware → ADMS

▼ crm_chamada_ocorrencia_tecnica ▼ crm_encerramento_ocorrencia_tecnica ▼ crm_retorno_ocorrencia_sistema_tecnico ▼ SERVICE_DELIVERY_POINT (CDC Avro) ATD · COMUNICACOES ATD · ATT_ATENDIMENTOS ATD · ATT_LIGACOES ATD · ATT_INTERACAO ATD · PROTOCOLO_ATENDIMENTO ATD · OBS_COMUNICACOES ATD · FAIXA_HORARIO_ATENDIMENTO ATD · TERMO_ANUENCIA ATD · ATT_COMENTARIOS ATD · DADOS_ADICIONAIS_SOLIC_OC_TEC OcorrenciaTecnica Empregado (cache R) AnexoInfo (cache R) Redis: anti-duplicidade 2min (CDC+empresa) ▲ crm_registra_ocorrencia_sistema_tecnico
crm_encerramento wfm_callback
vai ao Fluxo 3
Subfluxo de callback — MSFaltaEnergiaCallback
🟠 MSFaltaEnergiaCallback
Worker .NET 8 · RabbitMQ Consumer
📖 Regra de Negócio

✅ O que faz: Worker "Minha Energia Voltou" — encerramento proativo de OS técnica quando a energia é restabelecida. Consome a fila RabbitMQ publicada pelo WSROT (endpoints AvisoReestabelecimento), recupera dados da comunicação no Oracle ATD, verifica feature flags por empresa e encerra a OS via ADMS (Kafka: crm_encerramento_ocorrencia_tecnica) ou ApiGodTecnica (HTTP POST /EncerramentoOT), conforme parâmetro global 70. Publica wfm_callback_realizado para o WFM e possui retentativa automática por até 240 minutos.

🛑 Se parar: Encerramento proativo de OS não ocorre quando energia é restabelecida. Clientes continuam com OS abertas mesmo após o restabelecimento.

📌 Regras:

  • Consome RabbitMQ exchange ordemservico.tecnico.falta-energia queue callback.encerra
  • Feature flag "MinhaEnergiaVoltou" por empresa (MongoDB FeatureFlags)
  • Decisão: Param global 70 == "ADMS" → Kafka; senão → HTTP ApiGodTecnica
  • Retentativa: até 240 min via RabbitMQ retry queue
  • Empresas suportadas: 1, 3, 5, 6, 8, 9, 10, 20, 30

Pod: msfaltaenergiacallback
ELK: msfaltaenergiacallback
▼ Rabbit · ordemservico.tecnico.falta-energia.callback.encerra ATD · COMUNICACOES (R) ATD · ATT_ATENDIMENTOS (R) ATD · INSTALACAO (R) ATD · CLIENTE (R) ATD · SOLICITACAO_OCORRENCIA_TECNICA (R) Configuracao ParametroGlobal.{empresa} ↗ POST /api/v1/EncerramentoOT/RecebeCallback ▲ crm_encerramento_ocorrencia_tecnica ▲ wfm_callback_realizado ▲ Rabbit · retry (240 min)
Microserviço — MSCrmMiddleware → Sensedia → ADMS
🟢 MSCrmMiddleware
Microserviço · CRM Middleware
📖 Regra de Negócio

✅ O que faz: Microserviço (equivalente ao MsAttOcorrenciaTecnica). Consome crm_registra_ocorrencia_sistema_tecnico, chama o ADMS via Sensedia (POST /TroubleTickets/) e produz crm_retorno_ocorrencia_sistema_tecnico com a resposta do ADMS (ciclo de confirmação).

🛑 Se parar: Ocorrências técnicas de atendimento ao cliente não chegam ao ADMS. Nenhum Trouble Ticket é enviado ao ADMS; os canais não recebem retorno de confirmação.

📌 Regras:

  • Ciclo: Kafka → MSCrmMiddleware → Sensedia (POST /TroubleTickets/) → ADMS → Kafka (retorno)
  • crm_retorno_ocorrencia_sistema_tecnico é consumido pelo MSAttOcorrenciaTecnica para confirmar o ciclo

▼ crm_registra_ocorrencia_sistema_tecnico → Sensedia CRM adapter ↗ POST /TroubleTickets/ ▲ crm_retorno_ocorrencia_sistema_tecnico
🔵
Sensedia
CRM adapter
ADMS
/TroubleTickets/
↩️ crm_retorno_ocorrencia_sistema_tecnico → volta para MSAttOcorrenciaTecnica (ciclo de confirmação)
Paralelo legado — MSGOT (RabbitMQ)
🟡 MSGOT
Legado · RabbitMQ
📖 Regra de Negócio

✅ O que faz: Sistema legado ativo em paralelo ao fluxo Kafka principal. Consome a fila RabbitMQ ordemservico.tecnico.create.crm e processa criações de OS técnicas oriundas do CRM via broker RabbitMQ (não-Kafka).

🛑 Se parar: OSs técnicas geradas via fila RabbitMQ deixam de ser processadas. Por ser independente do fluxo Kafka, falha no MSGOT não impacta o fluxo principal — mas OSs dessa fila ficarão pendentes.

📌 Regras:

  • Ativado quando o SIATT:70 indica caminho não-ADMS (WSROT → RabbitMQ)
  • Broker: RabbitMQ (independente do Kafka)
  • Queue: ordemservico.tecnico.create.crm
  • Monitorar via RabbitMQ Management UI — fila não deve acumular mensagens sem consumidores ativos

Broker: RabbitMQ (não-Kafka)
Queue: ordemservico.tecnico.create.crm
⚠️ Ativo em paralelo ao fluxo Kafka. Monitorar independentemente — falha no RabbitMQ não impacta o fluxo principal.
🔍 Diagnóstico — Fluxo 1 (Atendimento ao Cliente — Multi-canal)
1. Consumer lag do tópico crm_chamada_ocorrencia_tecnica (MSAttOcorrenciaTecnica)
🔎 Onde verificar: Kafka Manager ou via terminal: kafka-consumer-groups --bootstrap-server <broker> --describe --group msattocorrenciatecnica-group. No Datadog: APM → Services → msattocorrenciatecnica.
⚠️ Sintoma de problema: Lag crescente indica que as ocorrências abertas por qualquer canal de atendimento (Energisa ON, chatbot, URA, SIATT) estão se acumulando sem processamento. Clientes que abriram chamados não terão protocolo gerado nem registro no Oracle ATD.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep msattocorrenciatecnica. 2) Checar logs: ELK index msattocorrenciatecnica (⚠️ índice não confirmado — localizar antes de um incidente). 3) Verificar conectividade com Oracle ATD.
2. Consumer lag do tópico crm_encerramento_ocorrencia_tecnica (MSAttOcorrenciaTecnica)
🔎 Onde verificar: Kafka Manager → tópico crm_encerramento_ocorrencia_tecnica. Datadog: service msattocorrenciatecnica.
⚠️ Sintoma de problema: Encerramentos pendentes impedem que os canais reflitam o encerramento da ocorrência para o cliente.
⚡ Ação imediata: 1) Verificar pods do MSAttOcorrenciaTecnica. 2) Checar se o WSROT está produzindo encerramento corretamente (logs ELK: wsrot).
3. Consumer lag do tópico crm_registra_ocorrencia_sistema_tecnico (MSCrmMiddleware)
🔎 Onde verificar: Kafka Manager → tópico crm_registra_ocorrencia_sistema_tecnico. ELK: mscrmiddleware. Datadog: service mscrmiddleware.
⚠️ Sintoma de problema: A ocorrência técnica foi gravada no ATD mas ainda não chegou ao ADMS. O despachante não verá a OS criada pela abertura de ocorrência técnica. Lag crescente aqui é o gargalo entre o SIGOD e o ADMS.
⚡ Ação imediata: 1) Checar pods do MSCrmMiddleware: oc get pods -n adms | grep mscrmiddleware. 2) Testar health check do Sensedia CRM adapter. 3) Verificar se o ADMS está respondendo no endpoint POST /TroubleTickets/.
4. Gravações no Oracle ATD (protocolo, atendimento, ligações, interações)
🔎 Onde verificar: Banco Oracle ATD. Queries de validação: SELECT * FROM ATT_ATENDIMENTOS WHERE DT_CADASTRO > SYSDATE - 1/24 ORDER BY DT_CADASTRO DESC. Checar também: COMUNICACOES, ATT_LIGACOES, ATT_INTERACAO, PROTOCOLO_ATENDIMENTO.
⚠️ Sintoma de problema: Tabelas sem inserções recentes indicam que o MSAttOcorrenciaTecnica parou de gravar. Clientes que abriram atendimento técnico por qualquer canal não terão histórico de atendimento registrado.
⚡ Ação imediata: 1) Verificar se a connection string do Oracle ATD está válida (logs do pod). 2) Checar se há lock em tabelas Oracle. 3) Confirmar que o usuário de acesso ao ATD tem permissões de INSERT.
5. Sensedia CRM adapter — ADMS não responde ao POST /TroubleTickets/
🔎 Onde verificar: Portal Sensedia → API CRM adapter → logs de requisição. Datadog: trace do MSCrmMiddleware mostrando chamada HTTP ao ADMS. Verificar também: status HTTP retornado (2xx = OK, 4xx/5xx = erro).
⚠️ Sintoma de problema: Erros 5xx indicam que o ADMS está indisponível ou rejeitando as requisições. Erros 4xx podem indicar payload malformado ou credenciais expiradas no Sensedia.
⚡ Ação imediata: 1) Testar o endpoint do ADMS via Sensedia (chamada manual de teste). 2) Verificar se o certificado/token do CRM adapter está válido. 3) Acionar equipe do ADMS se o problema for no sistema externo.
6. RabbitMQ MSGOT — fila ordemservico.tecnico.create.crm acumulando mensagens
🔎 Onde verificar: RabbitMQ Management UI → fila ordemservico.tecnico.create.crm. Verificar: "Messages Ready" (pendentes), "Consumers" (deve ser > 0), "Message rates" (deve haver consumo ativo).
⚠️ Sintoma de problema: Fila crescendo com 0 consumidores ativos indica que o worker do MSGOT está parado. Mensagens se acumulam e podem estourar o limite da fila, causando perda de dados.
⚡ Ação imediata: 1) Verificar pods do MSGOT: oc get pods -n adms | grep msgot. 2) Reiniciar consumer se estiver parado. 3) Monitorar se a fila começa a esvaziar após restart.

📥 Fluxo 2 — ADMS → SIGOD (Inbound ONT)

⚡ ADMS
Sistema Externo
📖 Regra de Negócio

✅ O que faz: Sistema de gestão de distribuição de energia elétrica (ADMS). Origem das Ordens de Serviço técnicas no fluxo inbound: envia OSs ao SIGOD via SOAP através do Sensedia ONT adapter para que equipes de campo sejam despachadas.

🛑 Se parar: Nenhuma OS nova chega ao SIGOD. Despachantes ficam sem novas OSs para alocar. Sistema externo — escalar para equipe do ADMS.

📌 Regras:

  • Protocolo de envio: SOAP via Sensedia ONT adapter
  • Sistema externo — fora do controle do time SIGOD
  • Verificar disponibilidade via portal Sensedia → API ONT → logs

SOAP
Sensedia ONT adapter
ApiOntMiddleware
Middleware · Inbound
📖 Regra de Negócio

✅ O que faz: Recebe eventos SOAP do ADMS/OMS via Sensedia ONT adapter (incidentes, trouble tickets e usage points), valida a estrutura da mensagem, usa buffer Kafka interno (wfm_outage_notification_interface) e delega a persistência para a ApiGodOrdemServico via HTTP REST, que cria/atualiza a OS no SIGOD. Não produz wfm_ordem_servico diretamente.

🛑 Se parar: OSs do ADMS não entram no SIGOD. Despachantes ficam sem novas OSs na tela. Todo o pipeline ADMS→SIGOD para.

📌 Regras:

  • Usa tópico interno wfm_outage_notification_interface como buffer (produz e consome). Saída efetiva é via HTTP REST para ApiGodOrdemServico.
  • A validação rejeita mensagens malformadas — verificar ELK por erros de parse

Pod: apiontmidleware
OCP: adms
ELK: apiontmidleware
⊙ SOAP /IncidentsService.asmx ⊙ SOAP /IncidentTroubleTicketsService.asmx ⊙ SOAP /IncidentUsagePointsService.asmx ⟳ wfm_outage_notification_interface (interno) ↗ POST /api/OrdemServico ↗ PATCH /api/OrdemServico ↗ PATCH /api/OrdemServicoDispositivo ↗ POST /api/OrdemServicoChamada ↗ POST /api/OrdemServicoUnidadeConsumidora via ApiGodOS: ordem_servico via ApiGodOS: os_chamada via ApiGodOS: os_unid_consumidora
📌 Workers internos: IncidentsProcessorWorker (1 inst) · UnidadesConsumidorasProcessorWorker (1 inst)
📌 Saída para SIGOD: via HTTP REST → ApiGodOrdemServico (não produz wfm_ordem_servico diretamente)
📌 UnidadesConsumidorasProcessorWorker consome o evento ChangedIncidentUsagePoints (originado no POST /IncidentUsagePointsService.asmx) e chama POST api/OrdemServicoUnidadeConsumidora para atualizar as UCs afetadas
HTTP POST/PATCH
ApiGodOrdemServico
API · REST + SignalR
📖 Regra de Negócio

✅ O que faz: API REST + SignalR Hub. Recebe chamadas HTTP da ApiOntMiddleware (POST para criar, PATCH para atualizar, POST para UCs/chamadas afetadas). Grava no MongoDB, consulta Oracle (FAR, ATD, PDA, ITG) para enriquecimento de dados e notifica o frontend SIGOD em tempo real via SignalR.

🛑 Se parar: Frontend SIGOD não recebe atualizações em tempo real. Despachantes veem tela desatualizada.

📌 Regras:

  • OrdemServicoControllerPOST api/OrdemServico cria nova OS; PATCH api/OrdemServico atualiza parcialmente (sem {id} no path, corpo com IdExterno)
  • OrdemServicoDispositivoControllerPATCH api/OrdemServicoDispositivo atualiza dispositivo/Trafo afetado
  • OrdemServicoChamadaControllerPOST api/OrdemServicoChamada atualiza chamadas/TroubleTickets
  • OrdemServicoUnidadeConsumidoraControllerPOST api/OrdemServicoUnidadeConsumidora atualiza UCs afetadas, chamado pelo UnidadesConsumidorasProcessorWorker da ApiOntMiddleware após o evento ChangedIncidentUsagePoints (IncidentUsagePointsService.asmx)
  • SignalR Hub transmite eventos para todos os clientes conectados (despachantes online)
  • NotificationChangeWorker (hosted service interno) — consome wfm_ordem_servico_situacao_alterada (produzido pelo OrdemServico.Worker) e faz push SSE via GET /api/OrdemServicoSituacaoSse/stream para o WFMDashboard [NOVO — 23/06/2026]

Pod: apigodordemservico
OCP: adms
ELK: apigodordemservico
⊙ POST /api/OrdemServico ⊙ PATCH /api/OrdemServico ⊙ PATCH /api/OrdemServicoDispositivo ⊙ POST /api/OrdemServicoChamada ⊙ POST /api/OrdemServicoUnidadeConsumidora ► wfm_ordem_servico ► wfm_ordem_servico_dispositivo ◄ wfm_ordem_servico_situacao_alterada mdb_os_crp R/W ordem_servico_unidade_consumidora mdb_modelo_crp R FAR ATD PDA ITG SignalR → UI
OrdemServico.Worker ⚠️ CRÍTICO
Worker · Kafka Consumer
📖 Regra de Negócio

✅ O que faz: Worker principal do fluxo inbound. Consome wfm_ordem_servico (barramento central de OSs) e redistribui para tópicos semânticos de status (criado, agendado, programado, despachado, encerrado, cancelado, arquivado) com base no campo Situacao da mensagem. Também persiste no MongoDB (mdb_ordem_servico_crp) e sincroniza coleção legado.

🛑 Se parar: ⚠️ CRÍTICO — nenhum tópico de status é produzido. Todos os middlewares outbound (Fluxo 3), canais de atendimento (Fluxo 4), SGM e IQOS param de receber atualizações de OS. Toda a cadeia downstream para.

📌 Regras:

  • 3 instâncias paralelas (ProcessaAtualizacaoOsWorkerMultipleConsumers) — aumenta throughput
  • Lê dados complementares do Oracle PDA (DESPACHO_OS, MOV_DESPACHO) para enriquecer a mensagem
  • Re-enfileira OS parent para atualização recursiva quando necessário
  • Parâmetros Oracle (SIGOD-1, SIGOD-2, SIGOD-10) controlam limites de compensação e prazo de agendamento

Pod: energisa-god-ordemservico-worker
OCP: adms
ELK: ordemservicoworker
⚠️ CRÍTICO: Se parar, NENHUM tópico de status é produzido
Workers internos:
  • ProcessaAtualizacaoOsWorker (×3 consumers paralelos) — fila OrdemServico.Queue.Default
  • ProcessaAtualizacaoDispositivoWorker — fila OrdemServico.Queue.Dispositivo (troca de dispositivo afetado)
  • ConfigurationWorker — recarrega Oracle PDA (PARAMETRO_DESPACHO, SERVICO) a cada 1h
  • NotificationChangeWorker (em ApiGodOrdemServico) — consome wfm_ordem_servico_situacao_alterada e faz push SSE para o WFMDashboard [NOVO — 23/06/2026]
◄ wfm_ordem_servico ◄ OrdemServico.Queue.Dispositivo ► wfm_ordem_servico_criado ► wfm_ordem_servico_despachado ► wfm_ordem_servico_encerrado ► wfm_ordem_servico_cancelado ► wfm_ordem_servico_arquivado ► wfm_ordem_servico_agendado ► wfm_ordem_servico_programado ► wfm_ordem_servico_situacao_alterada
Consumer legado — MSGodLegSci (sincronização Oracle PDA)
MSGodLegSci
Middleware · Legacy Oracle Sync
📖 Regra de Negócio

✅ O que faz: Consome todos os tópicos de status de OS produzidos pelo OrdemServico.Worker (criado, cancelado, despachado, arquivado, encerrado) e grava nas tabelas Oracle PDA (SGD_SIGOD, MOV_DESPACHO) para manter o sistema legado Oracle sincronizado com o SIGOD.

🛑 Se parar: Tabelas legado Oracle PDA ficam desatualizadas. Sistemas que consultam PDA diretamente (relatórios, integrações legadas) verão dados defasados.

📌 Regras:

  • Grava em SGD_SIGOD para cada mudança de status
  • Grava em MOV_DESPACHO para status de despacho
  • Não envia para o ADMS — é exclusivamente sincronização do legado Oracle
  • Pertence ao Fluxo 2 (Inbound) pois é consumidor direto dos tópicos produzidos pelo OrdemServico.Worker

Pod: msgodlegsci
ELK: msgodlegsci
Workers internos: OrdemServicoWorker · OrdemServicoFinalizadoWorker · AtualizarServicoWorker · ClienteInterrupcaoWorker
◄ wfm_ordem_servico_criado ◄ wfm_ordem_servico_cancelado ◄ wfm_ordem_servico_despachado ◄ wfm_ordem_servico_arquivado ◄ wfm_ordem_servico_encerrado ◄ wfm_ordem_servico_servicos ◄ wfm_ordem_servico_cliente_afetado PDA.SGD_SIGOD PDA.MOV_DESPACHO PDA.OCORRENCIA_PENDENTE PDA.LISTA_CALLBACK PDA.CLIENTE_INTERRUPCAO_ENERGIA FAR.CONFIGURACAO_SISTEMA
Oracle PDA
SGD_SIGOD · MOV_DESPACHO
📖 Regra de Negócio

✅ O que faz: Banco de dados Oracle PDA (legado). Destino de escrita do MSGodLegSci: mantém as tabelas SGD_SIGOD e MOV_DESPACHO sincronizadas com o SIGOD para que sistemas legados consultem o estado atual das OSs.

🛑 Se parar: Sistemas legados que consultam o Oracle PDA ficam com dados defasados. Banco externo — verificar conectividade e locks via DBA.

🔍 Diagnóstico — Fluxo 2 (ADMS → SIGOD Inbound)
1. ApiOntMiddleware respondendo corretamente às requisições SOAP do ADMS?
🔎 Onde verificar: ELK index: apiontmidleware. Filtrar por erros HTTP 5xx ou exceções SOAP. Também verificar logs do Sensedia ONT adapter no portal Sensedia → API ONT → logs de requisição recentes.
⚠️ Sintoma de problema: Erros SOAP ou timeouts indicam que as OS enviadas pelo ADMS não estão chegando ao SIGOD. Despachantes não verão OSs novas na tela. O ADMS pode acumular retentativas com falha.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep apiontmidleware. 2) Checar se o pod está em CrashLoopBackOff. 3) Testar endpoint SOAP manualmente via Postman/SoapUI. 4) Verificar configurações do Sensedia ONT adapter (certificado/token válido).
2. ApiOntMiddleware está recebendo SOAP, usando buffer interno e chamando ApiGodOrdemServico? Verificar buffer wfm_outage_notification_interface e HTTP POST/PATCH ApiGodOrdemServico
🔎 Onde verificar: Kafka Manager → tópico wfm_outage_notification_interface (buffer interno: deve ter produção e consumo). ELK: apiontmidleware — filtrar por erros REST ao chamar ApiGodOrdemServico (HTTP POST/PATCH). A ApiOntMiddleware não produz wfm_ordem_servico diretamente — quem produz é a ApiGodOrdemServico.
⚠️ Sintoma de problema: Se o ADMS está enviando SOAP mas o MongoDB não grava e a ApiGodOrdemServico não recebe chamadas HTTP, a ApiOntMiddleware está recebendo mas falhando na persistência ou no forward HTTP. OSs entram no sistema mas não são distribuídas ao SIGOD.
⚡ Ação imediata: 1) Checar logs ELK por erros de chamada HTTP à ApiGodOrdemServico (HttpRequestException, TimeoutException). 2) Verificar buffer interno wfm_outage_notification_interface no Kafka Manager — lag crescente indica backpressure. 3) Checar conectividade com o broker Kafka e com a ApiGodOrdemServico.
3. Persistência via ApiGodOrdemServico gravando OSs no MongoDB?
🔎 Onde verificar: MongoDB: database mdb_ordem_servico_crp, collections ordem_servico e ordem_servico_chamada. Checar documentos inseridos nas últimas horas. ELK: apiontmidleware para erros HTTP REST e apigodordemservico para erros de persistência.
⚠️ Sintoma de problema: Se a ApiOntMiddleware recebe SOAP mas a ApiGodOrdemServico não grava, a falha está no forward HTTP ou na API downstream. A ApiOntMiddleware não deve ser tratada como gravadora direta das collections de OS.
⚡ Ação imediata: 1) Verificar chamadas HTTP POST/PATCH da ApiOntMiddleware para ApiGodOrdemServico. 2) Checar logs da ApiGodOrdemServico por erro MongoDB. 3) Validar secrets/conectividade MongoDB no serviço downstream.
4. Consumer lag do tópico wfm_ordem_servico — OrdemServico.Worker está processando?
🔎 Onde verificar: Kafka Manager ou via terminal: kafka-consumer-groups --bootstrap-server <broker> --describe --group ordemservico-worker-group. Datadog: APM → Services → ordemservicoworker → Kafka metrics. ELK: ordemservicoworker.
⚠️ Sintoma de problema: Lag crescente é o sinal mais crítico deste fluxo. O OrdemServico.Worker é responsável por distribuir status para TODOS os middlewares outbound, canais convencionais e IQOS. Se ele parar, todo o ecossistema downstream para de receber atualizações.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep ordemservico-worker. 2) Checar logs ELK por exceções. 3) Se pods estão OK mas lag cresce, investigar lentidão no MongoDB ou Oracle que pode estar bloqueando o processamento. 4) ⚠️ Status atual no Datadog pode estar CRITICAL — verificar imediatamente.
5. Error rate elevada no OrdemServico.Worker (Datadog: service ordemservicoworker)
🔎 Onde verificar: Datadog → APM → Services → ordemservicoworker. Verificar: Error Rate (%), Latência P95, Throughput (requests/seg). Comparar com baseline do dia anterior.
⚠️ Sintoma de problema: Error rate acima de 1% indica que uma fração das mensagens está falhando e potencialmente indo para a Dead Letter Queue. Mensagens na DLQ não são re-processadas automaticamente.
⚡ Ação imediata: 1) Identificar o tipo de exceção no Datadog (span errors). 2) Verificar a DLQ do tópico wfm_ordem_servico. 3) Analisar se é um erro pontual (mensagem malformada) ou sistêmico (dependência indisponível). 4) Se sistêmico, verificar MongoDB e Oracle downstream.
6. Consumer lag do MSGodLegSci — Oracle PDA (legado) sincronizado com o SIGOD?
🔎 Onde verificar: Kafka Manager → tópicos wfm_ordem_servico_criado, wfm_ordem_servico_cancelado, wfm_ordem_servico_despachado, wfm_ordem_servico_arquivado, wfm_ordem_servico_encerrado. ELK: msgodlegsci. Oracle PDA: SELECT COUNT(*) FROM SGD_SIGOD WHERE DT_ATUALIZACAO > SYSDATE - 1/24.
⚠️ Sintoma de problema: Oracle PDA desatualizado em relação ao MongoDB/SIGOD. Sistemas legados que consultam o PDA verão dados defasados — relatórios operacionais e sistemas que dependem do Oracle PDA terão inconsistências.
⚡ Ação imediata: 1) Verificar pods do MSGodLegSci. 2) Checar logs ELK por erros de INSERT/UPDATE nas tabelas Oracle SGD_SIGOD e MOV_DESPACHO. 3) Verificar se há lock em tabelas Oracle (query V$LOCKED_OBJECT no PDA). 4) Confirmar permissões do usuário Oracle.

📤 Fluxo 3 — SIGOD → ADMS (Outbound)

OrdemServico.Worker — eventos de status (Fluxo 3)
📖 Regra de Negócio

✅ O que faz: Referência cruzada — detalhamento completo no Fluxo 2. Neste Fluxo 3, o OrdemServico.Worker contribui com os eventos de status de OS consumidos pelos middlewares outbound: wfm_ordem_servico_criado, wfm_ordem_servico_despachado, wfm_ordem_servico_encerrado, wfm_ordem_servico_cancelado e wfm_ordem_servico_arquivado.

🛑 Se parar: ⚠️ CRÍTICO — eventos de status de OS não chegam aos middlewares outbound. ADMS não recebe atualizações de status do SIGOD.

Tópicos de status usados neste fluxo
► wfm_ordem_servico_criado ► wfm_ordem_servico_despachado ► wfm_ordem_servico_encerrado ► wfm_ordem_servico_cancelado ► wfm_ordem_servico_arquivado
Outras entradas deste fluxo:
wfm_outage_notification_interface — buffer interno ApiOntMiddleware, consumido por MSOSRMidleware
wfm_ordem_servico_dispositivo — produzido por ApiGodOrdemServico, consumido por MSOSRMidleware
wfm_coordenada_equipe — produzido por MSGodCartografia, consumido por MSAVLMidleware
wfm_coordenada_veiculo — produzido por MSGodCartografia, consumido por MSAVLMidleware
tópicos Kafka
consumidos por
4 middlewares ↓
MsWfmMiddleware
Middleware · Outbound REST
📖 Regra de Negócio

✅ O que faz: Consome wfm_alocacao via Kafka e envia atualizações de alocação/status de equipe ao ADMS via Sensedia WFM adapter. O ModeloEquipeWorker (CronJob */5 * * * *) sincroniza o modelo completo de equipes ao ADMS consultando a ApiGodModelo e enviando via POST /wfm-adms/v1/crewmodel.

🛑 Se parar: O ADMS não recebe atualizações de alocação/status de equipe. O ModeloEquipeWorker (CronJob) falha independentemente e é monitorado pelo OCP.

📌 Regras:

  • wfm_alocacao: eventos de alocação enviados pelo NotificacaoStatusOsEquipeWorker
  • ModeloEquipeWorker (CronJob */5 * * * *): GET ApiGodModelo → POST /wfm-adms/v1/crewmodel — 1 réplica, Forbid concurrency, timeout 600 s
  • Endpoint destino: ADMS REST WFM adapter via Sensedia

Pod: mswfmmiddleware
ELK: mswfmmiddleware
◄ wfm_alocacao ↗ POST /wfm-adms/v1/crewassignments ↗ GET /api/v1/empresa/{empresa}/equipesadms ↗ POST /wfm-adms/v1/crewmodel
Sensedia WFM adapter
MSOSRMidleware
Middleware · Outbound SOAP
📖 Regra de Negócio

✅ O que faz: Consome notificações de interrupção (outage) e dispositivos afetados do Kafka, transforma para SOAP e chama o endpoint ReceiveIncidents no ADMS. Responsável por notificar o ADMS sobre incidentes e dispositivos afetados.

🛑 Se parar: O ADMS não recebe informações sobre incidentes de rede. Operadores do ADMS não verão eventos de interrupção originados no SIGOD.

📌 Regras:

  • Transforma payload Kafka → SOAP envelope para ReceiveIncidents
  • Endpoint destino: ADMS SOAP OSR adapter via Sensedia

Pod: msosrmidleware
ELK: msosrmidleware
◄ wfm_outage_notification_interface ◄ wfm_ordem_servico_dispositivo ◄ wfm_callback_realizado ◄ ContextDefinition.OrdemServico.Queue.MudancaCaracteristica ↗ SOAP ReceiveIncidents
Workers: AtualizaOrdemServicoCallbackWorker (consome wfm_callback_realizado) · AtualizaOrdemServicoMudancaCaracteristicaWorker · AtualizaOrdemServicoIndenizacaoWorker (consome wfm_ordem_servico_despachado + wfm_ordem_servico_criado)
Sensedia OSR adapter
MSAVLMidleware
Middleware · Outbound SOAP
📖 Regra de Negócio

✅ O que faz: Consome coordenadas de equipes e veículos do Kafka, converte o sistema de coordenadas de WGS84 para SIRGAS2000 e envia para o ADMS via SOAP AVL adapter. Permite ao ADMS rastrear a posição de equipes em campo em tempo real.

🛑 Se parar: O ADMS perde rastreamento de posição de equipes e veículos. Mapa de campo no ADMS para de atualizar.

📌 Regras:

  • 2 workers: AlteracaoCoordenadaEquipeWorker + AlteracaoVeiculoWorker
  • Conversão geodésica: WGS84 → SIRGAS2000 antes do envio
  • ADMS endpoint: PUT ChangedVehiclesCoordinates (SOAP/XML via Sensedia AVL adapter)

Pod: msavlmidleware
ELK: msavlmidleware
◄ wfm_coordenada_equipe ◄ wfm_coordenada_veiculo ↗ PUT ChangedVehiclesCoordinates
📐 WGS84 → SIRGAS2000
Sensedia AVL adapter
4º Middleware — MSGodLegSco (CDC Retorno OS Técnica)
MSGodLegSco
Middleware Legacy — Saída de Callbacks
📖 Regra de Negócio

✅ O que faz: Consome CDC Avro da tabela Oracle PDA.RETORNO_OS_TEC (via tópico ContextDefinition.Cdc.Queue.RetornoOsTec) e propaga os dados de retorno de OS técnica para MongoDB SIGOD e Kafka para downstream.

🛑 Se parar: Retornos de OS técnica do Oracle PDA não chegam ao MongoDB SIGOD. Informações de encerramento e callback técnico ficam desatualizadas.

📌 Regras:

  • Fonte CDC: tabela Oracle PDA.RETORNO_OS_TEC
  • Tópico Avro: ContextDefinition.Cdc.Queue.RetornoOsTec
  • Saída: MongoDB + tópico Kafka de retorno

Pod: msgodlegsco
ELK: msgodlegsco
◄ Cdc.Queue.RetornoOsTec (Avro) PDA · RETORNO_OS_TEC (CDC) mdb_ordem_servico_crp ► wfm_callback_realizado
MongoDB + Kafka
mdb_ordem_servico_crp
+ wfm_callback_realizado
🔍 Diagnóstico — Fluxo 3 (SIGOD → ADMS Outbound)
1. Consumer lag do MsWfmMiddleware — ADMS recebendo alocação/status de equipe?
🔎 Onde verificar: Kafka Manager → tópico consumido pelo MsWfmMiddleware: wfm_alocacao. Para o modelo de equipes (CronJob): kubectl get cronjob -n adms | grep mswfmmiddleware. ELK: mswfmmiddleware. Datadog: service mswfmmiddleware.
⚠️ Sintoma de problema: Lag crescente significa que o ADMS está desatualizado sobre alocações/status de equipe ou escalas. Despachantes no ADMS verão equipes alocadas no SIGOD com atraso.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep mswfmmiddleware. 2) Checar logs ELK por erros REST ao chamar o ADMS WFM adapter. 3) Testar o endpoint WFM do Sensedia manualmente. 4) Verificar se o token de autenticação do Sensedia WFM está válido.
2. Consumer lag do MSOSRMidleware — ADMS sendo notificado sobre interrupções e dispositivos?
🔎 Onde verificar: Kafka Manager → tópicos wfm_outage_notification_interface e wfm_ordem_servico_dispositivo. ELK: msosrmidleware. Portal Sensedia → API OSR adapter → logs de chamada SOAP ReceiveIncidents.
⚠️ Sintoma de problema: ADMS não recebe notificações de interrupção de energia. O mapa de rede elétrica no ADMS fica desatualizado — operadores de rede não veem dispositivos afetados.
⚡ Ação imediata: 1) Verificar pods do MSOSRMidleware. 2) Checar erros SOAP no ELK (SoapFaultException). 3) Verificar se o endpoint SOAP ReceiveIncidents do ADMS está respondendo. 4) Inspecionar payload enviado — campos obrigatórios podem estar nulos.
3. Consumer lag do MSAVLMidleware — ADMS recebendo coordenadas GPS de equipes e veículos?
🔎 Onde verificar: Kafka Manager → tópicos wfm_coordenada_equipe e wfm_coordenada_veiculo. ELK: msavlmidleware. Datadog: service msavlmidleware.
⚠️ Sintoma de problema: ADMS não recebe posição GPS de equipes. O mapa do ADMS mostra equipes paradas ou em posições antigas. Despachantes não conseguem acompanhar equipes no campo em tempo real.
⚡ Ação imediata: 1) Verificar pods do MSAVLMidleware. 2) Checar logs por erros de conversão de coordenadas WGS84 → SIRGAS2000 (pode indicar coordenada inválida). 3) Verificar chamada SOAP ao ADMS AVL adapter no Sensedia. 4) Se a conversão está falhando, isolar a mensagem problemática e descartar da fila.
4. Error rate em algum dos 3 middlewares outbound (Datadog)
🔎 Onde verificar: Datadog → APM → Services. Verificar os 3 serviços outbound: mswfmmiddleware, msosrmidleware, msavlmidleware. Comparar error rate com baseline. Monitors/Alertas configurados podem já ter disparado. (MSGodLegSci foi movido para o Fluxo 2 — diagnosticar lá.)
⚠️ Sintoma de problema: Error rate acima do normal em qualquer dos 3 middlewares indica falha na comunicação com o ADMS ou com os bancos de dados. Mensagens com erro vão para Dead Letter Queue e não são reprocessadas automaticamente.
⚡ Ação imediata: 1) Identificar qual middleware tem maior error rate. 2) Analisar spans de erro no Datadog para identificar a causa raiz. 3) Verificar se o problema é na dependência downstream (ADMS, Oracle, Sensedia) ou no próprio serviço. 4) Inspecionar DLQs dos tópicos afetados.

📡 Fluxo 4 — Retorno aos Canais de Atendimento (SIATT / Oracle ATD)

🔄
Papel deste fluxo no ecossistema
Este pipeline conecta os eventos do SIGOD (via Kafka) com os sistemas de atendimento ao cliente (Oracle ATD) e com o ADMS (via SFTP/AMI). É o caminho de RETORNO da informação para os canais convencionais:
OrdemServico.Worker (Fluxo 2 — ADMS→SIGOD)  → Kafka  →  MsAttFiltroIncidentes  → workers especializados  →  Oracle ATD  +  ADMS via SFTP/AMI
📡 Pipeline de eventos WFM → comunicações aos clientes afetados. Filtro central por IdSistema=="ADMS". 7 consumers Kafka, 512 Mi, SemaphoreSlim(30).
Origem dos eventos — OrdemServico.Worker (Fluxo 2) → Hub central
⚠️ OrdemServico.Worker ↗ Fluxo 2
Fonte dos eventos de status · Fluxo ADMS→SIGOD
📖 Regra de Negócio

✅ O que faz: Consome o tópico wfm_ordem_servico e redistribui para tópicos de status específicos (criado, despachado, encerrado, cancelado, arquivado) com base no campo Status da mensagem. Detalhamento completo no Fluxo 2.

🛑 Se parar: ⚠️ CRÍTICO: tópicos de status não chegam ao MsAttFiltroIncidentes. Canais convencionais (SIATT) param de receber atualizações de OS.

Status roteados pelo OrdemServico.Worker (Fluxo 2)
► wfm_ordem_servico_criado ► wfm_ordem_servico_despachado ► wfm_ordem_servico_encerrado ► wfm_ordem_servico_cancelado ► wfm_ordem_servico_arquivado
Dados complementares da OS (também consumidos pelo MsAttFiltroIncidentes):
► wfm_ordem_servico_chamada ► wfm_ordem_servico_cliente_afetado
Origem a confirmar — produtores distintos do OrdemServico.Worker
Kafka
Hub central — MsAttFiltroIncidentes (7 consumers)
🟠 MsAttFiltroIncidentes
7 Consumers · Hub SIATT
📖 Regra de Negócio

✅ O que faz: Hub central dos canais convencionais. Consome 7 tópicos de status de OS vindos do OrdemServico.Worker, FILTRA apenas mensagens com IdSistema=="ADMS" (ignora OSs de outros sistemas como SGM) e redistribui para crm_comunicacao e crm_clientes_afetados_desligamento_emergencial.

🛑 Se parar: Clientes afetados por desligamentos não recebem comunicação. Workers downstream (MsAttComunicacao, MsAttDesligamentoEmergencial) ficam sem eventos para processar.

📌 Regras:

  • Filtro crítico: IdSistema == "ADMS" — OSs de outros sistemas são descartadas silenciosamente
  • 7 consumers Kafka em paralelo com SemaphoreSlim(30) para controle de concorrência
  • Memória alocada: 512 Mi — monitorar OOM

ELK: msattfiltroincidentes
Recursos: 512 Mi · SemaphoreSlim(30)
Filtro: IdSistema == "ADMS"
▼ wfm_ordem_servico_criado ▼ wfm_ordem_servico_despachado ▼ wfm_ordem_servico_encerrado ▼ wfm_ordem_servico_cancelado ▼ wfm_ordem_servico_arquivado ▼ wfm_ordem_servico_chamada ▼ wfm_ordem_servico_cliente_afetado ▲ crm_comunicacao ▲ crm_clientes_afetados_desligamento_emergencial mdb_ordem_servico_crp ComunicacoesJobs OrdemServicoCrm
🍃 MongoDB
mdb_ordem_servico_crp (várias collections)
ComunicacoesJobs · OrdemServicoCrm
Workers downstream — processamento especializado
🟠 MsAttComunicacao
Worker · Comunicação
📖 Regra de Negócio

✅ O que faz: Consome o tópico crm_comunicacao e grava registros de comunicação no Oracle ATD (tabelas: ATT_LIGACOES, ATT_INTERACAO, COMUNICACOES). Cada mensagem Kafka vira um registro de interação com o cliente no sistema de atendimento.

🛑 Se parar: Interações com clientes não são registradas no Oracle ATD. Histórico de comunicações fica desatualizado.

📌 Regras:

  • Cada evento crm_comunicacao → INSERT em ATT_LIGACOES + ATT_INTERACAO + COMUNICACOES
  • Oracle ATD é consultado pelo ADMS para histórico de atendimento

ELK: msattcomunicacao
▼ crm_comunicacao ATD · ATT_LIGACOES ATD · ATT_INTERACAO ATD · COMUNICACOES
🗄️ Oracle ATD
ATT_LIGACOES · ATT_INTERACAO
COMUNICACOES
⬆ consultado pelo ADMS
📖 Regra de Negócio

✅ O que faz: Banco Oracle ATD (Atendimento ao Cliente). Destino de escrita do MsAttComunicacao: armazena ligações, interações e comunicações com clientes afetados por eventos de desligamento. Consultado pelo ADMS para histórico de atendimento.

🛑 Se parar: Banco externo — verificar conectividade Oracle ATD, locks e permissões de INSERT nas tabelas.

🟠 MsAttDesligamentoEmergencial
Worker · Desligamento Emergencial
📖 Regra de Negócio

✅ O que faz: Consome o tópico crm_clientes_afetados_desligamento_emergencial, identifica os clientes afetados pelo desligamento de emergência e grava no Oracle ATD para notificação e registro.

🛑 Se parar: Clientes afetados por desligamentos emergenciais não são registrados no ATD. Equipes de atendimento não sabem quais clientes notificar.

📌 Regras:

  • Cada evento = um ou mais clientes afetados a serem gravados no ATD
  • Oracle ATD é consultado pelo ADMS para determinar impacto de desligamentos

ELK: msattdesligamentoemergencial
◄ crm_clientes_afetados_desligamento_emergencial ATD.DESLIGAMENTO_EMGCL_OCORC_TECNC (upsert/delete)
🗄️ Oracle ATD
DESLIGAMENTO_EMGCL_OCORC_TECNC
clientes afetados
⬆ consultado pelo ADMS
📖 Regra de Negócio

✅ O que faz: Banco Oracle ATD — tabela de clientes afetados por desligamento emergencial. Alimentado pelo MsAttDesligamentoEmergencial e consultado pelo ADMS para determinar impacto e acionar comunicação com clientes.

🛑 Se parar: Banco externo — verificar conectividade e permissões de INSERT.

📂 SFTP Externo
Arquivo CSV de programação
de desligamentos
📖 Regra de Negócio

✅ O que faz: Servidor SFTP externo que disponibiliza arquivos CSV com a programação de desligamentos planejados. O MsAttDesligamentoProgramado faz polling neste SFTP para buscar os arquivos.

🛑 Se parar: MsAttDesligamentoProgramado não encontra arquivos novos. Verificar conectividade SFTP e credenciais nos secrets OCP.

🟠 MsAttDesligamentoProgramado
Worker · SFTP/CSV
📖 Regra de Negócio

✅ O que faz: Worker que faz polling no SFTP externo para buscar arquivos CSV com programação de desligamentos planejados. Processa cada linha do CSV e grava os registros de desligamento programado na tabela DESLIGAMENTO_PROGRAMADO do Oracle ATD.

🛑 Se parar: Desligamentos programados não são registrados no Oracle ATD. O ADMS não saberá quais clientes notificar antecipadamente sobre desligamentos planejados — impacto em conformidade regulatória ANEEL.

📌 Regras:

  • Entrada: arquivo CSV via SFTP externo (polling por intervalo)
  • Saída: INSERT em Oracle ATD DESLIGAMENTO_PROGRAMADO
  • ELK: msattdesligamentoprogramado

ELK: msattdesligamentoprogramado
← CSV via SFTP ATD.DESLIGAMENTO_PROGRAMADO ► crm_clientes_afetados_desligamento_programado
Fluxo: SFTP (CSV OutageReport) → Oracle ATD
Pipeline de clientes — monitoramento e atualização
🟠 MsAttMonitoraInstalacao
Worker · Polling Oracle
📖 Regra de Negócio

✅ O que faz: Worker de polling que monitora a tabela INSTALACAO no Oracle ATD e produz crm_atualizacao_cliente_adms para sincronização incremental. Também produz crm_atualizacao_cliente_adms_demanda no modo batch/lote completo controlado por parâmetro.

🛑 Se parar: Dados de instalações de clientes ficam desatualizados no SIGOD.

📌 Regras:

  • Polling por intervalo em Oracle ATD.INSTALACAO
  • Produz atualização incremental e lote completo sob demanda para o MsAttCliente

ATD · INSTALACAO (polling) ▲ crm_atualizacao_cliente_adms ▲ crm_atualizacao_cliente_adms_demanda
🟠 MsAttCliente
Worker · Cadastro Cliente
📖 Regra de Negócio

✅ O que faz: Consome crm_atualizacao_cliente_adms e crm_atualizacao_cliente_adms_demanda para sincronizar dados de clientes nos bancos Oracle ATD, IEO e GRA, além do MongoDB (cliente_adms).

🛑 Se parar: Cadastro de clientes fica desatualizado nos bancos Oracle e MongoDB.

📌 Regras:

  • Grava em Oracle ATD, IEO e GRA + MongoDB cliente_adms

▼ crm_atualizacao_cliente_adms ▼ crm_atualizacao_cliente_adms_demanda ATD.INSTALACAO ATD.CD_PARAMETROS_GLOBAIS IEO.CRM_CLIENTE GRA.INGRID_* cliente_adms
🟠 MsAttIQOSMiddleware
Worker batch · ATD/GIS → HTTP IQOS
📖 Regra de Negócio

✅ O que faz: Processa registros pendentes em ATD.INTEGRACAO_CLIENTE_IQOS, consulta/atualiza ATD.CRM_CLIENTE, consulta GIS.EO_CONSUMIDOR para dados de rede e envia clientes ou OSs para a API IQOS via HTTP/Sensedia.

🛑 Se parar: Dados de clientes/OS pendentes no ATD deixam de ser enviados ao IQOS. Registros ficam com status pendente ou erro em INTEGRACAO_CLIENTE_IQOS.

📌 Regras:

  • Não usa Kafka
  • Execução batch a cada minuto
  • Status final: processado ou erro na tabela de integração

ATD.INTEGRACAO_CLIENTE_IQOS ATD.CRM_CLIENTE GIS.EO_CONSUMIDOR → HTTP IQOS Sem Kafka
🟠 MsAttClienteCsv
Worker · Batch CSV/SFTP
📖 Regra de Negócio

✅ O que faz: Worker batch que lê dados de clientes do Oracle e MongoDB, gera um arquivo CSV e o envia via SFTP para o ADMS AMI adapter. Permite ao ADMS ter base atualizada de clientes.

🛑 Se parar: ADMS não recebe atualização de base de clientes. AMI adapter trabalha com dados desatualizados.

📌 Regras:

  • Processo batch (não contínuo) — verificar schedule de execução
  • Destino: SFTP → ADMS AMI adapter
  • ELK index: msattclientecsv

ELK: msattclientecsv
ATD.INSTALACAO IEO.CRM_CLIENTE GRA.INGRID_* GIS.EO_CONSUMIDOR cliente_adms → CSV → SFTP
📤 SFTP
arquivo CSV de clientes
📖 Regra de Negócio

✅ O que faz: Servidor SFTP de transferência de arquivos CSV de clientes do SIGOD para o ADMS. Ponto de entrega dos arquivos gerados pelo MsAttClienteCsv.

🛑 Se parar: Arquivos CSV não chegam ao ADMS AMI adapter. Verificar credenciais SFTP nos secrets OCP.

⚡ ADMS
AMI adapter
atualização de clientes
📖 Regra de Negócio

✅ O que faz: ADMS AMI (Advanced Metering Infrastructure) adapter. Recebe arquivos CSV de clientes via SFTP e atualiza a base de dados de clientes no ADMS. Sistema externo — fora do controle do time SIGOD.

🛑 Se parar: Base de clientes no ADMS fica desatualizada. Escalar para equipe do ADMS.

🟠 MsAtualizaPotencia
CronJob 02h00 · Potência
📖 Regra de Negócio

✅ O que faz: CronJob agendado para 02h00 que lê os dados de potência de clientes das tabelas Oracle GRA (INGRID_*) e faz BulkWrite no MongoDB cliente_adms.

🛑 Se parar: Dados de potência ficam desatualizados no MongoDB. Se não executar às 02h00, verificar logs ELK.

📌 Regras:

  • Execução: diária às 02h00
  • Fonte: Oracle GRA.INGRID_* → MongoDB cliente_adms (BulkWrite)
  • ELK index: msatualizapotenciacliente

ELK: msatualizapotenciacliente
GRA · INGRID_* (cron) cliente_adms (BulkWrite)
Serviço adicional — APIMovimentaReclamacao (Movimentação de Reclamações ATD)
🌐 APIMovimentaReclamacao
API REST · Reclamações ATD
📖 Regra de Negócio

✅ O que faz: API REST que movimenta reclamações no Oracle ATD. Recebe comunicações via endpoint POST /{empresa}/comunicacao e grava diretamente no Oracle ATD.

🛑 Se parar: Movimentações de reclamações técnicas não são registradas no ATD.

POST /{empresa}/comunicacao Oracle ATD (R/W)
Início do SAC proativo — MSCCA
Kafka de desligamentos + crm_comunicacaoMSCCA → cache MongoDB 24h + fila MSGSAC.DP.{empresa}
ER_MSCCA
📥 MsAttFiltroIncidentes produz
▲ crm_clientes_afetados_desligamento_emergencial
▲ crm_comunicacao
📥 MsAttDesligamentoProgramado produz
▲ crm_clientes_afetados_desligamento_programado
Kafka
🟠 MSCCA
Worker .NET 8 · Desligamentos & SAC Proativo
📖 Regra de Negócio

✅ O que faz: Serviço de cache de desligamentos e iniciador do SAC proativo. Consome eventos de desligamento programado/emergencial e de comunicações CRM, enriquece com dados do Oracle, cacheia no MongoDB (com TTL de 24h) e enfileira mensagens de SAC proativo (MSGSAC.DP.{empresa}) para notificação proativa dos clientes afetados. Atua exclusivamente em empresas com ADMS habilitado (param global 70).

🛑 Se parar: Cache de desligamentos desatualizado. SAC proativo não disparado. Histórico de OS de desligamento não cacheado no MongoDB.

📌 Regras:

  • 21 consumidores paralelos: 1 (desligProg) + 10 (desligEmerg) + 10 (histOS)
  • MongoDB TTL: 24 horas para DesligamentoProgramado e DesligamentoEmergencial
  • SAC proativo: fila MSGSAC.DP.{codigoEmpresaWeb}
  • Somente empresas com param global 70 = "ADMS"

Pod: mscca
ELK: mscca
▼ crm_clientes_afetados_desligamento_emergencial ▼ crm_clientes_afetados_desligamento_programado ▼ crm_comunicacao Oracle ATD · MENSAGEM_ALERTA (R) Oracle ATD · CONSUMIDOR (R) Oracle ATD · INTERRUPCOES_UT/CR (R) Oracle ATD · TEMPLATE_MENSAGEM_SAC (R) Oracle ATD · COMUNICACOES (R) DesligamentoProgramado.{empresa} (TTL 24h) DesligamentoEmergencial.{empresa} (TTL 24h) HistoricoOs.{empresa} HistoricoFaltaEnergia ControleSacOcorrenciaTecnica.{empresa} ▲ Fila SAC · MSGSAC.DP.{empresa}
🍃 MongoDB (TTL 24h)
DesligamentoProgramado · DesligamentoEmergencial
HistoricoOs · ControleSacOcorrenciaTecnica
📢 SAC Proativo
Fila MSGSAC.DP.{empresa}
→ notificação de clientes afetados
🔍 Diagnóstico — Fluxo 4 (Retorno aos Canais de Atendimento)
1. Consumer lag nos 7 tópicos wfm_ordem_servico_* (MsAttFiltroIncidentes)
🔎 Onde verificar: Kafka Manager ou comando: kafka-consumer-groups --bootstrap-server <broker> --describe --group msattfiltroincidentes-group. Monitorar os 7 tópicos: wfm_ordem_servico_criado, _despachado, _encerrado, _cancelado, _arquivado, wfm_ordem_servico_chamada, wfm_ordem_servico_cliente_afetado.
⚠️ Sintoma de problema: Lag crescente significa que eventos do SIGOD estão se acumulando sem serem distribuídos para os canais de comunicação com clientes. Clientes afetados por desligamentos não receberão comunicação.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep msattfiltroincidentes. 2) Checar logs ELK: msattfiltroincidentes. 3) Verificar se o OrdemServico.Worker (Fluxo 2) está produzindo esses tópicos — o problema pode estar na origem.
2. Filtro IdSistema=="ADMS" — OSs de outros sistemas sendo propagadas indevidamente?
🔎 Onde verificar: Logs do MsAttFiltroIncidentes no ELK (msattfiltroincidentes). Filtrar por mensagens que não contêm IdSistema=ADMS para ver se estão sendo descartadas corretamente. Pode-se também conferir no Kafka o volume do tópico crm_comunicacao — se o volume for inesperadamente alto, pode indicar falha no filtro.
⚠️ Sintoma de problema: OSs de outros sistemas (ex: SGM, CRM) sendo enviadas aos canais convencionais do ADMS, gerando comunicações indevidas para clientes errados.
⚡ Ação imediata: 1) Amostrar mensagens no tópico crm_comunicacao para checar se todos têm IdSistema=ADMS. 2) Se houver mensagens indevidas, verificar se houve deploy recente do MsAttFiltroIncidentes que possa ter alterado a lógica de filtro.
3. Consumer lag do tópico crm_comunicacao (MsAttComunicacao → Oracle ATD)
🔎 Onde verificar: Kafka Manager → tópico crm_comunicacao. ELK: msattcomunicacao. Para confirmar gravações no Oracle ATD: SELECT COUNT(*) FROM ATT_LIGACOES WHERE DT_CADASTRO > SYSDATE - 1/24 e também ATT_INTERACAO, COMUNICACOES.
⚠️ Sintoma de problema: Lag crescente indica que os registros de interação com clientes afetados não estão sendo gravados no Oracle ATD. Operadores de atendimento não verão o histórico de comunicação.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep msattcomunicacao. 2) Checar logs ELK por erros de INSERT no Oracle ATD. 3) Testar conectividade com o banco Oracle ATD.
4. Consumer lag do tópico crm_clientes_afetados_desligamento_emergencial (MsAttDesligamentoEmergencial)
🔎 Onde verificar: Kafka Manager → tópico crm_clientes_afetados_desligamento_emergencial. ELK: msattdesligamentoemergencial. Validar registros no Oracle ATD: tabela DESLIGAMENTO_EMGCL_OCORC_TECNC.
⚠️ Sintoma de problema: Clientes afetados por desligamentos emergenciais não estão sendo identificados e notificados. Em situações de emergência, isso impacta diretamente o atendimento e a conformidade com a ANEEL.
⚡ Ação imediata: 1) Verificar pods do MsAttDesligamentoEmergencial. 2) Checar logs por exceções. 3) Verificar se o MsAttFiltroIncidentes está publicando corretamente neste tópico.
5. Conectividade SFTP — MsAttClienteCsv e MsAttDesligamentoProgramado conseguem transferir arquivos?
🔎 Onde verificar: ELK: msattclientecsv e msattdesligamentoprogramado. Filtrar por erros de SFTP (connection refused, timeout, authentication failed). Verificar se o servidor SFTP destino (ADMS AMI adapter) está acessível.
⚠️ Sintoma de problema: Arquivos CSV não sendo entregues ao ADMS via SFTP. O ADMS não receberá a lista atualizada de clientes afetados e não disparará o AMI adapter.
⚡ Ação imediata: 1) Testar conexão SFTP manualmente para o servidor destino. 2) Verificar credenciais SFTP (usuário/senha/chave SSH) nos secrets do OCP. 3) Confirmar que o diretório SFTP de destino existe e tem permissão de escrita.
6. MongoDB cliente_adms — MsAttCliente gravando corretamente?
🔎 Onde verificar: ELK: msattcliente. MongoDB: collection cliente_adms — verificar documentos recentes (campo updatedAt ou equivalente). Datadog: service msattcliente.
⚠️ Sintoma de problema: Dados de clientes desatualizados no MongoDB. O MsAttClienteCsv usa essa collection para gerar os arquivos CSV — se estiver desatualizada, os arquivos enviados ao ADMS conterão dados defasados.
⚡ Ação imediata: 1) Verificar pods do MsAttCliente. 2) Checar logs ELK por erros de BulkWrite no MongoDB. 3) Verificar se o tópico de entrada do MsAttCliente está com lag.
7. CronJob MsAtualizaPotencia — executou às 02h00 hoje?
🔎 Onde verificar: OCP: oc get cronjob -n adms | grep msatualizapotencia e oc get jobs -n adms | grep msatualizapotencia. Logs ELK: msatualizapotenciacliente — filtrar por data de hoje às 02h00. Status do job: "Completed" = OK, "Failed" = problema.
⚠️ Sintoma de problema: Job marcado como "Failed" ou ausente nos logs significa que os dados de potência dos clientes não foram atualizados. Impacto em relatórios de consumo e cálculos de desligamento programado.
⚡ Ação imediata: 1) Checar logs do job no ELK para identificar a exceção. 2) Se necessário, executar o job manualmente: oc create job --from=cronjob/msatualizapotencia msatualizapotencia-manual-$(date +%s) -n adms. 3) Monitorar execução até conclusão.

🔄 Fluxo 5 — CDC Oracle → Kafka → MongoDB

🗄️
Oracle PDA
XStream / Debezium CDC Source
XStream Debezium Connector Schema: PDA
📖 Regra de Negócio

✅ O que faz: Banco Oracle PDA (legado) — origem do fluxo CDC. Monitora alterações em tabelas críticas do despacho (SGD_SIGOD, OS_DIGITACAO, MOV_DESPACHO_LOTE_ITEM, EQUIPE*, DESPACHANTE*, SERVICO) via XStream e transmite eventos ao Debezium Oracle Connector.

🛑 Se parar: XStream parado = NENHUMA mudança do legado Oracle chega ao Kafka. Todos os incorporadores ficam sem dados. Escalar para DBA Oracle imediatamente.

📌 Regras:

  • XStream deve estar em estado WAITING FOR TRANSACTION ou STREAMING
  • Verificar: SELECT SERVER_NAME, STATUS FROM V$XSTREAM_OUTBOUND_SERVER
  • Banco externo — qualquer problema deve ser escalado para DBA Oracle

🔗
Kafka Connect
Debezium Oracle Connector → Tópicos oracle_stream.*
oracle_stream.* oracle_stream.SGD_SIGOD oracle_stream.OS_DIGITACAO oracle_stream.MOV_DESPACHO_LOTE_ITEM oracle_stream.EQUIPE* oracle_stream.DESPACHANTE* oracle_stream.SERVICO Jdbc.Queue.*
📖 Regra de Negócio

✅ O que faz: Kafka Connect com Debezium Oracle Connector. Captura eventos de mudança (INSERT/UPDATE/DELETE) nas tabelas do Oracle PDA via XStream e os publica automaticamente nos tópicos oracle_stream.* no Kafka, disponibilizando os dados para todos os incorporadores e workers legacy.

🛑 Se parar: Connector em estado FAILED = CDC completamente parado. Todos os tópicos oracle_stream.* param de receber mensagens. Verificar: curl http://<kafka-connect>:8083/connectors/oracle-pda-cdc/status.

📌 Regras:

  • Serialização dos eventos: Avro com Schema Registry
  • Cada linha alterada no Oracle → 1 mensagem Kafka no tópico correspondente
  • Restart via: POST /connectors/oracle-pda-cdc/restart

Incorporadores (paralelos)
🔧
MsGodIncorpTec
Incorporador Técnico · OCP: adms
📖 Regra de Negócio

✅ O que faz: Incorporador CDC que consome eventos da tabela Oracle ITG.SGD_SIGOD (via Kafka Connect JDBC) e incorpora Ordens de Serviço técnicas (TipoServico 3 — emergência, 4 — programada, 6 — inspeção) no MongoDB SIGOD. Não produz Kafka — toda saída é via HTTP para a ApiGodOrdemServico. Lê dados complementares do Oracle (ITG, PDA, ATD, FAR) para enriquecer a OS antes de persistir.

🛑 Se parar: OSs técnicas criadas no legado Oracle (SGD_SIGOD) não aparecem no SIGOD. Despachantes não verão OSs de origem legada para tipos 3, 4 e 6.

📌 Regras:

  • Serialização Avro: schema energisa.god.ordem_servico.sgd_sigod.SgdSigodAvro
  • Feature flag Oracle: parâmetro SIGOD/416 — controla se incorpora OSs já concluídas
  • Ignora registros com IND_BLOQUEIO = 'S' ou IND_EXCLUIR = 'S'
  • ELK: sigod_logs

▼ ContextDefinition.Jdbc.Queue.OsTecnico → POST/PATCH ApiGodOrdemServico ordem_servico (TipoServico 3/4/6) ITG.SGD_SIGOD ITG.OCORRENCIAS_ENCERRADAS ITG.ATENDIMENTO_OCORRENCIA_ENCRD ITG.OCORRENCIAS_PENDENTES ITG.COMUNICACOES PDA.CONFIGURACAO_SISTEMA (SIGOD/416) ELK: sigod_logs
💼
MsGodIncorpCom
Incorporador Comercial · OCP: adms
📖 Regra de Negócio

✅ O que faz: Consome eventos CDC da tabela oracle_stream.OS_DIGITACAO e incorpora OSs comerciais (TipoServico 0) no MongoDB do SIGOD. São digitações manuais do operador no sistema legado.

🛑 Se parar: OSs comerciais digitadas manualmente no legado não aparecem no SIGOD.

📌 Regras:

  • Filtra apenas TipoServico 0 (comercial/digitação manual)
  • Cada INSERT/UPDATE na OS_DIGITACAO gera evento Kafka para o SIGOD

▼ oracle_stream.OS_DIGITACAO → POST/PATCH ApiGodOrdemServico ordem_servico (TipoServico 0) ELK: sigod_logs
📦
MsGodIncorpLote
Incorporador Lote · OCP: adms
📖 Regra de Negócio

✅ O que faz: Consome eventos CDC da tabela oracle_stream.MOV_DESPACHO_LOTE_ITEM e incorpora OSs de lote (TipoServico 5) no MongoDB do SIGOD. Usa Redis (chave SIGOD_416) para controle de deduplicação de mensagens.

🛑 Se parar: OSs de lote não chegam ao SIGOD. Despachos em lote do legado ficam invisíveis.

📌 Regras:

  • Filtra apenas TipoServico 5 (lote)
  • Redis SIGOD_416 previne processamento duplicado com TTL configurado
  • Idempotência garantida por chave Redis

▼ oracle_stream.MOV_DESPACHO_LOTE_ITEM → POST/PATCH ApiGodOrdemServico ordem_servico (TipoServico 5) Redis: SIGOD_416 ELK: sigod_logs
msgodincorpmanut
Incorporador Manutenção · DESABILITADO
inativo
msgodincorpproj
Incorporador Projetos · DESABILITADO
inativo
Workers Legacy (paralelos)
⚙️
OrdemServico.Legacy.Worker
Worker Legacy OS · OCP: adms
📖 Regra de Negócio

✅ O que faz: Worker legacy com 8 hosted services que sincronizam dados auxiliares de OSs do legado Oracle para o MongoDB SIGOD. Trata: ocorrências encerradas (ATENDIMENTO_OCORRENCIA_ENCRD), callbacks automáticos (LISTA_CALLBACK_AUTOMATIZADO), programações de despacho (PROGRAMACAO_DESPACHO), indenizações (INDENIZACAO_OCORRENCIA), bloqueios de despacho (BLOQUEIO_DESPACHO) e criações de OS via WSROT (SOLICITACAO_OS_PDA).

🛑 Se parar: Dados auxiliares das OSs (programações, bloqueios, compensações, callbacks) ficam desatualizados no MongoDB. OS criadas via WSROT podem não ser processadas.

📌 Regras:

  • 8 workers independentes — uma falha não derruba os outros
  • ProcessaSolicitacaoOrdemServico faz HTTP POST para WSROT para criar OS
  • ProcessaAtualizacaoOrdemServicoBloqueio escreve de volta no Oracle PDA (BLOQUEIO_DESPACHO)
  • ELK: sigod_logs

▼ oracle_stream.* (8 tópicos) ▼ Jdbc.Queue.* ▲ wfm_ordem_servico FAR · ATD · PDA · ITG ELK: sigod_logs
Workers internos (7 ativos)
  • ProcessaOcorrenciaEncerradaJdbc.Queue.AtendimentoOcorrenciaEncrdOrdemServico.Queue.Default
  • ProcessaJdbcBloqueioDespachoCdc.Queue.BloqueioDespachoOrdemServico.Queue.Default
  • ProcessaJdbcListaCallbackAutomatizadoWorkerCdc.Queue.ListaCallbackAutomatizado
  • ProcessaJdbcParametrosWorkerJdbc.Queue.Parametros
  • ProcessaJdbcProgramacaoDespachoWorkerJdbc.Queue.ProgramacaoDespachoOrdemServico.Queue.Default
  • ProcessaJdbcCompensacaoWorkerJdbc.Queue.CompensacaoOrdemServico.Queue.Default
  • ProcessaSolicitacaoOrdemServicoCdc.Queue.SolicitacaoOsPdaHTTP WSROT/ApiGodOrdemServico
⚠️ Lógica importante: ignora OS com IdSistema == "ADMS" e equipe CALLROB
👥
Equipe.Legacy.Worker
Worker Legacy Equipe · OCP: adms
📖 Regra de Negócio

✅ O que faz: Worker CDC que monitora 8 tabelas Oracle relacionadas a equipes (EQUIPE, EQUIPE_FUNC, EQUIPE_REGIAO, ITEM_ESCALA_MENSAL, ANOMALIA_PDA, APRESENTACAO_FCO, DESVIO_FCO, CD_PARAMETROS_GLOBAIS). Para cada evento CDC, enriquece os dados consultando Oracle PDA/ATD e publica wfm_modelo_equipe; o worker ProcessaCdcItemEscalaMensalWorker também publica wfm_modelo_equipe_escala. A produção de wfm_modelo_equipe_funcionario por APRESENTACAO_FCO está a confirmar porque o ER aponta código comentado.

🛑 Se parar: Modelo de equipes no MongoDB (mdb_modelo_crp) fica desatualizado. O SIGOD não refletirá mudanças de composição, escala, anomalias e desvios de equipes legadas.

📌 Regras:

  • 9 hosted services independentes — cada tabela Oracle tem seu próprio worker
  • Parâmetro Oracle SIGOD-146 (CD_PARAMETROS_GLOBAIS) controla alertas de atraso de turno
  • ELK: sigod_logs

▼ oracle_stream.EQUIPE* (8 tópicos) ▲ wfm_modelo_equipe ▲ wfm_modelo_equipe_escala △ wfm_modelo_equipe_funcionario (a confirmar) mdb_modelo_crp ELK: sigod_logs
CDC Oracle consumido (8 tabelas) + outbound adicional
  • EQUIPE, EQUIPE_FUNC, EQUIPE_REGIAO, ITEM_ESCALA_MENSAL
  • ANOMALIA_PDA, APRESENTACAO_FCO, DESVIO_FCO, CD_PARAMETROS_GLOBAIS
  • 9º hosted service outbound: sincronização com API Mobile (apresentação AWS)
👤
Operador.Legacy.Worker
Worker Legacy Operador · ATIVO
▼ oracle_stream.DESPACHANTE ▼ oracle_stream.DESPACHANTE_REGIAO ▼ oracle_stream.DESPACHANTE_PERFIL_EQP ▼ oracle_stream.DESPACHANTE_SERVICO ▲ wfm_modelo_operador ▲ wfm_modelo_operador_regiao ▲ wfm_modelo_operador_servico ▲ wfm_modelo_operador_perfil_equipe
Mecanismo especial OperadorBuffer com debounce de 3000ms.
🔌
Integration.Legacy
Worker Legacy Integração · OCP: adms
📖 Regra de Negócio

✅ O que faz: Worker legacy que consome eventos CDC da tabela Oracle SERVICO (catálogo de serviços do PDA) e mantém a coleção servico no MongoDB mdb_modelo_crp sincronizada. Garante que o SIGOD tenha o catálogo de serviços atualizado conforme o legado Oracle.

🛑 Se parar: Catálogo de serviços no MongoDB (mdb_modelo_crp.servico) fica desatualizado. Novos serviços cadastrados no Oracle PDA não aparecem no SIGOD.

📌 Regras:

  • Tópico consumido: oracle_stream.SERVICO (CDC Debezium)
  • Persistência: MongoDB mdb_modelo_crp, coleção servico
  • Worker ativo: ProcessaCdcServicoWorker · Worker desabilitado: ProcessaCdcPdaWorker
  • ELK: sigod_logs

▼ oracle_stream.SERVICO mdb_modelo_crp · coll: servico ELK: sigod_logs
JdbcConector
Conector JDBC Kafka · DESABILITADO
inativo
🔍 Diagnóstico — Fluxo 5 (CDC Oracle → Kafka → MongoDB)
1. XStream do Oracle PDA está ativo e transmitindo?
🔎 Onde verificar: Conectar ao Oracle PDA como DBA e executar: SELECT SERVER_NAME, STATUS, CAPTURED_SCN, APPLIED_SCN FROM V$XSTREAM_OUTBOUND_SERVER. Status deve ser WAITING FOR TRANSACTION ou STREAMING. Se ABORTED ou ausente, o XStream está com problema.
⚠️ Sintoma de problema: XStream parado significa que NENHUMA alteração no Oracle PDA (inserções, atualizações de OS, despachos) chegará ao Kafka. Todos os incorporadores ficarão sem dados novos — o SIGOD ficará desatualizado em relação ao legado Oracle.
⚡ Ação imediata: 1) Verificar se houve reinicialização do Oracle PDA recentemente. 2) Checar Alert Log do Oracle por erros relacionados ao XStream. 3) Acionar DBA Oracle para reiniciar o serviço XStream se necessário. 4) Monitorar se o Debezium connector começa a receber eventos após restart.
2. Debezium connector está rodando no Kafka Connect?
🔎 Onde verificar: Kafka Connect REST API: curl -s http://<kafka-connect-host>:8083/connectors/oracle-pda-cdc/status | jq .. O campo connector.state deve ser RUNNING. Se for FAILED, o campo trace mostrará o erro. Também checar tarefas: tasks[0].state deve ser RUNNING.
⚠️ Sintoma de problema: Connector em estado FAILED significa que o CDC está completamente parado. Os tópicos oracle_stream.* não receberão novas mensagens. Todos os incorporadores (Tec, Com, Lote, Manut, Proj) ficam sem dados.
⚡ Ação imediata: 1) Verificar o trace do erro no status do connector. 2) Tentar restart: POST /connectors/oracle-pda-cdc/restart. 3) Se falhar ao reiniciar, checar conectividade entre o Kafka Connect e o Oracle PDA. 4) Verificar credenciais Oracle usadas pelo Debezium (pode ter expirado).
3. Consumer lag nos tópicos oracle_stream.* — incorporadores estão consumindo?
🔎 Onde verificar: Kafka Manager → tópicos oracle_stream.SGD_SIGOD, oracle_stream.OS_DIGITACAO, oracle_stream.MOV_DESPACHO_LOTE_ITEM, oracle_stream.EQUIPE*. Verificar lag por consumer group de cada incorporador. Terminal: kafka-consumer-groups --bootstrap-server <broker> --describe --group msgodincorptec-group (repetir para cada incorporador).
⚠️ Sintoma de problema: Lag alto indica que o Debezium está produzindo mas os incorporadores não estão consumindo. Dependendo do tópico afetado: lag em SGD_SIGOD afeta OSs técnicas; lag em OS_DIGITACAO afeta OSs comerciais; lag em MOV_DESPACHO_LOTE_ITEM afeta despachos em lote.
⚡ Ação imediata: 1) Identificar qual incorporador tem lag (Tec, Com, Lote, Manut ou Proj). 2) Verificar pods: oc get pods -n adms | grep msgodincorp. 3) Checar logs ELK do incorporador afetado por exceções. 4) Verificar se há mensagem malformada causando loop de falha (Dead Letter Queue).
4. MongoDB está recebendo as OSs incorporadas? Collection ordem_servico atualizada?
🔎 Onde verificar: MongoDB: database mdb_ordem_servico_crp, collection ordem_servico. Verificar documentos recentes. ELK: filtrar por erros MongoWriteException nos índices dos incorporadores (sigod_logs). Datadog: services msgodincorptec, msgodincorpcom, msgodincorplote.
⚠️ Sintoma de problema: Collection sem inserções recentes enquanto há lag nos tópicos indica que os incorporadores estão consumindo mas falhando ao gravar no MongoDB. OSs do legado Oracle não aparecem no SIGOD.
⚡ Ação imediata: 1) Checar logs ELK dos incorporadores por erros de escrita MongoDB. 2) Verificar se há problema de schema (campos novos no Oracle sem mapeamento no incorporador). 3) Verificar conectividade MongoDB. 4) Checar DLQ para mensagens com falha recorrente.
5. Error rate elevada nos incorporadores (Datadog: msgodincorptec, msgodincorpcom, msgodincorplote)
🔎 Onde verificar: Datadog → APM → Services. Verificar: msgodincorptec, msgodincorpcom, msgodincorplote, msgodincorpmanut, msgodincorpproj. Analisar spans com erro para identificar tipo de exceção.
⚠️ Sintoma de problema: Error rate acima de 0.5% indica que mensagens do CDC estão sendo descartadas ou indo para DLQ. Dependendo do volume, pode haver perda de OSs que nunca chegarão ao SIGOD.
⚡ Ação imediata: 1) Identificar o incorporador com maior error rate. 2) Checar DLQ do tópico afetado para ver as mensagens com falha. 3) Analisar se é erro pontual (mensagem inválida) ou sistêmico. 4) Se pontual, descartar da DLQ após análise. 5) Se sistêmico, investigar dependência comum (MongoDB, Redis).

📍 Fluxo 6 — Alocação de OS

📍
Papel deste fluxo no ecossistema
O despachante aloca manualmente uma OS a uma equipe pelo SIGOD Legado PowerBuilder ou pelo WFMDashboardApiGodAlocacao recebe e publica no Kafka → MsGodAlocacao (7 workers) processa e publica eventos reais de alocação → MsWfmMiddleware (Fluxo 3) consome wfm_alocacao e sincroniza com o ADMS via Sensedia. Paralelamente, MSGodCartografia rastreia GPS das equipes → MSAVLMidleware (Fluxo 3) envia posição ao ADMS.
Pontos de entrada — 6.A SIGOD PowerBuilder e 6.B WFMDashboard convergem nas APIs GOD
🖥️ 6.A — SIGOD Legado PowerBuilder
🖥️
SIGOD Legado (PowerBuilder)
Despachante · Desktop · PowerBuilder
📖 Regra de Negócio

✅ O que faz: Sistema legado desktop (PowerBuilder) do despachante SIGOD. A tela w_sigod001 usa o objeto uo_despacho_api para consultar OSs/equipes e executar despacho, retirada forçada/status e atualizações operacionais via APIs GOD/Sensedia. Será substituído pelo WFMDashboard.

🛑 Se parar: Despachante perde acesso ao sistema legado ou às chamadas REST do uo_despacho_api. Verificar disponibilidade do cliente PowerBuilder, parâmetros globais SIGOD 390/403/404/405 e autenticação Sensedia.

📌 Regras:

  • Entrada operacional legada: despachante executa despacho/alocação na tela w_sigod001.
  • uo_despacho_api autentica na Sensedia e usa a URL base do parâmetro global SIGOD/390.
  • Não passa pelo BFF do WFMDashboard; chama APIs GOD diretamente a partir do PowerBuilder.
  • A solicitação de retirada normal aparece na tela via uoi_despacho_os.of_solicita_retirada(...); no uo_despacho_api foi confirmada retirada forçada/status por PATCH /OrdemServico/{numOs}/.
Chamadas REST confirmadas no uo_despacho_api
  • GET /OrdemServicoLegado/{dw} → alimenta DataWindows de OSs da tela.
  • GET /EquipeLegado/empresa/{empresa}/usuario/{usuario}/indicador/{espera} → consulta equipes para despacho.
  • POST /Alocacao/despachar/{numOs} → despacha OS para equipe com Equipes[].IdExterno = tipo-equipe.
  • PATCH /OrdemServico/{numOs}/ → atualiza situação, programação, região, impressão, prioridade ou retirada forçada/status.
  • PATCH /Equipe → atualiza indicador de equipe em espera.
REST direto → APIs GOD PowerBuilder uo_despacho_api
🖥️ 6.B — WFMDashboard (autenticação + BFF)
🔐
WFMAuth
Next.js 16 · OCP: sigod · Pod: wfmauth
📖 Regra de Negócio

✅ O que faz: Gateway de autenticação dedicado para o WFMDashboard. Gerencia o login via Azure AD B2C (MSAL popup), armazena tokens em cookies HttpOnly (iron-session) e redireciona o operador autenticado para o WFMDashboard com token de acesso.

🛑 Se parar: Operadores e despachantes não conseguem iniciar sessão no WFMDashboard. A tela de login fica indisponível.

📌 Regras:

  • Autenticação: Azure AD B2C (MSAL) → popup → token no localStorage → cookie HttpOnly.
  • Session API: POST /api/session/set define cookies utk, ugd e ucp.
  • Após login: redireciona para NEXT_PUBLIC_DASHBOARD_URL/dashboard?token=....
  • Validação de usuário via BFF: NEXT_PUBLIC_BASE_URL_BFF / /user/get.
  • Proteções: rate limit 100 req/60s por IP, X-Frame-Options DENY e CSP frame-ancestors none.
Fluxo de autenticação
  • WFMAuth /login → inicia login do operador via Azure AD B2C/MSAL.
  • POST /api/session/set → grava sessão em cookies HttpOnly.
  • NEXT_PUBLIC_BASE_URL_BFF/user/get → valida o usuário no BFF.
  • NEXT_PUBLIC_DASHBOARD_URL/dashboard?token=... → redireciona para o WFMDashboard.
Azure AD B2C (MSAL) Iron Session → WFMDashboard
redirect
🖥️
WFMDashboard
Next.js 15 · BFF · OCP: adms · Pod: wfmdashboard
📖 Regra de Negócio

✅ O que faz: Dashboard operacional do COI. O BFF Next.js faz proxy para as APIs backend, incluindo despacho, retirada e redirecionamento na ApiGodAlocacao. Também recebe atualizações de situação de OS via SSE de ApiGodOrdemServico, acompanha confirmações da alocação via SignalR e apresenta equipes/OS em mapa.

🛑 Se parar: Operadores e despachantes perdem a interface principal do COI. Sem visibilidade real-time de OS, equipes no mapa e confirmações operacionais de despacho.

📌 Regras:

  • Alocação: POST /api/alocacao/despachar, /redirecionar, /retirar e /retirar-forcado → proxy REST para ApiGodAlocacao.
  • Confirmação: ApiGodAlocacao publica retorno operacional no SignalR Hub /listener, consumido pelo dashboard.
  • SSE: GET /api/sse/situacao-alterada → proxy para ApiGodOrdemServico/api/OrdemServicoSituacaoSse/stream (wfm_ordem_servico_situacao_alterada).
  • Postos operacionais: CRUD via ApiGodModelo/PostoOperacional.
  • Priorização e região: PATCH /api/ordens-servico/{id}/priorizar e PATCH /api/ordens-servico/{id}/regiao.
  • Regiões legado: GET /api/regiao/polos-legado e regioes-legado.
  • Mapa: módulos map-platform e mapa para camadas de equipe e ordem de serviço.
  • Autenticação: sessão vinda do WFMAuth, cookies HttpOnly, JWT e validação complementar via ApiGodIdentidade/BFF.
Chamadas BFF e integrações
  • POST /api/alocacao/despachar → BFF chama ApiGodAlocacao para despachar OS para equipe.
  • POST /api/alocacao/redirecionar → BFF chama ApiGodAlocacao para redirecionar despacho.
  • POST /api/alocacao/retirar → BFF chama ApiGodAlocacao para retirar equipe da OS.
  • POST /api/alocacao/retirar-forcado → BFF chama ApiGodAlocacao para retirada forçada.
  • GET /api/sse/situacao-alterada → BFF expõe SSE de ApiGodOrdemServico.
  • SignalR /listener → recebe confirmações operacionais da ApiGodAlocacao.
  • ApiGodModelo/PostoOperacional → CRUD de postos operacionais.
APIs backend consumidas
  • ApiGodAlocacao → despacho, retirada, redirecionamento e retirada forçada.
  • ApiGodOrdemServico → SSE de situação de OS e ações de priorização/região.
  • ApiGodModelo → postos operacionais, regiões e polos legado.
  • ApiGodWfm → dados de dashboards WFM.
  • ApiGodCartografia → coordenadas e camadas de mapa.
  • ApiGodIdentidade → validações de usuário/JWT.
BFF /api/alocacao/* ◄ SSE situação OS SignalR /listener 6 APIs backend
REST direto BFF REST /alocacao
🔵
ApiGodAlocacao
REST + SignalR Hub · OCP: adms · Pod: apigodalocacao
📖 Regra de Negócio

✅ O que faz: Gateway REST para operações de alocação de OS. Recebe requisições do despachante via WFMDashboard/BFF e, no legado PowerBuilder, recebe despacho confirmado pelo uo_despacho_api em POST /Alocacao/despachar/{numOs}. Valida o payload, publica eventos Kafka de alocação quando aplicável e notifica o frontend moderno via SignalR.

🛑 Se parar: O despachante não consegue alocar, retirar ou redirecionar OS pelo SIGOD legado nem pelo WFMDashboard. A tela de despacho fica sem confirmação operacional. Nenhum tópico de alocação é produzido.

📌 Regras:

  • SIGOD Legado: uo_despacho_api.of_despacho chama POST /Alocacao/despachar/{numOs} via Sensedia
  • SIGOD Legado: retirada forçada/status foi confirmada no objeto como PATCH /OrdemServico/{numOs}/; solicitação de retirada normal permanece em rotina PowerBuilder legada
  • WFMDashboard: BFF /api/alocacao/* faz proxy REST para ApiGodAlocacao
  • POST /Alocacao/despachar/{numOs} / BFF despacho → publica em wfm_alocacao → MsGodAlocacao processa
  • POST /solicitacao-retirada → publica em wfm_solicitacao_retirada
  • SignalR Hub /listener: WFMDashboard escuta eventos de confirmação em tempo real
  • Autenticação via token JWT (validado antes de publicar no Kafka)
Endpoints REST e chamadas recebidas
  • POST /alocacao → cria uma alocação de OS para equipe e publica wfm_alocacao.
  • PUT /alocacao/{id} → atualiza uma alocação existente, incluindo troca ou ajuste de equipe.
  • POST /solicitacao-retirada → solicita retirada da OS da equipe e publica wfm_solicitacao_retirada.
  • GET /alocacao/equipe/{id} → consulta todas as alocações ativas da equipe.
  • SignalR /listener → envia confirmação operacional ao WFMDashboard.
REST SignalR Hub ▲ wfm_alocacao ▲ wfm_solicitacao_retirada ELK: sigod_logs
Kafka: wfm_alocacao / wfm_solicitacao_retirada / oracle_stream.DESPACHO_OS
🟠
MsGodAlocacao
7 Workers paralelos · OCP: adms · Pod: msgodalocacao
📖 Regra de Negócio

✅ O que faz: 7 workers paralelos que processam todas as operações de alocação de OS a equipes de campo. Consome fontes CDC e internas de alocação, publica tópicos semânticos reais de ContextDefinition.Alocacao.Queue.* e mantém sincronismo com ADMS e legado.

🛑 Se parar: Alocações param completamente — o ADMS não é notificado, o legado Oracle fica dessincronizado e despachantes perdem visibilidade do campo.

📌 Regras de negócio:

  • Uma OS só pode ser alocada a uma equipe ativa e disponível (validado via Redis cache)
  • Ao alocar: status da OS muda para "despachado" — propagado via wfm_alocacao_despachado e refletido no payload de wfm_alocacao
  • Retirada: remove a OS da equipe sem encerrar a OS — propagado via wfm_alocacao_retirada
  • Redis mantém snapshot atualizado das equipes e OSs para performance (evita roundtrip Oracle a cada operação)
  • Alocações do legado Oracle chegam via CDC (oracle_stream.DESPACHO_OS) — sem passar pelo despachante
Workers internos (7 BackgroundServices) — visão por trilha
1. Entradas CDC / solicitação
W1 — ProcessaJdbcDespachoOsWorker
Traduz o CDC de despacho do legado em evento interno de alocação.
▼ oracle_stream.DESPACHO_OS ▲ wfm_alocacao
W2 — ProcessaJdbcMovDespachoLoteItemWorker
Normaliza eventos de lote auxiliar para o mesmo barramento interno.
▼ Jdbc.Queue.OsLoteAuxiliar ▲ wfm_alocacao
W3 — ProcessaJdbcSolicitacaoOsWorker
Grava solicitação PDA diretamente; não produz outro tópico.
▼ Cdc.Queue.SolicitacaoOsPda grava direto
2. Roteamento semântico
W4 — ProcessaAtualizacaoOrdemServicoWorker
Atualiza a OS/equipe e abre o leque dos tópicos reais por situação.
▼ wfm_alocacao mdb_alocacao_crp mdb_ordem_servico_crp Redis: OS/equipes
▲ wfm_alocacao_despachado ▲ wfm_alocacao_reconhecido ▲ wfm_alocacao_lido ▲ wfm_alocacao_em_deslocamento ▲ wfm_alocacao_localizado ▲ wfm_alocacao_localizacao ▲ wfm_alocacao_execucao ▲ wfm_alocacao_finalizacao ▲ wfm_alocacao_encerramento ▲ wfm_alocacao_retirada ▲ wfm_alocacao_interrompido ▲ wfm_alocacao_redirecionada
Este é o worker central: os demais alimentam ou reagem aos eventos que ele roteia.
3. Sincronismo e ações
W5 — ProcessaSincronismoDespacho
Sincroniza despacho no legado via SincronismoOsLegadoService.
▼ wfm_alocacao_despachado PDA · ATD · ITG PDA.ORDEM_PRIORIZACAO_OS_EQUIPE PDA.USUARIO_OS
W6 — ProcessaSincronismoRetirada
Reflete a retirada da equipe no legado.
▼ wfm_solicitacao_retirada PDA · ATD · ITG
W7 — ProcessaDespachoRedirecionamento
Chama IAlocacaoRepository.DespacharAsync para redirecionar a OS entre equipes.
▼ wfm_alocacao_redirecionada HTTP ApiGodAlocacao
ELK: msgodalocacao
Tópicos reais de alocação → consumidos por múltiplos destinos
Serviços downstream da alocação
🗺️
MSGodCartografia
Worker Cartografia · OCP: adms
Consome rastreamento GPS do Oracle (CDC CAMINHO_PERCORRIDO) e publica coordenadas de equipes e veículos no Kafka, permitindo ao ADMS rastrear posição em tempo real.
📖 Regra de Negócio

✅ O que faz: Worker CDC que consome eventos de rastreamento GPS da tabela Oracle CAMINHO_PERCORRIDO (via Debezium) e publica as coordenadas nos tópicos wfm_coordenada_equipe e wfm_coordenada_veiculo. O MSAVLMidleware (Fluxo 3) consome esses tópicos e envia as posições ao ADMS com conversão de coordenadas WGS84 → SIRGAS2000.

🛑 Se parar: Posições de equipes e veículos não chegam ao Kafka. ADMS perde rastreamento de campo. Verificar CDC da tabela CAMINHO_PERCORRIDO no Oracle PDA.

📌 Regras:

  • IDTORI_GPS == "P"wfm_coordenada_veiculo
  • IDTORI_GPS == "I" ou "E"wfm_coordenada_equipe
  • Tópico default: wfm_coordenada (auto-consumo via ProcessaAtualizacaoCoordenadaWorker)
  • 2 BackgroundServices; MongoDB collection: ObjetoMapa
  • Cada evento GPS do Oracle → 1 mensagem wfm_coordenada_equipe ou wfm_coordenada_veiculo
  • Dependência: Debezium CDC da tabela CAMINHO_PERCORRIDO deve estar ativo

▼ oracle_stream.CAMINHO_PERCORRIDO ▲ wfm_coordenada_equipe ▲ wfm_coordenada_veiculo ObjetoMapa
👷
Equipe.Worker
Worker Equipe · OCP: adms
Consome eventos de coordenadas, alocação e modelo de equipe para manter o estado atual de cada equipe (localização, composição, OSs alocadas) no MongoDB.
📖 Regra de Negócio

✅ O que faz: Worker que consolida o estado atual de cada equipe de campo no MongoDB. Consome eventos de múltiplas fontes — coordenadas GPS (wfm_coordenada_*), alocações (wfm_alocacao) e dados do modelo de equipe (wfm_modelo_equipe*) — para manter as coleções Equipe e EquipeLegado no MongoDB sempre atualizadas com posição, composição e OSs alocadas.

🛑 Se parar: Estado das equipes no MongoDB fica desatualizado. Dashboard do despachante mostra informações antigas sobre localização e carga de trabalho das equipes.

📌 Regras:

  • Workers (5): ProcessaCoordenadaEquipeWorker, ProcessaOrdemServicoVinculadaWorker, ProcessaProgramacaoDespachoWorker, ProcessaMappingEquipeWorker, ProcessaIntegracaoApresentacaoAwsWorker
  • Consome: wfm_coordenada_equipe, wfm_coordenada_veiculo, wfm_alocacao, wfm_ordem_servico_programado, wfm_modelo_equipe, wfm_modelo_equipe_funcionario
  • Produz: wfm_modelo_equipe
  • NÃO acessa Oracle — apenas MongoDB (mdb_modelo_crp: Equipe, EquipeLegado)

▼ wfm_coordenada_equipe ▼ wfm_coordenada_veiculo ▼ wfm_alocacao ▼ wfm_modelo_equipe ▼ wfm_modelo_equipe_funcionario ▼ wfm_ordem_servico_programado ▲ wfm_modelo_equipe Equipe EquipeLegado
🔗 Conexão com outros fluxos
O tópico wfm_alocacao é consumido pelo MsWfmMiddleware; o payload carrega a situação semântica da alocação para transformação no formato REST do ADMS e envio via Sensedia WFM adapter. O ADMS atualiza o despacho de equipes com base nesses eventos.
Os tópicos wfm_coordenada_equipe e wfm_coordenada_veiculo produzidos pelo MSGodCartografia são consumidos pelo MSAVLMidleware (Fluxo 3), que converte as coordenadas de WGS84 → SIRGAS2000 e envia ao ADMS via SOAP AVL adapter.
O tópico oracle_stream.DESPACHO_OS vem do Debezium CDC (Fluxo 5) monitorando a tabela Oracle PDA. O Worker 3 (DespachoOSConsumer) deste fluxo consome esse tópico para sincronizar alocações feitas diretamente no sistema legado.
🔍 Diagnóstico — Fluxo 6 (Alocação de OS)
1. Consumer lag de wfm_alocacao e wfm_solicitacao_retirada — filas acumulando no MsGodAlocacao?
🔎 Onde verificar: Kafka Manager → tópicos wfm_alocacao e wfm_solicitacao_retirada. Terminal: kafka-consumer-groups --bootstrap-server <broker> --describe --group msgodalocacao-group. Datadog: service msgodalocacao → Kafka metrics.
⚠️ Sintoma de problema: Lag crescente indica que solicitações de alocação enviadas pelo despachante no SIGOD não estão sendo processadas. Equipes ficam sem OS alocadas, e o ADMS não recebe as confirmações de alocação.
⚡ Ação imediata: 1) Verificar os 7 workers do MsGodAlocacao: oc get pods -n adms | grep msgodalocacao. 2) Checar se todos os 7 pods estão Running. 3) Verificar logs ELK do serviço por exceções. 4) Checar se o Redis (cache) está respondendo, pois falha no Redis causa falha em cadeia nos workers.
2. Redis disponível? (Cache de OS e equipes usado pelo MsGodAlocacao)
🔎 Onde verificar: Testar conectividade Redis: redis-cli -h <redis-host> -p 6379 ping — deve retornar PONG. Verificar métricas do cluster Redis no Datadog ou painel próprio. ELK: filtrar logs do MsGodAlocacao por erros RedisConnectionException ou TimeoutException.
⚠️ Sintoma de problema: Redis indisponível faz com que o MsGodAlocacao trabalhe sem cache — consulta diretamente o Oracle/MongoDB a cada operação, aumentando drasticamente a latência. Se a latência P95 estiver elevada, verificar timeouts no Redis como possível causa raiz.
⚡ Ação imediata: 1) Verificar status do cluster Redis. 2) Checar se há memória disponível no Redis (pode estar cheio e evictando chaves). 3) Verificar timeouts de conexão nas configurações do serviço (secrets OCP). 4) Se Redis está OK mas latência alta, verificar número de conexões simultâneas (connection pool esgotado).
3. Latência do MsGodAlocacao elevada — P95 acima do aceitável?
🔎 Onde verificar: Datadog → APM → Services → msgodalocacao. Verificar: Latência P95 e P99, Error Rate (%), Throughput (req/seg). Comparar com SLO configurado. Também checar dashboard dedicado do MsGodAlocacao se existir.
⚠️ Sintoma de problema: Latência P95 acima do SLO significa que a maioria das alocações está demorando mais do que o contratado. Impacto direto na experiência do despachante — tela do SIGOD demora para confirmar alocações.
⚡ Ação imediata: 1) Identificar se o gargalo é no Kafka (lag), Redis (timeout) ou banco de dados (Oracle/MongoDB lento). 2) Verificar queries lentas no Oracle PDA/ATD/ITG. 3) Checar se o Redis está com alta latência. 4) Considerar escalar horizontalmente (aumentar réplicas dos workers).
4. Sincronismo com o legado Oracle — PDA/ATD/ITG atualizados após alocação?
🔎 Onde verificar: Oracle PDA: SELECT * FROM MOV_DESPACHO WHERE DT_DESPACHO > SYSDATE - 1/24 ORDER BY DT_DESPACHO DESC. ELK: logs do MsGodAlocacao por erros de escrita Oracle. Datadog: spans de chamadas ao Oracle.
⚠️ Sintoma de problema: Alocações confirmadas no SIGOD mas não refletidas no Oracle PDA geram inconsistência. Sistemas legados que consultam o Oracle verão OS sem equipe alocada, podendo gerar realocações duplicadas.
⚡ Ação imediata: 1) Verificar logs ELK por exceções Oracle (ORA-00001 = duplicidade, ORA-00054 = lock). 2) Checar V$LOCKED_OBJECT no Oracle PDA para locks ativos. 3) Verificar se o usuário Oracle tem permissões adequadas.
5. Consumer lag do tópico oracle_stream.DESPACHO_OS — alocações do legado chegando ao SIGOD?
🔎 Onde verificar: Kafka Manager → tópico oracle_stream.DESPACHO_OS. Verificar lag do consumer group do MsGodAlocacao neste tópico. Se o Debezium CDC do Fluxo 5 estiver com problema, este tópico também ficará sem dados.
⚠️ Sintoma de problema: Alocações feitas diretamente no sistema legado Oracle (pelo operador do legacy) não chegam ao SIGOD. O SIGOD mostrará OS sem equipe mesmo que a equipe já esteja alocada no legado — visão inconsistente para o despachante.
⚡ Ação imediata: 1) Verificar se o Debezium connector do Fluxo CDC está rodando (ver Fluxo 5, item 2). 2) Checar se a tabela DESPACHO_OS no Oracle PDA está sendo monitorada pelo XStream. 3) Se o CDC está OK mas o lag persiste, verificar pods do MsGodAlocacao.

📞 Fluxo 7 — Callbacks Técnicos (Redis)

⚠️ Broker = Redis (NÃO Kafka!) — Pipeline em 4 estágios · 10 pods por estágio (1 por distribuidora) · Projeto OCP: call-back
Distribuidoras:
Ponto de entrada
🌐 APIGodTecnica
API REST · OCP: call-back
📖 Regra de Negócio

✅ O que faz: API REST que recebe callbacks técnicos do campo (técnicos reportando conclusão de OS). Produz na fila Redis MsGodEncerCallTec.{empresa} para início do pipeline de encerramento.

🛑 Se parar: Callbacks de técnicos em campo não entram no sistema. OSs não são encerradas automaticamente via pipeline Redis.

📌 Regras:

  • Endpoint: POST /api/v1/EncerramentoOT/RecebeCallback
  • Payload: OTEncerramento (CodigoEmpresaWeb, NumeroOs, SiglaUsuario, SistemaOrigem)
  • Códigos empresa: emg=1, ese=3, ebo=4, epb=5, emt=6, eto=8, ess=9, ems=10, ero=20, eac=30
  • Produz na fila Redis separada por empresa: MsGodEncerCallTec.{empresa}
  • Swagger: apigodtecnica (projeto OCP: call-back)

⊙ POST /api/v1/EncerramentoOT/RecebeCallback
Redis Produce MsGodEncerCallTec.{empresa}
🔴 MsGodEncerCallTec
Worker Redis · Estágio 1
📖 Regra de Negócio

✅ O que faz: Estágio 1 do pipeline Redis de callbacks técnicos. Consome MsGodEncerCallTec.{empresa}, processa o callback e roteia para os estágios 2, 3 ou 4 conforme o tipo de ação necessária.

🛑 Se parar: Pipeline de callback para no início. Nenhum encerramento automático de OS é processado.

📌 Regras:

  • 10 pods (1 por distribuidora)
  • Roteia para MsGodAtribOsTec, MsGodEncerOsTec ou MSGODConfIntegSisTec

Consume: MsGodEncerCallTec.{empresa}
PDA.LISTA_CALLBACK_ROBOTIZADO (R/W) PDA.CD_PARAMETROS_GLOBAIS (R) → MsGodAtribOsTec → MsGodEncerOsTec → MSGODConfIntegSisTec
Estágios 2 · 3 · 4 — em paralelo conforme roteamento do Estágio 1
MsGodAtribOsTec.{empresa}
🔴 MSGODAtribOSTec
Worker Redis · Estágio 2
📖 Regra de Negócio

✅ O que faz: Estágio 2 do pipeline Redis. Consome MsGodAtribOsTec.{empresa} e grava atribuição de OS nas tabelas Oracle PDA (DESPACHO_OS, COMUNICACOES).

🛑 Se parar: Atribuições de OS a técnicos não são gravadas no Oracle PDA.

📌 Regras:

  • 10 pods (1 por distribuidora)
  • Grava em PDA.DESPACHO_OS e PDA.COMUNICACOES

Consume: MsGodAtribOsTec.{empresa}
PDA.DESPACHO_OS PDA.COMUNICACOES PDA.USUARIO_OS (INSERT) PDA.SIGOD_USUARIOS (INSERT) PDA.SGD_SIGOD (UPDATE ind_bloqueio=1) SGD.SGD_SIGOD
MSGODConfIntegSisTec.{empresa}
🔴 MSGODConfIntegSisTec
Worker Redis · Estágio 3
📖 Regra de Negócio

✅ O que faz: Estágio 3 do pipeline Redis. Consome MSGODConfIntegSisTec.{empresa} e pode re-enfileirar mensagens no MsGodEncerCallTec para reprocessamento (ciclo).

🛑 Se parar: Mensagens podem ficar em loop se o ciclo não for resolvido.

📌 Regras:

  • 10 pods (1 por distribuidora)
  • ⚠️ Ciclo possível: pode re-produzir para MsGodEncerCallTec — monitorar profundidade das filas

Consume: MSGODConfIntegSisTec.{empresa}
PDA.OCORRENCIAS_ENCERRADAS PDA.ATENDIMENTO_OCORRENCIA_ENCRD PDA.RETORNO_OCORRENCIA_ENCERRADA ↺ Re→ MsGodEncerCallTec ↔ MSGODConfIntegSisTecAux.{empresa} Ciclo possível
MsGodEncerOsTec.{empresa}
🔴 MsGodEncerOsTec A confirmar
Worker Redis · Estágio 4 inferido
📖 Regra de Negócio

✅ O que faz: Estágio inferido do pipeline Redis. A fila MsGodEncerOsTec.{empresa} é produzida pelo MSGODEncerCallTec, mas o repositório/consumer não foi localizado no ER; a função de encerramento no sistema técnico permanece a confirmar.

🛑 Se parar: Se o consumer existir e estiver indisponível, OSs encaminhadas para esta fila podem não avançar para encerramento técnico. Confirmar o serviço antes de tratar o Estágio 4 como causa raiz.

📌 Regras:

  • Estágio inferido pela fila Redis MsGodEncerOsTec.{empresa}
  • Repo/consumer não localizado na engenharia reversa
  • Operação final e tabelas gravadas: a confirmar

Consume: MsGodEncerOsTec.{empresa}
▼ MsGodEncerOsTec.{empresa} repo/consumer não localizado estágio inferido
📋 Todos os serviços utilizam IQosElkService (ELK QoS customizado) · Todos no projeto OCP: call-back
🔍 Diagnóstico — Fluxo 7 (Callbacks Técnicos — Redis)
1. Cluster Redis do namespace call-back está disponível e respondendo?
🔎 Onde verificar: Testar conectividade: redis-cli -h <redis-host-callback> -p 6379 ping — deve retornar PONG. Verificar métricas no Datadog (memória usada, conexões ativas, erros). OCP: oc get pods -n call-back | grep redis.
⚠️ Sintoma de problema: Redis indisponível paralisa COMPLETAMENTE o pipeline de callbacks. Todos os 4 estágios (40 pods no total) param de processar. Callbacks do campo não chegam ao ADMS e OSs ficam em aberto indefinidamente.
⚡ Ação imediata: 1) Verificar pods Redis no OCP (oc get pods -n call-back). 2) Checar eventos do namespace: oc get events -n call-back --sort-by='.lastTimestamp'. 3) Se Redis não responde, escalar para equipe de infraestrutura imediatamente — impacto crítico em todas as distribuidoras.
2. Comprimento das filas Redis por empresa — alguma fila acumulando?
🔎 Onde verificar: Redis CLI: redis-cli -h <host> LLEN MsGodEncerCallTec.eac (repetir para cada empresa e cada serviço). Filas a verificar por empresa (eac, ebo, emg, ems, emt, epb, ero, ese, ess, eto): MsGodEncerCallTec.{empresa}, MsGodAtribOsTec.{empresa}, MsGodEncerOsTec.{empresa}, MSGODConfIntegSisTec.{empresa}.
⚠️ Sintoma de problema: Fila com length crescente (ex: MsGodEncerCallTec.emg > 1000) indica que o pod daquela empresa está parado ou com erro. Se uma empresa específica está acumulando, o problema é isolado naquele pod.
⚡ Ação imediata: 1) Identificar qual empresa tem fila crescente. 2) Verificar o pod específico: oc get pods -n call-back | grep msgodenercalltec — checar pod da empresa afetada. 3) Ver logs do pod: oc logs <pod-name> -n call-back --tail=100. 4) Reiniciar pod se necessário: oc delete pod <pod-name> -n call-back.
3. Oracle PDA — tabela LISTA_CALLBACK_ROBOTIZADO sendo processada corretamente?
🔎 Onde verificar: Oracle PDA: SELECT EMPRESA, STATUS, COUNT(*) FROM LISTA_CALLBACK_ROBOTIZADO WHERE DT_PROCESSAMENTO IS NULL GROUP BY EMPRESA, STATUS ORDER BY 3 DESC. Registros com status pendente há mais de 30 minutos indicam problema. ELK: IQosElkService (utilizado pelos serviços de callback).
⚠️ Sintoma de problema: Registros acumulando na tabela sem DT_PROCESSAMENTO indica que o Estágio 1 (APIGodTecnica → MsGodEncerCallTec) não está processando. Callbacks do campo chegam à API mas não avançam no pipeline.
⚡ Ação imediata: 1) Verificar pods do APIGodTecnica e MsGodEncerCallTec. 2) Checar logs ELK (IQosElkService) por erros de leitura/escrita Oracle. 3) Verificar se há lock na tabela: SELECT * FROM V$LOCKED_OBJECT WHERE OBJECT_ID = (SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME='LISTA_CALLBACK_ROBOTIZADO').
4. ⚠️ Ciclo infinito entre Estágio 3 e Estágio 1 — filas do MSGODConfIntegSisTec crescendo sem parar?
🔎 Onde verificar: Redis CLI: monitorar a fila MSGODConfIntegSisTec.{empresa} e ao mesmo tempo a fila MsGodEncerCallTec.{empresa} — se ambas crescem simultaneamente, é sinal de ciclo. ELK: filtrar logs do MSGODConfIntegSisTec por mensagens de reenvio para o Estágio 1.
⚠️ Sintoma de problema: O MSGODConfIntegSisTec (Estágio 3) reenvia para o MsGodEncerCallTec (Estágio 1) quando o ADMS não confirma a OS. Se o ADMS nunca confirmar, a mensagem fica em loop entre os estágios, consumindo recursos e nunca encerrando.
⚡ Ação imediata: 1) Identificar a OS causando o loop (checar payload da mensagem na fila). 2) Verificar se o ADMS está respondendo para aquela OS específica. 3) Se o ADMS nunca vai confirmar (OS inexistente), remover manualmente a mensagem da fila Redis. 4) Documentar o caso para investigação de causa raiz.
5. Error rate por empresa — alguma distribuidora com alta taxa de erros no IQosElkService?
🔎 Onde verificar: ELK index IQosElkService. Filtrar por campo empresa: eac, ebo, emg, ems, emt, epb, ero, ese, ess, eto. Criar aggregação por empresa e por nível de log (ERROR, WARN). Datadog: filtrar traces do call-back por tag de empresa.
⚠️ Sintoma de problema: Uma empresa com error rate muito maior que as outras indica problema específico daquela distribuidora — pode ser configuração incorreta, OS inválida ou problema de integração com o ADMS daquela empresa.
⚡ Ação imediata: 1) Isolar os logs da empresa afetada no ELK. 2) Identificar o tipo de erro dominante. 3) Verificar se o problema é a OS específica (erro de dados) ou o serviço (erro de infraestrutura). 4) Contatar equipe da distribuidora se necessário.
6. Pods ativos — confirmando 10 pods por estágio no namespace call-back
🔎 Onde verificar: OCP: oc get pods -n call-back. Deve haver 10 pods para cada serviço (1 por distribuidora): apigodtecnica-*, msgodenercalltec-*, msgodatribostec-*, msgodenercalltec-* (Estágio 2), msgodconfintegsistec-*. Todos devem estar em status Running.
⚠️ Sintoma de problema: Pod de uma empresa em CrashLoopBackOff ou Error significa que aquela distribuidora está sem processamento de callbacks. Técnicos de campo desta distribuidora não conseguem encerrar OS via callback.
⚡ Ação imediata: 1) Identificar quais pods não estão Running: oc get pods -n call-back | grep -v Running. 2) Ver logs do pod problemático: oc logs <pod> -n call-back. 3) Descrever o pod para ver eventos: oc describe pod <pod> -n call-back. 4) Reiniciar se necessário.

🔧 Fluxo 8 — SGM / Manutenção

Hub central de integração SGM
🟠 MsSgmOrdemServico
Worker + Hub · SGM
📖 Regra de Negócio

✅ O que faz: Hub central do SGM (manutenção). Consulta diretamente SGM.TASK, SGM.TASKEXECALL e SGM.REQUEST para localizar OSs/SS pendentes, produz sgm_origem_os para envio ao ADMS via ApiSmrMiddleware e consome sgm_retorno_os com retornos do ADMS.

🛑 Se parar: OSs de manutenção do SGM não são enviadas ao ADMS. Equipes de manutenção ficam sem OS no campo.

📌 Regras:

  • Leitura SGM por queries diretas nas tabelas TASK, TASKEXECALL e REQUEST
  • PCR_OSSS_S40_EQM é chamada no INMD pelo S40Service, não como busca principal no Oracle SGM
  • Consome sgm_pendencia_cadastral_tecnica_adms para tratar pendências cadastrais em SGM.REQUEST
  • Bidirecional: envia OS ao ADMS (sgm_origem_os) e recebe retorno (sgm_retorno_os)
  • [26/05/2026] Circuit breaker: 3 Workers (ConsultaOrigem, PendenciaCadastral, RetornoSuspensao) com MaxConsecutiveFailures = 5StopApplication() para reinício pelo OCP/K8s
  • [26/05/2026] Query: Campos de programação alterados de SCHEDSTART/SCHEDENDEXECSTART/EXECEND para DTH_INICIO/FIM_PROGRAMACAO
  • [26/05/2026] REQTYPEID: Pendência cadastral MERGE agora usa 'AD' para todas as origens (antes: '0C' para ADMS, 'AD' para PDA)
  • [26/05/2026] GIS: Nova query ObterDadosATOS_TP_TC_ATIVO (join atos_tp_tc_ativo + atos_tp_tc via id_instalacao)
  • [26/05/2026] Performance: Contexto.cs refatorado com compiled expression tree setters (cache ConcurrentDictionary, elimina reflection por linha)
  • [26/05/2026] Transações: BeginTransactionAsync/CommitAsync/RollbackAsync/DisposeAsync corrigidas em AtualizaExportacao e PendenciaCadastral

ELK: MsSgmOrdemServico
Oracle SGM: TASK · TASKEXECALL · REQUEST
Oracle INMD: OS_SS_S40_RETORNO
Oracle INEO: GIS
Procedure INMD: PCR_OSSS_S40_EQM (cada 5 min)
Workers internos e processo S40 [atualizado 26/05/2026]
  • ConsultaOrigem — produz sgm_origem_os · MridGenerator via factory DI · circuit breaker (5 falhas → StopApplication) · EXECSTART/EXECEND · filtro DTH_ATUALIZACAO_MANUTENCAO IS NOT NULL OR DTH_ATUALIZACAO_EXPORTACAO IS NOT NULL
  • RetornoSuspensao — consome sgm_retorno_os · circuit breaker + consumer auto-reconnect (30s backoff) · transação async corrigida
  • PendenciaCadastral — consome sgm_pendencia_cadastral_tecnica_adms · circuit breaker + consumer auto-reconnect (30s backoff) · REQTYPEID='AD' · transação async corrigida
  • S40Service — CronJob: chama PCR_OSSS_S40_EQM no INMD a cada 5 min
  • AtualizaExportacao — UPDATE DTH_ATUALIZACAO_EXPORTACAO = SYSDATE · transação async corrigida com await using OracleCommand
  • Leitura SGM: SGM.TASK, SGM.TASKEXECALL, SGM.REQUEST
  • Escrita/retorno INMD: INMD.OS_SS_S40_RETORNO + PCR_OSSS_S40_EQM
  • Pendências cadastrais: MERGE em SGM.REQUEST; enriquecimento GIS via INEO (+ ATOS_TP_TC_ATIVO)
  • Processo: 172 - Importar SS/OS - S40 (EQM_INTEGRA)
▲ sgm_origem_os ▼ sgm_retorno_os ▼ sgm_pendencia_cadastral_tecnica_adms SGM.TASK SGM.TASKEXECALL SGM.REQUEST INMD.OS_SS_S40_RETORNO INEO GIS INEO.ATOS_TP_TC_ATIVO
Kafka sgm_origem_os
Kafka sgm_retorno_os
🟢 ApiSmrMiddleware
Middleware OUTBOUND
📖 Regra de Negócio

✅ O que faz: Middleware OUTBOUND do SGM. Consome sgm_origem_os do Kafka e envia as OSs do SGM para o ADMS via Sensedia API "Receive Works - ADMS" (SMR adapter, REST receive-works).

🛑 Se parar: OSs do SGM não chegam ao ADMS. Equipes de manutenção sem OS no campo.

📌 Regras:

  • Consome sgm_origem_os → POST Sensedia "Receive Works - ADMS" (SMR adapter) → ADMS REST receive-works

ELK: ApiSmrMiddleware
▼ sgm_origem_os Sensedia "Receive Works - ADMS"
🟢 ApiSmnMiddleware
Middleware INBOUND SOAP
📖 Regra de Negócio

✅ O que faz: Middleware INBOUND SOAP do SGM. Recebe chamadas SOAP do ADMS via Sensedia API "Send Works Service - ADMS" (SMN adapter) com retorno de OSs e produz sgm_retorno_os para o MsSgmOrdemServico.

🛑 Se parar: ADMS não consegue devolver retorno de OS para o SGM. Pipeline de confirmação de OS SGM quebra.

📌 Regras:

  • Endpoint SOAP: Sensedia "Send Works Service - ADMS" (SMN adapter) → ApiSmnMiddleware → sgm_retorno_os
  • Produz sgm_retorno_os consumido pelo MsSgmOrdemServico

ELK: ApiSmnMiddleware
Sensedia "Send Works Service - ADMS" ▲ sgm_retorno_os
Sensedia SMR adapter
Sensedia SMN adapter
ADMS
REST receive-works
SOAP SendWorks
REST SOAP
🔍 Diagnóstico — Fluxo 8 (SGM / Manutenção)
1. Consultas SGM e procedure INMD do MsSgmOrdemServico executando corretamente?
🔎 Onde verificar: ELK: MsSgmOrdemServico — verificar logs do worker ConsultaOrigem lendo SGM.TASK, SGM.TASKEXECALL e SGM.REQUEST. Tabelas SGM: checar registros pendentes nessas tabelas. Oracle INMD: verificar execução do S40Service e a tabela OS_SS_S40_RETORNO; a procedure PCR_OSSS_S40_EQM serve exclusivamente para processar o retorno de OSs editadas no ADMS (suspensas pela operação, inseridas em OS_SS_S40_RETORNO) — não tem relação com as consultas de OS/SS enviadas ao ADMS, que são feitas exclusivamente pelo serviço .NET.
⚠️ Sintoma de problema: Falhas nas queries diretas do SGM impedem a produção de sgm_origem_os. Falhas no S40Service/INMD impedem o processamento periódico S40, mas não significam que a leitura principal de OSs ocorra por procedure no Oracle SGM.
⚡ Ação imediata: 1) Checar logs do MsSgmOrdemServico por erros nas queries SGM e no S40Service. 2) Validar pendências em TASK, TASKEXECALL e REQUEST. 3) Testar conectividade com Oracle INMD antes de executar PCR_OSSS_S40_EQM manualmente. 4) Se houver lock, acionar DBA do schema correto.
2. Consumer lag do tópico sgm_origem_os — ApiSmrMiddleware enviando OS ao ADMS?
🔎 Onde verificar: Kafka Manager → tópico sgm_origem_os. ELK: apismrmiddleware. Datadog: service apismrmiddleware. Verificar também o Sensedia SMR adapter — portal Sensedia → API SMR → logs de requisição.
⚠️ Sintoma de problema: Lag crescente indica que OSs do SGM não estão chegando ao ADMS. O despachante no ADMS não verá as OS de manutenção geradas pelo SGM.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep apismrmiddleware. 2) Checar logs ELK por erros ao chamar o ADMS via Sensedia SMR. 3) Verificar se o endpoint do ADMS SMR está disponível (testar manualmente). 4) Confirmar que o token do Sensedia SMR adapter é válido.
3. Consumer lag do tópico sgm_retorno_os — MsSgmOrdemServico recebendo retornos do ADMS?
🔎 Onde verificar: Kafka Manager → tópico sgm_retorno_os. ELK: MsSgmOrdemServico. Oracle INMD: SELECT * FROM OS_SS_S40_RETORNO WHERE DT_RETORNO > SYSDATE - 1/24 ORDER BY DT_RETORNO DESC.
⚠️ Sintoma de problema: Lag crescente no retorno significa que o ciclo de confirmação não está fechando. OSs enviadas ao ADMS não têm o protocolo de retorno gravado no Oracle INMD. O SGM fica sem saber se o ADMS aceitou a OS.
⚡ Ação imediata: 1) Verificar se o ApiSmnMiddleware está produzindo no tópico sgm_retorno_os. 2) Checar logs do MsSgmOrdemServico por erros ao gravar no Oracle INMD. 3) Verificar conectividade com Oracle INMD.
4. Sensedia SMR adapter — disponível e com latência aceitável?
🔎 Onde verificar: Portal Sensedia → API SMR adapter → Dashboard de saúde → latência média e taxa de erros. ELK: apismrmiddleware — filtrar por erros HTTP (5xx = problema no ADMS, 4xx = problema no payload, timeout = problema de rede).
⚠️ Sintoma de problema: Timeouts ou erros 5xx contínuos indicam que o ADMS não está aceitando as OSs de manutenção. Pode ser sobrecarga do ADMS ou problema específico no adapter SMR.
⚡ Ação imediata: 1) Testar o endpoint SMR do ADMS via Sensedia com payload de teste. 2) Verificar se outros adapters Sensedia estão com problema (pode ser falha geral do ADMS). 3) Checar se o certificado/token do SMR adapter está válido. 4) Acionar equipe do ADMS se necessário.
5. Oracle SGM — tabelas TASK / TASKEXECALL / REQUEST com registros travados ou pendentes?
🔎 Onde verificar: Oracle SGM: SELECT STATUS, COUNT(*) FROM TASK WHERE DT_CRIACAO > SYSDATE - 1 GROUP BY STATUS. Verificar também: SELECT * FROM TASKEXECALL WHERE STATUS = 'PENDENTE' AND DT_SOLICITACAO < SYSDATE - 1/12 (pendente há mais de 2 horas é anormal). Checar locks: SELECT * FROM V$LOCKED_OBJECT lo JOIN DBA_OBJECTS obj ON lo.OBJECT_ID = obj.OBJECT_ID WHERE obj.OBJECT_NAME IN ('TASK','TASKEXECALL','REQUEST').
⚠️ Sintoma de problema: Registros em status pendente por tempo excessivo ou tabelas com lock indicam que as queries diretas do ConsultaOrigem podem não avançar ou que updates de exportação ficaram travados.
⚡ Ação imediata: 1) Identificar e liberar locks se for seguro (confirmar com DBA). 2) Verificar se há sessões Oracle "zumbis" presas. 3) Analisar os registros pendentes para entender se é problema de dados ou de processamento.
6. Error rate no ApiSmrMiddleware e ApiSmnMiddleware (ELK / Datadog)
🔎 Onde verificar: ELK: índices apismrmiddleware (outbound — envia ao ADMS) e apismidleware (inbound — recebe do ADMS). Datadog: services apismrmiddleware e apismidleware. Verificar error rate e latência P95.
⚠️ Sintoma de problema: Error rate elevada em ambos os middlewares indica problema bidirecional com o ADMS. Se apenas o SMR (outbound) tem erros, o problema é no envio. Se apenas o SNN (inbound) tem erros, o problema é no recebimento de retornos.
⚡ Ação imediata: 1) Verificar pods de ambos os middlewares. 2) Identificar o tipo de erro dominante nos logs. 3) Verificar se é problema de autenticação, payload ou disponibilidade do ADMS. 4) Checar DLQs dos tópicos Kafka envolvidos.
7. SS de Pendência Cadastral não foi inserida no SGM
🔎 Onde verificar: Verificar se existe no tópico Kafka sgm_pendencia_cadastral_tecnica_adms a mensagem com o registro do incidente. Se existir a mensagem, consultar no ELK do projeto MsSgmOrdemServico se existem logs de erro durante a tentativa de cadastro desta SS.
⚠️ Sintoma de problema: Durante a integração dos incidentes arquivados do ADMS para o IQOS, pode ocorrer lentidão ou indisponibilidade neste processo. É através dele que os incidentes são filtrados pelos tipos Cadastral/Técnica e publicados na fila do Kafka. Resultado: SS de Pendência Cadastral não é inserida no SGM.
⚡ Ação imediata: Caso o incidente não esteja publicado no Kafka e também não há registros no ELK de tentativa de consumo da mensagem, verificar com o time de terceiros quanto ao processo de integração ADMS → IQOS.

📊 Fluxo 9 — IQOS

⚠️ Empresas ativas no IQOS Consumer: EMS EMS1 EMR  — empresas inativas: EAC, ERO, EMT, ESS, ESE, EPB, ETO
Entrada — ADMS envia dados para o IQOS
🔌
ADMS
REST IQOS
Sensedia IQOS adapter
🌐 ApiAdmsIqosKafkaProducer
API REST · IQOS Producer
📖 Regra de Negócio

✅ O que faz: API REST que recebe dados do ADMS e os publica nos tópicos Kafka do IQOS. Porta de entrada do pipeline IQOS — converte chamadas REST em eventos Kafka.

🛑 Se parar: Dados do ADMS não entram no pipeline IQOS. Tabelas Oracle ETL_SOURCE não são atualizadas.

📌 Regras:

  • Produz 3 tópicos: adms-iqos-catalog-data, adms-iqos-real-time, adms-iqos-event-data
  • ELK index: apiadmsiqoskafkaproducer

ELK: apiadmsiqoskafkaproducer (⚠️ ER mostra adms_iqos_logs — confirmar)
▲ adms-iqos-catalog-data ▲ adms-iqos-real-time ▲ adms-iqos-event-data
Consumo — 5 consumers paralelos
🟠 ApiAdmsIqosKafkaConsumer
5 Consumers · Worker IQOS
📖 Regra de Negócio

✅ O que faz: 5 consumers paralelos que consomem os tópicos IQOS e gravam nos 16 tabelas Oracle ETL_SOURCE. Ativo apenas para as empresas EMS, EMS1 e EMR.

🛑 Se parar: Dados IQOS não chegam ao Oracle ETL_SOURCE. Relatórios e dashboards IQOS ficam desatualizados.

📌 Regras:

  • Apenas 3 empresas ativas: EMS, EMS1 e EMR
  • Mensagens com falha persistente vão para DLQs — monitorar
  • 16 tabelas de destino no Oracle ETL_SOURCE

ELK: apiadmsiqoskafkaconsumer
Oracle: ETL_SOURCE (16 tabelas)
Empresas ativas: EMS · EMS1 · EMR
2º consumer group: adms-sigod-consumer (adms-iqos-real-time → wfm_ordem_servico_servicos + sgm_pendencia_cadastral_tecnica_adms)
▼ adms-iqos-catalog-data ▼ adms-iqos-real-time ▼ adms-iqos-event-data ▼ sgm_pendencia_cadastral_tecnica_adms ▲ wfm_ordem_servico_servicos ▲ sgm_pendencia_cadastral_tecnica_adms ▲ adms-iqos-catalog-data-dlq ▲ adms-iqos-real-time-dlq ▲ adms-iqos-event-data-dlq ETL_SOURCE
16 tabelas Oracle ETL_SOURCE
ADMS_ORDER, ADMS_TASK, ADMS_CREW, ADMS_CALL, ADMS_DEVICE, ADMS_INCIDENT, ADMS_USAGEPOINT, ADMS_OUTAGE,
ADMS_REGION, ADMS_SUBSTATION, ADMS_FEEDER, ADMS_CIRCUIT, ADMS_CUSTOMER, ADMS_METER_READ, ADMS_AMI_EVENT, ADMS_NETWORK_TOPOLOGY
🗄️ Oracle ETL_SOURCE
16 tabelas de destino
EMS · EMS1 · EMR apenas
💀 DLQs
Mensagens com falha persistente
API de Ocorrência / Reclamação IQOS
🌐 ApiGodIqosOcorrenciaReclamacao
API REST · IQOS Ocorrência
📖 Regra de Negócio

✅ O que faz: API REST que recebe atualizações de OS do sistema IQOS via PATCH e persiste no MongoDB mdb_ordem_servico_crp.

🛑 Se parar: Atualizações de OS vindas do IQOS não chegam ao MongoDB do SIGOD.

📌 Regras:

  • Endpoint: PATCH /ordem-servico/{Id}
  • Campos atualizáveis: EQUIPE, CAUSA, DATA_DESPACHO/CHEGADA/EXECUCAO/CONCLUSAO/CONHECIMENTO, SERVICO, COMENTARIO, INSTALACAO_INDICE, ESTADO
  • Grava em mdb_ordem_servico_crp

PATCH /ordem-servico/{Id} mdb_ordem_servico_crp
🔍 Diagnóstico — Fluxo 9 (IQOS)
1. Consumer lag do tópico adms-iqos-catalog-data — dados de catálogo atrasados?
🔎 Onde verificar: Kafka Manager → tópico adms-iqos-catalog-data. Verificar lag do consumer group de catálogo adms-iqos-consumer; o serviço possui 5 consumers/rotinas, mas o ER não confirma 5 groups específicos para o tópico de catálogo. ELK: apiadmsiqoskafkaconsumer. Datadog: service apiadmsiqoskafkaconsumer.
⚠️ Sintoma de problema: Lag crescente neste tópico (o de maior volume) indica que o consumer IQOS não está conseguindo processar os dados enviados pelo ADMS. As tabelas Oracle ETL_SOURCE ficam desatualizadas, impactando relatórios e indicadores de qualidade de energia.
⚡ Ação imediata: 1) Verificar pods do ApiAdmsIqosKafkaConsumer: oc get pods -n adms | grep apiadmsiqoskafkaconsumer. 2) Checar logs ELK por exceções. 3) Verificar se o Oracle ETL_SOURCE está respondendo (pode ser lentidão no banco que causa back-pressure). 4) Checar se as empresas ativas (EMS, EMS1, EMR) estão configuradas corretamente.
2. Consumer lag do tópico adms-iqos-real-time — dados de tempo real atrasados?
🔎 Onde verificar: Kafka Manager → tópico adms-iqos-real-time. ELK: apiadmsiqoskafkaconsumer. Datadog: APM → service apiadmsiqoskafkaconsumer → tópico adms-iqos-real-time.
⚠️ Sintoma de problema: Dados de tempo real atrasados afetam o dashboard de qualidade (DEC/FEC) com informações defasadas. Indicadores operacionais no IQOS mostrarão dados de minutos atrás, podendo mascarar problemas em curso na rede elétrica.
⚡ Ação imediata: 1) Verificar se o ApiAdmsIqosKafkaProducer está produzindo (logs ELK: apiadmsiqoskafkaproducer). 2) Checar se o ADMS está enviando dados ao Producer (volume de requisições no endpoint). 3) Verificar se o Consumer está processando os outros tópicos ou se há erro generalizado.
3. Consumer lag do tópico adms-iqos-event-data — eventos de rede pendentes?
🔎 Onde verificar: Kafka Manager → tópico adms-iqos-event-data. ELK: apiadmsiqoskafkaconsumer — filtrar por mensagens do tópico de eventos. Oracle ETL_SOURCE: verificar tabelas de eventos se há inserções recentes.
⚠️ Sintoma de problema: Eventos de rede (interrupções, manobras, religamentos) não chegando ao ETL_SOURCE. Relatórios de DEC/FEC podem ficar incompletos, impactando apurações regulatórias da ANEEL.
⚡ Ação imediata: 1) Verificar se o lag é isolado neste tópico (problema de processamento de eventos) ou generalizado. 2) Checar se há mensagens na DLQ do tópico. 3) Verificar logs por erros de mapeamento/deserialização de eventos.
4. DLQs dos 3 tópicos IQOS — há mensagens com falha acumulando?
🔎 Onde verificar: Kafka Manager → tópicos DLQ: adms-iqos-catalog-data-dlq, adms-iqos-real-time-dlq, adms-iqos-event-data-dlq. Verificar número de mensagens em cada DLQ — qualquer número > 0 é alerta. ELK: apiadmsiqoskafkaconsumer — filtrar por logs de DLQ.
⚠️ Sintoma de problema: Mensagens na DLQ representam dados do ADMS que nunca serão processados automaticamente. Cada mensagem na DLQ é um registro que não chegará ao Oracle ETL_SOURCE — lacuna nos dados históricos do IQOS.
⚡ Ação imediata: 1) Inspecionar o conteúdo das mensagens na DLQ para entender o tipo de falha. 2) Se for erro de schema (campo novo do ADMS), acionar equipe de desenvolvimento. 3) Se for erro de banco, corrigir a causa e reprocessar a DLQ. 4) Registrar o incidente com quantidade de mensagens perdidas.
5. Oracle ETL_SOURCE — 16 tabelas de destino sendo populadas corretamente? (Empresas EMS, EMS1, EMR)
🔎 Onde verificar: Oracle ETL_SOURCE: executar counts nas principais tabelas de destino filtrando por data recente, ex: SELECT TABLE_NAME, COUNT(*) FROM (SELECT 'TABELA_A' AS TABLE_NAME FROM TABELA_A WHERE DT_CARGA > SYSDATE - 1/24 UNION ALL ...) GROUP BY TABLE_NAME. ELK: apiadmsiqoskafkaconsumer — filtrar por erros de INSERT Oracle.
⚠️ Sintoma de problema: Tabelas sem inserções recentes enquanto há lag nos tópicos indica que o consumer está consumindo mas falhando ao gravar. Lacunas nos dados impactam todos os relatórios IQOS (DEC, FEC, SAIDI, SAIFI).
⚡ Ação imediata: 1) Checar logs ELK por erros Oracle (ORA-01400 = campo obrigatório nulo, ORA-00001 = duplicidade). 2) Verificar se o tablespace do ETL_SOURCE tem espaço disponível. 3) Checar permissões do usuário Oracle usado pelo consumer. 4) Verificar locks nas tabelas de destino.
6. Empresas ativas corretas — apenas EMS, EMS1 e EMR habilitadas no consumer?
🔎 Onde verificar: OCP: verificar ConfigMap ou variáveis de ambiente do ApiAdmsIqosKafkaConsumer (oc describe configmap <config-name> -n adms | grep -i empresa). ELK: verificar se há mensagens processadas para empresas diferentes de EMS, EMS1 e EMR — isso seria um problema de configuração.
⚠️ Sintoma de problema: Se outras empresas (além de EMS, EMS1, EMR) estiverem ativas, dados incorretos serão gravados no Oracle ETL_SOURCE. Se uma das 3 empresas ativas for desabilitada acidentalmente, os dados daquela empresa param de ser processados.
⚡ Ação imediata: 1) Verificar configuração de empresas ativas no ConfigMap do consumer. 2) Comparar com a lista oficial: deve conter APENAS EMS, EMS1 e EMR. 3) Se houver discrepância, corrigir o ConfigMap e reiniciar o pod para aplicar. 4) Monitorar os logs após reinicialização.
7. MongoDB mdb_ordem_servico_crp — ApiGodIqosOcorrenciaReclamacao gravando ocorrências?
🔎 Onde verificar: MongoDB: database mdb_ordem_servico_crp — verificar collection de ocorrências/reclamações, checar documentos com createdAt recente. ELK: apigodiqosocorrenciareclamacao. Datadog: service apigodiqosocorrenciareclamacao.
⚠️ Sintoma de problema: Collection sem inserções recentes indica que reclamações do IQOS não estão chegando ao SIGOD. O histórico de reclamações associadas a OS ficará incompleto — impacta análises de qualidade e rastreabilidade de atendimento.
⚡ Ação imediata: 1) Verificar pods: oc get pods -n adms | grep apigodiqosocorrencia. 2) Checar logs ELK por erros de escrita MongoDB. 3) Verificar se o tópico de entrada está com lag. 4) Testar conectividade MongoDB.

🔧 Serviços de Suporte (APIs e Workers auxiliares)

Serviços que não pertencem a um fluxo de incidente específico mas suportam o ecossistema ADMS/SIGOD. Presentes no Catálogo e no Datadog.
🔵 ApiGodOrdemServico
API REST + SignalR Hub
API central de OS com controllers operacionais e integração em tempo real via /ConnectionHub.
⊙ POST /api/OrdemServico ⊙ GET /api/OrdemServicoSituacaoSse/stream (SSE) api/OrdemServicoBloqueio api/OrdemServicoChamada api/OrdemServicoDispositivo (PATCH) api/OrdemServicoInterrupcao ordens-servico-legado api/OrdemServicoSolicitacao api/OrdemServicoUnidadeConsumidora SignalR: /ConnectionHub ▲ wfm_ordem_servico_bloqueio
🔵 ApiGodAlocacao
API REST + SignalR · Alocação
Orquestra despacho/alocação com políticas JWT de operação e publicação Kafka.
⊙ POST /api/Alocacao/despachar ⊙ PATCH /assignment (IgnoreApi) SignalR Hub: /listener JWT: CanDispatch · CanUnassign JWT: CanRedirect · CanForceUnassign mdb_alocacao_crp (alocacoes) ► wfm_alocacao ► wfm_solicitacao_retirada
🔵 ApiGodModelo
API REST · Modelo de Dados
Serve dados de modelo (equipes, serviços, regiões, escalas) ao frontend SIGOD. Consulta MongoDB mdb_modelo_crp.
⊙ GET /Equipe ⊙ GET /api/v1/empresa/{empresa}/equipesadms Operador, PerfilEquipe, Configuracao Servico, Escala, Otimizador mdb_modelo_crp ► wfm_modelo_equipe △ wfm_modelo_equipe_funcionario (produtor a confirmar) ► wfm_modelo_operador
🔵 ApiGodWfm
API REST · Dashboards WFM
Fornece dados para dashboards de WFM. Usa cache distribuído Redis + RedLock para filtros e painel de vencimento.
⊙ GET /api/OrdemServico/grupo/{grupoId}/painel/vencimento GET /api/Regiao/localidades/filtro GET /api/Regiao/bairros Redis + RedLock mdb_ordem_servico_crp Oracle PDA (R) ◄ 7 tópicos wfm_ordem_servico_*
🔵 ApiGodIdentidade
API REST · Autenticação/Autorização
Gerencia autenticação e autorização do ecossistema com emissão JWT RS256 (Issuer Sigod).
⊙ GET /api/auth/login/{empresa} ⊙ POST /api/auth/system /api/auth/callback · /api/auth/refresh /api/auth/logout · /api/auth/logout/all /.well-known/openid-configuration /.well-known/jwks.json JWT RS256 · Access 1h · Refresh 7d System users: job_despacho_automatico System users: integracao_powerbi Usuarios
🟠 Operador.Worker
Worker · Operador (não-Legacy) · DESABILITADO
Worker não-Legacy desabilitado. A cadeia ativa de operadores permanece no Operador.Legacy.Worker.
▼ oracle_stream.DESPACHANTE* (inativo) mdb_modelo_crp · operador