aguardarEncerramento method

Future<ConsultarSituacaoEncerramentoResponse> aguardarEncerramento({
  1. String? contribuinteNumero,
  2. required String protocoloEncerramento,
  3. int timeoutSegundos = 300,
  4. int intervaloConsulta = 10,
  5. String? contratanteNumero,
  6. String? autorPedidoDadosNumero,
})

Aguarda o encerramento de uma apuração com polling

contribuinteNumero CNPJ do contribuinte protocoloEncerramento Protocolo de encerramento timeoutSegundos Timeout em segundos (padrão: 300) intervaloConsulta Intervalo entre consultas em segundos (padrão: 10) contratanteNumero CNPJ do contratante (opcional) autorPedidoDadosNumero CNPJ do autor do pedido (opcional)

Implementation

Future<ConsultarSituacaoEncerramentoResponse> aguardarEncerramento({
  String? contribuinteNumero,
  required String protocoloEncerramento,
  int timeoutSegundos = 300,
  int intervaloConsulta = 10,
  String? contratanteNumero,
  String? autorPedidoDadosNumero,
}) async {
  final inicio = DateTime.now();
  final timeout = Duration(seconds: timeoutSegundos);

  while (DateTime.now().difference(inicio) < timeout) {
    final response = await consultarSituacaoEncerramento(
      contribuinteNumero: contribuinteNumero,
      protocoloEncerramento: protocoloEncerramento,
      contratanteNumero: contratanteNumero,
      autorPedidoDadosNumero: autorPedidoDadosNumero,
    );

    // Se o encerramento foi concluído (sucesso ou erro)
    if (response.encerramentoConcluido || response.sucesso) {
      return response;
    }

    // Aguardar antes da próxima consulta
    await Future.delayed(Duration(seconds: intervaloConsulta));
  }

  // Timeout - retorna a última resposta
  return await consultarSituacaoEncerramento(
    contribuinteNumero: contribuinteNumero,
    protocoloEncerramento: protocoloEncerramento,
    contratanteNumero: contratanteNumero,
    autorPedidoDadosNumero: autorPedidoDadosNumero,
  );
}