diff --git a/src/libs/convert/educationLevelSchoolYear.js b/src/libs/convert/educationLevelSchoolYear.js new file mode 100644 index 0000000000000000000000000000000000000000..316efe5efabd62f03ab311cc26684b2cbc8fff58 --- /dev/null +++ b/src/libs/convert/educationLevelSchoolYear.js @@ -0,0 +1,36 @@ +module.exports = function educationLevelSchoolYear(id) { + switch(id) { + case 1: return 'Creche'; + case 11: return 'Creche - Menor de 1 ano'; + case 12: return 'Creche - 1 ano'; + case 13: return 'Creche - 2 anos'; + case 14: return 'Creche - 3 anos'; + case 2: return 'Pré-Escola'; + case 21: return 'Pré-Escola - 4 anos'; + case 22: return 'Pré-Escola - 5 anos'; + case 3: return 'Ensino Fundamental - anos iniciais'; + case 31: return 'Ens. Fundamental - 1º Ano'; + case 32: return 'Ens. Fundamental - 1ª série/2º ano'; + case 33: return 'Ens. Fundamental - 2ª série/3º ano'; + case 34: return 'Ens. Fundamental - 3ª série/4º ano'; + case 35: return 'Ens. Fundamental - 4ª série/5º Ano'; + case 4: return 'Ensino Fundamento - anos finais'; + case 41: return 'Ens. Fundamental - 5ª série/6º ano'; + case 42: return 'Ens. Fundamental - 6ª série/7º ano'; + case 43: return 'Ens. Fundamental - 7ª série/8º ano'; + case 44: return 'Ens. Fundamental - 8ª serie/9º ano'; + case 5: return 'Ensino Médio'; + case 51: return 'Ens. Médio - 1ª série'; + case 52: return 'Ens. Médio - 2ª série'; + case 53: return 'Ens. Médio - 3ª série'; + case 54: return 'Ens. Médio - 4ª série'; + case 6: return 'EJA'; + case 61: return 'EJA - anos iniciais do Ens. Fundamental'; + case 62: return 'EJA - anos finais do Ens. Fundamental'; + case 63: return 'EJA - Ensino Médio'; + case 64: return 'EJA semi-presencial'; + case 7: return 'EE exclusiva'; + case 71: return 'Educação Profissional'; + default: return 'Não classificada'; + } +} \ No newline at end of file diff --git a/src/libs/middlewares/id2str.js b/src/libs/middlewares/id2str.js index 0a0c2af993a392d86b185e234c2eae448992d1b9..0af8421209415ed3adf9c365f551a79ec34ad2d7 100644 --- a/src/libs/middlewares/id2str.js +++ b/src/libs/middlewares/id2str.js @@ -30,6 +30,7 @@ const useTransport = require(`${libs}/convert/booleanVariable`); const useTransportPublic = require(`${libs}/convert/booleanVariable`); const transportationManager = require(`${libs}/convert/transportationManager`); const specialClass = require(`${libs}/convert/booleanVariable`); +const educationLevelSchoolYear = require(`${libs}/convert/educationLevelSchoolYear`); const ids = { gender_id: gender, @@ -71,7 +72,8 @@ const ids = { use_transport_id: useTransport, use_transport_public_id: useTransportPublic, transportation_manager_id: transportationManager, - special_class_id: specialClass + special_class_id: specialClass, + education_level_school_year_id: educationLevelSchoolYear, }; function transform(removeId=false) { diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js index 165f947ec7cedacd66008383042bcca6552712bc..d39b0352acf124bbffd66aba66c3d5ab86b39848 100644 --- a/src/libs/routes/api.js +++ b/src/libs/routes/api.js @@ -80,6 +80,8 @@ const classCount = require(`${libs}/routes/classCount`); const portalMecInep = require(`${libs}/routes/portalMecInep`); +const enrollmentProjection = require(`${libs}/routes/enrollmentProjection`); + api.get('/', (req, res) => { res.json({ msg: 'SimCAQ API is running' }); @@ -123,5 +125,6 @@ api.use('/auxiliar', auxiliar); api.use('/verify_teacher', verifyTeacher); api.use('/class_count', classCount); api.use('/portal_mec_inep', portalMecInep); +api.use('/enrollment_projection', enrollmentProjection); module.exports = api; diff --git a/src/libs/routes/enrollmentProjection.js b/src/libs/routes/enrollmentProjection.js new file mode 100644 index 0000000000000000000000000000000000000000..7ba72440216c4064b1862cc9d42c4d6d6ac1fbac --- /dev/null +++ b/src/libs/routes/enrollmentProjection.js @@ -0,0 +1,136 @@ +const express = require('express'); + +const enrollmentProjectionApp = express.Router(); + +const libs = `${process.cwd()}/libs`; + +const log = require(`${libs}/log`)(module); + +const squel = require('squel'); + +const query = require(`${libs}/middlewares/query`).query; + +const response = require(`${libs}/middlewares/response`); + +const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`); + +const id2str = require(`${libs}/middlewares/id2str`); + +const config = require(`${libs}/config`); + +const addMissing = require(`${libs}/middlewares/addMissing`); + +const cache = require('apicache').options({ debug: config.debug, statusCodes: {include: [200]} }).middleware; + +enrollmentProjectionApp.use(cache('15 day')); + +let rqf = new ReqQueryFields(); + +rqf.addField({ + name: 'filter', + field: false, + where: true +}).addField({ + name: 'dims', + field: true, + where: false +}).addValueToField({ + name: 'state', + table: 'estado', + tableField: ['nome', 'id'], + resultField: ['state_name', 'state_id'], + where: { + relation: '=', + type: 'integer', + field: 'id' + }, + join: { + primary: 'id', + foreign: 'estado_id', + foreignTable: 'projecao_matricula' + } +}, 'dims').addValueToField({ + name: 'state', + table: 'estado', + tableField: 'nome', + resultField: 'state_name', + where: { + relation: '=', + type: 'integer', + field: 'id' + }, + join: { + primary: 'id', + foreign: 'estado_id', + foreignTable: 'projecao_matricula' + } +}, 'filter').addValueToField({ + name: 'city', + table: 'municipio', + tableField: ['nome', 'id'], + resultField: ['city_name', 'city_id'], + where: { + relation: '=', + type: 'integer', + field: 'id' + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: 'projecao_matricula' + } +}, 'dims').addValueToField({ + name: 'city', + table: 'municipio', + tableField: 'nome', + resultField: 'city_name', + where: { + relation: '=', + type: 'integer', + field: 'id' + }, + join: { + primary: 'id', + foreign: 'municipio_id', + foreignTable: 'projecao_matricula' + } +}, 'filter').addValue({ + name: 'min_year', + table: 'projecao_matricula', + tableField: 'ano_censo', + resultField: 'year', + where: { + relation: '>=', + type: 'integer', + field: 'ano_censo' + } +}).addValue({ + name: 'max_year', + table: 'projecao_matricula', + tableField: 'ano_censo', + resultField: 'year', + where: { + relation: '<=', + type: 'integer', + field: 'ano_censo' + } +}); + +enrollmentProjectionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => { + req.sql.field("'Brasil'", 'name') + .field('SUM(projecao_matricula.urbano_dia_total)', 'urban_day_total') + .field('SUM(projecao_matricula.urbano_noite_total)', 'urban_night_total') + .field('SUM(projecao_matricula.rural_dia_total)', 'rural_day_total') + .field('SUM(projecao_matricula.rural_noite_total)', 'rural_night_total') + .field('projecao_matricula.etapa_ensino_escola_ano_id', 'education_level_school_year_id') + .field('projecao_matricula.ano_censo', 'year') + .from('projecao_matricula') + .group('projecao_matricula.etapa_ensino_escola_ano_id') + .group('projecao_matricula.ano_censo') + .order('projecao_matricula.ano_censo') + .order('projecao_matricula.etapa_ensino_escola_ano_id'); + + next(); +}, query, id2str.transform(), response('enrollment_projection')); + +module.exports = enrollmentProjectionApp; \ No newline at end of file