From 90979225bcb09b879dbe7aa36548986714e48385 Mon Sep 17 00:00:00 2001
From: Lewis <lgtg20@inf.ufpr.br>
Date: Thu, 27 Mar 2025 11:28:49 -0300
Subject: [PATCH] feat: update region codes and add type endpoint; enhance
 student revenue and cost queries

---
 src/libs/convert/expenses.js         | 18 +++--------
 src/libs/routes_v1/studentCost.js    | 47 +++++++++++++++++++---------
 src/libs/routes_v1/studentRevenue.js | 14 +--------
 3 files changed, 38 insertions(+), 41 deletions(-)

diff --git a/src/libs/convert/expenses.js b/src/libs/convert/expenses.js
index 5cd28c4e..2d8ff384 100644
--- a/src/libs/convert/expenses.js
+++ b/src/libs/convert/expenses.js
@@ -21,23 +21,13 @@ along with simcaq-node.  If not, see <https://www.gnu.org/licenses/>.
 module.exports = function regionCode(id) {
     switch (id) {
         case 1:
-            return "Ano";
+        return 'Rede pública (anual)'
         case 2:
-            return "Entidade";
+        return 'Rede pública (mensal)';
         case 3:
-            return 'Despesas';
+        return 'Rede pública e conveniada (anual)';
         case 4:
-            return 'Matrículas Públicas';
-        case 5:
-            return 'Matrículas Públicas Mais Conveniada';
-        case 6:
-            return 'Despesas Aluno Ano Pública'
-        case 7:
-            return 'Despesas Aluno Mês Pública';
-        case 8:
-            return 'Despesas Aluno Ano Pública Mais Conveniada';
-        case 9:
-            return 'Despesas Aluno Mês Pública Mais Conveniada';
+        return 'Rede pública e conveniada (mensal)';
     }
 };
 
diff --git a/src/libs/routes_v1/studentCost.js b/src/libs/routes_v1/studentCost.js
index fdcf7270..74aa91a2 100644
--- a/src/libs/routes_v1/studentCost.js
+++ b/src/libs/routes_v1/studentCost.js
@@ -51,6 +51,14 @@ studentCostApp.get('/years', (req, res, next) => {
     next();
 }, query, response('years'));
 
+studentCostApp.get('/type', (req, res, next) => {
+    req.result = []
+
+    req.result.push({ id: 1, name: "Rede Estadual" });
+    req.result.push({ id: 2, name: "Rede Municipal" });
+    next();
+}, response('type'));
+
 rqf.addField({
     name: 'filter',
     field: false,
@@ -98,8 +106,10 @@ rqf.addField({
 
 studentCostApp.get('/', rqf.parse(), rqf.build(),  (req, res, next) => {
     if (req.query.dims && req.query.dims.includes('despesas')) {
+        let obj = {};
         let whereCondition = req.query.filter.includes("region") ? "" : "despesas.cod_ibge = 0";
         let filterId;
+        let typeFilter = false;
         const filters = req.query.filter.split(",");
         filters.forEach((filter) => {
             if (filter.includes("state") || filter.includes("city")) {
@@ -108,20 +118,29 @@ studentCostApp.get('/', rqf.parse(), rqf.build(),  (req, res, next) => {
             }
         })
 
-        req.sql.from('despesas')
-        .field('despesas.ano_censo', 'year')
-        .field('despesas.ano_censo', 'total_ano')
-        .field('despesas.nome_ente', 'total_nome_ente')
-        .field('despesas.despesas', 'total_despesas')
-        .field('matriculas_publica', 'total_matriculas_publica')
-        .field('matriculas_publicas_mais_conveniada', 'total_matriculas_publicas_mais_conveniada')
-        .field('gasto_aluno_ano_publica', 'total_gasto_aluno_ano_publica')
-        .field('gasto_aluno_mes_publica', 'total_gasto_aluno_mes_publica')
-        .field('gasto_aluno_ano_publica_mais_conveniada', 'total_gasto_aluno_ano_publica_mais_conveniada')
-        .field('gasto_aluno_mes_publica_mais_conveniada', 'total_gasto_aluno_mes_publica_mais_conveniada')
-        .where(`${whereCondition}`)
-        .order('despesas.cod_ibge')
-        .order('despesas.ano_censo')
+        if (req.query.filter) {
+            const jsonString = `{${req.query.filter.replace(/(\w+):/g, '"$1":')}}`;
+            obj = JSON.parse(jsonString);
+            if (obj.type) {
+                if (obj.type.includes("1") && !obj.type.includes("2"))
+                    whereCondition = "despesas.cod_ibge >= 11 and despesas.cod_ibge <= 53"
+                else if (obj.type.includes("2") && !obj.type.includes("1"))
+                    whereCondition = "despesas.cod_ibge > 53"
+
+                typeFilter = true;
+            }
+        }
+
+        if (!typeFilter || (typeFilter && (!obj.state && !obj.city && !obj.region))) {
+            req.sql.from('despesas')
+            .field('despesas.ano_censo', 'year')
+            .field('SUM(gasto_aluno_ano_publica)', 'total_gasto_aluno_ano_publica')
+            .field('SUM(gasto_aluno_mes_publica)', 'total_gasto_aluno_mes_publica')
+            .field('SUM(gasto_aluno_ano_publica_mais_conveniada)', 'total_gasto_aluno_ano_publica_mais_conveniada')
+            .field('SUM(gasto_aluno_mes_publica_mais_conveniada)', 'total_gasto_aluno_mes_publica_mais_conveniada')
+            .where(`${whereCondition}`)
+            .group('despesas.ano_censo')
+        }
     }
 
     next();
diff --git a/src/libs/routes_v1/studentRevenue.js b/src/libs/routes_v1/studentRevenue.js
index 17da5f27..2b62671d 100644
--- a/src/libs/routes_v1/studentRevenue.js
+++ b/src/libs/routes_v1/studentRevenue.js
@@ -132,10 +132,9 @@ studentRevenueApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => {
                 typeFilter = true;
             }
         }
-        if (typeFilter && (!obj.state && !obj.city && !obj.region)) {
+        if (!typeFilter || (typeFilter && (!obj.state && !obj.city && !obj.region))) {
             req.sql.from('receitas')
                 .field('receitas.ano', 'year')
-                // .field('receitas.ano', 'total_ano')
                 .field('SUM(receitas.receitas)', 'total_receitas')
                 .field('SUM(receuta_aluno_ano_publica)', '(total_receita_aluno_ano_publica)')
                 .field('SUM(receita_aluno_mes_publica)', 'total_receita_aluno_mes_publica')
@@ -143,17 +142,6 @@ studentRevenueApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => {
                 .field('SUM(receita_aluno_mes_publica_mais_conveniada)', 'total_receita_aluno_mes_publica_mais_conveniada')
                 .where(`${whereCondition}`)
                 .group('receitas.ano')
-        } else if (!typeFilter) {
-            req.sql.from('receitas')
-                .field('receitas.ano', 'year')
-                .field('SUM(receitas.receitas)', 'total_receitas')
-                .field('SUM(receuta_aluno_ano_publica)', '(total_receita_aluno_ano_publica)')
-                .field('SUM(receita_aluno_mes_publica)', 'total_receita_aluno_mes_publica')
-                .field('SUM(receita_aluno_ano_publica_mais_conveniada)', 'total_receita_aluno_ano_publica_mais_conveniada')
-                .field('SUM(receita_aluno_mes_publica_mais_conveniada)', 'total_receita_aluno_mes_publica_mais_conveniada')
-                .where(`${whereCondition}`)
-                .group('receitas.ano')
-
         }
     }
 
-- 
GitLab