DetalheMensagemCompleta.fromJson constructor

DetalheMensagemCompleta.fromJson(
  1. Map<String, dynamic> json
)

Implementation

factory DetalheMensagemCompleta.fromJson(Map<String, dynamic> json) {
  // Processar assuntoModelo substituindo ++VARIAVEL++ por valorParametroAssunto
  final assuntoModeloOriginal = json['assuntoModelo']?.toString() ?? '';
  final valorParametroAssunto =
      json['valorParametroAssunto']?.toString() ?? '';
  final assuntoModeloProcessado = valorParametroAssunto.isEmpty
      ? assuntoModeloOriginal
      : assuntoModeloOriginal.replaceAll(
          '++VARIAVEL++',
          valorParametroAssunto,
        );

  // Processar corpoModelo substituindo ++1++, ++2++, etc. pelos valores de variaveis
  final corpoModeloOriginal = json['corpoModelo']?.toString() ?? '';
  final variaveis = (json['variaveis'] as List<dynamic>? ?? [])
      .map((e) => e.toString())
      .toList();
  String corpoModeloProcessado = corpoModeloOriginal;
  if (variaveis.isNotEmpty) {
    for (int i = 0; i < variaveis.length; i++) {
      final placeholder = '++${i + 1}++';
      corpoModeloProcessado = corpoModeloProcessado.replaceAll(
        placeholder,
        variaveis[i],
      );
    }
  }

  /// Limpa HTML de uma string
  corpoModeloProcessado = corpoModeloProcessado
      .replaceAll(RegExp(r'<[^>]*>'), '')
      .replaceAll('&nbsp;', ' ')
      .replaceAll('&#160;', ' ')
      .replaceAll('&lt;', '<')
      .replaceAll('&gt;', '>')
      .replaceAll('&quot;', '"')
      .replaceAll('&#39;', "'")
      .replaceAll('&apos;', "'")
      .replaceAll('&aacute;', 'á')
      .replaceAll('&eacute;', 'é')
      .replaceAll('&iacute;', 'í')
      .replaceAll('&oacute;', 'ó')
      .replaceAll('&uacute;', 'ú')
      .replaceAll('&atilde;', 'ã')
      .replaceAll('&otilde;', 'õ')
      .replaceAll('&ccedil;', 'ç')
      .replaceAll('&agrave;', 'à')
      .replaceAll('&acirc;', 'â')
      .replaceAll('&ecirc;', 'ê')
      .replaceAll('&ocirc;', 'ô')
      .replaceAll('&Aacute;', 'Á')
      .replaceAll('&Eacute;', 'É')
      .replaceAll('&Iacute;', 'Í')
      .replaceAll('&Oacute;', 'Ó')
      .replaceAll('&Uacute;', 'Ú')
      .replaceAll('&Atilde;', 'Ã')
      .replaceAll('&Otilde;', 'Õ')
      .replaceAll('&Ccedil;', 'Ç')
      .replaceAll('&Agrave;', 'À')
      .replaceAll('&Acirc;', 'Â')
      .replaceAll('&Ecirc;', 'Ê')
      .replaceAll('&Ocirc;', 'Ô')
      .replaceAll('&ordm;', 'º')
      .replaceAll('&ordf;', 'ª')
      .replaceAll(
        '&amp;',
        '&',
      ) // Deve ser o último para não interferir nas outras entidades
      .replaceAll(RegExp(r'\s+'), ' ')
      .trim();

  // Converter campos numéricos para valores descritivos
  final origemModeloStr = json['origemModelo']?.toString() ?? '';
  final origemModelo = switch (origemModeloStr) {
    '1' => 'Sistema Remetente',
    '2' => 'RFB',
    _ => origemModeloStr,
  };

  final tipoOrigemStr = json['tipoOrigem']?.toString() ?? '';
  final tipoOrigem = switch (tipoOrigemStr) {
    '1' => 'Receita',
    '2' => 'Estado',
    '3' => 'Município',
    _ => tipoOrigemStr,
  };

  final indFavoritoStr = json['indFavorito']?.toString() ?? '0';

  return DetalheMensagemCompleta(
    codigoSistemaRemetente: json['codigoSistemaRemetente']?.toString() ?? '',
    codigoModelo: json['codigoModelo']?.toString() ?? '',
    assuntoModelo: assuntoModeloProcessado,
    origemModelo: origemModelo,
    dataEnvio: json['dataEnvio']?.toString() ?? '',
    valorParametroAssunto: valorParametroAssunto,
    dataLeitura: json['dataLeitura']?.toString() ?? '',
    horaLeitura: json['horaLeitura']?.toString() ?? '',
    dataExpiracao: json['dataExpiracao']?.toString() ?? '',
    numeroControle: json['numeroControle']?.toString() ?? '',
    dataCiencia: json['dataCiencia']?.toString() ?? '',
    enquadramento: json['enquadramento']?.toString() ?? '',
    dataAcessoExterno: json['dataAcessoExterno']?.toString() ?? '',
    horaAcessoExterno: json['horaAcessoExterno']?.toString() ?? '',
    tipoAutenticacaoUsuario:
        json['tipoAutenticacaoUsuario']?.toString() ?? '',
    codigoAcesso: json['codigoAcesso']?.toString() ?? '',
    numeroSerieCertificadoDigital:
        json['numeroSerieCertificadoDigital']?.toString() ?? '',
    emissorCertificadoDigital:
        json['emissorCertificadoDigital']?.toString() ?? '',
    tipoUsuario: json['tipoUsuario']?.toString() ?? '',
    niUsuario: json['niUsuario']?.toString() ?? '',
    papelUsuario: json['papelUsuario']?.toString() ?? '',
    codigoAplicacao: json['codigoAplicacao']?.toString() ?? '',
    tipoOrigem: tipoOrigem,
    descricaoOrigem: json['descricaoOrigem']?.toString() ?? '',
    corpoModelo: corpoModeloProcessado,
    variaveis: variaveis,
    indFavorito: indFavoritoStr == '1',
  );
}