System Architecture High-level architecture overview of the crelio-app Django service
This document provides a comprehensive overview of the crelio-app Django service architecture, including domain groupings, app responsibilities, and inter-app dependencies.
The codebase is organized into 17 Django apps grouped by functional domain:
App Responsibility Key Models patient/Patient registration, demographics, home collection UserDetails, HomeCollection, PatientInsuranceaccession/Sample lifecycle, barcoding, batching Sample, CollectedSample, Batchesreport/Lab reports, signing, amendments, smart reports LabReportRelation, SmartReport, ReflexTestConfiguration
App Responsibility Key Models finance/Billing, invoicing, insurance claims Billing, InsuranceClaim, BillApprovalActionpayments/Payment gateway integrations Payments, PaymentGatewayTransactions
App Responsibility Key Models operation/Lab operations, scheduling OperationLoginventory/Reagent tracking, consumption InventoryItem, InventoryConsumption
App Responsibility Key Models integration/External vendor integrations (ABDM, QuickBooks, etc.) IntegrationDirectory, LabIntegrationinterfacing/Lab device/HL7 interfacing Device, DeviceResultsValidation, DeviceFormatMapping
Submodule Responsibility 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
App Responsibility core/Base models, utilities, ES client, cache, middlewares config/Django settings, URL routing, WSGI/ASGI communication/SMS, WhatsApp, Email notification orchestration
App Responsibility nabl/NABL accreditation compliance pacs/DICOM/radiology image integration support/Internal support dashboard assistant/AI assistant integration crm/Customer relationship management, promotions
The core/ app serves as the foundation layer:
Component Location Purpose BaseModel core/models/base.pyAbstract base with lifecycle hooks ActivityLogBase core/models/activity_log_base.pyActivity logging mixin Cache core/cache.pyRedis cluster cache abstraction Clients core/utils/clients.pyFactory for ES, S3, Slack, Pusher, DocumentDB Middlewares core/middlewares/Auth, session, request handling Utilities core/utils/30+ utility modules (dates, encryption, translations, etc.)
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)
From → To Evidence Risk Level patient.models.user_details → finance.models.billingDirect import for bill creation Medium patient.models.user_details → report.models.lab_report_relationReport syncing Medium report.models.smart_report → finance.models.billingReport generation from bill Low interfacing.models.device_results_validation → report.models.lab_report_relationResult to report mapping High communication.base → patient, finance, reportCommunication templates Low
[!WARNING]
High Coupling Areas
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
interfacing/models/device_results_validation.py (3338 lines)
Complex device integration logic
Direct coupling to report, finance, admin apps
report/models/smart_report.py (1787 lines)
Report generation with matplotlib, PDF rendering
Imports from finance, patient, admin
Violation Location Issue Cross-app model creation UserDetails.after_save()Creates/updates ES records, triggers webhooks Direct proxy access patient/proxies/patient_report.pyUses LabReportRelation from report app Circular awareness Multiple finance knows about patient, patient knows about finance
┌─────────────────────────────────────────────────────────────┐
│ 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) │
└─────────────────────────────────────────────────────────────┘
Integration Location Pattern ABDM Health Stack integration/abdm/Manager classes, async webhooks QuickBooks integration/quickbooks/OAuth, X12 835 parsing Shipping integration/shipping/Partner adapters WhatsApp/SMS communication/services/Provider adapters (Twilio, Pinnacle, etc.) Payment Gateways payments/clients/Gateway clients (Stripe, Razorpay, PhonePe) Lab Devices interfacing/models/HL7/ASTM parsing, result validation
Store Purpose Access Pattern PostgreSQL Primary relational data Django ORM Redis Cluster Caching, sessions core/cache.py abstractionElasticsearch Activity logs, patient search core/utils/elastic_search/DocumentDB Integration logs, large documents core/utils/documentdb/S3 File storage (reports, attachments) core/utils/aws/