Radar IA 20 de outubro de 2026
✨ IA MÁGICA Agentes · Modelos · Automação
ÚLTIMAS
Automação e Ferramentas

Alertas de prazo de contratos com IA e Google Agenda

Extraia vigência, renovação, aviso prévio e reajuste dos PDFs com IA, confira na planilha e crie alertas de 60, 30 e 7 dias no Google Agenda com Apps Script.

Alertas de prazo de contratos com IA e Google Agenda
Imagem: capa editorial — Automação e Ferramentas

Para não perder o prazo de aviso de rescisão, a renovação automática ou a data de reajuste de um contrato, a combinação que funciona em pequena empresa é simples: a IA lê os PDFs do Drive e devolve as datas e cláusulas num formato fixo (JSON), essas informações vão para uma planilha, uma pessoa confere cada data contra o contrato e só então um Apps Script cria os eventos no Google Agenda, com alertas antecipados de 60, 30 e 7 dias e, se quiser, um e-mail.

A IA poupa a leitura, não decide prazo: a data que vai para a agenda é sempre a conferida por alguém, com o trecho do contrato ao lado.

Resumo rápido

  • Extraia de cada contrato: fim da vigência, renovação automática, aviso prévio (em dias e se são corridos ou úteis), índice e data de reajuste, sempre com o trecho e a página de origem.
  • Peça saída estruturada com JSON Schema e permita o valor nulo: “não encontrado” é uma resposta válida e muito melhor que uma data inventada.
  • Nenhuma linha vira evento sem a coluna “conferido” marcada por uma pessoa.
  • Lembretes de um evento do Google Agenda vão de 5 minutos a 4 semanas de antecedência; para avisar com 60 dias, crie eventos de alerta separados.
  • Um gatilho diário do Apps Script processa só as linhas novas e grava o ID dos eventos para não duplicar.

Por que contrato esquecido custa caro

O risco está menos na data de término e mais na data em que você ainda podia agir. Um contrato de software com renovação automática anual e aviso prévio de 90 dias, por exemplo, exige que a notificação saia três meses antes do fim da vigência. Quem anota só o vencimento descobre o problema quando a renovação já aconteceu.

O mesmo vale para reajuste: saber o mês e o índice permite renegociar antes da cobrança chegar.

O Código Civil ajuda a entender a mecânica. O art. 473 diz que a resilição unilateral, quando a lei permite, “opera mediante denúncia notificada à outra parte”. Ou seja, encerrar depende de uma notificação, e o contrato costuma fixar com quanta antecedência ela deve ser feita. O art. 132 traz a regra geral de contagem: exclui-se o dia do começo e inclui-se o do vencimento; se o vencimento cair em feriado, prorroga-se até o dia útil seguinte; prazos em meses e anos expiram no dia de igual número do início. São regras gerais, que o contrato ou lei específica podem alterar; na dúvida, consulte um advogado.

O que extrair de cada contrato

Defina os campos antes de abrir qualquer ferramenta. A tabela serve para prestação de serviço, locação e software.

Campo Exemplo de valor O que a pessoa confere
Contraparte Nome do fornecedor ou locador Se bate com a primeira página e com a assinatura
Início e fim da vigência 2026-03-01 a 2027-02-28 Se há aditivo que mudou o prazo
Renovação automática sim / não / não encontrado Se a cláusula fala em renovação tácita, por igual período, ou só por aditivo
Aviso prévio para não renovar ou rescindir 90 dias Se são dias corridos ou úteis e a partir de que data contam
Data-limite do aviso Calculada a partir dos campos acima Cálculo manual, de preferência por duas pessoas na primeira vez
Índice e data de reajuste IPCA, a cada 12 meses do início Se há índice substituto e se a data é aniversário do contrato ou outra
Trecho e página “Cláusula 12.1, p. 4” Se o trecho citado existe e diz o que a IA resumiu

Dias corridos versus úteis é a fonte de erro mais traiçoeira. Antes de confiar em cálculo automático, aplique o teste do nosso guia sobre interpretação de prazos em dias úteis e corridos. Se você contar dias úteis, também vai precisar de uma tabela de feriados, inclusive municipais, como explicamos em calendários de feriados para automações.

Extração com IA e saída estruturada

A API do Gemini lê PDF diretamente. Pela documentação do Google, cada página é processada como imagem e o limite é de 50 MB ou 1.000 páginas por arquivo, com cerca de 258 tokens por página. Isso cobre com folga contratos de pequena empresa, inclusive escaneados, desde que a digitalização esteja legível e na orientação correta. Veja o panorama de ferramentas em nossa página de integrações do Google Gemini.

O ponto central é pedir saída estruturada: você envia um JSON Schema e o modelo responde num JSON que segue esse formato. A documentação de structured output do Gemini aceita tipos como string, integer e boolean, listas de valores permitidos (enum), o formato date para textos de data e campos que podem ser nulos (incluindo "null" no tipo). Um esquema enxuto para este caso:

{
  "type": "object",
  "properties": {
    "contraparte": {"type": "string"},
    "fim_vigencia": {"type": ["string", "null"], "format": "date"},
    "renovacao_automatica": {"type": "string", "enum": ["sim", "nao", "nao_encontrado"]},
    "aviso_previo_dias": {"type": ["integer", "null"]},
    "tipo_dias_aviso": {"type": "string", "enum": ["corridos", "uteis", "nao_especificado"]},
    "indice_reajuste": {"type": ["string", "null"]},
    "trechos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "campo": {"type": "string"},
          "pagina": {"type": ["integer", "null"]},
          "texto_literal": {"type": "string"}
        }
      }
    }
  },
  "required": ["contraparte", "fim_vigencia", "renovacao_automatica",
               "aviso_previo_dias", "tipo_dias_aviso", "trechos"]
}

No prompt, peça: “se a informação não estiver no documento, responda null; não deduza”, “copie o trecho literal e a página de cada campo” e “não calcule a data-limite do aviso” (esse cálculo fica na planilha, onde é auditável).

A própria documentação do Google avisa que o JSON sai sintaticamente correto, mas os valores precisam ser validados pela aplicação. Um esquema garante o formato, não a verdade.

Cuidado com os dados enviados

Contratos têm nomes, CPFs e valores. Nos termos da API do Gemini, o conteúdo enviado aos serviços não pagos pode ser usado para melhorar produtos do Google e lido por revisores humanos, e os termos pedem que não se envie informação pessoal ou confidencial a eles. Nos serviços pagos, o Google afirma não usar prompts e respostas para melhorar produtos. Para contratos reais, use conta com faturamento ativo e registre a escolha na sua avaliação de LGPD.

A planilha de conferência

O resultado de cada extração vira uma linha numa planilha Google com o nome “Contratos”. Sugestão de colunas, na ordem que o script abaixo espera:

  1. A: arquivo (link do PDF no Drive)
  2. B: contraparte
  3. C: fim da vigência
  4. D: renovação automática
  5. E: aviso prévio (dias)
  6. F: data-limite do aviso (preenchida ou confirmada pela pessoa)
  7. G: índice de reajuste
  8. H: data do próximo reajuste
  9. I: trecho e página
  10. J: conferido (SIM quando a pessoa validar)
  11. K: eventos criados (preenchida pelo script)

A coluna F é a que importa. Em dias corridos, =C2-E2 dá um primeiro valor, mas alguns contratos contam o aviso a partir do recebimento da notificação. Confira o campo F com o PDF aberto ao lado.

Se você também quer revisar o que entra nos contratos com fornecedores de tecnologia, o guia de cláusulas essenciais em contratos com fornecedores de IA complementa este processo.

Lembretes do Google Agenda: o limite de 4 semanas

Aqui está o detalhe que derruba muitos desenhos. Na referência do Apps Script, os métodos addPopupReminder e addEmailReminder aceitam antecedência mínima de 5 minutos e máxima de 4 semanas (40.320 minutos). A documentação de addEmailReminder também indica erro quando o evento passa de 5 lembretes. Um lembrete de 60 dias no próprio evento, portanto, não existe.

Forma de alertar Antecedência possível Quando usar
Lembrete no evento da data-limite De 5 minutos a 4 semanas Alerta final, de 7 ou 14 dias
Eventos de alerta separados (D-60, D-30, D-7) Qualquer uma, pois cada alerta é um evento próprio Avisos longos, visíveis na agenda compartilhada da equipe
E-mail pelo Apps Script (MailApp) Definida pelo seu script Resumo semanal para o responsável, com links dos contratos

O desenho recomendado combina os três: um evento de dia inteiro na data-limite do aviso, com lembrete de 7 dias; eventos separados 60 e 30 dias antes; e, opcionalmente, um e-mail. Use uma agenda própria (“Prazos de contratos”) compartilhada com quem decide.

O Apps Script passo a passo

Na planilha, abra Extensões > Apps Script e cole o código. Troque ID_AGENDA pelo ID da agenda de prazos (fica nas configurações da agenda, em “Integrar agenda”).

const ID_AGENDA = 'COLE_AQUI_O_ID_DA_AGENDA';
const ALERTAS_DIAS = [60, 30, 7];
const FUSO = 'America/Sao_Paulo';

function criarAlertas() {
  const aba = SpreadsheetApp.getActive().getSheetByName('Contratos');
  const dados = aba.getDataRange().getValues();
  const agenda = CalendarApp.getCalendarById(ID_AGENDA);
  const hoje = new Date();

  for (let i = 1; i < dados.length; i++) {
    const [arquivo, parte, fim, renova, aviso, limite, indice, reajuste, trecho, conferido, criados] = dados[i];
    if (conferido !== 'SIM' || criados) continue;
    if (!(limite instanceof Date)) continue;

    const dataLimite = Utilities.formatDate(limite, FUSO, 'dd/MM/yyyy');
    const descricao = 'Contrato: ' + arquivo +
      'nLimite para enviar aviso: ' + dataLimite +
      'nRenovação automática: ' + renova +
      'nTrecho: ' + trecho;
    const ids = [];

    ALERTAS_DIAS.forEach(function (d) {
      const dia = new Date(limite.getTime());
      dia.setDate(dia.getDate() - d);
      if (dia < hoje) return;
      const ev = agenda.createAllDayEvent(
        'Faltam ' + d + ' dias: aviso do contrato ' + parte, dia, {description: descricao});
      ev.setTag('contrato', String(arquivo));
      ids.push(ev.getId());
    });

    // Para o reajuste (coluna H), repita o bloco abaixo com a data de reajuste.
    const final = agenda.createAllDayEvent(
      'PRAZO FINAL do aviso: ' + parte, limite, {description: descricao});
    final.addPopupReminder(7 * 24 * 60);
    final.setTag('contrato', String(arquivo));
    ids.push(final.getId());

    aba.getRange(i + 1, 11).setValue(ids.join(','));
  }
}

function instalarGatilho() {
  ScriptApp.newTrigger('criarAlertas')
    .timeBased().everyDays(1).atHour(7).inTimezone(FUSO).create();
}

Rode instalarGatilho uma única vez; o Google pedirá autorização para acessar planilha e agenda. A partir daí, o script roda todo dia por volta das 7h. A documentação explica que o horário de gatilhos de tempo é levemente aleatorizado dentro da hora escolhida, então não conte com o minuto exato.

O controle de duplicidade está na coluna K: linha com IDs gravados é ignorada. Se a data mudar por aditivo, apague os eventos antigos (o ID está na planilha, e CalendarApp.getEventById recupera cada um), limpe a coluna K, corrija a data e marque de novo como conferido. A tag contrato gravada em cada evento ajuda a localizar o que pertence a qual arquivo.

Cotas que valem para pequena empresa

A página de cotas do Apps Script informa, para contas pessoais (gmail.com) e Google Workspace respectivamente: 5.000 e 10.000 eventos de agenda criados por dia, 100 e 1.500 destinatários de e-mail por dia, 90 minutos e 6 horas de execução total de gatilhos por dia, e 6 minutos por execução. Para algumas dezenas de contratos, nada disso aperta; numa conta pessoal, prefira um resumo semanal único a um e-mail por contrato.

Exemplo: distribuidora em Belo Horizonte

Uma distribuidora de produtos de limpeza em Belo Horizonte guarda no Drive os contratos de aluguel do galpão, sistema de gestão, locação de empilhadeira e manutenção. A sócia responsável pelo financeiro quer saber, com antecedência, quando precisa decidir se renova cada um.

O auxiliar administrativo envia os PDFs para extração com o esquema acima e cola os resultados na planilha “Contratos”. O contrato do sistema de gestão volta com renovação automática “sim”, aviso prévio de 60 dias e “tipo_dias_aviso” igual a “corridos”, com o trecho da cláusula. O da empilhadeira volta com aviso prévio nulo: a IA não encontrou a cláusula, e o auxiliar descobre que o prazo está num aditivo separado, que não estava na pasta. Esse é o caso em que a saída nula salvou a conferência: com uma data inventada, ninguém teria procurado o aditivo.

A sócia confere a coluna F de cada linha com o PDF aberto e marca SIM. No dia seguinte, a agenda “Prazos de contratos” mostra os alertas de 60, 30 e 7 dias, com o trecho da cláusula na descrição.

Erros comuns

  • Criar eventos direto da saída da IA. A conferência humana não é etapa opcional. Sem a coluna “conferido”, um erro de leitura vira compromisso na agenda com aparência de verdade.
  • Anotar o fim da vigência em vez da data-limite do aviso. O alerta útil é o da última data em que você ainda pode notificar.
  • Tentar um lembrete de 60 dias no evento. O limite é de 4 semanas; use eventos de alerta separados.
  • Ignorar aditivos. Um aditivo pode mudar vigência, índice ou aviso prévio. Mantenha aditivos na mesma pasta e informe ao modelo que eles prevalecem sobre o contrato original.
  • Misturar dias úteis e corridos. Registre o tipo de dia na planilha e não deixe uma fórmula de dias corridos tratar um prazo em dias úteis.

Perguntas frequentes

Preciso saber programar para montar esse fluxo?

Para a agenda, basta colar o script, trocar o ID e autorizar. A extração pode ser feita arquivo por arquivo numa ferramenta de chat com o Gemini, colando o resultado na planilha.

A IA consegue calcular sozinha a data-limite do aviso?

Consegue tentar, mas não deve ser a fonte final: o cálculo depende de dias úteis, feriados e do marco inicial. Deixe-o visível na planilha e confira.

Funciona com contrato escaneado?

Sim, a API do Gemini processa páginas de PDF como imagem. A documentação recomenda páginas na orientação correta e sem desfoque. Digitalização ruim aumenta o risco de data lida errado.

O que acontece se eu editar a data depois que os eventos forem criados?

Nada muda sozinho, porque a linha já tem IDs na coluna K. Apague os eventos antigos, limpe a coluna K e marque a linha como conferida de novo para o script recriar os alertas.

Fontes e leitura recomendada

Sobre

A Redação IA Mágica é formada por especialistas e pesquisadores em inteligência artificial aplicada, agentes autônomos, automações no-code/pro-code e grandes modelos de linguagem (LLMs). Nossos conteúdos cobrem implementações reais, análises e tutoriais aprofundados para profissionais e empresas.