Index: backend/auth_form/utils.py
===================================================================
--- backend/auth_form/utils.py	(revision caaa60c68b532985100ec4e8fa6dcb688137e73e)
+++ backend/auth_form/utils.py	(revision 5007eddecd46eff93a1839fae374c773be2dd05b)
@@ -2,40 +2,40 @@
 
 
-def check_prerequisites(has_extracurricular, passed_subjects):
-    """
-    Checks if all prerequisite requirements are fulfilled based on passed subjects and extracurricular credits.
-    """
+# def check_prerequisites(has_extracurricular, passed_subjects):
+#     """
+#     Checks if all prerequisite requirements are fulfilled based on passed subjects and extracurricular credits.
+#     """
     
-    invalid_subjects = []
+#     invalid_subjects = []
 
-    # Track valid subjects as we go
-    valid_subject_ids = set(id for id in passed_subjects)
-    for subject_id in passed_subjects:
-        prereqs = Subject.objects.get(id=subject_id).subject_info.prerequisite
-        if 'subjects' in prereqs:
-            if not any(prereq in valid_subject_ids for prereq in prereqs['subjects']):
-                invalid_subjects.append(subject_id)
-                valid_subject_ids.discard(subject_id)
+#     # Track valid subjects as we go
+#     valid_subject_ids = set(id for id in passed_subjects)
+#     for subject_id in passed_subjects:
+#         prereqs = Subject.objects.get(id=subject_id).subject_info.prerequisite
+#         if 'subjects' in prereqs:
+#             if not any(prereq in valid_subject_ids for prereq in prereqs['subjects']):
+#                 invalid_subjects.append(subject_id)
+#                 valid_subject_ids.discard(subject_id)
     
-    total_credits = len(valid_subject_ids) * 6
+#     total_credits = len(valid_subject_ids) * 6
     
-    pv = Subject.objects.get(name="Професионални вештини").id
-    sport = Subject.objects.get(name="Спорт и здравје").id
+#     pv = Subject.objects.get(name="Професионални вештини").id
+#     sport = Subject.objects.get(name="Спорт и здравје").id
 
-    if pv in valid_subject_ids or sport in valid_subject_ids:
-        total_credits -= 6
-    if has_extracurricular:
-        total_credits += 6
+#     if pv in valid_subject_ids or sport in valid_subject_ids:
+#         total_credits -= 6
+#     if has_extracurricular:
+#         total_credits += 6
     
-    for subject_id in passed_subjects:
-        prereqs = Subject.objects.get(id=subject_id).subject_info.prerequisite
-        if 'credits' in prereqs:
-            if total_credits < prereqs['credits']:
-                invalid_subjects.append(subject_id)
-                valid_subject_ids.discard(subject_id)
-                total_credits -= 6
-    return (True, []) if len(invalid_subjects) == 0 else (False, invalid_subjects)
+#     for subject_id in passed_subjects:
+#         prereqs = Subject.objects.get(id=subject_id).subject_info.prerequisite
+#         if 'credits' in prereqs:
+#             if total_credits < prereqs['credits']:
+#                 invalid_subjects.append(subject_id)
+#                 valid_subject_ids.discard(subject_id)
+#                 total_credits -= 6
+#     return (True, []) if len(invalid_subjects) == 0 else (False, invalid_subjects)
 
-b = Subject.objects.get(name="Вештачка интелигенција").id
-a = Subject.objects.get(name="Бизнис и менаџмент").id
-check_prerequisites(False, [a,b])
+# b = Subject.objects.get(name="Вештачка интелигенција").id
+# a = Subject.objects.get(name="Бизнис и менаџмент").id
+# check_prerequisites(False, [a,b])
Index: backend/auth_form/views.py
===================================================================
--- backend/auth_form/views.py	(revision caaa60c68b532985100ec4e8fa6dcb688137e73e)
+++ backend/auth_form/views.py	(revision 5007eddecd46eff93a1839fae374c773be2dd05b)
@@ -1,3 +1,3 @@
-from .utils import check_prerequisites
+# from .utils import check_prerequisites
 from .models import Student
 from .serializers import RegistrationSerializer, LoginSerializer, StudentFormSerializer
@@ -69,11 +69,4 @@
             return Response({"detail": "Student profile already exists."}, status=status.HTTP_400_BAD_REQUEST)
         
-        has_extracurricular = request.data['has_extracurricular']
-        passed_subjects = request.data['passed_subjects']    
-        is_valid, invalid_subjects = check_prerequisites(has_extracurricular, passed_subjects)
-        
-        if not is_valid:
-            return Response({"prereqs": invalid_subjects}, status=status.HTTP_400_BAD_REQUEST)
-
         index_match = Student.objects.filter(index=request.data['index'])
         
@@ -94,13 +87,6 @@
         if not hasattr(request.user, 'student'):
             return Response({"detail": "No student profile found."}, status=status.HTTP_404_NOT_FOUND)
-
-        has_extracurricular = request.data['has_extracurricular']
-        passed_subjects = request.data['passed_subjects']
-        is_valid, invalid_subjects = check_prerequisites(has_extracurricular, passed_subjects)
-        if not is_valid:
-            return Response({"prereqs": invalid_subjects}, status=status.HTTP_400_BAD_REQUEST)
         
         index_match = Student.objects.filter(index=request.data['index'])
-
 
         index = request.data['index']
Index: frontend/src/components/StudentForm/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm/StudentForm.tsx	(revision caaa60c68b532985100ec4e8fa6dcb688137e73e)
+++ frontend/src/components/StudentForm/StudentForm.tsx	(revision 5007eddecd46eff93a1839fae374c773be2dd05b)
@@ -8,5 +8,5 @@
 } from "../../constants/subjects";
 import { useAuth } from "../../hooks/useAuth";
-import { Programs, StudentData, Subject, SubjectID } from "../types";
+import { Programs, StudentData, Subject } from "../types";
 import FieldButton from "./FieldButton";
 import SkeletonForm from "./SkeletonForm";
@@ -197,13 +197,22 @@
 			studyEffort,
 			passedSubjectsPerSemester,
+			hasExtracurricular,
+			setInvalidSubjects,
 		});
 		if (Object.keys(errors).length > 0) {
 			setValidationErrors(errors);
 			window.scrollTo({ top: 0, behavior: "smooth" });
-			setFormStatus({
-				isSubmitting: false,
-				message: `Пополни ги сите задолжителни полиња`,
-				isError: true,
-			});
+			if (errors.invalidSubjects)
+				setFormStatus({
+					isSubmitting: false,
+					message: errors.invalidSubjects,
+					isError: true,
+				});
+			else
+				setFormStatus({
+					isSubmitting: false,
+					message: `Пополни ги сите задолжителни полиња`,
+					isError: true,
+				});
 			return;
 		}
@@ -231,5 +240,4 @@
 		};
 		try {
-			console.log(payload);
 			// For updating existing form data use PATCH instead of PUT for partial updates
 			const method = formData?.current_year || isSubmitted ? "PATCH" : "POST";
@@ -250,5 +258,4 @@
 					isError: false,
 				});
-				setInvalidSubjects([]);
 				setTimeout(() => {
 					setFormStatus((prev) => ({ ...prev, message: "" }));
@@ -256,17 +263,5 @@
 			} else {
 				const errorData = await res.json();
-				if (errorData.prereqs) {
-					const invalidSubjects_: Subject[] = errorData.prereqs.map(
-						(sub_id: SubjectID) =>
-							subjects.find((item: Subject) => item.id == sub_id)
-					);
-					console.log("invalid: ", invalidSubjects_);
-					setInvalidSubjects(invalidSubjects_);
-					setFormStatus({
-						isSubmitting: false,
-						message: `Грешка при зачувување: Проверете кој предмети не ги исполнуваат предусловите`,
-						isError: true,
-					});
-				} else throw new Error(errorData.message || "Error submitting form");
+				throw new Error(errorData.message || "Error submitting form");
 			}
 			setIsSubmitted(true);
Index: frontend/src/components/StudentForm/utils.ts
===================================================================
--- frontend/src/components/StudentForm/utils.ts	(revision caaa60c68b532985100ec4e8fa6dcb688137e73e)
+++ frontend/src/components/StudentForm/utils.ts	(revision 5007eddecd46eff93a1839fae374c773be2dd05b)
@@ -1,3 +1,4 @@
-import { Programs, Subject } from "../types";
+import { Dispatch, SetStateAction } from "react";
+import { Programs, Subject, SubjectID } from "../types";
 
 // NOTE: there is not a single match for the letter 'ѕ' (ѕ како ѕвонче) in the entire db, so both dz and dj are mapped to 'џ'
@@ -67,4 +68,6 @@
 	studyEffort,
 	passedSubjectsPerSemester,
+	hasExtracurricular,
+	setInvalidSubjects,
 }: {
 	index: string;
@@ -73,4 +76,6 @@
 	studyEffort: number | string;
 	passedSubjectsPerSemester: Record<number, Subject[]>;
+	hasExtracurricular: boolean;
+	setInvalidSubjects: Dispatch<SetStateAction<Subject[]>>;
 }) => {
 	const errors: { [key: string]: string } = {};
@@ -85,5 +90,15 @@
 	if (!studyEffort) errors.studyEffort = "Одбери пожелен вложен труд.";
 	if (passedSubjectsPerSemester[1].length === 0)
-		errors.passedSubjectsPerSemester = "Одбери барем еден предмет.";
+		errors.passedSubjectsPerSemester =
+			"Одбери барем еден предмет од прв семестар.";
+
+	const passedSubjects = getPassedSubjects(passedSubjectsPerSemester);
+	const invalid = checkPrerequisites(passedSubjects, hasExtracurricular);
+	if (invalid.length != 0) {
+		setInvalidSubjects(invalid);
+		errors.invalidSubjects =
+			"За еден или повеќе предмети не се исполнети условите";
+	} else setInvalidSubjects([]);
+
 	return errors;
 };
@@ -110,2 +125,46 @@
 	return getPassedSubjects(passedSubjects).map((sub) => sub.id);
 };
+
+export const checkPrerequisites = (
+	passedSubjects: Subject[],
+	hasExtracurricular: boolean
+) => {
+	passedSubjects.sort(
+		(a, b) => a.subject_info.semester - b.subject_info.semester
+	);
+	const passedSubjectIds = new Set(passedSubjects.map((s) => s.id));
+	const invalidSubjects: Subject[] = [];
+
+	for (const subject of passedSubjects) {
+		const prereqs = subject.subject_info.prerequisite;
+		const prereqIDs = (prereqs["subjects"] as SubjectID[]) || [];
+
+		if (prereqIDs.length > 0) {
+			const hasAnyPrereq = prereqIDs.some((id) => passedSubjectIds.has(id));
+			if (!hasAnyPrereq) {
+				passedSubjectIds.delete(subject.id);
+				invalidSubjects.push(subject);
+			}
+		}
+	}
+
+	let totalCredits = passedSubjectIds.size * 6 + (hasExtracurricular ? 1 : 0);
+	if (
+		passedSubjects.some((s) => s.name === "Професионални вештини") &&
+		passedSubjects.some((s) => s.name === "Спорт и здравје")
+	) {
+		totalCredits -= 6;
+	}
+
+	for (const subject of passedSubjects) {
+		if (!passedSubjectIds.has(subject.id)) continue;
+		const prereqs = subject.subject_info.prerequisite;
+		// subtracting 6 because the current subject is counted in the total as well
+		if (prereqs["credits"] && prereqs["credits"] > totalCredits - 6) {
+			passedSubjectIds.delete(subject.id);
+			totalCredits -= 6;
+			invalidSubjects.push(subject);
+		}
+	}
+	return invalidSubjects;
+};
Index: frontend/src/components/types.ts
===================================================================
--- frontend/src/components/types.ts	(revision caaa60c68b532985100ec4e8fa6dcb688137e73e)
+++ frontend/src/components/types.ts	(revision 5007eddecd46eff93a1839fae374c773be2dd05b)
@@ -25,8 +25,9 @@
 }
 
-type Prerequisite =
-	| { subjects: number[] }
-	| { credits: number }
-	| { none: true };
+export type Prerequisite = {
+	subjects?: number[];
+	credits?: number;
+	none?: true;
+};
 
 export interface SubjectInfo {
