> For the complete documentation index, see [llms.txt](https://wedocs.gitbook.io/wedocs-5.1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wedocs.gitbook.io/wedocs-5.1/wedocs-5.0/cliente-desktop/administracao/biblioteca-de-funcoes.md).

# Biblioteca de funções

A **Biblioteca de Funções** permite criar funções personalizadas para melhorar a organização, centralizar regras de negócio e evitar a duplicação de cálculos ou classificações em diferentes pontos do Weknow.

Com esse recurso, é possível criar uma função uma única vez e reutilizá-la sempre que necessário em campos calculados, componentes, indicadores e metadados compatíveis.

Caso a regra precise ser ajustada futuramente, a alteração pode ser feita diretamente na função, refletindo nos locais onde ela é utilizada.

***

### Exemplo básico de função

Um exemplo simples de uso é a criação de uma função para cálculo de percentual.

Pode-se criar uma função chamada `cf_taxa`, recebendo dois parâmetros: **Dividendo** e **Divisor**.

A fórmula da função seria:

```
div(getVar("pDividendo"), getVar("pDivisor")) * 100
```

Após criada, a função pode ser utilizada da seguinte forma:

```
cf_taxa(getVar("qt_obito"), getVar("qt_saida"))
```

Sempre que for necessário aplicar esse cálculo, basta chamar a função criada, sem precisar reescrever a fórmula.

{% hint style="info" %}
Caso seja necessário corrigir ou ajustar a lógica, a alteração pode ser feita diretamente na função, sendo refletida automaticamente em todos os campos onde ela é utilizada.
{% endhint %}

***

Em *<mark style="color:blue;">Configurações</mark>* <mark style="color:blue;"></mark><mark style="color:blue;">>></mark> <mark style="color:blue;"></mark>*<mark style="color:blue;">Biblioteca de funções</mark>* temos uma área para o cadastrado/edição e exclusão das funções personalizadas:

<div align="left"><figure><img src="/files/eCWMXjLaszeyHRNdvdFu" alt="" width="563"><figcaption></figcaption></figure></div>

Ao clicar em biblioteca das funções irá abrir a janela para o cadastrado de novas funções pesquisa das funções cadastradas:

<div align="left"><figure><img src="/files/9XnVsNHTz5h4YKzHBzqK" alt="" width="563"><figcaption></figcaption></figure></div>

* Para criar uma nova função, clique em nova;

<div align="left"><figure><img src="/files/6PfMr1BQrZ6RgoUbsPFH" alt="" width="563"><figcaption></figcaption></figure></div>

Após personalizar sua função, basta clicar em salvar que ela estará disponivel para o uso.

<div align="left"><figure><img src="/files/x5MNVVWNI02iwUou9amf" alt="" width="563"><figcaption></figcaption></figure></div>

Um exemplo poderia criar uma função chamada, por exemplo, Plural que aceitaria 4 parâmetros `(valor, singular, plural, zero)` e teria a fórmula:

```
if( 
   :valor > 1, 
   :valor _ ' ' _ :plural, 
if( 
   :valor > 0, 
   :valor _ ' ' _ :singular, 
   :zero
 ) 
)
```

E com a nova função usaria ela da seguinte forma:

```
Plural(getVar('qt_atendimento'), 'atendimento', 'atendimentos', 'Nenhum atendimento')
```

Caso precise criar um novo campo desse estilo, basta chamar a função que criou. Se, eventualmente, notar que há um erro nessa fórmula, basta alterar dentro da função e isso se refletirá em todos os campos que a usam.

***

### Exemplo prático de uso em metadado com campo calculado

Além de cálculos percentuais, a Biblioteca de Funções também pode ser utilizada para centralizar regras de classificação e padronização de dados.

Um exemplo comum em ambientes hospitalares, clínicas e operadoras é a classificação de pacientes por **faixa etária**.

Sem o uso de uma função, essa regra poderia ser repetida manualmente em vários metadados, campos calculados, componentes e indicadores. Isso dificulta a manutenção e pode gerar divergências entre dashboards, caso cada análise utilize uma regra diferente.

Neste exemplo, será criada uma função para classificar a idade do atendimento em grupos de 5 em 5 anos, utilizando o campo de idade disponível no metadado:

```
qt_idade_atend
```

#### Criando a função de faixa etária

Para este exemplo, será criada a função:

```
FAIXA_ETARIA_GRUPOS_5A
```

### Fórmula da função

Na fórmula da função, informe a regra de classificação etária:

```
if(
  :idade >= 80,
  '80 anos ou mais',
if(
  :idade >= 75,
  '75 a 79 anos',
if(
  :idade >= 70,
  '70 a 74 anos',
if(
  :idade >= 65,
  '65 a 69 anos',
if(
  :idade >= 60,
  '60 a 64 anos',
if(
  :idade >= 55,
  '55 a 59 anos',
if(
  :idade >= 50,
  '50 a 54 anos',
if(
  :idade >= 45,
  '45 a 49 anos',
if(
  :idade >= 40,
  '40 a 44 anos',
if(
  :idade >= 35,
  '35 a 39 anos',
if(
  :idade >= 30,
  '30 a 34 anos',
if(
  :idade >= 25,
  '25 a 29 anos',
if(
  :idade >= 20,
  '20 a 24 anos',
if(
  :idade >= 15,
  '15 a 19 anos',
if(
  :idade >= 10,
  '10 a 14 anos',
if(
  :idade >= 5,
  '5 a 9 anos',
if(
  :idade >= 0,
  '0 a 4 anos',
  'Idade não informada'
)))))))))))))))))
```

Após o cadastro, o sistema disponibilizará a função com o prefixo padrão:

```
cf_FAIXA_ETARIA_GRUPOS_5A
```

Essa função receberá uma idade como parâmetro e retornará a faixa etária correspondente.

<div align="left"><figure><img src="/files/izkiuWTKVN2rA2mz776k" alt="" width="563"><figcaption></figcaption></figure></div>

### Criar o campo calculado no metadado

Depois de criar a função, acesse o metadado desejado e crie um novo **campo calculado**.

No exemplo, o metadado possui o campo:

```
qt_idade_atend
```

Esse campo será usado como entrada da função.

A fórmula do campo calculado será:

```
cf_FAIXA_ETARIA_GRUPOS_5A(getVar("qt_idade_atend"))
```

<div align="left"><figure><img src="/files/cTBdfCDPBqxVpa86lJy7" alt="" width="563"><figcaption></figcaption></figure></div>

#### Resultado esperado do campo calculado

Ao executar o metadado, o campo calculado retornará a faixa etária correspondente ao valor de `qt_idade_atend`.

Exemplo:

| `qt_idade_atend` | Resultado do campo calculado |
| ---------------- | ---------------------------- |
| 2                | 0 a 4 anos                   |
| 8                | 5 a 9 anos                   |
| 13               | 10 a 14 anos                 |
| 22               | 20 a 24 anos                 |
| 37               | 35 a 39 anos                 |
| 61               | 60 a 64 anos                 |
| 82               | 80 anos ou mais              |

#### Utilizar o campo calculado no componente

Após criar o campo calculado, ele poderá ser utilizado em componentes gráficos, filtros, agrupamentos, indicadores e dashboards.

Por exemplo, em um gráfico de barras para demonstrar a quantidade de atendimentos por faixa etária:

| Configuração do componente | Campo sugerido             |
| -------------------------- | -------------------------- |
| **Valores / Eixo X**       | Quantidade de atendimentos |
| **Rótulos / Eixo Y**       | `ds_faixa_etaria_5a`       |
| **Ordenação**              | `ds_faixa_etaria_5a`       |

Com isso, o componente poderá apresentar os atendimentos agrupados por faixas etárias, sem que a regra precise ser escrita diretamente no SQL do metadado.

<div align="left"><figure><img src="/files/8exxa7fGEnbmVJeBSzms" alt="" width="563"><figcaption></figcaption></figure></div>
