> For the complete documentation index, see [llms.txt](https://dev.guardian.hedera.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.guardian.hedera.com/guardian/workspace/policies/library-of-policy-examples/mrv-aggregation-and-splitting-for-minting-tokens.md).

# MRV aggregation and splitting for minting tokens

For a demo example of following steps, here is the policy timestamp: **1675266693.102366003**

## Adding aggregateDocumentBlock in separate containerAdding aggregateDocumentBlock in separate container**Task**

MRV documents feature a numerical measurement field. The values in this field are periodically aggregated, in this example we will use 1 minute period.

The purpose of the aggregation is to mint tokens, in this example 1 token will be minted for each part which equal to 1000 of the aggregated value.

## **Preparation**

Create a token and 2 schemas (**User** and **Report**). For simplicity the token will not require a KYC.

Build the first part of the document entry:

![image1.png](/files/y5csvK1DtjBUzYXj1oeB)

*(Please see* [*examples 2*](/guardian/workspace/policies/library-of-policy-examples/data-input-via-forms-using-roles-to-partition-user-activities..md) *and* [*3*](/guardian/workspace/policies/library-of-policy-examples/token-operations.md) *for more detailed description of this)*

### **Aggregate:**

1. Add ‘**aggregateDocumentBlock**' after saving the document in the database. This is the block which would accumulate documents/values until the condition is met (which in this case is the event from the timer).

1.1 Put '**aggregateDocumentBlock**' in a separate container to avoid it from interfering with the working of '**interfaceStepBlock**'

![Adding aggregateDocumentBlock](/files/LpaelONzdnUAnEgilnFQ)

![Adding aggregateDocumentBlock in separate container](/files/lnb8rpLcSub5vRc42C1M)

1.2 Pass the document to the ‘***aggregateDocumentBlock***' after it is saved.

![Passing the saved document to the aggregateDocumentBlock](/files/8ETHj8IxQlJlctwXQPQJ)

2. Timer is a separate block called '***timerBlock***'

2.1 For each user there is a separate timer execution context (i.e., each user has an independent timer). For this it requires a document owned by the user to be passed into this. To ensure this, let’s add the timer immediately after user registration.

![Adding timerBlock after user registration](/files/yCzVJXzCetfEoretmy3z)

2.2 Set the timer to trigger every minute

![Setting the timer for every minute](/files/zu0mfN3czZuZ7NvOQns2)

2.3 Now after the timer is launched, it would create a ‘**TimerEvent**’ periodically every minute. And then connect it with ‘***aggregateDocumentBlock***':

![Connecting TimerBlock with aggregateDocumentBlock](/files/vnUB4Oiu4jbqKUsaVUgN)

### **Split:**

1. To split the document into equal parts, add '***splitBlock***'

1.1 Add '***splitBlock***' immediately after the '***aggregateDocumentBlock***'

![Adding splitBlock after aggregateDocumentBlock](/files/shvWeh7SEkk8lwQf0GZt)

1.2 Configure the document field which would be used for splitting/aggregation

![Configuring Source Field](/files/7Oe313yKpN5jjX2PiHY6)

1.3 Set a ‘**Threshold**’ to configure the value for splitting the document.

<figure><img src="/files/N304luSs0sjlTejeiyO1" alt=""><figcaption><p>Setting the Threshold for split</p></figcaption></figure>

### **Mint:**

Add '***mintDocumentBlock***' immediately after ‘***splitBlock***' to mint tokes and configure the minting rule

![Adding mintDocumentBlock after splitBlock](/files/v0G2mlBLwmkSZ8tUAapJ)
