SELECT
    mc.id_discente,
    p.nome,
    p.cpf_cnpj,
    d.id_curso,
    c.nome AS nome_curso,
    d.id_curriculo AS id_curriculo_discente,
    cr.id_curriculo AS id_curriculo_curriculo_ativo,
    cr.ch_total_minima AS carga_horaria_minima_curso,
    cr.semestre_conclusao_ideal AS duracao_padrao_periodos,
    d.status,
    sd.descricao AS descricao_status_discente,
    d.data_colacao_grau,
    d.data_integralizacao,
    d.formando,
    d.ch_integralizada,
    idx.ira,
    idx.iean,
    idx.mc,
    mc.ano,
    mc.periodo,
    mc.id_componente_curricular,
    mc.id_componente_detalhes,
    cc.codigo,
    ccd.nome AS nome_componente_curricular,
    ccd.ch_total AS carga_horaria_componente,
    mc.id_turma,
    mc.media_final,
    mc.numero_faltas,
    mc.porcentagem_frequencia,
    mc.id_situacao_matricula,
    sm.descricao AS situacao_matricula
FROM ensino.matricula_componente mc
JOIN public.discente d
    ON d.id_discente = mc.id_discente
JOIN comum.pessoa p
    ON p.id_pessoa = d.id_pessoa
LEFT JOIN public.curso c
    ON c.id_curso = d.id_curso
LEFT JOIN public.status_discente sd
    ON sd.status = d.status
LEFT JOIN (
    SELECT DISTINCT ON (id_curso)
        id_curso,
        id_curriculo,
        ch_total_minima,
        semestre_conclusao_ideal
    FROM graduacao.curriculo
    WHERE ativo = true
    ORDER BY id_curso, id_curriculo DESC
) cr
    ON cr.id_curso = d.id_curso
LEFT JOIN (
    SELECT
        iad.id_discente,
        MAX(CASE WHEN ia.sigla = 'IRA' THEN iad.valor END)  AS ira,
        MAX(CASE WHEN ia.sigla = 'IEAN' THEN iad.valor END) AS iean,
        MAX(CASE WHEN ia.sigla = 'MC' THEN iad.valor END)   AS mc
    FROM ensino.indice_academico_discente iad
    JOIN ensino.indice_academico ia
        ON ia.id = iad.id_indice_academico
    WHERE ia.sigla IN ('IRA', 'IEAN', 'MC')
    GROUP BY iad.id_discente
) idx
    ON idx.id_discente = mc.id_discente
LEFT JOIN ensino.componente_curricular cc
    ON cc.id_disciplina = mc.id_componente_curricular
LEFT JOIN ensino.componente_curricular_detalhes ccd
    ON ccd.id_componente_detalhes = mc.id_componente_detalhes
LEFT JOIN ensino.situacao_matricula sm
    ON sm.id_situacao_matricula = mc.id_situacao_matricula
ORDER BY
    mc.ano,
    mc.periodo,
    p.nome,
    mc.id_componente_curricular;