class PrescreverProcedimentoEspecialRN extends BaseBusiness {

	@SuppressWarnings("PMD.NPathComplexity")
	public void verificarDuracaoTratamentoSolicitado(
			MpmPrescricaoProcedimento prescProc, AghAtendimentos atendimento)
			throws BaseException {
		if (prescProc == null || atendimento == null) {
			throw new IllegalArgumentException("Parametros Invalidos!!!");
		}

		Byte cpgCphCspSeq = null;
		Short cpgCphCspCnvCodigo = null;
		Integer phiSeq = null;

		// ORADB package mpmk_rn.rn_mpmp_ver_int
		if (atendimento.getInternacao() != null) {
			if (atendimento.getInternacao().getConvenioSaudePlano() != null) {
				cpgCphCspSeq = atendimento.getInternacao()
						.getConvenioSaudePlano().getId().getSeq();
				cpgCphCspCnvCodigo = atendimento.getInternacao()
						.getConvenioSaudePlano().getId().getCnvCodigo();
			} else {
				throw new ApplicationBusinessException(
						PrescreverProcedEspeciaisRNExceptionCode.AIN_00268);
			}
		} else
		// ORADB package mpmk_rn.rn_mpmp_ver_atu
		if (atendimento.getAtendimentoUrgencia() != null) {
			if (atendimento.getAtendimentoUrgencia().getConvenioSaude() != null) {
				cpgCphCspSeq = atendimento.getAtendimentoUrgencia().getCspSeq();
				cpgCphCspCnvCodigo = atendimento.getAtendimentoUrgencia()
						.getConvenioSaude().getCodigo();
			} else {
				throw new ApplicationBusinessException(
						PrescreverProcedEspeciaisRNExceptionCode.MPM_01175);
			}
		} else
		// ORADB package mpmk_rn.rn_mpmp_ver_hod
		if (atendimento.getHospitalDia() != null) {
			if (atendimento.getHospitalDia().getSeq() != null
					&& atendimento.getHospitalDia().getConvenioSaudePlano() != null) {
				cpgCphCspSeq = atendimento.getHospitalDia().getSeq()
						.byteValue();
				cpgCphCspCnvCodigo = atendimento.getHospitalDia()
						.getConvenioSaudePlano().getId().getCnvCodigo();
			} else {
				throw new ApplicationBusinessException(
						PrescreverProcedEspeciaisRNExceptionCode.AHD_00090);
			}
		}

		
		FatProcedHospInternos procedHospitalarInterno = this
				.buscaProcedimentoHospitalarInterno(prescProc);
		if (procedHospitalarInterno != null) {
			phiSeq = procedHospitalarInterno.getSeq();
		}

		if (cpgCphCspSeq == null && cpgCphCspCnvCodigo == null
				&& phiSeq == null) {
			throw new IllegalStateException(
					"Alguma das associacoes necessarias nao foi encontrada!!!!");
		}

		FatConvGrupoItemProced umFatConvGrupoItensProced = this
				.getFaturamentoFacade()
				.obterFatConvGrupoItensProcedPeloId(cpgCphCspCnvCodigo,
						cpgCphCspSeq, phiSeq);
		if (umFatConvGrupoItensProced != null) {

			if(prescProc.getId() != null){
				this.getMpmPrescricaoProcedimentoDAO().merge(prescProc);
			}
			String descricao = StringUtils.isNotBlank(prescProc
					.getDescricaoFormatada()) ? prescProc
					.getDescricaoFormatada().substring(0,
							prescProc.getDescricaoFormatada().length() - 1)
					: "";

			if (prescProc.getDuracaoTratamentoSolicitado() == null) {
				if (umFatConvGrupoItensProced
						.getIndInformaTempoTrat()) {
					throw new ApplicationBusinessException(
							PrescreverProcedEspeciaisRNExceptionCode.MPM_03603,
							descricao);
				}
			} else {
				if (!umFatConvGrupoItensProced
						.getIndInformaTempoTrat()) {
					throw new ApplicationBusinessException(
							PrescreverProcedEspeciaisRNExceptionCode.MPM_03604);
				}
			}
		}
	}

}