docs: public InvoiceItem createAdjustmentItem(final Invoice invoiceToBeAdjusted,
                                              final UUID invoiceItemId,
                                              @Nullable final BigDecimal positiveAdjAmount,
                                              @Nullable final Currency currency,
                                              final LocalDate effectiveDate,
                                              final String description,
                                              @Nullable final String itemDetails,
                                              final InternalCallContext context) throws InvoiceApiException {
          final InvoiceItem invoiceItemToBeAdjusted = Iterables.<InvoiceItem>tryFind(invoiceToBeAdjusted.getInvoiceItems(),
                                                                                     new Predicate<InvoiceItem>() {
                                                                                         @Override
                                                                                         public boolean apply(final InvoiceItem input) {
                                                                                             return input.getId().equals(invoiceItemId);
                                                                                         }
                                                                                     }).orNull();
          if (invoiceItemToBeAdjusted == null) {
              throw new InvoiceApiException(ErrorCode.INVOICE_ITEM_NOT_FOUND, invoiceItemId);
          }
  
          // Check the specified currency matches the one of the existing invoice
          final Currency currencyForAdjustment = MoreObjects.firstNonNull(currency, invoiceItemToBeAdjusted.getCurrency());
          if (invoiceItemToBeAdjusted.getCurrency() != currencyForAdjustment) {
              throw new InvoiceApiException(ErrorCode.CURRENCY_INVALID, currency, invoiceItemToBeAdjusted.getCurrency());
          }
  
          // Reuse the same logic we have for refund with item adjustment
          final Map<UUID, BigDecimal> input = new HashMap<UUID, BigDecimal>();
          input.put(invoiceItemId, positiveAdjAmount);
  
          final Map<UUID, BigDecimal> output = dao.computeItemAdjustments(invoiceToBeAdjusted.getId().toString(), input, context);
  
          // Nothing to adjust
          if (output.get(invoiceItemId) == null) {
              return null;
          }
  
          // If we pass that stage, it means the validation succeeded so we just need to extract resulting amount and negate the result.
          final BigDecimal amountToAdjust = output.get(invoiceItemId).negate();
          // Finally, create the adjustment
  
          return new InvoiceItemCatalogBase(UUIDs.randomUUID(),
                                            context.getCreatedDate(),
                                            invoiceItemToBeAdjusted.getInvoiceId(),
                                            invoiceItemToBeAdjusted.getAccountId(),
                                            null,
                                            null,
                                            description,
                                            invoiceItemToBeAdjusted.getProductName(),
                                            invoiceItemToBeAdjusted.getPlanName(),
                                            invoiceItemToBeAdjusted.getPhaseName(),
                                            invoiceItemToBeAdjusted.getUsageName(),
                                            effectiveDate,
                                            effectiveDate,
                                            amountToAdjust,
                                            null,
                                            currencyForAdjustment,
                                            invoiceItemToBeAdjusted.getId(),
                                            null,
                                            itemDetails,
                                            InvoiceItemType.ITEM_ADJ);
      }