Index: pom.xml
===================================================================
--- pom.xml	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ pom.xml	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
@@ -33,9 +32,4 @@
 	<dependencies>
 		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-			<version>3.18.0</version>
-		</dependency>
-		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-security</artifactId>
@@ -64,4 +58,10 @@
 		</dependency>
 		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-docker-compose</artifactId>
+			<scope>runtime</scope>
+			<optional>true</optional>
+		</dependency>
+		<dependency>
 			<groupId>org.postgresql</groupId>
 			<artifactId>postgresql</artifactId>
@@ -71,6 +71,5 @@
 			<groupId>org.projectlombok</groupId>
 			<artifactId>lombok</artifactId>
-			<version>1.18.32</version>
-			<scope>provided</scope>
+			<optional>true</optional>
 		</dependency>
 		<dependency>
@@ -84,40 +83,4 @@
 			<scope>test</scope>
 		</dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context-support</artifactId>
-            <version>6.1.10</version>
-        </dependency>
-
-		<dependency>
-			<groupId>org.springdoc</groupId>
-			<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-			<version>2.5.0</version>
-		</dependency>
-
-		<!-- JWT (JJWT) -->
-		<dependency>
-			<groupId>io.jsonwebtoken</groupId>
-			<artifactId>jjwt-api</artifactId>
-			<version>0.12.5</version>
-		</dependency>
-		<dependency>
-			<groupId>io.jsonwebtoken</groupId>
-			<artifactId>jjwt-impl</artifactId>
-			<version>0.12.5</version>
-			<scope>runtime</scope>
-		</dependency>
-		<dependency>
-			<groupId>io.jsonwebtoken</groupId>
-			<artifactId>jjwt-jackson</artifactId>
-			<version>0.12.5</version>
-			<scope>runtime</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-data-redis</artifactId>
-		</dependency>
-
-
 	</dependencies>
 
@@ -132,5 +95,4 @@
 							<groupId>org.projectlombok</groupId>
 							<artifactId>lombok</artifactId>
-							<version>1.18.32</version>
 						</path>
 					</annotationProcessorPaths>
Index: src/main/java/mk/ukim/finki/synergymed/SynergyMedApplication.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/SynergyMedApplication.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/SynergyMedApplication.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -3,13 +3,6 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
 
 @SpringBootApplication
-@EnableScheduling
 public class SynergyMedApplication {
 
@@ -18,12 +11,3 @@
 	}
 
-	@Bean
-	public PasswordEncoder passwordEncoder() {
-		return new BCryptPasswordEncoder();
-	}
-
-	@Bean
-	public AuthenticationManager authenticationManager(AuthenticationConfiguration cfg) throws Exception {
-		return cfg.getAuthenticationManager();
-	}
 }
Index: c/main/java/mk/ukim/finki/synergymed/config/SecurityConfig.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/config/SecurityConfig.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,40 +1,0 @@
-package mk.ukim.finki.synergymed.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.web.SecurityFilterChain;
-
-@Configuration
-@EnableMethodSecurity
-public class SecurityConfig {
-
-    @Bean
-    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
-        http
-                .csrf(AbstractHttpConfigurer::disable)
-                .authorizeHttpRequests(reg -> reg
-                        .requestMatchers("/", "/login", "/register", "/error", "/css/**", "/js/**", "/uploads/**", "/logo.png", "/catalog").permitAll()
-                        .requestMatchers("/admin/branded-medicines/**", "/admin/companies/3/facilities/**").hasAnyRole("ADMIN","PHARMACIST")
-                        .requestMatchers("/admin/**").hasRole("ADMIN")
-                                .requestMatchers("/pharmacist/**").hasRole("PHARMACIST")
-                        .anyRequest().permitAll()
-                )
-                .formLogin(login -> login
-                        .loginPage("/login")
-                        .defaultSuccessUrl("/profile", true)
-                        .permitAll()
-                )
-                .logout(logout -> logout
-                        .logoutUrl("/logout")
-                        .logoutSuccessUrl("/login?logout")
-                        .permitAll()
-                )
-                .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED));
-
-        return http.build();
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/config/StaticResourceConfig.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/config/StaticResourceConfig.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,19 +1,0 @@
-package mk.ukim.finki.synergymed.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@Configuration
-public class StaticResourceConfig implements WebMvcConfigurer {
-    @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry) {
-        // Serves files from the working directory's ./uploads/... at /uploads/**
-        registry.addResourceHandler("/uploads/**")
-                .addResourceLocations("file:uploads/"); // relative to app working dir or container workdir
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/EmailAlreadyExistsException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/EmailAlreadyExistsException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,7 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class EmailAlreadyExistsException extends RuntimeException{
-    public EmailAlreadyExistsException(String message) {
-        super(message);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/HealthProfileDoesNotExistException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/HealthProfileDoesNotExistException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,9 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class HealthProfileDoesNotExistException extends RuntimeException{
-
-    @Override
-    public String getMessage() {
-        return "Client does not have a health profile.";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/InvalidInputException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/InvalidInputException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,4 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class InvalidInputException extends RuntimeException{
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/MedicineAlreadyExistsException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/MedicineAlreadyExistsException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,4 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class MedicineAlreadyExistsException extends RuntimeException{
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/MedicineDoesNotExistException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/MedicineDoesNotExistException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,4 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class MedicineDoesNotExistException extends RuntimeException{
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/MedicineInteractionAlreadyExistsException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/MedicineInteractionAlreadyExistsException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,4 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class MedicineInteractionAlreadyExistsException extends RuntimeException{
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/NotEnoughMedicineInStockException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/NotEnoughMedicineInStockException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,4 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class NotEnoughMedicineInStockException extends RuntimeException{
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/PasswordsMismatchException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/PasswordsMismatchException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,7 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class PasswordsMismatchException extends RuntimeException{
-    public PasswordsMismatchException(String message){
-        super(message);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/UserNotFoundException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/UserNotFoundException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,4 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class UserNotFoundException extends RuntimeException{
-}
Index: c/main/java/mk/ukim/finki/synergymed/exceptions/UsernameAlreadyExistsException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/UsernameAlreadyExistsException.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,7 +1,0 @@
-package mk.ukim.finki.synergymed.exceptions;
-
-public class UsernameAlreadyExistsException extends RuntimeException{
-    public UsernameAlreadyExistsException(String message){
-        super(message);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/jobs/RevenueScheduledJobs.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/jobs/RevenueScheduledJobs.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,44 +1,0 @@
-package mk.ukim.finki.synergymed.jobs;
-
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.PersistenceContext;
-import jakarta.transaction.Transactional;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.time.YearMonth;
-import java.time.ZoneId;
-
-@Component
-public class RevenueScheduledJobs {
-
-    @PersistenceContext
-    private EntityManager entityManager;
-
-    // 09:05 1st every mont
-    @Scheduled(cron = "0 5 9 1 * *")
-    @Transactional
-    public void callMonthlyRevenueForPreviousMonth() {
-        ZoneId zone = ZoneId.systemDefault();
-        YearMonth prev = YearMonth.now(zone).minusMonths(1);
-        int year = prev.getYear();
-        int month = prev.getMonthValue();
-
-        entityManager
-                .createNativeQuery("CALL synergymed.sp_monthly_pharmacy_revenue(:y, :m)")
-                .setParameter("y", year)
-                .setParameter("m", month)
-                .executeUpdate();
-    }
-
-    // every day 8
-    @Scheduled(cron = "0 0 8 * * *")
-    @Transactional
-    public void callExpiringPrescriptions() {
-        int daysAhead = 7;
-        entityManager
-                .createNativeQuery("CALL synergymed.sp_expiring_prescriptions(:d)")
-                .setParameter("d", daysAhead)
-                .executeUpdate();
-    }
-}
Index: src/main/java/mk/ukim/finki/synergymed/models/Admin.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Admin.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Admin.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -11,4 +11,5 @@
 public class Admin {
     @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "user_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/AllergicreactionHealthprofileMedicine.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/AllergicreactionHealthprofileMedicine.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/AllergicreactionHealthprofileMedicine.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -2,5 +2,4 @@
 
 import jakarta.persistence.*;
-import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
Index: src/main/java/mk/ukim/finki/synergymed/models/AllergicreactionHealthprofileMedicineId.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/AllergicreactionHealthprofileMedicineId.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/AllergicreactionHealthprofileMedicineId.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -21,11 +21,4 @@
     private Integer medicineId;
 
-    public AllergicreactionHealthprofileMedicineId() {}
-
-    public AllergicreactionHealthprofileMedicineId(Integer healthProfileId, Integer medicineId) {
-        this.healthProfileId = healthProfileId;
-        this.medicineId = medicineId;
-    }
-
     @Override
     public boolean equals(Object o) {
Index: src/main/java/mk/ukim/finki/synergymed/models/Brandedmedicineimage.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Brandedmedicineimage.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Brandedmedicineimage.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -22,6 +22,3 @@
     private String image;
 
-    // New flag for “main” image
-    @Column(name = "is_main_image", nullable = false)
-    private boolean mainImage = false;
 }
Index: src/main/java/mk/ukim/finki/synergymed/models/Client.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Client.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Client.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -11,4 +11,5 @@
 public class Client {
     @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "user_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/Clientorder.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Clientorder.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Clientorder.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -6,6 +6,4 @@
 
 import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.List;
 
 @Getter
@@ -43,5 +41,3 @@
     private Integer totalPrice;
 
-    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
-    private List<ClientorderBrandedmedicine> items = new ArrayList<>();
 }
Index: src/main/java/mk/ukim/finki/synergymed/models/ClientorderBrandedmedicineId.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/ClientorderBrandedmedicineId.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/ClientorderBrandedmedicineId.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -3,7 +3,5 @@
 import jakarta.persistence.Column;
 import jakarta.persistence.Embeddable;
-import lombok.AllArgsConstructor;
 import lombok.Getter;
-import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.hibernate.Hibernate;
@@ -11,39 +9,10 @@
 import java.io.Serializable;
 import java.util.Objects;
-//
-//@Getter
-//@Setter
-//@Embeddable
-//public class ClientorderBrandedmedicineId implements Serializable {
-//    private static final long serialVersionUID = 4967247143893490519L;
-//    @Column(name = "order_id", nullable = false)
-//    private Integer orderId;
-//
-//    @Column(name = "branded_medicine_id", nullable = false)
-//    private Integer brandedMedicineId;
-//
-//    @Override
-//    public boolean equals(Object o) {
-//        if (this == o) return true;
-//        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
-//        ClientorderBrandedmedicineId entity = (ClientorderBrandedmedicineId) o;
-//        return Objects.equals(this.brandedMedicineId, entity.brandedMedicineId) &&
-//                Objects.equals(this.orderId, entity.orderId);
-//    }
-//
-//    @Override
-//    public int hashCode() {
-//        return Objects.hash(brandedMedicineId, orderId);
-//    }
-//
-//}
 
-@Embeddable
 @Getter
 @Setter
-@NoArgsConstructor
-@AllArgsConstructor
+@Embeddable
 public class ClientorderBrandedmedicineId implements Serializable {
-
+    private static final long serialVersionUID = 4967247143893490519L;
     @Column(name = "order_id", nullable = false)
     private Integer orderId;
@@ -55,13 +24,14 @@
     public boolean equals(Object o) {
         if (this == o) return true;
-        if (!(o instanceof ClientorderBrandedmedicineId)) return false;
-        ClientorderBrandedmedicineId that = (ClientorderBrandedmedicineId) o;
-        return Objects.equals(orderId, that.orderId) &&
-                Objects.equals(brandedMedicineId, that.brandedMedicineId);
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        ClientorderBrandedmedicineId entity = (ClientorderBrandedmedicineId) o;
+        return Objects.equals(this.brandedMedicineId, entity.brandedMedicineId) &&
+                Objects.equals(this.orderId, entity.orderId);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(orderId, brandedMedicineId);
+        return Objects.hash(brandedMedicineId, orderId);
     }
+
 }
Index: src/main/java/mk/ukim/finki/synergymed/models/Deliverycompany.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Deliverycompany.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Deliverycompany.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -11,4 +11,5 @@
 public class Deliverycompany {
     @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "company_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/Distributor.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Distributor.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Distributor.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -11,4 +11,5 @@
 public class Distributor {
     @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "company_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/Healthprofile.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Healthprofile.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Healthprofile.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,7 +4,4 @@
 import lombok.Getter;
 import lombok.Setter;
-
-import java.util.ArrayList;
-import java.util.List;
 
 @Getter
@@ -25,6 +22,3 @@
     private String bloodType;
 
-    @OneToMany(mappedBy = "healthProfile", cascade = CascadeType.ALL, orphanRemoval = true)
-    private List<AllergicreactionHealthprofileMedicine> allergicReactions = new ArrayList<>();
-
 }
Index: src/main/java/mk/ukim/finki/synergymed/models/Manufacturer.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Manufacturer.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Manufacturer.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -11,4 +11,5 @@
 public class Manufacturer {
     @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "company_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/Pharmacist.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Pharmacist.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Pharmacist.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -11,4 +11,5 @@
 public class Pharmacist {
     @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "user_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/Pharmacy.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Pharmacy.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Pharmacy.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -11,4 +11,5 @@
 public class Pharmacy {
     @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "company_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/PharmacyCatalogId.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/PharmacyCatalogId.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/PharmacyCatalogId.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -3,7 +3,5 @@
 import jakarta.persistence.Column;
 import jakarta.persistence.Embeddable;
-import lombok.AllArgsConstructor;
 import lombok.Getter;
-import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.hibernate.Hibernate;
@@ -15,6 +13,4 @@
 @Setter
 @Embeddable
-@NoArgsConstructor
-@AllArgsConstructor
 public class PharmacyCatalogId implements Serializable {
     private static final long serialVersionUID = 1717201987474340712L;
Index: src/main/java/mk/ukim/finki/synergymed/models/ShoppingcartBrandedmedicineId.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/ShoppingcartBrandedmedicineId.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/ShoppingcartBrandedmedicineId.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -3,5 +3,4 @@
 import jakarta.persistence.Column;
 import jakarta.persistence.Embeddable;
-import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
@@ -14,5 +13,4 @@
 @Setter
 @Embeddable
-@AllArgsConstructor
 public class ShoppingcartBrandedmedicineId implements Serializable {
     private static final long serialVersionUID = -1731196071675375973L;
@@ -22,6 +20,4 @@
     @Column(name = "branded_medicine_id", nullable = false)
     private Integer brandedMedicineId;
-
-    public ShoppingcartBrandedmedicineId(){}
 
     @Override
Index: src/main/java/mk/ukim/finki/synergymed/models/Supplyorder.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Supplyorder.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/Supplyorder.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,3 +1,2 @@
-// src/main/java/mk/ukim/finki/synergymed/models/Supplyorder.java
 package mk.ukim.finki.synergymed.models;
 
@@ -26,8 +25,4 @@
     private Pharmacy pharmacy;
 
-    @ManyToOne(fetch = FetchType.LAZY, optional = false)
-    @JoinColumn(name = "facility_id", nullable = false)
-    private Facility facility;
-
     @Column(name = "order_date", nullable = false)
     private LocalDate orderDate;
@@ -38,3 +33,4 @@
     @Column(name = "status", nullable = false, length = 50)
     private String status;
+
 }
Index: src/main/java/mk/ukim/finki/synergymed/models/User.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/User.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/models/User.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,10 +4,6 @@
 import lombok.Getter;
 import lombok.Setter;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.UserDetails;
 
 import java.time.LocalDate;
-import java.util.Collection;
-import java.util.List;
 
 @Getter
@@ -15,5 +11,5 @@
 @Entity
 @Table(name = "users", schema = "synergymed")
-public class User implements UserDetails{
+public class User {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -34,10 +30,10 @@
 
     @Column(name = "e_mail", nullable = false)
-    private String email;
+    private String eMail;
 
     @Column(name = "gender", length = 50)
     private String gender;
 
-    @Column(name = "date_created", nullable = false, insertable = false, updatable = false)
+    @Column(name = "date_created", nullable = false)
     private LocalDate dateCreated;
 
@@ -45,34 +41,3 @@
     private LocalDate dateOfBirth;
 
-    private boolean isAccountNonExpired = true;
-    private boolean isAccountNonLocked = true;
-    private boolean isCredentialsNonExpired = true;
-    private boolean isEnabled = true;
-    @Override
-    public boolean isAccountNonExpired() {
-        return isAccountNonExpired;
-    }
-
-    @Override
-    public boolean isAccountNonLocked() {
-        return isAccountNonLocked;
-    }
-
-    @Override
-    public boolean isCredentialsNonExpired() {
-        return isCredentialsNonExpired;
-    }
-
-    @Override
-    public boolean isEnabled() {
-        return isEnabled;
-    }
-
-    @Override public Collection<? extends GrantedAuthority> getAuthorities() { return List.of(); }
-
-    @Override public String getUsername() { return username; }
-    @Override
-    public String getPassword() {
-        return hashedPassword;
-    }
 }
Index: c/main/java/mk/ukim/finki/synergymed/models/enumerations/CompanyRoleType.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/enumerations/CompanyRoleType.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,9 +1,0 @@
-package mk.ukim.finki.synergymed.models.enumerations;
-
-
-public enum CompanyRoleType {
-    DISTRIBUTOR,
-    MANUFACTURER,
-    PHARMACY,
-    DELIVERY_COMPANY
-}
Index: src/main/java/mk/ukim/finki/synergymed/repositories/AdminRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/AdminRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/AdminRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -5,5 +5,3 @@
 
 public interface AdminRepository extends JpaRepository<Admin, Integer> {
-    boolean existsById(Integer userId);
-
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/BrandedmedicineRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/BrandedmedicineRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/BrandedmedicineRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -3,20 +3,5 @@
 import mk.ukim.finki.synergymed.models.Brandedmedicine;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
 
 public interface BrandedmedicineRepository extends JpaRepository<Brandedmedicine, Integer> {
-    @Query(value = """
-        select distinct bm.*
-        from synergymed.brandedmedicine bm
-        join synergymed.inventory_brandedmedicine ibm on ibm.branded_medicine_id = bm.id
-        join synergymed.inventory i on i.id = ibm.inventory_id
-        join synergymed.facility f on f.id = i.facility_id
-        join synergymed.company c on c.id = f.company_id
-        join synergymed.pharmacy p on p.company_id = c.id
-        where p.id = :pharmacyId
-        """, nativeQuery = true)
-    List<Brandedmedicine> findAllAvailableForPharmacy(@Param("pharmacyId") Integer pharmacyId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/BrandedmedicineimageRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/BrandedmedicineimageRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/BrandedmedicineimageRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,22 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-import java.util.Optional;
-
 public interface BrandedmedicineimageRepository extends JpaRepository<Brandedmedicineimage, Integer> {
-
-    // List all images for a branded medicine
-    List<Brandedmedicineimage> findByBrandedMedicineId(Integer brandedMedicineId);
-
-    // Same, ordered by id
-    List<Brandedmedicineimage> findByBrandedMedicineIdOrderByIdAsc(Integer brandedMedicineId);
-
-    // First image by id (fallback thumbnail)
-    Optional<Brandedmedicineimage> findFirstByBrandedMedicineIdOrderByIdAsc(Integer brandedMedicineId);
-
-    // “Main” image for a branded medicine (thumbnail of choice)
-    Optional<Brandedmedicineimage> findFirstByBrandedMedicineIdAndMainImageTrue(Integer brandedMedicineId);
-
-    // Existence of any “main” image for a branded medicine
-    boolean existsByBrandedMedicineIdAndMainImageTrue(Integer brandedMedicineId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ClientRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ClientRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ClientRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -2,23 +2,6 @@
 
 import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.User;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
-import java.util.Optional;
 
 public interface ClientRepository extends JpaRepository<Client, Integer> {
-    @Query("SELECT c FROM Client c WHERE c.id NOT IN (SELECT h.client.id FROM Healthprofile h)")
-    List<Client> findClientsWithoutHealthProfile();
-
-    @Query("SELECT c FROM Client c WHERE c.id NOT IN (SELECT h.client.id FROM Healthprofile h) " +
-            "AND (LOWER(c.users.firstName) LIKE :searchTerm OR LOWER(c.users.lastName) LIKE :searchTerm)")
-    List<Client> findClientsWithoutHealthProfileByName(@Param("searchTerm") String searchTerm);
-
-    Optional<Client> findByUsers(User user);
-
-    Optional<Client> findByUsersUsername(String username);
-
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ClientorderRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ClientorderRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ClientorderRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -3,20 +3,5 @@
 import mk.ukim.finki.synergymed.models.Clientorder;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-
-import java.util.List;
-import java.util.Optional;
 
 public interface ClientorderRepository extends JpaRepository<Clientorder, Integer> {
-
-    List<Clientorder> findAllByClientIdOrderByOrderDateDesc(Integer clientId);
-
-    @Query("""
-           select o
-           from Clientorder o
-             join fetch o.deliveryCompany dc
-             join fetch o.payment p
-           where o.id = :orderId and o.client.id = :clientId
-           """)
-    Optional<Clientorder> findDetailForClient(Integer orderId, Integer clientId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ClubcardRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ClubcardRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ClubcardRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,7 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.Optional;
-
 public interface ClubcardRepository extends JpaRepository<Clubcard, Integer> {
-    Optional<Clubcard> findByUser_Id(Integer user_id);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ContactinformationRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ContactinformationRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ContactinformationRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,11 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-import java.util.Optional;
-
 public interface ContactinformationRepository extends JpaRepository<Contactinformation, Integer> {
-    List<Contactinformation> findByUser_Id(Integer userId);
-    List<Contactinformation> findByFacility_Id(Integer facilityId);
-    Optional<Contactinformation> findByIdAndUser_Id(Integer id, Integer userId);
-    Optional<Contactinformation> findByIdAndFacility_Id(Integer id, Integer facilityId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/DistributorBrandedmedicineRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/DistributorBrandedmedicineRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/DistributorBrandedmedicineRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,29 +1,8 @@
 package mk.ukim.finki.synergymed.repositories;
 
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
 import mk.ukim.finki.synergymed.models.DistributorBrandedmedicine;
 import mk.ukim.finki.synergymed.models.DistributorBrandedmedicineId;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.Collection;
-import java.util.List;
 
 public interface DistributorBrandedmedicineRepository extends JpaRepository<DistributorBrandedmedicine, DistributorBrandedmedicineId> {
-    @Query("""
-      select dbm.brandedMedicine
-      from DistributorBrandedmedicine dbm
-      where dbm.id.distributorId = :distributorId
-    """)
-    List<Brandedmedicine> findMedicinesByDistributor(@Param("distributorId") Integer distributorId);
-
-    @Query("""
-      select dbm.id.brandedMedicineId
-      from DistributorBrandedmedicine dbm
-      where dbm.id.distributorId = :distributorId
-        and dbm.id.brandedMedicineId in :bmIds
-    """)
-    List<Integer> existingForDistributor(@Param("distributorId") Integer distributorId,
-                                         @Param("bmIds") Collection<Integer> bmIds);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/FacilityRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/FacilityRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/FacilityRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,8 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-
 public interface FacilityRepository extends JpaRepository<Facility, Integer> {
-    List<Facility> findAllByCompanyId(Integer companyId);
-    boolean existsByCompanyId(Integer companyId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/HealthprofileRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/HealthprofileRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/HealthprofileRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,7 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.Optional;
-
 public interface HealthprofileRepository extends JpaRepository<Healthprofile, Integer> {
-    Optional<Healthprofile> findByClientId(Integer client_id);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/InventoryBrandedmedicineRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/InventoryBrandedmedicineRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/InventoryBrandedmedicineRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,80 +1,8 @@
 package mk.ukim.finki.synergymed.repositories;
 
-import jakarta.persistence.LockModeType;
 import mk.ukim.finki.synergymed.models.InventoryBrandedmedicine;
 import mk.ukim.finki.synergymed.models.InventoryBrandedmedicineId;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Lock;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
 
 public interface InventoryBrandedmedicineRepository extends JpaRepository<InventoryBrandedmedicine, InventoryBrandedmedicineId> {
-
-    @Query("""
-       select ibm
-       from InventoryBrandedmedicine ibm
-         join fetch ibm.brandedMedicine bm
-         join fetch bm.manufacturer m
-         join fetch m.company c
-       where ibm.inventory.id = :inventoryId
-       order by ibm.lastChanged desc
-       """)
-    List<InventoryBrandedmedicine> findAllWithMedicineByInventoryId(@Param("inventoryId") Integer inventoryId);
-
-    @Lock(LockModeType.PESSIMISTIC_WRITE)
-    @Query("""
-           select ibm
-           from InventoryBrandedmedicine ibm
-           where ibm.brandedMedicine.id = :bmId
-           order by ibm.quantity desc
-           """)
-    List<InventoryBrandedmedicine> lockAllByMedicineOrderByQuantityDesc(@Param("bmId") Integer bmId);
-
-    @Lock(LockModeType.PESSIMISTIC_WRITE)
-    @Query("""
-       select ibm
-       from InventoryBrandedmedicine ibm
-         join ibm.inventory inv
-         join inv.facility fac
-       where ibm.brandedMedicine.id = :bmId
-         and exists (
-             select 1 from Pharmacy p
-             where p.id = fac.company.id
-         )
-       order by ibm.quantity desc
-       """)
-    List<InventoryBrandedmedicine> lockAllByMedicineInPharmacies(@Param("bmId") Integer bmId);
-
-        @Query("""
-      select ibm.brandedMedicine.id, coalesce(sum(ibm.quantity), 0)
-      from InventoryBrandedmedicine ibm
-      where ibm.brandedMedicine.id in :ids
-      group by ibm.brandedMedicine.id
-    """)
-        List<Object[]> sumByBrandedMedicineIds(@Param("ids") Collection<Integer> ids);
-
-    @Query("""
-      select new map(ibm.brandedMedicine.id as id, sum(ibm.quantity) as qty)
-      from InventoryBrandedmedicine ibm
-      join ibm.inventory inv
-      join inv.facility f
-      join f.company c
-      where ibm.brandedMedicine.id in :ids
-        and exists (
-          select 1 from Pharmacy ph
-          where ph.id = c.id
-        )
-      group by ibm.brandedMedicine.id
-""")
-    List<Map<String,Object>> sumAsMapForPharmacies(@Param("ids") Collection<Integer> ids);
-
-
-
-    }
-
-
+}
Index: src/main/java/mk/ukim/finki/synergymed/repositories/InventoryRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/InventoryRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/InventoryRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,8 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.Optional;
-
 public interface InventoryRepository extends JpaRepository<Inventory, Integer> {
-    Optional<Inventory> findByFacilityId(Integer facilityId);
-    void deleteByFacilityId(Integer facilityId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/MedicineRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/MedicineRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/MedicineRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,9 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.Optional;
-
 public interface MedicineRepository extends JpaRepository<Medicine, Integer> {
-    Optional<Medicine> getMedicineById(Integer id);
-    Optional<Medicine> getMedicineByMedicineName(String name);
-    boolean existsByMedicineName(String name);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/MedicineinteractionRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/MedicineinteractionRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/MedicineinteractionRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -5,12 +5,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-import java.util.Optional;
-
 public interface MedicineinteractionRepository extends JpaRepository<Medicineinteraction, MedicineinteractionId> {
-
-    List<Medicineinteraction> findById_MedicineId1(Integer medicineId1);
-    List<Medicineinteraction> findById_MedicineId2(Integer medicineId2);
-
-    Optional<Medicineinteraction> findById_MedicineId1AndId_MedicineId2(Integer id1, Integer id2);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/PharmacistRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/PharmacistRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/PharmacistRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,14 +1,7 @@
 package mk.ukim.finki.synergymed.repositories;
 
-import mk.ukim.finki.synergymed.models.Client;
 import mk.ukim.finki.synergymed.models.Pharmacist;
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.Optional;
-
 public interface PharmacistRepository extends JpaRepository<Pharmacist, Integer> {
-    boolean existsById(Integer userId);
-
-    Optional<Pharmacist> findByUsersUsername(String username);
-
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/PharmacyCatalogRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/PharmacyCatalogRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/PharmacyCatalogRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,18 +4,5 @@
 import mk.ukim.finki.synergymed.models.PharmacyCatalogId;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
 
 public interface PharmacyCatalogRepository extends JpaRepository<PharmacyCatalog, PharmacyCatalogId> {
-    @Query("select pc from PharmacyCatalog pc join fetch pc.brandedMedicine bm where pc.pharmacy.id = :pharmacyId")
-    List<PharmacyCatalog> findAllByPharmacyIdWithMedicine(@Param("pharmacyId") Integer pharmacyId);
-
-    @Query("select pc.id.brandedMedicineId from PharmacyCatalog pc where pc.pharmacy.id = :pharmacyId")
-    List<Integer> findAllMedicineIdsInCatalog(@Param("pharmacyId") Integer pharmacyId);
-
-    boolean existsByPharmacy_IdAndBrandedMedicine_Id(Integer pharmacyId, Integer brandedMedicineId);
-
-    void deleteByPharmacy_IdAndBrandedMedicine_Id(Integer pharmacyId, Integer brandedMedicineId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/PrescriptionRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/PrescriptionRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/PrescriptionRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,7 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-
 public interface PrescriptionRepository extends JpaRepository<Prescription, Integer> {
-    List<Prescription> findByClient_IdOrderByIssuedAtDesc(Integer clientId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/SensitiveclientdataRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/SensitiveclientdataRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/SensitiveclientdataRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,11 +4,4 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-import java.util.Optional;
-
 public interface SensitiveclientdataRepository extends JpaRepository<Sensitiveclientdata, Integer> {
-    Optional<Sensitiveclientdata> findFirstByClient_IdOrderByIdDesc(Integer clientId);
-    boolean existsByClient_Id(Integer clientId);
-    List<Sensitiveclientdata> findByVerificationStatusOrderByIdAsc(String verificationStatus);
-    Optional<Sensitiveclientdata> findById(Integer id);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartBrandedmedicineRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartBrandedmedicineRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartBrandedmedicineRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,13 +1,8 @@
 package mk.ukim.finki.synergymed.repositories;
 
-import mk.ukim.finki.synergymed.models.Shoppingcart;
 import mk.ukim.finki.synergymed.models.ShoppingcartBrandedmedicine;
 import mk.ukim.finki.synergymed.models.ShoppingcartBrandedmedicineId;
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.List;
-
 public interface ShoppingcartBrandedmedicineRepository extends JpaRepository<ShoppingcartBrandedmedicine, ShoppingcartBrandedmedicineId> {
-    List<ShoppingcartBrandedmedicine> findAllByShoppingCart(Shoppingcart cart);
-    void deleteAllByShoppingCart(Shoppingcart cart);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,11 +1,7 @@
 package mk.ukim.finki.synergymed.repositories;
 
-import mk.ukim.finki.synergymed.models.Client;
 import mk.ukim.finki.synergymed.models.Shoppingcart;
 import org.springframework.data.jpa.repository.JpaRepository;
 
-import java.util.Optional;
-
 public interface ShoppingcartRepository extends JpaRepository<Shoppingcart, Integer> {
-    Optional<Shoppingcart> findByClient(Client client);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/SupplyorderBrandedmedicineRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/SupplyorderBrandedmedicineRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/SupplyorderBrandedmedicineRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -4,17 +4,5 @@
 import mk.ukim.finki.synergymed.models.SupplyorderBrandedmedicineId;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
 
 public interface SupplyorderBrandedmedicineRepository extends JpaRepository<SupplyorderBrandedmedicine, SupplyorderBrandedmedicineId> {
-    @Query("""
-       select sobm
-       from SupplyorderBrandedmedicine sobm
-         join fetch sobm.brandedMedicine bm
-       where sobm.supplyOrder.id = :orderId
-       order by bm.name asc
-    """)
-    List<SupplyorderBrandedmedicine> findAllBySupplyOrderIdFetchMedicine(@Param("orderId") Integer orderId);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/UserRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/UserRepository.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/UserRepository.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,17 +1,7 @@
 package mk.ukim.finki.synergymed.repositories;
 
-import mk.ukim.finki.synergymed.models.Client;
 import mk.ukim.finki.synergymed.models.User;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
-import java.util.Optional;
 
 public interface UserRepository extends JpaRepository<User, Integer> {
-    Optional<User> findByUsername(String username);
-    Optional<User> findByEmail(String email);
-    boolean existsByUsername(String username);
-
 }
Index: c/main/java/mk/ukim/finki/synergymed/security/AppUserDetails.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/security/AppUserDetails.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,38 +1,0 @@
-package mk.ukim.finki.synergymed.security;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.*;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.*;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-
-@Service
-@RequiredArgsConstructor
-public class AppUserDetails implements UserDetailsService {
-    private final UserRepository users;
-    private final AdminRepository admins;
-    private final PharmacistRepository pharmacists;
-    private final ClientRepository clients;
-
-    @Override
-    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-        User u = users.findByUsername(username)
-                .orElseThrow(() -> new UsernameNotFoundException("Not found: " + username));
-        if (!u.isEnabled()) throw new RuntimeException("Verify/enable user first.");
-
-        var auths = new ArrayList<GrantedAuthority>();
-        if (admins.existsById(u.getId()))      auths.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
-        if (pharmacists.existsById(u.getId())) auths.add(new SimpleGrantedAuthority("ROLE_PHARMACIST"));
-        if (clients.existsById(u.getId()))     auths.add(new SimpleGrantedAuthority("ROLE_CLIENT"));
-        if (auths.isEmpty())                   auths.add(new SimpleGrantedAuthority("ROLE_USER"));
-
-        return new org.springframework.security.core.userdetails.User(
-                u.getUsername(), u.getPassword(), u.isEnabled(),
-                u.isAccountNonExpired(), u.isCredentialsNonExpired(), u.isAccountNonLocked(), auths
-        );
-    }
-}
Index: src/main/java/mk/ukim/finki/synergymed/service/BrandedMedicineService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/BrandedMedicineService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/service/BrandedMedicineService.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,35 +1,5 @@
 package mk.ukim.finki.synergymed.service;
 
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Brandedmedicineimage;
-import org.springframework.web.multipart.MultipartFile;
+public interface BrandedMedicineService {
 
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-public interface BrandedMedicineService {
-    List<Brandedmedicine> findAll();
-    Optional<Brandedmedicine> findById(Integer id);
-
-    void deleteById(Integer id) throws IOException;
-
-    List<Brandedmedicineimage> listImages(Integer brandedMedicineId);
-    String cardImageUrl(Integer brandedMedicineId);
-    Map<Integer,String> cardImageUrlsFor(List<Brandedmedicine> medicines);
-
-    void saveAll(Integer id,
-            Integer manufacturerId,
-            BigDecimal price,
-            String description,
-            String dosageForm,
-            String strength,
-            String originCountry,
-            String name,
-            MultipartFile[] newImages,
-            List<Integer> removeImageIds,
-            Integer mainExistingId,
-            Integer mainNewIndex) throws IOException;
 }
Index: c/main/java/mk/ukim/finki/synergymed/service/CatalogService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/CatalogService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,16 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-public interface CatalogService {
-    // Read
-    List<Brandedmedicine> listCatalogMedicines(Integer pharmacyId);
-    Set<Integer> listCatalogMedicineIds(Integer pharmacyId);
-
-    // Write (replace the catalog with exactly these ids)
-    void setCatalog(Integer pharmacyId, Collection<Integer> brandedMedicineIds);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/ClientOrderService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/ClientOrderService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,11 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Clientorder;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface ClientOrderService {
-    List<Clientorder> findAllForClient(Integer clientId);
-    Optional<Clientorder> findByIdForClient(Integer orderId, Integer clientId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/ClientService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/ClientService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,16 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Client;
-import java.util.List;
-
-public interface ClientService {
-
-    List<Client> findAllClientsWithoutHealthProfile();
-
-    List<Client> findClientsWithoutHealthProfileByName(String searchTerm);
-    Client findClientById(Integer clientId);
-    List<Client> findAll();
-
-    boolean isVerified(Integer userId);
-
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/ClubCardService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/ClubCardService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,12 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Clubcard;
-
-import java.util.Optional;
-
-public interface ClubCardService {
-    Clubcard createForClient(Integer clientId, String program);
-    Optional<Clubcard> getByClientId(Integer clientId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/CompanyOrchestrationService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/CompanyOrchestrationService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,14 +1,0 @@
-// src/main/java/.../service/CompanyOrchestrationService.java
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.enumerations.CompanyRoleType;
-
-import java.util.List;
-
-public interface CompanyOrchestrationService {
-    Company createCompanyWithRoles(String companyName, String description, String registrationNumber,
-                                   List<CompanyRoleType> roles);
-    void updateCompanyAndRoles(Integer companyId, String companyName, String description,
-                               String registrationNumber, List<CompanyRoleType> roles);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/CompanyService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/CompanyService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,14 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Company;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface CompanyService {
-    List<Company> findAll();
-    Optional<Company> findById(Integer id);
-    Company save(String companyName, String description, String registrationNumber);
-    Company update(Integer id, String companyName, String description, String registrationNumber);
-    void deleteById(Integer id);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/ContactInformationService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/ContactInformationService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,20 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-
-import mk.ukim.finki.synergymed.models.Contactinformation;
-
-import java.util.List;
-
-public interface ContactInformationService {
-    List<Contactinformation> listForUser(Integer userId);
-    Contactinformation createForUser(Integer userId, String phone, String address);
-    Contactinformation updateForUser(Integer contactId, Integer userId, String phone, String address);
-    void deleteForUser(Integer contactId, Integer userId);
-
-    // Facility-scoped
-    List<Contactinformation> listForFacility(Integer facilityId);
-    Contactinformation createForFacility(Integer facilityId, String phone, String address);
-    Contactinformation updateForFacility(Integer contactId, Integer facilityId, String phone, String address);
-    void deleteForFacility(Integer contactId, Integer facilityId);
-}
-
Index: c/main/java/mk/ukim/finki/synergymed/service/DeliveryCompanyService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/DeliveryCompanyService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,14 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Deliverycompany;
-import mk.ukim.finki.synergymed.models.Distributor;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface DeliveryCompanyService {
-    List<Deliverycompany> findAll();
-    Optional<Deliverycompany> findById(Integer companyId);
-    Deliverycompany create(Integer companyId);
-    void deleteById(Integer companyId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/DistributorService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/DistributorService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,13 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Distributor;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface DistributorService {
-    List<Distributor> findAll();
-    Optional<Distributor> findById(Integer companyId);
-    Distributor create(Integer companyId);
-    void deleteById(Integer companyId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/FacilityService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/FacilityService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,19 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Facility;
-import mk.ukim.finki.synergymed.models.InventoryBrandedmedicine;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface FacilityService {
-    Optional<Facility> findById(Integer id);
-    List<Facility> findAllByCompany(Integer companyId);
-    List<Facility> findAll();
-    Facility create(Integer companyId, String facilityName, String code);
-    Facility update(Integer id, String facilityName, String code);
-    void delete(Integer id);
-
-    List<InventoryBrandedmedicine> listInventoryItems(Integer facilityId);
-
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/HealthProfileService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/HealthProfileService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,21 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Healthprofile;
-import mk.ukim.finki.synergymed.models.User;
-
-import java.time.LocalDate;
-import java.util.Optional;
-
-public interface HealthProfileService {
-    Healthprofile createForClient(Client client, String bloodType);
-
-    public void addAllergy(Integer clientId,
-                           Integer medicineId,
-                           LocalDate dateDiagnosed,
-                           String description,
-                           String severity);
-
-
-    Optional<Healthprofile> getByClientId(Integer clientId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/InventoryService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/InventoryService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,14 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Facility;
-import mk.ukim.finki.synergymed.models.Inventory;
-
-import java.util.List;
-import java.util.Optional;
-
-
-public interface InventoryService {
-    Optional<Inventory> findByFacilityId(Integer facilityId);
-    Inventory createFor(Facility facility);
-    void deleteForFacility(Integer facilityId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/ManufacturerService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/ManufacturerService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,13 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Manufacturer;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface ManufacturerService {
-    List<Manufacturer> findAll();
-    Optional<Manufacturer> findById(Integer companyId);
-    Manufacturer create(Integer companyId);
-    void deleteById(Integer companyId);
-}
Index: src/main/java/mk/ukim/finki/synergymed/service/MedicineService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/MedicineService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/java/mk/ukim/finki/synergymed/service/MedicineService.java	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,22 +1,15 @@
 package mk.ukim.finki.synergymed.service;
 
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
 import mk.ukim.finki.synergymed.models.Medicine;
-import mk.ukim.finki.synergymed.models.Medicineinteraction;
 
+import java.io.IOException;
 import java.util.List;
-import java.util.Optional;
 
 public interface MedicineService {
-    Optional<Medicine> findById(Integer id);
 
-    List<Medicine> findAll();
-    Medicine save(String medicineName,String activeIngredients);
-
-//    Medicine findById(Integer id);
-//    Medicine save(String medicineName,String activeIngredients) throws InvalidInputException, MedicineAlreadyExistsException;
-    List<Medicineinteraction> interactions(String medicineName);
-    Medicineinteraction addInteraction(Medicine medicine1, Medicine medicine2, String type, String description, String severity);
-    Medicine update(Integer id, String medicineName, String activeIngredients);
-
-    void deleteById(Integer id);
+    List<Medicine> findAllMedicine();
+    Medicine save(String medicineName,String activeIngredients) throws IOException;
 }
Index: c/main/java/mk/ukim/finki/synergymed/service/PaymentMethodService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/PaymentMethodService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,11 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Paymentmethod;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface PaymentMethodService {
-    List<Paymentmethod> findAll();
-    Optional<Paymentmethod> findById(Integer id);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/PaymentService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/PaymentService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,12 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Clientorder;
-import mk.ukim.finki.synergymed.models.Shoppingcart;
-
-public interface PaymentService {
-    Clientorder checkout(Client client, Shoppingcart cart,
-                         Integer paymentMethodId, Integer deliveryCompanyId,
-                         boolean useCard);
-    Clientorder checkout(Client client, Shoppingcart cart, Integer paymentMethodId, Integer deliveryCompanyId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/PharmacyService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/PharmacyService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,13 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Pharmacy;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface PharmacyService {
-    List<Pharmacy> findAll();
-    Optional<Pharmacy> findById(Integer companyId);
-    Pharmacy create(Integer companyId);
-    void deleteById(Integer companyId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/PrescriptionService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/PrescriptionService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,9 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Prescription;
-
-import java.util.List;
-
-public interface PrescriptionService {
-    List<Prescription> listForClient(Integer clientId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/SensitiveClientDataService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/SensitiveClientDataService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,13 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Sensitiveclientdata;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.util.Optional;
-
-public interface SensitiveClientDataService {
-    Sensitiveclientdata applyOrUpdate(Integer clientId, String embg, MultipartFile portrait) throws IOException;
-
-    Optional<Sensitiveclientdata> latestForClient(Integer clientId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/ShoppingCartService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/ShoppingCartService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,21 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Shoppingcart;
-
-import java.math.BigDecimal;
-import java.util.Collection;
-import java.util.Map;
-
-public interface ShoppingCartService {
-    void addMedicine(Shoppingcart cart, Brandedmedicine medicine, int quantity);
-    void removeMedicine(Shoppingcart cart, Brandedmedicine medicine);
-    Map<Brandedmedicine, Integer> getMedicinesInCart(Shoppingcart cart);
-    BigDecimal getTotal(Shoppingcart cart);
-    void clearCart(Shoppingcart cart);
-    public void decreaseMedicine(Shoppingcart cart, Brandedmedicine medicine);
-    Shoppingcart getOrCreateCart(Client client);
-    Map<Integer, Integer> getMaxAvailableFor(Collection<Integer> brandedMedicineIds);
-
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/SupplyOrderService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/SupplyOrderService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,19 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-
-import mk.ukim.finki.synergymed.models.Supplyorder;
-import mk.ukim.finki.synergymed.models.SupplyorderBrandedmedicine;
-
-import java.util.List;
-
-public interface SupplyOrderService {
-    Integer createSupplyOrder(Integer pharmacyId,
-                              Integer facilityId,
-                              Integer distributorId,
-                              Integer[] medicineIds,
-                              Integer[] quantities);
-
-    List<Supplyorder> listAll();
-    Supplyorder getById(Integer id);
-    List<SupplyorderBrandedmedicine> linesFor(Integer orderId);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/UserService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/UserService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,18 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.User;
-
-import java.time.LocalDate;
-
-public interface UserService {
-    User findUserById(Integer id);
-    User findUserByUsername(String username);
-    User register(String firstName,
-                  String lastName,
-                  String username,
-                  String password,
-                  String repeatPassword,
-                  String email,
-                  String gender,
-                  LocalDate dateOfBirth);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/VerificationReviewService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/VerificationReviewService.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,13 +1,0 @@
-package mk.ukim.finki.synergymed.service;
-
-import mk.ukim.finki.synergymed.models.Sensitiveclientdata;
-
-import java.util.List;
-import java.util.Optional;
-
-public interface VerificationReviewService {
-    List<Sensitiveclientdata> listPending();
-    Optional<Sensitiveclientdata> get(Integer id);
-    void approve(Integer id);
-    void deny(Integer id);
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/BrandedMedicineServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/BrandedMedicineServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,242 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Brandedmedicineimage;
-import mk.ukim.finki.synergymed.models.Manufacturer;
-import mk.ukim.finki.synergymed.repositories.BrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.BrandedmedicineimageRepository;
-import mk.ukim.finki.synergymed.repositories.ManufacturerRepository;
-import mk.ukim.finki.synergymed.service.BrandedMedicineService;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.nio.file.*;
-import java.util.*;
-
-@Service
-public class BrandedMedicineServiceImpl implements BrandedMedicineService {
-
-    private final BrandedmedicineRepository brandedMedicineRepository;
-    private final BrandedmedicineimageRepository brandedMedicineImageRepository;
-    private final ManufacturerRepository manufacturerRepository;
-
-    @Value("${app.upload.branded-medicine-dir:uploads/images/branded_medicine/}")
-    private String uploadDir;
-
-    private static final List<String> ALLOWED_EXTENSIONS =
-            Arrays.asList("jpg","jpeg","png","gif","webp");
-    private static final long MAX_FILE_SIZE = 5 * 1024 * 1024;
-
-    public BrandedMedicineServiceImpl(BrandedmedicineRepository brandedMedicineRepository,
-                                      BrandedmedicineimageRepository brandedMedicineImageRepository,
-                                      ManufacturerRepository manufacturerRepository) {
-        this.brandedMedicineRepository = brandedMedicineRepository;
-        this.brandedMedicineImageRepository = brandedMedicineImageRepository;
-        this.manufacturerRepository = manufacturerRepository;
-    }
-
-    @Override
-    public List<Brandedmedicine> findAll() {
-        return brandedMedicineRepository.findAll();
-    }
-
-    @Override
-    public Optional<Brandedmedicine> findById(Integer id) {
-        return brandedMedicineRepository.findById(id);
-    }
-
-    @Override
-    public List<Brandedmedicineimage> listImages(Integer brandedMedicineId) {
-        return brandedMedicineImageRepository.findByBrandedMedicineIdOrderByIdAsc(brandedMedicineId);
-    }
-
-    @Override
-    public String cardImageUrl(Integer brandedMedicineId) {
-        return brandedMedicineImageRepository.findFirstByBrandedMedicineIdAndMainImageTrue(brandedMedicineId)
-                .map(Brandedmedicineimage::getImage)
-                .orElseGet(() -> brandedMedicineImageRepository
-                        .findFirstByBrandedMedicineIdOrderByIdAsc(brandedMedicineId)
-                        .map(Brandedmedicineimage::getImage)
-                        .orElse("/images/placeholder.png"));
-    }
-
-    @Override
-    public Map<Integer, String> cardImageUrlsFor(List<Brandedmedicine> medicines) {
-        Map<Integer,String> map = new HashMap<>();
-        for (Brandedmedicine bm : medicines) {
-            String url = cardImageUrl(bm.getId());
-            if (!url.startsWith("/")) url = "/" + url;
-            map.put(bm.getId(), url);
-        }
-        return map;
-    }
-
-    @Override
-    @Transactional(
-            rollbackFor = { Exception.class, java.io.IOException.class },
-            isolation = Isolation.READ_COMMITTED,
-            propagation = Propagation.REQUIRED,
-            timeout = 30
-    )
-    public void saveAll(Integer id,
-                        Integer manufacturerId,
-                        BigDecimal price,
-                        String description,
-                        String dosageForm,
-                        String strength,
-                        String originCountry,
-                        String name,
-                        MultipartFile[] newImages,
-                        List<Integer> removeImageIds,
-                        Integer mainExistingId,
-                        Integer mainNewIndex) throws IOException {
-
-        Brandedmedicine bm;
-        if (id == null) {
-            bm = new Brandedmedicine();
-        } else {
-            bm = brandedMedicineRepository.findById(id)
-                    .orElseThrow(() -> new EntityNotFoundException("Branded medicine not found: " + id));
-        }
-
-        Manufacturer m = manufacturerRepository.findById(manufacturerId)
-                .orElseThrow(() -> new EntityNotFoundException("Manufacturer not found: " + manufacturerId));
-        bm.setManufacturer(m);
-        bm.setPrice(price);
-        bm.setDescription(description);
-        bm.setDosageForm(dosageForm);
-        bm.setStrength(strength);
-        bm.setOriginCountry(originCountry);
-        bm.setName(name);
-
-        Brandedmedicine saved = brandedMedicineRepository.save(bm);
-
-        if (removeImageIds != null && !removeImageIds.isEmpty()) {
-            List<Brandedmedicineimage> toRemove = brandedMedicineImageRepository.findAllById(removeImageIds);
-            for (Brandedmedicineimage img : toRemove) {
-                if (!Objects.equals(img.getBrandedMedicine().getId(), saved.getId())) continue;
-                deletePhysicalFileIfExists(img.getImage());
-            }
-            brandedMedicineImageRepository.deleteAll(toRemove);
-        }
-
-        List<Brandedmedicineimage> appended = new ArrayList<>();
-        if (newImages != null) {
-            Path base = ensureUploadPath();
-            long ts = System.currentTimeMillis();
-            int seq = 0;
-            for (MultipartFile file : newImages) {
-                if (file == null || file.isEmpty()) continue;
-                validateImageFile(file);
-
-                String original = Optional.ofNullable(file.getOriginalFilename()).orElse("image");
-                String ext = getFileExtension(original).toLowerCase(Locale.ROOT);
-                String filename = String.format("branded_medicine_%d_%d_%03d.%s", saved.getId(), ts, ++seq, ext);
-
-                Path dest = base.resolve(filename);
-                Files.copy(file.getInputStream(), dest, StandardCopyOption.REPLACE_EXISTING);
-
-                String url = "/uploads/images/branded_medicine/" + filename;
-
-                Brandedmedicineimage img = new Brandedmedicineimage();
-                img.setBrandedMedicine(saved);
-                img.setImage(url);
-                img.setMainImage(false);
-                appended.add(brandedMedicineImageRepository.save(img));
-            }
-        }
-
-        Integer targetMainId = null;
-
-        if (mainExistingId != null) {
-            brandedMedicineImageRepository.findById(mainExistingId).ifPresent(img -> {
-                if (Objects.equals(img.getBrandedMedicine().getId(), saved.getId())) {
-                    // capture via array holder
-                }
-            });
-            if (brandedMedicineImageRepository.findById(mainExistingId)
-                    .filter(img -> Objects.equals(img.getBrandedMedicine().getId(), saved.getId()))
-                    .isPresent()) {
-                targetMainId = mainExistingId;
-            }
-        }
-
-        if (targetMainId == null && mainNewIndex != null) {
-            if (mainNewIndex >= 0 && mainNewIndex < appended.size()) {
-                targetMainId = appended.get(mainNewIndex).getId();
-            }
-        }
-
-        if (targetMainId == null) {
-            Optional<Brandedmedicineimage> curMain = brandedMedicineImageRepository
-                    .findFirstByBrandedMedicineIdAndMainImageTrue(saved.getId());
-            if (curMain.isPresent()) {
-                targetMainId = curMain.get().getId();
-            } else {
-                targetMainId = brandedMedicineImageRepository
-                        .findFirstByBrandedMedicineIdOrderByIdAsc(saved.getId())
-                        .map(Brandedmedicineimage::getId).orElse(null);
-            }
-        }
-
-        if (targetMainId != null) {
-            List<Brandedmedicineimage> all = brandedMedicineImageRepository.findByBrandedMedicineId(saved.getId());
-            for (Brandedmedicineimage img : all) {
-                boolean shouldBeMain = Objects.equals(img.getId(), targetMainId);
-                if (img.isMainImage() != shouldBeMain) {
-                    img.setMainImage(shouldBeMain);
-                    brandedMedicineImageRepository.save(img);
-                }
-            }
-        }
-    }
-    @Override
-    @Transactional
-    public void deleteById(Integer id) throws IOException {
-        List<Brandedmedicineimage> imgs = brandedMedicineImageRepository.findByBrandedMedicineId(id);
-        for (Brandedmedicineimage img : imgs) {
-            deletePhysicalFileIfExists(img.getImage());
-        }
-
-        brandedMedicineImageRepository.deleteAll(imgs);
-
-        brandedMedicineRepository.deleteById(id);
-    }
-
-
-    private Path ensureUploadPath() throws IOException {
-        Path p = Paths.get(uploadDir);
-        if (!Files.exists(p)) Files.createDirectories(p);
-        return p;
-    }
-
-
-    private void deletePhysicalFileIfExists(String storedUrl) throws IOException {
-        if (storedUrl == null || storedUrl.isBlank()) return;
-        String fileName = Paths.get(storedUrl).getFileName().toString();
-        Path onDisk = Paths.get(uploadDir).resolve(fileName);
-        if (Files.exists(onDisk)) Files.delete(onDisk);
-    }
-
-    private void validateImageFile(MultipartFile file) throws IOException {
-        if (file.getSize() > MAX_FILE_SIZE) throw new IOException("File exceeds 5MB");
-        String name = file.getOriginalFilename();
-        if (name == null || name.isEmpty()) throw new IOException("Invalid filename");
-        String ext = getFileExtension(name).toLowerCase(Locale.ROOT);
-        if (!ALLOWED_EXTENSIONS.contains(ext)) throw new IOException("Not an allowed image type");
-        String ct = file.getContentType();
-        if (ct == null || !ct.startsWith("image/")) throw new IOException("Not an image");
-    }
-
-    private String getFileExtension(String filename) {
-        int i = filename.lastIndexOf('.');
-        return i == -1 ? "" : filename.substring(i + 1);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/CatalogServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/CatalogServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,71 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import org.springframework.transaction.annotation.Transactional;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Pharmacy;
-import mk.ukim.finki.synergymed.models.PharmacyCatalog;
-import mk.ukim.finki.synergymed.models.PharmacyCatalogId;
-import mk.ukim.finki.synergymed.repositories.BrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.PharmacyCatalogRepository;
-import mk.ukim.finki.synergymed.repositories.PharmacyRepository;
-import mk.ukim.finki.synergymed.service.CatalogService;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-@Service
-@RequiredArgsConstructor
-@Transactional
-public class CatalogServiceImpl implements CatalogService {
-
-    private final PharmacyCatalogRepository catalogRepo;
-    private final BrandedmedicineRepository bmRepo;
-    private final PharmacyRepository pharmacyRepo;
-
-    @Override
-    public List<Brandedmedicine> listCatalogMedicines(Integer pharmacyId) {
-        return catalogRepo.findAllByPharmacyIdWithMedicine(pharmacyId)
-                .stream()
-                .map(PharmacyCatalog::getBrandedMedicine)
-                .collect(Collectors.toList());
-    }
-
-    @Override
-    public Set<Integer> listCatalogMedicineIds(Integer pharmacyId) {
-        return new HashSet<>(catalogRepo.findAllMedicineIdsInCatalog(pharmacyId));
-    }
-
-    @Override
-    public void setCatalog(Integer pharmacyId, Collection<Integer> brandedMedicineIds) {
-        Set<Integer> desired = brandedMedicineIds == null ? Set.of() : new HashSet<>(brandedMedicineIds);
-
-        Set<Integer> current = listCatalogMedicineIds(pharmacyId);
-
-        Set<Integer> toAdd = new HashSet<>(desired);
-        toAdd.removeAll(current);
-
-        Set<Integer> toRemove = new HashSet<>(current);
-        toRemove.removeAll(desired);
-
-        if (!toAdd.isEmpty()) {
-            Pharmacy pharmacy = pharmacyRepo.findById(pharmacyId)
-                    .orElseThrow(() -> new IllegalArgumentException("Pharmacy not found: " + pharmacyId));
-            List<Brandedmedicine> addEntities = bmRepo.findAllById(toAdd);
-            List<PharmacyCatalog> newLinks = new ArrayList<>(addEntities.size());
-            for (Brandedmedicine bm : addEntities) {
-                PharmacyCatalog pc = new PharmacyCatalog();
-                pc.setId(new PharmacyCatalogId(pharmacy.getId(), bm.getId()));
-                pc.setPharmacy(pharmacy);
-                pc.setBrandedMedicine(bm);
-                newLinks.add(pc);
-            }
-            catalogRepo.saveAll(newLinks);
-        }
-
-        for (Integer bmId : toRemove) {
-            catalogRepo.deleteByPharmacy_IdAndBrandedMedicine_Id(pharmacyId, bmId);
-        }
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/ClientOrderServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/ClientOrderServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,32 +1,0 @@
-// mk/ukim/finki/synergymed/service/impl/ClientOrderServiceImpl.java
-package mk.ukim.finki.synergymed.service.impl;
-
-import mk.ukim.finki.synergymed.models.Clientorder;
-import mk.ukim.finki.synergymed.repositories.ClientorderRepository;
-import mk.ukim.finki.synergymed.service.ClientOrderService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-@Transactional(readOnly = true)
-public class ClientOrderServiceImpl implements ClientOrderService {
-
-    private final ClientorderRepository repo;
-
-    public ClientOrderServiceImpl(ClientorderRepository repo) {
-        this.repo = repo;
-    }
-
-    @Override
-    public List<Clientorder> findAllForClient(Integer clientId) {
-        return repo.findAllByClientIdOrderByOrderDateDesc(clientId);
-    }
-
-    @Override
-    public Optional<Clientorder> findByIdForClient(Integer orderId, Integer clientId) {
-        return repo.findDetailForClient(orderId, clientId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/ClientServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/ClientServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,44 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.repositories.ClientRepository;
-import mk.ukim.finki.synergymed.service.ClientService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-@RequiredArgsConstructor
-public class ClientServiceImpl implements ClientService {
-
-    private final ClientRepository clientRepository;
-
-    @Override
-    public List<Client> findAllClientsWithoutHealthProfile() {
-        return clientRepository.findClientsWithoutHealthProfile();
-    }
-
-    @Override
-    public List<Client> findClientsWithoutHealthProfileByName(String searchTerm) {
-        String term = "%" + searchTerm.toLowerCase() + "%";
-        return clientRepository.findClientsWithoutHealthProfileByName(term);
-    }
-
-    @Override
-    public Client findClientById(Integer clientId) {
-        return clientRepository.findById(clientId)
-                .orElseThrow(() -> new RuntimeException("Client not found with id " + clientId));
-    }
-
-    @Override
-    public List<Client> findAll() {
-        return clientRepository.findAll();
-    }
-
-    public boolean isVerified(Integer userId) {
-        return clientRepository.findById(userId)
-                .map(c -> Boolean.TRUE.equals(c.getIsVerified()))
-                .orElse(false);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/ClubCardServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/ClubCardServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,32 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Clubcard;
-import mk.ukim.finki.synergymed.repositories.ClubcardRepository;
-import mk.ukim.finki.synergymed.service.ClientService;
-import mk.ukim.finki.synergymed.service.ClubCardService;
-import org.springframework.stereotype.Service;
-
-import java.util.Optional;
-
-@Service
-@RequiredArgsConstructor
-public class ClubCardServiceImpl implements ClubCardService {
-    private final ClubcardRepository clubcardRepository;
-    private final ClientService clientService;
-
-    public Clubcard createForClient(Integer clientId, String program) {
-        Client client = clientService.findClientById(clientId);
-        Clubcard card = new Clubcard();
-        card.setUser(client);
-        card.setClubProgram(program);
-        card.setPoints(0);
-        return clubcardRepository.save(card);
-    }
-    @Override
-    public Optional<Clubcard> getByClientId(Integer clientId) {
-        return clubcardRepository.findByUser_Id(clientId);
-    }
-}
-
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/CompanyOrchestrationServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/CompanyOrchestrationServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,90 +1,0 @@
-// src/main/java/.../service/impl/CompanyOrchestrationServiceImpl.java
-package mk.ukim.finki.synergymed.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.enumerations.CompanyRoleType;
-import mk.ukim.finki.synergymed.service.*;
-import org.springframework.dao.DataIntegrityViolationException;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Set;
-
-@Service
-@RequiredArgsConstructor
-public class CompanyOrchestrationServiceImpl implements CompanyOrchestrationService {
-
-    private final CompanyService companyService;
-    private final DistributorService distributorService;
-    private final ManufacturerService manufacturerService;
-    private final PharmacyService pharmacyService;
-    private final DeliveryCompanyService deliveryCompanyService;
-
-    @Override
-    @Transactional
-    public Company createCompanyWithRoles(String companyName, String description, String registrationNumber,
-                                          List<CompanyRoleType> roles) {
-        Company c = companyService.save(companyName, description, registrationNumber);
-        for (CompanyRoleType r : roles) {
-            try {
-                switch (r) {
-                    case DISTRIBUTOR      -> distributorService.create(c.getId());
-                    case MANUFACTURER     -> manufacturerService.create(c.getId());
-                    case PHARMACY         -> pharmacyService.create(c.getId());
-                    case DELIVERY_COMPANY -> deliveryCompanyService.create(c.getId());
-                }
-            } catch (DataIntegrityViolationException ignore) {
-            }
-        }
-        return c;
-    }
-
-    @Override
-    @Transactional
-    public void updateCompanyAndRoles(Integer companyId, String companyName, String description,
-                                      String registrationNumber, List<CompanyRoleType> requestedRoles) {
-
-        companyService.update(companyId, companyName, description, registrationNumber);
-
-        Set<CompanyRoleType> current = EnumSet.noneOf(CompanyRoleType.class);
-        if (distributorService.findById(companyId).isPresent())      current.add(CompanyRoleType.DISTRIBUTOR);
-        if (manufacturerService.findById(companyId).isPresent())     current.add(CompanyRoleType.MANUFACTURER);
-        if (pharmacyService.findById(companyId).isPresent())         current.add(CompanyRoleType.PHARMACY);
-        if (deliveryCompanyService.findById(companyId).isPresent())  current.add(CompanyRoleType.DELIVERY_COMPANY);
-
-        Set<CompanyRoleType> requested = EnumSet.noneOf(CompanyRoleType.class);
-        requested.addAll(requestedRoles);
-
-        if (current.equals(requested)) return;
-
-        // Adds
-        for (CompanyRoleType r : requested) {
-            if (!current.contains(r)) {
-                try {
-                    switch (r) {
-                        case DISTRIBUTOR      -> distributorService.create(companyId);
-                        case MANUFACTURER     -> manufacturerService.create(companyId);
-                        case PHARMACY         -> pharmacyService.create(companyId);
-                        case DELIVERY_COMPANY -> deliveryCompanyService.create(companyId);
-                    }
-                } catch (DataIntegrityViolationException ignore) {
-                }
-            }
-        }
-
-        //
-        for (CompanyRoleType r : current) {
-            if (!requested.contains(r)) {
-                switch (r) {
-                    case DISTRIBUTOR      -> distributorService.deleteById(companyId);
-                    case MANUFACTURER     -> manufacturerService.deleteById(companyId);
-                    case PHARMACY         -> pharmacyService.deleteById(companyId);
-                    case DELIVERY_COMPANY -> deliveryCompanyService.deleteById(companyId);
-                }
-            }
-        }
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/CompanyServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/CompanyServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,58 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.repositories.CompanyRepository;
-import mk.ukim.finki.synergymed.service.CompanyService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class CompanyServiceImpl implements CompanyService {
-
-    private final CompanyRepository companyRepository;
-
-    public CompanyServiceImpl(CompanyRepository companyRepository) {
-        this.companyRepository = companyRepository;
-    }
-
-    @Override
-    public List<Company> findAll() {
-        return companyRepository.findAll();
-    }
-
-    @Override
-    public Optional<Company> findById(Integer id) {
-        return companyRepository.findById(id);
-    }
-
-    @Override
-    @Transactional
-    public Company save(String companyName, String description, String registrationNumber) {
-        Company c = new Company();
-        c.setCompanyName(companyName);
-        c.setDescription(description);
-        c.setRegistrationNumber(registrationNumber);
-        return companyRepository.save(c);
-    }
-
-    @Override
-    @Transactional
-    public Company update(Integer id, String companyName, String description, String registrationNumber) {
-        Company c = companyRepository.findById(id)
-                .orElseThrow(() -> new EntityNotFoundException("Company not found: " + id));
-        c.setCompanyName(companyName);
-        c.setDescription(description);
-        c.setRegistrationNumber(registrationNumber);
-        return companyRepository.save(c);
-    }
-
-    @Override
-    @Transactional
-    public void deleteById(Integer id) {
-        companyRepository.deleteById(id);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/ContactInformationServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/ContactInformationServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,90 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Contactinformation;
-import mk.ukim.finki.synergymed.models.Facility;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.ContactinformationRepository;
-import mk.ukim.finki.synergymed.repositories.FacilityRepository;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.ContactInformationService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-@Service
-@Transactional
-@RequiredArgsConstructor
-public class ContactInformationServiceImpl implements ContactInformationService {
-
-    private final ContactinformationRepository repo;
-    private final UserRepository userRepo;
-    private final FacilityRepository facilityRepo;
-
-    @Override @Transactional(readOnly = true)
-    public List<Contactinformation> listForUser(Integer userId) {
-        return repo.findByUser_Id(userId);
-    }
-
-    @Override
-    public Contactinformation createForUser(Integer userId, String phone, String address) {
-        User user = userRepo.findById(userId).orElseThrow(() -> new EntityNotFoundException("User not found"));
-        Contactinformation ci = new Contactinformation();
-        ci.setUser(user);
-        ci.setFacility(null);
-        ci.setPhone(phone);
-        ci.setAddress(address);
-        return repo.save(ci);
-    }
-
-    @Override
-    public Contactinformation updateForUser(Integer contactId, Integer userId, String phone, String address) {
-        Contactinformation ci = repo.findByIdAndUser_Id(contactId, userId)
-                .orElseThrow(() -> new EntityNotFoundException("Contact not found for user"));
-        ci.setPhone(phone);
-        ci.setAddress(address);
-        return repo.save(ci);
-    }
-
-    @Override
-    public void deleteForUser(Integer contactId, Integer userId) {
-        Contactinformation ci = repo.findByIdAndUser_Id(contactId, userId)
-                .orElseThrow(() -> new EntityNotFoundException("Contact not found for user"));
-        repo.delete(ci);
-    }
-
-    @Override @Transactional(readOnly = true)
-    public List<Contactinformation> listForFacility(Integer facilityId) {
-        return repo.findByFacility_Id(facilityId);
-    }
-
-    @Override
-    public Contactinformation createForFacility(Integer facilityId, String phone, String address) {
-        Facility facility = facilityRepo.findById(facilityId)
-                .orElseThrow(() -> new EntityNotFoundException("Facility not found"));
-        Contactinformation ci = new Contactinformation();
-        ci.setFacility(facility);
-        ci.setUser(null);
-        ci.setPhone(phone);
-        ci.setAddress(address);
-        return repo.save(ci);
-    }
-
-    @Override
-    public Contactinformation updateForFacility(Integer contactId, Integer facilityId, String phone, String address) {
-        Contactinformation ci = repo.findByIdAndFacility_Id(contactId, facilityId)
-                .orElseThrow(() -> new EntityNotFoundException("Contact not found for facility"));
-        ci.setPhone(phone);
-        ci.setAddress(address);
-        return repo.save(ci);
-    }
-
-    @Override
-    public void deleteForFacility(Integer contactId, Integer facilityId) {
-        Contactinformation ci = repo.findByIdAndFacility_Id(contactId, facilityId)
-                .orElseThrow(() -> new EntityNotFoundException("Contact not found for facility"));
-        repo.delete(ci);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/DeliveryCompanyServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/DeliveryCompanyServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,58 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.Deliverycompany;
-import mk.ukim.finki.synergymed.repositories.CompanyRepository;
-import mk.ukim.finki.synergymed.repositories.DeliverycompanyRepository;
-import mk.ukim.finki.synergymed.service.DeliveryCompanyService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class DeliveryCompanyServiceImpl implements DeliveryCompanyService {
-
-    private final DeliverycompanyRepository deliveryCompanyRepository;
-    private final CompanyRepository companyRepository;
-
-    public DeliveryCompanyServiceImpl(DeliverycompanyRepository deliveryCompanyRepository,
-                                      CompanyRepository companyRepository) {
-        this.deliveryCompanyRepository = deliveryCompanyRepository;
-        this.companyRepository = companyRepository;
-    }
-
-    @Override
-    public List<Deliverycompany> findAll() {
-        return deliveryCompanyRepository.findAll();
-    }
-
-    @Override
-    public Optional<Deliverycompany> findById(Integer companyId) {
-        return deliveryCompanyRepository.findById(companyId);
-    }
-
-    @Override
-    @Transactional
-    public Deliverycompany create(Integer companyId) {
-        if (deliveryCompanyRepository.existsById(companyId)) {
-            throw new IllegalStateException("Delivery company already exists for company " + companyId);
-        }
-
-        Company company = companyRepository.findById(companyId)
-                .orElseThrow(() -> new EntityNotFoundException("Company not found: " + companyId));
-
-        Deliverycompany dc = new Deliverycompany();
-        dc.setCompany(company);
-
-        return deliveryCompanyRepository.save(dc);
-    }
-
-    @Override
-    @Transactional
-    public void deleteById(Integer companyId) {
-        deliveryCompanyRepository.deleteById(companyId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/DistributorServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/DistributorServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,55 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.Distributor;
-import mk.ukim.finki.synergymed.repositories.CompanyRepository;
-import mk.ukim.finki.synergymed.repositories.DistributorRepository;
-import mk.ukim.finki.synergymed.service.DistributorService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class DistributorServiceImpl implements DistributorService {
-
-    private final DistributorRepository distributorRepository;
-    private final CompanyRepository companyRepository;
-
-    public DistributorServiceImpl(DistributorRepository distributorRepository,
-                                  CompanyRepository companyRepository) {
-        this.distributorRepository = distributorRepository;
-        this.companyRepository = companyRepository;
-    }
-
-    @Override
-    public List<Distributor> findAll() {
-        return distributorRepository.findAll();
-    }
-
-    @Override
-    public Optional<Distributor> findById(Integer companyId) {
-        return distributorRepository.findById(companyId);
-    }
-
-    @Override
-    @Transactional
-    public Distributor create(Integer companyId) {
-        if (distributorRepository.existsById(companyId)) {
-            throw new IllegalStateException("Distributor already exists for company " + companyId);
-        }
-        Company company = companyRepository.findById(companyId)
-                .orElseThrow(() -> new EntityNotFoundException("Company not found: " + companyId));
-        Distributor d = new Distributor();
-        d.setCompany(company);
-        return distributorRepository.save(d);
-    }
-
-    @Override
-    @Transactional
-    public void deleteById(Integer companyId) {
-        distributorRepository.deleteById(companyId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/FacilityServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/FacilityServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,86 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import org.springframework.transaction.annotation.Transactional;
-import mk.ukim.finki.synergymed.models.*;
-import mk.ukim.finki.synergymed.repositories.FacilityRepository;
-import mk.ukim.finki.synergymed.repositories.InventoryBrandedmedicineRepository;
-import mk.ukim.finki.synergymed.service.CompanyService;
-import mk.ukim.finki.synergymed.service.FacilityService;
-import mk.ukim.finki.synergymed.service.InventoryService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class FacilityServiceImpl implements FacilityService {
-
-    private final FacilityRepository facilityRepository;
-
-    private final InventoryBrandedmedicineRepository inventoryBrandedmedicineRepository;
-
-    private final CompanyService companyService;
-    private final InventoryService inventoryService;
-
-
-    public FacilityServiceImpl(FacilityRepository facilityRepository,
-                               CompanyService companyService,
-                               InventoryService inventoryService,
-                               InventoryBrandedmedicineRepository inventoryBrandedmedicineRepository) {
-        this.facilityRepository = facilityRepository;
-        this.companyService = companyService;
-        this.inventoryService = inventoryService;
-        this.inventoryBrandedmedicineRepository = inventoryBrandedmedicineRepository;
-    }
-
-    @Override
-    public Optional<Facility> findById(Integer id) {
-        return facilityRepository.findById(id);
-    }
-
-    @Override
-    public List<Facility> findAllByCompany(Integer companyId) {
-        return facilityRepository.findAllByCompanyId(companyId);
-    }
-
-    @Override
-    public List<Facility> findAll() {
-        return facilityRepository.findAll();
-    }
-
-    @Transactional
-    @Override
-    public Facility create(Integer companyId, String facilityName, String code) {
-        Company company = companyService.findById(companyId).orElseThrow();
-        Facility f = new Facility();
-        f.setCompany(company);
-        f.setFacilityName(facilityName);
-        f.setCode(code);
-        Facility saved = facilityRepository.save(f);
-        inventoryService.createFor(saved);
-        return saved;
-    }
-
-    @Transactional
-    @Override
-    public Facility update(Integer id, String facilityName, String code) {
-        Facility f = facilityRepository.findById(id).orElseThrow();
-        f.setFacilityName(facilityName);
-        f.setCode(code);
-        return facilityRepository.save(f);
-    }
-
-    @Transactional
-    @Override
-    public void delete(Integer id) {
-        inventoryService.deleteForFacility(id);
-        facilityRepository.deleteById(id);
-    }
-
-    @Override
-    @Transactional
-    public List<InventoryBrandedmedicine> listInventoryItems(Integer facilityId) {
-        Inventory inv = inventoryService.findByFacilityId(facilityId).orElseThrow();
-        return inventoryBrandedmedicineRepository.findAllWithMedicineByInventoryId(inv.getId());
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/HealthProfileServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/HealthProfileServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,71 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.exceptions.HealthProfileDoesNotExistException;
-import mk.ukim.finki.synergymed.exceptions.MedicineDoesNotExistException;
-import mk.ukim.finki.synergymed.models.*;
-import mk.ukim.finki.synergymed.repositories.AllergicreactionHealthprofileMedicineRepository;
-import mk.ukim.finki.synergymed.repositories.HealthprofileRepository;
-import mk.ukim.finki.synergymed.repositories.MedicineRepository;
-import mk.ukim.finki.synergymed.service.HealthProfileService;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDate;
-import java.util.Optional;
-
-@Service
-@RequiredArgsConstructor
-public class HealthProfileServiceImpl implements HealthProfileService {
-
-    private final HealthprofileRepository healthprofileRepository;
-    private final AllergicreactionHealthprofileMedicineRepository allergicreactionHealthprofileMedicineRepo;
-    private final MedicineRepository medicineRepository;
-
-    @Override
-    public Healthprofile createForClient(Client client, String bloodType) {
-
-        Healthprofile profile = new Healthprofile();
-        profile.setClient(client);
-        profile.setBloodType(bloodType);
-
-        return healthprofileRepository.save(profile);
-    }
-
-    @Override
-    public void addAllergy(Integer clientId,
-                           Integer medicineId,
-                           LocalDate dateDiagnosed,
-                           String description,
-                           String severity) {
-
-        Healthprofile healthprofile = healthprofileRepository
-                .findByClientId(clientId)
-                .orElseThrow(HealthProfileDoesNotExistException::new);
-
-        Medicine medicine = medicineRepository
-                .getMedicineById(medicineId)
-                .orElseThrow(MedicineDoesNotExistException::new);
-
-        AllergicreactionHealthprofileMedicine allergy = new AllergicreactionHealthprofileMedicine();
-
-        AllergicreactionHealthprofileMedicineId key = new AllergicreactionHealthprofileMedicineId(
-                healthprofile.getId(),
-                medicineId
-        );
-
-        allergy.setId(key);
-        allergy.setHealthProfile(healthprofile);
-        allergy.setMedicine(medicine);
-        allergy.setDateDiagnosed(dateDiagnosed);
-        allergy.setDescription(description);
-        allergy.setSeverity(severity);
-
-        allergicreactionHealthprofileMedicineRepo.save(allergy);
-    }
-
-
-    @Override
-    public Optional<Healthprofile> getByClientId(Integer clientId) {
-        return healthprofileRepository.findByClientId(clientId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/InventoryServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/InventoryServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,42 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import org.springframework.transaction.annotation.Transactional;
-import mk.ukim.finki.synergymed.models.Facility;
-import mk.ukim.finki.synergymed.models.Inventory;
-import mk.ukim.finki.synergymed.repositories.InventoryRepository;
-import mk.ukim.finki.synergymed.service.InventoryService;
-import org.springframework.stereotype.Service;
-
-import java.util.Optional;
-
-@Service
-@Transactional
-public class InventoryServiceImpl implements InventoryService {
-
-    private final InventoryRepository inventoryRepository;
-
-    public InventoryServiceImpl(InventoryRepository inventoryRepository) {
-        this.inventoryRepository = inventoryRepository;
-    }
-
-    @Transactional
-    @Override
-    public Optional<Inventory> findByFacilityId(Integer facilityId) {
-        return inventoryRepository.findByFacilityId(facilityId);
-    }
-
-    @Override
-    public Inventory createFor(Facility facility) {
-        return inventoryRepository.findByFacilityId(facility.getId())
-                .orElseGet(() -> {
-                    Inventory inv = new Inventory();
-                    inv.setFacility(facility);
-                    return inventoryRepository.save(inv);
-                });
-    }
-
-    @Override
-    public void deleteForFacility(Integer facilityId) {
-        inventoryRepository.deleteByFacilityId(facilityId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/ManufacturerServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/ManufacturerServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,55 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.Manufacturer;
-import mk.ukim.finki.synergymed.repositories.CompanyRepository;
-import mk.ukim.finki.synergymed.repositories.ManufacturerRepository;
-import mk.ukim.finki.synergymed.service.ManufacturerService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class ManufacturerServiceImpl implements ManufacturerService {
-
-    private final ManufacturerRepository manufacturerRepository;
-    private final CompanyRepository companyRepository;
-
-    public ManufacturerServiceImpl(ManufacturerRepository manufacturerRepository,
-                                   CompanyRepository companyRepository) {
-        this.manufacturerRepository = manufacturerRepository;
-        this.companyRepository = companyRepository;
-    }
-
-    @Override
-    public List<Manufacturer> findAll() {
-        return manufacturerRepository.findAll();
-    }
-
-    @Override
-    public Optional<Manufacturer> findById(Integer companyId) {
-        return manufacturerRepository.findById(companyId);
-    }
-
-    @Override
-    @Transactional
-    public Manufacturer create(Integer companyId) {
-        if (manufacturerRepository.existsById(companyId)) {
-            throw new IllegalStateException("Manufacturer already exists for company " + companyId);
-        }
-        Company company = companyRepository.findById(companyId)
-                .orElseThrow(() -> new EntityNotFoundException("Company not found: " + companyId));
-        Manufacturer m = new Manufacturer();
-        m.setCompany(company);
-        return manufacturerRepository.save(m);
-    }
-
-    @Override
-    @Transactional
-    public void deleteById(Integer companyId) {
-        manufacturerRepository.deleteById(companyId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/MedicineServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/MedicineServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,114 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.exceptions.MedicineDoesNotExistException;
-import mk.ukim.finki.synergymed.exceptions.MedicineInteractionAlreadyExistsException;
-import mk.ukim.finki.synergymed.models.Medicine;
-import mk.ukim.finki.synergymed.models.Medicineinteraction;
-import mk.ukim.finki.synergymed.models.MedicineinteractionId;
-import mk.ukim.finki.synergymed.repositories.MedicineRepository;
-import mk.ukim.finki.synergymed.repositories.MedicineinteractionRepository;
-import mk.ukim.finki.synergymed.service.MedicineService;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import jakarta.persistence.EntityNotFoundException;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-@RequiredArgsConstructor
-public class MedicineServiceImpl implements MedicineService {
-
-    private final MedicineRepository medicineRepository;
-    private final MedicineinteractionRepository medicineinteractionRepository;
-
-
-    @Override
-    public List<Medicine> findAll() {
-        return this.medicineRepository.findAll();
-    }
-
-    @Override
-    public Optional<Medicine> findById(Integer id) {
-        return this.medicineRepository.findById(id);
-    }
-
-    @Override
-    public Medicine save(String medicineName, String activeIngredients){
-        Medicine medicine = new Medicine();
-        medicine.setMedicineName(medicineName);
-        medicine.setActiveIngredient(activeIngredients);
-        return this.medicineRepository.save(medicine);
-    }
-
-    @Override
-    public Medicine update(Integer id, String medicineName, String activeIngredients) {
-        Medicine medicine = this.medicineRepository.findById(id)
-                .orElseThrow(() -> new EntityNotFoundException("Medicine not found: " + id));
-
-        medicine.setMedicineName(medicineName);
-        medicine.setActiveIngredient(activeIngredients);
-
-        return this.medicineRepository.save(medicine);
-    }
-
-    @Override
-    public void deleteById(Integer id) {
-        this.medicineRepository.deleteById(id);
-    }
-
-    @Override
-    public Medicineinteraction addInteraction(Medicine medicine1,
-                                              Medicine medicine2,
-                                              String type,
-                                              String description,
-                                              String severity) {
-        boolean exists = medicineinteractionRepository
-                .findById_MedicineId1AndId_MedicineId2(medicine1.getId(), medicine2.getId())
-                .isPresent()
-                || medicineinteractionRepository
-                .findById_MedicineId1AndId_MedicineId2(medicine2.getId(), medicine1.getId())
-                .isPresent();
-
-        if (exists) {
-            throw new MedicineInteractionAlreadyExistsException();
-        }
-
-        MedicineinteractionId id = new MedicineinteractionId();
-        id.setMedicineId1(medicine1.getId());
-        id.setMedicineId2(medicine2.getId());
-
-        Medicineinteraction interaction = new Medicineinteraction();
-        interaction.setId(id);
-        interaction.setMedicineId1(medicine1);
-        interaction.setMedicineId2(medicine2);
-        interaction.setType(type);
-        interaction.setDescription(description);
-        interaction.setSeverity(severity);
-
-        return medicineinteractionRepository.save(interaction);
-    }
-
-    @Override
-    public List<Medicineinteraction> interactions(String medicineName) {
-        Optional<Medicine> medicine = medicineRepository.getMedicineByMedicineName(medicineName);
-
-        if (medicine.isEmpty()) {
-            throw new MedicineDoesNotExistException();
-        }
-
-        Integer medId = medicine.get().getId();
-
-        List<Medicineinteraction> interactionsAsFirst = medicineinteractionRepository.findById_MedicineId1(medId);
-        List<Medicineinteraction> interactionsAsSecond = medicineinteractionRepository.findById_MedicineId2(medId);
-
-        List<Medicineinteraction> allInteractions = new ArrayList<>();
-        allInteractions.addAll(interactionsAsFirst);
-        allInteractions.addAll(interactionsAsSecond);
-
-        return allInteractions;
-    }
-
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/PaymentMethodServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/PaymentMethodServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,28 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Paymentmethod;
-import mk.ukim.finki.synergymed.repositories.PaymentmethodRepository;
-import mk.ukim.finki.synergymed.service.PaymentMethodService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-@RequiredArgsConstructor
-public class PaymentMethodServiceImpl implements PaymentMethodService {
-    private final PaymentmethodRepository paymentmethodRepository;
-
-    @Override
-    public List<Paymentmethod> findAll() {
-        return paymentmethodRepository
-                .findAll();
-    }
-
-    @Override
-    public Optional<Paymentmethod> findById(Integer id) {
-        return paymentmethodRepository
-                .findById(id);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/PaymentServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/PaymentServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,123 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import org.springframework.transaction.annotation.Transactional;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.*;
-import mk.ukim.finki.synergymed.repositories.*;
-import mk.ukim.finki.synergymed.service.PaymentService;
-import mk.ukim.finki.synergymed.service.ShoppingCartService;
-import mk.ukim.finki.synergymed.service.ClubCardService; // NEW
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.util.List;
-
-@Service
-@RequiredArgsConstructor
-public class PaymentServiceImpl implements PaymentService {
-
-    private final ShoppingCartService shoppingCartService;
-    private final ClientorderRepository orderRepo;
-    private final PaymentRepository paymentRepo;
-    private final PaymentmethodRepository paymentmethodRepo;
-    private final DeliverycompanyRepository deliveryRepo;
-    private final InventoryBrandedmedicineRepository inventoryBrandedmedicineRepository;
-    private final ClubCardService clubCardService; // NEW
-
-    @Override
-    public Clientorder checkout(Client client, Shoppingcart cart, Integer paymentMethodId, Integer deliveryCompanyId) {
-        return checkout(client, cart, paymentMethodId, deliveryCompanyId, false);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED, timeout = 30)
-    public Clientorder checkout(Client client, Shoppingcart cart, Integer paymentMethodId, Integer deliveryCompanyId, boolean useCard) {
-        BigDecimal total = shoppingCartService.getTotal(cart);
-
-        int baseAmount = total.intValue();
-        int discount = 0;
-        if (useCard) {
-            var cardOpt = clubCardService.getByClientId(client.getId());
-            if (cardOpt.isPresent()) {
-                Clubcard card = cardOpt.get();
-                Integer pts = card.getPoints();
-                int points = pts == null ? 0 : pts;
-                discount = Math.min(points / 2, baseAmount);
-                if (discount > 0) {
-                    card.setPoints(0);
-                }
-            }
-        }
-        int finalAmount = Math.max(0, baseAmount - discount);
-
-        Paymentmethod method = paymentmethodRepo.findById(paymentMethodId)
-                .orElseThrow(() -> new IllegalArgumentException("Payment method not found"));
-
-        Payment payment = new Payment();
-        payment.setClient(client);
-        payment.setPaymentMethod(method);
-        payment.setPaymentDate(LocalDate.now());
-        payment.setAmount(finalAmount);
-        payment.setStatus("во тек");
-        paymentRepo.save(payment);
-
-        Deliverycompany deliveryCompany = deliveryRepo.findById(deliveryCompanyId)
-                .orElseThrow(() -> new IllegalArgumentException("Delivery company not found"));
-
-        Clientorder order = new Clientorder();
-        order.setClient(client);
-        order.setDeliveryCompany(deliveryCompany);
-        order.setPayment(payment);
-        order.setOrderDate(LocalDate.now());
-        order.setExpectedArrivalDate(LocalDate.now().plusDays(7));
-        order.setStatus("во тек");
-        order.setTotalPrice(finalAmount);
-
-        shoppingCartService.getMedicinesInCart(cart).forEach((medicine, qty) -> {
-            ClientorderBrandedmedicine line = new ClientorderBrandedmedicine();
-            ClientorderBrandedmedicineId id = new ClientorderBrandedmedicineId();
-            id.setBrandedMedicineId(medicine.getId());
-            line.setId(id);
-            line.setOrder(order);
-            line.setBrandedMedicine(medicine);
-            line.setQuantity(qty);
-            order.getItems().add(line);
-        });
-
-        for (ClientorderBrandedmedicine line : order.getItems()) {
-            int remaining = line.getQuantity();
-            Integer bmId = line.getBrandedMedicine().getId();
-
-            List<InventoryBrandedmedicine> facilities =
-                    inventoryBrandedmedicineRepository.lockAllByMedicineInPharmacies(bmId);
-
-            for (InventoryBrandedmedicine ibm : facilities) {
-                if (remaining <= 0) break;
-                int take = Math.min(ibm.getQuantity(), remaining);
-                if (take <= 0) continue;
-
-                ibm.setQuantity(ibm.getQuantity() - take);
-                ibm.setLastChanged(LocalDate.now());
-                inventoryBrandedmedicineRepository.save(ibm);
-
-                remaining -= take;
-            }
-
-            if (remaining > 0) {
-                throw new IllegalStateException("Insufficient stock for medicine id=" + bmId);
-            }
-        }
-        order.setStatus("во тек");
-        payment.setStatus("завршено");
-
-        orderRepo.save(order);
-
-        paymentRepo.save(payment);
-
-        shoppingCartService.clearCart(cart);
-
-        return order;
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/PharmacyServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/PharmacyServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,55 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.Pharmacy;
-import mk.ukim.finki.synergymed.repositories.CompanyRepository;
-import mk.ukim.finki.synergymed.repositories.PharmacyRepository;
-import mk.ukim.finki.synergymed.service.PharmacyService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class PharmacyServiceImpl implements PharmacyService {
-
-    private final PharmacyRepository pharmacyRepository;
-    private final CompanyRepository companyRepository;
-
-    public PharmacyServiceImpl(PharmacyRepository pharmacyRepository,
-                               CompanyRepository companyRepository) {
-        this.pharmacyRepository = pharmacyRepository;
-        this.companyRepository = companyRepository;
-    }
-
-    @Override
-    public List<Pharmacy> findAll() {
-        return pharmacyRepository.findAll();
-    }
-
-    @Override
-    public Optional<Pharmacy> findById(Integer companyId) {
-        return pharmacyRepository.findById(companyId);
-    }
-
-    @Override
-    @Transactional
-    public Pharmacy create(Integer companyId) {
-        if (pharmacyRepository.existsById(companyId)) {
-            throw new IllegalStateException("Pharmacy already exists for company " + companyId);
-        }
-        Company company = companyRepository.findById(companyId)
-                .orElseThrow(() -> new EntityNotFoundException("Company not found: " + companyId));
-        Pharmacy p = new Pharmacy();
-        p.setCompany(company);
-        return pharmacyRepository.save(p);
-    }
-
-    @Override
-    @Transactional
-    public void deleteById(Integer companyId) {
-        pharmacyRepository.deleteById(companyId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/PrescriptionServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/PrescriptionServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,23 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import org.springframework.transaction.annotation.Transactional;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Prescription;
-import mk.ukim.finki.synergymed.repositories.PrescriptionRepository;
-import mk.ukim.finki.synergymed.service.PrescriptionService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-@Transactional
-@RequiredArgsConstructor
-public class PrescriptionServiceImpl implements PrescriptionService {
-
-    private final PrescriptionRepository prescriptionRepository;
-
-    @Override
-    public List<Prescription> listForClient(Integer clientId) {
-        return prescriptionRepository.findByClient_IdOrderByIssuedAtDesc(clientId);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/SensitiveClientDataServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/SensitiveClientDataServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,100 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Sensitiveclientdata;
-import mk.ukim.finki.synergymed.repositories.ClientRepository;
-import mk.ukim.finki.synergymed.repositories.SensitiveclientdataRepository;
-import mk.ukim.finki.synergymed.service.SensitiveClientDataService;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.nio.file.*;
-import java.util.Locale;
-import java.util.Optional;
-import java.util.UUID;
-
-@Service
-@RequiredArgsConstructor
-@Transactional
-public class SensitiveClientDataServiceImpl implements SensitiveClientDataService {
-
-    private final SensitiveclientdataRepository repo;
-    private final ClientRepository clientRepo;
-
-    @Value("${app.upload.portraits-dir:uploads/images/portraits/}")
-    private String uploadDir;
-
-    private static final String[] ALLOWED = {"jpg","jpeg","png","webp","gif"};
-    private static final long MAX_SIZE = 5L * 1024 * 1024;
-
-    @Override
-    public Sensitiveclientdata applyOrUpdate(Integer clientId, String embg, MultipartFile portrait) throws IOException {
-        if (embg == null || embg.isBlank()) throw new IllegalArgumentException("EMBG is required");
-        if (portrait == null || portrait.isEmpty()) throw new IllegalArgumentException("Portrait photo is required");
-
-        Client client = clientRepo.findById(clientId).orElseThrow(() -> new EntityNotFoundException("Client not found"));
-
-        validateImage(portrait);
-        Path base = ensureUploadPath();
-        String name = Optional.ofNullable(portrait.getOriginalFilename()).orElse("portrait");
-        String ext = getExt(name);
-        String storedName = "portrait_" + clientId + "_" + UUID.randomUUID() + "." + ext;
-        Path dest = base.resolve(storedName);
-        Files.copy(portrait.getInputStream(), dest, StandardCopyOption.REPLACE_EXISTING);
-
-        Optional<Sensitiveclientdata> existingOpt = repo.findFirstByClient_IdOrderByIdDesc(clientId);
-        Sensitiveclientdata row = existingOpt.orElseGet(Sensitiveclientdata::new);
-
-        if (existingOpt.isPresent()) {
-            deletePhysicalIfExists(existingOpt.get().getPortraitPhoto());
-        }
-
-        row.setClient(client);
-        row.setPharmacist(null);
-        row.setEmbg(embg.trim());
-        row.setPortraitPhoto(storedName);
-        row.setVerificationStatus("во тек");
-
-        return repo.save(row);
-    }
-
-    @Override
-    @Transactional(readOnly = true)
-    public Optional<Sensitiveclientdata> latestForClient(Integer clientId) {
-        return repo.findFirstByClient_IdOrderByIdDesc(clientId);
-    }
-
-    /* Helpers */
-    private Path ensureUploadPath() throws IOException {
-        Path dir = Paths.get(uploadDir);
-        if (!Files.exists(dir)) Files.createDirectories(dir);
-        return dir;
-    }
-
-    private void validateImage(MultipartFile file) throws IOException {
-        if (file.getSize() > MAX_SIZE) throw new IOException("File exceeds 5MB");
-        String original = file.getOriginalFilename();
-        if (original == null || original.isBlank()) throw new IOException("Invalid filename");
-        String ext = getExt(original);
-        boolean ok = java.util.Arrays.stream(ALLOWED).anyMatch(a -> a.equalsIgnoreCase(ext));
-        if (!ok) throw new IOException("Not an allowed image type");
-        String ct = file.getContentType();
-        if (ct == null || !ct.startsWith("image/")) throw new IOException("Not an image");
-    }
-
-    private String getExt(String fn) {
-        int i = fn.lastIndexOf('.');
-        return (i == -1) ? "jpg" : fn.substring(i+1).toLowerCase(Locale.ROOT);
-    }
-
-    private void deletePhysicalIfExists(String storedName) throws IOException {
-        if (storedName == null || storedName.isBlank()) return;
-        Path p = Paths.get(uploadDir).resolve(Paths.get(storedName).getFileName().toString());
-        if (Files.exists(p)) Files.delete(p);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/ShoppingCartServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/ShoppingCartServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,129 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import org.springframework.transaction.annotation.Transactional;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.*;
-import mk.ukim.finki.synergymed.repositories.InventoryBrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.ShoppingcartBrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.ShoppingcartRepository;
-import mk.ukim.finki.synergymed.service.ShoppingCartService;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-@RequiredArgsConstructor
-@Transactional
-public class ShoppingCartServiceImpl implements ShoppingCartService {
-
-    private final ShoppingcartBrandedmedicineRepository cartMedicineRepo;
-    private final ShoppingcartRepository shoppingcartRepo;
-    private final InventoryBrandedmedicineRepository inventoryBrandedmedicineRepository;
-
-    @Override
-    public void addMedicine(Shoppingcart cart, Brandedmedicine medicine, int quantity) {
-        ShoppingcartBrandedmedicineId id =
-                new ShoppingcartBrandedmedicineId(cart.getId(), medicine.getId());
-        ShoppingcartBrandedmedicine entry =
-                cartMedicineRepo.findById(id).orElse(new ShoppingcartBrandedmedicine());
-
-        if (entry.getId() == null) {
-            entry.setId(id);
-            entry.setShoppingCart(cart);
-            entry.setBrandedMedicine(medicine);
-            entry.setQuantity(quantity);
-        } else {
-            entry.setQuantity(entry.getQuantity() + quantity);
-        }
-
-
-        cartMedicineRepo.save(entry);
-    }
-
-    @Override
-    public void decreaseMedicine(Shoppingcart cart, Brandedmedicine medicine) {
-        ShoppingcartBrandedmedicineId id =
-                new ShoppingcartBrandedmedicineId(cart.getId(), medicine.getId());
-        cartMedicineRepo.findById(id).ifPresent(entry -> {
-            if (entry.getQuantity() > 1) {
-                entry.setQuantity(entry.getQuantity() - 1);
-                cartMedicineRepo.save(entry);
-            } else {
-                cartMedicineRepo.delete(entry);
-            }
-        });
-    }
-
-    @Override
-    public void removeMedicine(Shoppingcart cart, Brandedmedicine medicine) {
-        ShoppingcartBrandedmedicineId id =
-                new ShoppingcartBrandedmedicineId(cart.getId(), medicine.getId());
-        cartMedicineRepo.deleteById(id);
-    }
-
-    @Override
-    public Map<Brandedmedicine, Integer> getMedicinesInCart(Shoppingcart cart) {
-        List<ShoppingcartBrandedmedicine> entries =
-                cartMedicineRepo.findAllByShoppingCart(cart);
-        Map<Brandedmedicine, Integer> result = new HashMap<>();
-        for (ShoppingcartBrandedmedicine e : entries) {
-            result.put(e.getBrandedMedicine(), e.getQuantity());
-        }
-        return result;
-    }
-
-    @Override
-    public BigDecimal getTotal(Shoppingcart cart) {
-        return getMedicinesInCart(cart).entrySet().stream()
-                .map(entry -> entry.getKey().getPrice()
-                        .multiply(BigDecimal.valueOf(entry.getValue())))
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-    }
-
-    @Override
-    public Shoppingcart getOrCreateCart(Client client) {
-        return shoppingcartRepo.findByClient(client)
-                .orElseGet(() -> {
-                    Shoppingcart cart = new Shoppingcart();
-                    cart.setClient(client);
-                    return shoppingcartRepo.save(cart);
-                });
-    }
-
-    @Override
-    public void clearCart(Shoppingcart cart) {
-        cartMedicineRepo.deleteAllByShoppingCart(cart);
-    }
-
-
-
-    @Override
-    public Map<Integer, Integer> getMaxAvailableFor(Collection<Integer> brandedMedicineIds) {
-        if (brandedMedicineIds == null || brandedMedicineIds.isEmpty()) {
-            return Map.of();
-        }
-
-        List<Map<String, Object>> rows =
-                inventoryBrandedmedicineRepository.sumAsMapForPharmacies(brandedMedicineIds);
-
-        Map<Integer, Integer> out = new HashMap<>(rows.size());
-        for (Map<String, Object> m : rows) {
-            Number idNum = (Number) m.get("id");
-            Number qtyNum = (Number) m.get("qty");
-            if (idNum != null) {
-                int id = idNum.intValue();
-                int qty = (qtyNum == null) ? 0
-                        : Math.toIntExact(qtyNum.longValue());
-                out.put(id, qty);
-            }
-        }
-        for (Integer id : brandedMedicineIds) {
-            out.putIfAbsent(id, 0);
-        }
-        return out;
-    }
-    }
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/SupplyOrderServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/SupplyOrderServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,157 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Distributor;
-import mk.ukim.finki.synergymed.models.Facility;
-import mk.ukim.finki.synergymed.models.Inventory;
-import mk.ukim.finki.synergymed.models.InventoryBrandedmedicine;
-import mk.ukim.finki.synergymed.models.InventoryBrandedmedicineId;
-import mk.ukim.finki.synergymed.models.Pharmacy;
-import mk.ukim.finki.synergymed.models.Supplyorder;
-import mk.ukim.finki.synergymed.models.SupplyorderBrandedmedicine;
-import mk.ukim.finki.synergymed.models.SupplyorderBrandedmedicineId;
-import mk.ukim.finki.synergymed.repositories.BrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.DistributorBrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.DistributorRepository;
-import mk.ukim.finki.synergymed.repositories.FacilityRepository;
-import mk.ukim.finki.synergymed.repositories.InventoryBrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.InventoryRepository;
-import mk.ukim.finki.synergymed.repositories.PharmacyRepository;
-import mk.ukim.finki.synergymed.repositories.SupplyorderBrandedmedicineRepository;
-import mk.ukim.finki.synergymed.repositories.SupplyorderRepository;
-import mk.ukim.finki.synergymed.service.SupplyOrderService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDate;
-import java.util.*;
-
-@Service
-@RequiredArgsConstructor
-public class SupplyOrderServiceImpl implements SupplyOrderService {
-
-    private final SupplyorderRepository supplyorderRepository;
-    private final SupplyorderBrandedmedicineRepository sobmRepository;
-    private final PharmacyRepository pharmacyRepository;
-    private final FacilityRepository facilityRepository;
-    private final InventoryRepository inventoryRepository;
-    private final BrandedmedicineRepository brandedmedicineRepository;
-    private final DistributorBrandedmedicineRepository distributorBrandedmedicineRepository;
-    private final DistributorRepository distributorRepository;
-    private final InventoryBrandedmedicineRepository inventoryBrandedmedicineRepository;
-
-    @Override
-    @Transactional
-    public Integer createSupplyOrder(Integer pharmacyId,
-                                     Integer facilityId,
-                                     Integer distributorId,
-                                     Integer[] medicineIds,
-                                     Integer[] quantities) {
-
-        if (medicineIds == null || quantities == null || medicineIds.length == 0 || medicineIds.length != quantities.length) {
-            throw new IllegalArgumentException("Invalid medicine/quantity arrays");
-        }
-
-        Pharmacy pharmacy = pharmacyRepository.findById(pharmacyId)
-                .orElseThrow(() -> new EntityNotFoundException("Pharmacy not found: " + pharmacyId));
-        Facility facility = facilityRepository.findById(facilityId)
-                .orElseThrow(() -> new EntityNotFoundException("Facility not found: " + facilityId));
-        Distributor distributor = distributorRepository.findById(distributorId)
-                .orElseThrow(() -> new EntityNotFoundException("Distributor not found: " + distributorId));
-
-        Map<Integer, Integer> qtyByBm = new LinkedHashMap<>();
-        for (int i = 0; i < medicineIds.length; i++) {
-            Integer bmId = medicineIds[i];
-            Integer qty = Optional.ofNullable(quantities[i]).orElse(0);
-            if (bmId == null || qty == null || qty <= 0) continue;
-            qtyByBm.merge(bmId, qty, Integer::sum);
-        }
-        if (qtyByBm.isEmpty()) {
-            throw new IllegalArgumentException("No positive quantities provided");
-        }
-
-        List<Integer> allowed = distributorBrandedmedicineRepository.existingForDistributor(distributorId, qtyByBm.keySet());
-        if (allowed.size() != qtyByBm.keySet().size()) {
-            throw new IllegalArgumentException("Some medicines are not provided by the selected distributor");
-        }
-
-        LocalDate now = LocalDate.now();
-        Supplyorder order = new Supplyorder();
-        order.setPharmacy(pharmacy);
-        order.setFacility(facility);
-        order.setDistributor(distributor);
-        order.setOrderDate(now);
-        order.setExpectedArrivalDate(now.plusDays(7));
-        order.setStatus("во тек");
-        order = supplyorderRepository.save(order);
-
-        Inventory inventory = inventoryRepository.findByFacilityId(facilityId)
-                .orElseGet(() -> {
-                    Inventory inv = new Inventory();
-                    inv.setFacility(facility);
-                    return inventoryRepository.save(inv);
-                });
-
-        for (Map.Entry<Integer, Integer> e : qtyByBm.entrySet()) {
-            Integer bmId = e.getKey();
-            Integer qty = e.getValue();
-
-            Brandedmedicine bm = brandedmedicineRepository.findById(bmId)
-                    .orElseThrow(() -> new EntityNotFoundException("Branded medicine not found: " + bmId));
-
-            SupplyorderBrandedmedicine sobm = new SupplyorderBrandedmedicine();
-            SupplyorderBrandedmedicineId sobmId = new SupplyorderBrandedmedicineId();
-            sobmId.setSupplyOrderId(order.getId());
-            sobmId.setBrandedMedicineId(bmId);
-            sobm.setId(sobmId);
-            sobm.setSupplyOrder(order);
-            sobm.setBrandedMedicine(bm);
-            sobm.setQuantity(qty);
-            sobmRepository.save(sobm);
-
-            InventoryBrandedmedicineId invId = new InventoryBrandedmedicineId();
-            invId.setInventoryId(inventory.getId());
-            invId.setBrandedMedicineId(bmId);
-
-            InventoryBrandedmedicine ibm = inventoryBrandedmedicineRepository
-                    .findById(invId)
-                    .orElseGet(() -> {
-                        InventoryBrandedmedicine x = new InventoryBrandedmedicine();
-                        x.setId(invId);
-                        x.setInventory(inventory);
-                        x.setBrandedMedicine(bm);
-                        x.setQuantity(0);
-                        x.setLastChanged(now);
-                        return x;
-                    });
-
-            ibm.setQuantity(ibm.getQuantity() + qty);
-            ibm.setLastChanged(now);
-
-            inventoryBrandedmedicineRepository.save(ibm);
-        }
-
-        return order.getId();
-    }
-    @Override
-    @Transactional(readOnly = true)
-    public List<Supplyorder> listAll() {
-        return supplyorderRepository.findAll();
-    }
-
-    @Override
-    @Transactional(readOnly = true)
-    public Supplyorder getById(Integer id) {
-        return supplyorderRepository.findById(id)
-                .orElseThrow(() -> new EntityNotFoundException("Supply order not found: " + id));
-    }
-
-    @Override
-    @Transactional(readOnly = true)
-    public List<SupplyorderBrandedmedicine> linesFor(Integer orderId) {
-        return sobmRepository.findAllBySupplyOrderIdFetchMedicine(orderId);
-    }
-}
-
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/UserServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/UserServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,73 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import org.springframework.transaction.annotation.Transactional;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.exceptions.*;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.ClientRepository;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.UserService;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDate;
-
-@Service
-@RequiredArgsConstructor
-public class UserServiceImpl implements UserService {
-    private final UserRepository userRepository;
-    private final ClientRepository clientRepository;
-    private final PasswordEncoder passwordEncoder;
-
-    @Override
-    public User findUserById(Integer id) {
-        return userRepository
-                .findById(id)
-                .orElseThrow(UserNotFoundException::new);
-    }
-
-    @Override
-    public User findUserByUsername(String username) {
-        return userRepository
-                .findByUsername(username)
-                .orElseThrow(UserNotFoundException::new);
-    }
-
-    @Transactional
-    @Override
-    public User register(String firstName, String lastName, String username, String password, String repeatPassword, String email, String gender, LocalDate dateOfBirth) {
-        if (username == null || password == null || username.isEmpty() || password.isEmpty()) {
-            throw new InvalidInputException();
-        }
-        if (!password.equals(repeatPassword)) {
-            throw new PasswordsMismatchException("Passwords do not match.");
-        }
-        if (this.userRepository.findByUsername(username).isPresent()) {
-            throw new UsernameAlreadyExistsException("Username already exists.");
-        }
-        if(this.userRepository.findByEmail(email).isPresent()){
-            throw new EmailAlreadyExistsException("Email address already exists.");
-        }
-
-
-        User user = new User();
-        user.setFirstName(firstName);
-        user.setLastName(lastName);
-        user.setUsername(username);
-        user.setHashedPassword(passwordEncoder.encode(password));
-        user.setEmail(email);
-        user.setGender(gender);
-        user.setDateOfBirth(dateOfBirth);
-
-        User savedUser = userRepository.save(user);
-
-        Client client = new Client();
-        client.setUsers(savedUser);
-        client.setIsVerified(false);
-
-        clientRepository.save(client);
-
-        return savedUser;
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/service/impl/VerificationReviewServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/VerificationReviewServiceImpl.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,65 +1,0 @@
-package mk.ukim.finki.synergymed.service.impl;
-
-import jakarta.persistence.EntityNotFoundException;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Sensitiveclientdata;
-import mk.ukim.finki.synergymed.models.Pharmacist;
-import mk.ukim.finki.synergymed.repositories.SensitiveclientdataRepository;
-import mk.ukim.finki.synergymed.repositories.PharmacistRepository;
-import mk.ukim.finki.synergymed.service.VerificationReviewService;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-@RequiredArgsConstructor
-public class VerificationReviewServiceImpl implements VerificationReviewService {
-
-    private final SensitiveclientdataRepository scdRepo;
-    private final PharmacistRepository pharmacistRepo;
-
-    @Override
-    @Transactional(readOnly = true)
-    public List<Sensitiveclientdata> listPending() {
-        return scdRepo.findByVerificationStatusOrderByIdAsc("во тек");
-    }
-
-    @Override
-    @Transactional(readOnly = true)
-    public Optional<Sensitiveclientdata> get(Integer id) {
-        return scdRepo.findById(id);
-    }
-
-    @Override
-    @Transactional
-    public void approve(Integer id) {
-        Sensitiveclientdata row = scdRepo.findById(id)
-                .orElseThrow(() -> new EntityNotFoundException("Request not found"));
-        Pharmacist reviewer = getCurrentPharmacist();
-        row.setPharmacist(reviewer);
-        row.setVerificationStatus("верифицирано");
-        scdRepo.save(row);
-    }
-
-    @Override
-    @Transactional
-    public void deny(Integer id) {
-        Sensitiveclientdata row = scdRepo.findById(id)
-                .orElseThrow(() -> new EntityNotFoundException("Request not found"));
-        Pharmacist reviewer = getCurrentPharmacist();
-        row.setPharmacist(reviewer);
-        row.setVerificationStatus("одбиено");
-        scdRepo.save(row);
-    }
-
-    private Pharmacist getCurrentPharmacist() {
-        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
-        String username = auth.getName();
-        return pharmacistRepo.findByUsersUsername(username)
-                .orElseThrow(() -> new EntityNotFoundException("Pharmacist not found for user " + username));
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/AllergyController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/AllergyController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,83 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Healthprofile;
-import mk.ukim.finki.synergymed.models.Medicine;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.MedicineRepository;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.HealthProfileService;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Optional;
-
-@Controller
-@RequestMapping("/allergies")
-@RequiredArgsConstructor
-public class AllergyController {
-
-    private final HealthProfileService healthProfileService;
-    private final MedicineRepository medicineRepository;
-    private final UserRepository userRepository;
-
-    private User getCurrentUser(UserDetails ud) {
-        return userRepository.findByUsername(ud.getUsername())
-                .orElseThrow(() -> new RuntimeException("User not found: " + ud.getUsername()));
-    }
-
-    @GetMapping("/manage")
-    public String manageAllergies(@AuthenticationPrincipal UserDetails ud, Model model) {
-        User user = getCurrentUser(ud);
-
-        Optional<Healthprofile> healthProfile = healthProfileService.getByClientId(user.getId());
-        if (healthProfile.isEmpty()) {
-            model.addAttribute("error", "No health profile found. Please contact your healthcare provider.");
-            return "redirect:/profile";
-        }
-
-        List<Medicine> medicines = medicineRepository.findAll();
-
-        model.addAttribute("user", user);
-        model.addAttribute("username", user.getUsername());
-        model.addAttribute("healthProfile", healthProfile.get());
-        model.addAttribute("medicines", medicines);
-
-        return "manage-allergies";
-    }
-
-    @PostMapping("/add")
-    public String addAllergy(@AuthenticationPrincipal UserDetails ud,
-                             @RequestParam Integer medicineId,
-                             @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate dateDiagnosed,
-                             @RequestParam String description,
-                             @RequestParam String severity,
-                             RedirectAttributes redirectAttributes) {
-
-        User user = getCurrentUser(ud);
-
-        try {
-            healthProfileService.addAllergy(
-                    user.getId(),
-                    medicineId,
-                    dateDiagnosed,
-                    description,
-                    severity
-            );
-
-            redirectAttributes.addFlashAttribute("success", "Allergy added successfully!");
-
-        } catch (Exception e) {
-            redirectAttributes.addFlashAttribute("error", "Failed to add allergy: " + e.getMessage());
-        }
-
-        return "redirect:/profile";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/BrandedMedicineController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/BrandedMedicineController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,97 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import jakarta.persistence.EntityNotFoundException;
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Brandedmedicineimage;
-import mk.ukim.finki.synergymed.service.BrandedMedicineService;
-import mk.ukim.finki.synergymed.service.ManufacturerService;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-
-@Controller
-@RequestMapping("/admin/branded-medicines")
-public class BrandedMedicineController {
-
-    private final BrandedMedicineService brandedMedicineService;
-    private final ManufacturerService manufacturerService;
-
-    public BrandedMedicineController(BrandedMedicineService brandedMedicineService,
-                                     ManufacturerService manufacturerService) {
-        this.brandedMedicineService = brandedMedicineService;
-        this.manufacturerService = manufacturerService;
-    }
-
-
-    @GetMapping
-    public String index(Model model) {
-        List<Brandedmedicine> medicines = brandedMedicineService.findAll();
-        Map<Integer, String> firstImageById = brandedMedicineService.cardImageUrlsFor(medicines);
-        model.addAttribute("medicines", medicines);
-        model.addAttribute("firstImageById", firstImageById);
-        return "index";
-    }
-
-    @GetMapping("/new")
-    public String createForm(Model model) {
-        model.addAttribute("manufacturers", manufacturerService.findAll());
-        model.addAttribute("mode", "create");
-        return "branded-medicine-form";
-    }
-
-    @GetMapping("/{id}/edit")
-    public String editForm(@PathVariable Integer id, Model model) {
-        Brandedmedicine bm = brandedMedicineService.findById(id)
-                .orElseThrow(() -> new EntityNotFoundException("Branded medicine not found: " + id));
-        List<Brandedmedicineimage> images = brandedMedicineService.listImages(id);
-
-        model.addAttribute("bm", bm);
-        model.addAttribute("manufacturers", manufacturerService.findAll());
-        model.addAttribute("images", images);
-        model.addAttribute("mode", "edit");
-        return "branded-medicine-form";
-    }
-
-    @PostMapping("/save")
-    public String save(
-            @RequestParam(required = false) Integer id,
-            @RequestParam Integer manufacturerId,
-            @RequestParam BigDecimal price,
-            @RequestParam(required = false) String description,
-            @RequestParam String dosageForm,
-            @RequestParam String strength,
-            @RequestParam(required = false) String originCountry,
-            @RequestParam String name,
-
-            @RequestParam(name = "images", required = false) MultipartFile[] images,
-            @RequestParam(name = "removeImageIds", required = false) List<Integer> removeImageIds,
-
-            @RequestParam(name = "mainExistingId", required = false) String mainExistingIdStr,
-            @RequestParam(name = "mainNewIndex",   required = false) String mainNewIndexStr
-    ) throws IOException {
-
-        Integer mainExistingId = (mainExistingIdStr != null && mainExistingIdStr.matches("^\\d+$"))
-                ? Integer.valueOf(mainExistingIdStr) : null;
-        Integer mainNewIndex   = (mainNewIndexStr   != null && mainNewIndexStr.matches("^\\d+$"))
-                ? Integer.valueOf(mainNewIndexStr) : null;
-
-        brandedMedicineService.saveAll(
-                id, manufacturerId, price, description, dosageForm, strength, originCountry, name,
-                images, removeImageIds, mainExistingId, mainNewIndex
-        );
-        return "redirect:/admin/branded-medicines";
-    }
-
-
-    @PostMapping("/{id}/delete")
-    public String deleteBrandedMedicine(@PathVariable Integer id) throws IOException {
-        brandedMedicineService.deleteById(id);
-        return "redirect:/admin/branded-medicines";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/CatalogController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/CatalogController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,64 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import jakarta.persistence.EntityNotFoundException;
-import jakarta.servlet.http.HttpSession;
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Brandedmedicineimage;
-import mk.ukim.finki.synergymed.service.BrandedMedicineService;
-import mk.ukim.finki.synergymed.service.CatalogService;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RequiredArgsConstructor
-@Controller
-@RequestMapping({"/","catalog"})
-public class CatalogController {
-
-    private final CatalogService catalogService;
-    private final BrandedMedicineService brandedMedicineService;
-
-
-
-    @GetMapping
-    public String catalog(Model model, HttpSession session) {
-        var listed = catalogService.listCatalogMedicines(3);
-        var firstImageById = brandedMedicineService.cardImageUrlsFor(listed);
-        model.addAttribute("medicines", listed);
-        model.addAttribute("firstImageById", firstImageById);
-        model.addAttribute("username", session.getAttribute("username"));
-        return "catalog";
-    }
-
-    @PreAuthorize("hasAnyRole('ADMIN','PHARMACIST')")
-    @GetMapping("/edit")
-    public String edit(Model model, HttpSession session) {
-        var all = brandedMedicineService.findAll();
-        var selectedIds = catalogService.listCatalogMedicineIds(3);
-        model.addAttribute("medicines", all);
-        model.addAttribute("selectedIds", selectedIds);
-        model.addAttribute("username", session.getAttribute("username"));
-        return "catalog-edit";
-    }
-    @GetMapping("details/{id}")
-    public String details(@PathVariable Integer id, Model model) {
-        Brandedmedicine bm = brandedMedicineService.findById(id)
-                .orElseThrow(() -> new EntityNotFoundException("Branded medicine not found: " + id));
-        List<Brandedmedicineimage> images = brandedMedicineService.listImages(id);
-        model.addAttribute("bm", bm);
-        model.addAttribute("images", images);
-        return "branded-medicine-details";
-    }
-
-    @PreAuthorize("hasAnyRole('ADMIN','PHARMACIST')")
-    @PostMapping("/edit")
-    public String saveEdit(@RequestParam(name="ids", required=false) List<Integer> ids) {
-        catalogService.setCatalog(3, ids);
-        return "redirect:/catalog";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/ClientOrderController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/ClientOrderController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,48 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Clientorder;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.ClientOrderService;
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@Controller
-@RequiredArgsConstructor
-@RequestMapping("orders")
-public class ClientOrderController {
-
-    private final ClientOrderService orderService;
-    private final UserRepository userRepository;
-
-    private User getCurrentUser(UserDetails ud) {
-        return userRepository.findByUsername(ud.getUsername())
-                .orElseThrow(() -> new RuntimeException("User not found: " + ud.getUsername()));
-    }
-
-    @GetMapping
-    public String myOrders(@AuthenticationPrincipal UserDetails ud, Model model) {
-        User user = getCurrentUser(ud);
-        List<Clientorder> orders = orderService.findAllForClient(user.getId());
-        model.addAttribute("orders", orders);
-        return "orders";
-    }
-
-    @GetMapping("{orderId}")
-    public String myOrderDetail(@PathVariable Integer orderId,
-                                @AuthenticationPrincipal UserDetails ud,
-                                Model model) {
-        User user = getCurrentUser(ud);
-        Clientorder order = orderService.findByIdForClient(orderId, user.getId()).orElseThrow();
-        model.addAttribute("order", order);
-        model.addAttribute("payment", order.getPayment());
-        model.addAttribute("deliveryCompany", order.getDeliveryCompany());
-        return "order-detail";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/CompanyController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/CompanyController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,95 +1,0 @@
-// src/main/java/.../web/CompanyController.java
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.enumerations.CompanyRoleType;
-import mk.ukim.finki.synergymed.service.*;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.*;
-
-@Controller
-@RequestMapping("/admin/companies")
-@RequiredArgsConstructor
-public class CompanyController {
-
-    private final CompanyService companyService;
-    private final CompanyOrchestrationService companyOrchestrationService;
-    private final DistributorService distributorService;
-    private final ManufacturerService manufacturerService;
-    private final PharmacyService pharmacyService;
-    private final DeliveryCompanyService deliveryCompanyService;
-
-    @GetMapping
-    public String index(Model model) {
-        List<Company> companies = companyService.findAll();
-        Map<Integer, List<CompanyRoleType>> rolesByCompany = new HashMap<>();
-        for (Company c : companies) {
-            Integer id = c.getId();
-            List<CompanyRoleType> roles = new ArrayList<>();
-            if (distributorService.findById(id).isPresent())  roles.add(CompanyRoleType.DISTRIBUTOR);
-            if (manufacturerService.findById(id).isPresent()) roles.add(CompanyRoleType.MANUFACTURER);
-            if (pharmacyService.findById(id).isPresent())     roles.add(CompanyRoleType.PHARMACY);
-            if (deliveryCompanyService.findById(id).isPresent()) roles.add(CompanyRoleType.DELIVERY_COMPANY);
-            rolesByCompany.put(id, roles);
-        }
-        model.addAttribute("companies", companies);
-        model.addAttribute("rolesByCompany", rolesByCompany);
-        return "companies";
-    }
-
-    @GetMapping("/new")
-    public String createForm(Model model) {
-        model.addAttribute("roleTypes", CompanyRoleType.values());
-        model.addAttribute("mode", "create");
-        return "company-form";
-    }
-
-    @PostMapping
-    public String create(@RequestParam String companyName,
-                         @RequestParam(required = false) String description,
-                         @RequestParam String registrationNumber,
-                         @RequestParam(name = "roles", required = false) List<CompanyRoleType> roles) {
-        companyOrchestrationService.createCompanyWithRoles(
-                companyName, description, registrationNumber, roles == null ? List.of() : roles
-        );
-        return "redirect:/admin/companies";
-    }
-
-    @GetMapping("/{id}/edit")
-    public String editForm(@PathVariable Integer id, Model model) {
-        Company c = companyService.findById(id).orElseThrow();
-        Set<CompanyRoleType> selectedRoles = new HashSet<>();
-        if (distributorService.findById(id).isPresent())  selectedRoles.add(CompanyRoleType.DISTRIBUTOR);
-        if (manufacturerService.findById(id).isPresent()) selectedRoles.add(CompanyRoleType.MANUFACTURER);
-        if (pharmacyService.findById(id).isPresent())     selectedRoles.add(CompanyRoleType.PHARMACY);
-        if (deliveryCompanyService.findById(id).isPresent()) selectedRoles.add(CompanyRoleType.DELIVERY_COMPANY);
-
-        model.addAttribute("company", c);
-        model.addAttribute("roleTypes", CompanyRoleType.values());
-        model.addAttribute("selectedRoles", selectedRoles);
-        model.addAttribute("mode", "edit");
-        return "company-form";
-    }
-
-    @PostMapping("/{id}/update")
-    public String update(@PathVariable Integer id,
-                         @RequestParam String companyName,
-                         @RequestParam(required = false) String description,
-                         @RequestParam String registrationNumber,
-                         @RequestParam(name = "roles", required = false) List<CompanyRoleType> roles) {
-        companyOrchestrationService.updateCompanyAndRoles(
-                id, companyName, description, registrationNumber, roles == null ? List.of() : roles
-        );
-        return "redirect:/admin/companies";
-    }
-
-    @PostMapping("/{id}/delete")
-    public String delete(@PathVariable Integer id) {
-        companyService.deleteById(id);
-        return "redirect:/admin/companies";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/FacilityController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/FacilityController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,146 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Company;
-import mk.ukim.finki.synergymed.models.Facility;
-import mk.ukim.finki.synergymed.models.Contactinformation;
-import mk.ukim.finki.synergymed.service.CompanyService;
-import mk.ukim.finki.synergymed.service.FacilityService;
-import mk.ukim.finki.synergymed.service.ContactInformationService;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@Controller
-@RequestMapping("/admin/companies/{companyId}/facilities")
-@RequiredArgsConstructor
-public class FacilityController {
-
-    private final CompanyService companyService;
-    private final FacilityService facilityService;
-    private final ContactInformationService contactInformationService;
-
-    @GetMapping
-    public String index(@PathVariable Integer companyId, Model model) {
-        Company company = companyService.findById(companyId).orElseThrow();
-        List<Facility> facilities = facilityService.findAllByCompany(companyId);
-        model.addAttribute("company", company);
-        model.addAttribute("facilities", facilities);
-        return "facilities";
-    }
-
-    @GetMapping("/new")
-    public String createForm(@PathVariable Integer companyId, Model model) {
-        Company company = companyService.findById(companyId).orElseThrow();
-        model.addAttribute("company", company);
-        model.addAttribute("mode", "create");
-        return "facility-form";
-    }
-
-    @PostMapping
-    public String create(@PathVariable Integer companyId,
-                         @RequestParam String facilityName,
-                         @RequestParam String code,
-                         org.springframework.web.servlet.mvc.support.RedirectAttributes ra) {
-        Facility saved = facilityService.create(companyId, facilityName, code);
-        ra.addFlashAttribute("message", "Facility created: " + saved.getFacilityName());
-        return "redirect:/admin/companies/" + companyId + "/facilities";
-    }
-
-    @GetMapping("/{id}/edit")
-    public String editForm(@PathVariable Integer companyId,
-                           @PathVariable Integer id,
-                           Model model) {
-        Company company = companyService.findById(companyId).orElseThrow();
-        Facility facility = facilityService.findById(id).orElseThrow();
-        model.addAttribute("company", company);
-        model.addAttribute("facility", facility);
-        model.addAttribute("mode", "edit");
-        return "facility-form";
-    }
-
-    @PostMapping("/{id}/update")
-    public String update(@PathVariable Integer companyId,
-                         @PathVariable Integer id,
-                         @RequestParam String facilityName,
-                         @RequestParam String code,
-                         org.springframework.web.servlet.mvc.support.RedirectAttributes ra) {
-        Facility updated = facilityService.update(id, facilityName, code);
-        ra.addFlashAttribute("message", "Facility updated: " + updated.getFacilityName());
-        return "redirect:/admin/companies/" + companyId + "/facilities";
-    }
-
-    @PostMapping("/{id}/delete")
-    public String delete(@PathVariable Integer companyId,
-                         @PathVariable Integer id,
-                         org.springframework.web.servlet.mvc.support.RedirectAttributes ra) {
-        facilityService.delete(id);
-        ra.addFlashAttribute("message", "Facility deleted");
-        return "redirect:/admin/companies/" + companyId + "/facilities";
-    }
-
-    @GetMapping("/{id}/inventory")
-    public String inventory(@PathVariable Integer companyId,
-                            @PathVariable Integer id,
-                            Model model) {
-        var company = companyService.findById(companyId).orElseThrow();
-        var facility = facilityService.findById(id).orElseThrow();
-        var items = facilityService.listInventoryItems(id);
-        model.addAttribute("company", company);
-        model.addAttribute("facility", facility);
-        model.addAttribute("items", items);
-        return "facility-inventory";
-    }
-
-    @GetMapping("/{id}/contacts")
-    public String facilityContacts(@PathVariable Integer companyId,
-                                   @PathVariable Integer id,
-                                   Model model) {
-        var company = companyService.findById(companyId).orElseThrow();
-        var facility = facilityService.findById(id).orElseThrow();
-        var list = contactInformationService.listForFacility(id);
-        Contactinformation contact = list.isEmpty() ? null : list.get(0);
-        model.addAttribute("company", company);
-        model.addAttribute("facility", facility);
-        model.addAttribute("contact", contact);
-        return "facility-contacts";
-    }
-
-    @GetMapping("/{id}/contacts/new")
-    public String newFacilityContact(@PathVariable Integer companyId,
-                                     @PathVariable Integer id,
-                                     Model model) {
-        var company = companyService.findById(companyId).orElseThrow();
-        var facility = facilityService.findById(id).orElseThrow();
-        model.addAttribute("company", company);
-        model.addAttribute("facility", facility);
-        model.addAttribute("context", "facility");
-        model.addAttribute("postUrl", "/admin/companies/" + companyId + "/facilities/" + id + "/contacts/save");
-        model.addAttribute("backUrl", "/admin/companies/" + companyId + "/facilities/" + id + "/contacts");
-        return "contact-form";
-    }
-
-    @PostMapping("/{id}/contacts/save")
-    public String saveFacilityContact(@PathVariable Integer companyId,
-                                      @PathVariable Integer id,
-                                      @RequestParam(required = false) Integer contactId,
-                                      @RequestParam(required = false) String phone,
-                                      @RequestParam(required = false) String address) {
-        if (contactId == null) {
-            contactInformationService.createForFacility(id, phone, address);
-        } else {
-            contactInformationService.updateForFacility(contactId, id, phone, address);
-        }
-        return "redirect:/admin/companies/" + companyId + "/facilities/" + id + "/contacts";
-    }
-
-    @PostMapping("/{id}/contacts/delete")
-    public String deleteFacilityContact(@PathVariable Integer companyId,
-                                        @PathVariable Integer id,
-                                        @RequestParam Integer contactId) {
-        contactInformationService.deleteForFacility(contactId, id);
-        return "redirect:/admin/companies/" + companyId + "/facilities/" + id + "/contacts";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/GlobalModelAttributes.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/GlobalModelAttributes.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,14 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import jakarta.servlet.http.HttpSession;
-
-@org.springframework.web.bind.annotation.ControllerAdvice
-public class GlobalModelAttributes {
-    @org.springframework.web.bind.annotation.ModelAttribute
-    public void addSessionUser(org.springframework.ui.Model model, HttpSession session) {
-        Object u = session.getAttribute("user");
-        Object name = session.getAttribute("username");
-        if (name != null) model.addAttribute("username", name);
-        if (u != null) model.addAttribute("user", u);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/HealthProfileController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/HealthProfileController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,89 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.ClientService;
-import mk.ukim.finki.synergymed.service.HealthProfileService;
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import java.util.List;
-
-@Controller
-@RequestMapping("/pharmacist/health-profile")
-@RequiredArgsConstructor
-public class HealthProfileController {
-
-    private final HealthProfileService healthProfileService;
-    private final ClientService clientService;
-    private final UserRepository userRepository;
-
-    private User getCurrentUser(UserDetails ud) {
-        return userRepository.findByUsername(ud.getUsername())
-                .orElseThrow(() -> new RuntimeException("User not found: " + ud.getUsername()));
-    }
-
-    @GetMapping("/create")
-    public String getCreateHealthProfilePage(
-            @RequestParam(required = false) String searchTerm,
-            @AuthenticationPrincipal UserDetails ud,
-            Model model) {
-
-        User user = getCurrentUser(ud);
-        model.addAttribute("user", user);
-
-        List<Client> clientsWithoutHealthProfile;
-
-        if (searchTerm != null && !searchTerm.trim().isEmpty()) {
-            clientsWithoutHealthProfile = clientService.findClientsWithoutHealthProfileByName(searchTerm);
-            model.addAttribute("searchTerm", searchTerm);
-            model.addAttribute("searched", true);
-        } else {
-            clientsWithoutHealthProfile = clientService.findAllClientsWithoutHealthProfile();
-            model.addAttribute("searched", false);
-        }
-
-        model.addAttribute("clients", clientsWithoutHealthProfile);
-
-        return "create-health-profile";
-    }
-
-    @PostMapping("/create")
-    public String createHealthProfile(
-            @RequestParam Integer clientId,
-            @RequestParam String bloodType,
-            @AuthenticationPrincipal UserDetails ud,
-            RedirectAttributes redirectAttributes) {
-
-        User user = getCurrentUser(ud);
-
-        try {
-            Client client = clientService.findClientById(clientId);
-            healthProfileService.createForClient(client, bloodType);
-
-            redirectAttributes.addFlashAttribute("success",
-                    "Health profile created successfully.");
-
-            return "redirect:/pharmacist/health-profile/create";
-
-        } catch (Exception e) {
-            redirectAttributes.addFlashAttribute("error", "Failed to create health profile: " + e.getMessage());
-            return "redirect:/pharmacist/health-profile/create";
-        }
-    }
-
-    @GetMapping("/search")
-    @ResponseBody
-    public List<Client> searchClients(@RequestParam String term) {
-        if (term == null || term.trim().isEmpty()) {
-            return clientService.findAllClientsWithoutHealthProfile();
-        }
-        return clientService.findClientsWithoutHealthProfileByName(term);
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/LoginController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/LoginController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,13 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-
-@Controller
-public class LoginController {
-
-    @GetMapping("/login")
-    public String getLoginPage() {
-        return "login";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/MedicineInteractionController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/MedicineInteractionController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,120 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Medicine;
-import mk.ukim.finki.synergymed.models.Medicineinteraction;
-import mk.ukim.finki.synergymed.service.MedicineService;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Optional;
-
-@Controller
-@RequestMapping("/pharmacist/medicine/interactions")
-@RequiredArgsConstructor
-public class MedicineInteractionController {
-
-    private final MedicineService medicineService;
-
-    @GetMapping
-    public String getInteractions(Model model) {
-        List<Medicine> medicineList = medicineService.findAll();
-        model.addAttribute("medicineList", medicineList);
-        return "medicine-interactions";
-    }
-
-    @PostMapping("/search")
-    public String searchInteractions(@RequestParam String searchTerm,
-                                     Model model) {
-        List<Medicine> medicineList = medicineService.findAll();
-        model.addAttribute("medicineList", medicineList);
-        model.addAttribute("searchedMedicine", searchTerm);
-
-        try {
-            List<Medicineinteraction> interactions = medicineService.interactions(searchTerm);
-            model.addAttribute("interactions", interactions);
-
-            if (interactions.isEmpty()) {
-                model.addAttribute("hasInfo", true);
-                model.addAttribute("info", "Нема пронајдени интеракции за " + searchTerm);
-            }
-
-        } catch (RuntimeException ex) {
-            model.addAttribute("hasError", true);
-            model.addAttribute("error", ex.getMessage());
-        }
-        return "medicine-interactions";
-    }
-
-    @GetMapping("/{id}")
-    public String getInteractionsForMedicine(@PathVariable Integer id,
-                                             Model model) {
-
-        List<Medicine> medicineList = medicineService.findAll();
-        model.addAttribute("medicineList", medicineList);
-
-        try {
-            Optional<Medicine> optMedicine = medicineService.findById(id);
-            if (optMedicine.isEmpty()) {
-                throw new RuntimeException("Лекот не е пронајден");
-            }
-
-            Medicine medicine = optMedicine.get();
-            List<Medicineinteraction> interactions = medicineService.interactions(medicine.getMedicineName());
-            model.addAttribute("interactions", interactions);
-            model.addAttribute("searchedMedicine", medicine.getMedicineName());
-
-            if (interactions.isEmpty()) {
-                model.addAttribute("hasInfo", true);
-                model.addAttribute("info", "Нема пронајдени интеракции за " + medicine.getMedicineName());
-            }
-
-        } catch (RuntimeException ex) {
-            model.addAttribute("hasError", true);
-            model.addAttribute("error", ex.getMessage());
-        }
-
-        return "medicine-interactions";
-    }
-
-    @GetMapping("/add")
-    public String getAddInteractionsPage(Model model) {
-        model.addAttribute("medicineList", medicineService.findAll());
-        return "add-medicine-interaction";
-    }
-
-    @PostMapping("/add")
-    public String addInteractions(@RequestParam Integer medicine1Id,
-                                  @RequestParam Integer medicine2Id,
-                                  @RequestParam String type,
-                                  @RequestParam String severity,
-                                  @RequestParam String description,
-                                  Model model) {
-        try {
-            if (medicine1Id.equals(medicine2Id)) {
-                throw new RuntimeException("Не можете да изберете ист лек двапати.");
-            }
-
-            Optional<Medicine> med1 = medicineService.findById(medicine1Id);
-            Optional<Medicine> med2 = medicineService.findById(medicine2Id);
-
-            if (med1.isEmpty() || med2.isEmpty()) {
-                throw new RuntimeException("Избраниот лек не постои.");
-            }
-
-            medicineService.addInteraction(med1.get(), med2.get(), type, description, severity);
-
-            model.addAttribute("hasSuccess", true);
-            model.addAttribute("success", "Интеракцијата е успешно додадена.");
-
-        } catch (RuntimeException ex) {
-            model.addAttribute("hasError", true);
-            model.addAttribute("error", ex.getMessage());
-        }
-
-        model.addAttribute("medicineList", medicineService.findAll());
-        return "add-medicine-interaction";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/PaymentController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/PaymentController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,87 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Clientorder;
-import mk.ukim.finki.synergymed.models.Shoppingcart;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.ClientService;
-import mk.ukim.finki.synergymed.service.ClubCardService;
-import mk.ukim.finki.synergymed.service.DeliveryCompanyService;
-import mk.ukim.finki.synergymed.service.PaymentMethodService;
-import mk.ukim.finki.synergymed.service.PaymentService;
-import mk.ukim.finki.synergymed.service.ShoppingCartService;
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.math.BigDecimal;
-
-@Controller
-@RequestMapping("/payment")
-@RequiredArgsConstructor
-public class PaymentController {
-
-    private final PaymentService paymentService;
-    private final ShoppingCartService shoppingCartService;
-    private final PaymentMethodService paymentMethodService;
-    private final DeliveryCompanyService deliveryCompanyService;
-    private final ClientService clientService;
-    private final UserRepository userRepository;
-    private final ClubCardService clubCardService;
-
-    private User getCurrentUser(UserDetails ud) {
-        return userRepository.findByUsername(ud.getUsername())
-                .orElseThrow(() -> new RuntimeException("User not found: " + ud.getUsername()));
-    }
-
-    @GetMapping
-    public String getPaymentPage(@RequestParam(name = "useCard", defaultValue = "false") boolean useCard,
-                                 @AuthenticationPrincipal UserDetails ud,
-                                 Model model) {
-        User user = getCurrentUser(ud);
-        Client client = clientService.findClientById(user.getId());
-        Shoppingcart cart = shoppingCartService.getOrCreateCart(client);
-
-        int base = shoppingCartService.getTotal(cart).intValue();
-        int discount = 0;
-        if (useCard) {
-            var cardOpt = clubCardService.getByClientId(client.getId());
-            if (cardOpt.isPresent()) {
-                Integer pts = cardOpt.get().getPoints();
-                int points = pts == null ? 0 : pts;
-                discount = Math.min(points / 2, base);
-            }
-        }
-        int shown = Math.max(0, base - discount);
-
-        model.addAttribute("methods", paymentMethodService.findAll());
-        model.addAttribute("deliveryCompanies", deliveryCompanyService.findAll());
-        model.addAttribute("total", BigDecimal.valueOf(shown));
-        model.addAttribute("discount", discount);
-        model.addAttribute("useCard", useCard);
-        model.addAttribute("username", ud.getUsername());
-        return "payment";
-    }
-
-    @PostMapping
-    public String processPayment(@AuthenticationPrincipal UserDetails ud,
-                                 @RequestParam Integer paymentMethodId,
-                                 @RequestParam Integer deliveryCompanyId,
-                                 @RequestParam(name = "useCard", defaultValue = "false") boolean useCard,
-                                 Model model) {
-        User user = getCurrentUser(ud);
-        Client client = clientService.findClientById(user.getId());
-        Shoppingcart cart = shoppingCartService.getOrCreateCart(client);
-
-        Clientorder order = paymentService.checkout(client, cart, paymentMethodId, deliveryCompanyId, useCard);
-
-        model.addAttribute("order", order);
-        model.addAttribute("payment", order.getPayment());
-        model.addAttribute("username", ud.getUsername());
-        return "payment-success";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/ProfileController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/ProfileController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,146 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Clubcard;
-import mk.ukim.finki.synergymed.models.Contactinformation;
-import mk.ukim.finki.synergymed.models.Healthprofile;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.*;
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Optional;
-
-@Controller
-@RequestMapping("/profile")
-@RequiredArgsConstructor
-public class ProfileController {
-
-    private final UserRepository userRepository;
-    private final HealthProfileService healthProfileService;
-    private final ContactInformationService contactInformationService;
-    private final SensitiveClientDataService sensitiveClientDataService;
-    private final PrescriptionService prescriptionService;
-    private final ClientService clientService;
-    private final ClubCardService clubcardService;
-
-
-    private User getCurrentUser(UserDetails ud) {
-        return userRepository.findByUsername(ud.getUsername())
-                .orElseThrow(() -> new RuntimeException("User not found: " + ud.getUsername()));
-    }
-
-    @GetMapping
-    public String getProfilePage(@AuthenticationPrincipal UserDetails ud, Model model) {
-        User user = getCurrentUser(ud);
-        model.addAttribute("user", user);
-        model.addAttribute("username", user.getUsername());
-
-        try {
-            Optional<Healthprofile> healthProfile = healthProfileService.getByClientId(user.getId());
-            model.addAttribute("healthProfile", healthProfile.orElse(null));
-            model.addAttribute("hasHealthProfile", healthProfile.isPresent());
-        } catch (Exception e) {
-            model.addAttribute("hasHealthProfile", false);
-        }
-
-        model.addAttribute("activeTab", "profile");
-        return "profile";
-    }
-
-    @GetMapping("/contacts")
-    public String profileContacts(@AuthenticationPrincipal UserDetails ud, Model model) {
-        User user = getCurrentUser(ud);
-        model.addAttribute("user", user);
-        model.addAttribute("username", user.getUsername());
-        List<Contactinformation> list = contactInformationService.listForUser(user.getId());
-        Contactinformation contact = list.isEmpty() ? null : list.get(0);
-        model.addAttribute("contact", contact);
-        model.addAttribute("activeTab", "contacts");
-        return "profile-contacts";
-    }
-
-    @GetMapping("/contacts/new")
-    public String newProfileContact() {
-        return "contact-form";
-    }
-
-    @PostMapping("/contacts/save")
-    public String saveProfileContact(@AuthenticationPrincipal UserDetails ud,
-                                     @RequestParam(required = false) Integer id,
-                                     @RequestParam(required = false) String phone,
-                                     @RequestParam(required = false) String address) {
-        User user = getCurrentUser(ud);
-        if (id == null) {
-            contactInformationService.createForUser(user.getId(), phone, address);
-        } else {
-            contactInformationService.updateForUser(id, user.getId(), phone, address);
-        }
-        return "redirect:/profile/contacts";
-    }
-
-    @PostMapping("/contacts/delete")
-    public String deleteProfileContact(@AuthenticationPrincipal UserDetails ud,
-                                       @RequestParam Integer id) {
-        User user = getCurrentUser(ud);
-        contactInformationService.deleteForUser(id, user.getId());
-        return "redirect:/profile/contacts";
-    }
-
-    private boolean isVerified(Integer userId) {
-        return clientService.isVerified(userId);
-    }
-
-    @GetMapping("/prescriptions")
-    public String prescriptions(@AuthenticationPrincipal UserDetails ud, Model model) {
-        User user = getCurrentUser(ud);
-        model.addAttribute("user", user);
-        model.addAttribute("username", user.getUsername());
-        Integer clientId = user.getId();
-
-        boolean verified = isVerified(clientId);
-        boolean pending = sensitiveClientDataService.latestForClient(clientId)
-                .map(s -> "во тек".equalsIgnoreCase(s.getVerificationStatus()))
-                .orElse(false);
-
-        var rx = verified ? prescriptionService.listForClient(clientId) : List.of();
-
-        model.addAttribute("activeTab", "prescriptions");
-        model.addAttribute("verified", verified);
-        model.addAttribute("pending", pending);
-        model.addAttribute("prescriptions", rx);
-        return "profile-prescriptions";
-    }
-    @GetMapping("/clubcard")
-    public String clubcard(@AuthenticationPrincipal UserDetails ud, Model model) {
-        User user = getCurrentUser(ud);
-        model.addAttribute("user", user);
-        model.addAttribute("username", user.getUsername());
-
-        Optional<Clubcard> opt = clubcardService.getByClientId(user.getId());
-        model.addAttribute("hasClubcard", opt.isPresent());
-        model.addAttribute("clubcard", opt.orElse(null));
-
-        model.addAttribute("activeTab", "clubcard");
-        return "profile-clubcard";
-
-    }
-    @PostMapping("/clubcard/create")
-    public String createClubcard(@AuthenticationPrincipal UserDetails ud,
-                                 @RequestParam("program") String program) {
-        User user = getCurrentUser(ud);
-
-        Optional<Clubcard> existing = clubcardService.getByClientId(user.getId());
-        if (existing.isEmpty()) {
-            clubcardService.createForClient(user.getId(), program);
-        }
-
-        return "redirect:/profile/clubcard";
-    }
-
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/RegisterController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/RegisterController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,49 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.service.UserService;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.time.LocalDate;
-
-@Controller
-@RequiredArgsConstructor
-@RequestMapping("/register")
-public class RegisterController {
-
-    private final UserService userService;
-
-    @GetMapping
-    public String getSignupPage(){
-        return "register";
-    }
-
-    @PostMapping
-    public String signup(Model model,
-                         @RequestParam String firstName,
-                         @RequestParam String lastName,
-                         @RequestParam String username,
-                         @RequestParam String password,
-                         @RequestParam String repeatPassword,
-                         @RequestParam String email,
-                         @RequestParam String gender,
-                         @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dateOfBirth){
-        try {
-            userService.register(firstName, lastName, username, password, repeatPassword, email, gender, dateOfBirth);
-            return "register-success";
-
-        } catch (RuntimeException ex) {
-            model.addAttribute("hasError", true);
-            model.addAttribute("error", ex.getMessage());
-
-            return "register";
-        }
-    }
-}
-
Index: c/main/java/mk/ukim/finki/synergymed/web/SensitiveClientDataController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/SensitiveClientDataController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,51 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.UserRepository;
-import mk.ukim.finki.synergymed.service.SensitiveClientDataService;
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-@Controller
-@RequestMapping("/profile/verification")
-@RequiredArgsConstructor
-public class SensitiveClientDataController {
-
-    private final SensitiveClientDataService sensitiveService;
-    private final UserRepository userRepository;
-
-    private User getCurrentUser(UserDetails ud) {
-        return userRepository.findByUsername(ud.getUsername())
-                .orElseThrow(() -> new RuntimeException("User not found: " + ud.getUsername()));
-    }
-
-    @GetMapping("/apply")
-    public String applyForm(@AuthenticationPrincipal UserDetails ud, Model model) {
-        User user = getCurrentUser(ud);
-        model.addAttribute("user", user);
-        model.addAttribute("activeTab", "prescriptions");
-        return "verification-apply";
-    }
-
-    @PostMapping("/apply")
-    public String submitApplication(@RequestParam String embg,
-                                    @RequestParam("portrait") MultipartFile portrait,
-                                    @AuthenticationPrincipal UserDetails ud,
-                                    RedirectAttributes ra) {
-        User user = getCurrentUser(ud);
-        try {
-            sensitiveService.applyOrUpdate(user.getId(), embg, portrait);
-            ra.addFlashAttribute("message", "Application submitted. Verification is now pending.");
-        } catch (Exception e) {
-            ra.addFlashAttribute("error", e.getMessage());
-            return "redirect:/profile/verification/apply";
-        }
-        return "redirect:/profile/prescriptions";
-    }
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/ShoppingCartController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/ShoppingCartController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,123 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Client;
-import mk.ukim.finki.synergymed.models.Shoppingcart;
-import mk.ukim.finki.synergymed.models.User;
-import mk.ukim.finki.synergymed.repositories.ClientRepository;
-import mk.ukim.finki.synergymed.repositories.ShoppingcartRepository;
-import mk.ukim.finki.synergymed.service.BrandedMedicineService;
-import mk.ukim.finki.synergymed.service.ShoppingCartService;
-import mk.ukim.finki.synergymed.service.ClubCardService;
-
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-
-@Controller
-@RequestMapping("/cart")
-@RequiredArgsConstructor
-public class ShoppingCartController {
-
-    private final ShoppingCartService shoppingCartService;
-    private final BrandedMedicineService brandedmedicineService;
-    private final ClientRepository clientRepository;
-    private final ShoppingcartRepository shoppingcartRepository;
-    private final ClubCardService clubCardService;
-
-    private Client getClient(@AuthenticationPrincipal UserDetails ud) {
-        User user = clientRepository.findByUsersUsername(ud.getUsername())
-                .map(Client::getUsers)
-                .orElseThrow(() -> new IllegalStateException("Client not found for user " + ud.getUsername()));
-        return clientRepository.findByUsers(user)
-                .orElseThrow(() -> new IllegalStateException("Client not found for user " + ud.getUsername()));
-    }
-
-    private Shoppingcart getOrCreateCart(Client client) {
-        return shoppingcartRepository.findByClient(client)
-                .orElseGet(() -> {
-                    Shoppingcart cart = new Shoppingcart();
-                    cart.setClient(client);
-                    return shoppingcartRepository.save(cart);
-                });
-    }
-
-    @PostMapping("/add/{medicineId}")
-    public String addToCart(@PathVariable Integer medicineId,
-                            @RequestParam(defaultValue = "1") int quantity,
-                            @AuthenticationPrincipal UserDetails ud) {
-        Client client = getClient(ud);
-        Shoppingcart cart = getOrCreateCart(client);
-
-        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
-                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
-
-        shoppingCartService.addMedicine(cart, medicine, quantity);
-        return "redirect:/catalog";
-    }
-
-    @PostMapping("/plus/{medicineId}")
-    public String increaseQuantity(@PathVariable Integer medicineId,
-                                   @AuthenticationPrincipal UserDetails ud) {
-        Client client = getClient(ud);
-        Shoppingcart cart = getOrCreateCart(client);
-
-        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
-                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
-
-        shoppingCartService.addMedicine(cart, medicine, 1);
-        return "redirect:/cart";
-    }
-
-    @PostMapping("/minus/{medicineId}")
-    public String decreaseQuantity(@PathVariable Integer medicineId,
-                                   @AuthenticationPrincipal UserDetails ud) {
-        Client client = getClient(ud);
-        Shoppingcart cart = getOrCreateCart(client);
-
-        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
-                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
-
-        shoppingCartService.decreaseMedicine(cart, medicine);
-        return "redirect:/cart";
-    }
-
-    @PostMapping("/remove/{medicineId}")
-    public String removeFromCart(@PathVariable Integer medicineId,
-                                 @AuthenticationPrincipal UserDetails ud) {
-        Client client = getClient(ud);
-        Shoppingcart cart = getOrCreateCart(client);
-
-        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
-                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
-
-        shoppingCartService.removeMedicine(cart, medicine);
-        return "redirect:/cart";
-    }
-
-    @GetMapping
-    public String showCart(Model model, @AuthenticationPrincipal UserDetails ud) {
-        Client client = getClient(ud);
-        Shoppingcart cart = getOrCreateCart(client);
-
-        var items = shoppingCartService.getMedicinesInCart(cart);
-        model.addAttribute("items", items);
-        model.addAttribute("total", shoppingCartService.getTotal(cart));
-        model.addAttribute("username", ud.getUsername());
-
-        var meds = new ArrayList<>(items.keySet());
-        var firstImageById = brandedmedicineService.cardImageUrlsFor(meds);
-        model.addAttribute("firstImageById", firstImageById);
-
-        clubCardService.getByClientId(client.getId())
-                .ifPresent(card -> model.addAttribute("clubCard", card));
-
-        return "cart";
-    }
-
-}
Index: c/main/java/mk/ukim/finki/synergymed/web/SupplyOrderController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/SupplyOrderController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,75 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Brandedmedicine;
-import mk.ukim.finki.synergymed.models.Distributor;
-import mk.ukim.finki.synergymed.models.Facility;
-import mk.ukim.finki.synergymed.models.Pharmacy;
-import mk.ukim.finki.synergymed.repositories.*;
-import mk.ukim.finki.synergymed.service.SupplyOrderService;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.*;
-
-@Controller
-@RequiredArgsConstructor
-@RequestMapping("/pharmacist/supply-orders")
-public class SupplyOrderController {
-
-    private final SupplyOrderService supplyOrderService;
-    private final PharmacyRepository pharmacyRepository;
-    private final FacilityRepository facilityRepository;
-    private final DistributorRepository distributorRepository;
-    private final DistributorBrandedmedicineRepository distributorBrandedmedicineRepository;
-
-    @GetMapping("/new")
-    public String newOrderForm(Model model) {
-        List<Pharmacy> pharmacies = pharmacyRepository.findAll();
-        List<Distributor> distributors = distributorRepository.findAll();
-
-        Map<Integer, List<Facility>> facilitiesByPharmacyId = new HashMap<>();
-        for (Pharmacy p : pharmacies) {
-            if (p.getCompany() == null) continue;
-            var facs = facilityRepository.findAllByCompanyId(p.getCompany().getId());
-            facilitiesByPharmacyId.put(p.getId(), facs);
-        }
-
-        Map<Integer, List<Brandedmedicine>> medicinesByDistributorId = new HashMap<>();
-        for (Distributor d : distributors) {
-            var meds = distributorBrandedmedicineRepository.findMedicinesByDistributor(d.getId());
-            medicinesByDistributorId.put(d.getId(), meds);
-        }
-
-        model.addAttribute("pharmacies", pharmacies);
-        model.addAttribute("distributors", distributors);
-        model.addAttribute("facilitiesByPharmacyId", facilitiesByPharmacyId);
-        model.addAttribute("medicinesByDistributorId", medicinesByDistributorId);
-        return "supplyorder";
-    }
-
-    @PostMapping
-    public String create(@RequestParam Integer pharmacyId,
-                         @RequestParam Integer facilityId,
-                         @RequestParam Integer distributorId,
-                         @RequestParam("medicineIds") Integer[] medicineIds,
-                         @RequestParam("quantities") Integer[] quantities) {
-        Integer id = supplyOrderService.createSupplyOrder(
-                pharmacyId, facilityId, distributorId, medicineIds, quantities
-        );
-        return "redirect:/pharmacist/supply-orders/" + id;
-    }
-        @GetMapping
-        public String list(Model model) {
-            model.addAttribute("orders", supplyOrderService.listAll());
-            return "supplyorder-list";
-        }
-
-        @GetMapping("/{id}")
-        public String details(@PathVariable Integer id, Model model) {
-            model.addAttribute("order", supplyOrderService.getById(id));
-            model.addAttribute("lines", supplyOrderService.linesFor(id));
-            return "supplyorder-details";
-        }
-    }
Index: c/main/java/mk/ukim/finki/synergymed/web/VerificationController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/VerificationController.java	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,43 +1,0 @@
-package mk.ukim.finki.synergymed.web;
-
-import lombok.RequiredArgsConstructor;
-import mk.ukim.finki.synergymed.models.Sensitiveclientdata;
-import mk.ukim.finki.synergymed.service.VerificationReviewService;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@Controller
-@RequestMapping("/pharmacist/verification")
-@RequiredArgsConstructor
-public class VerificationController {
-
-    private final VerificationReviewService reviewService;
-    @GetMapping
-    public String list(Model model) {
-        List<Sensitiveclientdata> pending = reviewService.listPending();
-        model.addAttribute("pending", pending);
-        return "verification-list";
-    }
-
-    @GetMapping("/{id}")
-    public String detail(@PathVariable Integer id, Model model) {
-        Sensitiveclientdata row = reviewService.get(id).orElseThrow();
-        model.addAttribute("item", row);
-        return "verification-approval";
-    }
-
-    @PostMapping("/{id}/approve")
-    public String approve(@PathVariable Integer id) {
-        reviewService.approve(id);
-        return "redirect:/pharmacist/verification";
-    }
-
-    @PostMapping("/{id}/deny")
-    public String deny(@PathVariable Integer id) {
-        reviewService.deny(id);
-        return "redirect:/pharmacist/verification";
-    }
-}
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ src/main/resources/application.properties	(revision c87db71f06a0fe440ecc644244f411921061afd0)
@@ -1,28 +1,1 @@
 spring.application.name=SynergyMed
-
-# Database connection
-spring.datasource.url=jdbc:postgresql://localhost:9999/db_202425z_va_prj_synergymed
-spring.datasource.username=db_202425z_va_prj_synergymed_owner
-spring.datasource.password=bc816962e9c6
-
-spring.jpa.properties.hibernate.default_schema=synergymed
-spring.datasource.driver-class-name=org.postgresql.Driver
-
-
-spring.datasource.hikari.maximum-pool-size=5
-
-# JPA / Hibernate settings
-spring.jpa.hibernate.ddl-auto=none
-spring.jpa.show-sql=true
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
-
-
-app.upload.branded-medicine-dir=uploads/images/branded_medicine/
-spring.servlet.multipart.max-file-size=5MB
-spring.servlet.multipart.max-request-size=10MB
-
-spring.docker.compose.enabled=false
-
-spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
-spring.jpa.properties.hibernate.boot.allow_jdbc_metadata_access=false
-
Index: c/main/resources/templates/add-medicine-interaction.html
===================================================================
--- src/main/resources/templates/add-medicine-interaction.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,179 +1,0 @@
-<!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.0">
-    <title>SynergyMed - Додај интеракција</title>
-
-    <!-- Header styles -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height:100vh;
-        }
-
-        /* Full-width global header - FIXED STYLING */
-        .site-header {
-            position:sticky;
-            top:0;
-            left:0;
-            right:0;
-            width:100%;
-            border-radius:0;
-            margin:0;
-            z-index:1000;
-            background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .container { max-width:800px; margin:0 auto; padding:20px; }
-
-        .header { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); margin-bottom:30px; overflow:hidden; }
-        .header-content { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; text-align:center; }
-        .header-content h1 { font-size:2.2rem; font-weight:300; margin-bottom:10px; }
-        .header-content p { font-size:1rem; opacity:.9; }
-
-        /* Header action row */
-        .header-buttons {
-            margin-top:14px;
-            display:flex;
-            justify-content:center;
-        }
-        .btn-back{
-            display:inline-flex; align-items:center; justify-content:center;
-            padding:10px 16px; border-radius:12px; font-weight:700; text-decoration:none; cursor:pointer;
-            background:#ffffff; color:#20b2aa; border:2px solid rgba(32,178,170,.25);
-            transition:transform .15s ease, box-shadow .15s ease, border-color .15s ease, background .15s ease;
-        }
-        .btn-back:hover{ transform:translateY(-1px); box-shadow:0 8px 18px rgba(0,0,0,.10); border-color:#20b2aa; background:#f8fffe; }
-
-        .card { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-        .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:20px 30px; font-size:1.3rem; font-weight:600; }
-        .card-body { padding:30px; }
-
-        .form-group { margin-bottom:25px; }
-        .form-control { width:100%; padding:15px 20px; border:2px solid #e1e5e9; border-radius:12px; font-size:1rem; transition:all .3s ease; background:#f8f9fa; }
-        .form-control:focus { outline:none; border-color:#20b2aa; background:white; box-shadow:0 0 0 3px rgba(32,178,170,.1); }
-
-        .btn-submit { width:100%; padding:15px; background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; border:none; border-radius:12px; font-size:1rem; font-weight:600; cursor:pointer; transition:all .3s ease; text-transform:uppercase; letter-spacing:1px; }
-        .btn-submit:hover { transform:translateY(-2px); box-shadow:0 10px 20px rgba(32,178,170,.3); }
-        .btn-submit:active { transform:translateY(0); }
-
-        .alert { padding:15px; border-radius:12px; margin-bottom:20px; font-size:.9rem; }
-        .alert-danger { background-color:#fee; color:#c33; border:1px solid #fcc; }
-        .alert-success { background-color:#efe; color:#363; border:1px solid #cfc; }
-
-        .severity-options { display:flex; gap:20px; justify-content:space-between; margin-top:15px; }
-        .severity-option { flex:1; }
-        .severity-option input { display:none; }
-        .severity-label {
-            display:block; padding:15px; border-radius:12px; text-align:center; cursor:pointer; font-weight:700;
-            text-transform:uppercase; transition:all .3s ease; border:2px solid transparent; font-size:0.95rem; letter-spacing:1px;
-            box-shadow:0 4px 8px rgba(0,0,0,0.08);
-        }
-        .severity-low    { background:linear-gradient(135deg,#d1ecf1,#b3e6f0); color:#0c5460; border-color:#0c5460; }
-        .severity-medium { background:linear-gradient(135deg,#fff3cd,#ffe082); color:#856404; border-color:#856404; }
-        .severity-high   { background:linear-gradient(135deg,#f8d7da,#f5b7b1); color:#721c24; border-color:#721c24; }
-        .severity-option input:checked + .severity-label { transform:scale(1.07); box-shadow:0 0 15px rgba(0,0,0,0.25); border-width:3px; }
-    </style>
-</head>
-<body>
-
-<!-- Global header -->
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="container">
-    <!-- Header -->
-    <div class="header">
-        <div class="header-content">
-            <h1>Додади интеракција</h1>
-            <p>Избери два различни лека и дефинирај ја нивната интеракција</p>
-
-            <!-- Back button under the heading and description -->
-            <div class="header-buttons">
-                <a class="btn-back"
-                   th:href="@{/pharmacist/medicine/interactions}">
-                    Назад
-                </a>
-            </div>
-        </div>
-    </div>
-
-    <!-- Alerts -->
-    <div th:if="${hasError}" class="alert alert-danger">
-        <span th:text="${error}">Порака за грешка</span>
-    </div>
-    <div th:if="${hasSuccess}" class="alert alert-success">
-        <span th:text="${success}">Порака за успех</span>
-    </div>
-
-    <!-- Add Interaction Form -->
-    <div class="card">
-        <div class="card-header">Интеракции</div>
-        <div class="card-body">
-            <form th:action="@{/pharmacist/medicine/interactions/add}" method="post">
-                <div class="form-group">
-                    <label for="medicine1Id">Прв лек</label>
-                    <select id="medicine1Id" name="medicine1Id" class="form-control" required>
-                        <option value="">-- Избери лек --</option>
-                        <option th:each="med : ${medicineList}"
-                                th:value="${med.id}"
-                                th:text="${med.medicineName + ' (' + med.activeIngredient + ')'}">
-                        </option>
-                    </select>
-                </div>
-
-                <div class="form-group">
-                    <label for="medicine2Id">Втор лек</label>
-                    <select id="medicine2Id" name="medicine2Id" class="form-control" required>
-                        <option value="">-- Избери друг лек --</option>
-                        <option th:each="med : ${medicineList}"
-                                th:value="${med.id}"
-                                th:text="${med.medicineName + ' (' + med.activeIngredient + ')'}">
-                        </option>
-                    </select>
-                </div>
-
-                <div class="form-group">
-                    <label>Ниво на интензивност</label>
-                    <div class="severity-options">
-                        <div class="severity-option">
-                            <input type="radio" id="low" name="severity" value="НИСКА" required>
-                            <label for="low" class="severity-label severity-low">НИСКА</label>
-                        </div>
-                        <div class="severity-option">
-                            <input type="radio" id="medium" name="severity" value="УМЕРЕНА" required>
-                            <label for="medium" class="severity-label severity-medium">УМЕРЕНА</label>
-                        </div>
-                        <div class="severity-option">
-                            <input type="radio" id="high" name="severity" value="ВИСОКА" required>
-                            <label for="high" class="severity-label severity-high">ВИСОКА</label>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="form-group">
-                    <label for="type">Тип на интеракција</label>
-                    <input type="text" id="type" name="type" class="form-control" placeholder="" required>
-                </div>
-
-                <div class="form-group">
-                    <label for="description">Опис</label>
-                    <textarea id="description" name="description" class="form-control" rows="4"
-                              placeholder="Внеси детален опис за интеракцијата..."></textarea>
-                </div>
-
-                <button type="submit" class="btn-submit">Зачувај интеракција</button>
-            </form>
-        </div>
-    </div>
-</div>
-
-<!-- Dropdown script -->
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/branded-medicine-details.html
===================================================================
--- src/main/resources/templates/branded-medicine-details.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,285 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="mk">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title th:text="${bm != null ? 'Брендиран лек – ' + bm.name : 'Брендиран лек'}">SynergyMed – Брендиран лек</title>
-
-    <!-- Global header styles (fragment) -->
-    <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-
-    <!-- Page styles (override header after fragment import) -->
-    <style>
-        /* Keep the global header flat and sticky at the top */
-        .site-header{
-            position: sticky;
-            top: 0; left: 0; right: 0; width: 100%;
-            z-index: 1000;
-            border-radius: 0;
-            background: #ffffff !important;
-            box-shadow: 0 2px 10px rgba(0,0,0,.10);
-        }
-
-        :root {
-            --teal-1:#20b2aa; --teal-2:#48d1cc;
-            --muted:#6b7280; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-            --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
-        }
-
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{
-            font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%, #f7f7f8 100%);
-            color:var(--text);
-        }
-
-        .page{max-width:1200px; margin:0 auto; padding:24px}
-
-        .card{background:#fff; border-radius:18px; box-shadow:var(--shadow); overflow:hidden; margin-bottom:28px}
-        .card-header{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff; padding:20px 24px; display:flex; align-items:center; justify-content:space-between;
-            font-size:1.25rem; font-weight:700;
-        }
-        .card-body{padding:22px}
-
-        .grid{
-            display:grid;
-            grid-template-columns: 1.15fr 0.85fr;
-            gap:22px;
-            align-items:start;
-        }
-
-        /* Gallery */
-        .gallery{
-            display:flex; flex-direction:column; gap:10px;
-        }
-        .viewport{
-            position:relative;
-            overflow-x:auto; overflow-y:hidden;
-            display:flex; gap:10px; scroll-behavior:smooth;
-            scroll-snap-type:x mandatory; /* enable horizontal snap */
-            border-radius:14px; box-shadow:var(--shadow-sm); background:#fff;
-        }
-        .slide{
-            flex:0 0 100%;
-            scroll-snap-align:center; /* each slide centers on snap */
-            position:relative;
-            aspect-ratio: 4 / 3;
-            background:#f3f4f6;
-            display:grid; place-items:center;
-        }
-        .slide img{width:100%; height:100%; object-fit:cover; display:block; border-radius:14px}
-
-        .controls{
-            display:flex; justify-content:space-between; gap:10px; align-items:center;
-        }
-        .pager{
-            display:flex; gap:6px; align-items:center; justify-content:center; flex:1;
-        }
-        .dot{
-            width:10px; height:10px; border-radius:50%;
-            background:#d1d5db; border:1px solid #e5e7eb;
-        }
-        .dot[aria-current="true"]{ background:#20b2aa; border-color:#20b2aa }
-
-        .ctrl-btn{
-            display:inline-flex; align-items:center; justify-content:center;
-            width:40px; height:40px; border-radius:10px;
-            background:#ffffff; border:1px solid rgba(0,0,0,.12);
-            cursor:pointer; transition:.15s ease; color:#111827;
-        }
-        .ctrl-btn:hover{ box-shadow:0 6px 14px rgba(0,0,0,.10) }
-
-        /* Details */
-        .meta{display:grid; grid-template-columns:1fr; gap:14px}
-        .row{display:flex; gap:10px; align-items:baseline; flex-wrap:wrap}
-        .label{min-width:160px; color:var(--muted); font-weight:600}
-        .value{font-weight:700}
-        .desc{white-space:pre-wrap; line-height:1.6}
-
-        .price{
-            font-size:1.6rem; font-weight:800;
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            -webkit-background-clip:text; background-clip:text; color:transparent;
-        }
-
-        .actions{display:flex; gap:10px; margin-top:16px; flex-wrap:wrap}
-        .btn{
-            display:inline-flex; align-items:center; gap:8px;
-            padding:10px 14px; border-radius:12px; font-weight:700; text-decoration:none; cursor:pointer;
-            transition:transform .15s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease, color .15s ease;
-        }
-        .btn-primary{ background:linear-gradient(135deg,var(--teal-1),var(--teal-2)); color:#fff; box-shadow:0 10px 20px rgba(32,178,170,.25); border:none }
-        .btn-outline{ background:#fff; color:#20b2aa; border:2px solid rgba(32,178,170,.25) }
-        .btn:hover{ transform: translateY(-1px); box-shadow:0 8px 18px rgba(0,0,0,.10) }
-
-        @media (max-width: 900px){
-            .grid{ grid-template-columns:1fr; }
-            .label{min-width:120px}
-        }
-    </style>
-</head>
-<body>
-<!-- Global header -->
-<th:block th:replace="~{fragments/header :: siteHeader('Каталог')}"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-        <span>
-          <span th:text="${bm.name}">Име на лек</span>
-        </span>
-            <a class="btn btn-outline" th:href="@{/catalog}">← Назад кон листата</a>
-        </div>
-
-        <div class="card-body">
-            <div class="grid">
-                <!-- Gallery -->
-                <section class="gallery"
-                         role="region"
-                         aria-roledescription="carousel"
-                         aria-label="Галерија слики за лек"
-                         aria-live="polite">
-                    <div class="viewport" id="viewport">
-                        <!-- Slides -->
-                        <div class="slide" th:each="img,iter : ${images}">
-                            <img th:src="@{${img.image}}" alt="Слика [[${iter.index + 1}]]">
-                        </div>
-                        <!-- Fallback if нема слики -->
-                        <div class="slide" th:if="${images == null or #lists.isEmpty(images)}">
-                            <img src="/images/placeholder.png" alt="Нема слика">
-                        </div>
-                    </div>
-
-                    <div class="controls" aria-label="Контроли на галеријата">
-                        <button type="button" class="ctrl-btn" id="prevBtn" aria-label="Претходна слика">◀</button>
-                        <div class="pager" id="pager" aria-label="Слајдови"></div>
-                        <button type="button" class="ctrl-btn" id="nextBtn" aria-label="Следна слика">▶</button>
-                    </div>
-                </section>
-
-                <!-- Details -->
-                <section class="details" aria-label="Детали за лек">
-                    <div class="meta">
-                        <div class="row">
-                            <div class="label">Назив</div>
-                            <div class="value" th:text="${bm.name}">Име</div>
-                        </div>
-                        <div class="row">
-                            <div class="label">Производител</div>
-                            <div class="value"
-                                 th:text="${
-                        bm.manufacturer != null && bm.manufacturer.company != null
-                        ? bm.manufacturer.company.companyName : '—'
-                     }">Компанија</div>
-                        </div>
-                        <div class="row">
-                            <div class="label">Цена</div>
-                            <div class="price"
-                                 th:text="${#numbers.formatDecimal(bm.price,1,'COMMA',2,'POINT')} + ' ден.'">0,00 ден.</div>
-                        </div>
-                        <div class="row">
-                            <div class="label">Форма</div>
-                            <div class="value" th:text="${bm.dosageForm}">Таблети</div>
-                        </div>
-                        <div class="row">
-                            <div class="label">Јачина</div>
-                            <div class="value" th:text="${bm.strength}">500 mg</div>
-                        </div>
-                        <div class="row">
-                            <div class="label">Земја на потекло</div>
-                            <div class="value" th:text="${bm.originCountry != null ? bm.originCountry : '—'}">Македонија</div>
-                        </div>
-                        <div class="row">
-                            <div class="label">Опис</div>
-                            <div class="desc" th:text="${bm.description != null ? bm.description : 'Нема опис.'}">Опис...</div>
-                        </div>
-
-                        <div class="actions">
-                            <!-- Example client action; gate with role if needed -->
-                            <form th:action="@{/cart/add/{id}(id=${bm.id})}" method="post" style="display:inline;">
-                                <input type="hidden" th:if="${_csrf != null}" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
-                                <button type="submit" class="btn btn-primary" sec:authorize="hasRole('CLIENT')">Додај во кошничка</button>
-                            </form>
-                        </div>
-                    </div>
-                </section>
-            </div>
-        </div>
-    </div>
-</div>
-
-<!-- Header dropdown behavior (fragment) -->
-<th:block th:replace="~{fragments/header :: headerScripts}"></th:block>
-
-<script>
-    (function(){
-        const vp   = document.getElementById('viewport');
-        const prev = document.getElementById('prevBtn');
-        const next = document.getElementById('nextBtn');
-        const pager= document.getElementById('pager');
-
-        const slides = Array.from(vp.querySelectorAll('.slide'));
-        const slideCount = slides.length;
-        let idx = 0;
-
-        function buildDots(){
-            pager.innerHTML = '';
-            for(let i=0;i<slideCount;i++){
-                const d = document.createElement('button');
-                d.className = 'dot';
-                d.type = 'button';
-                d.setAttribute('aria-label', `Слајд ${i+1} од ${slideCount}`);
-                d.setAttribute('aria-current', i===idx ? 'true' : 'false');
-                d.addEventListener('click', ()=>scrollToIndex(i));
-                pager.appendChild(d);
-            }
-        }
-
-        function updateAria(){
-            slides.forEach((s, i)=>{
-                s.setAttribute('aria-hidden', i===idx ? 'false' : 'true');
-                s.toggleAttribute('aria-current', i===idx);
-            });
-            Array.from(pager.children).forEach((dot,i)=>{
-                dot.setAttribute('aria-current', i===idx ? 'true' : 'false');
-            });
-        }
-
-        function scrollToIndex(i){
-            if (i<0 || i>=slideCount) return;
-            idx = i;
-            slides[i].scrollIntoView({behavior:'smooth', inline:'center', block:'nearest'});
-            updateAria();
-        }
-
-        function nearestIndex(){
-            const vw = vp.clientWidth;
-            const x  = vp.scrollLeft;
-            return Math.round(x / vw);
-        }
-
-        prev?.addEventListener('click', ()=>scrollToIndex(idx-1));
-        next?.addEventListener('click', ()=>scrollToIndex(idx+1));
-
-        vp?.addEventListener('scroll', ()=>{
-            const n = nearestIndex();
-            if (n !== idx){ idx = n; updateAria(); }
-        }, {passive:true});
-
-        // Keyboard support
-        vp?.addEventListener('keydown', (e)=>{
-            if (e.key === 'ArrowRight') { e.preventDefault(); scrollToIndex(idx+1); }
-            if (e.key === 'ArrowLeft')  { e.preventDefault(); scrollToIndex(idx-1); }
-        });
-
-        // Init
-        buildDots();
-        updateAria();
-    })();
-</script>
-</body>
-</html>
Index: c/main/resources/templates/branded-medicine-form.html
===================================================================
--- src/main/resources/templates/branded-medicine-form.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,354 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title th:text="${mode=='create' ? 'Креирај нов брендиран лек' : 'Измени Брендиран Лек'}">SynergyMed – Брендиран Лек</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <!-- Global header styles (fragment) -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        :root {
-            --teal-1:#20b2aa; --teal-2:#48d1cc;
-            --bg:#fefeff; --card:#ffffff;
-            --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-            --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
-        }
-        *{margin:0;padding:0;box-sizing:border-box}
-
-        body{
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);
-            color:var(--text);
-        }
-
-        /* Full-width global header - FIXED STYLING (override fragment defaults) */
-        .site-header{
-            position:sticky;
-            top:0;
-            left:0;
-            right:0;
-            width:100%;
-            border-radius:0;
-            margin:0;
-            z-index:1000;
-            background:#ffffff !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .page{width:100%; max-width:1200px; padding:28px; margin:0 auto}
-
-        /* Card wrapper */
-        .card{
-            background:var(--card);
-            border-radius:18px;
-            box-shadow:var(--shadow);
-            margin-bottom:28px;
-            overflow:hidden;
-        }
-        .card-header{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            padding:20px 24px;
-            display:flex; justify-content:space-between; align-items:center;
-            font-size:1.3rem; font-weight:600;
-        }
-        .card-body{padding:22px}
-
-        .btn{
-            display:inline-block; border:none; cursor:pointer; text-decoration:none;
-            padding:12px 16px; border-radius:12px; font-weight:600;
-            letter-spacing:.5px; transition:.2s ease;
-        }
-        .btn-primary{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            box-shadow:0 10px 20px rgba(32,178,170,.25);
-        }
-        .btn-primary:hover{transform:translateY(-2px)}
-        .btn-secondary{
-            background:#fff; color:#111; border:2px solid rgba(32,178,170,.25);
-        }
-
-        /* Form layout */
-        .row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}
-        .row-1{display:grid;grid-template-columns:1fr;gap:16px;margin-bottom:6px}
-        label{display:block;margin-bottom:8px;color:#334155;font-weight:600;font-size:.95rem}
-        input,select,textarea{width:100%;padding:14px 12px;border:2px solid #e6ebf0;border-radius:12px;background:#f8fafc;transition:.2s ease;font-size:1rem}
-        textarea{min-height:110px}
-        input:focus,select:focus,textarea:focus{outline:none;border-color:var(--teal-1);background:#fff;box-shadow:0 0 0 3px rgba(32,178,170,.12)}
-        .hint{color:var(--muted);font-size:.86rem;margin-top:4px}
-        .actions{display:flex;gap:12px;padding-top:12px;flex-wrap:wrap}
-
-        /* Images grid */
-        .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px}
-        .img-card{position:relative;background:#f8fafc;border:1px solid #e6ebf0;border-radius:12px;padding:8px}
-        .thumb{width:100%;height:110px;object-fit:cover;border-radius:8px;display:block}
-
-        @media (max-width:720px){.row{grid-template-columns:1fr}}
-        @media (max-width:560px){.page{padding:16px}}
-    </style>
-</head>
-<body>
-
-<!-- Global header (fragment with parameters) -->
-<th:block th:replace="fragments/header :: siteHeader('Брендирани лекови')"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-            <span th:text="${mode=='create' ? 'Креирај нов брендиран лек' : 'Измени Брендиран Лек'}">Формулар</span>
-        </div>
-
-        <div class="card-body">
-            <form th:action="@{/admin/branded-medicines/save}" method="post" enctype="multipart/form-data" id="saveForm">
-                <input type="hidden" name="id" th:if="${mode=='edit'}" th:value="${bm.id}"/>
-
-                <div class="row">
-                    <div>
-                        <label>Производител</label>
-                        <select name="manufacturerId" required>
-                            <option th:if="${mode=='create'}" value="" disabled selected>Избери производител</option>
-                            <option th:each="m : ${manufacturers}"
-                                    th:value="${m.id}"
-                                    th:text="${m.company.companyName}"
-                                    th:selected="${mode=='edit' and bm.manufacturer != null and m.id == bm.manufacturer.id}">
-                                Производител
-                            </option>
-                        </select>
-                        <div class="hint">Избери ја компанијата производител на Брендираниот Лек</div>
-                    </div>
-                    <div>
-                        <label>Цена</label>
-                        <input type="number" step="0.01" name="price" th:value="${mode=='edit' ? bm.price : ''}" required/>
-                    </div>
-                </div>
-
-                <div class="row">
-                    <div>
-                        <label>Форма на лекот</label>
-                        <input type="text" name="dosageForm" th:value="${mode=='edit' ? bm.dosageForm : ''}" required/>
-                    </div>
-                    <div>
-                        <label>Јачина</label>
-                        <input type="text" name="strength" th:value="${mode=='edit' ? bm.strength : ''}" required/>
-                    </div>
-                </div>
-
-                <div class="row">
-                    <div>
-                        <label>Земја на потекло</label>
-                        <input type="text" name="originCountry" th:value="${mode=='edit' ? bm.originCountry : ''}"/>
-                    </div>
-                    <div>
-                        <label>Име</label>
-                        <input type="text" name="name" th:value="${mode=='edit' ? bm.name : ''}" required/>
-                    </div>
-                </div>
-
-                <div class="row-1">
-                    <div>
-                        <label>Опис</label>
-                        <textarea name="description" th:text="${mode=='edit' ? bm.description : ''}"></textarea>
-                    </div>
-                    <div>
-                        <label>Нови слики</label>
-                        <input type="file" id="newImages" name="images" multiple accept="image/*"/>
-                        <div class="hint">Изберете повеќе слики да ги прикачите, се зачувуваат само по кликнување на копчето „Зачувај“</div>
-                        <div id="preview" class="grid" style="margin-top:12px;"></div>
-                    </div>
-                </div>
-
-                <!-- Existing images (edit mode) -->
-                <div th:if="${mode=='edit' and images != null and !images.isEmpty()}" style="margin-top:18px;">
-                    <div class="grid">
-                        <div class="img-card" th:each="img : ${images}">
-                            <img class="thumb" th:src="@{${img.image}}" alt="слика">
-                            <input type="hidden" name="removeImageIds" th:value="${img.id}" disabled>
-                            <div style="display:flex;justify-content:space-between;align-items:center;margin-top:6px;">
-                                <button type="button" class="btn-remove-existing"
-                                        th:attr="data-id=${img.id}"
-                                        style="background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:4px 8px;cursor:pointer;">
-                                    Одстрани
-                                </button>
-                                <label style="margin-left:8px;">
-                                    <input type="radio" name="mainPick" th:value="${'existing:'+img.id}"
-                                           th:checked="${img.mainImage}">
-                                    Главна слика
-                                </label>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <!-- Hidden fields managed by JS -->
-                <input type="hidden" id="mainExistingId" name="mainExistingId">
-                <input type="hidden" id="mainNewIndex"   name="mainNewIndex">
-
-                <div class="actions">
-                    <button class="btn btn-primary" type="submit">Зачувај</button>
-                    <a class="btn btn-secondary" th:href="@{/admin/branded-medicines}">Откажи</a>
-                </div>
-            </form>
-
-            <script>
-                // Hidden fields for the server (avoid "undefined")
-                const mainExistingId = document.getElementById('mainExistingId');
-                const mainNewIndex   = document.getElementById('mainNewIndex');
-
-                // 1) Existing remove buttons toggle hidden remove ids
-                function wireExistingRemoveButtons() {
-                    document.querySelectorAll('.btn-remove-existing').forEach(btn => {
-                        btn.addEventListener('click', () => {
-                            const card = btn.closest('.img-card');
-                            const hidden = card.querySelector('input[type="hidden"][name="removeImageIds"]');
-                            const wasEnabled = !hidden.disabled;
-                            hidden.disabled = wasEnabled ? true : false;
-                            btn.textContent = wasEnabled ? 'Отстрани' : 'Врати';
-                            btn.style.borderColor = wasEnabled ? '#e5e7eb' : '#f0caca';
-                            btn.style.color = wasEnabled ? '#111' : '#b3261e';
-
-                            // If this was main and now removed, clear main and pick a fallback below
-                            const radio = card.querySelector('input[type="radio"][name="mainPick"]');
-                            if (!hidden.disabled && radio && radio.checked) {
-                                radio.checked = false;
-                                mainExistingId.value = '';
-                                chooseFallbackMain();
-                            }
-                        });
-                    });
-                }
-                wireExistingRemoveButtons();
-
-                // 2) One radio group across existing and new
-                document.addEventListener('change', (e) => {
-                    const t = e.target;
-                    if (t && t.name === 'mainPick' && t.type === 'radio') {
-                        const v = String(t.value || '');
-                        if (v.startsWith('existing:')) {
-                            mainExistingId.value = v.split(':')[1] || '';
-                            mainNewIndex.value = '';
-                        } else if (v.startsWith('new:')) {
-                            mainNewIndex.value = v.split(':')[1] || '';
-                            mainExistingId.value = '';
-                        }
-                    }
-                });
-
-                // 3) Aggregate multiple selections with DataTransfer + FileReader previews
-                const fileInput = document.getElementById('newImages');
-                const preview   = document.getElementById('preview');
-                const saveForm  = document.getElementById('saveForm');
-                let aggregated  = [];
-
-                function syncInputFiles() {
-                    const dt = new DataTransfer();
-                    aggregated.forEach(f => dt.items.add(f));
-                    fileInput.files = dt.files;
-                }
-
-                function buildPreviewCard(dataUrl, fileName, idx) {
-                    const card = document.createElement('div');
-                    card.className = 'img-card';
-                    card.innerHTML = `
-        <img class="thumb" src="${dataUrl}" alt="${fileName}">
-        <div style="display:flex;justify-content:space-between;align-items:center;margin-top:6px;">
-          <label>
-            <input type="radio" name="mainPick" value="new:${idx}"> Главна (нова)
-          </label>
-          <button type="button" class="remove-new-btn" data-index="${idx}"
-                  style="background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:4px 8px;cursor:pointer;">
-            Отстрани
-          </button>
-        </div>
-      `;
-                    return card;
-                }
-
-                function renderPreview() {
-                    preview.innerHTML = '';
-                    aggregated.forEach((file, idx) => {
-                        const reader = new FileReader();
-                        reader.onload = e => {
-                            const card = buildPreviewCard(e.target.result, file.name, idx);
-                            preview.appendChild(card);
-                            const removeBtn = card.querySelector('.remove-new-btn');
-                            removeBtn.addEventListener('click', () => {
-                                const i = parseInt(removeBtn.getAttribute('data-index'), 10);
-                                if (mainNewIndex.value === String(i)) mainNewIndex.value = '';
-                                aggregated.splice(i, 1);
-                                syncInputFiles();
-                                renderPreview();
-                                if (!mainExistingId.value && !mainNewIndex.value) chooseFallbackMain();
-                            });
-                        };
-                        reader.readAsDataURL(file);
-                    });
-
-                    if (!mainExistingId.value && !mainNewIndex.value && aggregated.length > 0) {
-                        mainNewIndex.value = '0';
-                        const first = preview.querySelector('input[type="radio"][name="mainPick"][value="new:0"]');
-                        if (first) first.checked = true;
-                    }
-                }
-
-                function chooseFallbackMain() {
-                    const existingCards = document.querySelectorAll('.img-card input[type="hidden"][name="removeImageIds"]');
-                    for (const hidden of existingCards) {
-                        if (hidden.disabled) {
-                            const card = hidden.closest('.img-card');
-                            const r = card.querySelector('input[type="radio"][name="mainPick"][value^="existing:"]');
-                            if (r) {
-                                r.checked = true;
-                                const v = r.value.split(':')[1] || '';
-                                mainExistingId.value = v;
-                                mainNewIndex.value = '';
-                                return;
-                            }
-                        }
-                    }
-                    const newRadio = preview.querySelector('input[type="radio"][name="mainPick"][value^="new:"]');
-                    if (newRadio) {
-                        newRadio.checked = true;
-                        mainExistingId.value = '';
-                        mainNewIndex.value = newRadio.value.split(':')[1] || '';
-                    } else {
-                        mainExistingId.value = '';
-                        mainNewIndex.value = '';
-                    }
-                }
-
-                fileInput?.addEventListener('change', function () {
-                    const files = Array.from(this.files || []);
-                    files.forEach(f => { if (/^image\//.test(f.type)) aggregated.push(f); });
-                    this.value = ''; // allow re-selecting same file
-                    syncInputFiles();
-                    renderPreview();
-                    if (!mainExistingId.value && !mainNewIndex.value) chooseFallbackMain();
-                });
-
-                (function initMainFromExisting() {
-                    const checked = document.querySelector('input[type="radio"][name="mainPick"]:checked');
-                    if (checked) {
-                        const v = checked.value || '';
-                        if (v.startsWith('existing:')) mainExistingId.value = v.split(':')[1] || '';
-                        if (v.startsWith('new:'))      mainNewIndex.value   = v.split(':')[1] || '';
-                    }
-                })();
-
-                saveForm?.addEventListener('submit', () => {
-                    if (mainExistingId.value === 'undefined') mainExistingId.value = '';
-                    if (mainNewIndex.value   === 'undefined') mainNewIndex.value   = '';
-                });
-            </script>
-        </div>
-    </div>
-</div>
-
-<!-- Header dropdown behavior (fragment) -->
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/cart.html
===================================================================
--- src/main/resources/templates/cart.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,158 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>SynergyMed – Кошничка</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        :root{ --teal-1:#20b2aa; --teal-2:#48d1cc; --muted:#6c757d; }
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);color:#1f2937}
-        .site-header{position:sticky;top:0;left:0;right:0;width:100%;border-radius:0;margin:0;z-index:1000;background:white !important;box-shadow:0 2px 10px rgba(0,0,0,0.1)}
-        .cart-container{max-width:1000px;margin:28px auto;padding:20px;background:white;border-radius:18px;box-shadow:0 12px 30px rgba(0,0,0,0.1)}
-        .cart-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}
-        .cart-item{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid #eee}
-        .thumb{width:100px;height:80px;object-fit:cover;border-radius:10px;margin-right:18px}
-        .cart-info{flex:1}
-        .cart-title{font-weight:700;font-size:1.1rem}
-        .cart-qty{display:flex;align-items:center;gap:10px;margin-top:8px}
-        .btn-outline{background:#fff;border:2px solid rgba(32,178,170,.25);color:#20b2aa;padding:6px 10px;border-radius:8px;text-decoration:none;font-weight:600;transition:.2s ease}
-        .btn-outline:hover{border-color:#20b2aa;box-shadow:0 6px 14px rgba(32,178,170,.18)}
-        .btn-outline.is-disabled{opacity:.5;cursor:not-allowed;box-shadow:none;border-color:rgba(32,178,170,.18)}
-        .btn-remove{color:#b3261e;border-color:#f0caca}
-        .qty-badge{
-            min-width:34px; text-align:center; font-weight:700;
-            border:2px solid rgba(32,178,170,.25); border-radius:8px; padding:6px 10px; background:#fff; color:#20b2aa
-        }
-        .cart-total{text-align:right;margin-top:20px;font-size:1.4rem;font-weight:700}
-        .btn-checkout{margin-top:20px;display:inline-block;background:linear-gradient(135deg,#20b2aa,#48d1cc);color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-weight:600;transition:.2s ease}
-        .btn-checkout:hover{transform:translateY(-2px)}
-        .loyalty{margin-top:12px;padding:12px;border:1px solid #e5e7eb;border-radius:12px;background:#f9fafb}
-        .loyalty h4{margin:0 0 6px 0}
-        .muted{color:#6c757d}
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader('cart')"></th:block>
-
-<div class="cart-container">
-    <div class="cart-header">
-        <h2>Вашата Кошничка</h2>
-        <a th:href="@{/catalog}" class="btn-outline">← Продолжете со пазарење</a>
-    </div>
-
-    <!-- Empty state for Map items -->
-    <div th:if="${items == null or #maps.isEmpty(items)}">
-        <p>Вашата кошничка е празна.</p>
-    </div>
-
-    <div th:each="entry : ${items}" class="cart-item">
-        <img class="thumb"
-             th:if="${firstImageById != null and firstImageById.containsKey(entry.key.id)}"
-             th:src="@{${firstImageById[entry.key.id]}}"
-             alt="лек">
-        <img class="thumb"
-             th:unless="${firstImageById != null and firstImageById.containsKey(entry.key.id)}"
-             src="/images/default-medicine.png"
-             alt="лек">
-
-        <div class="cart-info">
-            <div class="cart-title" th:text="${entry.key.name}">Лек</div>
-            <div class="muted" th:text="${entry.key.dosageForm}">Форма</div>
-
-            <!-- Quantity controls -->
-            <div class="cart-qty">
-                <form th:action="@{/cart/minus/{id}(id=${entry.key.id})}" method="post" style="display:inline">
-                    <button type="submit"
-                            class="btn-outline"
-                            th:classappend="${entry.value <= 1} ? ' is-disabled'"
-                            th:disabled="${entry.value <= 1}"
-                            aria-label="Намали количина">−</button>
-                </form>
-
-                <!-- Live quantity between − and ＋ -->
-                <span class="qty-badge" th:text="${entry.value}">1</span>
-
-                <form th:action="@{/cart/plus/{id}(id=${entry.key.id})}" method="post" style="display:inline">
-                    <button type="submit" class="btn-outline" aria-label="Зголеми количина">＋</button>
-                </form>
-
-                <form th:action="@{/cart/remove/{id}(id=${entry.key.id})}" method="post" style="display:inline">
-                    <button type="submit" class="btn-outline btn-remove">Одстрани</button>
-                </form>
-            </div>
-        </div>
-
-        <div th:text="${#numbers.formatDecimal(entry.key.price * entry.value, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0 ден.</div>
-    </div>
-
-    <!-- Loyalty card -->
-    <div class="loyalty" th:if="${clubCard != null}">
-        <h4>Клуб картичка</h4>
-        <div class="muted">
-            Програма: <span th:text="${clubCard.clubProgram}">Стандардна програма</span> •
-            Поени: <span id="cardPoints" th:text="${clubCard.points}">0</span>
-        </div>
-        <label style="display:flex;align-items:center;gap:8px;margin-top:6px;">
-            <input type="checkbox" id="usePointsChk">
-            <span>Искористете поени (−1 денар за секои 2 поени)</span>
-        </label>
-        <div class="muted" id="pointsNote" style="margin-top:6px;"></div>
-    </div>
-
-    <!-- Totals only when Map has entries -->
-    <div class="cart-total" th:if="${items != null and !#maps.isEmpty(items)}">
-        Вкупно:
-        <span id="totalValue"
-              th:data-basetotal="${total.intValue()}"
-              th:text="${#numbers.formatDecimal(total, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</span>
-        <div class="muted" id="discountLine" style="display:none;">Попуст: <span id="discountValue">0</span> ден.</div>
-    </div>
-
-    <!-- Hide checkout when cart is empty (items is a Map) -->
-    <a class="btn-checkout" id="proceedLink"
-       th:href="@{/payment}"
-       th:if="${items != null and !#maps.isEmpty(items)}">Продолжете кон плаќање</a>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-<script>
-    (function(){
-        const chk = document.getElementById('usePointsChk');
-        const totalEl = document.getElementById('totalValue');
-        const discountLine = document.getElementById('discountLine');
-        const discountValue = document.getElementById('discountValue');
-        const pointsEl = document.getElementById('cardPoints');
-        const proceed = document.getElementById('proceedLink');
-        const baseHref = proceed ? (proceed.getAttribute('href') || '/payment') : '/payment';
-        if (!totalEl) return;
-
-        const baseTotal = parseInt(totalEl.getAttribute('data-basetotal') || '0', 10);
-
-        function recompute(){
-            const pts = parseInt(pointsEl ? pointsEl.textContent : '0', 10);
-            const maxDiscount = Math.floor(pts / 2); // 1 ден. per 2 points
-            const apply = !!(chk && chk.checked);
-            const applied = apply ? Math.min(maxDiscount, baseTotal) : 0;
-            const newTotal = Math.max(0, baseTotal - applied);
-
-            totalEl.textContent = newTotal.toFixed(2) + ' ден.';
-            if (discountLine) discountLine.style.display = applied > 0 ? 'block' : 'none';
-            if (discountValue) discountValue.textContent = applied.toString();
-
-            if (proceed) {
-                proceed.setAttribute('href', apply ? (baseHref + '?useCard=true') : baseHref);
-            }
-
-            const note = document.getElementById('pointsNote');
-            if (note) note.textContent = 'Достапен попуст: ' + maxDiscount + ' ден. (од ' + pts + ' поени)';
-        }
-
-        if (chk) chk.addEventListener('change', recompute);
-        recompute();
-    })();
-</script>
-</body>
-</html>
Index: c/main/resources/templates/catalog-edit.html
===================================================================
--- src/main/resources/templates/catalog-edit.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,76 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>SynergyMed – Уреди производи</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        :root { --teal-1:#20b2aa; --teal-2:#48d1cc; --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10); --shadow-sm:0 6px 18px rgba(0,0,0,0.08); }
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);color:var(--text)}
-        .site-header{position:sticky;top:0;left:0;right:0;width:100%;border-radius:0;z-index:1000;background:#fff;box-shadow:0 2px 10px rgba(0,0,0,.1)}
-        .page{width:100%;max-width:1200px;margin:0 auto;padding:24px}
-        .card{background:#fff;border-radius:18px;box-shadow:var(--shadow);overflow:hidden;margin-bottom:28px}
-        .card-header{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;padding:20px 24px;
-            display:flex;align-items:center;justify-content:space-between}
-        .card-body{padding:22px}
-        .actions{display:flex;gap:12px;flex-wrap:wrap}
-        .btn{display:inline-block;border:none;cursor:pointer;text-decoration:none;padding:10px 16px;border-radius:12px;font-weight:600}
-        .btn-primary{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;box-shadow:0 10px 20px rgba(32,178,170,.25)}
-        .btn-secondary{background:#fff;color:#111;border:2px solid rgba(32,178,170,.25)}
-        table{width:100%;border-collapse:collapse}
-        th, td{padding:12px 10px;border-bottom:1px solid #eef2f7;text-align:left}
-        th{font-weight:700}
-        .muted{color:var(--muted)}
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader('Каталог')"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-            <span>Измен ја достапноста на лековите</span>
-            <div class="actions">
-                <a class="btn btn-secondary" th:href="@{/catalog}">Назад</a>
-            </div>
-        </div>
-        <div class="card-body">
-            <form th:action="@{/catalog/edit}" method="post">
-                <input type="hidden" th:if="${_csrf != null}" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
-                <table>
-                    <thead>
-                    <tr>
-                        <th style="width:48px;">Достапен</th>
-                        <th>Име</th>
-                        <th class="muted">Форма</th>
-                        <th class="muted">Цена</th>
-                    </tr>
-                    </thead>
-                    <tbody>
-                    <tr th:each="m : ${medicines}">
-                        <td>
-                            <input type="checkbox" name="ids" th:value="${m.id}"
-                                   th:checked="${selectedIds != null and selectedIds.contains(m.id)}">
-                        </td>
-                        <td th:text="${m.name}">Лек</td>
-                        <td class="muted" th:text="${m.dosageForm}">Форма</td>
-                        <td class="muted" th:text="${#numbers.formatDecimal(m.price, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</td>
-                    </tr>
-                    </tbody>
-                </table>
-                <div class="actions" style="margin-top:16px;">
-                    <button type="submit" class="btn btn-primary">Зачувај</button>
-                    <a class="btn btn-secondary" th:href="@{/catalog}">Откажи</a>
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/catalog.html
===================================================================
--- src/main/resources/templates/catalog.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,132 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>SynergyMed – Производи</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        :root { --teal-1:#20b2aa; --teal-2:#48d1cc; --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10); --shadow-sm:0 6px 18px rgba(0,0,0,0.08); }
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);color:var(--text)}
-        .site-header{position:sticky;top:0;left:0;right:0;width:100%;border-radius:0;z-index:1000;background:#fff;box-shadow:0 2px 10px rgba(0,0,0,.1)}
-        .page{width:100%;max-width:1200px;margin:0 auto;padding:24px}
-        .card{background:#fff;border-radius:18px;box-shadow:var(--shadow);overflow:hidden;margin-bottom:28px}
-        .card-header{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;padding:20px 24px;
-            display:flex;align-items:center;justify-content:space-between}
-        .card-body{padding:22px}
-        .btn{display:inline-block;border:none;cursor:pointer;text-decoration:none;padding:10px 16px;border-radius:12px;font-weight:600}
-        .btn-primary{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;box-shadow:0 10px 20px rgba(32,178,170,.25)}
-        .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:18px}
-        .item{background:#fff;border-radius:16px;box-shadow:var(--shadow-sm);overflow:hidden;display:flex;flex-direction:column}
-        .thumb{width:100%;height:160px;object-fit:cover;display:block}
-        .thumb-link{display:block; line-height:0}
-        .content{padding:14px 16px;display:flex;flex-direction:column;gap:10px}
-        .title{font-weight:700;margin-bottom:4px}
-        .muted{color:var(--muted);font-size:.92rem;margin-bottom:6px}
-        .price{font-weight:800}
-        .btn-outline{background:#fff;border:2px solid rgba(32,178,170,.25);color:#20b2aa;padding:10px 14px;border-radius:10px;text-decoration:none;font-weight:600;transition:.2s ease;text-align:center}
-        .btn-outline:hover{border-color:#20b2aa;box-shadow:0 6px 14px rgba(32,178,170,.18);background:#f8fffe}
-        .toast-container{position:fixed;top:80px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:10px}
-        .toast{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;padding:16px 20px;border-radius:12px;box-shadow:var(--shadow);min-width:300px;transform:translateX(400px);opacity:0;transition:all .3s ease;display:flex;align-items:center;gap:10px}
-        .toast.show{transform:translateX(0);opacity:1}
-        .toast-close{background:none;border:none;color:#fff;font-size:1.2rem;cursor:pointer;padding:0;opacity:.8;transition:opacity .2s ease}
-        .toast-close:hover{opacity:1}
-        @media (max-width:560px){.page{padding:16px}.grid{grid-template-columns:1fr}.toast-container{right:10px;left:10px}.toast{min-width:auto}}
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader('Каталог')"></th:block>
-
-<div class="toast-container" id="toastContainer"></div>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-            <span>Производи</span>
-            <a sec:authorize="hasAnyRole('PHARMACIST','ADMIN')" class="btn btn-primary" th:href="@{/catalog/edit}">Измени ги достапните производи</a>
-        </div>
-        <div class="card-body">
-            <div th:if="${#lists.isEmpty(medicines)}" class="muted">Нема достапни производи.</div>
-            <div class="grid" th:unless="${#lists.isEmpty(medicines)}">
-                <div class="item" th:each="m : ${medicines}">
-                    <!-- Wrap the image in a link to details /catalog/{id} -->
-                    <a class="thumb-link" th:href="@{/catalog/details/{id}(id=${m.id})}" aria-label="Детали за [[${m.name}]]">
-                        <img class="thumb" th:if="${firstImageById != null}" th:src="${firstImageById[m.id]}" alt="слика">
-                        <img class="thumb" th:if="${firstImageById == null}" src="/images/default-medicine.png" alt="слика">
-                    </a>
-
-                    <div class="content">
-                        <div>
-                            <div class="title" th:text="${m.name}">Лек</div>
-                            <div class="muted" th:text="${m.dosageForm}">Форма</div>
-                        </div>
-                        <div class="price" th:text="${#numbers.formatDecimal(m.price, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</div>
-
-                        <div style="display:flex; gap:8px; align-items:center;">
-                            <a class="btn-outline" th:href="@{/catalog/details/{id}(id=${m.id})}">Детали</a>
-                            <form th:action="@{/cart/add/{id}(id=${m.id})}" method="post" style="display:inline;">
-                                <input type="hidden" th:if="${_csrf != null}" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
-                                <button type="submit" sec:authorize="hasRole('CLIENT')" class="btn-outline add-to-cart-btn" th:data-name="${m.name}">Додај во кошничка</button>
-                            </form>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-<script>
-    function showToast(title, message, type = 'success') {
-        const toastContainer = document.getElementById('toastContainer');
-        const toast = document.createElement('div');
-        toast.className = 'toast';
-        const icon = type === 'success' ? '✅' : '❌';
-        toast.innerHTML = `
-          <div>${icon}</div>
-          <div style="flex:1">
-            <div style="font-weight:700;margin-bottom:2px;">${title}</div>
-            <div style="opacity:.9">${message}</div>
-          </div>
-          <button class="toast-close" onclick="removeToast(this.parentElement)">×</button>
-        `;
-        toastContainer.appendChild(toast);
-        setTimeout(() => toast.classList.add('show'), 100);
-        setTimeout(() => removeToast(toast), 4000);
-    }
-    function removeToast(t){ t.classList.remove('show'); setTimeout(()=>t?.parentElement?.removeChild(t),300); }
-
-    document.addEventListener('DOMContentLoaded', function() {
-        document.querySelectorAll('form[action*="/cart/add/"]').forEach(form => {
-            form.addEventListener('submit', function(e) {
-                e.preventDefault();
-                const button = form.querySelector('.add-to-cart-btn');
-                const name = button.getAttribute('data-name');
-                const original = button.textContent;
-                button.textContent = 'Се додава...';
-                button.disabled = true;
-
-                const fd = new FormData(form);
-                fetch(form.action, {
-                    method: 'POST',
-                    body: fd,
-                    credentials: 'same-origin',
-                    headers: { 'X-Requested-With': 'XMLHttpRequest' }
-                })
-                    .then(r => {
-                        const ok = r.ok || r.redirected || (r.status >= 200 && r.status < 400);
-                        if (!ok) throw new Error(`HTTP ${r.status}`);
-                        showToast('Додадено во кошничката!', `${name} е додаден во кошничката.`, 'success');
-                    })
-                    .catch(() => showToast('Грешка','Неуспешно додавање во кошничката. Обидете се повторно.','error'))
-                    .finally(() => { button.textContent = original; button.disabled = false; });
-            });
-        });
-    });
-</script>
-</body>
-</html>
Index: c/main/resources/templates/companies.html
===================================================================
--- src/main/resources/templates/companies.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,167 +1,0 @@
-<!-- src/main/resources/templates/companies.html -->
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>SynergyMed – Компании</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        :root {
-            --teal-1:#20b2aa; --teal-2:#48d1cc;
-            --bg:#fefeff; --card:#ffffff;
-            --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-            --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
-        }
-        *{margin:0;padding:0;box-sizing:border-box}
-
-        body{
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);
-            color:var(--text);
-        }
-
-        /* Global sticky header: force square corners here to override any rounded styles from fragments */
-        .site-header{
-            position:sticky;
-            top:0; left:0; right:0;
-            width:100%;
-            z-index:1000;
-            background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-            border-radius:0 !important;                 /* ensure no rounding */
-            border-top-left-radius:0 !important;        /* defend against logical/longhand corner rules */
-            border-top-right-radius:0 !important;
-            border-bottom-left-radius:0 !important;
-            border-bottom-right-radius:0 !important;
-        }
-
-        .page{width:100%; max-width:1200px; padding:28px; margin:0 auto}
-
-        .card{
-            background:var(--card);
-            border-radius:18px;
-            box-shadow:var(--shadow);
-            margin-bottom:28px;
-            overflow:hidden;
-        }
-
-        .card-header{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            padding:20px 24px;
-            display:flex; justify-content:space-between; align-items:center;
-            font-size:1.3rem; font-weight:600;
-        }
-
-        .card-body{padding:22px}
-
-        .btn{
-            display:inline-block; border:none; cursor:pointer; text-decoration:none;
-            padding:12px 16px; border-radius:12px; font-weight:600; letter-spacing:.5px; transition:.2s ease;
-        }
-        .btn-primary{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            box-shadow:0 10px 20px rgba(32,178,170,.25);
-        }
-        .btn-primary:hover{transform:translateY(-2px)}
-
-        .grid{
-            display:grid;
-            grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
-            gap:22px;
-        }
-        .company-card{
-            background:var(--card);
-            border-radius:18px;
-            box-shadow:var(--shadow-sm);
-            overflow:hidden;
-            display:flex; flex-direction:column;
-        }
-        .content{padding:16px 18px}
-        .title{font-weight:700;margin:6px 0 2px}
-        .muted{color:var(--muted);font-size:.92rem}
-        .badge{
-            display:inline-block;
-            background:rgba(32,178,170,.12);
-            color:#137a74;
-            padding:4px 8px;
-            border-radius:999px;
-            font-size:.80rem;
-            font-weight:700;
-            margin-right:6px;
-        }
-        .btn-outline{
-            background:#fff;
-            border:2px solid rgba(32,178,170,.25);
-            color:#20b2aa;
-            padding:8px 12px;
-            border-radius:10px;
-            text-decoration:none;
-            font-weight:600;
-            transition:.2s ease;
-        }
-        .btn-outline:hover{border-color:#20b2aa;box-shadow:0 6px 14px rgba(32,178,170,.18)}
-
-        .row{display:flex;justify-content:space-between;align-items:center;margin-top:12px}
-
-        .clickable{cursor:pointer}
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader('Компании')"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-            <span>Компании</span>
-            <a class="btn btn-primary" th:href="@{/admin/companies/new}">Креирај</a>
-        </div>
-        <div class="card-body">
-            <div class="grid">
-                <div class="company-card clickable"
-                     th:each="c : ${companies}"
-                     th:attr="data-href=@{/admin/companies/{id}/facilities(id=${c.id})}">
-                    <div class="content">
-                        <div class="title" th:text="${c.companyName}">Име на компанија</div>
-                        <div class="muted" th:text="${'Рег. број: ' + c.registrationNumber}">Регистрациски број</div>
-                        <div class="muted" th:text="${c.description}">Опис</div>
-
-                        <div style="margin-top:8px;">
-                            <span class="badge" th:each="r : ${rolesByCompany[c.id]}" th:text="${r}">УЛОГА</span>
-                        </div>
-
-                        <div class="row">
-                            <div>
-                                <a class="btn-outline" th:href="@{/admin/companies/{id}/edit(id=${c.id})}" style="margin-right:8px;">Измени</a>
-                            </div>
-                            <form th:action="@{/admin/companies/{id}/delete(id=${c.id})}" method="post" style="display:inline">
-                                <button type="submit" class="btn-outline" style="color:#b3261e;border-color:#f0caca">Избриши</button>
-                            </form>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <script>
-                document.addEventListener('DOMContentLoaded', function () {
-                    document.querySelectorAll('.company-card.clickable').forEach(function (card) {
-                        const href = card.getAttribute('data-href');
-                        if (!href) return;
-                        card.addEventListener('click', function () { window.location.assign(href); });
-                        card.querySelectorAll('a, button, input, select, textarea, label, form').forEach(function (el) {
-                            el.addEventListener('click', function (e) { e.stopPropagation(); });
-                        });
-                    });
-                });
-            </script>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/company-form.html
===================================================================
--- src/main/resources/templates/company-form.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,101 +1,0 @@
-<!-- src/main/resources/templates/company-form.html -->
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title th:text="${mode=='create' ? 'Креирај компанија' : 'Уреди компанија'}">Компанија</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <!-- Shared header styles first -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        :root { --teal-1:#20b2aa; --teal-2:#48d1cc; --muted:#6c757d; --shadow:0 20px 40px rgba(0,0,0,.1); }
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body { font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif; min-height:100vh; background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%); }
-
-        /* Page-level override: make header look like the “medicines” page */
-        .site-header{
-            position: sticky;
-            top: 0; left: 0; right: 0;
-            width: 100%;
-            z-index: 1000;
-            background: #fff !important;           /* replace gradient with solid white */
-            box-shadow: 0 2px 10px rgba(0,0,0,.1); /* consistent subtle shadow */
-            border-radius: 0 !important;           /* remove rounding on all corners */
-            border-top-left-radius: 0 !important;
-            border-top-right-radius: 0 !important;
-            border-bottom-left-radius: 0 !important;
-            border-bottom-right-radius: 0 !important;
-        }
-
-        .wrap{ width:100%; max-width:720px; margin:40px auto; background:#fff; border-radius:20px; overflow:hidden; box-shadow:var(--shadow); }
-        .head{ background:linear-gradient(135deg,var(--teal-1),var(--teal-2)); color:#fff; padding:26px 24px; }
-        .body{ padding:26px 24px; }
-        .row{ display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px; }
-        .row-1{ display:grid; grid-template-columns:1fr; gap:16px; margin-bottom:6px; }
-        label{ display:block; margin-bottom:8px; color:#334155; font-weight:600; font-size:.95rem; }
-        input,textarea{ width:100%; padding:14px 12px; border:2px solid #e6ebf0; border-radius:12px; background:#f8fafc; font-size:1rem; }
-        textarea{ min-height:110px; }
-        .roles{ display:flex; flex-wrap:wrap; gap:10px; margin-top:6px; }
-        .chip{ display:inline-flex; align-items:center; gap:6px; border:2px solid rgba(32,178,170,.25); border-radius:999px; padding:8px 12px; background:#fff; }
-        .actions{ display:flex; gap:12px; padding:0 24px 24px 24px; }
-        .btn{ border:none; padding:12px 16px; border-radius:12px; cursor:pointer; font-weight:700; }
-        .btn-primary{ background:linear-gradient(135deg,var(--teal-1),var(--teal-2)); color:#fff; }
-        .btn-secondary{ background:#fff; border:2px solid rgba(32,178,170,.25); }
-    </style>
-</head>
-<body>
-
-<!-- Pass the active page name so the nav highlights “Компании” -->
-<th:block th:replace="fragments/header :: siteHeader('Компании')"></th:block>
-
-<div class="wrap">
-    <div class="head">
-        <h2 th:text="${mode=='create' ? 'Креирај компанија' : 'Уреди компанија'}">Компанија</h2>
-    </div>
-
-    <div class="body">
-        <form th:action="${mode=='create'} ? @{/admin/companies} : @{/admin/companies/{id}/update(id=${company.id})}" method="post">
-            <div class="row">
-                <div>
-                    <label>Име на компанија</label>
-                    <input type="text" name="companyName" th:value="${mode=='edit' ? company.companyName : ''}" required>
-                </div>
-                <div>
-                    <label>Регистрациски број</label>
-                    <input type="text" name="registrationNumber" th:value="${mode=='edit' ? company.registrationNumber : ''}" required>
-                </div>
-            </div>
-
-            <div class="row-1">
-                <div>
-                    <label>Опис</label>
-                    <textarea name="description" th:text="${mode=='edit' ? company.description : ''}"></textarea>
-                </div>
-            </div>
-
-            <div class="row-1">
-                <div>
-                    <label>Тип на компанија</label>
-                    <div class="roles">
-                        <label class="chip" th:each="rt : ${roleTypes}">
-                            <input type="checkbox" name="roles" th:value="${rt}"
-                                   th:checked="${selectedRoles != null and selectedRoles.contains(rt)}">
-                            <span th:text="${rt}">УЛОГА</span>
-                        </label>
-                    </div>
-                </div>
-            </div>
-
-            <div class="actions">
-                <button class="btn btn-primary" type="submit" th:text="${mode=='create' ? 'Креирај' : 'Измени'}">Зачувај</button>
-                <a class="btn btn-secondary" th:href="@{/admin/companies}">Откажи</a>
-            </div>
-        </form>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/create-health-profile.html
===================================================================
--- src/main/resources/templates/create-health-profile.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,230 +1,0 @@
-<!DOCTYPE html>
-<html lang="mk" xmlns:th="http://www.thymeleaf.org">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>SynergyMed - Здравствени профили</title>
-
-    <!-- Header styles -->
-    <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-
-    <style>
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height:100vh;
-        }
-
-        .site-header {
-            position:sticky; top:0; left:0; right:0; width:100%;
-            border-radius:0; margin:0; z-index:1000; background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .container { max-width:1200px; margin:0 auto; padding:20px; }
-
-        .header { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); margin-bottom:30px; overflow:hidden; }
-        .header-content { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; text-align:center; }
-        .header-content h1 { font-size:2.5rem; font-weight:300; margin-bottom:10px; }
-        .header-content p { font-size:1.1rem; opacity:.9; }
-
-        .nav-bar { background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1); margin-bottom:30px; padding:20px 30px; }
-        .nav-links {
-            display:flex;
-            gap:20px;
-            align-items:center;
-            flex-wrap:nowrap;
-            overflow-x:auto;
-        }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:all .3s ease; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-        .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-
-        .card { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-        .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-        .card-body { padding:30px; }
-
-        .search-form { display:flex; gap:15px; margin-bottom:20px; flex-wrap:wrap; }
-        .search-input {
-            flex:1; padding:15px 20px; border:2px solid #e1e5e9; border-radius:12px;
-            font-size:1rem; transition:all .3s ease; background:#f8f9fa;
-        }
-        .search-input:focus {
-            outline:none; border-color:#20b2aa; background:white;
-            box-shadow:0 0 0 3px rgba(32,178,170,.1);
-        }
-        .btn-submit {
-            padding:15px 30px; background:linear-gradient(135deg,#20b2aa,#48d1cc);
-            color:white; border:none; border-radius:12px;
-            font-size:1rem; font-weight:600; cursor:pointer;
-            transition:all .3s ease; text-transform:uppercase; letter-spacing:1px;
-        }
-        .btn-submit:hover { transform:translateY(-2px); box-shadow:0 10px 20px rgba(32,178,170,.3); }
-        .btn-submit:active { transform:translateY(0); }
-
-        .clients-grid { display:grid; gap:15px; margin-bottom:30px; max-height:400px; overflow-y:auto; }
-        .client-item {
-            background:#f8f9fa; border:2px solid #e1e5e9;
-            border-radius:15px; padding:20px;
-            transition:all .3s ease; cursor:pointer;
-            display:flex; justify-content:space-between; align-items:center;
-        }
-        .client-item:hover { border-color:#20b2aa; background:#f1fdfd; }
-        .client-item.selected {
-            border-color:#20b2aa;
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            color:white;
-        }
-
-        .blood-type-section { margin-top:30px; padding-top:30px; border-top:1px solid #e9ecef; display:none; }
-        .blood-type-section.visible { display:block; animation:fadeIn .3s ease; }
-        @keyframes fadeIn { from{opacity:0; transform:translateY(20px);} to{opacity:1; transform:translateY(0);} }
-
-        .blood-type-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(80px,1fr)); gap:15px; margin-top:15px; }
-        .blood-type-radio { display:none; }
-        .blood-type-label {
-            display:block; background:#f8f9fa; border:2px solid #e1e5e9;
-            border-radius:15px; padding:20px 15px; text-align:center;
-            font-weight:bold; color:#666; cursor:pointer;
-            transition:all .3s ease;
-        }
-        .blood-type-radio:checked + .blood-type-label {
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            color:white; border-color:#20b2aa; transform:scale(1.05);
-        }
-        .blood-type-label:hover { border-color:#20b2aa; background:#f1fdfd; }
-
-        .form-actions { display:flex; gap:15px; justify-content:center; margin-top:30px; }
-        .alert { padding:15px; border-radius:12px; margin-bottom:20px; font-size:.9rem; }
-        .alert-danger { background-color:#fee; color:#c33; border:1px solid #fcc; }
-        .alert-success { background-color:#efe; color:#363; border:1px solid #cfc; }
-        .alert-info { background-color:#d1ecf1; color:#0c5460; border:1px solid #b6d4da; }
-
-        .selected-client-info {
-            background: linear-gradient(135deg, #e3f2fd, #f3e5f5);
-            border-radius:15px; padding:20px; margin-bottom:25px; border-left:4px solid #20b2aa;
-        }
-
-        @media (max-width:768px) {
-            .nav-links { flex-wrap:wrap; }
-            .search-form { flex-direction:column; }
-            .search-input { margin-bottom:15px; }
-            .header-content h1 { font-size:2rem; }
-        }
-    </style>
-</head>
-<body>
-
-<!-- Global header -->
-<th:block th:replace="~{fragments/header :: siteHeader(${null})}"></th:block>
-
-<div class="container">
-    <!-- Header -->
-    <div class="header">
-        <div class="header-content">
-            <h1>Здравствени профили</h1>
-            <p>Креирајте здравствени профили за клиенти без профил</p>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a href="#" th:href="@{/pharmacist/health-profile/create}" class="nav-link active">Здравствени профили</a>
-            <a href="#" th:href="@{/pharmacist/verification}" class="nav-link">Верификација на профили</a>
-            <a href="#" th:href="@{/pharmacist/supply-orders}" class="nav-link">Нарачка на роба</a>
-            <a href="#" th:href="@{/pharmacist/medicine/interactions}" class="nav-link">Интеракции на лекови</a>
-            <a href="#" class="nav-link back-btn" th:href="@{/profile}">Назад кон профилот</a>
-        </div>
-    </div>
-
-    <!-- Alerts -->
-    <div th:if="${success}" class="alert alert-success"><span th:text="${success}">Успех</span></div>
-    <div th:if="${error}" class="alert alert-danger"><span th:text="${error}">Грешка</span></div>
-    <div th:if="${info}" class="alert alert-info"><span th:text="${info}">Инфо</span></div>
-
-    <!-- Main card -->
-    <div class="card">
-        <div class="card-header">Креирај здравствен профил за клиент</div>
-        <div class="card-body">
-            <!-- Search -->
-            <form class="search-form" th:action="@{/pharmacist/health-profile/create}" method="get">
-                <input type="text" name="searchTerm" class="search-input"
-                       placeholder="Пребарај клиенти по име или презиме..."
-                       th:value="${searchTerm}">
-                <button type="submit" class="btn-submit">Пребарај</button>
-            </form>
-
-            <!-- Clients -->
-            <div th:if="${!#lists.isEmpty(clients)}" class="clients-grid" id="clientsGrid">
-                <div th:each="client : ${clients}"
-                     class="client-item"
-                     th:data-client-id="${client.id}"
-                     th:data-client-name="${client.users.firstName + ' ' + client.users.lastName}"
-                     onclick="selectClient(this)">
-                    <div>
-                        <h4 th:text="${client.users.firstName + ' ' + client.users.lastName}">John Doe</h4>
-                        <p th:text="${client.users.email}">john@email.com</p>
-                    </div>
-                    <div>ИД: <span th:text="${client.id}">1</span></div>
-                </div>
-            </div>
-
-            <!-- Empty -->
-            <div th:if="${#lists.isEmpty(clients)}" class="alert alert-info">Нема пронајдени клиенти.</div>
-
-            <!-- Form -->
-            <form th:action="@{/pharmacist/health-profile/create}" method="post" id="createProfileForm">
-                <input type="hidden" name="clientId" id="selectedClientId">
-                <div id="selectedClientInfo" class="selected-client-info" style="display:none;">
-                    <h4>Се креира профил за:</h4>
-                    <p id="selectedClientName"></p>
-                </div>
-                <div class="blood-type-section" id="bloodTypeSection">
-                    <h3>Избери крвна група</h3>
-                    <div class="blood-type-grid">
-                        <div><input type="radio" id="a+" name="bloodType" value="A+" class="blood-type-radio"><label for="a+" class="blood-type-label">A+</label></div>
-                        <div><input type="radio" id="a-" name="bloodType" value="A-" class="blood-type-radio"><label for="a-" class="blood-type-label">A-</label></div>
-                        <div><input type="radio" id="b+" name="bloodType" value="B+" class="blood-type-radio"><label for="b+" class="blood-type-label">B+</label></div>
-                        <div><input type="radio" id="b-" name="bloodType" value="B-" class="blood-type-radio"><label for="b-" class="blood-type-label">B-</label></div>
-                        <div><input type="radio" id="ab+" name="bloodType" value="AB+" class="blood-type-radio"><label for="ab+" class="blood-type-label">AB+</label></div>
-                        <div><input type="radio" id="ab-" name="bloodType" value="AB-" class="blood-type-radio"><label for="ab-" class="blood-type-label">AB-</label></div>
-                        <div><input type="radio" id="o+" name="bloodType" value="O+" class="blood-type-radio"><label for="o+" class="blood-type-label">O+</label></div>
-                        <div><input type="radio" id="o-" name="bloodType" value="O-" class="blood-type-radio"><label for="o-" class="blood-type-label">O-</label></div>
-                    </div>
-                    <div class="form-actions">
-                        <button type="submit" class="btn-submit">Креирај</button>
-                        <button type="button" class="btn-submit back-btn" onclick="clearSelection()">Исчисти</button>
-                    </div>
-                </div>
-            </form>
-
-        </div>
-    </div>
-</div>
-
-<!-- Shared header dropdown script -->
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-
-<script>
-    let selectedClientId=null;
-    function selectClient(el){
-        document.querySelectorAll('.client-item').forEach(i=>i.classList.remove('selected'));
-        el.classList.add('selected');
-        selectedClientId=el.getAttribute('data-client-id');
-        document.getElementById('selectedClientId').value=selectedClientId;
-        document.getElementById('selectedClientName').textContent=el.getAttribute('data-client-name');
-        document.getElementById('selectedClientInfo').style.display='block';
-        document.getElementById('bloodTypeSection').classList.add('visible');
-    }
-    function clearSelection(){
-        document.querySelectorAll('.client-item').forEach(i=>i.classList.remove('selected'));
-        document.querySelectorAll('.blood-type-radio').forEach(r=>r.checked=false);
-        document.getElementById('selectedClientInfo').style.display='none';
-        document.getElementById('bloodTypeSection').classList.remove('visible');
-        selectedClientId=null; document.getElementById('selectedClientId').value='';
-    }
-</script>
-</body>
-</html>
Index: c/main/resources/templates/facilities.html
===================================================================
--- src/main/resources/templates/facilities.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,194 +1,0 @@
-<!-- templates/facilities.html -->
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title th:text="${'SynergyMed – Објекти'}">SynergyMed – Објекти</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <!-- Header styles -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        :root {
-            --teal-1:#20b2aa; --teal-2:#48d1cc;
-            --bg:#fefeff; --card:#ffffff;
-            --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-            --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
-        }
-        *{margin:0;padding:0;box-sizing:border-box}
-
-        body{
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);
-            color:var(--text);
-        }
-
-        /* Full-width global header */
-        .site-header{
-            position:sticky; top:0; left:0; right:0; width:100%;
-            border-radius:0; margin:0; z-index:1000;
-            background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .page{width:100%; max-width:1200px; padding:28px; margin:0 auto}
-
-        /* Card wrapper */
-        .card{
-            background:var(--card);
-            border-radius:18px;
-            box-shadow:var(--shadow);
-            margin-bottom:28px;
-            overflow:hidden;
-        }
-
-        .card-header{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            padding:20px 24px;
-            display:flex; justify-content:space-between; align-items:center;
-            font-size:1.3rem; font-weight:600;
-        }
-
-        .card-body{padding:22px}
-
-        .btn{
-            display:inline-block; border:none; cursor:pointer; text-decoration:none;
-            padding:12px 16px; border-radius:12px; font-weight:600;
-            letter-spacing:.5px; transition:.2s ease;
-        }
-        .btn-primary{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            box-shadow:0 10px 20px rgba(32,178,170,.25);
-        }
-        .btn-primary:hover{transform:translateY(-2px)}
-
-        .grid{
-            display:grid;
-            grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
-            gap:22px;
-        }
-        .company-card{
-            background:var(--card);
-            border-radius:18px;
-            box-shadow:var(--shadow-sm);
-            overflow:hidden;
-            display:flex; flex-direction:column;
-        }
-        .content{padding:16px 18px}
-        .title{font-weight:700;margin:6px 0 2px}
-        .muted{color:var(--muted);font-size:.92rem}
-        .btn-outline{
-            background:#fff;
-            border:2px solid rgba(32,178,170,.25);
-            color:#20b2aa;
-            padding:8px 12px;
-            border-radius:10px;
-            text-decoration:none;
-            font-weight:600;
-            transition:.2s ease;
-        }
-        .btn-outline:hover{border-color:#20b2aa;box-shadow:0 6px 14px rgba(32,178,170,.18)}
-
-        /* Three-column action row: left / center / right */
-        .row{
-            display:grid;
-            grid-template-columns: 1fr auto 1fr; /* left fills, middle auto, right fills */
-            align-items:center; /* center vertically */
-            gap:8px;
-            margin-top:12px;
-        }
-        .row > .left   { justify-self:start; }   /* left button aligns to start of col 1 */
-        .row > .middle { justify-self:center; } /* middle button perfectly centered */
-        .row > .right  { justify-self:end; }    /* right delete aligns to end of col 3 */
-
-        /* Clickable card cursor */
-        .clickable { cursor: pointer; }
-
-        @media (max-width:560px){.page{padding:16px}}
-    </style>
-</head>
-<body>
-
-<!-- Global header -->
-<th:block th:replace="fragments/header :: siteHeader('Објекти на аптеката')"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-            <span th:text="${'Објекти — ' + company.companyName}">Објекти</span>
-            <a class="btn btn-primary" sec:authorize="hasRole('ADMIN')"
-               th:href="@{/admin/companies/{cid}/facilities/new(cid=${company.id})}">
-                Додади нов
-            </a>
-        </div>
-
-        <div class="card-body">
-            <!-- Grid list when facilities exist -->
-            <div class="grid" th:if="${!#lists.isEmpty(facilities)}">
-                <div class="company-card clickable"
-                     th:each="f : ${facilities}"
-                     th:attr="data-href=@{/admin/companies/{cid}/facilities/{id}/inventory(cid=${company.id}, id=${f.id})}">
-                    <div class="content">
-                        <div class="title" th:text="${f.facilityName}">Име на објект</div>
-                        <div class="muted" th:text="${'Код: ' + f.code}">Код</div>
-
-                        <div class="row">
-                            <!-- Left: Edit -->
-                            <a class="btn-outline left" sec:authorize="hasRole('ADMIN')"
-                               th:href="@{/admin/companies/{cid}/facilities/{id}/edit(cid=${company.id}, id=${f.id})}">
-                                Уреди
-                            </a>
-
-                            <!-- Middle: Contact (centered) -->
-                            <a class="btn-outline middle" sec:authorize="hasRole('ADMIN')"
-                               th:href="@{/admin/companies/{cid}/facilities/{id}/contacts(cid=${company.id}, id=${f.id})}">
-                                Контакт
-                            </a>
-
-                            <!-- Right: Delete -->
-                            <form class="right" sec:authorize="hasRole('ADMIN')"
-                                  th:action="@{/admin/companies/{cid}/facilities/{id}/delete(cid=${company.id}, id=${f.id})}"
-                                  method="post" style="display:inline">
-                                <button type="submit" class="btn-outline" style="color:#b3261e;border-color:#f0caca">
-                                    Избриши
-                                </button>
-                            </form>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <!-- Empty state -->
-            <div th:if="${#lists.isEmpty(facilities)}" class="muted" style="margin-top:8px;">
-                Сè уште нема објекти за оваа компанија.
-            </div>
-
-            <!-- Click navigation script -->
-            <script>
-                document.addEventListener('DOMContentLoaded', function () {
-                    document.querySelectorAll('.company-card.clickable').forEach(function (card) {
-                        const href = card.getAttribute('data-href');
-                        if (!href) return;
-                        card.addEventListener('click', function () {
-                            window.location.assign(href);
-                        });
-                        // Prevent inner interactive elements from triggering card click
-                        card.querySelectorAll('a, button, input, select, textarea, label, form').forEach(function (el) {
-                            el.addEventListener('click', function (e) { e.stopPropagation(); });
-                        });
-                    });
-                });
-            </script>
-        </div>
-    </div>
-</div>
-
-<!-- Scripts -->
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/facility-contacts.html
===================================================================
--- src/main/resources/templates/facility-contacts.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,77 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title th:text="${'Контакт на објект – ' + facility.facilityName}">Контакт на објект</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);color:#1f2937}
-        .page{width:100%;max-width:900px;padding:28px;margin:0 auto}
-        .card{background:#fff;border-radius:18px;box-shadow:0 20px 40px rgba(0,0,0,.10);margin-bottom:28px;overflow:hidden}
-        .card-header{background:linear-gradient(135deg,#20b2aa,#48d1cc);color:#fff;padding:20px 24px;font-size:1.3rem;font-weight:600}
-        .card-body{padding:22px}
-        .row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid #f0f0f0;gap:12px}
-        label{font-weight:600;color:#374151;min-width:100px}
-        input[type=text]{padding:10px 12px;border:1px solid #e5e7eb;border-radius:10px;flex:1}
-        .actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:16px}
-        .btn{display:inline-block;padding:10px 16px;border-radius:10px;border:1px solid #e5e7eb;background:#fff;font-weight:600;cursor:pointer}
-        .btn-primary{background:linear-gradient(135deg,#20b2aa,#48d1cc);color:white;border:none}
-        .btn-danger{color:#b3261e;border-color:#f0caca}
-        .muted{color:#6c757d}
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header" th:text="${'Контакт – ' + facility.facilityName + ' (' + company.companyName + ')'}">Контакт</div>
-        <div class="card-body">
-
-            <!-- Single form handles both create and update -->
-            <form th:action="@{/admin/companies/{cid}/facilities/{id}/contacts/save(cid=${company.id}, id=${facility.id})}" method="post">
-                <!-- When updating, send contactId; in create mode contact is null so input is absent -->
-                <input type="hidden" name="contactId" th:if="${contact != null}" th:value="${contact.id}">
-
-                <div class="row">
-                    <label for="phone">Телефон</label>
-                    <input id="phone" name="phone" type="text"
-                           th:value="${contact != null ? contact.phone : ''}"
-                           placeholder="+389 70 000 000">
-                </div>
-
-                <div class="row">
-                    <label for="address">Адреса</label>
-                    <input id="address" name="address" type="text"
-                           th:value="${contact != null ? contact.address : ''}"
-                           placeholder="Улица, Град">
-                </div>
-
-                <div class="actions">
-                    <!-- Primary button toggles label based on create vs update -->
-                    <button type="submit" class="btn btn-primary"
-                            th:text="${contact != null} ? 'Ажурирај' : 'Креирај'">Креирај</button>
-
-                    <!-- Delete only visible when contact exists -->
-                    <form th:if="${contact != null}"
-                          th:action="@{/admin/companies/{cid}/facilities/{id}/contacts/delete(cid=${company.id}, id=${facility.id})}"
-                          method="post" style="display:inline;">
-                        <input type="hidden" name="contactId" th:value="${contact.id}">
-                        <button type="submit" class="btn btn-danger">Избриши</button>
-                    </form>
-
-                    <a class="btn" th:href="@{/admin/companies/{cid}/facilities(cid=${company.id})}">Назад</a>
-                </div>
-            </form>
-
-            <!-- Helper text for empty state (optional) -->
-            <p class="muted" th:if="${contact == null}" style="margin-top:8px;">Сè уште нема контакт — пополнете ги полињата и притиснете „Креирај“.</p>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/facility-form.html
===================================================================
--- src/main/resources/templates/facility-form.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,132 +1,0 @@
-<!-- templates/facility-form.html -->
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title th:text="${mode=='create' ? 'Креирај објект' : 'Уреди објект'}">Објект</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <!-- Shared global header styles -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        :root {
-            --teal-1:#20b2aa;
-            --teal-2:#48d1cc;
-            --muted:#6c757d;
-            --shadow:0 20px 40px rgba(0,0,0,.1);
-        }
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);
-        }
-
-        /* Full-width global header - FIXED STYLING */
-        .site-header {
-            position:sticky;
-            top:0;
-            left:0;
-            right:0;
-            width:100%;
-            border-radius:0;
-            margin:0;
-            z-index:1000;
-            background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .content-wrapper { padding:24px; }
-        .wrap {
-            width:100%;
-            max-width:720px;
-            margin:40px auto;
-            background:#fff;
-            border-radius:20px;
-            overflow:hidden;
-            box-shadow:var(--shadow);
-        }
-        .head {
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            padding:26px 24px;
-        }
-        .body { padding:26px 24px; }
-        .row { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px; }
-        .row-1 { display:grid; grid-template-columns:1fr; gap:16px; margin-bottom:6px; }
-        label { display:block; margin-bottom:8px; color:#334155; font-weight:600; font-size:.95rem; }
-        input {
-            width:100%; padding:14px 12px;
-            border:2px solid #e6ebf0;
-            border-radius:12px;
-            background:#f8fafc;
-            transition:.2s ease;
-            font-size:1rem;
-        }
-        input:focus {
-            outline:none; border-color:var(--teal-1);
-            background:#fff;
-            box-shadow:0 0 0 3px rgba(32,178,170,.12);
-        }
-        .actions { display:flex; gap:12px; padding:0 24px 24px 24px; }
-        .btn { border:none; padding:12px 16px; border-radius:12px; cursor:pointer; font-weight:700; letter-spacing:.4px; }
-        .btn-primary {
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            box-shadow:0 10px 20px rgba(32,178,170,.25);
-        }
-        .btn-secondary {
-            background:#fff; color:#111;
-            border:2px solid rgba(32,178,170,.25);
-        }
-    </style>
-</head>
-<body>
-
-<!-- Global sticky header (white, full width) -->
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="content-wrapper">
-    <div class="wrap">
-        <div class="head">
-            <h2 th:text="${mode=='create' ? 'Креирај објект' : 'Уреди објект'}">Објект</h2>
-        </div>
-
-        <div class="body">
-            <form th:action="${mode=='create'} ? @{/admin/companies/{cid}/facilities(cid=${company.id})}
-                                 : @{/admin/companies/{cid}/facilities/{id}/update(cid=${company.id}, id=${facility.id})}"
-                  method="post">
-
-                <div class="row">
-                    <div>
-                        <label>Име на објект</label>
-                        <input type="text" name="facilityName"
-                               th:value="${mode=='edit' ? facility.facilityName : ''}" required>
-                    </div>
-                    <div>
-                        <label>Код</label>
-                        <input type="text" name="code"
-                               th:value="${mode=='edit' ? facility.code : ''}" required>
-                    </div>
-                </div>
-
-                <div class="actions">
-                    <button class="btn btn-primary" type="submit"
-                            th:text="${mode=='create' ? 'Креирај' : 'Ажурирај'}">
-                        Зачувај
-                    </button>
-                    <a class="btn btn-secondary"
-                       th:href="@{/admin/companies/{cid}/facilities(cid=${company.id})}">
-                        Откажи
-                    </a>
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-
-<!-- Scripts for dropdown etc. -->
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/facility-inventory.html
===================================================================
--- src/main/resources/templates/facility-inventory.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,141 +1,0 @@
-<!-- templates/facility-inventory.html -->
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title th:text="${'Залиха — ' + facility.facilityName}">Залиха</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <!-- Shared header styles -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        :root {
-            --teал-1:#20b2aa; --teал-2:#48d1cc;
-            --bg:#fefeff; --card:#ffffff;
-            --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-        }
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);
-            color:var(--text);
-        }
-
-        /* Full-width global header - FIXED STYLING */
-        .site-header{
-            position:sticky; top:0; left:0; right:0; width:100%;
-            border-radius:0; margin:0; z-index:1000;
-            background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .page{width:100%; max-width:1200px; padding:28px; margin:0 auto}
-
-        /* Card wrapper */
-        .card{
-            background:var(--card);
-            border-radius:18px;
-            box-shadow:var(--shadow);
-            margin-bottom:28px;
-            overflow:hidden;
-        }
-
-        .card-header{
-            background:linear-gradient(135deg,var(--teал-1),var(--teал-2));
-            color:#fff;
-            padding:20px 24px;
-            display:flex; justify-content:space-between; align-items:center;
-            font-size:1.3rem; font-weight:600;
-        }
-
-        .card-body{padding:22px}
-
-        .btn{
-            display:inline-block; text-decoration:none;
-            padding:12px 16px; border-radius:12px; font-weight:600;
-        }
-        .btn-primary{
-            background:linear-gradient(135deg,var(--teал-1),var(--teал-2));
-            color:#fff; box-shadow:0 10px 20px rgba(32,178,170,.25);
-        }
-
-        .list{display:grid; grid-template-columns:1fr; gap:12px;}
-
-        .row{
-            display:grid;
-            grid-template-columns:2fr 2fr 1fr 1.3fr;
-            gap:14px; align-items:center;
-            padding:14px 16px; background:#fff;
-            border:1px solid #eef2f7; border-radius:12px;
-        }
-
-        .muted{color:var(--muted); font-size:.92rem}
-
-        @media (max-width:800px){
-            .row{grid-template-columns:1fr; gap:6px;}
-        }
-    </style>
-</head>
-<body>
-
-<!-- Global header -->
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-            <span th:text="${'Залиха — ' + facility.facilityName}">Залиха</span>
-            <a class="btn btn-primary"
-               th:href="@{/admin/companies/{cid}/facilities(cid=${company.id})}">
-                Назад кон објектите
-            </a>
-        </div>
-
-        <div class="card-body">
-            <div class="muted" th:text="${'Компанија: ' + company.companyName}" style="margin-bottom:10px;">
-                Компанија: ACME
-            </div>
-
-            <div th:if="${#lists.isEmpty(items)}" class="muted">
-                Сè уште нема внесови за залиха за овој објект.
-            </div>
-
-            <div class="list" th:if="${!#lists.isEmpty(items)}">
-                <div class="row" th:each="it : ${items}">
-                    <div>
-                        <div th:text="${it.brandedMedicine.name}">Име на лек</div>
-                        <div class="muted"
-                             th:text="${'Производител: ' + it.brandedMedicine.manufacturer.company.companyName}">
-                            Производител
-                        </div>
-                    </div>
-
-                    <div>
-                        <div class="muted">Дозирање</div>
-                        <div th:text="${it.brandedMedicine.dosageForm + ' • ' + it.brandedMedicine.strength}">
-                            Дозирање • Јачина
-                        </div>
-                    </div>
-
-                    <div>
-                        <div class="muted">Количина</div>
-                        <div th:text="${it.quantity}">0</div>
-                    </div>
-
-                    <div>
-                        <div class="muted">Последно сменето</div>
-                        <div th:text="${#temporals.format(it.lastChanged, 'dd MMM yyyy')}">01 Jan 2025</div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<!-- Shared scripts -->
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/fragments/header.html
===================================================================
--- src/main/resources/templates/fragments/header.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,190 +1,0 @@
-<!-- templates/fragments/header.html -->
-
-<!-- Head styles fragment -->
-<th:block th:fragment="headerStyles">
-    <style>
-        :root{
-            /* Light neutral palette */
-            --teal-1:#ffffff;      /* white */
-            --teal-2:#ece8df;      /* soft beige-gray */
-            --text:#1f2937;        /* dark gray text */
-            --muted:#4b5563;       /* medium gray text */
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-            --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
-        }
-
-        /* Header container */
-        .site-header{
-            position: sticky; top: 20px; z-index: 50;
-            display:flex; align-items:center; justify-content:space-between; gap:16px;
-            padding:14px 18px;
-            background: linear-gradient(135deg, var(--teal-1), var(--teal-2)); /* white → beige-gray */
-            color: var(--text);                         /* darker text for contrast */
-            border-radius:20px; box-shadow: var(--shadow);
-        }
-
-        /* Brand/logo */
-        .brand{display:flex; align-items:center; gap:12px; text-decoration:none; color:inherit}
-        .logo{height:36px; width:auto; display:block; border-radius:10px}
-        .brand-name{font-weight:700; letter-spacing:.3px}
-
-        /* Primary nav */
-        .main-nav{display:flex; gap:10px; align-items:center}
-        .nav-btn{
-            display:inline-flex; align-items:center; gap:8px;
-            padding:10px 14px; border-radius:12px;
-            color:#111827;                                  /* dark text */
-            text-decoration:none; font-weight:600;
-            background: rgba(0,0,0,.06);                    /* subtle neutral chip */
-            border:1px solid rgba(0,0,0,.10);
-            transition: transform .15s ease, background .15s ease, box-shadow .15s ease, border-color .15s ease;
-        }
-        .nav-btn:hover{
-            transform: translateY(-1px);
-            background: rgba(0,0,0,.10);
-            border-color: rgba(0,0,0,.14);
-        }
-        .nav-btn.active{
-            box-shadow: 0 8px 18px rgba(0,0,0,.10);
-            background: rgba(0,0,0,.12);
-            border-color: rgba(0,0,0,.16);
-        }
-
-        /* Account area */
-        .account{margin-left:auto; display:flex; align-items:center}
-
-        /* Neutral login button to match light header */
-        .login-btn{
-            display:inline-flex; align-items:center; padding:10px 14px; border-radius:12px;
-            color:#111827; background:#ffffff;
-            text-decoration:none; font-weight:700;
-            border:1px solid rgba(0,0,0,.14);
-            box-shadow: 0 1px 2px rgba(0,0,0,.04);
-            transition:.15s ease;
-        }
-        .login-btn:hover{
-            border-color: rgba(0,0,0,.22);
-            background:#f3f4f6;
-            box-shadow: 0 6px 14px rgba(0,0,0,.10);
-        }
-
-        /* User menu button + dropdown */
-        .user-menu{position:relative}
-        .user-button{
-            display:flex; align-items:center; gap:8px;
-            padding:8px 10px; border-radius:14px; cursor:pointer;
-            background: rgba(0,0,0,.06);
-            border:1px solid rgba(0,0,0,.10);
-            color:#111827; font-weight:600;
-            transition: .15s ease;
-        }
-        .user-button:hover{
-            background: rgba(0,0,0,.10);
-            border-color: rgba(0,0,0,.14);
-        }
-        .user-button:focus-visible{outline:3px solid rgba(0,0,0,.25); outline-offset:2px}
-
-        .avatar{
-            width:28px; height:28px; border-radius:50%;
-            display:grid; place-items:center; font-weight:800; font-size:.9rem;
-            background:#e5e7eb; color:#111827;                 /* light chip, dark letter */
-        }
-        .user-name{max-width:160px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis}
-        .chev{opacity:.85}
-
-        .dropdown{
-            position:absolute; right:0; top: calc(100% + 10px); min-width:220px;
-            background:#ffffff; color: var(--text); border-radius:14px; box-shadow: var(--shadow-sm);
-            padding:8px; pointer-events:none; opacity:0; transform: translateY(-6px);
-            transition: opacity .12s ease, transform .12s ease;
-            border:1px solid rgba(0,0,0,.06);
-        }
-        .user-menu.open .dropdown{pointer-events:auto; opacity:1; transform: translateY(0)}
-        .dropdown-item{
-            display:flex; align-items:center; justify-content:space-between;
-            width:100%; text-decoration:none; background:transparent; border:none; cursor:pointer;
-            color: var(--text); padding:10px 12px; border-radius:10px; font-weight:600;
-        }
-        .dropdown-item:hover{background:#f3f4f6}
-        .dropdown-item.danger{color:#b3261e}
-        .dropdown-item.danger:hover{background:#fdecec}
-
-        /* Responsive tweaks */
-        @media (max-width: 780px){
-            .site-header{flex-wrap:wrap; row-gap:10px}
-            .main-nav{order:3; width:100%; justify-content:center}
-            .account{margin-left:0; margin-right:0}
-            .user-name{display:none}
-        }
-    </style>
-</th:block>
-
-<!-- Body header fragment (parameterized) -->
-<th:block th:fragment="siteHeader(activePage)">
-    <header class="site-header"
-            th:with="
-            isAuth=${#authorization.expression('isAuthenticated()')},
-            u=${(session.username != null) ? session.username : (isAuth ? #authentication.name : null)}">
-        <a class="brand" th:href="@{/}">
-            <img th:src="@{/logo.png}" alt="SynergyMed лого" class="logo">
-        </a>
-
-        <nav class="main-nav" aria-label="Главна навигација">
-            <a class="nav-btn" th:href="@{/catalog}"
-               th:classappend="${activePage}=='Каталог' ? ' active'">Каталог</a>
-            <a class="nav-btn" sec:authorize="hasRole('ADMIN')" th:href="@{/admin/companies}"
-               th:classappend="${activePage}=='Компании' ? ' active'">Компании</a>
-            <a class="nav-btn" sec:authorize="hasAnyRole('PHARMACIST','ADMIN')" th:href="@{/admin/branded-medicines}"
-               th:classappend="${activePage}=='Брендирани лекови' ? ' active'">Брендирани лекови</a>
-            <a class="nav-btn" sec:authorize="hasAnyRole('PHARMACIST')" th:href="@{/admin/companies/3/facilities}"
-               th:classappend="${activePage}=='Објекти на аптеката' ? ' active'">Објекти на аптеката</a>
-
-
-        </nav>
-
-        <div class="account">
-            <div class="user-menu" th:if="${u}">
-                <button class="user-button" id="userButton" type="button"
-                        aria-haspopup="true" aria-expanded="false" aria-controls="userDropdown">
-                    <span class="avatar" th:text="${#strings.substring(u,0,1).toUpperCase()}">U</span>
-                    <span class="user-name" th:text="${u}">корисничко име</span>
-                    <svg class="chev" width="14" height="14" viewBox="0 0 24 24" aria-hidden="true">
-                        <path fill="currentColor" d="M7 10l5 5 5-5z"/>
-                    </svg>
-                </button>
-                <div class="dropdown" id="userDropdown" role="menu" aria-labelledby="userButton">
-                    <a class="dropdown-item" th:href="@{/profile}" role="menuitem">Подесувања за профилот</a>
-                    <a class="dropdown-item" sec:authorize="hasRole('PHARMACIST')" th:href="@{/pharmacist/health-profile/create}" role="menuitem">Контролна табла </a>
-                    <a class="dropdown-item" sec:authorize="hasRole('CLIENT') "th:href="@{/orders}" role="menuitem">Мои нарачки</a>
-                    <a class="dropdown-item" sec:authorize="hasRole('CLIENT')" th:href="@{/cart}" role="menuitem">Кошничка 🛒</a>
-                    <form th:action="@{/logout}" method="post" style="margin:0">
-                        <input type="hidden" th:name="${_csrf?.parameterName}" th:value="${_csrf?.token}">
-                        <button type="submit" class="dropdown-item danger" role="menuitem">Одјава</button>
-                    </form>
-                </div>
-            </div>
-            <div>
-            <a class="login-btn" th:unless="${u}" th:href="@{/login}">Најави се  </a>
-            </div>
-            <div>
-            <a class="login-btn" th:unless="${u}" th:href="@{/register}">Регистрирај се</a>
-            </div>
-        </div>
-    </header>
-</th:block>
-
-<!-- Footer scripts fragment -->
-<th:block th:fragment="headerScripts">
-    <script>
-        (function(){
-            const menu = document.querySelector('.user-menu');
-            if(!menu) return;
-            const btn = menu.querySelector('#userButton');
-            function closeMenu(){ menu.classList.remove('open'); btn && btn.setAttribute('aria-expanded','false'); }
-            function openMenu(){ menu.classList.add('open'); btn && btn.setAttribute('aria-expanded','true'); }
-            btn && btn.addEventListener('click', (e)=>{ e.stopPropagation(); menu.classList.contains('open') ? closeMenu() : openMenu(); });
-            document.addEventListener('click', (e)=>{ if(!menu.contains(e.target)) closeMenu(); });
-            document.addEventListener('keydown', (e)=>{ if(e.key === 'Escape') closeMenu(); });
-        })();
-    </script>
-</th:block>
Index: c/main/resources/templates/index.html
===================================================================
--- src/main/resources/templates/index.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,356 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>SynergyMed – Брендирани лекови</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <!-- Header styles -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <!-- Page styles -->
-    <style>
-        :root{
-            --teal-1:#20b2aa; --teal-2:#48d1cc; --bg:#fefeff; --card:#ffffff;
-            --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-            --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
-            --success:#28a745; --success-bg:#d4edda;
-        }
-        *{margin:0;padding:0;box-sizing:border-box}
-
-        body{
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            min-height:100vh;
-            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);
-            color:var(--text);
-            display:flex;
-            flex-direction:column;
-            align-items:center;
-        }
-
-        .page{
-            width:100%;
-            max-width:1200px;
-            padding:28px;
-            margin:0 auto;
-        }
-
-        .site-header{
-            position: sticky;
-            top:0;left:0;right:0;
-            width:100%;
-            border-radius:0;
-            margin:0;
-            z-index:1000;
-            background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .after-site-header{ height: 16px; }
-
-        .header{
-            display:flex;justify-content:space-between;align-items:center;
-            margin-bottom:24px;
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;padding:20px 24px;border-radius:20px;box-shadow:var(--shadow);
-            gap:10px;
-        }
-
-        .header-buttons{
-            display:flex;
-            gap:12px;
-            align-items:center;
-        }
-
-        .btn{display:inline-block;border:none;cursor:pointer;text-decoration:none;
-            padding:12px 16px;border-radius:12px;font-weight:600;letter-spacing:.5px;transition:.2s ease}
-        .btn-primary{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;box-shadow:0 10px 20px rgba(32,178,170,.25)}
-        .btn-primary:hover{transform:translateY(-2px)}
-
-        .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:24px}
-
-        .card{
-            background:var(--card);
-            border-radius:18px;
-            overflow:hidden;
-            box-shadow:var(--shadow-sm);
-            display:flex;
-            flex-direction:column;
-            min-height:420px; /* Increased card height */
-            transition:transform 0.2s ease, box-shadow 0.2s ease;
-        }
-
-        .card:hover{
-            transform:translateY(-4px);
-            box-shadow:0 12px 30px rgba(0,0,0,0.12);
-        }
-
-        .thumb{width:100%;height:220px;object-fit:cover;background:#eef2f3;display:block;flex-shrink:0}
-
-        .content{
-            padding:16px 18px 20px;
-            display:flex;
-            flex-direction:column;
-            flex-grow:1;
-            justify-content:space-between;
-        }
-
-        .product-info{
-            margin-bottom:16px;
-        }
-
-        .title{font-weight:700;margin:6px 0 4px;font-size:1.1rem;line-height:1.3}
-        .muted{color:var(--muted);font-size:.92rem;margin-bottom:8px}
-
-        .actions-section{
-            margin-top:auto;
-        }
-
-        .price{
-            font-weight:800;
-            font-size:1.1rem;
-            color:var(--teal-1);
-            margin-bottom:12px;
-        }
-
-        .button-group{
-            display:flex;
-            gap:8px;
-            flex-wrap:wrap;
-        }
-
-        .btn-outline{
-            background:#fff;
-            border:2px solid rgba(32,178,170,.25);
-            color:#20b2aa;
-            padding:10px 14px;
-            border-radius:10px;
-            text-decoration:none;
-            font-weight:600;
-            transition:.2s ease;
-            font-size:0.9rem;
-            flex:1;
-            text-align:center;
-            min-width:100px;
-        }
-
-        .btn-outline:hover{
-            border-color:#20b2aa;
-            box-shadow:0 6px 14px rgba(32,178,170,.18);
-            background:#f8fffe;
-        }
-
-        /* Toast Notification Styles */
-        .toast-container{
-            position:fixed;
-            top:80px;
-            right:20px;
-            z-index:9999;
-            display:flex;
-            flex-direction:column;
-            gap:10px;
-        }
-
-        .toast{
-            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
-            color:#fff;
-            padding:16px 20px;
-            border-radius:12px;
-            box-shadow:var(--shadow);
-            min-width:300px;
-            transform:translateX(400px);
-            opacity:0;
-            transition:all 0.3s ease;
-            display:flex;
-            align-items:center;
-            gap:10px;
-        }
-
-        .toast.show{
-            transform:translateX(0);
-            opacity:1;
-        }
-
-        .toast-icon{
-            font-size:1.2rem;
-            flex-shrink:0;
-        }
-
-        .toast-content{
-            flex-grow:1;
-        }
-
-        .toast-title{
-            font-weight:700;
-            margin-bottom:2px;
-        }
-
-        .toast-message{
-            font-size:0.9rem;
-            opacity:0.9;
-        }
-
-        .toast-close{
-            background:none;
-            border:none;
-            color:#fff;
-            font-size:1.2rem;
-            cursor:pointer;
-            padding:0;
-            opacity:0.8;
-            transition:opacity 0.2s ease;
-        }
-
-        .toast-close:hover{
-            opacity:1;
-        }
-
-        @media (max-width:560px){
-            .page{padding:16px}
-            .header{padding:16px;flex-direction:column;gap:12px}
-            .header-buttons{gap:10px;flex-wrap:wrap;justify-content:center}
-            .grid{grid-template-columns:1fr;gap:20px}
-            .button-group{flex-direction:column}
-            .btn-outline{flex:none}
-            .toast-container{right:10px;left:10px}
-            .toast{min-width:auto}
-        }
-    </style>
-</head>
-<body>
-<!-- Header -->
-<th:block th:replace="fragments/header :: siteHeader('Брендирани лекови')"></th:block>
-<div class="after-site-header"></div>
-
-<!-- Toast Container -->
-<div class="toast-container" id="toastContainer"></div>
-
-<div class="page">
-    <div class="header">
-        <h2>Брендирани лекови</h2>
-        <div class="header-buttons">
-            <a class="btn btn-primary" th:href="@{/admin/branded-medicines/new}">Креирај</a>
-        </div>
-    </div>
-
-    <div class="grid">
-        <div class="card" th:each="bm : ${medicines}">
-            <img class="thumb" th:src="@{${firstImageById[bm.id]}}" alt="слика на производ">
-            <div class="content">
-                <div class="product-info">
-                    <div class="title" th:text="${bm.name}">Име</div>
-                    <div class="muted" th:text="${bm.dosageForm}">Фармацевтска форма</div>
-                </div>
-
-                <div class="actions-section">
-                    <div class="price"
-                         th:text="${#numbers.formatDecimal(bm.price, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</div>
-
-                    <div class="button-group">
-                        <a class="btn-outline" th:href="@{/admin/branded-medicines/{id}/edit(id=${bm.id})}">Уреди</a>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-
-<script>
-    // Toast notification functionality
-    function showToast(title, message, type = 'success') {
-        const toastContainer = document.getElementById('toastContainer');
-
-        const toast = document.createElement('div');
-        toast.className = 'toast';
-
-        const icon = type === 'success' ? '✅' : '❌';
-
-        toast.innerHTML = `
-        <div class="toast-icon">${icon}</div>
-        <div class="toast-content">
-            <div class="toast-title">${title}</div>
-            <div class="toast-message">${message}</div>
-        </div>
-        <button class="toast-close" onclick="removeToast(this.parentElement)">×</button>
-    `;
-
-        toastContainer.appendChild(toast);
-
-        // Trigger animation
-        setTimeout(() => {
-            toast.classList.add('show');
-        }, 100);
-
-        // Auto remove after 4 seconds
-        setTimeout(() => {
-            removeToast(toast);
-        }, 4000);
-    }
-
-    function removeToast(toast) {
-        toast.classList.remove('show');
-        setTimeout(() => {
-            if (toast && toast.parentElement) {
-                toast.parentElement.removeChild(toast);
-            }
-        }, 300);
-    }
-
-    // Handle add to cart button clicks
-    document.addEventListener('DOMContentLoaded', function() {
-        const addToCartForms = document.querySelectorAll('form[action*="/cart/add/"]');
-
-        addToCartForms.forEach(form => {
-            form.addEventListener('submit', function(e) {
-                e.preventDefault();
-
-                const button = form.querySelector('.add-to-cart-btn');
-                const productName = button.getAttribute('data-name');
-                const originalText = button.textContent;
-
-                // Show loading state
-                button.textContent = 'Се додава...';
-                button.disabled = true;
-
-                // Submit the form via fetch
-                fetch(form.action, {
-                    method: 'POST',
-                    headers: {
-                        'Content-Type': 'application/x-www-form-urlencoded',
-                    }
-                })
-                    .then(response => {
-                        if (response.ok) {
-                            // Show success toast
-                            showToast(
-                                'Додадено во кошничката!',
-                                `${productName} е додаден во кошничката.`,
-                                'success'
-                            );
-                        } else {
-                            throw new Error('Failed to add item to cart');
-                        }
-                    })
-                    .catch(error => {
-                        console.error('Error:', error);
-                        showToast(
-                            'Грешка',
-                            'Неуспешно додавање во кошничката. Обидете се повторно.',
-                            'error'
-                        );
-                    })
-                    .finally(() => {
-                        // Restore button state
-                        button.textContent = originalText;
-                        button.disabled = false;
-                    });
-            });
-        });
-    });
-</script>
-
-</body>
-</html>
Index: c/main/resources/templates/login.html
===================================================================
--- src/main/resources/templates/login.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,116 +1,0 @@
-<!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.0">
-  <title>SynergyMed - Најава</title>
-  <style>
-    * { margin: 0; padding: 0; box-sizing: border-box; }
-    body {
-      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-      background: linear-gradient(135deg, #a4ecba 0%, #fefeff 100%);
-      min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 20px;
-    }
-    .login-container { background: white; border-radius: 20px; box-shadow: 0 20px 40px rgba(0,0,0,0.1); overflow: hidden; width: 100%; max-width: 400px; backdrop-filter: blur(10px); }
-    .login-header { background: linear-gradient(135deg, #20b2aa, #48d1cc); padding: 40px 30px; text-align: center; color: white; }
-    .login-header h1 { font-size: 2rem; font-weight: 300; margin-bottom: 8px; }
-    .login-header p { opacity: 0.9; font-size: 0.9rem; }
-    .login-form { padding: 40px 30px; }
-    .form-group { margin-bottom: 25px; position: relative; }
-    .form-group label { display: block; margin-bottom: 8px; color: #555; font-weight: 500; font-size: 0.9rem; }
-    .form-control { width: 100%; padding: 15px 20px; border: 2px solid #e1e5e9; border-radius: 12px; font-size: 1rem; transition: all 0.3s ease; background: #f8f9fa; }
-    .form-control:focus { outline: none; border-color: #20b2aa; background: white; box-shadow: 0 0 0 3px rgba(32,178,170,0.1); }
-    .btn-login { width: 100%; padding: 15px; background: linear-gradient(135deg, #20b2aa, #48d1cc); color: white; border: none; border-radius: 12px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; text-transform: uppercase; letter-spacing: 1px; }
-    .btn-login:hover { transform: translateY(-2px); box-shadow: 0 10px 20px rgba(32,178,170,0.3); }
-    .btn-login:active { transform: translateY(0); }
-    .alert { padding: 15px; border-radius: 8px; margin-bottom: 20px; font-size: 0.9rem; }
-    .alert-danger { background-color: #fee; color: #c33; border: 1px solid #fcc; }
-    .alert-success { background-color: #efe; color: #363; border: 1px solid #cfc; }
-    .forgot-password { text-align: center; margin-top: 20px; }
-    .forgot-password a { color: #20b2aa; text-decoration: none; font-size: 0.9rem; transition: color 0.3s ease; }
-    .forgot-password a:hover { color: #1a9999; text-decoration: underline; }
-    .loading { display: none; position: relative; }
-    .loading::after { content: ''; position: absolute; width: 20px; height: 20px; margin: auto; border: 2px solid transparent; border-top-color: #ffffff; border-radius: 50%; animation: spin 1s linear infinite; top: 50%; left: 50%; transform: translate(-50%, -50%); }
-    @keyframes spin { 0% { transform: translate(-50%,-50%) rotate(0deg); } 100% { transform: translate(-50%,-50%) rotate(360deg); } }
-    .form-footer { text-align: center; padding: 20px 30px; background-color: #f8f9fa; border-top: 1px solid #e9ecef; }
-    .form-footer p { color: #6c757d; font-size: 0.85rem; }
-    @media (max-width: 480px) {
-      .login-container { margin: 10px; border-radius: 15px; }
-      .login-header { padding: 30px 20px; }
-      .login-form { padding: 30px 20px; }
-      .login-header h1 { font-size: 1.7rem; }
-    }
-  </style>
-</head>
-<body>
-<div class="login-container">
-  <div class="login-header">
-    <h1>SynergyMed</h1>
-    <p>Добредојдовте назад! Ве молиме најавете се во вашата сметка.</p>
-  </div>
-
-  <div class="login-form">
-    <!-- Bad credentials (Spring Security redirects to /login?error) -->
-    <div th:if="${param.error}" class="alert alert-danger">
-      <span>Неточни корисничко име или лозинка.</span>
-    </div>
-
-    <!-- Error message from server-side model (optional, existing) -->
-    <div th:if="${error}" class="alert alert-danger">
-      <span th:text="${error}">Неточни креденцијали</span>
-    </div>
-
-    <!-- Success message (e.g., from registration or logout) -->
-    <div th:if="${message}" class="alert alert-success">
-      <span th:text="${message}">Порака за успех</span>
-    </div>
-
-    <form th:action="@{/login}" method="post" id="loginForm">
-      <div class="form-group">
-        <label for="username">Корисничко име</label>
-        <input type="text" id="username" name="username" class="form-control"
-               th:value="${username}" placeholder="Внесете корисничко име" required>
-      </div>
-
-      <div class="form-group">
-        <label for="password">Лозинка</label>
-        <input type="password" id="password" name="password" class="form-control"
-               placeholder="Внесете лозинка" required>
-      </div>
-
-      <button type="submit" class="btn-login" id="loginBtn">
-        <span class="btn-text">Најави се</span>
-        <div class="loading"></div>
-      </button>
-    </form>
-
-    <div class="forgot-password">
-      <a href="#" th:href="@{/forgot-password}">Ја заборавивте лозинката?</a>
-    </div>
-    <div class="forgot-password">
-      <a href="#" th:href="@{/register}">Немате профил? Регистрирајте се!</a>
-    </div>
-  </div>
-
-  <div class="form-footer">
-    <p>&copy; 2025 SynergyMed. Сите права задржани.</p>
-  </div>
-</div>
-
-<script>
-  document.getElementById('loginForm').addEventListener('submit', function() {
-    const btn = document.getElementById('loginBtn');
-    const btnText = btn.querySelector('.btn-text');
-    const loading = btn.querySelector('.loading');
-    btnText.style.display = 'none';
-    loading.style.display = 'block';
-    btn.disabled = true;
-  });
-
-  document.querySelectorAll('.form-control').forEach(input => {
-    input.addEventListener('focus', function() { this.parentElement.classList.add('focused'); });
-    input.addEventListener('blur', function() { if (!this.value) { this.parentElement.classList.remove('focused'); } });
-  });
-</script>
-</body>
-</html>
Index: c/main/resources/templates/manage-allergies.html
===================================================================
--- src/main/resources/templates/manage-allergies.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,204 +1,0 @@
-<!-- templates/manage-allergies.html -->
-<!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.0">
-  <title>SynergyMed - Управување со алергии</title>
-
-  <!-- Shared header styles (wrapped fragment expression) -->
-  <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-
-  <style>
-    * { margin:0; padding:0; box-sizing:border-box; }
-
-    /* IMPORTANT: remove page padding here so header can be full-bleed */
-    body {
-      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-      background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-      min-height:100vh;
-      padding:0; /* was 20px; removing this eliminates the left/right/top gaps */
-    }
-
-    /* Full-width global header - identical to other pages */
-    .site-header{
-      position:sticky;
-      top:0;
-      left:0;
-      right:0;
-      width:100%;
-      border-radius:0;
-      margin:0;
-      z-index:1000;
-      background:white !important;
-      box-shadow:0 2px 10px rgba(0,0,0,0.1);
-    }
-
-    /* Put spacing on the content container instead of body */
-    .container { max-width:800px; margin:0 auto; padding:20px; }
-
-    .header { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); margin-bottom:30px; overflow:hidden; }
-    .header-content { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; text-align:center; }
-    .header-content h1 { font-size:2.5rem; font-weight:300; margin-bottom:10px; }
-    .header-content p { font-size:1.1rem; opacity:.9; }
-    .nav-bar { background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1); margin-bottom:30px; padding:20px 30px; }
-    .nav-links { display:flex; gap:20px; align-items:center; }
-    .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:all .3s ease; font-weight:500; }
-    .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-    .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-    .card { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-    .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-    .card-body { padding:30px; }
-    .form-group { margin-bottom:25px; }
-    .form-group label { display:block; margin-bottom:8px; color:#555; font-weight:500; font-size:.9rem; }
-    .form-control { width:100%; padding:15px 20px; border:2px solid #e1e5e9; border-radius:12px; font-size:1rem; transition:all .3s ease; background:#f8f9fa; }
-    .form-control:focus { outline:none; border-color:#20b2aa; background:white; box-shadow:0 0 0 3px rgba(32,178,170,.1); }
-    select.form-control { cursor:pointer; }
-    textarea.form-control { resize:vertical; min-height:100px; }
-    .severity-options { display:flex; gap:15px; margin-top:10px; }
-    .severity-option { flex:1; }
-    .severity-option input[type="radio"] { display:none; }
-    .severity-label { display:block; padding:12px 20px; border:2px solid #e1e5e9; border-radius:10px; text-align:center; cursor:pointer; transition:all .3s ease; font-weight:500; }
-    .severity-option input[type="radio"]:checked + .severity-label.low { background:#d1ecf1; border-color:#0c5460; color:#0c5460; }
-    .severity-option input[type="radio"]:checked + .severity-label.medium { background:#fff3cd; border-color:#856404; color:#856404; }
-    .severity-option input[type="radio"]:checked + .severity-label.high { background:#fee; border-color:#c33; color:#c33; }
-    .btn-submit { width:100%; padding:15px; background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; border:none; border-radius:12px; font-size:1rem; font-weight:600; cursor:pointer; transition:all .3s ease; text-transform:uppercase; letter-spacing:1px; }
-    .btn-submit:hover { transform:translateY(-2px); box-shadow:0 10px 20px rgba(32,178,170,.3); }
-    .btn-submit:active { transform:translateY(0); }
-    .alert { padding:15px; border-radius:8px; margin-bottom:20px; font-size:.9rem; }
-    .alert-danger { background-color:#fee; color:#c33; border:1px solid #fcc; }
-    .alert-success { background-color:#efe; color:#363; border:1px solid #cfc; }
-    .current-allergies { background:#f8f9fa; border-radius:15px; padding:20px; margin-bottom:20px; }
-    .current-allergies h3 { color:#333; margin-bottom:15px; font-size:1.1rem; }
-    .allergy-item { background:white; border-radius:10px; padding:15px; margin-bottom:10px; border-left:4px solid #20b2aa; display:flex; justify-content:space-between; align-items:center; }
-    .allergy-info { flex:1; }
-    .medicine-name { font-weight:600; color:#333; margin-bottom:5px; }
-    .allergy-description { color:#666; font-size:.9rem; }
-    .severity-badge { padding:4px 12px; border-radius:15px; font-size:.8rem; font-weight:600; text-transform:uppercase; }
-    .severity-badge.high { background:#fee; color:#c33; }
-    .severity-badge.medium { background:#fff3cd; color:#856404; }
-    .severity-badge.low { background:#d1ecf1; color:#0c5460; }
-    .no-allergies { text-align:center; color:#888; font-style:italic; }
-    @media (max-width:768px){ .severity-options{flex-direction:column;} .nav-links{flex-wrap:wrap;} .allergy-item{flex-direction:column; align-items:flex-start; gap:10px;} }
-  </style>
-</head>
-<body>
-
-<!-- Global header (wrapped fragment expression) -->
-<th:block th:replace="~{fragments/header :: siteHeader(${null})}"></th:block>
-
-<div class="container">
-  <!-- Header -->
-  <div class="header">
-    <div class="header-content">
-      <h1>Управување со алергии</h1>
-      <p th:text="${'Управување со алергиски реакции за ' + user.firstName + ' ' + user.lastName}">
-        Управување со алергиски реакции за John Doe
-      </p>
-    </div>
-  </div>
-
-  <!-- Navigation -->
-  <div class="nav-bar">
-    <div class="nav-links">
-      <a th:href="@{/profile}" class="nav-link">Профил</a>
-      <a href="#" class="nav-link active">Управување со алергии</a>
-      <a th:href="@{/profile}" class="nav-link back-btn">Назад кон профил</a>
-    </div>
-  </div>
-
-  <!-- Current Allergies -->
-  <div class="card">
-    <div class="card-header">Тековни алергиски реакции</div>
-    <div class="card-body">
-      <div th:if="${healthProfile.allergicReactions != null and not #lists.isEmpty(healthProfile.allergicReactions)}">
-        <div th:each="allergy : ${healthProfile.allergicReactions}" class="allergy-item">
-          <div class="allergy-info">
-            <div class="medicine-name" th:text="${allergy.medicine.medicineName}">Аспирин</div>
-            <div class="allergy-description" th:text="${allergy.description}">Предизвикува сериозни кожни реакции</div>
-          </div>
-          <span th:class="${'severity-badge ' + #strings.toLowerCase(allergy.severity)}"
-                th:text="${allergy.severity}">ВИСОКО</span>
-        </div>
-      </div>
-      <div th:unless="${healthProfile.allergicReactions != null and not #lists.isEmpty(healthProfile.allergicReactions)}" class="no-allergies">
-        Нема евидентирани алергиски реакции.
-      </div>
-    </div>
-  </div>
-
-  <!-- Add New Allergy Form -->
-  <div class="card">
-    <div class="card-header">Додади нова алергиска реакција</div>
-    <div class="card-body">
-      <div th:if="${error}" class="alert alert-danger"><span th:text="${error}">Порака за грешка</span></div>
-      <div th:if="${success}" class="alert alert-success"><span th:text="${success}">Порака за успех</span></div>
-
-      <form th:action="@{/allergies/add}" method="post" id="allergyForm">
-        <div class="form-group">
-          <label for="medicineId">Лек</label>
-          <select id="medicineId" name="medicineId" class="form-control" required>
-            <option value="">Одберете лек...</option>
-            <option th:each="medicine : ${medicines}"
-                    th:value="${medicine.id}"
-                    th:text="${medicine.medicineName + ' (' + medicine.activeIngredient + ')'}">
-              Аспирин (ацетилсалицилна киселина)
-            </option>
-          </select>
-        </div>
-
-        <div class="form-group">
-          <label for="dateDiagnosed">Датум на дијагностицирање</label>
-          <input type="date" id="dateDiagnosed" name="dateDiagnosed" class="form-control"
-                 th:max="${#temporals.format(#temporals.createNow(), 'yyyy-MM-dd')}" required>
-        </div>
-
-        <div class="form-group">
-          <label for="description">Опис</label>
-          <textarea id="description" name="description" class="form-control"
-                    placeholder="Опишете ги симптомите, тригерите и дополнителни детали за реакцијата..."
-                    required></textarea>
-        </div>
-
-        <div class="form-group">
-          <label>Ниво на сериозност</label>
-          <div class="severity-options">
-            <div class="severity-option">
-              <input type="radio" id="low" name="severity" value="LOW" required>
-              <label for="low" class="severity-label low">Ниско</label>
-            </div>
-            <div class="severity-option">
-              <input type="radio" id="medium" name="severity" value="MEDIUM" required>
-              <label for="medium" class="severity-label medium">Средно</label>
-            </div>
-            <div class="severity-option">
-              <input type="radio" id="high" name="severity" value="HIGH" required>
-              <label for="high" class="severity-label high">Високо</label>
-            </div>
-          </div>
-        </div>
-
-        <button type="submit" class="btn-submit">Додади алергиска реакција</button>
-      </form>
-    </div>
-  </div>
-</div>
-
-<!-- Shared header behavior scripts -->
-<th:block th:replace="~{fragments/header :: headerScripts}"></th:block>
-
-<script>
-  document.getElementById('allergyForm').addEventListener('submit', function() {
-    const btn = this.querySelector('.btn-submit');
-    btn.textContent = 'Се додава...';
-    btn.disabled = true;
-  });
-  document.querySelectorAll('input[name="severity"]').forEach(radio => {
-    radio.addEventListener('change', function() {
-      document.querySelectorAll('.severity-label').forEach(label => { label.style.transform = 'scale(1)'; });
-      if (this.checked) this.nextElementSibling.style.transform = 'scale(1.05)';
-    });
-  });
-</script>
-</body>
-</html>
Index: c/main/resources/templates/medicine-interactions.html
===================================================================
--- src/main/resources/templates/medicine-interactions.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,292 +1,0 @@
-<!DOCTYPE html>
-<html lang="mk" xmlns:th="http://www.thymeleaf.org">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>SynergyMed - Интеракции на лекови</title>
-
-    <!-- Header styles (новата синтакса со ~{}) -->
-    <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-
-    <style>
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height:100vh;
-        }
-
-        /* Page-level override to keep the global header flat and sticky at the top */
-        .site-header {
-            position: sticky;
-            top: 0; left: 0; right: 0; width: 100%;
-            border-radius: 0;
-            margin: 0;
-            z-index: 1000;
-            background: white !important;
-            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        /* Layout */
-        .container { max-width:1200px; margin:0 auto; padding:20px; }
-
-        /* Page header card (not the global site-header) */
-        .header { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); margin-bottom:30px; overflow:hidden; }
-        .header-content { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; text-align:center; }
-        .header-content h1 { font-size:2.5rem; font-weight:300; margin-bottom:10px; }
-        .header-content p { font-size:1.1rem; opacity:.9; }
-
-        /* Header action area */
-        .header-buttons {
-            display:flex;
-            gap:10px;
-            flex-wrap:wrap;
-            justify-content:center;
-            margin-top:14px;
-        }
-
-        /* Button styles (anchor-as-button) */
-        .btn {
-            display:inline-flex;
-            align-items:center;
-            gap:8px;
-            padding:12px 18px;
-            border-radius:12px;
-            border:2px solid #20b2aa;
-            background:#fff;
-            color:#20b2aa;
-            text-decoration:none;
-            font-weight:600;
-            cursor:pointer;
-            transition:transform .15s ease, box-shadow .15s ease, background .15s ease, color .15s ease, border-color .15s ease;
-        }
-        .btn:hover { box-shadow:0 6px 14px rgba(32,178,170,.18); transform:translateY(-1px); }
-        .btn:focus-visible { outline:3px solid rgba(32,178,170,.35); outline-offset:2px; }
-
-        .btn-primary {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc);
-            color:#fff;
-            border:none;
-            box-shadow:0 10px 20px rgba(32,178,170,.25);
-        }
-        .btn-primary:hover { box-shadow:0 14px 24px rgba(32,178,170,.30); }
-        .btn-primary:active { transform:translateY(0); }
-
-        /* Top nav under the page header card */
-        .nav-bar { background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1); margin-bottom:30px; padding:20px 30px; }
-        .nav-links { display:flex; gap:20px; align-items:center; flex-wrap:nowrap; overflow-x:auto; }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:all .3s ease; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-        .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-
-        /* Cards */
-        .card { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-        .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-        .card-body { padding:30px; }
-
-        /* Form */
-        .form-group { margin-bottom:25px; }
-        .form-control { width:100%; padding:15px 20px; border:2px solid #e1e5e9; border-radius:12px; font-size:1rem; transition:all .3s ease; background:#f8f9fa; }
-        .form-control:focus { outline:none; border-color:#20b2aa; background:white; box-shadow:0 0 0 3px rgba(32,178,170,.1); }
-
-        .btn-submit { padding:15px 30px; background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; border:none; border-radius:12px; font-size:1rem; font-weight:600; cursor:pointer; transition:all .3s ease; text-transform:uppercase; letter-spacing:1px; }
-        .btn-submit:hover { transform:translateY(-2px); box-shadow:0 10px 20px rgba(32,178,170,.3); }
-        .btn-submit:active { transform:translateY(0); }
-
-        .search-form { display:flex; gap:15px; align-items:flex-end; }
-        .search-input { flex:1; }
-
-        /* Medicines grid */
-        .medicine-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:20px; }
-        .medicine-card { background:white; border-radius:15px; padding:20px; border:2px solid #e1e5e9; transition:all .3s ease; }
-        .medicine-card:hover { transform:translateY(-5px); box-shadow:0 15px 35px rgba(0,0,0,0.1); border-color:#20b2aa; }
-
-        .medicine-name { font-weight:600; color:#333; margin-bottom:8px; font-size:1.2rem; }
-        .medicine-ingredient { color:#666; font-size:0.9rem; margin-bottom:15px; font-style:italic; }
-
-        .check-interactions-btn {
-            width:100%;
-            padding:12px;
-            background:linear-gradient(135deg,#20b2aa,#48d1cc);
-            color:white;
-            border:none;
-            border-radius:10px;
-            font-weight:600;
-            cursor:pointer;
-            transition:all .3с ease;
-            text-decoration:none;
-            display:block;
-            text-align:center;
-        }
-        .check-interactions-btn:hover { color:white; transform:translateY(-2px); box-shadow:0 8px 20px rgba(32,178,170,.3); }
-
-        /* Interaction list */
-        .interaction-item { background:#f8f9fa; border-radius:15px; padding:20px; margin-bottom:15px; border-left:4px solid #20b2aa; position:relative; }
-        .interaction-medicines { font-weight:600; color:#333; margin-bottom:8px; font-size:1.1rem; }
-        .interaction-type { color:#20b2aa; font-weight:600; margin-bottom:8px; font-size:0.9rem; text-transform:uppercase; }
-        .interaction-description { color:#666; font-size:0.9rem; line-height:1.5; }
-
-        .severity-badge { position:absolute; top:15px; right:15px; padding:4px 12px; border-radius:15px; font-size:.8rem; font-weight:600; text-transform:uppercase; }
-        .severity-badge.high { background:#fee; color:#c33; }
-        .severity-badge.medium { background:#fff3cd; color:#856404; }
-        .severity-badge.low { background:#d1ecf1; color:#0c5460; }
-
-        .severity-high { border-left-color:#c33; }
-        .severity-medium { border-left-color:#856404; }
-        .severity-low { border-left-color:#0c5460; }
-
-        /* Alerts */
-        .alert { padding:15px; border-radius:12px; margin-bottom:20px; font-size:.9rem; }
-        .alert-danger { background-color:#fee; color:#c33; border:1px solid #fcc; }
-        .alert-success { background-color:#efe; color:#363; border:1px solid #cfc; }
-        .alert-info { background-color:#d1ecf1; color:#0c5460; border:1px solid #b6d4da; }
-
-        .no-interactions { text-align:center; color:#888; font-style:italic; padding:40px 20px; }
-        .no-interactions i { font-size:3rem; margin-bottom:15px; opacity:0.5; }
-
-        .current-results { background:#f8f9fa; border-radius:15px; padding:20px; margin-bottom:20px; }
-        .current-results h3 { color:#333; margin-bottom:15px; font-size:1.1rem; }
-
-        @media (max-width:768px) {
-            .medicine-grid { grid-template-columns:1fr; }
-            .search-form { flex-direction:column; }
-            .search-input { margin-bottom:15px; }
-            .header-content h1 { font-size:2rem; }
-            .nav-links { flex-wrap:wrap; }
-        }
-    </style>
-</head>
-<body>
-
-<!-- Global header -->
-<th:block th:replace="~{fragments/header :: siteHeader(${null})}"></th:block>
-
-<div class="container">
-    <!-- Header -->
-    <div class="header">
-        <div class="header-content">
-            <h1>Интеракции на лекови</h1>
-            <p>Проверете можни интеракции меѓу лекови за безбедни комбинации на терапија</p>
-            <div class="header-buttons">
-                <a class="btn btn-primary" th:href="@{/pharmacist/medicine/interactions/add}">Креирај</a>
-            </div>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a href="#"   th:href="@{/pharmacist/health-profile/create}" class="nav-link">Здравствени профили</a>
-            <a href="#"  th:href="@{/pharmacist/verification}" class="nav-link">Верификација на профили</a>
-            <a href="#" th:href="@{/pharmacist/supply-orders}"  class="nav-link">Нарачка на роба</a>
-            <a href="#" th:href="@{/pharmacist/medicine/interactions}" class="nav-link active">Интеракции на лекови</a>
-            <a href="#" class="nav-link back-btn" th:href="@{/profile}">Назад кон профилот</a>
-        </div>
-    </div>
-
-    <!-- Alerts -->
-    <div th:if="${hasError}" class="alert alert-danger">
-        <span th:text="${error}">Порака за грешка</span>
-    </div>
-
-    <div th:if="${hasInfo}" class="alert alert-info">
-        <span th:text="${info}">Информативна порака</span>
-    </div>
-
-    <div th:if="${hasSuccess}" class="alert alert-success">
-        <span th:text="${success}">Порака за успех</span>
-    </div>
-
-    <!-- Search -->
-    <div class="card">
-        <div class="card-header">Пребарај интеракции на лекови</div>
-        <div class="card-body">
-            <form th:action="@{/pharmacist/medicine/interactions/search}" method="post" class="search-form">
-                <div class="form-group search-input">
-                    <input type="text"
-                           class="form-control"
-                           name="searchTerm"
-                           placeholder="Внесете име на лек за проверка на интеракции..."
-                           th:value="${searchedMedicine != null ? searchedMedicine : ''}"
-                           required>
-                </div>
-                <button type="submit" class="btn-submit">Пребарај интеракции</button>
-            </form>
-        </div>
-    </div>
-
-    <!-- Current results summary -->
-    <div class="current-results" th:if="${searchedMedicine != null}">
-        <h3 th:text="'Пребарување за: ' + ${searchedMedicine}">Пребарување: </h3>
-        <p th:if="${interactions != null}"
-           th:text="'Пронајдени интеракции: ' + ${#lists.size(interactions)}">Пронајдени интеракции: 0</p>
-    </div>
-
-    <!-- Interaction Results -->
-    <div th:if="${interactions != null}" class="card">
-        <div class="card-header">
-            Резултати од интеракции
-            <span th:if="${searchedMedicine != null}"
-                  th:text="' — за ' + ${searchedMedicine}"></span>
-        </div>
-
-        <div class="card-body">
-            <!-- No interactions -->
-            <div th:if="${#lists.isEmpty(interactions)}" class="no-interactions">
-                <i class="fas fa-check-circle" aria-hidden="true"></i>
-                <p>Нема пронајдени ризични интеракции за ова пребарување.</p>
-            </div>
-
-            <!-- List interactions -->
-            <div th:if="${!#lists.isEmpty(interactions)}">
-                <div th:each="interaction : ${interactions}"
-                     class="interaction-item"
-                     th:classappend="${'severity-' + (#strings.toLowerCase(interaction.severity != null ? interaction.severity : 'low'))}">
-
-                    <span class="severity-badge"
-                          th:classappend="${#strings.toLowerCase(interaction.severity != null ? interaction.severity : 'low')}"
-                          th:text="${interaction.severity != null ? interaction.severity : 'LOW'}">LOW</span>
-
-                    <!-- Medicine names -->
-                    <div class="interaction-medicines"
-                         th:text="${
-                            ((interaction.medicineId1 != null and interaction.medicineId1.medicineName != null)
-                                ? interaction.medicineId1.medicineName : 'Лек A')
-                            + ' + ' +
-                            ((interaction.medicineId2 != null and interaction.medicineId2.medicineName != null)
-                                ? interaction.medicineId2.medicineName : 'Лек B')
-                         }">Лек A + Лек B</div>
-
-                    <!-- Type -->
-                    <div class="interaction-type"
-                         th:text="${interaction.type != null ? interaction.type : 'Интеракција'}">Интеракција</div>
-
-                    <!-- Description -->
-                    <div class="interaction-description"
-                         th:text="${interaction.description ?: 'Нема детален опис.'}">Описание…</div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!-- All medicines -->
-    <div th:if="${medicineList != null and !#lists.isEmpty(medicineList)}" class="card">
-        <div class="card-header">Сите лекови - кликнете за проверка на интеракции</div>
-        <div class="card-body">
-            <div class="medicine-grid">
-                <div class="medicine-card" th:each="m : ${medicineList}">
-                    <div class="medicine-name" th:text="${m.medicineName}">Име на лек</div>
-                    <div class="medicine-ingredient" th:text="${m.activeIngredient}">Активна состојка</div>
-                    <a th:href="@{'/pharmacist/medicine/interactions/' + ${m.id}}"
-                       class="check-interactions-btn">Провери интеракции</a>
-                </div>
-            </div>
-        </div>
-    </div>
-
-</div>
-
-<!-- Optional: include header dropdown script from the fragment -->
-<th:block th:replace="~{fragments/header :: headerScripts}"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/order-detail.html
===================================================================
--- src/main/resources/templates/order-detail.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,58 +1,0 @@
-<!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.0">
-    <title th:text="${'Order #' + order.id + ' – Details'}">Order Details</title>
-
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background:linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height:100vh;
-        }
-        .site-header { position:sticky; top:0; left:0; right:0; width:100%; border-radius:0; z-index:1000; }
-        .container { max-width:800px; margin:0 auto; padding:20px; }
-        .card { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-top:50px; text-align:center; }
-        .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; font-size:1.8rem; font-weight:600; }
-        .card-body { padding:40px 30px; }
-        .card-body p { margin-bottom:14px; font-size:1rem; color:#333; }
-        .success-icon { font-size:4rem; color:#20b2aa; margin-bottom:20px; }
-        .btn-back { display:inline-block; margin-top:25px; padding:12px 25px; background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; border-radius:12px; font-weight:600; text-decoration:none; transition:.3s; }
-        .btn-back:hover { transform:translateY(-2px); box-shadow:0 10px 20px rgba(32,178,170,.3); }
-    </style>
-</head>
-<body>
-
-<th:block th:replace="fragments/header :: siteHeader('orders')"></th:block>
-
-<div class="container">
-    <div class="card">
-        <div class="card-header" th:text="${'Order ' + order.orderDate}">Order #123</div>
-        <div class="card-body">
-            <div class="success-icon">✔</div>
-
-            <p><strong>Status:</strong> <span th:text="${order.status}">во тек</span></p>
-            <p><strong>Total Paid:</strong> <span th:text="${order.totalPrice + ' ден.'}">0 ден.</span></p>
-            <p><strong>Expected Arrival:</strong> <span th:text="${order.expectedArrivalDate}">2025-09-05</span></p>
-
-            <p><strong>Delivery Company:</strong>
-                <span th:text="${deliveryCompany.company != null ? deliveryCompany.company.companyName : 'N/A'}">Courier</span>
-            </p>
-
-            <p><strong>Payment Status:</strong> <span th:text="${payment.status}">COMPLETED</span></p>
-            <p><strong>Payment Method:</strong>
-                <span th:text="${payment.paymentMethod != null ? payment.paymentMethod.methodName : '—'}">CARD</span>
-            </p>
-
-            <a class="btn-back" th:href="@{/orders}">Back to Orders</a>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/orders.html
===================================================================
--- src/main/resources/templates/orders.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,96 +1,0 @@
-<!-- templates/orders.html -->
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>SynergyMed – Orders</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        :root {
-            --teal-1:#20b2aa; --teal-2:#48d1cc;
-            --bg:#fefeff; --card:#ffffff;
-            --muted:#6c757d; --text:#1f2937;
-            --shadow:0 20px 40px rgba(0,0,0,0.10);
-            --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
-            --green:#16a34a; --yellow:#ca8a04;
-            --green-bg:rgba(22,163,74,.12); --yellow-bg:rgba(202,138,4,.12);
-        }
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);color:var(--text)}
-        .site-header{position:sticky;top:0;left:0;right:0;width:100%;border-radius:0;margin:0;z-index:1000;background:white !important;box-shadow:0 2px 10px rgba(0,0,0,.1)}
-        .page{width:100%; max-width:1200px; padding:28px; margin:0 auto}
-        .card{background:var(--card);border-radius:18px;box-shadow:var(--shadow);margin-bottom:28px;overflow:hidden}
-        .card-header{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;padding:20px 24px;display:flex;justify-content:space-between;align-items:center;font-size:1.3rem;font-weight:600}
-        .card-body{padding:22px}
-        .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:22px}
-        .company-card{background:var(--card);border-radius:18px;box-shadow:var(--shadow-sm);overflow:hidden;display:flex;flex-direction:column}
-        .content{padding:16px 18px}
-        .title{font-weight:700;margin:6px 0 2px}
-        .muted{color:var(--muted);font-size:.92rem}
-        .badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:.80rem;font-weight:700}
-        .badge-green{background:var(--green-bg);color:var(--green)}
-        .badge-yellow{background:var(--yellow-bg);color:var(--yellow)}
-        .row{display:flex;justify-content:space-between;align-items:center;margin-top:12px}
-        .clickable{cursor:pointer}
-        @media (max-width:560px){.page{padding:16px}}
-    </style>
-</head>
-<body>
-
-<th:block th:replace="fragments/header :: siteHeader('orders')"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">
-            <span>Orders</span>
-        </div>
-        <div class="card-body">
-
-            <!-- Empty state -->
-            <div th:if="${#lists.isEmpty(orders)}" class="muted">You have not made any orders.</div>
-
-            <!-- Orders grid -->
-            <div class="grid" th:if="${!#lists.isEmpty(orders)}">
-                <div class="company-card clickable"
-                     th:each="o : ${orders}"
-                     th:attr="data-href=@{/orders/{oid}(oid=${o.id})}">
-                    <div class="content">
-                        <div class="title" th:text="${'Order • ' + o.orderDate}">Order • 2025-08-30</div>
-                        <div class="muted" th:text="${'Total: ' + o.totalPrice + ' ден.'}">Total</div>
-
-                        <div style="margin-top:8px;">
-                          <span class="badge"
-                                th:text="${o.status}"
-                                th:classappend="${o.status == 'испорачана'} ? ' badge-green' : (${o.status == 'во тек'} ? ' badge-yellow' : '')">
-                            Status
-                          </span>
-                        </div>
-
-                        <div class="row">
-                            <div class="muted" th:text="${'Expected: ' + o.expectedArrivalDate}">Expected</div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <script>
-                document.addEventListener('DOMContentLoaded', function () {
-                    document.querySelectorAll('.company-card.clickable').forEach(function (card) {
-                        const href = card.getAttribute('data-href');
-                        if (!href) return;
-                        card.addEventListener('click', function () { window.location.assign(href); });
-                        card.querySelectorAll('a, button, input, select, textarea, label, form')
-                            .forEach(function (el) { el.addEventListener('click', function (e) { e.stopPropagation(); }); });
-                    });
-                });
-            </script>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/payment-success.html
===================================================================
--- src/main/resources/templates/payment-success.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,61 +1,0 @@
-<!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.0">
-    <title>SynergyMed - Успешна уплата</title>
-
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height:100vh;
-        }
-
-        .site-header {
-            position: sticky; top:0; left:0; right:0;
-            width: 100%;
-            border-radius: 0;
-            z-index: 1000;
-        }
-
-        .container { max-width:800px; margin:0 auto; padding:20px; }
-
-        .card { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-top:50px; text-align:center; }
-        .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; font-size:1.8rem; font-weight:600; }
-        .card-body { padding:40px 30px; }
-        .card-body p { margin-bottom:15px; font-size:1rem; color:#333; }
-
-        .success-icon { font-size:4rem; color:#20b2aa; margin-bottom:20px; }
-
-        .btn-back { display:inline-block; margin-top:25px; padding:12px 25px; background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; border-radius:12px; font-weight:600; text-decoration:none; transition:.3s; }
-        .btn-back:hover { transform:translateY(-2px); box-shadow:0 10px 20px rgba(32,178,170,.3); }
-    </style>
-</head>
-<body>
-
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="container">
-    <div class="card">
-        <div class="card-header">Уплатата е успешна 🎉</div>
-        <div class="card-body">
-            <div class="success-icon">✔</div>
-            <p>Ви благодариме! Вашата уплата е успешно обработена.</p>
-            <p>Број на нарачка: <span th:text="${order.id}">123</span></p>
-            <p>Платен износ: <span th:text="${payment.amount} + ' ден.'">0.00 ден.</span></p>
-            <p>Статус: <span th:text="${payment.status}">ЗАВРШЕНО</span></p>
-            <p>Очекувано пристигнување: <span th:text="${order.expectedArrivalDate}">2025-09-05</span></p>
-
-            <a th:href="@{/catalog}" class="btn-back">Продолжи со купување</a>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-
-</body>
-</html>
Index: c/main/resources/templates/payment.html
===================================================================
--- src/main/resources/templates/payment.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,71 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="en">
-<head>
-  <meta charset="UTF-8">
-  <title>SynergyMed – Уплата</title>
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <th:block th:replace="fragments/header :: headerStyles"></th:block>
-  <style>
-    * { margin:0; padding:0; box-sizing:border-box; }
-    body {
-      font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-      background:linear-gradient(135deg,#a4ecba 0%,#f7f7f8 100%);
-      min-height:100vh;
-      color:#1f2937;
-    }
-    .site-header { position: sticky; top:0; left:0; right:0; width:100%; border-radius:0; z-index:1000; background:white !important; box-shadow:0 2px 10px rgba(0,0,0,0.1); }
-    .container { max-width:800px; margin:40px auto; padding:20px; }
-    .card { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-    .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-    .card-body { padding:30px; }
-    .form-group { margin-bottom:25px; }
-    .form-group label { display:block; margin-bottom:8px; color:#555; font-weight:500; font-size:.9rem; }
-    .form-control { width:100%; padding:15px 20px; border:2px solid #e1e5e9; border-radius:12px; font-size:1rem; transition:all .3s ease; background:#f8f9fa; }
-    .form-control:focus { outline:none; border-color:#20b2aa; background:white; box-shadow:0 0 0 3px rgba(32,178,170,.1); }
-    .btn-submit { width:100%; padding:15px; background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; border:none; border-radius:12px; font-size:1rem; font-weight:600; cursor:pointer; transition:.3s; text-transform:uppercase; letter-spacing:1px; }
-    .btn-submit:hover { transform:translateY(-2px); box-shadow:0 10px 20px rgba(32,178,170,.3); }
-    .cart-total { text-align:right; font-size:1.1rem; font-weight:700; margin-top:10px; }
-    .muted { color:#6c757d }
-  </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader('payment')"></th:block>
-
-<div class="container">
-  <div class="card">
-    <div class="card-header">Заврши ја уплатата</div>
-    <div class="card-body">
-      <form th:action="@{/payment}" method="post">
-        <input type="hidden" name="useCard" th:value="${useCard}">
-        <div class="form-group">
-          <label for="paymentMethodId">Избери метод на плаќање</label>
-          <select id="paymentMethodId" name="paymentMethodId" class="form-control" required>
-            <option value="">Одбери метод на плаќање...</option>
-            <option th:each="pm : ${methods}" th:value="${pm.id}" th:text="${pm.methodName}">Картичка</option>
-          </select>
-        </div>
-
-        <div class="form-group">
-          <label for="deliveryCompanyId">Избери достава</label>
-          <select id="deliveryCompanyId" name="deliveryCompanyId" class="form-control" required>
-            <option value="">Одбери компанија за достава...</option>
-            <option th:each="dc : ${deliveryCompanies}" th:value="${dc.id}" th:text="${dc.company.companyName}">Курир</option>
-          </select>
-        </div>
-
-        <div class="cart-total">
-          <div class="muted" th:if="${discount != null && discount > 0}">
-            Попуст: <span th:text="${discount + ' ден.'}">0 ден.</span>
-          </div>
-          Вкупно: <span th:text="${#numbers.formatDecimal(total, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</span>
-        </div>
-
-        <button type="submit" class="btn-submit">Плати сега</button>
-      </form>
-    </div>
-  </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/profile-clubcard.html
===================================================================
--- src/main/resources/templates/profile-clubcard.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,227 +1,0 @@
-<!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.0">
-    <title>SynergyMed - Клуб-картичка</title>
-
-    <!-- Shared header styles -->
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        * { margin: 0; padding: 0; box-sizing: border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height: 100vh;
-        }
-
-        /* Full-width sticky header (same look as examples) */
-        .site-header {
-            position: sticky; top: 0; left: 0; right: 0;
-            width: 100%;
-            border-radius: 0;
-            z-index: 1000;
-        }
-
-        /* container same size as examples */
-        .container {
-            max-width: 1200px;
-            margin: 0 auto;
-            padding: 20px;
-        }
-
-        .header {
-            background: white;
-            border-radius: 20px;
-            box-shadow: 0 10px 30px rgba(0, 0, 0, .1);
-            margin-bottom: 30px;
-            overflow: hidden;
-        }
-
-        .header-content {
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            color: white;
-            padding: 30px;
-            display: flex;
-            align-items: center;
-            gap: 30px;
-        }
-
-        .profile-picture {
-            width: 120px; height: 120px; border-radius: 50%;
-            background: #888; display: flex; align-items: center; justify-content: center;
-            font-size: 48px; font-weight: bold; color: white;
-            border: 4px solid rgba(255,255,255,.3);
-        }
-
-        .profile-info h1 { font-size: 2.5rem; font-weight: 300; margin-bottom: 10px; }
-        .profile-info p { font-size: 1.1rem; opacity: .9; margin-bottom: 5px; }
-
-        .profile-meta { display: flex; gap: 30px; margin-top: 15px; flex-wrap: wrap; }
-        .meta-item { background: rgba(255,255,255,.2); padding: 8px 16px; border-radius: 20px; font-size: .9rem; }
-
-        .nav-bar {
-            background: white; border-radius: 15px;
-            box-shadow: 0 5px 15px rgba(0,0,0,.1);
-            margin-bottom: 30px; padding: 20px 30px;
-        }
-        .nav-links { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:.3s; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-
-        /* Ensure logout looks identical to examples */
-        .logout-btn{
-            margin-left:auto;
-            background-color:#ee5a24;
-            background-image:linear-gradient(135deg,#ff6b6b,#ee5a24);
-            color:#fff;
-            padding:10px 20px;
-            border-radius:25px;
-            text-decoration:none;
-            font-weight:600;
-            border:none;
-            box-shadow:0 5px 15px rgba(238,90,36,.30);
-            transition:.2s;
-            display:inline-flex; align-items:center;
-        }
-        .logout-btn:hover{ transform:translateY(-2px); box-shadow:0 10px 20px rgba(238,90,36,.35); }
-
-        .main-content { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; }
-
-        .card {
-            background: white; border-radius: 20px;
-            box-shadow: 0 10px 30px rgba(0,0,0,.1);
-            overflow: hidden;
-        }
-        .card-header { background: linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-        .card-body { padding: 30px; }
-
-        .info-grid { display: grid; gap: 20px; }
-        .info-item { display: flex; justify-content: space-between; padding: 15px 0; border-bottom: 1px solid #f0f0f0; }
-        .info-item:last-child { border-bottom: none; }
-
-        .info-label { font-weight: 600; color: #555; font-size: .95rem; }
-        .info-value { color: #333; font-size: 1rem; }
-
-        /* Club card form styles (right column) */
-        .row { display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid #f0f0f0; gap:12px; }
-        label { font-weight:600; color:#374151; min-width:140px; }
-        select, input[type=text] { padding:10px 12px; border:1px solid #e5e7eb; border-radius:10px; flex:1; background:#fff; }
-        .actions { display:flex; gap:12px; flex-wrap:wrap; margin-top:16px; }
-        .btn { display:inline-block; padding:10px 16px; border-radius:10px; border:1px solid #e5e7eb; background:#fff; font-weight:600; cursor:pointer; }
-        .btn-primary { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; border:none; }
-        .muted { color:#6b7280; }
-
-        .stat {
-            display:flex; align-items:center; justify-content:space-between;
-            padding:14px 16px; border:1px solid #eef2f7; border-radius:12px; margin-bottom:12px;
-            background:#f9fafb;
-        }
-        .stat-label { color:#6b7280; font-weight:600; }
-        .stat-value { color:#111827; font-weight:700; }
-
-        @media(max-width: 992px) { .main-content { grid-template-columns: 1fr; } }
-    </style>
-</head>
-<body>
-
-<!-- Top site header; activePage null for profile area -->
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="container">
-    <!-- Profile Header (same as profile) -->
-    <div class="header">
-        <div class="header-content">
-            <div class="profile-picture">
-                <span th:text="${user.firstName.substring(0,1).toUpperCase() + user.lastName.substring(0,1).toUpperCase()}">AB</span>
-            </div>
-            <div class="profile-info">
-                <h1 th:text="${user.firstName + ' ' + user.lastName}">John Doe</h1>
-                <p th:text="'@' + ${username}">@johndoe</p>
-                <p th:text="${user.email}">john.doe@email.com</p>
-                <div class="profile-meta">
-                    <div class="meta-item" th:text="'Член од ' + ${#temporals.format(user.dateCreated, 'MMM yyyy')}">Член од јан 2024</div>
-                    <div class="meta-item" th:text="'Возраст ' + ${T(java.time.Period).between(user.dateOfBirth, T(java.time.LocalDate).now()).getYears()}">Возраст 30</div>
-                    <div class="meta-item" th:text="${user.gender ?: 'Не е наведено'}">Машки</div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!-- Navigation with Club Card active -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a th:href="@{/profile}" class="nav-link" th:classappend="${activeTab}=='profile' ? ' active'">Профил</a>
-            <a th:href="@{/profile/prescriptions}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='prescriptions' ? ' active'">Рецепти</a>
-            <a th:href="@{/profile/clubcard}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='clubcard' ? ' active'">Клуб-картичка</a>
-            <a th:href="@{/allergies/manage}" sec:authorize="hasRole('CLIENT')"  class="nav-link">Управување со алергии</a>
-            <a th:href="@{/profile/contacts}"  class="nav-link" th:classappend="${activeTab}=='contacts' ? ' active'">Контакт податоци</a>
-            <a th:href="@{/logout}" class="logout-btn">Одјави се</a>
-        </div>
-    </div>
-
-    <!-- Main Content -->
-    <div class="main-content">
-        <!-- Left: Personal information (same as profile) -->
-        <div class="card">
-            <div class="card-header">Лични информации</div>
-            <div class="card-body">
-                <div class="info-grid">
-                    <div class="info-item"><span class="info-label">Целосно име</span><span class="info-value" th:text="${user.firstName + ' ' + user.lastName}">John Doe</span></div>
-                    <div class="info-item"><span class="info-label">Корисничко име</span><span class="info-value" th:text="${username}">johndoe</span></div>
-                    <div class="info-item"><span class="info-label">Е-пошта</span><span class="info-value" th:text="${user.email}">john@email.com</span></div>
-                    <div class="info-item"><span class="info-label">Датум на раѓање</span><span class="info-value" th:text="${#temporals.format(user.dateOfBirth, 'dd MMM yyyy')}">15 Jan 1990</span></div>
-                    <div class="info-item"><span class="info-label">Пол</span><span class="info-value" th:text="${user.gender ?: 'Не е наведено'}">Машки</span></div>
-                    <div class="info-item"><span class="info-label">Член од</span><span class="info-value" th:text="${#temporals.format(user.dateCreated, 'dd MMM yyyy')}">01 Jan 2024</span></div>
-                </div>
-            </div>
-        </div>
-
-        <!-- Right: Club Card -->
-        <div class="card">
-            <div class="card-header">Клуб-картичка</div>
-            <div class="card-body">
-                <!-- If user already has a club card, show its data -->
-                <div th:if="${hasClubcard}">
-                    <div class="stat">
-                        <span class="stat-label">Програма</span>
-                        <span class="stat-value" th:text="${clubcard.clubProgram}">Default Loyalty Program</span>
-                    </div>
-                    <div class="stat">
-                        <span class="stat-label">Поени</span>
-                        <span class="stat-value" th:text="${clubcard.points}">0</span>
-                    </div>
-                    <p class="muted" style="margin-top:10px;">Заработувајте поени со купувања и искористете бенефити според активната програма.</p>
-                </div>
-
-                <!-- Otherwise, allow creating a new card and choosing a program -->
-                <div th:unless="${hasClubcard}">
-                    <p class="muted" style="margin-bottom:14px;">Нема пронајдена клуб-картичка. Изберете програма и креирајте нова картичка за да започнете со собирање поени.</p>
-                    <form th:action="@{/profile/clubcard/create}" method="post">
-                        <div class="row">
-                            <label for="program">Програма</label>
-                            <select id="program" name="program" required>
-                                <!-- keep values in English to match backend; show text in Macedonian -->
-                                <option value="Зегин Basic" selected>Зегин Basic</option>
-                                <option value="Зегин Bronze">Зегин Bronze</option>
-                                <option value="Зегин Silver">Зегин Silver</option>
-                                <option value="Зегин Gold">Зегин Gold</option>
-                            </select>
-                        </div>
-
-                        <div class="actions" style="align-items:center;">
-                            <button type="submit" class="btn btn-primary">Креирај клуб-картичка</button>
-                        </div>
-                    </form>
-                    <p class="muted" style="margin-top:10px;">Бенефитите и собирањето поени може да се разликуваат по ниво.</p>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<!-- Shared header behavior scripts -->
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/profile-contacts.html
===================================================================
--- src/main/resources/templates/profile-contacts.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,219 +1,0 @@
-<!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.0">
-    <title>SynergyMed - Профил</title>
-
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        * { margin: 0; padding: 0; box-sizing: border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height: 100vh;
-        }
-
-        .site-header { position: sticky; top: 0; left: 0; right: 0; width: 100%; border-radius: 0; z-index: 1000; }
-
-        /* container same size and spacing as profile */
-        .container { max-width: 1200px; margin: 0 auto; padding: 20px; }
-
-        .header {
-            background: white;
-            border-radius: 20px;
-            box-shadow: 0 10px 30px rgba(0, 0, 0, .1);
-            margin-bottom: 30px;
-            overflow: hidden;
-        }
-
-        .header-content {
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            color: white;
-            padding: 30px;
-            display: flex;
-            align-items: center;
-            gap: 30px;
-        }
-
-        .profile-picture {
-            width: 120px; height: 120px; border-radius: 50%;
-            background: #888; display: flex; align-items: center; justify-content: center;
-            font-size: 48px; font-weight: bold; color: white;
-            border: 4px solid rgba(255,255,255,.3);
-        }
-
-        .profile-info h1 { font-size: 2.5rem; font-weight: 300; margin-bottom: 10px; }
-        .profile-info p { font-size: 1.1rem; opacity: .9; margin-bottom: 5px; }
-
-        .profile-meta { display: flex; gap: 30px; margin-top: 15px; flex-wrap: wrap; }
-        .meta-item { background: rgba(255,255,255,.2); padding: 8px 16px; border-radius: 20px; font-size: .9rem; }
-
-        .nav-bar {
-            background: white; border-radius: 15px;
-            box-shadow: 0 5px 15px rgba(0,0,0,.1);
-            margin-bottom: 30px; padding: 20px 30px;
-        }
-        .nav-links { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:.3s; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-
-        /* Logout button */
-        .logout-btn{
-            margin-left:auto;
-            background-color:#ee5a24;
-            background-image:linear-gradient(135deg,#ff6b6b,#ee5a24);
-            color:#fff;
-            padding:10px 20px;
-            border-radius:25px;
-            text-decoration:none;
-            font-weight:600;
-            border:none;
-            box-shadow:0 5px 15px rgba(238,90,36,.30);
-            transition:.2s;
-            display:inline-flex; align-items:center; justify-content:center;
-        }
-        .logout-btn:hover{ transform:translateY(-2px); box-shadow:0 10px 20px rgba(238,90,36,.35); }
-
-        .main-content { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; }
-
-        .card {
-            background: white; border-radius: 20px;
-            box-shadow: 0 10px 30px rgba(0,0,0,.1);
-            overflow: hidden;
-        }
-        .card-header { background: linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-        .card-body { padding: 30px; }
-
-        .info-grid { display: grid; gap: 20px; }
-        .info-item { display: flex; justify-content: space-between; padding: 15px 0; border-bottom: 1px solid #f0f0f0; }
-        .info-item:last-child { border-bottom: none; }
-
-        .info-label { font-weight: 600; color: #555; font-size: .95rem; }
-        .info-value { color: #333; font-size: 1rem; }
-
-        /* Contact form rows (right column) */
-        .row { display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid #f0f0f0; gap:12px; }
-        label { font-weight:600; color:#374151; min-width:120px; }
-        input[type=text] { padding:10px 12px; border:1px solid #e5e7eb; border-radius:10px; flex:1; }
-
-        /* New: single flex row for both actions */
-        .actions-row{
-            display:flex;
-            align-items:center;  /* vertical alignment on same baseline */
-            gap:12px;            /* space between the two buttons/forms */
-            margin-top:16px;
-        }
-        .actions-row form{ margin:0; } /* remove default margins */
-
-        /* Buttons baseline consistency */
-        .btn{ display:inline-flex; align-items:center; justify-content:center; padding:10px 16px; border-radius:10px; border:1px solid #e5e7eb; background:#fff; font-weight:600; cursor:pointer; }
-        .btn-primary { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; border:none; }
-        .btn-danger { color:#b3261e; border-color:#f0caca; }
-
-        @media(max-width: 992px) { .main-content { grid-template-columns: 1fr; } }
-    </style>
-</head>
-<body>
-
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="container">
-    <!-- Profile Header (same as profile) -->
-    <div class="header">
-        <div class="header-content">
-            <div class="profile-picture">
-                <span th:text="${user.firstName.substring(0,1).toUpperCase() + user.lastName.substring(0,1).toUpperCase()}">AB</span>
-            </div>
-            <div class="profile-info">
-                <h1 th:text="${user.firstName + ' ' + user.lastName}">John Doe</h1>
-                <p th:text="'@' + ${username}">@johndoe</p>
-                <p th:text="${user.email}">john.doe@email.com</p>
-                <div class="profile-meta">
-                    <div class="meta-item" th:text="'Член од ' + ${#temporals.format(user.dateCreated, 'MMM yyyy')}">Член од јан 2024</div>
-                    <div class="meta-item" th:text="'Возраст ' + ${T(java.time.Period).between(user.dateOfBirth, T(java.time.LocalDate).now()).getYears()}">Возраст 30</div>
-                    <div class="meta-item" th:text="${user.gender ?: 'Не е наведено'}">Машки</div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!-- Nav with Contact Info active -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a th:href="@{/profile}" class="nav-link" th:classappend="${activeTab}=='profile' ? ' active'">Профил</a>
-            <a th:href="@{/profile/prescriptions}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='prescriptions' ? ' active'">Рецепти</a>
-            <a th:href="@{/profile/clubcard}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='clubcard' ? ' active'">Клуб-картичка</a>
-            <a th:href="@{/allergies/manage}" sec:authorize="hasRole('CLIENT')"  class="nav-link">Управување со алергии</a>
-            <a th:href="@{/profile/contacts}"  class="nav-link" th:classappend="${activeTab}=='contacts' ? ' active'">Контакт податоци</a>
-            <a th:href="@{/logout}" class="logout-btn">Одјави се</a>
-        </div>
-    </div>
-
-    <!-- Main Content -->
-    <div class="main-content">
-        <!-- Left: same personal info card as profile -->
-        <div class="card">
-            <div class="card-header">Лични информации</div>
-            <div class="card-body">
-                <div class="info-grid">
-                    <div class="info-item"><span class="info-label">Целосно име</span><span class="info-value" th:text="${user.firstName + ' ' + user.lastName}">John Doe</span></div>
-                    <div class="info-item"><span class="info-label">Корисничко име</span><span class="info-value" th:text="${username}">johndoe</span></div>
-                    <div class="info-item"><span class="info-label">Е-пошта</span><span class="info-value" th:text="${user.email}">john@email.com</span></div>
-                    <div class="info-item"><span class="info-label">Датум на раѓање</span><span class="info-value" th:text="${#temporals.format(user.dateOfBirth, 'dd MMM yyyy')}">15 Jan 1990</span></div>
-                    <div class="info-item"><span class="info-label">Пол</span><span class="info-value" th:text="${user.gender ?: 'Не е наведено'}">Машки</span></div>
-                    <div class="info-item"><span class="info-label">Член од</span><span class="info-value" th:text="${#temporals.format(user.dateCreated, 'dd MMM yyyy')}">01 Jan 2024</span></div>
-                </div>
-            </div>
-        </div>
-
-        <!-- Right: Contact Information (create/update + delete) -->
-        <div class="card">
-            <div class="card-header">Контакт податоци</div>
-            <div class="card-body">
-                <!-- Save form holds inputs (no button inside) -->
-                <form id="saveContactForm" th:action="@{/profile/contacts/save}" method="post">
-                    <input type="hidden" name="id" th:if="${contact != null}" th:value="${contact.id}">
-                    <div class="row">
-                        <label for="phone">Телефон</label>
-                        <input id="phone" name="phone" type="text"
-                               th:value="${contact != null ? contact.phone : ''}"
-                               placeholder="+389 70 000 000">
-                    </div>
-                    <div class="row">
-                        <label for="address">Адреса</label>
-                        <input id="address" name="address" type="text"
-                               th:value="${contact != null ? contact.address : ''}"
-                               placeholder="Улица, Град">
-                    </div>
-                </form>
-
-                <!-- Side-by-side actions -->
-                <div class="actions-row">
-                    <!-- Submit outside form using form attribute -->
-                    <button type="submit" class="btn btn-primary"
-                            form="saveContactForm"
-                            th:text="${contact != null} ? 'Ажурирај' : 'Креирај'">Креирај</button>
-
-                    <!-- Delete form -->
-                    <form th:if="${contact != null}"
-                          th:action="@{/profile/contacts/delete}"
-                          method="post">
-                        <input type="hidden" name="id" th:value="${contact.id}">
-                        <button type="submit" class="btn btn-danger">Избриши</button>
-                    </form>
-                </div>
-
-                <!-- Optional helper when creating -->
-                <p class="info-value" th:if="${contact == null}" style="margin-top:10px;color:#6b7280;">
-                    Пополнете ги полињата и притиснете „Креирај“ за да додадете контакт податоци.
-                </p>
-            </div>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/profile-prescriptions.html
===================================================================
--- src/main/resources/templates/profile-prescriptions.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,192 +1,0 @@
-<!-- templates/profile-prescriptions.html -->
-<!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.0">
-    <title>SynergyMed - Профил</title>
-
-    <!-- Shared header styles (Thymeleaf 3.1 fragment expression) -->
-    <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-
-    <style>
-        * { margin: 0; padding: 0; box-sizing: border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height: 100vh;
-        }
-
-        /* Full-width sticky header override for consistency */
-        .site-header { position: sticky; top: 0; left: 0; right: 0; width: 100%; border-radius: 0; z-index: 1000; }
-
-        .container { max-width: 1200px; margin: 0 auto; padding: 20px; }
-        .header {
-            background: white; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,.1);
-            margin-bottom: 30px; overflow: hidden;
-        }
-        .header-content {
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            color: white; padding: 30px; display: flex; align-items: center; gap: 30px;
-        }
-        .profile-picture {
-            width: 120px; height: 120px; border-radius: 50%;
-            background: #888; display: flex; align-items: center; justify-content: center;
-            font-size: 48px; font-weight: bold; color: white;
-            border: 4px solid rgba(255,255,255,.3);
-        }
-        .profile-info h1 { font-size: 2.5rem; font-weight: 300; margin-bottom: 10px; }
-        .profile-info p { font-size: 1.1rem; opacity: .9; margin-bottom: 5px; }
-        .profile-meta { display: flex; gap: 30px; margin-top: 15px; flex-wrap: wrap; }
-        .meta-item { background: rgba(255,255,255,.2); padding: 8px 16px; border-radius: 20px; font-size: .9rem; }
-
-        .nav-bar {
-            background: white; border-radius: 15px; box-shadow: 0 5px 15px rgba(0,0,0,.1);
-            margin-bottom: 30px; padding: 20px 30px;
-        }
-        .nav-links { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:.3s; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-        .logout-btn{
-            margin-left:auto;
-            background-color:#ee5a24;
-            background-image:linear-gradient(135deg,#ff6b6b,#ee5a24);
-            color:#fff;
-            padding:10px 20px;
-            border-radius:25px;
-            text-decoration:none;
-            font-weight:600;
-            border:none;
-            box-shadow:0 5px 15px rgba(238,90,36,.30);
-            transition:.2s;
-            display:inline-flex; align-items:center;
-        }
-        .logout-btn:hover{ transform:translateY(-2px); box-shadow:0 10px 20px rgba(238,90,36,.35); }
-
-        .main-content { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; }
-        .card { background: white; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,.1); overflow: hidden; }
-        .card-header { background: linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-        .card-body { padding: 30px; }
-
-        .info-grid { display: grid; gap: 20px; }
-        .info-item { display: flex; justify-content: space-between; padding: 15px 0; border-bottom: 1px solid #f0f0f0; }
-        .info-item:last-child { border-bottom: none; }
-        .info-label { font-weight: 600; color: #555; font-size: .95rem; }
-        .info-value { color: #333; font-size: 1rem; }
-
-        .rx-list { display: grid; gap: 14px; }
-        .rx { border:1px solid #eef2f7; border-radius:12px; padding:14px 16px; background:#fff; box-shadow: 0 4px 10px rgba(0,0,0,.04); }
-        .rx-title { font-weight:700; margin-bottom:6px; }
-        .rx-sub { color:#6b7280; font-size:.92rem; display:flex; gap:14px; flex-wrap:wrap; }
-        .muted { color:#6b7280; }
-
-        .pending-wrap { display:flex; align-items:center; justify-content:center; padding:24px; }
-        .pending-text { text-align:center; font-weight:600; color:#1f2937; }
-
-        @media (max-width: 992px) { .main-content { grid-template-columns: 1fr; } }
-    </style>
-</head>
-<body>
-
-<!-- Global header -->
-<th:block th:replace="~{fragments/header :: siteHeader(${null})}"></th:block>
-
-<div class="container">
-    <!-- Profile Header -->
-    <div class="header">
-        <div class="header-content">
-            <div class="profile-picture">
-                <span th:text="${user.firstName.substring(0,1).toUpperCase() + user.lastName.substring(0,1).toUpperCase()}">AB</span>
-            </div>
-            <div class="profile-info">
-                <h1 th:text="${user.firstName + ' ' + user.lastName}">John Doe</h1>
-                <p th:text="'@' + ${username}">@johndoe</p>
-                <p th:text="${user.email}">john@example.com</p>
-                <div class="profile-meta">
-                    <div class="meta-item" th:text="'Член од ' + ${#temporals.format(user.dateCreated, 'MMM yyyy')}">Член од јан 2024</div>
-                    <div class="meta-item" th:text="'Возраст ' + ${T(java.time.Period).between(user.dateOfBirth, T(java.time.LocalDate).now()).getYears()}">Возраст 30</div>
-                    <div class="meta-item" th:text="${user.gender ?: 'Не е наведено'}">Машки</div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a th:href="@{/profile}" class="nav-link" th:classappend="${activeTab}=='profile' ? ' active'">Профил</a>
-            <a th:href="@{/profile/prescriptions}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='prescriptions' ? ' active'">Рецепти</a>
-            <a th:href="@{/profile/clubcard}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='clubcard' ? ' active'">Клуб-картичка</a>
-            <a th:href="@{/allergies/manage}" sec:authorize="hasRole('CLIENT')"  class="nav-link">Управување со алергии</a>
-            <a th:href="@{/profile/contacts}"  class="nav-link" th:classappend="${activeTab}=='contacts' ? ' active'">Контакт податоци</a>
-            <a th:href="@{/logout}" class="logout-btn">Одјави се</a>
-        </div>
-    </div>
-
-    <div class="main-content">
-        <!-- Left: Personal Information -->
-        <div class="card">
-            <div class="card-header">Лични информации</div>
-            <div class="card-body">
-                <div class="info-grid">
-                    <div class="info-item"><span class="info-label">Целосно име</span><span class="info-value" th:text="${user.firstName + ' ' + user.lastName}">John Doe</span></div>
-                    <div class="info-item"><span class="info-label">Корисничко име</span><span class="info-value" th:text="${username}">johndoe</span></div>
-                    <div class="info-item"><span class="info-label">Е-пошта</span><span class="info-value" th:text="${user.email}">john@example.com</span></div>
-                    <div class="info-item"><span class="info-label">Датум на раѓање</span><span class="info-value" th:text="${#temporals.format(user.dateOfBirth, 'dd MMM yyyy')}">15 Jan 1990</span></div>
-                    <div class="info-item"><span class="info-label">Пол</span><span class="info-value" th:text="${user.gender ?: 'Не е наведено'}">Машки</span></div>
-                    <div class="info-item"><span class="info-label">Член од</span><span class="info-value" th:text="${#temporals.format(user.dateCreated, 'dd MMM yyyy')}">01 Jan 2024</span></div>
-                </div>
-            </div>
-        </div>
-
-        <!-- Right: Prescriptions -->
-        <div class="card">
-            <div class="card-header">Рецепти</div>
-            <div class="card-body">
-
-                <!-- Not verified -->
-                <div th:if="${!verified}">
-                    <!-- Pending request → show waiting text -->
-                    <div th:if="${pending}" class="pending-wrap">
-                        <div class="pending-text">
-                            Фармацевт ќе ви ги прегледа вашите податоци во најбрз можен рок.
-                        </div>
-                    </div>
-
-                    <!-- Not pending → show Apply button -->
-                    <div th:if="${!pending}">
-                        <div class="muted" style="margin-bottom:10px;">
-                            Профилот не е верифициран; рецептите ќе бидат достапни по завршување на верификацијата.
-                        </div>
-                        <a class="nav-link" th:href="@{/profile/verification/apply}"
-                           style="display:inline-block; background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; border-radius:25px; padding:10px 20px; text-decoration:none; font-weight:600;">
-                            Поднеси барање за верификација
-                        </a>
-                    </div>
-                </div>
-
-                <!-- Verified: list prescriptions -->
-                <div th:if="${verified}">
-                    <div th:if="${#lists.isEmpty(prescriptions)}" class="muted">Нема пронајдени рецепти.</div>
-
-                    <div class="rx-list" th:if="${!#lists.isEmpty(prescriptions)}">
-                        <div class="rx" th:each="p : ${prescriptions}">
-                            <div class="rx-title" th:text="${p.medicine.medicineName}">Име на лекот</div>
-                            <div class="rx-sub">
-                                <span th:text="${'Издаден од: ' + p.issuedBy}">Издаден од:</span>
-                                <span th:text="${'Издаден: ' + #temporals.format(p.issuedAt, 'dd MMM yyyy')}">Издаден:</span>
-                                <span th:text="${'Важи до: ' + #temporals.format(p.validTo, 'dd MMM yyyy')}">Важи до:</span>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-            </div>
-        </div>
-    </div>
-</div>
-
-<!-- Shared header behavior scripts -->
-<th:block th:replace="~{fragments/header :: headerScripts}"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/profile.html
===================================================================
--- src/main/resources/templates/profile.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,213 +1,0 @@
-<!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.0">
-    <title>SynergyMed - Профил</title>
-
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-
-    <style>
-        * { margin: 0; padding: 0; box-sizing: border-box; }
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #f7f7f8 100%);
-            min-height: 100vh;
-        }
-
-        .site-header {
-            position: sticky; top: 0; left: 0; right: 0;
-            width: 100%;
-            border-radius: 0;
-            z-index: 1000;
-        }
-
-        /* container same size as admin example */
-        .container {
-            max-width: 1200px;
-            margin: 0 auto;
-            padding: 20px;
-        }
-
-        .header {
-            background: white;
-            border-radius: 20px;
-            box-shadow: 0 10px 30px rgba(0, 0, 0, .1);
-            margin-bottom: 30px;
-            overflow: hidden;
-        }
-
-        .header-content {
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            color: white;
-            padding: 30px;
-            display: flex;
-            align-items: center;
-            gap: 30px;
-        }
-
-        .profile-picture {
-            width: 120px; height: 120px; border-radius: 50%;
-            background: #888; display: flex; align-items: center; justify-content: center;
-            font-size: 48px; font-weight: bold; color: white;
-            border: 4px solid rgba(255,255,255,.3);
-        }
-
-        .profile-info h1 { font-size: 2.5rem; font-weight: 300; margin-bottom: 10px; }
-        .profile-info p { font-size: 1.1rem; opacity: .9; margin-bottom: 5px; }
-
-        .profile-meta { display: flex; gap: 30px; margin-top: 15px; flex-wrap: wrap; }
-        .meta-item { background: rgba(255,255,255,.2); padding: 8px 16px; border-radius: 20px; font-size: .9rem; }
-
-        .nav-bar {
-            background: white; border-radius: 15px;
-            box-shadow: 0 5px 15px rgba(0,0,0,.1);
-            margin-bottom: 30px; padding: 20px 30px;
-        }
-        .nav-links { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:.3s; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-
-        .main-content { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; }
-
-        .card {
-            background: white; border-radius: 20px;
-            box-shadow: 0 10px 30px rgba(0,0,0,.1);
-            overflow: hidden;
-        }
-        .card-header { background: linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:25px 30px; font-size:1.3rem; font-weight:600; }
-        .card-body { padding: 30px; }
-
-        .info-grid { display: grid; gap: 20px; }
-        .info-item { display: flex; justify-content: space-between; padding: 15px 0; border-bottom: 1px solid #f0f0f0; }
-        .info-item:last-child { border-bottom: none; }
-
-        .info-label { font-weight: 600; color: #555; font-size: .95rem; }
-        .info-value { color: #333; font-size: 1rem; }
-
-        .blood-type { background: linear-gradient(135deg,#ff6b6b,#ee5a24); color: white; padding: 5px 15px; border-radius: 20px; font-weight: bold; }
-
-        .allergy-item { background:#f8f9fa; border-radius:15px; padding:20px; margin-bottom:15px; border-left:4px solid #20b2aa; }
-        .allergy-header { display:flex; justify-content:space-between; margin-bottom:10px; }
-        .medicine-name { font-weight:600; }
-
-        .severity { padding:3px 12px; border-radius:15px; font-size:.8rem; font-weight:600; text-transform:uppercase; }
-        .severity.high { background:#fee; color:#c33; }
-        .severity.medium { background:#fff3cd; color:#856404; }
-        .severity.low { background:#d1ecf1; color:#0c5460; }
-
-        .allergy-details { color:#666; font-size:.9rem; margin-top:10px; }
-        .date-diagnosed { color:#888; font-size:.85rem; margin-top:8px; }
-
-        .no-data { text-align: center; padding: 40px; color: #888; }
-        .no-data-icon { font-size: 4rem; margin-bottom: 20px; opacity: .3; }
-
-        .logout-btn{
-            margin-left:auto;
-            background-color:#ee5a24;
-            background-image:linear-gradient(135deg,#ff6b6b,#ee5a24);
-            color:#fff;
-            padding:10px 20px;
-            border-radius:25px;
-            text-decoration:none;
-            font-weight:600;
-            border:none;
-            box-shadow:0 5px 15px rgba(238,90,36,.30);
-            transition:.2s;
-            display:inline-flex; align-items:center;
-        }
-        .logout-btn:hover{ transform:translateY(-2px); box-shadow:0 10px 20px rgba(238,90,36,.35); }
-
-        @media(max-width: 992px) {
-            .main-content { grid-template-columns: 1fr; }
-        }
-    </style>
-</head>
-<body>
-
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="container">
-    <!-- Profile Header -->
-    <div class="header">
-        <div class="header-content">
-            <div class="profile-picture">
-                <span th:text="${user.firstName.substring(0,1).toUpperCase() + user.lastName.substring(0,1).toUpperCase()}">AB</span>
-            </div>
-            <div class="profile-info">
-                <h1 th:text="${user.firstName + ' ' + user.lastName}">John Doe</h1>
-                <p th:text="'@' + ${username}">@johndoe</p>
-                <p th:text="${user.email}">john.doe@email.com</p>
-                <div class="profile-meta">
-                    <div class="meta-item" th:text="'Член од ' + ${#temporals.format(user.dateCreated, 'MMM yyyy')}">Член од јан 2024</div>
-                    <div class="meta-item" th:text="'Возраст ' + ${T(java.time.Period).between(user.dateOfBirth, T(java.time.LocalDate).now()).getYears()}">Возраст 30</div>
-                    <div class="meta-item" th:text="${user.gender ?: 'Не е наведено'}">Машки</div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a th:href="@{/profile}" class="nav-link" th:classappend="${activeTab}=='profile' ? ' active'">Профил</a>
-            <a th:href="@{/profile/prescriptions}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='prescriptions' ? ' active'">Рецепти</a>
-            <a th:href="@{/profile/clubcard}" sec:authorize="hasRole('CLIENT')" class="nav-link" th:classappend="${activeTab}=='clubcard' ? ' active'">Клуб-картичка</a>
-            <a th:href="@{/allergies/manage}" sec:authorize="hasRole('CLIENT')"  class="nav-link">Управување со алергии</a>
-            <a th:href="@{/profile/contacts}" class="nav-link" th:classappend="${activeTab}=='contacts' ? ' active'">Контакт податоци</a>
-            <a th:href="@{/logout}" class="logout-btn">Одјави се</a>
-        </div>
-    </div>
-
-
-    <!-- Main Content -->
-    <div class="main-content">
-        <!-- Personal Info -->
-        <div class="card">
-            <div class="card-header">Лични информации</div>
-            <div class="card-body">
-                <div class="info-grid">
-                    <div class="info-item"><span class="info-label">Целосно име</span><span class="info-value" th:text="${user.firstName + ' ' + user.lastName}">John Doe</span></div>
-                    <div class="info-item"><span class="info-label">Корисничко име</span><span class="info-value" th:text="${username}">johndoe</span></div>
-                    <div class="info-item"><span class="info-label">Е-пошта</span><span class="info-value" th:text="${user.email}">john@email.com</span></div>
-                    <div class="info-item"><span class="info-label">Датум на раѓање</span><span class="info-value" th:text="${#temporals.format(user.dateOfBirth, 'dd MMM yyyy')}">15 Jan 1990</span></div>
-                    <div class="info-item"><span class="info-label">Пол</span><span class="info-value" th:text="${user.gender ?: 'Не е наведено'}">Машки</span></div>
-                    <div class="info-item"><span class="info-label">Член од</span><span class="info-value" th:text="${#temporals.format(user.dateCreated, 'dd MMM yyyy')}">01 Jan 2024</span></div>
-                </div>
-            </div>
-        </div>
-
-        <!-- Health Profile -->
-        <div class="card" sec:authorize="hasRole('CLIENT')">
-            <div class="card-header">Здравствен профил</div>
-            <div class="card-body">
-                <div th:if="${hasHealthProfile}">
-                    <div class="info-item"><span class="info-label">Крвна група</span><span class="blood-type" th:text="${healthProfile.bloodType}">O+</span></div>
-                    <div style="margin-top: 30px;">
-                        <h3 style="color:#333; margin-bottom:20px;">Алергиски реакции</h3>
-                        <div th:if="${healthProfile.allergicReactions != null and not #lists.isEmpty(healthProfile.allergicReactions)}">
-                            <div th:each="allergy : ${healthProfile.allergicReactions}" class="allergy-item">
-                                <div class="allergy-header">
-                                    <span class="medicine-name" th:text="${allergy.medicine.medicineName}">Аспирин</span>
-                                    <span class="severity" th:class="'severity ' + ${#strings.toLowerCase(allergy.severity)}" th:text="${allergy.severity}">HIGH</span>
-                                </div>
-                                <div class="allergy-details" th:text="${allergy.description}">Детали овде</div>
-                                <div class="date-diagnosed">Дијагностицирано: <span th:text="${#temporals.format(allergy.dateDiagnosed, 'dd MMM yyyy')}">15 Jan 2023</span></div>
-                            </div>
-                        </div>
-                        <div th:unless="${healthProfile.allergicReactions != null and not #lists.isEmpty(healthProfile.allergicReactions)}" class="no-data">
-                            <div class="no-data-icon">🏥</div><p>Нема евидентирани алергиски реакции</p>
-                        </div>
-                    </div>
-                </div>
-                <div th:unless="${hasHealthProfile}" class="no-data">
-                    <div class="no-data-icon">📋</div><p>Нема здравствен профил</p>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/register-success.html
===================================================================
--- src/main/resources/templates/register-success.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,274 +1,0 @@
-<!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.0">
-  <title>SynergyMed - Успешна Регистрација</title>
-  <style>
-    * {
-      margin: 0;
-      padding: 0;
-      box-sizing: border-box;
-    }
-
-    body {
-      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-      background: linear-gradient(135deg, #a4ecba 0%, #fefeff 100%);
-      min-height: 100vh;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      padding: 20px;
-    }
-
-    .success-container {
-      background: white;
-      border-radius: 20px;
-      box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
-      overflow: hidden;
-      width: 100%;
-      max-width: 450px;
-      backdrop-filter: blur(10px);
-    }
-
-    .success-header {
-      background: linear-gradient(135deg, #28a745, #20c997);
-      padding: 40px 30px;
-      text-align: center;
-      color: white;
-    }
-
-    .success-icon {
-      width: 80px;
-      height: 80px;
-      border-radius: 50%;
-      background: rgba(255, 255, 255, 0.2);
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      margin: 0 auto 20px auto;
-      animation: pulse 2s infinite;
-    }
-
-    .success-icon svg {
-      width: 40px;
-      height: 40px;
-    }
-
-    @keyframes pulse {
-      0% {
-        transform: scale(1);
-        box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7);
-      }
-      70% {
-        transform: scale(1.05);
-        box-shadow: 0 0 0 10px rgba(255, 255, 255, 0);
-      }
-      100% {
-        transform: scale(1);
-        box-shadow: 0 0 0 0 rgba(255, 255, 255, 0);
-      }
-    }
-
-    .success-header h1 {
-      font-size: 2rem;
-      font-weight: 300;
-      margin-bottom: 8px;
-    }
-
-    .success-header p {
-      opacity: 0.9;
-      font-size: 0.9rem;
-    }
-
-    .success-content {
-      padding: 40px 30px;
-      text-align: center;
-    }
-
-    .success-message {
-      margin-bottom: 30px;
-    }
-
-    .success-message h2 {
-      color: #28a745;
-      font-size: 1.5rem;
-      font-weight: 600;
-      margin-bottom: 15px;
-    }
-
-    .success-message p {
-      color: #666;
-      font-size: 1rem;
-      line-height: 1.6;
-    }
-
-    .action-buttons {
-      display: flex;
-      flex-direction: column;
-      gap: 15px;
-    }
-
-    .btn-login {
-      padding: 15px;
-      background: linear-gradient(135deg, #20b2aa, #48d1cc);
-      color: white;
-      border: none;
-      border-radius: 12px;
-      font-size: 1rem;
-      font-weight: 600;
-      cursor: pointer;
-      transition: all 0.3s ease;
-      text-transform: uppercase;
-      letter-spacing: 1px;
-      text-decoration: none;
-      display: block;
-      text-align: center;
-    }
-
-    .btn-login:hover {
-      transform: translateY(-2px);
-      box-shadow: 0 10px 20px rgba(32, 178, 170, 0.3);
-    }
-
-    .btn-login:active {
-      transform: translateY(0);
-    }
-
-    .btn-secondary {
-      padding: 15px;
-      background: #f8f9fa;
-      color: #6c757d;
-      border: 2px solid #e1e5e9;
-      border-radius: 12px;
-      font-size: 1rem;
-      font-weight: 600;
-      cursor: pointer;
-      transition: all 0.3s ease;
-      text-decoration: none;
-      display: block;
-      text-align: center;
-    }
-
-    .btn-secondary:hover {
-      background: #e9ecef;
-      color: #495057;
-      border-color: #ced4da;
-    }
-
-    .form-footer {
-      text-align: center;
-      padding: 20px 30px;
-      background-color: #f8f9fa;
-      border-top: 1px solid #e9ecef;
-    }
-
-    .form-footer p {
-      color: #6c757d;
-      font-size: 0.85rem;
-    }
-
-    .welcome-info {
-      background: #e7f9f0;
-      border: 1px solid #b8e6cc;
-      border-radius: 12px;
-      padding: 20px;
-      margin-bottom: 30px;
-      text-align: left;
-    }
-
-    .welcome-info h3 {
-      color: #155724;
-      font-size: 1.1rem;
-      margin-bottom: 10px;
-    }
-
-    .welcome-info ul {
-      color: #155724;
-      font-size: 0.9rem;
-      padding-left: 20px;
-    }
-
-    .welcome-info li {
-      margin-bottom: 5px;
-    }
-
-    @media (max-width: 480px) {
-      .success-container {
-        margin: 10px;
-        border-radius: 15px;
-      }
-
-      .success-header {
-        padding: 30px 20px;
-      }
-
-      .success-content {
-        padding: 30px 20px;
-      }
-
-      .success-header h1 {
-        font-size: 1.7rem;
-      }
-
-      .success-message h2 {
-        font-size: 1.3rem;
-      }
-    }
-  </style>
-</head>
-<body>
-<div class="success-container">
-  <div class="success-header">
-    <div class="success-icon">
-      <svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
-        <path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path>
-      </svg>
-    </div>
-    <h1>SynergyMed</h1>
-    <p>Успешно создавање на сметка</p>
-  </div>
-
-  <div class="success-content">
-    <div class="success-message">
-      <h2>Честитки!</h2>
-      <p>Вашата сметка е успешно создадена. Сега можете да се најавите и да ги користите сите функционалности на SynergyMed платформата.</p>
-    </div>
-
-    <div class="welcome-info">
-      <h3>Што можете да правите:</h3>
-      <ul>
-        <li>Online купување на продукти од нашите аптеки</li>
-        <li>Преглед на медицинската историја</li>
-        <li>Менаџирање на вашиот здравствен профил</li>
-        <li>Следење на здравствените показатели</li>
-      </ul>
-    </div>
-
-    <div class="action-buttons">
-      <a href="#" th:href="@{/login}" class="btn-login">Најави се сега</a>
-      <a href="#" th:href="@{/}" class="btn-secondary">Назад на почетна</a>
-    </div>
-  </div>
-
-  <div class="form-footer">
-    <p>&copy; 2025 SynergyMed. Сите права задржани.</p>
-  </div>
-</div>
-
-<script>
-  // Add a subtle entrance animation
-  document.addEventListener('DOMContentLoaded', function() {
-    const container = document.querySelector('.success-container');
-    container.style.opacity = '0';
-    container.style.transform = 'translateY(20px)';
-
-    setTimeout(() => {
-      container.style.transition = 'all 0.6s ease';
-      container.style.opacity = '1';
-      container.style.transform = 'translateY(0)';
-    }, 100);
-  });
-</script>
-</body>
-</html>
Index: c/main/resources/templates/register.html
===================================================================
--- src/main/resources/templates/register.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,385 +1,0 @@
-<!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.0">
-    <title>SynergyMed - Регистрација</title>
-    <style>
-        * {
-            margin: 0;
-            padding: 0;
-            box-sizing: border-box;
-        }
-
-        body {
-            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background: linear-gradient(135deg, #a4ecba 0%, #fefeff 100%);
-            min-height: 100vh;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            padding: 20px;
-        }
-
-        .register-container {
-            background: white;
-            border-radius: 20px;
-            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
-            overflow: hidden;
-            width: 100%;
-            max-width: 500px;
-            backdrop-filter: blur(10px);
-        }
-
-        .register-header {
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            padding: 40px 30px;
-            text-align: center;
-            color: white;
-        }
-
-        .register-header h1 {
-            font-size: 2rem;
-            font-weight: 300;
-            margin-bottom: 8px;
-        }
-
-        .register-header p {
-            opacity: 0.9;
-            font-size: 0.9rem;
-        }
-
-        .register-form {
-            padding: 40px 30px;
-        }
-
-        .form-row {
-            display: flex;
-            gap: 15px;
-            margin-bottom: 25px;
-        }
-
-        .form-group {
-            margin-bottom: 25px;
-            position: relative;
-            flex: 1;
-        }
-
-        .form-group.full-width {
-            flex: 1 1 100%;
-        }
-
-        .form-group label {
-            display: block;
-            margin-bottom: 8px;
-            color: #555;
-            font-weight: 500;
-            font-size: 0.9rem;
-        }
-
-        .form-control {
-            width: 100%;
-            padding: 15px 20px;
-            border: 2px solid #e1e5e9;
-            border-radius: 12px;
-            font-size: 1rem;
-            transition: all 0.3s ease;
-            background: #f8f9fa;
-        }
-
-        .form-control:focus {
-            outline: none;
-            border-color: #20b2aa;
-            background: white;
-            box-shadow: 0 0 0 3px rgba(32, 178, 170, 0.1);
-        }
-
-        .form-select {
-            width: 100%;
-            padding: 15px 20px;
-            border: 2px solid #e1e5e9;
-            border-radius: 12px;
-            font-size: 1rem;
-            transition: all 0.3s ease;
-            background: #f8f9fa;
-            cursor: pointer;
-        }
-
-        .form-select:focus {
-            outline: none;
-            border-color: #20b2aa;
-            background: white;
-            box-shadow: 0 0 0 3px rgba(32, 178, 170, 0.1);
-        }
-
-        .btn-register {
-            width: 100%;
-            padding: 15px;
-            background: linear-gradient(135deg, #20b2aa, #48d1cc);
-            color: white;
-            border: none;
-            border-radius: 12px;
-            font-size: 1rem;
-            font-weight: 600;
-            cursor: pointer;
-            transition: all 0.3s ease;
-            text-transform: uppercase;
-            letter-spacing: 1px;
-            margin-top: 10px;
-        }
-
-        .btn-register:hover {
-            transform: translateY(-2px);
-            box-shadow: 0 10px 20px rgba(32, 178, 170, 0.3);
-        }
-
-        .btn-register:active {
-            transform: translateY(0);
-        }
-
-        .alert {
-            padding: 15px;
-            border-radius: 8px;
-            margin-bottom: 20px;
-            font-size: 0.9rem;
-        }
-
-        .alert-danger {
-            background-color: #fee;
-            color: #c33;
-            border: 1px solid #fcc;
-        }
-
-        .login-link {
-            text-align: center;
-            margin-top: 20px;
-        }
-
-        .login-link a {
-            color: #20b2aa;
-            text-decoration: none;
-            font-size: 0.9rem;
-            transition: color 0.3s ease;
-        }
-
-        .login-link a:hover {
-            color: #1a9999;
-            text-decoration: underline;
-        }
-
-        .loading {
-            display: none;
-            position: relative;
-        }
-
-        .loading::after {
-            content: '';
-            position: absolute;
-            width: 20px;
-            height: 20px;
-            margin: auto;
-            border: 2px solid transparent;
-            border-top-color: #ffffff;
-            border-radius: 50%;
-            animation: spin 1s linear infinite;
-            top: 50%;
-            left: 50%;
-            transform: translate(-50%, -50%);
-        }
-
-        @keyframes spin {
-            0% { transform: translate(-50%, -50%) rotate(0deg); }
-            100% { transform: translate(-50%, -50%) rotate(360deg); }
-        }
-
-        .form-footer {
-            text-align: center;
-            padding: 20px 30px;
-            background-color: #f8f9fa;
-            border-top: 1px solid #e9ecef;
-        }
-
-        .form-footer p {
-            color: #6c757d;
-            font-size: 0.85rem;
-        }
-
-        @media (max-width: 600px) {
-            .form-row {
-                flex-direction: column;
-                gap: 0;
-            }
-
-            .register-container {
-                margin: 10px;
-                border-radius: 15px;
-            }
-
-            .register-header {
-                padding: 30px 20px;
-            }
-
-            .register-form {
-                padding: 30px 20px;
-            }
-
-            .register-header h1 {
-                font-size: 1.7rem;
-            }
-        }
-    </style>
-</head>
-<body>
-<div class="register-container">
-    <div class="register-header">
-        <h1>SynergyMed</h1>
-        <p>Создајте нова сметка за да започнете.</p>
-    </div>
-
-    <div class="register-form">
-        <!-- Error message -->
-        <div th:if="${hasError}" class="alert alert-danger">
-            <span th:text="${error}">Грешка при регистрација</span>
-        </div>
-
-        <form th:action="@{/register}" method="post" id="registerForm">
-            <div class="form-row">
-                <div class="form-group">
-                    <label for="firstName">Име</label>
-                    <input type="text"
-                           id="firstName"
-                           name="firstName"
-                           class="form-control"
-                           placeholder="Внесете име"
-                           required>
-                </div>
-
-                <div class="form-group">
-                    <label for="lastName">Презиме</label>
-                    <input type="text"
-                           id="lastName"
-                           name="lastName"
-                           class="form-control"
-                           placeholder="Внесете презиме"
-                           required>
-                </div>
-            </div>
-
-            <div class="form-group">
-                <label for="username">Корисничко име</label>
-                <input type="text"
-                       id="username"
-                       name="username"
-                       class="form-control"
-                       placeholder="Внесете корисничко име"
-                       required>
-            </div>
-
-            <div class="form-group">
-                <label for="email">Е-маил</label>
-                <input type="email"
-                       id="email"
-                       name="email"
-                       class="form-control"
-                       placeholder="Внесете е-маил адреса"
-                       required>
-            </div>
-
-            <div class="form-row">
-                <div class="form-group">
-                    <label for="password">Лозинка</label>
-                    <input type="password"
-                           id="password"
-                           name="password"
-                           class="form-control"
-                           placeholder="Внесете лозинка"
-                           required>
-                </div>
-
-                <div class="form-group">
-                    <label for="repeatPassword">Повторете лозинка</label>
-                    <input type="password"
-                           id="repeatPassword"
-                           name="repeatPassword"
-                           class="form-control"
-                           placeholder="Повторете лозинка"
-                           required>
-                </div>
-            </div>
-
-            <div class="form-row">
-                <div class="form-group">
-                    <label for="gender">Пол</label>
-                    <select id="gender" name="gender" class="form-select" required>
-                        <option value="">Изберете пол</option>
-                        <option value="МАШКИ">Машки</option>
-                        <option value="ЖЕНСКИ">Женски</option>
-                    </select>
-                </div>
-
-                <div class="form-group">
-                    <label for="dateOfBirth">Датум на раѓање</label>
-                    <input type="date"
-                           id="dateOfBirth"
-                           name="dateOfBirth"
-                           class="form-control"
-                           required>
-                </div>
-            </div>
-
-            <button type="submit" class="btn-register" id="registerBtn">
-                <span class="btn-text">Регистрирај се</span>
-                <div class="loading"></div>
-            </button>
-        </form>
-
-        <div class="login-link">
-            <a href="#" th:href="@{/login}">Веќе имате сметка? Најавете се</a>
-        </div>
-    </div>
-
-    <div class="form-footer">
-        <p>&copy; 2025 SynergyMed. Сите права задржани.</p>
-    </div>
-</div>
-
-<script>
-    document.getElementById('registerForm').addEventListener('submit', function() {
-        const btn = document.getElementById('registerBtn');
-        const btnText = btn.querySelector('.btn-text');
-        const loading = btn.querySelector('.loading');
-
-        btnText.style.display = 'none';
-        loading.style.display = 'block';
-        btn.disabled = true;
-    });
-
-    // Add input focus animations
-    document.querySelectorAll('.form-control, .form-select').forEach(input => {
-        input.addEventListener('focus', function() {
-            this.parentElement.classList.add('focused');
-        });
-
-        input.addEventListener('blur', function() {
-            if (!this.value) {
-                this.parentElement.classList.remove('focused');
-            }
-        });
-    });
-
-    // Password confirmation validation
-    document.getElementById('repeatPassword').addEventListener('blur', function() {
-        const password = document.getElementById('password').value;
-        const repeatPassword = this.value;
-
-        if (password && repeatPassword && password !== repeatPassword) {
-            this.style.borderColor = '#dc3545';
-            this.style.backgroundColor = '#fff5f5';
-        } else {
-            this.style.borderColor = '#e1e5e9';
-            this.style.backgroundColor = '#f8f9fa';
-        }
-    });
-</script>
-</body>
-</html>
Index: c/main/resources/templates/supplyorder-details.html
===================================================================
--- src/main/resources/templates/supplyorder-details.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,128 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="mk">
-<head>
-  <meta charset="UTF-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>SynergyMed – Набавка</title>
-  <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-  <style>
-    /* Page-level override for the fragment header */
-    .site-header{
-      position: sticky;
-      top: 0;
-      left: 0;
-      right: 0;
-      width: 100%;
-      z-index: 1000;
-      border-radius: 0;
-      background: #ffffff;
-      box-shadow: 0 2px 10px rgba(0,0,0,.10);
-    }
-
-    * { margin:0; padding:0; box-sizing:border-box; }
-    body {
-      font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-      background:linear-gradient(135deg,#a4ecba 0%, #f7f7f8 100%);
-      min-height:100vh;
-      color:#1f2937;
-    }
-
-    /* Header & Nav-bar */
-    .header { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); margin-bottom:30px; overflow:hidden; }
-    .header-content { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; text-align:center; }
-    .header-content h1 { font-size:2.5rem; font-weight:300; margin-bottom:10px; }
-    .header-content p { font-size:1.1rem; opacity:.9; }
-
-    .nav-bar { background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1); margin-bottom:30px; padding:20px 30px; }
-    .nav-links { display:flex; gap:20px; align-items:center; }
-    .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:all .3s ease; font-weight:500; }
-    .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-    .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-
-    .container { max-width:1200px; margin:0 auto; padding:20px; }
-    .card { background:#fff; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-    .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; padding:22px 28px; font-size:1.25rem; font-weight:600; }
-    .card-body { padding:26px; }
-
-    .muted { color:#6b7280; }
-    table { width:100%; border-collapse:collapse; margin-top:12px; }
-    th, td { padding:12px 10px; border-bottom:1px solid #eef2f7; text-align:left; }
-
-    .actions { display:flex; gap:10px; margin-top:16px; }
-    .btn { padding:10px 16px; border-radius:12px; border:2px solid #20b2aa; background:#fff; color:#20b2aa; text-decoration:none; font-weight:600; cursor:pointer; transition:.2s; }
-    .btn:hover { box-shadow:0 6px 14px rgba(32,178,170,.18); }
-    .btn-primary { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; border:none; }
-  </style>
-</head>
-<body>
-<th:block th:replace="~{fragments/header :: siteHeader(${null})}"></th:block>
-
-<div class="container">
-  <!-- Header -->
-  <div class="header">
-    <div class="header-content">
-      <h1>Набавка #<span th:text="${order.id}">1</span></h1>
-      <p>Детали за нарачката</p>
-    </div>
-  </div>
-
-  <!-- Navigation -->
-  <div class="nav-bar">
-    <div class="nav-links">
-      <a th:href="@{/pharmacist/health-profile/create}" class="nav-link">Здравствени профили</a>
-      <a th:href="@{/pharmacist/verification}" class="nav-link">Верификација на профили</a>
-      <a th:href="@{/pharmacist/supply-orders}" class="nav-link active">Нарачка на роба</a>
-      <a th:href="@{/pharmacist/medicine/interactions}" class="nav-link">Интеракции на лекови</a>
-      <a th:href="@{/profile}" class="nav-link back-btn">Назад кон профилот</a>
-    </div>
-  </div>
-
-  <!-- Supply Order Details Card -->
-  <div class="card">
-    <div class="card-header">Набавка #<span th:text="${order.id}">1</span></div>
-    <div class="card-body">
-      <div class="muted">
-        Аптека: <strong th:text="${order.pharmacy.company.companyName}">Аптека</strong> •
-        Објект: <strong th:text="${order.facility.facilityName}">Објект</strong> •
-        Дистрибутер: <strong th:text="${order.distributor.company.companyName}">Дистрибутер</strong>
-      </div>
-      <div class="muted" style="margin-top:6px;">
-        Датум: <strong th:text="${order.orderDate}">2025-09-03</strong> •
-        Очекувана испорака: <strong th:text="${order.expectedArrivalDate}">2025-09-10</strong> •
-        Статус: <strong th:text="${order.status}">во тек</strong>
-      </div>
-
-      <table>
-        <thead>
-        <tr>
-          <th>Брендиран лек</th>
-          <th>Форма/јачина</th>
-          <th style="width:120px;">Количина</th>
-        </tr>
-        </thead>
-        <tbody>
-        <tr th:each="ln : ${lines}">
-          <td th:text="${ln.brandedMedicine.name}">Лек</td>
-          <td>
-            <span th:text="${ln.brandedMedicine.dosageForm}">табл.</span>
-            <span class="muted" th:if="${ln.brandedMedicine.strength != null}" th:text="' • ' + ${ln.brandedMedicine.strength}"> • 500mg</span>
-          </td>
-          <td th:text="${ln.quantity}">1</td>
-        </tr>
-        <tr th:if="${#lists.isEmpty(lines)}">
-          <td colspan="3" class="muted">Нема ставки.</td>
-        </tr>
-        </tbody>
-      </table>
-
-      <div class="actions">
-        <a class="btn" th:href="@{/pharmacist/supply-orders}">Сите набавки</a>
-        <a class="btn" th:href="@{/pharmacist/supply-orders/new}">Нова набавка</a>
-      </div>
-    </div>
-  </div>
-</div>
-
-<th:block th:replace="~{fragments/header :: headerScripts}"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/supplyorder-list.html
===================================================================
--- src/main/resources/templates/supplyorder-list.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,130 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="mk">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>SynergyMed – Набавки</title>
-
-    <!-- Fragment styles -->
-    <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-
-    <!-- Page styles (override header after fragment import) -->
-    <style>
-        /* Force the fragment header to be flat (no rounding) and stick to the very top */
-        .site-header{
-            position: sticky;
-            top: 0;
-            left: 0;
-            right: 0;
-            width: 100%;
-            z-index: 1000;            /* ensure it floats above content */
-            border-radius: 0;          /* remove rounding */
-            background: #ffffff;       /* solid white background */
-            box-shadow: 0 2px 10px rgba(0,0,0,.10);
-        }
-
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background:linear-gradient(135deg,#a4ecba 0%, #f7f7f8 100%);
-            min-height:100vh;
-            color:#1f2937;
-        }
-
-        /* Header & Nav-bar (page content, not the site-header fragment) */
-        .header { background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); margin-bottom:30px; overflow:hidden; }
-        .header-content { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; padding:30px; text-align:center; }
-        .header-content h1 { font-size:2.5rem; font-weight:300; margin-bottom:10px; }
-        .header-content p { font-size:1.1rem; opacity:.9; }
-
-        .nav-bar { background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1); margin-bottom:30px; padding:20px 30px; }
-        .nav-links { display:flex; gap:20px; align-items:center; }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:all .3s ease; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-        .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-
-        .container { max-width:1200px; margin:0 auto; padding:20px; }
-        .card { background:#fff; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-        .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; padding:22px 28px; font-size:1.25rem; font-weight:600; }
-        .card-body { padding:26px; }
-
-        .row-top { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
-        .btn { padding:8px 12px; border-radius:12px; border:2px solid #20b2aa; background:#fff; color:#20b2aa; text-decoration:none; font-weight:600; cursor:pointer; transition:.2s; }
-        .btn:hover { box-shadow:0 6px 14px rgba(32,178,170,.18); }
-        .muted { color:#6b7280; }
-        table { width:100%; border-collapse:collapse; margin-top:12px; }
-        th, td { padding:12px 10px; border-bottom:1px solid #eef2f7; text-align:left; }
-
-        @media (max-width: 992px) { .row-top { flex-direction:column; gap:10px; align-items:flex-start; } }
-    </style>
-</head>
-<body>
-<!-- Fragment header -->
-<th:block th:replace="~{fragments/header :: siteHeader(${null})}"></th:block>
-
-<div class="container">
-    <!-- Page header -->
-    <div class="header">
-        <div class="header-content">
-            <h1>Листа на набавки</h1>
-            <p>Преглед на сите креирани нарачки</p>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a th:href="@{/pharmacist/health-profile/create}" class="nav-link">Здравствени профили</a>
-            <a th:href="@{/pharmacist/verification}" class="nav-link">Верификација на профили</a>
-            <a th:href="@{/pharmacist/supply-orders}" class="nav-link active">Нарачка на роба</a>
-            <a th:href="@{/pharmacist/medicine/interactions}" class="nav-link">Интеракции на лекови</a>
-            <a th:href="@{/profile}" class="nav-link back-btn">Назад кон профилот</a>
-        </div>
-    </div>
-
-    <!-- Supply Orders List Card -->
-    <div class="card">
-        <div class="card-header">Листа на набавки</div>
-        <div class="card-body">
-            <div class="row-top">
-                <div class="muted">Прикажани се сите досега креирани набавки.</div>
-                <a class="btn" th:href="@{/pharmacist/supply-orders/new}">+ Нова набавка</a>
-            </div>
-
-            <table>
-                <thead>
-                <tr>
-                    <th>#</th>
-                    <th>Аптека</th>
-                    <th>Објект</th>
-                    <th>Дистрибутер</th>
-                    <th>Датум</th>
-                    <th>Испорака</th>
-                    <th>Статус</th>
-                    <th></th>
-                </tr>
-                </thead>
-                <tbody>
-                <tr th:each="o : ${orders}">
-                    <td th:text="${o.id}">1</td>
-                    <td th:text="${o.pharmacy.company.companyName}">Аптека</td>
-                    <td th:text="${o.facility.facilityName}">Објект</td>
-                    <td th:text="${o.distributor.company.companyName}">Дистрибутер</td>
-                    <td th:text="${o.orderDate}">2025-09-03</td>
-                    <td th:text="${o.expectedArrivalDate}">2025-09-10</td>
-                    <td th:text="${o.status}">во тек</td>
-                    <td><a class="btn" th:href="@{|/pharmacist/supply-orders/${o.id}|}">Преглед</a></td>
-                </tr>
-                <tr th:if="${#lists.isEmpty(orders)}">
-                    <td colspan="8" class="muted">Нема креирани набавки.</td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-    </div>
-</div>
-
-<!-- Fragment scripts -->
-<th:block th:replace="~{fragments/header :: headerScripts}"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/supplyorder.html
===================================================================
--- src/main/resources/templates/supplyorder.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,283 +1,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" lang="mk">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>SynergyMed – Креирај набавка</title>
-
-    <!-- Fragment styles -->
-    <th:block th:replace="~{fragments/header :: headerStyles}"></th:block>
-
-    <!-- Page styles (override header after fragment import) -->
-    <style>
-        /* Force the fragment header to be flat (no rounding) and stick to the very top */
-        .site-header{
-            position: sticky;
-            top: 0;
-            left: 0;
-            right: 0;
-            width: 100%;
-            z-index: 1000;            /* ensure it floats above content */
-            border-radius: 0;          /* remove rounding */
-            background: #ffffff;       /* solid white background */
-            box-shadow: 0 2px 10px rgba(0,0,0,.10);
-        }
-
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
-            background:linear-gradient(135deg,#a4ecba 0%, #f7f7f8 100%);
-            min-height:100vh;
-            color:#1f2937;
-        }
-
-        /* Header & Nav-bar (unified style) */
-        .page-header {
-            background: linear-gradient(135deg,#20b2aa,#48d1cc);
-            color: white;
-            padding: 25px 20px;
-            text-align: center;
-            border-radius: 0;      /* remove rounding */
-            margin: 0 0 20px 0;    /* spacing below only */
-            box-shadow: none;      /* no floating card effect */
-        }
-        .page-header h1 { font-size:2rem; margin-bottom:6px; font-weight:400; }
-        .page-header p { font-size:1rem; opacity:0.85; }
-        .nav-bar { background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1); margin-bottom:30px; padding:20px 30px; }
-        .nav-links { display:flex; gap:20px; align-items:center; }
-        .nav-link { color:#20b2aa; text-decoration:none; padding:10px 20px; border-radius:25px; transition:all .3s ease; font-weight:500; }
-        .nav-link:hover, .nav-link.active { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; }
-        .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-
-        .container { max-width:1200px; margin:0 auto; padding:20px; }
-        .card { background:#fff; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1); overflow:hidden; margin-bottom:30px; }
-        .card-header { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; padding:22px 28px; font-size:1.25rem; font-weight:600; }
-        .card-body { padding:26px; }
-
-        .grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
-        .grid-1 { display:grid; grid-template-columns:1fr; gap:16px; }
-
-        label { font-weight:600; margin-bottom:6px; display:block; color:#374151; }
-        select, input[type="number"] { width:100%; padding:12px 12px; border:2px solid #e5e7eb; border-radius:12px; background:#fff; color:#111827; }
-
-        table { width:100%; border-collapse:collapse; margin-top:12px; }
-        th, td { padding:12px 10px; border-bottom:1px solid #eef2f7; text-align:left; }
-
-        .btn { padding:10px 16px; border-radius:12px; border:2px solid #20b2aa; background:#fff; color:#20b2aa; text-decoration:none; font-weight:600; cursor:pointer; transition:.2s; }
-        .btn:hover { box-shadow:0 6px 14px rgba(32,178,170,.18); }
-        .btn-primary { background:linear-gradient(135deg,#20b2aa,#48d1cc); color:#fff; border:none;  padding:10px 16px; border-radius:12px; text-decoration:none; font-weight:600; cursor:pointer; transition:.2s;  }
-        .btn-danger { border-color:#f0caca; color:#b3261e; }
-        .muted { color:#6b7280; }
-        .actions { display:flex; gap:10px; margin-top:20px; }
-
-        @media (max-width: 992px) { .grid-2 { grid-template-columns:1fr; } }
-    </style>
-</head>
-<body>
-<th:block th:replace="~{fragments/header :: siteHeader(${null})}"></th:block>
-
-<div class="container">
-    <!-- Header -->
-    <div class="page-header">
-        <div class="header-content">
-            <h1>Креирај набавка</h1>
-            <p>Пополнете форма за креирање нова нарачка</p>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a th:href="@{/pharmacist/health-profile/create}" class="nav-link">Здравствени профили</a>
-            <a th:href="@{/pharmacist/verification}" class="nav-link">Верификација на профили</a>
-            <a th:href="@{/pharmacist/supply-orders}" class="nav-link active">Нарачка на роба</a>
-            <a th:href="@{/pharmacist/medicine/interactions}" class="nav-link">Интеракции на лекови</a>
-            <a th:href="@{/profile}" class="nav-link back-btn">Назад кон профилот</a>
-        </div>
-    </div>
-
-    <!-- Supply Order Form Card -->
-    <div class="card">
-        <div class="card-header">Креирај набавка</div>
-        <div class="card-body">
-            <form th:action="@{/pharmacist/supply-orders}" method="post" id="orderForm">
-                <input type="hidden" th:if="${_csrf != null}" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
-                <div class="grid-2">
-                    <div>
-                        <label>Аптека</label>
-                        <select name="pharmacyId" id="pharmacySel" required>
-                            <option value="" disabled selected>Избери аптека</option>
-                            <option th:each="p : ${pharmacies}" th:value="${p.id}" th:text="${p.company != null ? p.company.companyName : 'Аптека #' + p.id}"></option>
-                        </select>
-                    </div>
-                    <div>
-                        <label>Објект</label>
-                        <select name="facilityId" id="facilitySel" required>
-                            <option value="" disabled selected>Избери објект</option>
-                        </select>
-                    </div>
-                </div>
-
-                <div class="grid-2" style="margin-top:12px;">
-                    <div>
-                        <label>Дистрибутер</label>
-                        <select name="distributorId" id="distributorSel" required>
-                            <option value="" disabled selected>Избери дистрибутер</option>
-                            <option th:each="d : ${distributors}" th:value="${d.id}" th:text="${d.company != null ? d.company.companyName : 'Дистрибутер #' + d.id}"></option>
-                        </select>
-                    </div>
-                    <div>
-                        <label>Помош</label>
-                        <div class="muted">Сите производи мора да бидат од избраниот дистрибутер; листата подолу се полни автоматски.</div>
-                    </div>
-                </div>
-
-                <div class="grid-1" style="margin-top:16px;">
-                    <table id="itemsTable">
-                        <thead>
-                        <tr>
-                            <th style="width:60%;">Брендиран лек</th>
-                            <th style="width:20%;">Количина</th>
-                            <th style="width:20%;"></th>
-                        </tr>
-                        </thead>
-                        <tbody id="itemsBody">
-                        <tr>
-                            <td>
-                                <select name="medicineIds" class="medicineSel" required>
-                                    <option value="" disabled selected>Прво избери дистрибутер</option>
-                                </select>
-                            </td>
-                            <td>
-                                <input type="number" name="quantities" min="1" step="1" value="1" required/>
-                            </td>
-                            <td>
-                                <button type="button" class="btn btn-danger removeRow">Отстрани</button>
-                            </td>
-                        </tr>
-                        </tbody>
-                    </table>
-                    <button type="button" class="btn" id="addRowBtn" style="margin-top:10px;">+ Додади ред</button>
-                </div>
-
-                <div class="actions">
-                    <button type="submit" class="btn-primary">Креирај нарачка</button>
-                    <a class="btn" th:href="@{/pharmacist/supply-orders}">Откажи</a>
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-
-<div id="optionBanks" style="display:none;">
-    <div id="facilityBank">
-        <select th:each="p : ${pharmacies}" th:attr="data-pharmacy=${p.id}">
-            <option th:each="f : ${facilitiesByPharmacyId[p.id]}"
-                    th:value="${f.id}"
-                    th:text="${f.facilityName != null ? f.facilityName : 'Објект #' + f.id}"></option>
-        </select>
-    </div>
-    <div id="medicineBank">
-        <select th:each="d : ${distributors}" th:attr="data-distributor=${d.id}">
-            <option th:each="m : ${medicinesByDistributorId[d.id]}"
-                    th:value="${m.id}"
-                    th:text="${(m.name != null ? m.name : 'Лек #'+m.id)
-                        + (m.strength != null ? ' ' + m.strength : '')
-                        + (m.dosageForm != null ? ' • ' + m.dosageForm : '')}"></option>
-        </select>
-    </div>
-</div>
-
-<th:block th:replace="~{fragments/header :: headerScripts}"></th:block>
-<script>
-    const pharmacySel = document.getElementById('pharmacySel');
-    const facilitySel = document.getElementById('facilitySel');
-    const distributorSel = document.getElementById('distributorSel');
-    const itemsBody = document.getElementById('itemsBody');
-    const addRowBtn = document.getElementById('addRowBtn');
-
-    function replaceOptions(targetSelect, sourceSelect, placeholderText, allowId = null, excludeIds = new Set()) {
-        const placeholder = document.createElement('option');
-        placeholder.value = '';
-        placeholder.disabled = true;
-        placeholder.selected = !targetSelect.value;
-        placeholder.textContent = placeholderText;
-        targetSelect.innerHTML = '';
-        targetSelect.appendChild(placeholder);
-
-        if (!sourceSelect) return;
-        Array.from(sourceSelect.options).forEach(optSrc => {
-            const val = optSrc.value;
-            if (val && (val === allowId || !excludeIds.has(val))) {
-                const opt = document.createElement('option');
-                opt.value = val;
-                opt.textContent = optSrc.textContent;
-                targetSelect.appendChild(opt);
-            }
-        });
-
-        if (allowId && Array.from(targetSelect.options).some(o => o.value === allowId)) {
-            targetSelect.value = allowId;
-        } else {
-            targetSelect.value = '';
-        }
-    }
-
-    function populateFacilities(pharmacyId) {
-        const bank = document.querySelector(`#facilityBank select[data-pharmacy="${pharmacyId}"]`);
-        const ph = document.createElement('option'); ph.value=''; ph.disabled=true; ph.selected=true; ph.textContent='Избери објект';
-        facilitySel.innerHTML = ''; facilitySel.appendChild(ph);
-        if (bank) Array.from(bank.options).forEach(o => facilitySel.add(new Option(o.textContent, o.value)));
-    }
-
-    function getSelectedMedicineIds(exceptSelect = null) {
-        const ids = new Set();
-        document.querySelectorAll('.medicineSel').forEach(sel => { if (sel !== exceptSelect && sel.value) ids.add(sel.value); });
-        return ids;
-    }
-
-    function populateMedicinesForAll(distributorId) {
-        const bank = document.querySelector(`#medicineBank select[data-distributor="${distributorId}"]`);
-        document.querySelectorAll('.medicineSel').forEach(sel => {
-            const current = sel.value || null;
-            const exclude = getSelectedMedicineIds(sel);
-            replaceOptions(sel, bank, 'Избери лек', current, exclude);
-        });
-    }
-
-    pharmacySel.addEventListener('change', () => { if (pharmacySel.value) populateFacilities(pharmacySel.value); });
-    distributorSel.addEventListener('change', () => {
-        if (distributorSel.value) populateMedicinesForAll(distributorSel.value);
-        document.querySelectorAll('.medicineSel').forEach(sel => { sel.value = ''; });
-    });
-
-    itemsBody.addEventListener('change', (e) => {
-        if (e.target && e.target.classList.contains('medicineSel') && distributorSel.value) {
-            populateMedicinesForAll(distributorSel.value);
-        }
-    });
-
-    addRowBtn.addEventListener('click', () => {
-        const tr = document.createElement('tr');
-        tr.innerHTML = `
-      <td><select name="medicineIds" class="medicineSel" required>
-            <option value="" disabled selected>Прво избери дистрибутер</option>
-          </select></td>
-      <td><input type="number" name="quantities" min="1" step="1" value="1" required/></td>
-      <td><button type="button" class="btn btn-danger removeRow">Отстрани</button></td>`;
-        itemsBody.appendChild(tr);
-        if (distributorSel.value) populateMedicinesForAll(distributorSel.value);
-    });
-
-    itemsBody.addEventListener('click', (e) => {
-        if (e.target && e.target.classList.contains('removeRow')) {
-            const rows = itemsBody.querySelectorAll('tr');
-            if (rows.length > 1) {
-                e.target.closest('tr').remove();
-                if (distributorSel.value) populateMedicinesForAll(distributorSel.value);
-            }
-        }
-    });
-</script>
-</body>
-</html>
Index: c/main/resources/templates/verification-apply.html
===================================================================
--- src/main/resources/templates/verification-apply.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,60 +1,0 @@
-<!-- templates/verification-apply.html -->
-<!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.0">
-    <title>Apply for Verification</title>
-
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        *{margin:0;padding:0;box-sizing:border-box}
-        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;background:linear-gradient(135deg,#a4ecba 0%,#f7f7f8 100%);color:#1f2937}
-        .page{width:100%;max-width:840px;padding:28px;margin:0 auto}
-        .card{background:#fff;border-radius:18px;box-shadow:0 20px 40px rgba(0,0,0,.10);overflow:hidden}
-        .card-header{background:linear-gradient(135deg,#20b2aa,#48d1cc);color:#fff;padding:20px 24px;font-size:1.3rem;font-weight:600}
-        .card-body{padding:22px}
-        .row{display:flex;gap:14px;align-items:center;margin:12px 0}
-        label{min-width:140px;font-weight:600}
-        input[type=text]{flex:1;padding:12px;border:1px solid #e5e7eb;border-radius:10px}
-        input[type=file]{flex:1}
-        .actions{display:flex;gap:12px;margin-top:16px}
-        .btn{display:inline-block;padding:10px 16px;border-radius:10px;border:1px solid #e5e7eb;background:#fff;font-weight:600;cursor:pointer}
-        .btn-primary{background:linear-gradient(135deg,#20b2aa,#48d1cc);color:#fff;border:none}
-        .notice{margin-bottom:12px;padding:10px 12px;border-radius:10px;background:#f1f5f9;color:#0f172a}
-        .error{background:#fdecec;color:#b3261e}
-        .hint{color:#6b7280;font-size:.9rem}
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="page">
-    <div class="card">
-        <div class="card-header">Аплицирај за верификација</div>
-        <div class="card-body">
-            <div th:if="${message}" class="notice" th:text="${message}">Message</div>
-            <div th:if="${error}" class="notice error" th:text="${error}">Error</div>
-
-            <form th:action="@{/profile/verification/apply}" method="post" enctype="multipart/form-data">
-                <div class="row">
-                    <label for="embg">ЕМБГ</label>
-                    <input id="embg" name="embg" type="text" placeholder="EMBG" required>
-                </div>
-                <div class="row">
-                    <label for="portrait">Портрет слика</label>
-                    <input id="portrait" name="portrait" type="file" accept="image/*" required>
-                </div>
-                <div class="hint">Прифатени се: jpg, jpeg, png, webp, gif. Max 5MB.</div>
-                <div class="actions">
-                    <button type="submit" class="btn btn-primary">Аплицирај</button>
-                    <a class="btn" th:href="@{/profile/prescriptions}">Назадs</a>
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/verification-approval.html
===================================================================
--- src/main/resources/templates/verification-approval.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,131 +1,0 @@
-<!DOCTYPE html>
-<html lang="mk" xmlns:th="http://www.thymeleaf.org">
-<head>
-    <meta charset="UTF-8">
-    <title>Преглед на верификација</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            background:linear-gradient(135deg,#a4ecba 0%,#f7f7f8 100%);
-            min-height:100vh;
-        }
-
-        .site-header {
-            position:sticky; top:0; left:0; right:0;
-            width:100%; border-radius:0; margin:0;
-            z-index:1000; background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .container { max-width:900px; margin:0 auto; padding:20px; }
-
-        .header {
-            background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1);
-            margin-bottom:30px; overflow:hidden;
-        }
-        .header-content {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc);
-            color:white; padding:30px; text-align:center;
-        }
-        .header-content h1 { font-size:2.3rem; font-weight:300; margin-bottom:10px; }
-        .header-content p { font-size:1rem; opacity:.9; }
-
-        .nav-bar {
-            background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1);
-            margin-bottom:30px; padding:20px 30px;
-        }
-        .nav-links {
-            display:flex; gap:20px; align-items:center; flex-wrap:nowrap; overflow-x:auto;
-        }
-        .nav-link {
-            color:#20b2aa; text-decoration:none; padding:10px 20px;
-            border-radius:25px; transition:all .3s ease; font-weight:500;
-        }
-        .nav-link:hover, .nav-link.active {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white;
-        }
-        .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-
-        .card {
-            background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1);
-            overflow:hidden; margin-bottom:30px;
-        }
-        .card-header {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc);
-            color:white; padding:25px 30px; font-size:1.3rem; font-weight:600;
-        }
-        .card-body { padding:30px; }
-        .row { display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid #f0f0f0; }
-        .label { font-weight:600; color:#374151; min-width:140px; }
-        .val { flex:1; }
-        .portrait { max-width:260px; border-radius:12px; border:1px solid #eef2f7; box-shadow:0 6px 18px rgba(0,0,0,.08); }
-        .actions { display:flex; gap:12px; margin-top:22px; }
-        .btn {
-            display:inline-block; padding:12px 20px; border-radius:12px;
-            border:1px solid #e5e7eb; background:#fff; font-weight:600; cursor:pointer;
-            transition:all .3s ease;
-        }
-        .btn-primary {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white; border:none;
-        }
-        .btn-danger { color:#b3261e; border-color:#f0caca; background:#fff; }
-        .btn:hover { transform:translateY(-2px); }
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="container">
-    <!-- Header -->
-    <div class="header">
-        <div class="header-content">
-            <h1>Преглед на верификација</h1>
-            <p>Потврдете или одбијте верификација на клиент</p>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a href="#" th:href="@{/pharmacist/health-profile/create}" class="nav-link">Здравствени профили</a>
-            <a href="#" th:href="@{/pharmacist/verification}" class="nav-link active">Верификација на профили</a>
-            <a href="#" th:href="@{/pharmacist/supply-orders}" class="nav-link">Нарачка на роба</a>
-            <a href="#" th:href="@{/pharmacist/medicine/interactions}" class="nav-link">Интеракции на лекови</a>
-            <a href="#" class="nav-link back-btn" th:href="@{/profile}">Назад кон профилот</a>
-        </div>
-    </div>
-
-    <!-- Content -->
-    <div class="card">
-        <div class="card-header" th:text="${item.client.users.firstName + ' ' + item.client.users.lastName}">Име на клиент</div>
-        <div class="card-body">
-            <div class="row">
-                <div class="label">ЕМБГ</div>
-                <div class="val" th:text="${item.embg}">0000000000000</div>
-            </div>
-            <div class="row" style="align-items:flex-start;">
-                <div class="label">Фотографија</div>
-                <img class="portrait"
-                     th:src="@{'/uploads/images/portraits/' + ${item.portraitPhoto}}"
-                     alt="portrait">
-            </div>
-
-            <div class="actions">
-                <form th:action="@{/pharmacist/verification/{id}/approve(id=${item.id})}" method="post">
-                    <button type="submit" class="btn btn-primary">Одобри</button>
-                </form>
-                <form th:action="@{/pharmacist/verification/{id}/deny(id=${item.id})}" method="post">
-                    <button type="submit" class="btn btn-danger">Одбиј</button>
-                </form>
-                <a class="btn" th:href="@{/pharmacist/verification}">Назад</a>
-            </div>
-        </div>
-    </div>
-</div>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
Index: c/main/resources/templates/verification-list.html
===================================================================
--- src/main/resources/templates/verification-list.html	(revision e40521a69afbf0d1de4faf1d543c23bf82be8dc7)
+++ 	(revision )
@@ -1,122 +1,0 @@
-<!DOCTYPE html>
-<html lang="mk" xmlns:th="http://www.thymeleaf.org">
-<head>
-    <meta charset="UTF-8">
-    <title>Барања на чекање за верификација</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <th:block th:replace="fragments/header :: headerStyles"></th:block>
-    <style>
-        * { margin:0; padding:0; box-sizing:border-box; }
-        body {
-            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
-            background:linear-gradient(135deg,#a4ecba 0%,#f7f7f8 100%);
-            min-height:100vh;
-        }
-
-        .site-header {
-            position:sticky; top:0; left:0; right:0;
-            width:100%; border-radius:0; margin:0;
-            z-index:1000; background:white !important;
-            box-shadow:0 2px 10px rgba(0,0,0,0.1);
-        }
-
-        .container { max-width:1200px; margin:0 auto; padding:20px; }
-
-        .header {
-            background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1);
-            margin-bottom:30px; overflow:hidden;
-        }
-        .header-content {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc);
-            color:white; padding:30px; text-align:center;
-        }
-        .header-content h1 { font-size:2.5rem; font-weight:300; margin-bottom:10px; }
-        .header-content p { font-size:1.1rem; opacity:.9; }
-
-        .nav-bar {
-            background:white; border-radius:15px; box-shadow:0 5px 15px rgba(0,0,0,.1);
-            margin-bottom:30px; padding:20px 30px;
-        }
-        .nav-links {
-            display:flex; gap:20px; align-items:center; flex-wrap:nowrap; overflow-x:auto;
-        }
-        .nav-link {
-            color:#20b2aa; text-decoration:none; padding:10px 20px;
-            border-radius:25px; transition:all .3s ease; font-weight:500;
-        }
-        .nav-link:hover, .nav-link.active {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc); color:white;
-        }
-        .back-btn { margin-left:auto; background:linear-gradient(135deg,#6c757d,#495057); color:white; }
-
-        .card {
-            background:white; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,.1);
-            overflow:hidden; margin-bottom:30px;
-        }
-        .card-header {
-            background:linear-gradient(135deg,#20b2aa,#48d1cc);
-            color:white; padding:25px 30px; font-size:1.3rem; font-weight:600;
-        }
-        .card-body { padding:30px; }
-        .grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:22px; }
-        .tile {
-            background:#f8f9fa; border-radius:16px; box-shadow:0 6px 18px rgba(0,0,0,.08);
-            padding:18px; cursor:pointer; border:2px solid #e1e5e9;
-            transition:all .3s ease;
-        }
-        .tile:hover { border-color:#20b2aa; background:#f1fdfd; transform:translateY(-2px); }
-        .name { font-weight:700; margin-bottom:8px; }
-        .muted { color:#6c757d; }
-    </style>
-</head>
-<body>
-<th:block th:replace="fragments/header :: siteHeader(${null})"></th:block>
-
-<div class="container">
-    <!-- Header -->
-    <div class="header">
-        <div class="header-content">
-            <h1>Барања на чекање</h1>
-            <p>Проверете ги сите клиенти кои чекаат верификација</p>
-        </div>
-    </div>
-
-    <!-- Navigation -->
-    <div class="nav-bar">
-        <div class="nav-links">
-            <a href="#" th:href="@{/pharmacist/health-profile/create}" class="nav-link">Здравствени профили</a>
-            <a href="#" th:href="@{/pharmacist/verification}" class="nav-link active">Верификација на профили</a>
-            <a href="#" th:href="@{/pharmacist/supply-orders}" class="nav-link">Нарачка на роба</a>
-            <a href="#" th:href="@{/pharmacist/medicine/interactions}" class="nav-link">Интеракции на лекови</a>
-            <a href="#" class="nav-link back-btn" th:href="@{/profile}">Назад кон профилот</a>
-        </div>
-    </div>
-
-    <!-- Content -->
-    <div class="card">
-        <div class="card-header">Барања на чекање за верификација</div>
-        <div class="card-body">
-            <div th:if="${#lists.isEmpty(pending)}" class="muted">Нема барања на чекање во моментов.</div>
-            <div class="grid" th:if="${!#lists.isEmpty(pending)}">
-                <div class="tile"
-                     th:each="p : ${pending}"
-                     th:attr="data-href=@{/pharmacist/verification/{id}(id=${p.id})}">
-                    <div class="name" th:text="${p.client.users.firstName + ' ' + p.client.users.lastName}">Име на клиент</div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script>
-    document.addEventListener('DOMContentLoaded',function(){
-        document.querySelectorAll('.tile').forEach(function(t){
-            const href=t.getAttribute('data-href'); if(!href) return;
-            t.addEventListener('click',()=>window.location.assign(href));
-        });
-    });
-</script>
-
-<th:block th:replace="fragments/header :: headerScripts"></th:block>
-</body>
-</html>
