---
displayed_sidebar: servicesSidebar
---

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

# TotalsService

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

## Implements

## constructor

### Parameters

<TypeList types={[{"name":"__namedParameters","type":"`TotalsServiceProps`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]}]}  sectionTitle="new TotalsService"/>

___

## Properties

<TypeList types={[{"name":"manager_","type":"`EntityManager`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"transactionManager_","type":"`undefined` \\| `EntityManager`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"__container__","type":"`any`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"taxProviderService_","type":"[TaxProviderService](services.TaxProviderService.mdx)","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":"featureFlagRouter_","type":"`FlagRouter`","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":[]}]}  sectionTitle="TotalsService"/>

___

## Accessors

### activeManager\_

#### Returns

<TypeList types={[{"name":"EntityManager","type":"`EntityManager`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]}  sectionTitle="activeManager_"/>

___

## Methods

### withTransaction

#### Parameters

<TypeList types={[{"name":"transactionManager","type":"`EntityManager`","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]}]}  sectionTitle="withTransaction"/>

#### Returns

<TypeList types={[{"name":"this","type":"`this`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]}  sectionTitle="withTransaction"/>

### shouldRetryTransaction\_

#### Parameters

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

#### Returns

<TypeList types={[{"name":"boolean","type":"`boolean`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]}  sectionTitle="shouldRetryTransaction_"/>

### 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

<TypeList types={[{"name":"TResult","type":"`object`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"TError","type":"`object`","description":"","optional":false,"defaultValue":"","expandable":false,"children":[]}]}  sectionTitle="atomicPhase_"/>

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="atomicPhase_"/>

#### Returns

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

### getTotal

Calculates total of a given cart or order.

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getTotal"/>

#### Returns

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

### getPaidTotal

Gets the total payments made on an order

#### Parameters

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

#### Returns

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

### getSwapTotal

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

#### Parameters

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

#### Returns

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

### getShippingMethodTotals

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

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getShippingMethodTotals"/>

#### Returns

<TypeList types={[{"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":[]}]}  sectionTitle="getShippingMethodTotals"/>

### getSubtotal

Calculates subtotal of a given cart or order.

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getSubtotal"/>

#### Returns

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

### getShippingTotal

Calculates shipping total

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getShippingTotal"/>

#### Returns

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

### getTaxTotal

Calculates tax total
Currently based on the Danish tax system

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getTaxTotal"/>

#### Returns

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

### 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

<TypeList types={[{"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.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":[]},{"name":"orderOrCart.claims","type":"[ClaimOrder](../../entities/classes/entities.ClaimOrder.mdx)[]","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]}]}  sectionTitle="getAllocationMap"/>

#### Returns

<TypeList types={[{"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":[]}]}  sectionTitle="getAllocationMap"/>

### getRefundedTotal

Gets the total refund amount for an order.

#### Parameters

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

#### Returns

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

### getLineItemRefund

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

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getLineItemRefund"/>

#### Returns

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

### 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

<TypeList types={[{"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":[]}]}  sectionTitle="getRefundTotal"/>

#### Returns

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

### calculateDiscount\_

Calculates either fixed or percentage discount of a variant

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="calculateDiscount_"/>

#### Returns

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

#### 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

<TypeList types={[{"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":[]}]}  sectionTitle="getAllocationItemDiscounts"/>

#### Returns

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

### getLineItemDiscountAdjustment

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getLineItemDiscountAdjustment"/>

#### Returns

<TypeList types={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]}  sectionTitle="getLineItemDiscountAdjustment"/>

### getLineItemAdjustmentsTotal

#### Parameters

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

#### Returns

<TypeList types={[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]}  sectionTitle="getLineItemAdjustmentsTotal"/>

### getLineDiscounts

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

#### Parameters

<TypeList types={[{"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.swaps","type":"[Swap](../../entities/classes/entities.Swap.mdx)[]","description":"","optional":true,"defaultValue":"","expandable":false,"children":[]},{"name":"cartOrOrder.claims","type":"[ClaimOrder](../../entities/classes/entities.ClaimOrder.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":[]}]}  sectionTitle="getLineDiscounts"/>

#### Returns

<TypeList types={[{"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":[]}]}  sectionTitle="getLineDiscounts"/>

### 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

<TypeList types={[{"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":[]}]}  sectionTitle="getLineItemTotals"/>

#### Returns

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

### 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

<TypeList types={[{"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":[]}]}  sectionTitle="getLineItemTotal"/>

#### Returns

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

### 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

<TypeList types={[{"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":[]}]}  sectionTitle="getGiftCardableAmount"/>

#### Returns

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

### getGiftCardTotal

Gets the gift card amount on a cart or order.

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getGiftCardTotal"/>

#### Returns

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

### getDiscountTotal

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

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getDiscountTotal"/>

#### Returns

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

### getCalculationContext

Prepares the calculation context for a tax total calculation.

#### Parameters

<TypeList types={[{"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":[]}]}  sectionTitle="getCalculationContext"/>

#### Returns

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

### rounded

Rounds a number using Math.round.

#### Parameters

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

#### Returns

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