diff --git a/apps/accounts/migrations/0001_initial.py b/apps/accounts/migrations/0001_initial.py index 429fd71..76b52b5 100644 --- a/apps/accounts/migrations/0001_initial.py +++ b/apps/accounts/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.contrib.auth.models import django.contrib.auth.validators @@ -36,6 +36,13 @@ class Migration(migrations.Migration): ('bio', models.TextField(blank=True)), ('language', models.CharField(choices=[('en', 'English'), ('ar', 'Arabic')], default='en', max_length=5)), ('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)), + ('invitation_expires_at', models.DateTimeField(blank=True, help_text='When the invitation token expires', null=True)), + ('acknowledgement_completed', models.BooleanField(default=False, help_text='User has completed acknowledgement wizard')), + ('acknowledgement_completed_at', models.DateTimeField(blank=True, help_text='When the acknowledgement was completed', null=True)), + ('current_wizard_step', models.IntegerField(default=0, help_text='Current step in onboarding wizard')), + ('wizard_completed_steps', models.JSONField(blank=True, default=list, help_text='List of completed wizard step IDs')), ], options={ 'ordering': ['-date_joined'], @@ -44,6 +51,49 @@ class Migration(migrations.Migration): ('objects', django.contrib.auth.models.UserManager()), ], ), + migrations.CreateModel( + name='AcknowledgementChecklistItem', + 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)), + ('role', models.CharField(blank=True, choices=[('px_admin', 'PX Admin'), ('hospital_admin', 'Hospital Admin'), ('department_manager', 'Department Manager'), ('px_coordinator', 'PX Coordinator'), ('physician', 'Physician'), ('nurse', 'Nurse'), ('staff', 'Staff'), ('viewer', 'Viewer')], help_text='Target role for this item', max_length=50, null=True)), + ('code', models.CharField(help_text='Unique code for this checklist item', max_length=100, unique=True)), + ('text_en', models.CharField(max_length=500)), + ('text_ar', models.CharField(blank=True, max_length=500)), + ('description_en', models.TextField(blank=True)), + ('description_ar', models.TextField(blank=True)), + ('is_required', models.BooleanField(default=True, help_text='Item must be acknowledged')), + ('order', models.IntegerField(default=0, help_text='Display order in checklist')), + ('is_active', models.BooleanField(default=True)), + ], + options={ + 'ordering': ['role', 'order', 'code'], + }, + ), + migrations.CreateModel( + name='AcknowledgementContent', + 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)), + ('role', models.CharField(blank=True, choices=[('px_admin', 'PX Admin'), ('hospital_admin', 'Hospital Admin'), ('department_manager', 'Department Manager'), ('px_coordinator', 'PX Coordinator'), ('physician', 'Physician'), ('nurse', 'Nurse'), ('staff', 'Staff'), ('viewer', 'Viewer')], help_text='Target role for this content', max_length=50, null=True)), + ('code', models.CharField(help_text='Unique code for this content section', max_length=100, unique=True)), + ('title_en', models.CharField(max_length=200)), + ('title_ar', models.CharField(blank=True, max_length=200)), + ('description_en', models.TextField()), + ('description_ar', models.TextField(blank=True)), + ('content_en', models.TextField(blank=True)), + ('content_ar', models.TextField(blank=True)), + ('icon', models.CharField(blank=True, help_text="Icon class (e.g., 'fa-user', 'fa-shield')", max_length=50)), + ('color', models.CharField(blank=True, help_text="Hex color code (e.g., '#007bff')", max_length=7)), + ('order', models.IntegerField(default=0, help_text='Display order in wizard')), + ('is_active', models.BooleanField(default=True)), + ], + options={ + 'ordering': ['role', 'order', 'code'], + }, + ), migrations.CreateModel( name='Role', fields=[ @@ -59,4 +109,37 @@ class Migration(migrations.Migration): 'ordering': ['-level', 'name'], }, ), + migrations.CreateModel( + name='UserAcknowledgement', + 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)), + ('is_acknowledged', models.BooleanField(default=True)), + ('acknowledged_at', models.DateTimeField(auto_now_add=True)), + ('signature', models.TextField(blank=True, help_text='Digital signature data (base64 encoded)')), + ('signature_ip', models.GenericIPAddressField(blank=True, help_text='IP address when signed', null=True)), + ('signature_user_agent', models.TextField(blank=True, help_text='User agent when signed')), + ('metadata', models.JSONField(blank=True, default=dict, help_text='Additional metadata')), + ], + options={ + 'ordering': ['-acknowledged_at'], + }, + ), + migrations.CreateModel( + name='UserProvisionalLog', + 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)), + ('event_type', models.CharField(choices=[('created', 'User Created'), ('invitation_sent', 'Invitation Sent'), ('invitation_resent', 'Invitation Resent'), ('wizard_started', 'Wizard Started'), ('step_completed', 'Wizard Step Completed'), ('wizard_completed', 'Wizard Completed'), ('user_activated', 'User Activated'), ('invitation_expired', 'Invitation Expired')], db_index=True, max_length=50)), + ('description', models.TextField()), + ('ip_address', models.GenericIPAddressField(blank=True, null=True)), + ('user_agent', models.TextField(blank=True)), + ('metadata', models.JSONField(blank=True, default=dict, help_text='Additional event data')), + ], + options={ + 'ordering': ['-created_at'], + }, + ), ] diff --git a/apps/accounts/migrations/0002_initial.py b/apps/accounts/migrations/0002_initial.py index 79d1639..851a617 100644 --- a/apps/accounts/migrations/0002_initial.py +++ b/apps/accounts/migrations/0002_initial.py @@ -1,6 +1,7 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion +from django.conf import settings from django.db import migrations, models @@ -35,6 +36,19 @@ class Migration(migrations.Migration): name='user_permissions', field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions'), ), + migrations.AddIndex( + model_name='acknowledgementcontent', + index=models.Index(fields=['role', 'is_active', 'order'], name='accounts_ac_role_6fe1fd_idx'), + ), + migrations.AddIndex( + model_name='acknowledgementcontent', + index=models.Index(fields=['code'], name='accounts_ac_code_48fa92_idx'), + ), + migrations.AddField( + model_name='acknowledgementchecklistitem', + name='content', + field=models.ForeignKey(blank=True, help_text='Related content section', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checklist_items', to='accounts.acknowledgementcontent'), + ), migrations.AddField( model_name='role', name='group', @@ -45,6 +59,21 @@ class Migration(migrations.Migration): name='permissions', field=models.ManyToManyField(blank=True, to='auth.permission'), ), + migrations.AddField( + model_name='useracknowledgement', + name='checklist_item', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_acknowledgements', to='accounts.acknowledgementchecklistitem'), + ), + migrations.AddField( + model_name='useracknowledgement', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='acknowledgements', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='userprovisionallog', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='provisional_logs', to=settings.AUTH_USER_MODEL), + ), migrations.AddIndex( model_name='user', index=models.Index(fields=['email'], name='accounts_us_email_74c8d6_idx'), @@ -57,4 +86,32 @@ class Migration(migrations.Migration): model_name='user', index=models.Index(fields=['is_active', '-date_joined'], name='accounts_us_is_acti_a32178_idx'), ), + migrations.AddIndex( + model_name='acknowledgementchecklistitem', + index=models.Index(fields=['role', 'is_active', 'order'], name='accounts_ac_role_c556c1_idx'), + ), + migrations.AddIndex( + model_name='acknowledgementchecklistitem', + index=models.Index(fields=['code'], name='accounts_ac_code_b745de_idx'), + ), + migrations.AddIndex( + model_name='useracknowledgement', + index=models.Index(fields=['user', '-acknowledged_at'], name='accounts_us_user_id_7ba948_idx'), + ), + migrations.AddIndex( + model_name='useracknowledgement', + index=models.Index(fields=['checklist_item', '-acknowledged_at'], name='accounts_us_checkli_870e26_idx'), + ), + migrations.AlterUniqueTogether( + name='useracknowledgement', + unique_together={('user', 'checklist_item')}, + ), + migrations.AddIndex( + model_name='userprovisionallog', + index=models.Index(fields=['user', '-created_at'], name='accounts_us_user_id_c488d5_idx'), + ), + migrations.AddIndex( + model_name='userprovisionallog', + index=models.Index(fields=['event_type', '-created_at'], name='accounts_us_event_t_b7f691_idx'), + ), ] diff --git a/apps/accounts/migrations/0003_user_acknowledgement_completed_and_more.py b/apps/accounts/migrations/0003_user_acknowledgement_completed_and_more.py deleted file mode 100644 index b0f8e64..0000000 --- a/apps/accounts/migrations/0003_user_acknowledgement_completed_and_more.py +++ /dev/null @@ -1,160 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-06 08:54 - -import django.db.models.deletion -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0002_initial'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='acknowledgement_completed', - field=models.BooleanField(default=False, help_text='User has completed acknowledgement wizard'), - ), - migrations.AddField( - model_name='user', - name='acknowledgement_completed_at', - field=models.DateTimeField(blank=True, help_text='When the acknowledgement was completed', null=True), - ), - migrations.AddField( - model_name='user', - name='current_wizard_step', - field=models.IntegerField(default=0, help_text='Current step in onboarding wizard'), - ), - migrations.AddField( - model_name='user', - name='invitation_expires_at', - field=models.DateTimeField(blank=True, help_text='When the invitation token expires', null=True), - ), - migrations.AddField( - model_name='user', - name='invitation_token', - field=models.CharField(blank=True, help_text='Token for account activation', max_length=100, null=True, unique=True), - ), - migrations.AddField( - model_name='user', - name='is_provisional', - field=models.BooleanField(default=False, help_text='User is in onboarding process'), - ), - migrations.AddField( - model_name='user', - name='wizard_completed_steps', - field=models.JSONField(blank=True, default=list, help_text='List of completed wizard step IDs'), - ), - migrations.CreateModel( - name='AcknowledgementContent', - 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)), - ('role', models.CharField(blank=True, choices=[('px_admin', 'PX Admin'), ('hospital_admin', 'Hospital Admin'), ('department_manager', 'Department Manager'), ('px_coordinator', 'PX Coordinator'), ('physician', 'Physician'), ('nurse', 'Nurse'), ('staff', 'Staff'), ('viewer', 'Viewer')], help_text='Target role for this content', max_length=50, null=True)), - ('code', models.CharField(help_text='Unique code for this content section', max_length=100, unique=True)), - ('title_en', models.CharField(max_length=200)), - ('title_ar', models.CharField(blank=True, max_length=200)), - ('description_en', models.TextField()), - ('description_ar', models.TextField(blank=True)), - ('content_en', models.TextField(blank=True)), - ('content_ar', models.TextField(blank=True)), - ('icon', models.CharField(blank=True, help_text="Icon class (e.g., 'fa-user', 'fa-shield')", max_length=50)), - ('color', models.CharField(blank=True, help_text="Hex color code (e.g., '#007bff')", max_length=7)), - ('order', models.IntegerField(default=0, help_text='Display order in wizard')), - ('is_active', models.BooleanField(default=True)), - ], - options={ - 'ordering': ['role', 'order', 'code'], - 'indexes': [models.Index(fields=['role', 'is_active', 'order'], name='accounts_ac_role_6fe1fd_idx'), models.Index(fields=['code'], name='accounts_ac_code_48fa92_idx')], - }, - ), - migrations.CreateModel( - name='AcknowledgementChecklistItem', - 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)), - ('role', models.CharField(blank=True, choices=[('px_admin', 'PX Admin'), ('hospital_admin', 'Hospital Admin'), ('department_manager', 'Department Manager'), ('px_coordinator', 'PX Coordinator'), ('physician', 'Physician'), ('nurse', 'Nurse'), ('staff', 'Staff'), ('viewer', 'Viewer')], help_text='Target role for this item', max_length=50, null=True)), - ('code', models.CharField(help_text='Unique code for this checklist item', max_length=100, unique=True)), - ('text_en', models.CharField(max_length=500)), - ('text_ar', models.CharField(blank=True, max_length=500)), - ('description_en', models.TextField(blank=True)), - ('description_ar', models.TextField(blank=True)), - ('is_required', models.BooleanField(default=True, help_text='Item must be acknowledged')), - ('order', models.IntegerField(default=0, help_text='Display order in checklist')), - ('is_active', models.BooleanField(default=True)), - ('content', models.ForeignKey(blank=True, help_text='Related content section', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='checklist_items', to='accounts.acknowledgementcontent')), - ], - options={ - 'ordering': ['role', 'order', 'code'], - }, - ), - migrations.CreateModel( - name='UserAcknowledgement', - 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)), - ('is_acknowledged', models.BooleanField(default=True)), - ('acknowledged_at', models.DateTimeField(auto_now_add=True)), - ('signature', models.TextField(blank=True, help_text='Digital signature data (base64 encoded)')), - ('signature_ip', models.GenericIPAddressField(blank=True, help_text='IP address when signed', null=True)), - ('signature_user_agent', models.TextField(blank=True, help_text='User agent when signed')), - ('metadata', models.JSONField(blank=True, default=dict, help_text='Additional metadata')), - ('checklist_item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_acknowledgements', to='accounts.acknowledgementchecklistitem')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='acknowledgements', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ['-acknowledged_at'], - }, - ), - migrations.CreateModel( - name='UserProvisionalLog', - 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)), - ('event_type', models.CharField(choices=[('created', 'User Created'), ('invitation_sent', 'Invitation Sent'), ('invitation_resent', 'Invitation Resent'), ('wizard_started', 'Wizard Started'), ('step_completed', 'Wizard Step Completed'), ('wizard_completed', 'Wizard Completed'), ('user_activated', 'User Activated'), ('invitation_expired', 'Invitation Expired')], db_index=True, max_length=50)), - ('description', models.TextField()), - ('ip_address', models.GenericIPAddressField(blank=True, null=True)), - ('user_agent', models.TextField(blank=True)), - ('metadata', models.JSONField(blank=True, default=dict, help_text='Additional event data')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='provisional_logs', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ['-created_at'], - }, - ), - migrations.AddIndex( - model_name='acknowledgementchecklistitem', - index=models.Index(fields=['role', 'is_active', 'order'], name='accounts_ac_role_c556c1_idx'), - ), - migrations.AddIndex( - model_name='acknowledgementchecklistitem', - index=models.Index(fields=['code'], name='accounts_ac_code_b745de_idx'), - ), - migrations.AddIndex( - model_name='useracknowledgement', - index=models.Index(fields=['user', '-acknowledged_at'], name='accounts_us_user_id_7ba948_idx'), - ), - migrations.AddIndex( - model_name='useracknowledgement', - index=models.Index(fields=['checklist_item', '-acknowledged_at'], name='accounts_us_checkli_870e26_idx'), - ), - migrations.AlterUniqueTogether( - name='useracknowledgement', - unique_together={('user', 'checklist_item')}, - ), - migrations.AddIndex( - model_name='userprovisionallog', - index=models.Index(fields=['user', '-created_at'], name='accounts_us_user_id_c488d5_idx'), - ), - migrations.AddIndex( - model_name='userprovisionallog', - index=models.Index(fields=['event_type', '-created_at'], name='accounts_us_event_t_b7f691_idx'), - ), - ] diff --git a/apps/ai_engine/migrations/0001_initial.py b/apps/ai_engine/migrations/0001_initial.py index 3c06d80..549c9c6 100644 --- a/apps/ai_engine/migrations/0001_initial.py +++ b/apps/ai_engine/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2025-12-14 11:19 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/analytics/migrations/0001_initial.py b/apps/analytics/migrations/0001_initial.py index 48cf263..0ed9670 100644 --- a/apps/analytics/migrations/0001_initial.py +++ b/apps/analytics/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/analytics/services/analytics_service.py b/apps/analytics/services/analytics_service.py index d607fdc..587ad37 100644 --- a/apps/analytics/services/analytics_service.py +++ b/apps/analytics/services/analytics_service.py @@ -550,33 +550,33 @@ class UnifiedAnalyticsService: queryset = PhysicianMonthlyRating.objects.filter( year=now.year, month=now.month - ).select_related('physician', 'physician__hospital', 'physician__department') + ).select_related('staff', 'staff__hospital', 'staff__department') # Apply RBAC filters if not user.is_px_admin() and user.hospital: - queryset = queryset.filter(physician__hospital=user.hospital) + queryset = queryset.filter(staff__hospital=user.hospital) if hospital_id: - queryset = queryset.filter(physician__hospital_id=hospital_id) + queryset = queryset.filter(staff__hospital_id=hospital_id) if department_id: - queryset = queryset.filter(physician__department_id=department_id) + queryset = queryset.filter(staff__department_id=department_id) queryset = queryset.order_by('-average_rating')[:limit] return { 'type': 'bar', - 'labels': [r.physician.get_full_name() for r in queryset], + 'labels': [f"{r.staff.first_name} {r.staff.last_name}" for r in queryset], 'series': [{ 'name': 'Rating', 'data': [float(round(r.average_rating, 2)) for r in queryset] }], 'metadata': [ { - 'name': r.physician.get_full_name(), - 'physician_id': str(r.physician.id), - 'specialization': r.physician.specialization, - 'department': r.physician.department.name if r.physician.department else None, + 'name': f"{r.staff.first_name} {r.staff.last_name}", + 'physician_id': str(r.staff.id), + 'specialization': r.staff.specialization, + 'department': r.staff.department.name if r.staff.department else None, 'rating': float(round(r.average_rating, 2)), 'surveys': int(r.total_surveys) if r.total_surveys is not None else 0, 'positive': int(r.positive_count) if r.positive_count is not None else 0, diff --git a/apps/appreciation/migrations/0001_initial.py b/apps/appreciation/migrations/0001_initial.py index 34c483e..c5853f1 100644 --- a/apps/appreciation/migrations/0001_initial.py +++ b/apps/appreciation/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-01 11:27 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/callcenter/migrations/0001_initial.py b/apps/callcenter/migrations/0001_initial.py index b93353c..4eda9f9 100644 --- a/apps/callcenter/migrations/0001_initial.py +++ b/apps/callcenter/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/complaints/management/commands/seed_complaint_configs.py b/apps/complaints/management/commands/seed_complaint_configs.py index f85c990..8c149fc 100644 --- a/apps/complaints/management/commands/seed_complaint_configs.py +++ b/apps/complaints/management/commands/seed_complaint_configs.py @@ -109,8 +109,8 @@ class Command(BaseCommand): created_count = 0 for cat_data in categories: category, created = ComplaintCategory.objects.get_or_create( - hospital=None, # System-wide code=cat_data['code'], + parent__isnull=True, # System-wide categories have no parent defaults={ 'name_en': cat_data['name_en'], 'name_ar': cat_data['name_ar'], diff --git a/apps/complaints/migrations/0001_initial.py b/apps/complaints/migrations/0001_initial.py index 6e3b2f1..dffb40d 100644 --- a/apps/complaints/migrations/0001_initial.py +++ b/apps/complaints/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid @@ -48,7 +48,7 @@ class Migration(migrations.Migration): ], options={ 'verbose_name_plural': 'Complaint Categories', - 'ordering': ['hospital', 'order', 'name_en'], + 'ordering': ['order', 'name_en'], }, ), migrations.CreateModel( @@ -140,6 +140,38 @@ class Migration(migrations.Migration): 'ordering': ['-created_at'], }, ), + migrations.CreateModel( + name='InquiryAttachment', + 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)), + ('file', models.FileField(upload_to='inquiries/%Y/%m/%d/')), + ('filename', models.CharField(max_length=500)), + ('file_type', models.CharField(blank=True, max_length=100)), + ('file_size', models.IntegerField(help_text='File size in bytes')), + ('description', models.TextField(blank=True)), + ], + options={ + 'ordering': ['-created_at'], + }, + ), + migrations.CreateModel( + name='InquiryUpdate', + 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)), + ('update_type', models.CharField(choices=[('status_change', 'Status Change'), ('assignment', 'Assignment'), ('note', 'Note'), ('response', 'Response'), ('communication', 'Communication')], db_index=True, max_length=50)), + ('message', models.TextField()), + ('old_status', models.CharField(blank=True, max_length=20)), + ('new_status', models.CharField(blank=True, max_length=20)), + ('metadata', models.JSONField(blank=True, default=dict)), + ], + options={ + 'ordering': ['-created_at'], + }, + ), migrations.CreateModel( name='Complaint', fields=[ diff --git a/apps/complaints/migrations/0002_initial.py b/apps/complaints/migrations/0002_initial.py index b84e90e..2bc9119 100644 --- a/apps/complaints/migrations/0002_initial.py +++ b/apps/complaints/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion from django.conf import settings @@ -44,8 +44,8 @@ class Migration(migrations.Migration): ), migrations.AddField( model_name='complaintcategory', - name='hospital', - field=models.ForeignKey(blank=True, help_text='Leave blank for system-wide categories', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='complaint_categories', to='organizations.hospital'), + name='hospitals', + field=models.ManyToManyField(blank=True, help_text='Empty list = system-wide category. Add hospitals to share category.', related_name='complaint_categories', to='organizations.hospital'), ), migrations.AddField( model_name='complaintcategory', @@ -112,9 +112,25 @@ class Migration(migrations.Migration): name='responded_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='responded_inquiries', to=settings.AUTH_USER_MODEL), ), - migrations.AddIndex( - model_name='complaintcategory', - index=models.Index(fields=['hospital', 'is_active'], name='complaints__hospita_a31674_idx'), + migrations.AddField( + model_name='inquiryattachment', + name='inquiry', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='complaints.inquiry'), + ), + migrations.AddField( + model_name='inquiryattachment', + name='uploaded_by', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inquiry_attachments', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='inquiryupdate', + name='created_by', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inquiry_updates', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='inquiryupdate', + name='inquiry', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='updates', to='complaints.inquiry'), ), migrations.AddIndex( model_name='complaintcategory', @@ -168,4 +184,8 @@ class Migration(migrations.Migration): model_name='inquiry', index=models.Index(fields=['hospital', 'status'], name='complaints__hospita_b1573b_idx'), ), + migrations.AddIndex( + model_name='inquiryupdate', + index=models.Index(fields=['inquiry', '-created_at'], name='complaints__inquiry_551c37_idx'), + ), ] diff --git a/apps/complaints/migrations/0003_alter_complaintcategory_options_and_more.py b/apps/complaints/migrations/0003_alter_complaintcategory_options_and_more.py deleted file mode 100644 index 86810bb..0000000 --- a/apps/complaints/migrations/0003_alter_complaintcategory_options_and_more.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-05 13:14 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('complaints', '0002_initial'), - ('organizations', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='complaintcategory', - options={'ordering': ['order', 'name_en'], 'verbose_name_plural': 'Complaint Categories'}, - ), - migrations.RemoveIndex( - model_name='complaintcategory', - name='complaints__hospita_a31674_idx', - ), - migrations.RemoveField( - model_name='complaintcategory', - name='hospital', - ), - migrations.AddField( - model_name='complaintcategory', - name='hospitals', - field=models.ManyToManyField(blank=True, help_text='Empty list = system-wide category. Add hospitals to share category.', related_name='complaint_categories', to='organizations.hospital'), - ), - ] diff --git a/apps/complaints/migrations/0004_inquiryattachment_inquiryupdate.py b/apps/complaints/migrations/0004_inquiryattachment_inquiryupdate.py deleted file mode 100644 index 2b49018..0000000 --- a/apps/complaints/migrations/0004_inquiryattachment_inquiryupdate.py +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-05 15:06 - -import django.db.models.deletion -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('complaints', '0003_alter_complaintcategory_options_and_more'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='InquiryAttachment', - 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)), - ('file', models.FileField(upload_to='inquiries/%Y/%m/%d/')), - ('filename', models.CharField(max_length=500)), - ('file_type', models.CharField(blank=True, max_length=100)), - ('file_size', models.IntegerField(help_text='File size in bytes')), - ('description', models.TextField(blank=True)), - ('inquiry', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='complaints.inquiry')), - ('uploaded_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inquiry_attachments', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ['-created_at'], - }, - ), - migrations.CreateModel( - name='InquiryUpdate', - 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)), - ('update_type', models.CharField(choices=[('status_change', 'Status Change'), ('assignment', 'Assignment'), ('note', 'Note'), ('response', 'Response'), ('communication', 'Communication')], db_index=True, max_length=50)), - ('message', models.TextField()), - ('old_status', models.CharField(blank=True, max_length=20)), - ('new_status', models.CharField(blank=True, max_length=20)), - ('metadata', models.JSONField(blank=True, default=dict)), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inquiry_updates', to=settings.AUTH_USER_MODEL)), - ('inquiry', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='updates', to='complaints.inquiry')), - ], - options={ - 'ordering': ['-created_at'], - 'indexes': [models.Index(fields=['inquiry', '-created_at'], name='complaints__inquiry_551c37_idx')], - }, - ), - ] diff --git a/apps/core/ai_service.py b/apps/core/ai_service.py index 2c8bbdd..87c09cb 100644 --- a/apps/core/ai_service.py +++ b/apps/core/ai_service.py @@ -35,7 +35,10 @@ class AIService: """ OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1" - OPENROUTER_API_KEY = "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" + # OPENROUTER_API_KEY = "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" + OPENROUTER_API_KEY = "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" + + # Default configuration DEFAULT_MODEL = "openrouter/z-ai/glm-4.7" # DEFAULT_MODEL = "openrouter/xiaomi/mimo-v2-flash:free" diff --git a/apps/core/migrations/0001_initial.py b/apps/core/migrations/0001_initial.py index 6f592d2..6023124 100644 --- a/apps/core/migrations/0001_initial.py +++ b/apps/core/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/feedback/migrations/0001_initial.py b/apps/feedback/migrations/0001_initial.py index 0897612..47e2dcb 100644 --- a/apps/feedback/migrations/0001_initial.py +++ b/apps/feedback/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/feedback/migrations/0002_initial.py b/apps/feedback/migrations/0002_initial.py index c8da2bd..a09fdb4 100644 --- a/apps/feedback/migrations/0002_initial.py +++ b/apps/feedback/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 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 313675a..b9cf469 100644 --- a/apps/integrations/migrations/0001_initial.py +++ b/apps/integrations/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/journeys/migrations/0001_initial.py b/apps/journeys/migrations/0001_initial.py index b32bb12..255c859 100644 --- a/apps/journeys/migrations/0001_initial.py +++ b/apps/journeys/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/journeys/migrations/0002_initial.py b/apps/journeys/migrations/0002_initial.py index 2bc527f..5dc83f0 100644 --- a/apps/journeys/migrations/0002_initial.py +++ b/apps/journeys/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 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 36d3cbe..852ad88 100644 --- a/apps/notifications/migrations/0001_initial.py +++ b/apps/notifications/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/observations/migrations/0001_initial.py b/apps/observations/migrations/0001_initial.py index aa375e5..c462907 100644 --- a/apps/observations/migrations/0001_initial.py +++ b/apps/observations/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-04 07:26 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import apps.observations.models import django.db.models.deletion @@ -13,7 +13,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('organizations', '0002_hospital_metadata'), + ('organizations', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] @@ -54,6 +54,7 @@ class Migration(migrations.Migration): ('reporter_phone', models.CharField(blank=True, help_text='Optional phone number for follow-up', max_length=20)), ('reporter_email', models.EmailField(blank=True, help_text='Optional email for follow-up', max_length=254)), ('status', models.CharField(choices=[('new', 'New'), ('triaged', 'Triaged'), ('assigned', 'Assigned'), ('in_progress', 'In Progress'), ('resolved', 'Resolved'), ('closed', 'Closed'), ('rejected', 'Rejected'), ('duplicate', 'Duplicate')], db_index=True, default='new', max_length=20)), + ('source', models.CharField(choices=[('staff_portal', 'Staff Portal'), ('web_form', 'Web Form'), ('mobile_app', 'Mobile App'), ('email', 'Email'), ('call_center', 'Call Center'), ('other', 'Other')], default='staff_portal', help_text='How the observation was submitted', max_length=50)), ('triaged_at', models.DateTimeField(blank=True, null=True)), ('resolved_at', models.DateTimeField(blank=True, null=True)), ('resolution_notes', models.TextField(blank=True)), @@ -65,7 +66,9 @@ class Migration(migrations.Migration): ('assigned_department', models.ForeignKey(blank=True, help_text='Department responsible for handling this observation', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_observations', to='organizations.department')), ('assigned_to', models.ForeignKey(blank=True, help_text='User assigned to handle this observation', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_observations', to=settings.AUTH_USER_MODEL)), ('closed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='closed_observations', to=settings.AUTH_USER_MODEL)), + ('hospital', models.ForeignKey(help_text='Hospital where observation was made', on_delete=django.db.models.deletion.CASCADE, related_name='observations', to='organizations.hospital')), ('resolved_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='resolved_observations', to=settings.AUTH_USER_MODEL)), + ('staff', models.ForeignKey(blank=True, help_text='Staff member mentioned in observation', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='observations', to='organizations.staff')), ('triaged_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='triaged_observations', to=settings.AUTH_USER_MODEL)), ('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='observations', to='observations.observationcategory')), ], @@ -124,6 +127,10 @@ class Migration(migrations.Migration): 'ordering': ['-created_at'], }, ), + migrations.AddIndex( + model_name='observation', + index=models.Index(fields=['hospital', 'status', '-created_at'], name='observation_hospita_dcd21a_idx'), + ), migrations.AddIndex( model_name='observation', index=models.Index(fields=['status', '-created_at'], name='observation_status_2b5566_idx'), diff --git a/apps/observations/migrations/0002_add_missing_fields.py b/apps/observations/migrations/0002_add_missing_fields.py deleted file mode 100644 index b247048..0000000 --- a/apps/observations/migrations/0002_add_missing_fields.py +++ /dev/null @@ -1,65 +0,0 @@ -# Generated migration to add missing fields to Observation model - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - dependencies = [ - ('organizations', '0001_initial'), # Need hospital and department models - ('observations', '0001_initial'), - ] - - operations = [ - # Add hospital field (required for tenant isolation) - # Initially nullable, will be made required in next migration - migrations.AddField( - model_name='observation', - name='hospital', - field=models.ForeignKey( - null=True, - blank=True, - on_delete=django.db.models.deletion.CASCADE, - related_name='observations', - to='organizations.hospital' - ), - ), - - # Add staff field (optional, for AI-matching like complaints) - migrations.AddField( - model_name='observation', - name='staff', - field=models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.SET_NULL, - related_name='observations', - to='organizations.staff' - ), - ), - - # Add source field (to track how observation was submitted) - migrations.AddField( - model_name='observation', - name='source', - field=models.CharField( - blank=True, - choices=[ - ('staff_portal', 'Staff Portal'), - ('web_form', 'Web Form'), - ('mobile_app', 'Mobile App'), - ('email', 'Email'), - ('call_center', 'Call Center'), - ('other', 'Other'), - ], - default='staff_portal', - max_length=50 - ), - ), - - # Add indexes for hospital filtering - migrations.AddIndex( - model_name='observation', - index=models.Index(fields=['hospital', 'status', '-created_at'], name='obs_hospital_status_idx'), - ), - ] diff --git a/apps/observations/migrations/0003_rename_obs_hospital_status_idx_observation_hospita_dcd21a_idx_and_more.py b/apps/observations/migrations/0003_rename_obs_hospital_status_idx_observation_hospita_dcd21a_idx_and_more.py deleted file mode 100644 index 5eff108..0000000 --- a/apps/observations/migrations/0003_rename_obs_hospital_status_idx_observation_hospita_dcd21a_idx_and_more.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-07 11:02 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('observations', '0002_add_missing_fields'), - ('organizations', '0005_alter_staff_department'), - ] - - operations = [ - migrations.RenameIndex( - model_name='observation', - new_name='observation_hospita_dcd21a_idx', - old_name='obs_hospital_status_idx', - ), - migrations.AlterField( - model_name='observation', - name='hospital', - field=models.ForeignKey(default=1, help_text='Hospital where observation was made', on_delete=django.db.models.deletion.CASCADE, related_name='observations', to='organizations.hospital'), - preserve_default=False, - ), - migrations.AlterField( - model_name='observation', - name='source', - field=models.CharField(choices=[('staff_portal', 'Staff Portal'), ('web_form', 'Web Form'), ('mobile_app', 'Mobile App'), ('email', 'Email'), ('call_center', 'Call Center'), ('other', 'Other')], default='staff_portal', help_text='How the observation was submitted', max_length=50), - ), - migrations.AlterField( - model_name='observation', - name='staff', - field=models.ForeignKey(blank=True, help_text='Staff member mentioned in observation', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='observations', to='organizations.staff'), - ), - ] diff --git a/apps/organizations/migrations/0001_initial.py b/apps/organizations/migrations/0001_initial.py index e55baef..ae2ed2a 100644 --- a/apps/organizations/migrations/0001_initial.py +++ b/apps/organizations/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid @@ -31,7 +31,7 @@ class Migration(migrations.Migration): ('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')), + ('metadata', models.JSONField(blank=True, default=dict)), ], options={ 'verbose_name_plural': 'Hospitals', @@ -130,7 +130,7 @@ class Migration(migrations.Migration): ('specialization', models.CharField(blank=True, max_length=200)), ('employee_id', models.CharField(db_index=True, max_length=50, unique=True)), ('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, to='organizations.department')), + ('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')), ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='staff_profile', to=settings.AUTH_USER_MODEL)), ], diff --git a/apps/organizations/migrations/0002_hospital_metadata.py b/apps/organizations/migrations/0002_hospital_metadata.py deleted file mode 100644 index 080c103..0000000 --- a/apps/organizations/migrations/0002_hospital_metadata.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-01 12:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='hospital', - name='metadata', - field=models.JSONField(blank=True, default=dict), - ), - ] diff --git a/apps/organizations/migrations/0003_patient_department.py b/apps/organizations/migrations/0003_patient_department.py deleted file mode 100644 index 7d2b2b6..0000000 --- a/apps/organizations/migrations/0003_patient_department.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-06 11:55 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0002_hospital_metadata'), - ] - - operations = [ - migrations.AddField( - model_name='patient', - name='department', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organizations.department'), - ), - ] diff --git a/apps/organizations/migrations/0004_remove_patient_department.py b/apps/organizations/migrations/0004_remove_patient_department.py deleted file mode 100644 index 9df7076..0000000 --- a/apps/organizations/migrations/0004_remove_patient_department.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-06 11:56 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0003_patient_department'), - ] - - operations = [ - migrations.RemoveField( - model_name='patient', - name='department', - ), - ] diff --git a/apps/organizations/migrations/0005_alter_staff_department.py b/apps/organizations/migrations/0005_alter_staff_department.py deleted file mode 100644 index a5b2afd..0000000 --- a/apps/organizations/migrations/0005_alter_staff_department.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.14 on 2026-01-07 08:54 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organizations', '0004_remove_patient_department'), - ] - - operations = [ - migrations.AlterField( - model_name='staff', - name='department', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='staff', to='organizations.department'), - ), - ] diff --git a/apps/physicians/migrations/0001_initial.py b/apps/physicians/migrations/0001_initial.py index b09a2bc..c186a05 100644 --- a/apps/physicians/migrations/0001_initial.py +++ b/apps/physicians/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/projects/migrations/0001_initial.py b/apps/projects/migrations/0001_initial.py index 0bb7c78..1e0714e 100644 --- a/apps/projects/migrations/0001_initial.py +++ b/apps/projects/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/projects/migrations/0002_initial.py b/apps/projects/migrations/0002_initial.py index a18d597..2f486e7 100644 --- a/apps/projects/migrations/0002_initial.py +++ b/apps/projects/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 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 ed007b2..5c8eb01 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 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/references/migrations/0001_initial.py b/apps/references/migrations/0001_initial.py index 8756976..7c8382f 100644 --- a/apps/references/migrations/0001_initial.py +++ b/apps/references/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-07 16:18 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import apps.references.models import django.db.models.deletion @@ -13,7 +13,7 @@ class Migration(migrations.Migration): dependencies = [ ('auth', '0012_alter_user_first_name_max_length'), - ('organizations', '0005_alter_staff_department'), + ('organizations', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] diff --git a/apps/social/migrations/0001_initial.py b/apps/social/migrations/0001_initial.py index 0e1149b..40076f3 100644 --- a/apps/social/migrations/0001_initial.py +++ b/apps/social/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/apps/standards/migrations/0001_initial.py b/apps/standards/migrations/0001_initial.py index efffe83..1fff82e 100644 --- a/apps/standards/migrations/0001_initial.py +++ b/apps/standards/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-07 20:27 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.core.validators import django.db.models.deletion @@ -12,7 +12,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('organizations', '0005_alter_staff_department'), + ('organizations', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] diff --git a/apps/surveys/migrations/0001_initial.py b/apps/surveys/migrations/0001_initial.py index ad76f54..fab22e8 100644 --- a/apps/surveys/migrations/0001_initial.py +++ b/apps/surveys/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.14 on 2026-01-05 10:43 +# Generated by Django 5.0.14 on 2026-01-08 06:56 import django.db.models.deletion import uuid diff --git a/generate_saudi_data.py b/generate_saudi_data.py index bd02df4..05cd8c9 100644 --- a/generate_saudi_data.py +++ b/generate_saudi_data.py @@ -197,7 +197,7 @@ def generate_saudi_phone(): def generate_mrn(): """Generate Medical Record Number""" - return f"MRN{random.randint(100000, 999999)}" + return f"{random.randint(100000, 999999)}" def generate_national_id(): @@ -368,7 +368,7 @@ def create_complaint_categories(hospitals): """Create complaint categories""" print("Creating complaint categories...") - # System-wide categories (hospital=None) + # System-wide categories (no hospitals in ManyToMany) system_categories = [ {'code': 'CLINICAL', 'name_en': 'Clinical Care', 'name_ar': 'الرعاية السريرية', 'order': 1}, {'code': 'STAFF', 'name_en': 'Staff Behavior', 'name_ar': 'سلوك الموظفين', 'order': 2}, @@ -380,11 +380,11 @@ def create_complaint_categories(hospitals): categories = [] - # Create system-wide categories + # Create system-wide categories (parent__isnull=True and no hospitals) for cat_data in system_categories: category, created = ComplaintCategory.objects.get_or_create( code=cat_data['code'], - hospital=None, + parent__isnull=True, defaults={ 'name_en': cat_data['name_en'], 'name_ar': cat_data['name_ar'], @@ -392,9 +392,9 @@ def create_complaint_categories(hospitals): 'is_active': True, } ) - categories.append(category) if created: print(f" Created system-wide category: {category.name_en}") + categories.append(category) # Create hospital-specific categories for each hospital hospital_specific_categories = [ @@ -407,7 +407,6 @@ def create_complaint_categories(hospitals): for cat_data in hospital_specific_categories: category, created = ComplaintCategory.objects.get_or_create( code=f"{cat_data['code']}_{hospital.code}", - hospital=hospital, defaults={ 'name_en': cat_data['name_en'], 'name_ar': cat_data['name_ar'], @@ -415,9 +414,14 @@ def create_complaint_categories(hospitals): 'is_active': True, } ) - categories.append(category) if created: + category.hospitals.add(hospital) print(f" Created hospital category for {hospital.name}: {category.name_en}") + else: + # Ensure hospital is in the hospitals ManyToMany + if hospital not in category.hospitals.all(): + category.hospitals.add(hospital) + categories.append(category) print(f" Created {len(categories)} complaint categories") return categories @@ -438,7 +442,7 @@ def create_complaints(patients, hospitals, staff, users): # Generate complaints over 2 years (730 days) # Average 3-5 complaints per day = ~1200-1800 total - for day_offset in range(730): + for day_offset in range(30): # Random number of complaints per day (0-8, weighted towards 2-4) num_complaints = random.choices([0, 1, 2, 3, 4, 5, 6, 7, 8], weights=[5, 10, 20, 25, 20, 10, 5, 3, 2])[0] @@ -456,8 +460,8 @@ def create_complaints(patients, hospitals, staff, users): status = random.choices(['open', 'in_progress', 'resolved', 'closed'], weights=[2, 5, 30, 63])[0] # Select appropriate category (system-wide or hospital-specific) - hospital_categories = [c for c in categories if c.hospital == hospital] - system_categories_list = [c for c in categories if c.hospital is None] + hospital_categories = [c for c in categories if hospital in c.hospitals.all()] + system_categories_list = [c for c in categories if c.hospitals.count() == 0] # Prefer hospital-specific categories if available, otherwise use system-wide available_categories = hospital_categories if hospital_categories else system_categories_list @@ -469,7 +473,7 @@ def create_complaints(patients, hospitals, staff, users): staff=random.choice(staff) if random.random() > 0.5 else None, title=random.choice(COMPLAINT_TITLES), description=f"Detailed description of the complaint. Patient experienced issues during their visit.", - category=random.choice(available_categories), + category=random.choice(available_categories) if available_categories else None, priority=random.choice(['low', 'medium', 'high']), severity=random.choice(['low', 'medium', 'high', 'critical']), source=random.choice(['patient', 'family', 'survey', 'call_center', 'moh', 'other']), @@ -519,7 +523,7 @@ def create_inquiries(patients, hospitals, users): # Generate inquiries over 2 years (730 days) # Average 1-2 inquiries per day = ~500-700 total - for day_offset in range(730): + for day_offset in range(30): num_inquiries = random.choices([0, 1, 2, 3], weights=[30, 40, 25, 5])[0] for _ in range(num_inquiries): @@ -838,6 +842,7 @@ def create_survey_instances(survey_templates, patients, staff): instance = SurveyInstance.objects.create( survey_template=template, + hospital=template.hospital, patient=patient, delivery_channel=random.choice(['sms', 'whatsapp', 'email']), recipient_phone=patient.phone, @@ -961,7 +966,7 @@ def create_staff_monthly_ratings(staff): neutral_count = total_surveys - positive_count - negative_count rating, created = PhysicianMonthlyRating.objects.get_or_create( - physician=staff_member, + staff=staff_member, year=year, month=month, defaults={ @@ -979,10 +984,10 @@ def create_staff_monthly_ratings(staff): ) ratings.append(rating) - print(f" Created {len(ratings)} physician monthly ratings") + print(f" Created {len(ratings)} staff monthly ratings") # Update rankings for each month - print(" Updating physician rankings...") + print(" Updating staff rankings...") from apps.physicians.models import PhysicianMonthlyRating from apps.organizations.models import Hospital, Department @@ -994,7 +999,7 @@ def create_staff_monthly_ratings(staff): hospitals = Hospital.objects.filter(status='active') for hospital in hospitals: hospital_ratings = PhysicianMonthlyRating.objects.filter( - physician__hospital=hospital, + staff__hospital=hospital, year=year, month=month ).order_by('-average_rating') @@ -1007,7 +1012,7 @@ def create_staff_monthly_ratings(staff): departments = Department.objects.filter(status='active') for department in departments: dept_ratings = PhysicianMonthlyRating.objects.filter( - physician__department=department, + staff__department=department, year=year, month=month ).order_by('-average_rating') @@ -1020,13 +1025,13 @@ def create_staff_monthly_ratings(staff): return ratings -def create_appreciations(users, physicians, hospitals, departments, categories): +def create_appreciations(users, staff, hospitals, departments, categories): """Create appreciations with 2 years of historical data""" print("Creating appreciations (2 years of data)...") - # Get ContentType for User and Physician + # Get ContentType for User and Staff user_ct = ContentType.objects.get_for_model(User) - physician_ct = ContentType.objects.get_for_model(Physician) + staff_ct = ContentType.objects.get_for_model(Staff) # Message templates for generating realistic appreciations message_templates_en = [ @@ -1101,12 +1106,12 @@ def create_appreciations(users, physicians, hospitals, departments, categories): # Select sender (users only - users send appreciations) sender = random.choice(users) - # Select recipient (70% physician, 30% user) - is_physician_recipient = random.random() < 0.7 + # Select recipient (70% staff, 30% user) + is_staff_recipient = random.random() < 0.7 - if is_physician_recipient: - recipient = random.choice(physicians) - recipient_ct = physician_ct + if is_staff_recipient: + recipient = random.choice(staff) + recipient_ct = staff_ct else: # User recipients (excluding sender) potential_recipients = [u for u in users if u.id != sender.id] @@ -1120,7 +1125,7 @@ def create_appreciations(users, physicians, hospitals, departments, categories): continue # Determine hospital context - if is_physician_recipient: + if is_staff_recipient: hospital = recipient.hospital else: hospital = recipient.hospital if recipient.hospital else sender.hospital @@ -1130,7 +1135,7 @@ def create_appreciations(users, physicians, hospitals, departments, categories): # Determine department context department = None - if is_physician_recipient and recipient.department: + if is_staff_recipient and recipient.department: department = recipient.department elif random.random() < 0.3: # Some appreciations have department context @@ -1233,14 +1238,14 @@ def create_appreciations(users, physicians, hospitals, departments, categories): return appreciations -def award_badges(badges, users, physicians, categories): - """Award badges to users and physicians based on appreciations""" +def award_badges(badges, users, staff, categories): + """Award badges to users and staff based on appreciations""" print("Awarding badges...") user_badges = [] - # Get ContentType for User and Physician + # Get ContentType for User and Staff user_ct = ContentType.objects.get_for_model(User) - physician_ct = ContentType.objects.get_for_model(Physician) + staff_ct = ContentType.objects.get_for_model(Staff) # Badge criteria mapping (using codes from seed command) badge_criteria = { @@ -1292,15 +1297,15 @@ def award_badges(badges, users, physicians, categories): appreciation_count=received_count, )) - # Award badges to physicians (60% get badges) - for physician in physicians: - if random.random() > 0.6: # 60% of physicians get badges + # Award badges to staff (60% get badges) + for staff_member in staff: + if random.random() > 0.6: # 60% of staff get badges continue - # Count appreciations received by this physician + # Count appreciations received by this staff member received_count = Appreciation.objects.filter( - recipient_content_type=physician_ct, - recipient_object_id=physician.id, + recipient_content_type=staff_ct, + recipient_object_id=staff_member.id, status=AppreciationStatus.ACKNOWLEDGED ).count() @@ -1312,17 +1317,17 @@ def award_badges(badges, users, physicians, categories): if received_count >= criteria['min_count']: # Check if already has this badge existing = UserBadge.objects.filter( - recipient_content_type=physician_ct, - recipient_object_id=physician.id, + recipient_content_type=staff_ct, + recipient_object_id=staff_member.id, badge=badge_map[badge_code] ).first() if not existing: - # Higher chance for physicians + # Higher chance for staff if random.random() < 0.7: user_badges.append(UserBadge( - recipient_content_type=physician_ct, - recipient_object_id=physician.id, + recipient_content_type=staff_ct, + recipient_object_id=staff_member.id, badge=badge_map[badge_code], appreciation_count=received_count, )) @@ -1330,19 +1335,19 @@ def award_badges(badges, users, physicians, categories): # Bulk create user badges UserBadge.objects.bulk_create(user_badges) - print(f" Awarded {len(user_badges)} badges to users and physicians") + print(f" Awarded {len(user_badges)} badges to users and staff") return user_badges -def generate_appreciation_stats(users, physicians, hospitals): - """Generate appreciation statistics for users and physicians""" +def generate_appreciation_stats(users, staff, hospitals): + """Generate appreciation statistics for users and staff""" print("Generating appreciation statistics...") stats = [] now = timezone.now() - # Get ContentType for User and Physician + # Get ContentType for User and Staff user_ct = ContentType.objects.get_for_model(User) - physician_ct = ContentType.objects.get_for_model(Physician) + staff_ct = ContentType.objects.get_for_model(Staff) # Get current year and month year = now.year @@ -1358,41 +1363,46 @@ def generate_appreciation_stats(users, physicians, hospitals): sent_count = random.randint(0, 50) acknowledged_count = int(received_count * random.uniform(0.6, 1.0)) - stats.append(AppreciationStats( + stat, created = AppreciationStats.objects.get_or_create( recipient_content_type=user_ct, recipient_object_id=user.id, year=year, month=month, - hospital=user.hospital if user.hospital else random.choice(hospitals), - received_count=received_count, - sent_count=sent_count, - acknowledged_count=acknowledged_count, - hospital_rank=random.randint(1, 20) if received_count > 0 else None, - )) + defaults={ + 'hospital': user.hospital if user.hospital else random.choice(hospitals), + 'received_count': received_count, + 'sent_count': sent_count, + 'acknowledged_count': acknowledged_count, + 'hospital_rank': random.randint(1, 20) if received_count > 0 else None, + } + ) + if created: + stats.append(stat) - # Generate stats for physicians (90% have stats) - for physician in physicians: + # Generate stats for staff (90% have stats) + for staff_member in staff: if random.random() > 0.1: # 90% have stats - # Physicians typically receive more appreciations + # Staff typically receive more appreciations received_count = random.randint(5, 50) - sent_count = random.randint(0, 20) # Physicians send less + sent_count = random.randint(0, 20) # Staff send less acknowledged_count = int(received_count * random.uniform(0.7, 1.0)) - stats.append(AppreciationStats( - recipient_content_type=physician_ct, - recipient_object_id=physician.id, + stat, created = AppreciationStats.objects.get_or_create( + recipient_content_type=staff_ct, + recipient_object_id=staff_member.id, year=year, month=month, - hospital=physician.hospital, - department=physician.department, - received_count=received_count, - sent_count=sent_count, - acknowledged_count=acknowledged_count, - hospital_rank=random.randint(1, 10) if received_count > 5 else None, - )) - - # Bulk create stats - AppreciationStats.objects.bulk_create(stats) + defaults={ + 'hospital': staff_member.hospital, + 'department': staff_member.department, + 'received_count': received_count, + 'sent_count': sent_count, + 'acknowledged_count': acknowledged_count, + 'hospital_rank': random.randint(1, 10) if received_count > 5 else None, + } + ) + if created: + stats.append(stat) print(f" Generated {len(stats)} appreciation statistics") return stats @@ -1588,36 +1598,50 @@ def main(): print("="*60 + "\n") # Clear existing data first - # clear_existing_data() + clear_existing_data() # Create base data - # hospitals = create_hospitals() - hospitals = Hospital.objects.all() - + hospitals = create_hospitals() departments = create_departments(hospitals) staff = create_staff(hospitals, departments) patients = create_patients(hospitals) - # create_users(hospitals) + users = create_users(hospitals) # Get all users for assignments - # users = list(User.objects.all()) + users_list = list(User.objects.all()) # Create complaint categories first - # categories = create_complaint_categories(hospitals) + categories = create_complaint_categories(hospitals) # Create operational data - # complaints = create_complaints(patients, hospitals, physicians, users) - # inquiries = create_inquiries(patients, hospitals, users) - # feedbacks = create_feedback(patients, hospitals, physicians, users) - # create_survey_templates(hospitals) - # create_journey_templates(hospitals) - # projects = create_qi_projects(hospitals) - # actions = create_px_actions(complaints, hospitals, users) - # journey_instances = create_journey_instances(None, patients) - # survey_instances = create_survey_instances(None, patients, physicians) - # call_interactions = create_call_center_interactions(patients, hospitals, users) - # social_mentions = create_social_mentions(hospitals) - # physician_ratings = create_physician_monthly_ratings(physicians) + complaints = create_complaints(patients, hospitals, staff, users_list) + inquiries = create_inquiries(patients, hospitals, users_list) + feedbacks = create_feedback(patients, hospitals, staff, users_list) + create_survey_templates(hospitals) + create_journey_templates(hospitals) + projects = create_qi_projects(hospitals) + actions = create_px_actions(complaints, hospitals, users_list) + journey_instances = create_journey_instances(None, patients) + survey_instances = create_survey_instances(None, patients, staff) + call_interactions = create_call_center_interactions(patients, hospitals, users_list) + social_mentions = create_social_mentions(hospitals) + staff_ratings = create_staff_monthly_ratings(staff) + + # Seed appreciation categories and badges + print("\nSeeding appreciation data...") + from django.core.management import call_command + call_command('seed_appreciation_data', verbosity=0) + print(" ✓ Appreciation categories and badges seeded") + + # Get appreciation categories and badges + appreciation_categories = list(AppreciationCategory.objects.filter(is_active=True)) + badges = list(AppreciationBadge.objects.filter(is_active=True)) + + # Create appreciation data + appreciations = create_appreciations(users_list, staff, hospitals, departments, appreciation_categories) + user_badges = award_badges(badges, users_list, staff, appreciation_categories) + appreciation_stats = generate_appreciation_stats(users_list, staff, hospitals) + observations = create_observations(hospitals, departments, users_list) print("\n" + "="*60) print("Data Generation Complete!") @@ -1627,26 +1651,26 @@ def main(): print(f" - {len(departments)} Departments") print(f" - {len(staff)} Staff") print(f" - {len(patients)} Patients") - # print(f" - {len(users)} Users") - # print(f" - {len(complaints)} Complaints (2 years)") - # print(f" - {len(inquiries)} Inquiries (2 years)") - # print(f" - {len(feedbacks)} Feedback Items") - # print(f" - {len(actions)} PX Actions") - # print(f" - {len(journey_instances)} Journey Instances") - # print(f" - {len(survey_instances)} Survey Instances") - # print(f" - {len(call_interactions)} Call Center Interactions") - # print(f" - {len(social_mentions)} Social Media Mentions") - # print(f" - {len(projects)} QI Projects") - # print(f" - {len(staff_ratings)} Staff Monthly Ratings") - # print(f" - {len(appreciations)} Appreciations (2 years)") - # print(f" - {len(user_badges)} Badges Awarded") - # print(f" - {len(appreciation_stats)} Appreciation Statistics") - # print(f" - {len(observations)} Observations (2 years)") + print(f" - {len(users_list)} Users") + print(f" - {len(complaints)} Complaints (2 years)") + print(f" - {len(inquiries)} Inquiries (2 years)") + print(f" - {len(feedbacks)} Feedback Items") + print(f" - {len(actions)} PX Actions") + print(f" - {len(journey_instances)} Journey Instances") + print(f" - {len(survey_instances)} Survey Instances") + print(f" - {len(call_interactions)} Call Center Interactions") + print(f" - {len(social_mentions)} Social Media Mentions") + print(f" - {len(projects)} QI Projects") + print(f" - {len(staff_ratings)} Staff Monthly Ratings") + print(f" - {len(appreciations)} Appreciations (2 years)") + print(f" - {len(user_badges)} Badges Awarded") + print(f" - {len(appreciation_stats)} Appreciation Statistics") + print(f" - {len(observations)} Observations (2 years)") print(f"\nYou can now login with:") print(f" Username: px_admin") print(f" Password: admin123") print(f"\nOr hospital admins:") - print(f" Username: admin_kfmc (or admin_kfsh, admin_kamc, etc.)") + print(f" Username: admin_hh") print(f" Password: admin123") print(f"\nAccess the system at: http://127.0.0.1:8000/") print("\n") diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index 5204c51..e9d7f40 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 05be3f3..f5d78a3 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-06 17:35+0300\n" +"POT-Creation-Date: 2026-01-08 10:32+0300\n" "PO-Revision-Date: 2025-12-15 12:30+0300\n" "Last-Translator: PX360 Team\n" "Language-Team: Arabic\n" @@ -28,7 +28,7 @@ msgstr "المعلومات الشخصية" msgid "Organization" msgstr "المنظمة" -#: apps/accounts/admin.py:23 templates/layouts/partials/topbar.html:111 +#: apps/accounts/admin.py:23 templates/layouts/partials/topbar.html:112 msgid "Profile" msgstr "الملف الشخصي" @@ -40,434 +40,62 @@ msgstr "الصلاحيات" msgid "Important dates" msgstr "التواريخ المهمة" -#: apps/dashboard/views.py:75 -msgid "Active Complaints" -msgstr "الشكاوى النشطة" - -#: apps/dashboard/views.py:81 templates/analytics/command_center.html:278 -#: templates/analytics/command_center.html:475 -#: templates/analytics/dashboard.html:43 -#: templates/complaints/analytics.html:171 -msgid "Overdue Complaints" -msgstr "الشكاوى المتأخرة" - -#: apps/dashboard/views.py:87 -msgid "Open PX Actions" -msgstr "إجراءات PX المفتوحة" - -#: apps/dashboard/views.py:93 templates/analytics/command_center.html:333 -msgid "Overdue Actions" -msgstr "الإجراءات المتأخرة" - -#: apps/dashboard/views.py:99 -msgid "Negative Surveys (24h)" -msgstr "الاستبيانات السلبية (24 ساعة)" - -#: apps/dashboard/views.py:105 -msgid "Negative Social Mentions" -msgstr "الذكر السلبي في وسائل التواصل الاجتماعي" - -#: apps/dashboard/views.py:111 -msgid "Low Call Center Ratings" -msgstr "تقييمات منخفضة لمركز الاتصال" - -#: apps/dashboard/views.py:117 templates/analytics/command_center.html:352 -#: templates/analytics/dashboard.html:61 -msgid "Avg Survey Score" -msgstr "متوسط تقييم الاستبيان" - -#: templates/accounts/onboarding/checklist_list.html:4 -msgid "Acknowledgement Checklist Items" -msgstr "عناصر قائمة التحقق للتأكيد" - -msgid "Checklist Items Management" -msgstr "إدارة عناصر قائمة التحقق" - -msgid "Manage acknowledgement checklist items" -msgstr "إدارة عناصر قائمة التحقق للتأكيد" - -msgid "Add Checklist Item" -msgstr "إضافة عنصر إلى قائمة التحقق" - -msgid "Checklist Items" -msgstr "عناصر قائمة التحقق" - -msgid "Search items..." -msgstr "البحث عن عناصر..." - -msgid "Item Text" -msgstr "نص العنصر" - -msgid "Role" -msgstr "الدور" - -msgid "Linked Content" -msgstr "المحتوى المرتبط" - -msgid "Required" -msgstr "مطلوب" - -#: templates/accounts/onboarding/checklist_list.html:54 -#: templates/accounts/onboarding/content_list.html:53 -#: templates/observations/category_list.html:35 -msgid "Order" -msgstr "الترتيب" - -#: templates/accounts/onboarding/checklist_list.html:55 -#: templates/accounts/onboarding/content_list.html:54 -#: templates/accounts/onboarding/progress_detail.html:106 -#: templates/accounts/onboarding/provisional_list.html:103 -#: templates/actions/action_list.html:277 -#: templates/actions/action_list.html:433 templates/analytics/kpi_list.html:30 -#: templates/appreciation/appreciation_list.html:171 -#: templates/callcenter/complaint_list.html:104 -#: templates/callcenter/complaint_list.html:159 -#: templates/callcenter/inquiry_list.html:100 -#: templates/callcenter/inquiry_list.html:155 -#: templates/complaints/complaint_detail.html:564 -#: templates/complaints/complaint_list.html:188 -#: templates/complaints/complaint_list.html:340 -#: templates/complaints/inquiry_list.html:185 -#: templates/complaints/inquiry_list.html:304 -#: templates/config/routing_rules.html:34 templates/config/sla_config.html:35 -#: templates/dashboard/command_center.html:241 -#: templates/feedback/feedback_list.html:212 -#: templates/feedback/feedback_list.html:326 -#: templates/journeys/instance_list.html:144 -#: templates/journeys/instance_list.html:211 -#: templates/journeys/template_list.html:29 -#: templates/observations/category_list.html:40 -#: templates/observations/observation_detail.html:402 -#: templates/observations/observation_list.html:194 -#: templates/observations/observation_list.html:310 -#: templates/observations/public_success.html:228 -#: templates/organizations/department_list.html:19 -#: templates/organizations/hospital_list.html:19 -#: templates/organizations/patient_list.html:20 -#: templates/organizations/physician_list.html:20 -#: templates/physicians/physician_list.html:85 -#: templates/physicians/physician_list.html:117 -#: templates/projects/project_list.html:45 -#: templates/surveys/instance_detail.html:162 -#: templates/surveys/instance_list.html:65 -#: templates/surveys/template_list.html:30 -msgid "Status" -msgstr "الحالة" - -#: templates/accounts/onboarding/checklist_list.html:56 -#: templates/accounts/onboarding/content_list.html:55 -#: templates/accounts/onboarding/provisional_list.html:104 -#: templates/actions/action_list.html:438 -#: templates/ai_engine/sentiment_detail.html:171 -#: templates/callcenter/complaint_list.html:160 -#: templates/callcenter/inquiry_list.html:156 -#: templates/complaints/complaint_detail.html:288 -#: templates/complaints/complaint_list.html:345 -#: templates/complaints/inquiry_detail.html:275 -#: templates/complaints/inquiry_list.html:309 -#: templates/feedback/feedback_list.html:328 -msgid "Created" -msgstr "تاريخ الإنشاء" - -#: templates/accounts/onboarding/checklist_list.html:57 -#: templates/accounts/onboarding/content_list.html:56 -#: templates/accounts/onboarding/provisional_list.html:105 -#: templates/actions/action_list.html:439 -#: templates/ai_engine/sentiment_dashboard.html:238 -#: templates/ai_engine/sentiment_list.html:129 -#: templates/analytics/command_center.html:204 -#: templates/analytics/command_center.html:490 -#: templates/appreciation/appreciation_detail.html:170 -#: templates/appreciation/category_list.html:41 -#: templates/callcenter/complaint_list.html:161 -#: templates/callcenter/inquiry_list.html:157 -#: templates/callcenter/interaction_list.html:61 -#: templates/complaints/analytics.html:184 -#: templates/complaints/complaint_list.html:346 -#: templates/complaints/inquiry_list.html:310 -#: 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/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/surveys/instance_list.html:69 -#: templates/surveys/template_list.html:31 -msgid "Actions" -msgstr "الإجراءات" - -#: templates/accounts/onboarding/checklist_list.html:78 -#: templates/accounts/onboarding/content_list.html:81 -msgid "All Roles" -msgstr "جميع الأدوار" - -msgid "Yes" -msgstr "نعم" - -msgid "No" -msgstr "لا" - -#: templates/accounts/onboarding/checklist_list.html:105 -#: templates/accounts/onboarding/content_list.html:89 -#: templates/appreciation/badge_form.html:141 -#: templates/appreciation/badge_list.html:61 -#: templates/appreciation/category_form.html:124 -#: templates/journeys/instance_list.html:85 -#: templates/observations/category_form.html:81 -#: templates/observations/category_list.html:70 -#: templates/physicians/physician_detail.html:26 -#: templates/physicians/physician_list.html:88 -#: templates/physicians/physician_list.html:154 -#: templates/projects/project_list.html:22 -msgid "Active" -msgstr "نشط" - -#: templates/accounts/onboarding/checklist_list.html:110 -#: templates/accounts/onboarding/content_list.html:94 -#: templates/appreciation/badge_list.html:63 -#: templates/observations/category_list.html:72 -#: templates/physicians/physician_detail.html:28 -#: templates/physicians/physician_list.html:89 -#: templates/physicians/physician_list.html:156 -msgid "Inactive" -msgstr "غير نشط" - -#: templates/accounts/onboarding/checklist_list.html:119 -#: templates/accounts/onboarding/content_list.html:103 -#: templates/appreciation/badge_form.html:13 -#: templates/appreciation/badge_list.html:69 -#: templates/appreciation/category_form.html:13 -#: templates/observations/category_list.html:78 -msgid "Edit" -msgstr "تعديل" - -#: templates/accounts/onboarding/checklist_list.html:122 -#: templates/accounts/onboarding/content_list.html:106 -#: templates/appreciation/badge_list.html:72 -#: templates/observations/category_list.html:86 -msgid "Delete" -msgstr "حذف" - -#: templates/accounts/onboarding/checklist_list.html:133 -msgid "No checklist items found" -msgstr "لا توجد عناصر في قائمة التحقق" - -msgid "Onboarding Complete" -msgstr "اكتمال الإعداد" - -msgid "Welcome Aboard!" -msgstr "مرحبًا بك!" - -msgid "Your account has been successfully activated" -msgstr "تم تفعيل حسابك بنجاح" - -msgid "You can now log in to PX360 with your new username and password." -msgstr "يمكنك الآن تسجيل الدخول إلى PX360 باستخدام اسم المستخدم وكلمة المرور" - -msgid "Learning Complete" -msgstr "اكتمل التعلم" - -msgid "You've reviewed all system content" -msgstr "تمت مراجعة جميع محتويات النظام" - -msgid "Acknowledged" -msgstr "تم الإقرار" - -msgid "All required items confirmed" -msgstr "تم تأكيد جميع العناصر المطلوبة" - -msgid "Account Active" -msgstr "الحساب نشط" - -msgid "Your credentials are ready" -msgstr "بيانات الدخول جاهزة" - -msgid "What's Next?" -msgstr "ما الخطوة التالية؟" - -msgid "• Complete your profile information" -msgstr "• أكمل معلومات ملفك الشخصي" - -msgid "• Explore the PX360 dashboard" -msgstr "• استكشف لوحة تحكم PX360" - -msgid "• Start improving patient experience!" -msgstr "• ابدأ بتحسين تجربة المرضى!" - -msgid "Log In to PX360" -msgstr "تسجيل الدخول إلى PX360" - -msgid "A confirmation email has been sent to your registered email address." -msgstr "تم إرسال رسالة تأكيد إلى بريدك الإلكتروني المسجل" - -msgid "Acknowledgement Content" -msgstr "محتوى الإقرار" - -msgid "Acknowledgement Content Management" -msgstr "إدارة محتوى الإقرار" - -msgid "Manage educational content for onboarding wizard" -msgstr "إدارة المحتوى التعليمي لمعالج الإعداد" - -msgid "Add Content" -msgstr "إضافة محتوى" - -msgid "Content Sections" -msgstr "أقسام المحتوى" - -msgid "Search content..." -msgstr "بحث في المحتوى..." - -#: templates/accounts/onboarding/content_list.html:50 -#: templates/appreciation/badge_form.html:87 -#: templates/appreciation/category_form.html:87 -#: templates/appreciation/category_list.html:36 -#: templates/observations/category_form.html:56 -#: templates/observations/category_list.html:38 -msgid "Icon" -msgstr "الأيقونة" - -#: templates/accounts/onboarding/content_list.html:51 -#: templates/actions/action_list.html:430 -#: templates/analytics/command_center.html:484 -#: templates/callcenter/complaint_form.html:173 -#: templates/callcenter/complaint_list.html:154 -#: templates/complaints/analytics.html:179 -#: templates/complaints/complaint_form.html:115 -#: templates/complaints/complaint_list.html:338 -#: templates/feedback/feedback_form.html:172 -#: templates/feedback/feedback_list.html:322 -#: templates/observations/public_new.html:278 -msgid "Title" -msgstr "العنوان" - -#: templates/accounts/onboarding/content_list.html:117 -msgid "No content found" -msgstr "لا يوجد محتوى" - -msgid "Back to Provisional Users" -msgstr "العودة إلى المستخدمين المؤقتين" - -msgid "Onboarding Progress" -msgstr "تقدم الإعداد" - -msgid "Overall Progress" -msgstr "التقدم العام" - -msgid "Required Items" -msgstr "العناصر المطلوبة" - -msgid "All required acknowledgements completed!" -msgstr "تم إكمال جميع الإقرارات المطلوبة!" - -msgid "items remaining" -msgstr "عناصر متبقية" - -msgid "User Details" -msgstr "بيانات المستخدم" - -msgid "Name:" -msgstr "الاسم:" - -#: templates/accounts/onboarding/progress_detail.html:70 -#: templates/callcenter/inquiry_success.html:97 -msgid "Email:" -msgstr "البريد الإلكتروني:" - -#: templates/accounts/onboarding/progress_detail.html:73 -#: templates/appreciation/appreciation_detail.html:151 -#: templates/appreciation/appreciation_send_form.html:220 -#: templates/callcenter/complaint_success.html:89 -#: templates/callcenter/inquiry_success.html:103 -msgid "Hospital:" -msgstr "المستشفى:" - -#: templates/accounts/onboarding/progress_detail.html:76 -#: templates/appreciation/appreciation_detail.html:156 -#: templates/appreciation/appreciation_send_form.html:214 -#: templates/callcenter/inquiry_success.html:109 -msgid "Department:" -msgstr "القسم:" - -#: templates/accounts/onboarding/progress_detail.html:79 -msgid "Roles:" -msgstr "الأدوار:" - -msgid "Acknowledgement Checklist" -msgstr "قائمة الإقرار" - -msgid "Item" -msgstr "العنصر" - -msgid "Acknowledged At" -msgstr "تم الإقرار في" - -msgid "No checklist items found for this user's role" -msgstr "لا توجد عناصر إقرار لهذا الدور" - -msgid "Activity Log" -msgstr "سجل النشاط" - -msgid "No activity recorded yet" -msgstr "لا يوجد نشاط مسجل بعد" - -msgid "Provisional Users" -msgstr "المستخدمون المؤقتون" - -msgid "Provisional Users Management" -msgstr "إدارة المستخدمين المؤقتين" - -msgid "Manage and monitor provisional user onboarding" -msgstr "إدارة ومتابعة إعداد المستخدمين المؤقتين" - -msgid "Create Provisional User" -msgstr "إنشاء مستخدم مؤقت" - -msgid "Total Provisional" -msgstr "إجمالي المؤقتين" - -#: templates/accounts/onboarding/provisional_list.html:54 -#: templates/accounts/onboarding/provisional_list.html:137 -#: templates/accounts/onboarding/step_checklist.html:25 -#: templates/journeys/instance_list.html:100 -#: templates/projects/project_list.html:30 -#: templates/surveys/instance_detail.html:93 -#: templates/surveys/instance_list.html:40 -#: templates/surveys/instance_list.html:68 -msgid "Completed" -msgstr "مكتملة" - -#: templates/accounts/onboarding/provisional_list.html:69 -#: templates/accounts/onboarding/provisional_list.html:142 -#: templates/actions/action_list.html:165 -#: templates/callcenter/complaint_list.html:74 -#: templates/callcenter/complaint_list.html:108 -#: templates/callcenter/inquiry_list.html:70 -#: templates/callcenter/inquiry_list.html:104 -#: templates/complaints/complaint_list.html:137 -#: templates/complaints/inquiry_list.html:134 -#: templates/observations/observation_list.html:143 -#: templates/observations/public_track.html:316 -msgid "In Progress" -msgstr "قيد التنفيذ" - -#: templates/accounts/onboarding/provisional_list.html:84 -msgid "Provisional Users List" -msgstr "قائمة المستخدمين المؤقتين" - -msgid "Search users..." -msgstr "البحث عن مستخدمين..." - -#: templates/accounts/onboarding/provisional_list.html:99 -#: templates/appreciation/appreciation_send_form.html:37 -msgid "User" -msgstr "مستخدم" - +#: apps/complaints/forms.py:56 apps/complaints/forms.py:257 +#: templates/analytics/kpi_list.html:25 +#: templates/complaints/inquiry_detail.html:502 +#: templates/complaints/public_complaint_form.html:138 +#: templates/complaints/public_inquiry_form.html:14 +#: templates/config/routing_rules.html:29 templates/config/sla_config.html:28 +#: templates/core/public_submit.html:800 templates/core/public_submit.html:942 +#: templates/journeys/template_list.html:25 +#: templates/observations/observation_detail.html:261 +#: templates/observations/public_new.html:356 +#: templates/organizations/department_list.html:15 +#: templates/organizations/hospital_list.html:15 +#: templates/organizations/patient_list.html:15 +#: templates/organizations/physician_list.html:15 +#: templates/projects/project_list.html:42 +#: templates/references/folder_view.html:107 +#: templates/references/search.html:81 +#: templates/surveys/instance_detail.html:106 +#: templates/surveys/template_list.html:25 +msgid "Name" +msgstr "الاسم" + +#: apps/complaints/forms.py:62 apps/complaints/forms.py:263 +#: 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 +#: templates/accounts/onboarding/provisional_list.html:199 +#: 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 +msgid "your@email.com" +msgstr "your@email.com" + +#: apps/complaints/forms.py:79 apps/complaints/forms.py:269 +#: templates/accounts/onboarding/provisional_list.html:205 +#: 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 +#: 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 #: templates/accounts/onboarding/provisional_list.html:100 #: templates/accounts/onboarding/provisional_list.html:227 #: templates/actions/action_list.html:342 @@ -483,15 +111,18 @@ msgstr "مستخدم" #: templates/callcenter/inquiry_form.html:137 #: templates/callcenter/inquiry_list.html:123 #: templates/callcenter/inquiry_list.html:153 -#: templates/complaints/complaint_detail.html:145 +#: templates/complaints/complaint_detail.html:146 #: templates/complaints/complaint_form.html:81 -#: templates/complaints/complaint_list.html:240 -#: templates/complaints/complaint_list.html:342 +#: templates/complaints/complaint_list.html:243 +#: templates/complaints/complaint_list.html:344 #: 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/config/routing_rules.html:32 templates/config/sla_config.html:29 +#: templates/core/public_submit.html:963 #: templates/feedback/feedback_form.html:247 #: templates/feedback/feedback_list.html:249 #: templates/feedback/feedback_list.html:327 @@ -514,6 +145,767 @@ msgstr "مستخدم" msgid "Hospital" msgstr "المستشفى" +#: apps/complaints/forms.py:94 apps/complaints/forms.py:295 +#: templates/accounts/onboarding/provisional_list.html:229 +#: templates/appreciation/appreciation_send_form.html:46 +#: templates/complaints/public_complaint_form.html:201 +#: templates/complaints/public_inquiry_form.html:64 +#: 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 +msgid "Department (Optional)" +msgstr "القسم (اختياري)" + +#: apps/complaints/forms.py:108 +#: templates/accounts/onboarding/provisional_list.html:238 +#: templates/appreciation/appreciation_send_form.html:69 +msgid "Select Department" +msgstr "اختر القسم" + +#: apps/complaints/forms.py:120 +msgid "Complaint Category" +msgstr "فئة الشكوى" + +#: apps/complaints/forms.py:122 +#: templates/appreciation/appreciation_send_form.html:78 +#: templates/complaints/public_complaint_form.html:216 +#: templates/complaints/public_inquiry_form.html:82 +#: templates/core/public_submit.html:705 templates/core/public_submit.html:974 +msgid "Select Category" +msgstr "اختر الفئة" + +#: apps/complaints/forms.py:133 +msgid "Complaint Title" +msgstr "عنوان الشكوى" + +#: apps/complaints/forms.py:139 +msgid "Brief title of your complaint" +msgstr "عنوان مختصر للشكوى" + +#: apps/complaints/forms.py:145 +#: templates/complaints/public_complaint_form.html:248 +msgid "Complaint Description" +msgstr "وصف الشكوى" + +#: apps/complaints/forms.py:151 +msgid "" +"Please describe your complaint in detail. Our AI system will analyze and " +"prioritize your complaint accordingly." +msgstr "" +"يرجى وصف الشكوى بالتفصيل. سيقوم نظام الذكاء الاصطناعي لدينا بتحليلها وتحديد " +"أولويتها." + +#: apps/complaints/forms.py:158 templates/actions/action_list.html:290 +#: templates/actions/action_list.html:434 +#: templates/analytics/command_center.html:486 +#: templates/callcenter/complaint_form.html:217 +#: templates/callcenter/complaint_list.html:115 +#: templates/callcenter/complaint_list.html:158 +#: templates/complaints/analytics.html:181 +#: templates/complaints/complaint_form.html:200 +#: templates/complaints/complaint_list.html:204 +#: templates/complaints/complaint_list.html:343 +#: 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 +#: templates/observations/observation_list.html:309 +#: templates/observations/public_new.html:244 +#: templates/observations/public_success.html:220 +#: templates/observations/public_track.html:277 +msgid "Severity" +msgstr "الخطورة" + +#: apps/complaints/forms.py:166 templates/actions/action_list.html:302 +#: templates/callcenter/complaint_form.html:231 +#: templates/complaints/complaint_detail.html:231 +#: templates/complaints/complaint_form.html:214 +#: templates/complaints/complaint_list.html:216 +#: templates/complaints/inquiry_form.html:161 +#: templates/complaints/inquiry_list.html:198 +#: templates/complaints/inquiry_list.html:305 +#: templates/config/routing_rules.html:28 +#: templates/feedback/feedback_form.html:230 +#: templates/observations/convert_to_action.html:71 +msgid "Priority" +msgstr "الأولوية" + +#: apps/complaints/forms.py:175 +msgid "Attach Documents (Optional)" +msgstr "إرفاق مستندات (اختياري)" + +#: apps/complaints/forms.py:183 +msgid "You can upload images, PDFs, or Word documents (max 10MB each)" +msgstr "" +"يمكنك رفع صور أو ملفات PDF أو مستندات Word (بحد أقصى 10 ميجابايت لكل ملف)" + +#: apps/complaints/forms.py:225 +msgid "Maximum 5 files allowed" +msgstr "يُسمح بحد أقصى 5 ملفات" + +#: apps/complaints/forms.py:231 +msgid "File size must be less than 10MB" +msgstr "يجب ألا يتجاوز حجم الملف 10 ميجابايت" + +#: apps/complaints/forms.py:238 +msgid "Allowed file types: JPG, PNG, GIF, PDF, DOC, DOCX" +msgstr "أنواع الملفات المسموحة: JPG، PNG، GIF، PDF، DOC، DOCX" + +#: apps/complaints/forms.py:301 +msgid "Inquiry Type" +msgstr "نوع الاستفسار" + +#: apps/complaints/forms.py:314 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 +msgid "Subject" +msgstr "الموضوع" + +#: apps/complaints/forms.py:320 +msgid "Brief subject" +msgstr "موضوع مختصر" + +#: apps/complaints/forms.py:326 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 +#: templates/core/public_submit.html:989 +#: templates/feedback/feedback_form.html:181 +msgid "Message" +msgstr "الرسالة" + +#: apps/complaints/forms.py:332 +msgid "Describe your inquiry" +msgstr "اشرح استفسارك" + +#: apps/dashboard/views.py:86 +msgid "Active Complaints" +msgstr "الشكاوى النشطة" + +#: apps/dashboard/views.py:92 templates/analytics/command_center.html:278 +#: templates/analytics/command_center.html:475 +#: templates/analytics/dashboard.html:43 +#: templates/complaints/analytics.html:171 +msgid "Overdue Complaints" +msgstr "الشكاوى المتأخرة" + +#: apps/dashboard/views.py:98 +msgid "Open PX Actions" +msgstr "إجراءات PX المفتوحة" + +#: apps/dashboard/views.py:104 templates/analytics/command_center.html:333 +msgid "Overdue Actions" +msgstr "الإجراءات المتأخرة" + +#: apps/dashboard/views.py:110 +msgid "Negative Surveys (24h)" +msgstr "الاستبيانات السلبية (24 ساعة)" + +#: apps/dashboard/views.py:116 +msgid "Negative Social Mentions" +msgstr "الذكر السلبي في وسائل التواصل الاجتماعي" + +#: apps/dashboard/views.py:122 +msgid "Low Call Center Ratings" +msgstr "تقييمات منخفضة لمركز الاتصال" + +#: apps/dashboard/views.py:128 templates/analytics/command_center.html:352 +#: templates/analytics/dashboard.html:61 +msgid "Avg Survey Score" +msgstr "متوسط تقييم الاستبيان" + +#: apps/references/forms.py:24 +msgid "Enter folder name (English)" +msgstr "أدخل اسم المجلد (بالإنجليزية)" + +#: apps/references/forms.py:28 +msgid "Enter folder name (Arabic)" +msgstr "أدخل اسم المجلد (بالعربية)" + +#: apps/references/forms.py:33 +msgid "Enter folder description (English)" +msgstr "أدخل وصف المجلد (بالإنجليزية)" + +#: apps/references/forms.py:38 +msgid "Enter folder description (Arabic)" +msgstr "أدخل وصف المجلد (بالعربية)" + +#: apps/references/forms.py:45 templates/references/folder_form.html:124 +msgid "e.g., fa-folder, fa-file-pdf" +msgstr "مثال: fa-folder، fa-file-pdf" + +#: apps/references/forms.py:49 templates/references/folder_form.html:132 +msgid "e.g., #007bff" +msgstr "مثال: #007bff" + +#: apps/references/forms.py:83 +msgid "Please provide a name in English or Arabic." +msgstr "يرجى إدخال اسم باللغة الإنجليزية أو العربية." + +#: apps/references/forms.py:93 +msgid "Upload as new version" +msgstr "الرفع كإصدار جديد" + +#: apps/references/forms.py:94 +msgid "Check this to create a new version of an existing document" +msgstr "حدد هذا الخيار لإنشاء إصدار جديد من مستند موجود" + +#: apps/references/forms.py:111 +msgid "Enter document title (English)" +msgstr "أدخل عنوان المستند (بالإنجليزية)" + +#: apps/references/forms.py:115 +msgid "Enter document title (Arabic)" +msgstr "أدخل عنوان المستند (بالعربية)" + +#: apps/references/forms.py:123 +msgid "Enter document description (English)" +msgstr "أدخل وصف المستند (بالإنجليزية)" + +#: apps/references/forms.py:128 +msgid "Enter document description (Arabic)" +msgstr "أدخل وصف المستند (بالعربية)" + +#: apps/references/forms.py:136 +msgid "e.g., policy, procedure, handbook (comma-separated)" +msgstr "مثال: سياسة، إجراء، دليل (مفصولة بفواصل)" + +#: apps/references/forms.py:175 +msgid "Please provide a title in English or Arabic." +msgstr "يرجى إدخال عنوان باللغة الإنجليزية أو العربية." + +#: apps/references/forms.py:188 +msgid "File is required when uploading a new version." +msgstr "الملف مطلوب عند رفع إصدار جديد." + +#: apps/references/forms.py:199 templates/actions/action_list.html:269 +#: templates/appreciation/appreciation_list.html:193 +#: templates/callcenter/complaint_form.html:93 +#: templates/callcenter/complaint_list.html:98 +#: templates/callcenter/inquiry_form.html:89 +#: templates/callcenter/inquiry_list.html:94 +#: templates/complaints/complaint_list.html:183 +#: templates/complaints/inquiry_list.html:177 +#: templates/feedback/feedback_list.html:191 +#: templates/journeys/instance_list.html:127 +#: templates/observations/observation_list.html:186 +#: 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/standards/search.html:51 +msgid "Search" +msgstr "بحث" + +#: apps/references/forms.py:202 +msgid "Search by title, description, or tags..." +msgstr "ابحث بالعنوان أو الوصف أو الوسوم..." + +#: apps/references/forms.py:208 templates/references/document_form.html:195 +#: templates/references/search.html:82 +msgid "Folder" +msgstr "المجلد" + +#: apps/references/forms.py:217 templates/references/document_view.html:54 +msgid "File Type" +msgstr "نوع الملف" + +#: apps/references/forms.py:219 +msgid "All Types" +msgstr "جميع الأنواع" + +#: apps/references/forms.py:239 templates/references/document_form.html:218 +#: templates/references/document_view.html:90 +msgid "Tags" +msgstr "الوسوم" + +#: apps/references/forms.py:242 +msgid "Filter by tags..." +msgstr "التصفية حسب الوسوم..." + +#: templates/accounts/onboarding/checklist_list.html:4 +msgid "Acknowledgement Checklist Items" +msgstr "عناصر قائمة التحقق للتأكيد" + +#: templates/accounts/onboarding/checklist_list.html:15 +msgid "Checklist Items Management" +msgstr "إدارة عناصر قائمة التحقق" + +#: templates/accounts/onboarding/checklist_list.html:18 +msgid "Manage acknowledgement checklist items" +msgstr "إدارة عناصر قائمة التحقق للتأكيد" + +#: templates/accounts/onboarding/checklist_list.html:23 +msgid "Add Checklist Item" +msgstr "إضافة عنصر إلى قائمة التحقق" + +#: templates/accounts/onboarding/checklist_list.html:35 +msgid "Checklist Items" +msgstr "عناصر قائمة التحقق" + +#: templates/accounts/onboarding/checklist_list.html:38 +msgid "Search items..." +msgstr "البحث عن عناصر..." + +#: templates/accounts/onboarding/checklist_list.html:50 +msgid "Item Text" +msgstr "نص العنصر" + +#: templates/accounts/onboarding/checklist_list.html:51 +#: templates/accounts/onboarding/content_list.html:52 +#: templates/accounts/onboarding/progress_detail.html:108 +msgid "Role" +msgstr "الدور" + +#: templates/accounts/onboarding/checklist_list.html:52 +msgid "Linked Content" +msgstr "المحتوى المرتبط" + +#: templates/accounts/onboarding/checklist_list.html:53 +#: templates/accounts/onboarding/progress_detail.html:109 +#: templates/accounts/onboarding/step_checklist.html:64 +msgid "Required" +msgstr "مطلوب" + +#: templates/accounts/onboarding/checklist_list.html:54 +#: templates/accounts/onboarding/content_list.html:53 +#: templates/observations/category_list.html:35 +#: templates/references/folder_form.html:137 +msgid "Order" +msgstr "الترتيب" + +#: templates/accounts/onboarding/checklist_list.html:55 +#: templates/accounts/onboarding/content_list.html:54 +#: templates/accounts/onboarding/progress_detail.html:106 +#: templates/accounts/onboarding/provisional_list.html:103 +#: templates/actions/action_list.html:277 +#: templates/actions/action_list.html:433 templates/analytics/kpi_list.html:30 +#: templates/appreciation/appreciation_list.html:171 +#: templates/callcenter/complaint_list.html:104 +#: 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_list.html:191 +#: templates/complaints/complaint_list.html:342 +#: templates/complaints/inquiry_list.html:185 +#: templates/complaints/inquiry_list.html:304 +#: templates/config/routing_rules.html:34 templates/config/sla_config.html:35 +#: templates/dashboard/command_center.html:241 +#: templates/feedback/feedback_list.html:212 +#: templates/feedback/feedback_list.html:326 +#: templates/journeys/instance_list.html:144 +#: templates/journeys/instance_list.html:211 +#: templates/journeys/template_list.html:29 +#: templates/observations/category_list.html:40 +#: templates/observations/observation_detail.html:402 +#: templates/observations/observation_list.html:194 +#: templates/observations/observation_list.html:310 +#: templates/observations/public_success.html:228 +#: templates/organizations/department_list.html:19 +#: templates/organizations/hospital_list.html:19 +#: templates/organizations/patient_list.html:20 +#: templates/organizations/physician_list.html:20 +#: templates/physicians/physician_list.html:85 +#: templates/physicians/physician_list.html:117 +#: templates/projects/project_list.html:45 +#: templates/standards/attachment_upload.html:83 +#: templates/standards/compliance_form.html:62 +#: templates/standards/dashboard.html:83 templates/standards/dashboard.html:130 +#: templates/standards/department_standards.html:50 +#: templates/standards/standard_detail.html:120 +#: templates/surveys/instance_detail.html:162 +#: templates/surveys/instance_list.html:65 +#: templates/surveys/template_list.html:30 +msgid "Status" +msgstr "الحالة" + +#: templates/accounts/onboarding/checklist_list.html:56 +#: templates/accounts/onboarding/content_list.html:55 +#: templates/accounts/onboarding/provisional_list.html:104 +#: templates/actions/action_list.html:438 +#: 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_list.html:347 +#: templates/complaints/inquiry_detail.html:275 +#: templates/complaints/inquiry_list.html:309 +#: templates/feedback/feedback_list.html:328 +#: templates/references/document_view.html:83 +#: templates/references/document_view.html:115 +msgid "Created" +msgstr "تاريخ الإنشاء" + +#: templates/accounts/onboarding/checklist_list.html:57 +#: templates/accounts/onboarding/content_list.html:56 +#: templates/accounts/onboarding/provisional_list.html:105 +#: templates/actions/action_list.html:439 +#: templates/ai_engine/sentiment_dashboard.html:238 +#: templates/ai_engine/sentiment_list.html:129 +#: templates/analytics/command_center.html:204 +#: templates/analytics/command_center.html:490 +#: templates/appreciation/appreciation_detail.html:170 +#: templates/appreciation/category_list.html:41 +#: templates/callcenter/complaint_list.html:161 +#: templates/callcenter/inquiry_list.html:157 +#: templates/callcenter/interaction_list.html:61 +#: templates/complaints/analytics.html:184 +#: templates/complaints/complaint_list.html:348 +#: templates/complaints/inquiry_list.html:310 +#: 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/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/references/document_view.html:146 +#: templates/standards/attachment_upload.html:111 +#: templates/standards/dashboard.html:84 +#: templates/standards/department_standards.html:52 +#: templates/standards/search.html:83 templates/surveys/instance_list.html:69 +#: templates/surveys/template_list.html:31 +msgid "Actions" +msgstr "الإجراءات" + +#: templates/accounts/onboarding/checklist_list.html:78 +#: templates/accounts/onboarding/content_list.html:81 +msgid "All Roles" +msgstr "جميع الأدوار" + +#: templates/accounts/onboarding/checklist_list.html:94 +#: templates/accounts/onboarding/progress_detail.html:136 +msgid "Yes" +msgstr "نعم" + +#: templates/accounts/onboarding/checklist_list.html:97 +#: templates/accounts/onboarding/progress_detail.html:138 +msgid "No" +msgstr "لا" + +#: templates/accounts/onboarding/checklist_list.html:105 +#: templates/accounts/onboarding/content_list.html:89 +#: templates/appreciation/badge_form.html:141 +#: templates/appreciation/badge_list.html:61 +#: templates/appreciation/category_form.html:124 +#: templates/journeys/instance_list.html:85 +#: templates/observations/category_form.html:81 +#: templates/observations/category_list.html:70 +#: 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/references/folder_form.html:173 +msgid "Active" +msgstr "نشط" + +#: templates/accounts/onboarding/checklist_list.html:110 +#: templates/accounts/onboarding/content_list.html:94 +#: templates/appreciation/badge_list.html:63 +#: templates/observations/category_list.html:72 +#: templates/physicians/physician_detail.html:28 +#: templates/physicians/physician_list.html:89 +#: templates/physicians/physician_list.html:156 +msgid "Inactive" +msgstr "غير نشط" + +#: templates/accounts/onboarding/checklist_list.html:119 +#: templates/accounts/onboarding/content_list.html:103 +#: templates/appreciation/badge_form.html:13 +#: templates/appreciation/badge_list.html:69 +#: templates/appreciation/category_form.html:13 +#: templates/observations/category_list.html:78 +#: templates/references/document_view.html:34 +msgid "Edit" +msgstr "تعديل" + +#: templates/accounts/onboarding/checklist_list.html:122 +#: templates/accounts/onboarding/content_list.html:106 +#: templates/appreciation/badge_list.html:72 +#: templates/observations/category_list.html:86 +msgid "Delete" +msgstr "حذف" + +#: templates/accounts/onboarding/checklist_list.html:133 +msgid "No checklist items found" +msgstr "لا توجد عناصر في قائمة التحقق" + +#: templates/accounts/onboarding/complete.html:4 +msgid "Onboarding Complete" +msgstr "اكتمال الإعداد" + +#: templates/accounts/onboarding/complete.html:14 +msgid "Welcome Aboard!" +msgstr "مرحبًا بك!" + +#: templates/accounts/onboarding/complete.html:16 +msgid "Your account has been successfully activated" +msgstr "تم تفعيل حسابك بنجاح" + +#: templates/accounts/onboarding/complete.html:22 +msgid "You can now log in to PX360 with your new username and password." +msgstr "يمكنك الآن تسجيل الدخول إلى PX360 باستخدام اسم المستخدم وكلمة المرور" + +#: templates/accounts/onboarding/complete.html:30 +msgid "Learning Complete" +msgstr "اكتمل التعلم" + +#: templates/accounts/onboarding/complete.html:32 +msgid "You've reviewed all system content" +msgstr "تمت مراجعة جميع محتويات النظام" + +#: templates/accounts/onboarding/complete.html:41 +msgid "Acknowledged" +msgstr "تم الإقرار" + +#: templates/accounts/onboarding/complete.html:43 +msgid "All required items confirmed" +msgstr "تم تأكيد جميع العناصر المطلوبة" + +#: templates/accounts/onboarding/complete.html:52 +msgid "Account Active" +msgstr "الحساب نشط" + +#: templates/accounts/onboarding/complete.html:54 +msgid "Your credentials are ready" +msgstr "بيانات الدخول جاهزة" + +#: templates/accounts/onboarding/complete.html:64 +msgid "What's Next?" +msgstr "ما الخطوة التالية؟" + +#: templates/accounts/onboarding/complete.html:67 +msgid "• Complete your profile information" +msgstr "• أكمل معلومات ملفك الشخصي" + +#: templates/accounts/onboarding/complete.html:70 +msgid "• Explore the PX360 dashboard" +msgstr "• استكشف لوحة تحكم PX360" + +#: templates/accounts/onboarding/complete.html:73 +msgid "• Start improving patient experience!" +msgstr "• ابدأ بتحسين تجربة المرضى!" + +#: templates/accounts/onboarding/complete.html:80 +msgid "Log In to PX360" +msgstr "تسجيل الدخول إلى PX360" + +#: templates/accounts/onboarding/complete.html:85 +msgid "A confirmation email has been sent to your registered email address." +msgstr "تم إرسال رسالة تأكيد إلى بريدك الإلكتروني المسجل" + +#: templates/accounts/onboarding/content_list.html:4 +msgid "Acknowledgement Content" +msgstr "محتوى الإقرار" + +#: templates/accounts/onboarding/content_list.html:15 +msgid "Acknowledgement Content Management" +msgstr "إدارة محتوى الإقرار" + +#: templates/accounts/onboarding/content_list.html:18 +msgid "Manage educational content for onboarding wizard" +msgstr "إدارة المحتوى التعليمي لمعالج الإعداد" + +#: templates/accounts/onboarding/content_list.html:23 +msgid "Add Content" +msgstr "إضافة محتوى" + +#: templates/accounts/onboarding/content_list.html:35 +msgid "Content Sections" +msgstr "أقسام المحتوى" + +#: templates/accounts/onboarding/content_list.html:38 +msgid "Search content..." +msgstr "بحث في المحتوى..." + +#: templates/accounts/onboarding/content_list.html:50 +#: templates/appreciation/badge_form.html:87 +#: templates/appreciation/category_form.html:87 +#: templates/appreciation/category_list.html:36 +#: templates/observations/category_form.html:56 +#: templates/observations/category_list.html:38 +#: templates/references/folder_form.html:121 +msgid "Icon" +msgstr "الأيقونة" + +#: templates/accounts/onboarding/content_list.html:51 +#: templates/actions/action_list.html:430 +#: templates/analytics/command_center.html:484 +#: templates/callcenter/complaint_form.html:173 +#: templates/callcenter/complaint_list.html:154 +#: templates/complaints/analytics.html:179 +#: templates/complaints/complaint_list.html:340 +#: templates/core/public_submit.html:751 +#: templates/feedback/feedback_form.html:172 +#: templates/feedback/feedback_list.html:322 +#: templates/observations/public_new.html:278 +#: templates/standards/attachment_upload.html:75 +#: templates/standards/compliance_form.html:33 +#: templates/standards/department_standards.html:49 +#: templates/standards/search.html:79 +msgid "Title" +msgstr "العنوان" + +#: templates/accounts/onboarding/content_list.html:117 +msgid "No content found" +msgstr "لا يوجد محتوى" + +#: templates/accounts/onboarding/progress_detail.html:15 +msgid "Back to Provisional Users" +msgstr "العودة إلى المستخدمين المؤقتين" + +#: templates/accounts/onboarding/progress_detail.html:19 +msgid "Onboarding Progress" +msgstr "تقدم الإعداد" + +#: templates/accounts/onboarding/progress_detail.html:32 +msgid "Overall Progress" +msgstr "التقدم العام" + +#: templates/accounts/onboarding/progress_detail.html:35 +msgid "Required Items" +msgstr "العناصر المطلوبة" + +#: templates/accounts/onboarding/progress_detail.html:51 +msgid "All required acknowledgements completed!" +msgstr "تم إكمال جميع الإقرارات المطلوبة!" + +#: templates/accounts/onboarding/progress_detail.html:56 +msgid "items remaining" +msgstr "عناصر متبقية" + +#: templates/accounts/onboarding/progress_detail.html:65 +msgid "User Details" +msgstr "بيانات المستخدم" + +#: templates/accounts/onboarding/progress_detail.html:67 +#: templates/core/no_hospital_assigned.html:29 +msgid "Name:" +msgstr "الاسم:" + +#: templates/accounts/onboarding/progress_detail.html:70 +#: templates/callcenter/inquiry_success.html:97 +#: templates/complaints/public_complaint_success.html:193 +#: templates/core/no_hospital_assigned.html:28 +msgid "Email:" +msgstr "البريد الإلكتروني:" + +#: templates/accounts/onboarding/progress_detail.html:73 +#: templates/appreciation/appreciation_detail.html:151 +#: templates/appreciation/appreciation_send_form.html:220 +#: templates/callcenter/complaint_success.html:89 +#: templates/callcenter/inquiry_success.html:103 +msgid "Hospital:" +msgstr "المستشفى:" + +#: templates/accounts/onboarding/progress_detail.html:76 +#: templates/appreciation/appreciation_detail.html:156 +#: templates/appreciation/appreciation_send_form.html:214 +#: templates/callcenter/inquiry_success.html:109 +msgid "Department:" +msgstr "القسم:" + +#: templates/accounts/onboarding/progress_detail.html:79 +msgid "Roles:" +msgstr "الأدوار:" + +#: templates/accounts/onboarding/progress_detail.html:98 +#: templates/accounts/onboarding/step_checklist.html:4 +#: templates/accounts/onboarding/step_checklist.html:37 +msgid "Acknowledgement Checklist" +msgstr "قائمة الإقرار" + +#: templates/accounts/onboarding/progress_detail.html:107 +msgid "Item" +msgstr "العنصر" + +#: templates/accounts/onboarding/progress_detail.html:110 +msgid "Acknowledged At" +msgstr "تم الإقرار في" + +#: templates/accounts/onboarding/progress_detail.html:153 +msgid "No checklist items found for this user's role" +msgstr "لا توجد عناصر إقرار لهذا الدور" + +#: templates/accounts/onboarding/progress_detail.html:173 +#: templates/actions/action_detail.html:326 +msgid "Activity Log" +msgstr "سجل النشاط" + +#: templates/accounts/onboarding/progress_detail.html:209 +msgid "No activity recorded yet" +msgstr "لا يوجد نشاط مسجل بعد" + +#: templates/accounts/onboarding/provisional_list.html:4 +msgid "Provisional Users" +msgstr "المستخدمون المؤقتون" + +#: templates/accounts/onboarding/provisional_list.html:15 +msgid "Provisional Users Management" +msgstr "إدارة المستخدمين المؤقتين" + +#: templates/accounts/onboarding/provisional_list.html:18 +msgid "Manage and monitor provisional user onboarding" +msgstr "إدارة ومتابعة إعداد المستخدمين المؤقتين" + +#: templates/accounts/onboarding/provisional_list.html:23 +#: templates/accounts/onboarding/provisional_list.html:189 +msgid "Create Provisional User" +msgstr "إنشاء مستخدم مؤقت" + +#: templates/accounts/onboarding/provisional_list.html:39 +msgid "Total Provisional" +msgstr "إجمالي المؤقتين" + +#: templates/accounts/onboarding/provisional_list.html:54 +#: templates/accounts/onboarding/provisional_list.html:137 +#: templates/accounts/onboarding/step_checklist.html:25 +#: templates/journeys/instance_list.html:100 +#: templates/projects/project_list.html:30 +#: templates/surveys/instance_detail.html:93 +#: templates/surveys/instance_list.html:40 +#: templates/surveys/instance_list.html:68 +msgid "Completed" +msgstr "مكتملة" + +#: templates/accounts/onboarding/provisional_list.html:69 +#: templates/accounts/onboarding/provisional_list.html:142 +#: templates/actions/action_list.html:165 +#: templates/callcenter/complaint_list.html:74 +#: templates/callcenter/complaint_list.html:108 +#: templates/callcenter/inquiry_list.html:70 +#: templates/callcenter/inquiry_list.html:104 +#: templates/complaints/complaint_list.html:140 +#: templates/complaints/inquiry_list.html:134 +#: templates/observations/observation_list.html:143 +#: templates/observations/public_track.html:316 +msgid "In Progress" +msgstr "قيد التنفيذ" + +#: templates/accounts/onboarding/provisional_list.html:84 +msgid "Provisional Users List" +msgstr "قائمة المستخدمين المؤقتين" + +#: templates/accounts/onboarding/provisional_list.html:87 +msgid "Search users..." +msgstr "البحث عن مستخدمين..." + +#: templates/accounts/onboarding/provisional_list.html:99 +#: templates/appreciation/appreciation_send_form.html:37 +msgid "User" +msgstr "مستخدم" + #: templates/accounts/onboarding/provisional_list.html:101 #: templates/accounts/onboarding/provisional_list.html:236 #: templates/actions/action_list.html:355 @@ -525,9 +917,10 @@ msgstr "المستشفى" #: templates/appreciation/leaderboard.html:97 #: templates/callcenter/complaint_form.html:143 #: templates/callcenter/inquiry_form.html:147 -#: templates/complaints/complaint_detail.html:149 +#: templates/complaints/complaint_detail.html:150 +#: templates/complaints/complaint_detail.html:252 #: templates/complaints/complaint_form.html:91 -#: templates/complaints/complaint_list.html:253 +#: templates/complaints/complaint_list.html:256 #: templates/complaints/inquiry_detail.html:145 #: templates/complaints/inquiry_form.html:68 #: templates/dashboard/command_center.html:146 @@ -546,6 +939,12 @@ msgstr "المستشفى" #: templates/physicians/ratings_list.html:69 #: templates/physicians/ratings_list.html:101 #: templates/physicians/specialization_overview.html:118 +#: templates/standards/attachment_upload.html:79 +#: templates/standards/compliance_form.html:122 +#: templates/standards/dashboard.html:82 templates/standards/dashboard.html:129 +#: templates/standards/search.html:82 +#: templates/standards/standard_detail.html:36 +#: templates/standards/standard_detail.html:119 msgid "Department" msgstr "القسم" @@ -554,37 +953,26 @@ msgstr "القسم" msgid "Roles" msgstr "الأدوار" +#: templates/accounts/onboarding/provisional_list.html:153 msgid "View Progress" msgstr "عرض التقدم" +#: templates/accounts/onboarding/provisional_list.html:159 msgid "Resend Invitation" msgstr "إعادة إرسال الدعوة" +#: templates/accounts/onboarding/provisional_list.html:170 msgid "No provisional users found" msgstr "لا يوجد مستخدمون مؤقتون" -msgid "Email Address" -msgstr "البريد الإلكتروني" - -msgid "Phone Number" -msgstr "رقم الهاتف" - +#: templates/accounts/onboarding/provisional_list.html:212 msgid "First Name" msgstr "الاسم الأول" +#: templates/accounts/onboarding/provisional_list.html:219 msgid "Last Name" msgstr "اسم العائلة" -#: templates/accounts/onboarding/provisional_list.html:229 -#: templates/appreciation/appreciation_send_form.html:46 -msgid "Select Hospital" -msgstr "اختر المستشفى" - -#: templates/accounts/onboarding/provisional_list.html:238 -#: templates/appreciation/appreciation_send_form.html:69 -msgid "Select Department" -msgstr "اختر القسم" - #: templates/accounts/onboarding/provisional_list.html:265 #: templates/actions/action_detail.html:668 #: templates/appreciation/appreciation_send_form.html:149 @@ -592,11 +980,20 @@ msgstr "اختر القسم" #: templates/appreciation/category_form.html:133 #: templates/callcenter/complaint_form.html:274 #: templates/callcenter/inquiry_form.html:233 -#: templates/complaints/complaint_detail.html:607 -#: templates/complaints/complaint_form.html:222 +#: templates/complaints/complaint_detail.html:847 +#: templates/complaints/complaint_form.html:266 #: templates/complaints/inquiry_form.html:237 #: templates/observations/category_form.html:91 #: templates/observations/convert_to_action.html:91 +#: templates/references/document_form.html:301 +#: templates/references/document_form.html:305 +#: templates/references/folder_form.html:224 +#: templates/references/folder_form.html:228 +#: templates/references/folder_form.html:232 +#: templates/standards/attachment_upload.html:56 +#: templates/standards/department_standards.html:161 +#: templates/standards/standard_form.html:130 +#: templates/standards/standard_form.html:134 msgid "Cancel" msgstr "إلغاء" @@ -604,60 +1001,97 @@ msgstr "إلغاء" msgid "Create & Send Invitation" msgstr "إنشاء وإرسال الدعوة" +#: templates/accounts/onboarding/provisional_list.html:315 msgid "Are you sure you want to resend the invitation email?" msgstr "هل أنت متأكد من إعادة إرسال رسالة الدعوة؟" +#: templates/accounts/onboarding/provisional_list.html:326 msgid "Invitation sent successfully!" msgstr "تم إرسال الدعوة بنجاح!" +#: templates/accounts/onboarding/provisional_list.html:328 msgid "Failed to send invitation." msgstr "فشل إرسال الدعوة." +#: templates/accounts/onboarding/provisional_list.html:333 +#: templates/accounts/onboarding/step_activation.html:229 msgid "An error occurred. Please try again." msgstr "حدث خطأ. يرجى المحاولة مرة أخرى." +#: templates/accounts/onboarding/step_activation.html:4 msgid "Account Activation" msgstr "تفعيل الحساب" +#: templates/accounts/onboarding/step_activation.html:14 msgid "Create Your Account" msgstr "إنشاء حسابك" -msgid "Congratulations! You have completed the onboarding process. Now create your account credentials to get started." +#: templates/accounts/onboarding/step_activation.html:20 +msgid "" +"Congratulations! You have completed the onboarding process. Now create your " +"account credentials to get started." msgstr "تهانينا! لقد أكملت عملية الإعداد. أنشئ بيانات حسابك للبدء." +#: templates/accounts/onboarding/step_activation.html:26 msgid "Username" msgstr "اسم المستخدم" +#: templates/accounts/onboarding/step_activation.html:35 msgid "Username can only contain letters, numbers, underscores, and hyphens" msgstr "يمكن أن يحتوي اسم المستخدم على أحرف وأرقام وشرطة سفلية وشرطة فقط" +#: templates/accounts/onboarding/step_activation.html:37 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 msgid "Minimum 8 characters" msgstr "8 أحرف على الأقل" +#: templates/accounts/onboarding/step_activation.html:79 msgid "Confirm Password" msgstr "تأكيد كلمة المرور" -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:93 +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 msgid "Activate Account" msgstr "تفعيل الحساب" +#: templates/accounts/onboarding/step_activation.html:104 msgid "Back" msgstr "رجوع" +#: templates/accounts/onboarding/step_activation.html:132 msgid "Very Weak" msgstr "ضعيفة جدًا" +#: templates/accounts/onboarding/step_activation.html:135 msgid "Weak" msgstr "ضعيفة" @@ -670,42 +1104,64 @@ msgstr "جيد" msgid "Strong" msgstr "قوية" +#: templates/accounts/onboarding/step_activation.html:163 msgid "Passwords match" msgstr "كلمتا المرور متطابقتان" +#: templates/accounts/onboarding/step_activation.html:166 +#: templates/accounts/onboarding/step_activation.html:186 msgid "Passwords do not match" msgstr "كلمتا المرور غير متطابقتين" +#: templates/accounts/onboarding/step_activation.html:181 msgid "Please fill in all fields" msgstr "يرجى تعبئة جميع الحقول" +#: templates/accounts/onboarding/step_activation.html:191 msgid "Password must be at least 8 characters" msgstr "يجب أن تكون كلمة المرور 8 أحرف على الأقل" +#: templates/accounts/onboarding/step_activation.html:197 msgid "Activating..." msgstr "جارٍ التفعيل..." +#: templates/accounts/onboarding/step_checklist.html:13 +#: templates/accounts/onboarding/step_content.html:13 +#: templates/appreciation/my_badges.html:187 +#: templates/journeys/instance_list.html:210 msgid "Progress" msgstr "التقدم" -msgid "Please review and acknowledge all required items below. Your digital signature will be recorded for compliance purposes." -msgstr "يرجى مراجعة جميع البنود المطلوبة أدناه والإقرار بها. سيتم تسجيل توقيعك الرقمي لأغراض الامتثال." +#: templates/accounts/onboarding/step_checklist.html:43 +msgid "" +"Please review and acknowledge all required items below. Your digital " +"signature will be recorded for compliance purposes." +msgstr "" +"يرجى مراجعة جميع البنود المطلوبة أدناه والإقرار بها. سيتم تسجيل توقيعك " +"الرقمي لأغراض الامتثال." +#: templates/accounts/onboarding/step_checklist.html:92 msgid "Digital Signature" msgstr "التوقيع الرقمي" -msgid "By providing your digital signature below, you acknowledge that you have read, understood, and agreed to all the items listed above." -msgstr "بتقديم توقيعك الرقمي أدناه، فإنك تقر بأنك قرأت وفهمت ووافقت على جميع البنود المذكورة أعلاه." +#: templates/accounts/onboarding/step_checklist.html:94 +msgid "" +"By providing your digital signature below, you acknowledge that you have " +"read, understood, and agreed to all the items listed above." +msgstr "" +"بتقديم توقيعك الرقمي أدناه، فإنك تقر بأنك قرأت وفهمت ووافقت على جميع البنود " +"المذكورة أعلاه." #: templates/accounts/onboarding/step_checklist.html:102 #: templates/ai_engine/sentiment_list.html:99 -#: templates/complaints/complaint_list.html:302 +#: templates/complaints/complaint_list.html:305 #: templates/complaints/inquiry_form.html:325 #: templates/complaints/inquiry_list.html:266 #: templates/observations/observation_list.html:282 #: templates/physicians/leaderboard.html:116 #: templates/physicians/physician_list.html:97 #: templates/physicians/ratings_list.html:84 +#: templates/references/search.html:56 templates/standards/search.html:54 msgid "Clear" msgstr "مسح" @@ -713,9 +1169,12 @@ msgstr "مسح" msgid "Proceed to Account Setup" msgstr "المتابعة لإعداد الحساب" +#: templates/accounts/onboarding/step_checklist.html:117 msgid "Back to Content" msgstr "العودة إلى المحتوى" +#: templates/accounts/onboarding/step_content.html:4 +#: templates/layouts/partials/sidebar.html:304 msgid "Onboarding" msgstr "تهيئة المستخدم" @@ -731,6 +1190,7 @@ msgstr "تهيئة المستخدم" #: templates/appreciation/my_badges.html:107 #: templates/callcenter/complaint_list.html:226 #: templates/callcenter/inquiry_list.html:218 +#: templates/references/search.html:153 msgid "Previous" msgstr "السابق" @@ -746,6 +1206,7 @@ msgstr "السابق" #: templates/appreciation/my_badges.html:131 #: templates/callcenter/complaint_list.html:240 #: templates/callcenter/inquiry_list.html:232 +#: templates/references/search.html:171 msgid "Next" msgstr "التالي" @@ -753,23 +1214,29 @@ 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!" +#: templates/accounts/onboarding/welcome.html:18 msgid "Your journey to better patient experience starts here" msgstr "رحلتك نحو تجربة مرضى أفضل تبدأ هنا" +#: templates/accounts/onboarding/welcome.html:24 msgid "" "Please complete the onboarding wizard to set up your account and learn about " "the system." msgstr "يرجى إكمال معالج الإعداد لإعداد حسابك والتعرّف على النظام." +#: templates/accounts/onboarding/welcome.html:31 msgid "Learn" msgstr "تعلّم" +#: templates/accounts/onboarding/welcome.html:33 msgid "Understand the PX360 system" msgstr "التعرّف على نظام PX360" @@ -782,15 +1249,19 @@ msgstr "إقرار" msgid "Review and confirm key policies" msgstr "مراجعة وتأكيد السياسات الأساسية" +#: templates/accounts/onboarding/welcome.html:49 msgid "Sign" msgstr "توقيع" +#: templates/accounts/onboarding/welcome.html:51 msgid "Create your account credentials" msgstr "إنشاء بيانات اعتماد حسابك" +#: templates/accounts/onboarding/welcome.html:60 msgid "Start Onboarding" msgstr "بدء الإعداد" +#: templates/accounts/onboarding/welcome.html:63 msgid "Estimated time: 10-15 minutes" msgstr "الوقت المتوقع: 10–15 دقيقة" @@ -800,7 +1271,7 @@ msgstr "العودة إلى الإجراءات" #: templates/actions/action_detail.html:227 #: templates/appreciation/appreciation_detail.html:12 -#: templates/complaints/complaint_detail.html:181 +#: templates/complaints/complaint_detail.html:182 #: templates/complaints/inquiry_detail.html:179 #: templates/observations/observation_detail.html:199 msgid "Details" @@ -823,13 +1294,13 @@ msgid "Approval Required" msgstr "يتطلب الموافقة" #: templates/actions/action_detail.html:496 -#: templates/complaints/complaint_detail.html:440 +#: templates/complaints/complaint_detail.html:634 #: templates/complaints/inquiry_detail.html:390 msgid "Quick Actions" msgstr "إجراءات سريعة" #: templates/actions/action_detail.html:502 -#: templates/complaints/complaint_detail.html:446 +#: templates/complaints/complaint_detail.html:680 #: templates/complaints/inquiry_detail.html:396 #: templates/config/routing_rules.html:33 #: templates/feedback/feedback_detail.html:475 @@ -838,7 +1309,7 @@ msgid "Assign To" msgstr "تعيين إلى" #: templates/actions/action_detail.html:522 -#: templates/complaints/complaint_detail.html:466 +#: templates/complaints/complaint_detail.html:700 #: templates/complaints/inquiry_detail.html:416 #: templates/feedback/feedback_detail.html:455 #: templates/observations/observation_detail.html:454 @@ -846,14 +1317,14 @@ msgid "Change Status" msgstr "تغيير الحالة" #: templates/actions/action_detail.html:531 -#: templates/complaints/complaint_detail.html:475 +#: templates/complaints/complaint_detail.html:709 #: templates/complaints/inquiry_detail.html:425 msgid "Optional note..." msgstr "ملاحظة اختيارية..." #: templates/actions/action_detail.html:549 -#: templates/complaints/complaint_detail.html:493 -#: templates/complaints/complaint_detail.html:501 +#: templates/complaints/complaint_detail.html:733 +#: templates/complaints/complaint_detail.html:741 #: templates/complaints/inquiry_detail.html:437 #: templates/complaints/inquiry_detail.html:445 #: templates/observations/observation_detail.html:420 @@ -862,20 +1333,20 @@ msgid "Add Note" msgstr "إضافة ملاحظة" #: templates/actions/action_detail.html:555 -#: templates/complaints/complaint_detail.html:499 +#: templates/complaints/complaint_detail.html:739 #: templates/complaints/inquiry_detail.html:443 msgid "Enter your note..." msgstr "أدخل ملاحظتك..." #: templates/actions/action_detail.html:566 -#: templates/complaints/complaint_detail.html:510 +#: templates/complaints/complaint_detail.html:750 #: templates/complaints/inquiry_detail.html:527 msgid "Assignment Info" msgstr "معلومات التعيين" #: templates/actions/action_detail.html:615 #: templates/callcenter/complaint_form.html:245 -#: templates/complaints/complaint_form.html:203 +#: templates/complaints/complaint_form.html:247 msgid "SLA Information" msgstr "معلومات اتفاقية مستوى الخدمة" @@ -884,7 +1355,7 @@ msgid "Escalate Action" msgstr "تصعيد الإجراء" #: templates/actions/action_detail.html:662 -#: templates/complaints/complaint_detail.html:601 +#: templates/complaints/complaint_detail.html:841 msgid "Reason for Escalation" msgstr "سبب التصعيد" @@ -903,7 +1374,7 @@ msgstr "الإجمالي" #: templates/callcenter/inquiry_list.html:59 #: templates/callcenter/inquiry_list.html:103 #: templates/complaints/analytics.html:51 -#: templates/complaints/complaint_list.html:122 +#: templates/complaints/complaint_list.html:125 #: templates/complaints/inquiry_list.html:119 msgid "Open" msgstr "مفتوح" @@ -911,7 +1382,7 @@ msgstr "مفتوح" #: templates/actions/action_list.html:178 #: templates/complaints/analytics.html:59 #: templates/complaints/analytics.html:121 -#: templates/complaints/complaint_list.html:152 +#: templates/complaints/complaint_list.html:155 msgid "Overdue" msgstr "متأخر" @@ -923,59 +1394,10 @@ msgstr "في انتظار الموافقة" msgid "My Actions" msgstr "إجراءاتي" -#: templates/actions/action_list.html:269 -#: templates/appreciation/appreciation_list.html:193 -#: templates/callcenter/complaint_form.html:93 -#: templates/callcenter/complaint_list.html:98 -#: templates/callcenter/inquiry_form.html:89 -#: templates/callcenter/inquiry_list.html:94 -#: templates/complaints/complaint_list.html:180 -#: templates/complaints/inquiry_list.html:177 -#: templates/feedback/feedback_list.html:191 -#: templates/journeys/instance_list.html:127 -#: templates/observations/observation_list.html:186 -#: templates/physicians/physician_list.html:57 -msgid "Search" -msgstr "بحث" - #: templates/actions/action_list.html:271 msgid "Title, description..." msgstr "العنوان، الوصف..." -#: templates/actions/action_list.html:290 -#: templates/actions/action_list.html:434 -#: templates/analytics/command_center.html:486 -#: templates/callcenter/complaint_form.html:217 -#: templates/callcenter/complaint_list.html:115 -#: templates/callcenter/complaint_list.html:158 -#: templates/complaints/analytics.html:181 -#: templates/complaints/complaint_form.html:159 -#: templates/complaints/complaint_list.html:201 -#: templates/complaints/complaint_list.html:341 -#: templates/config/routing_rules.html:31 -#: templates/observations/convert_to_action.html:37 -#: templates/observations/observation_list.html:207 -#: templates/observations/observation_list.html:309 -#: templates/observations/public_new.html:244 -#: templates/observations/public_success.html:220 -#: templates/observations/public_track.html:277 -msgid "Severity" -msgstr "الخطورة" - -#: templates/actions/action_list.html:302 -#: templates/callcenter/complaint_form.html:231 -#: templates/complaints/complaint_detail.html:230 -#: templates/complaints/complaint_form.html:173 -#: templates/complaints/complaint_list.html:213 -#: templates/complaints/inquiry_form.html:161 -#: templates/complaints/inquiry_list.html:198 -#: templates/complaints/inquiry_list.html:305 -#: templates/config/routing_rules.html:28 -#: templates/feedback/feedback_form.html:230 -#: templates/observations/convert_to_action.html:71 -msgid "Priority" -msgstr "الأولوية" - #: templates/actions/action_list.html:314 #: templates/actions/action_list.html:432 templates/analytics/kpi_list.html:26 #: templates/appreciation/appreciation_list.html:182 @@ -985,14 +1407,18 @@ msgstr "الأولوية" #: templates/callcenter/inquiry_form.html:162 #: templates/callcenter/inquiry_list.html:111 #: templates/callcenter/inquiry_list.html:154 -#: templates/complaints/complaint_detail.html:214 -#: templates/complaints/complaint_form.html:128 -#: templates/complaints/complaint_list.html:225 -#: templates/complaints/complaint_list.html:339 +#: templates/complaints/complaint_detail.html:215 +#: 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/inquiry_detail.html:206 #: templates/complaints/inquiry_form.html:124 #: templates/complaints/inquiry_list.html:210 #: templates/complaints/inquiry_list.html:303 +#: templates/complaints/public_complaint_form.html:210 +#: templates/complaints/public_inquiry_form.html:76 +#: templates/core/public_submit.html:722 templates/core/public_submit.html:972 #: templates/feedback/feedback_form.html:192 #: templates/feedback/feedback_list.html:225 #: templates/feedback/feedback_list.html:323 @@ -1003,25 +1429,31 @@ msgstr "الأولوية" #: templates/observations/public_new.html:232 #: templates/observations/public_success.html:216 #: templates/observations/public_track.html:273 +#: templates/standards/compliance_form.html:41 +#: templates/standards/search.html:39 templates/standards/search.html:81 +#: templates/standards/standard_detail.html:32 msgid "Category" msgstr "الفئة" #: templates/actions/action_list.html:329 #: templates/actions/action_list.html:431 -#: templates/complaints/complaint_detail.html:223 -#: templates/complaints/complaint_form.html:184 +#: templates/complaints/complaint_detail.html:224 +#: 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/standards/compliance_form.html:37 +#: templates/standards/search.html:28 templates/standards/search.html:80 +#: templates/standards/standard_detail.html:28 msgid "Source" msgstr "المصدر" #: templates/actions/action_list.html:368 #: templates/actions/action_list.html:436 #: templates/complaints/analytics.html:183 -#: templates/complaints/complaint_detail.html:514 -#: templates/complaints/complaint_list.html:266 -#: templates/complaints/complaint_list.html:343 +#: templates/complaints/complaint_detail.html:754 +#: templates/complaints/complaint_list.html:269 +#: templates/complaints/complaint_list.html:345 #: templates/complaints/inquiry_detail.html:235 #: templates/complaints/inquiry_detail.html:531 #: templates/complaints/inquiry_list.html:239 @@ -1033,7 +1465,7 @@ msgid "Assigned To" msgstr "تم الإسناد إلى" #: templates/actions/action_list.html:381 -#: templates/complaints/complaint_list.html:288 +#: templates/complaints/complaint_list.html:291 #: templates/complaints/inquiry_list.html:252 #: templates/feedback/feedback_list.html:274 #: templates/journeys/instance_list.html:178 @@ -1042,7 +1474,7 @@ msgid "Date From" msgstr "من التاريخ" #: templates/actions/action_list.html:385 -#: templates/complaints/complaint_list.html:292 +#: templates/complaints/complaint_list.html:295 #: templates/complaints/inquiry_list.html:256 #: templates/feedback/feedback_list.html:278 #: templates/journeys/instance_list.html:182 @@ -1056,8 +1488,8 @@ msgstr "إلى التاريخ" #: templates/callcenter/complaint_list.html:153 #: templates/callcenter/inquiry_list.html:150 #: templates/complaints/analytics.html:178 -#: templates/complaints/complaint_detail.html:138 -#: templates/complaints/complaint_list.html:336 +#: templates/complaints/complaint_detail.html:139 +#: templates/complaints/complaint_list.html:338 #: templates/complaints/inquiry_detail.html:128 #: templates/complaints/inquiry_list.html:300 #: templates/feedback/feedback_list.html:319 @@ -1067,7 +1499,7 @@ msgstr "المعرف" #: templates/actions/action_list.html:437 #: templates/analytics/command_center.html:489 #: templates/complaints/analytics.html:182 -#: templates/complaints/complaint_list.html:344 +#: templates/complaints/complaint_list.html:346 #: templates/complaints/inquiry_detail.html:154 #: templates/complaints/inquiry_form.html:206 #: templates/complaints/inquiry_list.html:308 @@ -1077,11 +1509,13 @@ msgstr "تاريخ الاستحقاق" #: templates/actions/action_list.html:502 #: templates/appreciation/appreciation_list.html:91 #: templates/appreciation/appreciation_list.html:160 -#: templates/complaints/complaint_detail.html:416 -#: templates/complaints/complaint_list.html:405 +#: templates/complaints/complaint_detail.html:610 +#: 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 msgid "View" msgstr "عرض" @@ -1181,7 +1615,7 @@ 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:571 +#: templates/complaints/complaint_detail.html:811 #: templates/surveys/instance_list.html:66 msgid "Score" msgstr "النتيجة" @@ -1312,6 +1746,7 @@ msgstr "المشاعر" #: templates/ai_engine/sentiment_list.html:128 #: templates/callcenter/interaction_list.html:60 #: templates/observations/observation_list.html:306 +#: templates/standards/attachment_upload.html:110 msgid "Date" msgstr "التاريخ" @@ -1345,6 +1780,8 @@ msgstr "تحليل المشاعر" #: templates/callcenter/interaction_list.html:56 #: templates/feedback/feedback_list.html:199 #: templates/feedback/feedback_list.html:320 +#: templates/references/folder_view.html:108 +#: templates/references/search.html:83 msgid "Type" msgstr "النوع" @@ -1387,7 +1824,7 @@ msgstr "إجمالي النتائج" #: templates/ai_engine/sentiment_list.html:69 #: templates/analytics/command_center.html:136 -#: templates/complaints/complaint_list.html:168 +#: templates/complaints/complaint_list.html:171 #: templates/complaints/inquiry_list.html:165 #: templates/observations/observation_list.html:174 msgid "Filters" @@ -1396,13 +1833,14 @@ msgstr "عوامل التصفية" #: templates/ai_engine/sentiment_list.html:96 #: templates/analytics/command_center.html:212 #: templates/appreciation/leaderboard.html:75 -#: templates/complaints/complaint_list.html:299 +#: templates/complaints/complaint_list.html:302 #: templates/complaints/inquiry_list.html:263 #: templates/observations/observation_list.html:279 msgid "Apply Filters" msgstr "تطبيق الفلاتر" #: templates/ai_engine/sentiment_list.html:109 +#: templates/references/search.html:68 msgid "Results" msgstr "النتائج" @@ -1415,6 +1853,7 @@ msgid "No sentiment results found." msgstr "لم يتم العثور على نتائج تحليل المشاعر." #: templates/ai_engine/sentiment_list.html:204 +#: templates/references/search.html:148 msgid "First" msgstr "الأول" @@ -1432,6 +1871,7 @@ msgid "of" msgstr "من" #: templates/ai_engine/sentiment_list.html:222 +#: templates/references/search.html:176 msgid "Last" msgstr "الأخيرة" @@ -1448,27 +1888,35 @@ msgstr "عرض التفاصيل" msgid "PX Command Center" msgstr "مركز قيادة تجربة المرضى" +#: templates/analytics/command_center.html:99 msgid "Loading..." msgstr "جارٍ التحميل..." +#: templates/analytics/command_center.html:101 msgid "Loading dashboard data..." msgstr "جارٍ تحميل بيانات لوحة التحكم..." +#: templates/analytics/command_center.html:109 msgid "Comprehensive Patient Experience Analytics Dashboard" msgstr "لوحة تحليلات شاملة لتجربة المرضى" +#: templates/analytics/command_center.html:115 msgid "Export" msgstr "تصدير" +#: templates/analytics/command_center.html:119 msgid "Export to Excel" msgstr "تصدير إلى إكسل" +#: templates/analytics/command_center.html:122 msgid "Export to PDF" msgstr "تصدير إلى PDF" +#: templates/analytics/command_center.html:127 msgid "Refresh" msgstr "تحديث" +#: templates/analytics/command_center.html:148 msgid "Date Range" msgstr "نطاق التاريخ" @@ -1491,20 +1939,25 @@ msgstr "آخر ٩٠ يومًا" msgid "This Month" msgstr "هذا الشهر" +#: templates/analytics/command_center.html:154 msgid "Last Month" msgstr "الشهر الماضي" +#: templates/analytics/command_center.html:155 msgid "This Quarter" msgstr "هذا الربع" +#: templates/analytics/command_center.html:156 msgid "This Year" msgstr "هذا العام" +#: templates/analytics/command_center.html:157 +#: templates/analytics/command_center.html:163 msgid "Custom Range" msgstr "نطاق مخصص" #: templates/analytics/command_center.html:175 -#: templates/complaints/complaint_list.html:242 +#: templates/complaints/complaint_list.html:245 #: templates/complaints/inquiry_list.html:228 #: templates/physicians/department_overview.html:56 #: templates/physicians/leaderboard.html:83 @@ -1515,11 +1968,13 @@ msgid "All Hospitals" msgstr "جميع المستشفيات" #: templates/analytics/command_center.html:188 -#: templates/complaints/complaint_list.html:255 +#: templates/complaints/complaint_list.html:258 #: templates/observations/observation_list.html:234 #: templates/physicians/leaderboard.html:94 #: templates/physicians/physician_list.html:76 #: templates/physicians/ratings_list.html:71 +#: templates/standards/search.html:101 +#: templates/standards/standard_detail.html:41 msgid "All Departments" msgstr "جميع الأقسام" @@ -1529,24 +1984,25 @@ msgstr "فئة مؤشرات الأداء" #: templates/analytics/command_center.html:201 #: templates/appreciation/appreciation_list.html:184 -#: templates/complaints/complaint_list.html:227 +#: templates/complaints/complaint_list.html:230 #: templates/complaints/inquiry_list.html:212 #: templates/observations/observation_list.html:221 +#: templates/standards/search.html:41 msgid "All Categories" msgstr "جميع الفئات" #: templates/analytics/command_center.html:202 #: templates/callcenter/complaint_list.html:5 #: templates/complaints/analytics.html:221 -#: templates/layouts/partials/sidebar.html:31 -#: templates/layouts/partials/sidebar.html:214 +#: templates/layouts/partials/sidebar.html:32 +#: templates/layouts/partials/sidebar.html:215 msgid "Complaints" msgstr "الشكاوى" #: templates/analytics/command_center.html:203 #: templates/analytics/command_center.html:522 #: templates/dashboard/command_center.html:148 -#: templates/layouts/partials/sidebar.html:151 +#: templates/layouts/partials/sidebar.html:152 #: templates/physicians/department_overview.html:98 #: templates/physicians/department_overview.html:121 #: templates/physicians/leaderboard.html:139 @@ -1559,7 +2015,7 @@ msgid "Surveys" msgstr "الاستبيانات" #: templates/analytics/command_center.html:205 -#: templates/layouts/partials/sidebar.html:160 +#: templates/layouts/partials/sidebar.html:161 #: templates/organizations/physician_list.html:8 #: templates/physicians/department_overview.html:5 #: templates/physicians/department_overview.html:14 @@ -1583,7 +2039,7 @@ msgstr "إعادة تعيين" #: templates/analytics/dashboard.html:34 #: templates/callcenter/complaint_list.html:52 #: templates/complaints/analytics.html:33 -#: templates/complaints/complaint_list.html:107 +#: templates/complaints/complaint_list.html:110 msgid "Total Complaints" msgstr "إجمالي الشكاوى" @@ -1596,27 +2052,37 @@ msgstr "مقارنةً بالفترة السابقة" msgid "Open Complaints" msgstr "الشكاوى المفتوحة" +#: templates/analytics/command_center.html:296 msgid "Resolved Complaints" msgstr "الشكاوى المغلقة" +#: templates/analytics/command_center.html:315 +#: templates/analytics/dashboard.html:52 msgid "Total Actions" msgstr "إجمالي الإجراءات" +#: templates/analytics/command_center.html:370 msgid "Negative Surveys" msgstr "الاستبيانات السلبية" +#: templates/analytics/command_center.html:389 +#: templates/complaints/analytics.html:79 msgid "Complaints Trend" msgstr "اتجاه الشكاوى" +#: templates/analytics/command_center.html:405 msgid "Complaints by Category" msgstr "الشكاوى حسب الفئة" +#: templates/analytics/command_center.html:420 msgid "Survey Satisfaction Trend" msgstr "اتجاه رضا الاستبيانات" +#: templates/analytics/command_center.html:432 msgid "Survey Distribution" msgstr "توزيع الاستبيانات" +#: templates/analytics/command_center.html:447 msgid "Department Performance" msgstr "أداء الأقسام" @@ -1631,10 +2097,11 @@ msgstr "لوحة صدارة الأطباء" #: templates/callcenter/complaint_list.html:155 #: templates/callcenter/inquiry_form.html:121 #: templates/complaints/analytics.html:180 -#: templates/complaints/complaint_detail.html:141 +#: templates/complaints/complaint_detail.html:142 #: templates/complaints/complaint_form.html:58 -#: templates/complaints/complaint_form.html:187 -#: templates/complaints/complaint_list.html:337 +#: templates/complaints/complaint_form.html:140 +#: templates/complaints/complaint_form.html:228 +#: templates/complaints/complaint_list.html:339 #: templates/complaints/inquiry_detail.html:132 #: templates/complaints/inquiry_detail.html:478 #: templates/complaints/inquiry_form.html:84 @@ -1660,8 +2127,6 @@ msgstr "الترتيب" #: templates/analytics/command_center.html:518 #: templates/appreciation/appreciation_send_form.html:38 #: templates/callcenter/complaint_form.html:152 -#: templates/complaints/complaint_detail.html:250 -#: templates/complaints/complaint_form.html:100 #: templates/dashboard/command_center.html:144 #: templates/feedback/feedback_form.html:266 #: templates/physicians/department_overview.html:118 @@ -1696,22 +2161,6 @@ msgstr "التخصص" msgid "Rating" msgstr "التقييم" -#: templates/analytics/kpi_list.html:25 -#: templates/complaints/inquiry_detail.html:502 -#: templates/config/routing_rules.html:29 templates/config/sla_config.html:28 -#: templates/journeys/template_list.html:25 -#: templates/observations/observation_detail.html:261 -#: templates/observations/public_new.html:356 -#: templates/organizations/department_list.html:15 -#: templates/organizations/hospital_list.html:15 -#: templates/organizations/patient_list.html:15 -#: templates/organizations/physician_list.html:15 -#: templates/projects/project_list.html:42 -#: templates/surveys/instance_detail.html:106 -#: templates/surveys/template_list.html:25 -msgid "Name" -msgstr "الاسم" - #: templates/analytics/kpi_list.html:27 msgid "Unit" msgstr "الوحدة" @@ -1738,7 +2187,7 @@ msgstr "تفاصيل التقدير" #: templates/appreciation/category_list.html:11 #: templates/appreciation/leaderboard.html:11 #: templates/appreciation/my_badges.html:11 -#: templates/layouts/partials/sidebar.html:81 +#: templates/layouts/partials/sidebar.html:82 msgid "Appreciation" msgstr "التقدير" @@ -1792,7 +2241,7 @@ msgstr "المعرف:" #: templates/appreciation/leaderboard.html:25 #: templates/appreciation/leaderboard.html:207 #: templates/appreciation/my_badges.html:25 -#: templates/layouts/partials/sidebar.html:97 +#: templates/layouts/partials/sidebar.html:98 msgid "Send Appreciation" msgstr "إرسال تقدير" @@ -1807,7 +2256,7 @@ msgstr "عرض قائمة التصنيفات" #: templates/appreciation/my_badges.html:4 #: templates/appreciation/my_badges.html:12 #: templates/appreciation/my_badges.html:20 -#: templates/layouts/partials/sidebar.html:111 +#: templates/layouts/partials/sidebar.html:112 msgid "My Badges" msgstr "شاراتي" @@ -1836,7 +2285,7 @@ msgstr "الشارات المكتسبة" #: templates/appreciation/appreciation_list.html:88 #: templates/appreciation/appreciation_list.html:111 #: templates/appreciation/leaderboard.html:12 -#: templates/layouts/partials/sidebar.html:104 +#: templates/layouts/partials/sidebar.html:105 #: templates/physicians/physician_list.html:27 msgid "Leaderboard" msgstr "قائمة التصنيفات" @@ -1871,6 +2320,7 @@ msgid "Search messages..." msgstr "البحث في الرسائل..." #: templates/appreciation/appreciation_list.html:205 +#: templates/references/search.html:188 templates/standards/search.html:121 msgid "Clear Filters" msgstr "مسح الفلاتر" @@ -1911,10 +2361,6 @@ msgstr "يرجى اختيار المستشفى أولًا" msgid "Optional: Select if related to a specific department" msgstr "اختياري: اختر إذا كان مرتبطًا بقسم معين" -#: templates/appreciation/appreciation_send_form.html:78 -msgid "Select Category" -msgstr "اختر الفئة" - #: templates/appreciation/appreciation_send_form.html:90 msgid "Message (English)" msgstr "الرسالة (بالإنجليزية)" @@ -2026,6 +2472,7 @@ msgstr "إضافة" #: templates/appreciation/category_list.html:37 #: templates/observations/category_form.html:31 #: templates/observations/category_list.html:36 +#: templates/references/folder_form.html:76 msgid "Name (English)" msgstr "الاسم (بالإنجليزية)" @@ -2034,16 +2481,21 @@ msgstr "الاسم (بالإنجليزية)" #: templates/appreciation/category_list.html:38 #: templates/observations/category_form.html:39 #: templates/observations/category_list.html:37 +#: templates/references/folder_form.html:83 msgid "Name (Arabic)" msgstr "الاسم (بالعربية)" #: templates/appreciation/badge_form.html:64 #: templates/appreciation/category_form.html:64 +#: templates/references/document_form.html:183 +#: templates/references/folder_form.html:90 msgid "Description (English)" msgstr "الوصف (بالإنجليزية)" #: templates/appreciation/badge_form.html:75 #: templates/appreciation/category_form.html:75 +#: templates/references/document_form.html:189 +#: templates/references/folder_form.html:96 msgid "Description (Arabic)" msgstr "الوصف (بالعربية)" @@ -2180,6 +2632,7 @@ msgstr "كلاس أيقونة FontAwesome (مثل: fa-heart، fa-star، fa-thumb #: templates/appreciation/category_form.html:103 #: templates/appreciation/category_list.html:39 +#: templates/references/folder_form.html:129 msgid "Color" msgstr "اللون" @@ -2279,7 +2732,7 @@ msgid "See your earned badges" msgstr "عرض الشارات التي حصلت عليها" #: templates/appreciation/leaderboard.html:231 -#: templates/layouts/partials/sidebar.html:90 +#: templates/layouts/partials/sidebar.html:91 msgid "All Appreciations" msgstr "جميع رسائل التقدير" @@ -2351,8 +2804,8 @@ msgstr "أظهر الابتكار" #: templates/callcenter/complaint_form.html:60 #: templates/callcenter/complaint_form.html:271 #: templates/callcenter/complaint_list.html:40 -#: templates/complaints/complaint_form.html:219 -#: templates/layouts/partials/sidebar.html:200 +#: templates/complaints/complaint_form.html:263 +#: templates/layouts/partials/sidebar.html:201 msgid "Create Complaint" msgstr "إنشاء شكوى" @@ -2362,9 +2815,9 @@ msgstr "إنشاء شكوى" #: templates/callcenter/inquiry_form.html:5 #: templates/callcenter/inquiry_list.html:5 #: templates/callcenter/inquiry_success.html:5 -#: templates/complaints/complaint_form.html:192 +#: templates/complaints/complaint_form.html:233 #: templates/complaints/inquiry_form.html:183 -#: templates/layouts/partials/sidebar.html:184 +#: templates/layouts/partials/sidebar.html:185 msgid "Call Center" msgstr "مركز الاتصال" @@ -2417,7 +2870,7 @@ msgstr "العلاقة" #: templates/callcenter/complaint_form.html:118 #: templates/callcenter/inquiry_form.html:122 -#: templates/complaints/complaint_form.html:188 +#: templates/complaints/complaint_form.html:229 #: templates/complaints/inquiry_form.html:176 msgid "Family Member" msgstr "أحد أفراد العائلة" @@ -2427,13 +2880,15 @@ msgstr "أحد أفراد العائلة" #: templates/callcenter/inquiry_form.html:123 #: templates/callcenter/inquiry_form.html:169 #: templates/callcenter/inquiry_list.html:118 -#: templates/complaints/complaint_form.html:137 -#: templates/complaints/complaint_form.html:195 -#: templates/complaints/complaint_list.html:234 +#: templates/complaints/complaint_form.html:178 +#: templates/complaints/complaint_form.html:236 +#: templates/complaints/complaint_list.html:237 #: templates/complaints/inquiry_form.html:134 #: templates/complaints/inquiry_form.html:184 #: templates/complaints/inquiry_form.html:199 #: templates/complaints/inquiry_list.html:220 +#: templates/complaints/public_inquiry_form.html:88 +#: templates/core/public_submit.html:979 msgid "Other" msgstr "أخرى" @@ -2446,6 +2901,7 @@ 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 "اختر القسم..." @@ -2455,8 +2911,9 @@ msgid "Select physician..." msgstr "اختر الطبيب..." #: templates/callcenter/complaint_form.html:159 -#: templates/complaints/complaint_detail.html:236 +#: templates/complaints/complaint_detail.html:237 #: templates/complaints/complaint_form.html:66 +#: templates/complaints/complaint_form.html:148 #: templates/dashboard/command_center.html:240 #: templates/feedback/feedback_form.html:276 #: templates/journeys/instance_list.html:206 @@ -2465,30 +2922,37 @@ msgstr "معرّف الزيارة" #: templates/callcenter/complaint_form.html:161 #: templates/complaints/complaint_form.html:68 +#: templates/complaints/complaint_form.html:150 msgid "Optional encounter/visit ID" msgstr "معرّف الزيارة (اختياري)" #: templates/callcenter/complaint_form.html:169 #: templates/callcenter/complaint_success.html:64 -#: templates/complaints/complaint_detail.html:210 -#: templates/complaints/complaint_form.html:111 +#: templates/complaints/complaint_detail.html:211 +#: templates/complaints/complaint_form.html:158 +#: templates/complaints/public_complaint_form.html:191 msgid "Complaint Details" msgstr "تفاصيل الشكوى" #: templates/callcenter/complaint_form.html:175 -#: templates/complaints/complaint_form.html:117 msgid "Brief summary of the complaint" msgstr "ملخص موجز للشكوى" #: templates/callcenter/complaint_form.html:179 -#: templates/complaints/complaint_detail.html:262 -#: templates/complaints/complaint_form.html:121 +#: templates/complaints/complaint_detail.html:380 +#: templates/complaints/complaint_form.html:162 +#: templates/core/public_submit.html:756 #: templates/observations/category_form.html:47 #: templates/observations/convert_to_action.html:46 #: templates/observations/convert_to_action.html:61 #: templates/observations/observation_detail.html:189 #: templates/observations/observation_list.html:308 #: templates/observations/public_new.html:290 +#: templates/references/document_view.html:172 +#: templates/standards/attachment_upload.html:43 +#: templates/standards/attachment_upload.html:108 +#: templates/standards/compliance_form.html:45 +#: templates/standards/standard_detail.html:101 msgid "Description" msgstr "الوصف" @@ -2505,58 +2969,61 @@ msgid "Select category..." msgstr "اختر الفئة..." #: templates/callcenter/complaint_form.html:189 -#: templates/complaints/complaint_form.html:131 -#: templates/complaints/complaint_list.html:228 +#: templates/complaints/complaint_form.html:172 +#: templates/complaints/complaint_list.html:231 msgid "Clinical Care" msgstr "الرعاية السريرية" #: templates/callcenter/complaint_form.html:190 -#: templates/complaints/complaint_form.html:132 -#: templates/complaints/complaint_list.html:229 +#: templates/complaints/complaint_form.html:173 +#: templates/complaints/complaint_list.html:232 msgid "Staff Behavior" msgstr "سلوك الموظفين" #: templates/callcenter/complaint_form.html:191 -#: templates/complaints/complaint_form.html:133 -#: templates/complaints/complaint_list.html:230 +#: templates/complaints/complaint_form.html:174 +#: templates/complaints/complaint_list.html:233 msgid "Facility & Environment" msgstr "المرافق والبيئة" #: templates/callcenter/complaint_form.html:192 -#: templates/complaints/complaint_form.html:134 -#: templates/complaints/complaint_list.html:231 +#: templates/complaints/complaint_form.html:175 +#: templates/complaints/complaint_list.html:234 msgid "Wait Time" msgstr "مدة الانتظار" #: templates/callcenter/complaint_form.html:193 #: templates/callcenter/inquiry_form.html:166 #: templates/callcenter/inquiry_list.html:115 -#: templates/complaints/complaint_form.html:135 -#: templates/complaints/complaint_list.html:232 +#: templates/complaints/complaint_form.html:176 +#: templates/complaints/complaint_list.html:235 #: templates/complaints/inquiry_form.html:128 #: templates/complaints/inquiry_list.html:214 +#: templates/core/public_submit.html:977 msgid "Billing" msgstr "الفوترة" #: templates/callcenter/complaint_form.html:194 -#: templates/complaints/complaint_form.html:136 -#: templates/complaints/complaint_list.html:233 +#: templates/complaints/complaint_form.html:177 +#: templates/complaints/complaint_list.html:236 msgid "Communication" msgstr "التواصل" #: templates/callcenter/complaint_form.html:200 -#: templates/complaints/complaint_form.html:142 +#: templates/complaints/complaint_form.html:124 +#: templates/complaints/complaint_form.html:183 +#: templates/complaints/public_complaint_form.html:229 #: templates/feedback/feedback_form.html:199 msgid "Subcategory" msgstr "الفئة الفرعية" #: templates/callcenter/complaint_form.html:202 -#: templates/complaints/complaint_form.html:144 +#: templates/complaints/complaint_form.html:185 msgid "Optional subcategory" msgstr "فئة فرعية اختيارية" #: templates/callcenter/complaint_form.html:213 -#: templates/complaints/complaint_form.html:155 +#: templates/complaints/complaint_form.html:196 #: templates/complaints/inquiry_form.html:157 msgid "Classification" msgstr "التصنيف" @@ -2568,13 +3035,14 @@ msgstr "اختر درجة الخطورة..." #: templates/callcenter/complaint_form.html:220 #: templates/callcenter/complaint_form.html:234 #: templates/callcenter/complaint_list.html:121 -#: templates/complaints/complaint_form.html:162 -#: templates/complaints/complaint_form.html:176 -#: templates/complaints/complaint_form.html:212 -#: templates/complaints/complaint_list.html:204 -#: templates/complaints/complaint_list.html:216 +#: templates/complaints/complaint_form.html:203 +#: templates/complaints/complaint_form.html:217 +#: templates/complaints/complaint_form.html:256 +#: templates/complaints/complaint_list.html:207 +#: templates/complaints/complaint_list.html:219 #: templates/complaints/inquiry_form.html:164 #: templates/complaints/inquiry_list.html:201 +#: templates/core/public_submit.html:733 #: templates/observations/observation_list.html:210 #: templates/observations/public_new.html:250 msgid "Low" @@ -2583,13 +3051,14 @@ msgstr "منخفض" #: templates/callcenter/complaint_form.html:221 #: templates/callcenter/complaint_form.html:235 #: templates/callcenter/complaint_list.html:120 -#: templates/complaints/complaint_form.html:163 -#: templates/complaints/complaint_form.html:177 -#: templates/complaints/complaint_form.html:211 -#: templates/complaints/complaint_list.html:205 -#: templates/complaints/complaint_list.html:217 +#: templates/complaints/complaint_form.html:204 +#: templates/complaints/complaint_form.html:218 +#: templates/complaints/complaint_form.html:255 +#: templates/complaints/complaint_list.html:208 +#: templates/complaints/complaint_list.html:220 #: templates/complaints/inquiry_form.html:165 #: templates/complaints/inquiry_list.html:202 +#: templates/core/public_submit.html:736 #: templates/observations/observation_list.html:211 #: templates/observations/public_new.html:256 msgid "Medium" @@ -2598,13 +3067,14 @@ msgstr "متوسط" #: templates/callcenter/complaint_form.html:222 #: templates/callcenter/complaint_form.html:236 #: templates/callcenter/complaint_list.html:119 -#: templates/complaints/complaint_form.html:164 -#: templates/complaints/complaint_form.html:178 -#: templates/complaints/complaint_form.html:210 -#: templates/complaints/complaint_list.html:206 -#: templates/complaints/complaint_list.html:218 +#: templates/complaints/complaint_form.html:205 +#: templates/complaints/complaint_form.html:219 +#: templates/complaints/complaint_form.html:254 +#: templates/complaints/complaint_list.html:209 +#: templates/complaints/complaint_list.html:221 #: templates/complaints/inquiry_form.html:166 #: templates/complaints/inquiry_list.html:203 +#: templates/core/public_submit.html:739 #: templates/observations/observation_list.html:212 #: templates/observations/public_new.html:262 msgid "High" @@ -2612,16 +3082,17 @@ msgstr "مرتفع" #: templates/callcenter/complaint_form.html:223 #: templates/callcenter/complaint_list.html:118 -#: templates/complaints/complaint_form.html:165 -#: templates/complaints/complaint_form.html:209 -#: templates/complaints/complaint_list.html:207 +#: templates/complaints/complaint_form.html:206 +#: templates/complaints/complaint_form.html:253 +#: templates/complaints/complaint_list.html:210 +#: templates/core/public_submit.html:742 #: templates/observations/observation_list.html:213 #: templates/observations/public_new.html:268 msgid "Critical" msgstr "حرج" #: templates/callcenter/complaint_form.html:226 -#: templates/complaints/complaint_form.html:168 +#: templates/complaints/complaint_form.html:209 msgid "Determines SLA deadline" msgstr "يحدد الموعد النهائي لاتفاقية مستوى الخدمة (SLA)" @@ -2630,8 +3101,8 @@ msgid "Select priority..." msgstr "اختر الأولوية..." #: templates/callcenter/complaint_form.html:237 -#: templates/complaints/complaint_form.html:179 -#: templates/complaints/complaint_list.html:219 +#: templates/complaints/complaint_form.html:220 +#: templates/complaints/complaint_list.html:222 #: templates/complaints/inquiry_form.html:167 #: templates/complaints/inquiry_list.html:204 msgid "Urgent" @@ -2737,7 +3208,7 @@ msgstr "بحث..." #: templates/callcenter/inquiry_list.html:102 #: templates/callcenter/inquiry_list.html:113 #: templates/callcenter/inquiry_list.html:125 -#: templates/complaints/complaint_list.html:281 +#: templates/complaints/complaint_list.html:284 #: templates/observations/observation_list.html:260 msgid "All" msgstr "الكل" @@ -2760,7 +3231,7 @@ msgstr "تصفية" #: templates/callcenter/complaint_list.html:178 #: templates/callcenter/complaint_success.html:83 -#: templates/complaints/complaint_detail.html:241 +#: templates/complaints/complaint_detail.html:242 #: templates/complaints/inquiry_detail.html:217 #: templates/complaints/inquiry_detail.html:230 #: templates/complaints/inquiry_detail.html:537 @@ -2768,7 +3239,7 @@ msgid "N/A" msgstr "غير متاح" #: templates/callcenter/complaint_list.html:211 -#: templates/complaints/complaint_list.html:415 +#: templates/complaints/complaint_list.html:417 msgid "No complaints found" msgstr "لم يتم العثور على شكاوى" @@ -2817,6 +3288,8 @@ msgstr "الموعد النهائي لاتفاقية SLA:" #: templates/callcenter/complaint_success.html:125 #: templates/callcenter/inquiry_success.html:133 +#: templates/references/document_form.html:285 +#: templates/references/folder_form.html:208 msgid "Created:" msgstr "تاريخ الإنشاء:" @@ -2860,7 +3333,7 @@ msgstr "عرض جميع الشكاوى" #: templates/callcenter/inquiry_form.html:230 #: templates/callcenter/inquiry_list.html:36 #: templates/complaints/inquiry_form.html:234 -#: templates/layouts/partials/sidebar.html:207 +#: templates/layouts/partials/sidebar.html:208 msgid "Create Inquiry" msgstr "إنشاء استفسار" @@ -2897,6 +3370,8 @@ msgstr "عنوان البريد الإلكتروني" #: templates/callcenter/inquiry_success.html:60 #: templates/complaints/inquiry_detail.html:202 #: templates/complaints/inquiry_form.html:120 +#: templates/complaints/public_inquiry_form.html:6 +#: templates/core/public_submit.html:936 msgid "Inquiry Details" msgstr "تفاصيل الاستفسار" @@ -2904,6 +3379,7 @@ msgstr "تفاصيل الاستفسار" #: templates/callcenter/inquiry_list.html:114 #: templates/complaints/inquiry_form.html:127 #: templates/complaints/inquiry_list.html:213 +#: templates/core/public_submit.html:976 msgid "Appointment" msgstr "موعد" @@ -2911,34 +3387,22 @@ msgstr "موعد" #: templates/callcenter/inquiry_list.html:116 #: templates/complaints/inquiry_form.html:129 #: templates/complaints/inquiry_list.html:215 +#: templates/complaints/public_inquiry_form.html:87 +#: templates/core/public_submit.html:978 msgid "Medical Records" msgstr "السجلات الطبية" #: templates/callcenter/inquiry_form.html:168 #: templates/complaints/inquiry_form.html:133 +#: templates/core/public_submit.html:975 msgid "General Information" msgstr "معلومات عامة" -#: 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 -msgid "Subject" -msgstr "الموضوع" - #: templates/callcenter/inquiry_form.html:176 #: templates/complaints/inquiry_form.html:141 msgid "Brief summary of the inquiry" msgstr "ملخص موجز للاستفسار" -#: templates/callcenter/inquiry_form.html:180 -#: templates/complaints/inquiry_detail.html:249 -#: templates/complaints/inquiry_form.html:145 -#: templates/feedback/feedback_form.html:181 -msgid "Message" -msgstr "الرسالة" - #: templates/callcenter/inquiry_form.html:182 msgid "" "Detailed description of the inquiry. Include all relevant information " @@ -3012,8 +3476,8 @@ msgid "No patients found. Please enter contact details manually." msgstr "لم يتم العثور على أي مرضى. يرجى إدخال بيانات الاتصال يدويًا." #: templates/callcenter/inquiry_list.html:5 -#: templates/layouts/partials/sidebar.html:48 -#: templates/layouts/partials/sidebar.html:221 +#: templates/layouts/partials/sidebar.html:49 +#: templates/layouts/partials/sidebar.html:222 msgid "Inquiries" msgstr "الاستفسارات" @@ -3175,13 +3639,13 @@ msgstr "قيد الانتظار" msgid "Avg Resolution Time" msgstr "متوسط وقت الحل" -#: templates/complaints/complaint_detail.html:119 +#: templates/complaints/complaint_detail.html:120 #: templates/complaints/complaint_form.html:36 msgid "Back to Complaints" msgstr "الرجوع إلى الشكاوى" -#: templates/complaints/complaint_detail.html:141 -#: templates/complaints/complaint_list.html:361 +#: templates/complaints/complaint_detail.html:142 +#: templates/complaints/complaint_list.html:363 #: templates/complaints/inquiry_detail.html:132 #: templates/complaints/inquiry_detail.html:482 #: templates/complaints/inquiry_form.html:302 @@ -3192,103 +3656,126 @@ msgstr "الرجوع إلى الشكاوى" msgid "MRN" msgstr "الرقم الطبي (MRN)" -#: templates/complaints/complaint_detail.html:157 +#: templates/complaints/complaint_detail.html:158 msgid "SLA Deadline" msgstr "الموعد النهائي لاتفاقية مستوى الخدمة (SLA)" -#: templates/complaints/complaint_detail.html:163 -#: templates/complaints/complaint_list.html:367 +#: templates/complaints/complaint_detail.html:164 +#: 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:166 +#: templates/complaints/complaint_detail.html:167 #: templates/complaints/inquiry_detail.html:163 msgid "remaining" msgstr "متبقية" -#: templates/complaints/complaint_detail.html:187 +#: templates/complaints/complaint_detail.html:188 #: templates/complaints/inquiry_detail.html:185 #: templates/observations/observation_detail.html:311 msgid "Timeline" msgstr "الجدول الزمني" -#: templates/complaints/complaint_detail.html:193 -#: templates/complaints/complaint_detail.html:356 +#: templates/complaints/complaint_detail.html:194 +#: templates/complaints/complaint_detail.html:550 #: templates/complaints/inquiry_detail.html:191 #: templates/complaints/inquiry_detail.html:343 +#: templates/core/public_submit.html:776 #: templates/observations/observation_detail.html:289 #: templates/observations/public_new.html:326 msgid "Attachments" msgstr "المرفقات" -#: templates/complaints/complaint_detail.html:199 -#: templates/layouts/partials/sidebar.html:132 +#: templates/complaints/complaint_detail.html:200 +#: templates/layouts/partials/sidebar.html:133 msgid "PX Actions" msgstr "إجراءات تجربة المريض" -#: templates/complaints/complaint_detail.html:271 +#: templates/complaints/complaint_detail.html:276 +msgid "Staff Member" +msgstr "موظف" + +#: templates/complaints/complaint_detail.html:465 msgid "Resolution" msgstr "الحل" -#: templates/complaints/complaint_detail.html:276 +#: templates/complaints/complaint_detail.html:470 msgid "Resolved by" msgstr "تم الحل بواسطة" -#: templates/complaints/complaint_detail.html:277 +#: templates/complaints/complaint_detail.html:471 #: templates/complaints/inquiry_detail.html:264 msgid "on" msgstr "في" -#: templates/complaints/complaint_detail.html:292 +#: templates/complaints/complaint_detail.html:486 #: templates/complaints/inquiry_detail.html:279 #: templates/observations/observation_detail.html:223 #: templates/observations/public_track.html:287 +#: templates/standards/dashboard.html:131 msgid "Last Updated" msgstr "آخر تحديث" -#: templates/complaints/complaint_detail.html:304 +#: templates/complaints/complaint_detail.html:498 #: templates/complaints/inquiry_detail.html:291 msgid "Activity Timeline" msgstr "الجدول الزمني للنشاط" -#: templates/complaints/complaint_detail.html:345 +#: templates/complaints/complaint_detail.html:539 #: templates/complaints/inquiry_detail.html:332 #: templates/observations/observation_detail.html:348 msgid "No timeline entries yet" msgstr "لا توجد إدخالات في الجدول الزمني بعد" -#: templates/complaints/complaint_detail.html:388 +#: templates/complaints/complaint_detail.html:582 #: templates/complaints/inquiry_detail.html:375 +#: templates/standards/compliance_form.html:157 msgid "No attachments" msgstr "لا توجد مرفقات" -#: templates/complaints/complaint_detail.html:399 +#: templates/complaints/complaint_detail.html:593 msgid "Related PX Actions" msgstr "إجراءات PX المرتبطة" -#: templates/complaints/complaint_detail.html:425 +#: templates/complaints/complaint_detail.html:619 msgid "No PX actions created yet" msgstr "لم يتم إنشاء أي إجراء PX بعد" -#: templates/complaints/complaint_detail.html:449 +#: templates/complaints/complaint_detail.html:640 +msgid "Change Staff" +msgstr "تغيير الموظف" + +#: templates/complaints/complaint_detail.html:642 +msgid "Assign/Change Staff" +msgstr "تعيين/تغيير الموظف" + +#: templates/complaints/complaint_detail.html:658 +msgid "Change Department" +msgstr "تغيير القسم" + +#: templates/complaints/complaint_detail.html:683 #: templates/complaints/inquiry_detail.html:399 msgid "Select user..." -msgstr "اختر المستخدم..." +msgstr "اختر مستخدم..." -#: templates/complaints/complaint_detail.html:477 +#: templates/complaints/complaint_detail.html:711 #: templates/complaints/inquiry_detail.html:427 msgid "Update Status" msgstr "تحديث الحالة" -#: templates/complaints/complaint_detail.html:484 -#: templates/complaints/complaint_detail.html:609 +#: templates/complaints/complaint_detail.html:718 +msgid "Send Notification" +msgstr "إرسال إشعار" + +#: templates/complaints/complaint_detail.html:724 +#: templates/complaints/complaint_detail.html:849 msgid "Escalate" msgstr "تصعيد" -#: templates/complaints/complaint_detail.html:523 -#: templates/complaints/complaint_list.html:391 +#: 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 @@ -3296,32 +3783,32 @@ msgstr "تصعيد" msgid "Unassigned" msgstr "غير معين" -#: templates/complaints/complaint_detail.html:530 +#: templates/complaints/complaint_detail.html:770 #: templates/complaints/inquiry_detail.html:560 msgid "Resolved By" msgstr "تم الحل بواسطة" -#: templates/complaints/complaint_detail.html:543 +#: templates/complaints/complaint_detail.html:783 msgid "Closed By" msgstr "تم الإغلاق بواسطة" -#: templates/complaints/complaint_detail.html:560 +#: templates/complaints/complaint_detail.html:800 msgid "Resolution Survey" msgstr "استبيان الحل" -#: templates/complaints/complaint_detail.html:576 +#: templates/complaints/complaint_detail.html:816 msgid "View Survey" msgstr "عرض الاستبيان" -#: templates/complaints/complaint_detail.html:592 +#: templates/complaints/complaint_detail.html:832 msgid "Escalate Complaint" msgstr "تصعيد الشكوى" -#: templates/complaints/complaint_detail.html:598 -msgid "This will escalate the complaint to higher management" -msgstr "سيؤدي ذلك إلى تصعيد الشكوى إلى الإدارة العليا" +#: templates/complaints/complaint_detail.html:838 +msgid "This will escalate" +msgstr "سيتم التصعيد" -#: templates/complaints/complaint_detail.html:603 +#: templates/complaints/complaint_detail.html:843 msgid "Explain why this complaint needs escalation..." msgstr "اشرح سبب حاجة هذه الشكوى إلى التصعيد..." @@ -3364,75 +3851,76 @@ msgstr "اختر المستشفى" msgid "Select department" msgstr "اختر القسم" -#: templates/complaints/complaint_form.html:102 -msgid "Select physician" -msgstr "اختر الطبيب" - -#: templates/complaints/complaint_form.html:123 -msgid "Detailed description of the complaint..." -msgstr "وصف مفصل للشكوى..." - -#: templates/complaints/complaint_form.html:130 -#: templates/complaints/inquiry_form.html:126 -msgid "Select category" -msgstr "اختر الفئة" - -#: templates/complaints/complaint_form.html:161 -msgid "Select severity" -msgstr "اختر شدة الشكوى" - -#: templates/complaints/complaint_form.html:175 -#: templates/complaints/inquiry_form.html:163 -msgid "Select priority" -msgstr "اختر الأولوية" - -#: templates/complaints/complaint_form.html:186 -#: templates/complaints/inquiry_form.html:174 -msgid "Select source" -msgstr "اختر المصدر" - -#: templates/complaints/complaint_form.html:189 +#: 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:190 +#: templates/complaints/complaint_form.html:102 +msgid "Select staff" +msgstr "اختر الموظف" + +#: templates/complaints/complaint_form.html:164 +msgid "Detailed description of the complaint..." +msgstr "وصف مفصل للشكوى..." + +#: templates/complaints/complaint_form.html:171 +#: templates/complaints/inquiry_form.html:126 +msgid "Select category" +msgstr "اختر الفئة" + +#: templates/complaints/complaint_form.html:202 +msgid "Select severity" +msgstr "اختر شدة الشكوى" + +#: templates/complaints/complaint_form.html:216 +#: templates/complaints/inquiry_form.html:163 +msgid "Select priority" +msgstr "اختر الأولوية" + +#: templates/complaints/complaint_form.html:227 +#: templates/complaints/inquiry_form.html:174 +msgid "Select source" +msgstr "اختر المصدر" + +#: templates/complaints/complaint_form.html:231 msgid "Survey" msgstr "الاستبيان" -#: templates/complaints/complaint_form.html:191 +#: templates/complaints/complaint_form.html:232 #: templates/complaints/inquiry_form.html:182 #: templates/complaints/inquiry_form.html:197 -#: templates/layouts/partials/sidebar.html:233 +#: templates/layouts/partials/sidebar.html:234 msgid "Social Media" msgstr "وسائل التواصل الاجتماعي" -#: templates/complaints/complaint_form.html:193 +#: templates/complaints/complaint_form.html:234 msgid "Ministry of Health" msgstr "وزارة الصحة" -#: templates/complaints/complaint_form.html:194 +#: templates/complaints/complaint_form.html:235 msgid "Council of Health Insurance" msgstr "مجلس الضمان الصحي" -#: templates/complaints/complaint_form.html:206 +#: templates/complaints/complaint_form.html:250 msgid "SLA deadline will be automatically calculated based on severity" msgstr "" "سيتم حساب الموعد النهائي لاتفاقية مستوى الخدمة تلقائيًا بناءً على شدة الشكوى" -#: templates/complaints/complaint_form.html:209 +#: templates/complaints/complaint_form.html:253 msgid "4 hours" msgstr "٤ ساعات" -#: templates/complaints/complaint_form.html:210 +#: templates/complaints/complaint_form.html:254 msgid "24 hours" msgstr "٢٤ ساعة" -#: templates/complaints/complaint_form.html:211 +#: templates/complaints/complaint_form.html:255 msgid "72 hours" msgstr "٧٢ ساعة" -#: templates/complaints/complaint_form.html:212 +#: templates/complaints/complaint_form.html:256 msgid "168 hours (7 days)" msgstr "١٦٨ ساعة (٧ أيام)" @@ -3445,42 +3933,46 @@ msgstr "لوحة شكاوى المرضى" msgid "Manage and track patient complaints with SLA monitoring" msgstr "إدارة وتتبع شكاوى المرضى مع مراقبة اتفاقية مستوى الخدمة (SLA)" -#: templates/complaints/complaint_list.html:182 +#: templates/complaints/complaint_list.html:98 +msgid "Public Complaint Form" +msgstr "نموذج الشكوى العامة" + +#: templates/complaints/complaint_list.html:185 msgid "Title, MRN, Patient name..." msgstr "العنوان، رقم الملف الطبي، اسم المريض..." -#: templates/complaints/complaint_list.html:190 +#: templates/complaints/complaint_list.html:193 #: templates/complaints/inquiry_list.html:187 #: templates/observations/observation_list.html:196 msgid "All Statuses" msgstr "جميع الحالات" -#: templates/complaints/complaint_list.html:203 +#: templates/complaints/complaint_list.html:206 #: templates/observations/observation_list.html:209 msgid "All Severities" msgstr "جميع درجات الخطورة" -#: templates/complaints/complaint_list.html:215 +#: templates/complaints/complaint_list.html:218 #: templates/complaints/inquiry_list.html:200 msgid "All Priorities" msgstr "جميع الأولويات" -#: templates/complaints/complaint_list.html:268 +#: templates/complaints/complaint_list.html:271 #: templates/complaints/inquiry_list.html:241 #: templates/observations/observation_list.html:247 msgid "All Users" msgstr "جميع المستخدمين" -#: templates/complaints/complaint_list.html:279 +#: templates/complaints/complaint_list.html:282 msgid "SLA Status" msgstr "حالة اتفاقية مستوى الخدمة (SLA)" -#: templates/complaints/complaint_list.html:318 +#: templates/complaints/complaint_list.html:321 #: templates/complaints/inquiry_list.html:282 msgid "Export CSV" msgstr "تصدير CSV" -#: templates/complaints/complaint_list.html:321 +#: templates/complaints/complaint_list.html:324 #: templates/complaints/inquiry_list.html:285 msgid "Export Excel" msgstr "تصدير Excel" @@ -3518,6 +4010,7 @@ msgstr "إرسال الرد" #: templates/complaints/inquiry_detail.html:473 #: templates/complaints/inquiry_form.html:79 +#: templates/complaints/public_complaint_form.html:134 msgid "Contact Information" msgstr "معلومات الاتصال" @@ -3525,6 +4018,7 @@ msgstr "معلومات الاتصال" #: templates/complaints/inquiry_detail.html:509 #: templates/complaints/inquiry_form.html:178 #: templates/complaints/inquiry_form.html:193 +#: templates/core/public_submit.html:808 #: templates/feedback/feedback_form.html:144 #: templates/observations/observation_detail.html:269 #: templates/observations/public_new.html:360 @@ -3558,6 +4052,8 @@ msgid "Create a new patient inquiry or request" msgstr "إنشاء استفسار أو طلب جديد للمريض" #: templates/complaints/inquiry_form.html:84 +#: templates/core/public_submit.html:795 templates/core/public_submit.html:801 +#: templates/core/public_submit.html:809 templates/core/public_submit.html:815 msgid "Optional" msgstr "اختياري" @@ -3588,7 +4084,7 @@ msgstr "التأمين" #: templates/feedback/feedback_delete_confirm.html:61 #: templates/feedback/feedback_detail.html:154 #: templates/feedback/feedback_form.html:65 -#: templates/layouts/partials/sidebar.html:67 +#: templates/layouts/partials/sidebar.html:68 msgid "Feedback" msgstr "ملاحظات" @@ -3633,6 +4129,7 @@ msgid "Leave empty for default based on priority" msgstr "اتركه فارغًا للاعتماد على الإعداد الافتراضي حسب الأولوية" #: templates/complaints/inquiry_form.html:217 +#: templates/standards/standard_form.html:146 msgid "Help" msgstr "مساعدة" @@ -3673,6 +4170,232 @@ msgstr "إدارة استفسارات وطلبات المرضى" msgid "Subject, contact name..." msgstr "الموضوع، اسم جهة الاتصال..." +#: templates/complaints/public_complaint_form.html:4 +msgid "Submit a Complaint" +msgstr "تقديم شكوى" + +#: templates/complaints/public_complaint_form.html:122 +msgid "About This Form" +msgstr "حول هذا النموذج" + +#: templates/complaints/public_complaint_form.html:125 +msgid "" +"Use this form to submit a complaint about your experience at one of our " +"hospitals. We will review your complaint and get back to you as soon as " +"possible." +msgstr "" +"استخدم هذا النموذج لتقديم شكوى حول تجربتك في أحد مستشفياتنا. سنراجع الشكوى " +"ونتواصل معك في أقرب وقت." + +#: templates/complaints/public_complaint_form.html:148 +msgid "Please provide your full name." +msgstr "يرجى إدخال اسمك الكامل." + +#: templates/complaints/public_complaint_form.html:165 +msgid "We will use this to contact you about your complaint." +msgstr "سنستخدم هذه المعلومات للتواصل معك بخصوص الشكوى." + +#: templates/complaints/public_complaint_form.html:182 +msgid "We may contact you by phone if needed." +msgstr "قد نتواصل معك هاتفيًا عند الحاجة." + +#: templates/complaints/public_complaint_form.html:219 +msgid "Select the category that best describes your complaint." +msgstr "اختر الفئة الأنسب لوصف شكواك." + +#: templates/complaints/public_complaint_form.html:222 +msgid "About this category:" +msgstr "حول هذه الفئة:" + +#: templates/complaints/public_complaint_form.html:235 +msgid "Select Subcategory" +msgstr "اختر فئة فرعية" + +#: templates/complaints/public_complaint_form.html:238 +msgid "Select the specific subcategory within the chosen category." +msgstr "اختر الفئة الفرعية المناسبة ضمن الفئة المختارة." + +#: templates/complaints/public_complaint_form.html:241 +msgid "About this subcategory:" +msgstr "حول هذه الفئة الفرعية:" + +#: templates/complaints/public_complaint_form.html:254 +msgid "" +"Please describe your complaint in detail. Include dates, names of staff " +"involved, and any other relevant information." +msgstr "" +"يرجى وصف شكواك بالتفصيل، مع ذكر التواريخ وأسماء الموظفين وأي معلومات ذات صلة." + +#: templates/complaints/public_complaint_form.html:264 +msgid "Response Time:" +msgstr "وقت الاستجابة:" + +#: templates/complaints/public_complaint_form.html:265 +msgid "" +"We typically respond to complaints within 24-48 hours depending on severity." +msgstr "نستجيب عادةً خلال 24–48 ساعة حسب درجة الخطورة." + +#: templates/complaints/public_complaint_form.html:271 +msgid "Submit Complaint" +msgstr "إرسال الشكوى" + +#: templates/complaints/public_complaint_form.html:284 +#: templates/complaints/public_complaint_success.html:140 +msgid "Complaint Submitted Successfully!" +msgstr "تم إرسال الشكوى بنجاح!" + +#: templates/complaints/public_complaint_form.html:286 +msgid "Your complaint has been received and is being reviewed." +msgstr "تم استلام شكواك وجارٍ مراجعتها." + +#: templates/complaints/public_complaint_form.html:289 +#: templates/core/public_submit.html:599 +msgid "Reference Number:" +msgstr "رقم المرجع:" + +#: templates/complaints/public_complaint_form.html:293 +#: templates/core/public_submit.html:603 +msgid "Please save this reference number for your records." +msgstr "يرجى حفظ رقم المرجع للمتابعة." + +#: templates/complaints/public_complaint_form.html:296 +#: templates/complaints/public_complaint_success.html:181 +msgid "Submit Another Complaint" +msgstr "إرسال شكوى أخرى" + +#: templates/complaints/public_complaint_form.html:479 +#: templates/complaints/public_inquiry_form.html:145 +#: templates/core/public_submit.html:872 templates/core/public_submit.html:1179 +#: templates/core/public_submit.html:1238 +msgid "Submitting..." +msgstr "جارٍ الإرسال..." + +#: templates/complaints/public_complaint_form.html:503 +#: templates/complaints/public_complaint_form.html:517 +#: templates/complaints/public_inquiry_form.html:174 +#: templates/complaints/public_inquiry_form.html:188 +#: templates/core/public_submit.html:670 templates/core/public_submit.html:696 +#: templates/core/public_submit.html:903 templates/core/public_submit.html:915 +#: templates/core/public_submit.html:1206 +#: templates/core/public_submit.html:1220 +#: templates/core/public_submit.html:1265 +#: templates/core/public_submit.html:1277 +msgid "Error" +msgstr "خطأ" + +#: templates/complaints/public_complaint_form.html:504 +#: templates/complaints/public_complaint_form.html:509 +#: templates/core/public_submit.html:1207 +#: templates/core/public_submit.html:1212 +msgid "Failed to submit complaint. Please try again." +msgstr "فشل إرسال الشكوى. يرجى المحاولة مرة أخرى." + +#: templates/complaints/public_complaint_success.html:4 +msgid "Complaint Submitted" +msgstr "تم تقديم الشكوى" + +#: templates/complaints/public_complaint_success.html:144 +msgid "" +"Thank you for your feedback. Your complaint has been received and is being " +"reviewed." +msgstr "شكرًا لملاحظاتك. تم استلام الشكوى وجارٍ مراجعتها." + +#: templates/complaints/public_complaint_success.html:153 +msgid "" +"Please save this reference number for your records. You will need it to " +"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 ساعة." + +#: templates/complaints/public_complaint_success.html:160 +msgid "" +"You will receive updates via phone or email based on the contact information " +"provided" +msgstr "ستصلك تحديثات عبر الهاتف أو البريد الإلكتروني." + +#: templates/complaints/public_complaint_success.html:161 +msgid "Our typical response time is 24-48 hours depending on severity" +msgstr "وقت الاستجابة المعتاد 24–48 ساعة حسب الخطورة." + +#: templates/complaints/public_complaint_success.html:162 +msgid "You can check the status of your complaint using your reference number" +msgstr "يمكنك متابعة حالة الشكوى باستخدام رقم المرجع." + +#: templates/complaints/public_complaint_success.html:167 +msgid "Need Immediate Assistance?" +msgstr "تحتاج مساعدة فورية؟" + +#: templates/complaints/public_complaint_success.html:169 +msgid "" +"If your complaint is urgent, please contact our Patient Relations department " +"directly at:" +msgstr "إذا كانت الشكوى عاجلة، يرجى التواصل مباشرة مع قسم علاقات المرضى على:" + +#: templates/complaints/public_complaint_success.html:175 +msgid "Available Saturday to Thursday, 8:00 AM - 8:00 PM" +msgstr "متاح من السبت إلى الخميس، 8:00 ص – 8:00 م" + +#: templates/complaints/public_complaint_success.html:184 +msgid "Return to Home" +msgstr "العودة للرئيسية" + +#: templates/complaints/public_complaint_success.html:190 +#: templates/core/no_hospital_assigned.html:46 +msgid "Need Help?" +msgstr "تحتاج مساعدة؟" + +#: templates/complaints/public_complaint_success.html:197 +msgid "Website:" +msgstr "الموقع الإلكتروني:" + +#: templates/complaints/public_inquiry_form.html:7 +#: templates/core/public_submit.html:937 +msgid "" +"Ask a question or request information. We'll get back to you within 24-48 " +"hours." +msgstr "اطرح سؤالًا أو اطلب معلومات، وسنرد خلال 24–48 ساعة." + +#: templates/complaints/public_inquiry_form.html:83 +msgid "General Inquiry" +msgstr "استفسار عام" + +#: templates/complaints/public_inquiry_form.html:84 +msgid "Services Information" +msgstr "معلومات الخدمات" + +#: templates/complaints/public_inquiry_form.html:85 +msgid "Appointments" +msgstr "المواعيد" + +#: templates/complaints/public_inquiry_form.html:86 +msgid "Billing & Insurance" +msgstr "الفوترة والتأمين" + +#: templates/complaints/public_inquiry_form.html:101 +msgid "Brief summary of your inquiry" +msgstr "ملخص مختصر للاستفسار" + +#: templates/complaints/public_inquiry_form.html:113 +msgid "Please provide details about your inquiry" +msgstr "يرجى تزويدنا بتفاصيل الاستفسار" + +#: templates/complaints/public_inquiry_form.html:120 +#: templates/core/public_submit.html:995 +msgid "Submit Inquiry" +msgstr "إرسال الاستفسار" + +#: templates/complaints/public_inquiry_form.html:175 +#: templates/complaints/public_inquiry_form.html:180 +msgid "Failed to submit inquiry. Please try again." +msgstr "فشل إرسال الاستفسار. يرجى المحاولة مرة أخرى." + #: templates/config/dashboard.html:24 msgid "SLA Configurations" msgstr "إعدادات SLA" @@ -3710,6 +4433,250 @@ msgstr "منخفض (ساعات)" msgid "Auto Escalate" msgstr "تصعيد تلقائي" +#: templates/core/no_hospital_assigned.html:4 +#: templates/core/no_hospital_assigned.html:17 +msgid "No Hospital Assigned" +msgstr "لا يوجد مستشفى مخصص" + +#: templates/core/no_hospital_assigned.html:21 +msgid "" +"Your account does not have a hospital assigned. Please contact your " +"administrator to assign you to a hospital before accessing the system." +msgstr "" +"حسابك غير مرتبط بأي مستشفى. يرجى التواصل مع المسؤول لتعيين مستشفى قبل " +"استخدام النظام." + +#: templates/core/no_hospital_assigned.html:26 +msgid "Information:" +msgstr "معلومات:" + +#: templates/core/no_hospital_assigned.html:36 +#: templates/layouts/partials/topbar.html:115 +msgid "Logout" +msgstr "تسجيل الخروج" + +#: templates/core/no_hospital_assigned.html:49 +msgid "" +"If you believe this is an error, please contact your PX360 administrator or " +"IT support team for assistance." +msgstr "" +"إذا كنت تعتقد أن هذا خطأ، يرجى التواصل مع مسؤول PX360 أو فريق الدعم الفني." + +#: templates/core/public_submit.html:4 +msgid "Submit Feedback" +msgstr "إرسال ملاحظات" + +#: templates/core/public_submit.html:517 +msgid "We Value Your Feedback" +msgstr "نقدّر ملاحظاتك" + +#: templates/core/public_submit.html:518 +msgid "" +"Your feedback helps us improve our services and provide better care for " +"everyone." +msgstr "ملاحظاتك تساعدنا على تحسين خدماتنا وتقديم رعاية أفضل للجميع." + +#: templates/core/public_submit.html:528 +msgid "Complaint" +msgstr "شكوى" + +#: templates/core/public_submit.html:530 +msgid "" +"Report an issue with our services. We take all concerns seriously and will " +"investigate thoroughly." +msgstr "الإبلاغ عن مشكلة في الخدمات. نأخذ جميع الشكاوى بجدية ونحقق فيها." + +#: templates/core/public_submit.html:539 +msgid "Observation" +msgstr "ملاحظة" + +#: templates/core/public_submit.html:541 +msgid "" +"Help us improve safety and quality by sharing what you've noticed. Submit " +"anonymously." +msgstr "" +"ساعدنا في تحسين السلامة والجودة بمشاركة ملاحظاتك. يمكن الإرسال بشكل مجهول." + +#: templates/core/public_submit.html:550 +msgid "Inquiry" +msgstr "استفسار" + +#: templates/core/public_submit.html:552 +msgid "" +"Have questions? We're here to help with appointments, services, or general " +"information." +msgstr "" +"لديك أسئلة؟ نحن هنا للمساعدة بخصوص المواعيد أو الخدمات أو المعلومات العامة." + +#: templates/core/public_submit.html:562 +msgid "Back to Selection" +msgstr "العودة للاختيار" + +#: templates/core/public_submit.html:569 +msgid "Loading form..." +msgstr "جارٍ تحميل النموذج..." + +#: templates/core/public_submit.html:578 +msgid "Already submitted something?" +msgstr "هل سبق أن قمت بإرسال شيء؟" + +#: templates/core/public_submit.html:580 +msgid "Track Complaint" +msgstr "متابعة الشكوى" + +#: templates/core/public_submit.html:583 +#: templates/observations/public_track.html:9 +msgid "Track Observation" +msgstr "متابعة الملاحظة" + +#: templates/core/public_submit.html:594 +msgid "Submitted Successfully!" +msgstr "تم الإرسال بنجاح!" + +#: templates/core/public_submit.html:596 +msgid "Your submission has been received and is being processed." +msgstr "تم استلام طلبك وجارٍ معالجته." + +#: templates/core/public_submit.html:671 +msgid "Failed to load form. Please try again." +msgstr "فشل تحميل النموذج. يرجى المحاولة مرة أخرى." + +#: templates/core/public_submit.html:697 +msgid "Failed to load observation form. Please try again." +msgstr "فشل تحميل نموذج الملاحظات. يرجى المحاولة مرة أخرى." + +#: templates/core/public_submit.html:705 templates/core/public_submit.html:722 +#: templates/core/public_submit.html:751 templates/core/public_submit.html:763 +#: templates/core/public_submit.html:769 templates/core/public_submit.html:776 +#: templates/core/public_submit.html:789 +#: templates/observations/public_new.html:233 +#: templates/observations/public_new.html:279 +#: templates/observations/public_new.html:304 +#: templates/observations/public_new.html:327 +#: templates/observations/public_new.html:344 +msgid "optional" +msgstr "اختياري" + +#: templates/core/public_submit.html:716 +#: templates/observations/public_new.html:9 +#: templates/observations/public_new.html:199 +msgid "Report an Observation" +msgstr "الإبلاغ عن ملاحظة" + +#: templates/core/public_submit.html:717 +msgid "" +"Help us improve by reporting issues you notice. You can submit this " +"anonymously." +msgstr "" +"ساعدنا على التحسين من خلال الإبلاغ عن الملاحظات التي تراها. يمكنك الإرسال " +"بشكل مجهول." + +#: templates/core/public_submit.html:752 +msgid "Brief title of your observation" +msgstr "عنوان مختصر للملاحظة" + +#: templates/core/public_submit.html:757 +msgid "Please describe what you observed in detail..." +msgstr "يرجى وصف ما لاحظته بالتفصيل..." + +#: templates/core/public_submit.html:763 +#: templates/observations/observation_detail.html:209 +#: templates/observations/public_new.html:303 +msgid "Location" +msgstr "الموقع" + +#: templates/core/public_submit.html:764 +msgid "Where did this occur?" +msgstr "أين حدث ذلك؟" + +#: templates/core/public_submit.html:769 +#: templates/observations/public_new.html:315 +msgid "When did this occur?" +msgstr "متى حدث ذلك؟" + +#: templates/core/public_submit.html:779 +#: templates/observations/public_new.html:331 +msgid "Click to upload files" +msgstr "انقر لتحميل الملفات" + +#: templates/core/public_submit.html:780 +#: templates/observations/public_new.html:332 +msgid "Images, PDF, Word, Excel (max 10MB each)" +msgstr "صور، PDF، Word، Excel (بحد أقصى 10MB لكل ملف)" + +#: templates/core/public_submit.html:789 +#: templates/observations/public_new.html:343 +msgid "Your Information" +msgstr "معلوماتك الشخصية" + +#: templates/core/public_submit.html:790 +#: templates/observations/public_new.html:347 +msgid "" +"Providing your information helps us follow up if needed. Leave blank to " +"submit anonymously." +msgstr "" +"تقديم معلوماتك يساعدنا في المتابعة عند الحاجة. اتركها فارغة لتقديم البلاغ " +"بشكل مجهول." + +#: templates/core/public_submit.html:794 +#: templates/observations/observation_detail.html:255 +#: templates/observations/public_new.html:352 +msgid "Staff ID" +msgstr "معرّف الموظف" + +#: templates/core/public_submit.html:823 +#: templates/observations/public_new.html:373 +msgid "Submit Observation" +msgstr "إرسال الملاحظة" + +#: templates/core/public_submit.html:897 templates/core/public_submit.html:909 +#: templates/core/public_submit.html:1266 +#: templates/core/public_submit.html:1271 +msgid "Failed to submit. Please try again." +msgstr "فشل الإرسال. يرجى المحاولة مرة أخرى." + +#: templates/core/public_submit.html:943 +msgid "Your name" +msgstr "اسمك" + +#: templates/core/public_submit.html:985 +msgid "Brief subject of your inquiry" +msgstr "موضوع مختصر للاستفسار" + +#: templates/core/public_submit.html:990 +msgid "Please describe your inquiry in detail..." +msgstr "يرجى وصف استفسارك بالتفصيل..." + +#: templates/core/select_hospital.html:19 +msgid "" +"As a PX Admin, you can view and manage data for any hospital. Please select " +"the hospital you want to work with:" +msgstr "" +"بصفتك مشرف PX، يمكنك عرض وإدارة بيانات أي مستشفى. يرجى اختيار المستشفى التي " +"تريد العمل معها:" + +#: templates/core/select_hospital.html:39 +msgid "Selected" +msgstr "تم الاختيار" + +#: templates/core/select_hospital.html:55 +msgid "No hospitals found in the system." +msgstr "لم يتم العثور على مستشفيات في النظام." + +#: templates/core/select_hospital.html:63 +#: templates/references/document_form.html:59 +#: templates/references/folder_form.html:45 templates/references/search.html:23 +#: templates/standards/department_standards.html:21 +#: templates/standards/search.html:14 +#: templates/standards/standard_detail.html:14 +#: templates/standards/standard_form.html:20 +msgid "Back to Dashboard" +msgstr "العودة إلى لوحة التحكم" + +#: templates/core/select_hospital.html:67 +msgid "Continue" +msgstr "متابعة" + #: templates/dashboard/command_center.html:19 msgid "Complaints Trend (Last 30 Days)" msgstr "اتجاه الشكاوى (آخر 30 يومًا)" @@ -3861,7 +4828,7 @@ msgstr "بدأت" msgid "Stages" msgstr "المراحل" -#: templates/layouts/base.html:9 +#: templates/layouts/base.html:9 templates/layouts/public_base.html:8 msgid "PX360 - Patient Experience Management" msgstr "PX360 - إدارة تجربة المريض" @@ -3870,20 +4837,20 @@ msgstr "PX360 - إدارة تجربة المريض" msgid "Home" msgstr "الرئيسية" -#: templates/layouts/partials/sidebar.html:16 +#: templates/layouts/partials/sidebar.html:17 msgid "Command Center" msgstr "مركز القيادة" -#: templates/layouts/partials/sidebar.html:41 +#: templates/layouts/partials/sidebar.html:42 msgid "All Complaints" msgstr "جميع الشكاوى" -#: templates/layouts/partials/sidebar.html:55 -#: templates/layouts/partials/sidebar.html:244 +#: templates/layouts/partials/sidebar.html:56 +#: templates/layouts/partials/sidebar.html:263 msgid "Analytics" msgstr "التحليلات" -#: templates/layouts/partials/sidebar.html:123 +#: templates/layouts/partials/sidebar.html:124 #: templates/observations/category_form.html:12 #: templates/observations/category_list.html:39 #: templates/observations/convert_to_action.html:12 @@ -3891,31 +4858,47 @@ msgstr "التحليلات" msgid "Observations" msgstr "الملاحظات" -#: templates/layouts/partials/sidebar.html:142 +#: templates/layouts/partials/sidebar.html:143 msgid "Patient Journeys" msgstr "رحلات المرضى" -#: templates/layouts/partials/sidebar.html:171 +#: templates/layouts/partials/sidebar.html:172 msgid "Organizations" msgstr "المنظمات" -#: templates/layouts/partials/sidebar.html:193 +#: templates/layouts/partials/sidebar.html:194 msgid "Interactions" msgstr "التفاعلات" -#: templates/layouts/partials/sidebar.html:253 +#: templates/layouts/partials/sidebar.html:243 +msgid "References" +msgstr "المراجع" + +#: templates/layouts/partials/sidebar.html:252 +msgid "Standards" +msgstr "المعايير" + +#: templates/layouts/partials/sidebar.html:272 msgid "QI Projects" msgstr "مشاريع تحسين الجودة" -#: templates/layouts/partials/sidebar.html:269 -#: templates/layouts/partials/topbar.html:112 +#: templates/layouts/partials/sidebar.html:288 +#: templates/layouts/partials/topbar.html:113 msgid "Settings" msgstr "الإعدادات" -#: templates/layouts/partials/sidebar.html:278 +#: templates/layouts/partials/sidebar.html:297 msgid "Configuration" msgstr "الإعدادات" +#: templates/layouts/partials/sidebar.html:334 +msgid "Switch Hospital" +msgstr "تبديل المستشفى" + +#: templates/layouts/partials/sidebar.html:361 +msgid "View All Hospitals" +msgstr "عرض جميع المستشفيات" + #: templates/layouts/partials/stat_cards.html:18 msgid "from last period" msgstr "من الفترة السابقة" @@ -3932,13 +4915,10 @@ msgstr "لا توجد إشعارات جديدة" msgid "You're all caught up!" msgstr "أنت على اطلاع بكل شيء!" +#: templates/layouts/partials/topbar.html:62 msgid "Select Language" msgstr "اختر اللغة" -#: templates/layouts/partials/topbar.html:114 -msgid "Logout" -msgstr "تسجيل الخروج" - #: templates/observations/category_form.html:5 #: templates/observations/category_list.html:5 #: templates/observations/category_list.html:14 @@ -4030,11 +5010,6 @@ msgstr "إنشاء إجراء PX" msgid "Observation Detail" msgstr "تفاصيل الملاحظة" -#: templates/observations/observation_detail.html:209 -#: templates/observations/public_new.html:303 -msgid "Location" -msgstr "الموقع" - #: templates/observations/observation_detail.html:213 msgid "Incident Date/Time" msgstr "تاريخ/وقت الحادثة" @@ -4059,11 +5034,6 @@ msgstr "معلومات المبلّغ" msgid "This observation was submitted anonymously" msgstr "تم إرسال هذه الملاحظة بشكل مجهول" -#: templates/observations/observation_detail.html:255 -#: templates/observations/public_new.html:352 -msgid "Staff ID" -msgstr "معرّف الموظف" - #: templates/observations/observation_detail.html:321 msgid "Status Changed" msgstr "تم تغيير الحالة" @@ -4153,11 +5123,6 @@ msgstr "المُبلّغ" msgid "No observations found" msgstr "لم يتم العثور على ملاحظات" -#: templates/observations/public_new.html:9 -#: templates/observations/public_new.html:199 -msgid "Report an Observation" -msgstr "الإبلاغ عن ملاحظة" - #: templates/observations/public_new.html:200 msgid "Help us improve by reporting issues you notice" msgstr "ساعدنا في التحسين من خلال الإبلاغ عن المشكلات التي تلاحظها" @@ -4174,46 +5139,10 @@ msgstr "" "يمكنك إرسال هذا البلاغ بشكل مجهول. تقديم معلوماتك اختياري ولكنه قد يساعدنا " "في المتابعة إذا لزم الأمر." -#: templates/observations/public_new.html:233 -#: templates/observations/public_new.html:279 -#: templates/observations/public_new.html:304 -#: templates/observations/public_new.html:327 -#: templates/observations/public_new.html:344 -msgid "optional" -msgstr "اختياري" - #: templates/observations/public_new.html:297 msgid "Please describe what you observed in detail." msgstr "يرجى وصف ما لاحظته بالتفصيل." -#: templates/observations/public_new.html:315 -msgid "When did this occur?" -msgstr "متى حدث ذلك؟" - -#: templates/observations/public_new.html:331 -msgid "Click to upload files" -msgstr "انقر لتحميل الملفات" - -#: templates/observations/public_new.html:332 -msgid "Images, PDF, Word, Excel (max 10MB each)" -msgstr "صور، PDF، Word، Excel (بحد أقصى 10MB لكل ملف)" - -#: templates/observations/public_new.html:343 -msgid "Your Information" -msgstr "معلوماتك الشخصية" - -#: templates/observations/public_new.html:347 -msgid "" -"Providing your information helps us follow up if needed. Leave blank to " -"submit anonymously." -msgstr "" -"تقديم معلوماتك يساعدنا في المتابعة عند الحاجة. اتركها فارغة لتقديم البلاغ " -"بشكل مجهول." - -#: templates/observations/public_new.html:373 -msgid "Submit Observation" -msgstr "إرسال الملاحظة" - #: templates/observations/public_new.html:380 msgid "Track an existing observation" msgstr "تتبع ملاحظة موجودة" @@ -4267,10 +5196,6 @@ msgstr "إرسال ملاحظة أخرى" msgid "Copied!" msgstr "تم النسخ!" -#: templates/observations/public_track.html:9 -msgid "Track Observation" -msgstr "تتبع الملاحظة" - #: templates/observations/public_track.html:227 msgid "Track Your Observation" msgstr "تتبع ملاحظتك" @@ -4328,11 +5253,15 @@ msgid "Submit a new observation" msgstr "إرسال ملاحظة جديدة" #: templates/organizations/department_list.html:8 +#: templates/standards/dashboard.html:65 templates/standards/dashboard.html:75 msgid "Departments" msgstr "الأقسام" #: templates/organizations/department_list.html:16 #: templates/organizations/hospital_list.html:16 +#: templates/standards/compliance_form.html:29 +#: templates/standards/department_standards.html:48 +#: templates/standards/search.html:78 msgid "Code" msgstr "الرمز" @@ -4622,6 +5551,491 @@ msgstr "تاريخ البدء" msgid "Target Date" msgstr "التاريخ المستهدف" +#: templates/references/dashboard.html:4 templates/references/dashboard.html:11 +#: templates/references/document_view.html:4 +#: templates/references/document_view.html:14 +#: templates/references/folder_view.html:4 +#: templates/references/folder_view.html:14 templates/references/search.html:4 +#: templates/references/search.html:14 +msgid "Reference Section" +msgstr "قسم المراجع" + +#: templates/references/dashboard.html:4 +msgid "PX360" +msgstr "PX360" + +#: templates/references/dashboard.html:12 +msgid "Access and manage reference documents" +msgstr "الوصول إلى مستندات المراجع وإدارتها" + +#: templates/references/dashboard.html:19 +#: templates/references/folder_form.html:5 +#: templates/references/folder_form.html:52 +#: templates/references/folder_view.html:40 +#: templates/references/folder_view.html:44 +msgid "New Folder" +msgstr "مجلد جديد" + +#: templates/references/dashboard.html:22 +#: templates/references/document_form.html:5 +#: templates/references/document_form.html:66 +#: templates/references/document_form.html:297 +#: templates/references/folder_view.html:49 +#: templates/references/folder_view.html:53 +#: templates/references/folder_view.html:156 +#: templates/references/folder_view.html:160 +msgid "Upload Document" +msgstr "رفع مستند" + +#: templates/references/dashboard.html:39 +msgid "Total Folders" +msgstr "إجمالي المجلدات" + +#: templates/references/dashboard.html:56 +msgid "Total Documents" +msgstr "إجمالي المستندات" + +#: templates/references/dashboard.html:70 +#: templates/references/folder_view.html:4 +#: templates/references/folder_view.html:31 +#: templates/references/folder_view.html:63 +msgid "Folders" +msgstr "المجلدات" + +#: templates/references/dashboard.html:89 +#: templates/references/folder_view.html:81 +msgid "documents" +msgstr "مستندات" + +#: templates/references/dashboard.html:101 +msgid "No folders yet. Create your first folder to get started." +msgstr "لا توجد مجلدات بعد. أنشئ أول مجلد للبدء." + +#: templates/references/dashboard.html:108 +msgid "No folders yet" +msgstr "لا توجد مجلدات بعد" + +#: templates/references/dashboard.html:110 +#: templates/references/folder_form.html:220 +msgid "Create Folder" +msgstr "إنشاء مجلد" + +#: templates/references/dashboard.html:122 +msgid "Recent Documents" +msgstr "أحدث المستندات" + +#: templates/references/dashboard.html:142 +msgid "View All Documents" +msgstr "عرض جميع المستندات" + +#: templates/references/dashboard.html:146 +msgid "No documents uploaded yet" +msgstr "لم يتم رفع أي مستندات بعد" + +#: templates/references/document_form.html:5 +#: templates/references/document_form.html:64 +msgid "Edit Document" +msgstr "تعديل المستند" + +#: templates/references/document_form.html:55 +#: templates/references/folder_form.html:37 +#: templates/references/folder_form.html:41 +msgid "Back to Folder" +msgstr "العودة إلى المجلد" + +#: templates/references/document_form.html:71 +msgid "Update document information or upload a new version" +msgstr "تحديث معلومات المستند أو رفع إصدار جديد" + +#: templates/references/document_form.html:73 +msgid "Upload a new document to the reference library" +msgstr "رفع مستند جديد إلى مكتبة المراجع" + +#: templates/references/document_form.html:94 +msgid "Please fix the following errors:" +msgstr "يرجى تصحيح الأخطاء التالية:" + +#: templates/references/document_form.html:108 +msgid "Document File" +msgstr "ملف المستند" + +#: templates/references/document_form.html:113 +msgid "Current File" +msgstr "الملف الحالي" + +#: templates/references/document_form.html:115 +msgid "Filename:" +msgstr "اسم الملف:" + +#: templates/references/document_form.html:116 +#: templates/references/document_form.html:288 +msgid "File Size:" +msgstr "حجم الملف:" + +#: templates/references/document_form.html:117 +#: templates/references/document_form.html:287 +msgid "Version:" +msgstr "الإصدار:" + +#: templates/references/document_form.html:118 +msgid "Uploaded:" +msgstr "تم الرفع:" + +#: templates/references/document_form.html:126 +msgid "Drag & drop your file here" +msgstr "اسحب وأفلت الملف هنا" + +#: templates/references/document_form.html:127 +msgid "or click to browse" +msgstr "أو انقر للتصفح" + +#: templates/references/document_form.html:140 +msgid "Supported formats:" +msgstr "الصيغ المدعومة:" + +#: templates/references/document_form.html:141 +msgid "Maximum file size:" +msgstr "الحد الأقصى لحجم الملف:" + +#: templates/references/document_form.html:149 +msgid "Upload as new version (increment version number)" +msgstr "رفع كإصدار جديد (زيادة رقم الإصدار)" + +#: templates/references/document_form.html:158 +msgid "Document Information" +msgstr "معلومات المستند" + +#: templates/references/document_form.html:162 +msgid "Title (English)" +msgstr "العنوان (إنجليزي)" + +#: templates/references/document_form.html:165 +msgid "Enter document title in English" +msgstr "أدخل عنوان المستند باللغة الإنجليزية" + +#: templates/references/document_form.html:176 +msgid "Title (Arabic)" +msgstr "العنوان (عربي)" + +#: templates/references/document_form.html:179 +msgid "Enter document title in Arabic (optional)" +msgstr "أدخل عنوان المستند باللغة العربية (اختياري)" + +#: templates/references/document_form.html:185 +msgid "Detailed description of the document" +msgstr "وصف تفصيلي للمستند" + +#: templates/references/document_form.html:191 +msgid "Arabic description (optional)" +msgstr "الوصف بالعربية (اختياري)" + +#: templates/references/document_form.html:198 +msgid "Select folder" +msgstr "اختر مجلدًا" + +#: templates/references/document_form.html:221 +msgid "Comma-separated tags (e.g., HR, Safety, 2024)" +msgstr "وسوم مفصولة بفواصل (مثل: الموارد البشرية، السلامة، 2024)" + +#: templates/references/document_form.html:222 +msgid "Use tags to categorize and search documents easily" +msgstr "استخدم الوسوم لتصنيف المستندات والبحث عنها بسهولة" + +#: templates/references/document_form.html:229 +#: templates/references/folder_form.html:149 +msgid "Access Control" +msgstr "التحكم في الوصول" + +#: templates/references/document_form.html:233 +#: templates/references/folder_form.html:153 +msgid "Access Roles" +msgstr "أدوار الوصول" + +#: templates/references/document_form.html:242 +msgid "No access roles available" +msgstr "لا توجد أدوار وصول متاحة" + +#: templates/references/document_form.html:244 +msgid "Select roles that can access this document" +msgstr "حدد الأدوار التي يمكنها الوصول إلى هذا المستند" + +#: templates/references/document_form.html:251 +msgid "Publish this document (make it visible to others)" +msgstr "نشر هذا المستند (إتاحته للآخرين)" + +#: templates/references/document_form.html:262 +msgid "Document Guidelines" +msgstr "إرشادات المستند" + +#: templates/references/document_form.html:265 +msgid "" +"Upload important documents, policies, procedures, and reference materials " +"for easy access by your team." +msgstr "" +"ارفع المستندات والسياسات والإجراءات والمواد المرجعية المهمة لسهولة وصول " +"فريقك." + +#: templates/references/document_form.html:269 +msgid "Use descriptive titles in both languages" +msgstr "استخدم عناوين وصفية باللغتين" + +#: templates/references/document_form.html:270 +msgid "Add clear descriptions" +msgstr "أضف أوصافًا واضحة" + +#: templates/references/document_form.html:271 +msgid "Choose the right document type" +msgstr "اختر نوع المستند المناسب" + +#: templates/references/document_form.html:272 +msgid "Set appropriate visibility levels" +msgstr "حدد مستويات عرض مناسبة" + +#: templates/references/document_form.html:273 +msgid "Use tags for easy searching" +msgstr "استخدم الوسوم لسهولة البحث" + +#: templates/references/document_form.html:274 +msgid "Upload new versions when updating" +msgstr "ارفع إصدارًا جديدًا عند التحديث" + +#: templates/references/document_form.html:282 +msgid "Current Document" +msgstr "المستند الحالي" + +#: templates/references/document_form.html:286 +msgid "Updated:" +msgstr "تم التحديث:" + +#: templates/references/document_form.html:297 +msgid "Update Document" +msgstr "تحديث المستند" + +#: templates/references/document_form.html:359 +msgid "File selected" +msgstr "تم اختيار الملف" + +#: templates/references/document_view.html:37 +#: templates/references/folder_view.html:140 +#: templates/references/search.html:127 +msgid "Download" +msgstr "تنزيل" + +#: templates/references/document_view.html:47 +msgid "Document Details" +msgstr "تفاصيل المستند" + +#: templates/references/document_view.html:51 +#: templates/standards/attachment_upload.html:107 +msgid "File Name" +msgstr "اسم الملف" + +#: templates/references/document_view.html:59 +msgid "File Size" +msgstr "حجم الملف" + +#: templates/references/document_view.html:62 +#: templates/references/document_view.html:112 +#: templates/references/folder_view.html:110 +#: templates/references/search.html:85 +msgid "Version" +msgstr "الإصدار" + +#: templates/references/document_view.html:71 +#: templates/references/folder_view.html:111 +#: templates/references/search.html:86 +msgid "Downloads" +msgstr "عدد التنزيلات" + +#: templates/references/document_view.html:74 +#: templates/standards/attachment_upload.html:109 +msgid "Uploaded By" +msgstr "تم الرفع بواسطة" + +#: templates/references/document_view.html:79 +msgid "Unknown" +msgstr "غير معروف" + +#: templates/references/document_view.html:86 +msgid "Last Modified" +msgstr "آخر تعديل" + +#: templates/references/document_view.html:105 +msgid "Version History" +msgstr "سجل الإصدارات" + +#: templates/references/document_view.html:113 +#: templates/standards/attachment_upload.html:30 +msgid "File" +msgstr "الملف" + +#: templates/references/document_view.html:114 +#: templates/references/folder_view.html:109 +#: templates/references/search.html:84 +msgid "Size" +msgstr "الحجم" + +#: templates/references/document_view.html:151 +msgid "Download Document" +msgstr "تنزيل المستند" + +#: templates/references/document_view.html:154 +msgid "Edit Metadata" +msgstr "تعديل البيانات الوصفية" + +#: templates/references/document_view.html:158 +msgid "Upload New Version" +msgstr "رفع إصدار جديد" + +#: templates/references/document_view.html:162 +msgid "Delete Document" +msgstr "حذف المستند" + +#: templates/references/document_view.html:184 +msgid "Related Documents" +msgstr "مستندات ذات صلة" + +#: templates/references/document_view.html:208 +msgid "Are you sure you want to delete this document?" +msgstr "هل أنت متأكد من حذف هذا المستند؟" + +#: templates/references/folder_form.html:5 +#: templates/references/folder_form.html:50 +msgid "Edit Folder" +msgstr "تعديل المجلد" + +#: templates/references/folder_form.html:57 +msgid "Update folder information" +msgstr "تحديث معلومات المجلد" + +#: templates/references/folder_form.html:59 +msgid "Create a new folder to organize your documents" +msgstr "إنشاء مجلد جديد لتنظيم المستندات" + +#: templates/references/folder_form.html:72 +msgid "Folder Information" +msgstr "معلومات المجلد" + +#: templates/references/folder_form.html:79 +msgid "Enter folder name in English" +msgstr "أدخل اسم المجلد بالإنجليزية" + +#: templates/references/folder_form.html:86 +msgid "Enter folder name in Arabic (optional)" +msgstr "أدخل اسم المجلد بالعربية (اختياري)" + +#: templates/references/folder_form.html:92 +msgid "Optional description of this folder" +msgstr "وصف اختياري للمجلد" + +#: templates/references/folder_form.html:98 +msgid "Optional Arabic description" +msgstr "وصف عربي اختياري" + +#: templates/references/folder_form.html:102 +msgid "Parent Folder" +msgstr "المجلد الأب" + +#: templates/references/folder_form.html:104 +msgid "Root Level (No Parent)" +msgstr "المستوى الجذري (بدون أب)" + +#: templates/references/folder_form.html:116 +msgid "Leave empty to create at root level" +msgstr "اتركه فارغًا للإنشاء في الجذر" + +#: templates/references/folder_form.html:125 +msgid "FontAwesome icon class" +msgstr "فئة أيقونة FontAwesome" + +#: templates/references/folder_form.html:133 +msgid "Hex color code" +msgstr "كود اللون الست عشري" + +#: templates/references/folder_form.html:141 +msgid "Display order" +msgstr "ترتيب العرض" + +#: templates/references/folder_form.html:165 +msgid "Leave all unchecked to make folder accessible to all users" +msgstr "اترك الكل غير محدد لإتاحة المجلد للجميع" + +#: templates/references/folder_form.html:176 +msgid "Uncheck to hide this folder" +msgstr "ألغِ التحديد لإخفاء المجلد" + +#: templates/references/folder_form.html:187 +msgid "Folder Organization" +msgstr "تنظيم المجلدات" + +#: templates/references/folder_form.html:190 +msgid "" +"Create folders to organize documents by category, department, or any " +"structure that works for your team." +msgstr "" +"أنشئ مجلدات لتنظيم المستندات حسب الفئة أو القسم أو أي هيكل يناسب فريقك." + +#: templates/references/folder_form.html:194 +msgid "Use meaningful names in both languages" +msgstr "استخدم أسماء واضحة باللغتين" + +#: templates/references/folder_form.html:195 +msgid "Add descriptions for clarity" +msgstr "أضف أوصافًا للتوضيح" + +#: templates/references/folder_form.html:196 +msgid "Set access roles to control visibility" +msgstr "حدد أدوار الوصول للتحكم في العرض" + +#: templates/references/folder_form.html:197 +msgid "Use icons and colors for visual organization" +msgstr "استخدم الأيقونات والألوان للتنظيم البصري" + +#: templates/references/folder_form.html:205 +msgid "Current Folder" +msgstr "المجلد الحالي" + +#: templates/references/folder_form.html:209 +msgid "Last Modified:" +msgstr "آخر تعديل:" + +#: templates/references/folder_form.html:210 +msgid "Documents:" +msgstr "المستندات:" + +#: templates/references/folder_form.html:211 +msgid "Subfolders:" +msgstr "المجلدات الفرعية:" + +#: templates/references/folder_form.html:220 +msgid "Update Folder" +msgstr "تحديث المجلد" + +#: templates/references/folder_view.html:99 +msgid "Documents" +msgstr "المستندات" + +#: templates/references/folder_view.html:112 +#: templates/references/search.html:87 +msgid "Modified" +msgstr "تم التعديل" + +#: templates/references/folder_view.html:153 +msgid "No documents in this folder" +msgstr "لا توجد مستندات في هذا المجلد" + +#: templates/references/search.html:4 templates/references/search.html:19 +msgid "Search Documents" +msgstr "بحث في المستندات" + +#: templates/references/search.html:31 +msgid "Filter Documents" +msgstr "تصفية المستندات" + +#: templates/references/search.html:186 +msgid "No documents found matching your search criteria" +msgstr "لم يتم العثور على مستندات مطابقة لمعايير البحث" + #: templates/social/mention_detail.html:76 msgid "PX Action" msgstr "إجراء تجربة المريض" @@ -4630,6 +6044,333 @@ msgstr "إجراء تجربة المريض" msgid "Total Mentions" msgstr "إجمالي الإشارات" +#: templates/standards/attachment_upload.html:4 +msgid "Upload Evidence" +msgstr "رفع الأدلة" + +#: templates/standards/attachment_upload.html:10 +msgid "Upload Evidence Attachment" +msgstr "رفع مرفق الأدلة" + +#: templates/standards/attachment_upload.html:15 +msgid "Back to Assessment" +msgstr "العودة إلى التقييم" + +#: templates/standards/attachment_upload.html:23 +msgid "Upload New Attachment" +msgstr "رفع مرفق جديد" + +#: templates/standards/attachment_upload.html:37 +msgid "Accepted formats: PDF, DOC, DOCX, XLS, XLSX, JPG, PNG" +msgstr "الصيغ المقبولة: PDF، DOC، DOCX، XLS، XLSX، JPG، PNG" + +#: templates/standards/attachment_upload.html:52 +#: templates/standards/compliance_form.html:138 +msgid "Upload" +msgstr "رفع" + +#: templates/standards/attachment_upload.html:66 +msgid "Compliance Details" +msgstr "تفاصيل الامتثال" + +#: templates/standards/attachment_upload.html:71 +#: templates/standards/dashboard.html:128 +msgid "Standard" +msgstr "المعيار" + +#: templates/standards/attachment_upload.html:100 +msgid "Existing Attachments" +msgstr "المرفقات الحالية" + +#: templates/standards/compliance_form.html:4 +msgid "Update Compliance" +msgstr "تحديث الامتثال" + +#: templates/standards/compliance_form.html:10 +msgid "Update Compliance Assessment" +msgstr "تحديث تقييم الامتثال" + +#: templates/standards/compliance_form.html:15 +msgid "Back to Standards" +msgstr "العودة إلى المعايير" + +#: templates/standards/compliance_form.html:24 +#: templates/standards/standard_detail.html:4 +msgid "Standard Details" +msgstr "تفاصيل المعيار" + +#: templates/standards/compliance_form.html:55 +#: templates/standards/department_standards.html:113 +msgid "Compliance Assessment" +msgstr "تقييم الامتثال" + +#: templates/standards/compliance_form.html:72 +msgid "Last Assessed Date" +msgstr "تاريخ آخر تقييم" + +#: templates/standards/compliance_form.html:82 +#: templates/standards/department_standards.html:143 +#: templates/standards/standard_detail.html:122 +msgid "Assessor" +msgstr "المقيّم" + +#: templates/standards/compliance_form.html:92 +msgid "Assessment Notes" +msgstr "ملاحظات التقييم" + +#: templates/standards/compliance_form.html:102 +#: templates/standards/department_standards.html:154 +msgid "Evidence Summary" +msgstr "ملخص الأدلة" + +#: templates/standards/compliance_form.html:111 +#: templates/standards/department_standards.html:164 +msgid "Save Assessment" +msgstr "حفظ التقييم" + +#: templates/standards/compliance_form.html:135 +msgid "Evidence Attachments" +msgstr "مرفقات الأدلة" + +#: templates/standards/dashboard.html:4 templates/standards/dashboard.html:10 +msgid "Standards Compliance Dashboard" +msgstr "لوحة متابعة الامتثال للمعايير" + +#: templates/standards/dashboard.html:15 templates/standards/search.html:4 +#: templates/standards/search.html:10 +msgid "Search Standards" +msgstr "بحث المعايير" + +#: templates/standards/dashboard.html:25 +msgid "Total Standards" +msgstr "إجمالي المعايير" + +#: templates/standards/dashboard.html:33 +#: templates/standards/department_standards.html:126 +#: templates/standards/standard_detail.html:81 +msgid "Met" +msgstr "مستوفى" + +#: templates/standards/dashboard.html:41 +#: templates/standards/department_standards.html:127 +#: templates/standards/standard_detail.html:84 +msgid "Partially Met" +msgstr "مستوفى جزئياً" + +#: templates/standards/dashboard.html:49 +#: templates/standards/department_standards.html:128 +#: templates/standards/standard_detail.html:87 +msgid "Not Met" +msgstr "غير مستوفى" + +#: templates/standards/dashboard.html:57 +#: templates/standards/department_standards.html:71 +#: templates/standards/department_standards.html:125 +#: templates/standards/standard_detail.html:90 +msgid "Not Assessed" +msgstr "غير مُقيَّم" + +#: templates/standards/dashboard.html:94 +msgid "View Standards" +msgstr "عرض المعايير" + +#: templates/standards/dashboard.html:107 +msgid "No departments found" +msgstr "لا توجد أقسام" + +#: templates/standards/dashboard.html:120 +msgid "Recent Compliance Updates" +msgstr "آخر تحديثات الامتثال" + +#: templates/standards/dashboard.html:151 +msgid "No recent updates" +msgstr "لا توجد تحديثات حديثة" + +#: templates/standards/department_standards.html:5 +msgid "Department Standards" +msgstr "معايير القسم" + +#: templates/standards/department_standards.html:12 +msgid "Standards Compliance" +msgstr "الامتثال للمعايير" + +#: templates/standards/department_standards.html:17 +msgid "Add Standard" +msgstr "إضافة معيار" + +#: templates/standards/department_standards.html:32 +msgid "Search standards..." +msgstr "بحث في المعايير..." + +#: templates/standards/department_standards.html:41 +msgid "Standards List" +msgstr "قائمة المعايير" + +#: templates/standards/department_standards.html:51 +#: templates/standards/standard_detail.html:123 +msgid "Evidence" +msgstr "الأدلة" + +#: templates/standards/department_standards.html:84 +#: templates/standards/department_standards.html:89 +msgid "Assess" +msgstr "تقييم" + +#: templates/standards/department_standards.html:97 +#: templates/standards/search.html:118 +msgid "No standards found" +msgstr "لا توجد معايير" + +#: templates/standards/department_standards.html:122 +msgid "Compliance Status" +msgstr "حالة الامتثال" + +#: templates/standards/department_standards.html:134 +msgid "Assessment Date" +msgstr "تاريخ التقييم" + +#: templates/standards/department_standards.html:138 +msgid "Auto-filled with today's date" +msgstr "يُعبّأ تلقائياً بتاريخ اليوم" + +#: templates/standards/department_standards.html:148 +msgid "Notes" +msgstr "ملاحظات" + +#: templates/standards/department_standards.html:150 +msgid "Add any notes about the assessment..." +msgstr "أضف ملاحظات حول التقييم..." + +#: templates/standards/department_standards.html:156 +msgid "Summarize the evidence supporting this assessment..." +msgstr "لخّص الأدلة الداعمة لهذا التقييم..." + +#: templates/standards/department_standards.html:251 +#: templates/standards/department_standards.html:255 +msgid "Error creating compliance record" +msgstr "خطأ في إنشاء سجل الامتثال" + +#: templates/standards/department_standards.html:288 +#: templates/standards/department_standards.html:292 +msgid "Error updating compliance" +msgstr "خطأ في تحديث الامتثال" + +#: templates/standards/search.html:25 +msgid "Search by code, title, or description..." +msgstr "البحث بالرمز أو العنوان أو الوصف..." + +#: templates/standards/search.html:30 +msgid "All Sources" +msgstr "جميع المصادر" + +#: templates/standards/search.html:66 +msgid "Search Results" +msgstr "نتائج البحث" + +#: templates/standards/search.html:68 +msgid "All Standards" +msgstr "جميع المعايير" + +#: templates/standards/standard_detail.html:23 +#: templates/standards/standard_form.html:30 +msgid "Standard Information" +msgstr "معلومات المعيار" + +#: templates/standards/standard_detail.html:46 +msgid "Effective Date" +msgstr "تاريخ السريان" + +#: templates/standards/standard_detail.html:51 +#: templates/standards/standard_detail.html:61 +msgid "Not specified" +msgstr "غير محدد" + +#: templates/standards/standard_detail.html:56 +msgid "Review Date" +msgstr "تاريخ المراجعة" + +#: templates/standards/standard_detail.html:72 +msgid "Compliance Summary" +msgstr "ملخص الامتثال" + +#: templates/standards/standard_detail.html:77 +msgid "Assessments" +msgstr "التقييمات" + +#: templates/standards/standard_detail.html:111 +msgid "Compliance by Department" +msgstr "الامتثال حسب القسم" + +#: templates/standards/standard_detail.html:121 +msgid "Last Assessed" +msgstr "آخر تقييم" + +#: templates/standards/standard_detail.html:143 +msgid "Not assessed" +msgstr "غير مُقيَّم" + +#: templates/standards/standard_detail.html:165 +msgid "No compliance assessments yet" +msgstr "لا توجد تقييمات امتثال بعد" + +#: templates/standards/standard_form.html:4 +#: templates/standards/standard_form.html:126 +msgid "Create Standard" +msgstr "إنشاء معيار" + +#: templates/standards/standard_form.html:10 +msgid "Create New Standard" +msgstr "إنشاء معيار جديد" + +#: templates/standards/standard_form.html:11 +msgid "Add a new compliance standard" +msgstr "إضافة معيار امتثال جديد" + +#: templates/standards/standard_form.html:16 +msgid "Back to Department Standards" +msgstr "العودة إلى معايير القسم" + +#: templates/standards/standard_form.html:86 +msgid "Leave empty to apply to all departments" +msgstr "اتركه فارغاً للتطبيق على جميع الأقسام" + +#: templates/standards/standard_form.html:149 +msgid "Standard Code Format" +msgstr "تنسيق رمز المعيار" + +#: templates/standards/standard_form.html:151 +msgid "Use a unique code to identify this standard" +msgstr "استخدم رمزاً فريداً لتعريف هذا المعيار" + +#: templates/standards/standard_form.html:152 +msgid "Examples:" +msgstr "أمثلة:" + +#: templates/standards/standard_form.html:158 +msgid "Department Assignment" +msgstr "تعيين القسم" + +#: templates/standards/standard_form.html:160 +msgid "" +"Leave the department field empty if this standard applies to all " +"departments. Select a specific department only if the standard is department-" +"specific." +msgstr "" +"اترك حقل القسم فارغاً إذا كان المعيار ينطبق على جميع الأقسام. اختر قسماً محدداً " +"فقط إذا كان المعيار خاصاً بقسم معين." + +#: templates/standards/standard_form.html:163 +msgid "Dates" +msgstr "التواريخ" + +#: templates/standards/standard_form.html:165 +msgid "Effective date: When the standard becomes mandatory" +msgstr "تاريخ السريان: متى يصبح المعيار إلزامياً" + +#: templates/standards/standard_form.html:166 +msgid "Review date: When the standard should be reviewed for updates" +msgstr "تاريخ المراجعة: متى يجب مراجعة المعيار للتحديث" + #: templates/surveys/instance_detail.html:11 msgid "Back to Surveys" msgstr "العودة إلى الاستبيانات" @@ -4705,3 +6446,4 @@ msgstr "الأسئلة" #: templates/surveys/template_list.html:29 msgid "Scoring" msgstr "التقييم" + diff --git a/templates/actions/action_detail.html b/templates/actions/action_detail.html index 545ef3d..a0deffb 100644 --- a/templates/actions/action_detail.html +++ b/templates/actions/action_detail.html @@ -7,10 +7,10 @@ {% block extra_css %}