2025-11-19 16:01:37 -03:00
|
|
|
# ===================================================================
|
2026-02-19 11:21:40 -03:00
|
|
|
# EXEMPLO DE ARQUIVO DE CONFIGURACAO DE AMBIENTE
|
2025-11-19 16:01:37 -03:00
|
|
|
#
|
|
|
|
|
# Copie este arquivo para .env.development e .env.production
|
|
|
|
|
# e preencha com os valores corretos para cada ambiente.
|
2026-02-19 11:21:40 -03:00
|
|
|
# Nao adicione senhas ou chaves secretas diretamente neste arquivo.
|
2025-11-19 16:01:37 -03:00
|
|
|
# ===================================================================
|
|
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# --- Configuracao Geral da Aplicacao ---
|
2025-11-19 16:01:37 -03:00
|
|
|
NODE_ENV=development
|
|
|
|
|
PORT=3000
|
|
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# Frequencia de execucao do cron job (formato cron). Padrao: '* * * * *' (a cada 1 minutos)
|
2025-11-19 16:01:37 -03:00
|
|
|
CRON_SCHEDULE='* * * * *'
|
2026-03-04 16:37:04 -03:00
|
|
|
ENABLE_GLPI_WEBHOOK=true
|
|
|
|
|
ENABLE_GLPI_CLOSE_CRON=true
|
2025-11-19 16:01:37 -03:00
|
|
|
|
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
|
|
|
# Mandante (regras 19-22): sistema cujo status intermediario (Aguardando Atendimento/Em
|
|
|
|
|
# Atendimento/Em Espera) e espelhado automaticamente no outro sistema. Nunca afeta status
|
|
|
|
|
# finais (Resolvido/Encerrado/fora de escopo), so esses tres intermediarios.
|
|
|
|
|
# Valores: GLPI | SNOW | vazio (nenhum espelhamento, comportamento padrao)
|
|
|
|
|
MANDANTE=
|
|
|
|
|
|
|
|
|
|
# Numero maximo de vezes que um ticket em estado de erro e reprocessado
|
|
|
|
|
# automaticamente antes de ser marcado como 'error_permanent' (exige intervencao manual).
|
|
|
|
|
MAX_ERROR_RETRIES=5
|
|
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# --- Configuracao da API do ServiceNow ---
|
|
|
|
|
# URL base da sua instancia do ServiceNow
|
2025-11-19 16:01:37 -03:00
|
|
|
SERVICENOW_INSTANCE=https://your-instance.service-now.com
|
|
|
|
|
SERVICENOW_USERNAME=
|
|
|
|
|
SERVICENOW_PASSWORD=
|
|
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# Sys_id do grupo de atribuicao no ServiceNow que sera monitorado para novos tickets
|
2025-11-19 16:01:37 -03:00
|
|
|
SERVICENOW_ASSIGNMENT_GROUP=
|
|
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# Sys_id do usuario padrao no ServiceNow que sera usado pela integracao para criar/atualizar tickets
|
2025-11-19 16:01:37 -03:00
|
|
|
SERVICENOW_DEFAULT_USER_SYSID=
|
2026-02-19 11:21:40 -03:00
|
|
|
SERVICENOW_DEFAULT_USER=
|
|
|
|
|
SERVICENOW_RESOLVED_BY_SYSID=
|
2026-03-04 17:33:57 -03:00
|
|
|
SERVICENOW_IGNORE_DEFAULT_USER_JOURNAL=true
|
2026-03-04 16:37:04 -03:00
|
|
|
SERVICENOW_IGNORE_USERS_JOURNAL=SOTHIS.CAOA,admin.caoa
|
2025-11-19 16:01:37 -03:00
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# Endpoints de tabela usados pela aplicacao
|
|
|
|
|
SERVICENOW_TABLE_INCIDENT_URL=
|
|
|
|
|
SERVICENOW_TABLE_REQUEST_URL=
|
|
|
|
|
SERVICENOW_TABLE_JOURNAL_URL=
|
|
|
|
|
SERVICENOW_SC_ITEM_OPTION_URL=
|
2026-03-04 17:33:57 -03:00
|
|
|
SERVICENOW_EXTERNAL_TICKET_FIELD=u_external_tickets
|
2026-06-26 11:39:57 -03:00
|
|
|
# Sys_id do grupo de TI da CAOA (destino de tickets fora do escopo Sothis)
|
|
|
|
|
SERVICENOW_CAOA_TI_GROUP_ID=
|
2026-02-19 11:21:40 -03:00
|
|
|
|
|
|
|
|
# --- Configuracao do Banco de Dados do GLPI (MySQL) ---
|
2025-11-19 16:01:37 -03:00
|
|
|
GLPI_DB_TYPE=mysql
|
|
|
|
|
GLPI_DB_HOST=localhost
|
|
|
|
|
GLPI_DB_PORT=3306
|
|
|
|
|
GLPI_DB_USER=
|
|
|
|
|
GLPI_DB_PASSWORD=
|
|
|
|
|
GLPI_DB_NAME=glpi
|
|
|
|
|
GLPI_DB_CHARSET=utf8mb4
|
|
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# ID do usuario padrao do GLPI para criacao de tickets e comentarios
|
2025-11-19 16:01:37 -03:00
|
|
|
GLPI_DEFAULT_USER_ID=1118
|
2026-02-24 17:40:39 -03:00
|
|
|
GLPI_DEFAULT_GROUP_ID=30
|
|
|
|
|
GLPI_DEFAULT_ENTITY_ID=127
|
|
|
|
|
GLPI_OOS_SOLUTION_TYPE_ID=27
|
2026-02-19 18:22:38 -03:00
|
|
|
GLPI_REQ_DEFAULT_JUSTIFICATIVA=Chamado aberto por colaborador CAOA sem Justificativa
|
|
|
|
|
GLPI_REQ_DEFAULT_DESCRIPTION=Chamado aberto por colaborador CAOA sem Descricao
|
2025-11-19 16:01:37 -03:00
|
|
|
|
2026-02-19 11:21:40 -03:00
|
|
|
# --- Configuracao do Banco de Dados Intermediario (PostgreSQL) ---
|
2025-11-19 16:01:37 -03:00
|
|
|
SNGLPI_DB_HOST=localhost
|
|
|
|
|
SNGLPI_DB_PORT=5432
|
|
|
|
|
SNGLPI_DB_NAME=snglpi_sync
|
|
|
|
|
SNGLPI_DB_USER=
|
|
|
|
|
SNGLPI_DB_PASSWORD=
|
|
|
|
|
|
|
|
|
|
# --- Mapeamento de Localidades (Opcional) ---
|
|
|
|
|
# Caminho absoluto para o arquivo .csv que mapeia localidades do SNOW para entidades do GLPI
|
|
|
|
|
LOCATION_MAPPING_CSV_PATH=/path/to/your/location_mapping.csv
|
|
|
|
|
|
|
|
|
|
# Logging
|
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
|
|
|
LOG_LEVEL=info
|
2026-03-04 17:33:57 -03:00
|
|
|
LOG_TO_CONSOLE=true
|
2025-11-19 16:01:37 -03:00
|
|
|
LOG_RETENTION_DAYS=10
|
|
|
|
|
LOG_DIR=logs
|