diff --git a/.gitignore b/.gitignore
index 979717eb93b624b88c6749fccd981b0ccb7b2e8d..dd07fa6dbeaa86ae86247fb62fcb81cdcb47e33e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@ build/*
 
 config.json
 docs/
+.vscode/
\ No newline at end of file
diff --git a/package.json b/package.json
index 8a8785c3d4bd116589ec65d1fd8c5914a93db162..e53c9e9a959ee0fb7a0f50eb53525caa53d6c791 100644
--- a/package.json
+++ b/package.json
@@ -25,7 +25,6 @@
     "debug": "~2.3.x",
     "dirty-chai": "^1.2.2",
     "express": "^4.13.0",
-    "faker": "^3.1.0",
     "forever": "^0.15.2",
     "js2xmlparser": "^2.0.2",
     "jwt-simple": "^0.5.0",
diff --git a/src/libs/convert/admDependencyPriv.js b/src/libs/convert/admDependencyPriv.js
new file mode 100644
index 0000000000000000000000000000000000000000..62afaa8354d2ebabe30826e66aceeb2a8c036790
--- /dev/null
+++ b/src/libs/convert/admDependencyPriv.js
@@ -0,0 +1,18 @@
+module.exports = function admDependencyPriv(id) {
+    switch (id) {
+        case 1:
+        return 'Federal';
+        case 2:
+        return 'Estadual';
+        case 3:
+        return 'Municipal';
+        case 4:
+        return 'Privada conveniada';
+        case 5:
+        return 'Privada não conveniada sem fins lucrativos';
+        case 6:
+        return 'Privada não conveniada com fins lucrativos';
+        default:
+        return 'Não classificada';
+    }
+};
diff --git a/src/libs/convert/citySize.js b/src/libs/convert/citySize.js
index 3f1c0ebdefb3499c3f6642287b7d4b6590de332a..819eb150e8a91e9546cf6935ce7b000b63242789 100644
--- a/src/libs/convert/citySize.js
+++ b/src/libs/convert/citySize.js
@@ -15,6 +15,6 @@ module.exports = function citySize(id) {
         case 7:
         return 'mais que 500000';
         default:
-        return 'Não classificado';
+        return 'Não classificada';
     }
 };
diff --git a/src/libs/convert/educationLevelMod.js b/src/libs/convert/educationLevelMod.js
index 4ee4b37674e130bfad9d0cf3e0c0e587075e06f5..e334e50bcff1665d2c90d2d8b504930a1019e719 100644
--- a/src/libs/convert/educationLevelMod.js
+++ b/src/libs/convert/educationLevelMod.js
@@ -23,6 +23,6 @@ module.exports = function educationLevelMod(id) {
         case 11:
         return 'Educação Profissional';
         default:
-        return 'Não classificado';
+        return 'Não classificada';
     }
 };
diff --git a/src/libs/convert/educationLevelShort.js b/src/libs/convert/educationLevelShort.js
index 3d543ee98690179952ab97b3b9a9ad6056741a3f..ee97e956453c30af7ae7d37d60a6e2708b5dab2c 100644
--- a/src/libs/convert/educationLevelShort.js
+++ b/src/libs/convert/educationLevelShort.js
@@ -15,6 +15,6 @@ module.exports = function educationLevelShort(id) {
         case 7:
         return 'EE exclusiva';
         default:
-        return 'Não classificado';
+        return 'Não classificada';
     }
 };
diff --git a/src/libs/convert/idhmLevel.js b/src/libs/convert/idhmLevel.js
index 310e9bf454838029d56058f83ad9f34142cceae7..c9f1845c6147e4f59bbbcf7aaecd5934ac5c8017 100644
--- a/src/libs/convert/idhmLevel.js
+++ b/src/libs/convert/idhmLevel.js
@@ -11,6 +11,6 @@ module.exports = function idhmLevel(id) {
         case 5:
         return 'Muito Alto';
         default:
-        return 'Não classificado';
+        return 'Não classificada';
     }
 };
diff --git a/src/libs/convert/incomeLevel.js b/src/libs/convert/incomeLevel.js
index 8d3677ef757a7827de0cf76a0a884e1128f2de49..c39106843027d91d628ec6bdda664507e660aae8 100644
--- a/src/libs/convert/incomeLevel.js
+++ b/src/libs/convert/incomeLevel.js
@@ -11,6 +11,6 @@ module.exports = function citySize(id) {
         case 5:
         return '5º quintil – 20% maiores';
         default:
-        return 'Não classificado';
+        return 'Não classificada';
     }
 };
diff --git a/src/libs/convert/schoolYear.js b/src/libs/convert/schoolYear.js
index 485364c86fef34df51eeaf050870d4e2e38f0202..f6b677ccd7c9ac39b8439504b0495e5d0e6dcbf0 100644
--- a/src/libs/convert/schoolYear.js
+++ b/src/libs/convert/schoolYear.js
@@ -49,6 +49,6 @@ module.exports = function schoolYear(id) {
         case 71:
             return 'Educação Profissional';
         default:
-            return 'Não classificado';
+            return 'Não classificada';
     }
 };
diff --git a/src/libs/middlewares/id2str.js b/src/libs/middlewares/id2str.js
index c1f4df1448db01b0d139060881ce354abad143a7..99c03e2d5a75c4a52f6ededc93c3d2e6904719df 100644
--- a/src/libs/middlewares/id2str.js
+++ b/src/libs/middlewares/id2str.js
@@ -3,6 +3,7 @@ const gender = require(`${libs}/convert/gender`);
 const period = require(`${libs}/convert/period`);
 const schoolYear = require(`${libs}/convert/schoolYear`);
 const admDependency = require(`${libs}/convert/admDependency`);
+const admDependencyPriv = require(`${libs}/convert/admDependencyPriv`);
 const location = require(`${libs}/convert/location`);
 const ruralLocation = require(`${libs}/convert/ruralLocation`);
 const ethnicGroup = require(`${libs}/convert/ethnicGroup`);
@@ -25,7 +26,7 @@ const ids = {
     education_level_mod_id: educationLevelMod,
     education_level_short_id: educationLevelShort,
     adm_dependency_id: admDependency,
-    adm_dependency_detailed_id: admDependency,
+    adm_dependency_detailed_id: admDependencyPriv,
     location_id: location,
     rural_location_id: ruralLocation,
     ethnic_group_id: ethnicGroup,
diff --git a/src/libs/routes/class.js b/src/libs/routes/class.js
index 382121b5f5f3de1cb47c80b6abc75297846beebc..8dde3a491f2027ea86f97d960686e8fb07c5b186 100644
--- a/src/libs/routes/class.js
+++ b/src/libs/routes/class.js
@@ -26,6 +26,12 @@ classApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+classApp.get('/years', (req, res, next) => {
+    req.sql.from('turma')
+    .field('DISTINCT turma.ano_censo', 'year');
+    next();
+}, query, response('years'));
+
 classApp.get('/location', (req, res, next) => {
     req.sql = squel.select()
     .field('id')
@@ -57,7 +63,7 @@ classApp.get('/adm_dependency', (req, res, next) => {
 }, query, response('adm_dependency'));
 
 classApp.get('/adm_dependency_detailed', (req, res, next) => {
-    req.sql.from('dependencia_adm')
+    req.sql.from('dependencia_adm_priv')
     .field('id', 'id')
     .field('nome', 'name');
     next();
@@ -91,7 +97,7 @@ classApp.get('/education_level_mod', (req, res, next) => {
 
 classApp.get('/education_level_short', (req, res, next) => {
     req.result = [
-        {id: null, name: 'Não Classificado'},
+        {id: null, name: 'Não classificada'},
         {id: 1, name: 'Creche'},
         {id: 2, name: 'Pré-Escola'},
         {id: 3, name: 'Ensino Fundamental - anos iniciais'},
diff --git a/src/libs/routes/classroom.js b/src/libs/routes/classroom.js
index 7a4f3ce278d1136a47dc08d642a47f56ba399880..3658a587167c24cc3a3afcc37e0dde4b4808a2ba 100644
--- a/src/libs/routes/classroom.js
+++ b/src/libs/routes/classroom.js
@@ -27,6 +27,12 @@ classroomApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+classroomApp.get('/years', (req, res, next) => {
+    req.sql.from('escola')
+    .field('DISTINCT escola.ano_censo', 'year');
+    next();
+}, query, response('years'));
+
 classroomApp.get('/adm_dependency', (req, res, next) => {
     req.sql.from('dependencia_adm')
     .field('id')
diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js
index b7dc9b170db18b294fcdb222d4f9f24a88980e25..a8523ba967de2296e86297e5bb52500eae2cc63d 100644
--- a/src/libs/routes/enrollment.js
+++ b/src/libs/routes/enrollment.js
@@ -27,6 +27,12 @@ enrollmentApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+enrollmentApp.get('/years', (req, res, next) => {
+    req.sql.from('matricula')
+    .field('DISTINCT matricula.ano_censo', 'year');
+    next();
+}, query, response('years'));
+
 enrollmentApp.get('/location', (req, res, next) => {
     req.sql = squel.select()
     .field('id')
@@ -74,7 +80,7 @@ enrollmentApp.get('/education_level_mod', (req, res, next) => {
 
 enrollmentApp.get('/education_level_short', (req, res, next) => {
     req.result = [
-        {id: null, name: 'Não Classificado'},
+        {id: null, name: 'Não classificada'},
         {id: 1, name: 'Creche'},
         {id: 2, name: 'Pré-Escola'},
         {id: 3, name: 'Ensino Fundamental - anos iniciais'},
@@ -96,7 +102,7 @@ enrollmentApp.get('/adm_dependency', (req, res, next) => {
 }, query, response('adm_dependency'));
 
 enrollmentApp.get('/adm_dependency_detailed', (req, res, next) => {
-    req.sql.from('dependencia_adm')
+    req.sql.from('dependencia_adm_priv')
     .field('id', 'id')
     .field('nome', 'name');
     next();
diff --git a/src/libs/routes/idhm.js b/src/libs/routes/idhm.js
index ca88ba56e5807614104e08c3dca23fc7632649cf..e16c3613d3ac1aa62429d0f27ac650f3db3d16cc 100644
--- a/src/libs/routes/idhm.js
+++ b/src/libs/routes/idhm.js
@@ -41,9 +41,27 @@ idhmApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+idhmApp.get('/years', (req, res, next) => {
+    req.sql.from('adh_idh')
+    .field('DISTINCT adh_idh.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    req.oldResult = req.result;
+
+    req.sql = squel.select();
+
+    req.sql.from('adh_idh_uf')
+    .field('DISTINCT adh_idh_uf.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    let result = Object.assign(req.oldResult, req.result);
+    req.result = result;
+    next();
+}, response('years'));
+
 idhmApp.get('/IDHM_level', (req, res, next) => {
     req.result = [
-        {id: null, name: 'Não Classificado'},
+        {id: null, name: 'Não classificada'},
         {id: 1, name: 'Muito Baixa'},
         {id: 2, name: 'Baixo'},
         {id: 3, name: 'Médio'},
diff --git a/src/libs/routes/idhme.js b/src/libs/routes/idhme.js
index d762c95d7b2c6eb59478b2c49af54d4b712957c0..2a68bc9aedf20edaa01f7974dc6c8fd57e1517d7 100644
--- a/src/libs/routes/idhme.js
+++ b/src/libs/routes/idhme.js
@@ -39,6 +39,24 @@ idhmeApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+idhmeApp.get('/years', (req, res, next) => {
+    req.sql.from('adh_idh')
+    .field('DISTINCT adh_idh.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    req.oldResult = req.result;
+
+    req.sql = squel.select();
+
+    req.sql.from('adh_idh_uf')
+    .field('DISTINCT adh_idh_uf.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    let result = Object.assign(req.oldResult, req.result);
+    req.result = result;
+    next();
+}, response('years'));
+
 rqf.addField({
     name: 'filter',
     field: false,
diff --git a/src/libs/routes/idhml.js b/src/libs/routes/idhml.js
index 81b920cdaefd83a7ab0a72f438c7d022f311c2e1..5ba3e12b704a0eb3ac3ae7c5119dcdf0093db21d 100644
--- a/src/libs/routes/idhml.js
+++ b/src/libs/routes/idhml.js
@@ -39,6 +39,24 @@ idhmlApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+idhmlApp.get('/years', (req, res, next) => {
+    req.sql.from('adh_idh')
+    .field('DISTINCT adh_idh.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    req.oldResult = req.result;
+
+    req.sql = squel.select();
+
+    req.sql.from('adh_idh_uf')
+    .field('DISTINCT adh_idh_uf.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    let result = Object.assign(req.oldResult, req.result);
+    req.result = result;
+    next();
+}, response('years'));
+
 rqf.addField({
     name: 'filter',
     field: false,
diff --git a/src/libs/routes/idhmr.js b/src/libs/routes/idhmr.js
index 42b31c3c2541dfa7582fa8ee037289158ea90250..c8a0cba078bfc420973438f230209534d495f715 100644
--- a/src/libs/routes/idhmr.js
+++ b/src/libs/routes/idhmr.js
@@ -41,6 +41,24 @@ idhmrApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+idhmrApp.get('/years', (req, res, next) => {
+    req.sql.from('adh_idh')
+    .field('DISTINCT adh_idh.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    req.oldResult = req.result;
+
+    req.sql = squel.select();
+
+    req.sql.from('adh_idh_uf')
+    .field('DISTINCT adh_idh_uf.ano_censo', 'year');
+    next();
+}, query, (req, res, next) => {
+    let result = Object.assign(req.oldResult, req.result);
+    req.result = result;
+    next();
+}, response('years'));
+
 rqf.addField({
     name: 'filter',
     field: false,
diff --git a/src/libs/routes/pibpercapita.js b/src/libs/routes/pibpercapita.js
index 9195806ca1f26ac696162d48d78053d5c66fb326..aff7a7dfafb757815e4636c042d6b7e7bf8a8761 100644
--- a/src/libs/routes/pibpercapita.js
+++ b/src/libs/routes/pibpercapita.js
@@ -25,6 +25,12 @@ pibpercapitaApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+pibpercapitaApp.get('/years', (req, res, next) => {
+    req.sql.from('ibge_pib').
+    field('DISTINCT ibge_pib.ano_censo', 'year');
+    next();
+}, query, response('years'));
+
 pibpercapitaApp.get('/income_level', (req, res, next) => {
     req.result = [
         {id: 1, name: "1º quintil – 20% menores"},
diff --git a/src/libs/routes/population.js b/src/libs/routes/population.js
index f7777c173d7e668f55eb79c3ec9b1a6b7055643f..3d05c3d0d06fd1630bdcf86df75ec4fba05eaa01 100644
--- a/src/libs/routes/population.js
+++ b/src/libs/routes/population.js
@@ -25,6 +25,12 @@ populationApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+populationApp.get('/years', (req, res, next) => {
+    req.sql.from('ibge_populacao').
+    field('DISTINCT ibge_populacao.ano_censo', 'year');
+    next();
+}, query, response('years'));
+
 populationApp.get('/city_size', (req, res, next) => {
     req.result = [
         {id: 1, name: "até 5000"},
diff --git a/src/libs/routes/school.js b/src/libs/routes/school.js
index f963e23d2e60977209b46b507e980e0febf93e38..fce424982290c9fa7b5847d6dae8c0937f9c7e2d 100644
--- a/src/libs/routes/school.js
+++ b/src/libs/routes/school.js
@@ -25,6 +25,12 @@ schoolApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+schoolApp.get('/years', (req, res, next) => {
+    req.sql.from('escola').
+    field('DISTINCT escola.ano_censo', 'year');
+    next();
+}, query, response('years'));
+
 schoolApp.get('/location', (req, res, next) => {
     req.result = [
         {id: 1, name: 'Urbana'},
@@ -54,7 +60,7 @@ schoolApp.get('/adm_dependency', (req, res, next) => {
 }, query, response('adm_dependency'));
 
 schoolApp.get('/adm_dependency_detailed', (req, res, next) => {
-    req.sql.from('dependencia_adm')
+    req.sql.from('dependencia_adm_priv')
     .field('id', 'id')
     .field('nome', 'name');
     next();
@@ -488,7 +494,7 @@ rqfCount.addField({
     }
 }).addValue({
     name: 'adm_dependency_detailed',
-    table: 'dependencia_adm',
+    table: 'dependencia_adm_priv',
     tableField: 'nome',
     resultField: 'adm_dependency_detailed_name',
     where: {
diff --git a/src/libs/routes/teacher.js b/src/libs/routes/teacher.js
index 29fdb4db8b171894cf15b6049afa34a0913eb5d0..294417dd1af605ae7a17a64d504269209121acd1 100644
--- a/src/libs/routes/teacher.js
+++ b/src/libs/routes/teacher.js
@@ -26,6 +26,12 @@ teacherApp.get('/year_range', (req, res, next) => {
     next();
 }, query, response('range'));
 
+teacherApp.get('/years', (req, res, next) => {
+    req.sql.from('docente').
+    field('DISTINCT docente.ano_censo', 'year');
+    next();
+}, query, response('years'));
+
 teacherApp.get('/adm_dependency_detailed', (req, res, next) => {
     req.sql.from('dependencia_adm')
     .field('id', 'id')
@@ -50,7 +56,7 @@ teacherApp.get('/education_level_mod', (req, res, next) => {
 
 teacherApp.get('/education_level_short', (req, res, next) => {
     req.result = [
-        {id: null, name: 'Não Classificado'},
+        {id: null, name: 'Não classificada'},
         {id: 1, name: 'Creche'},
         {id: 2, name: 'Pré-Escola'},
         {id: 3, name: 'Ensino Fundamental - anos iniciais'},
diff --git a/src/libs/routes/user.js b/src/libs/routes/user.js
index 4e4dd72f2cf3ef2dd854f7ccaa4dacf9a642d9d2..0d04dfd0f799bbda44eb0dfccc5d9f5ea42f7fcd 100644
--- a/src/libs/routes/user.js
+++ b/src/libs/routes/user.js
@@ -12,6 +12,8 @@ const User = require(`${libs}/models/user`);
 
 const jwt = require('jwt-simple');
 
+const response = require(`${libs}/middlewares/response`);
+
 const required_fields = ["email", "password", "name", "cpf", "schooling", "segment", "role", "institution_name", "state", "city"];
 
 
@@ -20,6 +22,51 @@ function emailSyntax(email) {
     return regex.test(email);
 }
 
+userApp.get('/schooling', (req, res, next) => {
+    req.result = [
+        'Não estudou', 
+        'Ensino Fundamental Incompleto',
+        'Ensino Fundamental Completo',
+        'Ensino Médio',
+        'Graduação',
+        'Mestrado',
+        'Doutorado'
+    ];
+    next();
+}, response('schooling'));
+
+userApp.get('/segment', (req, res, next) => {
+    req.result = [
+        'Gestores e equipe gestora das secretarias e ministério da Educação',
+        'Gestores dos órgãos de planejamento e finanças (das três esferas de governo)',
+        'Agentes do poder legislativo',
+        'Agentes dos conselhos de educação',
+        'Profissionais da educação',
+        'Sindicato',
+        'Sociedade civil interessada no financiamento da Educação Básica de qualidade',
+        'Comunidade acadêmica',
+        'Imprensa',
+        'Outro [citar segmento]'
+    ];
+    next();
+}, response('segment'));
+
+userApp.get('/role', (req, res, next) => {
+    req.result = [
+        {"Gestores e equipe gestora das secretarias e ministério da Educação" : ["Dirigente municipal, estadual e federal", "Secretário do MEC", "Servidor da área de planejamento educacional", "Membro de associação de gestores (Ex. Undime, Consed, etc)", "Outro [citar função]"]},
+        {"Gestores dos órgãos de planejamento e finanças (das três esferas de governo)" : ["Equipe gestora dos órgãos de planejamento", "Equipe gestora dos órgãos de finanças", "Outro [citar função]"]},
+        {"Agentes do poder legislativo" : ["Parlamentar", "Assessor/a parlamentar", "Auditor/a dos tribunais de conta", "Conselheiro/a de tribunais de conta.", "Outro [citar função]"]},
+        {"Agentes dos conselhos de educação" : ["Conselheiro/a municipais, estaduais e federais", "Conselheiro/a do Fundeb", "Outro [citar função]"]},
+        {"Profissionais da educação" : ["Professor/a da Educação Básica", "Profissional da educação não-docente", "Outro [citar função]"]},
+        {"Sindicato" : ["Agente de sindicatos"]},
+        {"Sociedade civil interessada no financiamento da Educação Básica de qualidade" : ["Membro de fóruns educacionais", "Membro de ONGs e demais entidades sem fins lucrativos", "Estudante da educação básica e membro de entidades estudantis", "Pais e membros de entidades de pais", "Outro [citar função]"]},
+        {"Comunidade acadêmica" : ["Pesquisador/a", "Estudantes de graduação e pós-graduação", "Representantes de entidades de pesquisa (Ex.: ANPED, ANPAE e FINEDUCA)", "Outro [citar função]"]},
+        {"Imprensa" : ["Jornalista", "Outro [citar função]"]},
+        {"Outro [citar segmento]" : []}
+    ]
+    next();
+}, response('role'));
+
 userApp.post('/', (req, res, next) => {
     if(req.body.email){
         if(!emailSyntax(req.body.email)){