> For the complete documentation index, see [llms.txt](https://www.analytics-docs.laplacetec.com/guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.analytics-docs.laplacetec.com/guide/en/startguide/connect/columns/order.md).

# Order columns

This data records what sold, when, and for how much. Most sales metrics on the dashboard are calculated from it.

{% hint style="info" %}
The connection is saved even if `Order ID` and `Product order ID` are empty, but filling them in is recommended if you want order-level metrics.
{% endhint %}

## What identifies a row (identifier keys)

`Order ID` + `Product order ID`

If one order contains several products, **rows are split by product order ID.** This level is needed to capture cases where only some products in an order are canceled.

| How you send          | Fields you must fill in                                                         |
| --------------------- | ------------------------------------------------------------------------------- |
| Upload by spreadsheet | 5: `Payment date/time` · `Store` · `Brand` · `Sales channel` · `Payment amount` |

## How amount columns are defined

Use the formulas below to decide what value goes in each amount field.

```
Payment amount           = (Product price + Option price) x Quantity - Coupon - Discount + Delivery fee
Actual payment amount    = Payment amount - Reward points - Deposit
Product purchase amount  = (Product price + Option price) x Quantity
Net sales                = Payment amount - Refund/cancellation amount
```

The fields below are inputs used to calculate amounts.

| Screen label           | What to enter                                                                                                                      |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Product price          | Price of **one** product. This is the unit price before multiplying by quantity                                                    |
| Option price           | Extra amount **per unit** added by the option. This is also a unit price                                                           |
| Product price discount | Discount taken off **one** product. It's **the amount taken off**, not the price after discount, and it's also a unit price        |
| Payment amount         | The **final payment amount** after the formula above. It's a total, not a unit price                                               |
| Quantity               | Quantity ordered                                                                                                                   |
| Coupon discount        | Coupon discount amount                                                                                                             |
| Shop discount          | Store discount other than coupons. If you only have an order-wide amount, enter **the amount allocated to each product order row** |
| Delivery fee           | Delivery fee paid by the customer                                                                                                  |
| Reward points used     | Reward points used                                                                                                                 |
| Deposit used           | Deposit used                                                                                                                       |

{% hint style="warning" %}
**Don't mix per-unit prices and totals.** `Product price` · `Option price` · `Product price discount` are all **per-unit amounts**. `Payment amount` is the final total, and an order-level `Shop discount` must be split across product order rows.

If you put a value already multiplied by quantity in `Product price`, the `Product purchase amount` metric is inflated by the quantity. With a quantity of 3, it comes out 3 times higher.

Don't repeat the order-wide `Shop discount` amount on every row of the same order. If you only have the order-wide discount, allocate it across product order rows before entering it so that order-level totals aren't double-counted.

If the source provides an order-wide discount that includes `Product price discount`, allocate that amount across product order rows as well and reflect it in `Shop discount`. `Product price discount` is per unit for each product, while `Shop discount` is the order-wide discount divided across rows. Don't repeat the same source amount on every row or enter it again as a separate additional discount.

Be extra careful with `Product price discount`. When several base products are matched to one product order row, Laplace **splits this discount into each base product's share** to calculate sales amount and margin by product. So if you put a total here, not only that row's product metrics are wrong but **also the metrics of the other base products matched to that row.**
{% endhint %}

### What goes in Product price discount?

Enter **the amount taken off**, not the selling price after the discount.

If you sold a 22,900 KRW product at 19,900 KRW with a 3,000 KRW discount, enter `3000`, not `19900`.

```
Product GMV           = (Product price + Option price) x Quantity
Product sales amount  = Product GMV - (Product price discount x Quantity)
```

### What about VAT?

Order amount fields don't separate out VAT. Send **the amount the customer actually paid, including VAT**.

That's also why margin rate and contribution margin rate have a separate `Sales (excl. VAT)`. Laplace assumes `Payment amount` includes VAT and subtracts VAT from it for the calculation.

On the ad side, `Ad spend (incl. VAT)` is likewise VAT-inclusive.

## Fields shown on screen but not in the field list

{% hint style="info" %}
The spreadsheet connection screen shows \*\*`Product GMV`\*\*, which isn't in the field list below.

If you map it, that value is used as-is as the order amount per product. If you leave it empty, Laplace calculates it as `(Product price + Option price) x Quantity`. **If the value calculated by your own store is more accurate, map it.**
{% endhint %}

## How does regional analysis work?

There are no fields that directly hold province/city or district. `Base address` · `Detail address` · `Full address` exist but aren't used for regional analysis: Laplace doesn't split address text into regions. Instead, **send a `Postal code` that matches the domestic (Korean) mapping table, and regional analysis becomes available.** Laplace automatically fills in province/metropolitan city · city/county/district · town/neighborhood based on the matching postal code.

So if you plan to view sales by region, map `Postal code`. If you fill in only addresses and leave the postal code empty, regions aren't filled in. Likewise, if the value isn't in the domestic mapping table, you can't see the region on map charts.

{% hint style="info" %}
`Postal code` and `Base address` · `Detail address` · `Full address` are classified as personal information in Laplace and aren't exposed directly as chart dimensions or filters. Regions can only be viewed at the regional levels above.
{% endhint %}

## What are address fields used for?

There's one reason to map them even though they don't appear directly in charts: `Full address` is used **to recognize the same customer**. Orders whose contact details or names come in slightly differently are grouped as one person if the address matches, making repurchase and customer-level metrics more accurate.

Even if you don't provide `Full address` separately, filling in `Base address` and `Detail address` lets Laplace join the two and use them. If your store provides the address in a single field, connect it to `Full address`.

## How do I send cancellations, refunds, and exchanges?

Cancellations, refunds, returns, and exchanges are expressed **by filling in the completion date, not by a separate status column**. An empty value means it hasn't happened yet.

| Situation                  | How to send                                                                                 |
| -------------------------- | ------------------------------------------------------------------------------------------- |
| Full order cancellation    | Fill in `Cancellation date/time` and resend that order's rows with the same identifier keys |
| Partial order cancellation | Resend **only the rows for the canceled product order IDs**, as above                       |
| Refund                     | Fill in `Refund date/time`                                                                  |
| Return                     | Fill in `Return date/time`                                                                  |
| Exchange                   | Fill in `Exchange date/time`                                                                |

In every case, **don't delete rows.** Data already saved stays as is even if you don't send the row.

## Field list (42)

| Screen label                 | Type     | Required                  | Fixed value |
| ---------------------------- | -------- | ------------------------- | ----------- |
| Payment date/time            | Datetime | Required                  | Allowed     |
| Store                        | Text     | Required                  | Allowed     |
| Brand                        | Text     | Required                  | Allowed     |
| Sales channel                | Text     | Required                  | Allowed     |
| Payment amount               | Number   | Required                  | Allowed     |
| Product name                 | Text     | -                         | Allowed     |
| Product ID                   | Text     | -                         | Allowed     |
| Order ID                     | Text     | Required (identifier key) | Not allowed |
| Product order ID             | Text     | Required (identifier key) | Not allowed |
| Reward points used           | Number   | -                         | Allowed     |
| Deposit used                 | Number   | -                         | Allowed     |
| Product price                | Number   | -                         | Allowed     |
| Option price                 | Number   | -                         | Allowed     |
| Option ID                    | Text     | -                         | Allowed     |
| Option name                  | Text     | -                         | Allowed     |
| Quantity                     | Integer  | -                         | Allowed     |
| Product GMV                  | Number   | -                         | Allowed     |
| Member ID                    | Text     | -                         | Allowed     |
| Buyer phone                  | Text     | -                         | Allowed     |
| Buyer email                  | Text     | -                         | Allowed     |
| Buyer name                   | Text     | -                         | Allowed     |
| Postal code                  | Text     | -                         | Allowed     |
| Base address                 | Text     | -                         | Allowed     |
| Detail address               | Text     | -                         | Allowed     |
| Full address                 | Text     | -                         | Allowed     |
| Product price discount       | Number   | -                         | Allowed     |
| Coupon discount              | Number   | -                         | Allowed     |
| Delivery group ID            | Text     | -                         | Allowed     |
| Receiver phone               | Text     | -                         | Allowed     |
| Receiver name                | Text     | -                         | Allowed     |
| Delivery fee                 | Number   | -                         | Allowed     |
| Shop discount                | Number   | -                         | Allowed     |
| Fee                          | Number   | -                         | Allowed     |
| Custom product code          | Text     | -                         | Allowed     |
| Refund date/time             | Datetime | -                         | Allowed     |
| Purchase confirmed date/time | Datetime | -                         | Allowed     |
| Cancellation date/time       | Datetime | -                         | Allowed     |
| Exchange date/time           | Datetime | -                         | Allowed     |
| Return date/time             | Datetime | -                         | Allowed     |
| Delivered date/time          | Datetime | -                         | Allowed     |
| Delivery start date/time     | Datetime | -                         | Allowed     |
| Order date/time              | Datetime | -                         | Allowed     |

{% hint style="warning" %}
**When you upload by spreadsheet, the `Required` and `Fixed value` columns in the table above apply as follows.**

* **Required**: in spreadsheets, only 5 fields are required: `Payment date/time` · `Store` · `Brand` · `Sales channel` · `Payment amount`. `Order ID` and `Product order ID` aren't required.
* **Fixed value**: in spreadsheets, only three fields can be filled with a fixed value: `Store` · `Brand` · `Sales channel`. For the rest, you must specify a column in the sheet.
  {% endhint %}

{% hint style="info" %}
It's best to fill in as many optional fields as possible. If a value is empty, charts that use that field aren't shown. Which metrics need which fields is summarized in [Which metrics are missing if I leave fields empty?](/guide/en/startguide/connect/columns.md#blank-fields)
{% endhint %}
