consultarUltimaDeclaracaoComPagamento method
Consultar última declaração com informação de pagamento do DAS
Combina a consulta da última declaração (CONSULTIMADECREC14) com consulta de declarações para obter status de pagamento do DAS.
Este método executa duas operações:
- Consulta a última declaração do período (PDFs e detalhes)
- Consulta as declarações do ano para obter status de pagamento do DAS
contribuinteNumero CNPJ do contribuinte
periodoApuracao Período de apuração (formato: AAAAMM, exemplo: "202504")
contratanteNumero CNPJ do contratante (opcional, usa dados da autenticação se não informado)
autorPedidoDadosNumero CPF/CNPJ do autor do pedido (opcional, usa dados da autenticação se não informado)
Returns: ConsultarUltimaDeclaracaoComPagamentoResponse com todos os dados da declaração
mais o campo adicional dasPago indicando se o DAS foi pago.
O campo dasPago:
true: DAS foi pago OU não foi encontrado DAS para o período (assume pago)false: DAS existe e não consta pagamento
Throws: Exception se a consulta da última declaração falhar
Exemplo:
final resultado = await pgdasdService.consultarUltimaDeclaracaoComPagamento(
contribuinteNumero: '12345678000100',
periodoApuracao: '202504',
);
print('Número: ${resultado.dados?.numeroDeclaracao}');
print('DAS Pago: ${resultado.dasPago ? "Sim" : "Não"}');
Implementation
Future<ConsultarUltimaDeclaracaoComPagamentoResponse>
consultarUltimaDeclaracaoComPagamento({
String? contribuinteNumero,
required String periodoApuracao,
String? contratanteNumero,
String? autorPedidoDadosNumero,
}) async {
// Passo 1: Consultar última declaração
final ultimaDeclaracaoResponse = await consultarUltimaDeclaracao(
contribuinteNumero: contribuinteNumero,
periodoApuracao: periodoApuracao,
contratanteNumero: contratanteNumero,
autorPedidoDadosNumero: autorPedidoDadosNumero,
);
// Passo 2: Extrair ano calendário do período (primeiros 4 dígitos)
final anoCalendario = periodoApuracao.substring(0, 4);
// Passo 3: Consultar declarações para obter status de pagamento
bool dasPago = true; // Default: assume pago
String? alertaPagamento;
try {
final declaracoesResponse = await consultarDeclaracoes(
contribuinteNumero: contribuinteNumero,
anoCalendario: anoCalendario,
contratanteNumero: contratanteNumero,
autorPedidoDadosNumero: autorPedidoDadosNumero,
);
// Passo 4: Procurar período correspondente e extrair dasPago + coletar pendências do ano
if (declaracoesResponse.sucesso && declaracoesResponse.dados != null) {
final periodoInt = int.parse(periodoApuracao);
final pendenciasNoAno = <String>[];
// Iterar pelos períodos do ano
for (final periodo in declaracoesResponse.dados!.listaPeriodos) {
bool periodoTemPendente = false;
// Verificar se qualquer operação do período possui um DAS não pago
for (final operacao in periodo.operacoes) {
if (operacao.indiceDas != null && !operacao.indiceDas!.dasPago) {
periodoTemPendente = true;
// Se for o mês solicitado, atualiza o status principal
if (periodo.periodoApuracao == periodoInt) {
dasPago = false;
}
break;
}
}
if (periodoTemPendente) {
// Formatar período de AAAAMM para MM/AAAA
final paStr = periodo.periodoApuracao.toString();
if (paStr.length == 6) {
final mes = paStr.substring(4, 6);
final ano = paStr.substring(0, 4);
pendenciasNoAno.add('$mes/$ano');
}
}
}
if (pendenciasNoAno.isNotEmpty) {
alertaPagamento =
'Atenção: Constam guias em aberto para os meses: ${pendenciasNoAno.join(', ')}';
}
}
} catch (e) {
// Se falhar ao consultar declarações, mantém default dasPago = true
// Não falha o método composto, apenas usa o valor padrão
}
// Passo 5: Criar resposta composta
return ConsultarUltimaDeclaracaoComPagamentoResponse.fromBase(
baseResponse: ultimaDeclaracaoResponse,
dasPago: dasPago,
alertaPagamento: alertaPagamento,
);
}