---
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)
:::