class ConfirmarPrescricaoMedicaRN extends BaseBusiness {

	public Map<MpmPrescricaoProcedimento, FatProcedHospInternos> listarProcedimentosGeracaoLaudos(
			MpmPrescricaoMedica prescricao)
			throws ApplicationBusinessException {

		Map<MpmPrescricaoProcedimento, FatProcedHospInternos> retorno = new HashMap<MpmPrescricaoProcedimento, FatProcedHospInternos>();

		List<MpmPrescricaoProcedimento> procedimentos = this
				.getMpmPrescricaoProcedimentoDAO()
				.listarProcedimentosGeracaoLaudos(prescricao);

		IFaturamentoFacade faturamentoFacade = this.getFaturamentoFacade();

		Iterator<MpmPrescricaoProcedimento> prescricaoProcedimentoIterator = procedimentos
				.iterator();

		while (prescricaoProcedimentoIterator.hasNext()) {

			MpmPrescricaoProcedimento procedimento = prescricaoProcedimentoIterator
					.next();
			if (procedimento == null) {
				continue;
			}

			if (!this.obterIndicadorJustificativaLaudoProcedimento(procedimento
					.getMatCodigo(), procedimento.getProcedimentoCirurgico(),
					procedimento.getProcedimentoEspecialDiverso(), prescricao
							.getAtendimento().getInternacao(), prescricao
							.getAtendimento().getAtendimentoUrgencia(),
					prescricao.getAtendimento().getHospitalDia(), null)) {
				prescricaoProcedimentoIterator.remove();
				continue;
			}

			if (procedimento.getDuracaoTratamentoSolicitado() == null
					|| procedimento.getDuracaoTratamentoSolicitado() == 0) {
				procedimento.setDuracaoTratamentoSolicitado((short) 1);
				procedimento.setPrescricaoMedica(prescricao);
			}

			List<FatProcedHospInternos> listaFatProcedmentosInternos = faturamentoFacade
					.listarFatProcedHospInternosPorMaterial(procedimento
							.getMatCodigo());

			if (listaFatProcedmentosInternos.isEmpty()) {
				throw new ApplicationBusinessException(
						ConfirmarPrescricaoMedicaExceptionCode.PROCEDIMENTO_SEM_EQUIVALENTE_FATURAMENTO,
						procedimento.getMatCodigo().getDescricao());
			}

			FatProcedHospInternos fatProcedHospInternos = listaFatProcedmentosInternos
					.get(0);

			retorno.put(procedimento, fatProcedHospInternos);

		}

		return retorno;
	}

}