---
title: Return line item calculator
slug: commerce-connect-15/docs/return-line-item-calculator
docTags: 
createdAt: 2026-07-30T20:34:45.000Z
---

## extendedPrice

Calculates the price including the order-level discount amount (spread over all return line items in the shipment) and any return line item discount amounts.

```csharp
public void GetExtendedPrice(IReturnLineItem returnLineItem, Currency currency, IReturnLineItemCalculator returnLineItemCalculator) {
  var extendedPrice = returnLineItemCalculator.GetExtendedPrice(returnLineItem, currency);
  Debug.WriteLine("Extended price for '{0}': {1}", returnLineItem.Code, extendedPrice);
}
```

## discountedPrice

Calculates the price with only the return line item discount amount — that is, the discount for a specific return line item.

```csharp
public void GetDiscountedPrice(IReturnLineItem returnLineItem, Currency currency, IReturnLineItemCalculator returnLineItemCalculator) {
  var discountedPrice = returnLineItemCalculator.GetDiscountedPrice(returnLineItem, currency);
  Debug.WriteLine("Discounted price for '{0}': {1}", returnLineItem.Code, discountedPrice);
}
```

## salesTax

Calculates the sales tax for a return line item.

```csharp
public void GetSalesTax(IReturnLineItem returnLineItem, IMarket market, Currency currency, IOrderAddress shippingAddress, IReturnLineItemCalculator returnLineItemCalculator) {
  var salesTax = returnLineItemCalculator.GetSalesTax(returnLineItem, market, currency, shippingAddress);
  Debug.WriteLine("Sales tax for '{0}': {1}", returnLineItem.Code, salesTax);
}
```

## Change the default calculation

Inherit from `DefaultReturnLineItemCalculator`, the default implementation of `IReturnLineItemCalculator`, and override one or more of its methods to change the calculation behavior.

```csharp
public class ReturnLineItemCalculatorOverridingDefault: DefaultReturnLineItemCalculator {
  public ReturnLineItemCalculatorOverridingDefault(ITaxCalculator taxCalculator): base(taxCalculator) {}
  protected override Money CalculateExtendedPrice(IReturnLineItem lineItem, Currency currency) {
    return new Money(0, currency);
  }
  protected override Money CalculateDiscountedPrice(IReturnLineItem returnLineItem, Currency currency) {
    return new Money(0, currency);
  }
  protected override Money CalculateSalesTax(IReturnLineItem returnLineItem, IMarket market, Currency currency, IOrderAddress shippingAddress) {
    return new Money(0, currency);
  }
}
```

## Change the default validation

The default implementation validates that each return value is non-negative after calculation. To change the behavior, override the appropriate method: `ValidateExtendedPrice`, `ValidateDiscountedPrice`, or `ValidateSalesTax`.

```csharp
public class ReturnLineItemCalculatorOverridingDefault: DefaultReturnLineItemCalculator {
  public ReturnLineItemCalculatorOverridingDefault(ITaxCalculator taxCalculator): base(taxCalculator) {}
  protected override void ValidateExtendedPrice(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Extended price must not be negative.");
    }
  }
  protected override void ValidateDiscountedPrice(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Discounted price must not be negative.");
    }
  }
  protected override void ValidateSalesTax(Money money) {
    if (money.Amount < 0) {
      throw new ValidationException("Sales tax must not be negative.");
    }
  }
}
```
