class ManterSumarioRN extends BaseBusiness {

	@SuppressWarnings({"PMD.ExcessiveMethodLength", "PMD.NPathComplexity"})
	protected void processaListaPrescricaoDietas(
			List<MpmPrescricaoDieta> listaPrescricaoDieta, Integer seqAtendimento,
			Integer apaSeq, Date dataHoraInicio,
			Date dataHoraFim, Date dataReferencia)
			throws ApplicationBusinessException {
		ManterSintaxeSumarioRN manterSintaxeSumarioRN = getManterSintaxeSumarioRN();
		MpmDataItemSumarioDAO mpmDataItemSumarioDAO = getMpmDataItemSumarioDAO();
		MpmItemPrescricaoSumarioDAO mpmItemPrescricaoSumarioDAO = getMpmItemPrescricaoSumarioDAO();
		MpmPrescricaoDietaDAO mpmPrescricaoDietaDAO = getMpmPrescricaoDietaDAO();
		
		Date data = null;
		String valorP = null;
		String valorS = null;
		Boolean achouP = false;
		Boolean achouS = false;
		Integer seqp = null;
		
		for (MpmPrescricaoDieta prescricaoDietaAux : listaPrescricaoDieta) {
			MpmPrescricaoDieta prescricaoDieta = prescricaoDietaAux;
			Integer ituSeq = manterSintaxeSumarioRN
					.montaSintaxeSumarioItemDietasMedicas(seqAtendimento,
							apaSeq, prescricaoDieta.getId().getSeq());
			if (ituSeq > 0) {
				data = dataReferencia;
				valorP = null;
				valorS = null;
				if (DateValidator.validaDataMenor(prescricaoDieta.getDthrInicio(),
						dataHoraFim)) {
					valorP = DominioValorDataItemSumario.P.toString();
				}
				if (prescricaoDieta.getDthrFim() != null
						&& DateValidator.validaDataMenor(prescricaoDieta
								.getDthrFim(), dataHoraFim)
						&& prescricaoDieta.getServidorValidaMovimentacao() != null
						&& DominioIndPendenteItemPrescricao.N
								.equals(prescricaoDieta.getIndPendente())) {
					valorS = DominioValorDataItemSumario.S.toString();
				}
				achouP = false;
				achouS = false;
				seqp = 0;

				List<MpmDataItemSumario> listaDataItemSumario = mpmDataItemSumarioDAO
						.listarDataItemSumario(seqAtendimento, apaSeq, ituSeq);
				for (MpmDataItemSumario dataItemSumario : listaDataItemSumario) {
					seqp = dataItemSumario.getId().getSeqp();
					if (valorP != null
							&& valorP.equals(dataItemSumario.getValor())
							&& DateUtil.diffInDays(DateUtil
									.truncaData(dataItemSumario.getData()),
									DateUtil.truncaData(data)) == 0) {
						achouP = true;
					}
					if (valorS != null
							&& valorS.equals(dataItemSumario.getValor())
							&& DateUtil.diffInDays(DateUtil
									.truncaData(dataItemSumario.getData()),
									DateUtil.truncaData(data)) == 0) {
						achouS = true;
					}

				}
				if (!achouP && valorP != null) {
					seqp = seqp + 1;

					MpmDataItemSumario dis = new MpmDataItemSumario();
					MpmDataItemSumarioId disId = new MpmDataItemSumarioId();
					disId.setApaAtdSeq(seqAtendimento);
					disId.setApaSeq(apaSeq);
					disId.setItuSeq(ituSeq);
					disId.setSeqp(seqp);
					dis.setId(disId);

					dis.setData(data);
					dis.setValor(valorP);

					MpmItemPrescricaoSumario itemPrescricaoSumarios = mpmItemPrescricaoSumarioDAO
							.obterPorChavePrimaria(ituSeq);

					dis.setItemPrescricaoSumarios(itemPrescricaoSumarios);

					mpmDataItemSumarioDAO.persistir(dis);
					mpmDataItemSumarioDAO.flush();
				}
				if (!achouS && valorS != null) {
					seqp = seqp + 1;

					MpmDataItemSumario dis = new MpmDataItemSumario();
					MpmDataItemSumarioId disId = new MpmDataItemSumarioId();
					disId.setApaAtdSeq(seqAtendimento);
					disId.setApaSeq(apaSeq);
					disId.setItuSeq(ituSeq);
					disId.setSeqp(seqp);
					dis.setId(disId);

					dis.setData(data);
					dis.setValor(valorS);

					MpmItemPrescricaoSumario itemPrescricaoSumarios = mpmItemPrescricaoSumarioDAO
							.obterPorChavePrimaria(ituSeq);
					dis.setItemPrescricaoSumarios(itemPrescricaoSumarios);

					mpmDataItemSumarioDAO.persistir(dis);
					mpmDataItemSumarioDAO.flush();
				}
			}

			List<MpmPrescricaoDieta> listaAux = mpmPrescricaoDietaDAO
					.obterPrescricoesDietaPai(prescricaoDieta.getId().getSeq(),
							seqAtendimento, dataHoraInicio, dataHoraFim);

			if (listaAux != null && !listaAux.isEmpty()) {
				processaListaPrescricaoDietas(listaAux, seqAtendimento, apaSeq,
						dataHoraInicio, dataHoraFim, dataReferencia);
			}
		}
	}

}