HH/docs/ORGANIZATION_MODEL.md

211 lines
6.5 KiB
Markdown

# Organization Model Implementation
## Overview
The Organization model has been added to create a hierarchical structure for healthcare facilities. This allows multiple hospitals to be grouped under a parent organization.
## Model Structure
```
Organization (Top-level)
├── Hospital (Branch)
│ ├── Department
│ │ ├── Physician
│ │ └── Employee
│ └── Patient
```
## Organization Model
### Fields
- `name` (CharField) - Organization name (English)
- `name_ar` (CharField) - Organization name (Arabic)
- `code` (CharField) - Unique organization code (indexed)
- `address` (TextField) - Organization address
- `city` (CharField) - Organization city
- `phone` (CharField) - Contact phone number
- `email` (EmailField) - Contact email address
- `website` (URLField) - Organization website URL
- `status` (CharField) - Active/Inactive status (from StatusChoices)
- `logo` (ImageField) - Organization logo image
- `license_number` (CharField) - Organization license number
- `created_at` (DateTimeField) - Auto-populated creation timestamp
- `updated_at` (DateTimeField) - Auto-populated update timestamp
### Relationships
- `hospitals` (One-to-Many) - Related name for Hospital model
## Hospital Model Changes
### New Field
- `organization` (ForeignKey to Organization) - Parent organization (nullable for backward compatibility)
### Backward Compatibility
The `organization` field is nullable to ensure existing hospitals without an organization continue to work.
## Database Migration
### Migration File
- `apps/organizations/migrations/0002_organization_hospital_organization.py`
### Changes Made
1. Created `Organization` model table
2. Added `organization` foreign key to `Hospital` table
3. Migration applied successfully
## Admin Interface
### OrganizationAdmin
- List display: name, code, city, status, created_at
- Filters: status, city
- Search: name, name_ar, code, license_number
- Ordering: by name
- Fieldsets: Basic info, Contact, Details, Metadata
### HospitalAdmin Updates
- Added `organization` field to form
- Added autocomplete for organization selection
- Added `organization_name` to list display (read-only)
## Serializers
### OrganizationSerializer
- Includes `hospitals_count` method field
- Fields: id, name, name_ar, code, address, city, phone, email, website, status, license_number, logo, hospitals_count, created_at, updated_at
### HospitalSerializer Updates
- Added `organization` field
- Added `organization_name` (read-only, from organization.name)
- Added `departments_count` method field
- Fields: id, organization, organization_name, name, name_ar, code, address, city, phone, email, status, license_number, capacity, departments_count, created_at, updated_at
## Data Migration
### Management Command
`python manage.py create_default_organization`
#### Options
- `--name` - Organization name (default: "Default Healthcare Organization")
- `--code` - Organization code (default: "DEFAULT")
- `--force` - Force reassignment of all hospitals
- `--dry-run` - Preview changes without applying
#### Example Usage
```bash
# Create default organization
python manage.py create_default_organization
# Create with custom name and code
python manage.py create_default_organization --name="My Hospital Group" --code="MHG"
# Preview changes
python manage.py create_default_organization --dry-run
# Force reassign all hospitals
python manage.py create_default_organization --force
```
### Current Data
- **Organization**: King Faisal Specialist Hospital Group (KFSHG)
- **Hospital**: Alhammadi Hospital (HH)
- **Departments**: 10
- **Status**: All hospitals assigned to organization
## Verification
### Verification Script
Run `python verify_organization.py` to check:
- Total organizations
- Hospitals per organization
- Departments per hospital
- Orphaned hospitals (without organization)
### Expected Output
```
============================================================
Organization Verification
============================================================
Total Organizations: 1
Organization: King Faisal Specialist Hospital Group (KFSHG)
Status: active
Hospitals: 1
- Alhammadi Hospital (Code: HH)
Departments: 10
✓ All hospitals have organizations assigned
============================================================
```
## Impact on Other Apps
### Complaints App
- Hospital selection in forms now shows organization context
- Complaints can be filtered by organization via hospital relationship
- No breaking changes - existing functionality preserved
### Surveys App
- Surveys can be filtered by organization
- Patient relationships work through hospital → organization
### Journey Engine
- Journeys can be organized by organization
- Department routing can consider organization context
### Call Center
- Agent dashboard can filter by organization
- Call routing can consider organization hierarchy
### Analytics App
- Reports can be aggregated at organization level
- Multi-hospital analytics available
## Future Enhancements
### Recommended Features
1. **Organization-Level Permissions**
- Role-based access control at organization level
- Organization admins managing their hospitals
2. **Organization Settings**
- Custom branding per organization
- Organization-specific policies and procedures
- Organization-level notification settings
3. **Organization Dashboard**
- Overview of all hospitals in organization
- Aggregate metrics and KPIs
- Cross-hospital comparison
4. **Multi-Organization Support**
- Users can belong to multiple organizations
- Organization switching in UI
- Organization-scoped data views
5. **Organization Hierarchy**
- Sub-organizations (regional, national)
- Multi-level organization structure
- Parent/child organization relationships
6. **Organization Templates**
- Standardized hospital templates
- Quick setup of new hospitals
- Consistent policies across organization
## Notes
- All models inherit from `UUIDModel` and `TimeStampedModel` for consistency
- Bilingual support (English/Arabic) maintained throughout
- Status management follows existing `StatusChoices` pattern
- Backward compatible with existing data
- No breaking changes to existing functionality
## References
- Model file: `apps/organizations/models.py`
- Admin file: `apps/organizations/admin.py`
- Serializer file: `apps/organizations/serializers.py`
- Migration: `apps/organizations/migrations/0002_organization_hospital_organization.py`
- Management command: `apps/organizations/management/commands/create_default_organization.py`