Seguidores

sábado, 26 de abril de 2025

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

INTRODUÇÃO

Post anterior: Do Caos ao Prompt T4E07: Desenvolvimento do App AG2P – Evento "Decidiu encerrar a jornada"

    Este Post é o episódio 8 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 "Executou tarefa em hora extra".



    Evento “Executou tarefa em hora extra”

    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
    "Executou tarefa em hora extra": https://g.co/gemini/share/7cd52dcdb360


    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 "Executou tarefa em hora extra", que faz parte deste comando:

    Do Caos ao Prompt T3E09: Estrutura do Agente AG2P - Diálogo 7 Evento "Executou tarefa em hora extra" dispara Ação "Registrar horas extras"

    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


    /**
     * Automatiza o evento "Executou tarefa em hora extra".
     *
     * Pré-condições:
     * - O app deve estar no estado "RDM Ativa".
     * - A planilha GPS deve existir e conter a aba "GPS".
     * - A aba "GPS" deve conter as colunas I e J para registro de problemas.
     *
     * Ações:
     * - Registra informações sobre horas extras (pontos de tarefas e problemas).
     * - Mantém o estado da aba RDM como "RDM Ativa".
     */
    function executarTarefaEmHoraExtra() {
      // Define o nome da planilha e da aba RDM (assumindo que seja a mesma planilha "GPS")
      const nomePlanilha = "GPS";
      const nomeAbaRDM = "GPS"; // Ajuste se a aba RDM for diferente

      // Abre a planilha e a aba RDM
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const abaRDM = ss.getSheetByName(nomeAbaRDM);

      // Verifica se a aba RDM foi encontrada
      if (!abaRDM) {
        Logger.log(`A aba "${nomeAbaRDM}" não foi encontrada na planilha "${nomePlanilha}".`);
        return;
      }

      // *** REGRA R37 (Verificação do estado da RDM - Assumindo que o estado seja controlado em alguma célula) ***
      // *** É necessário identificar ONDE o estado "RDM Ativa" é armazenado na planilha. ***
      // *** O código abaixo é um exemplo, você precisará ajustá-lo para sua planilha. ***
      const linhaEstadoRDM = 2; // Exemplo: assumindo que o estado esteja na linha 2
      const colunaEstadoRDM = 1; // Exemplo: assumindo que o estado esteja na coluna A
      const estadoRDM = abaRDM.getRange(linhaEstadoRDM, colunaEstadoRDM).getValue();

      if (estadoRDM !== "RDM Ativa") {
        Logger.log(`O app não está no estado "RDM Ativa". Estado atual: "${estadoRDM}".`);
        return;
      }

      // *** AÇÃO: "Registrar horas extras" ***

      // Passo 1 (Usuário): Somar pontos de tarefa ANTES do horário da aba RDM (R01 e R07)
      // *** Este passo depende da interação do usuário e de como os dados são inseridos na planilha.
      // *** O script NÃO pode automatizar a SOMA feita pelo usuário.
      // *** O script pode, no entanto, ler o valor inserido pelo usuário em alguma célula. ***
      const linhaPontosAntes = 3; // Exemplo: linha onde o usuário informa os pontos ANTES
      const colunaPontosAntes = 2; // Exemplo: coluna onde o usuário informa os pontos ANTES
      const pontosAntes = abaRDM.getRange(linhaPontosAntes, colunaPontosAntes).getValue();
      Logger.log(`Pontos de tarefas antes do horário RDM (informado pelo usuário): ${pontosAntes}`);

      // Passo 2 (Usuário): Somar pontos de tarefa DEPOIS do horário da aba RDM (R01 e R08)
      // *** Similar ao Passo 1, depende da entrada do usuário. ***
      const linhaPontosDepois = 4; // Exemplo: linha onde o usuário informa os pontos DEPOIS
      const colunaPontosDepois = 2; // Exemplo: coluna onde o usuário informa os pontos DEPOIS
      const pontosDepois = abaRDM.getRange(linhaPontosDepois, colunaPontosDepois).getValue();
      Logger.log(`Pontos de tarefas depois do horário RDM (informado pelo usuário): ${pontosDepois}`);

      // Passo 3 (Usuário): Registrar fatos relacionados com tarefas com impacto negativo (R09)
      // *** O script irá ler as informações que o usuário inserir nas colunas I e J da aba "GPS". ***
      const primeiraLinhaRegistro = 5; // Exemplo: primeira linha para registrar problemas
      const colunaNOKPontos = 9; // Coluna I
      const colunaNOKCausas = 10; // Coluna J

      // Aqui, você precisará de uma forma de identificar a PRÓXIMA linha vazia para registrar um novo problema.
      // Um método comum é percorrer as linhas até encontrar uma vazia na coluna de registro.
      let linhaVazia = primeiraLinhaRegistro;
      while (abaRDM.getRange(linhaVazia, colunaNOKPontos).getValue() !== "") {
        linhaVazia++;
      }

      // Supondo que o usuário tenha inserido os dados do problema em ALGUM lugar da planilha,
      // o script poderia copiar esses dados para a seção de registro (se necessário).
      // Para este exemplo, vamos apenas registrar um log de que o usuário deve ter inserido os dados.
      Logger.log("O usuário deve registrar os problemas nas colunas I e J da aba 'GPS'.");

      // Passo 4 (Agente AG2P): Atualizar o Estado da planilha RDM para "RDM Ativa" (R37)
      abaRDM.getRange(linhaEstadoRDM, colunaEstadoRDM).setValue("RDM Ativa");
      Logger.log("Estado da RDM atualizado para: RDM Ativa.");

      // *** REGRA R01 (Verificação da duração total da jornada) ***
      // *** Para verificar a duração da jornada, você precisará ter informações sobre o INÍCIO e o FIM da jornada
      // *** registrados em algum lugar da planilha. O script precisará acessar essas informações. ***
      // *** O código abaixo é um exemplo, você precisará ajustá-lo para sua planilha. ***
      const linhaInicioJornada = 10; // Exemplo: linha onde a hora de início está registrada
      const colunaInicioJornada = 3; // Exemplo: coluna onde a hora de início está registrada
      const linhaFimJornada = 10; // Exemplo: linha onde a hora de fim está registrada
      const colunaFimJornada = 4; // Exemplo: coluna onde a hora de fim está registrada

      const inicioJornada = abaRDM.getRange(linhaInicioJornada, colunaInicioJornada).getValue();
      const fimJornada = abaRDM.getRange(linhaFimJornada, colunaFimJornada).getValue();

      if (inicioJornada instanceof Date && fimJornada instanceof Date) {
        const duracaoEmMilissegundos = fimJornada.getTime() - inicioJornada.getTime();
        const duracaoEmHoras = duracaoEmMilissegundos / (1000 * 60 * 60);

        if (duracaoEmHoras > 9) {
          Logger.log(`A duração da jornada (${duracaoEmHoras.toFixed(2)} horas) é maior que 9 horas (hora extra).`);
        } else {
          Logger.log(`A duração da jornada (${duracaoEmHoras.toFixed(2)} horas) não caracteriza hora extra.`);
        }
      } else {
        Logger.log("Não foi possível calcular a duração da jornada. Verifique os formatos das horas de início e fim.");
      }

      Logger.log("Evento 'Executou tarefa em hora extra' concluído. Aguardando outro evento.");
    }

    Explicação do Código:

    1. function executarTarefaEmHoraExtra(): Define a função que será executada quando o evento "Executou tarefa em hora extra" for disparado.

    2. Definição de Nomes: Define os nomes da planilha ("GPS") e da aba RDM ("GPS"). Você precisará ajustar o nomeAbaRDM se a aba RDM tiver um nome diferente.

    3. Abertura da Planilha e Aba:

      • SpreadsheetApp.getActiveSpreadsheet(): Obtém a planilha ativa.
      • ss.getSheetByName(nomeAbaRDM): Obtém a aba RDM pelo nome.
      • Verifica se a aba foi encontrada e retorna se não existir.
    4. Verificação do Estado da RDM (Regra R37):

      • Importante: O código assume que o estado "RDM Ativa" está armazenado em alguma célula da planilha. As variáveis linhaEstadoRDM e colunaEstadoRDM são exemplos. Você precisará identificar a célula correta na sua planilha onde o estado da RDM é controlado e ajustar essas variáveis.
      • O código lê o valor da célula de estado e verifica se é igual a "RDM Ativa". Se não for, ele registra um log e encerra a função.
    5. Ação "Registrar horas extras":

      • Passos do Usuário (R01, R07, R08, R09): O script não pode automatizar a ação do usuário de somar os pontos ou registrar os problemas diretamente. Em vez disso, o código inclui exemplos de como o script pode LER os valores que o usuário já inseriu em células específicas da planilha. Você precisará definir as linhas e colunas corretas onde o usuário irá inserir essas informações (linhaPontosAntes, colunaPontosAntes, linhaPontosDepois, colunaPontosDepois).
      • Para o registro de problemas (R09), o script demonstra como encontrar a próxima linha vazia nas colunas I e J da aba "GPS" para um possível registro automático (se você tiver uma forma de o script "saber" o problema e a causa). No entanto, com base na descrição, essa etapa parece ser manual do usuário.
      • Passo do Agente AG2P (R37): O script define o valor da célula de estado da RDM de volta para "RDM Ativa", garantindo que o estado seja mantido.
    6. Verificação da Duração da Jornada (Regra R01):

      • Similar à verificação do estado, o código inclui um exemplo de como ler as horas de início e fim da jornada de células específicas (linhaInicioJornada, colunaInicioJornada, linhaFimJornada, colunaFimJornada). Você precisará ajustar essas variáveis para as células corretas na sua planilha.
      • O código calcula a diferença entre as horas para determinar a duração e verifica se é maior que 9 horas.
    7. Log de Conclusão: Registra um log indicando que o evento foi concluído e que o app está aguardando outro evento.

    Como Usar e Adaptar:

    1. Abra o Editor de Script: Na sua planilha "GPS", vá em "Extensões" > "Apps Script".
    2. Cole o Código: Copie e cole o código na janela do editor de script.
    3. Ajuste as Variáveis:
      • Certifique-se de que nomeAbaRDM esteja correto.
      • Identifique as células na sua planilha onde o estado "RDM Ativa" é armazenado e ajuste linhaEstadoRDM e colunaEstadoRDM.
      • Identifique as células onde o usuário irá inserir os pontos de tarefas antes e depois do horário da RDM e ajuste linhaPontosAntes, colunaPontosAntes, linhaPontosDepois e colunaPontosDepois.
      • Identifique as células onde as horas de início e fim da jornada são registradas e ajuste linhaInicioJornada, colunaInicioJornada, linhaFimJornada e colunaFimJornada.
      • Se você pretende automatizar o registro de problemas (o que não parece ser o caso pela descrição), ajuste primeiraLinhaRegistro, colunaNOKPontos e colunaNOKCausas.
    4. Salve o Script: Clique no ícone de salvar (o disquete). Dê um nome ao seu script (por exemplo, "AutomacaoRDM").

    Como Disparar o Evento:

    Como este é um evento acionado pelo usuário ("se a pessoa disparar o evento"), você precisará de uma maneira para o usuário interagir com a planilha para que este script seja executado. Algumas opções incluem:

    • Botão na Planilha: Insira um botão na aba RDM que, ao ser clicado, execute a função executarTarefaEmHoraExtra().
    • Item de Menu Personalizado: Crie um item de menu personalizado na planilha que, ao ser selecionado, execute a função.
    • Formulário: Se os dados de horas extras forem coletados por meio de um Google Forms, você pode vincular um script ao evento de envio do formulário para executar esta função.

    Para criar um botão ou item de menu, você precisará usar mais código do Google Apps Script para criar a interface do usuário. Se você precisar de ajuda com isso, me diga!

    CONCLUSÃO

    Neste episódio 8, da temporada 4 da série "Do Caos ao Prompt", foi apresentada a implementação do Evento "Executou tarefa em hora extra", 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 T4E09: Desenvolvimento do App AG2P – Evento "Liberou RDM"


    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...