Processamento de Matrículas

O processamento da matrícula é uma atividade realizada antes do início de todos os semestres, após o período de matrículas; e depois do início dos semestres, após o período das rematrículas. Ele consiste em verificar, para todas as turmas oferecidas em um período letivo, quais alunos que ficarão com as vagas disponíveis e quais serão indeferidos. O processamento de matrícula pode ser realizado por usuários que possuam o papel ADMINISTRADOR SIGAA, embora normalmente seja realizado apenas pela própria Superintendência de Informática.

Para maiores informações sobre TURMAS e MATRÍCULAS e seus status vide o Documento de Negócio da Graduação.

Existem três tipos de processamento de matrículas, sendo eles:

  • Turmas Regulares de Graduação
  • Turmas de Férias de Graduação
  • Turmas de Graduação à Distância
  • Turmas de Ensino Técnico de Música

Para cada uma dessas possibilidades, é possível definir se será realizado o processamento da MATRÍCULA ou da REMATRÍCULA.

O processamento de matrículas ocorre em quatro passos, descritos a seguir:

  1. Pré-processamento de Matrícula
  2. Processamento de Matrícula
  3. Pós-Processamento de Matrícula
  4. Geração de relatórios com os resultados

Esses passos são realizados automaticamente pelo sistema, sem a intervenção do usuário.

Pré-Processamento da Matrícula

O pré-processamento de matrícula consiste em preparar os dados do sistema para a realização do processamento das matrículas. É formado por três passos: a geração de matrículas em espera, o cálculo de possíveis formandos e o cancelamento de alunos com vínculos anteriores.

  • A geração de matrículas em espera tem como objetivo pegar todas as solicitações de matrículas válidas (i.e. que não foram canceladas) e criar uma matrícula na turma correspondente com o status EM ESPERA.
  • O cálculo de possíveis formandos irá realizar os cálculos de todos os discentes que realizaram matrícula e verificar quais deles serão formandos, caso consigam deferimento nas matrículas que solicitaram. Serão calculados nessa etapa os tipos de integralização de todas as matrículas em espera.
  • O cancelamento de alunos com vínculos anteriores tem como objetivo identificar entre os alunos ingressantes quais já possuiam vínculos anteriores com a instituição. Como não é possível possuir mais de um vínculo ao mesmo tempo, esses alunos terão o vínculo mais antigo cancelado. Será enviado para ele um e-mail informando o cancelamento. Existe ainda a possibilidade de gerar um relatório com os alunos que poderão ter o vínculo anterior cancelado para conferência.

Processamento da Matrícula

Após o pré-processamento, é realizado o processamento de matrícula, que tem como objetivo verificar, para cada turma, quais dos alunos que solicitaram vaga irão obtê-la e quais serão indeferidos. Para isso, realizam-se os seguintes passos:

  • Deve-se pegar todas as turmas do período letivo informado que forem regulares e estiverem com os status ABERTA ou A DEFINIR DOCENTE.
  • Para cada turma, deve-se pegar todas as suas matrículas em espera, separá-las por matriz curricular de acordo com a reserva de vagas realizada para a turma, e colocá-las em ordem de acordo com os níveis de prioridade definidos pelo regulamento dos cursos de graduação (para maiores informações veja a seção “Regras de Negócio”).
  • Calcula-se a quantidade de vagas restantes na turma e em seguida, para cada matriz das reservas de vagas, altera-se o status das primeiras matrículas dentro do número da reserva para MATRICULADO; os alunos que sobrarem ficarão competindo com os outros alunos que não estão no grupo das reservas.
  • Depois do processamento das matrizes das reservas, se sobrarem vagas, pega-se o restante dos alunos e coloca-os em ordem novamente.
  • Os primeiros dentro do número de vagas restantes ficarão com o status MATRICULADO. O restante (se houver) ficará com o status INDEFERIDO.

Pós-Processamento da Matrícula

Após o processamento de matrícula, é necessário realizar o pós-processamento de matrículas. Ele tem como objetivo verificar se existem discentes que conseguiram vagas em turmas em situações em que não deveriam conseguir. As situações são as seguintes:

  • alunos que foram deferidos em uma turma mas foram indeferidos em um co-requisito;
  • alunos que foram deferidos em uma turma de um bloco, mas indeferidos em outra turma do mesmo bloco.
  • turmas com a quantidade de alunos matriculados, que não se adequam ao limites de alunos matriculados para o seu tipo de turma

Caso essas situações ocorram, o aluno deve ser indeferido tanto na turma quanto no co-requisito e em todas as turmas do bloco. Nesses casos, as matrículas ficarão com o status indeferido, e haverá uma observação no resultado do processamento da matrícula informando o motivo do indeferimento. Caso a quantidade de alunos matriculados na turma esteja fora da faixa estipulada, o tipo da turma é alterado para o correto.

Por fim, é realizada a geração de relatórios com os resultados do processamento de matrículas. O relatório de processamento de matrícula consiste em um relatório que mostra, para cada turma:

  • as vagas existentes
  • as reservas de vagas
  • os alunos matriculados
  • os alunos indeferidos.

Na rematrícula, são mostradas ainda:

  • a quantidade de desistências
  • as desistências
  • as vagas restantes para a rematrícula.

Exemplos de relatórios podem ser encontrados a seguir:

Figura 1: Relatório de Processamento da Matrícula

Figura 2: Relatório de Processamento da Rematrícula

O pré-processamento de matrículas é implementado pelo PreProcessamentoMatriculaMBean. Constantes inteiras no managed bean definem o tipo de pré-processamento que será realizado, sendo elas:

public static final int MATRICULA_ESPERA = 1;
public static final int POSSIVEIS_FORMANDOS = 2;
public static final int CANCELAR_VINCULOS_ANTERIORES = 3;
public static final int RELATORIO_CANCELAMENTO_VINCULOS_ANTERIORES = 4;

Se o tipo MATRICULA_ESPERA ou o tipo POSSIVEIS_FORMANDOS for chamado, o managed bean chamará o ProcessadorPreProcessamentoMatricula. Caso seja utilizado o tipo CANCELAR_VINCULOS_ANTERIORES, o ProcessadorMovimentacaoAluno será chamado. Para o relatório, não há processador, apenas a chamada a um método de um DAO.

O DAO utilizado no pré-processamento de matrícula, bem como o utilizado nas outras operações do processamento de matrícula, é uma classe que implementa a interface ProcessamentoMatriculaDao. A implementação da interface vai depender do modo de processamento escolhido (graduação, EAD, férias, etc.). A associação entre o modo de processamento e a implementação do DAO pode ser encontrada na enum ModoProcessamentoMatricula.

Esse DAO contém todos os métodos necessários para as operações do processamento de matrículas.

Para o pré-processamento de matrículas podemos destacar os seguintes métodos:

// Utilizado para buscar as solicitações que serão transformadas em matrículas
public List<SolicitacaoMatricula> findSolicitacoesMatricula(int ano, int periodo, boolean rematricula);
 
// Busca os alunos que entrarão no cálculo de possíveis formandos.
public List<Integer> findAlunosPreProcessamento(int ano, int periodo, boolean rematricula);
 
// Lista os alunos que possuem mais de um vínculo com a instituição
public List<Integer> buscarAlunosComMaisDeUmVinculo();

O processamento de matrícula é implementado na classe ProcessamentoMatriculaMBean que, por sua vez, chama o ProcessadorProcessamentoMatricula. O managed bean irá buscar todas as turmas que precisam ser processadas e guardá-las em uma lista.

Para isso, são utilizados os seguintes métodos do DAO:

// Busca a quantidade de turmas que serão processadas
public int findCountTurmasProcessar(int ano, int periodo, boolean rematricula);
 
// Busca as informações de cada turma que será processada
public List<Turma> findTurmasProcessar(int ano, int periodo, boolean rematricula);

Com as informações da turma em mãos, o managed bean irá disparar um conjunto de threads que irão consumir as turmas da lista criada anteriormente. Cada turma será passada ao ProcessadorProcessamentoMatricula, que irá deixar os alunos na ordem correta definida pelo regulamento e atualizar os status do aluno para MATRICULADO ou INDEFERIDO de acordo com a sua situação. Para isso são utilizados os seguintes métodos do DAO:

// Verifica as informações de vagas e de reservas para a turma
public Map<MatrizCurricular, ReservaCurso> findInformacoesVagasTurma(int id);
 
// Busca a lista de alunos que solicitaram matrícula em ordem e agrupados por matriz
public Map<Integer, List<MatriculaEmProcessamento>> findMatriculasEmOrdemParaProcessamento(Turma turma, Map<MatrizCurricular, ReservaCurso> vagasReservadas);
 
// Registra o processamento da turma, com informações sobre como o processamento foi realizado. Consultado posteriormente para geração do resultado.
public void registrarProcessamentoTurma(int ano, int periodo, boolean rematricula, Turma turma, List<MatriculaEmProcessamento> resultadoProcessamento);

Por fim, o pós-processamento de matrículas também é implementado na classe ProcessamentoMatriculaMBean, mas é diferenciado do processamento por constantes que definem o que será realizado, assim como acontece no pré-processamento de matrículas. As constantes são as seguintes:

public static final int PROCESSAMENTO = 1;	
public static final int POS_PROCESSAMENTO_BLOCOS = 2;	
public static final int POS_PROCESSAMENTO_COREQUISITOS = 3;	
public static final int POS_PROCESSAMENTO_ENSINO_INDIVIDUAL= 4;
public static final int POS_PROCESSAMENTO_ATIVAR_ALUNOS_CADASTRADOS = 5;

Ao selecionar uma das opções de pós-processamento, serão buscados os alunos que se enquadram em cada uma das opções e chamado o ProcessadorPosProcessamentoMatricula para realizar o pós-processamento.

Os seguintes métodos do DAO são importantes nessa fase:

// Busca a lista de discentes que estão matriculados em disciplinas de bloco
public List<Integer> findDiscentesMatriculadosEmBlocos(int ano, int periodo, boolean rematricula);
 
// Busca a lista de discentes que estão matriculados em disciplinas que possuem co-requisitos
public List<Integer> findDiscentesMatriculadosEmCoRequisitos(int ano, int periodo, boolean rematricula);
 
// Busca a lista de matrículas em disciplinas de bloco de um discente
public List<MatriculaComponente> findMatriculasEmBlocoDiscente(
  		Integer discente, int ano, int periodo, boolean rematricula);
 
// Busca a lista de matrículas em disciplinas com co-requisito de um discente
public List<MatriculaComponente> findMatriculasEmCoRequisitoDiscente(
  		Integer discente, int ano, int periodo, boolean b);
 
// Busca a lista de alunos que estão com status CADASTRADO e possuem matrícula, logo devem ter o status mudado para ATIVO.
public List<Discente> buscarAlunosCadastradosParaAtivar(int ano, int periodo) {

Pré-processamento

SIGAA → Administração do Sistema → Administração → Processamento de Matrícula → Pré-Processamento.

Em ordem, o pré-processamento deve seguir os seguintes passos:

  1. Geração de matrículas em espera
  2. Cálculo de possíveis formandos
  3. Cancelar vínculos anteriores

Observações:

  • Para EAD, é necessária apenas a geração de matrículas em espera.
  • O cálculo de possíveis formandos é necessário apenas para graduação presencial.

Verificações a se realizar depois:

  • Verificar se não existem solicitações de matrícula sem o id_matricula_gerada correspondente.
  • Realizar os cálculos de todos os alunos para garantir que sua CH integralizada e índices acadêmicos estão atualizados antes do processamento da matrícula.

Processamento

Entrar no caso de uso de Processamento de Matrícula selecionando o modo de processamento e o tipo “Processar Matrículas”. Informar ano-período e se é processamento de rematrícula ou não.

Observações:

  • O processamento de matrículas não é necessário para EAD.
  • Lembrar de realizar os cálculos dos alunos antes de processar.

Verificações a se realizar depois:

  • Verificar se não existem matrículas em espera no banco de dados para a entrada informada.
  • Às vezes pode ocorrer a existência de matrículas em espera, mas somente quando a turma tiver sido cancelada, ou o aluno estiver com o status diferente de CADASTRADO, ATIVO ou FORMANDO. Nesses casos, a matrícula não deveria ser mesmo processada, então basta cancelá-la.
  • Verificar se não existem turmas com mais matrículas que o número de vagas.

Pós-processamento

Em ordem, o pós-processamento deve seguir os seguintes passos:

  1. Pós-processamento de blocos
  2. Pós-processamento de co-requisitos
  3. Ativar alunos cadastrados

Verificações a se realizar depois:

  • Verificar se existem alunos com o status CADASTRADO após o pós-processamento.

Resultados

Após a realização do processamento de matrículas, é necessário publicar o resultado. Para isso, é necessário acessar o caso de uso de Resultado do Processamento de Matrículas, informar o ano-período, se é para turmas regulares ou de férias e se é para rematrícula ou não.

Os arquivos gerados ficarão armazenados no diretório indicado pelo parâmetro 2_10100_3 (CAMINHO_COMPLETO_RESULTADO_PROCESSAMENTO).

Observações:

  • Os relatórios de processamento de matrículas só estão disponíveis para turmas de graduação presencial. EAD e ensino técnico de Música não possuem relatórios.

Na UFRN, as regras que definem quem tem prioridade no processamento de matrícula estão no artigo 227 da RESOLUÇÃO Nº 171/2013-CONSEPE, de 5 de novembro de 2013.

  • RN01 - No pós processamento o limite máximo de alunos matriculados para turmas de Ensino Individual será controlado pelo parâmetro QTD_MAX_DISCENTES_TURMA_ENSINO_INDIVIDUAL.
  • RN02 - O processamento da turma obedece as prioridades definidas pelo Resolução no 171/2013-CONSEPE, abaixo transcritas.

Na UFRN, temos o Regime de Observação de Rendimento Acadêmico (R.O.D.A.), que é uma situação a qual está descrita no intervalo definido entre os Art. 314 até o 318.

  • RN03 - Após o processamento de discentes, o discente é colocado no regime por um período regular e um de férias imediatamente posterior no caso (no semestre anterior):
    • Insucesso (trancamento e/ou reprovação) pela segunda vez ou mais, consecutiva ou não, em um mesmo componente curricular obrigatório ou seus equivalentes;
    • Insucesso em metade ou mais da carga horária matriculada, caracterizado pelo IECH (Índice de Eficiência em Carga Horária) igual ou inferior a 0,5 (cinco décimos) no período letivo; ou ainda
    • Integralização de metade ou menos da carga horária esperada em função do número de períodos letivos cursados, caracterizada pelo IEPL (Índice de Eficiência em Períodos Letivos) acumulado igual ou inferior a 0,5 (cinco décimos), não sendo aplicado este critério até a metade da duração padrão do curso.

CAPÍTULO VI / Resolução no 171/2013-CONSEPE, de 5 de novembro de 2013

14.6. DO PREENCHIMENTO DE VAGAS NAS TURMAS

Art. 227. O preenchimento das vagas nas turmas oferecidas nos períodos letivos regulares, durante a matrícula e no ajuste da mesma, é efetuado considerando inicialmente apenas as vagas reservadas e os estudantes do curso/matriz curricular objeto da reserva, e em seguida todas as vagas e estudantes restantes, obedecendo em cada um desses dois momentos a seguinte ordem de prioridade:

I – Estudante nivelado: corresponde àquele cujo componente curricular objeto da matrícula é, na estrutura curricular à qual está vinculado, do nível correspondente ao número de períodos letivos do estudante. Também é incluído neste grupo de prioridades o estudante que está no período letivo regular imediatamente seguinte ao seu retorno de mobilidade em outra instituição, em todos os componentes curriculares nos quais esteja pleiteando vaga.

II – Estudante concluinte: corresponde àquele não nivelado, mas cuja matrícula no conjunto de componentes curriculares solicitados o torna apto a concluir o curso no período letivo da matrícula.

III – Estudante em recuperação: corresponde ao estudante não concluinte cujo componente curricular objeto da matrícula é, na estrutura curricular à qual está vinculado, de um nível anterior ao número de períodos letivos do estudante. Também é incluído neste grupo de prioridades o estudante que está solicitando matrícula em um componente curricular que pertence à sua estrutura curricular, mas sem ser vinculado a um nível específico, tais como os componentes curriculares optativos ou complementares.

IV – Estudante adiantando: corresponde ao estudante não concluinte cujo componente curricular objeto da matrícula é, na estrutura curricular à qual está vinculado, de um nível posterior ao número de períodos letivos do estudante.

V – Estudante cursando componente curricular eletivo: corresponde ao estudante não concluinte cujo componente curricular objeto da matrícula não pertence à estrutura curricular à qual está vinculado o estudante, mesmo quando o componente curricular objeto da matrícula é equivalente a outro componente curricular que pertence à estrutura curricular.

§ 1o O número de períodos letivos do estudante, a que fazem referência os Incisos I, III e IV do caput deste artigo, é a soma do perfil inicial com o número de períodos letivos regulares cursados na UFRN, relativos ao programa atual e excluindo-se os períodos letivos em que o programa foi suspenso e aqueles durante os quais o estudante esteve em mobilidade em outra instituição.

§ 2o É garantida a prioridade dos alunos regulares ingressantes sobre os demais estudantes para os componentes curriculares do primeiro nível da estrutura curricular à qual estão vinculados.

§ 3o Em cada nível da ordem de prioridades, têm preferência os estudantes que nunca trancaram ou foram reprovados por falta no componente curricular; em seguida, o IEA é o critério de desempate.

Art. 244. No processamento das matrículas do período letivo especial de férias, a ordem de prioridades do artigo 227 obedece à sequência II, III, I, IV e V.

Parágrafo único. Para efeito de definição da ordem de prioridades em que o estudante se enquadra no processamento das matrículas em turmas de férias, considera-se a situação referente ao período letivo regular que antecede o período letivo especial de férias em questão.

Casos especiais

Existe ainda o processamento de matrícula de turmas de ensino à distância e do ensino técnico. No caso das matrículas do ensino à distância, como não existe limite de vagas, é verificado apenas se o coordenador aprovou ou não a solicitação de matrícula. Se o coordenador tiver aprovado, uma matricula com status MATRICULADO é gerada; caso contrário, a matrícula não é gerada. No caso do ensino técnico de música, o critério para definir a ordem de prioridade dos alunos é o IEA (Índice de Eficiência Acadêmica).

Classe Tabela
br.ufrn.sigaa.ensino.dominio.MatriculaComponente ensino.matricula_componente
br.ufrn.sigaa.processamento.dominio.MatriculaEmProcessamento graduacao.resultado_processamento_matricula
br.ufrn.sigaa.ensino.graduacao.dominio.SolicitacaoMatricula graduacao.solicitacao_matricula
br.ufrn.sigaa.ensino.dominio.Turma ensino.turma

Plano de Teste

Sistema: SIGAA

Módulo: Graduação

Usuário: david

Link(s): Área de Administração → Administração → Processamento da Matrícula

Papel que usuário deve ter: ADMINISTRADOR SIGAA.

Para o processamento de matrículas deve-se ter um banco de dados preparado com os dados posteriores ao período de matrículas e realizar uma simulação do processamento da matrícula nesse banco na Superintendência de Informática.

Para realizar o teste do pós processamento das turmas de Ensino Individual e Regular, cuja as quantidades de alunos matriculados esteja fora da faixa permitida. Será interessante selecionar o Modo: Graduação, Rematricula: Sim e Tipo: Pós-processamento de Ensino Individual. Após o processamento verificar em Consulta de Turmas se o tipo da turma foi alterado, conforme a quantidade de alunos matrículados. (obs.: Turmas com até 5 alunos matriculados serão consideradas do tipo Ensino Individual, turmas com mais de 5 alunos matriculados serão consideradas como Regular)

Para testar a ordem de prioridade o testador pode criar uma turma e incluir discentes coma as algumas situações de nível de prioridade e ir processando e alterando os status dos discentes da turma afim de testar as prioridades.

O scripr abaixo ajuda o testador a realizar vários testes de processamento com a mesma turma. Depois de um processamento realizado o testador pode alterar os status dos discentes para “EM ESPERA” para realizar outro processamento, após alterar o status do discente é importante remover o processamento da turma para que essa turma possa ser novamente processada

1° Alterar Situação de Matricula para EM ESPERA

UPDATE ensino.matricula_componente SET id_situacao_matricula = 1
WHERE id_matricula_componente IN (
SELECT mc.id_matricula_componente
FROM ensino.matricula_componente mc
INNER JOIN ensino.turma t USING (id_turma)
INNER JOIN ensino.componente_curricular cc USING (id_disciplina)
WHERE t.ano = <Ano> AND t.periodo = <Período>
AND cc.codigo = '<Código do Componente>'
AND t.codigo = '<Código da Turma>'
)

2° Remover o Processamento da Turma

UPDATE ensino.turma SET processada = FALSE WHERE id_turma IN(
  SELECT id_turma FROM ensino.turma t
  INNER JOIN ensino.componente_curricular cc USING (id_disciplina)
  WHERE ano = <Ano> AND periodo = <Período>
  AND cc.codigo = '<Código do Componente>'
  AND t.codigo = '<Código da Turma>'
)

3° Excluir da tabela de processamento de matrículas a turma processada

DELETE FROM graduacao.resultado_processamento_matricula
WHERE id_matricula_componente  IN (
SELECT mc.id_matricula_componente
FROM ensino.matricula_componente mc
INNER JOIN ensino.turma t USING (id_turma)
INNER JOIN ensino.componente_curricular cc USING (id_disciplina)
WHERE t.ano = <Ano> AND t.periodo = <Período>
AND cc.codigo = '<Código do Componente>'
AND t.codigo = '<Código da Turma>'
)

Outro teste que pode ser realizado é com os relatórios de processamento de matrícula. Deve-se pegar um conjunto de relatórios de diversas turmas, de diferentes cursos e áreas, turmas de co-requisitos, turmas de bloco, etc e verificar se as matrículas foram processadas corretamente, seguindo o número de vagas da turma, as reservas realizadas e os critérios de ordenação.

Para realizar o teste do pós processamento das turmas de Ensino Individual e Regular, cuja as quantidades de alunos matriculados esteja fora da faixa permitida. Pode-se utilizar as seguintes consultas, para listar as turmas que serão processadas pelo pós processamento. Lembrando que só poderá ser executada uma única vez.

Lista de Turmas Regulares com quantidade de alunos matriculados menor ou igual a 5

SELECT t.id_turma, CASE WHEN t.tipo = 1 THEN 'REGULAR' ELSE 'ENSINO INDIVIDUAL' END, cc.codigo AS "Codigo do Componente", t.codigo AS "Código da Turma"
,CAST(SUM( CASE WHEN mc.id_situacao_matricula = 2 THEN 1 ELSE 0 END) AS DOUBLE PRECISION) AS "qtde matriculados"
,COUNT(mc.id_matricula_componente)
FROM ensino.turma t  
JOIN ensino.situacao_turma st ON t.id_situacao_turma = st.id_situacao_turma  
JOIN ensino.componente_curricular cc ON t.id_disciplina = cc.id_disciplina  
JOIN ensino.componente_curricular_detalhes ccd ON cc.id_detalhe = ccd.id_componente_detalhes
JOIN ensino.matricula_componente mc ON mc.id_turma = t.id_turma 
WHERE t.ano = 2010
AND t.periodo = 2
AND t.tipo IN (1)
AND t.id_situacao_turma IN (1,2) 
AND cc.nivel = 'G'
AND EXISTS(SELECT id_matricula_componente FROM ensino.matricula_componente WHERE id_matricula_componente = mc.id_matricula_componente AND id_situacao_matricula = 2)
GROUP BY t.id_turma, t.tipo, cc.codigo, t.codigo
HAVING COUNT(mc.id_matricula_componente) <= 5 
ORDER BY t.id_turma

Lista de Turmas de Ensino Individual com quantidade de alunos matriculados maior que 5

SELECT t.id_turma, CASE WHEN t.tipo = 1 THEN 'REGULAR' ELSE 'ENSINO INDIVIDUAL' END, cc.codigo AS "Codigo do Componente", t.codigo AS "Código da Turma"
,CAST(SUM( CASE WHEN mc.id_situacao_matricula = 2 THEN 1 ELSE 0 END) AS DOUBLE PRECISION) AS "qtde matriculados"
,COUNT(mc.id_matricula_componente)
FROM ensino.turma t  
JOIN ensino.situacao_turma st ON t.id_situacao_turma = st.id_situacao_turma  
JOIN ensino.componente_curricular cc ON t.id_disciplina = cc.id_disciplina  
JOIN ensino.componente_curricular_detalhes ccd ON cc.id_detalhe = ccd.id_componente_detalhes
JOIN ensino.matricula_componente mc ON mc.id_turma = t.id_turma 
WHERE t.ano = 2010
AND t.periodo = 2
AND t.tipo IN (3)
AND t.id_situacao_turma IN (1,2) 
AND cc.nivel = 'G'
AND EXISTS(SELECT id_matricula_componente FROM ensino.matricula_componente WHERE id_matricula_componente = mc.id_matricula_componente AND id_situacao_matricula = 2)
GROUP BY t.id_turma, t.tipo, cc.codigo, t.codigo
HAVING COUNT(mc.id_matricula_componente) > 5 
ORDER BY t.id_turma
  • sigaa/graduacao/documentacao_tecnica/processar.txt
  • Última modificação: 2017/04/03 18:11
  • (edição externa)