class ManterAltaSumarioRN extends BaseBusiness {

	public void verificarDataAlta(Integer novoAtdSeq, Date novaDataAlta,
			Date antigaDataAlta, DominioOperacoesJournal operacao, DominioIndTipoAltaSumarios tipo)
	throws ApplicationBusinessException {
		final Integer MINUTOS_DIA = 1440;
		Date today = new Date();

		List<DominioOperacoesJournal> operacoesValidas = Arrays.asList(
				DominioOperacoesJournal.INS, DominioOperacoesJournal.UPD);

		boolean executaValidacao = operacoesValidas.contains(operacao)
		&& novaDataAlta != null && novoAtdSeq != null;
		if (executaValidacao && DominioOperacoesJournal.UPD.equals(operacao)) {
			executaValidacao = CoreUtil.modificados(antigaDataAlta,
					novaDataAlta);
		}

		if (executaValidacao) {
			AghAtendimentos atendimento = getAghuFacade()
			.obterAghAtendimentoPorChavePrimaria(novoAtdSeq);
			
			ManterAltaSumarioRNExceptionCode errorCode = null;
			
			AinInternacao internacaoPaciente = internacaoFacade.obterInternacaoPorAtendimentoPacCodigo(atendimento.getPacCodigo());
			if(internacaoPaciente != null){
				validaDataMovimento(internacaoPaciente, novaDataAlta,errorCode, operacao, tipo);
			}
			
			if (!DominioPacAtendimento.N.equals(atendimento
					.getIndPacAtendimento())) {
				
				long diff = today.getTime() - novaDataAlta.getTime();
				long difMinutos = (diff / (1000 * 60));
				
				// if trunc(p_new_dthr_alta) < trunc(sysdate - 1) then
				if (difMinutos > MINUTOS_DIA) {
					// MPM-03010 = Data da alta/óbito deve ser igual a data
					// corrente ou um dia antes
					// MPM-02712 = Data da alta/óbito deve ser igual a data
					// corrente ou um dia antes
					// raise_application_error(-20000,'MPM-03010');
					
					
					if (DominioIndTipoAltaSumarios.OBT.equals(tipo)) {
						errorCode = this.getBusinessExceptionCode(operacao,
								ManterAltaSumarioRNExceptionCode.MPM_03010_1, // INSERT
								ManterAltaSumarioRNExceptionCode.MPM_02712_1, // UPDATE
								null);
					} else {
						errorCode = this.getBusinessExceptionCode(operacao,
								ManterAltaSumarioRNExceptionCode.MPM_03010, // INSERT
								ManterAltaSumarioRNExceptionCode.MPM_02712, // UPDATE
								null);
					}
					
					errorCode.throwException();
				}
			} else if (atendimento.getDthrFim() != null) {
				Date dthrFim = atendimento.getDthrFim();

				SimpleDateFormat sdfHora = new SimpleDateFormat(
				"dd/MM/yyyy HH:mm");
				String strDthrFim = sdfHora.format(atendimento.getDthrFim());
				
				long diff = dthrFim.getTime() - novaDataAlta.getTime();
				long difMinutos = (diff / (1000 * 60));

				// IF TRUNC(p_new_dthr_alta) < TRUNC(v_dthr_fim - 1) THEN
				if (difMinutos > MINUTOS_DIA){
					// MPM-03011 = Data da alta/óbito deve ser igual a data do
					// fim do atendimento (#1) ou menos um dia
					// MPM-02713 = Data da alta/óbito deve ser igual a data do
					// fim do atendimento (#1) ou um dia antes.
					// raise_application_error(-20000,'MPM-03011 #1'||
					// TO_CHAR(v_dthr_fim,'dd/mm/yyyy hh24:mi'));
					errorCode = this.getBusinessExceptionCode(operacao,
							ManterAltaSumarioRNExceptionCode.MPM_03011, // INSERT
							ManterAltaSumarioRNExceptionCode.MPM_02713, // UPDATE
							null);
					errorCode.throwException(strDthrFim);
					// IF p_new_dthr_alta > v_dthr_fim THEN
				} else if (novaDataAlta.after(dthrFim)) {
					// MPM-03012 = Data da alta/óbito não pode ser maior que a
					// data do fim do atendimento --> #1.
					// MPM-03009 = Data da alta/óbito não pode ser maior que a
					// data do fim do atendimento --> #1.
					// raise_application_error(-20000,'MPM-03012 #1'||
					// TO_CHAR(v_dthr_fim,'dd/mm/yyyy hh24:mi'));
					errorCode = this.getBusinessExceptionCode(operacao,
							ManterAltaSumarioRNExceptionCode.MPM_03012, // INSERT
							ManterAltaSumarioRNExceptionCode.MPM_03009, // UPDATE
							null);
					errorCode.throwException(strDthrFim);
				}
			}
		}
	}

}