diff --git a/src/libs/middlewares/reqQueryFields.js b/src/libs/middlewares/reqQueryFields.js
index 6a194c845357c189b860f6b3fee4838f0f9ffdbe..577b23598add747c5ee812bf2e68021ae2fb9dee 100644
--- a/src/libs/middlewares/reqQueryFields.js
+++ b/src/libs/middlewares/reqQueryFields.js
@@ -185,6 +185,7 @@ class ReqQueryFields {
                     if(typeof values[k] !== 'undefined') {
                         // Clonamos para não alterar o original
                         let value = _.clone(values[k]);
+                        if(value.parseOnly) return;
                         // Checa se não fizemos o join para este valor e se é necessário fazer
                         if(!hasJoined[value.table] && typeof value.join !== 'undefined') {
                             let foreignTable = '';
diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js
index d29baf0daad3d4323d2f0a45d0493f5183fc59d4..317c6b6f7e590ea80a4b078e3a9a1a2d39c1edb6 100644
--- a/src/libs/routes/enrollment.js
+++ b/src/libs/routes/enrollment.js
@@ -400,12 +400,30 @@ function schoolYearIdToStr(schoolYearId) {
 let simRqf = new ReqQueryFields();
 
 simRqf.addField({
-    name: 'filter'
+    name: 'filter',
+    field: false,
+    where: true
 }).addValue({
-    name: 'simulation_time'
-})
+    name: 'simulation_time',
+    parseOnly: true
+}).addValue({
+    name: 'city',
+    table: 'municipio',
+    tableField: 'nome',
+    resultField: 'city_name',
+    where: {
+        relation: '=',
+        type: 'integer',
+        field: 'id'
+    },
+    join: {
+        primary: 'id',
+        foreign: 'escola_municipio_id',
+        foreignTable: 'matricula'
+    }
+});
 
-enrollmentApp.get('/offer_projection', simRqf.parse(), (req, res, next) => {
+enrollmentApp.get('/offer_projection', simRqf.parse(), simRqf.build(), (req, res, next) => {
     const max_year = squel.select()
     .field('MAX(matricula.ano_censo)')
     .from('matricula')