diff --git a/src/main/java/com/projet/projetIndu/entities/Appointment.java b/src/main/java/com/projet/projetIndu/entities/Appointment.java
index 0b8fead5e0b789ec4592dc6e769fb56d38b793e5..db74bfeb5727f407db6f4ae4a22acf967ad5ea3d 100644
--- a/src/main/java/com/projet/projetIndu/entities/Appointment.java
+++ b/src/main/java/com/projet/projetIndu/entities/Appointment.java
@@ -21,11 +21,15 @@ public class Appointment {
 
     @ManyToOne
     @JoinColumn(name = "patient_id", nullable = false)
-    private Patient patient; //clé étrangère vers Patient
+    private Patient patient;
 
     @ManyToOne
     @JoinColumn(name = "doctor_id", nullable = false)
-    private Doctor doctor; //clé étrangère vers Doctor
+    private Doctor doctor;
+
+    @OneToOne
+    @JoinColumn(name = "invoice_id", nullable = false)
+    private Invoice invoice;
 
     @DateTimeFormat(pattern = "dd/MM/yyyy HH:mm")
     @Column(nullable = false, updatable = false)
diff --git a/src/main/java/com/projet/projetIndu/entities/Doctor.java b/src/main/java/com/projet/projetIndu/entities/Doctor.java
index 7da0a7541443949a80acece2a6bf52e9ca397679..5ac0d61f52caab8281dd5c95418f280639a502d2 100644
--- a/src/main/java/com/projet/projetIndu/entities/Doctor.java
+++ b/src/main/java/com/projet/projetIndu/entities/Doctor.java
@@ -12,36 +12,14 @@ import java.time.LocalDateTime;
 @Getter
 @Setter
 @NoArgsConstructor
-public class Doctor {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @Column(nullable = false)
-    private String firstName;
-
-    @Column(nullable = false)
-    private String lastName;
-
+public class Doctor extends User {
     private String speciality;
 
-    @Column(unique = true, nullable = false)
-    private String email;
-
-    private String phone;
-    private String address;
 
-    @Column(nullable = false, updatable = false)
-    private LocalDateTime createdAt = LocalDateTime.now();
-
-
-    ///  Pour le codage en dur (à retirer ensuite)
-    public Doctor(String firstName, String lastName, String speciality, String email) {
-        this.firstName = firstName;
-        this.lastName = lastName;
+    public Doctor(String firstName, String lastName, String phoneNumber, String email, String address, String username, String password, Role role) {
+        super(firstName, lastName, phoneNumber, email, address, username, password, role);
         this.speciality = speciality;
-        this.email = email;
     }
 
-}
+
+    }
diff --git a/src/main/java/com/projet/projetIndu/entities/MedicalHistory.java b/src/main/java/com/projet/projetIndu/entities/HealthHistorical.java
similarity index 74%
rename from src/main/java/com/projet/projetIndu/entities/MedicalHistory.java
rename to src/main/java/com/projet/projetIndu/entities/HealthHistorical.java
index 902e20a34e8465578c59e54ecaacfe5932fd037d..6ee646eb12c40f220cf10f619b24af42263684bd 100644
--- a/src/main/java/com/projet/projetIndu/entities/MedicalHistory.java
+++ b/src/main/java/com/projet/projetIndu/entities/HealthHistorical.java
@@ -11,15 +11,13 @@ import java.time.LocalDate;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-class MedicalHistory {
+class HealthHistorical {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
-    private String history;
+
+    private String antecedent;
     private String notes;
     private LocalDate consultationDate;
 
-    @ManyToOne
-    @JoinColumn(name = "patient_id")
-    private Patient patient;
 }
\ No newline at end of file
diff --git a/src/main/java/com/projet/projetIndu/entities/Invoice.java b/src/main/java/com/projet/projetIndu/entities/Invoice.java
index 855839ac965847dc8f35dd95ab1120655a3f78c6..af8b413d70da5d96259159d0ac97364fb9c76e2d 100644
--- a/src/main/java/com/projet/projetIndu/entities/Invoice.java
+++ b/src/main/java/com/projet/projetIndu/entities/Invoice.java
@@ -18,14 +18,6 @@ public class Invoice {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
-    @ManyToOne
-    @JoinColumn(name = "patient_id", nullable = false)
-    private Patient patient; //clé étrangère vers Patient
-
-    @ManyToOne
-    @JoinColumn(name = "doctor_id", nullable = false)
-    private Doctor doctor; //clé étrangère vers Doctor
-
     @Column(nullable = false)
     private double amount;
 
diff --git a/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java b/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java
index 919b9b705942ca9b467e3416690c9101d2e1653e..2dba3ee5677ab45a89dd272e59df0f8cbe0b7e5e 100644
--- a/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java
+++ b/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java
@@ -20,7 +20,4 @@ public class MedicalDocument {
     @Column(columnDefinition = "LONGBLOB")
     private byte[] fileData;
 
-    @ManyToOne
-    @JoinColumn(name = "medical_file_id")
-    private MedicalFiles medicalFile;
 }
diff --git a/src/main/java/com/projet/projetIndu/entities/MedicalFiles.java b/src/main/java/com/projet/projetIndu/entities/MedicalFiles.java
index 00a1415b5134b7b8d592b6263da0c57b69c8e436..ab3cf39b445c5c1aa89ac68c61747e75b7f7c9b3 100644
--- a/src/main/java/com/projet/projetIndu/entities/MedicalFiles.java
+++ b/src/main/java/com/projet/projetIndu/entities/MedicalFiles.java
@@ -20,27 +20,24 @@ public class MedicalFiles {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
-    @ManyToOne
-    @JoinColumn(name = "patient_id", nullable = false)
-    private Patient patient; //clé étrangère vers Patient
+    private String allergy;
+    private String treatment;
 
-    @ManyToOne
-    @JoinColumn(name = "doctor_id", nullable = false)
-    private Doctor doctor; //clé étrangère vers Doctor
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<HealthHistorical> healthHistoricalList = new ArrayList<>();
 
-    @Column(nullable = false, columnDefinition = "TEXT")
-    private String history;
+    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
+    @JoinColumn(name = "patient_id", nullable = false)
+    private Patient patient;
 
-    @OneToMany(mappedBy = "medicalFile", cascade = CascadeType.ALL, orphanRemoval = true)
-    private List<MedicalDocument> documents = new ArrayList<>();
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<MedicalDocument> documentList = new ArrayList<>();
 
     @Column(nullable = false, updatable = false)
     private LocalDateTime createdAt = LocalDateTime.now();
 
 
-    public MedicalFiles(Patient patient, Doctor doctor, String history) {
+    public MedicalFiles(Patient patient) {
         this.patient = patient;
-        this.doctor = doctor;
-        this.history = history;
     }
 }
diff --git a/src/main/java/com/projet/projetIndu/entities/MedicalRecord.java b/src/main/java/com/projet/projetIndu/entities/MedicalRecord.java
deleted file mode 100644
index 9605f4d890bd29dae4b3cb187d8a3b18094326ba..0000000000000000000000000000000000000000
--- a/src/main/java/com/projet/projetIndu/entities/MedicalRecord.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.projet.projetIndu.entities;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.time.LocalDateTime;
-
-@Entity
-@Table(name = "medical_records")
-@Getter
-@Setter
-@NoArgsConstructor
-class MedicalRecord {
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @ManyToOne
-    @JoinColumn(name = "patient_id", nullable = false)
-    private Patient patient;
-
-    private String recordType;
-    private String description;
-    private LocalDateTime recordDate = LocalDateTime.now();
-}
diff --git a/src/main/java/com/projet/projetIndu/entities/Notification.java b/src/main/java/com/projet/projetIndu/entities/Notification.java
index 9abd44b341bfb03490198c1d1b38e36dd43e1a95..3076f3a2012911a95de403078a2c3f860c087cb3 100644
--- a/src/main/java/com/projet/projetIndu/entities/Notification.java
+++ b/src/main/java/com/projet/projetIndu/entities/Notification.java
@@ -18,10 +18,6 @@ public class Notification {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
-    @ManyToOne
-    @JoinColumn(name = "user_id", nullable = false)
-    private User user; //clé étrangère vers User
-
     @Column(columnDefinition = "TEXT")
     private String content;
 
diff --git a/src/main/java/com/projet/projetIndu/entities/Patient.java b/src/main/java/com/projet/projetIndu/entities/Patient.java
index 45679c12ea7c54c5a9ae20ca9ed7ee696dec7672..8765aef4161baa280fe13098753b62481d6cbf61 100644
--- a/src/main/java/com/projet/projetIndu/entities/Patient.java
+++ b/src/main/java/com/projet/projetIndu/entities/Patient.java
@@ -4,6 +4,7 @@ import jakarta.persistence.*;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+import org.springframework.data.domain.Auditable;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -15,47 +16,17 @@ import java.util.List;
 @Getter
 @Setter
 @NoArgsConstructor
-public class Patient {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @Column(nullable = false)
-    private String firstName;
-
-    @Column(nullable = false)
-    private String lastName;
+public class Patient extends User {
 
     @Column(nullable = false)
     private LocalDate dateOfBirth;
 
 
-    private String phoneNumber;
+    public Patient(String firstName, String lastName, String phoneNumber, String email, String address, String username, String password, Role role) {
+        super(firstName, lastName, phoneNumber, email, address, username, password, role);
+        this.dateOfBirth = LocalDate.now();
 
-    @Column(unique = true, nullable = false)
-    private String email;
-
-    private String address;
-    private String allergy;
-    private String treatment;
-
-    @Column(nullable = false, updatable = false)
-    private LocalDateTime createdAt = LocalDateTime.now();
-
-    @OneToMany(mappedBy = "patient", cascade = CascadeType.ALL)
-    private List<MedicalRecord> medicalRecords;
-
-    public Patient(/*Long id,*/ String firstName, String lastName, LocalDate dateOfBirth, String phoneNumber, String email, String address, String allergy, String treatment) {
-        /*this.id = id;*/
-        this.firstName = firstName;
-        this.lastName = lastName;
-        this.dateOfBirth = dateOfBirth;
-        this.phoneNumber = phoneNumber;
-        this.email = email;
-        this.address = address;
-        this.allergy = allergy;
-        this.treatment = treatment;
     }
 
+
 }
diff --git a/src/main/java/com/projet/projetIndu/entities/Statistic.java b/src/main/java/com/projet/projetIndu/entities/Statistic.java
index 8f64f9b94fbda13b8e9d29ef155af67054c38658..2dd50fce1eb2c74b7cffd7163c50e12f9c49e835 100644
--- a/src/main/java/com/projet/projetIndu/entities/Statistic.java
+++ b/src/main/java/com/projet/projetIndu/entities/Statistic.java
@@ -22,7 +22,7 @@ public class Statistic {
 
     @ManyToOne
     @JoinColumn(name = "doctor_id", nullable = false)
-    private Doctor doctor; //clé étrangère vers Doctor
+    private Doctor doctor;
 
     @Column(nullable = false)
     private LocalDate date;
diff --git a/src/main/java/com/projet/projetIndu/entities/User.java b/src/main/java/com/projet/projetIndu/entities/User.java
index 4446bd8bc5f637483beb328e88b1a133becd9ecf..6d0b0f8cc5d67610431ad2644ea87b71dcd833cc 100644
--- a/src/main/java/com/projet/projetIndu/entities/User.java
+++ b/src/main/java/com/projet/projetIndu/entities/User.java
@@ -6,17 +6,30 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 
 @Entity
 @Table(name = "users")
 @Getter
 @Setter
 @NoArgsConstructor
-public class User {
+@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+@DiscriminatorColumn(name = "role", discriminatorType = DiscriminatorType.STRING)
+abstract class User {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
+    @Column(nullable = false)
+    private String firstName;
+    @Column(nullable = false)
+    private String lastName;
+    private String phoneNumber;
+    @Column(unique = true, nullable = false)
+    private String email;
+    private String address;
+
     @Column(nullable = false, unique = true)
     private String username;
 
@@ -27,18 +40,18 @@ public class User {
     @Column(nullable = false)
     private Role role;
 
-    @ManyToOne
-    @JoinColumn(name = "medecin_id")
-    private Doctor doctor;
-
-    @ManyToOne
-    @JoinColumn(name = "patient_id")
-    private Patient patient;
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<Notification> notificationList = new ArrayList<>();
 
     @Column(nullable = false, updatable = false)
     private LocalDateTime createdAt = LocalDateTime.now();
 
-    public User(String username, String password, Role role) {
+    protected User(String firstName, String lastName, String phoneNumber, String email, String address, String username, String password, Role role) {
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.phoneNumber = phoneNumber;
+        this.email = email;
+        this.address = address;
         this.username = username;
         this.password = password;
         this.role = role;