System Architecture

High-level architecture overview of the crelio-app Django service

System Architecture

This document provides a comprehensive overview of the crelio-app Django service architecture, including domain groupings, app responsibilities, and inter-app dependencies.

Domain Map

The codebase is organized into 17 Django apps grouped by functional domain:


Domains & Apps

Patient Domain

AppResponsibilityKey Models
patient/Patient registration, demographics, home collectionUserDetails, HomeCollection, PatientInsurance
accession/Sample lifecycle, barcoding, batchingSample, CollectedSample, Batches
report/Lab reports, signing, amendments, smart reportsLabReportRelation, SmartReport, ReflexTestConfiguration

Billing Domain

AppResponsibilityKey Models
finance/Billing, invoicing, insurance claimsBilling, InsuranceClaim, BillApprovalAction
payments/Payment gateway integrationsPayments, PaymentGatewayTransactions

Operations Domain

AppResponsibilityKey Models
operation/Lab operations, schedulingOperationLog
inventory/Reagent tracking, consumptionInventoryItem, InventoryConsumption

Integration Domain

AppResponsibilityKey Models
integration/External vendor integrations (ABDM, QuickBooks, etc.)IntegrationDirectory, LabIntegration
interfacing/Lab device/HL7 interfacingDevice, DeviceResultsValidation, DeviceFormatMapping

Admin Domain

SubmoduleResponsibility
admin/account/Labs, lab users, settings, features, preferences
admin/masters/Test catalogs, value ranges, departments
admin/organization/B2B organizations, branches
admin/doctor/Referring doctors, signatures
admin/trip_management/Phlebotomist trip planning

Shared Infrastructure

AppResponsibility
core/Base models, utilities, ES client, cache, middlewares
config/Django settings, URL routing, WSGI/ASGI
communication/SMS, WhatsApp, Email notification orchestration

Specialized Apps

AppResponsibility
nabl/NABL accreditation compliance
pacs/DICOM/radiology image integration
support/Internal support dashboard
assistant/AI assistant integration
crm/Customer relationship management, promotions

Core App Responsibilities

The core/ app serves as the foundation layer:

ComponentLocationPurpose
BaseModelcore/models/base.pyAbstract base with lifecycle hooks
ActivityLogBasecore/models/activity_log_base.pyActivity logging mixin
Cachecore/cache.pyRedis cluster cache abstraction
Clientscore/utils/clients.pyFactory for ES, S3, Slack, Pusher, DocumentDB
Middlewarescore/middlewares/Auth, session, request handling
Utilitiescore/utils/30+ utility modules (dates, encryption, translations, etc.)

BaseModel Lifecycle Hooks

class BaseModel(models.Model, ActivityLogBase):
    def save(self, *args, **kwargs):
        self.validate(*args, **kwargs)      # Validation
        self.before_save(*args, **kwargs)   # Pre-save logic
        super().save(*args, **save_kwargs)  # Database save
        self.after_save(*args, **kwargs)    # Post-save logic (ES sync, webhooks)

Dependency Graph

High-Level Dependencies

Critical Import Dependencies

From → ToEvidenceRisk Level
patient.models.user_detailsfinance.models.billingDirect import for bill creationMedium
patient.models.user_detailsreport.models.lab_report_relationReport syncingMedium
report.models.smart_reportfinance.models.billingReport generation from billLow
interfacing.models.device_results_validationreport.models.lab_report_relationResult to report mappingHigh
communication.basepatient, finance, reportCommunication templatesLow

Dependency Rules

Current Coupling Hotspots

[!WARNING] High Coupling Areas

  1. patient/models/user_details.py (3342 lines)

    • Imports from 20+ modules across 8 apps
    • Contains registration, validation, ES sync, webhooks, communication
    • Acts as central orchestrator for patient operations
  2. interfacing/models/device_results_validation.py (3338 lines)

    • Complex device integration logic
    • Direct coupling to report, finance, admin apps
  3. report/models/smart_report.py (1787 lines)

    • Report generation with matplotlib, PDF rendering
    • Imports from finance, patient, admin

Boundary Violations

ViolationLocationIssue
Cross-app model creationUserDetails.after_save()Creates/updates ES records, triggers webhooks
Direct proxy accesspatient/proxies/patient_report.pyUses LabReportRelation from report app
Circular awarenessMultiplefinance knows about patient, patient knows about finance

Ideal Boundaries (Target State)

┌─────────────────────────────────────────────────────────────┐
│                         Views Layer                          │
│  (Thin controllers - validation, routing to model methods)   │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                       Domain Models                          │
│  (Fat models with business logic, lifecycle hooks)           │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                      Shared Services                         │
│  (core/utils - ES, cache, S3, communication)                 │
└─────────────────────────────────────────────────────────────┘

External System Integrations

Integration Architecture

Integration Patterns

IntegrationLocationPattern
ABDM Health Stackintegration/abdm/Manager classes, async webhooks
QuickBooksintegration/quickbooks/OAuth, X12 835 parsing
Shippingintegration/shipping/Partner adapters
WhatsApp/SMScommunication/services/Provider adapters (Twilio, Pinnacle, etc.)
Payment Gatewayspayments/clients/Gateway clients (Stripe, Razorpay, PhonePe)
Lab Devicesinterfacing/models/HL7/ASTM parsing, result validation

Data Stores

StorePurposeAccess Pattern
PostgreSQLPrimary relational dataDjango ORM
Redis ClusterCaching, sessionscore/cache.py abstraction
ElasticsearchActivity logs, patient searchcore/utils/elastic_search/
DocumentDBIntegration logs, large documentscore/utils/documentdb/
S3File storage (reports, attachments)core/utils/aws/

File Evidence

Core Foundation

Key Fat Models

Integration Entry Points

On this page