From 8e7092cf545d01f69035d00d69b426bd0f4161a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?=
 <jvfpw18@inf.ufpr.br>
Date: Wed, 29 Apr 2020 10:34:18 -0300
Subject: [PATCH] Update 2019, classroom_count and projection

---
 docente_por_formacao.sql      | 69 +++++++++++++++++++++++++++--------
 idm.sql                       | 12 +++---
 matricula_por_localizacao.sql |  9 ++---
 projecao_matricula.sql        | 16 ++++----
 4 files changed, 71 insertions(+), 35 deletions(-)

diff --git a/docente_por_formacao.sql b/docente_por_formacao.sql
index ba86c4d..894d12d 100644
--- a/docente_por_formacao.sql
+++ b/docente_por_formacao.sql
@@ -31,8 +31,10 @@ WITH
             INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
             INNER JOIN estado ON (docente.escola_estado_id=estado.id)
             INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
-        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
-            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (2, 3, 4, 5, 6, 7, 8))
+        WHERE (docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND 
+            ((docente.tipo_turma_id <= 3 AND docente.tipo_turma_atendimento_id IS NULL) OR 
+                (docente.tipo_turma_atendimento_id <= 2 AND docente.tipo_turma_id IS NULL))
+            AND (docente.ano_censo >= 2018) AND (docente.nivel_tipo_formacao IN (3, 4, 5, 6, 7, 8, 9, 10, 11, 12))
         GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id,
             docente.id_docente
         ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
@@ -44,8 +46,10 @@ WITH
             INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
             INNER JOIN estado ON (docente.escola_estado_id=estado.id)
             INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
-        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
-            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (2, 3))
+        WHERE (docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND 
+            ((docente.tipo_turma_id <= 3 AND docente.tipo_turma_atendimento_id IS NULL) OR 
+                (docente.tipo_turma_atendimento_id <= 2 AND docente.tipo_turma_id IS NULL))
+            AND (docente.ano_censo >= 2018) AND (docente.nivel_tipo_formacao IN (3, 4))
         GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id,
             docente.id_docente
         ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
@@ -57,29 +61,64 @@ WITH
             INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
             INNER JOIN estado ON (docente.escola_estado_id=estado.id)
             INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
-        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
-            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (4, 5))
+        WHERE (docente.tipo_docente = 1 OR docente.tipo_docente = 5)  AND 
+            ((docente.tipo_turma_id <= 3 AND docente.tipo_turma_atendimento_id IS NULL) OR 
+                (docente.tipo_turma_atendimento_id <= 2 AND docente.tipo_turma_id IS NULL))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (5, 6))
         GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id,
             docente.id_docente
         ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
         ),
-    docente_especializacao_mestrado_doutorado AS
-        (SELECT id_docente AS "id_docente", docente.ano_censo AS ano_censo, estado.id AS estado_id,
-            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id,
-            docente.nivel_tipo_formacao as tipo_formacao
+    docente_especializacao AS
+        (SELECT docente.id_docente AS "id_docente", docente.ano_censo AS ano_censo, estado.id AS estado_id,
+            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id, 6 as tipo_formacao
         FROM docente
             INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
             INNER JOIN estado ON (docente.escola_estado_id=estado.id)
             INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
-        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
-            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (6, 7, 8))
+        WHERE (docente.tipo_docente = 1 OR docente.tipo_docente = 5)  AND 
+            ((docente.tipo_turma_id <= 3 AND docente.tipo_turma_atendimento_id IS NULL) OR 
+                (docente.tipo_turma_atendimento_id <= 2 AND docente.tipo_turma_id IS NULL))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (7, 8))
         GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id,
-            docente.id_docente, docente.nivel_tipo_formacao
+            docente.id_docente
+        ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
+        ),
+    docente_mestrado AS
+        (SELECT docente.id_docente AS "id_docente", docente.ano_censo AS ano_censo, estado.id AS estado_id,
+            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id, 7 as tipo_formacao
+        FROM docente
+            INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
+            INNER JOIN estado ON (docente.escola_estado_id=estado.id)
+            INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
+        WHERE (docente.tipo_docente = 1 OR docente.tipo_docente = 5)  AND 
+            ((docente.tipo_turma_id <= 3 AND docente.tipo_turma_atendimento_id IS NULL) OR 
+                (docente.tipo_turma_atendimento_id <= 2 AND docente.tipo_turma_id IS NULL))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (9, 10))
+        GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id,
+            docente.id_docente
         ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
-        )
+        ),
+    docente_doutorado AS
+        (SELECT docente.id_docente AS "id_docente", docente.ano_censo AS ano_censo, estado.id AS estado_id,
+            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id, 8 as tipo_formacao
+        FROM docente
+            INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
+            INNER JOIN estado ON (docente.escola_estado_id=estado.id)
+            INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
+        WHERE (docente.tipo_docente = 1 OR docente.tipo_docente = 5)  AND 
+            ((docente.tipo_turma_id <= 3 AND docente.tipo_turma_atendimento_id IS NULL) OR 
+                (docente.tipo_turma_atendimento_id <= 2 AND docente.tipo_turma_id IS NULL))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (11, 12)
+        GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id,
+            docente.id_docente
+        ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
+        ),
 
 SELECT * FROM docente_total
 UNION ALL (SELECT * FROM docente_medio)
 UNION ALL (SELECT * FROM docente_superior)
-UNION ALL (SELECT * FROM docente_especializacao_mestrado_doutorado)
+UNION ALL (SELECT * FROM docente_especializacao)
+UNION ALL (SELECT * FROM docente_mestrado)
+UNION ALL (SELECT * FROM docente_doutorado)
 );
diff --git a/idm.sql b/idm.sql
index c7062e4..8cf3ed8 100644
--- a/idm.sql
+++ b/idm.sql
@@ -27,14 +27,14 @@ CREATE TABLE indice_distribuicao_matriculas AS (
         (SELECT count(serie_ano_id) AS total_estado, serie_ano_id, estado_id, ano_censo, localizacao_id,
             dependencia_adm_id
         FROM matricula
-        WHERE ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_id <=3
+        WHERE ano_censo>=2018 AND dependencia_adm_id <=3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY serie_ano_id, estado_id, ano_censo, localizacao_id, dependencia_adm_id),
 
     div_estado_mod AS
         (SELECT count(serie_ano_id) AS total_estado_mod, cast(LEFT(serie_ano_id, 1) as integer) as serie_mod, estado_id,
             ano_censo, localizacao_id, dependencia_adm_id
         FROM matricula
-        WHERE ano_censo >= 2017 AND tipo <= 3 AND dependencia_adm_id <= 3
+        WHERE ano_censo >= 2018 AND dependencia_adm_id <= 3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY serie_mod, estado_id, ano_censo, localizacao_id, dependencia_adm_id),
     
     div_brasil AS
@@ -56,7 +56,7 @@ CREATE TABLE indice_distribuicao_matriculas AS (
                                       AND matricula.ano_censo=div_brasil.ano_censo
                                       AND matricula.localizacao_id=div_brasil.localizacao_id
                                       AND matricula.dependencia_adm_id=div_brasil.dependencia_adm_id
-        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        WHERE matricula.ano_censo>=2018 AND dependencia_adm_priv <=3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa,
             matricula.localizacao_id, matricula.dependencia_adm_id),
     
@@ -69,7 +69,7 @@ CREATE TABLE indice_distribuicao_matriculas AS (
                                        AND matricula.ano_censo=div_estado.ano_censo
                                        AND matricula.localizacao_id=div_estado.localizacao_id
                                        AND matricula.dependencia_adm_id=div_estado.dependencia_adm_id
-        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        WHERE matricula.ano_censo>=2018 AND dependencia_adm_priv <=3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, matricula.serie_ano_id, total_etapa,
             matricula.localizacao_id, matricula.dependencia_adm_id),
 
@@ -81,7 +81,7 @@ CREATE TABLE indice_distribuicao_matriculas AS (
                                            AND matricula.ano_censo=div_brasil_mod.ano_censo
                                            AND matricula.localizacao_id=div_brasil_mod.localizacao_id
                                            AND matricula.dependencia_adm_id=div_brasil_mod.dependencia_adm_id
-        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        WHERE matricula.ano_censo>=2018 AND dependencia_adm_priv <=3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod, total_etapa,
             matricula.localizacao_id, matricula.dependencia_adm_id),
 
@@ -94,7 +94,7 @@ CREATE TABLE indice_distribuicao_matriculas AS (
                                            AND matricula.ano_censo=div_estado_mod.ano_censo
                                            AND matricula.localizacao_id=div_estado_mod.localizacao_id
                                            AND matricula.dependencia_adm_id=div_estado_mod.dependencia_adm_id
-        WHERE matricula.ano_censo>=2017 AND tipo <= 3 AND dependencia_adm_priv <=3
+        WHERE matricula.ano_censo>=2018 AND dependencia_adm_priv <=3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY matricula.ano_censo, matricula.estado_id, municipio_id, serie_mod, total_etapa,
             matricula.localizacao_id, matricula.dependencia_adm_id)
 
diff --git a/matricula_por_localizacao.sql b/matricula_por_localizacao.sql
index 2646585..5f993d5 100644
--- a/matricula_por_localizacao.sql
+++ b/matricula_por_localizacao.sql
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
 along with HOTMapper.  If not, see <https://www.gnu.org/licenses/>.
 */
 
--- depends: matricula 2017+
+-- depends: matricula 2018+
 -- SimCAQ: tabela de projeção de matrículas --
 
 CREATE TABLE matricula_por_localizacao AS (
@@ -28,7 +28,7 @@ WITH
         (SELECT count(*) as dia_total, ano_censo, estado_id, municipio_id, serie_ano_id, localizacao_id,
             dependencia_adm_id
          FROM matricula
-         WHERE tipo<=3 AND dependencia_adm_id < 4 AND ano_censo >= 2017 AND
+         WHERE dependencia_adm_id < 4 AND ano_censo >= 2018 AND (tipo_atendimento_turma <= 2 OR tipo <= 3) AND
             (turma_turno_id IN (1, 2, 99) OR turma_turno_id IS null)
          GROUP BY ano_censo, estado_id, municipio_id, serie_ano_id, localizacao_id, dependencia_adm_id
          ORDER BY ano_censo, estado_id, municipio_id, serie_ano_id, localizacao_id, dependencia_adm_id
@@ -38,7 +38,7 @@ WITH
         (SELECT count(*) as noite_total, ano_censo, estado_id, municipio_id, serie_ano_id, localizacao_id,
             dependencia_adm_id
          FROM matricula
-         WHERE tipo<=3 AND dependencia_adm_id < 4 AND ano_censo >= 2017 AND turma_turno_id = 3
+         WHERE dependencia_adm_id < 4 AND ano_censo >= 2018 AND turma_turno_id = 3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
          GROUP BY ano_censo, estado_id, municipio_id, serie_ano_id, localizacao_id, dependencia_adm_id
          ORDER BY ano_censo, estado_id, municipio_id, serie_ano_id, localizacao_id, dependencia_adm_id
         )
@@ -55,8 +55,7 @@ FROM matricula
         AND matricula.municipio_id=night_count.municipio_id AND matricula.serie_ano_id=night_count.serie_ano_id
         AND matricula.localizacao_id=night_count.localizacao_id
         AND matricula.dependencia_adm_id=night_count.dependencia_adm_id
-WHERE matricula.ano_censo >= 2017 AND matricula.serie_ano_id IS NOT NULL
-    AND matricula.tipo <= 3 AND matricula.dependencia_adm_id < 4
+WHERE matricula.ano_censo >= 2018 AND matricula.serie_ano_id IS NOT NULL AND matricula.dependencia_adm_id < 4 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
 GROUP BY  matricula.ano_censo, matricula.estado_id, matricula.municipio_id, matricula.serie_ano_id, dia_total,
     noite_total, matricula.localizacao_id, matricula.dependencia_adm_id
 );
diff --git a/projecao_matricula.sql b/projecao_matricula.sql
index af14e5d..2833621 100644
--- a/projecao_matricula.sql
+++ b/projecao_matricula.sql
@@ -26,32 +26,30 @@ CREATE TABLE projecao_matricula AS (
 WITH urban_day AS
         (SELECT count(*) as urbano_dia_total, ano_censo, estado_id, municipio_id, serie_ano_id
         FROM matricula
-        WHERE localizacao_id = 1 AND tipo <= 3 AND dependencia_adm_id IN (1, 2, 3) AND
-        (turma_turno_id IN (1, 2, 99) OR turma_turno_id IS null)
+        WHERE localizacao_id = 1 AND dependencia_adm_id IN (1, 2, 3) AND (turma_turno_id IN (1, 2, 99) OR turma_turno_id IS null) AND 
+            (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY ano_censo, estado_id, municipio_id, serie_ano_id
         ORDER BY ano_censo, ano_censo, estado_id, municipio_id, serie_ano_id),
     
     urban_night AS
         (SELECT count(*) as urbano_noite_total, ano_censo, estado_id, municipio_id, serie_ano_id
         FROM matricula
-        WHERE localizacao_id = 1 AND tipo <= 3 AND dependencia_adm_id IN (1, 2, 3) AND
-        turma_turno_id = 3
+        WHERE localizacao_id = 1 AND dependencia_adm_id IN (1, 2, 3) AND turma_turno_id = 3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY ano_censo, estado_id, municipio_id, serie_ano_id
         ORDER BY ano_censo, ano_censo, estado_id, municipio_id, serie_ano_id),
     
     rural_day AS
         (SELECT count(*) as rural_dia_total, ano_censo, estado_id, municipio_id, serie_ano_id
         FROM matricula
-        WHERE localizacao_id = 2 AND tipo <= 3 AND dependencia_adm_id IN (1, 2, 3) AND
-        (turma_turno_id IN (1, 2, 99) OR turma_turno_id IS null)
+        WHERE localizacao_id = 2 AND dependencia_adm_id IN (1, 2, 3) AND (turma_turno_id IN (1, 2, 99) OR turma_turno_id IS null) AND 
+            (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY ano_censo, estado_id, municipio_id, serie_ano_id
         ORDER BY ano_censo, ano_censo, estado_id, municipio_id, serie_ano_id),
     
     rural_night AS
         (SELECT count(*) as rural_noite_total, ano_censo, estado_id, municipio_id, serie_ano_id
         FROM matricula
-        WHERE localizacao_id = 2 AND tipo <= 3 AND dependencia_adm_id IN (1, 2, 3) AND
-        turma_turno_id = 3
+        WHERE localizacao_id = 2 AND dependencia_adm_id IN (1, 2, 3) AND turma_turno_id = 3 AND (tipo_atendimento_turma <= 2 OR tipo <= 3)
         GROUP BY ano_censo, estado_id, municipio_id, serie_ano_id
         ORDER BY ano_censo, ano_censo, estado_id, municipio_id, serie_ano_id)
     
@@ -71,7 +69,7 @@ FROM matricula
 GROUP BY
     matricula.ano_censo, matricula.estado_id, matricula.municipio_id, etapa_ensino_escola_ano_id, urbano_dia_total,
     rural_dia_total, urbano_noite_total, rural_noite_total
-HAVING matricula.ano_censo >= 2017 AND etapa_ensino_escola_ano_id IS NOT NULL
+HAVING matricula.ano_censo >= 2018 AND etapa_ensino_escola_ano_id IS NOT NULL
 ORDER BY matricula.ano_censo, matricula.estado_id, matricula.municipio_id, etapa_ensino_escola_ano_id
 );
 
-- 
GitLab