diff --git a/db/postgresql/add_final_report_04_12_18.sql b/db/postgresql/add_final_report_04_12_18.sql
index d82ecbd7f8df356be15dda36dcdad93e2543f8d9..cf2719bd386eaceac693c5ae812ac8d87ddd9ae6 100644
--- a/db/postgresql/add_final_report_04_12_18.sql
+++ b/db/postgresql/add_final_report_04_12_18.sql
@@ -14,9 +14,10 @@ BEGIN
 END
 $function$;
 
+DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryearplan(pyear integer, pnum integer, pplanexternalid integer);
 CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryearplan(pyear integer, pnum integer, pplanexternalid integer)
   RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer,
-                "SubjectExternalID" character varying, "RecordBookExternalID" character varying,
+                "SubjectExternalID" character varying, "RecordBookExternalID" character varying,  "ExamType" exam_credit_grading_credit,
                 "SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer,
                 "ExtraRate" integer, "Extra2Rate" integer)
 LANGUAGE plpgsql
@@ -31,9 +32,10 @@ BEGIN
 END
 $function$;
 
+DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryeardiscipline(pyear integer, pnum integer, pdisciplineexternalid character varying);
 CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryeardiscipline(pyear integer, pnum integer, pdisciplineexternalid character varying)
   RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer,
-                "SubjectExternalID" character varying, "RecordBookExternalID" character varying,
+                "SubjectExternalID" character varying, "RecordBookExternalID" character varying, "ExamType" exam_credit_grading_credit,
                 "SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer,
                 "ExtraRate" integer, "Extra2Rate" integer)
 LANGUAGE plpgsql
@@ -48,78 +50,62 @@ BEGIN
 END
 $function$;
 
-CREATE OR REPLACE VIEW view_final_report AS
-  SELECT DISTINCT
-    semesters.Year          AS SemesterYear,
-    semesters.Num           AS SemesterNum,
-    study_plans.ExternalID  AS PlanExternalID,
-    subjects.ExternalID     AS SubjectExternalID,
-    record_books.ExternalID AS RecordBookExternalID,
-    (
-      SELECT SUM(rating_table.Rate)
-      FROM rating_table
-        INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID
-        INNER JOIN modules ON submodules.ModuleID = modules.ID
-      WHERE modules.DisciplineID = disciplines.ID AND
-            modules.Type = 'regular' AND
-            rating_table.RecordBookID = record_books.ID
-      GROUP BY modules.DisciplineID, rating_table.RecordBookID
-    )                       AS SemesterRate,
-    (
-      SELECT rating_table.Rate
-      FROM rating_table
-        INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID
-        INNER JOIN modules ON submodules.ModuleID = modules.ID
-      WHERE modules.DisciplineID = disciplines.ID AND
-            modules.Type = 'exam' AND
-            rating_table.RecordBookID = record_books.ID
-      LIMIT 1
-    )                       AS ExamRate,
-    (
-      SELECT rating_table.Rate
-      FROM rating_table
-        INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID
-        INNER JOIN modules ON submodules.ModuleID = modules.ID
-      WHERE modules.DisciplineID = disciplines.ID AND
-            modules.Type = 'exam' AND
-            rating_table.RecordBookID = record_books.ID
-      LIMIT 1 OFFSET 1
-    )                       AS Exam2Rate,
-    (
-      SELECT rating_table.Rate
-      FROM rating_table
-        INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID
-        INNER JOIN modules ON submodules.ModuleID = modules.ID
-      WHERE modules.DisciplineID = disciplines.ID AND
-            modules.Type = 'exam' AND
-            rating_table.RecordBookID = record_books.ID
-      LIMIT 1 OFFSET 2
-    )                       AS Exam3Rate,
-    (
-      SELECT rating_table.Rate
-      FROM rating_table
-        INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID
-        INNER JOIN modules ON submodules.ModuleID = modules.ID
-      WHERE modules.DisciplineID = disciplines.ID AND
-            modules.Type = 'extra' AND
-            rating_table.RecordBookID = record_books.ID
-      LIMIT 1
-    )                       AS ExtraRate,
-    (
-      SELECT rating_table.Rate
-      FROM rating_table
-        INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID
-        INNER JOIN modules ON submodules.ModuleID = modules.ID
-      WHERE modules.DisciplineID = disciplines.ID AND
-            modules.Type = 'extra' AND
-            rating_table.RecordBookID = record_books.ID
-      LIMIT 1 OFFSET 1
-    )                       AS Extra2Rate
-  FROM semesters
-    INNER JOIN disciplines ON disciplines.SemesterID = semesters.ID
-    INNER JOIN disciplines_study_plans ON disciplines_study_plans.DisciplineID = disciplines.ID
-    INNER JOIN study_plans ON study_plans.ID = disciplines_study_plans.StudyPlanID
-    INNER JOIN subjects ON subjects.ID = disciplines.SubjectID
-    INNER JOIN view_disciplines_recordbooks ON view_disciplines_recordbooks.DisciplineID = disciplines.ID AND
-                                               'attach' = coalesce(view_disciplines_recordbooks.Type, 'attach')
-    INNER JOIN record_books ON record_books.ID = view_disciplines_recordbooks.RecordBookID;
\ No newline at end of file
+drop view if exists public.view_final_report;
+CREATE OR REPLACE VIEW public.view_final_report
+  AS SELECT DISTINCT semesters.year AS semesteryear,
+                     semesters.num AS semesternum,
+                     study_plans.externalid AS planexternalid,
+                     subjects.externalid AS subjectexternalid,
+                     record_books.externalid AS recordbookexternalid,
+                     disciplines.examtype as examtype,
+                     ( SELECT sum(rating_table.rate) AS sum
+                       FROM rating_table
+                         JOIN submodules ON rating_table.submoduleid = submodules.id
+                         JOIN modules ON submodules.moduleid = modules.id
+                       WHERE modules.disciplineid = disciplines.id AND modules.type = 'regular'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
+                       GROUP BY modules.disciplineid, rating_table.recordbookid) AS semesterrate,
+                     ( SELECT rating_table.rate
+                       FROM rating_table
+                         JOIN submodules ON rating_table.submoduleid = submodules.id
+                         JOIN modules ON submodules.moduleid = modules.id
+                       WHERE modules.disciplineid = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
+                       LIMIT 1) AS examrate,
+                     ( SELECT rating_table.rate
+                       FROM rating_table
+                         JOIN submodules ON rating_table.submoduleid = submodules.id
+                         JOIN modules ON submodules.moduleid = modules.id
+                       WHERE modules.disciplineid = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
+                       OFFSET 1
+                       LIMIT 1) AS exam2rate,
+                     ( SELECT rating_table.rate
+                       FROM rating_table
+                         JOIN submodules ON rating_table.submoduleid = submodules.id
+                         JOIN modules ON submodules.moduleid = modules.id
+                       WHERE modules.disciplineid = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
+                       OFFSET 2
+                       LIMIT 1) AS exam3rate,
+                     ( SELECT rating_table.rate
+                       FROM rating_table
+                         JOIN submodules ON rating_table.submoduleid = submodules.id
+                         JOIN modules ON submodules.moduleid = modules.id
+                       WHERE modules.disciplineid = disciplines.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
+                       LIMIT 1) AS extrarate,
+                     ( SELECT rating_table.rate
+                       FROM rating_table
+                         JOIN submodules ON rating_table.submoduleid = submodules.id
+                         JOIN modules ON submodules.moduleid = modules.id
+                       WHERE modules.disciplineid = disciplines.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
+                       OFFSET 1
+                       LIMIT 1) AS extra2rate
+     FROM semesters
+       JOIN disciplines ON disciplines.semesterid = semesters.id
+       JOIN disciplines_study_plans ON disciplines_study_plans.disciplineid = disciplines.id
+       JOIN study_plans ON study_plans.id = disciplines_study_plans.studyplanid
+       JOIN subjects ON subjects.id = disciplines.subjectid
+       JOIN view_disciplines_recordbooks ON view_disciplines_recordbooks.disciplineid = disciplines.id AND 'attach'::attach_detach = COALESCE(view_disciplines_recordbooks.type, 'attach'::attach_detach)
+       JOIN record_books ON record_books.id = view_disciplines_recordbooks.recordbookid;
+
+-- Permissions
+
+ALTER TABLE public.view_final_report OWNER TO postgres;
+GRANT ALL ON TABLE public.view_final_report TO postgres;
diff --git a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php
index a8b54ba5fff05faad5c33d603714483ec12d2428..1f2fc72a558914757f805dfc2f819c3b81fa4ecc 100644
--- a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php
+++ b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php
@@ -20,7 +20,8 @@ class Controller_Api_V0_FinalReport extends Controller_Handler_Api {
             $response = [];
             /** @var Model_FinalReportItem $row */
             foreach ($finalReport as $row) {
-                $response[$row->PlanExternalID][$row->SubjectExternalID][$row->RecordBookExternalID] = [
+                $response[$row->PlanExternalID][$row->SubjectExternalID]['type'] = $row->ExamType;
+                $response[$row->PlanExternalID][$row->SubjectExternalID]['students'][$row->RecordBookExternalID] = [
                     'semester'  => $row->SemesterRate,
                     'exam'      => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate],
                     'extra'     => [$row->ExtraRate, $row->Extra2Rate],
diff --git a/~dev_rating/application/classes/Model/FinalReportItem.php b/~dev_rating/application/classes/Model/FinalReportItem.php
index 8dcbbb896027595ca0f501c25de70ca7b0e2f86e..39be1c5625dd14132b1bcae8d3837d184a895f78 100644
--- a/~dev_rating/application/classes/Model/FinalReportItem.php
+++ b/~dev_rating/application/classes/Model/FinalReportItem.php
@@ -23,6 +23,7 @@ class Model_FinalReportItem extends Model
         $this->PlanExternalID = str_pad($row['PlanExternalID'], 9, '0', STR_PAD_LEFT);
         $this->SubjectExternalID = $row['SubjectExternalID'];
         $this->RecordBookExternalID = $row['RecordBookExternalID'];
+        $this->ExamType = $row['ExamType'];
         $this->SemesterRate = isset($row['SemesterRate']) ? (int)$row['SemesterRate'] : null;
         $this->ExamRate = isset($row['ExamRate']) ? (int)$row['ExamRate'] : null;
         $this->Exam2Rate = isset($row['Exam2Rate']) ? (int)$row['Exam2Rate'] : null;