API REST desenvolvida com FastAPI para integração com o sistema Fluig, permitindo abertura automatizada de chamados nos ambientes de produção (PRD) e qualidade (QLD), com suporte a processamento inteligente via Inteligência Artificial e autenticação via OAuth 1.0.
Versão Atual: 12.0.0
- Funcionalidades
- Requisitos
- Instalação
- Configuração
- Uso
- Endpoints
- Estrutura do Projeto
- Autenticação
- Logs
- Versão
- Abertura de Chamados: Criação automática de chamados no Fluig (PRD e QLD), com suporte a chamados classificados e não classificados
- Webapp Integrado: Interface web completa para criação de chamados com autenticação Google OAuth 2.0
- Geração em Lote: Criação de múltiplos chamados via planilha Excel com processamento de placeholders
- Campo Solicitante: Suporte a Chapa, email ou placeholders com busca automática do nome formatado
- Autocomplete de Serviços: Busca e seleção inteligente de serviços com preenchimento automático de campos
- Modal de Processamento: Interface visual para acompanhamento da criação de chamados em tempo real
- Visualização Prévia: Prévia dos chamados incluindo título, descrição e solicitante processado
- Transferência de Chamados: Sistema completo de transferência de chamados na interface web com autocomplete de usuários
- Autocomplete de Usuários: Busca em tempo real de usuários para transferência com navegação por teclado
- Gerenciamento de Serviços: Consulta de lista de serviços e detalhes de serviços específicos
- Consulta de Datasets: Busca de dados em datasets do Fluig (colleague, funcionários, aprovadores) com suporte a busca por CHAPA
- Detalhes de Chamados: Obtenção de detalhes completos de chamados existentes
- Busca de Chamados (Webapp): Aba dedicada para busca de chamados do Fluig por número, ambiente e nome do solicitante.
- Autenticação OAuth 1.0: Autenticação segura via OAuth 1.0 para todas as operações com o Fluig
- Inteligência Artificial: Extração de informações de chamados usando Google Generative AI (Gemini)
- Autenticação via API Key: Proteção de todas as rotas com API Key
- Monitoramento de Emails: Processamento automático de emails do Gmail para abertura de chamados (substitui Apps Script)
- Processos Genéricos: Endpoints para iniciar qualquer processo/formulário do Fluig com payload genérico
- Upload e Anexo de Arquivos: Upload de arquivos no ECM e anexo a processos existentes (base64 ou multipart/form-data)
- Obtenção Automática de Detalhes: Detecção automática de versão, movimento e atividade de processos
- Criação de GMUD: Endpoint dedicado para criação de Gerências de Mudança (GMUD) com preenchimento automático de campos do serviço
- Templates de GMUD: Sistema completo de templates para GMUDs com salvamento e carregamento de configurações
- Interface Unificada: Navegação entre Chamados e GMUDs com título dinâmico e botões padronizados
- Logs Completos: Sistema abrangente de logging com rastreamento detalhado em todas as operações
- Validação Robusta: Tratamento de erros e validações em todas as etapas do processo
- Python 3.8+
- FastAPI 0.104.1+
- Uvicorn 0.24.0+
- Requests 2.31.0+
- Pydantic 2.5.0+
- Pydantic-settings 2.1.0+
- Python-dotenv 1.0.0+
- Clone o repositório:
git clone <url-do-repositorio>
cd 23-fluig-api-python- Crie um ambiente virtual:
python -m venv venv- Ative o ambiente virtual:
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate- Instale as dependências:
pip install -r requirements.txt- Crie um arquivo
.envna raiz do projeto com as seguintes variáveis:
# API Key para autenticação
API_KEY=sua_api_key_aqui
API_NAME=nome_da_api
# Credenciais OAuth1 Fluig PRD (opcional, para compatibilidade)
CK=consumer_key_prd
CS=consumer_secret_prd
TK=token_prd
TS=token_secret_prd
# Credenciais OAuth1 Fluig QLD (opcional, para compatibilidade)
CK_QLD=consumer_key_qld
CS_QLD=consumer_secret_qld
TK_QLD=token_qld
TS_QLD=token_secret_qld
# URLs Fluig
URL_FLUIG_PRD=https://seu-fluig-prd.com.br
URL_FLUIG_QLD=https://seu-fluig-qld.com.br
# ID do Colaborador QLD (opcional)
USER_COLLEAGUE_ID_QLD=id_do_colaborador_qld
# ID do Colaborador Admin (para consultas PRD)
ADMIN_COLLEAGUE_ID=id_do_colaborador_admin
# Configurações IA (Google Generative AI)
IA_KEYS=sua_chave_1,sua_chave_2
IA_MODELS=gemini-pro,gemini-pro-vision
# Listas de controle (opcional)
WHITE_LIST_DOMAINS=dominio1.com,dominio2.com
BLACK_LIST_EMAILS=email1@exemplo.com,email2@exemplo.com
# Configurações do Webapp (Google OAuth 2.0)
GOOGLE_CLIENT_ID=seu_client_id_google
GOOGLE_CLIENT_PROJECT_ID=seu_project_id_google
GOOGLE_AUTH_URI=https://accounts.google.com/o/oauth2/auth
GOOGLE_TOKEN_URI=https://oauth2.googleapis.com/token
GOOGLE_AUTH_PROVIDER_X509_CERT_URL=https://www.googleapis.com/oauth2/v1/certs
GOOGLE_REDIRECT_URIS=http://localhost:3000/login/callback
GOOGLE_CLIENT_SECRET=seu_client_secret_google- As pastas
src/json/elogs/serão criadas automaticamente quando necessário.
python main.pyA API estará disponível em http://127.0.0.1:3000
Acesse a documentação automática do FastAPI:
- Swagger UI:
http://127.0.0.1:3000/docs
Acesse a interface web para criação de chamados:
- Login:
http://127.0.0.1:3000/login - Criar Chamado:
http://127.0.0.1:3000/chamado
Funcionalidades do Webapp:
- Autenticação via Google OAuth 2.0
- Criação de chamados únicos ou em lote via planilha Excel
- Criação de GMUDs (Gerências de Mudança) com interface integrada
- Autocomplete de serviços com preenchimento automático de campos
- Campo "Solicitante" com suporte a chapa, email ou placeholders da planilha
- Busca automática do nome formatado do solicitante (primeira letra maiúscula)
- Campo UsuarioAtendido preenchido automaticamente quando solicitante é informado
- Modal de processamento com acompanhamento em tempo real
- Visualização prévia dos chamados incluindo título, descrição e solicitante
- Suporte a placeholders em planilhas (
<A>,<B>, etc.) - Cria chamado e transfere automaticamente para usuário selecionado
- Interface para seleção de usuário com autocomplete em tempo real
- Busca dinâmica de usuários conforme digitação (debounce de 300ms)
- Navegação na lista de usuários usando setas, Enter e Escape
- Sistema de templates para Chamados e GMUDs com salvamento e carregamento
- Navegação por abas entre Chamados e GMUDs com título dinâmico
- Interface unificada e consistente entre todas as seções
POST /api/v1/fluig/{ambiente}/chamados/abrir
Abre um chamado sem classificação no Fluig. O ambiente é especificado no path (prd ou qld).
Headers:
API-KEY: sua_api_key
Content-Type: application/json
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"titulo": "Título do chamado",
"descricao": "Descrição detalhada do chamado",
"usuario": "email@usuario.com.br",
"telefone": "5565999999999",
"anexos": [
{
"nome": "documento.pdf",
"conteudo_base64": "JVBERi0xLjQKJeLjz9MKMy..."
}
]
}Nota:
- O campo
telefoneé opcional. Se não fornecido ou vazio, será usado o valor padrão"65". - O campo
anexosé opcional e aceita uma lista de anexos em base64. Cada anexo deve conternome(string) econteudo_base64(string com o conteúdo do arquivo codificado em base64).
Resposta de Sucesso:
12345(processInstanceId do chamado criado - retornado como número)
Exemplo:
POST /api/v1/fluig/prd/chamados/abrir
POST /api/v1/fluig/qld/chamados/abrirPOST /api/v1/fluig/{ambiente}/chamados/abrir-classificado
Abre um chamado classificado (com serviço) no Fluig. O ambiente é especificado no path (prd ou qld).
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"titulo": "Título do chamado",
"descricao": "Descrição detalhada do chamado",
"usuario": "email@usuario.com.br",
"servico": "63531",
"telefone": "5565999999999"
}Nota: O campo telefone é opcional. Se não fornecido ou vazio, será usado o valor padrão "65".
Resposta de Sucesso:
12345(processInstanceId do chamado criado - retornado como número)
Exemplo:
POST /api/v1/fluig/prd/chamados/abrir-classificado
POST /api/v1/fluig/qld/chamados/abrir-classificadoPOST /api/v1/fluig/{ambiente}/chamados/abrir-classificado-transferir
Abre um chamado classificado (com serviço) no Fluig e transfere automaticamente para o usuário especificado. O ambiente é especificado no path (prd ou qld).
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"titulo": "Título do chamado",
"descricao": "Descrição detalhada do chamado",
"usuario": "email@usuario.com.br",
"servico": "63531",
"telefone": "5565999999999",
"usuario_transferir": "chapa_ou_email@uisa.com.br",
"anexos": [
{
"nome": "documento.pdf",
"conteudo_base64": "JVBERi0xLjQKJeLjz9MKMy..."
}
]
}Campos:
titulo: Título do chamado (obrigatório)descricao: Descrição detalhada do chamado (obrigatório)usuario: Email do usuário solicitante (obrigatório)servico: ID do serviço (obrigatório)telefone: Telefone de contato (opcional, padrão: "65")usuario_transferir: Chapa ou email do usuário para transferir o chamado (obrigatório)anexos: Lista de anexos em base64 (opcional)
Funcionalidades:
- Criação de chamado classificado com serviço, categoria e subcategoria
- Transferência automática para o usuário especificado (
usuario_transferir) - Resolução automática do
colleagueIda partir da chapa ou email informado - Suporte para anexar múltiplos arquivos em formato base64
- Processamento automático de anexos após criação do chamado
Nota:
- O campo
telefoneé opcional. Se não fornecido ou vazio, será usado o valor padrão"65". - O campo
usuario_transferiraceita CHAPA (número) ou EMAIL. O sistema busca automaticamente ocolleagueIdcorrespondente. - O campo
anexosé opcional e aceita uma lista de anexos em base64. Cada anexo deve conternome(string) econteudo_base64(string com o conteúdo do arquivo codificado em base64).
Resposta de Sucesso:
12345(processInstanceId do chamado criado - retornado como número)
Exemplo:
POST /api/v1/fluig/prd/chamados/abrir-classificado-transferir
POST /api/v1/fluig/qld/chamados/abrir-classificado-transferirPOST /api/v1/fluig/{ambiente}/chamados/detalhes
Obtém os detalhes completos de um chamado existente. O ambiente é especificado no path (prd ou qld).
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"process_instance_id": 12345
}Resposta de Sucesso:
{
"processInstanceId": 12345,
"status": "Em Andamento",
"formFields": { ... },
...
}Exemplo:
POST /api/v1/fluig/prd/chamados/detalhes
POST /api/v1/fluig/qld/chamados/detalhesGET /api/v1/fluig/{ambiente}/servicos
Obtém a lista completa de serviços disponíveis no Fluig. O ambiente é especificado no path (prd ou qld).
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Query Parameters:
limit(opcional): Limite de resultados. Padrão:300offset(opcional): Offset para paginação. Padrão:0orderby(opcional): Ordenação. Padrão:servico_ASC
Resposta de Sucesso:
{
"content": [
{
"id": "63531",
"servico": "Nome do Serviço",
...
},
...
]
}Nota: Os serviços são automaticamente salvos em src/json/servicos_{ambiente}.json
Exemplo:
GET /api/v1/fluig/prd/servicos?limit=100
GET /api/v1/fluig/qld/servicos?limit=100POST /api/v1/fluig/{ambiente}/servicos/detalhes
Obtém os detalhes completos de um serviço específico. O ambiente é especificado no path (prd ou qld).
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"id_servico": "63531"
}Resposta de Sucesso:
{
"id": "63531",
"servico": "Nome do Serviço",
"descricao": "Descrição do serviço",
...
}Nota: Os detalhes são automaticamente salvos em src/json/servico_detalhes_{id_servico}_{ambiente}.json
Exemplo:
POST /api/v1/fluig/prd/servicos/detalhes
POST /api/v1/fluig/qld/servicos/detalhesPOST /api/v1/fluig/{ambiente}/datasets/buscar
Busca dados em um dataset do Fluig usando email ou chapa/nome. O ambiente é especificado no path (prd ou qld).
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"dataset_id": "colleague",
"user": "email@usuario.com.br"
}Datasets Disponíveis:
colleague: Busca por colaborador (email, nome ou chapa)- Email: usa campo
mail - chapa (número): usa campo
currentProject - Nome (texto): usa campo
colleagueName
- Email: usa campo
ds_funcionarios: Busca por funcionário (email ou chapa)ds_aprovadores: Busca por aprovador (email ou nome)
Resposta de Sucesso:
{
"content": [
{
"colleagueId": "id_do_colaborador",
"colleagueName": "Nome do Colaborador",
"mail": "email@usuario.com.br",
...
}
]
}Exemplo:
POST /api/v1/fluig/prd/datasets/buscar
POST /api/v1/fluig/qld/datasets/buscarPOST /api/v1/fluig/{ambiente}/processos/iniciar
Inicia qualquer processo ou formulário do Fluig usando um payload genérico e flexível.
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"process_id": "Abertura de Chamados",
"payload": {
"processId": "Abertura de Chamados",
"version": 1,
"managerMode": false,
"taskUserId": "12345",
"isDigitalSigned": false,
"selectedState": 5,
"campos": {
"titulo": "Exemplo",
"descricao": "Descrição do exemplo"
}
}
}Resposta de Sucesso:
{
"sucesso": true,
"process_id": "Abertura de Chamados",
"process_instance_id": 12345,
"dados": { ... },
"mensagem": "Processo iniciado com sucesso"
}Exemplo:
POST /api/v1/fluig/prd/processos/iniciar
POST /api/v1/fluig/qld/processos/iniciarPOST /api/v1/fluig/{ambiente}/processos/upload
Faz upload de arquivo(s) no ECM do Fluig sem criar processo.
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"arquivos": [
{
"nome": "documento.pdf",
"conteudo_base64": "JVBERi0xLjQKJeLjz9MKMy..."
}
],
"colleague_id": "12345"
}Resposta de Sucesso:
{
"sucesso": true,
"total_arquivos": 1,
"arquivos_enviados": 1,
"arquivos_com_erro": 0,
"detalhes": {
"enviados": [
{
"nome": "documento.pdf",
"tamanho_bytes": 1024,
"dados": { ... }
}
],
"erros": []
}
}Exemplo:
POST /api/v1/fluig/prd/processos/upload
POST /api/v1/fluig/qld/processos/uploadPOST /api/v1/fluig/{ambiente}/processos/anexar
Anexa arquivo(s) codificados em base64 a um processo/chamado existente.
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"process_id": "Abertura de Chamados",
"process_instance_id": 657984,
"arquivos": [
{
"nome": "documento.pdf",
"conteudo_base64": "JVBERi0xLjQKJeLjz9MKMy..."
}
]
}Resposta de Sucesso:
{
"sucesso": true,
"process_id": "Abertura de Chamados",
"process_instance_id": 657984,
"total_arquivos": 1,
"arquivos_anexados": 1,
"arquivos_com_erro": 0,
"detalhes": {
"anexados": [
{
"documentId": 12345,
"fileName": "documento.pdf",
"fullPath": "BPM"
}
],
"erros": []
}
}Nota: Os valores de version, current_movto e attached_activity são obtidos automaticamente da atividade do chamado.
Exemplo:
POST /api/v1/fluig/prd/processos/anexar
POST /api/v1/fluig/qld/processos/anexarPOST /api/v1/fluig/{ambiente}/processos/anexar-upload
Anexa arquivo(s) brutos (multipart/form-data) a um processo/chamado existente. Ideal para uso no Swagger UI.
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body (multipart/form-data):
process_id: ID ou nome do processo (ex: "Abertura de Chamados")process_instance_id: Número do chamadoarquivos: Arquivo(s) para anexar
Resposta de Sucesso:
{
"sucesso": true,
"process_id": "Abertura de Chamados",
"process_instance_id": 657984,
"total_arquivos": 1,
"arquivos_anexados": 1,
"arquivos_com_erro": 0,
"detalhes": {
"anexados": [
{
"documentId": 12345,
"fileName": "documento.pdf",
"fullPath": "BPM"
}
],
"erros": []
}
}Nota: Os valores de version, current_movto e attached_activity são obtidos automaticamente da atividade do chamado.
Exemplo:
POST /api/v1/fluig/prd/processos/anexar-upload
POST /api/v1/fluig/qld/processos/anexar-uploadPOST /api/v1/fluig/{ambiente}/gmud/criar
Cria uma nova GMUD (Gerência de Mudança) no Fluig usando autenticação OAuth 1.0. O endpoint monta automaticamente o payload no formato esperado pelo processo "GMUD - Solicitação de Mudança", utilizando os detalhes do serviço informado e resolvendo o nome do analista responsável.
Path Parameters:
ambiente(obrigatório): Ambiente do Fluig (prdouqld)
Body:
{
"ds_assunto": "Assunto da GMUD",
"ds_descricao": "Descrição detalhada da mudança",
"ds_pl_implantacao": "Plano de Implantação",
"ds_impactos": "Riscos e Impactos",
"ds_pl_retorno": "Plano de Retorno",
"ds_pl_mitigacao": "Ação Mitigatória",
"ds_analista_resp": "chapa_ou_email@uisa.com.br",
"ds_tipo": "Solicitacao",
"ds_servico": "142267"
}Campos Obrigatórios:
ds_assunto: Assunto da GMUDds_descricao: Descrição detalhada da mudançads_pl_implantacao: Plano de Implantaçãods_impactos: Riscos e Impactosds_pl_retorno: Plano de Retornods_pl_mitigacao: Ação Mitigatóriads_analista_resp: Chapa ou email do analista responsável (será convertido para nome formatado)ds_tipo: Tipo da GMUD (Demanda,Projeto,Emergencial,Solicitacao,Incidente)ds_servico: DocumentId do serviço (será usado para buscar detalhes e preencher campos automaticamente)
Funcionalidades:
- Busca automática dos detalhes do serviço informado (
ds_servico) viaobter_detalhes_servico_fluig - Preenchimento automático de campos relacionados ao serviço (grupo_servico, item_servico, urgencias, equipe_executante, responsável, keyuser)
- Resolução automática do nome do analista responsável (
ds_analista_resp) via dataset colleague (aceita chapa ou email) - Log detalhado do payload completo enviado ao Fluig
Resposta de Sucesso:
705773(processInstanceId da GMUD criada - retornado como número)
Exemplo:
curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/gmud/criar" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"ds_assunto": "Atualização de sistema",
"ds_descricao": "Atualização do sistema X para versão 2.0",
"ds_pl_implantacao": "Plano detalhado de implantação",
"ds_impactos": "Impacto baixo, sem interrupção de serviços",
"ds_pl_retorno": "Plano de retorno em caso de problemas",
"ds_pl_mitigacao": "Ações mitigatórias para reduzir riscos",
"ds_analista_resp": "8004717",
"ds_tipo": "Solicitacao",
"ds_servico": "142267"
}'POST /gmud/template/salvar
Salva um template de GMUD para o usuário logado.
Body:
{
"nome_template": "Nome do Template",
"ds_assunto": "Assunto da GMUD",
"ds_descricao": "Descrição detalhada da mudança",
"ds_pl_implantacao": "Plano de Implantação",
"ds_impactos": "Riscos e Impactos",
"ds_pl_retorno": "Plano de Retorno",
"ds_pl_mitigacao": "Ações Mitigatórias"
}GET /gmud/template/carregar?nome_template={nome}
Carrega um template específico de GMUD do usuário logado.
GET /gmud/template/listar
Lista todos os templates de GMUD do usuário logado.
DELETE /gmud/template/excluir?nome_template={nome}
Exclui um template específico de GMUD do usuário logado.
Funcionalidades:
- Templates salvos no Google Drive (subpasta
user_configs/) - Arquivo separado por usuário:
template_gmud_{email_normalizado}.ini - Suporte a múltiplos templates com nomes personalizados
- Interface web integrada na seção "Dados da GMUD"
- Carregamento automático se houver apenas 1 template
- Lista de seleção se houver múltiplos templates
GET /login
Página de login do webapp com autenticação Google OAuth 2.0.
GET /login/callback
Callback do OAuth 2.0 após autenticação.
GET /logout
Encerra a sessão do usuário.
GET /chamado
Página principal do formulário de criação de chamados.
POST /chamado
Cria um chamado único ou processa planilha para criação em lote.
Body (Form Data):
ds_titulo: Título do chamadods_chamado: Descrição do chamadoservico_id: ID do serviço (opcional, para chamado classificado)planilha: Arquivo Excel (.xlsx) para criação em lote (opcional)qtd_chamados: Quantidade de chamados a criar (quando usar planilha)ignorar_primeira_linha: Ignorar primeira linha da planilha (cabeçalho)acao: Ação a realizar (criaroucriar_transferir) - padrão:criarusuario_transferir_colleague_id: ColleagueId do usuário para transferir (quandoacao=criar_transferir)
Endpoints Auxiliares:
- POST
/chamado/carregar-planilha: Carrega e processa planilha Excel - POST
/chamado/preview: Gera prévia dos chamados com placeholders substituídos - GET
/listar_servicos: Retorna lista de serviços para autocomplete - POST
/buscar_detalhes_servico: Busca detalhes de um serviço por documentid - GET
/api/usuarios/listar: Lista usuários para transferência de chamados (autocomplete) - POST
/gmud/template/salvar: Salva template de GMUD - GET
/gmud/template/carregar: Carrega template específico de GMUD - GET
/gmud/template/listar: Lista todos os templates de GMUD - DELETE
/gmud/template/excluir: Exclui template específico de GMUD
Características:
- Autenticação via sessão (Google OAuth 2.0)
- Busca automática de dados do funcionário via dataset interno
- Suporte a chamados classificados e não classificados
- Processamento de placeholders em planilhas (
<A>,<B>, etc.) - Campo "Solicitante" com suporte a chapa, email ou placeholders
- Busca automática do nome formatado do solicitante via dataset colleague
- Campo UsuarioAtendido preenchido automaticamente com nome formatado corretamente
- Modal de processamento com feedback em tempo real
- Visualização prévia dos chamados incluindo solicitante processado
- Cache local de detalhes de serviços
- Sistema de Transferência: Criação e transferência simultânea de chamados para usuário específico
- Autocomplete de Usuários: Busca em tempo real de usuários do Fluig para transferência
- Sistema de Templates: Salvamento e carregamento de templates para Chamados e GMUDs
- Interface Unificada: Navegação por abas entre Chamados e GMUDs com título dinâmico
- Templates de GMUD: Salvamento de todos os campos da GMUD (assunto, descrição, planos, impactos, etc.)
api-fluig-python/
├── src/
│ ├── auth/
│ │ ├── auth_api.py # Autenticação via API Key
│ │ ├── auth_fluig.py # Autenticação OAuth1 (legado)
│ │ └── auth_google_drive.py # Autenticação Google Drive
│ ├── fluig/
│ │ ├── fluig_core.py # Classe principal para interação com Fluig
│ │ └── fluig_requests.py # Classe para requisições HTTP ao Fluig
│ ├── web/
│ │ ├── web_auth_manager.py # Gerenciador centralizado de autenticação
│ │ ├── web_servicos_fluig.py # Funções para consulta de serviços
│ │ └── web_chamado_fluig.py # Funções para consulta de chamados
│ ├── modelo_dados/
│ │ ├── modelo_settings.py # Configurações e variáveis de ambiente
│ │ ├── modelos_fluig.py # Modelos Pydantic para validação Fluig
│ │ ├── modelo_sites.py # Modelos Pydantic específicos do webapp
│ │ └── modelo_database.py # Modelos de banco de dados
│ ├── configs/
│ │ ├── user_template_manager.py # Gerenciador de templates de chamados e GMUDs
│ │ └── drive_config_manager.py # Gerenciador de sincronização com Google Drive
│ ├── rotas/
│ │ ├── rt_fluig_chamados.py # Rotas unificadas de chamados (PRD/QLD)
│ │ ├── rt_fluig_servicos.py # Rotas unificadas de serviços (PRD/QLD)
│ │ ├── rt_fluig_datasets.py # Rotas unificadas de datasets (PRD/QLD)
│ │ ├── rt_fluig_processos.py # Rotas genéricas de processos (iniciar, upload, anexar)
│ │ ├── rt_fluig_gmud.py # Rotas específicas para criação de GMUD (PRD/QLD)
│ │ └── webapp/
│ │ ├── rt_login.py # Rotas de autenticação do webapp
│ │ ├── rt_chamado.py # Rotas de criação de chamados do webapp
│ │ └── rt_gmud.py # Rotas de criação de GMUDs e templates do webapp
│ ├── site/
│ │ ├── classes/ # Classes do webapp (legado - removido)
│ │ ├── static/
│ │ │ ├── css/
│ │ │ │ └── style.css # Estilos do webapp
│ │ │ └── js/
│ │ │ ├── chamado.js # JavaScript do formulário de chamados
│ │ │ ├── gmud.js # JavaScript do formulário de GMUDs e templates
│ │ │ └── configuracoes.js # JavaScript da página de configurações
│ │ ├── templates/
│ │ │ ├── chamado.html # Template HTML do formulário de chamados
│ │ │ ├── configuracoes.html # Template HTML da página de configurações
│ │ │ └── login.html # Template HTML da página de login
│ │ ├── planilha.py # Processamento de planilhas Excel
│ │ └── abrir_chamados.py # Lógica de criação de chamados em lote
│ ├── utilitarios_centrais/
│ │ ├── logger.py # Configuração de logging
│ │ ├── payloads.py # Construção de payloads para chamados
│ │ ├── json_utils.py # Funções utilitárias para salvamento de JSON
│ │ ├── fake_user.py # Dados de usuário fake para testes
│ │ ├── email_utils.py # Utilitários para processamento de email
│ │ └── google_drive_utils.py # Utilitários para Google Drive
│ ├── ia/
│ │ └── ia.py # Integração com Google Generative AI
│ │ └── prompts/
│ │ └── prompts.py # Prompts para IA
│ ├── base_ia/ # Módulo de IA alternativo (legado)
│ ├── json/ # Diretório para arquivos JSON (serviços)
│ │ └── services/ # Detalhes de serviços salvos localmente
│ └── chromedriver-linux64/ # ChromeDriver para Linux
├── logs/ # Diretório de logs (criado automaticamente)
├── main.py # Aplicação principal FastAPI
├── requirements.txt # Dependências do projeto
├── Dockerfile # Configuração Docker
└── README.md # Este arquivo
Todas as rotas da API REST (exceto / e rotas do webapp) requerem autenticação via header API-KEY:
API-KEY: sua_api_key_configurada_no_env
O webapp utiliza autenticação via Google OAuth 2.0:
- Login: Usuários fazem login através do Google OAuth 2.0
- Sessão: Após autenticação, uma sessão é criada e mantida
- Proteção de Rotas: Rotas do webapp (
/login,/chamado) são protegidas por sessão - Logout: Usuários podem fazer logout através da rota
/logout
O sistema utiliza autenticação via OAuth 1.0 para todas as operações com o Fluig:
- Autenticação OAuth 1.0: Todas as requisições utilizam OAuth 1.0 com Consumer Key/Secret e Token/Token Secret
- Credenciais por Ambiente:
- Ambiente PRD: usa
CK,CS,TK,TS - Ambiente QLD: usa
CK_QLD,CS_QLD,TK_QLD,TS_QLD
- Ambiente PRD: usa
- Colleague ID por Ambiente:
- Ambiente PRD: usa
ADMIN_COLLEAGUE_ID - Ambiente QLD: usa
USER_COLLEAGUE_ID_QLD
- Ambiente PRD: usa
200: Sucesso400: Erro de validação401: Não autorizado (API Key inválida)403: Acesso negado500: Erro interno do servidor
curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/chamados/abrir" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"titulo": "Problema no sistema",
"descricao": "O sistema está apresentando lentidão",
"usuario": "usuario@email.com.br",
"telefone": "5565999999999"
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/qld/chamados/abrir" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"titulo": "Problema no sistema",
"descricao": "O sistema está apresentando lentidão",
"usuario": "usuario@email.com.br"
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/chamados/abrir-classificado" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"titulo": "Solicitação de acesso",
"descricao": "Preciso de acesso ao sistema X",
"usuario": "usuario@email.com.br",
"servico": "DocumentId",
"telefone": "5565999999999"
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/chamados/abrir-classificado-transferir" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"titulo": "Solicitação de acesso",
"descricao": "Preciso de acesso ao sistema X",
"usuario": "usuario@email.com.br",
"servico": "DocumentId",
"telefone": "5565999999999",
"usuario_transferir": "chapa_ou_email@uisa.com.br"
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/chamados/detalhes" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"process_instance_id": 12345
}'curl -X GET "http://127.0.0.1:3000/api/v1/fluig/prd/servicos?limit=100" \
-H "API-KEY: sua_api_key"curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/servicos/detalhes" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"id_servico": "63531"
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/datasets/buscar" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"dataset_id": "colleague",
"user": "usuario@email.com.br"
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/processos/iniciar" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"process_id": "Abertura de Chamados",
"payload": {
"processId": "Abertura de Chamados",
"version": 1,
"managerMode": false,
"taskUserId": "12345",
"isDigitalSigned": false,
"selectedState": 5,
"campos": {
"titulo": "Exemplo",
"descricao": "Descrição do exemplo"
}
}
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/processos/upload" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"arquivos": [
{
"nome": "documento.pdf",
"conteudo_base64": "JVBERi0xLjQKJeLjz9MKMy..."
}
]
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/processos/anexar" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"process_id": "Abertura de Chamados",
"process_instance_id": 657984,
"arquivos": [
{
"nome": "documento.pdf",
"conteudo_base64": "JVBERi0xLjQKJeLjz9MKMy..."
}
]
}'curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/processos/anexar-upload" \
-H "API-KEY: sua_api_key" \
-F "process_id=Abertura de Chamados" \
-F "process_instance_id=657984" \
-F "arquivos=@documento.pdf"curl -X POST "http://127.0.0.1:3000/api/v1/fluig/prd/gmud/criar" \
-H "API-KEY: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"ds_assunto": "Atualização de sistema",
"ds_descricao": "Atualização do sistema X para versão 2.0",
"ds_pl_implantacao": "Plano detalhado de implantação",
"ds_impactos": "Impacto baixo, sem interrupção de serviços",
"ds_pl_retorno": "Plano de retorno em caso de problemas",
"ds_pl_mitigacao": "Ações mitigatórias para reduzir riscos",
"ds_analista_resp": "8004717",
"ds_tipo": "Solicitacao",
"ds_servico": "142267"
}'O projeto inclui um módulo completo de monitoramento de emails que substitui o Apps Script do Google. Este módulo:
- Monitora automaticamente emails não lidos no Gmail
- Valida remetentes (domínio UISA ou emails permitidos)
- Processa anexos e salva no Google Drive
- Busca telefone do remetente no diretório do Google Workspace
- Abre chamados automaticamente via API
- Envia emails de confirmação aos usuários
Para configurar o monitoramento de emails, consulte a documentação completa em: src/gmail_monitor/README.md
- ✅ Monitoramento automático em background
- ✅ Processamento de anexos
- ✅ Validação de segurança de emails
- ✅ Suporte a emails UISA
- ✅ Integração com Google Drive e People API
- ✅ Logs detalhados de todas as operações
O monitoramento é iniciado automaticamente com a aplicação. Para desativar, comente as linhas no main.py:
# iniciar_monitoramento_gmail()
# parar_monitoramento_gmail()O projeto inclui um sistema completo de monitoramento de histórico de chamados abertos via email. Este sistema:
- Salva automaticamente o histórico inicial quando um chamado é aberto via email
- Monitora atualizações nos históricos periodicamente (a cada 1 hora, configurável)
- Detecta novos eventos (MOVEMENT, OBSERVATION, ATTACHMENT) nos chamados
- Armazena históricos em arquivos
.iniusando ConfigParser
Para configurar o monitoramento de histórico, consulte a documentação completa em: src/historico_monitor/README.md
- ✅ Salvamento automático de histórico ao abrir chamado via email
- ✅ Monitoramento periódico de atualizações
- ✅ Detecção automática de novos eventos
- ✅ Armazenamento simples em arquivos
.ini - ✅ Inicialização automática com a aplicação
# Habilitar/desabilitar monitoramento (padrão: true)
HISTORICO_MONITOR_ENABLED=true
# Intervalo de verificação em horas (padrão: 1.0)
HISTORICO_CHECK_INTERVAL_HOURS=1.0
# Ambiente do Fluig para monitoramento (padrão: PRD)
HISTORICO_MONITOR_AMBIENTE=PRDO monitoramento é iniciado automaticamente com a aplicação. Para desativar, configure no .env:
HISTORICO_MONITOR_ENABLED=false- INFO: Operações principais, requisições recebidas, sucessos
- DEBUG: Detalhes de processamento, validações internas, payloads
- WARNING: Situações que requerem atenção (dados não encontrados, validações)
- ERROR: Erros que impedem a operação (com stack trace completo)
- Rotas: Todas as rotas principais registram entrada, processamento e resultado
- Autenticação: Tentativas de autenticação e falhas são registradas
- Requisições Fluig: Todas as chamadas à API Fluig são logadas com detalhes
- Datasets: Buscas em datasets são registradas com parâmetros e resultados
- IA: Processamento de IA com contador de tentativas e erros
- Payloads: Construção de payloads é logada para debugging
- OAuth: Requisições OAuth 1.0 são logadas com detalhes
Os logs são salvos automaticamente na pasta logs/ na raiz do projeto.
Para ver o histórico completo de versões, consulte o arquivo - version.
Deus lhe ajude.