class ManterSintaxeSumarioRN extends BaseBusiness {

	@SuppressWarnings({"PMD.ExcessiveMethodLength", "PMD.NPathComplexity"})
	public Integer montaSintaxeSumarioItemNutricaoParental(
			Integer seqAtendimento, Integer seqAtendimentoPaciente,
			Integer seqNutricaoParental) throws ApplicationBusinessException {
		MpmPrescricaoNptDAO mpmPrescricaoNptDAO = getMpmPrescricaoNptDAO();
		MpmComposicaoPrescricaoNptDAO mpmComposicaoPrescricaoNptDAO = getMpmComposicaoPrescricaoNptDAO();
		MpmItemPrescricaoNptDAO mpmItemPrescricaoNptDAO = getMpmItemPrescricaoNptDAO();
		MpmItemPrescricaoSumarioDAO mpmItemPrescricaoSumarioDAO = getMpmItemPrescricaoSumarioDAO();
		MpmItemNptSumarioDAO mpmItemNptSumarioDAO = getMpmItemNptSumarioDAO();
		

		Boolean primeiraVez = true;
		Boolean umaVez = true;
		Integer cont = 0;
		Integer ituSeq = 0;
		StringBuilder sintaxePnp = new StringBuilder(30);
		HashMap<Integer, MpmItemNptSumario> itemNptSumarioMap = new HashMap<Integer, MpmItemNptSumario>();
		
		MpmPrescricaoNpt prescNpt = mpmPrescricaoNptDAO.obterNutricaoParentalTotalPeloId(seqAtendimento, seqNutricaoParental);
		List<MpmComposicaoPrescricaoNpt> listaComposicaoPrescNpt = mpmComposicaoPrescricaoNptDAO.listarComposicoesPrescricaoNpt(seqAtendimento, prescNpt.getId().getSeq().longValue());
		for (MpmComposicaoPrescricaoNpt compPrescNpt : listaComposicaoPrescNpt) {
			umaVez = true;
			List<MpmItemPrescricaoNpt> itemPrescricaoNpt = mpmItemPrescricaoNptDAO.listarItensPrescricaoNpt(seqAtendimento, prescNpt.getId().getSeq(), compPrescNpt.getId().getSeqp());
			for (MpmItemPrescricaoNpt itemPrescNpt : itemPrescricaoNpt) {
				cont = cont + 1;
				
				MpmItemNptSumario ins = new MpmItemNptSumario(); 
				//tab_pnp(v_cont).pnp_observacao 				:= r_prcr_pnp.observacao;
				ins.setObservacao(prescNpt.getObservacao());
				//tab_pnp(v_cont).pnp_ind_segue_gotejo_padrao 	:= r_prcr_pnp.ind_segue_gotejo_padrao;
				ins.setSegueGotejoPadrao(prescNpt.getSegueGotejoPadrao());
				//tab_pnp(v_cont).pnp_ind_bomba_infusao	 		:= r_prcr_pnp.ind_bomba_infusao;
				ins.setBombaInfusao(prescNpt.getBombaInfusao());
				//tab_pnp(v_cont).pnp_ped_seq 					:= r_prcr_pnp.ped_seq;
				ins.setProcedimentoEspecialDiverso(prescNpt.getProcedEspecialDiversos());
				//tab_pnp(v_cont).pnp_fnp_seq 					:= r_prcr_pnp.fnp_seq;
				ins.setAfaFormulaNptPadrao(prescNpt.getAfaFormulaNptPadrao());//TODO Alterar quando o objeto for criado.
				//tab_pnp(v_cont).pnp_velocidade_administracao 	:= r_compos_prcr_pnp.velocidade_administracao;
				ins.setVelocidadeAdministracao(compPrescNpt.getVelocidadeAdministracao());
				//tab_pnp(v_cont).pnp_tva_seq 					:= r_compos_prcr_pnp.tva_seq;
				ins.setTipoVelocidadeAdministracao(compPrescNpt.getAfaTipoVelocAdministracoes());
				//tab_pnp(v_cont).pnp_qtde_horas_correr 			:= r_compos_prcr_pnp.qtde_horas_correr;
				ins.setQtdeHorasCorrer(compPrescNpt.getQtdeHorasCorrer());
				//tab_pnp(v_cont).pnp_tic_seq 					:= r_compos_prcr_pnp.tic_seq;
				ins.setTipoComposicao(compPrescNpt.getAfaTipoComposicoes());
				//tab_pnp(v_cont).pnp_qtde_prescrita 			:= r_item_prcr_pnp.qtde_prescrita;
				ins.setQtdePrescrita(itemPrescNpt.getQtdePrescrita());
				//tab_pnp(v_cont).pnp_fds_seq 					:= r_item_prcr_pnp.fds_seq;
				ins.setFormaDosagem(itemPrescNpt.getAfaFormaDosagens());
				//tab_pnp(v_cont).pnp_cnp_seq 					:= r_item_prcr_pnp.cnp_med_mat_codigo;
				ins.setComponenteNutricaoParental(itemPrescNpt.getAfaComponenteNpts());
				
				 
				itemNptSumarioMap.put(cont, ins);
				
				if(!primeiraVez){
					sintaxePnp.append('\n');
				}
				primeiraVez = false;

				sintaxePnp.append(' ');
				sintaxePnp.append(StringUtils.capitalize(StringUtils.lowerCase(itemPrescNpt.getAfaComponenteNpts().getDescricao())));//ComponenteNpts e Descricao, conforme mapeamento, sao notNull
				
				if(itemPrescNpt.getAfaComponenteNpts().getIndImpDoseSumario()){//ComponenteNpts e IndImpDoseSumario, conforme mapeamento, sao notNull
					sintaxePnp.append(' ');
					sintaxePnp.append(itemPrescNpt.getQtdePrescrita());
					if(itemPrescNpt.getUnidadeMedidaMedicas() !=  null && itemPrescNpt.getUnidadeMedidaMedicas().getDescricao() != null){
						sintaxePnp.append(' ');
						sintaxePnp.append(itemPrescNpt.getUnidadeMedidaMedicas().getDescricao());
					}else{
						sintaxePnp.append(' ');
						sintaxePnp.append(itemPrescNpt.getAfaComponenteNpts().getAfaMedicamentos().getTipoApresentacaoMedicamento().getSigla());//AfaComponenteNpts e AfaMedicamentos, conforme mapeamento, sao notNull
					}
				} 
				if(umaVez){
					umaVez = false;
					sintaxePnp.append(' ');
					sintaxePnp.append(compPrescNpt.getVelocidadeAdministracao());
					sintaxePnp.append(' ');
					sintaxePnp.append(compPrescNpt.getAfaTipoVelocAdministracoes() != null ? compPrescNpt.getAfaTipoVelocAdministracoes().getDescricao() : "");
				}
			}//fim do for interno
		}//fim do for externo
		
		sintaxePnp.append('\n');
		if(prescNpt.getSegueGotejoPadrao()){
			sintaxePnp.append("Segue gotejo padrão");
		}else{
			sintaxePnp.append("Não segue gotejo padrão");
		}
		if(prescNpt.getBombaInfusao()){
			sintaxePnp.append('\n');
			sintaxePnp.append("BI");
		}
		if(prescNpt.getObservacao() != null){
			sintaxePnp.append('\n');
			sintaxePnp.append(" Obs.: ");
			sintaxePnp.append(prescNpt.getObservacao());
		}
		
		List<MpmItemPrescricaoSumario> listaIps = mpmItemPrescricaoSumarioDAO.listarItensPrescricaoSumario(seqAtendimento, seqAtendimentoPaciente, sintaxePnp.toString(), DominioTipoItemPrescricaoSumario.POSITIVO_14);
		MpmItemPrescricaoSumario itemPrescSum = new MpmItemPrescricaoSumario();
		Boolean incluiuItu = false;
		if((listaIps == null || listaIps.isEmpty())){
			if (StringUtils.isNotBlank(sintaxePnp.toString())) {
				incluiuItu = true;
				itemPrescSum.setDescricao(sintaxePnp.toString());
				itemPrescSum.setTipo(DominioTipoItemPrescricaoSumario.POSITIVO_14);
				itemPrescSum.setOrigemPrescricao(DominioOrigemPrescricao.I);
				
				AghAtendimentoPacientesId atendimentoPacienteId = new AghAtendimentoPacientesId();
				atendimentoPacienteId.setAtdSeq(seqAtendimento);
				atendimentoPacienteId.setSeq(seqAtendimentoPaciente);
				
				AghAtendimentoPacientes atendimentoPaciente = getAghuFacade().obterAghAtendimentoPacientesPorChavePrimaria(atendimentoPacienteId);
				
				itemPrescSum.setAtendimentoPaciente(atendimentoPaciente);
				mpmItemPrescricaoSumarioDAO.persistir(itemPrescSum);
				mpmItemPrescricaoSumarioDAO.flush();
	
				ituSeq = itemPrescSum.getSeq(); 
			}
		} else {
			ituSeq = listaIps.get(0).getSeq();
		}
		
		if(incluiuItu){
			for(int i = 1; i <= cont; i++){
				
				MpmItemNptSumario itemNptSumarioTemp  = itemNptSumarioMap.remove(i);   
				
				MpmItemNptSumario ins = new MpmItemNptSumario();
				MpmItemNptSumarioId id = new MpmItemNptSumarioId();
				id.setItuSeq(ituSeq);
				id.setSeqp(i);
				ins.setId(id);
				ins.setItemPrescricaoSumario(itemPrescSum);

				ins.setObservacao(itemNptSumarioTemp.getObservacao());
				ins.setSegueGotejoPadrao(itemNptSumarioTemp.getSegueGotejoPadrao());
				ins.setBombaInfusao(itemNptSumarioTemp.getBombaInfusao());
				ins.setProcedimentoEspecialDiverso(itemNptSumarioTemp.getProcedimentoEspecialDiverso());
				ins.setAfaFormulaNptPadrao(itemNptSumarioTemp.getAfaFormulaNptPadrao());//TODO Alterar quando o objeto for criado.
				ins.setVelocidadeAdministracao(itemNptSumarioTemp.getVelocidadeAdministracao());
				ins.setTipoVelocidadeAdministracao(itemNptSumarioTemp.getTipoVelocidadeAdministracao());
				ins.setQtdeHorasCorrer(itemNptSumarioTemp.getQtdeHorasCorrer());
				ins.setTipoComposicao(itemNptSumarioTemp.getTipoComposicao());
				ins.setQtdePrescrita(itemNptSumarioTemp.getQtdePrescrita());
				ins.setFormaDosagem(itemNptSumarioTemp.getFormaDosagem());
				ins.setComponenteNutricaoParental(itemNptSumarioTemp.getComponenteNutricaoParental());
				
				mpmItemNptSumarioDAO.persistir(ins);
				mpmItemNptSumarioDAO.flush();
			}
		}
		
		return ituSeq;
	}

}