aguardarEncerramento method
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,
);
}