consultarDividaAtiva method

Future<ConsultarDividaAtivaResponse> consultarDividaAtiva({
  1. String? cnpj,
  2. required String anoCalendario,
  3. String? contratanteNumero,
  4. String? autorPedidoDadosNumero,
})

DIVIDAATIVA24 - Consultar Dívida Ativa

Consulta se o contribuinte está em dívida ativa

cnpj CNPJ do contribuinte MEI anoCalendario Ano calendário no formato AAAA contratanteNumero CNPJ da empresa contratante (opcional) autorPedidoDadosNumero CPF/CNPJ do autor (opcional)

Implementation

Future<ConsultarDividaAtivaResponse> consultarDividaAtiva({
  String? cnpj,
  required String anoCalendario,
  String? contratanteNumero,
  String? autorPedidoDadosNumero,
}) async {
  final resolvedCnpj =
      cnpj ??
      _apiClient.contribuinteNumero ??
      (throw ArgumentError('CNPJ do contribuinte é obrigatório'));
  // Validações de entrada
  ValidacoesUtils.validateCNPJ(resolvedCnpj);

  if (anoCalendario.isEmpty) {
    throw ArgumentError('Ano calendário não pode estar vazio');
  }

  // Verifica se tem exatamente 4 caracteres
  if (anoCalendario.length != 4) {
    throw ArgumentError('Ano calendário deve ter formato AAAA');
  }

  // Verifica se são apenas números
  if (!RegExp(r'^\d{4}$').hasMatch(anoCalendario)) {
    throw ArgumentError(
      'Ano calendário deve conter apenas números no formato AAAA',
    );
  }

  // Valida ano (1900-2099)
  final ano = int.parse(anoCalendario);
  if (ano < 1900 || ano > 2099) {
    throw ArgumentError('Ano calendário deve estar entre 1900 e 2099');
  }

  // Verifica se não é ano muito futuro
  final anoAtual = DateTime.now().year;
  if (ano > anoAtual + 1) {
    printW('Aviso: Ano calendário é futuro ($anoCalendario)');
  }

  // Criação dos dados de entrada
  final requestData = ConsultarDividaAtivaRequest(
    anoCalendario: anoCalendario,
  );

  // Montagem da requisição
  final request = BaseRequest(
    contribuinteNumero: resolvedCnpj,
    pedidoDados: PedidoDados(
      idSistema: 'PGMEI',
      idServico: 'DIVIDAATIVA24',
      versaoSistema: '1.0',
      dados: requestData.toJsonString(),
    ),
  );

  // Chamada à API
  final response = await _apiClient.post(
    '/Consultar',
    request,
    contratanteNumero: contratanteNumero,
    autorPedidoDadosNumero: autorPedidoDadosNumero,
  );

  return ConsultarDividaAtivaResponse.fromJson(response);
}