Seguidores

sábado, 26 de abril de 2025

Do Caos ao Prompt T4E09: Desenvolvimento do App AG2P – Evento "Liberou RDM"

INTRODUÇÃO

Post anterior: Do Caos ao Prompt T4E08: Desenvolvimento do App AG2P – Evento "Executou tarefa em hora extra"

Este Post é o episódio 9 da temporada 4 da série "Do Caos ao Prompt", que apresenta o desenvolvimento do Agente de Gestão de Processo Pessoal (AG2P), tendo como foco o evento "Liberou RDM".




Evento “Liberou RDM”

Link da conversa com o Gemini, na qual foi apresentado um Prompt contendo os itens Objetivo, Contexto, Ferramentas e Especificações, para geração do código para implementar o evento
"Liberou RDM": https://g.co/gemini/share/b44f1ab95eac


Comando ao Gemini para solicitar a implementação do evento

Objetivo, Contexto e Ferramentas

Clique aqui para  ver os itens Objetivo, Contexto e Ferramentas do Comando.

Especificações

Segue abaixo o post da temporada 3 desta série, que contém as especificações do evento "Liberou RDM", que faz parte deste comando:

Do Caos ao Prompt T3E10: Estrutura do Agente AG2P - Diálogo 8 Evento "Liberou RDM" dispara Ação "Disponibilizar RDM do dia"

As especificações do evento foram feitas com Finite State Machine (FSM), de tal forma que cada evento pode ser automatizado e testado de forma independente.

Resposta do Gemini


/**
 * @OnlyCurrentDoc
 */

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Fluxo de Trabalho')
      .addItem('Liberar RDM', 'liberarRDM')
      .addToUi();
}

function liberarRDM() {
  // Nome da planilha principal (GPS) e da aba de controle
  const nomePlanilhaGPS = "GPS";
  const nomeAbaControle = "GPS"; // Assumindo que o estado está na mesma aba

  // Colunas onde os dados de RDM são registrados
  const colunaPontosProblematicos = "I";
  const colunaCausasProvaveis = "J";
  const colunaEstadoRDM = "K"; // Assumindo uma coluna para o estado da RDM

  // Estados da RDM
  const estadoRDMAntesDoFim = "RDM Antes do fim";

  // Regras
  const regraR11 = "A aba RDM deve ser revisada.";
  const regraR12 = "A planilha GPS deve ser disponibilizada numa pasta padrão, a fim de ficar disponível para consultas.";
  const regraR38 = "O evento 'Liberou RDM' deve manter o estado da RDM como 'RDM Antes do fim'.";

  // --- Início da automação do evento "Liberou RDM" ---

  // 1. Verificar o estado atual do app (lendo o estado da aba RDM)
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const abaControle = ss.getSheetByName(nomeAbaControle);

  if (!abaControle) {
    SpreadsheetApp.getUi().alert('Erro: Aba "' + nomeAbaControle + '" não encontrada.');
    return;
  }

  // Assumindo que o estado da RDM está em alguma célula específica na aba de controle.
  // Você precisará ajustar isso para a sua planilha real.
  const linhaEstadoRDM = 2; // Exemplo: linha 2
  const colunaEstadoRDM_Index = colunaEstadoRDM.charCodeAt(0) - 'A'.charCodeAt(0) + 1;
  const estadoAtualRDM = abaControle.getRange(linhaEstadoRDM, colunaEstadoRDM_Index).getValue();

  // Verificar se o app está no estado "RDM Antes do fim"
  if (estadoAtualRDM !== estadoRDMAntesDoFim) {
    SpreadsheetApp.getUi().alert('O app não está no estado "' + estadoRDMAntesDoFim + '". O evento "Liberou RDM" não pode ser executado.');
    return;
  }

  // 2. Executar a ação "Disponibilizar RDM do dia"

  // Preparação e Informações Necessárias:
  // - O estado da aba RDM deve estar igual a "RDM Antes do fim". (Já verificado acima)

  // Passos:

  // Usuário: O usuário deve analisar os PONTOS PROBLEMÁTICOS, se houver, registrar as AÇÕES CORRETIVAS e as CAUSAS PROVÁVEIS. (R11)
  SpreadsheetApp.getUi().alert('Por favor, analise os Pontos Problemáticos na aba RDM e registre as Ações Corretivas e as Causas Prováveis.');

  // Agente AG2P: O agente AG2P deve copiar a planilha GPS para a pasta padrão. (R12)
  const pastaPadraoId = DriveApp.getRootFolder().getId(); // Você pode definir um ID de pasta específico aqui
  const pastaPadrao = DriveApp.getFolderById(pastaPadraoId);
  const nomeCopiaGPS = `${nomePlanilhaGPS}_Copia_${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd_HHmmss")}`;

  try {
    const novaPlanilha = ss.copy(nomeCopiaGPS);
    pastaPadrao.addFile(DriveApp.getFileById(novaPlanilha.getId()));
    DriveApp.getRootFolder().removeFile(DriveApp.getFileById(novaPlanilha.getId())); // Opcional: remover da raiz
    Logger.log(`Planilha GPS copiada para a pasta padrão: ${pastaPadrao.getUrl()}`);
    SpreadsheetApp.getUi().alert(`Planilha "${nomePlanilhaGPS}" copiada para a pasta padrão.`);
  } catch (erro) {
    SpreadsheetApp.getUi().alert('Erro ao copiar a planilha GPS: ' + erro);
    return;
  }

  // Agente AG2P: O agente AG2P deve atualizar o Estado da aba RDM. (R38)
  // O estado deve permanecer "RDM Antes do fim".
  abaControle.getRange(linhaEstadoRDM, colunaEstadoRDM_Index).setValue(estadoRDMAntesDoFim);
  Logger.log(`Estado da RDM mantido como: ${estadoRDMAntesDoFim}`);

  // Resultados Esperados:
  // - Estado da aba RDM igual a "RDM Antes do fim". (Atualizado acima)

  SpreadsheetApp.getUi().alert('Evento "Liberou RDM" concluído. A planilha GPS foi copiada e o estado da RDM foi mantido como "' + estadoRDMAntesDoFim + '".');

  // Após a execução, o app deverá ficar esperando outro evento. (Implícito, o script termina aqui até ser chamado novamente)
}

Explicação do Código:

  1. onOpen():

    • Esta função é executada automaticamente quando a planilha é aberta.
    • Cria um menu personalizado chamado "Fluxo de Trabalho" na interface do Google Sheets.
    • Adiciona um item de menu chamado "Liberar RDM" que, quando clicado, executa a função liberarRDM().
  2. liberarRDM():

    • Declaração de Variáveis: Define variáveis para os nomes das planilhas e abas, colunas relevantes (Pontos Problemáticos, Causas Prováveis e Estado da RDM), e os estados da RDM. Ajuste essas variáveis de acordo com a estrutura da sua planilha.
    • Verificação do Estado Atual:
      • Obtém a planilha ativa e a aba de controle (assumindo que o estado da RDM está lá).
      • Lê o valor da célula que contém o estado atual da RDM. Você precisará identificar em qual célula da sua aba "GPS" esse estado é armazenado e ajustar linhaEstadoRDM e colunaEstadoRDM conforme necessário.
      • Verifica se o estado atual da RDM é igual a "RDM Antes do fim". Se não for, exibe um alerta e interrompe a execução.
    • Execução da Ação "Disponibilizar RDM do dia":
      • Passo do Usuário (R11): Exibe um alerta para o usuário, lembrando-o de analisar os pontos problemáticos e registrar as ações corretivas e causas prováveis na aba RDM.
      • Passo do Agente AG2P - Copiar Planilha (R12):
        • Obtém o ID da pasta padrão do Google Drive (você pode substituir DriveApp.getRootFolder().getId() pelo ID de uma pasta específica, se preferir).
        • Cria uma cópia da planilha GPS com um nome único (incluindo a data e hora).
        • Move a cópia para a pasta padrão e, opcionalmente, remove a cópia da pasta raiz.
        • Exibe um log e um alerta informando que a planilha foi copiada.
        • Inclui um tratamento de erro caso a cópia falhe.
      • Passo do Agente AG2P - Atualizar Estado (R38):
        • Define o valor da célula de estado da RDM de volta para "RDM Antes do fim", mantendo o estado conforme a regra R38.
        • Registra a atualização do estado no log.
    • Resultados Esperados: O código garante que o estado da RDM seja mantido como "RDM Antes do fim" após a execução.
    • Mensagem de Conclusão: Exibe um alerta informando que o evento "Liberou RDM" foi concluído.
    • Esperando Próximo Evento: O script termina sua execução, aguardando que outro evento (como o clique no menu "Liberar RDM" novamente ou outro evento que você possa automatizar) seja disparado.

Como Usar:

  1. Abra sua planilha GPS no Google Sheets.
  2. Vá em "Extensões" > "Apps Script".
  3. Copie e cole o código acima no editor de scripts.
  4. Salve o script (Ctrl+S ou Cmd+S). Dê um nome para o seu projeto de script (por exemplo, "AutomaçãoRDM").
  5. Atualize a planilha. Você deverá ver um novo menu chamado "Fluxo de Trabalho" na barra de menus.
  6. Clique em "Fluxo de Trabalho" e depois em "Liberar RDM" para executar a automação.

Importante:

  • Ajuste as variáveis: Certifique-se de alterar os valores de nomePlanilhaGPS, nomeAbaControle, colunaPontosProblematicos, colunaCausasProvaveis e, crucialmente, colunaEstadoRDM e linhaEstadoRDM para corresponderem exatamente à estrutura da sua planilha "GPS".
  • Pasta Padrão: A pasta padrão no código atual é a pasta raiz do seu Google Drive (DriveApp.getRootFolder()). Se você deseja salvar as cópias em uma pasta específica, substitua DriveApp.getRootFolder().getId() pelo ID dessa pasta. Para encontrar o ID de uma pasta, abra a pasta no Google Drive e verifique a URL. O ID é a sequência de caracteres entre /folders/ e a próxima /.
  • Permissões: Ao executar o script pela primeira vez, o Google Apps Script solicitará autorização para acessar sua planilha e seu Google Drive. Você precisará conceder essas permissões para que o script funcione corretamente.
  • Tratamento de Erros: O código inclui um tratamento básico de erro ao tentar copiar a planilha. Você pode adicionar mais tratamento de erros conforme necessário para tornar o script mais robusto.
  • Interface do Usuário: O script usa SpreadsheetApp.getUi().alert() para interagir com o usuário. Para uma experiência de usuário mais sofisticada, você pode considerar a criação de caixas de diálogo personalizadas usando HTML Service.

Este código automatiza o evento "Liberou RDM" conforme as especificações fornecidas, copiando a planilha GPS para uma pasta padrão e mantendo o estado da RDM como "RDM Antes do fim". Lembre-se de adaptar as variáveis à sua planilha para que funcione corretamente.

CONCLUSÃO

Neste episódio 9, da temporada 4 da série "Do Caos ao Prompt", foi apresentada a implementação do Evento "Liberou RDM", realizada pelo Chatbot de IA Gemini 2.0 Flash.

As especificações do evento foram feitas em Finite State Machine (FSM).

Próximo post: Do Caos ao Prompt T4E10: Desenvolvimento do App AG2P - Evento "Selecionou totais para produtividade"

Veja a lista de Episódios da Temporada 4 da Série "Do Caos ao Prompt", no final do Episódio T4E01.

Nenhum comentário:

Postar um comentário

Entendendo a Metáfora "Home Office é Moto Boy"

Dashboard de Produtividade Pessoal T1E14: RESOLVIDO BugCT1-5 Erro 400 no login

INTRODUÇÃO Post anterior:  Dashboard de Produtividade Pessoal T1E13: BugCT1-5 Erro 400 no login O objetivo deste post é apresentar um prompt...