diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6e7b10c10b205cca5712e6ef1542ba5c99b5c13a..39149f5870bd6f98d5644bedae5dbfe23038692a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -17,6 +17,7 @@ Bugs are reported and tracked at [simcaq/SCRUM](https://gitlab.c3sl.ufpr.br/simc
 * **development**: default branch
 * **issue/??**: issue branch - a branch created to solve a issue
 * **feature_????**: feature branch - a branch created to add a feature
+* **hotfix_????**: hotfix branch - a branch created to fix a problem or error
 * **release_vM.m.f**: release branch - a branch created to merge with master and set a release. The verion follows the [semantic versioning](http://semver.org)
 
 ## Styleguide
diff --git a/src/libs/db/query_exec.js b/src/libs/db/query_exec.js
index 70456d8ef73868108d3db58b044508700884ebe9..1a2f7387574bc2f886550ef39f86f221c6a98e49 100644
--- a/src/libs/db/query_exec.js
+++ b/src/libs/db/query_exec.js
@@ -28,12 +28,14 @@ function execSqlQuery(sqlQuery, sqlQueryParams = []) {
                 resolve(dbResult.data);
             }).catch((queryError) => {
                 log.error(`SQL query execution error: ${queryError.message}`);
+                log.error(`SQL query: ${sqlQuery} with params: ${sqlQueryParams}`);
                 // release resources allocated for the prepared statement
                 dbQuery.release();
                 reject(new Error(queryError.message));
             });
         }).catch((prepError) => {
             log.error(`SQL prepared statement error: ${prepError.message}`);
+            log.error(`SQL query: ${sqlQuery} with params: ${sqlQueryParams}`);
             reject(new Error(prepError.message));
         });
     });
diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js
index 1ad57f27f6ee893d21bdf5d8bc9ffee5a10b3bf1..a20b24bc694cbd00d2e1f40cc8df38dc6100cc04 100644
--- a/src/libs/routes/enrollment.js
+++ b/src/libs/routes/enrollment.js
@@ -37,8 +37,7 @@ enrollmentApp.get('/location', (req, res, next) => {
 
 // Returns all educational levels avaible
 enrollmentApp.get('/education_level', (req, res, next) => {
-    req.sql = squel.select()
-        .from('etapa_ensino')
+    req.sql.from('etapa_ensino')
         .field('pk_etapa_ensino_id', 'id')
         .field('desc_etapa', 'name');
 
diff --git a/src/libs/routes/school.js b/src/libs/routes/school.js
index ec415a868b1cd4bac133813b7c3a3c2a9fa9ef5a..3af30fb1b5b3b7dde4f4559f0d4abf18974a2d88 100644
--- a/src/libs/routes/school.js
+++ b/src/libs/routes/school.js
@@ -17,12 +17,11 @@ const response = require(`${libs}/middlewares/response`);
  * Pense na cena do elevador de driver mas o elevador é uma bomba de fusão e demora mais que uma luta do DBz
  */
 // schoolApp.get('/', (req, res, next) => {
-//     req.sql = squel.select().from('escolas')
-//         .field('pk_escola_id')
-//         .field('nome_entidade', 'name')
+//     req.sql = squel.select().from('escola')
+//         .field('cod_entidade')
 //         .field('ano_censo', 'year')
-//         .field('fk_cod_estado')
-//         .field('fk_cod_municipio');
+//         .field('fk_estado_id')
+//         .field('fk_municipio_id');
 //     next();
 // }, query, response('school'));
 
diff --git a/src/test/simulation.js b/src/test/simulation.js
index a9349256b29bc20068eb74b0172e15d0dbe28937..8804b4359187953f1fd13584a36d7dc167139681 100644
--- a/src/test/simulation.js
+++ b/src/test/simulation.js
@@ -27,6 +27,393 @@ const Simulation = require('../libs/models/simulation');
 const User = require('../libs/models/user');
 
 chai.use(chaiHttp);
+
+describe('API is running', () => {
+    it('should respond it\'s running', (done) => {
+        chai.request(server)
+            .get('/api/v1')
+            .end((err, res) => {
+                res.should.have.status(200);
+                res.should.be.json;
+                res.body.should.have.property('msg');
+                done();
+            })
+    });
+});
+
+describe('request enrollments', () => {
+    it('should list the year range', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment/year_range')
+            .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('start_year');
+                res.body.result[0].should.have.property('end_year');
+                done();
+            });
+    });
+
+    it('should list the education level', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment/education_level')
+            .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/enrollment/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 enrollments', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment')
+            .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('name');
+                res.body.result[0].should.have.property('total');
+                done();
+            });
+    });
+
+    it('should list enrollments with valid filters', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment?filter=min_year:2010,state:41')
+            .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('name');
+                res.body.result[0].should.have.property('total');
+                done();
+            });
+    });
+
+    it('should list enrollments with invalid filters', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment?filter=foo:2010,bar:41')
+            .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('name');
+                res.body.result[0].should.have.property('total');
+                done();
+            });
+    });
+
+    it('should list enrollments with valid dimensions', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment?dims=region,state,adm_dependency,location&filter=min_year:2014,region:4')
+            .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('region_name');
+                res.body.result[0].should.have.property('state_name');
+                res.body.result[0].should.have.property('adm_dependency_name');
+                res.body.result[0].should.have.property('location_name');
+                res.body.result[0].should.have.property('total');
+                done();
+            });
+    });
+
+    it('should list enrollments with invalid dimensions', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment?dims=foo,bar')
+            .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('name');
+                res.body.result[0].should.have.property('total');
+                done();
+            });
+    });
+
+    it('should list enrollments with valid dimensions and filters', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment?dims=region,state,education_level,school&filter=min_year:2013,max_year:2014,city:4106902')
+            .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('region_name');
+                res.body.result[0].should.have.property('state_name');
+                res.body.result[0].should.have.property('school_name');
+                res.body.result[0].should.have.property('education_level');
+                res.body.result[0].should.have.property('total');
+                res.body.result[0].should.have.property('year');
+                done();
+            });
+    });
+
+    it('should list enrollments using all dimensions and filters', (done) => {
+        chai.request(server)
+            .get('/api/v1/enrollment?dims=region,state,city,education_level,school,adm_dependency,location&filter=min_year:2013,max_year:2014,city:4106902,adm_dependency:3,location:1,education_level:99')
+            .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('region_name');
+                res.body.result[0].should.have.property('state_name');
+                res.body.result[0].should.have.property('school_name');
+                res.body.result[0].should.have.property('education_level');
+                res.body.result[0].should.have.property('location_name');
+                res.body.result[0].should.have.property('adm_dependency_name');
+                res.body.result[0].should.have.property('total');
+                res.body.result[0].should.have.property('year');
+                done();
+            });
+    });
+
+
+});
+
+describe('request regions', () => {
+    it('should list all regions', (done) => {
+        chai.request(server)
+            .get('/api/v1/region')
+            .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('pk_regiao_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            });
+    });
+
+    it('should list region by id', (done) => {
+        chai.request(server)
+            .get('/api/v1/region/1')
+            .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.should.have.length(1);
+                res.body.result[0].should.have.property('pk_regiao_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            });
+    });
+});
+
+describe('request states', () => {
+    it('should list all states', (done) => {
+        chai.request(server)
+            .get('/api/v1/state')
+            .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('pk_estado_id');
+                res.body.result[0].should.have.property('fk_regiao_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            });
+    });
+
+    it('should list a state by id', (done) => {
+        chai.request(server)
+            .get('/api/v1/state/11')
+            .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.should.have.length(1);
+                res.body.result[0].should.have.property('pk_estado_id');
+                res.body.result[0].should.have.property('fk_regiao_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            });
+    });
+
+    it('should list states by region id', (done) => {
+        chai.request(server)
+            .get('/api/v1/state/region/1')
+            .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('pk_estado_id');
+                res.body.result[0].should.have.property('fk_regiao_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            });
+    });
+});
+
+describe('request cities', () => {
+    it('should list all cities', (done) => {
+        chai.request(server)
+            .get('/api/v1/city')
+            .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('pk_cod_ibge');
+                res.body.result[0].should.have.property('nome');
+                res.body.result[0].should.have.property('fk_estado_id');
+                done();
+            });
+    });
+
+    it('should list a city by id', (done) => {
+        chai.request(server)
+            .get('/api/v1/city/4106902')
+            .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('pk_cod_ibge');
+                res.body.result[0].should.have.property('fk_estado_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            });
+    });
+
+    it('should list a city by codigo_ibge', (done) => {
+        chai.request(server)
+            .get('/api/v1/city/ibge/4106902')
+            .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('pk_cod_ibge');
+                res.body.result[0].should.have.property('fk_estado_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            });
+    });
+
+    it('should list all cities from a state', (done) => {
+        chai.request(server)
+            .get('/api/v1/city/state/41')
+            .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('pk_cod_ibge');
+                res.body.result[0].should.have.property('fk_estado_id');
+                res.body.result[0].should.have.property('nome');
+                done();
+            })
+    })
+});
+
+describe('request schools', () => {
+    it('should list a school by id', (done) => {
+        chai.request(server)
+            .get('/api/v1/school/41000021')
+            .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('ano_censo');
+                res.body.result[0].should.have.property('cod_entidade');
+                done();
+            });
+    });
+
+    it('should list all schools from a state', (done) => {
+        chai.request(server)
+            .get('/api/v1/school/state/41')
+            .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('cod_entidade');
+                res.body.result[0].should.have.property('ano_censo');
+                done();
+            });
+    });
+
+    it('should list all schools from a city', (done) => {
+        chai.request(server)
+            .get('/api/v1/school/city/4106902')
+            .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('cod_entidade');
+                res.body.result[0].should.have.property('ano_censo');
+                done();
+            })
+    })
+});
+
+describe('test response', () => {
+    it('should list all regions in json', (done) => {
+        chai.request(server)
+            .get('/api/v1/region')
+            .end((err, res) => {
+                res.should.have.status(200);
+                res.should.be.json;
+                done();
+            });
+    });
+
+    it('should list all regions in xml', (done) => {
+        chai.request(server)
+            .get('/api/v1/region?format=xml')
+            .end((err, res) => {
+                res.should.have.status(200);
+                res.should.be.xml;
+                done();
+            });
+    });
+
+    it('should list all regions in csv', (done) => {
+        chai.request(server)
+            .get('/api/v1/region?format=csv')
+            .end((err, res) => {
+                res.should.have.status(200);
+                done();
+            });
+    });
+});
+
 describe('Requires a simulation', () => {
     let newSimulation;
 
@@ -410,6 +797,9 @@ describe('Saves a user', () => {
 
     beforeEach(() => {
         User.remove({}, (err) => {
+            if(err) {
+                console.log('Error while purging: ' + err);
+            }
             console.log('Test collection purged');
         });
     });