> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rwsintegration.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Visão Geral

> Aprenda como usar regras de negócio para transformar e filtrar dados na RWS Integration

Regras de negócio são funções JavaScript que permitem realizar transformações e filtros de dados durante a integração.

<CardGroup cols={2}>
  <Card title="Transformar dados" icon="arrow-right-arrow-left" href="/pt-br/features/business-rules/transform">
    Modificar ou combinar valores
  </Card>

  <Card title="Filtrar dados" icon="filter" href="/pt-br/features/business-rules/filter">
    Remove dados da integração
  </Card>
</CardGroup>

## Estrutura das regras de negócio

Toda regra de negócio é uma arrow function em JavaScript que recebe um parâmetro e retorna um valor.

```javascript theme={null}
(context) => {
  // sua lógica aqui
  // retorna valor transformado
};
```

O `context` contém o dado atual sendo processado, e a função retorna um valor que pode ser utilizado na integração.

### Referência do object

| Propriedades    | Contém                                         | Acesso                                                 |
| --------------- | ---------------------------------------------- | ------------------------------------------------------ |
| datapoint       | Registro atual que está sendo processado       | `context.datapoint`                                    |
| enriquecimentos | Resposta de cada enriquecimento, pelo seu nome | `context.{{ enrichmentName }}.{{ completeFieldPath }}` |
| params          | Parâmetros usado na Extração                   | `context.params`                                       |

## Regra reutilizável

Na RWS Integration é possível reutilizar uma regra já existente.

### Quando usar

* Quando a mesma lógica é utilizada em várias regras
* Para encapsular uma lógica muito complexa

### Como funciona

Você pode utilizar a função `BusinessRule.transform` para chamar uma regra já existente, ela funciona com os seguintes parâmetros:

| Parâmetro | Descrição                                          |
| --------- | -------------------------------------------------- |
| tenantId  | O ID do tenant em que a regra deve ser executada   |
| ruleId    | O ID da regra de negócio a ser chamada             |
| object    | Os dados do object que a outra regra deve utilizar |

### Exemplo

Para criar uma regra reutilizável para formatação de preço e chamá-la de outras regras:

**Regra de Formatação de Preço (ID: `67f51e19c8a10ceefa121cd2`):**

```javascript theme={null}
(context) => {
  const price = new Decimal(context.datapoint.price);
  return price.toFixed(2);
};
```

**Regra de Produto (chama o formatador):**

```javascript theme={null}
(context) => {
  const formattedPrice = await BusinessRule.transform(
    'seuTenant',
    '67f51e19c8a10ceefa121cd2',
    context
  );

  return {
    name: context.datapoint.name,
    price: formattedPrice
  };
}
```

## Bibliotecas auxiliares

A RWS fornece várias bibliotecas JavaScript que você pode usar em suas regras de negócio

| Biblioteca | Como usar                       | Documentação                                                                   |
| ---------- | ------------------------------- | ------------------------------------------------------------------------------ |
| Lodash     | Variável global `_` (underline) | [Documentação do Lodash](https://lodash.com/docs/4.17.15)                      |
| Dayjs      | Variável global `dayjs`         | [Documentação do Day.js](https://day.js.org/docs/en/installation/installation) |
| Decimaljs  | Variável global `Decimal`       | [Documentação do Decimal.js](https://mikemcl.github.io/decimal.js/)            |
