Skip to content

Commit

Permalink
Merge pull request #221 from prefeiturasp/story/59988-dev
Browse files Browse the repository at this point in the history
story/59988-master-api
  • Loading branch information
julianocm authored Mar 15, 2022
2 parents 0353f2d + 5d312e9 commit 003b830
Show file tree
Hide file tree
Showing 53 changed files with 1,484 additions and 17 deletions.
13 changes: 13 additions & 0 deletions scripts/V67__CREATE_TURMA_ALUNO_HISTORICO.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
CREATE TABLE if not exists public.turma_aluno_historico (
id int8 NOT NULL GENERATED ALWAYS AS IDENTITY,
turma_id int8 NOT NULL,
ano_letivo int4 NOT NULL,
aluno_id int8 NOT NULL,
criado_em timestamptz NOT NULL,
atualizado_em timestamptz NOT NULL,
data_matricula timestamp NULL,
data_situacao timestamp NULL,
CONSTRAINT turma_aluno_historico_pk PRIMARY KEY (id),
CONSTRAINT turma_aluno_historico_aluno_id_fk FOREIGN KEY (aluno_id) REFERENCES public.aluno(id),
CONSTRAINT turma_aluno_historico_turma_id_fk FOREIGN KEY (turma_id) REFERENCES public.turma (id)
);
18 changes: 18 additions & 0 deletions scripts/V68__CREATE_V_TURMAS_ALUNOS.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
CREATE OR REPLACE VIEW public.v_turmas_alunos
AS SELECT DISTINCT t.id AS turma_id,
a.id AS aluno_id,
t.ano,
t.ano_letivo,
t.modalidade_codigo
FROM aluno a
JOIN turma t ON a.turma_id = t.id
UNION
SELECT DISTINCT max(t.id) AS turma_id,
a.id AS aluno_id,
t.ano,
t.ano_letivo,
t.modalidade_codigo
FROM aluno a
JOIN turma_aluno_historico tah ON tah.aluno_id = a.id
JOIN turma t ON tah.turma_id = t.id AND tah.turma_id <> a.turma_id
GROUP BY a.id, t.ano, t.ano_letivo, t.modalidade_codigo;
75 changes: 75 additions & 0 deletions scripts/V69__ALTER_V_ALUNO_PROVA_EXTRACAO.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
CREATE OR REPLACE VIEW public.v_aluno_prova_extracao
AS SELECT p.prova_legado_id AS prova_serap_id,
p.id AS prova_serap_estudantes_id,
dre.dre_id AS dre_codigo_eol,
dre.abreviacao AS dre_sigla,
dre.nome AS dre_nome,
ue.ue_id AS ue_codigo_eol,
(
CASE
WHEN ue.tipo_escola = 1 THEN 'EMEF'::text
WHEN ue.tipo_escola = 2 THEN 'EMEI'::text
WHEN ue.tipo_escola = 3 THEN 'EMEFM'::text
WHEN ue.tipo_escola = 4 THEN 'EMEBS'::text
WHEN ue.tipo_escola = 10 THEN 'CEI DIRET'::text
WHEN ue.tipo_escola = 11 THEN 'CEI INDIR'::text
WHEN ue.tipo_escola = 12 THEN 'CR.P.CONV'::text
WHEN ue.tipo_escola = 13 THEN 'CIEJA'::text
WHEN ue.tipo_escola = 14 THEN 'CCI/CIPS'::text
WHEN ue.tipo_escola = 15 THEN 'ESC.PART.'::text
WHEN ue.tipo_escola = 16 THEN 'CEU EMEF'::text
WHEN ue.tipo_escola = 17 THEN 'CEU EMEI'::text
WHEN ue.tipo_escola = 18 THEN 'CEU CEI'::text
WHEN ue.tipo_escola = 19 THEN 'CEU'::text
WHEN ue.tipo_escola = 22 THEN 'MOVA'::text
WHEN ue.tipo_escola = 23 THEN 'CMCT'::text
WHEN ue.tipo_escola = 25 THEN 'E TEC'::text
WHEN ue.tipo_escola = 26 THEN 'ESP CONV'::text
WHEN ue.tipo_escola = 27 THEN 'CEU AT COMPL'::text
WHEN ue.tipo_escola = 29 THEN 'CCA'::text
WHEN ue.tipo_escola = 28 THEN 'CEMEI'::text
WHEN ue.tipo_escola = 30 THEN 'CECI'::text
WHEN ue.tipo_escola = 31 THEN 'CEU CEMEI'::text
ELSE NULL::text
END || ' '::text) || ue.nome::text AS ue_nome,
t.ano AS turma_ano_escolar,
CASE
WHEN t.ano::text <> 'S'::text THEN (t.ano::text || 'º ano'::text)::character varying
ELSE t.ano
END AS turma_ano_escolar_descricao,
t.codigo AS turma_codigo,
t.nome AS turma_descricao,
a.ra AS aluno_codigo_eol,
CASE
WHEN a.nome_social IS NOT NULL THEN a.nome_social
ELSE a.nome
END AS aluno_nome,
a.sexo AS aluno_sexo,
a.data_nascimento AS aluno_data_nascimento,
CASE
WHEN p.disciplina IS NULL OR p.multidisciplinar THEN 'Multidisciplinar'::character varying
ELSE p.disciplina
END AS prova_componente,
CASE
WHEN p.possui_bib THEN ca.caderno
ELSE ''::character varying
END AS prova_caderno,
p.total_itens AS prova_quantidade_questoes,
palu.criado_em AS prova_data_inicio,
palu.finalizado_em AS prova_data_entregue,
CASE
WHEN palu.frequencia = 0 THEN 'N'::text
WHEN palu.frequencia = 1 THEN 'P'::text
WHEN palu.frequencia = 2 THEN 'A'::text
WHEN palu.frequencia = 3 THEN 'R'::text
ELSE 'N'::text
END AS aluno_frequencia
FROM aluno a
JOIN v_turmas_alunos vta ON a.id = vta.aluno_id
JOIN turma t ON t.modalidade_codigo = vta.modalidade_codigo AND t.ano::text = vta.ano::text AND t.ano_letivo = vta.ano_letivo AND t.id = vta.turma_id
JOIN ue ON t.ue_id = ue.id
JOIN dre ON ue.dre_id = dre.id
JOIN prova_ano pa ON t.ano::text = pa.ano::text
JOIN prova p ON pa.prova_id = p.id AND t.modalidade_codigo = p.modalidade AND t.ano_letivo::double precision = date_part('year'::text, p.inicio)
LEFT JOIN prova_aluno palu ON p.id = palu.prova_id AND a.ra = palu.aluno_ra AND (palu.status = ANY (ARRAY[2, 5])) AND palu.finalizado_em IS NOT NULL
LEFT JOIN caderno_aluno ca ON p.id = ca.prova_id AND a.id = ca.aluno_id;
7 changes: 7 additions & 0 deletions scripts/V70__CREATE_V_QUESTAO_ALUNO_RESPOSTA_MAX_ID.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
CREATE OR REPLACE VIEW public.v_questao_aluno_resposta_max_id
AS SELECT max(questao_aluno_resposta.id) AS id,
questao_aluno_resposta.questao_id,
questao_aluno_resposta.aluno_ra
FROM questao_aluno_resposta
GROUP BY questao_aluno_resposta.questao_id, questao_aluno_resposta.aluno_ra
ORDER BY (max(questao_aluno_resposta.id)) DESC;
32 changes: 32 additions & 0 deletions scripts/V71__ALTER_P_CONSOLIDAR_DADOS_PROVA.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
CREATE OR REPLACE PROCEDURE public.p_consolidar_dados_prova(p_prova_serap_id bigint, p_dre_codigo_eol character varying, p_ue_codigo_eol character varying)
LANGUAGE sql
AS $procedure$

insert into resultado_prova_consolidado
(prova_serap_id,prova_serap_estudantes_id,dre_codigo_eol,dre_sigla,dre_nome,
ue_codigo_eol,ue_nome,turma_ano_escolar,turma_ano_escolar_descricao,
turma_codigo,turma_descricao,aluno_codigo_eol,aluno_nome,aluno_sexo,
aluno_data_nascimento,prova_componente,prova_caderno,prova_quantidade_questoes,
aluno_frequencia,questao_id,questao_ordem,resposta,prova_data_inicio,prova_data_entregue)
select distinct
vape.prova_serap_id,vape.prova_serap_estudantes_id,vape.dre_codigo_eol,vape.dre_sigla,vape.dre_nome,
vape.ue_codigo_eol,vape.ue_nome,vape.turma_ano_escolar,vape.turma_ano_escolar_descricao,
vape.turma_codigo,vape.turma_descricao,vape.aluno_codigo_eol,vape.aluno_nome,vape.aluno_sexo,
vape.aluno_data_nascimento,vape.prova_componente,vape.prova_caderno,vape.prova_quantidade_questoes,
vape.aluno_frequencia,q.id as questao_id,q.ordem + 1 as questao_ordem,
case
when qar.alternativa_id is not null then a.numeracao
else qar.resposta
end as resposta
,prova_data_inicio,prova_data_entregue
from v_aluno_prova_extracao vape
inner join prova p on vape.prova_serap_estudantes_id = p.id
inner join questao q on vape.prova_serap_estudantes_id = q.prova_id
and (not p.possui_bib or (p.possui_bib and vape.prova_caderno = q.caderno))
left join v_questao_aluno_resposta_max_id vqar on q.id = vqar.questao_id and vape.aluno_codigo_eol = vqar.aluno_ra
join questao_aluno_resposta qar on qar.id = vqar.id
left join alternativa a on qar.alternativa_id = a.id
where vape.prova_serap_id = p_prova_serap_id and vape.dre_codigo_eol = p_dre_codigo_eol and vape.ue_codigo_eol = p_ue_codigo_eol;


$procedure$
4 changes: 4 additions & 0 deletions scripts/V72__CREATE_INDEX_TURMA_ALUNO_HISTORICO.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CREATE index if not exists tah_id_idx ON turma_aluno_historico (id);
CREATE index if not exists tah_turma_id_idx ON turma_aluno_historico (turma_id);
CREATE index if not exists tah_ano_letivo_idx ON turma_aluno_historico (ano_letivo);
CREATE index if not exists tah_aluno_id_idx ON turma_aluno_historico (aluno_id);
24 changes: 24 additions & 0 deletions scripts/V73__CREATE_F_CADERNO_ALUNO_PROVA.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
create or replace function f_caderno_aluno_prova (
prova_serap_id int8
)
returns table (
id int8,
aluno_id int8,
caderno varchar,
prova_id int8
)
language plpgsql
AS $function$
begin

return query
select max(ca.id) id, ca.aluno_id,ca.caderno, ca.prova_id
from caderno_aluno ca
inner join prova p
on ca.prova_id = p.id
where p.prova_legado_id = prova_serap_id
group by ca.aluno_id,ca.caderno,ca.prova_id;

end
$function$
;
29 changes: 29 additions & 0 deletions scripts/V74__CREATE_F_QUESTAO_ALUNO_RESPOSTA_PROVA.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
create or replace function f_questao_aluno_resposta_prova (
prova_serap_id int8
)
returns table (
id int8,
questao_id int8,
aluno_ra int8,
alternativa_id int8,
resposta varchar
)
language plpgsql
as $function$
begin

return query
select distinct max(qar.id) AS id,
qar.questao_id,
qar.aluno_ra,
qar.alternativa_id,
qar.resposta
FROM prova p
inner join questao q on p.id = q.prova_id
inner join questao_aluno_resposta qar on qar.questao_id = q.id
where p.prova_legado_id = prova_serap_id
GROUP BY qar.questao_id, qar.aluno_ra,qar.alternativa_id,qar.resposta;

end
$function$
;
94 changes: 94 additions & 0 deletions scripts/V75__CREATE_F_DADOS_PROVA_ALUNOS_TURMA.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
create or replace function f_dados_prova_alunos_turma (
prova_serap_id int8,
dre_codigo_eol varchar,
ue_codigo_eol varchar,
turma_codigo_eol varchar
)
returns table (provaserapid bigint, provaserapestudantesid bigint, drecodigoeol character varying, dresigla character varying, drenome character varying, uecodigoeol character varying, uenome text, turmaanoescolar character varying, turmaanoescolardescricao character varying,
turmacodigo character varying, turmadescricao character varying, alunocodigoeol bigint, alunonome character varying, alunosexo character varying, alunodatanascimento timestamp with time zone, provacomponente character varying, provacaderno character varying,
provaquantidadequestoes integer, provadatainicio timestamp, provadataentregue timestamp, alunofrequencia text)
language plpgsql
as $function$
begin
return query
SELECT p.prova_legado_id AS prova_serap_id,
p.id AS prova_serap_estudantes_id,
dre.dre_id AS dre_codigo_eol,
dre.abreviacao AS dre_sigla,
dre.nome AS dre_nome,
ue.ue_id AS ue_codigo_eol,
(
CASE
WHEN ue.tipo_escola = 1 THEN 'EMEF'::text
WHEN ue.tipo_escola = 2 THEN 'EMEI'::text
WHEN ue.tipo_escola = 3 THEN 'EMEFM'::text
WHEN ue.tipo_escola = 4 THEN 'EMEBS'::text
WHEN ue.tipo_escola = 10 THEN 'CEI DIRET'::text
WHEN ue.tipo_escola = 11 THEN 'CEI INDIR'::text
WHEN ue.tipo_escola = 12 THEN 'CR.P.CONV'::text
WHEN ue.tipo_escola = 13 THEN 'CIEJA'::text
WHEN ue.tipo_escola = 14 THEN 'CCI/CIPS'::text
WHEN ue.tipo_escola = 15 THEN 'ESC.PART.'::text
WHEN ue.tipo_escola = 16 THEN 'CEU EMEF'::text
WHEN ue.tipo_escola = 17 THEN 'CEU EMEI'::text
WHEN ue.tipo_escola = 18 THEN 'CEU CEI'::text
WHEN ue.tipo_escola = 19 THEN 'CEU'::text
WHEN ue.tipo_escola = 22 THEN 'MOVA'::text
WHEN ue.tipo_escola = 23 THEN 'CMCT'::text
WHEN ue.tipo_escola = 25 THEN 'E TEC'::text
WHEN ue.tipo_escola = 26 THEN 'ESP CONV'::text
WHEN ue.tipo_escola = 27 THEN 'CEU AT COMPL'::text
WHEN ue.tipo_escola = 29 THEN 'CCA'::text
WHEN ue.tipo_escola = 28 THEN 'CEMEI'::text
WHEN ue.tipo_escola = 30 THEN 'CECI'::text
WHEN ue.tipo_escola = 31 THEN 'CEU CEMEI'::text
ELSE NULL::text
END || ' '::text) || ue.nome::text AS ue_nome,
t.ano AS turma_ano_escolar,
CASE
WHEN t.ano::text <> 'S'::text THEN (t.ano::text || '° ano'::text)::character varying
ELSE t.ano
END AS turma_ano_escolar_descricao,
t.codigo AS turma_codigo,
t.nome AS turma_descricao,
a.ra AS aluno_codigo_eol,
CASE
WHEN a.nome_social IS NOT NULL THEN a.nome_social
ELSE a.nome
END AS aluno_nome,
a.sexo AS aluno_sexo,
a.data_nascimento AS aluno_data_nascimento,
CASE
WHEN p.disciplina IS NULL OR p.multidisciplinar THEN 'Multidisciplinar'::character varying
ELSE p.disciplina
END AS prova_componente,
CASE
WHEN p.possui_bib THEN ca.caderno
ELSE ''::character varying
END AS prova_caderno,
p.total_itens AS prova_quantidade_questoes,
palu.criado_em AS prova_data_inicio,
palu.finalizado_em AS prova_data_entregue,
CASE
WHEN palu.frequencia = 0 THEN 'N'::text
WHEN palu.frequencia = 1 THEN 'P'::text
WHEN palu.frequencia = 2 THEN 'A'::text
WHEN palu.frequencia = 3 THEN 'R'::text
ELSE 'N'::text
END AS aluno_frequencia
FROM aluno a
JOIN v_turmas_alunos vta ON a.id = vta.aluno_id
JOIN turma t ON t.modalidade_codigo = vta.modalidade_codigo AND t.ano::text = vta.ano::text AND t.ano_letivo = vta.ano_letivo AND t.id = vta.turma_id
JOIN ue ON t.ue_id = ue.id
JOIN dre ON ue.dre_id = dre.id
JOIN prova_ano pa ON t.ano::text = pa.ano::text
JOIN prova p ON pa.prova_id = p.id AND t.modalidade_codigo = p.modalidade AND t.ano_letivo::double precision = date_part('year'::text, p.inicio)
LEFT JOIN prova_aluno palu ON p.id = palu.prova_id AND a.ra = palu.aluno_ra AND (palu.status = ANY (ARRAY[2, 5])) AND palu.finalizado_em IS NOT NULL
LEFT JOIN f_caderno_aluno_prova(prova_serap_id) ca ON p.id = ca.prova_id AND a.id = ca.aluno_id
where p.prova_legado_id = prova_serap_id
and dre.dre_id = dre_codigo_eol
and ue.ue_id = ue_codigo_eol
and t.codigo = turma_codigo_eol;
end
$function$
;
76 changes: 76 additions & 0 deletions scripts/V76__ALTER_V_ALUNO_PROVA_EXTRACAO.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
CREATE OR REPLACE VIEW public.v_aluno_prova_extracao
AS SELECT p.prova_legado_id AS prova_serap_id,
p.id AS prova_serap_estudantes_id,
dre.dre_id AS dre_codigo_eol,
dre.abreviacao AS dre_sigla,
dre.nome AS dre_nome,
ue.ue_id AS ue_codigo_eol,
(
CASE
WHEN ue.tipo_escola = 1 THEN 'EMEF'::text
WHEN ue.tipo_escola = 2 THEN 'EMEI'::text
WHEN ue.tipo_escola = 3 THEN 'EMEFM'::text
WHEN ue.tipo_escola = 4 THEN 'EMEBS'::text
WHEN ue.tipo_escola = 10 THEN 'CEI DIRET'::text
WHEN ue.tipo_escola = 11 THEN 'CEI INDIR'::text
WHEN ue.tipo_escola = 12 THEN 'CR.P.CONV'::text
WHEN ue.tipo_escola = 13 THEN 'CIEJA'::text
WHEN ue.tipo_escola = 14 THEN 'CCI/CIPS'::text
WHEN ue.tipo_escola = 15 THEN 'ESC.PART.'::text
WHEN ue.tipo_escola = 16 THEN 'CEU EMEF'::text
WHEN ue.tipo_escola = 17 THEN 'CEU EMEI'::text
WHEN ue.tipo_escola = 18 THEN 'CEU CEI'::text
WHEN ue.tipo_escola = 19 THEN 'CEU'::text
WHEN ue.tipo_escola = 22 THEN 'MOVA'::text
WHEN ue.tipo_escola = 23 THEN 'CMCT'::text
WHEN ue.tipo_escola = 25 THEN 'E TEC'::text
WHEN ue.tipo_escola = 26 THEN 'ESP CONV'::text
WHEN ue.tipo_escola = 27 THEN 'CEU AT COMPL'::text
WHEN ue.tipo_escola = 29 THEN 'CCA'::text
WHEN ue.tipo_escola = 28 THEN 'CEMEI'::text
WHEN ue.tipo_escola = 30 THEN 'CECI'::text
WHEN ue.tipo_escola = 31 THEN 'CEU CEMEI'::text
ELSE NULL::text
END || ' '::text) || ue.nome::text AS ue_nome,
t.ano AS turma_ano_escolar,
CASE
WHEN t.ano::text <> 'S'::text THEN (t.ano::text || '° ano'::text)::character varying
ELSE t.ano
END AS turma_ano_escolar_descricao,
t.codigo AS turma_codigo,
t.nome AS turma_descricao,
a.ra AS aluno_codigo_eol,
CASE
WHEN a.nome_social IS NOT NULL THEN a.nome_social
ELSE a.nome
END AS aluno_nome,
a.sexo AS aluno_sexo,
a.data_nascimento AS aluno_data_nascimento,
CASE
WHEN p.disciplina IS NULL OR p.multidisciplinar THEN 'Multidisciplinar'::character varying
ELSE p.disciplina
END AS prova_componente,
CASE
WHEN p.possui_bib THEN ca.caderno
ELSE ''::character varying
END AS prova_caderno,
p.total_itens AS prova_quantidade_questoes,
palu.criado_em AS prova_data_inicio,
palu.finalizado_em AS prova_data_entregue,
CASE
WHEN palu.frequencia = 0 THEN 'N'::text
WHEN palu.frequencia = 1 THEN 'P'::text
WHEN palu.frequencia = 2 THEN 'A'::text
WHEN palu.frequencia = 3 THEN 'R'::text
ELSE 'N'::text
END AS aluno_frequencia
FROM aluno a
JOIN v_turmas_alunos vta ON a.id = vta.aluno_id
JOIN turma t ON t.modalidade_codigo = vta.modalidade_codigo AND t.ano::text = vta.ano::text AND t.ano_letivo = vta.ano_letivo AND t.id = vta.turma_id
JOIN ue ON t.ue_id = ue.id
JOIN dre ON ue.dre_id = dre.id
JOIN prova_ano pa ON t.ano::text = pa.ano::text
JOIN prova p ON pa.prova_id = p.id AND t.modalidade_codigo = p.modalidade AND t.ano_letivo::double precision = date_part('year'::text, p.inicio)
LEFT JOIN prova_aluno palu ON p.id = palu.prova_id AND a.ra = palu.aluno_ra AND (palu.status = ANY (ARRAY[2, 5])) AND palu.finalizado_em IS NOT NULL
LEFT JOIN LATERAL f_caderno_aluno_prova(p.prova_legado_id) ca(id, aluno_id, caderno, prova_id) ON p.id = ca.prova_id AND a.id = ca.aluno_id;

Loading

0 comments on commit 003b830

Please sign in to comment.