class ImportarArquivoSusON extends BaseBMTBusiness {

	public Map<String, Object> atualizarGeral(final List<String> lista) throws ApplicationBusinessException {
		
		// Argumentos paramentrizados
		String nomeArquivoGrupo = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_NOME_ARQUIVO_GRUPO).toLowerCase(); // "tb_ocupacao.txt";
		String nomeArquivoSubGrupo = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_NOME_ARQUIVO_SUB_GRUPO).toLowerCase(); // "rl_procedimento_ocupacao.txt";
		String nomeArquivoFormasOrganizacao = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_NOME_ARQUIVO_FORMA_ORGANIZACAO).toLowerCase(); // "tb_ocupacao.txt";
		String nomeArquivoModalidade = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_NOME_ARQUIVO_MODALIDADE).toLowerCase(); // "rl_procedimento_ocupacao.txt";
		String nomeArquivoModalidadeProcedimento = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_NOME_ARQUIVO_PROCEDIMENTOS_MODALIDADE).toLowerCase(); // "rl_procedimento_modalidade.txt";
		String nomeArquivoItensProcedHosp = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_NOME_ARQUIVO_ITENS_PROCED_HOSP).toLowerCase(); // "tb_procedimento.txt";

		String nomeArquivoCompatibilidade = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_AGHU_NOME_ARQUIVO_COMPATIBILIDADE).toLowerCase(); 
		String nmArquivoProcedServ = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_AGHU_NOME_ARQUIVO_PROCED_SERVICO).toLowerCase(); 
		String nmArquivoServ = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_AGHU_NOME_ARQUIVO_SERVICO).toLowerCase();
		String nmArquivoServClass = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_AGHU_NOME_ARQUIVO_SERVICO_CLASSIFICACAO).toLowerCase(); 
		
		//TODO Toni: chamada comentanda pq nao entrará na versão 4.0, somente na 4.1
		String nomeArquivoOcupacao = parametroFacade.buscarAghParametro(AghuParametrosEnum.P_NOME_ARQUIVO_OCUPACAO_CBO).getVlrTexto().toLowerCase(); // "tb_ocupacao.txt";
		String nomeArquivoProcedimentosCBO = parametroFacade.buscarAghParametro(AghuParametrosEnum.P_NOME_ARQUIVO_PROCEDIMENTOS_CBO).getVlrTexto().toLowerCase(); // "rl_procedimento_ocupacao.txt";
		String nomeArquivoProcedimentoCID = parametroFacade.buscarValorTexto(AghuParametrosEnum.P_NOME_ARQUIVO_PROCEDIMENTOS_CID).toLowerCase();

		String arquivoAbrindo = "";
		// Abertura de arquivos
		try {
			arquivoAbrindo = nomeArquivoGrupo;
			nomeArquivoGrupo = FileUtil.arquivoExiste(lista, nomeArquivoGrupo);
			arquivoAbrindo = nomeArquivoSubGrupo;
			nomeArquivoSubGrupo = FileUtil.arquivoExiste(lista, nomeArquivoSubGrupo);
			arquivoAbrindo = nomeArquivoFormasOrganizacao;
			nomeArquivoFormasOrganizacao = FileUtil.arquivoExiste(lista, nomeArquivoFormasOrganizacao);
			arquivoAbrindo = nomeArquivoModalidade;
			nomeArquivoModalidade = FileUtil.arquivoExiste(lista, nomeArquivoModalidade);
			arquivoAbrindo = nomeArquivoModalidadeProcedimento;
			nomeArquivoModalidadeProcedimento = FileUtil.arquivoExiste(lista, nomeArquivoModalidadeProcedimento);
			arquivoAbrindo = nomeArquivoItensProcedHosp;
			nomeArquivoItensProcedHosp = FileUtil.arquivoExiste(lista, nomeArquivoItensProcedHosp);
			arquivoAbrindo = nomeArquivoOcupacao;
			nomeArquivoOcupacao = FileUtil.arquivoExiste(lista, nomeArquivoOcupacao);
			arquivoAbrindo = nomeArquivoProcedimentosCBO;
			nomeArquivoProcedimentosCBO = FileUtil.arquivoExiste(lista, nomeArquivoProcedimentosCBO);
			arquivoAbrindo = nomeArquivoProcedimentoCID;
			nomeArquivoProcedimentoCID = FileUtil.arquivoExiste(lista, nomeArquivoProcedimentoCID);

			arquivoAbrindo = nomeArquivoCompatibilidade;
			nomeArquivoCompatibilidade = FileUtil.arquivoExiste(lista, nomeArquivoCompatibilidade);
			arquivoAbrindo = nmArquivoProcedServ;
			nmArquivoProcedServ = FileUtil.arquivoExiste(lista, nmArquivoProcedServ);
			arquivoAbrindo = nmArquivoServ;
			nmArquivoServ = FileUtil.arquivoExiste(lista, nmArquivoServ);
			arquivoAbrindo = nmArquivoServClass;
			nmArquivoServClass = FileUtil.arquivoExiste(lista, nmArquivoServClass);
		} catch (final ApplicationBusinessException e1) {
			throw new ApplicationBusinessException(ImportarArquivoSusONExceptionCode.ARQUIVO_NAO_ENCONTRADO_COM_NOME, arquivoAbrindo);
		}

		final File arquivoGrupo = new File(nomeArquivoGrupo);
		final File arquivoSubGrupo = new File(nomeArquivoSubGrupo);
		final File arquivoFormasOrganizacao = new File(nomeArquivoFormasOrganizacao);
		final File arquivoModalidade = new File(nomeArquivoModalidade);
		final File arquivoModalidadeProcedimento = new File(nomeArquivoModalidadeProcedimento);
		final File arquivoItensProcedHosp = new File(nomeArquivoItensProcedHosp);
		final File arquivoOcupacao = new File(nomeArquivoOcupacao);
		final File arquivoProcedimentosCBO = new File(nomeArquivoProcedimentosCBO);
		final File arquivoProcedimentoCID = new File(nomeArquivoProcedimentoCID);

		final File arquivoCompatibilidade = new File(nomeArquivoCompatibilidade);
		final File arquivoProcedServ = new File(nmArquivoProcedServ);
		final File arquivoServ = new File(nmArquivoServ);
		final File arquivoServClass = new File(nmArquivoServClass);

		final AghSistemas sistema = aghuFacade.obterAghSistema(parametroFacade.buscarAghParametro(AghuParametrosEnum.P_SIGLA_FATURAMENTO).getVlrTexto());

		atualizarProcessosAbortados(sistema);
		verificarConcorrencia(arquivoProcedimentoCID.getName(), sistema);
		verificarConcorrencia(arquivoItensProcedHosp.getName(), sistema);

		verificarConcorrencia(arquivoProcedimentosCBO.getName(), sistema);
		verificarConcorrencia(arquivoCompatibilidade.getName(), sistema);
		verificarConcorrencia(arquivoProcedServ.getName(), sistema);

		final List<AghArquivoProcessamento> arquivos = new ArrayList<AghArquivoProcessamento>(8);
		try {
			arquivoAbrindo = nomeArquivoGrupo;
			arquivos.add(criarArquivo(arquivoGrupo, sistema, 1));
			arquivoAbrindo = nomeArquivoSubGrupo;
			arquivos.add(criarArquivo(arquivoSubGrupo, sistema, 2));
			arquivoAbrindo = nomeArquivoFormasOrganizacao;
			arquivos.add(criarArquivo(arquivoFormasOrganizacao, sistema, 3));
			arquivoAbrindo = nomeArquivoModalidade;
			arquivos.add(criarArquivo(arquivoModalidade, sistema, 4));
			arquivoAbrindo = nomeArquivoModalidadeProcedimento;
			arquivos.add(criarArquivo(arquivoModalidadeProcedimento, sistema, 8));
			arquivoAbrindo = nomeArquivoItensProcedHosp;
			arquivos.add(criarArquivo(arquivoItensProcedHosp, sistema, 5));
			arquivoAbrindo = nomeArquivoOcupacao;
			arquivos.add(criarArquivo(arquivoOcupacao, sistema, 6));
			arquivoAbrindo = nomeArquivoProcedimentosCBO;
			arquivos.add(criarArquivo(arquivoProcedimentosCBO, sistema, 7));
			arquivoAbrindo = nomeArquivoProcedimentoCID;
			arquivos.add(criarArquivo(arquivoProcedimentoCID, sistema, 9));

			arquivoAbrindo = nomeArquivoCompatibilidade;
			arquivos.add(criarArquivo(arquivoCompatibilidade, sistema, 10));
			arquivoAbrindo = nmArquivoProcedServ;
			arquivos.add(criarArquivo(arquivoProcedServ, sistema, 11));
			arquivoAbrindo = nmArquivoServ;
			arquivos.add(criarArquivo(arquivoServ, sistema, 12));
			arquivoAbrindo = nmArquivoServClass;
			arquivos.add(criarArquivo(arquivoServClass, sistema, 13));
		} catch (final IOException e) {
			LOG.error(EXCECAO_CAPTURADA, e);
			throw new ApplicationBusinessException(ImportarArquivoSusONExceptionCode.ARQUIVO_NAO_ENCONTRADO_COM_NOME, arquivoAbrindo);
		}
		
		File file = null;
		try {
			file = File.createTempFile(IFaturamentoFacade.NOME_ARQUIVO_LOG_GERAL + DateUtil.obterDataFormatada(new Date(), DateConstants.DATE_PATTERN_YYYY_MM_DD_HH_MM), IFaturamentoFacade.EXTENCAO_ARQUIVO_LOG);
			} catch (final IOException e) {
			LOG.error(e.getMessage(), e);
		}

		getProcessadorArquivosImportacaoSus().processarGeral(file, lista);
		final Map<String, Object> retorno = new HashMap<String, Object>();
		retorno.put(IFaturamentoFacade.ARQUIVOS_IMPORTACAO_SUS, arquivos);
		retorno.put(IFaturamentoFacade.LOG_FILE_IMPORTACAO_SUS, file.getAbsolutePath());
		return retorno;
	}

}