ItemEstruturaContaOrcamentoDao itemEstContaDao = new ItemEstruturaContaOrcamentoDao(null);
ConfigSisExecFinanCsefvDao versaoDao = new ConfigSisExecFinanCsefvDao(null);
//Dados Importacao
ImportacaoImp dadosImportacao = new ImportacaoImp();
dadosImportacao.setDataHoraImp(new Date());
dadosImportacao.setNomeArquivoImp(arquivoGravado.getName());
Date inicioPeriodo = null;
Date fimPeriodo = null;
List registrosValidos = new ArrayList();
List<EfImportOcorrenciasEfio> ocorrencias = new ArrayList<EfImportOcorrenciasEfio>();
Long totalRegistros01 = 0L;
List sistemasExistentes = getSistemasAtivos();
List contasOrcamentarias = itemEstContaDao.listar(EfItemEstContaEfiec.class, new String[] {"contaSistemaOrcEfiec", "asc"});
ConfigSisExecFinanCsef sistemaValido = null;
boolean existeSistema = false;
//Inicializa��o do Total
BigDecimal[] total = new BigDecimal[6];
for(int i = 0; i < 6; i++)
total[i] = new BigDecimal("0");
if(contasOrcamentarias == null)
contasOrcamentarias = new ArrayList();
try{
BufferedReader in = new BufferedReader (new FileReader(arquivoGravado));
String linha="";
//Dados para TR00
String sistema = "";
String mesIni = "";
String anoIni = "";
String mesFim = "";
String anoFim = "";
String dataHoraGeracao = "";
String dataHoraCarga = "";
long registrosLidos = 0;
while ((linha=in.readLine()) != null) {
String tr = "";
try{
tr = linha.substring(0, 2);
}catch (StringIndexOutOfBoundsException siobe) {
//N�o conseguiu executar substring de 2 posi��es na linha
//ou seja, a linha tem zero ou s� um caracter.
relatarOcorrencia("TR deve ser v�lido - " + linha + " linha:" + registrosLidos,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.TR_INVALIDO),
dadosImportacao);
//this.logger.error(siobe); //N�o � necess�rio logar essa exce��o
continue;
}
if(TR_HEADER.equals(tr)){ //00
registrosLidos++;
sistema = linha.substring(2,8);
mesIni = linha.substring(8,10);
anoIni = linha.substring(10,14);
mesFim = linha.substring(14,16);
anoFim = linha.substring(16,20);
dataHoraGeracao = linha.substring(20,34);
inicioPeriodo = new SimpleDateFormat("MMyyyy").parse(mesIni + anoIni);
fimPeriodo = new SimpleDateFormat("MMyyyy").parse(mesFim + anoFim);
try{
dataHoraCarga = linha.substring(34,48);
}catch (StringIndexOutOfBoundsException siobe) {
//DataHora Carga inv�lida: O Arquivo n�o foi gerado para importa��o!!!
relatarOcorrencia("TR" + TR_HEADER + " linha:" + registrosLidos + " - Data/Hora da carga n�o informada.",
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.DATA_HORA_CARGA_INEXISTENTE),
dadosImportacao);
//this.logger.error(siobe); //N�o � necess�rio logar essa exce��o
continue;
}
//Verificar se o Sistema existe
sistema = sistema.trim();
Iterator itSis = sistemasExistentes.iterator();
while(itSis.hasNext()){
ConfigSisExecFinanCsef sis = (ConfigSisExecFinanCsef) itSis.next();
if(sistema.equals(sis.getSiglaCsef())){
sistemaValido = sis;
existeSistema = true;
break;
}
}
if(!existeSistema){
relatarOcorrencia("TR" + TR_HEADER + " linha:" + registrosLidos + " - Sistema inv�lido - " + sistema,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.SISTEMA_INVALIDO),
dadosImportacao);
}
validarMes(mesIni, ocorrencias, "TR" + TR_HEADER + " linha:" + registrosLidos + " - M�s inicial da solicita��o", dadosImportacao);
validarAno(anoIni, ocorrencias, "TR" + TR_HEADER + " linha:" + registrosLidos + " - Ano inicial da solicita��o", dadosImportacao);
validarMes(mesFim, ocorrencias, "TR" + TR_HEADER + " linha:" + registrosLidos + " - M�s final da solicita��o", dadosImportacao);
validarAno(anoFim, ocorrencias, "TR" + TR_HEADER + " linha:" + registrosLidos + " - Ano final da solicita��o", dadosImportacao);
validarDataHora(dataHoraGeracao, ocorrencias, "TR" + TR_HEADER + " linha:" + registrosLidos + " - Data/hora da Gera��o deve ser v�lida - " + dataHoraGeracao, dadosImportacao);
validarDataHora(dataHoraCarga, ocorrencias, "TR" + TR_HEADER + " linha:" + registrosLidos + " - Data/hora da Carga deve ser v�lida - " + dataHoraCarga, dadosImportacao);
dadosImportacao.setDataHoraGeracaoSisOrigem(new SimpleDateFormat("ddMMyyyyHHmmss").parse(dataHoraGeracao));
}
else if(TR_REGISTRO.equals(tr)){ //01
totalRegistros01++;
registrosLidos++;
boolean houveOcorrencia = false;
//Dados para TR01
String conta = linha.substring(2,257).toUpperCase();
String mesTrRegistro = linha.substring(257, 259);
String anoTrRegistro = linha.substring(259,263);
int pos = 263;
int posFim = pos + TAMANHO_VALORES;
int numeroValores = 6;
String[] valores = new String[numeroValores];
int cont = 0;
while(cont < numeroValores){
valores[cont] = linha.substring(pos, posFim);
pos = posFim;
posFim = posFim + TAMANHO_VALORES;
cont++;
}
String indContabilidade = linha.substring(pos, pos + 1);
String valor1Registro = valores[0].trim();
String valor2Registro = valores[1].trim();
String valor3Registro = valores[2].trim();
String valor4Registro = valores[3].trim();
String valor5Registro = valores[4].trim();
String valor6Registro = valores[5].trim();
//Verifica se existe a acao descrita na descri��o da conta.
final int ACAO = 3;
boolean existeConta = false;
String[] decompoeConta = conta.trim().split(" ");
String projAtividade = decompoeConta[0];
String recursoCta = decompoeConta[2];
String fonteCta = decompoeConta[3];
Query q = this.session.createQuery("from ItemEstruturaIett iett where iett.estruturaEtt.codEtt = :codEtt and trim( iett.siglaIett ) = :siglaIett and iett.indAtivoIett = 'S'");
q.setLong("codEtt", ACAO);
q.setString("siglaIett", projAtividade);
//Se == 0, ent�o a sigla da acao (projeto atividade) n�o existe.
if(q.list().size() == 0) {
relatarOcorrencia("TR" + TR_REGISTRO + " linha:" + registrosLidos + " - Item '" + projAtividade + "' n�o encontrado - conta:" + conta,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.ACAO_INEXISTENTE),
dadosImportacao,
conta);
houveOcorrencia = true;
}
//Verifica a existencia do recurso
q = this.session.createQuery("from FonteRecursoFonr where trim( siglaFonr ) = :siglaFonr");
q.setString("siglaFonr", recursoCta);
if(q.list().size() == 0) {
relatarOcorrencia("TR" + TR_REGISTRO + " linha:" + registrosLidos + " - Item '" + recursoCta + "' n�o encontrado - conta:" + conta,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.FONTE_INEXISTENTE),
dadosImportacao,
conta);
houveOcorrencia = true;
}
//Verifica a existencia da fonte
q = this.session.createQuery("from RecursoRec where trim( siglaRec ) = :siglaRec");
q.setString("siglaRec", fonteCta);
if(q.list().size() == 0) {
relatarOcorrencia("TR" + TR_REGISTRO + " linha:" + registrosLidos + " - Item '" + fonteCta + "' n�o encontrado - conta:" + conta,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.RECURSO_INEXISTENTE),
dadosImportacao,
conta);
houveOcorrencia = true;
}
//Se n�o houve nenhuma ocorr�ncia nos passos anteriores, analisa a exist�ncia da conta.
if(!houveOcorrencia) {
//Verifica se a conta existe no Sistema.
conta = conta.trim();
existeConta = false;
Iterator itConta = contasOrcamentarias.iterator();
while(itConta.hasNext()){
EfItemEstContaEfiec con = (EfItemEstContaEfiec) itConta.next();
if(conta.trim().equals(con.getContaSistemaOrcEfiec().trim())){
existeConta = true;
break;
}
}
if(!existeConta){
relatarOcorrencia("TR" + TR_REGISTRO + " linha:" + registrosLidos + " - Conta n�o econtrada - conta:" + conta,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.CONTA_INEXISTENTE),
dadosImportacao,
conta);
houveOcorrencia = true;
}
}
houveOcorrencia = houveOcorrencia || !validarMes(mesTrRegistro, ocorrencias, "TR" + TR_REGISTRO + " linha:" + registrosLidos + " - M�s", dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarAno(anoTrRegistro, ocorrencias, "TR" + TR_REGISTRO + " linha:" + registrosLidos + " - Ano", dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarSistemaMesAno(conta, sistemaValido, mesTrRegistro, anoTrRegistro, TR_REGISTRO + " linha:" + registrosLidos, ocorrencias, dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor1Registro, ocorrencias, TR_REGISTRO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor1Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor2Registro, ocorrencias, TR_REGISTRO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor2Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor3Registro, ocorrencias, TR_REGISTRO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor3Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor4Registro, ocorrencias, TR_REGISTRO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor4Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor5Registro, ocorrencias, TR_REGISTRO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor5Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor6Registro, ocorrencias, TR_REGISTRO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor6Cfg(), dadosImportacao);
if(!"A".equals(indContabilidade) && !"F".equals(indContabilidade)){
relatarOcorrencia("TR" + TR_REGISTRO + " linha:" + registrosLidos + " - Flag indicador de contabilidade encerrada inv�lido - " + indContabilidade,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.FLAG_CONTABILIDADE_INVALIDO),
dadosImportacao);
houveOcorrencia = true;
}
if(!houveOcorrencia && !"".equals(dataHoraCarga)){
//Incluir dados na lista de registros v�lidos.
//Dados que entram neste IF est�o todos v�lidos!!!
EfItemEstRealizadoEfier registroValido = new EfItemEstRealizadoEfier();
registroValido.setDataInclusaoEfier(Data.getDataAtual());
registroValido.setUsuarioUsu(usuarioLogado);
registroValido.setContaSistemaOrcEfier(conta);
registroValido.setMesReferenciaEfier(Long.valueOf(mesTrRegistro));
registroValido.setAnoReferenciaEfier(Long.valueOf(anoTrRegistro));
registroValido.setDataHoraInfoEfier(Data.parseDate(dataHoraCarga, FORMATO_DATAHORA));
registroValido.setIndManualEfier("N");
registroValido.setImportacaoImp(dadosImportacao);
registroValido.setConfigSisExecFinanCsefv(versaoDao.getConfigSisExecFinanCsefv(Long.valueOf(anoTrRegistro), Long.valueOf(mesTrRegistro), sistemaValido));
registroValido.setValor1Efier(toBigDecimal(valor1Registro).doubleValue());
registroValido.setValor2Efier(toBigDecimal(valor2Registro).doubleValue());
registroValido.setValor3Efier(toBigDecimal(valor3Registro).doubleValue());
registroValido.setValor4Efier(toBigDecimal(valor4Registro).doubleValue());
registroValido.setValor5Efier(toBigDecimal(valor5Registro).doubleValue());
registroValido.setValor6Efier(toBigDecimal(valor6Registro).doubleValue());
registroValido.setIndContabilidadeEfier(indContabilidade);
registrosValidos.add(registroValido);
}
total[0] = total[0].add(toBigDecimal(valor1Registro));
total[1] = total[1].add(toBigDecimal(valor2Registro));
total[2] = total[2].add(toBigDecimal(valor3Registro));
total[3] = total[3].add(toBigDecimal(valor4Registro));
total[4] = total[4].add(toBigDecimal(valor5Registro));
total[5] = total[5].add(toBigDecimal(valor6Registro));
}
else if(TR_REGISTRO_NAO_REVISTO.equals(tr)){ //02
registrosLidos++;
String mesTrNaoPrevisto = linha.substring(2,4);
String anoTrNaoPrevisto = linha.substring(4,8);
int pos = 8;
int posFim = pos + TAMANHO_VALORES;
int numeroValores = 6;
String[] valores = new String[numeroValores];
int cont = 0;
while(cont < numeroValores){
valores[cont] = linha.substring(pos, posFim);
pos = posFim;
posFim = posFim + TAMANHO_VALORES;
cont++;
}
String valor1NaoPrevisto = valores[0].trim();
String valor2NaoPrevisto = valores[1].trim();
String valor3NaoPrevisto = valores[2].trim();
String valor4NaoPrevisto = valores[3].trim();
String valor5NaoPrevisto = valores[4].trim();
String valor6NaoPrevisto = valores[5].trim();
boolean houveOcorrencia = false;
houveOcorrencia = houveOcorrencia || !validarMes(mesTrNaoPrevisto, ocorrencias, "TR" + TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos + " - M�s", dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarAno(anoTrNaoPrevisto, ocorrencias, "TR" + TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos + " - Ano", dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarSistemaMesAno("", sistemaValido, mesTrNaoPrevisto, anoTrNaoPrevisto, TR_REGISTRO_NAO_REVISTO, ocorrencias, dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor1NaoPrevisto, ocorrencias, TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor1Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor2NaoPrevisto, ocorrencias, TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor2Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor3NaoPrevisto, ocorrencias, TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor3Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor4NaoPrevisto, ocorrencias, TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor4Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor5NaoPrevisto, ocorrencias, TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor5Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(valor6NaoPrevisto, ocorrencias, TR_REGISTRO_NAO_REVISTO + " linha:" + registrosLidos, configuracao.getFinanceiroDescValor6Cfg(), dadosImportacao);
if(!houveOcorrencia && !"".equals(dataHoraCarga)){
//Incluir dados na lista de registros v�lidos.
//Dados que entram neste IF est�o todos v�lidos!!!
EfItemEstRealizadoEfier registroValido = new EfItemEstRealizadoEfier();
registroValido.setDataInclusaoEfier(Data.getDataAtual());
registroValido.setUsuarioUsu(usuarioLogado);
registroValido.setMesReferenciaEfier(Long.valueOf(mesTrNaoPrevisto));
registroValido.setAnoReferenciaEfier(Long.valueOf(anoTrNaoPrevisto));
registroValido.setDataHoraInfoEfier(Data.parseDate(dataHoraCarga, FORMATO_DATAHORA));
registroValido.setIndManualEfier("N");
registroValido.setImportacaoImp(dadosImportacao);
registroValido.setConfigSisExecFinanCsefv(versaoDao.getConfigSisExecFinanCsefv(Long.valueOf(anoTrNaoPrevisto), Long.valueOf(mesTrNaoPrevisto), sistemaValido));
registroValido.setValor1Efier(toBigDecimal(valor1NaoPrevisto).doubleValue());
registroValido.setValor2Efier(toBigDecimal(valor2NaoPrevisto).doubleValue());
registroValido.setValor3Efier(toBigDecimal(valor3NaoPrevisto).doubleValue());
registroValido.setValor4Efier(toBigDecimal(valor4NaoPrevisto).doubleValue());
registroValido.setValor5Efier(toBigDecimal(valor5NaoPrevisto).doubleValue());
registroValido.setValor6Efier(toBigDecimal(valor6NaoPrevisto).doubleValue());
registrosValidos.add(registroValido);
}
total[0] = total[0].add(toBigDecimal(valor1NaoPrevisto));
total[1] = total[1].add(toBigDecimal(valor2NaoPrevisto));
total[2] = total[2].add(toBigDecimal(valor3NaoPrevisto));
total[3] = total[3].add(toBigDecimal(valor4NaoPrevisto));
total[4] = total[4].add(toBigDecimal(valor5NaoPrevisto));
total[5] = total[5].add(toBigDecimal(valor6NaoPrevisto));
}
else if(TR_TRAILER.equals(tr)){ //99
registrosLidos++;
String qtdeRegistros = linha.substring(2,8);
int pos = 8;
int posFim = pos + TAMANHO_VALORES;
int numeroValores = 6;
String[] valores = new String[numeroValores];
int cont = 0;
while(cont < numeroValores){
valores[cont] = linha.substring(pos, posFim);
pos = posFim;
posFim = posFim + TAMANHO_VALORES;
cont++;
}
String totalValor1 = valores[0].trim();
String totalValor2 = valores[1].trim();
String totalValor3 = valores[2].trim();
String totalValor4 = valores[3].trim();
String totalValor5 = valores[4].trim();
String totalValor6 = valores[5].trim();
boolean houveOcorrencia = false;
long qtde = StrToLong(qtdeRegistros);
if(qtde == -1){
relatarOcorrencia("TR" + TR_TRAILER + " linha:" + registrosLidos + " - Quantidade de registros deve ser num�rico - " + qtdeRegistros,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.QTDE_REGISTROS_INVALIDO),
dadosImportacao);
houveOcorrencia = true;
}
//Validar os registros lidos com os dados do trailer...(qtos registros foram lidos, totais de valores....)
//Caso ocorra diferen�a em algum dado, relatar ocorrencia.
houveOcorrencia = houveOcorrencia || !validarQtdeRegistrosLidos(qtde, registrosLidos, TR_TRAILER, ocorrencias, dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(totalValor1, ocorrencias, TR_TRAILER + " linha:" + registrosLidos, "Total do " + configuracao.getFinanceiroDescValor1Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(totalValor2, ocorrencias, TR_TRAILER + " linha:" + registrosLidos, "Total do " + configuracao.getFinanceiroDescValor2Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(totalValor3, ocorrencias, TR_TRAILER + " linha:" + registrosLidos, "Total do " + configuracao.getFinanceiroDescValor3Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(totalValor4, ocorrencias, TR_TRAILER + " linha:" + registrosLidos, "Total do " + configuracao.getFinanceiroDescValor4Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(totalValor5, ocorrencias, TR_TRAILER + " linha:" + registrosLidos, "Total do " + configuracao.getFinanceiroDescValor5Cfg(), dadosImportacao);
houveOcorrencia = houveOcorrencia || !validarValor(totalValor6, ocorrencias, TR_TRAILER + " linha:" + registrosLidos, "Total do " + configuracao.getFinanceiroDescValor6Cfg(), dadosImportacao);
if(!houveOcorrencia && !"".equals(dataHoraCarga)){
BigDecimal[] totalTrailer = new BigDecimal[6];
for(int i = 0; i < 6; i++)
totalTrailer[i] = new BigDecimal("0");
totalTrailer[0] = toBigDecimal(totalValor1);
totalTrailer[1] = toBigDecimal(totalValor2);
totalTrailer[2] = toBigDecimal(totalValor3);
totalTrailer[3] = toBigDecimal(totalValor4);
totalTrailer[4] = toBigDecimal(totalValor5);
totalTrailer[5] = toBigDecimal(totalValor6);
for(int i = 0; i < 6; i++){
//houveOcorrencia = houveOcorrencia || validarTotaisLidos(totalTrailer[i], total[i], TR_TRAILER + " linha:" + registrosLidos, ocorrencias, dadosImportacao);
houveOcorrencia = validarTotaisLidos(totalTrailer[i], total[i], TR_TRAILER + " linha:" + registrosLidos, ocorrencias, dadosImportacao);
}
}
break; //Este break � porque o TR99 � o �ltimo registro lido. Se chegar ao TR99, acabou o n�mero de registros v�lidos.
}
else{
try{
int numero = Integer.valueOf(tr).intValue();
/* A vari�vel acima s� � utilizada para efeito de convers�o...
* Se caiu neste else e conseguiu converter, ent�o a msg � "TR deve ser v�lido,"
* se der exce��o, n�o � n�mero ent�o a msg � "TR deve ser numerico"*/
relatarOcorrencia("TR deve ser v�lido - " + tr + " linha:" + registrosLidos,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.TR_INVALIDO),
dadosImportacao);
}catch (NumberFormatException nfe) {
//N�o conseguiu converter de string para num�rico: N�o � um n�mero.
relatarOcorrencia("TR deve ser num�rico - " + tr + " linha:" + registrosLidos,
ocorrencias,
new TipoOcorrencia(TipoOcorrencia.TR_INVALIDO),
dadosImportacao);
//this.logger.error(nfe); N�o � necess�rio logar esta exce��o
}
}
}
} catch (Exception e) {
Logger logger = Logger.getLogger(this.getClass());
logger.error(e);
throw e;
}
List<ConfigSisExecFinanCsef> sistema = new ArrayList<ConfigSisExecFinanCsef>();
sistema.add(sistemaValido);
List<Date> periodo = new ArrayList<Date>();
periodo.add(inicioPeriodo);
periodo.add(fimPeriodo);
//dadosImportacao n�o precisar� ser passado para a pr�xima camada pois ele tem refer�ncia dentro do objeto 'ocorr�ncias'
dadosImportacao.setNumRegistrosValidosImp(registrosValidos.size());
dadosImportacao.setNumRegistrosInvalidosImp(totalRegistros01.intValue() - registrosValidos.size());
dadosImportacao.setUsuarioUsu(((SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
//Agrupa as ocorrencias do tipo CONTA_INEXISTENTE
ocorrencias = agrupaOcorrenciasdoTipoContaInexistente(ocorrencias);
List[] retorno = {registrosValidos, ocorrencias, periodo, sistema};