class ConfirmarPrescricaoMedicaON extends BaseBusiness {

	public ConfirmacaoPrescricaoVO confirmarPrescricaoMedica(MpmPrescricaoMedica prescricao, String nomeMicrocomputador, Date dataFimVinculoServidor)
			throws BaseException {
		ConfirmacaoPrescricaoVO confirmacaoPrescricaoVO = null;
		RapServidores servidorLogado = getServidorLogadoFacade().obterServidorLogadoSemCache();

		if (prescricao == null) {
			throw new ApplicationBusinessException(
					ConfirmarPrescricaoMedicaONExceptionCode.ERRO_CONFIRMACAO_PRESCRICAO_INVALIDA);
		}
		
		//prescricao = this.getPrescricaoMedicaDAO().merge(prescricao);
		prescricao = this.getPrescricaoMedicaDAO().obterOriginal(prescricao.getId());
		
		if(prescricao == null) {
			throw new ApplicationBusinessException(
					ConfirmarPrescricaoMedicaONExceptionCode.PRESCRICAO_JA_CANCELADA_POR_OUTRO_USUARIO);
		}
		
		this.validarSituacaoPrescricao(prescricao);
		
		
		prescricao = mpmPrescricaoMedicaDAO.obterPrescricaoComAtendimentoPaciente(prescricao.getId().getAtdSeq(), prescricao.getId().getSeq());
		
		Boolean prescricaoAmbulatorial = getAghuFacade().obterAtendimento(prescricao.getId().getAtdSeq(),null,
				DominioOrigemAtendimento.getOrigensDePrescricaoAmbulatorial()) != null;

		if (!this.verificarServidorMedico(
					servidorLogado.getId().getMatricula(),
					servidorLogado.getId().getVinCodigo())){
			
			throw new ApplicationBusinessException(
					ConfirmarPrescricaoMedicaONExceptionCode.USUARIO_SEM_REGISTRO,
					servidorLogado.getPessoaFisica().getNome());
		}
		
		getLogger().info(
				"Iniciando a confirmação da prescrição: "
						+ prescricao.getId().getSeq());

		try {

			//this.getPrescricaoMedicaDAO().refresh(prescricao);

			if(!prescricaoAmbulatorial){
				getLogger().info(
						"Chamando validação para item de dieta na unidade da prescrição: "
								+ prescricao.getId().getSeq());
				validarPermissaoItemDietaNaUnidade(prescricao);
				
			}

			getLogger().info(
					"Chamando validação para via de administração na unidade da prescrição: "
							+ prescricao.getId().getSeq());
			validarPermissaoViaAdministracaoNaUnidade(prescricao);

			getLogger().info(
					"Chamando validação para cuidado na unidade da prescrição: "
							+ prescricao.getId().getSeq());
			validarCuidadoNaUnidade(prescricao);

			getLogger().info(
					"Chamando validação para justificativa hemoterapia da prescrição: "
							+ prescricao.getId().getSeq());
			validarJustificativaHemoterapia(prescricao);

			getLogger().info(
					"Chamando geração de laudos da prescrição: "
							+ prescricao.getId().getSeq());
			List<MpmLaudo> laudoList = gerarLaudos(prescricao);
			
			confirmacaoPrescricaoVO = this.getConfirmarPrescricaoMedicaRN().confirmarPrescricaoMedica(prescricao, nomeMicrocomputador, dataFimVinculoServidor);

			LaudoRN laudoRN = this.getLaudoRN();
			laudoRN.inserirListaLaudos(laudoList);
			
			//prescricao = this.getPrescricaoMedicaDAO().merge(prescricao);
			prescricao.setServidorValida(servidorLogado);
			this.getPrescricaoMedicaDAO().atualizar(prescricao);
			
		} catch (BaseRuntimeException e) {
			getLogger().error(e.getMessage(), e);
			throw new ApplicationBusinessException(e.getCode());
		}

		getLogger().info(
				"Finalizada a confirmação da prescrição: "
						+ prescricao.getId().getSeq());
		
		return confirmacaoPrescricaoVO;
	}

}