diff --git a/assets/admin/components/PatientCaseBanner.tsx b/assets/admin/components/PatientCaseBanner.tsx
index e5ee622c..5fcd76bc 100644
--- a/assets/admin/components/PatientCaseBanner.tsx
+++ b/assets/admin/components/PatientCaseBanner.tsx
@@ -44,13 +44,20 @@ const InfoLine = ({ icon, label, value }: { icon: React.ReactNode; label: string
* FileServicesHeader (name + status chip, file number, tags, contact/date,
* next appointment, یادداشت button).
*/
-export default function PatientCaseBanner({ name, recordNumber, mobile, createdAt, tags, nextAppointment, hasDebt, noShows, onAddNote }: {
+export default function PatientCaseBanner({ name, recordNumber, mobile, createdAt, tags, nextAppointment, nextSession, hasDebt, noShows, onAddNote }: {
name: string;
recordNumber?: string | null;
mobile?: string | null;
createdAt?: number;
tags?: Tag[];
nextAppointment?: number | null;
+ /**
+ * جلسهٔ بعدیِ دوره وقتی نوبتی رزرو نشده.
+ *
+ * جدا از `nextAppointment` است و باید هم باشد: این هنوز نوبت نیست، برنامه است.
+ * یکی کردنشان یعنی بنر چیزی را «نوبت» بنامد که کسی رزروش نکرده.
+ */
+ nextSession?: number | null;
hasDebt?: boolean;
/** خلاصهٔ عدم حضور در پنجرهٔ سیاست — `null` یعنی هنوز نیامده. */
noShows?: { count: number; threshold: number; window_days: number; at_risk: boolean } | null;
@@ -106,7 +113,15 @@ export default function PatientCaseBanner({ name, recordNumber, mobile, createdA
{/* left — next appointment + note */}
-
} label="نوبت بعدی:" value={nextAppointment ? formatDate(nextAppointment) : '—'} />
+
}
+ label={nextAppointment || !nextSession ? 'نوبت بعدی:' : 'جلسهٔ بعدی:'}
+ value={
+ nextAppointment ? formatDate(nextAppointment)
+ : nextSession ? formatDate(nextSession)
+ : '—'
+ }
+ />