# Campaign standard

Campaigns is separated into two groups:

* **Product based campaigns** - provided with product data.&#x20;
* **Institution based campaigns** - Periodical campaigns. Applies for whole invoice

[**Campaign object** ](/general/data-object-description/campaign.md)contains three parameters – name, code and operation.&#x20;

[**Campaign code**](/general/data-object-description/campaigncode.md) contains data that can determine for who is the campaign valid and campaign type. Campaign operation is conditional operation written in *Javascript*.

## Campaign code calculation

**Campaign code** = `CLIENT_IDENTIFICATION` (*1 place*) + `CLIENT_CARD_IDENTIFICATION` (*8 places*) + `CAMPAIGN_CODE` (*3 places*)

| Client identifier |                                                   |
| ----------------- | ------------------------------------------------- |
| **C**             | Only available for clients                        |
| **U**             | Only available for unauthenticated clients        |
| **B**             | Available for clients and unauthenticated clients |

| Campaign codes |                                  |
| -------------- | -------------------------------- |
| 001            | Amount modification campaign     |
| 002            | Amount based unit price campaign |
| 501            | Invoice total sum campaign       |
| 502            |                                  |

{% hint style="info" %}
*campaign code starting with **0** is product based campaign*
{% endhint %}

{% hint style="info" %}
*campaign code starting with **5** is institution based campaign*
{% endhint %}

### Client card identification calculation

`00000000` – Available for all

`00000SKP` – Available only for clients who has customer card with machine readable code (SKP)

#### Example

1. Amount modification campaign available for all clients.   &#x20;

   **Code**:  `B00000000001`
2. Amount base unit price campaign available only clients who has SKP customer card

   **Code:**  `C00000SKP002`

## Campaign type descriptions

### Amount modification campaign operation description (001)

**Input parameters**

| Name   | Type   | Description    |
| ------ | ------ | -------------- |
| amount | Double | Initial amount |

**Output parameters**

| Name   | Type   | Description                           |
| ------ | ------ | ------------------------------------- |
| amount | Double | Real amount that customer have to pay |

#### Example

*Client who has SKP client card will get every second piece for free.*

```javascript
{
    "name" : "Crazy days",
    "code" : "C00000SKP001"
    "operation" : "amount >= 2 ? amount - (Math.floor(amount / 2) * 1) : amount"
}
```

### Amount based unit price campaign (002)

**Input parameters**

| Name      | Type   | Description                                      |
| --------- | ------ | ------------------------------------------------ |
| amount    | Double | Product amount                                   |
| unitPrice | Double | Initial unit price with addition and without VAT |

**Output parameters**

| Name      | Type   | Description                                                                |
| --------- | ------ | -------------------------------------------------------------------------- |
| unitPrice | Double | Real product price that customer have to pay with addition and without VAT |

#### Example

*Customer will get 50 cent discount for each product if customer will buy at least 5 pieces of product*

```javascript
{
    "name" : "Crazy days",
    "code" : "B00000000002"
    "operation" : "amount >= 5 ? unitPrice – 0.5: unitPrice"
}
```

### Total modification campaign (501)

**Input parameters**

| Name  | Type   | Description       |
| ----- | ------ | ----------------- |
| total | Double | Total without VAT |

**Output parameters**

| Name  | Type   | Description       |
| ----- | ------ | ----------------- |
| total | Double | Total without VAT |

#### Example

*Client will get 2% discount if their purchase is bigger than 50 euros.*

```javascript
{
    "name" : "Crazy days",
    "code" : "B00000000501"
    "operation" : "total >= 50 ? total * 0.98 : total"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.smarts.ee/general/campaign-standard.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
