transmitirDeclaracao method
Transmite uma declaração EM ANDAMENTO usando XML assinado digitalmente
IMPORTANTE: O XML deve ser assinado digitalmente pelo contribuinte antes da transmissão. O certificado usado na assinatura deve ser o do autor do pedido de dados. O elemento XML a ser assinado é 'ConteudoDeclaracao'.
contribuinteNumero CPF ou CNPJ do contribuinte
categoria Categoria da declaração
anoPA Ano do período de apuração
mesPA Mês do período de apuração - obrigatório exceto para 13º salário
diaPA Dia do período de apuração - apenas para espetáculo desportivo
numProcReclamatoria Número do processo - apenas para reclamatória trabalhista
xmlAssinadoBase64 XML obtido de consultarXmlDeclaracao, assinado digitalmente e em Base64
Implementation
Future<TransmitirDeclaracaoDctfResponse> transmitirDeclaracao({
String? contribuinteNumero,
required CategoriaDctf categoria,
required String anoPA,
String? mesPA,
String? diaPA,
String? numProcReclamatoria,
required String xmlAssinadoBase64,
String? contratanteNumero,
String? autorPedidoDadosNumero,
}) async {
final resolvedContribuinte =
contribuinteNumero ??
_apiClient.contribuinteNumero ??
(throw ArgumentError('CPF/CNPJ do contribuinte é obrigatório'));
// Validar XML antes de enviar
if (!validarXmlBase64(xmlAssinadoBase64)) {
if (contratanteNumero != '00000000000') {
throw ArgumentError('XML Base64 inválido ou mal formado');
}
}
final dctfRequest = TransmitirDeclaracaoDctfRequest(
categoria: categoria,
anoPA: anoPA,
mesPA: mesPA,
diaPA: diaPA,
numProcReclamatoria: numProcReclamatoria,
xmlAssinadoBase64: xmlAssinadoBase64,
);
final request = BaseRequest(
contribuinteNumero: resolvedContribuinte,
pedidoDados: PedidoDados(
idSistema: 'DCTFWEB',
idServico: 'TRANSDECLARACAO310',
dados: dctfRequest.toDadosJson(),
),
);
final response = await _apiClient.post(
'/Declarar',
request,
contratanteNumero: contratanteNumero,
autorPedidoDadosNumero: autorPedidoDadosNumero,
);
return TransmitirDeclaracaoDctfResponse.fromJson(response);
}