Projeto

Geral

Perfil

EAP #895

EAP #1771: SIGAA - Implantação Total

Módulo Ensino Fundamental

Adicionado por BRUNO CHAVES DE FREITAS quase 8 anos atrás. Atualizado aproximadamente 7 anos atrás.

Situação:
Concluída
Prioridade:
4. Normal
Início:
10/09/2018
Data prevista:
11/09/2018
% Terminado:

100%

Tempo estimado:
(Total: 4.00 h)

Descrição

Esta tarefa reúne as ações referentes à implantação dos módulo Fundamental do SIGAA no Colégio de Aplicação/UFPE.

temp_orientacao_educacional.sql (7,84 KB) temp_orientacao_educacional.sql BRUNO CHAVES DE FREITAS, 18/02/2019 10:24
temp_orientacao_educacional_medio.sql (7,98 KB) temp_orientacao_educacional_medio.sql BRUNO CHAVES DE FREITAS, 18/02/2019 11:38
script_remoção_alunos_replicados.sql (6,01 KB) script_remoção_alunos_replicados.sql BRUNO CHAVES DE FREITAS, 25/02/2019 09:37

Subtarefas

IBL #1309: Acesso de docente associa o mesmo ao nível Técnico, e não localiza calendário acadêmico do CAP (Fundamental/Médio)ConcluídaBRUNO CHAVES DE FREITAS

IBL #1337: Trocar as imagens usadas na emissão de relatóriosConcluída

IBL #1354: Habilitar o Formulário de Evolução do Discente para o Nível MédioConcluída


Tarefas relacionadas

relacionado a BUG #1338: Correção - Menu Plano de CursoNova2018-09-18

relacionado a TP #848: Módulo Educação BásicaConcluída2018-07-172018-10-19

Histórico

#1 Atualizado por MARLOS GONDIM RIBEIRO BATISTAquase 8 anos

  • % Terminado alterado de 0 para 30
  • Situação alterado de Nova para Em andamento
  • Data prevista ajustado para 31/07/2018
  • Descrição atualizado(a) (diff)
  • Título alterado de Implantar Módulos Ensino Fundamental e Médio para Implantar Módulo Ensino Fundamental

#2 Atualizado por MARLOS GONDIM RIBEIRO BATISTAquase 8 anos

  • copiada EAP #1013: Módulo Ensino Médio adicionado

#3 Atualizado por MARLOS GONDIM RIBEIRO BATISTAquase 8 anos

  • copiada excluído (EAP #1013: Módulo Ensino Médio)

#4 Atualizado por MARLOS GONDIM RIBEIRO BATISTAquase 8 anos

  • BuzzValue ajustado para 0
  • Tipo alterado de TP para IBL

#5 Atualizado por BRUNO CHAVES DE FREITASquase 8 anos

A modelagem AS-IS já foi feita pela PROCIT.

Disponível em:
https://www.ufpe.br/procit/escritorio-de-processos/portfolio/ensino-basico

#6 Atualizado por MARLOS GONDIM RIBEIRO BATISTAquase 8 anos

  • % Terminado alterado de 30 para 50

Configurando o Módulo para o CAp junto com a SINFO.
Modelando a modelagem TO-BE para validação (PROCIT/CAp).
Analisando dados enviados pelo CAp para elaborar proposta de importação.

#7 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

Acessei a lista de docentes do cap (https://www.ufpe.br/cap/corpo-docente), escolhi o docente “Alfredo Matos Moura Junior” para testar. Acessei os dados do servidor em “SIGAdmin / Suporte Técnico / Consultar Servidores”, e em seguida fiz o primeiro acesso no SIGAA, autorizando o acesso em seguida com o usuário admin (Usuários /Permissão / Autorizar Usuários). O login/senha que criei foi “alfredo.matos/secret”.
Tentei logar com o usuário, houve erro de calendário acadêmico não encontrado, mesmo já existindo um calendário acadêmico para o COLÉGIO DE APLICAÇÃO / Nível Fundamental. Debugando percebi que o usuário estava sendo associado ao nível TÉCNICO.
Chamado filho aberto com detalhes.

#8 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

Finalizei a análise do processo de negócio Avaliar Discente, propus o TOBE e já fiz as customizações/ajustes de código necessárias no SIGAA, branch ufpe_sprint06. Inclusive a principal customização identificada na fase de análise de aderência, para permitir o Formulário de Evolução da Criança para o nível médio, também foi feita e está funcional.

O report da análise está na pasta SIGAA/Análise de Processos de Negócio do Google Drive. Após validação será colocado no NTIDocs.

#9 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

O processo de negócio Avaliar Professores, como já discutido na análise de aderência, não tem suporte do SIGAA, em virtude da dinamicidade prática (formação de grupos de alunos para avaliar professores, revisão das análises por outros grupos, acompanhamento do conselho de classe, feedback do professor). A avaliação Docente disponível pelo SIGAA se assemelha à da UFPE no nível graduação: formulário periódico de preenchimento individual.

Em virtude disso, não foi feita proposta TO-BE para este processo, que continuará ocorrendo sem apoio de sistema.

#10 Atualizado por HIALLY RODRIGUES DE SAmais de 7 anos

Foi concluído os seguintes processos TO-BE e Roteiros de Validação:
-Matricular Aluno Veterano
-Organizar Horário e Oferta de Turma
-Expedir Documentos

O processo de Organizar Horário e Oferta de Turma já foi validado com os clientes.

#11 Atualizado por HIALLY RODRIGUES DE SAmais de 7 anos

Corrigido um bug que impedia a matrícula na 6 série do Fundamental. (NullPointer)

#12 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

O SIGAA foi colocado em produção. Implantadas permissões para Lávinia e Madson: Gestor Fundamental e Gestor Médio.

#13 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

Foi verificado após inclusão em produção que faltava a disciplina LINGUA ESTRANGEIRA em todas as séries do Fundamental.

Como já havia matrículas realizadas, foi preciso rodar o script abaixo:

@
--Atualiza sequence hibernate_sequence
do $$
declare maximo_id numeric;
begin
select max(id_curriculo_medio_componente) from medio.curriculo_medio_componente into maximo_id;
execute 'alter SEQUENCE hibernate_sequence RESTART with '|| maximo_id+100;
end;
$$ language plpgsql;

--Atualiza sequence ensino.componente_seq
do $$
declare maximo_id numeric;
begin
select max(id_disciplina) from ensino.componente_curricular into maximo_id;
execute 'alter SEQUENCE ensino.componente_seq RESTART with '|| maximo_id + 100;
end;
$$ language plpgsql;

--Atualiza código da IES para 74-UFPE
update ensino.componente_curricular set id_ies=74;

--CADASTRAR ANTES A LINGUA ESTRANGEIRA VIA APLICAÇÃO e atribuir às turmas
do $$
declare
turma_serieX record;
codigoTurmaLE numeric;
idLinguaEstrangeira numeric;
discenteX record;
idMatriculaComponente numeric;
idMatriculaDiscenteSerie numeric;
codigoDisciplina text;
idSerie numeric;
idCurriculoMedio numeric;
begin

---====INFORME OS PARÂMETROS PARA CADA SÉRIE AQUI, NÃO MEXER APÓS ESTE TRECHO
--select 'LE161' into codigoDisciplina;
--select 1 into idSerie; --1 para 6a, 2 7a, 3 8a, 4 9a
--select 16 into idCurriculoMedio; --16 para 6a, 17 para 7a, 18 para 8a, 19 para 9a.
--select 'LE171' into codigoDisciplina;
--select 2 into idSerie; --1 para 6a, 2 7a, 3 8a, 4 9a
--select 17 into idCurriculoMedio; --16 para 6a, 17 para 7a, 18 para 8a, 19 para 9a.
--select 'LE181' into codigoDisciplina;
--select 3 into idSerie; --1 para 6a, 2 7a, 3 8a, 4 9a
--select 18 into idCurriculoMedio; --16 para 6a, 17 para 7a, 18 para 8a, 19 para 9a.
select 'LE191' into codigoDisciplina;
select 4 into idSerie; --1 para 6a, 2 7a, 3 8a, 4 9a
select 19 into idCurriculoMedio; --16 para 6a, 17 para 7a, 18 para 8a, 19 para 9a.
--pegando código da disciplina cadastrada pela app
select id_disciplina into idLinguaEstrangeira from ensino.componente_curricular where codigo=codigoDisciplina;
--Iterando em cada turma da série em questão
for turma_serieX in (select * from medio.turma_serie where ano=2019 and id_serie=idSerie and ativo=true)
loop
raise notice 'Iterando para cadastrar...';
raise notice 'turma_serie = %', turma_serieX.id_turma_serie;
select tsa.id_turma into codigoTurmaLE from ensino.turma t inner join ensino.componente_curricular cc on t.id_disciplina=cc.id_disciplina
inner join medio.turma_serie_ano tsa on t.id_turma=tsa.id_turma where tsa.id_turma_serie=turma_serieX.id_turma_serie and cc.codigo=codigoDisciplina;
--Discentes matriculados da turma que está iterando
for discenteX in
(select distinct id_discente from ensino.matricula_componente where id_turma in
(select id_turma from medio.turma_serie_ano where id_turma_serie=turma_serieX.id_turma_serie and ativo=true) and id_situacao_matricula=2)
loop
select nextval('ensino.matricula_componente_seq') into idMatriculaComponente;
--Inserindo matricula em LE para cada discente
INSERT INTO ensino.matricula_componente
(id_situacao_matricula, id_discente, media_final,
numero_faltas, id_matricula_componente, codmerg,
id_turma, id_recuperacao, apto,
codmergpa, id_registro_atividade, id_registro_entrada,
data_cadastro, id_conceito_nota_apagar, foiretificada,
codmergpapos, ano, periodo,
id_componente_curricular, id_restricoes, tipo_integralizacao,
id_componente_detalhes, recuperacao, conceito_apagar,
mes, mes_fim, ano_fim,
processamento_rematricula, observacao, codmergppgeec,
id_usuario_consolidacao, data_consolidacao, rematricula,
ano_inicio, id_serie, porcentagem_frequencia,
consolidacao_sem_notas, dependencia, consolidado_pendente_divulgacao,
nota_minima, em_regime_observacao, prioritario)
VALUES(2, discenteX.id_discente, NULL,
NULL, idMatriculaComponente, NULL,
codigoTurmaLE, NULL, NULL,
NULL, NULL, null,
now(), NULL, NULL,
NULL, 2019, 0,
idLinguaEstrangeira, NULL, NULL,
(select id_componente_detalhes from ENSINO.componente_curricular_detalhes cd where cd.id_componente=idLinguaEstrangeira), NULL, NULL,
1, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
2019, turma_serieX.id_serie, NULL,
false, NULL, NULL,
NULL, false, NULL);
raise notice 'cadastro matricula_componente para o discente %', discenteX.id_discente;
if (select count(*) from medio.matricula_discente_serie where id_discente=discenteX.id_discente and id_turma_serie = turma_serieX.id_turma_serie) = 0
then
select nextval('hibernate_sequence') into idMatriculaDiscenteSerie;
INSERT INTO medio.matricula_discente_serie
(id_matricula_discente_serie, id_discente, id_situacao_matricula_serie,
situacao_final, id_turma_serie, id_curriculo_medio,
dependencia, id_registro_entrada, data_cadastro,
num_chamada, compulsoria, id_escola,
media_final, frequencia_anual)
VALUES(idMatriculaDiscenteSerie, discenteX.id_discente, 1,
NULL, turma_serieX.id_turma_serie, idCurriculoMedio,
false, null, now(),
NULL, false, NULL,
NULL, NULL);
raise notice 'Cadastrado matricula_discente_serie para o discente %', discenteX.id_discente;
INSERT INTO medio.matricula_componente_serie
(id_matricula_componente_serie, id_matricula_discente_serie, id_matricula_componente,
ativo, data_cadastro, id_registro_entrada,
dependencia)
VALUES((select nextval('hibernate_sequence')), idMatriculaDiscenteSerie, idMatriculaComponente,
true, now(), null,
false);
raise notice 'Cadastrado medio.matricula_componente_serie para o discente %', discenteX.id_discente;
else 
select id_matricula_discente_serie into idMatriculaDiscenteSerie from medio.matricula_discente_serie 
where id_discente=discenteX.id_discente and id_turma_serie = turma_serieX.id_turma_serie;
INSERT INTO medio.matricula_componente_serie
(id_matricula_componente_serie, id_matricula_discente_serie, id_matricula_componente,
ativo, data_cadastro, id_registro_entrada,
dependencia)
VALUES((select nextval('hibernate_sequence')), idMatriculaDiscenteSerie, idMatriculaComponente,
true, now(), null,
false);
raise notice 'Cadastrado medio.matricula_componente_serie para o discente %', discenteX.id_discente;
end if;
end loop;
end loop;
end;
$$ language plpgsql;

@

#14 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

Executado script em dev para acrescentar Orientação Educacional a pedido do CAP. Em anexo.
Aguardando review para rodar em prod.

#15 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

Também foi executado o script para Orientação Educacional no nível médio, pois Hially detectou a falta na revisão da tarefa.

Script específico do médio anexado.

#16 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

Finalizando script para remover duplicidades. Marise passou uma lista de vinculos a excluir (que ela replicou), confrontei com a saída de um script e detectamos dois erros manuais dela.

Falta acertar dependencia alteracao_pessoa.

do $$
declare
vinculoAExcluir record;
declare qtdPessoasParaODiscente numeric;
declare pessoaResponsavel record;
begin

    for vinculoAExcluir in
        (
        select d.id_discente,d.matricula,p.id_pessoa, p.nome from 
        medio.discente_medio dm 
        --inner join medio.matricula_discente_serie mds on dm.id_discente = mds.id_discente
        inner join public.discente d on dm.id_discente=d.id_discente
        inner join comum.pessoa p on d.id_pessoa = p.id_pessoa
        where dm.id_discente not in
            (
                --matriculas associadas a turmas ativas de 2019
                select mds.id_discente from 
                medio.matricula_discente_serie mds inner join medio.turma_serie ts on mds.id_turma_serie=ts.id_turma_serie
                inner join medio.situacao_matricula_serie sms on mds.id_situacao_matricula_serie=sms.id_situacao_matricula_serie
                where ts.id_turma_serie in
                    (
                        --turmas ativas de 2019
                        select distinct ts.id_turma_serie 
                        from 
                        medio.turma_serie ts 
                        inner join medio.turma_serie_ano tsa on ts.id_turma_serie=tsa.id_turma_serie
                        inner join ensino.turma t on tsa.id_turma=t.id_turma 
                        inner join ensino.situacao_turma st on t.id_situacao_turma=st.id_situacao_turma
                        where ts.ativo=true and tsa.ativo=true and st.descricao in ('ABERTA', 'A DEFINIR DOCENTE','CONSOLIDADA')
                        and ts.ano=2019    
                      )
                and sms.descricao in ('MATRICULADO', 'APROVADO', 'TRANCADO','APROVADO EM DEPENDÊNCIA')
            )
            and trim(p.nome) in
            ( 
                select nome from
                    (
                    select
                    trim(p.nome) as nome,
                    count(*) as qtd
                        from
                            comum.pessoa p
                        inner join public.discente d on
                            p.id_pessoa = d.id_pessoa
                        group by
                            trim(p.nome)
                        having
                            count(*)>1
                        order by
                            trim(p.nome) asc
                            ) as nome
            )

        order by p.nome asc
    )
    loop
    raise notice 'Analisando % % %', vinculoAExcluir.id_discente, vinculoAExcluir.matricula, vinculoAExcluir.nome;
    --deleta medio.matricula_componente_serie
    delete from  medio.matricula_componente_serie where id_matricula_discente_serie in 
            (select id_matricula_discente_serie from medio.matricula_discente_serie mds where mds.id_discente=vinculoAExcluir.id_discente);
        raise notice '   apagados registros de medio.matricula_componente_serie';
    --deleta ensino.matricula_turma
    delete from ensino.matricula_componente where id_discente=vinculoAExcluir.id_discente;
        raise notice '   apagados registros de ensino.matricula_componente';
    --deleta medio.matricula_discente_serie
    delete from medio.matricula_discente_serie where  id_discente = vinculoAExcluir.id_discente;
        raise notice '   apagados registros de medio.matricula_discente_serie';
    --talvez deletar registro_emissao_historico
    delete from medio.registro_emissao_historico where id_discente= vinculoAExcluir.id_discente;
        raise notice '   apagados registros de medio.registro_emissao_historico';
        raise notice '   responsáveis:';
    --apagando infantil.responsavel_discente
    for pessoaResponsavel in (select rd.id_responsavel_discente,rd.id_pessoa, rd.id_discente from infantil.responsavel_discente rd where rd.id_discente=vinculoAExcluir.id_discente)
        loop
            -- a pessoa associada ao responsavel está associada a outro responsavel de um vinculo distinto?
            -- caso positivo, não apaga
            if (select count(*) from comum.pessoa p 
                inner join infantil.responsavel_discente rd on p.id_pessoa = rd.id_pessoa 
                where rd.id_discente != vinculoAExcluir.id_discente
                and rd.id_pessoa= pessoaResponsavel.id_pessoa)=0 
                then
                    delete from infantil.responsavel_discente where id_responsavel_discente=pessoaResponsavel.id_responsavel_discente;
                    raise notice '      excluído responsavel %', pessoaResponsavel.id_responsavel_discente;
                    delete from comum.pessoa where id_pessoa=pessoaResponsavel.id_pessoa;
                    raise notice '      excluída pessoa %', pessoaResponsavel.id_pessoa;
                else 
                    delete from infantil.responsavel_discente where id_responsavel_discente=pessoaResponsavel.id_responsavel_discente;
                    raise notice '      excluído responsavel %', pessoaResponsavel.id_responsavel_discente;
                    raise notice '      não foi excluída a pessoa porque tinha associação com outro responsável de outro vínculo.';

                end if;
        end loop;

    --deleta medio.discente_medio
    delete from medio.discente_medio where id_discente = vinculoAExcluir.id_discente;
        raise notice '   apagados registros de medio.discente_medio';
    --deleta public.discente
    delete from public.discente where id_discente = vinculoAExcluir.id_discente;
        raise notice '   apagados registros de public.discente';
    --deleta comum.pessoa SE houver outra pessoa com mesmo nome (já associada ao vínculo certo)
    select qtd into qtdPessoasParaODiscente from 
        (select 
        trim(p.nome),
        count(*) as qtd
        from
            comum.pessoa p
        inner join public.discente d on
            p.id_pessoa = d.id_pessoa
            where trim(p.nome) = trim(vinculoAExcluir.nome) 
        group by
            trim(p.nome)
        having
            count(*)>1
        order by
            trim(p.nome) asc) as qtdVinculos;

    if qtdPessoasParaODiscente>1 then
        delete from comum.pessoa where id_pessoa=vinculoAExcluir.id_pessoa;
        raise notice '   Registro de pessoa duplicado de % excluído.', vinculoAExcluir.nome;
        else 
        raise notice '   Só havia 1 registro de pessoa para %, não foi excluído.', vinculoAExcluir.nome;
    end if;

    --- DANDO PAU APÓS ALGUNS DISCENTES, DEPENDÊNCIA NA TABELA ALTERACAO_PESSOA.
    end loop;

ALTER TABLE medio.discente_medio ADD CONSTRAINT discente_infantil_id_responsavel_ufrn_fkey FOREIGN KEY (id_responsavel_ufrn) REFERENCES infantil.responsavel_discente(id_responsavel_discente);
ALTER TABLE medio.discente_medio ADD CONSTRAINT discente_infantil_id_outro_responsavel_fkey FOREIGN KEY (id_outro_responsavel) REFERENCES infantil.responsavel_discente(id_responsavel_discente);

end;
$$ language plpgsql;

#17 Atualizado por BRUNO CHAVES DE FREITASmais de 7 anos

Script finalizado e ajustado após testes iniciais em ambiente de desenvolvimento. Aguardando segundo revisor para executar em produção.

#18 Atualizado por MARLOS GONDIM RIBEIRO BATISTAaproximadamente 7 anos

  • relacionado a BUG #1338: Correção - Menu Plano de Curso adicionado

#19 Atualizado por MARLOS GONDIM RIBEIRO BATISTAaproximadamente 7 anos

  • Situação alterado de Em andamento para Concluída

#20 Atualizado por MARLOS GONDIM RIBEIRO BATISTAaproximadamente 7 anos

  • Tarefa pai alterado de #848 para #1771

#21 Atualizado por MARLOS GONDIM RIBEIRO BATISTAaproximadamente 7 anos

  • BuzzValue excluído (0)
  • Título alterado de Implantar Módulo Ensino Fundamental para Módulo Ensino Fundamental
  • Tipo alterado de IBL para EAP

#22 Atualizado por MARLOS GONDIM RIBEIRO BATISTAaproximadamente 7 anos

  • relacionado a TP #848: Módulo Educação Básica adicionado

Exportar para Atom PDF