diff --git a/script/analysis/course_analysis.py b/script/analysis/course_analysis.py
index 9fc482ca42f5ebf76978e3da78e8b88bce4bb026..1ed8384038303258599bdfeac3336146914bdb75 100644
--- a/script/analysis/course_analysis.py
+++ b/script/analysis/course_analysis.py
@@ -6,33 +6,33 @@ from utils.situations import Situation as sit
 #funcoes
 #
 #    make_taxas -- parametros df e ultima turma ingresso
-#    *qtd_alunos
-#    *qtd_trancamento
-#    *taxa_reprovacao_absoluta
-#    *taxa_reprovacao_frequencia
-#    *taxa_reprovacao_ultimo_absoluto
-#    *taxa_reprovacao_ultimo_frequencia
-#    *taxa_trancamento
+#    *qtd_alunos 
+#    *qtd_trancamento 
+#    *taxa_reprovacao_absoluta 
+#    *taxa_reprovacao_frequencia 
+#    *taxa_reprovacao_ultimo_absoluto 
+#    *taxa_reprovacao_ultimo_frequencia 
+#    *taxa_trancamento 
 ##listas_disciplinas é dicionario com todas as disciplinas
 #def taxas_gerais(df,ultima_turma_ingresso,lista_disciplina):
 #    df_quantidade = df.groupby(['COD_ATIV_CURRIC', 'SITUACAO']
 #                             ).size().reset_index(name='Quantidades')
 #    for disciplina in lista_disciplina.keys:
-#        quantidades = df_quantidade.loc[df_quantidade.COD_ATIV_CURRIC == disciplina]
-#
+#        quantidades = df_quantidade.loc[df_quantidade.COD_ATIV_CURRIC == disciplina] 
+#        
 #        qtd_trancamento_df =quantidades.loc[quantidades.SITUACAO ==
 #                (sit.SIT_CANCELADO || sit.SIT_TRANCAMENTO_ADMINISTRATIVO ||
-#                    sit.SIT_TRANCAMENTO_TOTAL) ]
+#                    sit.SIT_TRANCAMENTO_TOTAL) ] 
 #        qtd_trancamento = qtd_trancamento_df.sum
 #
 #        qtd_conhecimento_aprov = quantidades.loc[quantidades.SITUACAO ==
 #                sit.SIT_CONHECIMENTO_APROVADO].Quantidade
 #        qtd_conhecimento_reprov = quantidades.loc[quantidades.SITUACAO ==
-#                sit.SIT_CONHECIMENTO_REPROVADO].Quantidade
+#                sit.SIT_CONHECIMENTO_REPROVADO].Quantidade 
 #        lista_disciplina[disciplina][qtd_conhecimento] = qtd_conhecimento_aprov
 #        + qtd_conhecimento_reprov
 #        if qtd_conhecimento:
-#            taxa_conhecimento = qtd_conhecimento_aprov / listas_disciplinas[disciplina][qtd_conhecimento]
+#            taxa_conhecimento = qtd_conhecimento_aprov / listas_disciplinas[disciplina][qtd_conhecimento] 
 #        else:
 #            taxa_conhecimento = -1
 #
@@ -147,15 +147,15 @@ from utils.situations import Situation as sit
 #
 def informacoes_gerais(df,lista_disciplinas):
     #quantidade de matriculas
-    disciplinas = df.groupby(['COD_ATIV_CURRIC']).size()
+    disciplinas = df.groupby(['COD_ATIV_CURRIC']).size()  
     for disciplina in disciplinas.index:
-        disciplina_dict = {}
-        disciplina_df = df.loc[df.COD_ATIV_CURRIC == disciplina]
-        disciplina_dict['qtd_alunos'] = disciplinas[disciplina]
-        disciplina_dict['disciplina_codigo'] = disciplina
+        disciplina_dict = {} 
+        disciplina_df = df.loc[df.COD_ATIV_CURRIC == disciplina] 
+        disciplina_dict['qtd_alunos'] = disciplinas[disciplina]   
+        disciplina_dict['disciplina_codigo'] = disciplina 
         disciplina_dict['disciplina_nome'] = \
-        disciplina_df.NOME_ATIV_CURRIC.values[0]
-        lista_disciplinas[disciplina] = disciplina_dict
+        disciplina_df.NOME_ATIV_CURRIC.values[0]    
+        lista_disciplinas[disciplina] = disciplina_dict 
 #    -nome da disciplina
 #    -codigo da disciplina
 #    -lista de disciplina
@@ -164,45 +164,45 @@ def informacoes_gerais(df,lista_disciplinas):
 #    matriculas
 def conhecimento(qtd,disciplina_dict):
     conheci_df = qtd.loc[(qtd.SITUACAO == sit.SIT_CONHECIMENTO_APROVADO) |
-            (qtd.SITUACAO == sit.SIT_CONHECIMENTO_REPROVADO)]
-    total_conheci = conheci_df.qtd.sum()
+            (qtd.SITUACAO == sit.SIT_CONHECIMENTO_REPROVADO)] 
+    total_conheci = conheci_df.qtd.sum() 
     if np.isnan(total_conheci):
         total_conheci = 0
     conheci_aprov = conheci_df.loc[conheci_df.SITUACAO == \
-            sit.SIT_CONHECIMENTO_APROVADO].set_index('COD_ATIV_CURRIC' )
-    disciplina_dict['qtd_conhecimento'] = total_conheci
+            sit.SIT_CONHECIMENTO_APROVADO].set_index('COD_ATIV_CURRIC' ) 
+    disciplina_dict['qtd_conhecimento'] = total_conheci 
 
     if (total_conheci !=0) and (not conheci_aprov.empty):
-        disciplina_dict['taxa_conhecimento'] = conheci_aprov.qtd.values[0] / total_conheci
+        disciplina_dict['taxa_conhecimento'] = conheci_aprov.qtd.values[0] / total_conheci 
     else:
         disciplina_dict['taxa_conhecimento'] = 0.0
 
 def trancamento(qtd,disciplina_dict,qtd_matr):
-    trancamento_df = qtd.loc[(qtd.SITUACAO == sit.SIT_TRANCAMENTO_ADMINISTRATIVO) |
-                        (qtd.SITUACAO == sit.SIT_TRANCAMENTO_TOTAL) |
-                        (qtd.SITUACAO == sit.SIT_CANCELADO)]
-    qtd_tranc = trancamento_df.qtd.sum()
+    trancamento_df = qtd.loc[(qtd.SITUACAO == sit.SIT_TRANCAMENTO_ADMINISTRATIVO) | 
+                        (qtd.SITUACAO == sit.SIT_TRANCAMENTO_TOTAL) | 
+                        (qtd.SITUACAO == sit.SIT_CANCELADO)] 
+    qtd_tranc = trancamento_df.qtd.sum() 
     if np.isnan(qtd_tranc):
         qtd_tranc = 0
-    disciplina_dict['qtd_trancamento'] = qtd_tranc
+    disciplina_dict['qtd_trancamento'] = qtd_tranc 
     disciplina_dict['taxa_trancamento'] = qtd_tranc / qtd_matr if qtd_matr else 0.0
 
-
-def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq):
-    '''existe as analises reprovacao absoluta, reprovacao por frequencia e
+ 
+def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq): 
+    '''existe as analises reprovacao absoluta, reprovacao por frequencia e 
     reprovacao absoluta, reprovacao por frequencia da ultima vez que a
     disciplina foi ofertada, a logica da analise eh a mesma so muda os valores
     do dataframe qtd e o nomes das chaves do dicionario.Eh possivel reaproveitar
     o mesmo codigo para fazer analise geral e da ultima vez que foi ofertado,
     para isso so eh preciso enviar outro dataframe qtd e enviar como string o
-    indice do dicionario para ser atribuido de forma correta'''
+    indice do dicionario para ser atribuido de forma correta''' 
     sit_reprov = sit.SITUATION_FAIL + (sit.SIT_REPROVADO_SEM_NOTA,)
     reprov_df = qtd.loc[(qtd.SITUACAO == sit_reprov[0]) |
                         (qtd.SITUACAO == sit_reprov[1]) |
                         (qtd.SITUACAO == sit_reprov[2]) |
                         (qtd.SITUACAO == sit_reprov[3]) ]
     qtd_reprov_abso = reprov_df.qtd.sum() #quantidade de reprovacao absoluta
-    qtd_reprov_freq = reprov_df.loc[reprov_df.SITUACAO == sit_reprov[1]]
+    qtd_reprov_freq = reprov_df.loc[reprov_df.SITUACAO == sit_reprov[1]] 
     if qtd_matr != 0:
         disciplina[taxa_reprov_absoluta] = 0.0 \
                 if np.isnan(qtd_reprov_abso) else qtd_reprov_abso / qtd_matr
@@ -210,43 +210,65 @@ def reprovacao(qtd,disciplina,qtd_matr,taxa_reprov_absoluta,taxa_reprov_freq):
                 if qtd_reprov_freq.empty else qtd_reprov_freq.qtd.values[0] / qtd_matr
     else:
         disciplina[taxa_reprov_absoluta] = 0.0
-        disciplina[taxa_reprov_freq] = 0.0
-
+        disciplina[taxa_reprov_freq] = 0.0 
 
 def analises_gerais(df,lista_disciplinas):
-    qtd_geral= df.groupby(['COD_ATIV_CURRIC','SITUACAO']).size().reset_index(name='qtd' )
-    print(df.columns)
+    qtd_geral= df.groupby(['COD_ATIV_CURRIC','SITUACAO']).size().reset_index(name='qtd' ) 
+    qtd_ultimo_geral = \
+    df.groupby(['COD_ATIV_CURRIC','SITUACAO','ANO','PERIODO']).size().reset_index(name='qtd')  
+    matr_por_semestre = \
+    df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name='matr') 
     for disciplina in lista_disciplinas.keys():
         disciplina_dict = {}
-        disciplina_df = df.loc[df.COD_ATIV_CURRIC == disciplina]
+        qtd  = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina] 
+        disciplina_semestral = qtd_ultimo_geral.loc[qtd_ultimo_geral.COD_ATIV_CURRIC == \
+                disciplina] 
+        ano = np.amax(disciplina_semestral.ANO) 
+        disciplina_ano = disciplina_semestral.loc[disciplina_semestral.ANO \
+                == ano] 
+        periodo = np.amax(disciplina_ano.PERIODO) 
+        qtd_ultimo = disciplina_ano.loc[disciplina_ano.PERIODO == periodo] 
         #quantidade de alunos
-        qtd_matriculas = lista_disciplinas[disciplina]['qtd_alunos']
+        qtd_matriculas = lista_disciplinas[disciplina]['qtd_alunos']  
+        qtd_matr_ultimo = \
+        matr_por_semestre.loc[(matr_por_semestre.COD_ATIV_CURRIC == disciplina) &
+                            (matr_por_semestre.ANO == ano) &
+                            (matr_por_semestre.PERIODO == periodo)].matr.values[0] 
         #qtd eh um dataframe que contem a ocorrencia de cada situacao
-        qtd  = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina]
+        qtd  = qtd_geral.loc[qtd_geral.COD_ATIV_CURRIC == disciplina] 
         #faz analises relacionada ao conhecimento
-        conhecimento(qtd,disciplina_dict)
+        conhecimento(qtd,disciplina_dict) 
         # faz analises relacionada ao trancamento
-        trancamento(qtd,disciplina_dict,qtd_matriculas)
+        trancamento(qtd,disciplina_dict,qtd_matriculas) 
         # faz analises relacionada a reprovacoes
-        reprovacao(qtd,disciplina_dict,qtd_matriculas)
-        #print(disciplina_dict)
-        print("\n" )
+        reprovacao(qtd,disciplina_dict,qtd_matriculas,'taxa_reprovacao_absoluta','taxa_reprovacao_frequencia') 
+        reprovacao(qtd_ultimo,disciplina_dict,qtd_matriculas,'taxa_reprovacao_ultimo_absoluta',
+                'taxa_reprovacao_ultimo_frequencia') 
+        lista_disciplinas[disciplina].update(disciplina_dict)
+        #print(disciplina_dict) 
+
 #   -qtd_conhecimento
 #   -qtd_trancamento
 #   -taxa_conhecimento
 #   -taxa_reprovacao_absoluta
 #   -taxa_reprovacao_frequencia
-#   *taxa_reprovacao_ultimo_absoluto
-#   *taxa_reprovacao_ultimo_frequencia
+#   -taxa_reprovacao_ultimo_absoluto
+#   -taxa_reprovacao_ultimo_frequencia
 #   -taxa_trancamento
 #   *nota geral desvio padrao geral
 #   *nota ultima vez ofertado e desvio padrao
-#def analises_semestrais()
+def analises_semestrais(df,lista_disciplinas):
+    geral_df = \
+    df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO']).size().reset_index(name
+            = 'matr' ) 
+    geral_nota_df = \
+    df.groupby(['COD_ATIV_CURRIC','ANO','PERIODO','SITUACAO','MEDIA_FINAL']).size()  
+    print(geral_nota_df.loc[geral_nota_df.SITUACAO == sit.SIT_APROVADO]) 
 #    *taxa aprovacao semestral
 #    *quantidade de matricula por semestre
-def analises_disciplinas (df):
+def analises_disciplinas(df):
     lista_disciplinas = {}
-    informacoes_gerais(df,lista_disciplinas)
-    analises_gerais(df,lista_disciplinas)
-#    analises_semestrais(df,listas_disciplinas)
-#    """tranformar para json """
+    informacoes_gerais(df,lista_disciplinas) 
+    analises_gerais(df,lista_disciplinas) 
+    analises_semestrais(df,lista_disciplinas) 
+#    """tranformar para json """