docs: migrate guides to TSDoc references (#6100)
This commit is contained in:
1 parent
85dad169bb
commit
4792c55226
980 files changed
+195537
-160619
No files matched your search
+100
@@ -0,0 +1,100 @@
|
||||
---
|
||||
displayed_sidebar: modules
|
||||
---
|
||||
|
||||
import ParameterTypes from "@site/src/components/ParameterTypes"
|
||||
|
||||
# ITaxCalculationStrategy
|
||||
|
||||
## Overview
|
||||
|
||||
A tax calculation strategy is used to calculate taxes when calculating a cart's totals. The Medusa
|
||||
backend provides a tax calculation strategy that handles calculating the taxes, taking into account the
|
||||
defined tax rates and settings such as whether tax-inclusive pricing is enabled.
|
||||
|
||||
You can override the tax calculation strategy to implement different calculation logic or to
|
||||
integrate a third-party service that handles the tax calculation. You can override it either
|
||||
in a Medusa backend setup or in a plugin.
|
||||
|
||||
A tax calculation strategy should be defined in a TypeScript or JavaScript file created under the `src/strategies` directory.
|
||||
The class must also implement the `ITaxCalculationStrategy` interface imported from the `@medusajs/medusa` package.
|
||||
|
||||
For example, you can create the file `src/strategies/tax-calculation.ts` with the following content:
|
||||
|
||||
```ts title="src/strategies/tax-calculation.ts"
|
||||
import {
|
||||
ITaxCalculationStrategy,
|
||||
LineItem,
|
||||
LineItemTaxLine,
|
||||
ShippingMethodTaxLine,
|
||||
TaxCalculationContext,
|
||||
} from "@medusajs/medusa"
|
||||
|
||||
class TaxCalculationStrategy
|
||||
implements ITaxCalculationStrategy {
|
||||
|
||||
async calculate(
|
||||
items: LineItem[],
|
||||
taxLines: (ShippingMethodTaxLine | LineItemTaxLine)[],
|
||||
calculationContext: TaxCalculationContext
|
||||
): Promise<number> {
|
||||
throw new Error("Method not implemented.")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default TaxCalculationStrategy
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Methods
|
||||
|
||||
### calculate
|
||||
|
||||
This method calculates the tax amount for a given set of line items under applicable
|
||||
tax conditions and calculation contexts.
|
||||
|
||||
This method is used whenever taxes are calculated. If automatic tax calculation is disabled in a region,
|
||||
then it's only triggered when taxes are calculated manually as explained in
|
||||
[this guide](https://docs.medusajs.com/modules/taxes/storefront/manual-calculation).
|
||||
|
||||
#### Example
|
||||
|
||||
An example of the general implementation of this method in the Medusa backend's tax calculation strategy:
|
||||
|
||||
```ts
|
||||
async calculate(
|
||||
items: LineItem[],
|
||||
taxLines: (ShippingMethodTaxLine | LineItemTaxLine)[],
|
||||
calculationContext: TaxCalculationContext
|
||||
): Promise<number> {
|
||||
const lineItemsTaxLines = taxLines.filter(
|
||||
(tl) => "item_id" in tl
|
||||
) as LineItemTaxLine[]
|
||||
const shippingMethodsTaxLines = taxLines.filter(
|
||||
(tl) => "shipping_method_id" in tl
|
||||
) as ShippingMethodTaxLine[]
|
||||
|
||||
const lineItemsTax = this.calculateLineItemsTax(
|
||||
items,
|
||||
lineItemsTaxLines,
|
||||
calculationContext
|
||||
)
|
||||
|
||||
const shippingMethodsTax = this.calculateShippingMethodsTax(
|
||||
calculationContext.shipping_methods,
|
||||
shippingMethodsTaxLines
|
||||
)
|
||||
|
||||
return Math.round(lineItemsTax + shippingMethodsTax)
|
||||
}
|
||||
```
|
||||
|
||||
#### Parameters
|
||||
|
||||
<ParameterTypes parameters={[{"name":"items","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)[]","description":"The line items to calculate the tax total for.","optional":false,"defaultValue":"","expandable":false,"children":[{"name":"adjustments","type":"[LineItemAdjustment](../../entities/classes/entities.LineItemAdjustment.mdx)[]","description":"The details of the item's adjustments, which are available when a discount is applied on the item.","optional":false,"defaultValue":"","expandable":true,"children":[{"name":"amount","type":"`number`","description":"The adjustment amount","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"description","type":"`string`","description":"The line item's adjustment description","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"discount","type":"[Discount](../../entities/classes/entities.Discount.mdx)","description":"The details of the discount associated with the adjustment.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"discount_id","type":"`string`","description":"The ID of the discount associated with the adjustment","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"id","type":"`string`","description":"The Line Item Adjustment's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"item","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)","description":"The details of the line item.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"item_id","type":"`string`","description":"The ID of the line item","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"metadata","type":"`Record<string, unknown>`","description":"An optional key-value map with additional details","optional":false,"defaultValue":"","expandable":false,"children":[]}]},{"name":"allow_discounts","type":"`boolean`","description":"Flag to indicate if the Line Item should be included when doing discount calculations.","optional":false,"defaultValue":"true","expandable":false,"children":[]},{"name":"cart","type":"[Cart](../../entities/classes/entities.Cart.mdx)","description":"The details of the cart that the line item may belongs to.","optional":false,"defaultValue":"","expandable":true,"children":[{"name":"billing_address","type":"[Address](../../entities/classes/entities.Address.mdx)","description":"The details of the billing address associated with the cart.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"billing_address_id","type":"`string`","description":"The billing address's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"completed_at","type":"`Date`","description":"The date with timezone at which the cart was completed.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"context","type":"`Record<string, unknown>`","description":"The context of the cart which can include info like IP or user agent.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"created_at","type":"`Date`","description":"The date with timezone at which the resource was created.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"customer","type":"[Customer](../../entities/classes/entities.Customer.mdx)","description":"The details of the customer the cart belongs to.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"customer_id","type":"`string`","description":"The customer's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"deleted_at","type":"`null` \\| `Date`","description":"The date with timezone at which the resource was deleted.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"discounts","type":"[Discount](../../entities/classes/entities.Discount.mdx)[]","description":"An array of details of all discounts applied to the cart.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"email","type":"`string`","description":"The email associated with the cart","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"gift_cards","type":"[GiftCard](../../entities/classes/entities.GiftCard.mdx)[]","description":"An array of details of all gift cards applied to the cart.","optional":false,"defaultValue":"","expandable":true,"children":[]},{"name":"id","type":"`string`","description":"The cart's ID","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"idempotency_key","type":"`string`","description":"Randomly generated key used to continue the completion of a cart in case of failure.","optional":false,"defaultValue":"","expandable":false,"children":[]},{"name":"items","type":"[LineItem](../../entities/classes/entities.LineItem.mdx)[]","description":"The line items added to the cart.","optional":false,"defaultValue":"","Line truncated
|
||||
|
||||
#### Returns
|
||||
|
||||
<ParameterTypes parameters={[{"name":"Promise","type":"Promise<number>","optional":false,"defaultValue":"","description":"The calculated tax total","expandable":false,"children":[{"name":"number","type":"`number`","optional":false,"defaultValue":"","description":"","expandable":false,"children":[]}]}]} />
|
||||
Reference in new issue
Block a user