Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data Migration #2763

Draft
wants to merge 53 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
4094827
Migration for Orgs, Facility, Patients and Consultations
sainak Jan 21, 2025
22f5b95
fix migrations
sainak Jan 21, 2025
4ea4792
Patient Notes and Notes Edit | Migration
amjithtitus09 Jan 21, 2025
51ddbf4
added symptoms migration
khavinshankar Jan 21, 2025
57b91bf
Shifting to Resource Migration (#2765)
Jacobjeevan Jan 21, 2025
e5ecbfc
Delete care/facility/migrations/0485_migrate_shifting_request.py
sainak Jan 21, 2025
33309da
fix reverse migrations
sainak Jan 21, 2025
eb858f3
FacilityUser | Migration
amjithtitus09 Jan 21, 2025
887f0ae
disable auto time on emr while migrating and refactored
sainak Jan 22, 2025
639a97e
patient medical history notes and fixes
sainak Jan 22, 2025
de91baf
fixes
sainak Jan 22, 2025
ac061f6
Merge branch 'develop' into data-migration
sainak Jan 22, 2025
4739b19
rebase migrations
sainak Jan 22, 2025
12679a6
Fixes
sainak Jan 23, 2025
6a49085
Merge commit '2f9fa831ff52d72e81d8fa5bba361ba17287a6ef' into data-mig…
sainak Jan 23, 2025
ebdb12e
rebase migrations
sainak Jan 23, 2025
136b569
add prescription migration
rithviknishad Jan 23, 2025
36229c4
fix migrations
sainak Jan 23, 2025
c1a6254
prescriptions: fill migrated_emr_prescription_id
rithviknishad Jan 23, 2025
349bc50
update dependency
sainak Jan 23, 2025
983a3e1
cleanup prescription migration
rithviknishad Jan 24, 2025
d4faab7
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Jan 24, 2025
9604ca2
rebase migrations
sainak Jan 24, 2025
31d2037
rebase migrations
sainak Jan 24, 2025
3ac2fb5
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Jan 24, 2025
da49a78
Add diseases to notes
sainak Jan 25, 2025
6811214
cleanup
sainak Jan 25, 2025
ef506b4
complete migrations for patient reg
sainak Jan 25, 2025
8441fe3
use chronic condition for diseases
sainak Jan 27, 2025
819c4c2
finish patient consultation
sainak Jan 27, 2025
2461c85
add symptom display values
sainak Jan 27, 2025
d43b7ed
Migration for Medicine Administration
rithviknishad Jan 28, 2025
ae69575
Add migration for file uploads
sainak Jan 28, 2025
ceaf2b1
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Jan 29, 2025
7d87277
fixes
sainak Jan 29, 2025
db436e8
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Jan 31, 2025
fb506d5
fixes
sainak Feb 3, 2025
5eef761
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Feb 3, 2025
0abf2b5
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Feb 10, 2025
76ecc8c
Add daily rounds and diagnosis migration
sainak Feb 16, 2025
26d7567
fix more stuff
sainak Feb 17, 2025
aa9182b
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Feb 17, 2025
f0cb4c9
some small fixes
sainak Feb 18, 2025
29737ae
fix creating unnecessary migrations on temporary field changes
sainak Feb 18, 2025
0c0ba29
fix questionnaire responses for some forms
sainak Feb 18, 2025
13caf23
Add more daily round types
sainak Feb 18, 2025
0ce6c41
add current bed to encounter
sainak Feb 18, 2025
acccd15
fix datetime type questions
sainak Feb 19, 2025
2b3df1c
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Feb 19, 2025
67aace0
fix tests
sainak Feb 19, 2025
9141267
fix
sainak Feb 19, 2025
f025950
fix the fix that fixed the fix
sainak Feb 19, 2025
d1897d9
Merge remote-tracking branch 'origin/develop' into data-migration
sainak Feb 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -357,4 +357,4 @@ secrets.sh

jwks.b64.txt

care_db.dump
care_db.dump*
1 change: 1 addition & 0 deletions care/emr/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# isort: skip_file
from .allergy_intolerance import * # noqa F403
from .condition import * # noqa F403
from .observation import * # noqa F403
Expand Down
1 change: 0 additions & 1 deletion care/emr/resources/medication/administration/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ class MedicationAdministrationCategory(str, Enum):
inpatient = "inpatient"
outpatient = "outpatient"
community = "community"
discharge = "discharge"


class MedicationAdministrationPerformerFunction(str, Enum):
Expand Down
2 changes: 1 addition & 1 deletion care/emr/resources/questionnaire_response/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class QuestionnaireResponseReadSpec(EMRResource):
id: UUID4
questionnaire: QuestionnaireReadSpec
subject_id: str
responses: list
responses: list[QuestionnaireSubmitResult] = []
encounter: str | None = None
structured_responses: dict
structured_response_type: str
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Generated by Django 5.1.4 on 2025-01-14 09:20

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("facility", "0476_facility_default_internal_organization_and_more"),
("users", "0021_rename_gender_user_old_gender_user_geo_organization_and_more"),
]

operations = [
migrations.DeleteModel(
name="HistoricalPatientRegistration",
),
migrations.AddField(
model_name="patientconsultation",
name="migrated_emr_encounter_id",
field=models.BigIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name="patientregistration",
name="migrated_emr_patient_id",
field=models.BigIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name="assetlocation",
name="migrated_emr_location_id",
field=models.BigIntegerField(blank=True, default=None, null=True),
),
migrations.AddField(
model_name="bed",
name="migrated_emr_bed_id",
field=models.BigIntegerField(blank=True, default=None, null=True),
),
migrations.CreateModel(
name="MigrationTracking",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("old_model_obj_id", models.BigIntegerField()),
("new_model_obj_id", models.BigIntegerField()),
("field", models.CharField(max_length=255)),
("data", models.TimeField()),
(
"new_model",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="new_model",
to="contenttypes.contenttype",
),
),
(
"old_model",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="old_model",
to="contenttypes.contenttype",
),
),
],
),
]
164 changes: 164 additions & 0 deletions care/facility/migrations/0478_migrate_organizations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
# Generated by Django 5.1.4 on 2025-01-21 08:28

import logging
from django.db import migrations

logger = logging.getLogger(__name__)

MIGRATION_ID = 158445695201
COUNTRY = "India"


def migrate_organizations(apps, schema_editor):
from care.emr.models import Organization

State = apps.get_model("users", "State")
District = apps.get_model("users", "District")
LocalBody = apps.get_model("users", "LocalBody")
Ward = apps.get_model("users", "Ward")

local_body_type_map = {
1: "grama_panchayath",
2: "block_panchayath",
3: "district_panchayath",
4: "nagar_panchayath",
10: "municipality",
20: "corporation",
50: "others",
}

logger.debug("Migrating Organization")
state_metadata = {
"country": COUNTRY,
"govt_org_type": "state",
"govt_org_children_type": "district",
}
for state_obj in State.objects.all():
state_org, _ = Organization.objects.filter(
name__iexact=state_obj.name,
org_type="govt",
parent=None,
metadata=state_metadata,
).get_or_create(
defaults={
"name": state_obj.name,
"org_type": "govt",
"system_generated": True,
"metadata": state_metadata,
"meta": {"migration_id": MIGRATION_ID},
}
)
logger.debug(f"Created State: {state_org.name=}")
district_metadata = {
"country": COUNTRY,
"govt_org_type": "district",
"govt_org_children_type": "local_body",
}
for district_obj in District.objects.filter(state=state_obj):
district_org, created = Organization.objects.filter(
name__iexact=district_obj.name,
root_org=state_org,
parent=state_org,
org_type="govt",
metadata=district_metadata,
).get_or_create(
defaults={
"name": district_obj.name,
"org_type": "govt",
"root_org": state_org,
"parent": state_org,
"system_generated": True,
"metadata": district_metadata,
"meta": {"migration_id": MIGRATION_ID},
},
)
logger.debug(f"Created District: {state_org.name=}, {district_org.name=}")
local_body_metadata = {
"country": COUNTRY,
"govt_org_type": "local_body",
"govt_org_children_type": "ward",
}
for local_body_obj in LocalBody.objects.filter(district=district_obj):
lb_type = local_body_type_map.get(local_body_obj.body_type, "others")
local_body_org, created = Organization.objects.filter(
name__iexact=local_body_obj.name,
root_org=state_org,
parent=district_org,
org_type="govt",
metadata={
"govt_org_local_body_type": lb_type,
**local_body_metadata,
},
).get_or_create(
defaults={
"name": local_body_obj.name,
"org_type": "govt",
"root_org": state_org,
"parent": district_org,
"system_generated": True,
"metadata": {
"govt_org_local_body_type": lb_type,
**local_body_metadata,
},
"meta": {"migration_id": MIGRATION_ID},
},
)
logger.debug(
f"Created Local Body: {state_org.name=}, \
{district_org.name=}, {local_body_org.name=}"
)
ward_metadata = {
"country": COUNTRY,
"govt_org_type": "ward",
}
for ward_obj in Ward.objects.filter(local_body=local_body_obj):
ward_org, created = Organization.objects.filter(
name__iexact=ward_obj.name,
root_org=state_org,
parent=local_body_org,
org_type="govt",
metadata={
"govt_org_ward_number": ward_obj.number,
**ward_metadata,
},
).get_or_create(
defaults={
"name": ward_obj.name,
"org_type": "govt",
"root_org": state_org,
"parent": local_body_org,
"system_generated": True,
"metadata": {
"govt_org_ward_number": ward_obj.number,
**ward_metadata,
},
"meta": {"migration_id": MIGRATION_ID},
},
)
logger.debug(
f"Created Ward: {state_org.name=}, \
{district_org.name=}, {local_body_org.name=}, \
{ward_org.name=}"
)


def reverse_migrate_organizations(apps, schema_editor):
logger.debug("Reversing Migration Organization")
schema_editor.execute(
"DELETE FROM emr_organization WHERE meta->>'migration_id' = %s",
[str(MIGRATION_ID)],
)


class Migration(migrations.Migration):

dependencies = [
(
"facility",
"0477_historicalpatientregistration_migrated_emr_patient_id_and_more",
),
]

operations = [
migrations.RunPython(migrate_organizations, reverse_migrate_organizations),
]
Loading
Loading