12 KiB
HR & Integrations Frontend Implementation Progress Report
Date: October 22, 2025
Project: AgdarCentre - Tenhal Multidisciplinary Healthcare Platform
Executive Summary
This report documents the current state of the HR and Integrations modules, identifying what exists in the Django admin vs. what's missing from the frontend implementation.
1. HR Module Analysis
Current Status: ❌ NOT IMPLEMENTED
The HR module does not exist as a Django app. Only orphaned templates are present.
What EXISTS:
- ✅ 10 HTML Templates in
templates/hr/:attendance_list.htmlattendance_form.htmlattendance_detail.htmlattendance_kiosk.htmlschedule_list.htmlschedule_form.htmlschedule_detail.htmlschedule_grid.htmlholiday_list.htmlholiday_form.htmlholiday_detail.html
What's MISSING:
1.1 Django App Structure
- ❌ No
hr/app directory - ❌ No
hr/__init__.py - ❌ No
hr/apps.py - ❌ No
hr/models.py - ❌ No
hr/views.py - ❌ No
hr/urls.py - ❌ No
hr/admin.py - ❌ No
hr/forms.py - ❌ No
hr/migrations/
1.2 Required Models (Based on Template Analysis)
Attendance Model:
class Attendance(models.Model):
employee = ForeignKey(User) # or separate Employee model
date = DateField()
check_in = TimeField()
check_out = TimeField(null=True, blank=True)
hours_worked = DecimalField() # calculated
status = CharField(choices=['PRESENT', 'LATE', 'ABSENT', 'HALF_DAY'])
notes = TextField(blank=True)
Schedule Model:
class Schedule(models.Model):
employee = ForeignKey(User)
day_of_week = CharField(choices=['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
start_time = TimeField()
end_time = TimeField()
is_active = BooleanField(default=True)
Holiday Model:
class Holiday(models.Model):
name = CharField(max_length=200)
date = DateField()
is_recurring = BooleanField(default=False) # for annual holidays
description = TextField(blank=True)
1.3 Required Views
- ❌
AttendanceListView - ❌
AttendanceCreateView - ❌
AttendanceDetailView - ❌
AttendanceUpdateView - ❌
AttendanceKioskView(special clock in/out interface) - ❌
ScheduleListView - ❌
ScheduleCreateView - ❌
ScheduleDetailView - ❌
ScheduleUpdateView - ❌
ScheduleGridView(calendar-style view) - ❌
HolidayListView - ❌
HolidayCreateView - ❌
HolidayDetailView - ❌
HolidayUpdateView
1.4 Required URL Patterns
# Expected URL namespace: 'hr'
urlpatterns = [
path('attendance/', AttendanceListView, name='attendance-list'),
path('attendance/create/', AttendanceCreateView, name='attendance-create'),
path('attendance/<uuid:pk>/', AttendanceDetailView, name='attendance-detail'),
path('attendance/<uuid:pk>/update/', AttendanceUpdateView, name='attendance-update'),
path('attendance/kiosk/', AttendanceKioskView, name='attendance-kiosk'),
path('schedules/', ScheduleListView, name='schedule-list'),
path('schedules/create/', ScheduleCreateView, name='schedule-create'),
path('schedules/<uuid:pk>/', ScheduleDetailView, name='schedule-detail'),
path('schedules/<uuid:pk>/update/', ScheduleUpdateView, name='schedule-update'),
path('schedules/grid/', ScheduleGridView, name='schedule-grid'),
path('holidays/', HolidayListView, name='holiday-list'),
path('holidays/create/', HolidayCreateView, name='holiday-create'),
path('holidays/<uuid:pk>/', HolidayDetailView, name='holiday-detail'),
path('holidays/<uuid:pk>/update/', HolidayUpdateView, name='holiday-update'),
]
1.5 Main URLs Integration
- ❌ Not included in
AgdarCentre/urls.py - Need to add:
path('hr/', include('hr.urls'))
1.6 Forms
- ❌
AttendanceForm - ❌
ScheduleForm - ❌
HolidayForm
1.7 Admin Configuration
- ❌ Admin classes for all three models
2. Integrations Module Analysis
Current Status: ⚠️ BACKEND COMPLETE, FRONTEND MISSING
The integrations app exists with full backend implementation but zero frontend integration.
What EXISTS:
2.1 Complete Backend ✅
-
✅ Django app structure (
integrations/) -
✅ 6 Models fully implemented:
ExternalOrder- Lab & radiology ordersNphiesMessage- Insurance e-claims FHIR messagesNphiesEncounterLink- Links appointments to NPHIESPayerContract- Insurance payer configurationsEInvoice- ZATCA e-invoicingZatcaCredential- ZATCA credentials management
-
✅ Admin Interface - Fully configured for all 6 models with:
- List displays
- Filters
- Search fields
- Fieldsets
- Read-only fields
-
✅ Supporting Files:
messaging_service.py- SMS/WhatsApp integrationsms_providers.py- SMS provider implementationstasks.py- Celery tasks for async operations
What's MISSING:
2.2 Frontend Components ❌
Views (integrations/views.py):
Currently only contains: from django.shortcuts import render with no actual views.
Required views:
- ❌
ExternalOrderListView - ❌
ExternalOrderCreateView - ❌
ExternalOrderDetailView - ❌
ExternalOrderUpdateView - ❌
NphiesMessageListView - ❌
NphiesMessageDetailView - ❌
PayerContractListView - ❌
PayerContractCreateView - ❌
PayerContractUpdateView - ❌
EInvoiceListView - ❌
EInvoiceDetailView - ❌
ZatcaCredentialListView - ❌
ZatcaCredentialCreateView
Templates:
- ❌
integrations/templates/directory exists but is empty
Required templates:
- ❌
integrations/external_order_list.html - ❌
integrations/external_order_form.html - ❌
integrations/external_order_detail.html - ❌
integrations/nphies_message_list.html - ❌
integrations/nphies_message_detail.html - ❌
integrations/payer_contract_list.html - ❌
integrations/payer_contract_form.html - ❌
integrations/einvoice_list.html - ❌
integrations/einvoice_detail.html - ❌
integrations/zatca_credential_list.html - ❌
integrations/zatca_credential_form.html
Forms:
- ❌ No
integrations/forms.pyfile
Required forms:
- ❌
ExternalOrderForm - ❌
PayerContractForm - ❌
ZatcaCredentialForm
URLs:
- ❌ No
integrations/urls.pyfile - ❌ Not included in
AgdarCentre/urls.py
Required URL patterns:
# Expected URL namespace: 'integrations'
urlpatterns = [
# External Orders
path('orders/', ExternalOrderListView, name='order-list'),
path('orders/create/', ExternalOrderCreateView, name='order-create'),
path('orders/<uuid:pk>/', ExternalOrderDetailView, name='order-detail'),
# NPHIES
path('nphies/messages/', NphiesMessageListView, name='nphies-message-list'),
path('nphies/messages/<uuid:pk>/', NphiesMessageDetailView, name='nphies-message-detail'),
path('nphies/payers/', PayerContractListView, name='payer-list'),
path('nphies/payers/create/', PayerContractCreateView, name='payer-create'),
# ZATCA
path('zatca/invoices/', EInvoiceListView, name='einvoice-list'),
path('zatca/invoices/<uuid:pk>/', EInvoiceDetailView, name='einvoice-detail'),
path('zatca/credentials/', ZatcaCredentialListView, name='credential-list'),
path('zatca/credentials/create/', ZatcaCredentialCreateView, name='credential-create'),
]
Navigation:
- ❌ No menu items in main navigation
- ❌ No dashboard widgets/cards
3. Implementation Priority Recommendations
Phase 1: Integrations (EASIER - Backend exists)
Estimated Effort: 2-3 days
- Create
integrations/forms.pywith ModelForms - Create
integrations/views.pywith generic CRUD views - Create templates following existing app patterns
- Create
integrations/urls.pyand wire to main URLs - Add navigation menu items
- Add dashboard cards for quick access
Complexity: Low - Models and admin already exist, just need frontend
Phase 2: HR Module (HARDER - Start from scratch)
Estimated Effort: 3-4 days
- Create Django app:
python manage.py startapp hr - Design and implement 3 models (Attendance, Schedule, Holiday)
- Create and run migrations
- Configure admin interface
- Create forms
- Create views (generic CRUD + special views for kiosk and grid)
- Create
hr/urls.pyand wire to main URLs - Wire existing templates to new views
- Add navigation menu items
- Add dashboard cards
Complexity: Medium - Full app creation but simple models
4. Model Field Details (Based on Template Analysis)
HR Models - Detailed Field Requirements
Attendance Model
class Attendance(UUIDPrimaryKeyMixin, TimeStampedMixin, TenantOwnedMixin):
employee = ForeignKey('core.User', on_delete=CASCADE, related_name='attendances')
date = DateField()
check_in = TimeField(null=True, blank=True)
check_out = TimeField(null=True, blank=True)
hours_worked = DecimalField(max_digits=4, decimal_places=2, null=True, blank=True)
status = CharField(max_length=20, choices=Status.choices)
notes = TextField(blank=True)
class Status(TextChoices):
PRESENT = 'PRESENT', _('Present')
LATE = 'LATE', _('Late')
ABSENT = 'ABSENT', _('Absent')
HALF_DAY = 'HALF_DAY', _('Half Day')
LEAVE = 'LEAVE', _('On Leave')
Schedule Model
class Schedule(UUIDPrimaryKeyMixin, TimeStampedMixin, TenantOwnedMixin):
employee = ForeignKey('core.User', on_delete=CASCADE, related_name='schedules')
day_of_week = CharField(max_length=3, choices=DayOfWeek.choices)
start_time = TimeField()
end_time = TimeField()
is_active = BooleanField(default=True)
class DayOfWeek(TextChoices):
MONDAY = 'MON', _('Monday')
TUESDAY = 'TUE', _('Tuesday')
WEDNESDAY = 'WED', _('Wednesday')
THURSDAY = 'THU', _('Thursday')
FRIDAY = 'FRI', _('Friday')
SATURDAY = 'SAT', _('Saturday')
SUNDAY = 'SUN', _('Sunday')
Holiday Model
class Holiday(UUIDPrimaryKeyMixin, TimeStampedMixin, TenantOwnedMixin):
name = CharField(max_length=200)
date = DateField()
is_recurring = BooleanField(default=False)
description = TextField(blank=True)
5. Summary Statistics
HR Module
- Models to Create: 3
- Views to Create: 14
- Forms to Create: 3
- Templates Available: 10 (already exist!)
- Admin Classes to Create: 3
- URL Patterns to Create: ~14
- Overall Completion: 0% (only templates exist)
Integrations Module
- Models Existing: 6 ✅
- Admin Classes Existing: 6 ✅
- Views to Create: 12
- Forms to Create: 3
- Templates to Create: 11
- URL Patterns to Create: ~12
- Overall Completion: 40% (backend complete, frontend missing)
6. Next Steps
Immediate Actions Required:
-
Decision Point: Which module to implement first?
- Recommendation: Start with Integrations (easier, backend exists)
-
For Integrations:
- Create forms.py
- Create views.py with CRUD views
- Create templates
- Create urls.py
- Update main urls.py
- Add navigation
-
For HR:
- Create Django app
- Implement models
- Run migrations
- Create admin
- Create forms
- Create views
- Create urls.py
- Update main urls.py
- Add navigation
7. Technical Notes
Design Patterns to Follow:
- Use existing app patterns (appointments, finance, etc.)
- Follow Django generic views (ListView, CreateView, DetailView, UpdateView)
- Use crispy-forms for form rendering
- Maintain bilingual support (English/Arabic)
- Include tenant filtering
- Add proper permissions/access control
- Follow existing URL naming conventions
Dependencies:
- All required packages already installed
- No additional dependencies needed
- Templates follow Bootstrap 5 patterns
- Font Awesome icons already available
Report Generated: October 22, 2025
Status: Ready for Implementation