class AgendaProcedimentosON extends BaseBusiness {

	public void pressionarCommit(CirurgiaTelaVO vo, final AlertaModalVO alertaVO) throws BaseException {

		String alerta = null; // Retorno da mensagem de confirmação na tela
		AipPacientes paciente = vo.getCirurgia().getPaciente();
		// Verifica NÚMERO DA AGENDA
		if (vo.getCirurgia().getNumeroAgenda() != null) {
			// Verifica se já existe uma cirurgia para o paciente no MESMO DIA considerando o NÚMERIO DA AGENDA
			MbcCirurgias cirurgiaAgendada = this.getMbcCirurgiasDAO().obterCirurgiaAgendadaPacienteMesmoDia(vo.getDataCirurgiaTruncada(), paciente.getCodigo(),
					vo.getCirurgia().getUnidadeFuncional().getSeq(), vo.getCirurgia().getNumeroAgenda());

			if (cirurgiaAgendada != null) { // Quando existir cirurgias agendadas...
				alerta = this.getAgendaProcedimentosFuncoesON().getMensagemPacienteComCirurgiaJaAgendada(cirurgiaAgendada); // Reutilização para gerar a
				alertaVO.setAlerta(alerta); // SHOW_ALERT aqui!
			}
		} else {
			// Verifica se já existe uma cirurgia para o paciente no MESMO DIA
			MbcCirurgias cirurgiaAgendada = this.getMbcCirurgiasDAO().obterCirurgiaAgendadaPacienteMesmoDia(vo.getCirurgia().getData(), paciente.getCodigo(),
					vo.getCirurgia().getUnidadeFuncional().getSeq());

			if (cirurgiaAgendada != null) {
				alerta = this.getAgendaProcedimentosFuncoesON().getMensagemPacienteComCirurgiaJaAgendada(cirurgiaAgendada);// Reutilização para gerar a
				alertaVO.setAlerta(alerta); // SHOW_ALERT aqui!
			}
		}
		// Chamada para PROCEDURE MBCP_VER_PAC_INTERNADO Chamada da procedure MBCP_VER_PAC_INTERNADO
		this.verificarPacienteInternado(vo, alertaVO); // Verificar o CONVÊNIO/PLANO se o paciente estiver internado

		// PROIBE AGENDAR cirurgia eletiva pré-escala SUS, somente médico pelo portal
		if (this.isHCPA() && DominioNaturezaFichaAnestesia.ELE.equals(vo.getCirurgia().getNaturezaAgenda())) {

			DominioGrupoConvenio valorGrupoConvenio = vo.getCirurgia().getConvenioSaudePlano().getConvenioSaude().getGrupoConvenio();

			if (valorGrupoConvenio == null) {
				// Assinale apenas um profissional para RESPONSÁVEL pela cirurgia
				throw new ApplicationBusinessException(AgendaProcedimentosONExceptionCode.MBC_01151);
			} else {
				if (DominioGrupoConvenio.S.equals(valorGrupoConvenio)) { // Convênio SUS
					// Verificar se executou a ESCALA DO DIA
					List<MbcControleEscalaCirurgica> listaControleEscalaCirurgica = this.getMbcControleEscalaCirurgicaDAO().pesquisarControleEscalaCirurgicaPorUnfSeqDataPesquisa(
							vo.getCirurgia().getUnidadeFuncional().getSeq(), vo.getDataCirurgiaTruncada());

					if (listaControleEscalaCirurgica.isEmpty()) { // NÃO EXECUTOU ESCALA PARA O DIA

						// Chamada da MBCP_BUSCA_PRINCIPAL_TELA
						PesquisaPrincipalTelaVO pesquisaPrincipalTelaVO = this.pesquisarPrincipalTela(vo.getListaProcedimentosVO());

						MbcProcedimentoCirurgicos procedimentoCirurgicos = this.getMbcProcedimentoCirurgicoDAO().obterPorChavePrimaria(
								pesquisaPrincipalTelaVO.getProcedimentoPrincipal().getId().getEprPciSeq());

						if (DominioTipoProcedimentoCirurgico.CIRURGIA.equals(procedimentoCirurgicos.getTipo())) {
							// O item principal é CIRURGIA
							throw new ApplicationBusinessException(AgendaProcedimentosONExceptionCode.MBC_01334);
						}
					}
				}
			}
		}
		// ATENÇÃO: Conforme a documentação de análise a chamada da PROCEDURE MBCP_VER_COLISAO foi desativada
		
		CirurgiaTelaProfissionalVO profissionalSelecionado = vo.obterProfissionalResponsavel();
		if (DominioFuncaoProfissional.ANC.equals(profissionalSelecionado.getFuncaoProfissional())
				|| DominioFuncaoProfissional.ANP.equals(profissionalSelecionado.getFuncaoProfissional())) {
			// Chamada da PROCEDURE MBCP_VER_COLISAO_ANESTESISTA
			this.verificarColisaoAnestesista(vo);
		}

	}

}