---
displayed_sidebar: servicesSidebar
---

import ParameterTypes from "@site/src/components/ParameterTypes"

# TotalsService

A service that calculates total and subtotals for orders, carts etc..

## Implements

## constructor

### Parameters

<ParameterTypes parameters={[{"name":"__namedParameters","type":"`TotalsServiceProps`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

___

## Properties

<ParameterTypes parameters={[{"name":"__container__","type":"`any`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"featureFlagRouter_","type":"`FlagRouter`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"manager_","type":"`EntityManager`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"newTotalsService_","type":"[NewTotalsService](services.NewTotalsService.mdx)","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"taxCalculationStrategy_","type":"[ITaxCalculationStrategy](../../medusa/interfaces/medusa.ITaxCalculationStrategy.mdx)","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"taxProviderService_","type":"[TaxProviderService](services.TaxProviderService.mdx)","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"transactionManager_","type":"`undefined` \\| `EntityManager`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"__configModule__","type":"`Record<string, unknown>`","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]},{"name":"__moduleDeclaration__","type":"`Record<string, unknown>`","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]}]} />

___

## Accessors

### activeManager\_

#### Returns

<ParameterTypes parameters={[{"name":"EntityManager","type":"`EntityManager`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]} />

___

## Methods

### atomicPhase\_

Wraps some work within a transactional block. If the service already has
a transaction manager attached this will be reused, otherwise a new
transaction manager is created.

#### Type Parameters

<ParameterTypes parameters={[{"name":"TResult","type":"`object`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"TError","type":"`object`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Parameters

<ParameterTypes parameters={[{"name":"work","type":"(`transactionManager`: `EntityManager`) => Promise&#60;TResult&#62;","description":"the transactional work to be done","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"isolationOrErrorHandler","type":"`IsolationLevel` \\| (`error`: TError) => Promise&#60;void \\| TResult&#62;","description":"the isolation level to be used for the work.","optional":true,"defaultValue":"","expandable":false,"children":[]},{"name":"maybeErrorHandlerOrDontFail","type":"(`error`: TError) => Promise&#60;void \\| TResult&#62;","description":"Potential error handler","optional":true,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;TResult&#62;","optional":false,"defaultValue":"","description":"the result of the transactional work","expandable":false,"children":[]}]} />

### calculateDiscount\_

Calculates either fixed or percentage discount of a variant

#### Parameters

<ParameterTypes parameters={[{"name":"lineItem","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)","description":"id of line item","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"variant","type":"`string`","description":"id of variant in line item","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"variantPrice","type":"`number`","description":"price of the variant based on region","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"value","type":"`number`","description":"discount value","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"discountType","type":"[DiscountRuleType](../../entities/enums/entities.DiscountRuleType.mdx)","description":"the type of discount (fixed or percentage)","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"LineDiscount","type":"`LineDiscount`","optional":false,"defaultValue":"","description":"triples of lineitem, variant and applied discount","expandable":false,"children":[]}]} />

#### Deprecated

- in favour of DiscountService.calculateDiscountForLineItem

### getAllocationItemDiscounts

If the rule of a discount has allocation="item", then we need
to calculate discount on each item in the cart. Furthermore, we need to
make sure to only apply the discount on valid variants. And finally we
return ether an array of percentages discounts or fixed discounts
alongside the variant on which the discount was applied.

#### Parameters

<ParameterTypes parameters={[{"name":"discount","type":"[Discount](../../entities/classes/entities.Discount.mdx)","description":"the discount to which we do the calculation","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"cart","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"the cart to calculate discounts for","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"LineDiscount[]","type":"`LineDiscount`[]","optional":false,"defaultValue":"","description":"array of triples of lineitem, variant and applied discount","expandable":false,"children":[]}]} />

### getAllocationMap

Gets a map of discounts and gift cards that apply to line items in an
order. The function calculates the amount of a discount or gift card that
applies to a specific line item.

#### Parameters

<ParameterTypes parameters={[{"name":"orderOrCart","type":"`object`","description":"the order or cart to get an allocation map for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"orderOrCart.items","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)[]","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"options","type":"`AllocationMapOptions`","description":"controls what should be included in allocation map","optional":false,"defaultValue":"{}","expandable":false,"children":[]},{"name":"orderOrCart.claims","type":"[ClaimOrder](../../entities/classes/entities.ClaimOrder.mdx)[]","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]},{"name":"orderOrCart.discounts","type":"[Discount](../../entities/classes/entities.Discount.mdx)[]","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]},{"name":"orderOrCart.swaps","type":"[Swap](../../entities/classes/entities.Swap.mdx)[]","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;[LineAllocationsMap](../../medusa/types/medusa.LineAllocationsMap.mdx)&#62;","optional":false,"defaultValue":"","description":"the allocation map for the line items in the cart or order.","expandable":false,"children":[]}]} />

### getCalculationContext

Prepares the calculation context for a tax total calculation.

#### Parameters

<ParameterTypes parameters={[{"name":"calculationContextData","type":"`CalculationContextData`","description":"the calculationContextData to get the calculation context for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"options","type":"`CalculationContextOptions`","description":"options to gather context by","optional":false,"defaultValue":"{}","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;[TaxCalculationContext](../../medusa/types/medusa.TaxCalculationContext.mdx)&#62;","optional":false,"defaultValue":"","description":"the tax calculation context","expandable":false,"children":[]}]} />

### getDiscountTotal

Calculates the total discount amount for each of the different supported
discount types. If discounts aren't present or invalid returns 0.

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"the cart or order to calculate discounts for","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"the total discounts amount","expandable":false,"children":[]}]} />

### getGiftCardTotal

Gets the gift card amount on a cart or order.

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"the cart or order to get gift card amount for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"opts","type":"`object`","description":"","optional":false,"defaultValue":"{}","expandable":false,"children":[]},{"name":"opts.gift_cardable","type":"`number`","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;object&#62;","optional":false,"defaultValue":"","description":"the gift card amount applied to the cart or order","expandable":false,"children":[]}]} />

### getGiftCardableAmount

Gets the amount that can be gift carded on a cart. In regions where gift
cards are taxable this amount should exclude taxes.

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"the cart or order to get gift card amount for","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"the gift card amount applied to the cart or order","expandable":false,"children":[]}]} />

### getLineDiscounts

Returns the discount amount allocated to the line items of an order.

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"`object`","description":"the cart or order to get line discount allocations for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"cartOrOrder.items","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)[]","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"cartOrOrder.claims","type":"[ClaimOrder](../../entities/classes/entities.ClaimOrder.mdx)[]","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]},{"name":"cartOrOrder.swaps","type":"[Swap](../../entities/classes/entities.Swap.mdx)[]","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]},{"name":"discount","type":"[Discount](../../entities/classes/entities.Discount.mdx)","description":"the discount to use as context for the calculation","optional":true,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"LineDiscountAmount[]","type":"`LineDiscountAmount`[]","optional":false,"defaultValue":"","description":"the allocations that the discount has on the items in the cart or\n  order","expandable":false,"children":[]}]} />

### getLineItemAdjustmentsTotal

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]} />

### getLineItemDiscountAdjustment

#### Parameters

<ParameterTypes parameters={[{"name":"lineItem","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"discount","type":"[Discount](../../entities/classes/entities.Discount.mdx)","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]} />

### getLineItemRefund

The amount that can be refunded for a given line item.

#### Parameters

<ParameterTypes parameters={[{"name":"order","type":"[Order](../../entities/classes/entities.Order.mdx)","description":"order to use as context for the calculation","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"lineItem","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)","description":"the line item to calculate the refund amount for.","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"the line item refund amount.","expandable":false,"children":[]}]} />

### getLineItemTotal

Gets a total for a line item. The total can take gift cards, discounts and
taxes into account. This can be controlled through the options.

#### Parameters

<ParameterTypes parameters={[{"name":"lineItem","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)","description":"the line item to calculate a total for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"the cart or order to use as context for the calculation","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"options","type":"`GetLineItemTotalOptions`","description":"the options to use for the calculation","optional":false,"defaultValue":"{}","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"the line item total","expandable":false,"children":[]}]} />

### getLineItemTotals

Breaks down the totals related to a line item; these are the subtotal, the
amount of discount applied to the line item, the amount of a gift card
applied to a line item and the amount of tax applied to a line item.

#### Parameters

<ParameterTypes parameters={[{"name":"lineItem","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)","description":"the line item to calculate totals for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"the cart or order to use as context for the calculation","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"options","type":"`LineItemTotalsOptions`","description":"the options to evaluate the line item totals for","optional":false,"defaultValue":"{}","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;LineItemTotals&#62;","optional":false,"defaultValue":"","description":"the breakdown of the line item totals","expandable":false,"children":[]}]} />

### getPaidTotal

Gets the total payments made on an order

#### Parameters

<ParameterTypes parameters={[{"name":"order","type":"[Order](../../entities/classes/entities.Order.mdx)","description":"the order to calculate paid amount for","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"the total paid amount","expandable":false,"children":[]}]} />

### getRefundTotal

Calculates refund total of line items.
If any of the items to return have been discounted, we need to
apply the discount again before refunding them.

#### Parameters

<ParameterTypes parameters={[{"name":"order","type":"[Order](../../entities/classes/entities.Order.mdx)","description":"cart or order to calculate subtotal for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"lineItems","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)[]","description":"the line items to calculate refund total for","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"the calculated subtotal","expandable":false,"children":[]}]} />

### getRefundedTotal

Gets the total refund amount for an order.

#### Parameters

<ParameterTypes parameters={[{"name":"order","type":"[Order](../../entities/classes/entities.Order.mdx)","description":"the order to get total refund amount for.","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"the total refunded amount for an order.","expandable":false,"children":[]}]} />

### getShippingMethodTotals

Gets the totals breakdown for a shipping method. Fetches tax lines if not
already provided.

#### Parameters

<ParameterTypes parameters={[{"name":"shippingMethod","type":"[ShippingMethod](../../entities/classes/entities.ShippingMethod.mdx)","description":"the shipping method to get totals breakdown for.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"the cart or order to use as context for the breakdown","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"opts","type":"`GetShippingMethodTotalsOptions`","description":"options for what should be included","optional":false,"defaultValue":"{}","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;ShippingMethodTotals&#62;","optional":false,"defaultValue":"","description":"An object that breaks down the totals for the shipping method","expandable":false,"children":[]}]} />

### getShippingTotal

Calculates shipping total

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"cart or order to calculate subtotal for","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"shipping total","expandable":false,"children":[]}]} />

### getSubtotal

Calculates subtotal of a given cart or order.

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"cart or order to calculate subtotal for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"opts","type":"`SubtotalOptions`","description":"options","optional":false,"defaultValue":"{}","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"the calculated subtotal","expandable":false,"children":[]}]} />

### getSwapTotal

The total paid for swaps. May be negative in case of negative swap
difference.

#### Parameters

<ParameterTypes parameters={[{"name":"order","type":"[Order](../../entities/classes/entities.Order.mdx)","description":"the order to calculate swap total for","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"the swap total","expandable":false,"children":[]}]} />

### getTaxTotal

Calculates tax total
Currently based on the Danish tax system

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"cart or order to calculate tax total for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"forceTaxes","type":"`boolean`","description":"whether taxes should be calculated regardless\n  of region settings","optional":false,"defaultValue":"false","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;null \\| number&#62;","optional":false,"defaultValue":"","description":"tax total","expandable":false,"children":[]}]} />

### getTotal

Calculates total of a given cart or order.

#### Parameters

<ParameterTypes parameters={[{"name":"cartOrOrder","type":"[Order](../../entities/classes/entities.Order.mdx) \\| [Cart](../../entities/classes/entities.Cart.mdx)","description":"object to calculate total for","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"options","type":"`GetTotalsOptions`","description":"options to calculate by","optional":false,"defaultValue":"{}","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"Promise","type":"Promise&#60;number&#62;","optional":false,"defaultValue":"","description":"the calculated subtotal","expandable":false,"children":[]}]} />

### rounded

Rounds a number using Math.round.

#### Parameters

<ParameterTypes parameters={[{"name":"value","type":"`number`","description":"the value to round","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"the rounded value","expandable":false,"children":[]}]} />

### shouldRetryTransaction\_

#### Parameters

<ParameterTypes parameters={[{"name":"err","type":"`Record<string, unknown>` \\| `object`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"boolean","type":"`boolean`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]} />

### withTransaction

#### Parameters

<ParameterTypes parameters={[{"name":"transactionManager","type":"`EntityManager`","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]}]} />

#### Returns

<ParameterTypes parameters={[{"name":"this","type":"`this`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]} />
