class FichaPreOperatoriaON extends BaseBusiness {

	public List<FichaPreOperatoriaVO> listarProcedimentoPorCirurgia(
			Short seqUnidadeCirurgica, String unidadeCirurgica,
			Short seqUnidadeInternacao, Date dataCirurgia, Integer prontuario) throws ApplicationBusinessException {
		if(dataCirurgia == null){
			throw new ApplicationBusinessException(FichaPreOperatoriaONExceptionCode.ERRO_FICHA_PRE_OPERATORIA_DATA_CIRURGIA_NULA);
		}
		
		List<FichaPreOperatoriaVO> listVo = new ArrayList<FichaPreOperatoriaVO>();
		
		List<MbcProcEspPorCirurgias> listProcedimentoPorCirurgia = getMbcProcEspPorCirurgiasDAO().listarMbcProcEspPorCirurgiasPorDataCrgEUnidadeCrg(seqUnidadeCirurgica, seqUnidadeInternacao, dataCirurgia, prontuario);
		
		if(listProcedimentoPorCirurgia.isEmpty()){
			throw new ApplicationBusinessException(FichaPreOperatoriaONExceptionCode.MENSAGEM_NENHUM_REGISTRO_ENCONTRADO_PESQUISA);
		}
		
		for (int i =0; i< listProcedimentoPorCirurgia.size(); i++) {
			MbcProcEspPorCirurgias procedimentoPorCirurgia  = listProcedimentoPorCirurgia.get(i);
			FichaPreOperatoriaVO vo = new FichaPreOperatoriaVO();
			
			vo.setDtCirurgia(procedimentoPorCirurgia.getCirurgia().getData());
			vo.setNome(procedimentoPorCirurgia.getCirurgia().getPaciente().getNome());
			vo.setIdade(getFichaPreOperatoriaRN().mbccIdadeExt(procedimentoPorCirurgia.getCirurgia().getPaciente().getDtNascimento(), procedimentoPorCirurgia.getCirurgia().getData()));
			vo.setProntuario(CoreUtil.formataProntuario(procedimentoPorCirurgia.getCirurgia().getPaciente().getProntuario()));
			
			AghUnidadesFuncionais unfPac = getAghuFacade()
					.pesquisarUnidadesFuncionaisPaciente(
							DominioPacAtendimento.S, null, procedimentoPorCirurgia.getCirurgia().getPaciente().getCodigo(),
							Boolean.FALSE).get(0);//Esta consulta sempre retornará registros porque é feito inner join na busca principal
			vo.setUnidade(getFichaPreOperatoriaRN().mbccGetunfDesc(unfPac.getSeq()));
			
			vo.setLocal(getEscalaCirurgiasON().pesquisaQuarto(procedimentoPorCirurgia.getCirurgia().getPaciente().getCodigo()));
			vo.setNroAgenda(procedimentoPorCirurgia.getCirurgia().getNumeroAgenda());
			if ((procedimentoPorCirurgia.getCirurgia().getDataPrevisaoInicio()) != null){
				vo.setDthrPrevInicio(procedimentoPorCirurgia.getCirurgia().getDataPrevisaoInicio());
			}
			vo.setUnidadeCirurgica(unidadeCirurgica);
			
			listarProcedimento(procedimentoPorCirurgia.getProcedimentoCirurgico().getDescricao(), vo);
			listarAreaTricotomia(procedimentoPorCirurgia.getProcedimentoCirurgico().getSeq(), vo);
			
			while((i+1<=listProcedimentoPorCirurgia.size()-1)
					    && (procedimentoPorCirurgia.getCirurgia().getSeq().equals(listProcedimentoPorCirurgia.get(i+1).getCirurgia().getSeq()))
						&& !(procedimentoPorCirurgia.getProcedimentoCirurgico().getSeq().equals(listProcedimentoPorCirurgia.get(i+1).getProcedimentoCirurgico().getSeq()))){
				listarProcedimento(listProcedimentoPorCirurgia.get(i+1).getProcedimentoCirurgico().getDescricao(), vo);
				listarAreaTricotomia(listProcedimentoPorCirurgia.get(i+1).getProcedimentoCirurgico().getSeq(), vo);
				i++;
			}
			
			listVo.add(vo);
		}
					
		CoreUtil.ordenarLista(listVo, FichaPreOperatoriaVO.Fields.DTHR_PREV_INICIO_ORDER.toString(), true);
		CoreUtil.ordenarLista(listVo, FichaPreOperatoriaVO.Fields.NRO_AGENDA_ORDER.toString(), true);
				
		return listVo;
	}

}