363 lines
24 KiB
Python
363 lines
24 KiB
Python
"""
|
|
Taxonomy mapping configuration for historical complaint import (2022).
|
|
|
|
Maps Excel classification names to ComplaintCategory UUIDs.
|
|
"""
|
|
|
|
import re
|
|
|
|
|
|
# Domain mappings (Level 1) - Maps Excel Domain → ComplaintCategory UUID
|
|
DOMAIN_MAPPING = {
|
|
"Clinical complaints": "d7bb3c2d-9f80-4d8c-85dc-ca5ac139417a", # CLINICAL / سريري
|
|
"Clinical Care": "51d3e74b-7c7f-48aa-98ef-475f97a47d0d", # الرعاية السريرية
|
|
"Relationship complaints": "f8263c2e-a89b-4ab7-bccd-a1524d85524c", # RELATIONSHIPS / علاقات
|
|
"Relationships": "73f83d5f-81a1-4340-970c-46d2950e7c98", # العلاقات
|
|
"Management complaints": "a58cb0ee-4622-4996-99ad-e134b88687e6", # MANAGEMENT / إداري
|
|
"Management": "70f95ca0-436f-4a1f-9ea5-9de2625e70c9", # الإدارة
|
|
}
|
|
|
|
# Category mappings (Level 2) - Maps Excel Category → ComplaintCategory UUID
|
|
CATEGORY_MAPPING = {
|
|
"Quality": "416a4c10-5739-4e27-a62f-ea5f107f0e81", # الجودة
|
|
"1. Quality": "416a4c10-5739-4e27-a62f-ea5f107f0e81", # الجودة
|
|
"Safety": "29e47b23-a724-46da-b128-b7ceb7546da0", # السلامة
|
|
"2. Safety": "29e47b23-a724-46da-b128-b7ceb7546da0", # السلامة
|
|
"Institutional Issues": "ca1619c9-7df4-4c97-b216-7a8113917997", # القضايا المؤسسية
|
|
"3. Institutional issues": "ca1619c9-7df4-4c97-b216-7a8113917997", # القضايا المؤسسية
|
|
"Accessibility": "313679ed-9749-4e6c-9f92-9c9a4126f6bf", # سهولة الوصول
|
|
"4. Accessibility": "313679ed-9749-4e6c-9f92-9c9a4126f6bf", # سهولة الوصول
|
|
"Communication": "51b66802-59c8-42db-9f04-b7d468bc2408", # التواصل
|
|
"5. Communication": "51b66802-59c8-42db-9f04-b7d468bc2408", # التواصل
|
|
"Humanness / Caring": "7409fc81-8d66-4028-aa1b-8b3143c39b46", # الإنسانية / الرعاية
|
|
"6. Humanness / Caring": "7409fc81-8d66-4028-aa1b-8b3143c39b46", # الإنسانية / الرعاية
|
|
"Confidentiality": "6a2d6d89-fdcb-425a-97a0-f3e524d0090b", # الخصوصية
|
|
"Consent": "54f695ca-4050-4b23-a463-ce4b136db173", # الموافقة
|
|
"4. Finance and Billing": "7f87c9c4-68df-48e7-81a4-4bebd7376253", # المالية والفواتير
|
|
"5. Incorrect Information": "6e75d91a-5c1e-4f1b-a71b-ba90b7a2ba5b", # معلومات غير صحيحة
|
|
"6. Confidentiality": "6a2d6d89-fdcb-425a-97a0-f3e524d0090b", # الخصوصية
|
|
}
|
|
|
|
# Sub-Category mappings (Level 3) - Maps Excel Sub-Category → ComplaintCategory UUID
|
|
SUBCATEGORY_MAPPING = {
|
|
"Examination": "a173a340-9dee-4115-a901-b4555e546500", # الفحص
|
|
"1.1. Examination": "a173a340-9dee-4115-a901-b4555e546500", # الفحص
|
|
"Patient Journey": "23be662b-ae71-43c3-9a19-09388c903468", # رحلة المريض
|
|
"Patient journey": "23be662b-ae71-43c3-9a19-09388c903468", # رحلة المريض
|
|
"1.2.Patient journey": "23be662b-ae71-43c3-9a19-09388c903468", # رحلة المريض
|
|
"Quality of Care": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e", # جودة الرعاية
|
|
"1.3.Quality of Care": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e", # جودة الرعاية
|
|
"Treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f", # العلاج
|
|
"1.4.Treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f", # العلاج
|
|
"Diagnosis": "9335435e-98fb-48cd-b153-102ce4f5a39d", # التشخيص
|
|
"1.5.Diagnosis": "9335435e-98fb-48cd-b153-102ce4f5a39d", # التشخيص
|
|
"Medication & Vaccination": "287ba991-305b-4585-bd3a-1bf2c8b19397", # الأدوية واللقاحات
|
|
"Medication and Vaccination": "287ba991-305b-4585-bd3a-1bf2c8b19397", # الأدوية واللقاحات
|
|
"2.1.Medication & Vaccination": "287ba991-305b-4585-bd3a-1bf2c8b19397", # الأدوية واللقاحات
|
|
"Safety Incidents": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041", # حوادث السلامة
|
|
"2.2.Safety Incidents": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041", # حوادث السلامة
|
|
"Skills and Conduct": "cb7032f8-cb95-4d2c-81d6-d1f0e4119800", # المهارات والسلوك
|
|
"2.3.Skills and Conduct": "cb7032f8-cb95-4d2c-81d6-d1f0e4119800", # المهارات والسلوك
|
|
"Administrative Policies": "30ff5d01-cd94-49b4-9d62-e10ffba5faca", # السياسات الإدارية
|
|
"3.1.Administrative Policies and Procedures": "30ff5d01-cd94-49b4-9d62-e10ffba5faca", # السياسات الإدارية
|
|
"Environment": "7108f73c-300e-4212-939f-64264721888c", # البيئة
|
|
"3.2.Environment": "7108f73c-300e-4212-939f-64264721888c", # البيئة
|
|
"Safety & Security": "86f5fdac-df2a-4d4a-a97a-47812e14489a", # الأمن والسلامة
|
|
"3.3.Safety & Security": "86f5fdac-df2a-4d4a-a97a-47812e14489a", # الأمن والسلامة
|
|
"Finance and Billing": "7f87c9c4-68df-48e7-81a4-4bebd7376253", # المالية والفواتير
|
|
"3.4.Finance and Billing": "7f87c9c4-68df-48e7-81a4-4bebd7376253", # المالية والفواتير
|
|
"Resources": "2b67dc2f-b7d8-48a8-8e8c-4f90a571c414", # الموارد
|
|
"3.6.Resources": "2b67dc2f-b7d8-48a8-8e8c-4f90a571c414", # الموارد
|
|
"Access": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8", # الوصول
|
|
"4.1.Access": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8", # الوصول
|
|
"Delays": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b", # التأخير
|
|
"4.3.Delays": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b", # التأخير
|
|
"Patient-staff communication": "b1ef5b10-dc5a-49fc-9fc6-277ca4d41609", # التواصل بين المريض والموظفين
|
|
"5.1.Patient-staff Communication": "b1ef5b10-dc5a-49fc-9fc6-277ca4d41609", # التواصل بين المريض والموظفين
|
|
"Emotional Support": "51087d24-2803-448e-a9dc-aba310fcc15b", # الدعم العاطفي
|
|
"6.1.Emotional Support": "51087d24-2803-448e-a9dc-aba310fcc15b", # الدعم العاطفي
|
|
"Assault and Harassment": "5721210d-0294-4356-ab7d-eebe4e5ab9d7", # الاعتداء والمضايقة
|
|
"6.2.Assault and Harassment": "5721210d-0294-4356-ab7d-eebe4e5ab9d7", # الاعتداء والمضايقة
|
|
"6.2.Assault and Harassment": "5721210d-0294-4356-ab7d-eebe4e5ab9d7", # الاعتداء والمضايقة
|
|
"Consent Process": "e6ff3ace-a4e6-4d44-a7f4-178b846b632c", # إجراءات الموافقة
|
|
"Privacy": "68d32c04-6c99-40b5-949d-10e78becbb99", # خصوصية المعلومات
|
|
"6.3.Confidentiality": "68d32c04-6c99-40b5-949d-10e78becbb99", # خصوصية المعلومات
|
|
"3.5.Staffing": "2b67dc2f-b7d8-48a8-8e8c-4f90a571c414", # الموارد
|
|
"4.2.Patient Disposition (final plan)": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b", # التأخير
|
|
"4.4.Referrals": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8", # الوصول
|
|
"3.7.Medical records": "30ff5d01-cd94-49b4-9d62-e10ffba5faca", # السياسات الإدارية
|
|
"6.4.Consent": "e6ff3ace-a4e6-4d44-a7f4-178b846b632c", # إجراءات الموافقة
|
|
"5.2.Incorrect Information": "6e75d91a-5c1e-4f1b-a71b-ba90b7a2ba5b", # معلومات غير صحيحة
|
|
}
|
|
|
|
# Classification mappings (Level 4) - Maps Excel Classification → ComplaintCategory UUID
|
|
CLASSIFICATION_MAPPING = {
|
|
"Patient flow issues": "8488fbf4-610e-4754-b2bb-096a67c4305c",
|
|
"1.2.2.Patient flow issues": "8488fbf4-610e-4754-b2bb-096a67c4305c",
|
|
"Substandard clinical/nursing care": "884bace8-9402-456c-9ced-1f140e9938c0",
|
|
"1.3.1.Substandard clinical/nursing care": "884bace8-9402-456c-9ced-1f140e9938c0",
|
|
"Errors in diagnosis": "3ab515e6-0504-48b6-8c83-dab0475ac331",
|
|
"1.5.1.Errors in diagnosis": "3ab515e6-0504-48b6-8c83-dab0475ac331",
|
|
"Dispensing errors": "23af36a6-3050-4fe4-bb30-d5d61abccb7a",
|
|
"2.1.2.Dispensing errors": "23af36a6-3050-4fe4-bb30-d5d61abccb7a",
|
|
# 'Calculate Additional amount': 'NOT-IN-SYSTEM', # Not found in current taxonomy,
|
|
# '3.4.3.Calculate Additional amount': 'NOT-IN-SYSTEM', # Not found in current taxonomy,
|
|
"Unnecessary health services": "24433748-9854-4cfe-9e32-65f4fb70c5c1",
|
|
"3.4.6.Unnecessary health services": "24433748-9854-4cfe-9e32-65f4fb70c5c1",
|
|
"Examination delay": "af9f4297-7094-416b-a9b2-b5d1b3f212c3", # Examination delay in emergency,
|
|
"4.3.3.Examination delay": "af9f4297-7094-416b-a9b2-b5d1b3f212c3", # Examination delay in emergency,
|
|
"Miscommunication with Patient": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"5.1.1.Miscommunication with Patient": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"Inappropriate/aggressive behavior": "9767593f-9be0-481f-8520-d5e855de3d8b",
|
|
"6.2.1.Inappropriate/aggressive behavior": "9767593f-9be0-481f-8520-d5e855de3d8b",
|
|
"Inadequate emotional support": "51087d24-2803-448e-a9dc-aba310fcc15b",
|
|
"6.1.1.Inadequate emotional support": "51087d24-2803-448e-a9dc-aba310fcc15b",
|
|
"Poor provider-patient communication": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"5.1.2.Poor provider-patient communication": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"Neglect": "51087d24-2803-448e-a9dc-aba310fcc15b",
|
|
"6.1.2.Neglect": "51087d24-2803-448e-a9dc-aba310fcc15b",
|
|
"1.2.Neglect": "23be662b-ae71-43c3-9a19-09388c903468",
|
|
"Miscoordination": "23be662b-ae71-43c3-9a19-09388c903468",
|
|
"1.2.1.Miscoordination": "23be662b-ae71-43c3-9a19-09388c903468",
|
|
"Lack of follow up": "23be662b-ae71-43c3-9a19-09388c903468",
|
|
"1.2.3.Lack of follow up": "23be662b-ae71-43c3-9a19-09388c903468",
|
|
"Rough treatment": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e",
|
|
"1.3.3.Rough treatment": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e",
|
|
"Insensitive to patient needs": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e",
|
|
"1.3.4.Insensitive to patient needs": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e",
|
|
"Inadequate/incomplete assessment": "884bace8-9402-456c-9ced-1f140e9938c0",
|
|
"1.1.2. Inadequate/incomplete assessment": "884bace8-9402-456c-9ced-1f140e9938c0",
|
|
"2. Inadequate/incomplete assessment": "884bace8-9402-456c-9ced-1f140e9938c0",
|
|
"Examination not performed": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"1.1.1. Examination not performed": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"Lab tests not performed": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"1.1.4. Lab tests not performed": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"Diagnostic Imaging not performed": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"1.1.5. Diagnostic Imaging not performed": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"Loss of a patient sample": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"1.1.6.Loss of a patient sample": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"Not having enough knowledge regarding the patient condition": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"1.1.3. Not having enough knowledge regarding the patient condition": "a173a340-9dee-4115-a901-b4555e546500",
|
|
"Treatment plan issues": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"1.4.1.Treatment plan issues": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"Treatment plan not followed": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"1.4.2 Treatment plan not followed": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"Ineffective treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"1.4.3.Ineffective treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"Inadequate pain management": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"1.4.4.Inadequate pain management": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"Patient Discharged before completing treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"1.4.5.Patient Discharged before completing treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"Prescribing errors": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.1.Prescribing errors": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"No medication prescribed": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.3.No medication prescribed": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Dispensing medication without prescription": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.5.Dispensing medication without prescription": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Prescription of expired medication": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.6.Prescription of expired medication": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Medication shortages": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.8.Medication shortages": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Insufficient medication prescribed": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.4 Insufficient medication prescribed": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Errors in lab results": "9335435e-98fb-48cd-b153-102ce4f5a39d",
|
|
"1.5.2.Errors in lab results": "9335435e-98fb-48cd-b153-102ce4f5a39d",
|
|
"Errors in Pre-marriage lab test": "9335435e-98fb-48cd-b153-102ce4f5a39d",
|
|
"1.5.4.Errors in Pre-marriage lab test": "9335435e-98fb-48cd-b153-102ce4f5a39d",
|
|
"Equipment failure/malfunction": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"1.Equipment failure/malfunction": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"2.2.1.Equipment failure/malfunction": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"11.Heating, Ventilation, Air condition (HVAC) Failure": "aeda737e-3d7f-49d5-afa7-9b79f94a049f",
|
|
"Wrong treatment": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"2.2.4.Wrong treatment": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"Poor hand-hygiene": "cb7032f8-cb95-4d2c-81d6-d1f0e4119800",
|
|
"2.3.4.Poor hand-hygiene": "cb7032f8-cb95-4d2c-81d6-d1f0e4119800",
|
|
"Improper practice of infection control recommendation": "cb7032f8-cb95-4d2c-81d6-d1f0e4119800",
|
|
"2.3.5.Improper practice of infection control recommendation": "cb7032f8-cb95-4d2c-81d6-d1f0e4119800",
|
|
"Paperwork delays": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.1.1.Paperwork delays": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Facility guidelines compliance": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.1.3.Facility guidelines compliance": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Required Service not obtained": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.1.4.Required Service not obtained": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Non-compliance with visiting hours policy": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.1.7.Non-compliance with visiting hours policy": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Inadequate reception service": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.1.8.Inadequate reception service": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Inadequate call center service": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.1.9.Inadequate call center service": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Poor environment": "7108f73c-300e-4212-939f-64264721888c",
|
|
"3.2.1.Poor environment": "7108f73c-300e-4212-939f-64264721888c",
|
|
"Poor cleanliness/sanitizing": "7108f73c-300e-4212-939f-64264721888c",
|
|
"3.2.2.Poor cleanliness/sanitizing": "7108f73c-300e-4212-939f-64264721888c",
|
|
"Poor Food service": "7108f73c-300e-4212-939f-64264721888c",
|
|
"2.4.Poor Food service": "7108f73c-300e-4212-939f-64264721888c",
|
|
"3.2.4.Poor Food service": "7108f73c-300e-4212-939f-64264721888c",
|
|
"Poor security response": "86f5fdac-df2a-4d4a-a97a-47812e14489a",
|
|
"3.3.2.Poor security response": "86f5fdac-df2a-4d4a-a97a-47812e14489a",
|
|
"Theft and lost": "86f5fdac-df2a-4d4a-a97a-47812e14489a",
|
|
"3.3.8.Theft and lost": "86f5fdac-df2a-4d4a-a97a-47812e14489a",
|
|
"Lack of parking slots": "86f5fdac-df2a-4d4a-a97a-47812e14489a",
|
|
"3.3.9.Lack of parking slots": "86f5fdac-df2a-4d4a-a97a-47812e14489a",
|
|
"Miscalculation": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"3.4.2.Miscalculation": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"Pricing variations": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"3.4.5.Pricing variations": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"Unavailable Beds": "2b67dc2f-b7d8-48a8-8e8c-4f90a571c414",
|
|
"3.6.5.Unavailable Beds": "2b67dc2f-b7d8-48a8-8e8c-4f90a571c414",
|
|
"Sick leave issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.7.7.Sick leave issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Birth registry issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.7.4.Birth registry issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.7.5.Death registry issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.7.6.Lab results issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Medical report issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.7.3.Medical report issues": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Incorrect medical records": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"3.7.2.Incorrect medical records": "30ff5d01-cd94-49b4-9d62-e10ffba5faca",
|
|
"Poor availability and scheduling": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8",
|
|
"2.Poor availability and scheduling": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8",
|
|
"4.1.2.Poor availability and scheduling": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8",
|
|
"Appointment scheduling refusal": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8",
|
|
"4.1.1.Appointment scheduling refusal": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8",
|
|
"Appointment delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.1.4.Appointment delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Appointment cancellation": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.1.5.Appointment cancellation": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Scheduling errors": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.1.7.Scheduling errors": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Patient admission refusal": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.1.3.Patient admission refusal": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Delay in admitting patient": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.3.1.Delay in admitting patient": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Examination delay in emergency": "af9f4297-7094-416b-a9b2-b5d1b3f212c3",
|
|
"Diagnosis delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.3.4.Diagnosis delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Delayed test result": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.3.5.Delayed test result": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Treatment delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.3.6.Treatment delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Surgical intervention delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.3.7.Surgical intervention delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Vaccinating delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.3.8.Vaccinating delay": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Delay in discharging patient": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.3.9.Delay in discharging patient": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"Communication of wrong information": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"5.2.2.Communication of wrong information": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"Deficient Information": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"5.2.1.Deficient Information": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"2.1.Deficient Information": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Not involving patient in clinical decisions": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"5.1.3.Not involving patient in clinical decisions": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"Failure to clarify patient case to his family": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"5.1.4.Failure to clarify patient case to his family": "17c5f8f1-e4c2-477a-a4d0-d4253434d22e",
|
|
"Breach of patient privacy": "98ededd1-d7c3-440a-805e-addcedf1cb41",
|
|
"6.3.2.Breach of patient privacy": "98ededd1-d7c3-440a-805e-addcedf1cb41",
|
|
"No apology to the patient": "51087d24-2803-448e-a9dc-aba310fcc15b",
|
|
"6.2.5.No apology to the patient": "51087d24-2803-448e-a9dc-aba310fcc15b",
|
|
"Reimbursements issues": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"3.4.4.Reimbursements issues": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"Specialty not available": "2b67dc2f-b7d8-48a8-8e8c-4f90a571c414",
|
|
"3.5.2.Specialty not available": "2b67dc2f-b7d8-48a8-8e8c-4f90a571c414",
|
|
"Patient death": "998e7952-ad30-432e-9631-e4493ed8aaa1",
|
|
"2.2.18.Patient death": "998e7952-ad30-432e-9631-e4493ed8aaa1",
|
|
"Labor and delivery related issues": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"2.2.10.Labor and delivery related issues": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"Wrong surgery": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"2.2.11.Wrong surgery": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"Surgical complications": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"2.2.13.Surgical complications": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"Complications resulting from treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"2.2.5.Complications resulting from treatment": "df5c295d-d04a-4260-a20e-ef2e9967d84f",
|
|
"Vaccination shortages": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.10.Vaccination shortages": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Vaccinations timing": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.11.Vaccinations timing": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Refusal to vaccinate": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.12.Refusal to vaccinate": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Refusal to dispense medications": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"2.1.9.Refusal to dispense medications": "287ba991-305b-4585-bd3a-1bf2c8b19397",
|
|
"Rushed, not time to see patients": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e",
|
|
"1.3.5.Rushed, not time to see patients": "bd4e9fea-cfe9-4a2d-9c34-0dcfad39129e",
|
|
"Medical device failure": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"2.2.2.Medical device failure": "1faf00f0-9e44-4bc8-a83c-c1a3dcb89041",
|
|
"Calculate Additional amount": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"3.4.3.Calculate Additional amount": "7f87c9c4-68df-48e7-81a4-4bebd7376253",
|
|
"Patient referral refusal": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8",
|
|
"4.4.1.Patient referral refusal": "b603082c-0e6a-420b-8f99-7ad8a5f9bbc8",
|
|
"Delay in patient transfer": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
"4.4.2.Delay in patient transfer": "00fcedd7-5de7-44dc-bf72-8fa62bbfcf4b",
|
|
}
|
|
|
|
|
|
def _normalize_name(name: str) -> str:
|
|
"""Normalize category name: replace newlines with spaces, collapse multiple spaces, strip."""
|
|
return re.sub(r"\s+", " ", name.strip()) if name else ""
|
|
|
|
|
|
def get_mapped_category(name: str, mapping: dict) -> str:
|
|
"""
|
|
Get UUID for a category name from the mapping.
|
|
|
|
Args:
|
|
name: The Excel category name
|
|
mapping: The appropriate mapping dictionary
|
|
|
|
Returns:
|
|
UUID string or None if not mapped
|
|
"""
|
|
if not name:
|
|
return None
|
|
|
|
normalized = _normalize_name(name)
|
|
|
|
# Try exact match
|
|
if normalized in mapping:
|
|
return mapping[normalized]
|
|
|
|
# Try with stripped number prefix (e.g., "1. Quality" -> "Quality", ".1. Quality" -> "Quality")
|
|
stripped_name = re.sub(r"^[.\d]+\s*", "", normalized).strip()
|
|
if stripped_name in mapping:
|
|
return mapping[stripped_name]
|
|
|
|
# Try case-insensitive match
|
|
normalized_lower = normalized.lower()
|
|
for key, value in mapping.items():
|
|
if _normalize_name(key).lower() == normalized_lower:
|
|
return value
|
|
|
|
# Try case-insensitive with stripped name
|
|
stripped_lower = stripped_name.lower()
|
|
for key, value in mapping.items():
|
|
if _normalize_name(re.sub(r"^[.\d]+\s*", "", key)).lower() == stripped_lower:
|
|
return value
|
|
|
|
return None
|
|
|
|
|
|
def is_taxonomy_mapped(domain: str, category: str, subcategory: str, classification: str) -> bool:
|
|
"""
|
|
Check if all taxonomy levels are mapped.
|
|
|
|
Args:
|
|
domain: Domain name from Excel
|
|
category: Category name from Excel
|
|
subcategory: Sub-category name from Excel
|
|
classification: Classification name from Excel
|
|
|
|
Returns:
|
|
True if all levels are mapped, False otherwise
|
|
"""
|
|
# Check each level - if name exists but not mapped, return False
|
|
if domain and not get_mapped_category(domain, DOMAIN_MAPPING):
|
|
return False
|
|
if category and not get_mapped_category(category, CATEGORY_MAPPING):
|
|
return False
|
|
if subcategory and not get_mapped_category(subcategory, SUBCATEGORY_MAPPING):
|
|
return False
|
|
if classification and not get_mapped_category(classification, CLASSIFICATION_MAPPING):
|
|
return False
|
|
|
|
return True
|