From 524efbead94d761f347e4dbd65d9b9a8329f36c6 Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Sun, 18 Jan 2026 14:04:23 +0300 Subject: [PATCH] update-po-file --- apps/accounts/admin.py | 22 +- apps/accounts/migrations/0001_initial.py | 6 +- apps/accounts/migrations/0002_initial.py | 2 +- ...planation_notification_channel_and_more.py | 33 - apps/ai_engine/migrations/0001_initial.py | 2 +- apps/analytics/migrations/0001_initial.py | 2 +- apps/analytics/services/analytics_service.py | 3 +- apps/appreciation/migrations/0001_initial.py | 2 +- apps/appreciation/signals.py | 17 +- apps/callcenter/migrations/0001_initial.py | 2 +- apps/complaints/migrations/0001_initial.py | 39 +- apps/complaints/migrations/0002_initial.py | 2 +- apps/complaints/migrations/0003_initial.py | 16 +- .../0004_add_second_reminder_sent_at.py | 68 - ...plaintexplanation_escalated_at_and_more.py | 62 - apps/core/migrations/0001_initial.py | 2 +- apps/feedback/migrations/0001_initial.py | 2 +- apps/feedback/migrations/0002_initial.py | 2 +- apps/feedback/migrations/0003_initial.py | 2 +- apps/integrations/migrations/0001_initial.py | 2 +- apps/journeys/migrations/0001_initial.py | 2 +- apps/journeys/migrations/0002_initial.py | 2 +- apps/notifications/migrations/0001_initial.py | 2 +- apps/notifications/services.py | 5 + apps/observations/migrations/0001_initial.py | 2 +- apps/organizations/migrations/0001_initial.py | 67 +- ..._ceo_hospital_cfo_hospital_coo_and_more.py | 41 - ...f_department_name_staff_gender_and_more.py | 44 - ...4_staff_location_staff_name_staff_phone.py | 28 - apps/physicians/migrations/0001_initial.py | 2 +- apps/projects/migrations/0001_initial.py | 2 +- apps/projects/migrations/0002_initial.py | 2 +- .../migrations/0001_initial.py | 2 +- apps/px_sources/migrations/0001_initial.py | 2 +- apps/references/migrations/0001_initial.py | 2 +- apps/social/migrations/0001_initial.py | 2 +- apps/standards/migrations/0001_initial.py | 2 +- apps/surveys/migrations/0001_initial.py | 2 +- locale/ar/LC_MESSAGES/django.mo | Bin 105745 -> 160969 bytes locale/ar/LC_MESSAGES/django.po | 3436 +++++++++++++++-- templates/organizations/staff_list.html | 20 +- 41 files changed, 3269 insertions(+), 686 deletions(-) delete mode 100644 apps/accounts/migrations/0003_user_explanation_notification_channel_and_more.py delete mode 100644 apps/complaints/migrations/0004_add_second_reminder_sent_at.py delete mode 100644 apps/complaints/migrations/0005_complaintexplanation_escalated_at_and_more.py delete mode 100644 apps/organizations/migrations/0002_hospital_ceo_hospital_cfo_hospital_coo_and_more.py delete mode 100644 apps/organizations/migrations/0003_staff_country_staff_department_name_staff_gender_and_more.py delete mode 100644 apps/organizations/migrations/0004_staff_location_staff_name_staff_phone.py diff --git a/apps/accounts/admin.py b/apps/accounts/admin.py index 39a95aa..e92187a 100644 --- a/apps/accounts/admin.py +++ b/apps/accounts/admin.py @@ -1,24 +1,42 @@ """ Accounts admin """ +from django import forms from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin +from django.contrib.auth.forms import UserChangeForm as BaseUserChangeForm from django.utils.translation import gettext_lazy as _ from .models import Role, User +class UserChangeForm(BaseUserChangeForm): + """Custom user change form that handles nullable username field.""" + + # Override username field to use a regular CharField that handles None + username = forms.CharField( + max_length=150, + required=False, + help_text=_('Optional. 150 characters or fewer.'), + ) + + class Meta(BaseUserChangeForm.Meta): + model = User + + @admin.register(User) class UserAdmin(BaseUserAdmin): """Custom User admin""" + form = UserChangeForm + list_display = ['email', 'username', 'first_name', 'last_name', 'hospital', 'department', 'is_active', 'is_staff'] list_filter = ['is_active', 'is_staff', 'is_superuser', 'groups', 'hospital', 'department'] search_fields = ['email', 'username', 'first_name', 'last_name', 'employee_id'] ordering = ['-date_joined'] fieldsets = ( - (None, {'fields': ('username', 'password')}), - (_('Personal info'), {'fields': ('first_name', 'last_name', 'email', 'phone', 'employee_id')}), + (None, {'fields': ('email', 'username', 'password')}), + (_('Personal info'), {'fields': ('first_name', 'last_name', 'phone', 'employee_id')}), (_('Organization'), {'fields': ('hospital', 'department')}), (_('Profile'), {'fields': ('avatar', 'bio', 'language')}), (_('Permissions'), { diff --git a/apps/accounts/migrations/0001_initial.py b/apps/accounts/migrations/0001_initial.py index 5bdb9a0..afc5d28 100644 --- a/apps/accounts/migrations/0001_initial.py +++ b/apps/accounts/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.utils.timezone import uuid @@ -33,6 +33,10 @@ class Migration(migrations.Migration): ('avatar', models.ImageField(blank=True, null=True, upload_to='avatars/')), ('bio', models.TextField(blank=True)), ('language', models.CharField(choices=[('en', 'English'), ('ar', 'Arabic')], default='en', max_length=5)), + ('notification_email_enabled', models.BooleanField(default=True, help_text='Enable email notifications')), + ('notification_sms_enabled', models.BooleanField(default=False, help_text='Enable SMS notifications')), + ('preferred_notification_channel', models.CharField(choices=[('email', 'Email'), ('sms', 'SMS'), ('both', 'Both')], default='email', help_text='Preferred notification channel for general notifications', max_length=10)), + ('explanation_notification_channel', models.CharField(choices=[('email', 'Email'), ('sms', 'SMS'), ('both', 'Both')], default='email', help_text='Preferred channel for explanation requests', max_length=10)), ('is_active', models.BooleanField(default=True)), ('is_provisional', models.BooleanField(default=False, help_text='User is in onboarding process')), ('invitation_token', models.CharField(blank=True, help_text='Token for account activation', max_length=100, null=True, unique=True)), diff --git a/apps/accounts/migrations/0002_initial.py b/apps/accounts/migrations/0002_initial.py index 7467e3b..e6176ad 100644 --- a/apps/accounts/migrations/0002_initial.py +++ b/apps/accounts/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion from django.conf import settings diff --git a/apps/accounts/migrations/0003_user_explanation_notification_channel_and_more.py b/apps/accounts/migrations/0003_user_explanation_notification_channel_and_more.py deleted file mode 100644 index 7b55378..0000000 --- a/apps/accounts/migrations/0003_user_explanation_notification_channel_and_more.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 6.0.1 on 2026-01-12 18:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0002_initial'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='explanation_notification_channel', - field=models.CharField(choices=[('email', 'Email'), ('sms', 'SMS'), ('both', 'Both')], default='email', help_text='Preferred channel for explanation requests', max_length=10), - ), - migrations.AddField( - model_name='user', - name='notification_email_enabled', - field=models.BooleanField(default=True, help_text='Enable email notifications'), - ), - migrations.AddField( - model_name='user', - name='notification_sms_enabled', - field=models.BooleanField(default=False, help_text='Enable SMS notifications'), - ), - migrations.AddField( - model_name='user', - name='preferred_notification_channel', - field=models.CharField(choices=[('email', 'Email'), ('sms', 'SMS'), ('both', 'Both')], default='email', help_text='Preferred notification channel for general notifications', max_length=10), - ), - ] diff --git a/apps/ai_engine/migrations/0001_initial.py b/apps/ai_engine/migrations/0001_initial.py index 5b7fbd5..dc2cb65 100644 --- a/apps/ai_engine/migrations/0001_initial.py +++ b/apps/ai_engine/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/analytics/migrations/0001_initial.py b/apps/analytics/migrations/0001_initial.py index 5dad3d1..4d630ae 100644 --- a/apps/analytics/migrations/0001_initial.py +++ b/apps/analytics/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/analytics/services/analytics_service.py b/apps/analytics/services/analytics_service.py index d38f62b..548f45e 100644 --- a/apps/analytics/services/analytics_service.py +++ b/apps/analytics/services/analytics_service.py @@ -229,8 +229,9 @@ class UnifiedAnalyticsService: 'avg_survey_score': float(surveys_qs.aggregate(avg=Avg('total_score'))['avg'] or 0), # Social Media KPIs + # Sentiment is stored in ai_analysis JSON field as ai_analysis.sentiment 'negative_social_comments': int(SocialMediaComment.objects.filter( - sentiment='negative', + ai_analysis__sentiment='negative', published_at__gte=start_date, published_at__lte=end_date ).count()), diff --git a/apps/appreciation/migrations/0001_initial.py b/apps/appreciation/migrations/0001_initial.py index 2816c46..42d7b59 100644 --- a/apps/appreciation/migrations/0001_initial.py +++ b/apps/appreciation/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/appreciation/signals.py b/apps/appreciation/signals.py index 42a2206..a4752cf 100644 --- a/apps/appreciation/signals.py +++ b/apps/appreciation/signals.py @@ -49,8 +49,7 @@ def send_appreciation_notification(appreciation): Uses the notification system to send email/SMS/WhatsApp. """ try: - from apps.notifications.models import NotificationLog, NotificationChannel, NotificationStatus - from apps.notifications.services import send_notification + from apps.notifications.services import send_email, send_sms # Get recipient details recipient_email = appreciation.get_recipient_email() @@ -73,12 +72,11 @@ def send_appreciation_notification(appreciation): # Send email if available if recipient_email: try: - send_notification( - channel=NotificationChannel.EMAIL, - recipient=recipient_email, + send_email( + email=recipient_email, subject=f"New Appreciation Received - {appreciation.hospital.name}", message=message_en, - content_object=appreciation, + related_object=appreciation, ) except Exception as e: # Log error but don't fail @@ -87,11 +85,10 @@ def send_appreciation_notification(appreciation): # Send SMS if available if recipient_phone: try: - send_notification( - channel=NotificationChannel.SMS, - recipient=recipient_phone, + send_sms( + phone=recipient_phone, message=message_en, - content_object=appreciation, + related_object=appreciation, ) except Exception as e: # Log error but don't fail diff --git a/apps/callcenter/migrations/0001_initial.py b/apps/callcenter/migrations/0001_initial.py index 981d56b..22f88e1 100644 --- a/apps/callcenter/migrations/0001_initial.py +++ b/apps/callcenter/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/complaints/migrations/0001_initial.py b/apps/complaints/migrations/0001_initial.py index 70769e7..6d19799 100644 --- a/apps/complaints/migrations/0001_initial.py +++ b/apps/complaints/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid @@ -64,6 +64,10 @@ class Migration(migrations.Migration): ('email_sent_at', models.DateTimeField(blank=True, help_text='When the explanation request email was sent', null=True)), ('responded_at', models.DateTimeField(blank=True, help_text='When the explanation was submitted', null=True)), ('request_message', models.TextField(blank=True, help_text='Optional message sent with the explanation request')), + ('sla_due_at', models.DateTimeField(blank=True, db_index=True, help_text='SLA deadline for staff to submit explanation', null=True)), + ('is_overdue', models.BooleanField(db_index=True, default=False, help_text='Explanation request is overdue')), + ('reminder_sent_at', models.DateTimeField(blank=True, help_text='Reminder sent to staff about overdue explanation', null=True)), + ('escalated_at', models.DateTimeField(blank=True, help_text='When explanation was escalated to manager', null=True)), ], options={ 'verbose_name': 'Complaint Explanation', @@ -80,7 +84,10 @@ class Migration(migrations.Migration): ('severity', models.CharField(choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('critical', 'Critical')], help_text='Severity level for this SLA', max_length=20)), ('priority', models.CharField(choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('critical', 'Critical')], help_text='Priority level for this SLA', max_length=20)), ('sla_hours', models.IntegerField(help_text='Number of hours until SLA deadline')), - ('reminder_hours_before', models.IntegerField(default=24, help_text='Send reminder X hours before deadline')), + ('reminder_hours_before', models.IntegerField(default=24, help_text='Send first reminder X hours before deadline')), + ('second_reminder_enabled', models.BooleanField(default=False, help_text='Enable sending a second reminder')), + ('second_reminder_hours_before', models.IntegerField(default=6, help_text='Send second reminder X hours before deadline')), + ('thank_you_email_enabled', models.BooleanField(default=False, help_text='Send thank you email when complaint is closed')), ('is_active', models.BooleanField(default=True)), ], options={ @@ -127,9 +134,13 @@ class Migration(migrations.Migration): ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('name', models.CharField(max_length=200)), ('description', models.TextField(blank=True)), + ('escalation_level', models.IntegerField(default=1, help_text='Escalation level (1 = first level, 2 = second, etc.)')), + ('max_escalation_level', models.IntegerField(default=3, help_text='Maximum escalation level before stopping (default: 3)')), ('trigger_on_overdue', models.BooleanField(default=True, help_text='Trigger when complaint is overdue')), ('trigger_hours_overdue', models.IntegerField(default=0, help_text='Trigger X hours after overdue (0 = immediately)')), - ('escalate_to_role', models.CharField(choices=[('department_manager', 'Department Manager'), ('hospital_admin', 'Hospital Admin'), ('px_admin', 'PX Admin'), ('specific_user', 'Specific User')], help_text='Role to escalate to', max_length=50)), + ('reminder_escalation_enabled', models.BooleanField(default=False, help_text='Enable escalation after reminder if no action taken')), + ('reminder_escalation_hours', models.IntegerField(default=24, help_text='Escalate X hours after reminder if no action')), + ('escalate_to_role', models.CharField(choices=[('department_manager', 'Department Manager'), ('hospital_admin', 'Hospital Admin'), ('px_admin', 'PX Admin'), ('ceo', 'CEO'), ('specific_user', 'Specific User')], help_text='Role to escalate to', max_length=50)), ('severity_filter', models.CharField(blank=True, choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('critical', 'Critical')], help_text='Only escalate complaints with this severity (blank = all)', max_length=20)), ('priority_filter', models.CharField(blank=True, choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('critical', 'Critical')], help_text='Only escalate complaints with this priority (blank = all)', max_length=20)), ('order', models.IntegerField(default=0, help_text='Escalation order (lower = first)')), @@ -157,6 +168,25 @@ class Migration(migrations.Migration): 'ordering': ['-created_at'], }, ), + migrations.CreateModel( + name='ExplanationSLAConfig', + fields=[ + ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('response_hours', models.IntegerField(default=48, help_text='Hours staff has to submit explanation')), + ('reminder_hours_before', models.IntegerField(default=12, help_text='Send reminder X hours before deadline')), + ('auto_escalate_enabled', models.BooleanField(default=True, help_text='Automatically escalate to manager if no response')), + ('escalation_hours_overdue', models.IntegerField(default=0, help_text='Escalate X hours after overdue (0 = immediately)')), + ('max_escalation_levels', models.IntegerField(default=3, help_text='Maximum levels to escalate up staff hierarchy')), + ('is_active', models.BooleanField(default=True)), + ], + options={ + 'verbose_name': 'Explanation SLA Config', + 'verbose_name_plural': 'Explanation SLA Configs', + 'ordering': ['hospital'], + }, + ), migrations.CreateModel( name='Inquiry', fields=[ @@ -230,7 +260,8 @@ class Migration(migrations.Migration): ('assigned_at', models.DateTimeField(blank=True, null=True)), ('due_at', models.DateTimeField(db_index=True, help_text='SLA deadline')), ('is_overdue', models.BooleanField(db_index=True, default=False)), - ('reminder_sent_at', models.DateTimeField(blank=True, null=True)), + ('reminder_sent_at', models.DateTimeField(blank=True, help_text='First SLA reminder timestamp', null=True)), + ('second_reminder_sent_at', models.DateTimeField(blank=True, help_text='Second SLA reminder timestamp', null=True)), ('escalated_at', models.DateTimeField(blank=True, null=True)), ('resolution', models.TextField(blank=True)), ('resolved_at', models.DateTimeField(blank=True, null=True)), diff --git a/apps/complaints/migrations/0002_initial.py b/apps/complaints/migrations/0002_initial.py index 2f57c66..417c8c1 100644 --- a/apps/complaints/migrations/0002_initial.py +++ b/apps/complaints/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion from django.conf import settings diff --git a/apps/complaints/migrations/0003_initial.py b/apps/complaints/migrations/0003_initial.py index 8f9537a..39e0b26 100644 --- a/apps/complaints/migrations/0003_initial.py +++ b/apps/complaints/migrations/0003_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion from django.conf import settings @@ -57,6 +57,11 @@ class Migration(migrations.Migration): name='complaint', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='explanations', to='complaints.complaint'), ), + migrations.AddField( + model_name='complaintexplanation', + name='escalated_to_manager', + field=models.ForeignKey(blank=True, help_text="Escalated to this explanation (manager's explanation request)", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='escalated_from_staff', to='complaints.complaintexplanation'), + ), migrations.AddField( model_name='complaintexplanation', name='requested_by', @@ -102,6 +107,11 @@ class Migration(migrations.Migration): name='explanation', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='complaints.complaintexplanation'), ), + migrations.AddField( + model_name='explanationslaconfig', + name='hospital', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='explanation_sla_configs', to='organizations.hospital'), + ), migrations.AddField( model_name='inquiry', name='assigned_to', @@ -204,6 +214,10 @@ class Migration(migrations.Migration): model_name='escalationrule', index=models.Index(fields=['hospital', 'is_active'], name='complaints__hospita_3c8bac_idx'), ), + migrations.AddIndex( + model_name='explanationslaconfig', + index=models.Index(fields=['hospital', 'is_active'], name='complaints__hospita_fe4ec5_idx'), + ), migrations.AddIndex( model_name='inquiry', index=models.Index(fields=['status', '-created_at'], name='complaints__status_3d0678_idx'), diff --git a/apps/complaints/migrations/0004_add_second_reminder_sent_at.py b/apps/complaints/migrations/0004_add_second_reminder_sent_at.py deleted file mode 100644 index d1586b1..0000000 --- a/apps/complaints/migrations/0004_add_second_reminder_sent_at.py +++ /dev/null @@ -1,68 +0,0 @@ -# Generated by Django 6.0.1 on 2026-01-13 20:10 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('complaints', '0003_initial'), - ] - - operations = [ - migrations.AddField( - model_name='complaint', - name='second_reminder_sent_at', - field=models.DateTimeField(blank=True, help_text='Second SLA reminder timestamp', null=True), - ), - migrations.AddField( - model_name='complaintslaconfig', - name='second_reminder_enabled', - field=models.BooleanField(default=False, help_text='Enable sending a second reminder'), - ), - migrations.AddField( - model_name='complaintslaconfig', - name='second_reminder_hours_before', - field=models.IntegerField(default=6, help_text='Send second reminder X hours before deadline'), - ), - migrations.AddField( - model_name='complaintslaconfig', - name='thank_you_email_enabled', - field=models.BooleanField(default=False, help_text='Send thank you email when complaint is closed'), - ), - migrations.AddField( - model_name='escalationrule', - name='escalation_level', - field=models.IntegerField(default=1, help_text='Escalation level (1 = first level, 2 = second, etc.)'), - ), - migrations.AddField( - model_name='escalationrule', - name='max_escalation_level', - field=models.IntegerField(default=3, help_text='Maximum escalation level before stopping (default: 3)'), - ), - migrations.AddField( - model_name='escalationrule', - name='reminder_escalation_enabled', - field=models.BooleanField(default=False, help_text='Enable escalation after reminder if no action taken'), - ), - migrations.AddField( - model_name='escalationrule', - name='reminder_escalation_hours', - field=models.IntegerField(default=24, help_text='Escalate X hours after reminder if no action'), - ), - migrations.AlterField( - model_name='complaint', - name='reminder_sent_at', - field=models.DateTimeField(blank=True, help_text='First SLA reminder timestamp', null=True), - ), - migrations.AlterField( - model_name='complaintslaconfig', - name='reminder_hours_before', - field=models.IntegerField(default=24, help_text='Send first reminder X hours before deadline'), - ), - migrations.AlterField( - model_name='escalationrule', - name='escalate_to_role', - field=models.CharField(choices=[('department_manager', 'Department Manager'), ('hospital_admin', 'Hospital Admin'), ('px_admin', 'PX Admin'), ('ceo', 'CEO'), ('specific_user', 'Specific User')], help_text='Role to escalate to', max_length=50), - ), - ] diff --git a/apps/complaints/migrations/0005_complaintexplanation_escalated_at_and_more.py b/apps/complaints/migrations/0005_complaintexplanation_escalated_at_and_more.py deleted file mode 100644 index f1cfc1d..0000000 --- a/apps/complaints/migrations/0005_complaintexplanation_escalated_at_and_more.py +++ /dev/null @@ -1,62 +0,0 @@ -# Generated by Django 6.0.1 on 2026-01-14 12:36 - -import django.db.models.deletion -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('complaints', '0004_add_second_reminder_sent_at'), - ('organizations', '0004_staff_location_staff_name_staff_phone'), - ] - - operations = [ - migrations.AddField( - model_name='complaintexplanation', - name='escalated_at', - field=models.DateTimeField(blank=True, help_text='When explanation was escalated to manager', null=True), - ), - migrations.AddField( - model_name='complaintexplanation', - name='escalated_to_manager', - field=models.ForeignKey(blank=True, help_text="Escalated to this explanation (manager's explanation request)", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='escalated_from_staff', to='complaints.complaintexplanation'), - ), - migrations.AddField( - model_name='complaintexplanation', - name='is_overdue', - field=models.BooleanField(db_index=True, default=False, help_text='Explanation request is overdue'), - ), - migrations.AddField( - model_name='complaintexplanation', - name='reminder_sent_at', - field=models.DateTimeField(blank=True, help_text='Reminder sent to staff about overdue explanation', null=True), - ), - migrations.AddField( - model_name='complaintexplanation', - name='sla_due_at', - field=models.DateTimeField(blank=True, db_index=True, help_text='SLA deadline for staff to submit explanation', null=True), - ), - migrations.CreateModel( - name='ExplanationSLAConfig', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('response_hours', models.IntegerField(default=48, help_text='Hours staff has to submit explanation')), - ('reminder_hours_before', models.IntegerField(default=12, help_text='Send reminder X hours before deadline')), - ('auto_escalate_enabled', models.BooleanField(default=True, help_text='Automatically escalate to manager if no response')), - ('escalation_hours_overdue', models.IntegerField(default=0, help_text='Escalate X hours after overdue (0 = immediately)')), - ('max_escalation_levels', models.IntegerField(default=3, help_text='Maximum levels to escalate up staff hierarchy')), - ('is_active', models.BooleanField(default=True)), - ('hospital', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='explanation_sla_configs', to='organizations.hospital')), - ], - options={ - 'verbose_name': 'Explanation SLA Config', - 'verbose_name_plural': 'Explanation SLA Configs', - 'ordering': ['hospital'], - 'indexes': [models.Index(fields=['hospital', 'is_active'], name='complaints__hospita_fe4ec5_idx')], - }, - ), - ] diff --git a/apps/core/migrations/0001_initial.py b/apps/core/migrations/0001_initial.py index b049ae3..dc15c96 100644 --- a/apps/core/migrations/0001_initial.py +++ b/apps/core/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/feedback/migrations/0001_initial.py b/apps/feedback/migrations/0001_initial.py index f05b8c7..8ac4855 100644 --- a/apps/feedback/migrations/0001_initial.py +++ b/apps/feedback/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/feedback/migrations/0002_initial.py b/apps/feedback/migrations/0002_initial.py index 2dd8502..e4c4363 100644 --- a/apps/feedback/migrations/0002_initial.py +++ b/apps/feedback/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion from django.conf import settings diff --git a/apps/feedback/migrations/0003_initial.py b/apps/feedback/migrations/0003_initial.py index 44d2190..84e6b90 100644 --- a/apps/feedback/migrations/0003_initial.py +++ b/apps/feedback/migrations/0003_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion from django.conf import settings diff --git a/apps/integrations/migrations/0001_initial.py b/apps/integrations/migrations/0001_initial.py index 3175c56..df00ae1 100644 --- a/apps/integrations/migrations/0001_initial.py +++ b/apps/integrations/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/journeys/migrations/0001_initial.py b/apps/journeys/migrations/0001_initial.py index bcddf72..aa4744d 100644 --- a/apps/journeys/migrations/0001_initial.py +++ b/apps/journeys/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/journeys/migrations/0002_initial.py b/apps/journeys/migrations/0002_initial.py index 1df1564..4d2c3b8 100644 --- a/apps/journeys/migrations/0002_initial.py +++ b/apps/journeys/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion from django.db import migrations, models diff --git a/apps/notifications/migrations/0001_initial.py b/apps/notifications/migrations/0001_initial.py index cf6b30a..e671f2c 100644 --- a/apps/notifications/migrations/0001_initial.py +++ b/apps/notifications/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/notifications/services.py b/apps/notifications/services.py index 432a7f3..074fbe4 100644 --- a/apps/notifications/services.py +++ b/apps/notifications/services.py @@ -565,3 +565,8 @@ def send_whatsapp(phone, message, **kwargs): def send_email(email, subject, message, **kwargs): """Send Email notification""" return NotificationService.send_email(email, subject, message, **kwargs) + + +def send_notification(recipient, title, message, **kwargs): + """Send generic notification to a user""" + return NotificationService.send_notification(recipient, title, message, **kwargs) diff --git a/apps/observations/migrations/0001_initial.py b/apps/observations/migrations/0001_initial.py index a059f26..be05b1c 100644 --- a/apps/observations/migrations/0001_initial.py +++ b/apps/observations/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import apps.observations.models import django.db.models.deletion diff --git a/apps/organizations/migrations/0001_initial.py b/apps/organizations/migrations/0001_initial.py index 5c52d45..9124a57 100644 --- a/apps/organizations/migrations/0001_initial.py +++ b/apps/organizations/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid @@ -15,29 +15,6 @@ class Migration(migrations.Migration): ] operations = [ - migrations.CreateModel( - name='Hospital', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=200)), - ('name_ar', models.CharField(blank=True, max_length=200, verbose_name='Name (Arabic)')), - ('code', models.CharField(db_index=True, max_length=50, unique=True)), - ('address', models.TextField(blank=True)), - ('city', models.CharField(blank=True, max_length=100)), - ('phone', models.CharField(blank=True, max_length=20)), - ('email', models.EmailField(blank=True, max_length=254)), - ('status', models.CharField(choices=[('active', 'Active'), ('inactive', 'Inactive'), ('pending', 'Pending'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], db_index=True, default='active', max_length=20)), - ('license_number', models.CharField(blank=True, max_length=100)), - ('capacity', models.IntegerField(blank=True, help_text='Bed capacity', null=True)), - ('metadata', models.JSONField(blank=True, default=dict)), - ], - options={ - 'verbose_name_plural': 'Hospitals', - 'ordering': ['name'], - }, - ), migrations.CreateModel( name='Organization', fields=[ @@ -62,6 +39,34 @@ class Migration(migrations.Migration): 'ordering': ['name'], }, ), + migrations.CreateModel( + name='Hospital', + fields=[ + ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=200)), + ('name_ar', models.CharField(blank=True, max_length=200, verbose_name='Name (Arabic)')), + ('code', models.CharField(db_index=True, max_length=50, unique=True)), + ('address', models.TextField(blank=True)), + ('city', models.CharField(blank=True, max_length=100)), + ('phone', models.CharField(blank=True, max_length=20)), + ('email', models.EmailField(blank=True, max_length=254)), + ('status', models.CharField(choices=[('active', 'Active'), ('inactive', 'Inactive'), ('pending', 'Pending'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], db_index=True, default='active', max_length=20)), + ('license_number', models.CharField(blank=True, max_length=100)), + ('capacity', models.IntegerField(blank=True, help_text='Bed capacity', null=True)), + ('metadata', models.JSONField(blank=True, default=dict, help_text='Hospital configuration settings')), + ('ceo', models.ForeignKey(blank=True, help_text='Chief Executive Officer', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_ceo', to=settings.AUTH_USER_MODEL, verbose_name='CEO')), + ('cfo', models.ForeignKey(blank=True, help_text='Chief Financial Officer', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_cfo', to=settings.AUTH_USER_MODEL, verbose_name='CFO')), + ('coo', models.ForeignKey(blank=True, help_text='Chief Operating Officer', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_coo', to=settings.AUTH_USER_MODEL, verbose_name='COO')), + ('medical_director', models.ForeignKey(blank=True, help_text='Medical Director', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_medical_director', to=settings.AUTH_USER_MODEL, verbose_name='Medical Director')), + ('organization', models.ForeignKey(blank=True, help_text='Parent organization (null for backward compatibility)', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='hospitals', to='organizations.organization')), + ], + options={ + 'verbose_name_plural': 'Hospitals', + 'ordering': ['name'], + }, + ), migrations.CreateModel( name='Department', fields=[ @@ -84,11 +89,6 @@ class Migration(migrations.Migration): 'unique_together': {('hospital', 'code')}, }, ), - migrations.AddField( - model_name='hospital', - name='organization', - field=models.ForeignKey(blank=True, help_text='Parent organization (null for backward compatibility)', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='hospitals', to='organizations.organization'), - ), migrations.CreateModel( name='Patient', fields=[ @@ -129,10 +129,19 @@ class Migration(migrations.Migration): ('license_number', models.CharField(blank=True, max_length=100, null=True, unique=True)), ('specialization', models.CharField(blank=True, max_length=200)), ('email', models.EmailField(blank=True, max_length=254)), + ('phone', models.CharField(blank=True, max_length=20, verbose_name='Phone Number')), ('employee_id', models.CharField(db_index=True, max_length=50, unique=True)), + ('name', models.CharField(blank=True, max_length=300, verbose_name='Full Name (Original)')), + ('country', models.CharField(blank=True, max_length=100, verbose_name='Country')), + ('location', models.CharField(blank=True, max_length=200, verbose_name='Location')), + ('gender', models.CharField(blank=True, choices=[('male', 'Male'), ('female', 'Female'), ('other', 'Other')], max_length=10)), + ('department_name', models.CharField(blank=True, max_length=200, verbose_name='Department (Original)')), + ('section', models.CharField(blank=True, max_length=200, verbose_name='Section')), + ('subsection', models.CharField(blank=True, max_length=200, verbose_name='Subsection')), ('status', models.CharField(choices=[('active', 'Active'), ('inactive', 'Inactive'), ('pending', 'Pending'), ('completed', 'Completed'), ('cancelled', 'Cancelled')], default='active', max_length=20)), ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='staff', to='organizations.department')), ('hospital', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='staff', to='organizations.hospital')), + ('report_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='direct_reports', to='organizations.staff', verbose_name='Reports To')), ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='staff_profile', to=settings.AUTH_USER_MODEL)), ], options={ diff --git a/apps/organizations/migrations/0002_hospital_ceo_hospital_cfo_hospital_coo_and_more.py b/apps/organizations/migrations/0002_hospital_ceo_hospital_cfo_hospital_coo_and_more.py deleted file mode 100644 index c72a07b..0000000 --- a/apps/organizations/migrations/0002_hospital_ceo_hospital_cfo_hospital_coo_and_more.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 6.0.1 on 2026-01-13 13:07 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AddField( - model_name='hospital', - name='ceo', - field=models.ForeignKey(blank=True, help_text='Chief Executive Officer', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_ceo', to=settings.AUTH_USER_MODEL, verbose_name='CEO'), - ), - migrations.AddField( - model_name='hospital', - name='cfo', - field=models.ForeignKey(blank=True, help_text='Chief Financial Officer', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_cfo', to=settings.AUTH_USER_MODEL, verbose_name='CFO'), - ), - migrations.AddField( - model_name='hospital', - name='coo', - field=models.ForeignKey(blank=True, help_text='Chief Operating Officer', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_coo', to=settings.AUTH_USER_MODEL, verbose_name='COO'), - ), - migrations.AddField( - model_name='hospital', - name='medical_director', - field=models.ForeignKey(blank=True, help_text='Medical Director', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hospitals_as_medical_director', to=settings.AUTH_USER_MODEL, verbose_name='Medical Director'), - ), - migrations.AlterField( - model_name='hospital', - name='metadata', - field=models.JSONField(blank=True, default=dict, help_text='Hospital configuration settings'), - ), - ] diff --git a/apps/organizations/migrations/0003_staff_country_staff_department_name_staff_gender_and_more.py b/apps/organizations/migrations/0003_staff_country_staff_department_name_staff_gender_and_more.py deleted file mode 100644 index d94f088..0000000 --- a/apps/organizations/migrations/0003_staff_country_staff_department_name_staff_gender_and_more.py +++ /dev/null @@ -1,44 +0,0 @@ -# Generated by Django 6.0.1 on 2026-01-13 13:35 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0002_hospital_ceo_hospital_cfo_hospital_coo_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='staff', - name='country', - field=models.CharField(blank=True, max_length=100, verbose_name='Country'), - ), - migrations.AddField( - model_name='staff', - name='department_name', - field=models.CharField(blank=True, max_length=200, verbose_name='Department (Original)'), - ), - migrations.AddField( - model_name='staff', - name='gender', - field=models.CharField(blank=True, choices=[('male', 'Male'), ('female', 'Female'), ('other', 'Other')], max_length=10), - ), - migrations.AddField( - model_name='staff', - name='report_to', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='direct_reports', to='organizations.staff', verbose_name='Reports To'), - ), - migrations.AddField( - model_name='staff', - name='section', - field=models.CharField(blank=True, max_length=200, verbose_name='Section'), - ), - migrations.AddField( - model_name='staff', - name='subsection', - field=models.CharField(blank=True, max_length=200, verbose_name='Subsection'), - ), - ] diff --git a/apps/organizations/migrations/0004_staff_location_staff_name_staff_phone.py b/apps/organizations/migrations/0004_staff_location_staff_name_staff_phone.py deleted file mode 100644 index 78aad8c..0000000 --- a/apps/organizations/migrations/0004_staff_location_staff_name_staff_phone.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 6.0.1 on 2026-01-13 13:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0003_staff_country_staff_department_name_staff_gender_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='staff', - name='location', - field=models.CharField(blank=True, max_length=200, verbose_name='Location'), - ), - migrations.AddField( - model_name='staff', - name='name', - field=models.CharField(blank=True, max_length=300, verbose_name='Full Name (Original)'), - ), - migrations.AddField( - model_name='staff', - name='phone', - field=models.CharField(blank=True, max_length=20, verbose_name='Phone Number'), - ), - ] diff --git a/apps/physicians/migrations/0001_initial.py b/apps/physicians/migrations/0001_initial.py index 211d14c..508393b 100644 --- a/apps/physicians/migrations/0001_initial.py +++ b/apps/physicians/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/projects/migrations/0001_initial.py b/apps/projects/migrations/0001_initial.py index f547dca..22a5ff1 100644 --- a/apps/projects/migrations/0001_initial.py +++ b/apps/projects/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/projects/migrations/0002_initial.py b/apps/projects/migrations/0002_initial.py index 4ae6ee6..f4ebeb7 100644 --- a/apps/projects/migrations/0002_initial.py +++ b/apps/projects/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion from django.conf import settings diff --git a/apps/px_action_center/migrations/0001_initial.py b/apps/px_action_center/migrations/0001_initial.py index 6161572..0374b7b 100644 --- a/apps/px_action_center/migrations/0001_initial.py +++ b/apps/px_action_center/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/px_sources/migrations/0001_initial.py b/apps/px_sources/migrations/0001_initial.py index 2195c2c..e209df0 100644 --- a/apps/px_sources/migrations/0001_initial.py +++ b/apps/px_sources/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/apps/references/migrations/0001_initial.py b/apps/references/migrations/0001_initial.py index 11daddc..4f84f9b 100644 --- a/apps/references/migrations/0001_initial.py +++ b/apps/references/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import apps.references.models import django.db.models.deletion diff --git a/apps/social/migrations/0001_initial.py b/apps/social/migrations/0001_initial.py index f0204af..c48e640 100644 --- a/apps/social/migrations/0001_initial.py +++ b/apps/social/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 from django.db import migrations, models diff --git a/apps/standards/migrations/0001_initial.py b/apps/standards/migrations/0001_initial.py index 62877fe..0cfae8c 100644 --- a/apps/standards/migrations/0001_initial.py +++ b/apps/standards/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.core.validators import django.db.models.deletion diff --git a/apps/surveys/migrations/0001_initial.py b/apps/surveys/migrations/0001_initial.py index 616d233..f1b054c 100644 --- a/apps/surveys/migrations/0001_initial.py +++ b/apps/surveys/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 6.0.1 on 2026-01-12 09:50 +# Generated by Django 6.0.1 on 2026-01-15 12:02 import django.db.models.deletion import uuid diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index db51478b984cd4195195bab62d146cf36b91c1b5..ba872b5b815a439ed3f6d762224c9b0f4f2902dc 100644 GIT binary patch literal 160969 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 B0DS-e diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po index 41bb8b2..092fb19 100644 --- a/locale/ar/LC_MESSAGES/django.po +++ b/locale/ar/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PX360 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-08 21:05+0300\n" +"POT-Creation-Date: 2026-01-18 12:54+0300\n" "PO-Revision-Date: 2025-12-15 12:30+0300\n" "Last-Translator: PX360 Team\n" "Language-Team: Arabic\n" @@ -17,30 +17,94 @@ msgstr "" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps/accounts/admin.py:21 +#: apps/accounts/admin.py:20 +msgid "Optional. 150 characters or fewer." +msgstr "اختياري. بحد أقصى 150 حرفًا." + +#: apps/accounts/admin.py:39 msgid "Personal info" msgstr "المعلومات الشخصية" -#: apps/accounts/admin.py:22 templates/callcenter/complaint_form.html:128 +#: apps/accounts/admin.py:40 templates/callcenter/complaint_form.html:128 #: templates/callcenter/inquiry_form.html:132 #: templates/complaints/complaint_form.html:76 #: templates/complaints/inquiry_form.html:53 +#: templates/organizations/staff_detail.html:84 +#: templates/organizations/staff_form.html:157 msgid "Organization" msgstr "المنظمة" -#: apps/accounts/admin.py:23 templates/layouts/partials/topbar.html:112 +#: apps/accounts/admin.py:41 templates/accounts/settings.html:19 +#: templates/layouts/partials/topbar.html:112 msgid "Profile" msgstr "الملف الشخصي" -#: apps/accounts/admin.py:24 +#: apps/accounts/admin.py:42 templates/px_sources/source_detail.html:170 +#: templates/px_sources/source_user_confirm_delete.html:81 +#: templates/px_sources/source_user_form.html:102 msgid "Permissions" msgstr "الصلاحيات" -#: apps/accounts/admin.py:27 +#: apps/accounts/admin.py:45 msgid "Important dates" msgstr "التواريخ المهمة" -#: apps/complaints/forms.py:56 apps/complaints/forms.py:257 +#: apps/accounts/views.py:297 +msgid "Notification preferences updated successfully." +msgstr "تم تحديث تفضيلات الإشعارات بنجاح." + +msgid "Profile updated successfully." +msgstr "تم تحديث الملف الشخصي بنجاح." + +msgid "Current password is incorrect." +msgstr "كلمة المرور الحالية غير صحيحة." + +msgid "New passwords do not match." +msgstr "كلمتا المرور الجديدتان غير متطابقتين." + +msgid "Password must be at least 8 characters long." +msgstr "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل." + +msgid "Password changed successfully. Please login again." +msgstr "تم تغيير كلمة المرور بنجاح. يرجى تسجيل الدخول مرة أخرى." + +#: apps/accounts/views.py:347 +#: templates/accounts/onboarding/step_activation.html:44 +#: templates/accounts/settings.html:90 templates/accounts/settings.html:373 +#: templates/complaints/inquiry_detail.html:495 +#: templates/complaints/inquiry_detail.html:516 +#: templates/complaints/inquiry_form.html:179 +#: templates/complaints/inquiry_form.html:194 +#: templates/core/public_submit.html:814 +#: templates/feedback/feedback_form.html:137 +#: templates/observations/observation_detail.html:275 +#: templates/observations/public_new.html:364 +#: templates/organizations/patient_list.html:18 +#: templates/organizations/staff_detail.html:112 +#: templates/organizations/staff_detail.html:248 +#: templates/organizations/staff_form.html:122 +#: templates/physicians/physician_detail.html:62 +#: templates/px_sources/source_detail.html:168 +msgid "Email" +msgstr "البريد الإلكتروني" + +#: apps/accounts/views.py:348 +msgid "SMS" +msgstr "رسائل نصية" + +#: apps/accounts/views.py:349 +msgid "Both" +msgstr "كلاهما" + +#: apps/accounts/views.py:352 +msgid "English" +msgstr "الإنجليزية" + +#: apps/accounts/views.py:353 +msgid "Arabic" +msgstr "العربية" + +#: apps/complaints/forms.py:59 apps/complaints/forms.py:407 #: templates/analytics/kpi_list.html:25 #: templates/complaints/inquiry_detail.html:502 #: templates/complaints/public_complaint_form.html:138 @@ -54,6 +118,7 @@ msgstr "التواريخ المهمة" #: templates/organizations/hospital_list.html:15 #: templates/organizations/patient_list.html:15 #: templates/organizations/physician_list.html:15 +#: templates/organizations/staff_list.html:75 #: templates/projects/project_list.html:42 #: templates/references/folder_view.html:107 #: templates/references/search.html:81 @@ -62,43 +127,46 @@ msgstr "التواريخ المهمة" msgid "Name" msgstr "الاسم" -#: apps/complaints/forms.py:62 apps/complaints/forms.py:263 +#: apps/complaints/forms.py:65 apps/complaints/forms.py:413 #: templates/complaints/public_complaint_form.html:145 #: templates/complaints/public_inquiry_form.html:21 msgid "Your full name" msgstr "اسمك الكامل" -#: apps/complaints/forms.py:68 apps/complaints/forms.py:281 +#: apps/complaints/forms.py:71 apps/complaints/forms.py:431 +#: templates/accounts/login.html:218 #: templates/accounts/onboarding/provisional_list.html:199 +#: templates/accounts/password_reset.html:181 #: templates/complaints/public_complaint_form.html:156 #: templates/complaints/public_inquiry_form.html:28 #: templates/core/public_submit.html:948 msgid "Email Address" msgstr "البريد الإلكتروني" -#: apps/complaints/forms.py:73 apps/complaints/forms.py:286 +#: apps/complaints/forms.py:76 apps/complaints/forms.py:436 msgid "your@email.com" msgstr "your@email.com" -#: apps/complaints/forms.py:79 apps/complaints/forms.py:269 +#: apps/complaints/forms.py:82 apps/complaints/forms.py:419 #: templates/accounts/onboarding/provisional_list.html:205 +#: templates/accounts/settings.html:96 #: templates/complaints/public_complaint_form.html:172 #: templates/complaints/public_inquiry_form.html:44 #: templates/core/public_submit.html:957 msgid "Phone Number" msgstr "رقم الهاتف" -#: apps/complaints/forms.py:85 apps/complaints/forms.py:275 +#: apps/complaints/forms.py:88 apps/complaints/forms.py:425 #: templates/complaints/public_complaint_form.html:179 #: templates/complaints/public_inquiry_form.html:51 #: templates/core/public_submit.html:958 msgid "Your phone number" msgstr "رقم هاتفك" -#: apps/complaints/forms.py:92 apps/complaints/forms.py:293 +#: apps/complaints/forms.py:95 apps/complaints/forms.py:443 #: templates/accounts/onboarding/provisional_list.html:100 #: templates/accounts/onboarding/provisional_list.html:227 -#: templates/actions/action_list.html:342 +#: templates/accounts/settings.html:385 templates/actions/action_list.html:342 #: templates/actions/action_list.html:435 #: templates/analytics/command_center.html:173 #: templates/analytics/command_center.html:487 @@ -111,16 +179,25 @@ msgstr "رقم هاتفك" #: templates/callcenter/inquiry_form.html:137 #: templates/callcenter/inquiry_list.html:123 #: templates/callcenter/inquiry_list.html:153 -#: templates/complaints/complaint_detail.html:146 +#: templates/complaints/complaint_detail.html:149 #: templates/complaints/complaint_form.html:81 #: templates/complaints/complaint_list.html:243 #: templates/complaints/complaint_list.html:344 +#: templates/complaints/complaint_threshold_form.html:40 +#: templates/complaints/complaint_threshold_list.html:38 +#: templates/complaints/complaint_threshold_list.html:92 +#: templates/complaints/escalation_rule_form.html:40 +#: templates/complaints/escalation_rule_list.html:38 +#: templates/complaints/escalation_rule_list.html:91 #: templates/complaints/inquiry_detail.html:141 #: templates/complaints/inquiry_form.html:58 #: templates/complaints/inquiry_list.html:226 #: templates/complaints/inquiry_list.html:306 #: templates/complaints/public_complaint_form.html:195 #: templates/complaints/public_inquiry_form.html:58 +#: templates/complaints/sla_config_form.html:40 +#: templates/complaints/sla_config_list.html:38 +#: templates/complaints/sla_config_list.html:105 #: templates/config/routing_rules.html:32 templates/config/sla_config.html:29 #: templates/core/public_submit.html:963 #: templates/feedback/feedback_form.html:247 @@ -131,6 +208,11 @@ msgstr "رقم هاتفك" #: templates/journeys/template_list.html:27 #: templates/organizations/department_list.html:17 #: templates/organizations/physician_list.html:18 +#: templates/organizations/staff_detail.html:89 +#: templates/organizations/staff_form.html:163 +#: templates/organizations/staff_hierarchy.html:200 +#: templates/organizations/staff_list.html:27 +#: templates/organizations/staff_list.html:80 #: templates/physicians/department_overview.html:54 #: templates/physicians/leaderboard.html:81 #: templates/physicians/physician_detail.html:51 @@ -141,35 +223,39 @@ msgstr "رقم هاتفك" #: templates/physicians/specialization_overview.html:54 #: templates/physicians/specialization_overview.html:119 #: templates/projects/project_list.html:43 +#: templates/px_sources/source_detail.html:121 #: templates/surveys/template_list.html:27 msgid "Hospital" msgstr "المستشفى" -#: apps/complaints/forms.py:94 apps/complaints/forms.py:295 +#: apps/complaints/forms.py:97 apps/complaints/forms.py:445 #: templates/accounts/onboarding/provisional_list.html:229 #: templates/appreciation/appreciation_send_form.html:46 +#: templates/complaints/complaint_threshold_form.html:43 +#: templates/complaints/escalation_rule_form.html:43 #: templates/complaints/public_complaint_form.html:201 #: templates/complaints/public_inquiry_form.html:64 +#: templates/complaints/sla_config_form.html:43 #: templates/core/public_submit.html:927 templates/core/select_hospital.html:4 #: templates/core/select_hospital.html:14 msgid "Select Hospital" msgstr "اختر المستشفى" -#: apps/complaints/forms.py:106 +#: apps/complaints/forms.py:109 msgid "Department (Optional)" msgstr "القسم (اختياري)" -#: apps/complaints/forms.py:108 +#: apps/complaints/forms.py:111 #: templates/accounts/onboarding/provisional_list.html:238 #: templates/appreciation/appreciation_send_form.html:69 msgid "Select Department" msgstr "اختر القسم" -#: apps/complaints/forms.py:120 +#: apps/complaints/forms.py:123 msgid "Complaint Category" msgstr "فئة الشكوى" -#: apps/complaints/forms.py:122 +#: apps/complaints/forms.py:125 #: templates/appreciation/appreciation_send_form.html:78 #: templates/complaints/public_complaint_form.html:216 #: templates/complaints/public_inquiry_form.html:82 @@ -177,20 +263,20 @@ msgstr "فئة الشكوى" msgid "Select Category" msgstr "اختر الفئة" -#: apps/complaints/forms.py:133 +#: apps/complaints/forms.py:136 msgid "Complaint Title" msgstr "عنوان الشكوى" -#: apps/complaints/forms.py:139 +#: apps/complaints/forms.py:142 msgid "Brief title of your complaint" msgstr "عنوان مختصر للشكوى" -#: apps/complaints/forms.py:145 +#: apps/complaints/forms.py:148 #: templates/complaints/public_complaint_form.html:248 msgid "Complaint Description" msgstr "وصف الشكوى" -#: apps/complaints/forms.py:151 +#: apps/complaints/forms.py:154 msgid "" "Please describe your complaint in detail. Our AI system will analyze and " "prioritize your complaint accordingly." @@ -198,7 +284,7 @@ msgstr "" "يرجى وصف الشكوى بالتفصيل. سيقوم نظام الذكاء الاصطناعي لدينا بتحليلها وتحديد " "أولويتها." -#: apps/complaints/forms.py:158 templates/actions/action_list.html:290 +#: apps/complaints/forms.py:161 templates/actions/action_list.html:290 #: templates/actions/action_list.html:434 #: templates/analytics/command_center.html:486 #: templates/callcenter/complaint_form.html:217 @@ -208,6 +294,10 @@ msgstr "" #: templates/complaints/complaint_form.html:200 #: templates/complaints/complaint_list.html:204 #: templates/complaints/complaint_list.html:343 +#: templates/complaints/escalation_rule_list.html:96 +#: templates/complaints/sla_config_form.html:61 +#: templates/complaints/sla_config_list.html:51 +#: templates/complaints/sla_config_list.html:106 #: templates/config/routing_rules.html:31 templates/core/public_submit.html:730 #: templates/observations/convert_to_action.html:37 #: templates/observations/observation_list.html:207 @@ -218,60 +308,66 @@ msgstr "" msgid "Severity" msgstr "الخطورة" -#: apps/complaints/forms.py:166 templates/actions/action_list.html:302 +#: apps/complaints/forms.py:169 templates/actions/action_list.html:302 #: templates/callcenter/complaint_form.html:231 -#: templates/complaints/complaint_detail.html:231 +#: templates/complaints/complaint_detail.html:246 #: templates/complaints/complaint_form.html:214 #: templates/complaints/complaint_list.html:216 +#: templates/complaints/escalation_rule_list.html:97 #: templates/complaints/inquiry_form.html:161 #: templates/complaints/inquiry_list.html:198 #: templates/complaints/inquiry_list.html:305 +#: templates/complaints/sla_config_form.html:81 +#: templates/complaints/sla_config_list.html:63 +#: templates/complaints/sla_config_list.html:107 #: templates/config/routing_rules.html:28 #: templates/feedback/feedback_form.html:230 #: templates/observations/convert_to_action.html:71 +#: templates/px_sources/source_user_dashboard.html:115 msgid "Priority" msgstr "الأولوية" -#: apps/complaints/forms.py:175 +#: apps/complaints/forms.py:178 msgid "Attach Documents (Optional)" msgstr "إرفاق مستندات (اختياري)" -#: apps/complaints/forms.py:183 +#: apps/complaints/forms.py:186 msgid "You can upload images, PDFs, or Word documents (max 10MB each)" msgstr "" "يمكنك رفع صور أو ملفات PDF أو مستندات Word (بحد أقصى 10 ميجابايت لكل ملف)" -#: apps/complaints/forms.py:225 +#: apps/complaints/forms.py:228 msgid "Maximum 5 files allowed" msgstr "يُسمح بحد أقصى 5 ملفات" -#: apps/complaints/forms.py:231 +#: apps/complaints/forms.py:234 msgid "File size must be less than 10MB" msgstr "يجب ألا يتجاوز حجم الملف 10 ميجابايت" -#: apps/complaints/forms.py:238 +#: apps/complaints/forms.py:241 msgid "Allowed file types: JPG, PNG, GIF, PDF, DOC, DOCX" msgstr "أنواع الملفات المسموحة: JPG، PNG، GIF، PDF، DOC، DOCX" -#: apps/complaints/forms.py:301 +#: apps/complaints/forms.py:451 msgid "Inquiry Type" msgstr "نوع الاستفسار" -#: apps/complaints/forms.py:314 templates/callcenter/inquiry_form.html:174 +#: apps/complaints/forms.py:464 templates/callcenter/inquiry_form.html:174 #: templates/callcenter/inquiry_list.html:151 #: templates/callcenter/interaction_list.html:55 #: templates/complaints/inquiry_form.html:139 #: templates/complaints/inquiry_list.html:301 #: templates/complaints/public_inquiry_form.html:94 #: templates/core/public_submit.html:984 +#: templates/px_sources/source_user_dashboard.html:189 msgid "Subject" msgstr "الموضوع" -#: apps/complaints/forms.py:320 +#: apps/complaints/forms.py:470 msgid "Brief subject" msgstr "موضوع مختصر" -#: apps/complaints/forms.py:326 templates/callcenter/inquiry_form.html:180 +#: apps/complaints/forms.py:476 templates/callcenter/inquiry_form.html:180 #: templates/complaints/inquiry_detail.html:249 #: templates/complaints/inquiry_form.html:145 #: templates/complaints/public_inquiry_form.html:107 @@ -280,7 +376,7 @@ msgstr "موضوع مختصر" msgid "Message" msgstr "الرسالة" -#: apps/complaints/forms.py:332 +#: apps/complaints/forms.py:482 msgid "Describe your inquiry" msgstr "اشرح استفسارك" @@ -311,15 +407,80 @@ msgstr "الاستبيانات السلبية (24 ساعة)" msgid "Negative Social Mentions" msgstr "الذكر السلبي في وسائل التواصل الاجتماعي" -#: apps/dashboard/views.py:122 +#: apps/dashboard/views.py:126 msgid "Low Call Center Ratings" msgstr "تقييمات منخفضة لمركز الاتصال" -#: apps/dashboard/views.py:128 templates/analytics/command_center.html:352 +#: apps/dashboard/views.py:132 templates/analytics/command_center.html:352 #: templates/analytics/dashboard.html:61 msgid "Avg Survey Score" msgstr "متوسط تقييم الاستبيان" +#: apps/px_sources/ui_views.py:93 +msgid "Source created successfully!" +msgstr "تم إنشاء المصدر بنجاح!" + +#: apps/px_sources/ui_views.py:97 +msgid "Error creating source: {}" +msgstr "حدث خطأ أثناء إنشاء المصدر: {}" + +#: apps/px_sources/ui_views.py:110 +msgid "You don't have permission to edit sources." +msgstr "ليس لديك صلاحية تعديل المصادر." + +#: apps/px_sources/ui_views.py:123 +msgid "Source updated successfully!" +msgstr "تم تحديث المصدر بنجاح!" + +#: apps/px_sources/ui_views.py:127 +msgid "Error updating source: {}" +msgstr "حدث خطأ أثناء تحديث المصدر: {}" + +#: apps/px_sources/ui_views.py:142 +msgid "You don't have permission to delete sources." +msgstr "ليس لديك صلاحية حذف المصادر." + +#: apps/px_sources/ui_views.py:150 +msgid "Source '{}' deleted successfully!" +msgstr "تم حذف المصدر '{}' بنجاح!" + +#: apps/px_sources/ui_views.py:232 +msgid "" +"You are not assigned as a source user. Please contact your administrator." +msgstr "لم يتم تعيينك كمستخدم مصدر. يرجى التواصل مع مدير النظام." + +#: apps/px_sources/ui_views.py:311 +msgid "User already has a source profile. A user can only manage one source." +msgstr "المستخدم لديه ملف مصدر بالفعل. يمكن للمستخدم إدارة مصدر واحد فقط." + +#: apps/px_sources/ui_views.py:322 +msgid "Source user created successfully!" +msgstr "تم إنشاء مستخدم المصدر بنجاح!" + +#: apps/px_sources/ui_views.py:326 +msgid "Error creating source user: {}" +msgstr "حدث خطأ أثناء إنشاء مستخدم المصدر: {}" + +#: apps/px_sources/ui_views.py:345 +msgid "You don't have permission to edit source users." +msgstr "ليس لديك صلاحية تعديل مستخدمي المصادر." + +#: apps/px_sources/ui_views.py:358 +msgid "Source user updated successfully!" +msgstr "تم تحديث مستخدم المصدر بنجاح!" + +#: apps/px_sources/ui_views.py:362 +msgid "Error updating source user: {}" +msgstr "حدث خطأ أثناء تحديث مستخدم المصدر: {}" + +#: apps/px_sources/ui_views.py:379 +msgid "You don't have permission to delete source users." +msgstr "ليس لديك صلاحية حذف مستخدمي المصادر." + +#: apps/px_sources/ui_views.py:388 +msgid "Source user '{}' deleted successfully!" +msgstr "تم حذف مستخدم المصدر '{}' بنجاح!" + #: apps/references/forms.py:24 msgid "Enter folder name (English)" msgstr "أدخل اسم المجلد (بالإنجليزية)" @@ -395,10 +556,14 @@ msgstr "الملف مطلوب عند رفع إصدار جديد." #: templates/feedback/feedback_list.html:191 #: templates/journeys/instance_list.html:127 #: templates/observations/observation_list.html:186 +#: templates/organizations/staff_hierarchy_d3.html:121 +#: templates/organizations/staff_list.html:56 +#: templates/organizations/staff_list.html:61 #: templates/physicians/physician_list.html:57 #: templates/references/dashboard.html:16 #: templates/references/folder_view.html:36 templates/references/search.html:16 -#: templates/references/search.html:53 templates/standards/search.html:23 +#: templates/references/search.html:53 +#: templates/social/social_platform.html:125 templates/standards/search.html:23 #: templates/standards/search.html:51 msgid "Search" msgstr "بحث" @@ -417,6 +582,8 @@ msgid "File Type" msgstr "نوع الملف" #: apps/references/forms.py:219 +#: templates/complaints/complaint_threshold_list.html:53 +#: templates/organizations/staff_list.html:48 msgid "All Types" msgstr "جميع الأنواع" @@ -429,6 +596,102 @@ msgstr "الوسوم" msgid "Filter by tags..." msgstr "التصفية حسب الوسوم..." +#: templates/accounts/email/password_reset_email.html:7 +msgid "Password Reset - PX360" +msgstr "إعادة تعيين كلمة المرور - PX360" + +#: templates/accounts/email/password_reset_email.html:101 +msgid "Password Reset Request" +msgstr "طلب إعادة تعيين كلمة المرور" + +#: templates/accounts/email/password_reset_email.html:102 +#: templates/accounts/login.html:196 +msgid "Patient Experience Management System" +msgstr "نظام إدارة تجربة المريض" + +#: templates/accounts/email/password_reset_email.html:107 +msgid "Hello, {{ user.email }}" +msgstr "مرحبًا، {{ user.email }}" + +#: templates/accounts/email/password_reset_email.html:109 +msgid "" +"We received a request to reset your password for your PX360 account. If you " +"made this request, click the button below to reset your password:" +msgstr "" +"لقد تلقينا طلبًا لإعادة تعيين كلمة المرور لحسابك في PX360. إذا كنت قد " +"قدمت هذا الطلب، يرجى النقر على الزر أدناه لإعادة تعيين كلمة المرور:" + +#: templates/accounts/email/password_reset_email.html:113 +msgid "Reset My Password" +msgstr "إعادة تعيين كلمة المرور" + +#: templates/accounts/email/password_reset_email.html:117 +msgid "Or copy and paste this link into your browser:" +msgstr "أو انسخ الرابط التالي والصقه في متصفحك:" + +#: templates/accounts/email/password_reset_email.html:121 +msgid "Important:" +msgstr "مهم:" + +#: templates/accounts/email/password_reset_email.html:122 +msgid "" +"This link will expire in 24 hours. If you didn't request this password " +"reset, please ignore this email and your password will remain unchanged." +msgstr "" +"ستنتهي صلاحية هذا الرابط خلال 24 ساعة. إذا لم تقم بطلب إعادة تعيين كلمة " +"المرور، يرجى تجاهل هذه الرسالة وستبقى كلمة المرور الخاصة بك دون تغيير." + +#: templates/accounts/email/password_reset_email.html:125 +msgid "If you continue to have problems, please contact our support team." +msgstr "إذا استمرت المشكلة، يرجى التواصل مع فريق الدعم." + +#: templates/accounts/email/password_reset_email.html:130 +msgid "This is an automated email from PX360" +msgstr "هذه رسالة بريد إلكتروني آلية من PX360" + +#: templates/accounts/email/password_reset_email.html:131 +msgid "All rights reserved." +msgstr "جميع الحقوق محفوظة." + +#: templates/accounts/email/password_reset_subject.txt:1 +msgid "Reset Your Password - PX360" +msgstr "إعادة تعيين كلمة المرور - PX360" + +#: templates/accounts/login.html:9 +msgid "Login - PX360" +msgstr "تسجيل الدخول - PX360" + +#: templates/accounts/login.html:195 +#: templates/accounts/onboarding/welcome.html:4 +msgid "Welcome to PX360" +msgstr "مرحبًا بك في PX360" + +#: templates/accounts/login.html:228 +#: templates/accounts/password_reset.html:191 +msgid "Enter your email" +msgstr "أدخل بريدك الإلكتروني" + +#: templates/accounts/login.html:237 +#: templates/accounts/onboarding/step_activation.html:57 +msgid "Password" +msgstr "كلمة المرور" + +#: templates/accounts/login.html:247 +msgid "Enter your password" +msgstr "أدخل كلمة المرور" + +#: templates/accounts/login.html:261 +msgid "Forgot password?" +msgstr "نسيت كلمة المرور؟" + +#: templates/accounts/login.html:267 +msgid "Sign In" +msgstr "تسجيل الدخول" + +#: templates/accounts/login.html:275 +msgid "Secure login powered by" +msgstr "تسجيل دخول آمن بدعم من" + #: templates/accounts/onboarding/checklist_list.html:4 msgid "Acknowledgement Checklist Items" msgstr "عناصر قائمة التحقق للتأكيد" @@ -460,6 +723,7 @@ msgstr "نص العنصر" #: templates/accounts/onboarding/checklist_list.html:51 #: templates/accounts/onboarding/content_list.html:52 #: templates/accounts/onboarding/progress_detail.html:108 +#: templates/accounts/settings.html:403 msgid "Role" msgstr "الدور" @@ -491,11 +755,17 @@ msgstr "الترتيب" #: templates/callcenter/complaint_list.html:159 #: templates/callcenter/inquiry_list.html:100 #: templates/callcenter/inquiry_list.html:155 -#: templates/complaints/complaint_detail.html:804 +#: templates/complaints/complaint_detail.html:1056 #: templates/complaints/complaint_list.html:191 #: templates/complaints/complaint_list.html:342 +#: templates/complaints/complaint_threshold_list.html:62 +#: templates/complaints/complaint_threshold_list.html:99 +#: templates/complaints/escalation_rule_list.html:61 +#: templates/complaints/escalation_rule_list.html:98 #: templates/complaints/inquiry_list.html:185 #: templates/complaints/inquiry_list.html:304 +#: templates/complaints/sla_config_list.html:75 +#: templates/complaints/sla_config_list.html:110 #: templates/config/routing_rules.html:34 templates/config/sla_config.html:35 #: templates/dashboard/command_center.html:241 #: templates/feedback/feedback_list.html:212 @@ -512,9 +782,22 @@ msgstr "الترتيب" #: templates/organizations/hospital_list.html:19 #: templates/organizations/patient_list.html:20 #: templates/organizations/physician_list.html:20 +#: templates/organizations/staff_detail.html:301 +#: templates/organizations/staff_form.html:184 +#: templates/organizations/staff_form.html:190 +#: templates/organizations/staff_list.html:38 +#: templates/organizations/staff_list.html:84 #: templates/physicians/physician_list.html:85 #: templates/physicians/physician_list.html:117 #: templates/projects/project_list.html:45 +#: templates/px_sources/source_confirm_delete.html:65 +#: templates/px_sources/source_detail.html:75 +#: templates/px_sources/source_detail.html:169 +#: templates/px_sources/source_list.html:66 +#: templates/px_sources/source_user_confirm_delete.html:72 +#: templates/px_sources/source_user_dashboard.html:114 +#: templates/px_sources/source_user_dashboard.html:192 +#: templates/px_sources/source_user_form.html:86 #: templates/standards/attachment_upload.html:83 #: templates/standards/compliance_form.html:62 #: templates/standards/dashboard.html:83 templates/standards/dashboard.html:130 @@ -533,11 +816,17 @@ msgstr "الحالة" #: templates/ai_engine/sentiment_detail.html:171 #: templates/callcenter/complaint_list.html:160 #: templates/callcenter/inquiry_list.html:156 -#: templates/complaints/complaint_detail.html:482 +#: templates/complaints/complaint_detail.html:496 #: templates/complaints/complaint_list.html:347 #: templates/complaints/inquiry_detail.html:275 #: templates/complaints/inquiry_list.html:309 #: templates/feedback/feedback_list.html:328 +#: templates/organizations/staff_detail.html:262 +#: templates/organizations/staff_detail.html:316 +#: templates/px_sources/source_detail.html:85 +#: templates/px_sources/source_detail.html:171 +#: templates/px_sources/source_user_dashboard.html:116 +#: templates/px_sources/source_user_dashboard.html:193 #: templates/references/document_view.html:83 #: templates/references/document_view.html:115 msgid "Created" @@ -558,19 +847,30 @@ msgstr "تاريخ الإنشاء" #: templates/callcenter/interaction_list.html:61 #: templates/complaints/analytics.html:184 #: templates/complaints/complaint_list.html:348 +#: templates/complaints/complaint_threshold_form.html:305 +#: templates/complaints/complaint_threshold_list.html:100 +#: templates/complaints/escalation_rule_list.html:99 #: templates/complaints/inquiry_list.html:310 +#: templates/complaints/sla_config_list.html:111 #: templates/feedback/feedback_list.html:329 #: templates/journeys/instance_list.html:213 #: templates/journeys/template_list.html:30 #: templates/observations/category_list.html:41 #: templates/observations/observation_list.html:314 +#: templates/organizations/staff_list.html:85 #: templates/physicians/department_overview.html:123 #: templates/physicians/leaderboard.html:142 #: templates/physicians/physician_list.html:118 #: templates/physicians/ratings_list.html:107 #: templates/physicians/specialization_overview.html:122 #: templates/projects/project_list.html:48 +#: templates/px_sources/source_detail.html:172 +#: templates/px_sources/source_list.html:67 +#: templates/px_sources/source_user_dashboard.html:117 +#: templates/px_sources/source_user_dashboard.html:194 #: templates/references/document_view.html:146 +#: templates/social/social_analytics.html:295 +#: templates/social/social_comment_detail.html:255 #: templates/standards/attachment_upload.html:111 #: templates/standards/dashboard.html:84 #: templates/standards/department_standards.html:52 @@ -586,11 +886,15 @@ msgstr "جميع الأدوار" #: templates/accounts/onboarding/checklist_list.html:94 #: templates/accounts/onboarding/progress_detail.html:136 +#: templates/organizations/staff_detail.html:255 +#: templates/organizations/staff_list.html:125 msgid "Yes" msgstr "نعم" #: templates/accounts/onboarding/checklist_list.html:97 #: templates/accounts/onboarding/progress_detail.html:138 +#: templates/organizations/staff_detail.html:257 +#: templates/organizations/staff_list.html:130 msgid "No" msgstr "لا" @@ -599,13 +903,36 @@ msgstr "لا" #: templates/appreciation/badge_form.html:141 #: templates/appreciation/badge_list.html:61 #: templates/appreciation/category_form.html:124 +#: templates/complaints/complaint_threshold_form.html:209 +#: templates/complaints/complaint_threshold_list.html:65 +#: templates/complaints/complaint_threshold_list.html:131 +#: templates/complaints/escalation_rule_form.html:221 +#: templates/complaints/escalation_rule_list.html:64 +#: templates/complaints/escalation_rule_list.html:144 +#: templates/complaints/sla_config_form.html:155 +#: templates/complaints/sla_config_list.html:78 +#: templates/complaints/sla_config_list.html:134 #: templates/journeys/instance_list.html:85 #: templates/observations/category_form.html:81 #: templates/observations/category_list.html:70 +#: templates/organizations/hierarchy_node.html:42 +#: templates/organizations/staff_detail.html:252 +#: templates/organizations/staff_detail.html:309 +#: templates/organizations/staff_list.html:41 +#: templates/organizations/staff_list.html:136 #: templates/physicians/physician_detail.html:26 #: templates/physicians/physician_list.html:88 #: templates/physicians/physician_list.html:154 #: templates/projects/project_list.html:22 +#: templates/px_sources/source_confirm_delete.html:68 +#: templates/px_sources/source_detail.html:27 +#: templates/px_sources/source_detail.html:78 +#: templates/px_sources/source_detail.html:184 +#: templates/px_sources/source_form.html:86 +#: templates/px_sources/source_list.html:44 +#: templates/px_sources/source_list.html:78 +#: templates/px_sources/source_user_confirm_delete.html:75 +#: templates/px_sources/source_user_form.html:90 #: templates/references/folder_form.html:173 #: templates/surveys/template_list.html:44 msgid "Active" @@ -614,10 +941,27 @@ msgstr "نشط" #: templates/accounts/onboarding/checklist_list.html:110 #: templates/accounts/onboarding/content_list.html:94 #: templates/appreciation/badge_list.html:63 +#: templates/complaints/complaint_threshold_list.html:66 +#: templates/complaints/complaint_threshold_list.html:133 +#: templates/complaints/escalation_rule_list.html:65 +#: templates/complaints/escalation_rule_list.html:146 +#: templates/complaints/sla_config_list.html:79 +#: templates/complaints/sla_config_list.html:136 #: templates/observations/category_list.html:72 +#: templates/organizations/hierarchy_node.html:44 +#: templates/organizations/staff_detail.html:311 +#: templates/organizations/staff_list.html:42 +#: templates/organizations/staff_list.html:138 #: templates/physicians/physician_detail.html:28 #: templates/physicians/physician_list.html:89 #: templates/physicians/physician_list.html:156 +#: templates/px_sources/source_confirm_delete.html:70 +#: templates/px_sources/source_detail.html:29 +#: templates/px_sources/source_detail.html:80 +#: templates/px_sources/source_detail.html:186 +#: templates/px_sources/source_list.html:47 +#: templates/px_sources/source_list.html:80 +#: templates/px_sources/source_user_confirm_delete.html:77 #: templates/surveys/template_list.html:46 msgid "Inactive" msgstr "غير نشط" @@ -627,7 +971,14 @@ msgstr "غير نشط" #: templates/appreciation/badge_form.html:13 #: templates/appreciation/badge_list.html:69 #: templates/appreciation/category_form.html:13 +#: templates/complaints/complaint_threshold_list.html:140 +#: templates/complaints/escalation_rule_list.html:153 +#: templates/complaints/sla_config_list.html:143 #: templates/observations/category_list.html:78 +#: templates/organizations/staff_detail.html:20 +#: templates/px_sources/source_detail.html:39 +#: templates/px_sources/source_detail.html:205 +#: templates/px_sources/source_list.html:90 #: templates/references/document_view.html:34 msgid "Edit" msgstr "تعديل" @@ -635,7 +986,14 @@ msgstr "تعديل" #: templates/accounts/onboarding/checklist_list.html:122 #: templates/accounts/onboarding/content_list.html:106 #: templates/appreciation/badge_list.html:72 +#: templates/complaints/complaint_threshold_list.html:150 +#: templates/complaints/escalation_rule_list.html:163 +#: templates/complaints/sla_config_list.html:153 #: templates/observations/category_list.html:86 +#: templates/px_sources/source_confirm_delete.html:20 +#: templates/px_sources/source_detail.html:42 +#: templates/px_sources/source_detail.html:210 +#: templates/px_sources/source_list.html:94 msgid "Delete" msgstr "حذف" @@ -700,8 +1058,8 @@ msgid "• Start improving patient experience!" msgstr "• ابدأ بتحسين تجربة المرضى!" #: templates/accounts/onboarding/complete.html:80 -msgid "Log In to PX360" -msgstr "تسجيل الدخول إلى PX360" +msgid "Go to Dashboard" +msgstr "الانتقال إلى لوحة التحكم" #: templates/accounts/onboarding/complete.html:85 msgid "A confirmation email has been sent to your registered email address." @@ -752,6 +1110,7 @@ msgstr "الأيقونة" #: templates/feedback/feedback_form.html:172 #: templates/feedback/feedback_list.html:322 #: templates/observations/public_new.html:278 +#: templates/px_sources/source_user_dashboard.html:111 #: templates/standards/attachment_upload.html:75 #: templates/standards/compliance_form.html:33 #: templates/standards/department_standards.html:49 @@ -808,6 +1167,7 @@ msgstr "البريد الإلكتروني:" #: templates/appreciation/appreciation_send_form.html:220 #: templates/callcenter/complaint_success.html:89 #: templates/callcenter/inquiry_success.html:103 +#: templates/emails/explanation_request.html:139 msgid "Hospital:" msgstr "المستشفى:" @@ -815,6 +1175,7 @@ msgstr "المستشفى:" #: templates/appreciation/appreciation_detail.html:156 #: templates/appreciation/appreciation_send_form.html:214 #: templates/callcenter/inquiry_success.html:109 +#: templates/emails/explanation_request.html:143 msgid "Department:" msgstr "القسم:" @@ -892,6 +1253,8 @@ msgstr "مكتملة" #: templates/complaints/inquiry_list.html:134 #: templates/observations/observation_list.html:143 #: templates/observations/public_track.html:316 +#: templates/px_sources/source_user_dashboard.html:131 +#: templates/px_sources/source_user_dashboard.html:214 msgid "In Progress" msgstr "قيد التنفيذ" @@ -905,12 +1268,17 @@ msgstr "البحث عن مستخدمين..." #: templates/accounts/onboarding/provisional_list.html:99 #: templates/appreciation/appreciation_send_form.html:37 +#: templates/px_sources/source_detail.html:122 +#: templates/px_sources/source_detail.html:167 +#: templates/px_sources/source_user_confirm_delete.html:61 +#: templates/px_sources/source_user_form.html:59 +#: templates/px_sources/source_user_form.html:77 msgid "User" msgstr "مستخدم" #: templates/accounts/onboarding/provisional_list.html:101 #: templates/accounts/onboarding/provisional_list.html:236 -#: templates/actions/action_list.html:355 +#: templates/accounts/settings.html:391 templates/actions/action_list.html:355 #: templates/analytics/command_center.html:186 #: templates/analytics/command_center.html:488 #: templates/analytics/command_center.html:520 @@ -919,8 +1287,8 @@ msgstr "مستخدم" #: templates/appreciation/leaderboard.html:97 #: templates/callcenter/complaint_form.html:143 #: templates/callcenter/inquiry_form.html:147 -#: templates/complaints/complaint_detail.html:150 -#: templates/complaints/complaint_detail.html:252 +#: templates/complaints/complaint_detail.html:153 +#: templates/complaints/complaint_detail.html:267 #: templates/complaints/complaint_form.html:91 #: templates/complaints/complaint_list.html:256 #: templates/complaints/inquiry_detail.html:145 @@ -933,6 +1301,10 @@ msgstr "مستخدم" #: templates/observations/observation_list.html:232 #: templates/observations/observation_list.html:312 #: templates/organizations/physician_list.html:19 +#: templates/organizations/staff_detail.html:93 +#: templates/organizations/staff_form.html:172 +#: templates/organizations/staff_hierarchy.html:211 +#: templates/organizations/staff_list.html:81 #: templates/physicians/leaderboard.html:92 #: templates/physicians/leaderboard.html:137 #: templates/physicians/physician_detail.html:56 @@ -968,10 +1340,14 @@ msgid "No provisional users found" msgstr "لا يوجد مستخدمون مؤقتون" #: templates/accounts/onboarding/provisional_list.html:212 +#: templates/accounts/settings.html:80 +#: templates/organizations/staff_form.html:37 msgid "First Name" msgstr "الاسم الأول" #: templates/accounts/onboarding/provisional_list.html:219 +#: templates/accounts/settings.html:85 +#: templates/organizations/staff_form.html:48 msgid "Last Name" msgstr "اسم العائلة" @@ -982,13 +1358,30 @@ msgstr "اسم العائلة" #: templates/appreciation/category_form.html:133 #: templates/callcenter/complaint_form.html:274 #: templates/callcenter/inquiry_form.html:233 -#: templates/complaints/complaint_detail.html:847 -#: templates/complaints/complaint_detail.html:904 -#: templates/complaints/complaint_detail.html:1060 +#: templates/complaints/complaint_detail.html:1099 +#: templates/complaints/complaint_detail.html:1156 +#: templates/complaints/complaint_detail.html:1240 +#: templates/complaints/complaint_detail.html:1383 #: templates/complaints/complaint_form.html:266 +#: templates/complaints/complaint_threshold_form.html:241 +#: templates/complaints/escalation_rule_form.html:253 #: templates/complaints/inquiry_form.html:237 +#: templates/complaints/sla_config_form.html:187 #: templates/observations/category_form.html:91 #: templates/observations/convert_to_action.html:91 +#: templates/organizations/staff_detail.html:341 +#: templates/organizations/staff_detail.html:361 +#: templates/organizations/staff_detail.html:381 +#: templates/organizations/staff_form.html:12 +#: templates/organizations/staff_form.html:204 +#: templates/organizations/staff_list.html:228 +#: templates/organizations/staff_list.html:248 +#: templates/organizations/staff_list.html:268 +#: templates/px_sources/source_confirm_delete.html:32 +#: templates/px_sources/source_confirm_delete.html:107 +#: templates/px_sources/source_form.html:99 +#: templates/px_sources/source_user_confirm_delete.html:111 +#: templates/px_sources/source_user_form.html:136 #: templates/references/document_form.html:301 #: templates/references/document_form.html:305 #: templates/references/folder_form.html:224 @@ -1018,7 +1411,7 @@ msgid "Failed to send invitation." msgstr "فشل إرسال الدعوة." #: templates/accounts/onboarding/provisional_list.html:333 -#: templates/accounts/onboarding/step_activation.html:229 +#: templates/accounts/onboarding/step_activation.html:251 msgid "An error occurred. Please try again." msgstr "حدث خطأ. يرجى المحاولة مرة أخرى." @@ -1036,96 +1429,81 @@ msgid "" "account credentials to get started." msgstr "تهانينا! لقد أكملت عملية الإعداد. أنشئ بيانات حسابك للبدء." -#: templates/accounts/onboarding/step_activation.html:26 +#: templates/accounts/onboarding/step_activation.html:27 +#: templates/organizations/staff_detail.html:244 msgid "Username" msgstr "اسم المستخدم" -#: templates/accounts/onboarding/step_activation.html:35 +#: templates/accounts/onboarding/step_activation.html:36 msgid "Username can only contain letters, numbers, underscores, and hyphens" msgstr "يمكن أن يحتوي اسم المستخدم على أحرف وأرقام وشرطة سفلية وشرطة فقط" -#: templates/accounts/onboarding/step_activation.html:37 +#: templates/accounts/onboarding/step_activation.html:38 msgid "Choose a unique username (3+ characters)" msgstr "اختر اسم مستخدم فريد (3 أحرف أو أكثر)" -#: templates/accounts/onboarding/step_activation.html:43 -#: templates/complaints/inquiry_detail.html:495 -#: templates/complaints/inquiry_detail.html:516 -#: templates/complaints/inquiry_form.html:179 -#: templates/complaints/inquiry_form.html:194 -#: templates/core/public_submit.html:814 -#: templates/feedback/feedback_form.html:137 -#: templates/observations/observation_detail.html:275 -#: templates/observations/public_new.html:364 -#: templates/organizations/patient_list.html:18 -#: templates/physicians/physician_detail.html:62 -msgid "Email" -msgstr "البريد الإلكتروني" - -#: templates/accounts/onboarding/step_activation.html:56 -msgid "Password" -msgstr "كلمة المرور" - -#: templates/accounts/onboarding/step_activation.html:65 +#: templates/accounts/onboarding/step_activation.html:66 +#: templates/accounts/settings.html:292 msgid "Minimum 8 characters" msgstr "8 أحرف على الأقل" -#: templates/accounts/onboarding/step_activation.html:79 +#: templates/accounts/onboarding/step_activation.html:80 +#: templates/accounts/password_reset_confirm.html:209 msgid "Confirm Password" msgstr "تأكيد كلمة المرور" -#: templates/accounts/onboarding/step_activation.html:93 +#: templates/accounts/onboarding/step_activation.html:94 msgid "" "Your digital signature from the previous step will be attached to your " "account activation for compliance records." msgstr "" "سيتم إرفاق توقيعك الرقمي من الخطوة السابقة بتفعيل الحساب لأغراض التوثيق." -#: templates/accounts/onboarding/step_activation.html:100 -#: templates/accounts/onboarding/step_activation.html:222 -#: templates/accounts/onboarding/step_activation.html:228 +#: templates/accounts/onboarding/step_activation.html:101 +#: templates/accounts/onboarding/step_activation.html:243 +#: templates/accounts/onboarding/step_activation.html:250 msgid "Activate Account" msgstr "تفعيل الحساب" -#: templates/accounts/onboarding/step_activation.html:104 +#: templates/accounts/onboarding/step_activation.html:105 msgid "Back" msgstr "رجوع" -#: templates/accounts/onboarding/step_activation.html:132 +#: templates/accounts/onboarding/step_activation.html:133 msgid "Very Weak" msgstr "ضعيفة جدًا" -#: templates/accounts/onboarding/step_activation.html:135 +#: templates/accounts/onboarding/step_activation.html:136 msgid "Weak" msgstr "ضعيفة" -#: templates/accounts/onboarding/step_activation.html:138 +#: templates/accounts/onboarding/step_activation.html:139 #: templates/physicians/leaderboard.html:245 msgid "Good" msgstr "جيد" -#: templates/accounts/onboarding/step_activation.html:141 +#: templates/accounts/onboarding/step_activation.html:142 msgid "Strong" msgstr "قوية" -#: templates/accounts/onboarding/step_activation.html:163 +#: templates/accounts/onboarding/step_activation.html:164 msgid "Passwords match" msgstr "كلمتا المرور متطابقتان" -#: templates/accounts/onboarding/step_activation.html:166 -#: templates/accounts/onboarding/step_activation.html:186 +#: templates/accounts/onboarding/step_activation.html:167 +#: templates/accounts/onboarding/step_activation.html:203 msgid "Passwords do not match" msgstr "كلمتا المرور غير متطابقتين" -#: templates/accounts/onboarding/step_activation.html:181 +#: templates/accounts/onboarding/step_activation.html:198 msgid "Please fill in all fields" msgstr "يرجى تعبئة جميع الحقول" -#: templates/accounts/onboarding/step_activation.html:191 +#: templates/accounts/onboarding/step_activation.html:208 msgid "Password must be at least 8 characters" msgstr "يجب أن تكون كلمة المرور 8 أحرف على الأقل" -#: templates/accounts/onboarding/step_activation.html:197 +#: templates/accounts/onboarding/step_activation.html:214 msgid "Activating..." msgstr "جارٍ التفعيل..." @@ -1159,9 +1537,13 @@ msgstr "" #: templates/accounts/onboarding/step_checklist.html:102 #: templates/ai_engine/sentiment_list.html:99 #: templates/complaints/complaint_list.html:305 +#: templates/complaints/complaint_threshold_list.html:77 +#: templates/complaints/escalation_rule_list.html:76 #: templates/complaints/inquiry_form.html:325 #: templates/complaints/inquiry_list.html:266 +#: templates/complaints/sla_config_list.html:90 #: templates/observations/observation_list.html:282 +#: templates/organizations/staff_hierarchy.html:232 #: templates/physicians/leaderboard.html:116 #: templates/physicians/physician_list.html:97 #: templates/physicians/ratings_list.html:84 @@ -1178,7 +1560,7 @@ msgid "Back to Content" msgstr "العودة إلى المحتوى" #: templates/accounts/onboarding/step_content.html:4 -#: templates/layouts/partials/sidebar.html:304 +#: templates/layouts/partials/sidebar.html:354 msgid "Onboarding" msgstr "تهيئة المستخدم" @@ -1218,10 +1600,6 @@ msgstr "التالي" msgid "Review Checklist" msgstr "مراجعة قائمة التحقق" -#: templates/accounts/onboarding/welcome.html:4 -msgid "Welcome to PX360" -msgstr "مرحبًا بك في PX360" - #: templates/accounts/onboarding/welcome.html:16 msgid "Welcome to PX360!" msgstr "مرحبًا بك في PX360!" @@ -1269,13 +1647,412 @@ msgstr "بدء الإعداد" msgid "Estimated time: 10-15 minutes" msgstr "الوقت المتوقع: 10–15 دقيقة" +#: templates/accounts/password_reset.html:9 +msgid "Reset Password - PX360" +msgstr "إعادة تعيين كلمة المرور - PX360" + +#: templates/accounts/password_reset.html:158 +msgid "Reset Password" +msgstr "إعادة تعيين كلمة المرور" + +#: templates/accounts/password_reset.html:159 +msgid "Enter your email to receive reset instructions" +msgstr "أدخل بريدك الإلكتروني لتلقي تعليمات إعادة التعيين" + +#: templates/accounts/password_reset.html:204 +msgid "Send Reset Link" +msgstr "إرسال رابط إعادة التعيين" + +#: templates/accounts/password_reset.html:213 +#: templates/accounts/password_reset_confirm.html:244 +msgid "Back to Login" +msgstr "العودة إلى تسجيل الدخول" + +#: templates/accounts/password_reset.html:217 +#: templates/accounts/password_reset_confirm.html:248 +msgid "Secure password reset powered by" +msgstr "إعادة تعيين كلمة مرور آمنة بدعم من" + +#: templates/accounts/password_reset_confirm.html:9 +msgid "Set New Password - PX360" +msgstr "تعيين كلمة مرور جديدة - PX360" + +#: templates/accounts/password_reset_confirm.html:164 +#: templates/accounts/password_reset_confirm.html:225 +msgid "Set New Password" +msgstr "تعيين كلمة مرور جديدة" + +#: templates/accounts/password_reset_confirm.html:165 +msgid "Enter your new password below" +msgstr "أدخل كلمة المرور الجديدة أدناه" + +#: templates/accounts/password_reset_confirm.html:188 +#: templates/accounts/settings.html:290 +msgid "New Password" +msgstr "كلمة المرور الجديدة" + +#: templates/accounts/password_reset_confirm.html:232 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used or has expired." +msgstr "" +"رابط إعادة تعيين كلمة المرور غير صالح، وقد يكون ذلك بسبب استخدامه مسبقًا " +"أو انتهاء صلاحيته." + +#: templates/accounts/password_reset_confirm.html:235 +msgid "Request New Reset Link" +msgstr "طلب رابط إعادة تعيين جديد" + +#: templates/accounts/settings.html:4 +#: templates/accounts/settings.html:11 +#: templates/layouts/partials/sidebar.html:338 +#: templates/layouts/partials/topbar.html:113 +msgid "Settings" +msgstr "الإعدادات" + +#: templates/accounts/settings.html:24 +#: templates/layouts/partials/topbar.html:36 +msgid "Notifications" +msgstr "الإشعارات" + +#: templates/accounts/settings.html:29 +msgid "Security" +msgstr "الأمان" + +#: templates/accounts/settings.html:34 +msgid "Account" +msgstr "الحساب" + +#: templates/accounts/settings.html:40 +msgid "SLA" +msgstr "اتفاقية مستوى الخدمة" + +#: templates/accounts/settings.html:54 +msgid "Profile Settings" +msgstr "إعدادات الملف الشخصي" + +#: templates/accounts/settings.html:72 +msgid "Change Avatar" +msgstr "تغيير الصورة الشخصية" + +#: templates/accounts/settings.html:92 +msgid "Contact administrator to change email" +msgstr "يرجى التواصل مع مدير النظام لتغيير البريد الإلكتروني" + +#: templates/accounts/settings.html:98 +msgid "Required for SMS notifications" +msgstr "مطلوب لتلقي إشعارات الرسائل النصية" + +#: templates/accounts/settings.html:102 +#: templates/ai_engine/analyze_text.html:133 +#: templates/ai_engine/sentiment_dashboard.html:236 +#: templates/ai_engine/sentiment_list.html:126 +msgid "Language" +msgstr "اللغة" + +#: templates/accounts/settings.html:113 +msgid "Bio" +msgstr "نبذة تعريفية" + +#: templates/accounts/settings.html:119 +msgid "Save Profile" +msgstr "حفظ الملف الشخصي" + +#: templates/accounts/settings.html:130 +msgid "Profile Tips" +msgstr "نصائح الملف الشخصي" + +#: templates/accounts/settings.html:135 +msgid "Add a professional photo to help others recognize you" +msgstr "أضف صورة شخصية احترافية لمساعدة الآخرين على التعرف عليك" + +#: templates/accounts/settings.html:139 +msgid "Keep your phone number updated for SMS notifications" +msgstr "احرص على تحديث رقم هاتفك لتلقي إشعارات الرسائل النصية" + +#: templates/accounts/settings.html:143 +msgid "Add a bio to share your role and expertise" +msgstr "أضف نبذة تعريفية لعرض دورك وخبراتك" + +#: templates/accounts/settings.html:147 +msgid "Choose your preferred language for the interface" +msgstr "اختر لغتك المفضلة لواجهة النظام" + +#: templates/accounts/settings.html:161 +msgid "Notification Preferences" +msgstr "تفضيلات الإشعارات" + +#: templates/accounts/settings.html:174 +msgid "Email Notifications" +msgstr "إشعارات البريد الإلكتروني" + +#: templates/accounts/settings.html:177 +msgid "" +"Receive notifications via email for complaint assignments, updates, and " +"escalations" +msgstr "" +"استلام الإشعارات عبر البريد الإلكتروني لتكليفات الشكاوى والتحديثات " +"وحالات التصعيد" + +#: templates/accounts/settings.html:187 +msgid "SMS Notifications" +msgstr "إشعارات الرسائل النصية" + +#: templates/accounts/settings.html:190 +msgid "Receive critical notifications via SMS (requires phone number)" +msgstr "استلام الإشعارات الهامة عبر الرسائل النصية (يتطلب رقم هاتف)" + +#: templates/accounts/settings.html:197 +msgid "Preferred Notification Channel" +msgstr "قناة الإشعارات المفضلة" + +#: templates/accounts/settings.html:206 +msgid "Default channel for general notifications" +msgstr "القناة الافتراضية للإشعارات العامة" + +#: templates/accounts/settings.html:211 +msgid "Explanation Request Channel" +msgstr "قناة طلب الإيضاحات" + +#: templates/accounts/settings.html:220 +msgid "Default channel when requesting complaint explanations" +msgstr "القناة الافتراضية عند طلب إيضاحات الشكاوى" + +#: templates/accounts/settings.html:225 +msgid "Phone Number for SMS" +msgstr "رقم الهاتف للرسائل النصية" + +#: templates/accounts/settings.html:228 +msgid "Required to receive SMS notifications" +msgstr "مطلوب لاستلام إشعارات الرسائل النصية" + +#: templates/accounts/settings.html:233 +msgid "Save Preferences" +msgstr "حفظ التفضيلات" + +#: templates/accounts/settings.html:244 +msgid "Notification Tips" +msgstr "نصائح الإشعارات" + +#: templates/accounts/settings.html:247 +msgid "" +"Configure how you receive notifications to stay informed without being " +"overwhelmed." +msgstr "" +"قم بضبط طريقة استلام الإشعارات لتبقى على اطلاع دون التعرض لكثرة التنبيهات." + +#: templates/accounts/settings.html:252 +msgid "Email is best for detailed information" +msgstr "البريد الإلكتروني مناسب للمعلومات التفصيلية" + +#: templates/accounts/settings.html:256 +msgid "SMS is best for urgent alerts" +msgstr "الرسائل النصية مناسبة للتنبيهات العاجلة" + +#: templates/accounts/settings.html:260 +msgid "In-app notifications are always enabled" +msgstr "الإشعارات داخل النظام مفعّلة دائمًا" + +#: templates/accounts/settings.html:274 +msgid "Security Settings" +msgstr "إعدادات الأمان" + +#: templates/accounts/settings.html:285 +msgid "Current Password" +msgstr "كلمة المرور الحالية" + +#: templates/accounts/settings.html:296 +msgid "Confirm New Password" +msgstr "تأكيد كلمة المرور الجديدة" + +#: templates/accounts/settings.html:302 +msgid "Change Password" +msgstr "تغيير كلمة المرور" + +#: templates/accounts/settings.html:313 +msgid "Password History" +msgstr "سجل كلمات المرور" + +#: templates/accounts/settings.html:317 +msgid "Last password change:" +msgstr "آخر تغيير لكلمة المرور:" + +#: templates/accounts/settings.html:317 +msgid "Recently" +msgstr "مؤخرًا" + +#: templates/accounts/settings.html:317 +msgid "Never" +msgstr "أبدًا" + +#: templates/accounts/settings.html:327 +msgid "Security Tips" +msgstr "نصائح الأمان" + +#: templates/accounts/settings.html:332 +msgid "Use strong passwords with letters, numbers, and symbols" +msgstr "استخدم كلمات مرور قوية تحتوي على حروف وأرقام ورموز" + +#: templates/accounts/settings.html:336 +msgid "Don't reuse passwords from other sites" +msgstr "لا تعِد استخدام كلمات المرور من مواقع أخرى" + +#: templates/accounts/settings.html:340 +msgid "Change your password regularly" +msgstr "قم بتغيير كلمة المرور بشكل دوري" + +#: templates/accounts/settings.html:344 +msgid "Never share your password with anyone" +msgstr "لا تشارك كلمة المرور مع أي شخص" + +#: templates/accounts/settings.html:358 +msgid "Account Information" +msgstr "معلومات الحساب" + +#: templates/accounts/settings.html:367 +msgid "Full Name" +msgstr "الاسم الكامل" + +#: templates/accounts/settings.html:379 +msgid "Member Since" +msgstr "عضو منذ" + +#: templates/accounts/settings.html:387 +#: templates/accounts/settings.html:393 +msgid "Not assigned" +msgstr "غير معيّن" + +#: templates/accounts/settings.html:397 +#: templates/organizations/staff_detail.html:97 +#: templates/organizations/staff_form.html:113 +#: templates/organizations/staff_list.html:78 +msgid "Employee ID" +msgstr "الرقم الوظيفي" + +#: templates/accounts/settings.html:407 +#: templates/complaints/complaint_detail.html:997 +msgid "PX Admin" +msgstr "مشرف PX" + +#: templates/accounts/settings.html:409 +#: templates/complaints/complaint_detail.html:998 +msgid "Hospital Admin" +msgstr "مشرف المستشفى" + +#: templates/accounts/settings.html:411 +msgid "Department Head" +msgstr "رئيس القسم" + +#: templates/accounts/settings.html:413 +#: templates/complaints/complaint_form.html:100 +#: templates/complaints/complaint_form.html:230 +#: templates/complaints/inquiry_form.html:177 +#: templates/layouts/partials/sidebar.html:174 +#: templates/organizations/staff_hierarchy_d3.html:13 +msgid "Staff" +msgstr "الموظفين" + +#: templates/accounts/settings.html:427 +msgid "Account Info" +msgstr "معلومات الحساب" + +#: templates/accounts/settings.html:430 +msgid "" +"This information is managed by your organization's administrators. Contact " +"them if you need to update your hospital, department, or employee ID." +msgstr "" +"تتم إدارة هذه المعلومات من قبل مسؤولي مؤسستك. يرجى التواصل معهم في حال " +"الحاجة إلى تحديث المستشفى أو القسم أو الرقم الوظيفي." + +#: templates/accounts/settings.html:444 +msgid "SLA Configuration" +msgstr "إعدادات اتفاقية مستوى الخدمة" + +#: templates/accounts/settings.html:449 +msgid "" +"Configure Service Level Agreements, escalation rules, and complaint " +"thresholds for your organization." +msgstr "" +"قم بإعداد اتفاقيات مستوى الخدمة وقواعد التصعيد وحدود الشكاوى الخاصة " +"بمؤسستك." + +#: templates/accounts/settings.html:458 +#: templates/complaints/sla_config_form.html:4 +#: templates/complaints/sla_config_list.html:4 +#: templates/complaints/sla_config_list.html:12 +#: templates/config/dashboard.html:24 +msgid "SLA Configurations" +msgstr "إعدادات اتفاقيات مستوى الخدمة" + +#: templates/accounts/settings.html:459 +msgid "Manage deadline settings for complaint resolution" +msgstr "إدارة إعدادات المهل الزمنية لمعالجة الشكاوى" + +#: templates/accounts/settings.html:460 +msgid "Manage" +msgstr "إدارة" + +#: templates/accounts/settings.html:470 +#: templates/complaints/escalation_rule_form.html:4 +#: templates/complaints/escalation_rule_list.html:4 +#: templates/complaints/escalation_rule_list.html:12 +msgid "Escalation Rules" +msgstr "قواعد التصعيد" + +#: templates/accounts/settings.html:471 +msgid "Configure automatic escalation when deadlines are exceeded" +msgstr "إعداد التصعيد التلقائي عند تجاوز المهل الزمنية" + +#: templates/accounts/settings.html:472 +msgid "Configure" +msgstr "إعداد" + +#: templates/accounts/settings.html:482 +#: templates/complaints/complaint_threshold_form.html:4 +#: templates/complaints/complaint_threshold_list.html:4 +#: templates/complaints/complaint_threshold_list.html:12 +msgid "Complaint Thresholds" +msgstr "حدود الشكاوى" + +#: templates/accounts/settings.html:483 +msgid "Set alert thresholds for complaint volume monitoring" +msgstr "تحديد حدود التنبيه لمراقبة حجم الشكاوى" + +#: templates/accounts/settings.html:484 +msgid "Setup" +msgstr "تهيئة" + +#: templates/accounts/settings.html:493 +msgid "SLA Best Practices" +msgstr "أفضل ممارسات اتفاقية مستوى الخدمة" + +#: templates/accounts/settings.html:498 +msgid "Set realistic deadlines based on complaint severity" +msgstr "تحديد مهل زمنية واقعية بناءً على درجة خطورة الشكوى" + +#: templates/accounts/settings.html:502 +msgid "Configure multiple escalation levels for smooth handoffs" +msgstr "إعداد مستويات تصعيد متعددة لضمان انتقال سلس للمهام" + +#: templates/accounts/settings.html:506 +msgid "Monitor thresholds to identify trends and issues early" +msgstr "مراقبة الحدود لاكتشاف الاتجاهات والمشكلات مبكرًا" + +#: templates/accounts/settings.html:510 +msgid "Review and adjust SLA settings regularly" +msgstr "مراجعة وتحديث إعدادات اتفاقية مستوى الخدمة بشكل دوري" + +#: templates/accounts/settings.html:536 +msgid "Passwords do not match!" +msgstr "كلمتا المرور غير متطابقتين!" + #: templates/actions/action_detail.html:154 msgid "Back to Actions" msgstr "العودة إلى الإجراءات" #: templates/actions/action_detail.html:227 #: templates/appreciation/appreciation_detail.html:12 -#: templates/complaints/complaint_detail.html:182 +#: templates/complaints/complaint_detail.html:185 #: templates/complaints/inquiry_detail.html:179 #: templates/observations/observation_detail.html:199 msgid "Details" @@ -1298,13 +2075,14 @@ msgid "Approval Required" msgstr "يتطلب الموافقة" #: templates/actions/action_detail.html:496 -#: templates/complaints/complaint_detail.html:634 +#: templates/complaints/complaint_detail.html:918 #: templates/complaints/inquiry_detail.html:390 +#: templates/px_sources/source_detail.html:96 +#: templates/px_sources/source_user_dashboard.html:69 msgid "Quick Actions" msgstr "إجراءات سريعة" #: templates/actions/action_detail.html:502 -#: templates/complaints/complaint_detail.html:680 #: templates/complaints/inquiry_detail.html:396 #: templates/config/routing_rules.html:33 #: templates/feedback/feedback_detail.html:475 @@ -1313,7 +2091,7 @@ msgid "Assign To" msgstr "تعيين إلى" #: templates/actions/action_detail.html:522 -#: templates/complaints/complaint_detail.html:700 +#: templates/complaints/complaint_detail.html:925 #: templates/complaints/inquiry_detail.html:416 #: templates/feedback/feedback_detail.html:455 #: templates/observations/observation_detail.html:454 @@ -1321,14 +2099,14 @@ msgid "Change Status" msgstr "تغيير الحالة" #: templates/actions/action_detail.html:531 -#: templates/complaints/complaint_detail.html:709 +#: templates/complaints/complaint_detail.html:934 #: templates/complaints/inquiry_detail.html:425 msgid "Optional note..." msgstr "ملاحظة اختيارية..." #: templates/actions/action_detail.html:549 -#: templates/complaints/complaint_detail.html:733 -#: templates/complaints/complaint_detail.html:741 +#: templates/complaints/complaint_detail.html:963 +#: templates/complaints/complaint_detail.html:971 #: templates/complaints/inquiry_detail.html:437 #: templates/complaints/inquiry_detail.html:445 #: templates/observations/observation_detail.html:420 @@ -1337,13 +2115,13 @@ msgid "Add Note" msgstr "إضافة ملاحظة" #: templates/actions/action_detail.html:555 -#: templates/complaints/complaint_detail.html:739 +#: templates/complaints/complaint_detail.html:969 #: templates/complaints/inquiry_detail.html:443 msgid "Enter your note..." msgstr "أدخل ملاحظتك..." #: templates/actions/action_detail.html:566 -#: templates/complaints/complaint_detail.html:750 +#: templates/complaints/complaint_detail.html:980 #: templates/complaints/inquiry_detail.html:527 msgid "Assignment Info" msgstr "معلومات التعيين" @@ -1359,7 +2137,7 @@ msgid "Escalate Action" msgstr "تصعيد الإجراء" #: templates/actions/action_detail.html:662 -#: templates/complaints/complaint_detail.html:841 +#: templates/complaints/complaint_detail.html:1093 msgid "Reason for Escalation" msgstr "سبب التصعيد" @@ -1369,6 +2147,7 @@ msgstr "اشرح سبب الحاجة إلى تصعيد هذا الإجراء..." #: templates/actions/action_list.html:139 #: templates/observations/observation_list.html:113 +#: templates/social/social_platform.html:47 msgid "Total" msgstr "الإجمالي" @@ -1380,6 +2159,8 @@ msgstr "الإجمالي" #: templates/complaints/analytics.html:51 #: templates/complaints/complaint_list.html:125 #: templates/complaints/inquiry_list.html:119 +#: templates/px_sources/source_user_dashboard.html:129 +#: templates/px_sources/source_user_dashboard.html:212 msgid "Open" msgstr "مفتوح" @@ -1411,11 +2192,12 @@ msgstr "العنوان، الوصف..." #: templates/callcenter/inquiry_form.html:162 #: templates/callcenter/inquiry_list.html:111 #: templates/callcenter/inquiry_list.html:154 -#: templates/complaints/complaint_detail.html:215 +#: templates/complaints/complaint_detail.html:230 #: templates/complaints/complaint_form.html:116 #: templates/complaints/complaint_form.html:169 #: templates/complaints/complaint_list.html:228 #: templates/complaints/complaint_list.html:341 +#: templates/complaints/complaint_threshold_list.html:97 #: templates/complaints/inquiry_detail.html:206 #: templates/complaints/inquiry_form.html:124 #: templates/complaints/inquiry_list.html:210 @@ -1433,6 +2215,8 @@ msgstr "العنوان، الوصف..." #: templates/observations/public_new.html:232 #: templates/observations/public_success.html:216 #: templates/observations/public_track.html:273 +#: templates/px_sources/source_user_dashboard.html:113 +#: templates/px_sources/source_user_dashboard.html:191 #: templates/standards/compliance_form.html:41 #: templates/standards/search.html:39 templates/standards/search.html:81 #: templates/standards/standard_detail.html:32 @@ -1441,11 +2225,13 @@ msgstr "الفئة" #: templates/actions/action_list.html:329 #: templates/actions/action_list.html:431 -#: templates/complaints/complaint_detail.html:224 +#: templates/complaints/complaint_detail.html:239 #: templates/complaints/complaint_form.html:225 #: templates/complaints/inquiry_detail.html:212 #: templates/complaints/inquiry_form.html:172 #: templates/dashboard/command_center.html:238 +#: templates/px_sources/source_user_confirm_delete.html:69 +#: templates/px_sources/source_user_dashboard.html:89 #: templates/standards/compliance_form.html:37 #: templates/standards/search.html:28 templates/standards/search.html:80 #: templates/standards/standard_detail.html:28 @@ -1455,7 +2241,7 @@ msgstr "المصدر" #: templates/actions/action_list.html:368 #: templates/actions/action_list.html:436 #: templates/complaints/analytics.html:183 -#: templates/complaints/complaint_detail.html:754 +#: templates/complaints/complaint_detail.html:989 #: templates/complaints/complaint_list.html:269 #: templates/complaints/complaint_list.html:345 #: templates/complaints/inquiry_detail.html:235 @@ -1474,6 +2260,8 @@ msgstr "تم الإسناد إلى" #: templates/feedback/feedback_list.html:274 #: templates/journeys/instance_list.html:178 #: templates/observations/observation_list.html:268 +#: templates/social/social_comment_list.html:131 +#: templates/social/social_platform.html:117 msgid "Date From" msgstr "من التاريخ" @@ -1483,6 +2271,8 @@ msgstr "من التاريخ" #: templates/feedback/feedback_list.html:278 #: templates/journeys/instance_list.html:182 #: templates/observations/observation_list.html:272 +#: templates/social/social_comment_list.html:135 +#: templates/social/social_platform.html:121 msgid "Date To" msgstr "إلى التاريخ" @@ -1492,11 +2282,13 @@ msgstr "إلى التاريخ" #: templates/callcenter/complaint_list.html:153 #: templates/callcenter/inquiry_list.html:150 #: templates/complaints/analytics.html:178 -#: templates/complaints/complaint_detail.html:139 +#: templates/complaints/complaint_detail.html:142 #: templates/complaints/complaint_list.html:338 #: templates/complaints/inquiry_detail.html:128 #: templates/complaints/inquiry_list.html:300 #: templates/feedback/feedback_list.html:319 +#: templates/px_sources/source_user_dashboard.html:110 +#: templates/px_sources/source_user_dashboard.html:188 msgid "ID" msgstr "المعرف" @@ -1513,13 +2305,17 @@ msgstr "تاريخ الاستحقاق" #: templates/actions/action_list.html:502 #: templates/appreciation/appreciation_list.html:91 #: templates/appreciation/appreciation_list.html:160 -#: templates/complaints/complaint_detail.html:610 +#: templates/complaints/complaint_detail.html:802 #: templates/complaints/complaint_list.html:407 #: templates/complaints/inquiry_list.html:382 #: templates/feedback/feedback_list.html:400 #: templates/observations/observation_list.html:376 -#: templates/references/search.html:130 templates/standards/dashboard.html:100 -#: templates/standards/search.html:107 +#: templates/px_sources/source_list.html:85 +#: templates/px_sources/source_user_dashboard.html:151 +#: templates/px_sources/source_user_dashboard.html:225 +#: templates/references/search.html:130 +#: templates/social/social_analytics.html:328 +#: templates/standards/dashboard.html:100 templates/standards/search.html:107 msgid "View" msgstr "عرض" @@ -1539,7 +2335,13 @@ msgstr "قم بإجراء تحليل للمشاعر على أي نص" #: templates/appreciation/appreciation_detail.html:105 #: templates/callcenter/complaint_form.html:65 #: templates/callcenter/inquiry_form.html:61 +#: templates/complaints/complaint_threshold_form.html:24 +#: templates/complaints/escalation_rule_form.html:24 +#: templates/complaints/sla_config_form.html:24 #: templates/observations/observation_detail.html:178 +#: templates/organizations/staff_detail.html:12 +#: templates/px_sources/source_detail.html:35 +#: templates/px_sources/source_form.html:31 msgid "Back to List" msgstr "العودة إلى القائمة" @@ -1573,7 +2375,11 @@ msgstr "نتائج التحليل" #: templates/physicians/leaderboard.html:183 #: templates/physicians/physician_detail.html:187 #: templates/physicians/ratings_list.html:137 -#: templates/social/mention_list.html:32 +#: templates/social/social_analytics.html:78 +#: templates/social/social_comment_list.html:68 +#: templates/social/social_comment_list.html:125 +#: templates/social/social_platform.html:55 +#: templates/social/social_platform.html:111 msgid "Positive" msgstr "إيجابي" @@ -1591,7 +2397,11 @@ msgstr "إيجابي" #: templates/physicians/leaderboard.html:189 #: templates/physicians/physician_detail.html:189 #: templates/physicians/ratings_list.html:143 -#: templates/social/mention_list.html:48 +#: templates/social/social_analytics.html:101 +#: templates/social/social_comment_list.html:90 +#: templates/social/social_comment_list.html:127 +#: templates/social/social_platform.html:71 +#: templates/social/social_platform.html:113 #: templates/surveys/instance_list.html:48 msgid "Negative" msgstr "سلبي" @@ -1610,7 +2420,10 @@ msgstr "سلبي" #: templates/physicians/leaderboard.html:186 #: templates/physicians/physician_detail.html:188 #: templates/physicians/ratings_list.html:140 -#: templates/social/mention_list.html:40 +#: templates/social/social_comment_list.html:79 +#: templates/social/social_comment_list.html:126 +#: templates/social/social_platform.html:63 +#: templates/social/social_platform.html:112 msgid "Neutral" msgstr "محايد" @@ -1619,7 +2432,8 @@ msgstr "محايد" #: templates/ai_engine/sentiment_detail.html:63 #: templates/ai_engine/sentiment_list.html:124 #: templates/ai_engine/tags/sentiment_card.html:19 -#: templates/complaints/complaint_detail.html:811 +#: templates/complaints/complaint_detail.html:1063 +#: templates/social/partials/ai_analysis_bilingual.html:46 #: templates/surveys/instance_list.html:66 msgid "Score" msgstr "النتيجة" @@ -1628,29 +2442,29 @@ msgstr "النتيجة" #: templates/ai_engine/sentiment_detail.html:68 #: templates/ai_engine/sentiment_list.html:125 #: templates/ai_engine/tags/sentiment_card.html:22 -#: templates/complaints/complaint_detail.html:410 +#: templates/complaints/complaint_detail.html:424 +#: templates/social/partials/ai_analysis_bilingual.html:56 msgid "Confidence" msgstr "الثقة" -#: templates/ai_engine/analyze_text.html:133 -#: templates/ai_engine/sentiment_dashboard.html:236 -#: templates/ai_engine/sentiment_list.html:126 -msgid "Language" -msgstr "اللغة" - #: templates/ai_engine/analyze_text.html:144 #: templates/ai_engine/sentiment_detail.html:84 #: templates/ai_engine/tags/sentiment_card.html:26 +#: templates/social/partials/ai_analysis_bilingual.html:102 +#: templates/social/social_comment_detail.html:160 msgid "Keywords" msgstr "الكلمات المفتاحية" #: templates/ai_engine/analyze_text.html:154 #: templates/ai_engine/sentiment_detail.html:98 +#: templates/social/partials/ai_analysis_bilingual.html:156 +#: templates/social/social_comment_detail.html:235 msgid "Entities" msgstr "الكيانات" #: templates/ai_engine/analyze_text.html:169 #: templates/ai_engine/sentiment_detail.html:127 +#: templates/social/partials/ai_analysis_bilingual.html:187 msgid "Emotions" msgstr "العواطف" @@ -1693,6 +2507,7 @@ msgid "Total Analyzed" msgstr "إجمالي التحليلات" #: templates/ai_engine/sentiment_dashboard.html:74 +#: templates/social/social_analytics.html:147 msgid "Sentiment Distribution" msgstr "توزيع المشاعر" @@ -1713,10 +2528,12 @@ msgid "Sentiment by Language" msgstr "المشاعر حسب اللغة" #: templates/ai_engine/sentiment_dashboard.html:182 +#: templates/social/social_analytics.html:203 msgid "Top Keywords" msgstr "أهم الكلمات المفتاحية" #: templates/ai_engine/sentiment_dashboard.html:193 +#: templates/social/social_analytics.html:229 msgid "No keywords found" msgstr "لم يتم العثور على كلمات مفتاحية" @@ -1744,6 +2561,10 @@ msgstr "النص" #: templates/physicians/leaderboard.html:140 #: templates/physicians/ratings_list.html:105 #: templates/physicians/specialization_overview.html:105 +#: templates/social/partials/ai_analysis_bilingual.html:25 +#: templates/social/social_comment_detail.html:131 +#: templates/social/social_comment_list.html:122 +#: templates/social/social_platform.html:108 msgid "Sentiment" msgstr "المشاعر" @@ -1751,6 +2572,7 @@ msgstr "المشاعر" #: templates/ai_engine/sentiment_list.html:128 #: templates/callcenter/interaction_list.html:60 #: templates/observations/observation_list.html:306 +#: templates/px_sources/source_detail.html:118 #: templates/standards/attachment_upload.html:110 msgid "Date" msgstr "التاريخ" @@ -1776,15 +2598,16 @@ msgid "Analyzed Text" msgstr "النص المحلل" #: templates/ai_engine/sentiment_detail.html:48 -#: templates/social/mention_detail.html:59 msgid "Sentiment Analysis" msgstr "تحليل المشاعر" #: templates/ai_engine/sentiment_detail.html:106 #: templates/ai_engine/sentiment_detail.html:187 #: templates/callcenter/interaction_list.html:56 +#: templates/complaints/complaint_threshold_list.html:94 #: templates/feedback/feedback_list.html:199 #: templates/feedback/feedback_list.html:320 +#: templates/organizations/staff_list.html:76 #: templates/references/folder_view.html:108 #: templates/references/search.html:83 msgid "Type" @@ -1820,6 +2643,7 @@ msgid "AI-powered sentiment analysis of text content" msgstr "تحليل مشاعر النصوص باستخدام الذكاء الاصطناعي" #: templates/ai_engine/sentiment_list.html:19 +#: templates/social/social_analytics.html:21 msgid "Dashboard" msgstr "لوحة التحكم" @@ -1830,7 +2654,10 @@ msgstr "إجمالي النتائج" #: templates/ai_engine/sentiment_list.html:69 #: templates/analytics/command_center.html:136 #: templates/complaints/complaint_list.html:171 +#: templates/complaints/complaint_threshold_list.html:31 +#: templates/complaints/escalation_rule_list.html:31 #: templates/complaints/inquiry_list.html:165 +#: templates/complaints/sla_config_list.html:31 #: templates/observations/observation_list.html:174 msgid "Filters" msgstr "عوامل التصفية" @@ -1839,7 +2666,10 @@ msgstr "عوامل التصفية" #: templates/analytics/command_center.html:212 #: templates/appreciation/leaderboard.html:75 #: templates/complaints/complaint_list.html:302 +#: templates/complaints/complaint_threshold_list.html:73 +#: templates/complaints/escalation_rule_list.html:72 #: templates/complaints/inquiry_list.html:263 +#: templates/complaints/sla_config_list.html:86 #: templates/observations/observation_list.html:279 msgid "Apply Filters" msgstr "تطبيق الفلاتر" @@ -1885,6 +2715,10 @@ msgid "AI Sentiment Analysis" msgstr "تحليل المشاعر بالذكاء الاصطناعي" #: templates/ai_engine/tags/sentiment_card.html:35 +#: templates/organizations/staff_hierarchy_d3.html:120 +#: templates/organizations/staff_list.html:143 +#: templates/social/social_comment_list.html:199 +#: templates/social/social_platform.html:196 msgid "View Details" msgstr "عرض التفاصيل" @@ -1894,7 +2728,8 @@ msgid "PX Command Center" msgstr "مركز قيادة تجربة المرضى" #: templates/analytics/command_center.html:99 -#: templates/complaints/complaint_detail.html:942 +#: templates/complaints/complaint_detail.html:1194 +#: templates/complaints/complaint_detail.html:1234 msgid "Loading..." msgstr "جارٍ التحميل..." @@ -1942,6 +2777,7 @@ msgid "Last 90 Days" msgstr "آخر ٩٠ يومًا" #: templates/analytics/command_center.html:153 +#: templates/social/social_platform.html:104 msgid "This Month" msgstr "هذا الشهر" @@ -1964,7 +2800,12 @@ msgstr "نطاق مخصص" #: templates/analytics/command_center.html:175 #: templates/complaints/complaint_list.html:245 +#: templates/complaints/complaint_threshold_list.html:40 +#: templates/complaints/escalation_rule_list.html:40 #: templates/complaints/inquiry_list.html:228 +#: templates/complaints/sla_config_list.html:40 +#: templates/organizations/staff_hierarchy.html:202 +#: templates/organizations/staff_list.html:29 #: templates/physicians/department_overview.html:56 #: templates/physicians/leaderboard.html:83 #: templates/physicians/physician_list.html:65 @@ -1974,9 +2815,10 @@ msgid "All Hospitals" msgstr "جميع المستشفيات" #: templates/analytics/command_center.html:188 -#: templates/complaints/complaint_detail.html:929 +#: templates/complaints/complaint_detail.html:1181 #: templates/complaints/complaint_list.html:258 #: templates/observations/observation_list.html:234 +#: templates/organizations/staff_hierarchy.html:213 #: templates/physicians/leaderboard.html:94 #: templates/physicians/physician_list.html:76 #: templates/physicians/ratings_list.html:71 @@ -1992,6 +2834,8 @@ msgstr "فئة مؤشرات الأداء" #: templates/analytics/command_center.html:201 #: templates/appreciation/appreciation_list.html:184 #: templates/complaints/complaint_list.html:230 +#: templates/complaints/complaint_threshold_form.html:161 +#: templates/complaints/complaint_threshold_list.html:123 #: templates/complaints/inquiry_list.html:212 #: templates/observations/observation_list.html:221 #: templates/standards/search.html:41 @@ -2002,7 +2846,10 @@ msgstr "جميع الفئات" #: templates/callcenter/complaint_list.html:5 #: templates/complaints/analytics.html:221 #: templates/layouts/partials/sidebar.html:32 -#: templates/layouts/partials/sidebar.html:215 +#: templates/layouts/partials/sidebar.html:202 +#: templates/layouts/partials/sidebar.html:256 +#: templates/px_sources/source_detail.html:191 +#: templates/px_sources/source_user_confirm_delete.html:84 msgid "Complaints" msgstr "الشكاوى" @@ -2047,6 +2894,7 @@ msgstr "إعادة تعيين" #: templates/callcenter/complaint_list.html:52 #: templates/complaints/analytics.html:33 #: templates/complaints/complaint_list.html:110 +#: templates/px_sources/source_user_dashboard.html:32 msgid "Total Complaints" msgstr "إجمالي الشكاوى" @@ -2056,6 +2904,7 @@ msgid "vs last period" msgstr "مقارنةً بالفترة السابقة" #: templates/analytics/command_center.html:260 +#: templates/px_sources/source_user_dashboard.html:40 msgid "Open Complaints" msgstr "الشكاوى المفتوحة" @@ -2104,7 +2953,7 @@ msgstr "لوحة صدارة الأطباء" #: templates/callcenter/complaint_list.html:155 #: templates/callcenter/inquiry_form.html:121 #: templates/complaints/analytics.html:180 -#: templates/complaints/complaint_detail.html:142 +#: templates/complaints/complaint_detail.html:145 #: templates/complaints/complaint_form.html:58 #: templates/complaints/complaint_form.html:140 #: templates/complaints/complaint_form.html:228 @@ -2115,6 +2964,8 @@ msgstr "لوحة صدارة الأطباء" #: templates/complaints/inquiry_form.html:175 #: templates/feedback/feedback_form.html:115 #: templates/journeys/instance_list.html:207 +#: templates/px_sources/source_user_dashboard.html:112 +#: templates/px_sources/source_user_dashboard.html:190 #: templates/surveys/instance_list.html:62 msgid "Patient" msgstr "المريض" @@ -2136,6 +2987,7 @@ msgstr "الترتيب" #: templates/callcenter/complaint_form.html:152 #: templates/dashboard/command_center.html:144 #: templates/feedback/feedback_form.html:266 +#: templates/organizations/staff_list.html:49 #: templates/physicians/department_overview.html:118 #: templates/physicians/leaderboard.html:135 #: templates/physicians/physician_list.html:111 @@ -2147,6 +2999,8 @@ msgstr "طبيب" #: templates/analytics/command_center.html:519 #: templates/dashboard/command_center.html:145 #: templates/organizations/physician_list.html:17 +#: templates/organizations/staff_detail.html:73 +#: templates/organizations/staff_form.html:144 #: templates/physicians/department_overview.html:119 #: templates/physicians/leaderboard.html:136 #: templates/physicians/physician_detail.html:47 @@ -2318,7 +3172,9 @@ msgid "Sent by Me" msgstr "مرسلة من قبلي" #: templates/appreciation/appreciation_list.html:173 +#: templates/organizations/staff_list.html:40 #: templates/physicians/physician_list.html:87 +#: templates/px_sources/source_list.html:42 msgid "All Status" msgstr "جميع الحالات" @@ -2353,7 +3209,7 @@ msgstr "نوع المستلم" #: templates/appreciation/appreciation_send_form.html:57 #: templates/appreciation/leaderboard.html:95 -#: templates/complaints/complaint_detail.html:986 +#: templates/complaints/complaint_detail.html:1278 msgid "Recipient" msgstr "المستلم" @@ -2480,6 +3336,9 @@ msgstr "إضافة" #: templates/appreciation/category_list.html:37 #: templates/observations/category_form.html:31 #: templates/observations/category_list.html:36 +#: templates/px_sources/source_confirm_delete.html:53 +#: templates/px_sources/source_detail.html:63 +#: templates/px_sources/source_form.html:51 #: templates/references/folder_form.html:76 msgid "Name (English)" msgstr "الاسم (بالإنجليزية)" @@ -2489,6 +3348,9 @@ msgstr "الاسم (بالإنجليزية)" #: templates/appreciation/category_list.html:38 #: templates/observations/category_form.html:39 #: templates/observations/category_list.html:37 +#: templates/px_sources/source_confirm_delete.html:57 +#: templates/px_sources/source_detail.html:67 +#: templates/px_sources/source_form.html:61 #: templates/references/folder_form.html:83 msgid "Name (Arabic)" msgstr "الاسم (بالعربية)" @@ -2603,6 +3465,8 @@ msgstr "مرات" #: templates/appreciation/badge_list.html:59 #: templates/callcenter/inquiry_success.html:124 +#: templates/complaints/explanation_already_submitted.html:96 +#: templates/emails/explanation_request.html:151 msgid "Status:" msgstr "الحالة:" @@ -2650,6 +3514,7 @@ msgstr "معاينة الأيقونة" #: templates/appreciation/category_form.html:163 #: templates/callcenter/inquiry_form.html:216 +#: templates/organizations/staff_form.html:243 msgid "Tips" msgstr "نصائح" @@ -2675,6 +3540,7 @@ msgid "Appreciation Categories" msgstr "فئات التقدير" #: templates/appreciation/category_list.html:40 +#: templates/complaints/complaint_threshold_form.html:294 msgid "Count" msgstr "العدد" @@ -2813,7 +3679,8 @@ msgstr "أظهر الابتكار" #: templates/callcenter/complaint_form.html:271 #: templates/callcenter/complaint_list.html:40 #: templates/complaints/complaint_form.html:263 -#: templates/layouts/partials/sidebar.html:201 +#: templates/layouts/partials/sidebar.html:242 +#: templates/px_sources/source_user_dashboard.html:77 msgid "Create Complaint" msgstr "إنشاء شكوى" @@ -2825,7 +3692,7 @@ msgstr "إنشاء شكوى" #: templates/callcenter/inquiry_success.html:5 #: templates/complaints/complaint_form.html:233 #: templates/complaints/inquiry_form.html:183 -#: templates/layouts/partials/sidebar.html:185 +#: templates/layouts/partials/sidebar.html:226 msgid "Call Center" msgstr "مركز الاتصال" @@ -2897,6 +3764,7 @@ msgstr "أحد أفراد العائلة" #: templates/complaints/inquiry_list.html:220 #: templates/complaints/public_inquiry_form.html:88 #: templates/core/public_submit.html:979 +#: templates/organizations/staff_list.html:52 msgid "Other" msgstr "أخرى" @@ -2909,7 +3777,6 @@ msgstr "اختر المستشفى..." #: templates/callcenter/complaint_form.html:301 #: templates/callcenter/inquiry_form.html:149 #: templates/callcenter/inquiry_form.html:260 -#: templates/complaints/complaint_detail.html:661 msgid "Select department..." msgstr "اختر القسم..." @@ -2919,7 +3786,7 @@ msgid "Select physician..." msgstr "اختر الطبيب..." #: templates/callcenter/complaint_form.html:159 -#: templates/complaints/complaint_detail.html:237 +#: templates/complaints/complaint_detail.html:252 #: templates/complaints/complaint_form.html:66 #: templates/complaints/complaint_form.html:148 #: templates/dashboard/command_center.html:240 @@ -2936,9 +3803,11 @@ msgstr "معرّف الزيارة (اختياري)" #: templates/callcenter/complaint_form.html:169 #: templates/callcenter/complaint_success.html:64 -#: templates/complaints/complaint_detail.html:211 +#: templates/complaints/complaint_detail.html:226 #: templates/complaints/complaint_form.html:158 +#: templates/complaints/explanation_form.html:60 #: templates/complaints/public_complaint_form.html:191 +#: templates/emails/explanation_request.html:125 msgid "Complaint Details" msgstr "تفاصيل الشكوى" @@ -2947,8 +3816,11 @@ msgid "Brief summary of the complaint" msgstr "ملخص موجز للشكوى" #: templates/callcenter/complaint_form.html:179 -#: templates/complaints/complaint_detail.html:380 +#: templates/complaints/complaint_detail.html:394 #: templates/complaints/complaint_form.html:162 +#: templates/complaints/complaint_threshold_form.html:219 +#: templates/complaints/escalation_rule_form.html:231 +#: templates/complaints/sla_config_form.html:165 #: templates/core/public_submit.html:756 #: templates/observations/category_form.html:47 #: templates/observations/convert_to_action.html:46 @@ -2956,6 +3828,10 @@ msgstr "ملخص موجز للشكوى" #: templates/observations/observation_detail.html:189 #: templates/observations/observation_list.html:308 #: templates/observations/public_new.html:290 +#: templates/px_sources/source_confirm_delete.html:61 +#: templates/px_sources/source_detail.html:71 +#: templates/px_sources/source_form.html:72 +#: templates/px_sources/source_list.html:65 #: templates/references/document_view.html:172 #: templates/standards/attachment_upload.html:43 #: templates/standards/attachment_upload.html:108 @@ -3053,6 +3929,7 @@ msgstr "اختر درجة الخطورة..." #: templates/core/public_submit.html:733 #: templates/observations/observation_list.html:210 #: templates/observations/public_new.html:250 +#: templates/px_sources/source_user_dashboard.html:144 msgid "Low" msgstr "منخفض" @@ -3069,6 +3946,7 @@ msgstr "منخفض" #: templates/core/public_submit.html:736 #: templates/observations/observation_list.html:211 #: templates/observations/public_new.html:256 +#: templates/px_sources/source_user_dashboard.html:142 msgid "Medium" msgstr "متوسط" @@ -3085,6 +3963,7 @@ msgstr "متوسط" #: templates/core/public_submit.html:739 #: templates/observations/observation_list.html:212 #: templates/observations/public_new.html:262 +#: templates/px_sources/source_user_dashboard.html:140 msgid "High" msgstr "مرتفع" @@ -3201,12 +4080,15 @@ msgstr "الشكاوى المُقدمة عبر مركز الاتصال" #: templates/complaints/analytics.html:147 #: templates/complaints/inquiry_list.html:149 #: templates/observations/public_track.html:323 +#: templates/px_sources/source_user_dashboard.html:133 +#: templates/px_sources/source_user_dashboard.html:216 msgid "Resolved" msgstr "تم الحل" #: templates/callcenter/complaint_list.html:100 #: templates/callcenter/inquiry_list.html:96 #: templates/layouts/partials/topbar.html:20 +#: templates/px_sources/source_list.html:38 msgid "Search..." msgstr "بحث..." @@ -3217,13 +4099,21 @@ msgstr "بحث..." #: templates/callcenter/inquiry_list.html:113 #: templates/callcenter/inquiry_list.html:125 #: templates/complaints/complaint_list.html:284 +#: templates/complaints/complaint_threshold_list.html:64 +#: templates/complaints/escalation_rule_list.html:63 +#: templates/complaints/escalation_rule_list.html:130 +#: templates/complaints/escalation_rule_list.html:139 +#: templates/complaints/sla_config_list.html:77 #: templates/observations/observation_list.html:260 +#: templates/social/social_platform.html:110 msgid "All" msgstr "الكل" #: templates/callcenter/complaint_list.html:110 #: templates/callcenter/inquiry_list.html:106 #: templates/observations/public_track.html:330 +#: templates/px_sources/source_user_dashboard.html:135 +#: templates/px_sources/source_user_dashboard.html:218 msgid "Closed" msgstr "مغلقة" @@ -3234,12 +4124,16 @@ msgstr "مغلقة" #: templates/physicians/physician_list.html:94 #: templates/physicians/ratings_list.html:81 #: templates/physicians/specialization_overview.html:66 +#: templates/px_sources/source_list.html:53 +#: templates/social/social_analytics.html:40 +#: templates/social/social_comment_list.html:140 +#: templates/social/social_platform.html:130 msgid "Filter" msgstr "تصفية" #: templates/callcenter/complaint_list.html:178 #: templates/callcenter/complaint_success.html:83 -#: templates/complaints/complaint_detail.html:242 +#: templates/complaints/complaint_detail.html:257 #: templates/complaints/inquiry_detail.html:217 #: templates/complaints/inquiry_detail.html:230 #: templates/complaints/inquiry_detail.html:537 @@ -3270,23 +4164,32 @@ msgid "Complaint ID:" msgstr "رقم الشكوى:" #: templates/callcenter/complaint_success.html:73 +#: templates/complaints/explanation_already_submitted.html:69 +#: templates/complaints/explanation_form.html:66 +#: templates/complaints/explanation_success.html:69 +#: templates/emails/explanation_request.html:131 msgid "Title:" msgstr "العنوان:" #: templates/callcenter/complaint_success.html:78 +#: templates/complaints/explanation_form.html:82 +#: templates/emails/explanation_request.html:135 msgid "Patient:" msgstr "المريض:" #: templates/callcenter/complaint_success.html:94 #: templates/callcenter/inquiry_success.html:115 +#: templates/emails/explanation_request.html:147 msgid "Category:" msgstr "الفئة:" #: templates/callcenter/complaint_success.html:99 +#: templates/complaints/explanation_form.html:69 msgid "Severity:" msgstr "درجة الخطورة:" #: templates/callcenter/complaint_success.html:108 +#: templates/complaints/explanation_form.html:75 msgid "Priority:" msgstr "الأولوية:" @@ -3341,7 +4244,8 @@ msgstr "عرض جميع الشكاوى" #: templates/callcenter/inquiry_form.html:230 #: templates/callcenter/inquiry_list.html:36 #: templates/complaints/inquiry_form.html:234 -#: templates/layouts/partials/sidebar.html:208 +#: templates/layouts/partials/sidebar.html:249 +#: templates/px_sources/source_user_dashboard.html:84 msgid "Create Inquiry" msgstr "إنشاء استفسار" @@ -3485,7 +4389,9 @@ msgstr "لم يتم العثور على أي مرضى. يرجى إدخال بي #: templates/callcenter/inquiry_list.html:5 #: templates/layouts/partials/sidebar.html:49 -#: templates/layouts/partials/sidebar.html:222 +#: templates/layouts/partials/sidebar.html:263 +#: templates/px_sources/source_detail.html:194 +#: templates/px_sources/source_user_confirm_delete.html:87 msgid "Inquiries" msgstr "الاستفسارات" @@ -3499,6 +4405,7 @@ msgstr "الاستفسارات المُنشأة عبر مركز الاتصال" #: templates/callcenter/inquiry_list.html:48 #: templates/complaints/inquiry_list.html:104 +#: templates/px_sources/source_user_dashboard.html:48 msgid "Total Inquiries" msgstr "إجمالي الاستفسارات" @@ -3640,6 +4547,7 @@ msgid "Resolution Rate" msgstr "معدل الحل" #: templates/complaints/analytics.html:151 +#: templates/complaints/complaint_detail.html:636 msgid "Pending" msgstr "قيد الانتظار" @@ -3647,12 +4555,12 @@ msgstr "قيد الانتظار" msgid "Avg Resolution Time" msgstr "متوسط وقت الحل" -#: templates/complaints/complaint_detail.html:120 +#: templates/complaints/complaint_detail.html:123 #: templates/complaints/complaint_form.html:36 msgid "Back to Complaints" msgstr "الرجوع إلى الشكاوى" -#: templates/complaints/complaint_detail.html:142 +#: templates/complaints/complaint_detail.html:145 #: templates/complaints/complaint_list.html:363 #: templates/complaints/inquiry_detail.html:132 #: templates/complaints/inquiry_detail.html:482 @@ -3664,30 +4572,30 @@ msgstr "الرجوع إلى الشكاوى" msgid "MRN" msgstr "الرقم الطبي (MRN)" -#: templates/complaints/complaint_detail.html:158 +#: templates/complaints/complaint_detail.html:161 msgid "SLA Deadline" msgstr "الموعد النهائي لاتفاقية مستوى الخدمة (SLA)" -#: templates/complaints/complaint_detail.html:164 +#: templates/complaints/complaint_detail.html:167 #: templates/complaints/complaint_list.html:369 #: templates/complaints/inquiry_detail.html:160 #: templates/complaints/inquiry_list.html:327 msgid "OVERDUE" msgstr "متأخرة" -#: templates/complaints/complaint_detail.html:167 +#: templates/complaints/complaint_detail.html:170 #: templates/complaints/inquiry_detail.html:163 msgid "remaining" msgstr "متبقية" -#: templates/complaints/complaint_detail.html:188 +#: templates/complaints/complaint_detail.html:191 #: templates/complaints/inquiry_detail.html:185 #: templates/observations/observation_detail.html:311 msgid "Timeline" msgstr "الجدول الزمني" -#: templates/complaints/complaint_detail.html:194 -#: templates/complaints/complaint_detail.html:550 +#: templates/complaints/complaint_detail.html:197 +#: templates/complaints/complaint_detail.html:564 #: templates/complaints/inquiry_detail.html:191 #: templates/complaints/inquiry_detail.html:343 #: templates/core/public_submit.html:776 @@ -3696,316 +4604,529 @@ msgstr "الجدول الزمني" msgid "Attachments" msgstr "المرفقات" -#: templates/complaints/complaint_detail.html:200 +#: templates/complaints/complaint_detail.html:203 #: templates/layouts/partials/sidebar.html:133 msgid "PX Actions" msgstr "إجراءات تجربة المريض" -#: templates/complaints/complaint_detail.html:264 +#: templates/complaints/complaint_detail.html:209 +msgid "Explanation" +msgstr "إيضاح" + +#: templates/complaints/complaint_detail.html:215 +#: templates/complaints/complaint_detail.html:823 +msgid "PDF View" +msgstr "عرض PDF" + +#: templates/complaints/complaint_detail.html:279 msgid "AI Mapped" msgstr "تم التعيين بواسطة الذكاء الاصطناعي" -#: templates/complaints/complaint_detail.html:276 +#: templates/complaints/complaint_detail.html:291 +#: templates/complaints/complaint_detail.html:880 msgid "Staff Member" msgstr "موظف" -#: templates/complaints/complaint_detail.html:290 +#: templates/complaints/complaint_detail.html:305 msgid "AI Matched" msgstr "مطابق بالذكاء الاصطناعي" -#: templates/complaints/complaint_detail.html:296 +#: templates/complaints/complaint_detail.html:311 msgid "Extracted from complaint" msgstr "مستخرج من الشكوى" -#: templates/complaints/complaint_detail.html:298 -#: templates/complaints/complaint_detail.html:350 +#: templates/complaints/complaint_detail.html:313 +#: templates/complaints/complaint_detail.html:366 msgid "confidence" msgstr "مستوى الثقة" -#: templates/complaints/complaint_detail.html:313 +#: templates/complaints/complaint_detail.html:328 msgid "Staff Suggestions" msgstr "اقتراحات الموظفين" -#: templates/complaints/complaint_detail.html:315 +#: templates/complaints/complaint_detail.html:330 msgid "Needs Review" msgstr "بحاجة إلى مراجعة" -#: templates/complaints/complaint_detail.html:321 -msgid "AI extracted name" -msgstr "اسم مستخرج بالذكاء الاصطناعي" +#: templates/complaints/complaint_detail.html:336 +msgid "AI Extracted Names" +msgstr "الأسماء المستخرجة بواسطة الذكاء الاصطناعي" -#: templates/complaints/complaint_detail.html:322 -msgid "potential match" -msgstr "تطابق محتمل" +#: templates/complaints/complaint_detail.html:344 +msgid "Primary" +msgstr "أساسي" -#: templates/complaints/complaint_detail.html:322 -msgid "No matches found" -msgstr "لم يتم العثور على تطابقات" - -#: templates/complaints/complaint_detail.html:354 +#: templates/complaints/complaint_detail.html:369 msgid "Currently assigned" msgstr "مُعيّن حاليًا" -#: templates/complaints/complaint_detail.html:358 +#: templates/complaints/complaint_detail.html:372 msgid "Select" msgstr "اختيار" -#: templates/complaints/complaint_detail.html:369 +#: templates/complaints/complaint_detail.html:383 msgid "Search All Staff" msgstr "البحث في جميع الموظفين" -#: templates/complaints/complaint_detail.html:392 +#: templates/complaints/complaint_detail.html:406 +#: templates/social/partials/ai_analysis_bilingual.html:8 +#: templates/social/social_comment_detail.html:126 msgid "AI Analysis" msgstr "تحليل الذكاء الاصطناعي" -#: templates/complaints/complaint_detail.html:394 +#: templates/complaints/complaint_detail.html:408 msgid "AI Generated" msgstr "تم إنشاؤه بالذكاء الاصطناعي" -#: templates/complaints/complaint_detail.html:400 +#: templates/complaints/complaint_detail.html:414 msgid "Emotion Analysis" msgstr "تحليل المشاعر" -#: templates/complaints/complaint_detail.html:415 +#: templates/complaints/complaint_detail.html:429 msgid "Intensity" msgstr "الشدة" -#: templates/complaints/complaint_detail.html:439 +#: templates/complaints/complaint_detail.html:453 +#: templates/social/partials/ai_analysis_bilingual.html:75 msgid "Summary" msgstr "ملخص" -#: templates/complaints/complaint_detail.html:449 +#: templates/complaints/complaint_detail.html:463 msgid "Suggested Action" msgstr "الإجراء المقترح" -#: templates/complaints/complaint_detail.html:455 +#: templates/complaints/complaint_detail.html:469 #: templates/observations/convert_to_action.html:94 +#: templates/social/social_comment_detail.html:260 msgid "Create PX Action" msgstr "إنشاء إجراء PX" -#: templates/complaints/complaint_detail.html:465 +#: templates/complaints/complaint_detail.html:479 msgid "Resolution" msgstr "الحل" -#: templates/complaints/complaint_detail.html:470 +#: templates/complaints/complaint_detail.html:484 msgid "Resolved by" msgstr "تم الحل بواسطة" -#: templates/complaints/complaint_detail.html:471 +#: templates/complaints/complaint_detail.html:485 #: templates/complaints/inquiry_detail.html:264 msgid "on" msgstr "في" -#: templates/complaints/complaint_detail.html:486 +#: templates/complaints/complaint_detail.html:500 #: templates/complaints/inquiry_detail.html:279 #: templates/observations/observation_detail.html:223 #: templates/observations/public_track.html:287 +#: templates/organizations/staff_detail.html:320 +#: templates/px_sources/source_detail.html:89 #: templates/standards/dashboard.html:131 msgid "Last Updated" msgstr "آخر تحديث" -#: templates/complaints/complaint_detail.html:498 +#: templates/complaints/complaint_detail.html:512 #: templates/complaints/inquiry_detail.html:291 msgid "Activity Timeline" msgstr "الجدول الزمني للنشاط" -#: templates/complaints/complaint_detail.html:539 +#: templates/complaints/complaint_detail.html:553 #: templates/complaints/inquiry_detail.html:332 #: templates/observations/observation_detail.html:348 msgid "No timeline entries yet" msgstr "لا توجد إدخالات في الجدول الزمني بعد" -#: templates/complaints/complaint_detail.html:582 +#: templates/complaints/complaint_detail.html:596 #: templates/complaints/inquiry_detail.html:375 #: templates/standards/compliance_form.html:157 msgid "No attachments" msgstr "لا توجد مرفقات" -#: templates/complaints/complaint_detail.html:593 +#: templates/complaints/complaint_detail.html:609 +msgid "Staff Explanations" +msgstr "إيضاحات الموظفين" + +#: templates/complaints/complaint_detail.html:623 +msgid "Explanation from Staff" +msgstr "إيضاح من الموظف" + +#: templates/complaints/complaint_detail.html:625 +msgid "Pending Explanation" +msgstr "إيضاح قيد الانتظار" + +#: templates/complaints/complaint_detail.html:631 +#: templates/observations/observation_detail.html:219 +#: templates/observations/public_success.html:236 +#: templates/observations/public_track.html:283 +#: templates/observations/public_track.html:296 +msgid "Submitted" +msgstr "تم الإرسال" + +#: templates/complaints/complaint_detail.html:645 +msgid "Staff Member:" +msgstr "الموظف:" + +#: templates/complaints/complaint_detail.html:658 +msgid "No explanation submitted yet." +msgstr "لم يتم تقديم أي إيضاح حتى الآن." + +#: templates/complaints/complaint_detail.html:667 +msgid "Responded:" +msgstr "تم الرد:" + +#: templates/complaints/complaint_detail.html:669 +msgid "Requested:" +msgstr "تاريخ الطلب:" + +#: templates/complaints/complaint_detail.html:674 +msgid "attachment(s)" +msgstr "مرفق(ات)" + +#: templates/complaints/complaint_detail.html:680 +#: templates/complaints/explanation_success.html:76 +msgid "Attachments:" +msgstr "المرفقات:" + +#: templates/complaints/complaint_detail.html:692 +msgid "Request Message:" +msgstr "رسالة الطلب:" + +#: templates/complaints/complaint_detail.html:704 +msgid "Copy Link" +msgstr "نسخ الرابط" + +#: templates/complaints/complaint_detail.html:707 +msgid "Resend Email" +msgstr "إعادة إرسال البريد الإلكتروني" + +#: templates/complaints/complaint_detail.html:715 +#: templates/complaints/explanation_already_submitted.html:95 +#: templates/complaints/explanation_success.html:95 +msgid "Explanation ID:" +msgstr "رقم الإيضاح:" + +#: templates/complaints/complaint_detail.html:716 +msgid "Token:" +msgstr "الرمز:" + +#: templates/complaints/complaint_detail.html:729 +msgid "No explanation has been submitted yet." +msgstr "لم يتم تقديم أي إيضاح حتى الآن." + +#: templates/complaints/complaint_detail.html:736 +#: templates/complaints/complaint_detail.html:763 +#: templates/complaints/complaint_detail.html:942 +msgid "Request Explanation" +msgstr "طلب إيضاح" + +#: templates/complaints/complaint_detail.html:739 +msgid "" +"Send a link to the assigned staff member requesting their explanation about " +"this complaint." +msgstr "" +"إرسال رابط إلى الموظف المعيّن لطلب إيضاحه بخصوص هذه الشكوى." + +#: templates/complaints/complaint_detail.html:745 +msgid "Will be sent to:" +msgstr "سيتم الإرسال إلى:" + +#: templates/complaints/complaint_detail.html:752 +msgid "No email configured" +msgstr "لم يتم إعداد بريد إلكتروني" + +#: templates/complaints/complaint_detail.html:757 +msgid "Custom Message (Optional)" +msgstr "رسالة مخصصة (اختياري)" + +#: templates/complaints/complaint_detail.html:759 +msgid "Add a custom message to include in the email..." +msgstr "أضف رسالة مخصصة لتضمينها في البريد الإلكتروني..." + +#: templates/complaints/complaint_detail.html:769 +msgid "" +"Please assign a staff member to this complaint before requesting an " +"explanation." +msgstr "" +"يرجى تعيين موظف لهذه الشكوى قبل طلب الإيضاح." + +#: templates/complaints/complaint_detail.html:785 msgid "Related PX Actions" msgstr "إجراءات PX المرتبطة" -#: templates/complaints/complaint_detail.html:619 +#: templates/complaints/complaint_detail.html:811 msgid "No PX actions created yet" -msgstr "لم يتم إنشاء أي إجراء PX بعد" +msgstr "لم يتم إنشاء أي إجراءات PX حتى الآن" -#: templates/complaints/complaint_detail.html:640 -msgid "Change Staff" -msgstr "تغيير الموظف" +#: templates/complaints/complaint_detail.html:830 +msgid "Download PDF" +msgstr "تحميل PDF" -#: templates/complaints/complaint_detail.html:642 -msgid "Assign/Change Staff" -msgstr "تعيين/تغيير الموظف" +#: templates/complaints/complaint_detail.html:835 +msgid "" +"This will generate a professionally formatted PDF with all complaint " +"details, including AI analysis, staff assignment, and resolution information." +msgstr "" +"سيتم إنشاء ملف PDF بتنسيق احترافي يتضمن جميع تفاصيل الشكوى، بما في ذلك " +"تحليل الذكاء الاصطناعي، تعيين الموظف، ومعلومات المعالجة." -#: templates/complaints/complaint_detail.html:658 -msgid "Change Department" -msgstr "تغيير القسم" +#: templates/complaints/complaint_detail.html:844 +msgid "PDF Contents" +msgstr "محتويات ملف PDF" -#: templates/complaints/complaint_detail.html:683 -#: templates/complaints/inquiry_detail.html:399 -msgid "Select user..." -msgstr "اختر مستخدم..." +#: templates/complaints/complaint_detail.html:847 +msgid "Header:" +msgstr "العنوان:" -#: templates/complaints/complaint_detail.html:711 +#: templates/complaints/complaint_detail.html:848 +msgid "Basic Information:" +msgstr "المعلومات الأساسية:" + +#: templates/complaints/complaint_detail.html:849 +#: templates/complaints/explanation_form.html:86 +#: templates/emails/explanation_request.html:161 +msgid "Description:" +msgstr "الوصف:" + +#: templates/complaints/complaint_detail.html:850 +msgid "Staff Assignment:" +msgstr "تعيين الموظف:" + +#: templates/complaints/complaint_detail.html:851 +msgid "AI Analysis:" +msgstr "تحليل الذكاء الاصطناعي:" + +#: templates/complaints/complaint_detail.html:852 +msgid "Resolution:" +msgstr "المعالجة:" + +#: templates/complaints/complaint_detail.html:858 +#: templates/observations/observation_detail.html:406 +msgid "Note" +msgstr "ملاحظة" + +#: templates/complaints/complaint_detail.html:861 +msgid "" +"PDF generation requires WeasyPrint to be installed. If you see an error " +"message, please contact your system administrator." +msgstr "" +"يتطلب إنشاء ملف PDF تثبيت WeasyPrint. في حال ظهور رسالة خطأ، يرجى التواصل " +"مع مدير النظام." + +#: templates/complaints/complaint_detail.html:876 +msgid "Staff Assignment" +msgstr "تعيين الموظف" + +#: templates/complaints/complaint_detail.html:882 +msgid "Staff member that complaint is about" +msgstr "الموظف المعني بالشكوى" + +#: templates/complaints/complaint_detail.html:900 +msgid "Assign Staff" +msgstr "تعيين موظف" + +#: templates/complaints/complaint_detail.html:905 +msgid "This complaint needs staff review" +msgstr "تتطلب هذه الشكوى مراجعة من الموظف" + +#: templates/complaints/complaint_detail.html:936 #: templates/complaints/inquiry_detail.html:427 msgid "Update Status" msgstr "تحديث الحالة" -#: templates/complaints/complaint_detail.html:718 +#: templates/complaints/complaint_detail.html:948 msgid "Send Notification" msgstr "إرسال إشعار" -#: templates/complaints/complaint_detail.html:724 -#: templates/complaints/complaint_detail.html:849 +#: templates/complaints/complaint_detail.html:954 +#: templates/complaints/complaint_detail.html:1101 msgid "Escalate" msgstr "تصعيد" -#: templates/complaints/complaint_detail.html:763 -#: templates/complaints/complaint_list.html:393 -#: templates/complaints/inquiry_detail.html:240 -#: templates/complaints/inquiry_detail.html:540 -#: templates/complaints/inquiry_list.html:364 -#: templates/observations/observation_list.html:370 -msgid "Unassigned" -msgstr "غير معين" +#: templates/complaints/complaint_detail.html:1012 +#: templates/complaints/complaint_detail.html:1215 +msgid "Assign Admin" +msgstr "تعيين مشرف" -#: templates/complaints/complaint_detail.html:770 +#: templates/complaints/complaint_detail.html:1014 +msgid "No admin assigned to this complaint" +msgstr "لم يتم تعيين مشرف لهذه الشكوى" + +#: templates/complaints/complaint_detail.html:1022 #: templates/complaints/inquiry_detail.html:560 msgid "Resolved By" msgstr "تم الحل بواسطة" -#: templates/complaints/complaint_detail.html:783 +#: templates/complaints/complaint_detail.html:1035 msgid "Closed By" msgstr "تم الإغلاق بواسطة" -#: templates/complaints/complaint_detail.html:800 +#: templates/complaints/complaint_detail.html:1052 msgid "Resolution Survey" msgstr "استبيان الحل" -#: templates/complaints/complaint_detail.html:816 +#: templates/complaints/complaint_detail.html:1068 msgid "View Survey" msgstr "عرض الاستبيان" -#: templates/complaints/complaint_detail.html:832 +#: templates/complaints/complaint_detail.html:1084 msgid "Escalate Complaint" msgstr "تصعيد الشكوى" -#: templates/complaints/complaint_detail.html:838 -msgid "This will escalate" -msgstr "سيتم التصعيد" +#: templates/complaints/complaint_detail.html:1090 +msgid "This will escalate complaint to higher management." +msgstr "سيتم تصعيد الشكوى إلى الإدارة العليا." -#: templates/complaints/complaint_detail.html:838 -msgid "complaint to higher management" -msgstr "تصعيد الشكوى إلى الإدارة العليا" - -#: templates/complaints/complaint_detail.html:843 +#: templates/complaints/complaint_detail.html:1095 msgid "Explain why this complaint needs escalation..." msgstr "اشرح سبب تصعيد هذه الشكوى..." -#: templates/complaints/complaint_detail.html:863 +#: templates/complaints/complaint_detail.html:1115 msgid "Create PX Action from AI Suggestion" msgstr "إنشاء إجراء PX من اقتراح الذكاء الاصطناعي" -#: templates/complaints/complaint_detail.html:870 +#: templates/complaints/complaint_detail.html:1122 msgid "" -"This will create a PX Action based on the AI-suggested action for this " -"complaint" +"This will create a PX Action based on AI-suggested action for this complaint." msgstr "" -"سيؤدي هذا إلى إنشاء إجراء PX بناءً على الإجراء المقترح بالذكاء الاصطناعي لهذه " -"الشكوى" +"سيتم إنشاء إجراء PX بناءً على الإجراء المقترح بواسطة الذكاء الاصطناعي لهذه الشكوى." -#: templates/complaints/complaint_detail.html:874 + +#: templates/complaints/complaint_detail.html:1126 msgid "Auto-mapped Category" msgstr "فئة معينة تلقائيًا" -#: templates/complaints/complaint_detail.html:882 +#: templates/complaints/complaint_detail.html:1134 msgid "Category automatically mapped from complaint category" msgstr "تم تعيين الفئة تلقائيًا من فئة الشكوى" -#: templates/complaints/complaint_detail.html:886 +#: templates/complaints/complaint_detail.html:1138 msgid "Assign To (Optional)" msgstr "تعيين إلى (اختياري)" -#: templates/complaints/complaint_detail.html:888 +#: templates/complaints/complaint_detail.html:1140 msgid "Leave unassigned" msgstr "ترك بدون تعيين" -#: templates/complaints/complaint_detail.html:893 -msgid "If left unassigned, you can assign the action later" -msgstr "إذا تُرك بدون تعيين، يمكن تعيين الإجراء لاحقًا" +#: templates/complaints/complaint_detail.html:1145 +msgid "If left unassigned, you can assign the action later." +msgstr "في حال تركه دون تعيين، يمكنك تعيين الإجراء لاحقًا." -#: templates/complaints/complaint_detail.html:897 +#: templates/complaints/complaint_detail.html:1149 msgid "Action Description" msgstr "وصف الإجراء" -#: templates/complaints/complaint_detail.html:906 +#: templates/complaints/complaint_detail.html:1158 msgid "Create Action" msgstr "إنشاء إجراء" -#: templates/complaints/complaint_detail.html:919 +#: templates/complaints/complaint_detail.html:1171 msgid "Select Staff Member" msgstr "اختيار موظف" -#: templates/complaints/complaint_detail.html:927 +#: templates/complaints/complaint_detail.html:1179 msgid "Filter by Department" msgstr "تصفية حسب القسم" -#: templates/complaints/complaint_detail.html:933 +#: templates/complaints/complaint_detail.html:1185 +#: templates/organizations/staff_hierarchy.html:222 +#: templates/organizations/staff_hierarchy_d3.html:60 msgid "Search Staff" msgstr "بحث عن موظف" -#: templates/complaints/complaint_detail.html:963 +#: templates/complaints/complaint_detail.html:1223 +msgid "Search Admins" +msgstr "البحث عن المشرفين" + +#: templates/complaints/complaint_detail.html:1227 +msgid "Shows PX Admins and Hospital Admins from this hospital" +msgstr "يعرض مشرفي PX ومشرفي المستشفى من هذا المستشفى" + +#: templates/complaints/complaint_detail.html:1242 +msgid "Assign Selected Admin" +msgstr "تعيين المشرف المحدد" + +#: templates/complaints/complaint_detail.html:1255 msgid "Send Complaint Notification" msgstr "إرسال إشعار الشكوى" -#: templates/complaints/complaint_detail.html:972 +#: templates/complaints/complaint_detail.html:1264 msgid "AI Summary" msgstr "ملخص الذكاء الاصطناعي" -#: templates/complaints/complaint_detail.html:973 +#: templates/complaints/complaint_detail.html:1265 msgid "you can edit this before sending" msgstr "يمكنك تعديل هذا قبل الإرسال" -#: templates/complaints/complaint_detail.html:978 -msgid "This is AI-generated summary. You can edit it before sending" -msgstr "هذا ملخص تم إنشاؤه بالذكاء الاصطناعي. يمكنك تعديله قبل الإرسال" +#: templates/complaints/complaint_detail.html:1270 +msgid "This is AI-generated summary. You can edit it before sending." +msgstr "هذا ملخص تم إنشاؤه بواسطة الذكاء الاصطناعي. يمكنك تعديله قبل الإرسال." -#: templates/complaints/complaint_detail.html:1003 -msgid "Staff Member Assigned" -msgstr "تم تعيين الموظف" - -#: templates/complaints/complaint_detail.html:1010 -msgid "This staff member has no user account in the system" -msgstr "هذا الموظف لا يملك حساب مستخدم في النظام" - -#: templates/complaints/complaint_detail.html:1019 +#: templates/complaints/complaint_detail.html:1333 msgid "Department Head of" msgstr "رئيس قسم" -#: templates/complaints/complaint_detail.html:1025 -#: templates/complaints/complaint_detail.html:1042 +#: templates/complaints/complaint_detail.html:1345 +#: templates/complaints/complaint_detail.html:1365 msgid "No recipient available" msgstr "لا يوجد مستلم متاح" -#: templates/complaints/complaint_detail.html:1026 -msgid "The assigned staff has no user account and no department manager is set" -msgstr "الموظف المعيّن لا يملك حساب مستخدم ولا يوجد مدير قسم محدد" +#: templates/complaints/complaint_detail.html:1346 +msgid "" +"The assigned staff has no user account and no department manager is set." +msgstr "الموظف المعيّن لا يملك حساب مستخدم ولم يتم تعيين مدير للقسم." -#: templates/complaints/complaint_detail.html:1035 -msgid "Manager of" -msgstr "مدير" +#: templates/complaints/complaint_detail.html:1366 +msgid "No staff or department manager assigned to this complaint." +msgstr "لم يتم تعيين موظف أو مدير قسم لهذه الشكوى." -#: templates/complaints/complaint_detail.html:1043 -msgid "No staff or department manager assigned to this complaint" -msgstr "لم يتم تعيين موظف أو مدير قسم لهذه الشكوى" - -#: templates/complaints/complaint_detail.html:1052 +#: templates/complaints/complaint_detail.html:1375 msgid "Additional Message (Optional)" msgstr "رسالة إضافية (اختياري)" -#: templates/complaints/complaint_detail.html:1064 +#: templates/complaints/complaint_detail.html:1387 +#: templates/complaints/complaint_threshold_form.html:314 +#: templates/organizations/staff_detail.html:362 +#: templates/organizations/staff_list.html:249 msgid "Send Email" -msgstr "إرسال البريد الإلكتروني" +msgstr "إرسال بريد إلكتروني" + +#: templates/complaints/complaint_detail.html:1726 +msgid "Are you sure you want to request an explanation?" +msgstr "هل أنت متأكد من رغبتك في طلب إيضاح؟" + +#: templates/complaints/complaint_detail.html:1749 +msgid "Explanation request sent successfully!" +msgstr "تم إرسال طلب الإيضاح بنجاح!" + +#: templates/complaints/complaint_detail.html:1752 +#: templates/complaints/complaint_detail.html:1802 +msgid "Error:" +msgstr "خطأ:" + +#: templates/complaints/complaint_detail.html:1752 +#: templates/complaints/complaint_detail.html:1802 +msgid "Unknown error" +msgstr "خطأ غير معروف" + +#: templates/complaints/complaint_detail.html:1759 +msgid "Failed to send explanation request. Please try again." +msgstr "فشل إرسال طلب الإيضاح. يرجى المحاولة مرة أخرى." + +#: templates/complaints/complaint_detail.html:1771 +#: templates/complaints/complaint_detail.html:1780 +msgid "Link copied to clipboard!" +msgstr "تم نسخ الرابط إلى الحافظة!" + +#: templates/complaints/complaint_detail.html:1785 +msgid "Resend explanation request email?" +msgstr "هل ترغب في إعادة إرسال بريد طلب الإيضاح؟" + +#: templates/complaints/complaint_detail.html:1800 +msgid "Email resent successfully!" +msgstr "تمت إعادة إرسال البريد الإلكتروني بنجاح!" + +#: templates/complaints/complaint_detail.html:1807 +msgid "Failed to resend email. Please try again." +msgstr "فشلت إعادة إرسال البريد الإلكتروني. يرجى المحاولة مرة أخرى." #: templates/complaints/complaint_form.html:5 #: templates/complaints/complaint_list.html:94 @@ -4046,12 +5167,6 @@ msgstr "اختر المستشفى" msgid "Select department" msgstr "اختر القسم" -#: templates/complaints/complaint_form.html:100 -#: templates/complaints/complaint_form.html:230 -#: templates/complaints/inquiry_form.html:177 -msgid "Staff" -msgstr "الموظف" - #: templates/complaints/complaint_form.html:102 msgid "Select staff" msgstr "اختر الموظف" @@ -4087,7 +5202,9 @@ msgstr "الاستبيان" #: templates/complaints/complaint_form.html:232 #: templates/complaints/inquiry_form.html:182 #: templates/complaints/inquiry_form.html:197 -#: templates/layouts/partials/sidebar.html:234 +#: templates/layouts/partials/sidebar.html:275 +#: templates/social/social_comment_detail.html:15 +#: templates/social/social_platform.html:15 msgid "Social Media" msgstr "وسائل التواصل الاجتماعي" @@ -4144,12 +5261,16 @@ msgid "All Statuses" msgstr "جميع الحالات" #: templates/complaints/complaint_list.html:206 +#: templates/complaints/escalation_rule_form.html:170 +#: templates/complaints/sla_config_list.html:53 #: templates/observations/observation_list.html:209 msgid "All Severities" msgstr "جميع درجات الخطورة" #: templates/complaints/complaint_list.html:218 +#: templates/complaints/escalation_rule_form.html:194 #: templates/complaints/inquiry_list.html:200 +#: templates/complaints/sla_config_list.html:65 msgid "All Priorities" msgstr "جميع الأولويات" @@ -4173,6 +5294,526 @@ msgstr "تصدير CSV" msgid "Export Excel" msgstr "تصدير Excel" +#: templates/complaints/complaint_list.html:393 +#: templates/complaints/inquiry_detail.html:240 +#: templates/complaints/inquiry_detail.html:540 +#: templates/complaints/inquiry_list.html:364 +#: templates/observations/observation_list.html:370 +msgid "Unassigned" +msgstr "غير معين" + +#: templates/complaints/complaint_threshold_form.html:16 +msgid "Edit complaint threshold" +msgstr "تعديل حد الشكاوى" + +#: templates/complaints/complaint_threshold_form.html:18 +msgid "Create new complaint threshold" +msgstr "إنشاء حد شكاوى جديد" + +#: templates/complaints/complaint_threshold_form.html:61 +#: templates/complaints/complaint_threshold_list.html:93 +msgid "Threshold Name" +msgstr "اسم الحد" + +#: templates/complaints/complaint_threshold_form.html:69 +msgid "e.g., Daily Complaint Limit" +msgstr "مثال: الحد اليومي للشكاوى" + +#: templates/complaints/complaint_threshold_form.html:79 +#: templates/complaints/complaint_threshold_list.html:51 +msgid "Threshold Type" +msgstr "نوع الحد" + +#: templates/complaints/complaint_threshold_form.html:82 +msgid "Select Type" +msgstr "اختر النوع" + +#: templates/complaints/complaint_threshold_form.html:99 +msgid "Metric Type" +msgstr "نوع المقياس" + +#: templates/complaints/complaint_threshold_form.html:102 +msgid "Select Metric" +msgstr "اختر المقياس" + +#: templates/complaints/complaint_threshold_form.html:119 +#: templates/complaints/complaint_threshold_list.html:96 +msgid "Threshold Value" +msgstr "قيمة الحد" + +#: templates/complaints/complaint_threshold_form.html:128 +msgid "e.g., 10" +msgstr "مثال: 10" + +#: templates/complaints/complaint_threshold_form.html:138 +msgid "Action to Take" +msgstr "الإجراء المتخذ" + +#: templates/complaints/complaint_threshold_form.html:141 +msgid "Select Action" +msgstr "اختر الإجراء" + +#: templates/complaints/complaint_threshold_form.html:158 +msgid "Complaint Category (Optional)" +msgstr "فئة الشكوى (اختياري)" + +#: templates/complaints/complaint_threshold_form.html:175 +msgid "Leave empty to apply to all complaint categories" +msgstr "اتركه فارغًا للتطبيق على جميع فئات الشكاوى" + +#: templates/complaints/complaint_threshold_form.html:182 +msgid "Notify Emails (Optional)" +msgstr "بريد الإشعار (اختياري)" + +#: templates/complaints/complaint_threshold_form.html:189 +msgid "email1@example.com, email2@example.com" +msgstr "email1@example.com, email2@example.com" + +#: templates/complaints/complaint_threshold_form.html:196 +msgid "" +"Comma-separated list of email addresses to notify when threshold is reached" +msgstr "قائمة بعناوين البريد الإلكتروني مفصولة بفواصل لإشعارها عند الوصول إلى الحد" + +#: templates/complaints/complaint_threshold_form.html:213 +msgid "Only active thresholds will be monitored" +msgstr "سيتم مراقبة الحدود المفعّلة فقط" + +#: templates/complaints/complaint_threshold_form.html:225 +msgid "Optional notes about this threshold" +msgstr "ملاحظات اختيارية حول هذا الحد" + +#: templates/complaints/complaint_threshold_form.html:255 +#: templates/complaints/escalation_rule_form.html:267 +#: templates/complaints/inquiry_form.html:217 +#: templates/complaints/sla_config_form.html:201 +#: templates/standards/standard_form.html:146 +msgid "Help" +msgstr "مساعدة" + +#: templates/complaints/complaint_threshold_form.html:258 +msgid "Understanding Complaint Thresholds" +msgstr "فهم حدود الشكاوى" + +#: templates/complaints/complaint_threshold_form.html:261 +msgid "" +"Thresholds monitor complaint metrics and trigger actions when limits are " +"exceeded." +msgstr "تقوم الحدود بمراقبة مؤشرات الشكاوى وتفعيل الإجراءات عند تجاوز القيم المحددة." + +#: templates/complaints/complaint_threshold_form.html:265 +msgid "Threshold Types" +msgstr "أنواع الحدود" + +#: templates/complaints/complaint_threshold_form.html:270 +#: templates/complaints/complaint_threshold_list.html:54 +msgid "Daily" +msgstr "يومي" + +#: templates/complaints/complaint_threshold_form.html:270 +msgid "Monitor daily complaint volume" +msgstr "مراقبة عدد الشكاوى اليومي" + +#: templates/complaints/complaint_threshold_form.html:274 +#: templates/complaints/complaint_threshold_list.html:55 +msgid "Weekly" +msgstr "أسبوعي" + +#: templates/complaints/complaint_threshold_form.html:274 +msgid "Monitor weekly complaint volume" +msgstr "مراقبة عدد الشكاوى الأسبوعي" + +#: templates/complaints/complaint_threshold_form.html:278 +#: templates/complaints/complaint_threshold_list.html:56 +msgid "Monthly" +msgstr "شهري" + +#: templates/complaints/complaint_threshold_form.html:278 +msgid "Monitor monthly complaint volume" +msgstr "مراقبة عدد الشكاوى الشهري" + +#: templates/complaints/complaint_threshold_form.html:282 +#: templates/complaints/complaint_threshold_list.html:57 +msgid "By Category" +msgstr "حسب الفئة" + +#: templates/complaints/complaint_threshold_form.html:282 +msgid "Monitor specific complaint categories" +msgstr "مراقبة فئات شكاوى محددة" + +#: templates/complaints/complaint_threshold_form.html:289 +msgid "Metric Types" +msgstr "أنواع المقاييس" + +#: templates/complaints/complaint_threshold_form.html:294 +msgid "Number of complaints" +msgstr "عدد الشكاوى" + +#: templates/complaints/complaint_threshold_form.html:298 +msgid "Percentage" +msgstr "نسبة مئوية" + +#: templates/complaints/complaint_threshold_form.html:298 +msgid "Percentage of total complaints" +msgstr "نسبة من إجمالي الشكاوى" + +#: templates/complaints/complaint_threshold_form.html:310 +msgid "Send Alert" +msgstr "إرسال تنبيه" + +#: templates/complaints/complaint_threshold_form.html:310 +msgid "Notify administrators" +msgstr "إشعار المشرفين" + +#: templates/complaints/complaint_threshold_form.html:314 +msgid "Send email notifications" +msgstr "إرسال إشعارات عبر البريد الإلكتروني" + +#: templates/complaints/complaint_threshold_form.html:318 +msgid "Generate Report" +msgstr "إنشاء تقرير" + +#: templates/complaints/complaint_threshold_form.html:318 +msgid "Create detailed report" +msgstr "إنشاء تقرير تفصيلي" + +#: templates/complaints/complaint_threshold_list.html:15 +msgid "Configure thresholds for automatic alerts and reports" +msgstr "تهيئة الحدود للتنبيهات والتقارير التلقائية" + +#: templates/complaints/complaint_threshold_list.html:20 +#: templates/complaints/complaint_threshold_list.html:217 +msgid "Create Threshold" +msgstr "إنشاء حد" + +#: templates/complaints/complaint_threshold_list.html:98 +msgid "Action" +msgstr "الإجراء" + +#: templates/complaints/complaint_threshold_list.html:146 +msgid "Are you sure you want to delete this threshold?" +msgstr "هل أنت متأكد من رغبتك في حذف هذا الحد؟" + +#: templates/complaints/complaint_threshold_list.html:213 +msgid "No thresholds found. Create your first threshold to get started." +msgstr "لم يتم العثور على أي حدود. أنشئ أول حد للبدء." + +# Escalation Rules + +#: templates/complaints/escalation_rule_form.html:16 +msgid "Edit escalation rule" +msgstr "تعديل قاعدة التصعيد" + +#: templates/complaints/escalation_rule_form.html:18 +msgid "Create new escalation rule" +msgstr "إنشاء قاعدة تصعيد جديدة" + +#: templates/complaints/escalation_rule_form.html:61 +#: templates/complaints/escalation_rule_list.html:92 +msgid "Rule Name" +msgstr "اسم القاعدة" + +#: templates/complaints/escalation_rule_form.html:69 +msgid "e.g., Level 1 Escalation - High Priority" +msgstr "مثال: تصعيد المستوى الأول - أولوية عالية" + +#: templates/complaints/escalation_rule_form.html:79 +#: templates/complaints/escalation_rule_list.html:51 +msgid "Escalation Level" +msgstr "مستوى التصعيد" + +#: templates/complaints/escalation_rule_form.html:82 +msgid "Select Level" +msgstr "اختر المستوى" + +#: templates/complaints/escalation_rule_form.html:99 +#: templates/complaints/escalation_rule_list.html:94 +msgid "Trigger Hours" +msgstr "ساعات التفعيل" + +#: templates/complaints/escalation_rule_form.html:109 +msgid "e.g., 24" +msgstr "مثال: 24" + +#: templates/complaints/escalation_rule_form.html:116 +msgid "Hours after complaint creation to trigger escalation" +msgstr "عدد الساعات بعد إنشاء الشكوى لتفعيل التصعيد" + +#: templates/complaints/escalation_rule_form.html:123 +msgid "Escalate To Role" +msgstr "التصعيد إلى دور" + +#: templates/complaints/escalation_rule_form.html:126 +msgid "Select Role" +msgstr "اختر الدور" + +#: templates/complaints/escalation_rule_form.html:143 +msgid "Escalate To Specific User" +msgstr "التصعيد إلى مستخدم محدد" + +#: templates/complaints/escalation_rule_form.html:146 +msgid "Select User (Optional)" +msgstr "اختر المستخدم (اختياري)" + +#: templates/complaints/escalation_rule_form.html:160 +msgid "Overrides role if specified" +msgstr "يتجاوز الدور في حال تحديده" + +#: templates/complaints/escalation_rule_form.html:167 +msgid "Severity (Optional)" +msgstr "درجة الخطورة (اختياري)" + +#: templates/complaints/escalation_rule_form.html:184 +msgid "Leave empty to apply to all severities" +msgstr "اتركه فارغًا للتطبيق على جميع درجات الخطورة" + +#: templates/complaints/escalation_rule_form.html:191 +msgid "Priority (Optional)" +msgstr "الأولوية (اختياري)" + +#: templates/complaints/escalation_rule_form.html:208 +msgid "Leave empty to apply to all priorities" +msgstr "اتركه فارغًا للتطبيق على جميع الأولويات" + +#: templates/complaints/escalation_rule_form.html:225 +msgid "Only active rules will be triggered" +msgstr "سيتم تفعيل القواعد المفعّلة فقط" + +#: templates/complaints/escalation_rule_form.html:237 +msgid "Optional notes about this escalation rule" +msgstr "ملاحظات اختيارية حول قاعدة التصعيد هذه" + +#: templates/complaints/escalation_rule_form.html:270 +msgid "Understanding Escalation Rules" +msgstr "فهم قواعد التصعيد" + +#: templates/complaints/escalation_rule_form.html:273 +msgid "" +"Escalation rules automatically reassign complaints to higher-level staff " +"when they exceed specified time thresholds." +msgstr "تعيد قواعد التصعيد تعيين الشكاوى تلقائيًا إلى موظفين ذوي مستوى أعلى عند تجاوز المهل الزمنية المحددة." + +#: templates/complaints/escalation_rule_form.html:278 +msgid "Level 1: Escalate to department head" +msgstr "المستوى 1: التصعيد إلى رئيس القسم" + +#: templates/complaints/escalation_rule_form.html:282 +msgid "Level 2: Escalate to hospital admin" +msgstr "المستوى 2: التصعيد إلى مشرف المستشفى" + +#: templates/complaints/escalation_rule_form.html:286 +msgid "Level 3: Escalate to PX admin" +msgstr "المستوى 3: التصعيد إلى مشرف PX" + +#: templates/complaints/escalation_rule_form.html:293 +msgid "Escalation Flow" +msgstr "تسلسل التصعيد" + +#: templates/complaints/escalation_rule_form.html:297 +msgid "Complaint created" +msgstr "تم إنشاء الشكوى" + +#: templates/complaints/escalation_rule_form.html:298 +msgid "Trigger hours pass" +msgstr "انقضاء ساعات التفعيل" + +#: templates/complaints/escalation_rule_form.html:299 +msgid "Rule checks severity/priority" +msgstr "تتحقق القاعدة من الخطورة/الأولوية" + +#: templates/complaints/escalation_rule_form.html:300 +msgid "Complaint reassigned automatically" +msgstr "إعادة تعيين الشكوى تلقائيًا" + +#: templates/complaints/escalation_rule_form.html:301 +msgid "Notification sent to new assignee" +msgstr "إرسال إشعار إلى المعيّن الجديد" + +#: templates/complaints/escalation_rule_list.html:15 +msgid "Configure automatic complaint escalation based on time thresholds" +msgstr "تهيئة التصعيد التلقائي للشكاوى بناءً على المهل الزمنية" + +#: templates/complaints/escalation_rule_list.html:20 +#: templates/complaints/escalation_rule_list.html:230 +msgid "Create Escalation Rule" +msgstr "إنشاء قاعدة تصعيد" + +#: templates/complaints/escalation_rule_list.html:53 +msgid "All Levels" +msgstr "جميع المستويات" + +#: templates/complaints/escalation_rule_list.html:93 +#: templates/complaints/escalation_rule_list.html:111 +msgid "Level" +msgstr "المستوى" + +#: templates/complaints/escalation_rule_list.html:95 +msgid "Escalate To" +msgstr "التصعيد إلى" + +#: templates/complaints/escalation_rule_list.html:159 +msgid "Are you sure you want to delete this escalation rule?" +msgstr "هل أنت متأكد من رغبتك في حذف قاعدة التصعيد هذه؟" + +#: templates/complaints/escalation_rule_list.html:226 +msgid "No escalation rules found. Create your first rule to get started." +msgstr "لم يتم العثور على أي قواعد تصعيد. أنشئ أول قاعدة للبدء." + +# Explanation Status + +#: templates/complaints/explanation_already_submitted.html:7 +#: templates/complaints/explanation_already_submitted.html:56 +#: templates/complaints/explanation_already_submitted.html:96 +msgid "Already Submitted" +msgstr "تم الإرسال مسبقًا" + +#: templates/complaints/explanation_already_submitted.html:59 +msgid "" +"This explanation link has already been used. Each explanation link can only " +"be used once." +msgstr "تم استخدام رابط الإيضاح هذا مسبقًا. يمكن استخدام كل رابط إيضاح مرة واحدة فقط." + +#: templates/complaints/explanation_already_submitted.html:63 +msgid "Complaint Information" +msgstr "معلومات الشكوى" + +#: templates/complaints/explanation_already_submitted.html:66 +#: templates/complaints/explanation_form.html:63 +#: templates/complaints/explanation_success.html:66 +#: templates/emails/explanation_request.html:127 +msgid "Reference:" +msgstr "المرجع:" + +#: templates/complaints/explanation_already_submitted.html:73 +#: templates/complaints/explanation_success.html:72 +msgid "Submitted On:" +msgstr "تاريخ الإرسال:" + +#: templates/complaints/explanation_already_submitted.html:78 +msgid "Submitted By:" +msgstr "تم الإرسال بواسطة:" + +#: templates/complaints/explanation_already_submitted.html:86 +msgid "What If You Need To Update?" +msgstr "ماذا لو احتجت إلى التحديث؟" + +#: templates/complaints/explanation_already_submitted.html:88 +msgid "" +"If you need to provide additional information or make changes to your " +"explanation, please contact the PX team directly." +msgstr "" +"إذا كنت بحاجة إلى تقديم معلومات إضافية أو إجراء تعديلات على الإيضاح، يرجى " +"التواصل مباشرة مع فريق PX." + +#: templates/complaints/explanation_already_submitted.html:97 +msgid "This link cannot be used again." +msgstr "لا يمكن استخدام هذا الرابط مرة أخرى." + +#: templates/complaints/explanation_already_submitted.html:101 +#: templates/complaints/explanation_form.html:146 +#: templates/complaints/explanation_success.html:101 +msgid "PX360 Complaint Management System" +msgstr "نظام PX360 لإدارة الشكاوى" + +#: templates/complaints/explanation_form.html:7 +#: templates/complaints/explanation_form.html:140 +msgid "Submit Explanation" +msgstr "تقديم الإيضاح" + +#: templates/complaints/explanation_form.html:49 +#: templates/emails/explanation_request.html:168 +msgid "Submit Your Explanation" +msgstr "تقديم إيضاحك" + +#: templates/complaints/explanation_form.html:97 +msgid "Your Explanation" +msgstr "إيضاحك" + +#: templates/complaints/explanation_form.html:100 +msgid "" +"Please provide your perspective about the complaint mentioned above. Your " +"explanation will help us understand the situation better." +msgstr "" +"يرجى توضيح وجهة نظرك حول الشكوى المذكورة أعلاه. سيساعدنا إيضاحك على فهم " +"الوضع بشكل أفضل." + +#: templates/complaints/explanation_form.html:108 +msgid "Write your explanation here..." +msgstr "اكتب إيضاحك هنا..." + +#: templates/complaints/explanation_form.html:114 +msgid "Attachments (Optional)" +msgstr "المرفقات (اختياري)" + +#: templates/complaints/explanation_form.html:117 +msgid "" +"You can attach relevant documents, images, or other files to support your " +"explanation." +msgstr "" +"يمكنك إرفاق مستندات أو صور أو ملفات أخرى ذات صلة لدعم إيضاحك." + +#: templates/complaints/explanation_form.html:127 +msgid "" +"Accepted file types: PDF, DOC, DOCX, JPG, PNG, etc. Maximum file size: 10MB." +msgstr "" +"أنواع الملفات المقبولة: PDF، DOC، DOCX، JPG، PNG، وغيرها. الحد الأقصى لحجم " +"الملف: 10 ميجابايت." + +#: templates/complaints/explanation_form.html:133 +msgid "Important Note:" +msgstr "ملاحظة مهمة:" + +#: templates/complaints/explanation_form.html:134 +msgid "" +"This link can only be used once. After submitting your explanation, it will " +"expire and cannot be used again." +msgstr "" +"يمكن استخدام هذا الرابط مرة واحدة فقط. بعد تقديم الإيضاح، ستنتهي صلاحيته " +"ولا يمكن استخدامه مرة أخرى." + +#: templates/complaints/explanation_success.html:7 +msgid "Explanation Submitted" +msgstr "تم تقديم الإيضاح" + +#: templates/complaints/explanation_success.html:56 +msgid "Explanation Submitted Successfully!" +msgstr "تم تقديم الإيضاح بنجاح!" + +#: templates/complaints/explanation_success.html:59 +msgid "" +"Thank you for providing your explanation. It has been received and will be " +"reviewed by the PX team." +msgstr "" +"شكرًا لتقديمك الإيضاح. تم استلامه وسيتم مراجعته من قبل فريق PX." + +#: templates/complaints/explanation_success.html:63 +msgid "Complaint Summary" +msgstr "ملخص الشكوى" + +#: templates/complaints/explanation_success.html:84 +#: templates/complaints/public_complaint_success.html:157 +msgid "What Happens Next?" +msgstr "ماذا بعد؟" + +#: templates/complaints/explanation_success.html:86 +msgid "Your explanation will be reviewed by the complaint assignee" +msgstr "سيتم مراجعة إيضاحك من قبل المسؤول عن الشكوى" + +#: templates/complaints/explanation_success.html:87 +msgid "The PX team may contact you if additional information is needed" +msgstr "قد يتواصل معك فريق PX في حال الحاجة إلى معلومات إضافية" + +#: templates/complaints/explanation_success.html:88 +msgid "Your explanation will be considered during the complaint investigation" +msgstr "سيؤخذ إيضاحك بعين الاعتبار أثناء التحقيق في الشكوى" + +#: templates/complaints/explanation_success.html:96 +msgid "Submission Time:" +msgstr "وقت الإرسال:" + +#: templates/complaints/explanation_success.html:97 +msgid "A confirmation email has been sent to the complaint assignee." +msgstr "تم إرسال رسالة تأكيد إلى المسؤول عن الشكوى." + #: templates/complaints/inquiry_detail.html:107 #: templates/complaints/inquiry_form.html:36 msgid "Back to Inquiries" @@ -4191,6 +5832,10 @@ msgstr "الرد" msgid "Responded by" msgstr "تم الرد من قبل" +#: templates/complaints/inquiry_detail.html:399 +msgid "Select user..." +msgstr "اختر مستخدم..." + #: templates/complaints/inquiry_detail.html:455 msgid "Respond to Inquiry" msgstr "الرد على الاستفسار" @@ -4207,6 +5852,7 @@ msgstr "إرسال الرد" #: templates/complaints/inquiry_detail.html:473 #: templates/complaints/inquiry_form.html:79 #: templates/complaints/public_complaint_form.html:134 +#: templates/organizations/staff_detail.html:107 msgid "Contact Information" msgstr "معلومات الاتصال" @@ -4220,6 +5866,8 @@ msgstr "معلومات الاتصال" #: templates/observations/public_new.html:360 #: templates/organizations/hospital_list.html:18 #: templates/organizations/patient_list.html:17 +#: templates/organizations/staff_detail.html:122 +#: templates/organizations/staff_list.html:79 #: templates/physicians/physician_detail.html:68 #: templates/surveys/instance_detail.html:110 msgid "Phone" @@ -4324,11 +5972,6 @@ msgstr "تاريخ استحقاق اختياري" msgid "Leave empty for default based on priority" msgstr "اتركه فارغًا للاعتماد على الإعداد الافتراضي حسب الأولوية" -#: templates/complaints/inquiry_form.html:217 -#: templates/standards/standard_form.html:146 -msgid "Help" -msgstr "مساعدة" - #: templates/complaints/inquiry_form.html:220 msgid "Use this form to create a new inquiry from a patient or visitor." msgstr "استخدم هذا النموذج لإنشاء استفسار جديد من مريض أو زائر." @@ -4502,10 +6145,6 @@ msgid "" "track your complaint status." msgstr "يرجى حفظ رقم المرجع لمتابعة حالة الشكوى." -#: templates/complaints/public_complaint_success.html:157 -msgid "What Happens Next?" -msgstr "ماذا بعد؟" - #: templates/complaints/public_complaint_success.html:159 msgid "Your complaint will be reviewed by our team within 24 hours" msgstr "ستتم مراجعة الشكوى خلال 24 ساعة." @@ -4592,9 +6231,112 @@ msgstr "إرسال الاستفسار" msgid "Failed to submit inquiry. Please try again." msgstr "فشل إرسال الاستفسار. يرجى المحاولة مرة أخرى." -#: templates/config/dashboard.html:24 -msgid "SLA Configurations" -msgstr "إعدادات SLA" +#: templates/complaints/sla_config_form.html:16 +msgid "Edit SLA configuration" +msgstr "تعديل إعدادات اتفاقية مستوى الخدمة" + +#: templates/complaints/sla_config_form.html:18 +msgid "Create new SLA configuration" +msgstr "إنشاء إعدادات اتفاقية مستوى خدمة جديدة" + +#: templates/complaints/sla_config_form.html:64 +msgid "Select Severity" +msgstr "اختر درجة الخطورة" + +#: templates/complaints/sla_config_form.html:84 +msgid "Select Priority" +msgstr "اختر الأولوية" + +#: templates/complaints/sla_config_form.html:101 +msgid "SLA Deadline (Hours)" +msgstr "المهلة الزمنية لاتفاقية مستوى الخدمة (بالساعات)" + +#: templates/complaints/sla_config_form.html:118 +msgid "Hours after complaint creation before deadline" +msgstr "عدد الساعات بعد إنشاء الشكوى قبل انتهاء المهلة" + +#: templates/complaints/sla_config_form.html:125 +msgid "Warning Threshold (Hours)" +msgstr "حد التحذير (بالساعات)" + +#: templates/complaints/sla_config_form.html:135 +msgid "e.g., 18" +msgstr "مثال: 18" + +#: templates/complaints/sla_config_form.html:142 +msgid "Hours before deadline to send warning notification" +msgstr "عدد الساعات قبل انتهاء المهلة لإرسال إشعار تحذيري" + +#: templates/complaints/sla_config_form.html:159 +msgid "Only active configurations will be applied to complaints" +msgstr "سيتم تطبيق الإعدادات المفعّلة فقط على الشكاوى" + +#: templates/complaints/sla_config_form.html:171 +msgid "Optional notes about this configuration" +msgstr "ملاحظات اختيارية حول هذه الإعدادات" + +#: templates/complaints/sla_config_form.html:204 +msgid "Understanding SLA Configuration" +msgstr "فهم إعدادات اتفاقية مستوى الخدمة" + +#: templates/complaints/sla_config_form.html:207 +msgid "" +"Service Level Agreements (SLAs) define the timeframes within which " +"complaints should be resolved based on their severity and priority." +msgstr "" +"تحدد اتفاقيات مستوى الخدمة (SLA) الأطر الزمنية التي يجب خلالها معالجة " +"الشكاوى بناءً على درجة الخطورة والأولوية." + +#: templates/complaints/sla_config_form.html:212 +msgid "High severity complaints typically have shorter SLAs" +msgstr "تكون للشكاوى ذات الخطورة العالية مهَل زمنية أقصر عادةً" + +#: templates/complaints/sla_config_form.html:216 +msgid "Warning threshold sends notifications before deadline" +msgstr "يقوم حد التحذير بإرسال إشعارات قبل انتهاء المهلة" + +#: templates/complaints/sla_config_form.html:220 +msgid "Inactive configurations won't be applied" +msgstr "لن يتم تطبيق الإعدادات غير المفعّلة" + +#: templates/complaints/sla_config_form.html:227 +msgid "Best Practices" +msgstr "أفضل الممارسات" + +#: templates/complaints/sla_config_form.html:232 +msgid "Set warning threshold at least 4-6 hours before deadline" +msgstr "تعيين حد التحذير قبل انتهاء المهلة بـ 4 إلى 6 ساعات على الأقل" + +#: templates/complaints/sla_config_form.html:236 +msgid "Consider hospital-specific requirements" +msgstr "مراعاة متطلبات المستشفى الخاصة" + +#: templates/complaints/sla_config_list.html:15 +msgid "Manage Service Level Agreement settings for complaint deadlines" +msgstr "إدارة إعدادات اتفاقية مستوى الخدمة لمهل معالجة الشكاوى" + +#: templates/complaints/sla_config_list.html:20 +#: templates/complaints/sla_config_list.html:220 +msgid "Create SLA Config" +msgstr "إنشاء إعدادات SLA" + +#: templates/complaints/sla_config_list.html:108 +msgid "SLA Hours" +msgstr "ساعات SLA" + +#: templates/complaints/sla_config_list.html:109 +msgid "Warning Hours" +msgstr "ساعات التحذير" + +#: templates/complaints/sla_config_list.html:149 +msgid "Are you sure you want to delete this SLA configuration?" +msgstr "هل أنت متأكد من رغبتك في حذف إعدادات اتفاقية مستوى الخدمة هذه؟" + +#: templates/complaints/sla_config_list.html:216 +msgid "" +"No SLA configurations found. Create your first configuration to get started." +msgstr "" +"لم يتم العثور على أي إعدادات لاتفاقية مستوى الخدمة. أنشئ أول إعداد للبدء." #: templates/config/dashboard.html:37 msgid "Routing Rules" @@ -4658,6 +6400,11 @@ msgid "" msgstr "" "إذا كنت تعتقد أن هذا خطأ، يرجى التواصل مع مسؤول PX360 أو فريق الدعم الفني." +#: templates/core/no_hospital_assigned.html:59 +#: templates/layouts/partials/topbar.html:122 +msgid "Are you sure you want to logout?" +msgstr "هل أنت متأكد من رغبتك في تسجيل الخروج؟" + #: templates/core/public_submit.html:4 msgid "Submit Feedback" msgstr "إرسال ملاحظات" @@ -4778,6 +6525,7 @@ msgstr "يرجى وصف ما لاحظته بالتفصيل..." #: templates/core/public_submit.html:763 #: templates/observations/observation_detail.html:209 #: templates/observations/public_new.html:303 +#: templates/organizations/staff_detail.html:157 msgid "Location" msgstr "الموقع" @@ -4860,6 +6608,7 @@ msgid "No hospitals found in the system." msgstr "لم يتم العثور على مستشفيات في النظام." #: templates/core/select_hospital.html:63 +#: templates/px_sources/source_user_dashboard.html:22 #: templates/references/document_form.html:59 #: templates/references/folder_form.html:45 templates/references/search.html:23 #: templates/standards/department_standards.html:21 @@ -4931,6 +6680,70 @@ msgstr "رمز الحدث" msgid "Processed At" msgstr "تمت المعالجة في" +#: templates/emails/explanation_request.html:7 +#: templates/emails/explanation_request.html:109 +msgid "Explanation Request" +msgstr "طلب إيضاح" + +#: templates/emails/explanation_request.html:113 +msgid "Dear" +msgstr "عزيزي/عزيزتي" + +#: templates/emails/explanation_request.html:115 +msgid "" +"You have been assigned to provide an explanation for the following patient " +"complaint. Please review the details and submit your response using the link " +"below." +msgstr "" +"تم تكليفك بتقديم إيضاح بخصوص شكوى المريض التالية. يرجى مراجعة التفاصيل " +"وتقديم ردك باستخدام الرابط أدناه." + +#: templates/emails/explanation_request.html:119 +msgid "Note from PX Team:" +msgstr "ملاحظة من فريق PX:" + +#: templates/emails/explanation_request.html:155 +msgid "Date:" +msgstr "التاريخ:" + +#: templates/emails/explanation_request.html:172 +msgid "Important Information:" +msgstr "معلومات مهمة:" + +#: templates/emails/explanation_request.html:174 +msgid "This link is unique and can only be used once" +msgstr "هذا الرابط فريد ويمكن استخدامه مرة واحدة فقط" + +#: templates/emails/explanation_request.html:175 +msgid "You can attach supporting documents to your explanation" +msgstr "يمكنك إرفاق مستندات داعمة لإيضاحك" + +#: templates/emails/explanation_request.html:176 +msgid "Your response will be reviewed by the PX team" +msgstr "سيتم مراجعة ردك من قبل فريق PX" + +#: templates/emails/explanation_request.html:177 +msgid "Please submit your explanation at your earliest convenience" +msgstr "يرجى تقديم إيضاحك في أقرب وقت ممكن" + +#: templates/emails/explanation_request.html:181 +msgid "" +"If you have any questions or concerns, please contact the PX team directly." +msgstr "في حال وجود أي استفسارات أو ملاحظات، يرجى التواصل مباشرة مع فريق PX." + +#: templates/emails/explanation_request.html:183 +msgid "Thank you for your cooperation." +msgstr "شكرًا لتعاونك." + +#: templates/emails/explanation_request.html:188 +msgid "" +"This is an automated email. Please do not reply directly to this message." +msgstr "هذه رسالة بريد إلكتروني آلية. يرجى عدم الرد مباشرة على هذه الرسالة." + +#: templates/emails/explanation_request.html:189 +msgid "If you need assistance, contact your PX administrator." +msgstr "في حال احتجت إلى مساعدة، يرجى التواصل مع مشرف PX." + #: templates/feedback/feedback_delete_confirm.html:62 msgid "Detail" msgstr "التفاصيل" @@ -5042,7 +6855,8 @@ msgid "All Complaints" msgstr "جميع الشكاوى" #: templates/layouts/partials/sidebar.html:56 -#: templates/layouts/partials/sidebar.html:263 +#: templates/layouts/partials/sidebar.html:313 +#: templates/social/social_comment_list.html:23 msgid "Analytics" msgstr "التحليلات" @@ -5058,40 +6872,57 @@ msgstr "الملاحظات" msgid "Patient Journeys" msgstr "رحلات المرضى" -#: templates/layouts/partials/sidebar.html:172 +#: templates/layouts/partials/sidebar.html:183 +msgid "Staff List" +msgstr "قائمة الموظفين" + +#: templates/layouts/partials/sidebar.html:190 +#: templates/organizations/staff_detail.html:167 +#: templates/organizations/staff_hierarchy_d3.html:14 +msgid "Hierarchy" +msgstr "الهيكل التنظيمي" + +#: templates/layouts/partials/sidebar.html:213 +#: templates/organizations/staff_hierarchy_d3.html:12 msgid "Organizations" msgstr "المنظمات" -#: templates/layouts/partials/sidebar.html:194 +#: templates/layouts/partials/sidebar.html:235 msgid "Interactions" msgstr "التفاعلات" -#: templates/layouts/partials/sidebar.html:243 +#: templates/layouts/partials/sidebar.html:284 +#: templates/px_sources/source_confirm_delete.html:14 +#: templates/px_sources/source_detail.html:14 +#: templates/px_sources/source_form.html:14 +#: templates/px_sources/source_list.html:4 +#: templates/px_sources/source_list.html:13 +#: templates/px_sources/source_user_confirm_delete.html:14 +#: templates/px_sources/source_user_form.html:14 +msgid "PX Sources" +msgstr "مصادر PX" + +#: templates/layouts/partials/sidebar.html:293 msgid "References" msgstr "المراجع" -#: templates/layouts/partials/sidebar.html:252 +#: templates/layouts/partials/sidebar.html:302 msgid "Standards" msgstr "المعايير" -#: templates/layouts/partials/sidebar.html:272 +#: templates/layouts/partials/sidebar.html:322 msgid "QI Projects" msgstr "مشاريع تحسين الجودة" -#: templates/layouts/partials/sidebar.html:288 -#: templates/layouts/partials/topbar.html:113 -msgid "Settings" -msgstr "الإعدادات" - -#: templates/layouts/partials/sidebar.html:297 +#: templates/layouts/partials/sidebar.html:347 msgid "Configuration" msgstr "الإعدادات" -#: templates/layouts/partials/sidebar.html:334 +#: templates/layouts/partials/sidebar.html:384 msgid "Switch Hospital" msgstr "تبديل المستشفى" -#: templates/layouts/partials/sidebar.html:361 +#: templates/layouts/partials/sidebar.html:411 msgid "View All Hospitals" msgstr "عرض جميع المستشفيات" @@ -5099,10 +6930,6 @@ msgstr "عرض جميع المستشفيات" msgid "from last period" msgstr "من الفترة السابقة" -#: templates/layouts/partials/topbar.html:36 -msgid "Notifications" -msgstr "الإشعارات" - #: templates/layouts/partials/topbar.html:47 msgid "No new notifications" msgstr "لا توجد إشعارات جديدة" @@ -5206,13 +7033,6 @@ msgstr "تفاصيل الملاحظة" msgid "Incident Date/Time" msgstr "تاريخ/وقت الحادثة" -#: templates/observations/observation_detail.html:219 -#: templates/observations/public_success.html:236 -#: templates/observations/public_track.html:283 -#: templates/observations/public_track.html:296 -msgid "Submitted" -msgstr "تم الإرسال" - #: templates/observations/observation_detail.html:228 #: templates/observations/public_track.html:302 msgid "Triaged" @@ -5250,10 +7070,6 @@ msgstr "عرض الإجراء" msgid "Triage" msgstr "فرز" -#: templates/observations/observation_detail.html:406 -msgid "Note" -msgstr "ملاحظة" - #: templates/observations/observation_detail.html:430 msgid "Internal note (not visible to public)" msgstr "ملاحظة داخلية (غير مرئية للعامة)" @@ -5385,6 +7201,7 @@ msgid "Submit Another" msgstr "إرسال ملاحظة أخرى" #: templates/observations/public_success.html:264 +#: templates/social/partials/ai_analysis_bilingual.html:332 msgid "Copied!" msgstr "تم النسخ!" @@ -5458,9 +7275,14 @@ msgid "Code" msgstr "الرمز" #: templates/organizations/department_list.html:18 +#: templates/organizations/staff_list.html:82 msgid "Manager" msgstr "المدير" +#: templates/organizations/hierarchy_node.html:38 +msgid "Direct Report" +msgstr "مرؤوس مباشر" + #: templates/organizations/hospital_list.html:17 msgid "City" msgstr "المدينة" @@ -5478,6 +7300,441 @@ msgstr "المستشفى الرئيسي" msgid "License" msgstr "الترخيص" +#: templates/organizations/staff_detail.html:5 +msgid "Staff Details" +msgstr "تفاصيل الموظف" + +#: templates/organizations/staff_detail.html:33 +#: templates/organizations/staff_form.html:29 +msgid "Personal Information" +msgstr "المعلومات الشخصية" + +#: templates/organizations/staff_detail.html:40 +msgid "First Name (English)" +msgstr "الاسم الأول (بالإنجليزية)" + +#: templates/organizations/staff_detail.html:46 +msgid "Last Name (English)" +msgstr "اسم العائلة (بالإنجليزية)" + +#: templates/organizations/staff_detail.html:54 +#: templates/organizations/staff_form.html:61 +msgid "First Name (Arabic)" +msgstr "الاسم الأول (بالعربية)" + +#: templates/organizations/staff_detail.html:60 +#: templates/organizations/staff_form.html:69 +msgid "Last Name (Arabic)" +msgstr "اسم العائلة (بالعربية)" + +#: templates/organizations/staff_detail.html:67 +#: templates/organizations/staff_form.html:133 +#: templates/physicians/physician_detail.html:43 +msgid "License Number" +msgstr "رقم الترخيص" + +#: templates/organizations/staff_detail.html:138 +msgid "Demographics" +msgstr "البيانات الديموغرافية" + +#: templates/organizations/staff_detail.html:143 +msgid "Gender" +msgstr "الجنس" + +#: templates/organizations/staff_detail.html:153 +msgid "Country" +msgstr "الدولة" + +#: templates/organizations/staff_detail.html:172 +msgid "Reports To" +msgstr "يتبع إداريًا لـ" + +#: templates/organizations/staff_detail.html:184 +msgid "Direct Reports" +msgstr "المرؤوسون المباشرون" + +#: templates/organizations/staff_detail.html:204 +msgid "Additional Details" +msgstr "تفاصيل إضافية" + +#: templates/organizations/staff_detail.html:209 +msgid "Section" +msgstr "القسم الفرعي" + +#: templates/organizations/staff_detail.html:213 +msgid "Subsection" +msgstr "الوحدة" + +#: templates/organizations/staff_detail.html:217 +msgid "Department (Original)" +msgstr "القسم (الأصلي)" + +#: templates/organizations/staff_detail.html:222 +msgid "Full Name (Original)" +msgstr "الاسم الكامل (الأصلي)" + +#: templates/organizations/staff_detail.html:235 +#: templates/organizations/staff_list.html:83 +msgid "User Account" +msgstr "حساب المستخدم" + +#: templates/organizations/staff_detail.html:241 +msgid "User account exists" +msgstr "يوجد حساب مستخدم" + +#: templates/organizations/staff_detail.html:268 +msgid "Resend Invitation Email" +msgstr "إعادة إرسال بريد الدعوة" + +#: templates/organizations/staff_detail.html:271 +#: templates/organizations/staff_detail.html:373 +#: templates/organizations/staff_list.html:156 +#: templates/organizations/staff_list.html:260 +msgid "Unlink User Account" +msgstr "فصل حساب المستخدم" + +#: templates/organizations/staff_detail.html:277 +msgid "No user account" +msgstr "لا يوجد حساب مستخدم" + +#: templates/organizations/staff_detail.html:280 +msgid "" +"This staff member does not have a user account and cannot log in to the " +"system." +msgstr "هذا الموظف لا يملك حساب مستخدم ولا يمكنه تسجيل الدخول إلى النظام." + +#: templates/organizations/staff_detail.html:285 +#: templates/organizations/staff_detail.html:333 +#: templates/organizations/staff_form.html:216 +#: templates/organizations/staff_list.html:148 +#: templates/organizations/staff_list.html:220 +msgid "Create User Account" +msgstr "إنشاء حساب مستخدم" + +#: templates/organizations/staff_detail.html:289 +msgid "Add an email address to create a user account." +msgstr "أضف عنوان بريد إلكتروني لإنشاء حساب مستخدم." + +#: templates/organizations/staff_detail.html:306 +msgid "Staff Status" +msgstr "حالة الموظف" + +#: templates/organizations/staff_detail.html:337 +#: templates/organizations/staff_list.html:224 +msgid "Are you sure you want to create a user account for" +msgstr "هل أنت متأكد من رغبتك في إنشاء حساب مستخدم لـ" + +#: templates/organizations/staff_detail.html:338 +#: templates/organizations/staff_list.html:225 +msgid "" +"A username will be generated automatically and credentials will be emailed to" +msgstr "سيتم إنشاء اسم مستخدم تلقائيًا وإرسال بيانات الدخول عبر البريد الإلكتروني إلى" + +#: templates/organizations/staff_detail.html:342 +#: templates/organizations/staff_list.html:229 +msgid "Create Account" +msgstr "إنشاء حساب" + +#: templates/organizations/staff_detail.html:353 +#: templates/organizations/staff_list.html:153 +#: templates/organizations/staff_list.html:240 +msgid "Send Invitation Email" +msgstr "إرسال بريد دعوة" + +#: templates/organizations/staff_detail.html:357 +#: templates/organizations/staff_list.html:244 +msgid "Are you sure you want to send a new invitation email to" +msgstr "هل أنت متأكد من رغبتك في إرسال بريد دعوة جديد إلى" + +#: templates/organizations/staff_detail.html:358 +#: templates/organizations/staff_list.html:245 +msgid "A new password will be generated and sent to" +msgstr "سيتم إنشاء كلمة مرور جديدة وإرسالها إلى" + +#: templates/organizations/staff_detail.html:377 +#: templates/organizations/staff_list.html:264 +msgid "Are you sure you want to unlink the user account from" +msgstr "هل أنت متأكد من رغبتك في فصل حساب المستخدم عن" + +#: templates/organizations/staff_detail.html:378 +msgid "" +"This will remove login access for this staff member. The user account will " +"still exist but will no longer be linked to this staff profile." +msgstr "" +"سيؤدي هذا إلى إزالة صلاحية الدخول لهذا الموظف. سيظل حساب المستخدم موجودًا " +"ولكنه لن يكون مرتبطًا بملف هذا الموظف." + +#: templates/organizations/staff_detail.html:382 +#: templates/organizations/staff_list.html:269 +msgid "Unlink Account" +msgstr "فصل الحساب" + +#: templates/organizations/staff_form.html:5 +#: templates/organizations/staff_form.html:15 +msgid "Edit Staff" +msgstr "تعديل بيانات الموظف" + +#: templates/organizations/staff_form.html:5 +#: templates/organizations/staff_form.html:15 +#: templates/organizations/staff_hierarchy.html:139 +#: templates/organizations/staff_list.html:16 +msgid "Add New Staff" +msgstr "إضافة موظف جديد" + +#: templates/organizations/staff_form.html:80 +msgid "Role Information" +msgstr "معلومات الدور الوظيفي" + +#: templates/organizations/staff_form.html:86 +#: templates/organizations/staff_list.html:46 +msgid "Staff Type" +msgstr "نوع الموظف" + +#: templates/organizations/staff_form.html:95 +#: templates/organizations/staff_list.html:77 +msgid "Job Title" +msgstr "المسمى الوظيفي" + +#: templates/organizations/staff_form.html:107 +msgid "Professional Information" +msgstr "المعلومات المهنية" + +#: templates/organizations/staff_form.html:128 +msgid "Required for creating a user account" +msgstr "مطلوب لإنشاء حساب مستخدم" + +#: templates/organizations/staff_form.html:201 +#: templates/px_sources/source_form.html:96 +#: templates/px_sources/source_user_form.html:133 +msgid "Save" +msgstr "حفظ" + +#: templates/organizations/staff_form.html:221 +msgid "" +"Check this box to automatically create a user account for this staff member. " +"A username will be generated and credentials will be emailed to the staff " +"member." +msgstr "" +"حدد هذا الخيار لإنشاء حساب مستخدم تلقائيًا لهذا الموظف. سيتم إنشاء اسم " +"مستخدم وإرسال بيانات الدخول إلى الموظف عبر البريد الإلكتروني." + +#: templates/organizations/staff_form.html:227 +msgid "Create user account" +msgstr "إنشاء حساب مستخدم" + +#: templates/organizations/staff_form.html:233 +msgid "The staff member must have an email address to create a user account." +msgstr "يجب أن يكون لدى الموظف عنوان بريد إلكتروني لإنشاء حساب مستخدم." + +#: templates/organizations/staff_form.html:248 +msgid "All fields marked with * are required" +msgstr "جميع الحقول المعلّمة بعلامة * مطلوبة" + +#: templates/organizations/staff_form.html:249 +msgid "Employee ID must be unique" +msgstr "يجب أن يكون الرقم الوظيفي فريدًا" + +#: templates/organizations/staff_form.html:250 +msgid "Email is required for user account creation" +msgstr "البريد الإلكتروني مطلوب لإنشاء حساب مستخدم" + +#: templates/organizations/staff_form.html:251 +msgid "License number is required for physicians" +msgstr "رقم الترخيص مطلوب للأطباء" + +# Staff Hierarchy + +#: templates/organizations/staff_hierarchy.html:5 +#: templates/organizations/staff_hierarchy.html:130 +#: templates/organizations/staff_hierarchy_d3.html:10 +msgid "Staff Hierarchy" +msgstr "الهيكل التنظيمي للموظفين" + +#: templates/organizations/staff_hierarchy.html:131 +msgid "View organizational structure and reporting relationships" +msgstr "عرض الهيكل التنظيمي وعلاقات التقارير الإدارية" + +#: templates/organizations/staff_hierarchy.html:135 +msgid "List View" +msgstr "عرض القائمة" + +#: templates/organizations/staff_hierarchy.html:156 +#: templates/organizations/staff_hierarchy_d3.html:27 +msgid "Total Staff" +msgstr "إجمالي الموظفين" + +#: templates/organizations/staff_hierarchy.html:171 +#: templates/organizations/staff_hierarchy_d3.html:38 +msgid "Top Managers" +msgstr "المديرون التنفيذيون" + +#: templates/organizations/staff_hierarchy.html:186 +msgid "Hierarchy Levels" +msgstr "مستويات الهيكل التنظيمي" + +#: templates/organizations/staff_hierarchy.html:187 +msgid "Multi-level" +msgstr "متعدد المستويات" + +#: templates/organizations/staff_hierarchy.html:224 +msgid "Search by name or employee ID..." +msgstr "البحث بالاسم أو الرقم الوظيفي..." + +#: templates/organizations/staff_hierarchy.html:243 +msgid "Found staff member:" +msgstr "تم العثور على الموظف:" + +#: templates/organizations/staff_hierarchy.html:253 +msgid "Organizational Structure" +msgstr "الهيكل التنظيمي" + +#: templates/organizations/staff_hierarchy.html:255 +#: templates/organizations/staff_hierarchy_d3.html:99 +msgid "Expand All" +msgstr "توسيع الكل" + +#: templates/organizations/staff_hierarchy.html:258 +#: templates/organizations/staff_hierarchy_d3.html:102 +msgid "Collapse All" +msgstr "طي الكل" + +#: templates/organizations/staff_hierarchy.html:273 +msgid "No Staff Hierarchy Found" +msgstr "لم يتم العثور على هيكل تنظيمي للموظفين" + +#: templates/organizations/staff_hierarchy.html:274 +msgid "" +"There are no staff members with reporting relationships in the selected " +"filters." +msgstr "لا يوجد موظفون لديهم علاقات تقارير إدارية ضمن عوامل التصفية المحددة." + +#: templates/organizations/staff_hierarchy.html:277 +msgid "Add Staff Member" +msgstr "إضافة موظف" + +#: templates/organizations/staff_hierarchy_d3.html:4 +msgid "Staff Hierarchy - D3 Visualization" +msgstr "الهيكل التنظيمي للموظفين - عرض مرئي (D3)" + +#: templates/organizations/staff_hierarchy_d3.html:49 +msgid "Avg. Hierarchy Depth" +msgstr "متوسط عمق الهيكل التنظيمي" + +#: templates/organizations/staff_hierarchy_d3.html:63 +msgid "Search by name or ID" +msgstr "البحث بالاسم أو الرقم" + +#: templates/organizations/staff_hierarchy_d3.html:67 +msgid "Layout" +msgstr "التخطيط" + +#: templates/organizations/staff_hierarchy_d3.html:69 +msgid "Horizontal" +msgstr "أفقي" + +#: templates/organizations/staff_hierarchy_d3.html:70 +msgid "Vertical" +msgstr "عمودي" + +#: templates/organizations/staff_hierarchy_d3.html:71 +msgid "Radial" +msgstr "دائري" + +#: templates/organizations/staff_hierarchy_d3.html:75 +msgid "Node Size By" +msgstr "حجم العقدة حسب" + +#: templates/organizations/staff_hierarchy_d3.html:77 +msgid "Fixed Size" +msgstr "حجم ثابت" + +#: templates/organizations/staff_hierarchy_d3.html:78 +msgid "Team Size" +msgstr "حجم الفريق" + +#: templates/organizations/staff_hierarchy_d3.html:79 +msgid "Hierarchy Level" +msgstr "مستوى الهيكل" + +#: templates/organizations/staff_hierarchy_d3.html:84 +msgid "Reset View" +msgstr "إعادة تعيين العرض" + +#: templates/organizations/staff_hierarchy_d3.html:95 +msgid "Organizational Chart" +msgstr "المخطط التنظيمي" + +#: templates/organizations/staff_hierarchy_d3.html:114 +msgid "Instructions" +msgstr "التعليمات" + +#: templates/organizations/staff_hierarchy_d3.html:118 +msgid "Zoom & Pan" +msgstr "تكبير وتحريك" + +#: templates/organizations/staff_hierarchy_d3.html:118 +msgid "Use mouse wheel to zoom, click and drag to pan the chart" +msgstr "استخدم عجلة الفأرة للتكبير، وانقر واسحب لتحريك المخطط" + +#: templates/organizations/staff_hierarchy_d3.html:119 +msgid "Expand/Collapse" +msgstr "توسيع/طي" + +#: templates/organizations/staff_hierarchy_d3.html:119 +msgid "Click on a node to expand or collapse its children" +msgstr "انقر على العقدة لتوسيع أو طي العناصر التابعة لها" + +#: templates/organizations/staff_hierarchy_d3.html:120 +msgid "Double-click on a node to view full staff details" +msgstr "انقر مرتين على العقدة لعرض تفاصيل الموظف كاملة" + +#: templates/organizations/staff_hierarchy_d3.html:121 +msgid "" +"Type in the search box to find a staff member. The chart will automatically " +"navigate to them" +msgstr "اكتب في مربع البحث للعثور على موظف، وسيتم الانتقال إليه تلقائيًا في المخطط" + +#: templates/organizations/staff_hierarchy_d3.html:122 +msgid "Layout Options" +msgstr "خيارات التخطيط" + +#: templates/organizations/staff_hierarchy_d3.html:122 +msgid "Switch between horizontal, vertical, and radial layouts" +msgstr "التبديل بين التخطيطات الأفقي والعمودي والدائري" + +#: templates/organizations/staff_list.html:5 +#: templates/organizations/staff_list.html:11 +msgid "Staff Management" +msgstr "إدارة الموظفين" + +#: templates/organizations/staff_list.html:12 +msgid "Manage hospital staff and their user accounts" +msgstr "إدارة موظفي المستشفى وحسابات المستخدمين الخاصة بهم" + +#: templates/organizations/staff_list.html:50 +msgid "Nurse" +msgstr "ممرض/ممرضة" + +#: templates/organizations/staff_list.html:51 +msgid "Administrative" +msgstr "إداري" + +#: templates/organizations/staff_list.html:57 +msgid "Name, ID, or License..." +msgstr "الاسم أو الرقم الوظيفي أو رقم الترخيص..." + +#: templates/organizations/staff_list.html:168 +msgid "No staff members found" +msgstr "لم يتم العثور على أي موظفين" + +#: templates/organizations/staff_list.html:265 +msgid "" +"This will remove the login access for this staff member. The user account " +"will still exist but will no longer be linked to this staff profile." +msgstr "" +"سيؤدي هذا إلى إزالة صلاحية الدخول لهذا الموظف. سيظل حساب المستخدم موجودًا " +"ولكنه لن يكون مرتبطًا بملف هذا الموظف." + #: templates/physicians/department_overview.html:5 #: templates/physicians/department_overview.html:15 #: templates/physicians/department_overview.html:20 @@ -5568,10 +7825,6 @@ msgstr "ضعيف" msgid "Basic Information" msgstr "المعلومات الأساسية" -#: templates/physicians/physician_detail.html:43 -msgid "License Number" -msgstr "رقم الترخيص" - #: templates/physicians/physician_detail.html:79 msgid "Current Month" msgstr "الشهر الحالي" @@ -5743,6 +7996,278 @@ msgstr "تاريخ البدء" msgid "Target Date" msgstr "التاريخ المستهدف" +#: templates/px_sources/source_confirm_delete.html:4 +#: templates/px_sources/source_confirm_delete.html:26 +#: templates/px_sources/source_detail.html:103 +msgid "Delete Source" +msgstr "حذف المصدر" + +#: templates/px_sources/source_confirm_delete.html:41 +#: templates/px_sources/source_user_confirm_delete.html:46 +msgid "Confirm Deletion" +msgstr "تأكيد الحذف" + +#: templates/px_sources/source_confirm_delete.html:46 +msgid "Warning" +msgstr "تحذير" + +#: templates/px_sources/source_confirm_delete.html:47 +msgid "" +"Are you sure you want to delete this source? This action cannot be undone." +msgstr "هل أنت متأكد من رغبتك في حذف هذا المصدر؟ لا يمكن التراجع عن هذا الإجراء." + +#: templates/px_sources/source_confirm_delete.html:75 +msgid "Usage Count" +msgstr "عدد مرات الاستخدام" + +#: templates/px_sources/source_confirm_delete.html:89 +#: templates/px_sources/source_confirm_delete.html:103 +msgid "Cannot Delete" +msgstr "لا يمكن الحذف" + +#: templates/px_sources/source_confirm_delete.html:90 +msgid "" +"This source has been used in {{ usage_count }} record(s). You cannot delete " +"sources that have usage records." +msgstr "" +"تم استخدام هذا المصدر في {{ usage_count }} سجل/سجلات. لا يمكن حذف المصادر " +"التي لديها سجلات استخدام." + +#: templates/px_sources/source_confirm_delete.html:91 +msgid "Recommended action:" +msgstr "الإجراء الموصى به:" + +#: templates/px_sources/source_confirm_delete.html:91 +msgid "" +"Deactivate this source instead by editing it and unchecking the 'Active' " +"checkbox." +msgstr "" +"قم بتعطيل هذا المصدر بدلاً من ذلك عن طريق تعديله وإلغاء تحديد خيار «نشط»." + +#: templates/px_sources/source_confirm_delete.html:99 +#: templates/px_sources/source_user_confirm_delete.html:108 +msgid "Yes, Delete" +msgstr "نعم، حذف" + +#: templates/px_sources/source_detail.html:4 +msgid "PX Source" +msgstr "مصدر PX" + +#: templates/px_sources/source_detail.html:54 +#: templates/px_sources/source_detail.html:60 +msgid "Source Details" +msgstr "تفاصيل المصدر" + +#: templates/px_sources/source_detail.html:100 +#: templates/px_sources/source_form.html:4 +#: templates/px_sources/source_form.html:17 +#: templates/px_sources/source_form.html:23 +msgid "Edit Source" +msgstr "تعديل المصدر" + +#: templates/px_sources/source_detail.html:112 +msgid "Recent Usage" +msgstr "الاستخدام الأخير" + +#: templates/px_sources/source_detail.html:119 +msgid "Content Type" +msgstr "نوع المحتوى" + +#: templates/px_sources/source_detail.html:120 +msgid "Object ID" +msgstr "معرّف الكائن" + +#: templates/px_sources/source_detail.html:139 +msgid "No usage records found for this source." +msgstr "لم يتم العثور على سجلات استخدام لهذا المصدر." + +#: templates/px_sources/source_detail.html:155 +msgid "Source Users" +msgstr "مستخدمو المصدر" + +#: templates/px_sources/source_detail.html:158 +msgid "Add Source User" +msgstr "إضافة مستخدم مصدر" + +#: templates/px_sources/source_detail.html:197 +#: templates/px_sources/source_user_confirm_delete.html:90 +msgid "None" +msgstr "لا يوجد" + +#: templates/px_sources/source_detail.html:224 +msgid "No source users assigned yet." +msgstr "لم يتم تعيين أي مستخدمي مصدر بعد." + +#: templates/px_sources/source_detail.html:226 +msgid "Add a source user" +msgstr "أضف مستخدم مصدر" + +#: templates/px_sources/source_detail.html:228 +msgid "to get started." +msgstr "للبدء." + +#: templates/px_sources/source_form.html:4 +#: templates/px_sources/source_form.html:17 +#: templates/px_sources/source_form.html:23 +msgid "Create Source" +msgstr "إنشاء مصدر" + +#: templates/px_sources/source_form.html:40 +msgid "Source Information" +msgstr "معلومات المصدر" + +#: templates/px_sources/source_form.html:55 +msgid "e.g., Patient Portal" +msgstr "مثال: بوابة المرضى" + +#: templates/px_sources/source_form.html:65 +msgid "e.g., بوابة المرضى" +msgstr "مثال: بوابة المرضى" + +#: templates/px_sources/source_form.html:75 +msgid "Describe this source channel..." +msgstr "صف قناة هذا المصدر..." + +#: templates/px_sources/source_form.html:77 +msgid "Optional: Additional details about this source" +msgstr "اختياري: تفاصيل إضافية حول هذا المصدر" + +#: templates/px_sources/source_form.html:90 +msgid "Uncheck to deactivate this source (it won't appear in dropdowns)" +msgstr "ألغِ التحديد لتعطيل هذا المصدر (لن يظهر في القوائم المنسدلة)" + +#: templates/px_sources/source_list.html:15 +msgid "Manage patient experience source channels" +msgstr "إدارة قنوات مصادر تجربة المريض" + +#: templates/px_sources/source_list.html:20 +msgid "Add Source" +msgstr "إضافة مصدر" + +#: templates/px_sources/source_list.html:30 +msgid "Sources" +msgstr "المصادر" + +#: templates/px_sources/source_list.html:63 +msgid "Name (EN)" +msgstr "الاسم (بالإنجليزية)" + +#: templates/px_sources/source_list.html:64 +msgid "Name (AR)" +msgstr "الاسم (بالعربية)" + +#: templates/px_sources/source_list.html:106 +msgid "No sources found. Click 'Add Source' to create one." +msgstr "لم يتم العثور على أي مصادر. انقر على «إضافة مصدر» لإنشاء مصدر جديد." + +#: templates/px_sources/source_user_confirm_delete.html:4 +#: templates/px_sources/source_user_confirm_delete.html:20 +#: templates/px_sources/source_user_confirm_delete.html:26 +msgid "Delete Source User" +msgstr "حذف مستخدم المصدر" + +#: templates/px_sources/source_user_confirm_delete.html:34 +#: templates/px_sources/source_user_form.html:37 +msgid "Back to Source" +msgstr "العودة إلى المصدر" + +#: templates/px_sources/source_user_confirm_delete.html:52 +msgid "Warning:" +msgstr "تحذير:" + +#: templates/px_sources/source_user_confirm_delete.html:52 +msgid "This action cannot be undone!" +msgstr "لا يمكن التراجع عن هذا الإجراء!" + +#: templates/px_sources/source_user_confirm_delete.html:56 +msgid "Are you sure you want to remove the following source user?" +msgstr "هل أنت متأكد من رغبتك في إزالة مستخدم المصدر التالي؟" + +#: templates/px_sources/source_user_confirm_delete.html:100 +msgid "" +"The user will lose access to the source dashboard and will not be able to " +"create complaints or inquiries from this source." +msgstr "" +"سيفقد المستخدم صلاحية الوصول إلى لوحة تحكم المصدر، ولن يتمكن من إنشاء " +"شكاوى أو استفسارات من هذا المصدر." + +#: templates/px_sources/source_user_dashboard.html:4 +msgid "Source User Dashboard" +msgstr "لوحة تحكم مستخدم المصدر" + +#: templates/px_sources/source_user_dashboard.html:16 +msgid "Welcome" +msgstr "مرحبًا" + +#: templates/px_sources/source_user_dashboard.html:17 +msgid "You're managing feedback from this source." +msgstr "أنت تدير الملاحظات الواردة من هذا المصدر." + +#: templates/px_sources/source_user_dashboard.html:56 +msgid "Open Inquiries" +msgstr "الاستفسارات المفتوحة" + +#: templates/px_sources/source_user_dashboard.html:102 +msgid "Recent Complaints" +msgstr "الشكاوى الأخيرة" + +#: templates/px_sources/source_user_dashboard.html:162 +msgid "No complaints found for this source." +msgstr "لم يتم العثور على شكاوى لهذا المصدر." + +#: templates/px_sources/source_user_dashboard.html:180 +msgid "Recent Inquiries" +msgstr "الاستفسارات الأخيرة" + +#: templates/px_sources/source_user_dashboard.html:236 +msgid "No inquiries found for this source." +msgstr "لم يتم العثور على استفسارات لهذا المصدر." + +#: templates/px_sources/source_user_form.html:4 +#: templates/px_sources/source_user_form.html:20 +#: templates/px_sources/source_user_form.html:26 +msgid "Edit Source User" +msgstr "تعديل مستخدم المصدر" + +#: templates/px_sources/source_user_form.html:4 +#: templates/px_sources/source_user_form.html:20 +#: templates/px_sources/source_user_form.html:28 +msgid "Create Source User" +msgstr "إنشاء مستخدم مصدر" + +#: templates/px_sources/source_user_form.html:48 +msgid "Source User Details" +msgstr "تفاصيل مستخدم المصدر" + +#: templates/px_sources/source_user_form.html:61 +msgid "Select a user" +msgstr "اختر مستخدمًا" + +#: templates/px_sources/source_user_form.html:69 +msgid "" +"Select a user to assign as source user. A user can only manage one source." +msgstr "اختر مستخدمًا لتعيينه كمستخدم مصدر. يمكن للمستخدم إدارة مصدر واحد فقط." + +#: templates/px_sources/source_user_form.html:94 +msgid "Inactive users will not be able to access their dashboard." +msgstr "لن يتمكن المستخدمون غير النشطين من الوصول إلى لوحة التحكم الخاصة بهم." + +#: templates/px_sources/source_user_form.html:109 +msgid "Can create complaints" +msgstr "يمكنه إنشاء شكاوى" + +#: templates/px_sources/source_user_form.html:117 +msgid "Can create inquiries" +msgstr "يمكنه إنشاء استفسارات" + +#: templates/px_sources/source_user_form.html:125 +msgid "" +"Permissions control what the source user can do in their dashboard. Uncheck " +"to restrict access." +msgstr "" +"تتحكم الصلاحيات في ما يمكن لمستخدم المصدر القيام به داخل لوحة التحكم. " +"قم بإلغاء التحديد لتقييد الصلاحيات." + #: templates/references/dashboard.html:4 templates/references/dashboard.html:11 #: templates/references/document_view.html:4 #: templates/references/document_view.html:14 @@ -6228,13 +8753,253 @@ msgstr "تصفية المستندات" msgid "No documents found matching your search criteria" msgstr "لم يتم العثور على مستندات مطابقة لمعايير البحث" -#: templates/social/mention_detail.html:76 -msgid "PX Action" -msgstr "إجراء تجربة المريض" +#: templates/social/partials/ai_analysis_bilingual.html:83 +#: templates/social/partials/ai_analysis_bilingual.html:89 +msgid "Copy" +msgstr "نسخ" -#: templates/social/mention_list.html:24 -msgid "Total Mentions" -msgstr "إجمالي الإشارات" +#: templates/social/partials/ai_analysis_bilingual.html:128 +#: templates/social/social_comment_detail.html:171 +msgid "Topics" +msgstr "الموضوعات" + +#: templates/social/partials/ai_analysis_bilingual.html:221 +msgid "Analyzed with" +msgstr "تم التحليل باستخدام" + +#: templates/social/partials/ai_analysis_bilingual.html:236 +msgid "No AI analysis available for this comment yet." +msgstr "لا يتوفر تحليل بالذكاء الاصطناعي لهذا التعليق حتى الآن." + +#: templates/social/social_analytics.html:6 +#: templates/social/social_analytics.html:15 +msgid "Analytics Dashboard" +msgstr "لوحة التحليلات" + +#: templates/social/social_analytics.html:6 +#: templates/social/social_comment_detail.html:7 +#: templates/social/social_comment_list.html:8 +#: templates/social/social_comment_list.html:17 +#: templates/social/social_platform.html:7 +msgid "Social Media Monitoring" +msgstr "مراقبة وسائل التواصل الاجتماعي" + +#: templates/social/social_analytics.html:17 +msgid "Social media insights and trends" +msgstr "رؤى واتجاهات وسائل التواصل الاجتماعي" + +#: templates/social/social_analytics.html:32 +msgid "Date from" +msgstr "من تاريخ" + +#: templates/social/social_analytics.html:38 +msgid "Date to" +msgstr "إلى تاريخ" + +#: templates/social/social_analytics.html:55 +#: templates/social/social_comment_list.html:60 +msgid "Total Comments" +msgstr "إجمالي التعليقات" + +#: templates/social/social_analytics.html:66 +msgid "analyzed" +msgstr "تم تحليلها" + +#: templates/social/social_analytics.html:90 +#: templates/social/social_analytics.html:113 +#: templates/social/social_comment_list.html:71 +#: templates/social/social_comment_list.html:82 +#: templates/social/social_comment_list.html:93 +msgid "of total" +msgstr "من الإجمالي" + +#: templates/social/social_analytics.html:124 +msgid "Avg Engagement" +msgstr "متوسط التفاعل" + +#: templates/social/social_analytics.html:131 +msgid "likes + replies" +msgstr "إعجابات + ردود" + +#: templates/social/social_analytics.html:164 +msgid "Platform Distribution" +msgstr "توزيع المنصات" + +#: templates/social/social_analytics.html:183 +msgid "Daily Trends" +msgstr "الاتجاهات اليومية" + +#: templates/social/social_analytics.html:244 +msgid "Top Topics" +msgstr "أهم الموضوعات" + +#: templates/social/social_analytics.html:265 +msgid "No topics found" +msgstr "لم يتم العثور على موضوعات" + +#: templates/social/social_analytics.html:282 +msgid "Platform Breakdown" +msgstr "تفصيل حسب المنصة" + +#: templates/social/social_analytics.html:290 +#: templates/social/social_comment_list.html:111 +msgid "Platform" +msgstr "المنصة" + +#: templates/social/social_analytics.html:291 +msgid "Comments" +msgstr "التعليقات" + +#: templates/social/social_analytics.html:292 +#: templates/social/social_platform.html:79 +msgid "Avg Sentiment" +msgstr "متوسط الانطباع" + +#: templates/social/social_analytics.html:293 +msgid "Total Likes" +msgstr "إجمالي الإعجابات" + +#: templates/social/social_analytics.html:294 +msgid "Total Replies" +msgstr "إجمالي الردود" + +#: templates/social/social_analytics.html:336 +msgid "No data available" +msgstr "لا توجد بيانات متاحة" + +#: templates/social/social_analytics.html:357 +msgid "Top Entities" +msgstr "أبرز الكيانات" + +#: templates/social/social_analytics.html:380 +msgid "No entities found" +msgstr "لم يتم العثور على كيانات" + +#: templates/social/social_comment_detail.html:31 +msgid "Comment Details" +msgstr "تفاصيل التعليق" + +#: templates/social/social_comment_detail.html:37 +msgid "View Similar" +msgstr "عرض المشابه" + +#: templates/social/social_comment_detail.html:40 +msgid "Back to Platform" +msgstr "العودة إلى المنصة" + +#: templates/social/social_comment_detail.html:93 +msgid "Likes" +msgstr "إعجابات" + +#: templates/social/social_comment_detail.html:100 +msgid "Replies" +msgstr "ردود" + +#: templates/social/social_comment_detail.html:107 +msgid "Scraped" +msgstr "تم الجمع آليًا" + +#: templates/social/social_comment_detail.html:115 +msgid "View Original Post" +msgstr "عرض المنشور الأصلي" + +#: templates/social/social_comment_detail.html:138 +msgid "Sentiment Score" +msgstr "درجة الانطباع" + +#: templates/social/social_comment_detail.html:140 +msgid "Analysis confidence" +msgstr "مستوى الثقة في التحليل" + +#: templates/social/social_comment_detail.html:146 +msgid "Summary (English)" +msgstr "الملخص (بالإنجليزية)" + +#: templates/social/social_comment_detail.html:153 +msgid "الملخص (Arabic)" +msgstr "الملخص (بالعربية)" + +#: templates/social/social_comment_detail.html:187 +msgid "Raw Data" +msgstr "البيانات الخام" + +#: templates/social/social_comment_detail.html:203 +msgid "Comment Info" +msgstr "معلومات التعليق" + +#: templates/social/social_comment_detail.html:263 +msgid "Mark as Reviewed" +msgstr "وضع علامة كمراجع" + +#: templates/social/social_comment_detail.html:266 +msgid "Flag for Follow-up" +msgstr "وضع علامة للمتابعة" + +#: templates/social/social_comment_detail.html:269 +msgid "Delete Comment" +msgstr "حذف التعليق" + +#: templates/social/social_comment_list.html:19 +msgid "Track social media mentions and sentiment across all platforms" +msgstr "تتبع الإشارات والانطباعات عبر جميع منصات التواصل الاجتماعي" + +#: templates/social/social_comment_list.html:46 +#: templates/social/social_platform.html:29 +msgid "comments" +msgstr "تعليقات" + +#: templates/social/social_comment_list.html:104 +msgid "Advanced Filters" +msgstr "فلاتر متقدمة" + +#: templates/social/social_comment_list.html:113 +#: templates/social/social_platform.html:37 +msgid "All Platforms" +msgstr "جميع المنصات" + +#: templates/social/social_comment_list.html:124 +msgid "All Sentiments" +msgstr "جميع الانطباعات" + +#: templates/social/social_comment_list.html:209 +msgid "No comments found" +msgstr "لم يتم العثور على تعليقات" + +#: templates/social/social_platform.html:29 +msgid "Monitor and analyze" +msgstr "المراقبة والتحليل" + +#: templates/social/social_platform.html:34 +msgid "View Analytics" +msgstr "عرض التحليلات" + +#: templates/social/social_platform.html:87 +msgid "Engagement" +msgstr "التفاعل" + +#: templates/social/social_platform.html:99 +msgid "Time Period" +msgstr "الفترة الزمنية" + +#: templates/social/social_platform.html:101 +msgid "All Time" +msgstr "كل الوقت" + +#: templates/social/social_platform.html:102 +msgid "Today" +msgstr "اليوم" + +#: templates/social/social_platform.html:103 +msgid "This Week" +msgstr "هذا الأسبوع" + +#: templates/social/social_platform.html:126 +msgid "Search comments..." +msgstr "البحث في التعليقات..." + +#: templates/social/social_platform.html:206 +msgid "No comments found for this platform" +msgstr "لم يتم العثور على تعليقات لهذه المنصة" #: templates/standards/attachment_upload.html:4 msgid "Upload Evidence" @@ -6742,3 +9507,18 @@ msgstr "عرض النماذج" #: templates/surveys/template_list.html:60 msgid "No templates found" msgstr "لا توجد قوالب" + +#~ msgid "potential match" +#~ msgstr "تطابق محتمل" + +#~ msgid "Change Department" +#~ msgstr "تغيير القسم" + +#~ msgid "This will escalate" +#~ msgstr "سيتم التصعيد" + +#~ msgid "Manager of" +#~ msgstr "مدير" + +#~ msgid "Total Mentions" +#~ msgstr "إجمالي الإشارات" diff --git a/templates/organizations/staff_list.html b/templates/organizations/staff_list.html index 66f3cc8..16a6757 100644 --- a/templates/organizations/staff_list.html +++ b/templates/organizations/staff_list.html @@ -13,7 +13,7 @@ {% if user.is_px_admin or user.is_hospital_admin %} - {% trans "Add New Staff" %} + {% trans "Add New Staff" %} {% endif %} @@ -58,7 +58,7 @@
@@ -122,12 +122,12 @@ {% if staff_member.user %} - {% trans "Yes" %} + {% trans "Yes" %}
{{ staff_member.user.username }} {% else %} - {% trans "No" %} + {% trans "No" %} {% endif %} @@ -141,12 +141,12 @@
- + {% if user.is_px_admin or user.is_hospital_admin %} {% if not staff_member.user and staff_member.email %} {% endif %} {% if staff_member.user %} @@ -180,12 +180,12 @@ {% if page_obj.has_previous %}
  • - +
  • - +
  • {% endif %} @@ -197,12 +197,12 @@ {% if page_obj.has_next %}
  • - +
  • - +
  • {% endif %}