transmitirDeclaracao method

Future<TransmitirDeclaracaoDctfResponse> transmitirDeclaracao({
  1. String? contribuinteNumero,
  2. required CategoriaDctf categoria,
  3. required String anoPA,
  4. String? mesPA,
  5. String? diaPA,
  6. String? numProcReclamatoria,
  7. required String xmlAssinadoBase64,
  8. String? contratanteNumero,
  9. String? autorPedidoDadosNumero,
})

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);
}