-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathversion
More file actions
931 lines (889 loc) · 58.8 KB
/
version
File metadata and controls
931 lines (889 loc) · 58.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
API Fluig - Abertura de Chamados
Versão 1.0.0
IMPLEMENTAÇÕES:
- API REST com FastAPI para integração com Fluig
- Autenticação via API Key (header API-KEY)
- Endpoint POST /chamado/abrir para abertura de chamados
- Integração OAuth1 com Fluig (ambientes QLD e PRD)
- Consulta de datasets Fluig:
* Dataset_colleague - Busca dados de colaboradores
* Dataset_funcionarios - Busca dados de funcionários
* Dataset_aprovadores - Busca dados de aprovadores
- Processamento automático de dados do usuário:
* Busca informações do colaborador e funcionário
* Extrai código da seção automaticamente
* Monta payload completo para criação do chamado
- Criação de chamados no ambiente QLD/PRD do Fluig
- Validação de entrada com Pydantic (DadosChamado)
Versão 1.0.1
IMPLEMENTAÇÕES:
- Separação de rotas independentes para ambientes PRD e QLD
* router_prd - Rota POST /fluig/chamado/abrir (ambiente PRD)
* router_qld - Rota POST /fluigqld/chamado/abrir (ambiente QLD)
- Refatoração da função Payload para receber datasets como parâmetros
- Implementação dinâmica de identificação de usuário:
* targetAssignee agora utiliza colleagueId do dataset
* h_solicitante agora utiliza colleagueId do dataset
- Otimização do retorno da rota QLD:
* Retorna apenas o processInstanceId do chamado criado
- Melhorias nos logs de processamento:
* Mensagem "CHAMADO ABERTO: " para melhor rastreabilidade
Versão 1.0.2
IMPLEMENTAÇÕES:
- Nova rota para abertura de chamados via email:
* router_chamado_email - Rota POST /email/fluig para processar emails
- Integração com Inteligência Artificial (Google Generative AI):
* Módulo ia/ia.py - Processamento de textos com múltiplas chaves e modelos
* Módulo prompt/prompts.py - Estruturação de prompts para validação de chamados
- Validação inteligente de chamados via IA:
* Validação de título e descrição do chamado
* Correção automática de erros de digitação, ortografia e gramática
* Validação de coerência entre título e descrição
- Processamento de emails para abertura de chamados:
* Recebe email com assunto e corpo
* Processa com IA para validar e extrair informações
* Abre chamado automaticamente no ambiente QLD quando aprovado
* Retorna mensagem de rejeição quando o chamado não atende aos critérios
Versão 1.0.3
IMPLEMENTAÇÕES:
Nova rota QLD para abertura de chamados via email:
* router_chamado_email_qld - Rota POST /email/fluigqld para processar emails
Versão 1.0.4
IMPLEMENTAÇÕES:
- Sistema de logs:
* Módulo modulos/logger.py - Configuração de logging com rotação de arquivos
- Melhorias no tratamento de erros:
* Funções auxiliares de validação (info_fluig, info_dataset)
* Validação robusta de datasets antes do uso
* Validação de respostas do Fluig antes de acessar dados
* Tratamento específico para erros de validação e exceções inesperadas
- Validações em todas as rotas:
* Validação de campos obrigatórios na função Payload
* Validação de estrutura de dados antes de acessar índices
* Validação de respostas da IA (exceções e tipos inválidos)
* Validação de dados extraídos (título e descrição)
Versão 1.0.5
IMPLEMENTAÇÕES:
- Correção do ambiente QLD:
* Rota POST /email/fluigqld para processar emails
* Rota POST /fluigqld/chamado/abrir para abertura de chamados
* Rota POST /fluigqld/chamado/abrir para abertura de chamados via email
Versão 1.0.6
IMPLEMENTAÇÕES:
- Fallback de dados fixos para ambiente QLD:
* Função fake_dataset_funcionarios() - Cria dataset com dados fixos quando usuário não encontrado
* Implementado apenas no ambiente QLD para casos onde Dataset_funcionarios está vazio
* Usa dados padrão da empresa para permitir abertura de chamado mesmo sem usuário no dataset
* Log de warning quando dados fixos são utilizados
- Melhorias no módulo de IA:
* Tratamento robusto de erro 429 (Resource exhausted)
* Loop continua tentando todas as combinações de keys e models mesmo com erros
* Armazena último erro apenas se todas as tentativas falharem
* Melhor resiliência contra rate limiting da API do Google
Versão 1.0.7
IMPLEMENTAÇÕES:
- Validação de domínio de email:
* Função Bloack_Email() - Valida se email pertence ao domínio @uisa.com.br
* Implementada nas rotas de email (PRD e QLD) antes do processamento
* Bloqueia emails de domínios externos antes de chamar a API
* Retorna erro imediato se email não for válido
- Proteção contra loops de email:
* Bloqueio de emails do sistema que podem causar loops infinitos
* Emails bloqueados: fluig.uisa.com.br, noreply@uisa.com.br, no-reply@uisa.com.br, sistema@uisa.com.br, automacao@uisa.com.br
* Previne que emails de confirmação do sistema sejam processados novamente
* Log de warning quando email do sistema é detectado
Versão 1.0.8
IMPLEMENTAÇÕES:
- Atualização de dependências:
* Adicionado pydantic-settings==2.1.0 ao requirements.txt
* Necessário para uso de BaseSettings e SettingsConfigDict no módulo ConfigEnv
- Correção do modelo Funcionario:
* Adicionado mapeamento de aliases para campos com acentuação
* Campo "Gerência" mapeado para "Gerencia" usando Field(alias="Gerência")
* Campo "Data_Admissão" mapeado para "Data_Admissao" usando Field(alias="Data_Admissão")
* Configurado populate_by_name=True para permitir uso de alias e nome do campo
* Resolve erro de validação ao processar dados retornados pela API Fluig
- Nova rota de datasets:
* Rota POST /dataset/funcionario - Consulta dados de funcionários via Email ou Chapa
* Retorna dados validados usando modelo Funcionario
* Implementada busca alternativa por Chapa quando Email não encontra resultados
- Melhorias no modelo DadosEmail:
* Adicionado campo Telefone: str ao modelo DadosEmail
* Permite envio de telefone junto com dados do email
Versão 1.0.9
IMPLEMENTAÇÕES:
- Telefone apenas nas rotas de email:
* Campo Telefone removido de DadosChamado e mantido opcional em DadosEmail
* Rotas /fluig/chamado/abrir e /fluigqld/chamado/abrir não expõem telefone na API
- Fallback automático de telefone:
* Novas rotas /email/fluig e /email/fluigqld aceitam telefone opcional
* Quando o campo não é enviado ou chega vazio, o telefone do Dataset_funcionarios é utilizado
* Payload sempre envia um número válido em num_tel_contato
- Refatoração da abertura de chamados:
* Nova função abrir_chamado_fluig centraliza a lógica compartilhada
* Permite reaproveitar validações e reaplicar telefone informado pelas rotas de email
* Mantém fallback de dados fixos apenas para o ambiente QLD
Versão 2.0.0
IMPLEMENTAÇÕES:
- Sistema completo de logs implementado:
* Logs em todas as rotas principais (PRD, QLD, Email PRD, Email QLD)
- Correções de erros não tratados:
* Removido import inexistente (modulos.tool_function) de common_function.py
* Removido import duplicado de logger
* Substituído print() por logger em modulos/datasets.py
* Adicionada validação de parâmetros vazios em todas as funções críticas
* Validação de USER vazio/None em datasets
* Validação de PARAMETROS e URL em requisições Fluig
* Validação de prompt vazio no módulo de IA
* Validação de configurações de IA antes do processamento
- Melhorias no tratamento de erros:
* Tratamento de exceções com try/except em rotas principais
* Validação de parâmetros em rt_datasets.py antes de processar
* Mensagens de erro mais claras e informativas
* Logs de erro com exc_info=True para rastreamento completo
* Tratamento robusto de erros em todas as camadas da aplicação
- Melhorias em validações:
* Validação de resposta antes de acessar índices em rt_datasets.py
* Validação de listas de whitelist/blacklist em Block_Email
* Validação de configurações antes de usar em IA
* Validação de ambiente em requisições Fluig
Versão 2.0.1
IMPLEMENTAÇÕES:
- Melhorias no prompt3 para extração de dados do usuário:
* Prompt3 agora extrai tanto email do usuário quanto ID (chapa)
* Prioriza extração de email quando disponível no resumo do alerta
* Adicionados padrões de extração de email em contextos diversos:
- Após palavras "user" ou "associated with user"
- Em contexto de login ou autenticação
- Em formato padrão de email (texto@dominio.com)
* Mantém padrões de extração de ID (chapa) existentes
- Otimização da rota AberturaDeChamadosMovti:
* Detecção automática se resultado da IA é email ou ID
* Fluxo otimizado para emails: busca direta no Dataset_colleague, sem passar por Dataset_funcionarios
* Fluxo mantido para IDs: busca primeiro em Dataset_funcionarios, depois em Dataset_colleague
* Redução de chamadas à API quando email é extraído diretamente
* Logs detalhados indicando se foi detectado email ou ID
* Retorno adaptado para incluir "N/A" no id_usuario quando email é extraído
Versão 2.0.2
IMPLEMENTAÇÕES:
- Ajuste Rota AberturaDeChamadosMovti:
Versão 2.1.0
IMPLEMENTAÇÕES:
- Autenticação automatizada via Selenium:
* Criação dos módulos web_login_fluig.py e web_auth_manager.py para centralizar login e cookies
* Validação de expiração de cookies e reautenticação automática apenas quando necessário
* Armazenamento de cookies por usuário e ambiente em src/json/
- Expansão das rotas Fluig:
* Novas rotas /fluig/servicos e /fluig/servicos/detalhes com salvamento dos retornos em JSON
* Rota /fluig/chamado/detalhes baseada no serviço findDetailsMyRequests
* /fluig/chamado/abrir simplificada para abrir chamados “em branco” com payload reduzido
- Refatorações do núcleo:
* FluigCore inicializa apenas com ambiente e Dataset_config passa a receber dataset_id e usuário
* Dataset_config utiliza definições de DatasetConfig e retorna somente datasetId/filterFields
* Adição de loggers em todo o fluxo para melhor rastreabilidade
- Novos payloads e integrações:
* PayloadChamadoClassificado com fallback para FakeUser quando usuário secops-soc@movti.com.br
* PayloadChamadoNormal simplificado e com telefone padrão “65” quando ausente
* PayloadChamadoMovtiClassificado integrando ia.py + prompt3 para extrair usuário do texto
- Integração Movti:
* Pasta movit renomeada para src/terceiro com MovitCore dedicado
* Nova rota /terceiro/movit/chamado/abrir-classificado fixando serviço 1142587
* Apps Script ajustado para separar emails da Movti e chamar rotas adequadas
- Padronização de respostas:
* Todas as rotas de abertura retornam apenas o processInstanceId numérico
* Salvamento dos detalhes de serviços/chamados em src/json para auditoria
Versão 2.1.1
IMPLEMENTAÇÕES:
- Rotas QLD completas para serviços:
* Rota GET /fluigqld/servicos - Lista serviços do ambiente qualidade com salvamento em JSON
* Rota POST /fluigqld/servicos/detalhes - Obtém detalhes de serviços específicos do ambiente qualidade
* Serviços salvos em src/json/servicos_qld.json e servico_detalhes_{id}_qld.json
- Centralização de funções JSON:
* Criação de src/utilitarios_centrais/json_utils.py com funções compartilhadas
* Funções salvar_servicos_json() e salvar_detalhes_servico_json() centralizadas
* Removida duplicação de código entre rotas PRD e QLD
- Rotas QLD para chamados:
* Rota POST /fluigqld/chamado/abrir - Abertura de chamados sem classificação no ambiente qualidade
* Rota POST /fluigqld/chamado/detalhes - Busca detalhes de chamados no ambiente qualidade
* Isolamento completo do ambiente QLD, sem dependências do ambiente PRD
- Consolidação do sistema de login:
* Arquivos web_login_fluig_prd.py e web_login_fluig_qld.py unificados em web_login_fluig.py
* Função fazer_login_fluig() aceita parâmetro ambiente ('PRD' ou 'QLD')
* Seleção automática de URL baseada no ambiente (URL_FLUIG_PRD ou URL_FLUIG_QLD)
- Seleção dinâmica de credenciais por ambiente:
* FluigCore.AberturaDeChamado() seleciona credenciais baseado no ambiente
* Ambiente QLD usa FLUIG_USER_NAME_QLD e FLUIG_USER_PASS_QLD
* Ambiente PRD usa FLUIG_USER_NAME e FLUIG_USER_PASS
- Correção de uso de ambiente nas funções:
* PayloadChamadoNormal() agora recebe e utiliza corretamente o parâmetro ambiente
* Garantia de que todas as buscas de datasets usam o ambiente correto (PRD ou QLD)
* Isolamento completo entre ambientes em todo o fluxo de abertura de chamados
- Correção de colleague ID por ambiente:
* obter_detalhes_chamado() seleciona colleague ID baseado no ambiente
* Ambiente QLD usa USER_COLLEAGUE_ID_QLD para taskUserId
* Ambiente PRD usa ADMIN_COLLEAGUE_ID para taskUserId
* Logs detalhados indicando qual colleague ID está sendo utilizado
Versão 3.0.0
IMPLEMENTAÇÕES:
- Padronização de rotas:
* Todas as rotas agora seguem o padrão /api/v1/fluig/{ambiente}/...
* Ambiente (prd ou qld) especificado como path parameter
* Versionamento de API com prefixo /api/v1
* Estrutura RESTful hierárquica e semântica
* Rotas PRD e QLD unificadas em um único endpoint com parâmetro de ambiente
* Rotas de terceiros padronizadas para /api/v1/terceiros/{provider}/...
* Remoção de rotas antigas separadas por ambiente (rt_fluig_prd.py, rt_fluig_qld.py, etc.)
- Integração completa do Webapp:
* Interface web completa para criação de chamados
* Autenticação via Google OAuth 2.0 com gerenciamento de sessões
* Rotas do webapp: /login, /logout, /chamado
* Templates HTML em src/site/templates/ (chamado.html, login.html)
* Arquivos estáticos em src/site/static/ (CSS, JavaScript)
* Middleware de sessão (SessionMiddleware) para gerenciamento de autenticação
- Funcionalidades do Webapp:
* Criação de chamados únicos com formulário completo
* Geração em lote via planilha Excel (.xlsx)
* Processamento de placeholders em planilhas (<A>, <B>, etc.)
* Autocomplete de serviços com busca inteligente
* Preenchimento automático de campos de classificação ao selecionar serviço
* Modal de processamento com feedback em tempo real
* Exibição dos números dos chamados criados durante o processamento
* Botão "Concluir" para fechar o modal após visualizar resultados
* Cache local de detalhes de serviços em src/json/services/
Versão 3.0.1
IMPLEMENTAÇÕES:
- Sistema de renovação automática de cookies:
* Thread em background que monitora e renova sessões do Fluig automaticamente
* Renovação via endpoint /portal/api/rest/session/keepAlive antes da expiração
* Renovação proativa quando JWT expira em menos de 5 minutos
* Verificação periódica a cada 60 segundos de todas as sessões ativas
* Elimina necessidade de re-login completo via Selenium quando cookies estão próximos de expirar
- Funções de renovação de sessão:
* renovar_sessao_keepalive() - Renova cookies via endpoint keepAlive do Fluig
* obter_tempo_expiracao_jwt() - Calcula tempo restante até expiração do JWT
* registrar_sessao_ativa() - Registra sessão para monitoramento automático
* iniciar_renovacao_automatica() - Inicia thread de renovação em background
* parar_renovacao_automatica() - Encerra thread de renovação graciosamente
- Melhorias no gerenciamento de autenticação:
* garantir_autenticacao() agora tenta renovar via keepAlive antes de fazer login completo
* Fallback automático para login via Selenium se keepAlive falhar
* Registro automático de sessões após login bem-sucedido
* Atualização automática de cookies salvos após renovação
Versão 3.0.2
IMPLEMENTAÇÕES:
- Melhorias no dataset colleague:
* Suporte ao parâmetro currentProject para busca por CHAPA no dataset colleague
* Detecção automática do tipo de busca: email (mail), CHAPA numérica (currentProject) ou nome (colleagueName)
* Lógica simplificada: se não for email e for número, usa currentProject; caso contrário, usa colleagueName
* Busca otimizada por CHAPA usando o parâmetro específico do Fluig
- Refatoração de funções de busca de funcionários:
* Função unificada buscar_funcionario() centraliza toda a lógica de busca
* Funções wrapper manter compatibilidade: buscar_funcionario_por_email() e buscar_funcionario_por_chapa_ou_email()
* Parâmetro obrigatorio controla comportamento: lança ValueError ou retorna None
* Eliminação de código duplicado e melhoria na manutenibilidade
- Formatação correta do campo UsuarioAtendido:
* Nova função buscar_colleague_name() busca o nome formatado do dataset colleague
* Campo UsuarioAtendido agora usa colleagueName que já vem formatado corretamente (primeira letra maiúscula)
* Exemplo: "Nathan Renner de Azevedo" ao invés de "NATHAN RENNER DE AZEVEDO"
* Integração completa: funciona em chamados únicos e em lote via planilha
* Suporte a placeholders no campo solicitante para geração em lote
- Melhorias na visualização prévia:
* Campo "Solicitante" adicionado na prévia dos chamados
* Exibe o solicitante processado com placeholders substituídos
* Permite verificar o solicitante antes de criar os chamados
* Integração completa com o processamento de placeholders da planilha
Versão 3.1.2
IMPLEMENTAÇÕES:
- Substituição do sistema de keepalive por login automático pelo navegador:
* Removido sistema de renovação via endpoint keepAlive (não funciona com navegador fechado)
* Implementado sistema de login automático via Selenium que funciona mesmo com navegador fechado
* Thread em background monitora validade dos cookies e faz login automaticamente quando necessário
* Login automático é acionado 5 minutos antes da expiração do cookie (TEMPO_ANTECEDENCIA_LOGIN)
* Verificação periódica a cada 60 segundos de todas as sessões ativas
- Funções removidas:
* renovar_sessao_keepalive() - Removida (dependia de navegador aberto)
* _atualizar_cookies() - Removida (usada apenas pelo keepalive)
* iniciar_renovacao_automatica() - Substituída por iniciar_login_automatico()
* parar_renovacao_automatica() - Substituída por parar_login_automatico()
- Novas funções:
* _verificar_e_fazer_login_automatico() - Thread que verifica e faz login automático pelo navegador
* iniciar_login_automatico() - Inicia thread de login automático em background
* parar_login_automatico() - Encerra thread de login automático graciosamente
- Melhorias no gerenciamento de autenticação:
* garantir_autenticacao() agora faz login direto pelo navegador quando cookies estão expirados
* registrar_sessao_ativa() agora aceita parâmetro senha opcional para login automático
* O intervalo de login é baseado na validade do cookie obtido após cada login
* Sistema funciona independente do estado do navegador (fechado ou aberto)
- Correção no campo telefone de contato:
* Correção do nome do parâmetro no endpoint POST /chamado (telefone_contato ao invés de num_tel_contato)
* Prioriza telefone preenchido no formulário sobre telefone do dataset de funcionários
Versão 3.5.0
IMPLEMENTAÇÕES:
- Ajustes de estilo CSS na interface do webapp:
* Botão de logout (.logout-btn-small): box-shadow atualizado de rgba(220, 53, 69, 0.15) para rgba(220, 53, 69, 0.3)
* Link de documentação (.docs-link): adicionados margin-left e margin-right de 5px para melhor espaçamento
* Cabeçalho de versão (.version-header): adicionados margin-left e margin-right de 0px para alinhamento correto
* Texto de versão (.version-text): adicionados margin-left e margin-right de 0px para remover espaçamento indesejado
Versão 3.6.0
IMPLEMENTAÇÕES:
- Nova funcionalidade de FakeUser baseada em lista de emails:
* Nova configuração EMAILS_LIST no .env para definir emails que devem usar FakeUser
* Função _email_na_lista_fakeuser() verifica se email do solicitante está na lista
* PayloadChamadoNormal() e PayloadChamadoClassificado() agora verificam EMAILS_LIST
* Se email estiver na lista, utiliza FakeUser() ao invés de buscar no dataset colleague
* Comparação case-insensitive (não diferencia maiúsculas/minúsculas)
* Formato no .env: EMAILS_LIST=email1@dominio.com,email2@dominio.com
Versão 3.8.0
IMPLEMENTAÇÕES:
- Módulo completo de monitoramento de emails (Gmail Monitor):
* Criação do módulo src/gmail_monitor/ que substitui completamente o Apps Script do Google
* Monitoramento automático de emails não lidos do Gmail em background
* Processamento automático de emails seguindo o fluxo completo de abertura de chamados
* Integração com Google Drive API para upload de anexos
* Integração com People API para busca de telefone no diretório do Google Workspace
* Integração com Gmail API para envio de emails de confirmação
- Componentes do Gmail Monitor:
* gmail_service.py - Serviço principal de monitoramento e processamento de emails
* email_validator.py - Validação de domínio e emails bloqueados
* drive_uploader.py - Upload de anexos no Google Drive
* people_service.py - Busca de telefone no diretório do Google Workspace
* email_sender.py - Envio de emails via Gmail API
* background_service.py - Serviço em background para execução periódica
- Funcionalidades do monitoramento:
* Busca emails não lidos automaticamente a cada intervalo configurável
* Valida remetentes (domínio UISA ou emails permitidos como Movit)
* Processa anexos e salva no Google Drive antes de abrir chamado
* Busca telefone do remetente no diretório do Google Workspace
* Chama API para abrir chamado (UISA ou Movit conforme email)
* Envia email de confirmação ao usuário com número do chamado e link
* Marca emails como processados com label "PROCESSADOS"
- Configurações adicionadas:
* GMAIL_DELEGATE_USER - Email para delegação de domínio (obrigatório para People API)
* API_ENDPOINT_CHAMADO_UISA - Endpoint da API para chamados UISA
* API_ENDPOINT_CHAMADO_MOVTI - Endpoint da API para chamados Movit
* GMAIL_MONITOR_AMBIENTE - Ambiente do Fluig para monitoramento (prd ou qld)
* GMAIL_CHECK_INTERVAL - Intervalo de verificação de emails (em minutos)
Versão 3.8.1
IMPLEMENTAÇÕES:
- Suíte completa de testes para o módulo Gmail Monitor:
* test_listar_emails_nao_lidos.py - Lista emails não lidos
* test_listar_emails_processados.py - Lista emails marcados como processados
* test_checar_permissoes.py - Verifica permissões da conta de serviço
* test_enviar_email.py - Testa envio de emails
* test_listar_contatos_people.py - Lista contatos do People API
* test_processar_email_mais_recente.py - Teste de integração completo
* test_verificar_api.py - Verifica se a API está acessível
* run_all_tests.py - Executa todos os testes automaticamente
- Documentação completa:
* docs/GMAIL_MONITOR_SETUP.md - Guia completo de configuração
* tests/gmail_monitor/README.md - Documentação dos testes
Versão 3.8.2
IMPLEMENTAÇÕES:
- Correções críticas no processamento de emails:
* Email só é marcado como processado se o chamado for aberto com sucesso
* Em caso de falha (404, 500, rejeição, etc.), email permanece não lido para nova tentativa
* Função _processar_resposta_chamado() agora retorna True/False indicando sucesso
* Lógica de marcação condicional implementada tanto no serviço principal quanto nos testes
- Melhorias no tratamento de erros:
* Logs detalhados quando email não é marcado devido à falha
* Tratamento específico para cada tipo de falha (API, validação, processamento)
* Emails bloqueados ainda são marcados como processados (não tenta novamente)
- Correções técnicas:
* Remoção de parâmetro orderBy não suportado pela API do Gmail
* Normalização de ambiente para minúsculo na construção de URLs
* Logs melhorados com informações de URL chamada e resposta completa
Versão 3.8.3
IMPLEMENTAÇÕES:
- Melhorias nos testes e scripts:
* Remoção de todos os emojis dos scripts de teste (substituídos por [OK], [ERRO], [AVISO])
* Script test_verificar_api.py força uso de localhost para testes locais
* Melhorias na documentação e mensagens de erro dos testes
* Correção de delegação de domínio obrigatória para People API
* Validação de query obrigatória para People API nos testes
Versão 4.1.0
IMPLEMENTAÇÕES:
- Refatoração do módulo Gmail Monitor para usar funções internas:
* Removido uso de requisições HTTP para chamar a própria API
* Implementado uso direto de FluigCore.AberturaDeChamado() para abrir chamados
* Processamento de anexos integrado (baixar do Drive e anexar ao chamado)
* Melhor performance e confiabilidade (não depende da API estar rodando)
* Eliminação de overhead de rede e autenticação HTTP desnecessária
- Melhorias na arquitetura:
* Código mais limpo e direto, reutilizando lógica existente
* Redução de dependências externas (não precisa da API rodando)
* Processamento de anexos unificado (mesma lógica das rotas HTTP)
- Implementação completa da BLACK_LIST_EMAILS:
* Nova função _obter_blacklist_emails() lê variável BLACK_LIST_EMAILS do .env
* Validação de emails bloqueados antes de processar chamados
* Emails na blacklist são ignorados sem marcar como processados (apenas passa)
* Outros emails bloqueados continuam sendo marcados como processados
* Suporte a lista separada por vírgulas no formato: email1@dominio.com,email2@dominio.com
- Melhorias na validação de emails:
* Função validar_email_uisa() retorna campo is_blacklist para diferenciar tipos de bloqueio
* Verificação de BLACK_LIST_EMAILS antes de outras validações
* Logs detalhados quando email é bloqueado pela blacklist
* Comportamento diferenciado: blacklist apenas passa, outros bloqueios marcam como processado
Versão 5.3.0
IMPLEMENTAÇÕES:
- Ajustes de estilo CSS na sidebar de chamados:
* Sidebar de chamados: adicionados justify-content: flex-start e align-items: flex-start
* Botões de chamado: removido padding-top e padding-bottom (padding: 0 14px)
* Margens da sidebar ajustadas para 25px (top e bottom)
- Nova funcionalidade de listagem de chamados do grupo ITSM_TODOS:
* Nova rota GET /api/chamados/grupo-itsm-todos para listar chamados do grupo Pool:Group:ITSM_TODOS
* Filtros aplicados: status=NOT_COMPLETED e slaStatus=ON_TIME
* Busca detalhes completos de cada chamado retornado
* Teste criado em tests/fluig/test_listar_chamados_grupo_itsm_todos.py
- Nova sidebar "TODOS ANALISTAS" no lado direito:
* Sidebar direita adicionada com estrutura idêntica à sidebar "MEUS CHAMADOS"
* Posicionamento fixo no lado direito da tela (right: 20px)
* Mesmo layout, formatação e estilo da sidebar esquerda
* Carregamento automático de chamados do grupo ITSM_TODOS ao abrir a página
- Sistema de paginação na sidebar "TODOS ANALISTAS":
* Paginação frontend com 10 chamados por página
* Controles de paginação abaixo da lista (botões numerados: 1, 2, 3, 4, etc.)
* Botão da página atual destacado visualmente
* Navegação por clique nos números de página
* Paginação oculta automaticamente quando há 1 página ou menos
- Ajustes de layout para duas sidebars:
* Conteúdo principal centralizado entre as duas sidebars
* Margens ajustadas: margin-left: 360px e margin-right: 360px
* Largura calculada: width: calc(100% - 720px)
* Responsividade atualizada para dispositivos móveis (ambas as sidebars)
Versão 6.2.2
IMPLEMENTAÇÕES:
- Migração completa da abertura de chamados para OAuth 1.0:
* Função AberturaDeChamado() migrada para usar exclusivamente OAuth 1.0
* Removida dependência de cookies e login via browser na abertura de chamados
* PayloadChamadoClassificado() migrado para usar OAuth 1.0 em todas as operações
* PayloadChamadoNormal() já utilizava OAuth 1.0 (sem alterações necessárias)
* obter_detalhes_servico_fluig() migrado para usar OAuth 1.0 via RequestsFluig
* Todas as rotas de abertura de chamados agora funcionam sem cookies
- Nova variável de ambiente para controle de login via browser:
* BROWSER_LOGIN_ENABLED - Habilita/desabilita login via browser em todo o projeto
* Valores aceitos: "true", "True", "1" (habilitado) ou "false", "False", "0" (desabilitado)
* Padrão: "true" (habilitado)
* Quando desabilitado, todas as funções de login via browser retornam erro
* Funções afetadas: fazer_login_fluig(), realizar_login(), garantir_autenticacao(), iniciar_login_automatico()
* Útil para ambientes onde apenas OAuth 1.0 é usado e não há necessidade de cookies
- Teste para abertura de chamados com OAuth 1.0:
* Novo teste test_abrir_chamado_oauth.py em tests/fluig/
* Testa abertura de chamados usando endpoint /v2/processes/{processId}/start
* Utiliza exclusivamente autenticação OAuth 1.0 (CK, CS, TK, TS)
* Payload de teste configurável para validação
- Atualizações nas rotas de serviços:
* ObterDetalhesServico() migrado para usar OAuth 1.0 (removida dependência de cookies)
* buscar_detalhes_servico() no webapp migrado para usar OAuth 1.0
* Removidos imports e chamadas de obter_cookies_validos() das rotas de serviços
- Melhorias na arquitetura:
* Separação clara entre autenticação OAuth 1.0 e autenticação via cookies
* Funções de abertura de chamados agora são completamente independentes de browser/login
* Maior confiabilidade e performance (não depende de Selenium/ChromeDriver)
* Redução de dependências externas para operações críticas
Versão 6.5.0
IMPLEMENTAÇÕES:
- Sistema de cache para melhorar performance do carregamento de chamados:
* Cache no backend (Python) com TTL de 5 minutos para reduzir requisições ao Fluig
* Cache no frontend (localStorage) com TTL de 5 minutos para carregamento instantâneo
* Cache separado para "MEUS CHAMADOS" (por email do usuário) e "TODOS ANALISTAS" (fixo)
* Limpeza automática de entradas expiradas do cache
* Thread-safe usando locks para garantir consistência em requisições concorrentes
- Busca paralela de detalhes de chamados:
* Função _buscar_detalhes_paralelo() implementada usando ThreadPoolExecutor
* Até 10 requisições simultâneas para buscar detalhes de chamados (configurável)
* Redução significativa do tempo de carregamento quando há muitos chamados
* Substitui busca sequencial (um por um) por busca paralela
- Atualização em background no frontend:
* Exibe dados do cache imediatamente ao carregar a página (sem espera)
* Atualiza dados em background sem bloquear a interface do usuário
* Atualiza a lista automaticamente apenas se houver mudanças nos dados
* Melhor experiência do usuário com carregamento instantâneo
Versão 6.7.0
IMPLEMENTAÇÕES:
- Sistema de configurações personalizadas para abertura de chamados por email:
* Nova página de configurações (/configuracoes) para personalizar classificação de chamados
* Campos de configuração: email_solicitante, usuario_responsavel, serviço, urgência, tipo, status, etc.
* Configurações salvas em arquivo INI (src/configs/personalizar_chamado.ini)
* Múltiplas configurações suportadas (uma por email_solicitante)
* Interface visual com cards para listar e selecionar configurações salvas
- Integração de configurações com abertura automática de chamados:
* Gmail Monitor verifica se email do remetente tem configuração salva
* Se configurado, abre chamado classificado usando dados da configuração
* Usa servico_id da configuração para classificação automática
* Busca colleagueId do usuario_responsavel e define como targetAssignee
* Fallback para chamado normal se não houver configuração
- Modificações no sistema de payloads:
* PayloadChamadoClassificado() aceita parâmetro opcional target_assignee
* FluigCore.AberturaDeChamado() aceita parâmetro opcional target_assignee
* Permite definir responsável customizado para chamados classificados
* Mantém compatibilidade com código existente (target_assignee opcional)
- Restrição de acesso à página de configurações:
* Acesso restrito apenas para email nathan.azevedo@uisa.com.br
* Modal de permissão negada exibido para usuários não autorizados
* Proteção em todas as rotas de configurações (GET, POST /salvar, /carregar, /listar)
* Retorna erro 403 (Forbidden) para requisições não autorizadas
Versão 6.8.0
IMPLEMENTAÇÕES:
- Separação de arquivos de configuração por funcionalidade:
* Configurações de personalização de chamados em personalizar_chamado.ini
* Configurações gerais do sistema em configuracoes_gerais.ini
* Criação de ConfigManagerGerais para gerenciar configurações gerais separadamente
* Cada aba da interface de configurações gerencia seu próprio arquivo
* Melhor organização e manutenção das configurações
- Nova aba "Configurações Gerais" na interface web:
* Campos configuráveis: GMAIL_CHECK_INTERVAL, GMAIL_MONITOR_ENABLED, BLACK_LIST_EMAILS, EMAILS_LIST
* Interface visual para gerenciar todas as configurações gerais do sistema
* Valores salvos no arquivo configuracoes_gerais.ini
* Fallback automático para valores do .env quando não configurado
- Remoção de valores hardcoded do sistema:
* Lista de emails bloqueados removida do código (email_validator.py)
* Todos os emails bloqueados agora vêm da configuração BLACK_LIST_EMAILS
* Facilita manutenção e personalização sem alterar código
- Integração de EMAILS_LIST com interface web:
* Campo EMAILS_LIST adicionado na aba "Configurações Gerais"
* Lista de emails que devem usar FakeUser configurável via interface
* Função _email_na_lista_fakeuser() atualizada para ler do arquivo de configuração
* Prioriza valores do arquivo INI sobre .env
- Refatoração do JavaScript da página de configurações:
* JavaScript movido para arquivo separado (src/site/static/js/configuracoes.js)
* Código mais organizado e fácil de manter
* Melhor performance com cache do navegador
* Separação clara de responsabilidades (HTML vs JS)
- Funcionalidade de exclusão de configurações:
* Botão de exclusão adicionado em cada card de configuração
* Rota DELETE /configuracoes/excluir implementada
* Confirmação antes de excluir configuração
* Atualização automática da lista após exclusão
- Melhorias no gerenciamento de configurações:
* Exibição do campo "Usuário Responsável" nos cards de configuração
* Sistema de abas para organizar diferentes tipos de configurações
* Carregamento automático de valores ao abrir cada aba
* Validação de campos antes de salvar
Versão 7.3.2
IMPLEMENTAÇÕES:
- Endpoints genéricos para processos do Fluig:
* Nova rota POST /api/v1/fluig/{ambiente}/processos/iniciar para iniciar qualquer processo/formulário
* Nova rota POST /api/v1/fluig/{ambiente}/processos/upload para upload de arquivos no ECM
* Nova rota POST /api/v1/fluig/{ambiente}/processos/anexar para anexar arquivos em base64 a processos
* Nova rota POST /api/v1/fluig/{ambiente}/processos/anexar-upload para anexar arquivos brutos (multipart/form-data)
* Todos os endpoints utilizam autenticação via API_KEY e OAuth 1.0
- Obtenção automática de detalhes da atividade:
* Função obter_detalhes_atividade() implementada em FluigCore para buscar detalhes via API v2
* Endpoints /anexar e /anexar-upload obtêm automaticamente version, current_movto e attached_activity
* Detecta atividade ativa automaticamente ou usa a última atividade disponível
* Valores padrão (57, 3, "Aguardando Classificação") usados como fallback
- Simplificação de parâmetros nos endpoints de anexo:
* Removidos parâmetros version, current_movto e attached_activity do schema AnexarArquivoRequest
* Parâmetros obtidos automaticamente, não precisam ser fornecidos na requisição
* Documentação simplificada removendo detalhes técnicos desnecessários
- Padronização do retorno dos endpoints de anexo:
* Retorno simplificado contendo apenas: documentId, fileName e fullPath
* Removidos campos desnecessários (nome, document_id, process_instance_id, dados completos)
* Estrutura de resposta mais limpa e focada nas informações essenciais
- Melhorias na documentação dos endpoints:
* Descrições melhoradas e mais completas em todos os endpoints de processos
* Remoção de menções a autenticação e dados sensíveis da documentação
* Documentação focada em funcionalidades e uso, sem detalhes técnicos de implementação
* Descrições atualizadas em rt_fluig_chamados.py, rt_fluig_datasets.py, rt_fluig_servicos.py e rt_fluig_processos.py
- Validação e tratamento de process_instance_id:
* Limpeza automática de espaços em process_instance_id no endpoint /anexar-upload
* Conversão e validação robusta de valores numéricos
* Mensagens de erro mais claras para valores inválidos
Versão 7.8.1
IMPLEMENTAÇÕES:
- Sistema completo de monitoramento de histórico de chamados:
* Novo módulo src/historico_monitor/ para gerenciar históricos de chamados abertos via email
* Salvamento automático de histórico inicial quando chamado é aberto via endpoint /email/abrir
* Armazenamento de históricos em arquivos .ini usando ConfigParser (src/historico_monitor/historicos/)
* Estrutura de dados com metadados (process_instance_id, ambiente, datas, total_items) e histórico completo (JSON)
- Monitoramento periódico de atualizações:
* Verificação automática de atualizações nos históricos a cada 1 hora (configurável)
* Detecção automática de novos eventos (MOVEMENT, OBSERVATION, ATTACHMENT) nos chamados
* Comparação inteligente entre histórico antigo e novo para identificar mudanças
* Atualização automática dos arquivos de histórico quando há novas mudanças
- Componentes do sistema de monitoramento:
* historico_manager.py - Gerencia salvamento, leitura e atualização de históricos usando ConfigParser
* historico_monitor.py - Monitora atualizações periodicamente e compara históricos
* background_service.py - Serviço em background para inicialização automática com a aplicação
* iniciar_monitor.py - Script standalone para iniciar monitoramento manualmente
- Integração automática com a aplicação:
* Monitoramento iniciado automaticamente quando aplicação FastAPI inicia (lifespan)
* Monitoramento parado automaticamente quando aplicação é encerrada (shutdown)
* Compatível com Cloud Run (execução em background via threads daemon)
* Configurável via variáveis de ambiente (HISTORICO_MONITOR_ENABLED, HISTORICO_CHECK_INTERVAL_HOURS, HISTORICO_MONITOR_AMBIENTE)
- Interface web de configurações:
* Campos adicionados na aba "Configurações Gerais" para gerenciar monitoramento de histórico
* Campo HISTORICO_CHECK_INTERVAL_HOURS: intervalo de verificação em horas (0.1 a 24)
* Campo HISTORICO_MONITOR_ENABLED: checkbox para habilitar/desabilitar monitoramento
* Valores salvos em configuracoes_gerais.ini com fallback para .env
* Carregamento e salvamento automático via JavaScript e endpoints FastAPI
Versão 8.0.0
IMPLEMENTAÇÕES:
- Integração de monitoramento de histórico no Gmail Monitor:
* Salvamento automático de histórico quando chamado é aberto via Gmail Monitor
* Implementado em _chamar_api_chamado() para chamados normais
* Implementado em _abrir_chamado_classificado() para chamados classificados
* Histórico salvo imediatamente após obter process_instance_id com sucesso
* Todos os chamados abertos via email (endpoint /email/abrir ou Gmail Monitor) são monitorados
- Reinício automático de serviços ao salvar configurações:
* Endpoint /configuracoes/gerais/salvar reinicia serviços automaticamente após salvar
* Gmail Monitor e Histórico Monitor são reiniciados para aplicar novas configurações
* Não é necessário reiniciar a aplicação no Cloud Run para aplicar mudanças
* Mensagem de sucesso informa que serviços foram reiniciados
- Endpoint para reiniciar serviços manualmente:
* Nova rota POST /configuracoes/gerais/reiniciar-servicos para reiniciar serviços
* Requer autenticação e permissão (mesmo usuário autorizado das configurações)
* Reinicia Gmail Monitor e Histórico Monitor simultaneamente
* Útil para aplicar configurações sem salvar novamente
- Métodos de reinício nos serviços:
* Método reiniciar() implementado em GmailMonitorBackgroundService
* Método reiniciar() implementado em HistoricoMonitorBackgroundService
* Reinício gracioso: para serviço, aguarda 2 segundos, recarrega configurações e reinicia
* Funções globais reiniciar_monitoramento_gmail() e reiniciar_monitoramento_historico()
Versão 8.5.0
IMPLEMENTAÇÕES:
- Sistema de gerenciamento de fluxo de histórico de chamados:
* Novo módulo historico_fluxo.py para processar itens do histórico baseado em regras configuráveis
* Regras definidas em arquivo .ini (src/historico_monitor/config/fluxo.ini) para fácil personalização
* Suporte a regras por state_name (estado do processo) e por tipo (MOVEMENT, OBSERVATION, ATTACHMENT)
* Configurações por regra: pular item, descrição personalizada, mostrar observação, mostrar responsáveis
* Substituição automática de placeholders ('responsaveis', 'observation_description') nas descrições
- Integração do sistema de fluxo com envio de emails:
* Template de email de atualização (criar_template_email_atualizacao) agora usa HistoricoFluxoManager
* Texto plano do email também processado pelo gerenciador de fluxo
* Itens que devem ser pulados são automaticamente removidos antes do envio
* Mensagens personalizadas baseadas nas regras de fluxo configuradas
- Correção da numeração de itens no histórico:
* Itens agora são salvos invertidos (mais antigos = ITEM_1, mais recentes = ITEM_N)
* Garante que novas atualizações sempre recebam números maiores e sejam detectadas corretamente
* Função comparar_historicos() corrigida para pegar os primeiros itens novos (mais recentes)
* Todas as funções que usam índices ajustadas para considerar a inversão (obter_itens_nao_enviados, marcar_itens_como_enviados, obter_indices_itens_nao_enviados)
- Regra especial para ignorar itens "Registro criado":
* Itens do tipo OBSERVATION com observation_description = "Registro criado" são automaticamente ignorados
* Não são salvos nas seções individuais do arquivo .ini
* Não são processados para envio de email
* Ainda aparecem no JSON completo (DADOS_COMPLETOS) para fins de auditoria
- Melhorias na exibição de responsáveis:
* Função _obter_responsaveis() agora retorna apenas o primeiro responsável
* Evita exibição de múltiplos responsáveis separados por vírgula (ex: "Nathan Renner de Azevedo, ITSM_TODOS")
* Emails de atualização mais limpos e focados no responsável principal
- Estrutura de configuração de fluxo:
* Arquivo fluxo.ini organizado por seções [state_name:Nome] e [tipo:TIPO]
* Propriedades configuráveis: pular, descricao_etapa, mostrar_observacao, mostrar_responsaveis
* Fácil edição sem necessidade de modificar código
* Suporte a placeholders dinâmicos nas descrições
Versão 8.5.2
IMPLEMENTAÇÕES:
- Sistema de templates de chamados por usuário:
* Novo módulo user_template_manager.py para gerenciar templates de título e descrição
* Suporte a múltiplos templates com nomes personalizados por usuário
* Templates salvos em arquivos .ini individuais na pasta src/configs/user_configs/
* Um arquivo por usuário: template_{email_normalizado}.ini
* Cada template salvo em seção separada: TEMPLATE_{NOME}
- Interface web para gerenciamento de templates:
* Botões "Salvar Template" e "Carregar Template" adicionados na seção "Dados do Chamado"
* Botões posicionados no canto direito do cabeçalho da seção
* Botões com tamanho reduzido (padding: 6px 12px, font-size: 13px)
* Modal para salvar template com campo de nome obrigatório
* Modal para listar e selecionar templates quando houver múltiplos
- Funcionalidades de templates:
* Salvar template: modal solicita nome do template antes de salvar
* Carregar template: se houver apenas 1 template, carrega diretamente; se houver mais, mostra lista
* Excluir template: botão de exclusão em cada item da lista de templates
* Listar templates: endpoint retorna todos os templates do usuário logado
- Endpoints de templates:
* POST /chamado/template/salvar - Salva template com nome, título e descrição
* GET /chamado/template/carregar - Carrega template específico (aceita nome_template como query parameter)
* GET /chamado/template/listar - Lista todos os templates do usuário
* DELETE /chamado/template/excluir - Exclui template específico
- Melhorias na experiência do usuário:
* Remoção de popups (alerts) nas operações de salvar e carregar templates
* Operações ocorrem silenciosamente com feedback apenas no console
* Confirmação apenas para exclusão de templates (usando confirm nativo)
* Lista de templates recarrega automaticamente após exclusão
* Modal fecha automaticamente se não houver mais templates após exclusão
- Padronização visual dos botões:
* Todos os botões da interface web alterados para cor cinza
* Botão do Google (login) atualizado para usar cores cinza
* Botões de template e exclusão seguem o mesmo padrão visual
* Consistência visual em toda a aplicação web
Versão 8.7.0
IMPLEMENTAÇÕES:
- Sistema completo de sincronização de configurações com Google Drive:
* Novo módulo drive_config_manager.py para gerenciar upload/download de configurações
* Sincronização automática ao salvar templates, configurações de personalização e configurações gerais
* Sincronização inicial automática ao iniciar o programa (upload de todas as configurações existentes)
* Estrutura automática de pastas no Drive (user_configs/, arquivos raiz)
* Atualização inteligente de arquivos existentes (não duplica arquivos)
- Integração com gerenciadores existentes:
* UserTemplateManager: sincroniza templates após salvar/excluir
* ConfigManager: sincroniza configurações de personalização após salvar
* ConfigManagerGerais: sincroniza configurações gerais após salvar
* Sincronização não bloqueia operações principais (falhas silenciosas)
- Endpoints REST para backup/restore manual:
* POST /configuracoes/drive/backup - Faz backup manual de todas as configurações
* POST /configuracoes/drive/restore - Restaura configurações do Drive para o sistema local
* GET /configuracoes/drive/status - Verifica status da sincronização e lista arquivos no Drive
* Endpoints restritos apenas para administradores
- Variáveis de ambiente adicionadas:
* FOLDER_ID_DRIVE_CONFIGS - ID da pasta do Google Drive para configurações
* DRIVE_SYNC_ENABLED - Habilita/desabilita sincronização automática (padrão: false)
* Fallback automático para FOLDER_ID_DRIVE se FOLDER_ID_DRIVE_CONFIGS não configurado
- Correções técnicas:
* Correção de erro 403 ao atualizar arquivos existentes no Drive (uso de addParents/removeParents)
* Tratamento correto de arquivos existentes vs novos arquivos
* Criação automática de subpastas no Drive quando necessário
* Busca inteligente de arquivos por nome antes de criar/atualizar
- Melhorias na interface:
* Remoção de border-radius do modal de "Acesso Negado" (bordas quadradas conforme padrão)
* Remoção de border-radius do botão "Voltar para Chamados" no modal
* Consistência visual com o padrão do sistema (bordas quadradas)
- Documentação:
* docs/ANALISE_GOOGLE_DRIVE_CONFIG.md - Análise técnica da implementação
* docs/GOOGLE_DRIVE_CONFIG_USO.md - Guia completo de uso e configuração
* Arquivo .gitkeep adicionado em src/configs/user_configs/ para manter estrutura no git
Versão 9.2.3
IMPLEMENTAÇÕES:
- Sistema completo de deduplicação de emails baseado em padrões configuráveis:
* Novo módulo email_deduplicator.py para gerenciar deduplicação de emails
* Suporte a padrões regex ou palavras-chave simples (ex: "Endereço MAC:", "UUID:")
* Extração automática de identificadores únicos (MAC addresses, UUIDs, códigos alfanuméricos)
* Detecção de emails duplicados antes de abrir chamados
* Prevenção de abertura de múltiplos chamados para o mesmo processo/equipamento
* Campo EMAIL_DEDUPLICATION_EMAILS na página de configurações gerais
* Lista de emails (separados por vírgula) que devem passar pela verificação de deduplicação
* Se configurado, apenas emails desses remetentes terão padrões verificados
* Se deixado em branco, todos os emails serão verificados
* Comparação case-insensitive para maior flexibilidade
- Salvamento de identificadores processados:
* Identificadores salvos no Google Drive (subpasta deduplicacao/)
* Arquivo email_identificadores_processados.ini armazena histórico completo
* Cada identificador associado a data/hora e process_instance_id do chamado
* Preservação de maiúsculas/minúsculas usando ConfigParser.optionxform = str
* Importante para MAC addresses, UUIDs e outros identificadores case-sensitive
- Integração com Gmail Monitor:
* Verificação de duplicação antes de chamar API para abrir chamado
* Se email duplicado detectado, não abre novo chamado e marca email como processado
* Logs detalhados quando duplicação é detectada (identificador e process_instance_id existente)
* Marcação automática de identificador como processado após abertura bem-sucedida
- Algoritmo de extração de identificadores:
* Regex simplificada usando raw f-strings (rf"") para evitar problemas com escape
* Padrão: {palavra_chave}\s*:?\s*([^\s]+) captura valor após palavra-chave
* Suporte a padrões com ou sem dois-pontos (ex: "Endereço MAC:" ou "Endereço MAC")
* Extração inteligente de diferentes tipos: MAC addresses (12 hex), UUIDs, códigos alfanuméricos, números
* Validação para evitar retornar o próprio padrão como identificador
- Funcionalidades de verificação:
* verificar_duplicado() - Verifica se email é duplicado baseado em padrões
* extrair_identificador() - Extrai identificador único do email
* marcar_como_processado() - Salva identificador no Drive após processamento
* Verificação de email na lista antes de processar padrões
* Retorno de process_instance_id existente quando duplicado detectado
Versão 10.0.0
IMPLEMENTAÇÕES:
- Sistema completo de transferência de chamados na interface web:
* Novo botão "Criar e Transferir" na página de criação de chamados
* Remoção do botão "Cancelar" da interface
* Modal interativo para seleção de usuário para transferência
* Campo de busca com autocomplete para encontrar usuários
* Lista dinâmica de usuários filtrada conforme digitação
- Autocomplete de usuários para transferência:
* Integração com endpoint Fluig /ecm/api/rest/ecm/workflowView/getcolleagues
* Busca em tempo real de usuários conforme digitação (debounce de 300ms)
* Navegação por teclado (setas, Enter, Escape) na lista de sugestões
* Exibição de nome completo e email de cada usuário na lista
* Seleção de usuário preenche campo e armazena colleagueId
- Endpoint de listagem de usuários:
* Nova rota GET /api/usuarios/listar para buscar usuários via autocomplete
* Utiliza OAuth 1.0 para autenticação com Fluig
* Parâmetros: process_instance_id, pattern (opcional), limit (padrão: 10)
* Retorna lista de usuários com colleagueId, colleagueName e email
* Implementação em FluigCore.listar_usuarios_colleagues()
Versão 10.2.1
IMPLEMENTAÇÕES:
- Versionamento centralizado da aplicação:
* Criação da variável APP_VERSION no .env e no ConfigEnv (modelo_settings)
* FastAPI agora lê a versão via obter_versao_app(), evitando versões hardcoded
* Templates HTML (login, chamado, configurações) exibem a versão dinâmica da aplicação
- Melhorias na abertura e transferência de chamados:
* Novo endpoint POST /api/v1/fluig/{ambiente}/chamados/abrir-classificado-transferir
que abre um chamado classificado e já transfere para o usuário informado no payload
* Campo usuario_transferir aceita CHAPA ou EMAIL; o sistema resolve automaticamente o colleagueId
* Função FluigCore.obter_colleague_id_por_chapa_ou_email centraliza a lógica de busca no dataset colleague
* Função buscar_colleague_id do webapp passou a reutilizar FluigCore, eliminando duplicação
- Ajustes na interface de chamados:
* Correções no menu flutuante de ações (posição, visibilidade e comportamento ao clicar fora)
* Estilização refinada dos botões do menu e dos botões de template de chamado
* Possibilidade de desabilitar temporariamente ações (Mover, Transferir, Finalizar) no menu flutuante
- Organização das rotas do webapp:
* Criação do arquivo rt_configs.py para concentrar todas as rotas de /configuracoes
* Rotas de configurações removidas de rt_chamado.py, deixando o arquivo focado apenas em /chamado e APIs de chamados
Versão 10.5.0
IMPLEMENTAÇÕES:
- Endpoint dedicado para criação de GMUD:
* Nova rota POST /api/v1/fluig/{ambiente}/gmud/criar com router separado rt_fluig_gmud
* Autenticação via API-KEY + OAuth 1.0, seguindo o padrão das demais rotas Fluig
* Retorno simplificado contendo apenas o processInstanceId da GMUD criada
- Integração completa com detalhes de serviço:
* Uso da função obter_detalhes_servico_fluig para buscar dados do serviço informado em ds_servico
* Preenchimento automático de campos da GMUD (grupo_servico, item_servico, servico, urgencias, equipe_executante, ds_responsavel, ds_keyuser, matric_keyuser)
* Remoção de todos os valores mockados de serviço no payload de criação de GMUD
- Resolução de analista responsável por chapa/email:
* Campo ds_analista_resp aceita chapa ou email e é convertido para colleagueName via dataset colleague
* Nome formatado corretamente (primeira letra maiúscula) enviado no payload da GMUD
- Logs e rastreabilidade:
* Log detalhado do payload de GMUD enviado ao Fluig em formato JSON identado
* Logs específicos para falhas na obtenção de detalhes de serviço e na resolução do analista responsável
Versão 11.3.0
IMPLEMENTAÇÕES:
- Sistema completo de templates para GMUD:
* Estendido UserTemplateManager para suportar templates de GMUD com métodos específicos
* Templates de GMUD salvos em arquivo separado (template_gmud_{email}.ini) no Google Drive
* Campos salvos: ds_assunto, ds_descricao, ds_pl_implantacao, ds_impactos, ds_pl_retorno, ds_pl_mitigacao
* Suporte a múltiplos templates com nomes personalizados por usuário
- Endpoints de templates para GMUD:
* POST /gmud/template/salvar - Salva template de GMUD com nome e todos os campos
* GET /gmud/template/carregar - Carrega template específico de GMUD
* GET /gmud/template/listar - Lista todos os templates de GMUD do usuário
* DELETE /gmud/template/excluir - Exclui template específico de GMUD
- Interface web para templates de GMUD:
* Botões "Salvar Template" e "Carregar Template" adicionados na seção "Dados da GMUD"
* Botões posicionados no canto direito do cabeçalho da seção (mesmo padrão de Chamados)
* Modal para salvar template com campo de nome obrigatório
* Modal para listar e selecionar templates quando houver múltiplos
* Funcionalidade de exclusão de templates com confirmação
- Melhorias na interface de navegação:
* Botões de navegação "Abertura de Chamado" e "Abertura de GMUD" padronizados
* Mesmo estilo visual dos botões de ação (Criar Chamado, Criar e Transferir)
* Mesmo padding, fonte, cor e efeitos hover dos botões principais
* Espaçamento entre botões ajustado para 12px (consistente com botões de ação)
- Ajustes de layout e posicionamento:
* Botão "Visualizar Prévia" movido para dentro da seção "Dados da GMUD"
* Posicionado após o último campo (Ações Mitigatórias), igual à seção de Chamados
* Botão "Visualizar Prévia" ajustado para ocupar apenas espaço necessário (removido width: 100%)
* Botão centralizado usando text-align: center no container
* Margin-bottom do cabeçalho da página reduzido de 30px para 5px
- Consistência visual:
* Interface de GMUD agora segue exatamente o mesmo padrão visual de Chamados
* Templates, botões e layout completamente alinhados entre as duas seções
* Experiência do usuário unificada e intuitiva
Versão 12.0.0
IMPLEMENTAÇÕES:
- Nova aba de busca de chamados no webapp:
* Campo para busca por número de chamado (processInstanceId) e filtros avançados (intervalo inicial/final, nome do solicitante, ambiente)
* Resultados exibidos em tabela paginada (50 por página) com ordenação nas colunas Número, Status e Data de Abertura
* Coluna adicional de descrição do processo (processDescription)
- Modal de detalhes de chamado:
* Clique em qualquer linha da tabela abre um modal com três abas: Resumo, Histórico e Dados Brutos
* Abas "Resumo" e "Dados Brutos" exibem os dados retornados pela API v2 de requests
* Aba "Histórico" consome o endpoint /process-management/api/v2/requests/{processInstanceId}/histories e mostra movimentos, observações e anexos em ordem cronológica
* Botão "Abrir no Fluig" com link direto para a página do chamado no Fluig
- Filtro de processos permitidos na busca:
* Nova configuração geral ALLOWED_PROCESS_IDS para restringir a busca a uma lista de processId permitidos
* Nova configuração ALLOWED_PROCESS_IDS_ENABLED para ativar/desativar o filtro sem perder a lista configurada
* Filtro aplicado tanto na busca por lista (intervalo/nome) quanto na busca por número único
- Página de configurações atualizada:
* Campo de texto e checkbox adicionados na aba "Configurações Gerais" para gerenciar ALLOWED_PROCESS_IDS e ALLOWED_PROCESS_IDS_ENABLED
* Salvamento e carregamento integrados com ConfigManagerGerais e Google Drive
- Melhorias gerais na UX da busca:
* Chamados encontrados por número único também aparecem sempre na lista de resultados (não mais em cards separados)
* Clique em qualquer resultado abre o mesmo modal de detalhes, mantendo experiência unificada