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 db51478..ba872b5 100644 Binary files a/locale/ar/LC_MESSAGES/django.mo and b/locale/ar/LC_MESSAGES/django.mo differ 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 %}