---
title: Return line item calculator
slug: commerce-connect-13/docs/calculating-orders-return-line-item-calculator
docTags: 
createdAt: 2026-07-23T09:44:49.000Z
---

- **ExtendedPrice** – Calculates the price including 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** – Only calculates the price with the "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 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

By inheriting from the default implementation of the interface, DefaultReturnLineItemCalculator, you override the calculations. Just override one or more methods in DefaultReturnLineItemCalculator.

```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 the return values are not negative after the calculation. To change the behavior, override the validation methods, depending on which validation you should override.

```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 be greater than 0");
              }
          }
        protected override void ValidateDiscountedPrice(Money money)
          {
            if (money.Amount <= 0)
              {
                throw new ValidationException("Discounted price must be greater than 0");
              }
          }
        protected override void ValidateSalesTax(Money money)
          {
            if (money.Amount <= 0)
              {
                throw new ValidationException("Sales tax must be greater than 0");
              }
          }
      }
```
