From c2e614ceb7d87cfaaf1e82ec18fcdd20e10e5343 Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Sun, 4 Jan 2026 11:00:29 +0300 Subject: [PATCH] update-observations-and-po-file --- generate_saudi_data.py | 201 +++++++++ locale/ar/LC_MESSAGES/django.mo | Bin 46739 -> 54878 bytes locale/ar/LC_MESSAGES/django.po | 466 +++++++++++++++++++-- templates/observations/public_new.html | 85 +++- templates/observations/public_success.html | 89 +++- templates/observations/public_track.html | 99 ++++- 6 files changed, 904 insertions(+), 36 deletions(-) diff --git a/generate_saudi_data.py b/generate_saudi_data.py index cfcde29..d99a0e2 100644 --- a/generate_saudi_data.py +++ b/generate_saudi_data.py @@ -35,6 +35,14 @@ from apps.appreciation.models import ( AppreciationStatus, AppreciationVisibility, ) +from apps.observations.models import ( + Observation, + ObservationCategory, + ObservationNote, + ObservationStatusLog, + ObservationSeverity, + ObservationStatus, +) from apps.complaints.models import Complaint, ComplaintUpdate from apps.journeys.models import ( PatientJourneyInstance, @@ -182,6 +190,12 @@ def clear_existing_data(): Appreciation.objects.all().delete() # Categories and Badges are preserved (seeded separately) + print("Deleting observations...") + ObservationStatusLog.objects.all().delete() + ObservationNote.objects.all().delete() + Observation.objects.all().delete() + # ObservationCategory is preserved (seeded separately) + print("Deleting users (except superusers)...") User.objects.filter(is_superuser=False).delete() @@ -1322,6 +1336,189 @@ def generate_appreciation_stats(users, physicians, hospitals): return stats +def create_observations(hospitals, departments, users): + """Create observations with 2 years of historical data""" + print("Creating observations (2 years of data)...") + + # Get observation categories (should be seeded) + obs_categories = list(ObservationCategory.objects.filter(is_active=True)) + if not obs_categories: + print(" WARNING: No observation categories found. Run: python manage.py seed_observation_categories") + return [] + + # Observation descriptions + observation_descriptions = [ + "Noticed a wet floor near the elevator without any warning signs. This could be a slip hazard for patients and visitors.", + "Observed expired hand sanitizer in the dispenser near the main entrance. The expiration date was 3 months ago.", + "Fire extinguisher in corridor B appears to be missing its inspection tag. Last visible inspection was over a year ago.", + "Patient call button in room 205 is not functioning properly. Patient had to wait for assistance.", + "Medication cart was left unattended in the hallway for approximately 15 minutes during shift change.", + "Emergency exit sign on the 3rd floor is not illuminated. This could be a safety concern during power outages.", + "Observed staff member not wearing proper PPE while handling biohazard materials.", + "Temperature in the medication storage room seems higher than normal. Thermometer shows 28°C.", + "Wheelchair in the lobby has a broken wheel lock mechanism. Could be dangerous for patients.", + "Noticed a strong chemical smell in the laboratory area. Ventilation may not be working properly.", + "Patient identification wristband was found on the floor in the waiting area.", + "Sharps container in treatment room 3 is overfilled and needs immediate replacement.", + "Observed water leak from ceiling tiles in the radiology waiting area.", + "Emergency shower station in the lab has not been tested recently according to the log.", + "Noticed outdated patient safety posters in the pediatric ward.", + ] + + observation_titles = [ + "Wet floor hazard", + "Expired sanitizer", + "Fire safety concern", + "Equipment malfunction", + "Medication security", + "Emergency signage issue", + "PPE compliance", + "Temperature control", + "Equipment maintenance", + "Ventilation concern", + "Patient safety", + "Waste disposal", + "Facility maintenance", + "Safety equipment", + "Signage update needed", + ] + + locations = [ + "Main Entrance", "Emergency Department", "ICU", "Pediatric Ward", "Surgery Floor", + "Radiology Department", "Laboratory", "Pharmacy", "Cafeteria", "Parking Garage", + "Outpatient Clinic", "Rehabilitation Center", "Administration Building", "Staff Lounge", + "Patient Rooms Floor 2", "Patient Rooms Floor 3", "Waiting Area", "Reception", + ] + + observations = [] + now = timezone.now() + + # Generate observations over 2 years (730 days) + # Average 1-3 observations per day + for day_offset in range(730): + num_observations = random.choices([0, 1, 2, 3, 4], weights=[20, 35, 30, 10, 5])[0] + + for _ in range(num_observations): + hospital = random.choice(hospitals) + hospital_depts = [d for d in departments if d.hospital == hospital] + + created_date = now - timedelta( + days=day_offset, + hours=random.randint(0, 23), + minutes=random.randint(0, 59) + ) + + # Status distribution based on age + if day_offset < 7: # Last week + status = random.choices( + [ObservationStatus.NEW, ObservationStatus.TRIAGED, ObservationStatus.ASSIGNED, + ObservationStatus.IN_PROGRESS, ObservationStatus.RESOLVED, ObservationStatus.CLOSED], + weights=[25, 20, 20, 20, 10, 5] + )[0] + elif day_offset < 30: # Last month + status = random.choices( + [ObservationStatus.NEW, ObservationStatus.TRIAGED, ObservationStatus.ASSIGNED, + ObservationStatus.IN_PROGRESS, ObservationStatus.RESOLVED, ObservationStatus.CLOSED], + weights=[5, 10, 15, 20, 30, 20] + )[0] + else: # Older + status = random.choices( + [ObservationStatus.NEW, ObservationStatus.TRIAGED, ObservationStatus.ASSIGNED, + ObservationStatus.IN_PROGRESS, ObservationStatus.RESOLVED, ObservationStatus.CLOSED, + ObservationStatus.REJECTED, ObservationStatus.DUPLICATE], + weights=[2, 3, 5, 5, 40, 40, 3, 2] + )[0] + + # Severity distribution + severity = random.choices( + [ObservationSeverity.LOW, ObservationSeverity.MEDIUM, + ObservationSeverity.HIGH, ObservationSeverity.CRITICAL], + weights=[30, 45, 20, 5] + )[0] + + # Anonymous vs identified (60% anonymous) + is_anonymous = random.random() < 0.6 + + # Generate tracking code + import secrets + tracking_code = f"OBS-{secrets.token_hex(3).upper()}" + + observation = Observation( + tracking_code=tracking_code, + category=random.choice(obs_categories), + title=random.choice(observation_titles), + description=random.choice(observation_descriptions), + severity=severity, + location_text=random.choice(locations), + incident_datetime=created_date - timedelta(hours=random.randint(0, 48)), + reporter_staff_id=f"EMP{random.randint(1000, 9999)}" if not is_anonymous else '', + reporter_name=f"{random.choice(ENGLISH_FIRST_NAMES_MALE)} {random.choice(ENGLISH_LAST_NAMES)}" if not is_anonymous else '', + reporter_phone=generate_saudi_phone() if not is_anonymous and random.random() > 0.5 else '', + reporter_email=f"staff{random.randint(100, 999)}@alhammadi.sa" if not is_anonymous and random.random() > 0.5 else '', + status=status, + assigned_department=random.choice(hospital_depts) if hospital_depts and status not in [ObservationStatus.NEW] else None, + assigned_to=random.choice(users) if status in [ObservationStatus.ASSIGNED, ObservationStatus.IN_PROGRESS, ObservationStatus.RESOLVED, ObservationStatus.CLOSED] and random.random() > 0.3 else None, + ) + + # Set timestamps based on status + if status not in [ObservationStatus.NEW]: + observation.triaged_at = created_date + timedelta(hours=random.randint(1, 24)) + observation.triaged_by = random.choice(users) + + if status in [ObservationStatus.RESOLVED, ObservationStatus.CLOSED]: + observation.resolved_at = created_date + timedelta(hours=random.randint(24, 168)) + + if status == ObservationStatus.CLOSED: + observation.closed_at = (observation.resolved_at or created_date) + timedelta(hours=random.randint(1, 48)) + + observation.save() + + # Override created_at + Observation.objects.filter(pk=observation.pk).update(created_at=created_date) + + # Add status log entries + if status != ObservationStatus.NEW: + ObservationStatusLog.objects.create( + observation=observation, + from_status=ObservationStatus.NEW, + to_status=ObservationStatus.TRIAGED, + changed_by=random.choice(users), + comment="Observation triaged and categorized." + ) + + if status in [ObservationStatus.ASSIGNED, ObservationStatus.IN_PROGRESS, ObservationStatus.RESOLVED, ObservationStatus.CLOSED]: + ObservationStatusLog.objects.create( + observation=observation, + from_status=ObservationStatus.TRIAGED, + to_status=ObservationStatus.ASSIGNED, + changed_by=random.choice(users), + comment="Assigned to responsible department." + ) + + if status in [ObservationStatus.RESOLVED, ObservationStatus.CLOSED]: + ObservationStatusLog.objects.create( + observation=observation, + from_status=ObservationStatus.IN_PROGRESS if status != ObservationStatus.RESOLVED else ObservationStatus.ASSIGNED, + to_status=ObservationStatus.RESOLVED, + changed_by=random.choice(users), + comment="Issue has been addressed and resolved." + ) + + # Add internal notes for some observations + if random.random() > 0.6: + ObservationNote.objects.create( + observation=observation, + note="Initial assessment completed. Following up with relevant department.", + created_by=random.choice(users), + is_internal=True + ) + + observations.append(observation) + + print(f" Created {len(observations)} observations over 2 years") + return observations + + def main(): """Main data generation function""" print("\n" + "="*60) @@ -1376,6 +1573,9 @@ def main(): user_badges = [] appreciation_stats = [] + # Create observations data + observations = create_observations(hospitals, departments, users) + print("\n" + "="*60) print("Data Generation Complete!") print("="*60) @@ -1398,6 +1598,7 @@ def main(): 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") diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index 49c3bba5f8af35a002611401f9b381af5407236c..e551fc0ef512337eac43ee4c9c90d27a9809b1fc 100644 GIT binary patch literal 54878 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 delta 14427 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 v{CbhQ^4vQ2#`%P>89X@e(oWTPSgd*3OV#H>uN - + {% trans "Report an Observation" %} - Al Hammadi + {% if LANGUAGE_CODE == 'ar' %} + + {% else %} + {% endif %} + + + + +
+ +
+
diff --git a/templates/observations/public_success.html b/templates/observations/public_success.html index b0e22ba..4088e25 100644 --- a/templates/observations/public_success.html +++ b/templates/observations/public_success.html @@ -1,17 +1,30 @@ {% load i18n %} {% load static %} +{% get_current_language as LANGUAGE_CODE %} - + {% trans "Observation Submitted" %} - Al Hammadi + {% if LANGUAGE_CODE == 'ar' %} + + {% else %} + {% endif %} + + + + +
+ +
+
@@ -131,7 +214,7 @@ - + diff --git a/templates/observations/public_track.html b/templates/observations/public_track.html index f364910..4aa2b9b 100644 --- a/templates/observations/public_track.html +++ b/templates/observations/public_track.html @@ -1,17 +1,30 @@ {% load i18n %} {% load static %} +{% get_current_language as LANGUAGE_CODE %} - +{% trans "Track Observation" %} - Al Hammadi + {% if LANGUAGE_CODE == 'ar' %} + + {% else %} + {% endif %} + + + + +
+ +
+
@@ -176,7 +271,7 @@
{% trans "Category" %} - {{ observation.category.name_en|default:"Not specified" }} + {{ observation.category.name|default:"Not specified" }}
{% trans "Severity" %}
{% trans "Category" %}{{ observation.category.name_en|default:"Not specified" }}{{ observation.category.name|default:"Not specified" }}
{% trans "Severity" %}