273 lines
8.0 KiB
Markdown
273 lines
8.0 KiB
Markdown
# Hospital Management System - Refactoring Progress
|
|
|
|
## Overview
|
|
This document tracks the progress of the comprehensive model refactoring based on the analysis from `tools/analyze_models.py`.
|
|
|
|
---
|
|
|
|
## ✅ COMPLETED PHASES
|
|
|
|
### Phase 1: Name Collision Resolution
|
|
|
|
#### 1.1 IntegrationLog Collision ✅ COMPLETED
|
|
**Status:** Resolved
|
|
**Date:** 2025-10-06
|
|
|
|
**Actions Taken:**
|
|
- ✅ Removed `IntegrationLog` model from `core/models.py` (line 710+)
|
|
- ✅ Added comment directing users to import from `integration.models`
|
|
- ✅ Canonical model remains in `integration/models.py`
|
|
|
|
**Impact:**
|
|
- Eliminated duplicate model definition
|
|
- Centralized integration logging in the integration app
|
|
- No breaking changes to existing code using `integration.IntegrationLog`
|
|
|
|
---
|
|
|
|
#### 1.2 InventoryLocation Collision ✅ COMPLETED
|
|
**Status:** Resolved
|
|
**Date:** 2025-10-06
|
|
|
|
**Actions Taken:**
|
|
- ✅ Removed `InventoryLocation` model from `blood_bank/models.py` (line 437+)
|
|
- ✅ Added import statement: `from inventory.models import InventoryLocation`
|
|
- ✅ Added explanatory comment at end of file
|
|
- ✅ Canonical model remains in `inventory/models.py`
|
|
|
|
**Impact:**
|
|
- Blood bank now uses centralized inventory location management
|
|
- Consistent location tracking across all departments
|
|
- Blood bank can still reference InventoryLocation via import
|
|
|
|
---
|
|
|
|
#### 1.3 QualityControl Collision ✅ COMPLETED
|
|
**Status:** Resolved
|
|
**Date:** 2025-10-06
|
|
|
|
**Actions Taken:**
|
|
- ✅ Removed `QualityControl` model from `blood_bank/models.py` (line 469+)
|
|
- ✅ Added import statement: `from laboratory.models import QualityControl`
|
|
- ✅ Added explanatory comment at end of file
|
|
- ✅ Canonical model remains in `laboratory/models.py`
|
|
|
|
**Impact:**
|
|
- Unified quality control system across laboratory and blood bank
|
|
- Consistent QC tracking and CAPA management
|
|
- Blood bank can still use QualityControl via import
|
|
|
|
---
|
|
|
|
## 🔄 IN PROGRESS
|
|
|
|
### Phase 1.4: InsuranceClaim Collision
|
|
**Status:** Not Started
|
|
**Priority:** High
|
|
|
|
**Required Actions:**
|
|
1. Analyze both `InsuranceClaim` models:
|
|
- `patients/models.py` (line 784+)
|
|
- `billing/models.py` (line 606+)
|
|
2. Merge unique fields from patients app into billing app
|
|
3. Move `ClaimDocument` and `ClaimStatusHistory` to billing app
|
|
4. Remove models from patients app
|
|
5. Update all imports across the project
|
|
6. Create data migration if needed
|
|
|
|
**Estimated Impact:**
|
|
- Major: Affects billing and patient management workflows
|
|
- Requires careful field mapping and data migration
|
|
- Multiple files will need import updates
|
|
|
|
---
|
|
|
|
## 📋 PENDING PHASES
|
|
|
|
### Phase 2: Fix Inventory Responsibility Leaks
|
|
**Status:** Not Started
|
|
**Priority:** Medium
|
|
|
|
**Identified Leaks:**
|
|
1. `pharmacy.Prescription` - quantity fields
|
|
2. `pharmacy.MedicationInventoryItem` - already correct (linking table)
|
|
3. `pharmacy.DispenseRecord` - quantity_remaining field
|
|
4. `operating_theatre.EquipmentUsage` - quantity_used field
|
|
5. `insurance_approvals.InsuranceApprovalRequest` - quantity fields (authorization, not stock)
|
|
|
|
**Required Actions:**
|
|
- Review and clarify purpose of quantity fields
|
|
- Ensure no stock tracking logic in clinical apps
|
|
- Add proper FK relationships to inventory app
|
|
- Create service layer methods for inventory operations
|
|
|
|
---
|
|
|
|
### Phase 3: Move Encounter to Core
|
|
**Status:** Not Started
|
|
**Priority:** High (Breaking Change)
|
|
|
|
**Required Actions:**
|
|
1. Copy `Encounter` model from `emr/models.py` to `core/models.py`
|
|
2. Copy `EncounterManager` to core
|
|
3. Update all ForeignKey references across apps:
|
|
- emr (VitalSigns, ProblemList, CarePlan, ClinicalNote, etc.)
|
|
- pharmacy (Prescription)
|
|
- laboratory (LabOrder)
|
|
- radiology (ImagingOrder, ImagingStudy)
|
|
- operating_theatre (SurgicalCase)
|
|
- billing (MedicalBill)
|
|
4. Remove Encounter from EMR
|
|
5. Create complex migration strategy
|
|
6. Comprehensive testing required
|
|
|
|
**Estimated Impact:**
|
|
- Critical: Affects core data model
|
|
- Requires database migration
|
|
- All apps referencing Encounter need updates
|
|
|
|
---
|
|
|
|
### Phase 4: Standardize All Models
|
|
**Status:** Not Started
|
|
**Priority:** Medium
|
|
|
|
**Required Standard Fields:**
|
|
```python
|
|
tenant = models.ForeignKey('core.Tenant', ...)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, ...)
|
|
updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, ...)
|
|
is_active = models.BooleanField(default=True)
|
|
external_id = models.CharField(max_length=100, blank=True)
|
|
```
|
|
|
|
**Apps Requiring Updates:**
|
|
- All 20 apps need review
|
|
- Approximately 153 models to check
|
|
- Many models missing one or more standard fields
|
|
|
|
---
|
|
|
|
### Phase 5: Centralized Documentation
|
|
**Status:** Partially Complete
|
|
**Priority:** High
|
|
|
|
**Completed:**
|
|
- ✅ `documentation/` app created
|
|
- ✅ `documentation/models.py` with Document, DocumentVersion, DocumentLink, DocumentAttachment
|
|
- ✅ `documentation/services.py` with core functions
|
|
|
|
**Remaining:**
|
|
1. Remove duplicate note/report models from:
|
|
- `inpatients.DischargeSummary` (narrative fields)
|
|
- `radiology.RadiologyReport` (entire model)
|
|
- `operating_theatre.SurgicalNote` (entire model)
|
|
- `emr.ClinicalNote` (link to documentation)
|
|
2. Update models to link to `documentation.Document`
|
|
3. Create DRF serializers and viewsets
|
|
4. Add to `settings.py` LOCAL_APPS
|
|
5. Create migrations
|
|
6. Update admin interfaces
|
|
|
|
---
|
|
|
|
### Phase 6: Create Service Layers
|
|
**Status:** Partially Complete
|
|
**Priority:** Medium
|
|
|
|
**Completed:**
|
|
- ✅ `inventory/services.py` exists
|
|
- ✅ `documentation/services.py` exists
|
|
|
|
**Remaining:**
|
|
1. Complete `inventory/services.py` with all CRUD operations
|
|
2. Create `billing/services.py` for claim management
|
|
3. Create service layers for other domains as needed
|
|
4. Document service layer APIs
|
|
5. Update views to use services instead of direct model access
|
|
|
|
---
|
|
|
|
## 📊 STATISTICS
|
|
|
|
### Overall Progress
|
|
- **Total Issues Identified:** 12
|
|
- **Issues Resolved:** 3 (25%)
|
|
- **Issues In Progress:** 0
|
|
- **Issues Pending:** 9 (75%)
|
|
|
|
### By Category
|
|
- **Name Collisions:** 3/4 resolved (75%)
|
|
- **Inventory Leaks:** 0/6 addressed (0%)
|
|
- **Canonical Conflicts:** 0/1 resolved (0%)
|
|
- **Field Similarities:** 0/1 addressed (0%)
|
|
|
|
---
|
|
|
|
## 🎯 NEXT STEPS
|
|
|
|
### Immediate (Next Session)
|
|
1. Complete Phase 1.4: Resolve InsuranceClaim collision
|
|
2. Begin Phase 2: Address inventory responsibility leaks
|
|
3. Plan Phase 3: Encounter migration strategy
|
|
|
|
### Short Term (This Week)
|
|
1. Complete all Phase 1 name collisions
|
|
2. Address critical inventory leaks
|
|
3. Finalize centralized documentation implementation
|
|
|
|
### Medium Term (This Month)
|
|
1. Move Encounter to core (breaking change)
|
|
2. Standardize all models with required fields
|
|
3. Complete service layer implementation
|
|
4. Comprehensive testing
|
|
|
|
---
|
|
|
|
## ⚠️ RISKS & CONSIDERATIONS
|
|
|
|
### High Risk Items
|
|
1. **Encounter Migration:** Core model move affects many apps
|
|
2. **InsuranceClaim Merge:** Complex field mapping required
|
|
3. **Database Migrations:** May require drop-and-reseed for clean implementation
|
|
|
|
### Mitigation Strategies
|
|
1. Create comprehensive backup before major changes
|
|
2. Implement changes in development environment first
|
|
3. Create detailed migration scripts with rollback procedures
|
|
4. Extensive testing after each phase
|
|
5. Consider incremental deployment vs. drop-and-reseed
|
|
|
|
---
|
|
|
|
## 📝 NOTES
|
|
|
|
### Design Decisions
|
|
- Keeping canonical models in their domain-specific apps
|
|
- Using imports rather than moving all models to core
|
|
- Maintaining backward compatibility where possible
|
|
- Prioritizing data integrity over convenience
|
|
|
|
### Technical Debt
|
|
- Some models still lack proper tenancy support
|
|
- Inconsistent field naming across apps
|
|
- Missing audit trails in some models
|
|
- No consistent external_id implementation
|
|
|
|
---
|
|
|
|
## 🔗 RELATED DOCUMENTS
|
|
|
|
- `_refactor_report/modular_refactoring_report.md` - Complete analysis and recommendations
|
|
- `_refactor_report/overlaps.json` - Detailed overlap detection results
|
|
- `_refactor_report/model_map.json` - Complete model inventory
|
|
- `tenhal_detailed_refactor_plan.md` - Step-by-step implementation guide
|
|
- `tools/analyze_models.py` - Analysis tool source code
|
|
|
|
---
|
|
|
|
**Last Updated:** 2025-10-06 16:44 AST
|
|
**Updated By:** Automated Refactoring Process
|