Commit Graph

80 Commits

Author SHA1 Message Date
64e384036a Merge pull request 'FIX: BugFix relacionado ao status de requisições' (#4) from dev into master
Some checks failed
Deploy production / Deploy to production VM (push) Failing after 9s
Reviewed-on: #4
2026-07-20 15:26:33 -03:00
dd1d1e0851 CI: Definido para que automação rode como user desenvolvimento ao invés de root 2026-07-20 15:23:28 -03:00
8e4e79d059 FIX: Corrigido status em espera para requisições
- Requisições possui um código diferente de incidentes para em espera
- Adicionado if tipo === 'reuqusicao' em espera = -5
2026-07-20 15:22:37 -03:00
b16a420fab Merge pull request 'FIX: Secret ENV_PRODUCTION colado direto no script bash quebrava com $ dentro do conteudo' (#3) from dev into master
All checks were successful
Deploy production / Deploy to production VM (push) Successful in 45s
Reviewed-on: #3
2026-07-15 14:02:26 -03:00
e838081aae FIX: Secret ENV_PRODUCTION colado direto no script bash quebrava com $ dentro do conteudo
${{ secrets.ENV_PRODUCTION }} usado direto dentro de um run: substitui o texto
antes do bash rodar - qualquer '$algo' dentro do conteudo do .env.production
(por exemplo em senhas) era interpretado como expansao de variavel de shell.
Com set -u ligado isso quebrou o step "Check required secrets" (variavel nao
definida = erro fatal). Sem set -u, o step "Write .env.production from
secret" teria o mesmo problema de forma silenciosa: qualquer '$algo' dentro
das credenciais reais seria substituido por vazio no arquivo escrito na VM,
corrompendo senha sem nenhum aviso.

Corrige passando o secret via env: e referenciando como variavel de ambiente
normal ($ENV_PRODUCTION) nos dois steps - bash trata o valor como dado opaco,
sem tentar expandir nada dentro dele.
2026-07-15 14:01:49 -03:00
0daefc243c Merge pull request 'FIX: Preflight falhava por causa de pipefail com rsync --version | head -n 1' (#2) from dev into master
Some checks failed
Deploy production / Deploy to production VM (push) Failing after 5s
Reviewed-on: #2
2026-07-15 13:59:39 -03:00
cefeb3ea25 FIX: Preflight falhava por causa de pipefail com rsync --version | head -n 1
O head fecha o pipe apos ler a primeira linha, o rsync recebe broken pipe e sai
com codigo de erro, e o pipefail propaga isso como falha do step inteiro -
mesmo a versao ja tendo sido impressa com sucesso. Confirmado no primeiro run
real do workflow em producao: Preflight falhou logo depois de imprimir as
versoes, todos os steps seguintes (secrets, validacao, deploy) ficaram
pulados, sem tocar na VM.
2026-07-15 13:58:36 -03:00
5b30849f79 Merge pull request 'Motor de regras único, mandante configurável e deploy via secret do Gitea' (#1) from dev into master
Some checks failed
Deploy production / Deploy to production VM (push) Failing after 16s
Reviewed-on: #1
2026-07-15 13:54:57 -03:00
2cf6e9f2fb CI: Materializa .env.production via secret, backup pra rollback e node --check dinamico
Adiciona um step que escreve o .env.production a partir do secret ENV_PRODUCTION
do Gitea Actions (com chmod 600), eliminando o modelo anterior de manter esse
arquivo manualmente na VM sem nenhuma copia de seguranca. Um step anterior falha
cedo e com mensagem clara se o secret nao estiver configurado.

Antes de sincronizar o codigo novo, guarda a versao anterior em
$DEPLOY_PATH.previous, permitindo rollback manual rapido caso o deploy suba
algo quebrado (o node --check so pega erro de sintaxe, nao de logica).

Troca a lista fixa de arquivos validados por node --check (que ja estava
desatualizada, sem cobrir arquivos tocados em mudancas recentes) por uma
varredura em todo .js do projeto.
2026-07-15 13:31:35 -03:00
2437864133 DOCS: Manual do usuario + documentacao de onde fica o .env.production e rollback
Cria docs/manualusuario.md: guia pratico "se eu fizer X no SN/GLPI, acontece Y",
pra quem usa os sistemas no dia a dia sem precisar entender a implementacao.

README ganha duas secoes na parte de Producao: onde o .env.production fica e
por que (agora materializado a partir do secret ENV_PRODUCTION do Gitea, nao
mais um arquivo mantido a mao na VM), e o passo a passo de rollback manual
usando o backup .previous que o deploy passa a manter.
2026-07-15 13:31:07 -03:00
cc17d957c7 PERF: Reduz verbosidade de logs em nivel info no ciclo do cron
Rebaixa para debug uma serie de logs "heartbeat" que disparavam todo ciclo
(a cada 1 minuto) independente de qualquer mudanca real, competindo com os
logs de acao/erro que realmente importam: buscas por watermark, contagem
de tickets pendentes/monitorados, checagens de comentario ja sincronizado,
abertura de conexao GLPI/PostgreSQL, e o resumo de sincronizacao do SN
(que a margem de seguranca de 6h do watermark sempre retorna nao-vazio,
mesmo sem mudanca real de campo).

Corrige tambem um bug real encontrado em teste: no fluxo GLPI -> SN, todo
comentario historico de um ticket era sanitizado e checado contra a API do
SN a cada ciclo antes mesmo de verificar se ja tinha sido sincronizado
(ticket_updates.destiny_id). Em tickets com historico longo isso
significava dezenas de chamadas desnecessarias por minuto. Agora a
checagem local (barata) roda primeiro, e so sanitiza/consulta o SN quando
o comentario realmente ainda nao foi sincronizado.

Corrige tambem o log de configuracao do pool PostgreSQL, que imprimia
"[object Object]" por passar o objeto de config como mensagem em vez de
metadado.

LOG_LEVEL default muda de debug para info em .env.example e
.env.production, unica forma do rebaixamento acima ter efeito pratico.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 16:00:29 -03:00
bce9a52494 FEAT: Motor de regras único de status/fechamento + mandante configurável
Consolida os dois controladores legados que decidiam status/fechamento de
forma concorrente (processGlpiClosureController + processStatusController)
em um único processTicketLifecycleController, eliminando a dependência do
campo source_last (mantido só como rastro de auditoria) e a flag
ENABLE_STATUS_SYNC (removida). Isso corrige o bug de reabertura: chamados
reabertos no SN voltavam a ser fechados no GLPI porque a regra de
precedência de finalização do fluxo legado forçava o status do GLPI de
volta pro SN.

Correções de bugs encontrados em teste (Frente 1):
- Constraint UNIQUE em ticket_sync.sn_ticket_id + ON CONFLICT DO NOTHING
  na criação do registro, prevenindo duplicação de tickets.
- Fechamento no SN agora é confirmado por leitura ao vivo do status antes
  de marcar o ticket como solved/closed, em vez de confiar só no HTTP 200
  (a API do SN pode retornar sucesso e silenciosamente ignorar um valor de
  estado inválido — descoberto e corrigido também no mandante).
- Nota de encerramento do SN pro GLPI agora é idempotente e criada uma
  única vez por ticket.
- Erros de sincronização passam a ter um limite de tentativas
  (MAX_ERROR_RETRIES) antes de marcar o ticket como error_permanent,
  exigindo intervenção manual em vez de tentar para sempre.
- Chamados criados no GLPI passam a gravar o número do ticket do SN no
  campo externalid.

Nova funcionalidade (Frente 2): quando o SN resolve/encerra um chamado por
conta própria antes do GLPI, além da nota informativa no GLPI (agora com o
nome de quem encerrou, buscado ao vivo via resolved_by/closed_by/
sys_updated_by), o próprio SN recebe um aviso de que a Sothis não vai mais
atender aquele chamado e ele é transferido pra fila de TI da CAOA.

Nova funcionalidade (Mandante, regras 19-22): espelhamento opcional e
configurável de status intermediário (Aguardando Atendimento/Em
Atendimento/Em Espera) entre os dois sistemas, controlado pela env
MANDANTE=GLPI|SNOW. Sem essa env configurada, mantém o comportamento atual
(nenhum espelhamento de status intermediário). Nunca afeta os status finais
(resolvido/encerrado/fora de escopo), que continuam regidos pelas regras
fixas de fechamento.

Corrigido também o workflow de deploy (.gitea/workflows/deploy-production.yml),
que ainda validava os controladores antigos (já removidos) e exigia
ENABLE_STATUS_SYNC=true, o que quebraria o próximo deploy em produção.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 09:45:34 -03:00
ed19cd76a7 FEAT: RN atualizada. Chamados que estão fechados fora do escopo saem da fila sothis e entram na fila CAOA no ServiceNow 2026-06-26 11:39:57 -03:00
00b573d60d HOTFIX: Correção do Bug Em PROD
- Travas foram adicionadas para que a reabertura nao seja feita
- Regra de desatribuição de usuario caso seja "Fora de Escopo"
2026-03-11 17:02:27 -03:00
686c2f0a54 HOTFIX: Reordenação de regras de negócio
- Prioriza encerramento
- Secundariamente a reabertura
2026-03-11 10:44:09 -03:00
Gabriel Amancio
b4a7e6c366 HOTFIX: Alterado condição de status para poder sincronizar como SNOW. 2026-03-11 08:21:38 -03:00
Rafael Lopes
b2cbeb66e5 Merge branch 'feature/snow-worknotes-glpi-task-review' 2026-03-10 13:22:18 -03:00
Rafael Lopes
50d5b77261 HOTFIX: Corrgidigo bug em prod 2026-03-10 12:53:33 -03:00
6b67d5002f FIX: Correção na lógica de detecção de reabertura de ticket
- Adicionada lógica para detectar quando um ticket é reaberto, verificando se o status do ticket mudou de "Fechado" para "Aberto".
- Isso garante que os comentários sejam processados corretamente mesmo em casos de reabertura de tickets.
2026-03-09 16:38:06 -03:00
c964bcf18a FEATURE: Chamados reabertos possuem uma nova coloração 2026-03-04 18:15:53 -03:00
ce294d4220 FIX: Mensagem de fechamento de chamado atualizado para versão menos agressiva 2026-03-04 17:33:57 -03:00
dfabf699a5 DOC: Ajuste final para release em PROD 2026-03-04 16:48:23 -03:00
35b4a1fef9 FIX/FEATURE: Ajustes de fluxo SN<->GLPI e documentação operacional
- feito ajuste do fluxo GLPI->SN para tratar status 5 (resolve no SN) e status 6 (aviso definitivo e retirada de monitoramento)
- feito ajuste de reabertura SN->GLPI quando ticket estiver solved no GLPI
- feito ajuste de data/hora de comments/worknotes para evitar inversão de data
- feito ajuste de vínculo Ticket Externo no SN com validação de persistência e retry idempotente
- feito ajuste de filtro de journals para ignorar SOTHIS.CAOA e admin.caoa por configuração
- feito inclusão de monitor dedicado de encerramento definitivo (processGlpiClosureController)
- feito atualização de flags de controle (ENABLE_STATUS_SYNC, ENABLE_GLPI_CLOSE_CRON, ENABLE_GLPI_WEBHOOK)
- feito atualização da documentação (README, docs/regrasdenegocio.md, docs/fluxo.md, docs/casosdeuso.md, docs/checklist.md)
2026-03-04 16:37:04 -03:00
a7f9f7f714 FIX : Evitar sobrescrição 2026-03-04 10:05:30 -03:00
0c6648b0b6 FIX: Ajusta exibicao de logs no PM2 em producao 2026-02-27 17:03:17 -03:00
Rafael Lopes
e129571812 FIX: Correções de sincronização SN<->GLPI
- feito ajuste de direção de status para respeitar source_last e evitar reabertura indevida

- feito tratamento de reabertura SN->GLPI após resolução, mantendo bloqueio para fechamento permanente

- feito ajuste de finalização GLPI->SN para propagar resolução/fechamento corretamente

- feito correção de runtime no processStatusController (uso de variável antes da inicialização)

- feito correção para não prender ticket em status transitório de comentários

- feito preservação de ordem cronológica e datas reais de comments/work_notes SN no GLPI

- feito normalização de autor (ex.: email/login para nome amigável)

- feito destaque visual para mensagens automáticas e encerramento no GLPI

- feito sanitização de justificativa na regra de fora de escopo

- feito padronização de variáveis de ambiente e remoção de inconsistências de config

- feito separação de SQL destrutivo para arquivo de manutenção dedicado
2026-02-24 17:42:33 -03:00
0f412a1588 FIX: Corrigido bug que impedia a alteração de status 2026-02-23 17:08:19 -03:00
c21c00075c feat(sync): mapear work_notes SN para tarefas GLPI e ajustar regras/README
- coleta comments e work_notes do SN\n- envia comments como followup e work_notes como tarefa no GLPI\n- usa sys_created_by como author no banco intermediario\n- formata mensagem SN->GLPI com autor no cabecalho\n- aplica regras de resolucao/encerramento SN sem fechar GLPI\n- documenta regras de negocio no README
2026-02-23 16:45:46 -03:00
eda8f558fd FEATURE/FIX: Ajusta encerramento SN->GLPI e direção do bastão da verdade
- Adiciona comentário estilizado no GLPI quando SN marca Resolvido, Encerrado ou Encerrado - Omitido
- Marca Sync como "closed" para remover o chamado da fila de sincronização
- Corrige a direção do bastão da verdade para preservar SNOW -> GLPI quando SN foi a última origem
2026-02-23 11:39:09 -03:00
a4f6797c8f FEATURE: Novo Cammpo adicionado!
- Campo de Justificativa adicionado para as requisições
2026-02-19 18:22:38 -03:00
e84647a2ba FIX : corrige bugs silenciosos
- normaliza comentarios e logs (ASCII)
- corrige campo no createSyncRecord (glpi_ticket_id)
- remove metodo duplicado updateSourceLast
- corrige uso de ID errado na atualizacao de status/comentarios
- atualiza o README
2026-02-19 11:21:40 -03:00
Desenvolvimento
019837acab CHORE: Unificando versoes 2026-02-19 11:05:52 -03:00
39231006dc CHORE: Direório de Logs adicionado ao .gitignore 2025-11-19 16:30:50 -03:00
25458d5e44 REFACTOR/BUG: Correção de bugs e alteção de run
- Alterado Código para que use o node cron e o gerenciamento seja feito pelo pm2
- Bug que não envia uma atualização para o SN quando um chamo é fechado fora do escopo corrigido
2025-11-19 16:01:37 -03:00
fb3f4eee75 RAW: Usuario alterado para Agente CAOA 2025-10-30 08:15:43 -03:00
ee168f5d5a FEAT: Python permanece rodando em loop sem a necessidade de um cron job 2025-10-30 07:04:21 -03:00
ae303e58fe CLEANUP: Comentarios atualizados para servicenowService.js 2025-10-29 14:40:21 -03:00
bfa0e8acc8 CLEANUP: Comentarios atualizados e Readme.md alimentado com V1.0 da documentação 2025-10-29 14:20:21 -03:00
0c4538355a FEAT: Chamados com status "Aguardnado Atendimento" e "Em Espera" são atualizados para "Em Atendimento" para que possam ser encerrados. 2025-10-28 17:57:39 -03:00
a082bad82c FEAT: Coletado mais dados de incidentes e requisições.
*   **Enriquecimento de Dados e Criação de Tickets:**
    *   Requisições do ServiceNow com descrição vazia agora são enriquecidas buscando dados de variáveis de catálogo (`sc_item_option`), como justificativas e telefones, melhorando a qualidade dos tickets criados no GLPI.
    *   O `ticketGlpiModel` agora formata descrições em tabelas HTML para melhor legibilidade no GLPI.

*   **Refatoração e Novas Funções:**
    *   O `servicenowService` foi expandido com funções para fechar, atualizar status e adicionar notas de trabalho (`work_notes`) diretamente nos tickets do ServiceNow.

*   **Coleta de dados de telefone e ajustes para coletar o Assigment correro
    *   Water Mark Ajustado para que processo o chamado apenas uma vez.
2025-10-28 14:06:00 -03:00
Rafael Lopes
e436fe17af FIX: Corrigido padrão de data de requisições para marca d'água subir corretamente. 2025-10-24 21:59:08 -03:00
938bf189f2 TEST: Testando fluxo completo do projeto 2025-10-24 13:13:08 -03:00
0cc27df2cf FEAT: Implementa sincronização bidirecional de status e ciclo de vida de tickets
- **Sincronização Inteligente:** O sistema agora detecta mudanças de estado em qualquer uma das plataformas e propaga a atualização para a outra, respeitando a 'fonte da verdade' (`source_last`).
- **Regra 'Fora do Escopo':** Implementada a regra de negócio para tickets marcados como 'Fora do Escopo' no GLPI (solutiontypes_id = 27). Esses tickets agora são ignorados na sincronização, têm seu status finalizado no GLPI e uma nota informativa é adicionada no ServiceNow.
- **Watermark (Marca d'água):** A coleta de novos tickets do ServiceNow foi otimizada com um sistema de marca d'água, buscando apenas registros atualizados desde a última execução bem-sucedida, o que melhora significativamente a performance.
- **Resiliência:** Adicionado um `processErrorController` que reseta tickets com status de erro, permitindo que sejam reprocessados automaticamente no próximo ciclo.

Testes de fluxo foram realizados com sucesso, validando a criação, resolução (SN <-> GLPI) e a regra 'Fora do Escopo'.

Pendências para a próxima fase:
1. Validar melhor o fluxo de reabertura de chamados em ambas as direções.
2. Garantir que a `work_note` enviada para o ServiceNow na regra 'Fora do Escopo' seja devidamente sanitizada."
2025-10-23 17:30:03 -03:00
f7eaf34e7d FEAT: Sistema de sincroanização de tickets refeito para melhor sincronia e garantia dos dados 2025-10-17 16:58:14 -03:00
Rafael Lopes
4f7a699f92 WIP 2025-10-13 06:06:52 -03:00
3b6d78152d WIP 2025-10-10 08:12:26 -03:00
Tulio Castro
3208e83246 FEAT: Adiciona log informativo para total de comentários encontrados ao buscar comentários de tickets no ServiceNow 2025-10-07 10:57:09 -03:00
Tulio Castro
a53a0a9492 REFACTOR: Realizando teste para função de busca de todos os comentários atravé da criação de um arquivo JSON. 2025-10-07 10:39:01 -03:00
Tulio Castro
80401bd92d FEAT: Adiciona função para buscar todos os comentários de tickets no ServiceNow com suporte à paginação 2025-10-07 10:28:39 -03:00
Rafael Lopes
33e78e70c3 FEAT: Adiciona função de sanitização de comentários do GLPI para remover HTML e limpar metadados. 2025-10-02 20:57:20 -03:00