Index: src/main/java/apps/spring/reportium/entity/Diagnosis.java
===================================================================
--- src/main/java/apps/spring/reportium/entity/Diagnosis.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
+++ src/main/java/apps/spring/reportium/entity/Diagnosis.java	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -4,4 +4,6 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
 /*
 create table Diagnosis(
@@ -17,9 +19,10 @@
 @Entity
 @Table(name = "Diagnosis")
+@NoArgsConstructor
 public class Diagnosis {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "diagnosis_id")
-    private int diagnosisId;
+    private Integer diagnosisId;
 
     @Column(nullable = false, name = "short_description", columnDefinition = "TEXT")
@@ -35,3 +38,10 @@
     @Enumerated(EnumType.STRING)
     private SeverityLevel severityLevel;
+
+    public Diagnosis(String shortDescription, String therapy, boolean isChronic, SeverityLevel severityLevel) {
+        this.shortDescription = shortDescription;
+        this.therapy = therapy;
+        this.isChronic = isChronic;
+        this.severityLevel = severityLevel;
+    }
 }
Index: src/main/java/apps/spring/reportium/entity/MedicalReportDiagnosis.java
===================================================================
--- src/main/java/apps/spring/reportium/entity/MedicalReportDiagnosis.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
+++ src/main/java/apps/spring/reportium/entity/MedicalReportDiagnosis.java	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -4,4 +4,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.time.LocalDate;
@@ -24,4 +25,5 @@
         }
 )
+@NoArgsConstructor
 public class MedicalReportDiagnosis {
     @Id
@@ -39,3 +41,4 @@
     @Column(name = "added_on")
     private LocalDate addedOn = LocalDate.now();
+
 }
Index: src/main/java/apps/spring/reportium/service/ReportService.java
===================================================================
--- src/main/java/apps/spring/reportium/service/ReportService.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
+++ src/main/java/apps/spring/reportium/service/ReportService.java	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -16,14 +16,23 @@
 public interface ReportService {
     List<Report> findAll();
+
     List<AcademicReportPerPersonDTO> getAcademicReports(Long personId);
+
     List<MedicalReportPerPersonDTO> getMedicalReports(Long personId);
+
     List<EmploymentReportPerPersonDTO> getEmploymentReports(Long personId);
+
     List<CrimeReportPerPersonDTO> getCriminalReports(Long personId);
-//    Page<Report> findPage(Integer reportId, Integer pageNum, Integer pageSize);
+
     Page<Report> findPaginatedReports(int page, int size, String sortField, String sortDir);
+
     List<Report> getReportsByAdvancedFilter(ReportFilterDTO filter);
 
-    void saveNewEmploymentReport(Long personId, LocalDate startDate, LocalDate endDate,String jobRole, BigDecimal income, String summary);
+    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);
+
+    void saveNewMedicalReport(Long personId, String summary, Long doctorId, LocalDate nextControlDate, List<Long> diagnosisIds);
 }
Index: src/main/java/apps/spring/reportium/service/impl/ReportServiceImplementation.java
===================================================================
--- src/main/java/apps/spring/reportium/service/impl/ReportServiceImplementation.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
+++ src/main/java/apps/spring/reportium/service/impl/ReportServiceImplementation.java	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -18,6 +18,10 @@
 
 import java.math.BigDecimal;
+import java.sql.Array;
+import java.sql.Connection;
+import java.sql.SQLException;
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Objects;
 
 @Service
@@ -81,13 +85,4 @@
                                         BigDecimal income,
                                         String summary) {
-
-        System.out.println("Calling stored procedure with:");
-        System.out.println("personId = " + personId);
-        System.out.println("startDate = " + startDate);
-        System.out.println("endDate = " + endDate);
-        System.out.println("jobRole = " + jobRole);
-        System.out.println("income = " + income);
-        System.out.println("summary = " + summary);
-
         jdbcTemplate.update(
                 "CALL insert_employment_report(?::integer, ?::date, ?::date, ?::text, ?::numeric, ?::text)",
@@ -108,10 +103,4 @@
                                       String academicField,
                                       String descriptionOfReport) {
-        System.out.println("Calling stored procedure with:");
-        System.out.println("personId = " + personId);
-        System.out.println("institution_id = " + institution_id);
-        System.out.println("academicField = " + academicField);
-        System.out.println("descriptionOfReport = " + descriptionOfReport);
-
         jdbcTemplate.update(
                 "CALL insert_academic_report(?::INT, ?::INT, ?::TEXT, ?::TEXT)",
@@ -125,13 +114,4 @@
     @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)",
@@ -147,4 +127,23 @@
     }
 
+    @Override
+    public void saveNewMedicalReport(Long personId, String summary, Long doctorId, LocalDate nextControlDate, List<Long> diagnosisIds) {
+        try (Connection conn = Objects.requireNonNull(jdbcTemplate.getDataSource()).getConnection()) {
+            Array diagnosisArray = conn.createArrayOf("INTEGER",
+                    diagnosisIds != null ? diagnosisIds.toArray(new Long[0]) : new Long[0]);
+
+            jdbcTemplate.update(
+                    "CALL insert_medical_report(?::INT, ?::TEXT, ?::INT, ?::DATE, ?::INT[])",
+                    personId,
+                    summary,
+                    doctorId,
+                    nextControlDate,
+                    diagnosisArray
+            );
+        } catch (SQLException e) {
+            throw new RuntimeException("Error executing insert_medical_report", e);
+        }
+    }
+
 
 }
Index: src/main/java/apps/spring/reportium/web/DiagnosisController.java
===================================================================
--- src/main/java/apps/spring/reportium/web/DiagnosisController.java	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
+++ src/main/java/apps/spring/reportium/web/DiagnosisController.java	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -0,0 +1,38 @@
+package apps.spring.reportium.web;
+
+import apps.spring.reportium.entity.Diagnosis;
+import apps.spring.reportium.entity.enumerations.SeverityLevel;
+import apps.spring.reportium.repository.DiagnosisRepository;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+@Controller
+@RequestMapping("/diagnosis")
+public class DiagnosisController {
+    private final DiagnosisRepository diagnosisRepository;
+
+    public DiagnosisController(DiagnosisRepository diagnosisRepository) {
+        this.diagnosisRepository = diagnosisRepository;
+    }
+
+    @GetMapping("/create")
+    public String createDiagnosis(@RequestParam Long personId,
+                                  Model model) {
+        model.addAttribute("personId", personId);
+        model.addAttribute("severityLevels", SeverityLevel.values());
+        model.addAttribute("diagnosis", diagnosisRepository.findAll());
+        return "create_diagnosis";
+    }
+
+    @PostMapping
+    public String addDiagnosis(@RequestParam Long personId,
+                               @RequestParam String description,
+                               @RequestParam String therapy,
+                               @RequestParam Boolean isChronic,
+                               @RequestParam SeverityLevel severityLevel) {
+        Diagnosis diagnosis = new Diagnosis(description, therapy, isChronic, severityLevel);
+        diagnosisRepository.save(diagnosis);
+        return "redirect:/reports/add/medical?personId=" + personId;
+    }
+}
Index: src/main/java/apps/spring/reportium/web/ReportsController.java
===================================================================
--- src/main/java/apps/spring/reportium/web/ReportsController.java	(revision 6091df5c83202bdf77c8d1f8743b076511966012)
+++ src/main/java/apps/spring/reportium/web/ReportsController.java	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -1,10 +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.*;
 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.DiagnosisRepository;
+import apps.spring.reportium.repository.DoctorRepository;
 import apps.spring.reportium.repository.InstitutionRepository;
 import apps.spring.reportium.service.PersonService;
@@ -26,10 +26,16 @@
     private final InstitutionRepository institutionRepository;
     private final CrimeTypeRepository crimeTypeRepository;
-    public ReportsController(ReportService reportService, PersonService personService, InstitutionRepository institutionRepository, CrimeTypeRepository crimeTypeRepository) {
+    private final DoctorRepository doctorRepository;
+    private final DiagnosisRepository diagnosisRepository;
+
+    public ReportsController(ReportService reportService, PersonService personService, InstitutionRepository institutionRepository, CrimeTypeRepository crimeTypeRepository, DoctorRepository doctorRepository, DiagnosisRepository diagnosisRepository) {
         this.reportService = reportService;
         this.personService = personService;
         this.institutionRepository = institutionRepository;
         this.crimeTypeRepository = crimeTypeRepository;
+        this.doctorRepository = doctorRepository;
+        this.diagnosisRepository = diagnosisRepository;
     }
+
     @GetMapping
     public String listReports(Model model,
@@ -54,23 +60,14 @@
         Person person = personService.findById(personId.intValue());
         model.addAttribute("person", person);
-        System.out.println(personId);
         return "new_employment_report";
     }
+
     @PostMapping("/add/employment")
     public String submitEmploymentData(@RequestParam Long personId,
                                        @RequestParam LocalDate startDate,
-                                       @RequestParam (required = false) LocalDate endDate,
+                                       @RequestParam(required = false) LocalDate endDate,
                                        @RequestParam String jobRole,
                                        @RequestParam BigDecimal income,
                                        @RequestParam String summary) {
-        System.out.printf(
-                "EMPLOYMENT FORM DATA%nPerson ID: %d%nStart Date: %s%nEnd Date: %s%nJob Role: %s%nIncome: %s%nSummary: %s%n%n",
-                personId,
-                startDate,
-                endDate != null ? endDate.toString() : "null",
-                jobRole,
-                income.toString(),
-                summary
-        );
         reportService.saveNewEmploymentReport(personId, startDate, endDate, jobRole, income, summary);
         return "redirect:/" + personId;
@@ -83,7 +80,7 @@
         model.addAttribute("person", person);
         model.addAttribute("institutions", institutionRepository.findAll());
-        System.out.println(personId);
         return "new_academic_report";
     }
+
     @PostMapping("/add/academic")
     public String submitAcademicData(@RequestParam Long personId,
@@ -112,9 +109,26 @@
                                      @RequestParam Long crimeTypeId,
                                      @RequestParam PunishmentType punishmentType,
-                                     @RequestParam (required = false) Double fineToPay,
-                                     @RequestParam (required = false) LocalDate releaseDate) {
+                                     @RequestParam(required = false) Double fineToPay,
+                                     @RequestParam(required = false) LocalDate releaseDate) {
         reportService.saveNewCriminalReport(personId, caseSummary, location, isResolved, crimeTypeId, punishmentType, fineToPay, releaseDate);
         return "redirect:/" + personId;
     }
-   //TODO("Same as Employment, but for Medical, Academic and Criminal Report to be added.")
+
+    @GetMapping("/add/medical")
+    public String createMedicalReport(@RequestParam Long personId, Model model) {
+        Person person = personService.findById(personId.intValue());
+        model.addAttribute("person", person);
+        model.addAttribute("doctors", doctorRepository.findAll());
+        model.addAttribute("diagnoses", diagnosisRepository.findAll());
+        return "new_medical_report";
+    }
+    @PostMapping("/add/medical")
+    public String submitMedicalData(@RequestParam Long personId,
+                                     @RequestParam String summary,
+                                     @RequestParam Long doctorId,
+                                     @RequestParam (required = false) LocalDate nextControlDate,
+                                     @RequestParam (required = false) List<Long> diagnosisIds) {
+        reportService.saveNewMedicalReport(personId, summary, doctorId, nextControlDate, diagnosisIds);
+        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 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -16,13 +16,13 @@
     new_punishment_id INT;
 BEGIN
-    IF NOT EXISTS (
-        SELECT 1 FROM person WHERE person_id = param_person_id
-    ) THEN
+    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
+    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;
Index: src/main/resources/sql_queries/procedure_new_medical_report.sql
===================================================================
--- src/main/resources/sql_queries/procedure_new_medical_report.sql	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
+++ src/main/resources/sql_queries/procedure_new_medical_report.sql	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -0,0 +1,48 @@
+CREATE OR REPLACE PROCEDURE insert_medical_report(
+    IN param_person_id INT,
+    IN param_summary TEXT,
+    IN param_doctor_id INT,
+    IN param_next_control_date DATE,
+    IN param_diagnosis_ids INT[]
+)
+    LANGUAGE plpgsql
+AS
+$$
+DECLARE
+    new_report_id         INT;
+    variable_diagnosis_id INT;
+BEGIN
+    --check if person exists
+    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;
+    --check if doctor exists
+    IF NOT EXISTS (SELECT 1 FROM doctor WHERE doctor_id = param_doctor_id) THEN
+        RAISE EXCEPTION 'Doctor with ID % does not exist', param_doctor_id;
+    END IF;
+
+    --make the generic report first
+    INSERT INTO report (report_type, summary, created_at, person_id)
+    VALUES ('Medical', param_summary, CURRENT_TIMESTAMP, param_person_id)
+    RETURNING report_id INTO new_report_id;
+
+    --create the medical report
+    INSERT INTO medicalreport (report_id, doctor_id, next_control_date)
+    VALUES (new_report_id, param_doctor_id, param_next_control_date);
+
+    --add in the m to n relation now medical-report <-> diagnosis
+    IF param_diagnosis_ids IS NOT NULL THEN
+        FOREACH variable_diagnosis_id IN ARRAY param_diagnosis_ids
+            LOOP
+                IF NOT EXISTS (SELECT 1 FROM diagnosis WHERE variable_diagnosis_id = variable_diagnosis_id) THEN
+                    RAISE EXCEPTION 'Diagnosis ID % does not exist', variable_diagnosis_id;
+                END IF;
+                INSERT INTO medicalreport_diagnosis (report_id, diagnosis_id, added_on)
+                VALUES (new_report_id, variable_diagnosis_id, CURRENT_TIMESTAMP);
+            END LOOP;
+    END IF;
+
+END;
+$$;
Index: src/main/resources/templates/create_diagnosis.html
===================================================================
--- src/main/resources/templates/create_diagnosis.html	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
+++ src/main/resources/templates/create_diagnosis.html	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Create Diagnosis</title>
+    <style>
+        * {
+            margin: 0;
+            padding: 0;
+            box-sizing: border-box;
+        }
+
+        body {
+            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+            min-height: 100vh;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            padding: 20px;
+        }
+
+        .form-container {
+            background: white;
+            padding: 40px;
+            border-radius: 15px;
+            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
+            max-width: 600px;
+            width: 100%;
+        }
+
+        h2 {
+            color: #333;
+            text-align: center;
+            margin-bottom: 30px;
+            font-size: 28px;
+            font-weight: 600;
+        }
+
+        .form-group {
+            margin-bottom: 25px;
+        }
+
+        .form-label {
+            display: block;
+            margin-bottom: 8px;
+            color: #555;
+            font-weight: 500;
+            font-size: 14px;
+        }
+
+        .form-control {
+            width: 100%;
+            padding: 12px 16px;
+            border: 2px solid #e1e5e9;
+            border-radius: 8px;
+            font-size: 14px;
+            font-family: inherit;
+            transition: border-color 0.3s ease, box-shadow 0.3s ease;
+            background-color: #fafbfc;
+        }
+
+        .form-control:focus {
+            outline: none;
+            border-color: #667eea;
+            box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
+            background-color: white;
+        }
+
+        textarea.form-control {
+            resize: vertical;
+            min-height: 100px;
+        }
+
+        select.form-control {
+            cursor: pointer;
+        }
+
+        .buttons {
+            display: flex;
+            gap: 15px;
+            justify-content: center;
+            margin-top: 35px;
+        }
+
+        button {
+            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+            color: white;
+            border: none;
+            padding: 14px 30px;
+            border-radius: 8px;
+            font-size: 16px;
+            font-weight: 600;
+            cursor: pointer;
+            transition: transform 0.2s ease, box-shadow 0.2s ease;
+            min-width: 120px;
+        }
+
+        button:hover {
+            transform: translateY(-2px);
+            box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
+        }
+
+        button:active {
+            transform: translateY(0);
+        }
+
+        /* Responsive design */
+        @media (max-width: 768px) {
+            .form-container {
+                padding: 30px 20px;
+                margin: 10px;
+            }
+
+            h2 {
+                font-size: 24px;
+            }
+
+            .buttons {
+                flex-direction: column;
+                align-items: center;
+            }
+
+            button {
+                width: 100%;
+                max-width: 200px;
+            }
+        }
+
+        select.form-control {
+            background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
+            background-position: right 12px center;
+            background-repeat: no-repeat;
+            background-size: 16px;
+            padding-right: 40px;
+            appearance: none;
+        }
+
+        /* Required field indicator */
+        .form-label::after {
+            content: " *";
+            color: #dc3545;
+        }
+    </style>
+</head>
+<body>
+<div class="form-container">
+    <h2>Create New Diagnosis</h2>
+    <form th:action="@{/diagnosis}" method="post">
+        <!--  Diagnosis Creation invoked while creating a medical report for the person with the following id -->
+        <input type="hidden" name="personId" th:value="${personId}"/>
+        <!--  Description-->
+        <div class="form-group">
+            <label for="description" class="form-label">Describe the Diagnosis</label>
+            <textarea id="description" name="description" class="form-control" rows="4" required
+                      maxlength="800" placeholder="Enter detailed description of the diagnosis..."></textarea>
+        </div>
+        <!--  Therapy-->
+        <div class="form-group">
+            <label for="therapy" class="form-label">Describe the Therapy for the Diagnosis</label>
+            <textarea id="therapy" name="therapy" class="form-control" rows="2" required
+                      maxlength="200" placeholder="Enter therapy recommendations..."></textarea>
+        </div>
+        <!--  Is Chronic-->
+        <div class="form-group">
+            <label for="isChronic" class="form-label">Is Diagnosis Chronic</label>
+            <select id="isChronic" name="isChronic" class="form-control" required>
+                <option value="">Select status</option>
+                <option value="true">Yes</option>
+                <option value="false">No</option>
+            </select>
+        </div>
+        <!--  Severity Level-->
+        <div class="form-group">
+            <label for="severityLevel" class="form-label">Severity Level</label>
+            <select id="severityLevel" name="severityLevel" class="form-control" required>
+                <option value="">Select severity of diagnosis</option>
+                <option th:each="severity : ${severityLevels}"
+                        th:value="${severity.name()}"
+                        th:text="${severity.name()}">
+                </option>
+            </select>
+        </div>
+        <div class="buttons">
+            <button type="submit">Create Diagnosis</button>
+        </div>
+    </form>
+</div>
+</body>
+</html>
Index: src/main/resources/templates/new_medical_report.html
===================================================================
--- src/main/resources/templates/new_medical_report.html	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
+++ src/main/resources/templates/new_medical_report.html	(revision 6f1747cfff7e46842571377b2d66216744ec1774)
@@ -0,0 +1,346 @@
+<!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 New Medical 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;
+        }
+
+        select.form-control {
+            cursor: pointer;
+        }
+
+        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;
+        }
+
+        .btn-outline {
+            background: transparent;
+            border: 2px solid var(--blue);
+            border-radius: 10px;
+            padding: 0.75rem 2rem;
+            font-weight: 600;
+            color: var(--blue);
+            transition: all 0.3s ease;
+            text-decoration: none;
+            display: inline-block;
+            cursor: pointer;
+            font-size: 1rem;
+        }
+
+        .btn-outline:hover {
+            background: var(--blue);
+            color: white;
+            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;
+        }
+
+        .checkbox-group {
+            background: var(--light-gray);
+            border-radius: 10px;
+            padding: 1rem;
+            margin-bottom: 1rem;
+        }
+
+        .checkbox-item {
+            display: flex;
+            align-items: center;
+            margin-bottom: 0.75rem;
+            padding: 0.5rem;
+            border-radius: 8px;
+            transition: background-color 0.2s ease;
+        }
+
+        .checkbox-item:hover {
+            background-color: white;
+        }
+
+        .checkbox-item:last-child {
+            margin-bottom: 0;
+        }
+
+        .checkbox-item input[type="checkbox"] {
+            width: 18px;
+            height: 18px;
+            margin-right: 0.75rem;
+            accent-color: var(--blue);
+            cursor: pointer;
+        }
+
+        .checkbox-item label {
+            color: var(--dark-blue);
+            font-weight: 500;
+            cursor: pointer;
+            margin: 0;
+            flex-grow: 1;
+        }
+
+        .section-title {
+            color: var(--dark-blue);
+            font-weight: 600;
+            font-size: 1.1rem;
+            margin-bottom: 1rem;
+        }
+
+        @media (max-width: 576px) {
+            body {
+                padding: 10px;
+            }
+
+            .form-container {
+                margin: 1rem auto;
+                padding: 1.5rem;
+            }
+
+            .button-group {
+                flex-direction: column;
+            }
+
+            .btn-primary, .btn-secondary, .btn-outline {
+                width: 100%;
+            }
+        }
+    </style>
+    <script>
+        function updateCounter() {
+            const textarea = document.getElementById('summary');
+            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';
+            }
+        }
+
+        // Initialize counter on page load
+        document.addEventListener('DOMContentLoaded', function() {
+            updateCounter();
+        });
+    </script>
+</head>
+<body>
+<div class="form-container">
+    <h2 class="form-title">Medical Report</h2>
+
+    <form th:action="@{/reports/add/medical}" method="post">
+        <input type="hidden" name="personId" th:value="${person.personId}"/>
+
+        <!-- Summary -->
+        <div class="form-group">
+            <label for="summary" class="form-label">Medical Case Description</label>
+            <textarea id="summary" name="summary" class="form-control" rows="4" required
+                      maxlength="800" placeholder="Provide a detailed description of the medical case, symptoms, treatment, and any relevant medical history..."
+                      oninput="updateCounter()"></textarea>
+            <div class="summary-counter" id="charCounter">0 / 800 characters</div>
+        </div>
+
+        <!-- Next Appointment -->
+        <div class="form-group">
+            <label for="nextControlDate" class="form-label">Next Appointment Date</label>
+            <input type="date" id="nextControlDate" name="nextControlDate" class="form-control">
+            <div class="help-text">Optional: Schedule follow-up appointment</div>
+        </div>
+
+        <!-- Doctor -->
+        <div class="form-group">
+            <label for="doctorId" class="form-label">Attending Doctor</label>
+            <select name="doctorId" id="doctorId" class="form-control" required>
+                <option value="" disabled selected>Select a doctor</option>
+                <option th:each="doc : ${doctors}"
+                        th:value="${doc.doctorId}"
+                        th:text="${doc.name + ' ' + doc.surname + ' - ' + doc.specialization.toString()}"></option>
+            </select>
+        </div>
+
+        <!-- Diagnoses -->
+        <div class="form-group">
+            <div class="section-title">Select Diagnoses</div>
+            <div class="checkbox-group">
+                <div th:each="diag : ${diagnoses}" class="checkbox-item">
+                    <input type="checkbox"
+                           name="diagnosisIds"
+                           th:value="${diag.diagnosisId}"
+                           th:id="${'diag-' + diag.diagnosisId}"/>
+                    <label th:for="${'diag-' + diag.diagnosisId}" th:text="${diag.shortDescription}">Diagnosis</label>
+                </div>
+            </div>
+            <!-- Add Diagnosis Button -->
+            <div style="text-align: center; margin-top: 1rem;">
+                <a th:href="@{/diagnosis/create(personId=${person.getPersonId()})}" class="btn-outline">
+                    + Add New Diagnosis
+                </a>
+            </div>
+        </div>
+
+        <div class="button-group">
+            <button type="submit" class="btn-primary">Submit Medical Report</button>
+            <a th:href="@{/{id}(id=${person.getPersonId()})}" class="btn btn-secondary">Cancel</a>
+        </div>
+    </form>
+</div>
+</body>
+</html>
