hospital-management/tools/markdown/EMR_REFACTORING_PLAN.md
Marwan Alwali 263292f6be update
2025-11-04 00:50:06 +03:00

74 lines
2.4 KiB
Markdown

# EMR App Refactoring Plan
## Changes Required
### 1. Remove Encounter Model ❌
The entire `Encounter` class and `EncounterManager` need to be removed from `emr/models.py` since they now live in `core/models.py`.
### 2. Add Imports ✅
```python
# At the top of emr/models.py
from core.models import Encounter, Patient, TenantScopedModel
```
### 3. Update Patient References (8 models)
All models currently reference `'patients.PatientProfile'` - these need to change to `'core.Patient'`:
1. **VitalSigns**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
- Keep `encounter = FK(Encounter)` (local reference, will become core reference)
2. **ProblemList**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
- `related_encounter = FK(Encounter)` → stays the same
3. **CarePlan**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
4. **ClinicalNote**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
- `encounter = FK(Encounter)` → stays the same
5. **ClinicalRecommendation**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
- `related_encounter = FK(Encounter)` → stays the same
6. **AllergyAlert**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
7. **CriticalAlert**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
- `related_encounter = FK(Encounter)` → stays the same
8. **DiagnosticSuggestion**
- `patient = FK('patients.PatientProfile')``FK('core.Patient')`
### 4. Models That Don't Need Patient Changes
These models don't have patient FKs:
- NoteTemplate (tenant-scoped only)
- Icd10 (global reference data)
- TreatmentProtocol (tenant-scoped only)
- ClinicalGuideline (tenant-scoped only)
### 5. Consider Using TenantScopedModel
Many EMR models could inherit from `TenantScopedModel` instead of manually defining tenant/timestamps/etc. This is optional but recommended for consistency.
## Implementation Strategy
Given the large file size (~1500 lines), we'll use a targeted approach:
1. **Add imports at top**
2. **Remove Encounter and EncounterManager classes** (lines ~20-300)
3. **Update each model's patient FK** using replace_in_file
4. **Test that all references work**
## Expected Benefits
- ✅ Encounter available to all apps
- ✅ Patient identity centralized
- ✅ Consistent with core architecture
- ✅ Cleaner separation of concerns