Add Today dashboard foundation with permission-aware KPI summary API.

Replace hardcoded Today cards with a backend summary endpoint and composable frontend widgets filtered by org type and tab permissions.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-11 00:07:48 +03:30
parent 893cd5b128
commit 22466490bf
16 changed files with 966 additions and 43 deletions

View File

@@ -194,10 +194,20 @@
"noSubscriptionNotice": "This organization does not have an active subscription yet.",
"choosePlanLink": "Choose a plan",
"noSubscriptionCta": "to start the purchase process.",
"cardTodaysAppointments": "Today's Appointments",
"cardActivePatients": "Active Patients",
"cardNewLabCase": "New Lab Case",
"cardTodayInvoices": "Today invoices"
"noWidgets": "No dashboard metrics are available for your current permissions.",
"loadError": "Could not load dashboard metrics.",
"seatsUnlimited": "Unlimited plan",
"widgetAppointmentsToday": "Today's Appointments",
"widgetPatientsToday": "Patients Today",
"widgetTreatmentsToday": "Treatments Today",
"widgetDraftTreatments": "Draft Treatments",
"widgetLabCasesPendingSend": "Lab Cases Pending Send",
"widgetCasesReceivedToday": "Cases Received Today",
"widgetTasksInProgress": "Tasks In Progress",
"widgetImportantTasks": "Important Tasks",
"widgetPendingConnections": "Pending Connections",
"widgetSeats": "Seat Usage",
"widgetPendingStaffInvites": "Pending Staff Invites"
},
"staff": {
"redirecting": "Redirecting…",

View File

@@ -194,10 +194,20 @@
"noSubscriptionNotice": "این سازمان هنوز اشتراک فعالی ندارد.",
"choosePlanLink": "انتخاب طرح",
"noSubscriptionCta": "برای شروع فرآیند خرید.",
"cardTodaysAppointments": "نوبت‌های امروز",
"cardActivePatients": "بیماران فعال",
"cardNewLabCase": "پرونده جدید لابراتوار",
"cardTodayInvoices": "صورتحساب‌های امروز"
"noWidgets": "هیچ معیاری برای دسترسی فعلی شما در دسترس نیست.",
"loadError": "بارگذاری معیارهای داشبورد ناموفق بود.",
"seatsUnlimited": "طرح نامحدود",
"widgetAppointmentsToday": "نوبت‌های امروز",
"widgetPatientsToday": "بیماران امروز",
"widgetTreatmentsToday": "درمان‌های امروز",
"widgetDraftTreatments": "درمان‌های پیش‌نویس",
"widgetLabCasesPendingSend": "پرونده‌های در انتظار ارسال",
"widgetCasesReceivedToday": "پرونده‌های دریافتی امروز",
"widgetTasksInProgress": "وظایف در حال انجام",
"widgetImportantTasks": "وظایف مهم",
"widgetPendingConnections": "درخواست‌های اتصال در انتظار",
"widgetSeats": "استفاده از صندلی",
"widgetPendingStaffInvites": "دعوت‌های کارکنان در انتظار"
},
"staff": {
"redirecting": "در حال انتقال...",

View File

@@ -194,10 +194,20 @@
"noSubscriptionNotice": "Deze organisatie heeft nog geen actief abonnement.",
"choosePlanLink": "Kies een abonnement",
"noSubscriptionCta": "om het aankoopproces te starten.",
"cardTodaysAppointments": "Afspraken van vandaag",
"cardActivePatients": "Actieve patiënten",
"cardNewLabCase": "Nieuwe laboratoriumcase",
"cardTodayInvoices": "Facturen van vandaag"
"noWidgets": "Geen dashboardstatistieken beschikbaar voor uw huidige rechten.",
"loadError": "Dashboardstatistieken konden niet worden geladen.",
"seatsUnlimited": "Onbeperkt abonnement",
"widgetAppointmentsToday": "Afspraken van vandaag",
"widgetPatientsToday": "Patiënten vandaag",
"widgetTreatmentsToday": "Behandelingen vandaag",
"widgetDraftTreatments": "Conceptbehandelingen",
"widgetLabCasesPendingSend": "Labcases wachten op verzending",
"widgetCasesReceivedToday": "Cases ontvangen vandaag",
"widgetTasksInProgress": "Taken in uitvoering",
"widgetImportantTasks": "Belangrijke taken",
"widgetPendingConnections": "Openstaande koppelingsverzoeken",
"widgetSeats": "Zitplaatsgebruik",
"widgetPendingStaffInvites": "Openstaande medewerkersuitnodigingen"
},
"staff": {
"redirecting": "Bezig met doorsturen...",