diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js
index 7fa6818b899bec190e320373e605b81b7aeb76a5..ff770318e92e8fcd4e78e8ea97c520e5ecaf58ef 100644
--- a/src/libs/routes/api.js
+++ b/src/libs/routes/api.js
@@ -132,6 +132,8 @@ const message = require(`${libs}/routes/message`);
 
 const courseStudents = require(`${libs}/routes/courseStudents`);
 
+const tests = require(`${libs}/routes/tests`);
+
 api.get('/', (req, res) => {
     res.json({ msg: 'SimCAQ API is running' });
 });
@@ -189,5 +191,6 @@ api.use('/disciplines', disciplines);
 api.use('/universityLocalOffer', universityLocalOffer);
 api.use('/message', message);
 api.use('/course_students', courseStudents);
+api.use('/tests', tests);
 
 module.exports = api;
diff --git a/src/libs/routes/disciplines.js b/src/libs/routes/disciplines.js
index d43d8d319c5539afd635879e3604deced5bbe112..23bdcfa366fec499bf79b6f149a24ff28c5b5cc8 100644
--- a/src/libs/routes/disciplines.js
+++ b/src/libs/routes/disciplines.js
@@ -628,7 +628,7 @@ disciplinesApp.get('/', rqf.parse(), (req, res, next) => {
 	// else {
 		let disciplinesNotSuitable = [];
 		let disciplinesSuitable = [];
-
+        console.log(req.result);
 		req.result.forEach((r) => {
 			let objNotSuitable = {
 				total: parseInt(r.total) - parseInt(r.total_suitable),
diff --git a/src/libs/routes/tests.js b/src/libs/routes/tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..132a640c30147c8f9c231a311d35e70b289a9658
--- /dev/null
+++ b/src/libs/routes/tests.js
@@ -0,0 +1,200 @@
+const express = require('express');
+
+const courseStudentsApp = express.Router();
+
+const libs = `${process.cwd()}/libs`;
+
+const squel = require('squel');
+
+const query = require(`${libs}/middlewares/query`).query;
+
+const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`);
+
+const response = require(`${libs}/middlewares/response`);
+
+const id2str = require(`${libs}/middlewares/id2str`);
+
+let rqf = new ReqQueryFields();
+
+courseStudentsApp.get('/enrolled_vacancies_freshmen', (req, res, next) => {
+    req.result = [];
+    for(let i = 1; i <= 3; ++i) {
+        req.result.push({
+            id: i,
+            name: id2str.enrolledVacanciesFreshmen(i)
+        });
+    };
+    next();
+}, response('enrolled_vacancies_freshmen'));
+
+rqf.addField({
+    name: 'filter',
+    field: false,
+    where: true
+}).addField({
+    name: 'dims',
+    field: true,
+    where: false
+}).addValueToField({
+    name: 'state',
+    table: 'localoferta_ens_superior2',
+    tableField: 'cod_uf',
+    resultField: 'state_id',
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'cod_uf',
+	    table: 'localoferta_ens_superior2'
+    }
+}, 'filter').addValue({
+    name: 'mesoregion',
+    table: 'municipio',
+    tableField: ['nome_mesorregiao', 'mesorregiao_id'],
+    resultField: ['mesoregion_name', 'mesoregion_id'],
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'mesorregiao_id',
+        table: 'municipio'
+    },
+    join: {
+        primary: 'id',
+        foreign: 'cod_municipio',
+        foreignTable: 'localoferta_ens_superior2'
+    }
+}).addValue({
+    name: 'microregion',
+    table: 'municipio',
+    tableField: ['nome_microrregiao', 'microrregiao_id'],
+    resultField: ['microregion_name', 'microregion_id'],
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'microrregiao_id',
+        table: 'municipio'
+    },
+    join: {
+        primary: 'id',
+        foreign: 'cod_municipio',
+        foreignTable: 'localoferta_ens_superior2'
+    }
+}).addValue({
+    name: 'city',
+    table: 'municipio',
+    tableField: ['id', 'nome'],
+    resultField: ['city_id', 'city_name'],
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'id',
+        table: 'municipio'
+    },
+    join: {
+        primary: 'id',
+        foreign: 'cod_municipio',
+        foreignTable: 'localoferta_ens_superior2'
+    }
+}).addValue({
+    name: 'min_year',
+    table: 'localoferta_ens_superior2',
+    tableField: 'ano_censo',
+    resultField: 'year',
+    where: {
+        relation: '>=',
+        type: 'integer',
+        table: 'localoferta_ens_superior2',
+        field: 'ano_censo'
+    }
+}).addValue({
+    name: 'max_year',
+    table: 'localoferta_ens_superior2',
+    tableField: 'ano_censo',
+    resultField: 'year',
+    where: {
+        relation: '<=',
+        type: 'integer',
+        table: 'localoferta_ens_superior2',
+        field: 'ano_censo'
+    }
+}).addValue({
+    name:'course',
+    table: 'curso_ens_superior',
+    tableField: 'nome_curso',
+    resultField: 'course_name',
+    where: {
+        relation: '=',
+        type: 'string',
+        field: 'nome_curso'
+    }
+}).addValue({
+    name:'upper_education_mod',
+    table: 'curso_ens_superior',
+    tableField: 'cod_modalidade_ensino',
+    resultField: 'upper_education_mod_id',
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'cod_modalidade_ensino'
+    }
+}).addValue({
+    name:'upper_adm_dependency',
+    table: 'curso_ens_superior',
+    tableField: 'par_categoria_administrativa',
+    resultField: 'upper_adm_dependency_id',
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'par_categoria_administrativa'
+    }
+}).addValue({
+    name:'academic_organization',
+    table: 'curso_ens_superior',
+    tableField: 'cod_organizacao_academica',
+    resultField: 'academic_organization_id',
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'cod_organizacao_academica'
+    }
+}).addValueToField({
+    name: 'campi',
+    table: 'localoferta_ens_superior',
+    tableField: ['cod_local_oferta', 'nome'],
+    resultField: ['campi_id', 'campi_name'],
+    where: {
+	    relation: '=',
+	    type: 'integer',
+	    field: 'cod_local_oferta',
+	    table: 'localoferta_ens_superior'
+    }
+}, 'filter')
+
+courseStudentsApp.get('/', rqf.parse(), (req, res, next) => {
+    req.sql.field("curso_ens_superior.ano_censo")
+    .field("SUM(curso_ens_superior.quantidade_inscritos_total)", "inscritos_total")
+    .field("SUM(curso_ens_superior.quantidade_vagas_totais)", "vagas_totais")
+    .field("SUM(curso_ens_superior.quantidade_ingresso_curso)", "ingresso_curso")
+    .from("curso_ens_superior")
+    .join("ies_ens_superior ON curso_ens_superior.ano_censo = ies_ens_superior.ano_censo AND curso_ens_superior.cod_ies = ies_ens_superior.cod_ies")
+    .where("curso_ens_superior.cod_nivel_academico = 1")
+    .where("curso_ens_superior.cod_grau_academico = 2 OR curso_ens_superior.cod_grau_academico = 4")
+    .where("ies_ens_superior.cod_uf_ies = 41")
+    .group("curso_ens_superior.ano_censo")
+    .order("curso_ens_superior.ano_censo")
+    next();
+
+}, rqf.build(), (req, res, next) => {
+    console.log(req.sql.toString()); 
+    next();
+}, query, (req, res, next) => {
+    for (var res of req.result){
+        res.inscritos_total = Number(res.inscritos_total);
+        res.vagas_totais = Number(res.vagas_totais);
+        res.ingresso_curso = Number(res.ingresso_curso);
+        res.total = null;
+    }
+
+    next();
+}, id2str.transform(), response('course_students'))
+
+module.exports = courseStudentsApp;