admin
Lab administration, user management, master data, and configuration
Admin App Architecture
Domain Responsibility
What This App Owns
The admin/ app is a mega-app with multiple submodules:
| Submodule | Responsibility |
|---|---|
account/ | Labs, lab users, settings, features, policies |
masters/ | Test catalogs, departments, value ranges, categories |
organization/ | B2B organizations, branches |
doctor/ | Referring doctors, signatures |
trip_management/ | Phlebotomist trips |
dictionary/ | Terminology/reference data |
plan_management/ | Subscription plans |
generic_approval/ | Approval workflows |
What It Depends On
core/- BaseModel, utilities
What Should NOT Be Added Here
- Patient data (belongs in
patient/) - Financial transactions (belongs in
finance/) - Lab device logic (belongs in
interfacing/)
Submodule Architecture
admin/account/
Key Models:
| Model | Responsibility | Lines |
|---|---|---|
Labs | Lab entity | 10441 |
LabUser | Staff accounts | 34214 (738 lines in file) |
LabSettings | Lab configuration | 9010 |
LabFeatures | Feature flags | 8570 |
Preferences | User preferences | 8967 |
Departments | Lab departments | 619 |
Outsource | Outsourcing config | 5936 |
Total Files: 132 model files
admin/masters/
Key Models:
| Model | Responsibility |
|---|---|
AllTests | Test catalog (7937 lines) |
ValueRanges | Reference ranges (6258 lines) |
LabTestCategory | Test categories (5261 lines) |
Tag | Tagging system (5539 lines) |
Attachments | File attachments (4937 lines) |
Total Files: 52 model files
admin/organization/
Key Models:
| Model | Responsibility |
|---|---|
Organization | B2B entities |
Branch | Organization branches |
OrganizationRateList | B2B pricing |
admin/doctor/
Key Models:
| Model | Responsibility |
|---|---|
Doctors | Referring doctors |
DoctorDepartmentRelation | Department access |
DoctorSignature | Signature images |
Fat Model Examples
LabUser (admin/account/models/lab_user.py)
Key Methods:
| Method | Purpose |
|---|---|
update_lab_user_data() | Cache + Pusher sync |
create_lab_user_details_ES() | ES indexing |
update_lab_user_details_ES() | ES updates |
get_lab_user() | Multi-lab user lookup |
Labs
Feature Flags Pattern:
# admin/account/proxies/lab_feature.py
class LabFeature:
@classmethod
def is_enabled(cls, lab_id, feature_name):
"""Check if feature is enabled for lab"""
features = cache.get(f"lab_features_{lab_id}")
if not features:
features = cls.objects.filter(
labId_id=lab_id
).values("feature_name", "is_active")
cache.set(f"lab_features_{lab_id}", features)
return any(
f["is_active"] for f in features
if f["feature_name"] == feature_name
)Proxy Models Pattern
Heavy use of proxy models for domain-specific behavior:
admin/account/proxies/
├── lab_feature.py # Feature flag access
├── lab_setting.py # Settings access
├── lab_relation.py # Multi-lab relationships
├── icd_list_details.py # ICD code lookup
└── ... (20 files)Data Access Patterns
Caching Strategy
# Lab settings are heavily cached
LabSetting.objects.filter(labId_id=lab_id).values()
# Cache key pattern: lab_settings_{lab_id}Multi-Lab Queries
# Get labs in hierarchy
LabRelations.get_child_labs(parent_lab_id)
# Query across labs
AllTests.objects.filter(
labId_id__in=lab_ids
).select_related("category")API Layer
Endpoint Categories
| Category | URL Prefix | Purpose |
|---|---|---|
| Lab management | /admin/account/labs/ | CRUD labs |
| User management | /admin/account/users/ | Staff CRUD |
| Test catalog | /admin/masters/tests/ | Test CRUD |
| Organizations | /admin/organization/ | B2B management |
| Doctors | /admin/doctor/ | Doctor management |
Safe Extension Guide
Adding New Lab Setting
- Add field to
LabSettingsmodel - Create migration
- Add to settings serializer
- Update cache invalidation
Adding New Master Data
- Add model in
admin/masters/models/ - Create serializer
- Add CRUD views
- Register in URLs
Patterns to Follow
- Cache lab settings aggressively
- Use proxies for specialized access
- Validate cross-lab access
File Map
| File | Purpose |
|---|---|
| admin/account/models/ | Account models (132 files) |
| admin/account/models/labs.py | Labs (10441 bytes) |
| admin/account/models/lab_user.py | Lab users (738 lines) |
| admin/account/models/lab_settings.py | Settings |
| admin/account/proxies/ | Proxy models (20 files) |
| admin/masters/models/ | Master data (52 files) |
| admin/masters/models/all_tests.py | Test catalog |
| admin/organization/models/ | Organizations |
| admin/doctor/models/ | Doctors |
| admin/trip_management/ | Trip planning |