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"

UCEM L-pI.219 (199) Revisão VI - Caso de uso da IA para estudar

  Lição 219  Eu não sou um corpo. Eu sou livre.  Pois ainda sou como Deus me criou. Lição anterior Escolher outra lição Próxima lição Texto ...