entregarDeclaracaoComDas method
Entregar declaração e gerar DAS automaticamente
Combina a entrega de declaração (TRANSDECLARACAO11) com geração automática do DAS (GERARDAS12) após sucesso.
Este método executa duas operações em sequência:
- Transmite a declaração para a RFB
- Se a declaração for bem-sucedida, gera o DAS automaticamente
cnpj CNPJ do contribuinte (14 dígitos sem formatação)
periodoApuracao Período de apuração da declaração (formato: AAAAMM, exemplo: 202504)
declaracao Objeto contendo os dados da declaração
indicadorTransmissao Indica se a declaração deve ser transmitida (padrão: true)
indicadorComparacao Indica se há necessidade de comparação dos valores (padrão: true)
valoresParaComparacao Valores para comparação com o valor apurado pelo sistema (opcional)
dataConsolidacao Data de consolidação futura para o DAS (opcional, formato: AAAAMMDD)
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: EntregarDeclaracaoComDasResponse com dados combinados de ambas operações
Comportamento em caso de erros:
- Se a declaração falhar: Retorna erro imediatamente, não tenta gerar DAS
- Se o DAS falhar: Retorna erro MAS preserva os dados da declaração
A resposta contém getters úteis:
sucesso: true se ambas operações foram bem-sucedidasdeclaracaoEntregue: true se a declaração foi transmitidadasGerado: true se o DAS foi gerado
IMPORTANTE: Se o DAS falhar mas a declaração foi entregue, você pode
gerar o DAS manualmente usando o método gerarDas() com o período
da declaração. O ID da declaração estará disponível em dadosDeclaracao.
Exemplo:
final resultado = await pgdasdService.entregarDeclaracaoComDas(
cnpj: '12345678000100',
periodoApuracao: 202504,
declaracao: declaracao,
autorPedidoDadosNumero: '12345678000100',
);
if (resultado.sucesso) {
print('✅ Declaração e DAS gerados!');
print('ID: ${resultado.dadosDeclaracao!.idDeclaracao}');
print('DAS: ${resultado.dadosDas![0].detalhamento.numeroDocumento}');
} else if (resultado.declaracaoEntregue) {
print('⚠️ Declaração OK, mas DAS falhou');
print('Tente gerar DAS manualmente');
} else {
print('❌ Erro ao entregar declaração');
}
Implementation
Future<EntregarDeclaracaoComDasResponse> entregarDeclaracaoComDas({
String? cnpj,
required int periodoApuracao,
required Declaracao declaracao,
bool indicadorTransmissao = true,
bool indicadorComparacao = true,
List<ValorDevido>? valoresParaComparacao,
String? dataConsolidacao,
String? contratanteNumero,
String? autorPedidoDadosNumero,
}) async {
// Passo 1: Entregar declaração usando o método refatorado
final entregarResponse = await entregarDeclaracao(
cnpj: cnpj,
periodoApuracao: periodoApuracao,
declaracao: declaracao,
indicadorTransmissao: indicadorTransmissao,
indicadorComparacao: indicadorComparacao,
valoresParaComparacao: valoresParaComparacao,
contratanteNumero: contratanteNumero,
autorPedidoDadosNumero: autorPedidoDadosNumero,
);
// Passo 2: Verificar se a declaração foi bem-sucedida
if (!entregarResponse.sucesso) {
// Declaração falhou, retornar erro imediatamente
return EntregarDeclaracaoComDasResponse.fromDeclaracaoError(
declaracaoResponse: entregarResponse,
);
}
// Passo 3: Converter período de apuração (int → String)
final periodoApuracaoString = periodoApuracao.toString();
// Passo 4: Tentar gerar DAS
try {
final gerarDasResponse = await gerarDas(
contribuinteNumero: cnpj,
periodoApuracao: periodoApuracaoString,
dataConsolidacao: dataConsolidacao,
contratanteNumero: contratanteNumero,
autorPedidoDadosNumero: autorPedidoDadosNumero,
);
// Passo 5a: Verificar se DAS foi gerado com sucesso
if (!gerarDasResponse.sucesso) {
// DAS falhou, mas declaração foi entregue
return EntregarDeclaracaoComDasResponse.fromDasError(
declaracaoResponse: entregarResponse,
dasResponse: gerarDasResponse,
);
}
// Passo 5b: Ambas operações bem-sucedidas
return EntregarDeclaracaoComDasResponse.fromResponses(
declaracaoResponse: entregarResponse,
dasResponse: gerarDasResponse,
);
} catch (e) {
// DAS lançou exception, criar resposta de erro artificial
final gerarDasResponseErro = GerarDasResponse(
status: 500,
mensagens: [
gerar_das_models.Mensagem(
codigo: 'ERRO_GERACAO_DAS',
texto: 'Erro ao gerar DAS: ${e.toString()}',
),
],
dados: null,
);
return EntregarDeclaracaoComDasResponse.fromDasError(
declaracaoResponse: entregarResponse,
dasResponse: gerarDasResponseErro,
);
}
}