---
# System prepended metadata

title: Report
tags: [Report]

---

---
title: Report
tags: Report
---

# Report

Atualmente o projeto de relatórios perciste um meta modelo do rolatório, envia para o front, onde ele faz a conversão desse meta modelo para bql e devolve para o backend chamar o bragi.

Esse modelo de projeto acaba gerando alguns problemas, sendo os principais:
* Frontend acumulua regras que não competem a ele
* O Backend não é independente, para um relatório "sair" de de forma correta ele depende do front

A alternativa é tirar a conversão de um meta modelo para bql do front e trazer isso para o backend.

# API

Deve ser criado um novo end point para a execução do relatório

**_/reports/{id}/execute_ - [POST]**

```jsonld=
{
    "page": 1,
    "pageSize": 50
}
```

:::danger
Hoje no report podemos adicionar filtros no front end, e nesse modelo isso ainda não ficou definido como deve ser tratado.
:::

# Back end

Para o back end temos varias abordagens que podemos tomar.

## Estratégia

### Opção 1 - Sobre demanda

Nessa opção a conversão é realizada todo no momento da execução, ou seja, no momento que a api _/reports/{id}/execute_ for chamada o back end irá buscar o meta modelo do relatório, converter em bql de acordo com os parametros passados pelo front e fazer a chamada no bragi.

### Opção 2 - Pré processar ao persistir o meta modelo

Aqui iremos deixar pré convertido o meta modelo do relatório, ou seja, vamos compilar toda a estrutura do meta modelo em uma estrutura mais facil de ser executada quando o usuario fizer a chada do relatório.

:::warning
Caso o usuario adicione filtros na execução esse procesamento deverá ocorrer por completo e não utilizar o que ja foi pré processado?
:::

## Técnica

Independete da estratégia tomada podemos utilizar algumas técnicas para processar o relatório.

### Opção 1 - Conversão em java

Essa opção consiste em utilizar o próprio java para conver o meta modelo em bql.

Pontos positivos:
* Linguagem amplamente conhecida na equipe
* Baixa complexidade técnica

Pontos negativos:
* Alto custo de processamento
* Conversão verbosa

:::warning
Essa opção não é recomendada caso a estratégia seja realizar o pré processamento.
:::

### Opção 2 - Conversão em scala

Essa opção consiste em ter um engine em scala para converter o meta modelo em um modelo mais facil para o processametno

Pontos positivos:
* Alta performace
* Baixa verbosidade

Pontos negatigos:
* Alta complexidade
* Baixo conhecimento técnico na equipe

:::info
Temos exemplos dessa opção rodado no projéto do BTB na parte de filtros, regras de validação e fórmula.
[https://gitlab.wssim.com.br/app-builder/expression-compiler](https://gitlab.wssim.com.br/app-builder/expression-compiler)
:::