class ManterSumarioRN extends BaseBusiness {

	@SuppressWarnings("PMD.NPathComplexity")
	protected void processaListaPrescricaoCuidados(
			List<MpmPrescricaoCuidado> listaPrescricaoCuidado,
			Integer seqAtendimento, Integer apaSeq, Date dataHoraInicio,
			Date dataHoraFim, Date dataReferencia) throws ApplicationBusinessException {
		MpmItemPrescricaoSumarioDAO mpmItemPrescricaoSumarioDAO = getMpmItemPrescricaoSumarioDAO();
		MpmPrescricaoCuidadoDAO mpmPrescricaoCuidadoDAO = getMpmPrescricaoCuidadoDAO();
		MpmDataItemSumarioDAO mpmDataItemSumarioDAO = getMpmDataItemSumarioDAO();
		ManterSintaxeSumarioRN manterSintaxeSumarioRN = getManterSintaxeSumarioRN();
		
		Date data = null;
		String valorP = null;
		String valorS = null;
		Boolean achouP = false;
		Boolean achouS = false;
		Integer seqp = null;
		
		for (MpmPrescricaoCuidado prescricaoCuidado : listaPrescricaoCuidado) {
			Integer ituSeq = manterSintaxeSumarioRN.montaSintaxeSumarioItemCuidadosMedicos(seqAtendimento, apaSeq, prescricaoCuidado.getId().getSeq());
			if(ituSeq > 0){
				data = dataReferencia;
				valorP = null;
				valorS = null;
				if(DateValidator.validaDataMenor(prescricaoCuidado.getDthrInicio(), dataHoraFim)){
					valorP = DominioValorDataItemSumario.P.toString();
				}
				if(prescricaoCuidado.getDthrFim() != null && DateValidator.validaDataMenor(prescricaoCuidado.getDthrFim(), dataHoraFim) && prescricaoCuidado.getServidorValidaMovimentacao() != null && DominioIndPendenteItemPrescricao.N.equals(prescricaoCuidado.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<MpmPrescricaoCuidado> listaAux = mpmPrescricaoCuidadoDAO
					.obterPrescricoesCuidadoPai(prescricaoCuidado.getId()
							.getSeq(), seqAtendimento, dataHoraInicio,
							dataHoraFim);

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

}