Index: src/main/java/apps/spring/reportium/service/ReportService.java
===================================================================
--- src/main/java/apps/spring/reportium/service/ReportService.java	(revision fbf0a9cf3881538198cfdab86be233c339ca7117)
+++ src/main/java/apps/spring/reportium/service/ReportService.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
@@ -5,4 +5,7 @@
 import apps.spring.reportium.entity.Institution;
 import apps.spring.reportium.entity.Report;
+import apps.spring.reportium.entity.enumerations.PunishmentType;
+import apps.spring.reportium.entity.enumerations.ValueUnit;
+import org.springframework.cglib.core.Local;
 import org.springframework.data.domain.Page;
 
@@ -23,3 +26,4 @@
     void saveNewEmploymentReport(Long personId, LocalDate startDate, LocalDate endDate,String jobRole, BigDecimal income, String summary);
     void saveNewAcademicReport(Long personId, Long institution_id, String academicField, String descriptionOfReport);
+    void saveNewCriminalReport(Long personId, String caseSummary, String location, Boolean isResolved, Long crimeTypeId, PunishmentType punishmentType, Double fineToPay, LocalDate releaseDate);
 }
Index: src/main/java/apps/spring/reportium/service/impl/ReportServiceImplementation.java
===================================================================
--- src/main/java/apps/spring/reportium/service/impl/ReportServiceImplementation.java	(revision fbf0a9cf3881538198cfdab86be233c339ca7117)
+++ src/main/java/apps/spring/reportium/service/impl/ReportServiceImplementation.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
@@ -2,12 +2,11 @@
 
 import apps.spring.reportium.entity.DTOs.*;
-import apps.spring.reportium.entity.EmploymentReport;
-import apps.spring.reportium.entity.Institution;
 import apps.spring.reportium.entity.Report;
+import apps.spring.reportium.entity.enumerations.PunishmentType;
+import apps.spring.reportium.entity.enumerations.ValueUnit;
 import apps.spring.reportium.repository.ReportRepository;
 import apps.spring.reportium.service.ReportService;
 import apps.spring.reportium.specifications.ReportFilterSpecificationBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.dao.DataAccessException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -16,7 +15,4 @@
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
-import org.springframework.jdbc.core.namedparam.SqlParameterSource;
-import org.springframework.jdbc.core.simple.SimpleJdbcCall;
 import org.springframework.stereotype.Service;
 
@@ -26,4 +22,5 @@
 
 @Service
+
 public class ReportServiceImplementation implements ReportService {
     private final ReportRepository reportRepository;
@@ -126,4 +123,28 @@
     }
 
+    @Override
+    public void saveNewCriminalReport(Long personId, String caseSummary, String location, Boolean isResolved, Long crimeTypeId, PunishmentType punishmentType, Double fineToPay, LocalDate releaseDate) {
+        System.out.println("Calling stored procedure with:");
+        System.out.println("personId = " + personId);
+        System.out.println("caseSummary = " + caseSummary);
+        System.out.println("location = " + location);
+        System.out.println("isResolved = " + isResolved);
+        System.out.println("crimeTypeId = " + crimeTypeId);
+        System.out.println("punishmentType = " + punishmentType);
+        System.out.println("fineToPay = " + fineToPay);
+        System.out.println("releaseDate = " + releaseDate);
+        jdbcTemplate.update(
+                "CALL insert_criminal_report(?::INT, ?::TEXT, ?::TEXT, ?::BOOLEAN, ?::INT, ?::TEXT, ?::NUMERIC, ?::DATE)",
+                personId,
+                caseSummary,
+                location,
+                isResolved,
+                crimeTypeId,
+                punishmentType.name(),
+                fineToPay,
+                releaseDate
+        );
+    }
+
 
 }
Index: src/main/java/apps/spring/reportium/web/ReportsController.java
===================================================================
--- src/main/java/apps/spring/reportium/web/ReportsController.java	(revision fbf0a9cf3881538198cfdab86be233c339ca7117)
+++ src/main/java/apps/spring/reportium/web/ReportsController.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
@@ -1,6 +1,10 @@
 package apps.spring.reportium.web;
+import apps.spring.reportium.entity.CrimeType;
 import apps.spring.reportium.entity.Institution;
 import apps.spring.reportium.entity.Person;
 import apps.spring.reportium.entity.Report;
+import apps.spring.reportium.entity.enumerations.PunishmentType;
+import apps.spring.reportium.entity.enumerations.ValueUnit;
+import apps.spring.reportium.repository.CrimeTypeRepository;
 import apps.spring.reportium.repository.InstitutionRepository;
 import apps.spring.reportium.service.PersonService;
@@ -21,8 +25,10 @@
     private final PersonService personService;
     private final InstitutionRepository institutionRepository;
-    public ReportsController(ReportService reportService, PersonService personService, InstitutionRepository institutionRepository) {
+    private final CrimeTypeRepository crimeTypeRepository;
+    public ReportsController(ReportService reportService, PersonService personService, InstitutionRepository institutionRepository, CrimeTypeRepository crimeTypeRepository) {
         this.reportService = reportService;
         this.personService = personService;
         this.institutionRepository = institutionRepository;
+        this.crimeTypeRepository = crimeTypeRepository;
     }
     @GetMapping
@@ -82,8 +88,31 @@
     @PostMapping("/add/academic")
     public String submitAcademicData(@RequestParam Long personId,
-                                       @RequestParam Long institutionId,
-                                       @RequestParam String academicField,
-                                       @RequestParam String descriptionOfReport) {
+                                     @RequestParam Long institutionId,
+                                     @RequestParam String academicField,
+                                     @RequestParam String descriptionOfReport) {
         reportService.saveNewAcademicReport(personId, institutionId, academicField, descriptionOfReport);
+        return "redirect:/" + personId;
+    }
+
+
+    @GetMapping("/add/criminal")
+    public String createCriminalReport(@RequestParam Long personId, Model model) {
+        Person person = personService.findById(personId.intValue());
+        model.addAttribute("person", person);
+        model.addAttribute("punishmentTypes", PunishmentType.values());
+        model.addAttribute("crimeTypes", crimeTypeRepository.findAll());
+        return "new_criminal_report";
+    }
+
+    @PostMapping("/add/criminal")
+    public String submitCriminalData(@RequestParam Long personId,
+                                     @RequestParam String caseSummary,
+                                     @RequestParam String location,
+                                     @RequestParam Boolean isResolved,
+                                     @RequestParam Long crimeTypeId,
+                                     @RequestParam PunishmentType punishmentType,
+                                     @RequestParam (required = false) Double fineToPay,
+                                     @RequestParam (required = false) LocalDate releaseDate) {
+        reportService.saveNewCriminalReport(personId, caseSummary, location, isResolved, crimeTypeId, punishmentType, fineToPay, releaseDate);
         return "redirect:/" + personId;
     }
Index: src/main/resources/sql_queries/procedure_new_criminal_report.sql
===================================================================
--- src/main/resources/sql_queries/procedure_new_criminal_report.sql	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
+++ src/main/resources/sql_queries/procedure_new_criminal_report.sql	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
@@ -0,0 +1,53 @@
+CREATE OR REPLACE PROCEDURE insert_criminal_report(
+    IN param_person_id INT,
+    IN param_case_summary TEXT,
+    IN param_location TEXT,
+    IN param_is_resolved BOOLEAN,
+    IN param_crime_type_id INT,
+    IN param_punishment_type TEXT,
+    IN param_fine_to_pay NUMERIC,
+    IN param_release_date DATE
+)
+    LANGUAGE plpgsql
+AS
+$$
+DECLARE
+    new_report_id     INT;
+    new_punishment_id INT;
+BEGIN
+    IF NOT EXISTS (
+        SELECT 1 FROM person WHERE person_id = param_person_id
+    ) THEN
+        RAISE EXCEPTION 'Person with ID % does not exist', param_person_id;
+    END IF;
+
+    IF NOT EXISTS (
+        SELECT 1 FROM crimetype WHERE crime_type_id = param_crime_type_id
+    ) THEN
+        RAISE EXCEPTION 'CrimeType with ID % does not exist', param_crime_type_id;
+    END IF;
+
+    --insert report
+    INSERT INTO report (report_type, summary, created_at, person_id)
+    VALUES ('Criminal', param_case_summary, CURRENT_TIMESTAMP, param_person_id)
+    RETURNING report_id INTO new_report_id;
+
+    -- insert into criminalreport
+    INSERT INTO criminalreport (report_id, location, resolved, crime_type_id)
+    VALUES (new_report_id, param_location, param_is_resolved, param_crime_type_id);
+
+    --insertin punishment obj
+    IF param_punishment_type = 'PRISON' AND param_release_date IS NOT NULL THEN
+        INSERT INTO punishment (report_id, value_unit, punishment_type, fine_to_pay, release_date)
+        VALUES (new_report_id, 'years', LOWER(param_punishment_type), NULL, param_release_date)
+        RETURNING punishment_id INTO new_punishment_id;
+    END IF;
+
+    IF param_punishment_type = 'FINE' AND param_fine_to_pay IS NOT NULL THEN
+        INSERT INTO punishment (report_id, value_unit, punishment_type, fine_to_pay, release_date)
+        VALUES (new_report_id, 'euros', LOWER(param_punishment_type), param_fine_to_pay, NULL)
+        RETURNING punishment_id INTO new_punishment_id;
+    END IF;
+
+END;
+$$;
Index: src/main/resources/templates/new_criminal_report.html
===================================================================
--- src/main/resources/templates/new_criminal_report.html	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
+++ src/main/resources/templates/new_criminal_report.html	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
@@ -0,0 +1,353 @@
+<!doctype html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>Add Criminal Report</title>
+    <style>
+        :root {
+            --light-gray: #f8f9fa;
+            --blue: #007bff;
+            --yellow: #ffc107;
+            --dark-blue: #0056b3;
+            --light-blue: #e3f2fd;
+        }
+
+        body {
+            background: linear-gradient(135deg, var(--light-gray) 0%, #e9ecef 100%);
+            min-height: 100vh;
+            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+            margin: 0;
+            padding: 20px;
+        }
+
+        .form-container {
+            background: white;
+            border-radius: 15px;
+            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
+            padding: 2.5rem;
+            margin: 2rem auto;
+            max-width: 600px;
+            position: relative;
+        }
+
+        .form-container::before {
+            content: '';
+            position: absolute;
+            top: 0;
+            left: 0;
+            right: 0;
+            height: 5px;
+            background: linear-gradient(90deg, var(--blue) 0%, var(--yellow) 100%);
+            border-radius: 15px 15px 0 0;
+        }
+
+        .form-title {
+            color: var(--dark-blue);
+            font-weight: 700;
+            margin-bottom: 2rem;
+            text-align: center;
+            font-size: 1.8rem;
+        }
+
+        .form-label {
+            color: var(--dark-blue);
+            font-weight: 600;
+            margin-bottom: 0.5rem;
+            font-size: 0.95rem;
+            display: block;
+        }
+
+        .form-control {
+            border: 2px solid #e9ecef;
+            border-radius: 10px;
+            padding: 0.75rem 1rem;
+            font-size: 1rem;
+            transition: all 0.3s ease;
+            background-color: var(--light-gray);
+            width: 100%;
+            box-sizing: border-box;
+        }
+
+        .form-control:focus {
+            border-color: var(--blue);
+            box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1);
+            background-color: white;
+            outline: none;
+        }
+
+        .form-control::placeholder {
+            color: #6c757d;
+        }
+
+        .form-control:hover {
+            background-color: white;
+        }
+
+        .form-control:disabled {
+            background-color: #f8f9fa;
+            color: #6c757d;
+            cursor: not-allowed;
+            opacity: 0.6;
+        }
+
+        select.form-control {
+            cursor: pointer;
+        }
+
+        select.form-control:disabled {
+            cursor: not-allowed;
+        }
+
+        textarea.form-control {
+            resize: vertical;
+            min-height: 100px;
+        }
+
+        .btn-primary {
+            background: linear-gradient(45deg, var(--blue) 0%, var(--dark-blue) 100%);
+            border: none;
+            border-radius: 10px;
+            padding: 0.75rem 2rem;
+            font-weight: 600;
+            text-transform: uppercase;
+            letter-spacing: 0.5px;
+            transition: all 0.3s ease;
+            box-shadow: 0 4px 15px rgba(0, 123, 255, 0.3);
+            color: white;
+            cursor: pointer;
+            font-size: 1rem;
+        }
+
+        .btn-primary:hover {
+            background: linear-gradient(45deg, var(--dark-blue) 0%, var(--blue) 100%);
+        }
+
+        .btn-secondary {
+            background: linear-gradient(45deg, var(--yellow) 0%, #e0a800 100%);
+            border: none;
+            border-radius: 10px;
+            padding: 0.75rem 2rem;
+            font-weight: 600;
+            text-transform: uppercase;
+            letter-spacing: 0.5px;
+            color: #333;
+            transition: all 0.3s ease;
+            text-decoration: none;
+            display: inline-block;
+            box-shadow: 0 4px 15px rgba(255, 193, 7, 0.3);
+            cursor: pointer;
+            font-size: 1rem;
+        }
+
+        .btn-secondary:hover {
+            background: linear-gradient(45deg, #e0a800 0%, var(--yellow) 100%);
+            color: #333;
+            text-decoration: none;
+        }
+
+        .form-group {
+            margin-bottom: 1.5rem;
+            position: relative;
+        }
+
+        .form-group::after {
+            content: '';
+            position: absolute;
+            bottom: -0.5rem;
+            left: 0;
+            width: 50px;
+            height: 2px;
+            background: var(--yellow);
+            border-radius: 1px;
+            opacity: 0.6;
+        }
+
+        .button-group {
+            display: flex;
+            gap: 1rem;
+            justify-content: center;
+            margin-top: 2rem;
+            flex-wrap: wrap;
+        }
+
+        .summary-counter {
+            text-align: right;
+            font-size: 0.85rem;
+            color: #6c757d;
+            margin-top: 0.25rem;
+        }
+
+        .help-text {
+            font-size: 0.85rem;
+            color: #6c757d;
+            margin-top: 0.25rem;
+        }
+
+        @media (max-width: 576px) {
+            body {
+                padding: 10px;
+            }
+
+            .form-container {
+                margin: 1rem auto;
+                padding: 1.5rem;
+            }
+
+            .button-group {
+                flex-direction: column;
+            }
+
+            .btn-primary, .btn-secondary {
+                width: 100%;
+            }
+        }
+    </style>
+    <script>
+        function toggleFields() {
+            const punishmentSelect = document.getElementById("punishmentType");
+            const fineField = document.getElementById("fineToPay");
+            const releaseDateField = document.getElementById("releaseDate");
+            console.log(punishmentSelect)
+            if (!punishmentSelect || !fineField || !releaseDateField) {
+                return;
+            }
+            const selected = punishmentSelect.value.toUpperCase();
+            console.log(selected)
+
+            if (selected === "FINE") {
+                fineField.disabled = false;
+                fineField.required = true;
+                releaseDateField.disabled = true;
+                releaseDateField.required = false;
+                releaseDateField.value = null;
+            } else if (selected === "PRISON") {
+                releaseDateField.disabled = false;
+                releaseDateField.required = true;
+                fineField.disabled = true;
+                fineField.required = false;
+                fineField.value = null;
+            } else {
+                fineField.disabled = true;
+                fineField.required = false;
+                releaseDateField.disabled = true;
+                releaseDateField.required = false;
+                fineField.value = null;
+                releaseDateField.value = null;
+            }
+        }
+
+        function updateCounter() {
+            const textarea = document.getElementById('caseSummary');
+            const counter = document.getElementById('charCounter');
+            const current = textarea.value.length;
+            const max = textarea.getAttribute('maxlength');
+            counter.textContent = `${current} / ${max} characters`;
+
+            if (current > max * 0.9) {
+                counter.style.color = '#dc3545';
+            } else if (current > max * 0.7) {
+                counter.style.color = '#ffc107';
+            } else {
+                counter.style.color = '#6c757d';
+            }
+        }
+
+        window.addEventListener('DOMContentLoaded', () => {
+            toggleFields(); // Run on load
+
+            // Bind change event
+            const punishmentSelect = document.getElementById("punishmentType");
+            if (punishmentSelect) {
+                punishmentSelect.addEventListener("change", toggleFields);
+            }
+
+            // Init counter
+            const summaryField = document.getElementById("caseSummary");
+            if (summaryField) {
+                summaryField.addEventListener("input", updateCounter);
+                updateCounter();
+            }
+        });
+    </script>
+</head>
+<body>
+<div class="form-container">
+    <h2 class="form-title">Criminal Report</h2>
+
+    <form th:action="@{/reports/add/criminal}" method="post">
+        <input type="hidden" name="personId" th:value="${person.personId}"/>
+
+        <!-- Case Summary -->
+        <div class="form-group">
+            <label for="caseSummary" class="form-label">Case Summary</label>
+            <textarea id="caseSummary" name="caseSummary" class="form-control" rows="3" required
+                      placeholder="Provide a brief summary of the criminal case, including key details and circumstances..."
+                      maxlength="800" oninput="updateCounter()"></textarea>
+            <div class="summary-counter" id="charCounter">0 / 800 characters</div>
+        </div>
+
+        <!-- Location -->
+        <div class="form-group">
+            <label for="location" class="form-label">Location</label>
+            <input type="text" id="location" name="location" class="form-control" required
+                   placeholder="e.g., New York, NY or 123 Main Street">
+        </div>
+
+        <!-- Is Resolved -->
+        <div class="form-group">
+            <label for="isResolved" class="form-label">Case Status</label>
+            <select id="isResolved" name="isResolved" class="form-control" required>
+                <option value="">Select case status</option>
+                <option value="true">Resolved</option>
+                <option value="false">Pending</option>
+            </select>
+        </div>
+
+        <!-- Crime Type -->
+        <div class="form-group">
+            <label for="crimeTypeId" class="form-label">Crime Type</label>
+            <select id="crimeTypeId" name="crimeTypeId" class="form-control" required>
+                <option value="">Select crime type</option>
+                <option th:each="crime : ${crimeTypes}"
+                        th:value="${crime.crimeTypeId}"
+                        th:text="${crime.label} + ' - ' + ${crime.severityLevel.toString()} + ' severity level'">
+                </option>
+            </select>
+        </div>
+
+        <!-- Punishment Type -->
+        <div class="form-group">
+            <label for="punishmentType" class="form-label">Punishment Type</label>
+            <select id="punishmentType" name="punishmentType" class="form-control" required>
+                <option value="">Select punishment type</option>
+                <option th:each="type : ${punishmentTypes}"
+                        th:value="${type.name()}"
+                        th:text="${type.name()}">
+                </option>
+            </select>
+        </div>
+
+        <!-- Fine to Pay -->
+        <div class="form-group fine-symbol">
+            <label for="fineToPay" class="form-label">Fine Amount</label>
+            <input type="number" step="0.01" id="fineToPay" name="fineToPay" class="form-control"
+                   placeholder="Enter fine amount" style="padding-right: 40px;">
+            <div class="help-text">Only applicable for fine-based punishments</div>
+        </div>
+
+        <!-- Release Date -->
+        <div class="form-group">
+            <label for="releaseDate" class="form-label">Release Date</label>
+            <input type="date" id="releaseDate" name="releaseDate" class="form-control">
+            <div class="help-text">Only applicable for prison sentences</div>
+        </div>
+
+        <div class="button-group">
+            <button type="submit" class="btn-primary">Submit Report</button>
+            <a th:href="@{/{id}(id=${person.getPersonId()})}" class="btn btn-secondary">Cancel</a>
+        </div>
+    </form>
+</div>
+</body>
+</html>
