docs: public Boolean equalsUsingFhirPathRules(BaseDateTimeType theOther) {
  
       BaseDateTimeType me = this;
  
       // Per FHIRPath rules, we compare equivalence at the lowest precision of the two values,
       // so if we need to, we'll clone either side and reduce its precision
       int lowestPrecision = Math.min(me.getPrecision().ordinal(), theOther.getPrecision().ordinal());
       TemporalPrecisionEnum lowestPrecisionEnum = TemporalPrecisionEnum.values()[lowestPrecision];
       if (me.getPrecision() != lowestPrecisionEnum) {
         me = new DateTimeType(me.getValueAsString());
         me.setPrecision(lowestPrecisionEnum);
       }
       if (theOther.getPrecision() != lowestPrecisionEnum) {
         theOther = new DateTimeType(theOther.getValueAsString());
         theOther.setPrecision(lowestPrecisionEnum);
       }
  
  		if (me.hasTimezoneIfRequired() != theOther.hasTimezoneIfRequired()) {
  			if (me.getPrecision() == theOther.getPrecision()) {
  				if (me.getPrecision().ordinal() >= TemporalPrecisionEnum.MINUTE.ordinal() && theOther.getPrecision().ordinal() >= TemporalPrecisionEnum.MINUTE.ordinal()) {
                      boolean couldBeTheSameTime = couldBeTheSameTime(me, theOther) || couldBeTheSameTime(theOther, me);
                      if (!couldBeTheSameTime) {
                          return false;
                      }
  				}
  			}
  			return null;
  		}
  
  		// Same precision
  		if (me.getPrecision() == theOther.getPrecision()) {
          if (me.getPrecision().ordinal() >= TemporalPrecisionEnum.MINUTE.ordinal()) {
            long leftTime = me.getValue().getTime();
            long rightTime = theOther.getValue().getTime();
            return leftTime == rightTime;
          } else {
            String leftTime = me.getValueAsString();
            String rightTime = theOther.getValueAsString();
            return leftTime.equals(rightTime);
          }
  		}
  
  		// Both represent 0 millis but the millis are optional
  		if (((Integer)0).equals(me.getMillis())) {
  			if (((Integer)0).equals(theOther.getMillis())) {
  				if (me.getPrecision().ordinal() >= TemporalPrecisionEnum.SECOND.ordinal()) {
  					if (theOther.getPrecision().ordinal() >= TemporalPrecisionEnum.SECOND.ordinal()) {
  						return me.getValue().getTime() == theOther.getValue().getTime();
  					}
  				}
  			}
  		}
  
  		return false;
  	}