Seguidores

sexta-feira, 23 de maio de 2025

Do Caos ao Prompt T5E02: Teste do App AG2P - Evento "Abriu RDM" - Interface do usuário

INTRODUÇÃO

Post anterior: Do Caos ao Prompt T5E01: Teste do App AG2P - Evento "Abriu RDM"

Este Post é o episódio 2 da temporada 5 da série "Do Caos ao Prompt", que apresenta a implementação da interface do usuário, para o Agente de Gestão de Processo Pessoal (AG2P), com foco no evento "Abriu RDM".


Interface do Usuário

Link da conversa com o Gemini, na qual foi apresentado um Prompt contendo os itens:

  • Objetivo, 
  • Estrutura da interface do usuário para testar o evento, 
  • Contexto da interface do usuário, 
  • Ferramentas,

para implementação da interface do usuário para o evento "Abriu RDM": 
https://g.co/gemini/share/b6f4f7f3f623

Comando para especificar a interface do usuário para o Gemini

Objetivo 

O objetivo desta implementação é preencher uma lacuna que foi encontrada pelo Chatbot de IA Gemini, no comportamento do usuário e do aplicativo, antes do evento “Abriu RDM” ser disparado. 

Para preencher essa lacuna, foi criada outra planilha, para representar a interface do usuário, que foi identificada por GPS Front end.

Consequentemente, a planilha GPS original foi renomeada para GPS Back end, pois esta contém os dados acessados, exclusivamente, pelo app AG2P.

Estrutura da planilha GPS Front end

Coluna A(Necessidades do usuário)

Contém as ações que o usuário precisa executar ao longo do fluxo de trabalho. Essas ações são fixas e não podem ser editadas.

Coluna B(Evento)

Contém, para cada necessidade do usuário, o evento que o usuário precisa disparar para acionar o aplicativo AG2P. Esses eventos não podem ser editados.

Coluna C(Situação do Evento)

Contém, para cada evento, a situação em que o mesmo se encontra, podendo ser: 
  • EVENTO PLANEJADO
  • EVENTO EM EXECUÇÃO
  • EVENTO EXECUTADO
Essas situações podem ser selecionadas tanto pelo usuário como pelo aplicativo AG2P.

Coluna D(Estado Atual)

Contém, para cada evento, o estado do aplicativo AG2P, antes do evento ser iniciado. Isto significa que o evento só pode iniciar, se o aplicativo estiver naquele estado.

Coluna E(Próximo Estado)

Contém, para cada evento, o estado do aplicativo AG2P, após o evento ser encerrado com sucesso. Isto significa que o evento sempre causará a mudança do estado atual para o próximo estado.

Exemplo da planilha GPS Front end

Necessidades do usuário                         Evento                                              Situação do evento         Estado Atual           Próximo Estado
Iniciar a jornada                                 Abriu planilhas GPS                      EVENTO PLANEJADO N/a                           Após início
Iniciar a jornada - Inicializar RDM Abriu RDM                                      EVENTO PLANEJADO Após início           RDM Inicializada
Fazer o plano do dia                         Recebeu lista de tarefas a fazer      EVENTO PLANEJADO RDM Inicializada   RDM Ativa
Executar uma tarefa                         Iniciou tarefa do negócio              EVENTO PLANEJADO RDM Ativa           RDM Ativa
Registrar o encerramento da tarefa         Terminou tarefa do negócio              EVENTO PLANEJADO RDM Ativa           RDM Ativa
Registrar um erro                                 Ocorreu um incidente                      EVENTO PLANEJADO RDM Ativa           RDM Ativa
Registrar hora extra                         Executou tarefa em hora extra      EVENTO PLANEJADO RDM Ativa           RDM Ativa
Encerrar a jornada                                 Decidiu encerrar a jornada              EVENTO PLANEJADO RDM Ativa           RDM Antes do fim
Encerrar a jornada - Liberar RDM         Liberou RDM                                      EVENTO PLANEJADO RDM Antes do fim   RDM Antes do fim
Encerrar a jornada - Ver Produtividade Selecionou totais para produtividade  EVENTO PLANEJADO RDM Antes do fim   RDM Antes do fim
Encerrar a jornada - Ver Pareto         Selecinou incidentes por origem      EVENTO PLANEJADO RDM Antes do fim   RDM Antes do fim
Encerrar a jornada - Ver Avaliação         Avaliou a capacidade do processo      EVENTO PLANEJADO RDM Antes do fim   RDM Antes do fim
Encerrar a jornada - Fechar RDM         Fechou RDM                                      EVENTO PLANEJADO RDM Antes do fim   RDM Fechada

Descrição do comportamento

Se a necessidade do usuário for “Iniciar a jornada”, ele deve disparar dois eventos, nesta ordem:

  1. Abriu planilhas GPS
  2. Abriu RDM

      O evento “Abriu RDM” já foi especificado e teve seu código gerado, automaticamente, pelo Gemini, conforme descrição no Post:
 
Do Caos ao Prompt T4E02: Desenvolvimento do App AG2P – Evento "Abriu RDM"

O evento “Abriu planilhas GPS” foi especificado depois da implementação do evento “Abriu RDM”.

Neste Post será solicitado ao Gemini a geração do código do evento “Abriu planilhas GPS”, integrado com o código do evento “Abriu RDM”, conforme as especificações abaixo.


Se o usuário disparar o evento “Abriu planilhas GPS”;

o app deverá executar a ação “Verificar situação do evento 'Fechou RDM'” na planilha GPS Front end”;

o app deverá acessar os dados necessários na aba "Interface do Usuário", da planilha GPS Front end; 

o app deverá acessar os dados necessários na aba "RDM", da planilha GPS Back end; 

o app deverá ter o seu comportamento direcionado pelas regras em "Regra_04_FrontEnd e Regra_05_FrontEnd".

 

Após a execução, o app deverá ficar esperando outro evento. 


Ação “Verificar situação do evento ‘Fechou RDM’ ”

A ação "Verificar situação do evento 'Fechou RDM'” contém a descrição do diálogo que acontece, entre o usuário e o Agente AG2P, sempre que o evento "Abriu planilhas GPS" for disparado pelo usuário.

Preparação e informações necessárias

1.      Agente AG2P: O login no agente AG2P deve ter sido realizado com sucesso.

2.      Dados:
Na planilha "GPS Back end",
na aba RDM,
na célula da linha 1 e coluna T,
o valor deve estar igual a "RDM Fechada".

Na planilha "GPS Front end",
na aba "Interface do Usuário",
se o valor na coluna B(Evento) for igual a "Fechou RDM",
então, na mesma linha,
o valor da coluna C(Situação do evento)
deve estar igual a "EVENTO EXECUTADO". 
(Regra_04_FrontEnd)

3.      Fluxo Alternativo: O agente AG2P deve apenas abrir a aba “Interface do Usuário”, da planilha “GPS Front end”, se uma das duas condições acima for falsa.  

Passos do diálogo 1 entre o usuário e o agente                                                                                                                            

1.      Agente AG2P:
O agente AG2P deve selecionar,
na planilha “GPS Front end”,
na aba “Interface do Usuário”,
na célula da coluna C(Situação do evento),
a opção “EVENTO EXECUTADO”,
para o evento “Abriu planilhas GPS”,
na coluna B(Evento).
(
Regra_05_FrontEnd)


O agente AG2P deve selecionar,
na planilha “GPS Front end”,
na aba “Interface do Usuário”, 
na célula da coluna C(Situação do evento),
a opção “EVENTO PLANEJADO”,
para todos os eventos,
exceto o evento “Abriu planilhas GPS”.
(
Regra_05_FrontEnd)

2.      Usuário:
O usuário recebe a aba “Interface do Usuário”, da planilha “GPS Front end”.

Resultados esperados         

1.      Na planilha “GPS Front end”,
na aba “Interface do Usuário”,
na coluna B(Evento),
se o valor for igual a “Abriu planilhas GPS”, então,
na mesma linha,
a coluna C(Situação do evento),
deve estar com a opção “EVENTO EXECUTADO” selecionada.
(
Regra_05_FrontEnd)

2.      Na planilha “GPS Front end”,
na aba “Interface do Usuário”,
para os demais eventos,
a célula na coluna C(Situação do evento),
deve estar com a opção “EVENTO PLANEJADO” selecionada.
(
Regra_05_FrontEnd)

Ações em caso de problema

1.      Revisar o que foi feito no contexto desta Ação.

2.      Solicitar ajuda à pessoa responsável pelo Suporte da Organização.

Atenção especial

Na planilha “GPS Front end”,
na aba “Interface do Usuário”,
se na coluna B(Evento)
o valor for igual a “Abriu planilhas GPS”,
então, na mesma linha do evento,
na coluna C(Situação do evento”),
a opção selecionada deve estar
igual a “EVENTO EXECUTADO”.
(Regra_05_FrontEnd)

Dados acessados na planilha GPS Front end

1.      Na aba “Interface do Usuário”, os dados acessados são: as colunas “B(Evento)” e “ C(Situação do Evento)”.

 

Dados acessados na planilha GPS Back end

Estado atual da aba RDM, na linha 1, coluna T.

Regras que direcionam o comportamento do app na planilha GPS Front end

Identificação das Regras: Regra_04_FrontEnd e Regra_05_FrontEnd.

Clique aqui para ler as Regras identificadas acima.

Comando ao Gemini para solicitar a implementação da interface do usuário

Faça a implementação da interface do usuário, na planilha "GPS Front end", na aba "Interface do Usuário", conforme as especificações acima.

As seguintes mudanças devem ser feitas no código gerado pelo Gemini para implementar o evento "Abriu RDM", na aba RDM da planilha GPS:

  • substituir a função atual onOpen, que trata o evento "Abriu RDM", por outra que trata o mesmo evento, agora originado na aba "Interface do Usuário", da planilha "GPS Front end", cujo gatilho é a mudança, na coluna C(Situação do evento), de "EVENTO PLANEJADO" para "EVENTO EM EXECUÇÃO".
  • Renomear a planilha GPS para "GPS Back end".
  • Fazer os ajustes no código que forem necessários para viabilizar a utilização da aba "Interface do Usuário", da planilha "GPS Front end", de forma tão desacoplada da planilha "GPS Back end" quanto possível, pois futuramente usaremos outras interfaces do usuário.

Resposta do Gemini

Compreendo a nova arquitetura e o objetivo de integrar a interface do usuário (GPS Front end) com a lógica de dados (GPS Back end). Vamos implementar o código para o evento "Abriu planilhas GPS" e ajustar o código existente para o evento "Abriu RDM" para funcionar com essa nova estrutura.

Passo 1: Criar a Planilha "GPS Front end"

  1. Abra o Google Sheets.

  2. Crie uma nova planilha e nomeie-a "GPS Front end".

  3. Crie uma aba com o nome "Interface do Usuário".

  4. Na aba "Interface do Usuário", preencha as colunas conforme a estrutura e o exemplo fornecidos:

    | Necessidades do usuário | Evento | Situação do evento | Estado Atual | Próximo Estado |

    | :-------------------------------------- | :------------------------------- | :------------------- | :---------------- | :---------------- |

    | Iniciar a jornada | Abriu planilhas GPS | EVENTO PLANEJADO | N/a | Após início |

    | Iniciar a jornada - Inicializar RDM | Abriu RDM | EVENTO PLANEJADO | Após início | RDM Inicializada |

    | Fazer o plano do dia | Recebeu lista de tarefas a fazer | EVENTO PLANEJADO | RDM Inicializada | RDM Ativa |

    | Executar uma tarefa | Iniciou tarefa do negócio | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |

    | Registrar o encerramento da tarefa | Terminou tarefa do negócio | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |

    | Registrar um erro | Ocorreu um incidente | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |

    | Registrar hora extra | Executou tarefa em hora extra | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |

    | Encerrar a jornada | Decidiu encerrar a jornada | EVENTO PLANEJADO | RDM Ativa | RDM Antes do fim |

    | Encerrar a jornada - Liberar RDM | Liberou RDM | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |

    | Encerrar a jornada - Ver Produtividade | Selecionou totais para produtividade | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |

    | Encerrar a jornada - Ver Pareto | Selecinou incidentes por origem | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |

    | Encerrar a jornada - Ver Avaliação | Avaliou a capacidade do processo | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |

    | Encerrar a jornada - Fechar RDM | Fechou RDM | EVENTO PLANEJADO | RDM Antes do fim | RDM Fechada |

Passo 2: Renomear a Planilha "GPS" para "GPS Back end"

  1. Abra a sua planilha "GPS" existente (onde o código do "Abriu RDM" está).
  2. Clique no nome da planilha no canto superior esquerdo.
  3. Renomeie-a para "GPS Back end".

Passo 3: Implementar o Código para o Evento "Abriu planilhas GPS" na Planilha "GPS Front end"

  1. Abra a planilha "GPS Front end".

  2. Clique em "Extensões" no menu superior e selecione "Apps Script".

  3. Cole o seguinte código no editor:

    JavaScript
    function onEdit(e) {
      var ssFront = SpreadsheetApp.getActiveSpreadsheet();
      var abaFront = ssFront.getSheetByName("Interface do Usuário");
      var range = e.range;
      var row = range.getRow();
      var col = range.getColumn();
      var value = e.value;
      var oldValue = e.oldValue;
    
      // Verificar se a edição ocorreu na coluna C (Situação do evento)
      if (abaFront.getName() === range.getSheet().getName() && col === 3) {
        var eventoColunaB = abaFront.getRange(row, 2).getValue();
    
        // Tratar o evento "Abriu planilhas GPS"
        if (eventoColunaB === "Abriu planilhas GPS" && value === "EVENTO EM EXECUÇÃO" && oldValue !== "EVENTO EXECUTADO") {
          verificarFecharRDMeAtualizarFrontEnd(abaFront, row);
        }
    
        // Tratar o evento "Abriu RDM"
        if (eventoColunaB === "Abriu RDM" && value === "EVENTO EM EXECUÇÃO" && oldValue !== "RDM Inicializada") {
          inicializarRDM(abaFront, row);
        }
      }
    }
    
    function verificarFecharRDMeAtualizarFrontEnd(abaFrontEnd, linhaEventoAbriuPlanilhas) {
      var ssBack = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("GPS Back end");
      var abaRDMBack = ssBack.getSheetByName("RDM");
      var estadoRDMBack = abaRDMBack.getRange("T1").getValue();
    
      var abaFront = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Interface do Usuário");
      var colunaEvento = abaFront.getRange("B:B").getValues().flat();
      var linhaEventoFecharRDM = colunaEvento.indexOf("Fechou RDM") + 1; // +1 para compensar o cabeçalho
    
      var situacaoFecharRDM = abaFront.getRange(linhaEventoFecharRDM, 3).getValue();
    
      // Verificar as condições (Regra_04_FrontEnd)
      var condicaoRDMFachada = (estadoRDMBack === "RDM Fechada");
      var condicaoEventoFechouRDMExecutado = (situacaoFecharRDM === "EVENTO EXECUTADO");
    
      if (condicaoRDMFachada && condicaoEventoFechouRDMExecutado) {
        // Passo 1 do diálogo: Atualizar "Abriu planilhas GPS" para "EVENTO EXECUTADO" (Regra_05_FrontEnd)
        abaFrontEnd.getRange(linhaEventoAbriuPlanilhas, 3).setValue("EVENTO EXECUTADO");
    
        // Passo 1 do diálogo: Atualizar os demais eventos para "EVENTO PLANEJADO" (Regra_05_FrontEnd)
        var ultimaLinha = abaFrontEnd.getLastRow();
        for (var i = 1; i <= ultimaLinha; i++) {
          if (i !== linhaEventoAbriuPlanilhas) {
            var evento = abaFrontEnd.getRange(i, 2).getValue();
            if (evento !== "Abriu planilhas GPS") {
              abaFrontEnd.getRange(i, 3).setValue("EVENTO PLANEJADO");
            }
          }
        }
    
        // Passo 2 do diálogo: O usuário recebe a aba "Interface do Usuário" (implícito na atualização da planilha)
        SpreadsheetApp.getUi().alert('Planilhas GPS iniciadas. Verifique a aba "Interface do Usuário".');
    
      } else {
        // Fluxo Alternativo: Abrir a aba "Interface do Usuário" (já está aberta por padrão)
        SpreadsheetApp.getUi().alert('Atenção: Condições para iniciar as planilhas GPS não atendidas. Verifique o estado de "Fechou RDM" e a aba RDM no Back end.');
      }
    }
    
    function inicializarRDM(abaFrontEnd, linhaEventoAbriuRDM) {
      var ssBack = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("GPS Back end");
      var abaRDMBack = ssBack.getSheetByName("RDM");
    
      // Zerar células D5 a H14 (Fases do GPS - EXECUTADO)
      abaRDMBack.getRange("D5:H14").clearContent();
    
      // Zerar meta em quantidade de pontos (D4 a H4)
      abaRDMBack.getRange("D4:H4").clearContent();
    
      // Registrar a data atual em A2 (PLANEJADO)
      var dataAtual = new Date();
      abaRDMBack.getRange("A2").setValue(dataAtual);
      abaRDMBack.getRange("B2").setValue(dataAtual);
    
      // Atualizar o estado da aba RDM para "RDM Inicializada" (Regra R35 - Implícita na ação)
      abaRDMBack.getRange("T1").setValue("RDM Inicializada");
    
      // Atualizar o estado do evento "Abriu RDM" na Front end para "EVENTO EXECUTADO"
      abaFrontEnd.getRange(linhaEventoAbriuRDM, 3).setValue("EVENTO EXECUTADO");
    
      // Apresentar menu de opções (simulado com um alerta simples)
      SpreadsheetApp.getUi().alert('RDM Inicializada! As células de execução foram zeradas e a data de hoje foi registrada.');
    }
    
  4. Salve o script: Clique no ícone de disco para salvar o script. Dê um nome a ele, por exemplo, "FrontEnd_Automacao".

Explicação do Código:

  • onEdit(e): Esta função é um gatilho que é executado automaticamente sempre que uma célula na planilha é editada.

    • Verifica se a edição ocorreu na aba "Interface do Usuário" e na coluna C (Situação do evento).
    • Obtém o valor da célula editada (value) e o valor anterior (oldValue).
    • Trata "Abriu planilhas GPS": Se o evento na coluna B for "Abriu planilhas GPS" e a "Situação do evento" mudar para "EVENTO EM EXECUÇÃO" (e não era "EVENTO EXECUTADO" antes), a função verificarFecharRDMeAtualizarFrontEnd é chamada.
    • Trata "Abriu RDM": Se o evento na coluna B for "Abriu RDM" e a "Situação do evento" mudar para "EVENTO EM EXECUÇÃO" (e não era "RDM Inicializada" antes - adaptado para o novo gatilho), a função inicializarRDM é chamada.
  • verificarFecharRDMeAtualizarFrontEnd(abaFrontEnd, linhaEventoAbriuPlanilhas):

    • Obtém referências para as abas "Interface do Usuário" (Front end) e "RDM" (Back end).
    • Lê o estado da célula T1 na aba "RDM" (Back end).
    • Localiza a linha do evento "Fechou RDM" na aba "Interface do Usuário".
    • Lê a situação do evento "Fechou RDM".
    • Verifica as condições (Regra_04_FrontEnd): Se o estado da RDM no Back end for "RDM Fechada" e a situação do evento "Fechou RDM" no Front end for "EVENTO EXECUTADO":
      • Atualiza a situação do evento "Abriu planilhas GPS" para "EVENTO EXECUTADO" (Regra_05_FrontEnd).
      • Atualiza a situação de todos os outros eventos para "EVENTO PLANEJADO" (Regra_05_FrontEnd).
      • Exibe um alerta informando que as planilhas foram iniciadas.
    • Fluxo Alternativo: Se as condições não forem atendidas, exibe um alerta informando o problema.
  • inicializarRDM(abaFrontEnd, linhaEventoAbriuRDM):

    • Obtém referências para as abas "Interface do Usuário" (Front end) e "RDM" (Back end).
    • Executa as ações de inicialização da RDM na aba "RDM" do Back end (zerar células, registrar data, atualizar estado T1).
    • Atualiza a situação do evento "Abriu RDM" na aba "Interface do Usuário" para "EVENTO EXECUTADO".
    • Exibe um alerta informando que a RDM foi inicializada.

Como Usar:

  1. Abra a planilha "GPS Front end".
  2. Na aba "Interface do Usuário", localize a linha do evento "Abriu planilhas GPS" na coluna B.
  3. Na coluna C (Situação do evento) dessa linha, selecione a opção "EVENTO EM EXECUÇÃO" (você precisará criar essa opção no menu suspenso da célula, se ainda não existir).
  4. O script onEdit(e) será acionado. Ele verificará as condições e atualizará a situação dos eventos conforme as regras.
  5. Para disparar o evento "Abriu RDM", siga o mesmo processo na linha correspondente a "Abriu RDM", alterando a "Situação do evento" para "EVENTO EM EXECUÇÃO".

Próximos Passos e Considerações:

  • Menu Suspenso: Certifique-se de que a coluna C ("Situação do evento") na aba "Interface do Usuário" tenha uma validação de dados com as opções: "EVENTO PLANEJADO", "EVENTO EM EXECUÇÃO" e "EVENTO EXECUTADO".
  • Tratamento de Erros: Adicione tratamento de erros mais robusto ao código para lidar com situações inesperadas (por exemplo, se as abas não forem encontradas).
  • Desacoplamento: O código tenta manter o Front end desacoplado do Back end, acessando apenas os dados necessários. No entanto, a lógica de coordenação ainda reside no script do Front end. Para um desacoplamento ainda maior, você poderia considerar o uso de um sistema de mensagens ou uma API (embora dentro do Google Workspace, o Apps Script seja a principal ferramenta de integração).
  • Outras Interfaces: Quando você criar outras interfaces de usuário, precisará implementar scripts semelhantes para gerenciar os eventos e interagir com o "GPS Back end". A estrutura do onEdit(e) pode ser reutilizada, com diferentes funções chamadas para diferentes eventos.

Esta implementação inicial fornece a lógica para os eventos "Abriu planilhas GPS" e "Abriu RDM" trabalhando com a nova arquitetura de Front end e Back end. À medida que você desenvolve o restante do aplicativo, este código precisará ser expandido e refinado.

CONCLUSÃO

Neste episódio 2, da temporada 5 da série "Do Caos ao Prompt", foi apresentada a implementação de uma interface do usuário, para o Agente de Gestão de Processo Pessoal (AG2P), com foco no evento "Abriu RDM".

O código foi gerado automaticamente pelo Chatbot de IA Gemini 2.0 Flash.

No próximo post serão apresentados os resultados do teste do evento "Abriu RDM", com a nova
interface do usuário ou, se necessário, melhorias nas especificações.


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


Nenhum comentário:

Postar um comentário

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

Exemplos D2P T2E2: Exemplo de uso do app D2P - Lição 1

INTRODUÇÃO Post anterior:  Exemplos D2P T2E1: Exemplo de uso do app D2P - Introdução Este é o episódio 2 da temporada 1 da série  Exemplos D...