---
title: Rules
slug: rules
description: Learn about the concept and structure of rules, defined using JsonLogic, for data transformation and business rule assignment. This document explains the components of a rule, including ID, type, regular expression, return type, and generic function optio
docTags: 
createdAt: 2023-05-03T14:48:08.000Z
---

## Conceito

As *rules* por padrão são definidas usando [JsonLogic](https://jsonlogic.com/), com objetivo de transformação de dados e/ou atribuição de regras ou condições de negocios em um determinado passo.

## Estrutura

```json
[
  {
    "idRule": "nome_da_rule",
    "rule": "json logic",
    "type": "mandatory",
    "regexp": [
      {
        "expression": "aplicar expressão regular",
        "method": "aplica funções do go",
        "param": "parametro a ser passado no method"
      }
    ],
    "returnType": "define o tipo do retorno",
    "generic": {
      "function": "função generica",
      "params": [
        "parametro a ser passado na função"
      ]
    },
    "description": "descreva pra que serve ou o que essa rule faz"
  }
]
```

- **idRule:** nome da rule a ser ultilizada, separar com underscore se necessario (campo obrigatório);
- **rule:** json logic que será usado na tratativa dessa rule (campo obrigatório);
- **type:&#x20;**&#x64;efine o tipo da rule, altualmente os tipos disponivels são (campo obrigatório):
  - **mandatory:&#x20;**&#x65;xecuta a rule antes das internal e retorna "true" ou "false" pode determinar se um passo vai ser executado ou não;
  - **internal:** indica que o retorno dela pode sofrer alteração no valor do campo onde ela é chamada;
- **regexp:&#x20;**&#x70;ossibilida aplicar expressão regular:
  - **expression:&#x20;**&#x63;ampo onde deve ser informado a expressão regular;
  - **method:&#x20;**&#x69;ndica o metodo a ser aplicado na expressão, atualmente temos disponivel o `replaceAllString` . Se este campo for vazio será executado um `findString` por padrão;
  - **param:&#x20;**&#x70;arametro a ser passado no method;
- **returnType:&#x20;**&#x64;efine o tipo do retorno da rule (int, string, float ou datetime);
- **generic:&#x20;**&#x70;ossibilita usar funções genericas criadas pela Fluid ([saiba mais](docId\:vsFuF1Uz-brGYT2pIXVIu)):
  - **function:** informe a função desejada ;
  - **params:** informe os parametros necessarios de acordo com a função selecionada;
- **description:&#x20;**&#x75;sado para documentar a rule;

## Exemplos de Rules

### Mandatória

O exemplo a seguir demostra uma rule cuja objetivo é validar se o retorno de um passo anterior "busca-pedido" é diferente de vazio, se for é retornado um "true", se não for é retornado um "falso".



![](https://api.archbee.com/api/optimize/G1NTw6yAi4RDUYbsU8csp/SQFOhjDazmvGy0pL4Lnq2_image.png)

Por ser mandatória, essa rule determina se o passo vai ser executado ou não.

### Interna

*Rules&#x20;*&#x75;sada para transformação de dados.

O exemplo a seguir verifica qual a situação do pedido e com isso, seta um valor no campo onde ela esta sendo referênciada no de/para:



![](https://api.archbee.com/api/optimize/G1NTw6yAi4RDUYbsU8csp/6s_VqxSxF2lVQLwi6aVbh_image.png)

### Usando regexp

No exemplo a seguir é aplicado um regexp no valor retornado pelo `produto.codigo`



![](https://api.archbee.com/api/optimize/G1NTw6yAi4RDUYbsU8csp/prfcGGoOrrT9BjV54Ud84_image.png)

### Usando returnType e generic

No exemplo a seguir é usado o `returnType` para determinar o tipo do retorno e o `generic`, passando a função ManipulateDate para formatar a data do valor retornado pelo `args.last_modified_date` para um tipo **RFC3339:**



```json
{
      "idRule": "args_last_modified_date",
      "rule": "{ \"var\" : \"args.last_modified_date\" }",
      "type": "internal",
      "description": "Converte data de encerramento para datetime ou null se for vazio",
      "returnType": "datetime",
      "generic": {
          "function": "ManipulateDate",
        "params": [
          "$parse: YYYY-MM-DD HH:mm", "$format: RFC3339"
        ]
      }
    }
```

