1. Propósito e Escopo
Este documento define todos os prompts, configurações de memória, transição entre estados e demais requisitos funcionais para o Fluxo de Agentes "Monitoramento de Frequência Acadêmica", uma solução de automação projetada para monitorar e analisar registros de frequência de alunos. Essa documentação é um modelo de PRD ou Documento de Requisitos de Produto específicos para construção de Agentes de IA.
O objetivo principal é identificar padrões de absenteísmo e gerar alertas para a secretaria acadêmica, permitindo uma intervenção rápida e eficiente.
2. Contexto e Problema
Cenário Atual
Atualmente, instituições de ensino enfrentam dificuldades para monitorar a frequência acadêmica dos alunos de forma eficiente. O processo manual é demorado e sujeito a erros, dificultando a identificação de padrões de absenteísmo que podem indicar problemas mais sérios, como desengajamento ou dificuldades pessoais dos alunos.
Problemas Identificados
- Dificuldade em monitorar a frequência: A coleta e análise manual dos registros de frequência são ineficientes e propensas a erros.
- Falta de alertas proativos: A ausência de um sistema automatizado para gerar alertas impede uma intervenção oportuna e eficaz.
3. Impactos Esperados
A implementação deste fluxo de automação visa alcançar os seguintes resultados:
- Automatizar o monitoramento de frequência, aumentando a precisão e reduzindo erros.
- Identificar padrões de absenteísmo de forma proativa, permitindo uma intervenção mais rápida.
- Gerar alertas automáticos para a secretaria acadêmica, facilitando a gestão de casos de absenteísmo crítico.
4. Visão Geral da Solução
O agente de IA para monitoramento de frequência acadêmica processa dados de registros de frequência dos alunos, identifica padrões de absenteísmo e gera alertas para a secretaria acadêmica. A seguir são detalhadas todas as regras de negócio e especificações funcionais necessárias para que esse agente atue como um assistente útil e autônomo no monitoramento de frequência acadêmica.
A solução consiste em um fluxo de automação composto por 3 agentes de IA. O processo inicia com a preparação dos dados de frequência e termina com a geração de alertas estruturados para a secretaria.
A execução dos agentes é sequencial e linear, seguindo a ordem definida na tabela abaixo.
| Agentes | Função Principal |
|---|---|
Agente de Preparação de Dados de Frequência (RF 1)
| Validar e normalizar registros de frequência para uso analítico consistente. |
Agente de Análise e Detecção de Padrões de Absenteísmo (RF 2)
| Calcular métricas de frequência e identificar padrões de absenteísmo por aluno. |
Agente de Geração de Alertas para Secretaria Acadêmica (RF 3)
| Transformar achados analíticos em alertas estruturados e acionáveis para a secretaria. |
5. Protótipos
Para proporcionar uma visão clara e tangível da solução proposta, criamos protótipos interativos que demonstram tanto o fluxo de trabalho dos agentes quanto o resultado final que a secretaria acadêmica receberá. Explore os links abaixo para entender melhor a solução em ação.
6. Requisitos Funcionais
RF 1. Agente de Preparação de Dados de Frequência
1.1 Tarefa do Agente
Validar e normalizar registros de frequência para uso analítico consistente.
1.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais
Você está recebendo uma tabela de registros de frequência dos alunos. Este arquivo contém informações sobre a presença e ausência dos alunos em diferentes disciplinas ao longo do período letivo.
# 2. Objetivo
Validar e normalizar esses registros para garantir que possam ser analisados consistentemente pelos agentes subsequentes.
# 3. Regras que você deve seguir para gerar sua resposta
- Interpretação de status: mapear 'p', '1', 'presença' -> 'presente'; 'a', '0', 'falta' -> 'ausente'; 'j', 'just', 'justificada' -> 'justificado'. Caso mapa_status_custom fornecido, aplicar prioridade a ele.
- Datas: converter para ISO (YYYY-MM-DD). Se data inválida ou futura em >7 dias, descartar com motivo 'data_invalida_ou_futura'. Ajustar timezone usando timezone_padrao quando houver timestamp.
- Duplicidades: para chaves iguais (aluno_id+data+disciplina_id opcional), manter 1 registro aplicando prioridade de status: ausente > justificado > presente; em empate, preferir o com timestamp_registro mais recente. Contabilizar em duplicidades_detectadas/resolvidas.
- Feriados e dias sem aula: se calendario_letivo_com_feriados incluir data marcada como sem aula, manter o registro apenas se status='presente' (atividade extracurricular) e marcar tem_feriado=true; do contrário, descartar com motivo 'dia_sem_aula'.
- Justificativas: 'justificado' não conta como ausência para análise de risco; manter status='justificado'.
- Campos obrigatórios: descartar entradas sem aluno_id ou sem data com motivo específico ('aluno_id_ausente'|'data_ausente').
- Weekday: calcular 1-7 (1=segunda, 7=domingo) com base em data_iso.
- Saída consistente: garantir que todos os registros emitidos possuam exatamente os campos especificados em registros_normalizados.
# 4. Exemplo de Output que você deve produzir
JSON com: { registros_normalizados: [ {aluno_id, data_iso (YYYY-MM-DD), weekday (1-7; 1=segunda), status ('presente'|'ausente'|'justificado'), disciplina_id|null, turma_id|null, periodo_letivo|null, fonte_status (valor original), tem_feriado (bool) }... ], relatorio_validacao: {total_entradas_recebidas, total_validas, total_descartadas, motivos_descarte: [{motivo, quantidade}], duplicidades_detectadas, duplicidades_resolvidas, regras_aplicadas: [strings] } } 1.3 Configurações do Agente
1.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente é o ponto de partida do fluxo e deve ser acionado pelo envio de uma tabela de registros de frequência via API. Na fase de testes, o fluxo será iniciado pelo envio manual dos dados, que serão enviados para o agente diretamente por upload do arquivo na interface da Prototipe AI, para acelerar o processo de validação.
- Tipo do input: O input inicial para o fluxo é uma tabela de registros de frequência, que será processado para normalização e validação.
-
Formatos Suportados: Esse agente deve ser capaz de receber arquivos nos formatos:
.csv,.json. - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de até 100.000 caracteres.
1.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON contendo os registros normalizados e um relatório de validação.
-
Exemplo de Estrutura de Output:
{ "registros_normalizados": [ { "aluno_id": "12345", "data_iso": "2025-08-12", "weekday": 2, "status": "presente", "disciplina_id": null, "turma_id": null, "periodo_letivo": null, "fonte_status": "p", "tem_feriado": false } ], "relatorio_validacao": { "total_entradas_recebidas": 150, "total_validas": 140, "total_descartadas": 10, "motivos_descarte": [ {"motivo": "data_invalida_ou_futura", "quantidade": 5}, {"motivo": "aluno_id_ausente", "quantidade": 5} ], "duplicidades_detectadas": 3, "duplicidades_resolvidas": 3, "regras_aplicadas": ["mapa_status_custom", "ajuste_timezone"] } } - Número de caracteres esperado: O JSON gerado terá um tamanho aproximado de 3.000 caracteres, podendo variar conforme o número de registros processados.
1.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
1.3.4 Ferramentas do Agente
- Documentos: Não consulta documentos externos.
- Calculadora: Não utiliza.
- Busca Online: Não utiliza.
- Sistemas Externos: Não se conecta a sistemas externos.
1.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta gerada por este agente deve ser visível para o Agente de Análise e Detecção de Padrões de Absenteísmo (RF 2).
1.3.6 Regras de Orquestração e Transição
Ao concluir sua execução, esse agente aciona o Agente de Análise e Detecção de Padrões de Absenteísmo (RF 2).
RF 2. Agente de Análise e Detecção de Padrões de Absenteísmo
2.1 Tarefa do Agente
Calcular métricas de frequência e identificar padrões de absenteísmo por aluno.
2.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais
Você está recebendo um JSON com registros de frequência normalizados. Este arquivo foi gerado pelo agente anterior e contém informações detalhadas sobre a presença e ausência dos alunos.
# 2. Objetivo
Calcular métricas de frequência e identificar padrões de absenteísmo por aluno, gerando insights que possam guiar intervenções futuras.
# 3. Regras que você deve seguir para gerar sua resposta
- Base de cálculo: considerar status 'ausente' e 'presente' para métricas; 'justificado' não entra como ausência nem presença, mas conta em total_aulas apenas se a instituição assim definir. Padrão: não contar em total_aulas. Se necessário, usar parâmetro configuracoes.contar_justificado_em_total (bool).
- Ausências consecutivas: ordenar por data ascendente por aluno e contar sequências contíguas de 'ausente' desconsiderando 'justificado'. Guardar atual (sequência ao final do período) e máxima.
- Taxas: taxa_presenca_geral = presentes/(presentes+ausentes). Taxa 30d considera janela dos últimos N dias corridos a partir da maior data disponível; se <5 aulas no período, marcar taxa_presenca_30d como "indisponivel" e não ativar gatilho de taxa.
- Padrões por dia da semana: para cada weekday, calcular razao_ausencia = ausencias/(ausencias+presencas). Destacar se ausencias >= min_ocorrencias_padrao_semana e razao_ausencia >= razao_min_padrao_semana.
- Padrões por disciplina: mesmo critério de destaque usando min_ocorrencias_padrao_disciplina e razao_min_padrao_disciplina; ignorar disciplina_id nula.
- Tendência 14d: comparar taxa de presença dos últimos 7 dias vs. 8-14 dias anteriores; se queda >10 p.p. -> 'aumento' de ausências; se variação entre -10 e +10 p.p. -> 'estavel'; se melhora >10 p.p. -> 'queda'. Se aulas insuficientes (<3 em qualquer janela), 'indisponivel'.
- Gatilhos: ativar quando (i) ausencias_consecutivas_atual >= limiar_ausencias_consecutivas; (ii) taxa_presenca_30d != 'indisponivel' e < taxa_presenca_minima; (iii) existe algum padrao_semana/dia com destaque=true; (iv) existe padrao_disciplina com destaque=true; (v) tendencia_14d == 'aumento'.
- Score de risco (0-100): normalizar componentes: C1= min(1, ausencias_consecutivas_atual/limiar_ausencias_consecutivas); C2= se taxa_presenca_30d indisponivel, usar 0; senão C2= max(0, (taxa_presenca_minima - taxa_presenca_30d)/taxa_presenca_minima); C3= min(1, 0.25*Q) onde Q = quantidade de padrões destacados (semana+disciplina). score = 100*(w1*C1 + w2*C2 + w3*C3) com pesos de configuracoes.pesos_risco.
- Nível de risco: critico se score>=80 ou ausencias_consecutivas_atual >= limiar_ausencias_consecutivas+2; alto se score>=60; medio se score>=35; senão baixo.
- Período de análise: inicio=min(data) e fim=max(data) dos registros do aluno.
# 4. Exemplo de Output que você deve produzir
JSON com analise_por_aluno: [ { aluno_id, periodo_analise: {inicio, fim}, total_aulas, total_presentes, total_ausentes, total_justificados, taxa_presenca_geral, taxa_presenca_30d, ausencias_consecutivas_atual, ausencias_consecutivas_max, padroes_semana: [{weekday, ausencias, presencas, razao_ausencia, destaque (bool)}], padroes_disciplina: [{disciplina_id, ausencias, presencas, razao_ausencia, destaque (bool)}], tendencia_14d: ('aumento'|'estavel'|'queda'|"indisponivel"), gatilhos_ativados: ["consecutivas>=N", "taxa30d 2.3 Configurações do Agente
2.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente deve ser acionado automaticamente após a conclusão do agente anterior (RF 1).
- Tipo do input: Este agente deve ser apto a receber como input um arquivo JSON contendo registros de frequência normalizados.
-
Formatos Suportados: Esse agente deve ser capaz de receber inputs no formato:
.json. - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de até 50.000 caracteres.
2.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON contendo a análise detalhada por aluno, incluindo métricas de frequência e padrões de absenteísmo identificados.
-
Exemplo de Estrutura de Output:
{ "analise_por_aluno": [ { "aluno_id": "12345", "periodo_analise": { "inicio": "2025-08-01", "fim": "2025-08-12" }, "total_aulas": 10, "total_presentes": 7, "total_ausentes": 3, "total_justificados": 0, "taxa_presenca_geral": 0.7, "taxa_presenca_30d": "indisponivel", "ausencias_consecutivas_atual": 2, "ausencias_consecutivas_max": 3, "padroes_semana": [ {"weekday": 2, "ausencias": 2, "presencas": 2, "razao_ausencia": 0.5, "destaque": true} ], "padroes_disciplina": [], "tendencia_14d": "estavel", "gatilhos_ativados": ["consecutivas>=N"], "score_risco": 65, "nivel_risco": "alto" } ] } - Número de caracteres esperado: O JSON gerado terá um tamanho aproximado de 5.000 caracteres, dependendo do número de alunos e registros analisados.
2.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
2.3.4 Ferramentas do Agente
- Documentos: Não consulta documentos externos.
- Calculadora: Utiliza lógica interna para cálculos de métricas de frequência.
- Busca Online: Não utiliza.
- Sistemas Externos: Não se conecta a sistemas externos.
2.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta gerada por este agente deve ser visível para o Agente de Geração de Alertas para Secretaria Acadêmica (RF 3).
2.3.6 Regras de Orquestração e Transição
Ao concluir sua execução, esse agente aciona o Agente de Geração de Alertas para Secretaria Acadêmica (RF 3).
RF 3. Agente de Geração de Alertas para Secretaria Acadêmica
3.1 Tarefa do Agente
Transformar achados analíticos em alertas estruturados e acionáveis para a secretaria.
3.2 Prompt ou Instruções do Agente
# 1. Contexto e explicações sobre inputs iniciais
Você está recebendo um JSON com a análise detalhada de frequência por aluno. Este arquivo foi gerado pelo agente anterior e contém insights sobre padrões de absenteísmo.
# 2. Objetivo
Transformar esses achados em alertas estruturados e acionáveis para a secretaria acadêmica, permitindo uma intervenção adequada.
# 3. Regras que você deve seguir para gerar sua resposta
- Critérios de disparo: gerar alertas apenas para alunos cujo nivel_risco esteja em disparar_para_niveis. Incluir motivos coerentes com gatilhos_ativados: 'consecutivas', 'baixa_taxa', 'padrao_semana', 'padrao_disciplina', 'tendencia'.
- Cooldown: se existir alerta recente (informado em tabela_cooldown de entrada, quando houver) e data atual < cooldown_ate, marcar pode_enviar=false e manter resumo atualizado, ajustando cooldown_ate = ultimo_alerta_em + cooldown_dias_por_aluno.
- Reincidência/Escalonamento: se um aluno acumular reincidencia_alto_para_critico_em alertas 'alto' dentro de 30 dias, elevar nivel_severidade para 'critico'.
- Composição do resumo: padrão 'Aluno {aluno_id}: {motivo_principal} (risco {nivel_risco}, consecutivas={N}, taxa30d={pct}%)'. Motivo principal por prioridade: consecutivas > baixa_taxa > padrao_semana > padrao_disciplina > tendencia.
- Recomendações: mapear por severidade: critico -> 'agendar_acolhimento'; alto -> 'contato_responsavel'; medio -> 'monitorar'; baixo -> 'monitorar'. Se padrao_disciplina destacado, sugerir 'intervencao_pedagogica'.
- Privacidade: se dados_minimos_para_privacidade=true, incluir em payload_minimo_privacidade apenas campos estritamente necessários (aluno_id, nivel_severidade, motivos, periodo). Não incluir dados sensíveis nem notas.
- Canal sugerido: preferir 'sistema'; usar 'email' se pode_enviar=true e nivel_severidade in ['alto','critico'] e canais_sugeridos inclui 'email'.
- Consistência: alert_id deve ser único por execução (ex.: concatenar aluno_id e timestamp).
# 4. Exemplo de Output que você deve produzir
JSON com alerts: [ { alert_id, aluno_id, nivel_severidade, motivos: [codes], resumo, detalhes: {metricas_chave: {...}, periodo:{inicio,fim}}, recomendacao_acao: ('contato_responsavel'|'agendar_acolhimento'|'intervencao_pedagogica'|'monitorar'), canal_sugerido, cooldown_ate (YYYY-MM-DD), pode_enviar (bool), rationale, payload_minimo_privacidade: {aluno_id, nivel_severidade, motivos, periodo} } ... ], tabela_cooldown: [{aluno_id, ultimo_alerta_em, cooldown_ate}] 3.3 Configurações do Agente
3.3.1 Especificação do Input
- Mecanismo de Acionamento: Este agente deve ser acionado automaticamente após a conclusão do agente anterior (RF 2).
- Tipo do input: Este agente deve ser apto a receber como input um arquivo JSON contendo a análise detalhada por aluno.
-
Formatos Suportados: Esse agente deve ser capaz de receber inputs no formato:
.json. - Número de caracteres esperado: Este agente deve ter capacidade para processar um input de até 30.000 caracteres.
3.3.2 Especificação do Output
- Formato de output: O output deve ser um arquivo no formato JSON contendo alertas estruturados e acionáveis para a secretaria acadêmica.
-
Exemplo de Estrutura de Output:
{ "alerts": [ { "alert_id": "12345-20250812", "aluno_id": "12345", "nivel_severidade": "alto", "motivos": ["consecutivas"], "resumo": "Aluno 12345: consecutivas (risco alto, consecutivas=2, taxa30d=indisponivel%)", "detalhes": { "metricas_chave": {}, "periodo": {"inicio": "2025-08-01", "fim": "2025-08-12"} }, "recomendacao_acao": "contato_responsavel", "canal_sugerido": "sistema", "cooldown_ate": "2025-08-19", "pode_enviar": true, "rationale": "", "payload_minimo_privacidade": {"aluno_id": "12345", "nivel_severidade": "alto", "motivos": ["consecutivas"], "periodo": {"inicio": "2025-08-01", "fim": "2025-08-12"}} } ], "tabela_cooldown": [ {"aluno_id": "12345", "ultimo_alerta_em": "2025-08-12", "cooldown_ate": "2025-08-19"} ] } - Número de caracteres esperado: O JSON gerado terá um tamanho aproximado de 4.000 caracteres, dependendo do número de alertas gerados.
3.3.3 Parâmetros de Geração
- Modelo: GPT-5
- Temperatura: 0.6
3.3.4 Ferramentas do Agente
- Documentos: Não consulta documentos externos.
- Calculadora: Utiliza lógica interna para cálculos de métricas de frequência.
- Busca Online: Não utiliza.
- Sistemas Externos: Não se conecta a sistemas externos.
3.3.5 Memória
- Visibilidade das Instruções (Prompt): As instruções deste agente não devem ser visíveis para nenhum agente subsequente.
- Visibilidade da Resposta: A resposta gerada por este agente é o resultado final e deve ser disponibilizada para a secretaria acadêmica.
3.3.6 Regras de Orquestração e Transição
A execução deste agente finaliza o fluxo. Os alertas gerados são o resultado que deve ser disponibilizado à secretaria acadêmica.