class ItensProcedHospitalarRN extends BaseBusiness implements Serializable {

	@SuppressWarnings({"PMD.ExcessiveMethodLength","PMD.NcssMethodCount", "PMD.NPathComplexity"})
	public void executarEnforceItemProdecHospitalar(FatItensProcedHospitalar newIph, FatItensProcedHospitalar oldIph, DominioOperacoesJournal operacao){
		
		if(DominioOperacoesJournal.UPD.equals(operacao)){
			if(CoreUtil.modificados(newIph.getMaxQtdApac(),oldIph.getMaxQtdApac())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.QTD_MAXIMA_COBRAVEL_APAC);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				
				FatCaractItemProcHosp ciph = fatCaractItemProcHospDAO.obterPorChavePrimaria(id);
				if(newIph.getMaxQtdApac() == null || newIph.getMaxQtdApac().equals((short)0)){
					if(ciph != null){
						newIph.getCaracteristicasItemProcHosp().remove(ciph);
						fatCaractItemProcHospDAO.remover(ciph);
					}
				}else if(oldIph.getMaxQtdApac() == null || oldIph.getMaxQtdApac().equals((short)0)){
					//Remove
					FatTipoCaractItens tipoCaractItem;
					if(ciph != null){
						tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(ciph.getTipoCaracteristicaItem());
						newIph.getCaracteristicasItemProcHosp().remove(ciph);
						fatCaractItemProcHospDAO.remover(ciph);
					}
					else {
						tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
					}
					//Insere
					FatCaractItemProcHosp ciphAux = new FatCaractItemProcHosp();
					ciphAux.setId(id);
					ciphAux.setValorNumerico(newIph.getMaxQtdApac().intValue());
					ciphAux.setTipoCaracteristicaItem(tipoCaractItem);
					fatCaractItemProcHospDAO.persistir(ciphAux);
					newIph.getCaracteristicasItemProcHosp().add(ciphAux);
					
				}else{
					ciph.setValorNumerico(newIph.getMaxQtdApac() != null ? newIph.getMaxQtdApac().intValue() : null);
					//fatCaractItemProcHospDAO.atualizar(ciph);Atualizar no final, quando executar o flush
				}
			}
			
			if(CoreUtil.modificados(newIph.getModoLancamentoFat(),oldIph.getModoLancamentoFat())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.MODO_LANCAMENTO_FAT);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				FatCaractItemProcHosp ciph = fatCaractItemProcHospDAO.obterPorChavePrimaria(id);
				if(DominioModoLancamentoFat.O.equals(newIph.getModoLancamentoFat())){
					if(ciph != null){
						newIph.getCaracteristicasItemProcHosp().remove(ciph);
						fatCaractItemProcHospDAO.remover(ciph);
					}
				}else if(DominioModoLancamentoFat.O.equals(oldIph.getModoLancamentoFat())){
					FatTipoCaractItens tipoCaractItem;
					if(ciph != null){
						tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(ciph.getTipoCaracteristicaItem());
						newIph.getCaracteristicasItemProcHosp().remove(ciph);
						fatCaractItemProcHospDAO.remover(ciph);
					}
					else {
						tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
					}
					
					FatCaractItemProcHosp ciphAux = new FatCaractItemProcHosp();
					ciphAux.setId(id);
					ciphAux.setValorChar(newIph.getModoLancamentoFat() != null ? newIph.getModoLancamentoFat().toString() : null);
					ciphAux.setTipoCaracteristicaItem(tipoCaractItem);
					fatCaractItemProcHospDAO.persistir(ciphAux);
					newIph.getCaracteristicasItemProcHosp().add(ciphAux);
					
				}else{
					ciph.setValorChar(newIph.getModoLancamentoFat() != null ? newIph.getModoLancamentoFat().toString() : null);
					//fatCaractItemProcHospDAO.atualizar(ciph);Atualizar no final, quando executar o flush
				}
			}

			if(CoreUtil.modificados(newIph.getCobraExcedenteBpa(),oldIph.getCobraExcedenteBpa())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.COBRA_EXCEDENTE_BPA);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				FatCaractItemProcHosp ciph = fatCaractItemProcHospDAO.obterPorChavePrimaria(id);

				FatTipoCaractItens tipoCaractItem;
				if(ciph != null){
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(ciph.getTipoCaracteristicaItem());
					newIph.getCaracteristicasItemProcHosp().remove(ciph);
					fatCaractItemProcHospDAO.remover(ciph);
				}
				else {
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				}

				if(Boolean.TRUE.equals(newIph.getCobraExcedenteBpa())){
					FatCaractItemProcHosp ciphAux = new FatCaractItemProcHosp();
					ciphAux.setId(id);
					ciphAux.setValorChar(newIph.getCobraExcedenteBpa() != null ? (newIph.getCobraExcedenteBpa() ? "S" : "N") : null);
					ciphAux.setTipoCaracteristicaItem(tipoCaractItem);
					fatCaractItemProcHospDAO.persistir(ciphAux);
				}
			}

			if(CoreUtil.modificados(newIph.getCobrancaApac(),oldIph.getCobrancaApac())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.COBRA_APAC);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				FatCaractItemProcHosp ciph = fatCaractItemProcHospDAO.obterPorChavePrimaria(id);
				FatTipoCaractItens tipoCaractItem;
				if(ciph != null){
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(ciph.getTipoCaracteristicaItem());
					newIph.getCaracteristicasItemProcHosp().remove(ciph);
					fatCaractItemProcHospDAO.remover(ciph);
				}
				else {
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				}
				if(Boolean.TRUE.equals(newIph.getCobrancaApac())){
					FatCaractItemProcHosp ciphAux = new FatCaractItemProcHosp();
					ciphAux.setId(id);
					ciphAux.setValorChar(newIph.getCobrancaApac() != null ? (newIph.getCobrancaApac() ? "S" : "N") : null);
					ciphAux.setTipoCaracteristicaItem(tipoCaractItem);
					fatCaractItemProcHospDAO.persistir(ciphAux);
				}
			}

			if(CoreUtil.modificados(newIph.getProcPrincipalApac(),oldIph.getProcPrincipalApac())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.PROCEDIMENTO_PRINCIPAL_APAC);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				FatCaractItemProcHosp ciph = fatCaractItemProcHospDAO.obterPorChavePrimaria(id);
				FatTipoCaractItens tipoCaractItem;
				if(ciph != null){
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(ciph.getTipoCaracteristicaItem());
					newIph.getCaracteristicasItemProcHosp().remove(ciph);
					fatCaractItemProcHospDAO.remover(ciph);
				}
				else {
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				}
				if(Boolean.TRUE.equals(newIph.getProcPrincipalApac())){
					FatCaractItemProcHosp ciphAux = new FatCaractItemProcHosp();
					ciphAux.setId(id);
					ciphAux.setValorChar(newIph.getProcPrincipalApac() != null ? (newIph.getProcPrincipalApac() ? "S" : "N") : null);
					ciphAux.setTipoCaracteristicaItem(tipoCaractItem);
					fatCaractItemProcHospDAO.persistir(ciphAux);
				}
			}
			
			if(CoreUtil.modificados(newIph.getCobrancaAmbulatorio(),oldIph.getCobrancaAmbulatorio())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.COBRA_BPA);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				FatCaractItemProcHosp ciph = fatCaractItemProcHospDAO.obterPorChavePrimaria(id);
				FatTipoCaractItens tipoCaractItem;
				if(ciph != null){
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(ciph.getTipoCaracteristicaItem());
					newIph.getCaracteristicasItemProcHosp().remove(ciph);
					fatCaractItemProcHospDAO.remover(ciph);
				}
				else {
					tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				}
				if(Boolean.TRUE.equals(newIph.getCobrancaAmbulatorio())){
					FatCaractItemProcHosp ciphAux = new FatCaractItemProcHosp();
					ciphAux.setId(id);
					ciphAux.setValorChar(newIph.getCobrancaAmbulatorio() != null ? (newIph.getCobrancaAmbulatorio() ? "S" : "N") : null);
					ciphAux.setTipoCaracteristicaItem(tipoCaractItem);
					fatCaractItemProcHospDAO.persistir(ciphAux);
				}
			}
		} else if(DominioOperacoesJournal.INS.equals(operacao)){
			if(newIph.getMaxQtdApac() != null && !newIph.getMaxQtdApac().equals(0)){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.QTD_MAXIMA_COBRAVEL_APAC);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);

				FatTipoCaractItens tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				FatCaractItemProcHosp ciph = new FatCaractItemProcHosp();
				ciph.setId(id);
				ciph.setTipoCaracteristicaItem(tipoCaractItem);
				ciph.setValorNumerico(newIph.getMaxQtdApac().intValue());
				fatCaractItemProcHospDAO.persistir(ciph);
			}
			
			if(!DominioModoLancamentoFat.O.equals(newIph.getModoLancamentoFat())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.MODO_LANCAMENTO_FAT);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);

				FatTipoCaractItens tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				FatCaractItemProcHosp ciph = new FatCaractItemProcHosp();
				ciph.setId(id);
				ciph.setTipoCaracteristicaItem(tipoCaractItem);
				ciph.setValorChar(newIph.getModoLancamentoFat() != null ? newIph.getModoLancamentoFat().toString() : null);
				fatCaractItemProcHospDAO.persistir(ciph);
			}
			
			if(!Boolean.FALSE.equals(newIph.getCobraExcedenteBpa())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.COBRA_EXCEDENTE_BPA);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				
				FatTipoCaractItens tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				FatCaractItemProcHosp ciph = new FatCaractItemProcHosp();
				ciph.setId(id);
				ciph.setTipoCaracteristicaItem(tipoCaractItem);
				ciph.setValorChar(newIph.getCobraExcedenteBpa() != null ? (newIph.getCobraExcedenteBpa() ? "S" : "N") : null);
				fatCaractItemProcHospDAO.persistir(ciph);
			}

			if(!Boolean.FALSE.equals(newIph.getCobrancaApac())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.COBRA_APAC);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				
				FatTipoCaractItens tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				FatCaractItemProcHosp ciph = new FatCaractItemProcHosp();
				ciph.setId(id);
				ciph.setTipoCaracteristicaItem(tipoCaractItem);
				ciph.setValorChar(newIph.getCobraExcedenteBpa() != null ? (newIph.getCobraExcedenteBpa() ? "S" : "N") : null);
				fatCaractItemProcHospDAO.persistir(ciph);
			}

			if(!Boolean.FALSE.equals(newIph.getProcPrincipalApac())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.PROCEDIMENTO_PRINCIPAL_APAC);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);

				FatTipoCaractItens tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				FatCaractItemProcHosp ciph = new FatCaractItemProcHosp();
				ciph.setId(id);
				ciph.setTipoCaracteristicaItem(tipoCaractItem);
				ciph.setValorChar(newIph.getProcPrincipalApac() != null ? (newIph.getProcPrincipalApac() ? "S" : "N") : null);
				fatCaractItemProcHospDAO.persistir(ciph);
			}

			if(!Boolean.FALSE.equals(newIph.getCobrancaAmbulatorio())){
				Integer vTctSeq = tipoCaracteristicaItemRN.obterTipoCaractItemSeq(DominioFatTipoCaractItem.COBRA_BPA);
				FatCaractItemProcHospId id = new FatCaractItemProcHospId();
				id.setIphPhoSeq(newIph.getId().getPhoSeq());
				id.setIphSeq(newIph.getId().getSeq());
				id.setTctSeq(vTctSeq);
				
				FatTipoCaractItens tipoCaractItem = getFatTipoCaractItensDAO().obterPorChavePrimaria(vTctSeq);
				FatCaractItemProcHosp ciph = new FatCaractItemProcHosp();
				ciph.setId(id);
				ciph.setTipoCaracteristicaItem(tipoCaractItem);
				ciph.setValorChar(newIph.getCobrancaAmbulatorio() != null ? (newIph.getCobrancaAmbulatorio() ? "S" : "N") : null);
				fatCaractItemProcHospDAO.persistir(ciph);
			}
		}
	}

}