From 473a648e48181f9aef7fb4dee4856357cf466fac Mon Sep 17 00:00:00 2001 From: Aakash Singh Date: Thu, 12 Sep 2024 06:05:03 +0530 Subject: [PATCH 1/8] Remove multiselectfield references (#2444) --- Pipfile | 1 - Pipfile.lock | 10 +--------- care/audit_log/helpers.py | 3 +-- .../migrations/0001_initial_squashed.py | 9 ++++----- ...r_dailyround_additional_symptoms_and_more.py | 9 ++++----- .../0455_remove_facility_old_features.py | 17 +++++++++++++++++ ...tientregistration_patientteleconsultation.py | 5 ++--- .../migrations_old/0068_auto_20200402_2149.py | 5 ++--- .../migrations_old/0069_auto_20200402_2209.py | 5 ++--- .../migrations_old/0074_auto_20200404_2352.py | 3 +-- .../migrations_old/0075_auto_20200405_1122.py | 9 ++++----- .../migrations_old/0077_auto_20200409_0422.py | 9 ++++----- .../migrations_old/0298_facility_features.py | 5 ++--- .../migrations_old/0313_auto_20220901_2213.py | 5 ++--- .../migrations_old/0335_auto_20230207_1914.py | 9 ++++----- care/facility/models/facility.py | 8 -------- care/utils/event_utils.py | 16 +--------------- pyproject.toml | 1 - 18 files changed, 51 insertions(+), 78 deletions(-) create mode 100644 care/facility/migrations/0455_remove_facility_old_features.py diff --git a/Pipfile b/Pipfile index 6beddc1590..56f0fd7421 100644 --- a/Pipfile +++ b/Pipfile @@ -14,7 +14,6 @@ django-cors-headers = "==4.3.1" django-filter = "==24.2" django-maintenance-mode = "==0.21.1" django-model-utils = "==4.5.1" -django-multiselectfield = "==0.1.12" django-queryset-csv = "==1.1.0" django-ratelimit = "==4.1.0" django-redis = "==5.4.0" diff --git a/Pipfile.lock b/Pipfile.lock index 6cfb4f13d5..a05d26ac90 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0f478643ec74971469522c09c3e635a7ca9346c16a687ae7c14c7f638335cb1e" + "sha256": "81cab9840716883c05f3a21732b616658bab7dc3d0636e93e5612316c6319acf" }, "pipfile-spec": 6, "requires": { @@ -526,14 +526,6 @@ "markers": "python_version >= '3.8'", "version": "==4.5.1" }, - "django-multiselectfield": { - "hashes": [ - "sha256:c270faa7f80588214c55f2d68cbddb2add525c2aa830c216b8a198de914eb470", - "sha256:d0a4c71568fb2332c71478ffac9f8708e01314a35cf923dfd7a191343452f9f9" - ], - "index": "pypi", - "version": "==0.1.12" - }, "django-queryset-csv": { "hashes": [ "sha256:46b4fd55686d40c81d4ee725155bde73c9ffd201b7f87d9abfea3679cc7a4a86" diff --git a/care/audit_log/helpers.py b/care/audit_log/helpers.py index cd07097ba6..698ebdc5b9 100644 --- a/care/audit_log/helpers.py +++ b/care/audit_log/helpers.py @@ -4,7 +4,6 @@ from typing import List, NamedTuple from django.conf import settings -from multiselectfield.db.fields import MSFList from rest_framework.utils.encoders import JSONEncoder @@ -15,7 +14,7 @@ def remove_non_member_fields(d: dict): def instance_finder(v): return isinstance( v, - (list, dict, set, MSFList), + (list, dict, set), ) diff --git a/care/facility/migrations/0001_initial_squashed.py b/care/facility/migrations/0001_initial_squashed.py index 13c562ae68..9d2ed01273 100644 --- a/care/facility/migrations/0001_initial_squashed.py +++ b/care/facility/migrations/0001_initial_squashed.py @@ -7,7 +7,6 @@ import django.core.validators import django.db.models.deletion import django.utils.timezone -import multiselectfield.db.fields import simple_history.models from django.conf import settings from django.db import migrations, models @@ -1039,7 +1038,7 @@ class Migration(migrations.Migration): ("physical_examination_info", models.TextField(blank=True, null=True)), ( "additional_symptoms", - multiselectfield.db.fields.MultiSelectField( + models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -2052,7 +2051,7 @@ class Migration(migrations.Migration): ("kasp_empanelled", models.BooleanField(default=False)), ( "features", - multiselectfield.db.fields.MultiSelectField( + models.CharField( blank=True, choices=[ (1, "CT Scan Facility"), @@ -2402,7 +2401,7 @@ class Migration(migrations.Migration): ), ( "symptoms", - multiselectfield.db.fields.MultiSelectField( + models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -4330,7 +4329,7 @@ class Migration(migrations.Migration): ), ( "symptoms", - multiselectfield.db.fields.MultiSelectField( + models.CharField( choices=[ (1, "ASYMPTOMATIC"), (2, "FEVER"), diff --git a/care/facility/migrations/0407_alter_dailyround_additional_symptoms_and_more.py b/care/facility/migrations/0407_alter_dailyround_additional_symptoms_and_more.py index 08855c3d29..89f5e3360e 100644 --- a/care/facility/migrations/0407_alter_dailyround_additional_symptoms_and_more.py +++ b/care/facility/migrations/0407_alter_dailyround_additional_symptoms_and_more.py @@ -1,7 +1,6 @@ # Generated by Django 4.2.5 on 2024-01-08 17:26 -import multiselectfield.db.fields -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="dailyround", name="additional_symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -58,7 +57,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -103,7 +102,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientteleconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( choices=[ (1, "ASYMPTOMATIC"), (2, "FEVER"), diff --git a/care/facility/migrations/0455_remove_facility_old_features.py b/care/facility/migrations/0455_remove_facility_old_features.py new file mode 100644 index 0000000000..fca6226ca5 --- /dev/null +++ b/care/facility/migrations/0455_remove_facility_old_features.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.15 on 2024-09-11 13:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("facility", "0454_remove_historicalpatientregistration_abha_number_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="facility", + name="old_features", + ), + ] diff --git a/care/facility/migrations_old/0022_patientregistration_patientteleconsultation.py b/care/facility/migrations_old/0022_patientregistration_patientteleconsultation.py index 88dfcb3e74..bf2456fd72 100644 --- a/care/facility/migrations_old/0022_patientregistration_patientteleconsultation.py +++ b/care/facility/migrations_old/0022_patientregistration_patientteleconsultation.py @@ -2,7 +2,6 @@ import django.core.validators import django.db.models.deletion -import multiselectfield.db.fields from django.conf import settings from django.db import migrations, models @@ -28,7 +27,7 @@ class Migration(migrations.Migration): ), ( "symptoms", - multiselectfield.db.fields.MultiSelectField( + models.CharField( choices=[ (1, "NO"), (2, "FEVER"), @@ -94,7 +93,7 @@ class Migration(migrations.Migration): ), ( "medical_history", - multiselectfield.db.fields.MultiSelectField( + models.CharField( choices=[ (1, "NO"), (2, "Diabetes"), diff --git a/care/facility/migrations_old/0068_auto_20200402_2149.py b/care/facility/migrations_old/0068_auto_20200402_2149.py index 1e169d0e9c..f447c6f5ff 100644 --- a/care/facility/migrations_old/0068_auto_20200402_2149.py +++ b/care/facility/migrations_old/0068_auto_20200402_2149.py @@ -1,6 +1,5 @@ # Generated by Django 2.2.11 on 2020-04-02 21:49 -import multiselectfield.db.fields from django.db import migrations, models @@ -49,7 +48,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="patientconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( choices=[ (1, "ASYMPTOMATIC"), (2, "FEVER"), @@ -73,7 +72,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientteleconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( choices=[ (1, "ASYMPTOMATIC"), (2, "FEVER"), diff --git a/care/facility/migrations_old/0069_auto_20200402_2209.py b/care/facility/migrations_old/0069_auto_20200402_2209.py index 68119c6ed5..318c5c53ea 100644 --- a/care/facility/migrations_old/0069_auto_20200402_2209.py +++ b/care/facility/migrations_old/0069_auto_20200402_2209.py @@ -1,7 +1,6 @@ # Generated by Django 2.2.11 on 2020-04-02 22:09 -import multiselectfield.db.fields -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), diff --git a/care/facility/migrations_old/0074_auto_20200404_2352.py b/care/facility/migrations_old/0074_auto_20200404_2352.py index 4af11eaa64..8fe70656a5 100644 --- a/care/facility/migrations_old/0074_auto_20200404_2352.py +++ b/care/facility/migrations_old/0074_auto_20200404_2352.py @@ -1,6 +1,5 @@ # Generated by Django 2.2.11 on 2020-04-04 18:22 -import multiselectfield.db.fields from django.db import migrations, models @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="dailyround", name="additional_symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), diff --git a/care/facility/migrations_old/0075_auto_20200405_1122.py b/care/facility/migrations_old/0075_auto_20200405_1122.py index e1f2555b81..cecd1a8cf6 100644 --- a/care/facility/migrations_old/0075_auto_20200405_1122.py +++ b/care/facility/migrations_old/0075_auto_20200405_1122.py @@ -1,7 +1,6 @@ # Generated by Django 2.2.11 on 2020-04-05 05:52 -import multiselectfield.db.fields -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="dailyround", name="additional_symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -35,7 +34,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -57,7 +56,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientteleconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( choices=[ (1, "ASYMPTOMATIC"), (2, "FEVER"), diff --git a/care/facility/migrations_old/0077_auto_20200409_0422.py b/care/facility/migrations_old/0077_auto_20200409_0422.py index 4a4fceaa42..3b90fc196c 100644 --- a/care/facility/migrations_old/0077_auto_20200409_0422.py +++ b/care/facility/migrations_old/0077_auto_20200409_0422.py @@ -1,7 +1,6 @@ # Generated by Django 2.2.11 on 2020-04-08 22:52 -import multiselectfield.db.fields -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="dailyround", name="additional_symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -41,7 +40,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -69,7 +68,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientteleconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( choices=[ (1, "ASYMPTOMATIC"), (2, "FEVER"), diff --git a/care/facility/migrations_old/0298_facility_features.py b/care/facility/migrations_old/0298_facility_features.py index 13a84be631..1986e11f25 100644 --- a/care/facility/migrations_old/0298_facility_features.py +++ b/care/facility/migrations_old/0298_facility_features.py @@ -1,7 +1,6 @@ # Generated by Django 2.2.11 on 2022-06-22 13:06 -import multiselectfield.db.fields -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="facility", name="features", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "CT Scan Facility"), diff --git a/care/facility/migrations_old/0313_auto_20220901_2213.py b/care/facility/migrations_old/0313_auto_20220901_2213.py index 569d170cb7..f0da2f2a2c 100644 --- a/care/facility/migrations_old/0313_auto_20220901_2213.py +++ b/care/facility/migrations_old/0313_auto_20220901_2213.py @@ -1,7 +1,6 @@ # Generated by Django 2.2.11 on 2022-09-01 16:43 -import multiselectfield.db.fields -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="facility", name="features", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "CT Scan Facility"), diff --git a/care/facility/migrations_old/0335_auto_20230207_1914.py b/care/facility/migrations_old/0335_auto_20230207_1914.py index c628eed6e4..2b443ae864 100644 --- a/care/facility/migrations_old/0335_auto_20230207_1914.py +++ b/care/facility/migrations_old/0335_auto_20230207_1914.py @@ -1,7 +1,6 @@ # Generated by Django 2.2.11 on 2023-02-07 13:44 -import multiselectfield.db.fields -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,7 +12,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="dailyround", name="additional_symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -48,7 +47,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( blank=True, choices=[ (1, "ASYMPTOMATIC"), @@ -83,7 +82,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="patientteleconsultation", name="symptoms", - field=multiselectfield.db.fields.MultiSelectField( + field=models.CharField( choices=[ (1, "ASYMPTOMATIC"), (2, "FEVER"), diff --git a/care/facility/models/facility.py b/care/facility/models/facility.py index 53bcac81ea..8b231d5a50 100644 --- a/care/facility/models/facility.py +++ b/care/facility/models/facility.py @@ -3,8 +3,6 @@ from django.contrib.postgres.fields import ArrayField from django.core.validators import MinValueValidator from django.db import models -from multiselectfield import MultiSelectField -from multiselectfield.utils import get_max_length from simple_history.models import HistoricalRecords from care.facility.models import FacilityBaseModel, reverse_choices @@ -194,12 +192,6 @@ class Facility(FacilityBaseModel, FacilityPermissionMixin): blank=True, null=True, ) - old_features = MultiSelectField( - choices=FEATURE_CHOICES, - null=True, - blank=True, - max_length=get_max_length(FEATURE_CHOICES, None), - ) longitude = models.DecimalField( max_digits=22, decimal_places=16, null=True, blank=True ) diff --git a/care/utils/event_utils.py b/care/utils/event_utils.py index 12d0dca91a..cb18c22128 100644 --- a/care/utils/event_utils.py +++ b/care/utils/event_utils.py @@ -4,7 +4,6 @@ from django.core.exceptions import FieldDoesNotExist from django.db.models import Field, Model -from multiselectfield.db.fields import MSFList, MultiSelectField logger = getLogger(__name__) @@ -17,12 +16,7 @@ def get_changed_fields(old: Model, new: Model) -> set[str]: changed_fields: set[str] = set() for field in new._meta.fields: field_name = field.name - if isinstance(field, MultiSelectField): - old_val = set(getattr(old, field_name, [])) - new_val = set(map(str, getattr(new, field_name, []))) - if old_val != new_val: - changed_fields.add(field_name) - elif getattr(old, field_name, None) != getattr(new, field_name, None): + if getattr(old, field_name, None) != getattr(new, field_name, None): changed_fields.add(field_name) return changed_fields @@ -59,12 +53,6 @@ def model_diff(old, new): diff = {} for field in new._meta.fields: field_name = field.name - if isinstance(field, MultiSelectField): - old_val = set(getattr(old, field_name, [])) - new_val = set(map(str, getattr(new, field_name, []))) - if old_val != new_val: - diff[field_name] = new_val - continue if getattr(old, field_name, None) != getattr(new, field_name, None): diff[field_name] = getattr(new, field_name, None) @@ -73,8 +61,6 @@ def model_diff(old, new): class CustomJSONEncoder(JSONEncoder): def default(self, o): - if isinstance(o, MSFList): - return list(map(str, o)) if isinstance(o, set): return list(o) if isinstance(o, datetime): diff --git a/pyproject.toml b/pyproject.toml index dee717bcba..930e81fc03 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,6 @@ known_third_party = [ "healthy_django", "jsonschema", "jwt", - "multiselectfield", "phonenumber_field", "phonenumbers", "pytz", From 280553dae6c8a827dcbdd9a4587ba4e79b650f2c Mon Sep 17 00:00:00 2001 From: Bodhish Thomas Date: Mon, 16 Sep 2024 16:32:44 +0530 Subject: [PATCH 2/8] Crowdin Translations (#2451) --- locale/hi/LC_MESSAGES/django.po | 166 ++++++++++------------- locale/kn/LC_MESSAGES/django.po | 233 ++++++++++++++++++++++++++++++++ locale/ml/LC_MESSAGES/django.po | 164 ++++++++++------------ locale/ta/LC_MESSAGES/django.po | 166 ++++++++++------------- 4 files changed, 448 insertions(+), 281 deletions(-) create mode 100644 locale/kn/LC_MESSAGES/django.po diff --git a/locale/hi/LC_MESSAGES/django.po b/locale/hi/LC_MESSAGES/django.po index d9eb9fd2d9..f7122369b9 100644 --- a/locale/hi/LC_MESSAGES/django.po +++ b/locale/hi/LC_MESSAGES/django.po @@ -1,255 +1,233 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: ohccarefe\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-25 17:02+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"PO-Revision-Date: 2024-09-16 10:57\n" +"Last-Translator: \n" +"Language-Team: Hindi\n" +"Language: hi_IN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: ohccarefe\n" +"X-Crowdin-Project-ID: 704503\n" +"X-Crowdin-Language: hi\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 70\n" #: care/abdm/apps.py:7 msgid "ABDM Integration" -msgstr "" +msgstr "ABDM एकीकरण" #: care/audit_log/apps.py:7 msgid "Audit Log Management" -msgstr "" +msgstr "ऑडिट लॉग प्रबंधन" #: care/facility/apps.py:7 msgid "Facility Management" -msgstr "" +msgstr "सुविधा प्रबंधन" #: care/facility/models/encounter_symptom.py:16 msgid "In Progress" -msgstr "" +msgstr "प्रगति पर है" #: care/facility/models/encounter_symptom.py:17 msgid "Completed" -msgstr "" +msgstr "पुरा होना।" #: care/facility/models/encounter_symptom.py:18 #: care/facility/models/icd11_diagnosis.py:53 msgid "Entered in Error" -msgstr "" +msgstr "त्रुटि दर्ज की गई" #: care/facility/models/icd11_diagnosis.py:48 msgid "Unconfirmed" -msgstr "" +msgstr "अपुष्ट" #: care/facility/models/icd11_diagnosis.py:49 msgid "Provisional" -msgstr "" +msgstr "अनंतिम" #: care/facility/models/icd11_diagnosis.py:50 msgid "Differential" -msgstr "" +msgstr "अंतर" #: care/facility/models/icd11_diagnosis.py:51 msgid "Confirmed" -msgstr "" +msgstr "की पुष्टि" #: care/facility/models/icd11_diagnosis.py:52 msgid "Refuted" -msgstr "" +msgstr "का खंडन किया" #: care/facility/models/patient.py:50 msgid "Non-card holder" -msgstr "" +msgstr "गैर-कार्ड धारक" #: care/facility/models/patient.py:51 msgid "BPL" -msgstr "" +msgstr "गरीबी रेखा से नीचे" #: care/facility/models/patient.py:52 msgid "APL" -msgstr "" +msgstr "एपीएल" #: care/facility/models/patient_base.py:88 msgid "Unknown" -msgstr "" +msgstr "अज्ञात" #: care/facility/models/patient_base.py:89 msgid "Recovered" -msgstr "" +msgstr "बरामद" #: care/facility/models/patient_base.py:90 msgid "Referred" -msgstr "" +msgstr "निर्दिष्ट" #: care/facility/models/patient_base.py:91 msgid "Expired" -msgstr "" +msgstr "खत्म हो चुका" #: care/facility/models/patient_base.py:92 msgid "LAMA" -msgstr "" +msgstr "लामा" #: care/facility/models/patient_base.py:127 msgid "Outpatient/Emergency Room" -msgstr "" +msgstr "बाह्य रोगी/आपातकालीन कक्ष" #: care/facility/models/patient_base.py:128 msgid "Referred from another facility" -msgstr "" +msgstr "किसी अन्य सुविधा से संदर्भित" #: care/facility/models/patient_base.py:129 msgid "Internal Transfer within the facility" -msgstr "" +msgstr "सुविधा के भीतर आंतरिक स्थानांतरण" #: care/facility/models/patient_base.py:130 msgid "(Unknown)" -msgstr "" +msgstr "(अज्ञात)" #: care/hcx/apps.py:7 msgid "HCX Integration" -msgstr "" +msgstr "HCX एकीकरण" #: care/templates/pages/home.html:8 msgid "Open Healthcare Network" -msgstr "" +msgstr "ओपन हेल्थकेयर नेटवर्क" #: care/templates/pages/home.html:9 -msgid "" -"Our Goal is to defend the Healthcare system of Kerala from overloading " -"beyond capacity." -msgstr "" +msgid "Our Goal is to defend the Healthcare system of Kerala from overloading beyond capacity." +msgstr "हमारा लक्ष्य केरल की स्वास्थ्य सेवा प्रणाली को क्षमता से अधिक भार से बचाना है।" #: care/users/apps.py:7 msgid "Users" -msgstr "" +msgstr "उपयोगकर्ताओं" #: care/users/forms.py:15 msgid "This username has already been taken." -msgstr "" +msgstr "यह उपयोगकर्ता नाम पहले ही ले लिया गया है." #: care/users/models.py:179 msgid "username" -msgstr "" +msgstr "उपयोगकर्ता नाम" #: care/users/models.py:184 msgid "A user with that username already exists." -msgstr "" +msgstr "इस नाम का उपयोगकर्ता पहले से मौजूद है।" #: care/users/reset_password_views.py:245 -msgid "" -"There is no active user associated with this username or the password can " -"not be changed" -msgstr "" +msgid "There is no active user associated with this username or the password can not be changed" +msgstr "इस उपयोगकर्ता नाम से कोई सक्रिय उपयोगकर्ता संबद्ध नहीं है या पासवर्ड बदला नहीं जा सकता" #: care/utils/models/validators.py:54 -msgid "" -"Username must be 4 to 16 characters long. It may only contain lowercase " -"alphabets, numbers, underscores, hyphens and dots. It shouldn't start or end " -"with underscores, hyphens or dots. It shouldn't contain consecutive " -"underscores, hyphens or dots." -msgstr "" +msgid "Username must be 4 to 16 characters long. It may only contain lowercase alphabets, numbers, underscores, hyphens and dots. It shouldn't start or end with underscores, hyphens or dots. It shouldn't contain consecutive underscores, hyphens or dots." +msgstr "उपयोगकर्ता नाम 4 से 16 अक्षरों का होना चाहिए। इसमें केवल लोअरकेस अक्षर, संख्याएँ, अंडरस्कोर, हाइफ़न और डॉट्स हो सकते हैं। यह अंडरस्कोर, हाइफ़न या डॉट्स से शुरू या खत्म नहीं होना चाहिए। इसमें लगातार अंडरस्कोर, हाइफ़न या डॉट्स नहीं होने चाहिए।" #: care/utils/ulid/serializers.py:9 #, python-brace-format msgid "\"{value}\" is not a valid ULID." -msgstr "" +msgstr "\"{value}\" एक वैध ULID नहीं है." #: config/auth_views.py:19 msgid "Too Many Requests Provide Captcha" -msgstr "" +msgstr "बहुत सारे अनुरोधों में कैप्चा दिया गया है" #: config/auth_views.py:27 msgid "No active account found with the given credentials" -msgstr "" +msgstr "दिए गए क्रेडेंशियल के साथ कोई सक्रिय खाता नहीं मिला" #: config/authentication.py:141 msgid "Authorization header must contain two space-delimited values" -msgstr "" +msgstr "प्राधिकरण हेडर में दो स्पेस-डिलीमिटेड मान होने चाहिए" #: config/authentication.py:270 -msgid "" -"Used for authenticating requests from the middleware. The scheme requires a " -"valid JWT token in the Authorization header along with the facility id in " -"the X-Facility-Id header. --The value field is just for preview, filling it " -"will show allowed endpoints.--" -msgstr "" +msgid "Used for authenticating requests from the middleware. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "मिडलवेयर से अनुरोधों को प्रमाणित करने के लिए उपयोग किया जाता है। इस योजना के लिए प्राधिकरण हेडर में वैध JWT टोकन के साथ-साथ X-Facility-Id हेडर में सुविधा आईडी की आवश्यकता होती है। --मूल्य फ़ील्ड केवल पूर्वावलोकन के लिए है, इसे भरने से अनुमत समापन बिंदु दिखाई देंगे।--" #: config/authentication.py:289 -msgid "" -"Used for authenticating requests from the middleware on behalf of assets. " -"The scheme requires a valid JWT token in the Authorization header along with " -"the facility id in the X-Facility-Id header. --The value field is just for " -"preview, filling it will show allowed endpoints.--" -msgstr "" +msgid "Used for authenticating requests from the middleware on behalf of assets. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "परिसंपत्तियों की ओर से मिडलवेयर से अनुरोधों को प्रमाणित करने के लिए उपयोग किया जाता है। इस योजना के लिए प्राधिकरण हेडर में वैध JWT टोकन के साथ-साथ X-Facility-Id हेडर में सुविधा आईडी की आवश्यकता होती है। --मूल्य फ़ील्ड केवल पूर्वावलोकन के लिए है, इसे भरने से अनुमत एंडपॉइंट दिखाई देंगे।--" #: config/authentication.py:306 config/authentication.py:320 msgid "Do not use this scheme for production." -msgstr "" +msgstr "उत्पादन के लिए इस योजना का उपयोग न करें।" #: config/patient_otp_authentication.py:56 msgid "Given token not valid for any token type" -msgstr "" +msgstr "दिया गया टोकन किसी भी टोकन प्रकार के लिए मान्य नहीं है" #: config/settings/base.py:60 msgid "English" -msgstr "" +msgstr "अंग्रेज़ी" #: config/settings/base.py:61 msgid "Malayalam" -msgstr "" +msgstr "मलयालम" #: config/settings/base.py:62 msgid "Hindi" -msgstr "" +msgstr "हिन्दी" #: config/settings/base.py:63 msgid "Tamil" -msgstr "" +msgstr "तामिल" #: config/validators.py:12 msgid "The password must contain at least 1 digit, 0-9." -msgstr "" +msgstr "पासवर्ड में कम से कम एक अंक, 0-9, होना चाहिए।" #: config/validators.py:17 msgid "Your password must contain at least 1 digit, 0-9." -msgstr "" +msgstr "आपके पासवर्ड में कम से कम एक अंक, 0-9, होना चाहिए।" #: config/validators.py:24 msgid "The password must contain at least 1 uppercase letter, A-Z." -msgstr "" +msgstr "पासवर्ड में कम से कम एक बड़ा अक्षर, AZ होना चाहिए।" #: config/validators.py:29 msgid "Your password must contain at least 1 uppercase letter, A-Z." -msgstr "" +msgstr "आपके पासवर्ड में कम से कम 1 बड़ा अक्षर, AZ होना चाहिए।" #: config/validators.py:36 msgid "The password must contain at least 1 lowercase letter, a-z." -msgstr "" +msgstr "पासवर्ड में कम से कम 1 छोटा अक्षर, az होना चाहिए।" #: config/validators.py:41 msgid "Your password must contain at least 1 lowercase letter, a-z." -msgstr "" +msgstr "आपके पासवर्ड में कम से कम 1 छोटा अक्षर, az होना चाहिए।" #: config/validators.py:49 -msgid "" -"The password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\"," -"<>./?" -msgstr "" +msgid "The password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "पासवर्ड में कम से कम 1 प्रतीक होना चाहिए: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" #: config/validators.py:57 -msgid "" -"Your password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\"," -"<>./?" -msgstr "" +msgid "Your password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "आपके पासवर्ड में कम से कम 1 प्रतीक होना चाहिए: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" #: config/validators.py:66 -msgid "" -"The domain name is invalid. It should not start with scheme and should not " -"end with a trailing slash." -msgstr "" +msgid "The domain name is invalid. It should not start with scheme and should not end with a trailing slash." +msgstr "डोमेन नाम अमान्य है। इसे स्कीम से शुरू नहीं करना चाहिए और अंत में स्लैश से नहीं होना चाहिए।" + diff --git a/locale/kn/LC_MESSAGES/django.po b/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 0000000000..8c1bf28934 --- /dev/null +++ b/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,233 @@ +msgid "" +msgstr "" +"Project-Id-Version: ohccarefe\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-25 17:02+0530\n" +"PO-Revision-Date: 2024-09-16 10:57\n" +"Last-Translator: \n" +"Language-Team: Kannada\n" +"Language: kn_IN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: ohccarefe\n" +"X-Crowdin-Project-ID: 704503\n" +"X-Crowdin-Language: kn\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 70\n" + +#: care/abdm/apps.py:7 +msgid "ABDM Integration" +msgstr "ABDM ಏಕೀಕರಣ" + +#: care/audit_log/apps.py:7 +msgid "Audit Log Management" +msgstr "ಆಡಿಟ್ ಲಾಗ್ ನಿರ್ವಹಣೆ" + +#: care/facility/apps.py:7 +msgid "Facility Management" +msgstr "ಸೌಲಭ್ಯ ನಿರ್ವಹಣೆ" + +#: care/facility/models/encounter_symptom.py:16 +msgid "In Progress" +msgstr "ಪ್ರಗತಿಯಲ್ಲಿದೆ" + +#: care/facility/models/encounter_symptom.py:17 +msgid "Completed" +msgstr "ಪೂರ್ಣಗೊಂಡಿದೆ" + +#: care/facility/models/encounter_symptom.py:18 +#: care/facility/models/icd11_diagnosis.py:53 +msgid "Entered in Error" +msgstr "ದೋಷದಲ್ಲಿ ನಮೂದಿಸಲಾಗಿದೆ" + +#: care/facility/models/icd11_diagnosis.py:48 +msgid "Unconfirmed" +msgstr "ದೃಢೀಕರಿಸಲಾಗಿಲ್ಲ" + +#: care/facility/models/icd11_diagnosis.py:49 +msgid "Provisional" +msgstr "ತಾತ್ಕಾಲಿಕ" + +#: care/facility/models/icd11_diagnosis.py:50 +msgid "Differential" +msgstr "ಭೇದಾತ್ಮಕ" + +#: care/facility/models/icd11_diagnosis.py:51 +msgid "Confirmed" +msgstr "ದೃಢಪಡಿಸಿದೆ" + +#: care/facility/models/icd11_diagnosis.py:52 +msgid "Refuted" +msgstr "ನಿರಾಕರಿಸಲಾಗಿದೆ" + +#: care/facility/models/patient.py:50 +msgid "Non-card holder" +msgstr "ಕಾರ್ಡ್ ಅಲ್ಲದ ಹೋಲ್ಡರ್" + +#: care/facility/models/patient.py:51 +msgid "BPL" +msgstr "ಬಿಪಿಎಲ್" + +#: care/facility/models/patient.py:52 +msgid "APL" +msgstr "ಎಪಿಎಲ್" + +#: care/facility/models/patient_base.py:88 +msgid "Unknown" +msgstr "ಅಜ್ಞಾತ" + +#: care/facility/models/patient_base.py:89 +msgid "Recovered" +msgstr "ಚೇತರಿಸಿಕೊಂಡಿದ್ದಾರೆ" + +#: care/facility/models/patient_base.py:90 +msgid "Referred" +msgstr "ಉಲ್ಲೇಖಿಸಲಾಗಿದೆ" + +#: care/facility/models/patient_base.py:91 +msgid "Expired" +msgstr "ಅವಧಿ ಮೀರಿದೆ" + +#: care/facility/models/patient_base.py:92 +msgid "LAMA" +msgstr "ಲಾಮಾ" + +#: care/facility/models/patient_base.py:127 +msgid "Outpatient/Emergency Room" +msgstr "ಹೊರರೋಗಿ/ತುರ್ತು ಕೊಠಡಿ" + +#: care/facility/models/patient_base.py:128 +msgid "Referred from another facility" +msgstr "ಮತ್ತೊಂದು ಸೌಲಭ್ಯದಿಂದ ಉಲ್ಲೇಖಿಸಲಾಗಿದೆ" + +#: care/facility/models/patient_base.py:129 +msgid "Internal Transfer within the facility" +msgstr "ಸೌಲಭ್ಯದೊಳಗೆ ಆಂತರಿಕ ವರ್ಗಾವಣೆ" + +#: care/facility/models/patient_base.py:130 +msgid "(Unknown)" +msgstr "(ಅಜ್ಞಾತ)" + +#: care/hcx/apps.py:7 +msgid "HCX Integration" +msgstr "HCX ಇಂಟಿಗ್ರೇಷನ್" + +#: care/templates/pages/home.html:8 +msgid "Open Healthcare Network" +msgstr "ಹೆಲ್ತ್‌ಕೇರ್ ನೆಟ್‌ವರ್ಕ್ ತೆರೆಯಿರಿ" + +#: care/templates/pages/home.html:9 +msgid "Our Goal is to defend the Healthcare system of Kerala from overloading beyond capacity." +msgstr "ಸಾಮರ್ಥ್ಯ ಮೀರಿದ ಓವರ್‌ಲೋಡ್‌ನಿಂದ ಕೇರಳದ ಆರೋಗ್ಯ ವ್ಯವಸ್ಥೆಯನ್ನು ರಕ್ಷಿಸುವುದು ನಮ್ಮ ಗುರಿಯಾಗಿದೆ." + +#: care/users/apps.py:7 +msgid "Users" +msgstr "ಬಳಕೆದಾರರು" + +#: care/users/forms.py:15 +msgid "This username has already been taken." +msgstr "ಈ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಈಗಾಗಲೇ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ." + +#: care/users/models.py:179 +msgid "username" +msgstr "ಬಳಕೆದಾರಹೆಸರು" + +#: care/users/models.py:184 +msgid "A user with that username already exists." +msgstr "ಆ ಬಳಕೆದಾರಹೆಸರನ್ನು ಹೊಂದಿರುವ ಬಳಕೆದಾರರು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದಾರೆ." + +#: care/users/reset_password_views.py:245 +msgid "There is no active user associated with this username or the password can not be changed" +msgstr "ಈ ಬಳಕೆದಾರಹೆಸರಿನೊಂದಿಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಯಾವುದೇ ಸಕ್ರಿಯ ಬಳಕೆದಾರರು ಇಲ್ಲ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ" + +#: care/utils/models/validators.py:54 +msgid "Username must be 4 to 16 characters long. It may only contain lowercase alphabets, numbers, underscores, hyphens and dots. It shouldn't start or end with underscores, hyphens or dots. It shouldn't contain consecutive underscores, hyphens or dots." +msgstr "ಬಳಕೆದಾರಹೆಸರು 4 ರಿಂದ 16 ಅಕ್ಷರಗಳ ಉದ್ದವಿರಬೇಕು. ಇದು ಸಣ್ಣ ಅಕ್ಷರಗಳು, ಸಂಖ್ಯೆಗಳು, ಅಂಡರ್‌ಸ್ಕೋರ್‌ಗಳು, ಹೈಫನ್‌ಗಳು ಮತ್ತು ಚುಕ್ಕೆಗಳನ್ನು ಮಾತ್ರ ಒಳಗೊಂಡಿರಬಹುದು. ಇದು ಅಂಡರ್‌ಸ್ಕೋರ್‌ಗಳು, ಹೈಫನ್‌ಗಳು ಅಥವಾ ಡಾಟ್‌ಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗಬಾರದು ಅಥವಾ ಕೊನೆಗೊಳ್ಳಬಾರದು. ಇದು ಸತತ ಅಂಡರ್‌ಸ್ಕೋರ್‌ಗಳು, ಹೈಫನ್‌ಗಳು ಅಥವಾ ಡಾಟ್‌ಗಳನ್ನು ಹೊಂದಿರಬಾರದು." + +#: care/utils/ulid/serializers.py:9 +#, python-brace-format +msgid "\"{value}\" is not a valid ULID." +msgstr "\"{value}\" ಮಾನ್ಯವಾದ ULID ಅಲ್ಲ." + +#: config/auth_views.py:19 +msgid "Too Many Requests Provide Captcha" +msgstr "ಹಲವಾರು ವಿನಂತಿಗಳು ಕ್ಯಾಪ್ಚಾವನ್ನು ಒದಗಿಸುತ್ತವೆ" + +#: config/auth_views.py:27 +msgid "No active account found with the given credentials" +msgstr "ನೀಡಿರುವ ರುಜುವಾತುಗಳೊಂದಿಗೆ ಯಾವುದೇ ಸಕ್ರಿಯ ಖಾತೆ ಕಂಡುಬಂದಿಲ್ಲ" + +#: config/authentication.py:141 +msgid "Authorization header must contain two space-delimited values" +msgstr "ದೃಢೀಕರಣ ಹೆಡರ್ ಎರಡು ಸ್ಪೇಸ್-ಡಿಲಿಮಿಟೆಡ್ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿರಬೇಕು" + +#: config/authentication.py:270 +msgid "Used for authenticating requests from the middleware. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "ಮಿಡಲ್‌ವೇರ್‌ನಿಂದ ವಿನಂತಿಗಳನ್ನು ದೃಢೀಕರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. X-Facility-Id ಹೆಡರ್‌ನಲ್ಲಿನ ಸೌಲಭ್ಯದ ಐಡಿ ಜೊತೆಗೆ ದೃಢೀಕರಣ ಹೆಡರ್‌ನಲ್ಲಿ ಮಾನ್ಯವಾದ JWT ಟೋಕನ್ ಸ್ಕೀಮ್‌ಗೆ ಅಗತ್ಯವಿದೆ. --ಮೌಲ್ಯ ಕ್ಷೇತ್ರವು ಪೂರ್ವವೀಕ್ಷಣೆಗಾಗಿ ಮಾತ್ರ, ಅದನ್ನು ಭರ್ತಿ ಮಾಡುವುದರಿಂದ ಅನುಮತಿಸಲಾದ ಅಂತಿಮ ಬಿಂದುಗಳನ್ನು ತೋರಿಸುತ್ತದೆ.--" + +#: config/authentication.py:289 +msgid "Used for authenticating requests from the middleware on behalf of assets. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "ಸ್ವತ್ತುಗಳ ಪರವಾಗಿ ಮಿಡಲ್‌ವೇರ್‌ನಿಂದ ವಿನಂತಿಗಳನ್ನು ದೃಢೀಕರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. X-Facility-Id ಹೆಡರ್‌ನಲ್ಲಿನ ಸೌಲಭ್ಯದ ಐಡಿ ಜೊತೆಗೆ ದೃಢೀಕರಣ ಹೆಡರ್‌ನಲ್ಲಿ ಮಾನ್ಯವಾದ JWT ಟೋಕನ್‌ನ ಅಗತ್ಯವಿದೆ. --ಮೌಲ್ಯ ಕ್ಷೇತ್ರವು ಪೂರ್ವವೀಕ್ಷಣೆಗಾಗಿ ಮಾತ್ರ, ಅದನ್ನು ಭರ್ತಿ ಮಾಡುವುದರಿಂದ ಅನುಮತಿಸಲಾದ ಅಂತಿಮ ಬಿಂದುಗಳನ್ನು ತೋರಿಸುತ್ತದೆ.--" + +#: config/authentication.py:306 config/authentication.py:320 +msgid "Do not use this scheme for production." +msgstr "ಉತ್ಪಾದನೆಗೆ ಈ ಯೋಜನೆಯನ್ನು ಬಳಸಬೇಡಿ." + +#: config/patient_otp_authentication.py:56 +msgid "Given token not valid for any token type" +msgstr "ನೀಡಿರುವ ಟೋಕನ್ ಯಾವುದೇ ಟೋಕನ್ ಪ್ರಕಾರಕ್ಕೆ ಮಾನ್ಯವಾಗಿಲ್ಲ" + +#: config/settings/base.py:60 +msgid "English" +msgstr "ಇಂಗ್ಲೀಷ್" + +#: config/settings/base.py:61 +msgid "Malayalam" +msgstr "ಮಲಯಾಳಂ" + +#: config/settings/base.py:62 +msgid "Hindi" +msgstr "ಹಿಂದಿ" + +#: config/settings/base.py:63 +msgid "Tamil" +msgstr "ತಮಿಳು" + +#: config/validators.py:12 +msgid "The password must contain at least 1 digit, 0-9." +msgstr "ಪಾಸ್ವರ್ಡ್ ಕನಿಷ್ಠ 1 ಅಂಕಿ, 0-9 ಅನ್ನು ಹೊಂದಿರಬೇಕು." + +#: config/validators.py:17 +msgid "Your password must contain at least 1 digit, 0-9." +msgstr "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಕನಿಷ್ಠ 1 ಅಂಕಿಯನ್ನು ಹೊಂದಿರಬೇಕು, 0-9." + +#: config/validators.py:24 +msgid "The password must contain at least 1 uppercase letter, A-Z." +msgstr "ಪಾಸ್ವರ್ಡ್ ಕನಿಷ್ಠ 1 ದೊಡ್ಡಕ್ಷರವನ್ನು ಹೊಂದಿರಬೇಕು, AZ." + +#: config/validators.py:29 +msgid "Your password must contain at least 1 uppercase letter, A-Z." +msgstr "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಕನಿಷ್ಟ 1 ದೊಡ್ಡಕ್ಷರ ಅಕ್ಷರವನ್ನು ಹೊಂದಿರಬೇಕು, AZ." + +#: config/validators.py:36 +msgid "The password must contain at least 1 lowercase letter, a-z." +msgstr "ಪಾಸ್ವರ್ಡ್ ಕನಿಷ್ಠ 1 ಸಣ್ಣ ಅಕ್ಷರವನ್ನು ಹೊಂದಿರಬೇಕು, az." + +#: config/validators.py:41 +msgid "Your password must contain at least 1 lowercase letter, a-z." +msgstr "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಕನಿಷ್ಠ 1 ಸಣ್ಣ ಅಕ್ಷರವನ್ನು ಹೊಂದಿರಬೇಕು, az." + +#: config/validators.py:49 +msgid "The password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "ಪಾಸ್ವರ್ಡ್ ಕನಿಷ್ಠ 1 ಚಿಹ್ನೆಯನ್ನು ಹೊಂದಿರಬೇಕು: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" + +#: config/validators.py:57 +msgid "Your password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಕನಿಷ್ಠ 1 ಚಿಹ್ನೆಯನ್ನು ಹೊಂದಿರಬೇಕು: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" + +#: config/validators.py:66 +msgid "The domain name is invalid. It should not start with scheme and should not end with a trailing slash." +msgstr "ಡೊಮೇನ್ ಹೆಸರು ಅಮಾನ್ಯವಾಗಿದೆ. ಇದು ಸ್ಕೀಮ್‌ನೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗಬಾರದು ಮತ್ತು ಟ್ರೇಲಿಂಗ್ ಸ್ಲ್ಯಾಷ್‌ನೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳಬಾರದು." + diff --git a/locale/ml/LC_MESSAGES/django.po b/locale/ml/LC_MESSAGES/django.po index e71486fc84..432ca296f8 100644 --- a/locale/ml/LC_MESSAGES/django.po +++ b/locale/ml/LC_MESSAGES/django.po @@ -1,255 +1,233 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: ohccarefe\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-25 17:02+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"PO-Revision-Date: 2024-09-16 10:58\n" +"Last-Translator: \n" +"Language-Team: Malayalam\n" +"Language: ml_IN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: ohccarefe\n" +"X-Crowdin-Project-ID: 704503\n" +"X-Crowdin-Language: ml-IN\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 70\n" #: care/abdm/apps.py:7 msgid "ABDM Integration" -msgstr "" +msgstr "എബിഡിഎം ഇൻ്റഗ്രേഷൻ" #: care/audit_log/apps.py:7 msgid "Audit Log Management" -msgstr "" +msgstr "ഓഡിറ്റ് ലോഗ് മാനേജ്മെൻ്റ്" #: care/facility/apps.py:7 msgid "Facility Management" -msgstr "" +msgstr "ഫെസിലിറ്റി മാനേജ്മെൻ്റ്" #: care/facility/models/encounter_symptom.py:16 msgid "In Progress" -msgstr "" +msgstr "പുരോഗതിയിൽ" #: care/facility/models/encounter_symptom.py:17 msgid "Completed" -msgstr "" +msgstr "പൂർത്തിയാക്കി" #: care/facility/models/encounter_symptom.py:18 #: care/facility/models/icd11_diagnosis.py:53 msgid "Entered in Error" -msgstr "" +msgstr "പിശകിൽ പ്രവേശിച്ചു" #: care/facility/models/icd11_diagnosis.py:48 msgid "Unconfirmed" -msgstr "" +msgstr "സ്ഥിരീകരിച്ചിട്ടില്ല" #: care/facility/models/icd11_diagnosis.py:49 msgid "Provisional" -msgstr "" +msgstr "താൽക്കാലികം" #: care/facility/models/icd11_diagnosis.py:50 msgid "Differential" -msgstr "" +msgstr "ഡിഫറൻഷ്യൽ" #: care/facility/models/icd11_diagnosis.py:51 msgid "Confirmed" -msgstr "" +msgstr "സ്ഥിരീകരിച്ചു" #: care/facility/models/icd11_diagnosis.py:52 msgid "Refuted" -msgstr "" +msgstr "നിഷേധിച്ചു" #: care/facility/models/patient.py:50 msgid "Non-card holder" -msgstr "" +msgstr "നോൺ-കാർഡ് ഹോൾഡർ" #: care/facility/models/patient.py:51 msgid "BPL" -msgstr "" +msgstr "ബി.പി.എൽ" #: care/facility/models/patient.py:52 msgid "APL" -msgstr "" +msgstr "എ.പി.എൽ" #: care/facility/models/patient_base.py:88 msgid "Unknown" -msgstr "" +msgstr "അജ്ഞാതം" #: care/facility/models/patient_base.py:89 msgid "Recovered" -msgstr "" +msgstr "വീണ്ടെടുത്തു" #: care/facility/models/patient_base.py:90 msgid "Referred" -msgstr "" +msgstr "പരാമർശിച്ചു" #: care/facility/models/patient_base.py:91 msgid "Expired" -msgstr "" +msgstr "കാലഹരണപ്പെട്ടു" #: care/facility/models/patient_base.py:92 msgid "LAMA" -msgstr "" +msgstr "ലാമ" #: care/facility/models/patient_base.py:127 msgid "Outpatient/Emergency Room" -msgstr "" +msgstr "ഔട്ട്പേഷ്യൻ്റ്/അടിയന്തര മുറി" #: care/facility/models/patient_base.py:128 msgid "Referred from another facility" -msgstr "" +msgstr "മറ്റൊരു സൗകര്യത്തിൽ നിന്ന് റഫർ ചെയ്തു" #: care/facility/models/patient_base.py:129 msgid "Internal Transfer within the facility" -msgstr "" +msgstr "സൗകര്യത്തിനുള്ളിൽ ആന്തരിക കൈമാറ്റം" #: care/facility/models/patient_base.py:130 msgid "(Unknown)" -msgstr "" +msgstr "(അജ്ഞാതം)" #: care/hcx/apps.py:7 msgid "HCX Integration" -msgstr "" +msgstr "HCX ഇൻ്റഗ്രേഷൻ" #: care/templates/pages/home.html:8 msgid "Open Healthcare Network" msgstr "ആരോഗ്യ സംരക്ഷണ ശൃംഖല" #: care/templates/pages/home.html:9 -msgid "" -"Our Goal is to defend the Healthcare system of Kerala from overloading " -"beyond capacity." -msgstr "" +msgid "Our Goal is to defend the Healthcare system of Kerala from overloading beyond capacity." +msgstr "ശേഷിക്കപ്പുറമുള്ള അമിതഭാരത്തിൽ നിന്ന് കേരളത്തിൻ്റെ ആരോഗ്യസംരക്ഷണ സംവിധാനത്തെ പ്രതിരോധിക്കുക എന്നതാണ് ഞങ്ങളുടെ ലക്ഷ്യം." #: care/users/apps.py:7 msgid "Users" -msgstr "" +msgstr "ഉപയോക്താക്കൾ" #: care/users/forms.py:15 msgid "This username has already been taken." -msgstr "" +msgstr "ഈ ഉപയോക്തൃനാമം ഇതിനകം എടുത്തതാണ്." #: care/users/models.py:179 msgid "username" -msgstr "" +msgstr "ഉപയോക്തൃനാമം" #: care/users/models.py:184 msgid "A user with that username already exists." -msgstr "" +msgstr "ആ ഉപയോക്തൃനാമമുള്ള ഒരു ഉപയോക്താവ് ഇതിനകം നിലവിലുണ്ട്." #: care/users/reset_password_views.py:245 -msgid "" -"There is no active user associated with this username or the password can " -"not be changed" -msgstr "" +msgid "There is no active user associated with this username or the password can not be changed" +msgstr "ഈ ഉപയോക്തൃനാമവുമായി ബന്ധപ്പെട്ട സജീവ ഉപയോക്താവ് ഇല്ല അല്ലെങ്കിൽ പാസ്‌വേഡ് മാറ്റാൻ കഴിയില്ല" #: care/utils/models/validators.py:54 -msgid "" -"Username must be 4 to 16 characters long. It may only contain lowercase " -"alphabets, numbers, underscores, hyphens and dots. It shouldn't start or end " -"with underscores, hyphens or dots. It shouldn't contain consecutive " -"underscores, hyphens or dots." -msgstr "" +msgid "Username must be 4 to 16 characters long. It may only contain lowercase alphabets, numbers, underscores, hyphens and dots. It shouldn't start or end with underscores, hyphens or dots. It shouldn't contain consecutive underscores, hyphens or dots." +msgstr "ഉപയോക്തൃനാമം 4 മുതൽ 16 വരെ പ്രതീകങ്ങൾ ആയിരിക്കണം. അതിൽ ചെറിയ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അടിവരകൾ, ഹൈഫനുകൾ, ഡോട്ടുകൾ എന്നിവ മാത്രമേ അടങ്ങിയിട്ടുള്ളൂ. ഇത് അടിവരകളോ ഹൈഫനുകളോ ഡോട്ടുകളോ ഉപയോഗിച്ച് ആരംഭിക്കുകയോ അവസാനിക്കുകയോ ചെയ്യരുത്. അതിൽ തുടർച്ചയായ അടിവരകളോ ഹൈഫനുകളോ ഡോട്ടുകളോ അടങ്ങിയിരിക്കരുത്." #: care/utils/ulid/serializers.py:9 #, python-brace-format msgid "\"{value}\" is not a valid ULID." -msgstr "" +msgstr "\"{value}\" ഒരു സാധുവായ ULID അല്ല." #: config/auth_views.py:19 msgid "Too Many Requests Provide Captcha" -msgstr "" +msgstr "വളരെയധികം അഭ്യർത്ഥനകൾ ക്യാപ്‌ച നൽകുന്നു" #: config/auth_views.py:27 msgid "No active account found with the given credentials" -msgstr "" +msgstr "നൽകിയിരിക്കുന്ന ക്രെഡൻഷ്യലുകൾക്കൊപ്പം സജീവ അക്കൗണ്ടുകളൊന്നും കണ്ടെത്തിയില്ല" #: config/authentication.py:141 msgid "Authorization header must contain two space-delimited values" -msgstr "" +msgstr "അംഗീകൃത തലക്കെട്ടിൽ രണ്ട് സ്‌പെയ്‌സ് ഡിലിമിറ്റഡ് മൂല്യങ്ങൾ അടങ്ങിയിരിക്കണം" #: config/authentication.py:270 -msgid "" -"Used for authenticating requests from the middleware. The scheme requires a " -"valid JWT token in the Authorization header along with the facility id in " -"the X-Facility-Id header. --The value field is just for preview, filling it " -"will show allowed endpoints.--" -msgstr "" +msgid "Used for authenticating requests from the middleware. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "മിഡിൽവെയറിൽ നിന്നുള്ള അഭ്യർത്ഥനകൾ പ്രാമാണീകരിക്കുന്നതിന് ഉപയോഗിക്കുന്നു. സ്കീമിന്, എക്സ്-ഫെസിലിറ്റി-ഐഡി ഹെഡറിലെ ഫെസിലിറ്റി ഐഡിയ്‌ക്കൊപ്പം ഓതറൈസേഷൻ ഹെഡറിൽ സാധുവായ JWT ടോക്കൺ ആവശ്യമാണ്. --മൂല്യ ഫീൽഡ് പ്രിവ്യൂവിനുള്ളതാണ്, അത് പൂരിപ്പിക്കുന്നത് അനുവദനീയമായ എൻഡ് പോയിൻ്റുകൾ കാണിക്കും.--" #: config/authentication.py:289 -msgid "" -"Used for authenticating requests from the middleware on behalf of assets. " -"The scheme requires a valid JWT token in the Authorization header along with " -"the facility id in the X-Facility-Id header. --The value field is just for " -"preview, filling it will show allowed endpoints.--" -msgstr "" +msgid "Used for authenticating requests from the middleware on behalf of assets. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "അസറ്റുകൾക്ക് വേണ്ടി മിഡിൽവെയറിൽ നിന്നുള്ള അഭ്യർത്ഥനകൾ പ്രാമാണീകരിക്കുന്നതിന് ഉപയോഗിക്കുന്നു. സ്കീമിന്, എക്സ്-ഫെസിലിറ്റി-ഐഡി ഹെഡറിലെ ഫെസിലിറ്റി ഐഡിയ്‌ക്കൊപ്പം ഓതറൈസേഷൻ ഹെഡറിൽ സാധുവായ JWT ടോക്കൺ ആവശ്യമാണ്. --മൂല്യ ഫീൽഡ് പ്രിവ്യൂവിനുള്ളതാണ്, അത് പൂരിപ്പിക്കുന്നത് അനുവദനീയമായ അവസാന പോയിൻ്റുകൾ കാണിക്കും.--" #: config/authentication.py:306 config/authentication.py:320 msgid "Do not use this scheme for production." -msgstr "" +msgstr "ഉത്പാദനത്തിനായി ഈ സ്കീം ഉപയോഗിക്കരുത്." #: config/patient_otp_authentication.py:56 msgid "Given token not valid for any token type" -msgstr "" +msgstr "നൽകിയിരിക്കുന്ന ടോക്കൺ ഏതെങ്കിലും ടോക്കൺ തരത്തിന് സാധുതയുള്ളതല്ല" #: config/settings/base.py:60 msgid "English" -msgstr "" +msgstr "ഇംഗ്ലീഷ്" #: config/settings/base.py:61 msgid "Malayalam" -msgstr "" +msgstr "മലയാളം" #: config/settings/base.py:62 msgid "Hindi" -msgstr "" +msgstr "ഹിന്ദി" #: config/settings/base.py:63 msgid "Tamil" -msgstr "" +msgstr "തമിഴ്" #: config/validators.py:12 msgid "The password must contain at least 1 digit, 0-9." -msgstr "" +msgstr "പാസ്‌വേഡിൽ കുറഞ്ഞത് 0-9 അക്കമെങ്കിലും ഉണ്ടായിരിക്കണം." #: config/validators.py:17 msgid "Your password must contain at least 1 digit, 0-9." -msgstr "" +msgstr "നിങ്ങളുടെ പാസ്‌വേഡിൽ കുറഞ്ഞത് 0-9 അക്കമെങ്കിലും ഉണ്ടായിരിക്കണം." #: config/validators.py:24 msgid "The password must contain at least 1 uppercase letter, A-Z." -msgstr "" +msgstr "പാസ്‌വേഡിൽ കുറഞ്ഞത് 1 വലിയക്ഷരമായ AZ ഉണ്ടായിരിക്കണം." #: config/validators.py:29 msgid "Your password must contain at least 1 uppercase letter, A-Z." -msgstr "" +msgstr "നിങ്ങളുടെ പാസ്‌വേഡിൽ കുറഞ്ഞത് 1 വലിയക്ഷരമായ AZ ഉണ്ടായിരിക്കണം." #: config/validators.py:36 msgid "The password must contain at least 1 lowercase letter, a-z." -msgstr "" +msgstr "പാസ്‌വേഡിൽ കുറഞ്ഞത് 1 ചെറിയക്ഷരമെങ്കിലും അടങ്ങിയിരിക്കണം, az." #: config/validators.py:41 msgid "Your password must contain at least 1 lowercase letter, a-z." -msgstr "" +msgstr "നിങ്ങളുടെ പാസ്‌വേഡിൽ കുറഞ്ഞത് 1 ചെറിയക്ഷരമെങ്കിലും അടങ്ങിയിരിക്കണം, az." #: config/validators.py:49 -msgid "" -"The password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\"," -"<>./?" -msgstr "" +msgid "The password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "പാസ്‌വേഡിൽ കുറഞ്ഞത് 1 ചിഹ്നമെങ്കിലും അടങ്ങിയിരിക്കണം: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" #: config/validators.py:57 -msgid "" -"Your password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\"," -"<>./?" -msgstr "" +msgid "Your password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "നിങ്ങളുടെ പാസ്‌വേഡിൽ കുറഞ്ഞത് 1 ചിഹ്നമെങ്കിലും അടങ്ങിയിരിക്കണം: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" #: config/validators.py:66 -msgid "" -"The domain name is invalid. It should not start with scheme and should not " -"end with a trailing slash." -msgstr "" +msgid "The domain name is invalid. It should not start with scheme and should not end with a trailing slash." +msgstr "ഡൊമെയ്ൻ നാമം അസാധുവാണ്. ഇത് സ്കീമിൽ ആരംഭിക്കരുത്, ഒരു ട്രെയിലിംഗ് സ്ലാഷിൽ അവസാനിക്കരുത്." + diff --git a/locale/ta/LC_MESSAGES/django.po b/locale/ta/LC_MESSAGES/django.po index d9eb9fd2d9..ad237a7acd 100644 --- a/locale/ta/LC_MESSAGES/django.po +++ b/locale/ta/LC_MESSAGES/django.po @@ -1,255 +1,233 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: ohccarefe\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-25 17:02+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"PO-Revision-Date: 2024-09-16 10:57\n" +"Last-Translator: \n" +"Language-Team: Tamil\n" +"Language: ta_IN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: ohccarefe\n" +"X-Crowdin-Project-ID: 704503\n" +"X-Crowdin-Language: ta\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 70\n" #: care/abdm/apps.py:7 msgid "ABDM Integration" -msgstr "" +msgstr "ABDM ஒருங்கிணைப்பு" #: care/audit_log/apps.py:7 msgid "Audit Log Management" -msgstr "" +msgstr "தணிக்கை பதிவு மேலாண்மை" #: care/facility/apps.py:7 msgid "Facility Management" -msgstr "" +msgstr "வசதி மேலாண்மை" #: care/facility/models/encounter_symptom.py:16 msgid "In Progress" -msgstr "" +msgstr "செயல்பாட்டில் உள்ளது" #: care/facility/models/encounter_symptom.py:17 msgid "Completed" -msgstr "" +msgstr "முடிக்கப்பட்டது" #: care/facility/models/encounter_symptom.py:18 #: care/facility/models/icd11_diagnosis.py:53 msgid "Entered in Error" -msgstr "" +msgstr "பிழையில் நுழைந்தது" #: care/facility/models/icd11_diagnosis.py:48 msgid "Unconfirmed" -msgstr "" +msgstr "உறுதி செய்யப்படவில்லை" #: care/facility/models/icd11_diagnosis.py:49 msgid "Provisional" -msgstr "" +msgstr "தற்காலிகமானது" #: care/facility/models/icd11_diagnosis.py:50 msgid "Differential" -msgstr "" +msgstr "வித்தியாசமான" #: care/facility/models/icd11_diagnosis.py:51 msgid "Confirmed" -msgstr "" +msgstr "உறுதி செய்யப்பட்டது" #: care/facility/models/icd11_diagnosis.py:52 msgid "Refuted" -msgstr "" +msgstr "மறுத்தார்" #: care/facility/models/patient.py:50 msgid "Non-card holder" -msgstr "" +msgstr "அட்டை இல்லாதவர்" #: care/facility/models/patient.py:51 msgid "BPL" -msgstr "" +msgstr "பிபிஎல்" #: care/facility/models/patient.py:52 msgid "APL" -msgstr "" +msgstr "ஏபிஎல்" #: care/facility/models/patient_base.py:88 msgid "Unknown" -msgstr "" +msgstr "தெரியவில்லை" #: care/facility/models/patient_base.py:89 msgid "Recovered" -msgstr "" +msgstr "மீட்கப்பட்டது" #: care/facility/models/patient_base.py:90 msgid "Referred" -msgstr "" +msgstr "குறிப்பிடப்பட்டுள்ளது" #: care/facility/models/patient_base.py:91 msgid "Expired" -msgstr "" +msgstr "காலாவதியானது" #: care/facility/models/patient_base.py:92 msgid "LAMA" -msgstr "" +msgstr "லாமா" #: care/facility/models/patient_base.py:127 msgid "Outpatient/Emergency Room" -msgstr "" +msgstr "வெளிநோயாளர்/அவசர அறை" #: care/facility/models/patient_base.py:128 msgid "Referred from another facility" -msgstr "" +msgstr "மற்றொரு வசதியிலிருந்து பரிந்துரைக்கப்பட்டது" #: care/facility/models/patient_base.py:129 msgid "Internal Transfer within the facility" -msgstr "" +msgstr "வசதிக்குள் உள் பரிமாற்றம்" #: care/facility/models/patient_base.py:130 msgid "(Unknown)" -msgstr "" +msgstr "(தெரியாது)" #: care/hcx/apps.py:7 msgid "HCX Integration" -msgstr "" +msgstr "HCX ஒருங்கிணைப்பு" #: care/templates/pages/home.html:8 msgid "Open Healthcare Network" -msgstr "" +msgstr "ஹெல்த்கேர் நெட்வொர்க்கைத் திறக்கவும்" #: care/templates/pages/home.html:9 -msgid "" -"Our Goal is to defend the Healthcare system of Kerala from overloading " -"beyond capacity." -msgstr "" +msgid "Our Goal is to defend the Healthcare system of Kerala from overloading beyond capacity." +msgstr "எங்களின் இலக்கு, கேரளாவின் ஹெல்த்கேர் சிஸ்டத்தை திறனுக்கு அப்பால் அதிக சுமைகளில் இருந்து பாதுகாப்பதாகும்." #: care/users/apps.py:7 msgid "Users" -msgstr "" +msgstr "பயனர்கள்" #: care/users/forms.py:15 msgid "This username has already been taken." -msgstr "" +msgstr "இந்த பயனர் பெயர் ஏற்கனவே எடுக்கப்பட்டது." #: care/users/models.py:179 msgid "username" -msgstr "" +msgstr "பயனர் பெயர்" #: care/users/models.py:184 msgid "A user with that username already exists." -msgstr "" +msgstr "அந்த பயனர்பெயருடன் ஏற்கனவே ஒரு பயனர் இருக்கிறார்." #: care/users/reset_password_views.py:245 -msgid "" -"There is no active user associated with this username or the password can " -"not be changed" -msgstr "" +msgid "There is no active user associated with this username or the password can not be changed" +msgstr "இந்த பயனர்பெயருடன் தொடர்புடைய செயலில் உள்ள பயனர் யாரும் இல்லை அல்லது கடவுச்சொல்லை மாற்ற முடியாது" #: care/utils/models/validators.py:54 -msgid "" -"Username must be 4 to 16 characters long. It may only contain lowercase " -"alphabets, numbers, underscores, hyphens and dots. It shouldn't start or end " -"with underscores, hyphens or dots. It shouldn't contain consecutive " -"underscores, hyphens or dots." -msgstr "" +msgid "Username must be 4 to 16 characters long. It may only contain lowercase alphabets, numbers, underscores, hyphens and dots. It shouldn't start or end with underscores, hyphens or dots. It shouldn't contain consecutive underscores, hyphens or dots." +msgstr "பயனர் பெயர் 4 முதல் 16 எழுத்துகள் வரை இருக்க வேண்டும். இதில் சிறிய எழுத்துக்கள், எண்கள், அடிக்கோடிட்டுகள், ஹைபன்கள் மற்றும் புள்ளிகள் மட்டுமே இருக்கலாம். இது அடிக்கோடிட்டுகள், ஹைபன்கள் அல்லது புள்ளிகளுடன் தொடங்கவோ முடிவோ கூடாது. இதில் தொடர்ச்சியான அடிக்கோடிகள், ஹைபன்கள் அல்லது புள்ளிகள் இருக்கக்கூடாது." #: care/utils/ulid/serializers.py:9 #, python-brace-format msgid "\"{value}\" is not a valid ULID." -msgstr "" +msgstr "\"{value}\" என்பது சரியான ULID அல்ல." #: config/auth_views.py:19 msgid "Too Many Requests Provide Captcha" -msgstr "" +msgstr "பல கோரிக்கைகள் கேப்ட்சாவை வழங்குகின்றன" #: config/auth_views.py:27 msgid "No active account found with the given credentials" -msgstr "" +msgstr "கொடுக்கப்பட்ட நற்சான்றிதழ்களுடன் செயலில் உள்ள கணக்கு எதுவும் இல்லை" #: config/authentication.py:141 msgid "Authorization header must contain two space-delimited values" -msgstr "" +msgstr "அங்கீகரிப்பு தலைப்பு இரண்டு இடைவெளி-பிரிக்கப்பட்ட மதிப்புகளைக் கொண்டிருக்க வேண்டும்" #: config/authentication.py:270 -msgid "" -"Used for authenticating requests from the middleware. The scheme requires a " -"valid JWT token in the Authorization header along with the facility id in " -"the X-Facility-Id header. --The value field is just for preview, filling it " -"will show allowed endpoints.--" -msgstr "" +msgid "Used for authenticating requests from the middleware. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "மிடில்வேரில் இருந்து கோரிக்கைகளை அங்கீகரிக்கப் பயன்படுகிறது. இந்தத் திட்டத்திற்கு, X-Facility-Id தலைப்பில் உள்ள வசதி ஐடியுடன் அங்கீகாரத் தலைப்பில் சரியான JWT டோக்கன் தேவை. --மதிப்பு புலமானது முன்னோட்டத்திற்கானது, அதை நிரப்பினால் அனுமதிக்கப்பட்ட இறுதிப்புள்ளிகள் காண்பிக்கப்படும்.--" #: config/authentication.py:289 -msgid "" -"Used for authenticating requests from the middleware on behalf of assets. " -"The scheme requires a valid JWT token in the Authorization header along with " -"the facility id in the X-Facility-Id header. --The value field is just for " -"preview, filling it will show allowed endpoints.--" -msgstr "" +msgid "Used for authenticating requests from the middleware on behalf of assets. The scheme requires a valid JWT token in the Authorization header along with the facility id in the X-Facility-Id header. --The value field is just for preview, filling it will show allowed endpoints.--" +msgstr "சொத்துகளின் சார்பாக மிடில்வேரிலிருந்து கோரிக்கைகளை அங்கீகரிக்கப் பயன்படுகிறது. இந்தத் திட்டத்திற்கு, X-Facility-Id தலைப்பில் உள்ள வசதி ஐடியுடன் அங்கீகாரத் தலைப்பில் சரியான JWT டோக்கன் தேவை. --மதிப்பு புலமானது முன்னோட்டத்திற்கானது, அதை நிரப்பினால் அனுமதிக்கப்பட்ட இறுதிப்புள்ளிகள் காண்பிக்கப்படும்.--" #: config/authentication.py:306 config/authentication.py:320 msgid "Do not use this scheme for production." -msgstr "" +msgstr "இந்த திட்டத்தை உற்பத்திக்கு பயன்படுத்த வேண்டாம்." #: config/patient_otp_authentication.py:56 msgid "Given token not valid for any token type" -msgstr "" +msgstr "கொடுக்கப்பட்ட டோக்கன் எந்த டோக்கன் வகைக்கும் செல்லாது" #: config/settings/base.py:60 msgid "English" -msgstr "" +msgstr "ஆங்கிலம்" #: config/settings/base.py:61 msgid "Malayalam" -msgstr "" +msgstr "மலையாளம்" #: config/settings/base.py:62 msgid "Hindi" -msgstr "" +msgstr "ஹிந்தி" #: config/settings/base.py:63 msgid "Tamil" -msgstr "" +msgstr "தமிழ்" #: config/validators.py:12 msgid "The password must contain at least 1 digit, 0-9." -msgstr "" +msgstr "கடவுச்சொல்லில் குறைந்தது 1 இலக்கம், 0-9 இருக்க வேண்டும்." #: config/validators.py:17 msgid "Your password must contain at least 1 digit, 0-9." -msgstr "" +msgstr "உங்கள் கடவுச்சொல்லில் குறைந்தது 1 இலக்கம், 0-9 இருக்க வேண்டும்." #: config/validators.py:24 msgid "The password must contain at least 1 uppercase letter, A-Z." -msgstr "" +msgstr "கடவுச்சொல்லில் குறைந்தது 1 பெரிய எழுத்து AZ இருக்க வேண்டும்." #: config/validators.py:29 msgid "Your password must contain at least 1 uppercase letter, A-Z." -msgstr "" +msgstr "உங்கள் கடவுச்சொல்லில் குறைந்தது 1 பெரிய எழுத்து AZ இருக்க வேண்டும்." #: config/validators.py:36 msgid "The password must contain at least 1 lowercase letter, a-z." -msgstr "" +msgstr "கடவுச்சொல்லில் குறைந்தது 1 சிற்றெழுத்து இருக்க வேண்டும், az." #: config/validators.py:41 msgid "Your password must contain at least 1 lowercase letter, a-z." -msgstr "" +msgstr "உங்கள் கடவுச்சொல்லில் குறைந்தது 1 சிற்றெழுத்து இருக்க வேண்டும், az." #: config/validators.py:49 -msgid "" -"The password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\"," -"<>./?" -msgstr "" +msgid "The password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "கடவுச்சொல்லில் குறைந்தது 1 குறியீடு இருக்க வேண்டும்: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" #: config/validators.py:57 -msgid "" -"Your password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\"," -"<>./?" -msgstr "" +msgid "Your password must contain at least 1 symbol: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" +msgstr "உங்கள் கடவுச்சொல்லில் குறைந்தது 1 சின்னம் இருக்க வேண்டும்: ()[]{}|\\`~!@#$%^&*_-+=;:'\\\",<>./?" #: config/validators.py:66 -msgid "" -"The domain name is invalid. It should not start with scheme and should not " -"end with a trailing slash." -msgstr "" +msgid "The domain name is invalid. It should not start with scheme and should not end with a trailing slash." +msgstr "டொமைன் பெயர் தவறானது. இது திட்டத்துடன் தொடங்கக்கூடாது மற்றும் பின்னோக்கி சாய்வுடன் முடிவடையக்கூடாது." + From fa64e18bcdfa15e96913dd86ea34232dad05a41e Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Mon, 16 Sep 2024 21:30:08 +0530 Subject: [PATCH 3/8] Do not allow future log update taken_at time (#2447) * Do not allow future log update taken_at time * Check for null * added tests * cleanup --- care/facility/api/serializers/daily_round.py | 6 ++++++ .../facility/tests/test_patient_daily_rounds_api.py | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/care/facility/api/serializers/daily_round.py b/care/facility/api/serializers/daily_round.py index 46fea14d05..4cf296706f 100644 --- a/care/facility/api/serializers/daily_round.py +++ b/care/facility/api/serializers/daily_round.py @@ -1,6 +1,7 @@ from datetime import timedelta from django.db import transaction +from django.utils import timezone from django.utils.timezone import localtime, now from rest_framework import serializers from rest_framework.exceptions import ValidationError @@ -295,3 +296,8 @@ def validate(self, attrs): validated["bed_id"] = bed_object.id return validated + + def validate_taken_at(self, value): + if value and value > timezone.now(): + raise serializers.ValidationError("Cannot create an update in the future") + return value diff --git a/care/facility/tests/test_patient_daily_rounds_api.py b/care/facility/tests/test_patient_daily_rounds_api.py index 5145e4827e..3312a87dbc 100644 --- a/care/facility/tests/test_patient_daily_rounds_api.py +++ b/care/facility/tests/test_patient_daily_rounds_api.py @@ -1,5 +1,7 @@ import datetime +from datetime import timedelta +from django.utils import timezone from rest_framework import status from rest_framework.test import APITestCase @@ -126,3 +128,14 @@ def test_doctors_log_update(self): data={**self.log_update, "rounds_type": "DOCTORS_LOG"}, ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + def test_invalid_taken_at(self): + data = { + **self.log_update, + "taken_at": timezone.now() + timedelta(minutes=5), + } + response = self.client.post( + f"/api/v1/consultation/{self.consultation_with_bed.external_id}/daily_rounds/", + data, + ) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) From 0a630f1fa247e0e77bae0908bb6dd64b8a2550e7 Mon Sep 17 00:00:00 2001 From: Khavin Shankar Date: Tue, 17 Sep 2024 11:43:17 +0530 Subject: [PATCH 4/8] Fixed ABHA linking issue (#2456) --- care/abdm/api/serializers/healthid.py | 5 +++ care/abdm/api/viewsets/abha_number.py | 2 +- care/abdm/api/viewsets/healthid.py | 60 +++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/care/abdm/api/serializers/healthid.py b/care/abdm/api/serializers/healthid.py index aa2b7cc1fd..2c1910b823 100644 --- a/care/abdm/api/serializers/healthid.py +++ b/care/abdm/api/serializers/healthid.py @@ -59,3 +59,8 @@ class CreateHealthIdSerializer(Serializer): healthId = CharField(max_length=64, min_length=1, required=False) txnId = CharField(max_length=64, min_length=1, required=True) patientId = UUIDField(required=False) + + +class LinkPatientSerializer(Serializer): + abha_number = UUIDField(required=True) + patient = UUIDField(required=True) diff --git a/care/abdm/api/viewsets/abha_number.py b/care/abdm/api/viewsets/abha_number.py index 5fd2cb8984..eae53df9c5 100644 --- a/care/abdm/api/viewsets/abha_number.py +++ b/care/abdm/api/viewsets/abha_number.py @@ -28,7 +28,7 @@ def get_object(self): Q(abha_number=id) | Q(health_id=id) | Q(patient__external_id=id) ).first() - if not instance or get_patient_queryset(self.request.user).contains( + if not instance or not get_patient_queryset(self.request.user).contains( instance.patient ): raise Http404 diff --git a/care/abdm/api/viewsets/healthid.py b/care/abdm/api/viewsets/healthid.py index 3a280503be..e435c1614f 100644 --- a/care/abdm/api/viewsets/healthid.py +++ b/care/abdm/api/viewsets/healthid.py @@ -20,6 +20,7 @@ GenerateMobileOtpRequestPayloadSerializer, HealthIdAuthSerializer, HealthIdSerializer, + LinkPatientSerializer, QRContentSerializer, VerifyDemographicsRequestPayloadSerializer, VerifyOtpRequestPayloadSerializer, @@ -415,6 +416,65 @@ def link_via_qr(self, request): status=status.HTTP_200_OK, ) + @extend_schema( + operation_id="search_by_health_id", + request=LinkPatientSerializer, + tags=["ABDM HealthID"], + ) + @action(detail=False, methods=["post"]) + def link_patient(self, request): + data = request.data + + serializer = LinkPatientSerializer(data=data) + serializer.is_valid(raise_exception=True) + + patient_queryset = get_patient_queryset(request.user) + patient = patient_queryset.filter(external_id=data.get("patient")).first() + + if not patient: + return Response( + { + "detail": "Patient not found or you do not have permission to access the patient", + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + if hasattr(patient, "abha_number"): + return Response( + { + "detail": "Patient already linked to an ABHA Number", + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + abha_number = AbhaNumber.objects.filter( + external_id=data.get("abha_number") + ).first() + + if not abha_number: + return Response( + { + "detail": "ABHA Number not found", + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + if abha_number.patient is not None: + return Response( + { + "detail": "ABHA Number already linked to a patient", + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + abha_number.patient = patient + abha_number.save() + + return Response( + AbhaNumberSerializer(abha_number).data, + status=status.HTTP_200_OK, + ) + @extend_schema( operation_id="get_new_linking_token", responses={"200": "{'status': 'boolean'}"}, From e48887d687b6edf1c09152b9a9e1c2346c2057a1 Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Wed, 18 Sep 2024 15:38:30 +0530 Subject: [PATCH 5/8] Adds necessary fields for Community Nurse's log update (#2448) * Adds fields for Community Nurses log update * add event types and fixes bladder issue choices * Add tests * switch to integer choices * switch to using `.choices` instead of manually generating choices * update event types and field name --- care/facility/api/serializers/daily_round.py | 21 +++ .../management/commands/load_event_types.py | 20 +++ ...te_dailyround_bladder_drainage_and_more.py | 144 ++++++++++++++++++ care/facility/models/daily_round.py | 80 ++++++++++ .../tests/test_patient_daily_rounds_api.py | 18 +++ 5 files changed, 283 insertions(+) create mode 100644 care/facility/migrations/0456_dailyround_appetite_dailyround_bladder_drainage_and_more.py diff --git a/care/facility/api/serializers/daily_round.py b/care/facility/api/serializers/daily_round.py index 4cf296706f..4f2f61c32b 100644 --- a/care/facility/api/serializers/daily_round.py +++ b/care/facility/api/serializers/daily_round.py @@ -41,6 +41,27 @@ class DailyRoundSerializer(serializers.ModelSerializer): rounds_type = ChoiceField(choices=DailyRound.RoundsTypeChoice, required=True) + # Community Nurse's Log + + bowel_issue = ChoiceField( + choices=DailyRound.BowelDifficultyType.choices, required=False + ) + bladder_drainage = ChoiceField( + choices=DailyRound.BladderDrainageType.choices, required=False + ) + bladder_issue = ChoiceField( + choices=DailyRound.BladderIssueType.choices, required=False + ) + urination_frequency = ChoiceField( + choices=DailyRound.UrinationFrequencyType.choices, required=False + ) + sleep = ChoiceField(choices=DailyRound.SleepType.choices, required=False) + nutrition_route = ChoiceField( + choices=DailyRound.NutritionRouteType.choices, required=False + ) + oral_issue = ChoiceField(choices=DailyRound.OralIssueType.choices, required=False) + appetite = ChoiceField(choices=DailyRound.AppetiteType.choices, required=False) + # Critical Care Components consciousness_level = ChoiceField( diff --git a/care/facility/management/commands/load_event_types.py b/care/facility/management/commands/load_event_types.py index fc9c231372..c6a92064f5 100644 --- a/care/facility/management/commands/load_event_types.py +++ b/care/facility/management/commands/load_event_types.py @@ -217,6 +217,26 @@ class Command(BaseCommand): ), }, {"name": "NURSING", "fields": ("nursing",)}, + { + "name": "ROUTINE", + "children": ( + {"name": "SLEEP_ROUTINE", "fields": ("sleep",)}, + {"name": "BOWEL_ROUTINE", "fields": ("bowel_issue",)}, + { + "name": "BLADDER_ROUTINE", + "fields": ( + "bladder_drainage", + "bladder_issue", + "experiences_dysuria", + "urination_frequency", + ), + }, + { + "name": "NUTRITION_ROUTINE", + "fields": ("nutrition_route", "oral_issue", "appetite"), + }, + ), + }, ), }, { diff --git a/care/facility/migrations/0456_dailyround_appetite_dailyround_bladder_drainage_and_more.py b/care/facility/migrations/0456_dailyround_appetite_dailyround_bladder_drainage_and_more.py new file mode 100644 index 0000000000..71cb7bd793 --- /dev/null +++ b/care/facility/migrations/0456_dailyround_appetite_dailyround_bladder_drainage_and_more.py @@ -0,0 +1,144 @@ +# Generated by Django 4.2.10 on 2024-09-13 07:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("facility", "0455_remove_facility_old_features"), + ] + + operations = [ + migrations.AddField( + model_name="dailyround", + name="appetite", + field=models.SmallIntegerField( + blank=True, + choices=[ + (1, "INCREASED"), + (2, "SATISFACTORY"), + (3, "REDUCED"), + (4, "NO_TASTE_FOR_FOOD"), + (5, "CANNOT_BE_ASSESSED"), + ], + default=None, + null=True, + ), + ), + migrations.AddField( + model_name="dailyround", + name="bladder_drainage", + field=models.SmallIntegerField( + blank=True, + choices=[ + (1, "NORMAL"), + (2, "CONDOM_CATHETER"), + (3, "DIAPER"), + (4, "INTERMITTENT_CATHETER"), + (5, "CONTINUOUS_INDWELLING_CATHETER"), + (6, "CONTINUOUS_SUPRAPUBIC_CATHETER"), + (7, "UROSTOMY"), + ], + default=None, + null=True, + ), + ), + migrations.AddField( + model_name="dailyround", + name="bladder_issue", + field=models.SmallIntegerField( + blank=True, + choices=[ + (0, "NO_ISSUES"), + (1, "INCONTINENCE"), + (2, "RETENTION"), + (3, "HESITANCY"), + ], + default=None, + null=True, + ), + ), + migrations.AddField( + model_name="dailyround", + name="bowel_issue", + field=models.SmallIntegerField( + blank=True, + choices=[(0, "NO_DIFFICULTY"), (1, "CONSTIPATION"), (2, "DIARRHOEA")], + default=None, + null=True, + ), + ), + migrations.AddField( + model_name="dailyround", + name="is_experiencing_dysuria", + field=models.BooleanField(blank=True, default=None, null=True), + ), + migrations.AddField( + model_name="dailyround", + name="nutrition_route", + field=models.SmallIntegerField( + blank=True, + choices=[ + (1, "ORAL"), + (2, "RYLES_TUBE"), + (3, "GASTROSTOMY_OR_JEJUNOSTOMY"), + (4, "PEG"), + (5, "PARENTERAL_TUBING_FLUID"), + (6, "PARENTERAL_TUBING_TPN"), + ], + default=None, + null=True, + ), + ), + migrations.AddField( + model_name="dailyround", + name="oral_issue", + field=models.SmallIntegerField( + blank=True, + choices=[(0, "NO_ISSUE"), (1, "DYSPHAGIA"), (2, "ODYNOPHAGIA")], + default=None, + null=True, + ), + ), + migrations.AddField( + model_name="dailyround", + name="sleep", + field=models.SmallIntegerField( + blank=True, + choices=[ + (1, "EXCESSIVE"), + (2, "SATISFACTORY"), + (3, "UNSATISFACTORY"), + (4, "NO_SLEEP"), + ], + default=None, + null=True, + ), + ), + migrations.AddField( + model_name="dailyround", + name="urination_frequency", + field=models.SmallIntegerField( + blank=True, + choices=[(1, "NORMAL"), (2, "DECREASED"), (3, "INCREASED")], + default=None, + null=True, + ), + ), + migrations.AlterField( + model_name="dailyround", + name="rounds_type", + field=models.IntegerField( + choices=[ + (0, "NORMAL"), + (30, "COMMUNITY_NURSES_LOG"), + (50, "DOCTORS_LOG"), + (100, "VENTILATOR"), + (200, "ICU"), + (300, "AUTOMATED"), + (400, "TELEMEDICINE"), + ], + default=0, + ), + ), + ] diff --git a/care/facility/models/daily_round.py b/care/facility/models/daily_round.py index 078709d9c9..58a288ed91 100644 --- a/care/facility/models/daily_round.py +++ b/care/facility/models/daily_round.py @@ -31,6 +31,7 @@ class DailyRound(PatientBaseModel): class RoundsType(enum.Enum): NORMAL = 0 + COMMUNITY_NURSES_LOG = 30 DOCTORS_LOG = 50 VENTILATOR = 100 ICU = 200 @@ -51,6 +52,57 @@ class ConsciousnessType(enum.Enum): ConsciousnessChoice = [(e.value, e.name) for e in ConsciousnessType] + class BowelDifficultyType(models.IntegerChoices): + NO_DIFFICULTY = 0, "NO_DIFFICULTY" + CONSTIPATION = 1, "CONSTIPATION" + DIARRHOEA = 2, "DIARRHOEA" + + class BladderDrainageType(models.IntegerChoices): + NORMAL = 1, "NORMAL" + CONDOM_CATHETER = 2, "CONDOM_CATHETER" + DIAPER = 3, "DIAPER" + INTERMITTENT_CATHETER = 4, "INTERMITTENT_CATHETER" + CONTINUOUS_INDWELLING_CATHETER = 5, "CONTINUOUS_INDWELLING_CATHETER" + CONTINUOUS_SUPRAPUBIC_CATHETER = 6, "CONTINUOUS_SUPRAPUBIC_CATHETER" + UROSTOMY = 7, "UROSTOMY" + + class BladderIssueType(models.IntegerChoices): + NO_ISSUES = 0, "NO_ISSUES" + INCONTINENCE = 1, "INCONTINENCE" + RETENTION = 2, "RETENTION" + HESITANCY = 3, "HESITANCY" + + class UrinationFrequencyType(models.IntegerChoices): + NORMAL = 1, "NORMAL" + DECREASED = 2, "DECREASED" + INCREASED = 3, "INCREASED" + + class SleepType(models.IntegerChoices): + EXCESSIVE = 1, "EXCESSIVE" + SATISFACTORY = 2, "SATISFACTORY" + UNSATISFACTORY = 3, "UNSATISFACTORY" + NO_SLEEP = 4, "NO_SLEEP" + + class NutritionRouteType(models.IntegerChoices): + ORAL = 1, "ORAL" + RYLES_TUBE = 2, "RYLES_TUBE" + GASTROSTOMY_OR_JEJUNOSTOMY = 3, "GASTROSTOMY_OR_JEJUNOSTOMY" + PEG = 4, "PEG" + PARENTERAL_TUBING_FLUID = 5, "PARENTERAL_TUBING_FLUID" + PARENTERAL_TUBING_TPN = 6, "PARENTERAL_TUBING_TPN" + + class OralIssueType(models.IntegerChoices): + NO_ISSUE = 0, "NO_ISSUE" + DYSPHAGIA = 1, "DYSPHAGIA" + ODYNOPHAGIA = 2, "ODYNOPHAGIA" + + class AppetiteType(models.IntegerChoices): + INCREASED = 1, "INCREASED" + SATISFACTORY = 2, "SATISFACTORY" + REDUCED = 3, "REDUCED" + NO_TASTE_FOR_FOOD = 4, "NO_TASTE_FOR_FOOD" + CANNOT_BE_ASSESSED = 5, "CANNOT_BE_ASSESSED" + class PupilReactionType(enum.Enum): UNKNOWN = 0 BRISK = 5 @@ -175,6 +227,34 @@ class InsulinIntakeFrequencyType(enum.Enum): ) is_parsed_by_ocr = models.BooleanField(default=False) + # Community Nurse's Log Attributes + + bowel_issue = models.SmallIntegerField( + choices=BowelDifficultyType.choices, default=None, null=True, blank=True + ) + bladder_drainage = models.SmallIntegerField( + choices=BladderDrainageType.choices, default=None, null=True, blank=True + ) + bladder_issue = models.SmallIntegerField( + choices=BladderIssueType.choices, default=None, null=True, blank=True + ) + is_experiencing_dysuria = models.BooleanField(default=None, null=True, blank=True) + urination_frequency = models.SmallIntegerField( + choices=UrinationFrequencyType.choices, default=None, null=True, blank=True + ) + sleep = models.SmallIntegerField( + choices=SleepType.choices, default=None, null=True, blank=True + ) + nutrition_route = models.SmallIntegerField( + choices=NutritionRouteType.choices, default=None, null=True, blank=True + ) + oral_issue = models.SmallIntegerField( + choices=OralIssueType.choices, default=None, null=True, blank=True + ) + appetite = models.SmallIntegerField( + choices=AppetiteType.choices, default=None, null=True, blank=True + ) + # Critical Care Attributes consciousness_level = models.IntegerField( diff --git a/care/facility/tests/test_patient_daily_rounds_api.py b/care/facility/tests/test_patient_daily_rounds_api.py index 3312a87dbc..1ea519c3eb 100644 --- a/care/facility/tests/test_patient_daily_rounds_api.py +++ b/care/facility/tests/test_patient_daily_rounds_api.py @@ -129,6 +129,24 @@ def test_doctors_log_update(self): ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) + def test_community_nurses_log_update(self): + response = self.client.post( + f"/api/v1/consultation/{self.consultation_with_bed.external_id}/daily_rounds/", + data={ + **self.log_update, + "rounds_type": "COMMUNITY_NURSES_LOG", + "bowel_issue": "NO_DIFFICULTY", + "bladder_drainage": "CONDOM_CATHETER", + "bladder_issue": "NO_ISSUES", + "urination_frequency": "DECREASED", + "sleep": "SATISFACTORY", + "nutrition_route": "ORAL", + "oral_issue": "NO_ISSUE", + "appetite": "INCREASED", + }, + ) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + def test_invalid_taken_at(self): data = { **self.log_update, From 4970de3c8dd5efb7d2e88c219b8490d03aba9182 Mon Sep 17 00:00:00 2001 From: Khavin Shankar Date: Thu, 19 Sep 2024 11:08:52 +0530 Subject: [PATCH 6/8] Fixed incoming fhir data parsing (#2446) --- care/hcx/utils/fhir.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/care/hcx/utils/fhir.py b/care/hcx/utils/fhir.py index 46ee5326c6..93df49ba82 100644 --- a/care/hcx/utils/fhir.py +++ b/care/hcx/utils/fhir.py @@ -1017,8 +1017,10 @@ def process_coverage_elibility_check_response(self, response): coverageeligibilityresponse.CoverageEligibilityResponse( **list( filter( - lambda entry: entry.resource - is coverageeligibilityresponse.CoverageEligibilityResponse, + lambda entry: isinstance( + entry.resource, + coverageeligibilityresponse.CoverageEligibilityResponse, + ), coverage_eligibility_check_bundle.entry, ) )[0].resource.dict() @@ -1027,7 +1029,7 @@ def process_coverage_elibility_check_response(self, response): coverage_request = coverage.Coverage( **list( filter( - lambda entry: entry.resource is coverage.Coverage, + lambda entry: isinstance(entry.resource, coverage.Coverage), coverage_eligibility_check_bundle.entry, ) )[0].resource.dict() @@ -1057,7 +1059,9 @@ def process_claim_response(self, response): claim_response = claimresponse.ClaimResponse( **list( filter( - lambda entry: entry.resource is claimresponse.ClaimResponse, + lambda entry: isinstance( + entry.resource, claimresponse.ClaimResponse + ), claim_bundle.entry, ) )[0].resource.dict() From 57d966bcbed095fe728fc0c4533ace57011794b2 Mon Sep 17 00:00:00 2001 From: Bodhish Thomas Date: Thu, 19 Sep 2024 16:42:49 +0530 Subject: [PATCH 7/8] New Crowdin updates (#2453) * New translations django.po (Tamil) * New translations django.po (Hindi) * New translations django.po (Malayalam) * New translations django.po (Kannada) * New translations django.po (Tamil) * New translations django.po (Hindi) * New translations django.po (Malayalam) * New translations django.po (Kannada) * New translations django.po (Tamil) * New translations django.po (Hindi) * New translations django.po (Malayalam) * New translations django.po (Kannada) * New translations django.po (Tamil) * New translations django.po (Hindi) * New translations django.po (Malayalam) * New translations django.po (Kannada) * New translations django.po (Tamil) * New translations django.po (Hindi) * New translations django.po (Tamil) * New translations django.po (Hindi) * New translations django.po (Tamil) * New translations django.po (Hindi) * New translations django.po (Tamil) * New translations django.po (Hindi) --- locale/hi/LC_MESSAGES/django.po | 6 +++--- locale/kn/LC_MESSAGES/django.po | 6 +++--- locale/ml/LC_MESSAGES/django.po | 8 ++++---- locale/ta/LC_MESSAGES/django.po | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/locale/hi/LC_MESSAGES/django.po b/locale/hi/LC_MESSAGES/django.po index f7122369b9..a63e6bcfa7 100644 --- a/locale/hi/LC_MESSAGES/django.po +++ b/locale/hi/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: ohccarefe\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-25 17:02+0530\n" -"PO-Revision-Date: 2024-09-16 10:57\n" +"PO-Revision-Date: 2024-09-16 14:40\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: ohccarefe\n" "X-Crowdin-Project-ID: 704503\n" "X-Crowdin-Language: hi\n" -"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 70\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/kn/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 76\n" #: care/abdm/apps.py:7 msgid "ABDM Integration" diff --git a/locale/kn/LC_MESSAGES/django.po b/locale/kn/LC_MESSAGES/django.po index 8c1bf28934..39aa3fc1df 100644 --- a/locale/kn/LC_MESSAGES/django.po +++ b/locale/kn/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: ohccarefe\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-25 17:02+0530\n" -"PO-Revision-Date: 2024-09-16 10:57\n" +"PO-Revision-Date: 2024-09-16 12:34\n" "Last-Translator: \n" "Language-Team: Kannada\n" "Language: kn_IN\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: ohccarefe\n" "X-Crowdin-Project-ID: 704503\n" "X-Crowdin-Language: kn\n" -"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 70\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/kn/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 76\n" #: care/abdm/apps.py:7 msgid "ABDM Integration" diff --git a/locale/ml/LC_MESSAGES/django.po b/locale/ml/LC_MESSAGES/django.po index 432ca296f8..5b0e3c8386 100644 --- a/locale/ml/LC_MESSAGES/django.po +++ b/locale/ml/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: ohccarefe\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-25 17:02+0530\n" -"PO-Revision-Date: 2024-09-16 10:58\n" +"PO-Revision-Date: 2024-09-16 12:34\n" "Last-Translator: \n" "Language-Team: Malayalam\n" "Language: ml_IN\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: ohccarefe\n" "X-Crowdin-Project-ID: 704503\n" "X-Crowdin-Language: ml-IN\n" -"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 70\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/kn/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 76\n" #: care/abdm/apps.py:7 msgid "ABDM Integration" @@ -116,7 +116,7 @@ msgstr "HCX ഇൻ്റഗ്രേഷൻ" #: care/templates/pages/home.html:8 msgid "Open Healthcare Network" -msgstr "ആരോഗ്യ സംരക്ഷണ ശൃംഖല" +msgstr "ഹെൽത്ത് കെയർ നെറ്റ്‌വർക്ക് തുറക്കുക" #: care/templates/pages/home.html:9 msgid "Our Goal is to defend the Healthcare system of Kerala from overloading beyond capacity." diff --git a/locale/ta/LC_MESSAGES/django.po b/locale/ta/LC_MESSAGES/django.po index ad237a7acd..e1ff832ea4 100644 --- a/locale/ta/LC_MESSAGES/django.po +++ b/locale/ta/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: ohccarefe\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-08-25 17:02+0530\n" -"PO-Revision-Date: 2024-09-16 10:57\n" +"PO-Revision-Date: 2024-09-16 14:40\n" "Last-Translator: \n" "Language-Team: Tamil\n" "Language: ta_IN\n" @@ -14,8 +14,8 @@ msgstr "" "X-Crowdin-Project: ohccarefe\n" "X-Crowdin-Project-ID: 704503\n" "X-Crowdin-Language: ta\n" -"X-Crowdin-File: /[ohcnetwork.care] develop/locale/ta/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 70\n" +"X-Crowdin-File: /[ohcnetwork.care] develop/locale/kn/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 76\n" #: care/abdm/apps.py:7 msgid "ABDM Integration" From a06913e237cde250d9a7428a252c5dd1a7e3a559 Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Thu, 19 Sep 2024 18:15:48 +0530 Subject: [PATCH 8/8] Adds fields for social profile: socioeconomic status and domestic healthcare support (#2464) * Adds fields for social profile: socioeconomic status and domestic healthcare support * Add tests --- care/facility/api/serializers/patient.py | 14 +++- ...fo_domestic_healthcare_support_and_more.py | 39 +++++++++ care/facility/models/patient.py | 83 +++++++++++-------- care/facility/tests/test_patient_api.py | 21 +++++ 4 files changed, 123 insertions(+), 34 deletions(-) create mode 100644 care/facility/migrations/0457_patientmetainfo_domestic_healthcare_support_and_more.py diff --git a/care/facility/api/serializers/patient.py b/care/facility/api/serializers/patient.py index d662aba855..32e378dc9a 100644 --- a/care/facility/api/serializers/patient.py +++ b/care/facility/api/serializers/patient.py @@ -54,7 +54,19 @@ class PatientMetaInfoSerializer(serializers.ModelSerializer): - occupation = ChoiceField(choices=PatientMetaInfo.OccupationChoices, allow_null=True) + occupation = ChoiceField( + choices=PatientMetaInfo.OccupationChoices, allow_null=True, required=False + ) + socioeconomic_status = ChoiceField( + choices=PatientMetaInfo.SocioeconomicStatus.choices, + allow_null=True, + required=False, + ) + domestic_healthcare_support = ChoiceField( + choices=PatientMetaInfo.DomesticHealthcareSupport.choices, + allow_null=True, + required=False, + ) class Meta: model = PatientMetaInfo diff --git a/care/facility/migrations/0457_patientmetainfo_domestic_healthcare_support_and_more.py b/care/facility/migrations/0457_patientmetainfo_domestic_healthcare_support_and_more.py new file mode 100644 index 0000000000..6a883b5ec4 --- /dev/null +++ b/care/facility/migrations/0457_patientmetainfo_domestic_healthcare_support_and_more.py @@ -0,0 +1,39 @@ +# Generated by Django 4.2.10 on 2024-09-19 07:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("facility", "0456_dailyround_appetite_dailyround_bladder_drainage_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="patientmetainfo", + name="domestic_healthcare_support", + field=models.SmallIntegerField( + blank=True, + choices=[ + (0, "NO_SUPPORT"), + (10, "FAMILY_MEMBER"), + (20, "PAID_CAREGIVER"), + ], + null=True, + ), + ), + migrations.AddField( + model_name="patientmetainfo", + name="socioeconomic_status", + field=models.SmallIntegerField( + blank=True, + choices=[ + (10, "VERY_POOR"), + (20, "POOR"), + (30, "MIDDLE_CLASS"), + (40, "WELL_OFF"), + ], + null=True, + ), + ), + ] diff --git a/care/facility/models/patient.py b/care/facility/models/patient.py index 226fbb108d..17eb7f248c 100644 --- a/care/facility/models/patient.py +++ b/care/facility/models/patient.py @@ -589,43 +589,60 @@ def format_diagnoses(diagnosis_ids): class PatientMetaInfo(models.Model): - class OccupationEnum(enum.Enum): - STUDENT = 1 - BUSINESSMAN = 2 - HEALTH_CARE_WORKER = 3 - HEALTH_CARE_LAB_WORKER = 4 - ANIMAL_HANDLER = 5 - OTHERS = 6 - HEALTHCARE_PRACTITIONER = 7 - PARADEMICS = 8 - BUSINESS_RELATED = 9 - ENGINEER = 10 - TEACHER = 11 - OTHER_PROFESSIONAL_OCCUPATIONS = 12 - OFFICE_ADMINISTRATIVE = 13 - CHEF = 14 - PROTECTIVE_SERVICE = 15 - HOSPITALITY = 16 - CUSTODIAL = 17 - CUSTOMER_SERVICE = 18 - SALES_SUPERVISOR = 19 - RETAIL_SALES_WORKER = 20 - INSURANCE_SALES_AGENT = 21 - SALES_REPRESENTATIVE = 22 - REAL_ESTATE = 23 - CONSTRUCTION_EXTRACTION = 24 - AGRI_NATURAL = 25 - PRODUCTION_OCCUPATION = 26 - PILOT_FLIGHT = 27 - VEHICLE_DRIVER = 28 - MILITARY = 29 - HOMEMAKER = 30 - UNKNOWN = 31 - NOT_APPLICABLE = 32 + class OccupationEnum(models.IntegerChoices): + STUDENT = 1, "STUDENT" + BUSINESSMAN = 2, "BUSINESSMAN" + HEALTH_CARE_WORKER = 3, "HEALTH_CARE_WORKER" + HEALTH_CARE_LAB_WORKER = 4, "HEALTH_CARE_LAB_WORKER" + ANIMAL_HANDLER = 5, "ANIMAL_HANDLER" + OTHERS = 6, "OTHERS" + HEALTHCARE_PRACTITIONER = 7, "HEALTHCARE_PRACTITIONER" + PARADEMICS = 8, "PARADEMICS" + BUSINESS_RELATED = 9, "BUSINESS_RELATED" + ENGINEER = 10, "ENGINEER" + TEACHER = 11, "TEACHER" + OTHER_PROFESSIONAL_OCCUPATIONS = 12, "OTHER_PROFESSIONAL_OCCUPATIONS" + OFFICE_ADMINISTRATIVE = 13, "OFFICE_ADMINISTRATIVE" + CHEF = 14, "CHEF" + PROTECTIVE_SERVICE = 15, "PROTECTIVE_SERVICE" + HOSPITALITY = 16, "HOSPITALITY" + CUSTODIAL = 17, "CUSTODIAL" + CUSTOMER_SERVICE = 18, "CUSTOMER_SERVICE" + SALES_SUPERVISOR = 19, "SALES_SUPERVISOR" + RETAIL_SALES_WORKER = 20, "RETAIL_SALES_WORKER" + INSURANCE_SALES_AGENT = 21, "INSURANCE_SALES_AGENT" + SALES_REPRESENTATIVE = 22, "SALES_REPRESENTATIVE" + REAL_ESTATE = 23, "REAL_ESTATE" + CONSTRUCTION_EXTRACTION = 24, "CONSTRUCTION_EXTRACTION" + AGRI_NATURAL = 25, "AGRI_NATURAL" + PRODUCTION_OCCUPATION = 26, "PRODUCTION_OCCUPATION" + PILOT_FLIGHT = 27, "PILOT_FLIGHT" + VEHICLE_DRIVER = 28, "VEHICLE_DRIVER" + MILITARY = 29, "MILITARY" + HOMEMAKER = 30, "HOMEMAKER" + UNKNOWN = 31, "UNKNOWN" + NOT_APPLICABLE = 32, "NOT_APPLICABLE" OccupationChoices = [(item.value, item.name) for item in OccupationEnum] + class SocioeconomicStatus(models.IntegerChoices): + VERY_POOR = 10, "VERY_POOR" + POOR = 20, "POOR" + MIDDLE_CLASS = 30, "MIDDLE_CLASS" + WELL_OFF = 40, "WELL_OFF" + + class DomesticHealthcareSupport(models.IntegerChoices): + NO_SUPPORT = 0, "NO_SUPPORT" + FAMILY_MEMBER = 10, "FAMILY_MEMBER" + PAID_CAREGIVER = 20, "PAID_CAREGIVER" + occupation = models.IntegerField(choices=OccupationChoices, blank=True, null=True) + socioeconomic_status = models.SmallIntegerField( + choices=SocioeconomicStatus.choices, blank=True, null=True + ) + domestic_healthcare_support = models.SmallIntegerField( + choices=DomesticHealthcareSupport.choices, blank=True, null=True + ) head_of_household = models.BooleanField(blank=True, null=True) diff --git a/care/facility/tests/test_patient_api.py b/care/facility/tests/test_patient_api.py index 3f031d9370..98f75613ea 100644 --- a/care/facility/tests/test_patient_api.py +++ b/care/facility/tests/test_patient_api.py @@ -331,6 +331,27 @@ def setUpTestData(cls): def get_base_url(self) -> str: return "/api/v1/patient/" + def test_update_patient_with_meta_info(self): + self.client.force_authenticate(user=self.user) + res = self.client.patch( + f"{self.get_base_url()}{self.patient.external_id}/", + data={ + "meta_info": { + "socioeconomic_status": "VERY_POOR", + "domestic_healthcare_support": "FAMILY_MEMBER", + } + }, + format="json", + ) + self.assertEqual(res.status_code, status.HTTP_200_OK) + self.assertDictContainsSubset( + { + "socioeconomic_status": "VERY_POOR", + "domestic_healthcare_support": "FAMILY_MEMBER", + }, + res.data.get("meta_info"), + ) + def test_has_consent(self): self.client.force_authenticate(user=self.user) response = self.client.get(self.get_base_url())