code: public boolean shouldAggregateSoils(HashMap<String, String> currentSoil, HashMap<String, String> previousSoil) {
  		float ruCurrent;
  		float ruPrevious;
  		float resultFirstRule;
  		float resultSecRule;
  		boolean firstRule;
  		boolean secRule;
  
  		// ru in mm/m
  		ruCurrent = (parseFloat(currentSoil.get(SLDUL)) - parseFloat(currentSoil.get(SLLL))) * 1000.0f;
  		ruPrevious = (parseFloat(previousSoil.get(SLDUL)) - parseFloat(previousSoil.get(SLLL))) * 1000f;
  		resultFirstRule = round(Math.abs(ruCurrent - ruPrevious));
  		firstRule = resultFirstRule <= FIRST_THRESHOLD_DEFAULT;
  
  		/**
  		 * First rule : (currentRu - previousRu) <= 5 mm/m Second rule :
  		 * (currentBdm - previousBdm) <= 0.05 g/cm3 Soil layers are aggregated
  		 * if the rules below are both true
  		 * */
  		resultSecRule = round(Math.abs(parseFloat(currentSoil.get(SLBDM)) - parseFloat(previousSoil.get(SLBDM))));
  		secRule = (round(resultSecRule) <= SECOND_THRESHOLD_DEFAULT);
  
  		log.debug("*********************");
  		log.debug("Ru current : "+ruCurrent);
  		log.debug("Ru previous : "+ruPrevious);
  		log.debug("First rule : " + resultFirstRule + " <= " + FIRST_THRESHOLD_DEFAULT + " ? " + firstRule);
  		log.debug("Sec rule : " + resultSecRule + " <= " + SECOND_THRESHOLD_DEFAULT + " ? " + secRule);
  		log.debug("*********************");
  
  		return firstRule && secRule;
  	}
docs: Criteria for merging soils ru is the maximum available water reserve
  (reserve utile) sdul is the field capacity slll is the wilting point
  (point de fletrissement permanent) slbdm is the bulk density
  
  @param currentSoil
  @param previousSoil
  @return