private List<Dados54> getDados54() {
    List<Dados54> ld54 = new ArrayList<>();
    for (EcfNotaEletronica nfe : nfes) {
      try {
        if (nfe.getEcfNotaEletronicaStatus().equals(ENotaStatus.AUTORIZADO.toString())
            || nfe.getEcfNotaEletronicaStatus().equals(ENotaStatus.CANCELADO.toString())) {
          // pega a NFe
          String xml = nfe.getEcfNotaEletronicaXml();
          int I = xml.indexOf("<infNFe");
          int F = xml.indexOf("</NFe>") + 6;
          String texto = "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">" + xml.substring(I, F);
          TNFe tnfe = NFe.xmlToObj(texto, TNFe.class);

          for (TNFe.InfNFe.Det det : tnfe.getInfNFe().getDet()) {
            // encontro o produto
            IFiltro filtro;
            if (det.getProd().getCEAN().equals("")) {
              filtro = new FiltroNumero("prodProdutoId", ECompara.IGUAL, det.getProd().getCProd());
            } else {
              filtro = new FiltroTexto("prodProdutoBarra", ECompara.IGUAL, det.getProd().getCEAN());
            }
            ProdProduto prod = (ProdProduto) service.selecionar(new ProdProduto(), filtro);

            Dados54 d54 = new Dados54();
            d54.setCnpj(nfe.getSisCliente().getSisClienteDoc());
            d54.setModelo(55);
            d54.setSerie(Util.getConfig().get("nfe.serie"));
            d54.setNumero(nfe.getEcfNotaEletronicaNumero());
            d54.setCfop(Integer.valueOf(det.getProd().getCFOP()));
            if (prod.getProdProdutoCstCson().length() == 3) {
              d54.setCst(prod.getProdProdutoCstCson());
            } else {
              d54.setCst(prod.getProdProdutoOrigem() + prod.getProdProdutoCstCson());
            }
            d54.setNumero(Integer.valueOf(det.getNItem()));
            d54.setCodigo(prod.getId() + "");
            d54.setQtd(Double.valueOf(det.getProd().getQCom()));
            d54.setValor(Double.valueOf(det.getProd().getVProd()));
            double desc =
                det.getProd().getVDesc() == null ? 0.00 : Double.valueOf(det.getProd().getVDesc());
            d54.setDesconto(desc);
            d54.setBase_icms(prod.getProdProdutoIcms() > 0 ? d54.getValor() : 0.00);
            d54.setBase_icmsST(0.00);
            d54.setValor_ipi(0.00);
            d54.setAliq_icms(prod.getProdProdutoIcms());

            Util.normaliza(d54);
            ld54.add(d54);
          }
        }
      } catch (Exception ex) {
        continue;
      }
    }

    return ld54;
  }
  private List<Dados50> getDados50() {
    List<Dados50> ld50 = new ArrayList<>();
    for (EcfNotaEletronica nfe : nfes) {
      try {
        Dados50 d50 = new Dados50();
        if (nfe.getEcfNotaEletronicaStatus().equals(ENotaStatus.AUTORIZADO.toString())
            || nfe.getEcfNotaEletronicaStatus().equals(ENotaStatus.CANCELADO.toString())) {
          // pega a NFe
          String xml = nfe.getEcfNotaEletronicaXml();
          int I = xml.indexOf("<infNFe");
          int F = xml.indexOf("</NFe>") + 6;
          String texto = "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">" + xml.substring(I, F);

          TNFe tnfe = NFe.xmlToObj(texto, TNFe.class);
          TNFe.InfNFe.Total.ICMSTot icms = tnfe.getInfNFe().getTotal().getICMSTot();

          d50.setCnpj(nfe.getSisCliente().getSisClienteDoc());
          d50.setIe("ISENTO");
          d50.setData(nfe.getEcfNotaEletronicaData());
          d50.setUf(emp.getSisMunicipio().getSisEstado().getSisEstadoSigla());
          d50.setModelo(55);
          d50.setSerie(Util.getConfig().get("nfe.serie"));
          d50.setNumero(nfe.getEcfNotaEletronicaNumero());
          d50.setCfop(5201);
          d50.setEmitente("P");
          d50.setValor(nfe.getEcfNotaEletronicaValor());
          d50.setBase_icms(Double.valueOf(icms.getVBC()));
          d50.setValor_icms(Double.valueOf(icms.getVICMS()));
          double aliq = d50.getValor_icms() > 0 ? 17 : 0;
          double isento = (d50.getBase_icms() * aliq / 100) - d50.getValor_icms();
          d50.setValor_isento(isento);
          d50.setOutras(Double.valueOf(icms.getVOutro()));
          d50.setAliq_icms(aliq);
          d50.setSituacao(
              nfe.getEcfNotaEletronicaStatus().equals(ENotaStatus.AUTORIZADO.toString())
                  ? "N"
                  : "S");
        } else {
          d50.setData(nfe.getEcfNotaEletronicaData());
          d50.setUf(emp.getSisMunicipio().getSisEstado().getSisEstadoSigla());
          d50.setModelo(55);
          d50.setSerie(Util.getConfig().get("nfe.serie"));
          d50.setNumero(nfe.getEcfNotaEletronicaNumero());
          d50.setEmitente("P");
          d50.setSituacao("4");
        }

        Util.normaliza(d50);
        ld50.add(d50);
      } catch (Exception ex) {
        continue;
      }
    }

    return ld50;
  }