ServicesCrelio AppArchitectureApp Modules

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:

SubmoduleResponsibility
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:

ModelResponsibilityLines
LabsLab entity10441
LabUserStaff accounts34214 (738 lines in file)
LabSettingsLab configuration9010
LabFeaturesFeature flags8570
PreferencesUser preferences8967
DepartmentsLab departments619
OutsourceOutsourcing config5936

Total Files: 132 model files

admin/masters/

Key Models:

ModelResponsibility
AllTestsTest catalog (7937 lines)
ValueRangesReference ranges (6258 lines)
LabTestCategoryTest categories (5261 lines)
TagTagging system (5539 lines)
AttachmentsFile attachments (4937 lines)

Total Files: 52 model files

admin/organization/

Key Models:

ModelResponsibility
OrganizationB2B entities
BranchOrganization branches
OrganizationRateListB2B pricing

admin/doctor/

Key Models:

ModelResponsibility
DoctorsReferring doctors
DoctorDepartmentRelationDepartment access
DoctorSignatureSignature images

Fat Model Examples

LabUser (admin/account/models/lab_user.py)

Key Methods:

MethodPurpose
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

CategoryURL PrefixPurpose
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

  1. Add field to LabSettings model
  2. Create migration
  3. Add to settings serializer
  4. Update cache invalidation

Adding New Master Data

  1. Add model in admin/masters/models/
  2. Create serializer
  3. Add CRUD views
  4. Register in URLs

Patterns to Follow

  • Cache lab settings aggressively
  • Use proxies for specialized access
  • Validate cross-lab access

File Map

FilePurpose
admin/account/models/Account models (132 files)
admin/account/models/labs.pyLabs (10441 bytes)
admin/account/models/lab_user.pyLab users (738 lines)
admin/account/models/lab_settings.pySettings
admin/account/proxies/Proxy models (20 files)
admin/masters/models/Master data (52 files)
admin/masters/models/all_tests.pyTest catalog
admin/organization/models/Organizations
admin/doctor/models/Doctors
admin/trip_management/Trip planning

On this page