diff --git a/src/libs/routes/classroom.js b/src/libs/routes/classroom.js
index 37186e56f098ee294ca7267e5970eff5d81e318c..87c34d9e86f67054a74f958ab86771a2af2566c9 100644
--- a/src/libs/routes/classroom.js
+++ b/src/libs/routes/classroom.js
@@ -12,8 +12,44 @@ const response = require(`${libs}/middlewares/response`);
 
 const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`);
 
+const id2str = require(`${libs}/middlewares/id2str`);
+
 let rqf = new ReqQueryFields();
 
+let rqfCount = new ReqQueryFields();
+
+// Complete range of the enrollments dataset.
+// Returns a tuple of start and ending years of the complete enrollments dataset.
+classroomApp.get('/year_range', (req, res, next) => {
+    req.sql.from('escola')
+    .field('MIN(escola.ano_censo)', 'start_year')
+    .field('MAX(escola.ano_censo)', 'end_year');
+    next();
+}, query, response('range'));
+
+classroomApp.get('/adm_dependency', (req, res, next) => {
+    req.sql.from('dependencia_adm')
+    .field('id')
+    .field('nome', 'name')
+    .where('id <= 4');
+    next()
+}, query, response('adm_dependency'));
+
+classroomApp.get('/adm_dependency_detailed', (req, res, next) => {
+    req.sql.from('dependencia_adm')
+    .field('id', 'id')
+    .field('nome', 'name');
+    next()
+}, query, response('adm_dependency_detailed'));
+
+classroomApp.get('/location', (req, res, next) => {
+    req.sql = squel.select()
+    .field('id')
+    .field('descricao', 'name')
+    .from('localizacao');
+    next()
+}, query, response('location'));
+
 rqf.addField({
     name: 'filter',
     field: false,
@@ -79,56 +115,54 @@ rqf.addField({
         foreignTable: 'escola'
     }
 }).addValue({
-    name: 'year',
+    name: 'min_year',
     table: 'escola',
     tableField: 'ano_censo',
     resultField: 'year',
     where: {
-        relation: '=',
+        relation: '>=',
         type: 'integer',
-        field: 'ano_censo',
-        table: 'escola'
+        field: 'ano_censo'
+    }
+}).addValue({
+    name: 'max_year',
+    table: 'escola',
+    tableField: 'ano_censo',
+    resultField: 'year',
+    where: {
+        relation: '<=',
+        type: 'integer',
+        field: 'ano_censo'
     }
 }).addValue({
     name: 'adm_dependency',
-    table: 'dependencia_adm',
-    tableField: 'nome',
-    resultField: 'adm_dependency_name',
+    table: 'escola',
+    tableField: 'dependencia_adm_id',
+    resultField: 'adm_dependency_id',
     where: {
         relation: '=',
         type: 'integer',
-        field: 'id'
-    },
-    join: {
-        primary: 'id',
-        foreign: 'dependencia_adm_id',
-        foreignTable: 'escola'
+        field: 'dependencia_adm_id'
     }
 }).addValue({
     name: 'adm_dependency_detailed',
-    table: 'dependencia_adm',
-    tableField: 'nome',
-    resultField: 'adm_dependency_detailed_name',
+    table: 'escola',
+    tableField: 'dependencia_adm_priv',
+    resultField: 'adm_dependency_detailed_id',
     where: {
         relation: '=',
         type: 'integer',
-        field: 'id'
-    },
-    join: {
-        primary: 'id',
-        foreign: 'dependencia_adm_priv',
-        foreignTable: 'escola'
+        field: 'dependencia_adm_priv'
     }
 }).addValue({
-    name: 'locality',
+    name: 'location',
     table: 'escola',
     tableField: 'cod_localizacao',
-    resultField: 'locality',
+    resultField: 'location_id',
     where: {
         relation: '=',
         type: 'integer',
-        field: 'cod_localizacao',
-        table: 'escola'
+        field: 'cod_localizacao'
     }
 });
 
@@ -142,6 +176,6 @@ classroomApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => {
         .order('escola.ano_censo')
         .where('escola.situacao_de_funcionamento = 1 AND escola.local_func_predio_escolar = 1');
     next();
-}, query, response('classroom'));
+}, query, id2str.transform(true), response('classroom'));
 
 module.exports = classroomApp;
diff --git a/src/test/classroom.js b/src/test/classroom.js
index 54d058aee1e5f213c6c8ba92d28dcdf812462354..bd520cf8b67ad396f8251092bf0a4036bb65e36a 100644
--- a/src/test/classroom.js
+++ b/src/test/classroom.js
@@ -25,6 +25,48 @@ const server = require(`${libs}/app`);
 chai.use(chaiHttp);
 describe('request classrooms', () => {
 
+    it('should list the locations', (done) => {
+        chai.request(server)
+            .get('/api/v1/classroom/location')
+            .end((err, res) => {
+                res.should.have.status(200);
+                res.should.be.json;
+                res.body.should.have.property('result');
+                res.body.result.should.be.a('array');
+                res.body.result[0].should.have.property('id');
+                res.body.result[0].should.have.property('name');
+                done();
+            });
+    });
+
+	it('should list the administrative dependencies', (done) => {
+		chai.request(server)
+			.get('/api/v1/classroom/adm_dependency')
+			.end((err, res) => {
+				res.should.have.status(200);
+				res.should.be.json;
+				res.body.should.have.property('result');
+				res.body.result.should.be.a('array');
+				res.body.result[0].should.have.property('id');
+				res.body.result[0].should.have.property('name');
+				done();
+			});
+	});
+
+	it('should list the detailed administrative dependencies', (done) => {
+		chai.request(server)
+			.get('/api/v1/classroom/adm_dependency_detailed')
+			.end((err, res) => {
+				res.should.have.status(200);
+				res.should.be.json;
+				res.body.should.have.property('result');
+				res.body.result.should.be.a('array');
+				res.body.result[0].should.have.property('id');
+				res.body.result[0].should.have.property('name');
+				done();
+			});
+	});
+
     it('should list classrooms', (done) => {
         chai.request(server)
             .get('/api/v1/classroom')
@@ -111,7 +153,7 @@ describe('request classrooms', () => {
 
     it('should list classrooms with valid filters', (done) => {
         chai.request(server)
-            .get('/api/v1/classroom?filter=locality:1')
+            .get('/api/v1/classroom?filter=location:1')
             .end((err, res) => {
                 res.should.have.status(200);
                 res.should.be.json;
@@ -195,13 +237,13 @@ describe('request classrooms', () => {
 
     it('should list classrooms with valid dimensions', (done) => {
         chai.request(server)
-            .get('/api/v1/classroom?dims=locality')
+            .get('/api/v1/classroom?dims=location')
             .end((err, res) => {
                 res.should.have.status(200);
                 res.should.be.json;
                 res.body.should.have.property('result');
                 res.body.result.should.be.a('array');
-                res.body.result[0].should.have.property('locality');
+                res.body.result[0].should.have.property('name');
                 res.body.result[0].should.have.property('total');
                 done();
             });