docs: public boolean isSameKind(final Item other) {
  
          final InvoiceItem otherItem = other.toInvoiceItem();
  
          // See https://github.com/killbill/killbill/issues/286
          return otherItem != null &&
                 !id.equals(otherItem.getId()) &&
                 // Finally, for the tricky part... In case of complete repairs, the new invoiceItem will always meet all of the
                 // following conditions: same type, subscription, start date. Depending on the catalog configuration, the end
                 // date check could also match (e.g. repair from annual to monthly). For that scenario, we need to default
                 // to catalog checks (the rate check is a lame check for versioned catalogs).
                 MoreObjects.firstNonNull(planName, "").equals(MoreObjects.firstNonNull(otherItem.getPlanName(), "")) &&
                 MoreObjects.firstNonNull(phaseName, "").equals(MoreObjects.firstNonNull(otherItem.getPhaseName(), "")) &&
                 MoreObjects.firstNonNull(rate, BigDecimal.ZERO).compareTo(MoreObjects.firstNonNull(otherItem.getRate(), BigDecimal.ZERO)) == 0;
      }