DermaDetect Platform Architecture
System Overview
The DermaDetect platform is a comprehensive dermatological diagnosis system that combines AI/ML-powered analysis with physician oversight. The system serves three main user groups:
- Patients - Submit skin condition cases via mobile/web apps
- Physicians - Review cases and provide diagnoses via backoffice portal
- Healthcare Partners - Integration partners (Maccabi, Miilabs, etc.) via APIs
High-Level Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Client Applications β
βββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ€
β Mobile Apps β Web Portals β Healthcare Systems β
β (React Native) β (Next.js) β (Maccabi API Integration) β
ββββββββββ¬βββββββββ΄βββββββββ¬βββββββββ΄ββββββββββ¬ββββββββββββββββββββββββ
β β β
βββββββββββββββββββΌβββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββ
β API Gateway Service β
β (FastAPI - Multi-tenant Auth) β
β β
β - Authentication & Authorization β
β - Case Management β
β - Image Upload/Storage β
β - AI Service Orchestration β
ββββ¬βββββββββββββββ¬ββββββββββββββ¬βββββ
β β β
β HTTP β asyncpg β Azure SDK / GCS SDK
β β β
βββββββββΌββββββββ βββββΌβββββββ βββΌββββββββββββββββββββββ
β AI Service β βPostgreSQLβ β Cloud Storage β
β (FastAPI) β β Database β β (Azure Blob / GCS) β
β β β β β β
β - Diagnosis β β - Cases β β - Patient Images β
β - Image QA β β - Users β β - Generated Reports β
β - Triage β β - Annot. β β β
β - Questions β β - Templ. β β (AI Service stores β
β β β β β ML models locally) β
βββββββββββββββββ ββββββββββββ ββββββββββββββββββββββββββService Architecture
1. API Gateway Service
Responsibility: Unified API gateway providing authentication, multi-tenancy, and business logic orchestration
Key Components:
- Authentication Module: JWT-based auth, session management, SAML/SSO
- Multi-Tenancy Module: Tenant isolation, request counting, rate limiting
- Patient API: Case submission, image upload, case status
- Physician API: Case management, annotations, templates
- Mobile API: Maccabi-specific mobile endpoints
- Backoffice API: Administrative functions, batch operations
Port: 8000 (default)
Technology:
- FastAPI with Pydantic validation
- SQLAlchemy 2.0 (async)
- asyncpg for PostgreSQL
- JWT with python-jose
- Azure/GCS/Firebase SDK for storage
API Structure:
/api/
/v1/
/auth/ # Authentication & authorization
/ai/ # Proxy to AI service
/cases/ # Case management
/annotations/ # Physician annotations
/templates/ # Diagnosis templates
/images/ # Image upload/download
/reports/ # PDF generation
/mobile/ # Mobile-specific endpoints
/backoffice/ # Admin endpoints2. AI Service
Responsibility: Machine learning and AI-powered dermatological analysis
Key Components:
- Diagnostics Module: Disease prediction from anamnesis
- Image Quality Module: Validate image suitability
- Red Flags Module: Identify urgent conditions
- Next Question Module: Adaptive questionnaire management
- Triage Module: Patient urgency assessment
- Medical Supervisor: Rule-based post-processing
Port: 8080 (default)
Technology:
- FastAPI with Pydantic validation
- TensorFlow / Scikit-learn (ML models)
- OpenCV (image processing)
- NumPy / Pandas (data processing)
- Azure Blob / GCS for model storage
API Structure:
/ai/
/v1/
/diagnosis/predict # Main diagnosis prediction
/diagnosis/red_flags # Urgent condition detection
/diagnosis/triage # Patient triage
/image_quality/validate # Image quality assessment
/questionnaire/next # Get next question
/internal/format_anamnesis # Convert API format to internal3. Shared Core Package (py_core)
Responsibility: Shared utilities and database layer
Modules:
db/- Database connection and session managementrepositories/- Data access layermodels/- Pydantic models for all entitiesauth/- Authentication utilities (JWT, password hashing)logging_config.py- Structured logging setupstorage/- S3/Azure/GCS abstractionsutils/- Common utilities
Data Flow
Patient Case Submission Flow
1. Patient Opens Mobile App
ββ> POST /api/v1/auth/login (API Gateway)
ββ> Validates credentials, returns JWT
2. Patient Fills Questionnaire
ββ> POST /api/v1/ai/questionnaire/next (API Gateway β AI Service)
ββ> Returns next question based on answers
ββ> Repeat until complete
3. Patient Uploads Images
ββ> POST /api/v1/images/upload (API Gateway)
ββ> Validates image, uploads to cloud storage
ββ> Returns cloud path
4. Patient Submits Case
ββ> POST /api/v1/cases/submit (API Gateway)
ββ> Validates request
ββ> Calls AI Service for preliminary analysis
β ββ> POST /ai/v1/diagnosis/predict (AI Service)
β ββ> Returns disease probabilities
ββ> Calls AI Service for red flags
β ββ> POST /ai/v1/diagnosis/red_flags (AI Service)
β ββ> Returns urgent conditions
ββ> Calls AI Service for triage
β ββ> POST /ai/v1/diagnosis/triage (AI Service)
β ββ> Returns urgency level
ββ> Assigns priority and private pool
ββ> Saves case to database
ββ> Returns case UUID
5. System Routes Case to Physician
ββ> Based on priority, private_pool, and physician availabilityPhysician Diagnosis Flow
1. Physician Logs In
ββ> POST /api/v1/auth/login (API Gateway)
ββ> Validates credentials, returns JWT + session
2. Physician Requests Next Case
ββ> POST /api/v1/backoffice/next-case (API Gateway)
ββ> Checks physician's private pool
ββ> Checks physician availability (vacation mode)
ββ> Finds highest priority unassigned case
ββ> Assigns case to physician (status β in_process)
ββ> Returns case details with AI suggestions
3. Physician Reviews Case
ββ> GET /api/v1/cases/:uuid (API Gateway)
ββ> Validates physician has access
ββ> Fetches case details
ββ> Fetches images from cloud storage
ββ> Returns complete case data
4. Physician Creates Diagnosis
ββ> POST /api/v1/annotations/:uuid (API Gateway)
ββ> Validates physician owns case
ββ> Saves annotation to database
ββ> Updates case status β diagnosed
ββ> Triggers patient notification
ββ> Returns success
5. Patient Views Diagnosis
ββ> GET /api/v1/cases/:uuid (API Gateway)
ββ> Updates case status β viewed_by_patient
ββ> Returns diagnosis with recommendationsDatabase Schema
Core Tables
tenants - Multi-tenant support
- id (PK)
- name
- url
- api_key
- settings (JSONB)
users - Patient accounts
- uuid (PK)
- password_hash
- tenant_id (FK)
- request_count
- role
- created_at
physicians - Physician accounts
- uuid (PK)
- password_hash
- language_preference
- private_pool
- vacation_mode
- active
- created_at
rn_requests (cases) - Patient cases
- uuid (PK)
- status (0=created, 1=complete, 2=in_process, 3=diagnosed, 4=viewed)
- vendor_id
- tenant_id (FK)
- user_identifier
- created_by (FK to users)
- assigned_to (FK to physicians)
- priority
- private_pool
- header (JSONB - metadata)
- request (JSONB - patient anamnesis)
- ml_result (JSONB - AI predictions)
- internal_request (JSONB - formatted for AI)
- created_at
- modified_at
- diagnosed_at
- viewed_at
dermatologist_annotation - Physician diagnoses
- uuid (PK)
- case_uuid (FK to rn_requests)
- physician_uuid (FK to physicians)
- disease_id
- text (diagnosis notes)
- treatment_recommendation
- created_at
- modified_at
- status (active, cancelled)
diseases - Disease master list
- id (PK)
- name_en
- name_he
- vendor_id
- severity_level
templates - Physician diagnosis templates
- id (PK)
- physician_uuid (FK)
- disease_id (FK)
- text
- created_at
service_log - API call logging
- uuid (PK)
- service_name
- user_email
- tenant_id (FK)
- response_status
- created_at
audit_annotation - Audit trail
- uuid (PK)
- case_uuid (FK)
- physician_uuid (FK)
- action
- old_status
- new_status
- created_at
Authentication & Authorization
Authentication Methods
-
Local Authentication (Email/Password)
- Bcrypt password hashing
- JWT token generation
- Token expiration: 1 hour (configurable)
-
SAML/SSO (Enterprise)
- SAML 2.0 protocol
- Active Directory integration
- Automatic user provisioning
-
Maccabi Integration (Healthcare Partner)
- Maccabi API token validation
- OAuth-like token exchange
- Technical ID-based lookup
Authorization Model
Roles:
patient- Can submit cases, view own casesphysician- Can review cases, create annotationssuperuser- Full administrative accessreadonly- Limited read-only access
Multi-Tenancy:
- All data isolated by
tenant_id - Users can only access data within their tenant
- API key required for tenant access (API routes)
Request Counting:
- Each user has
request_count(default: 500) - Decremented on each API call
- Superusers have unlimited requests
- Demo users (tenant_id=1) require special header
Cloud Storage Strategy
The system supports multiple cloud storage providers:
Azure Blob Storage:
- Primary for Maccabi deployments
- Connection string in environment
- Containers:
dermadetect,myderma,resources
Google Cloud Storage (GCS):
- Primary for general deployments
- Service account authentication
- Buckets:
dermadetect-images,dermadetect-models
Firebase Storage:
- Legacy support
- Used by older mobile apps
- Path structure:
000RN/{uuid}.{ext}
Scalability Considerations
Horizontal Scaling
- Both API Gateway and AI Service are stateless
- Can scale independently based on load
- Load balancer distributes requests
Database Scaling
- PostgreSQL with connection pooling
- Read replicas for reporting queries
- Partitioning by tenant_id for large datasets
Caching Strategy
- Redis for session storage (future)
- In-memory caching for disease lists
- CDN for static resources
Async Processing
- All database operations are async (asyncpg)
- HTTP calls to AI service are async (httpx)
- Image uploads are async
Monitoring & Observability
Logging
- Structured logging with structlog
- JSON format for production
- Request ID tracking across services
- Log levels: DEBUG, INFO, WARNING, ERROR
Metrics
- Prometheus metrics endpoint
- Request count, latency, errors
- Custom business metrics (cases per hour, etc.)
Health Checks
/healthyendpoint on each service- Database connectivity check
- External service health (AI, storage)
Security Considerations
API Security
- JWT token validation on all protected routes
- CSRF protection for web clients
- Rate limiting (60 req/min global)
- Input validation with Pydantic
- SQL injection prevention (parameterized queries)
Data Security
- Passwords hashed with bcrypt (cost: 10)
- HTTPS required in production
- Secrets in environment variables
- PII data encrypted at rest (database-level)
HIPAA/GDPR Compliance
- Audit logging for all data access
- Data deletion endpoint (
/delete_user) - Patient consent tracking
- Data retention policies
Deployment Architecture
Development Environment
Docker Compose
βββ PostgreSQL (port 5432)
βββ API Gateway (port 8000)
βββ AI Service (port 8080)
βββ LocalStack (optional, for S3 testing)Production Environment
Kubernetes Cluster
βββ API Gateway Deployment (3+ replicas)
β βββ Ingress (HTTPS)
β βββ Service (LoadBalancer)
βββ AI Service Deployment (2+ replicas)
β βββ Service (ClusterIP)
βββ PostgreSQL (Managed RDS/CloudSQL)
βββ Redis (ElastiCache/MemoryStore)
βββ Cloud Storage (Azure/GCS)Migration Path
The backend_2025 consolidates:
-
algo_python β
services/ai_service/- Flask β FastAPI conversion
- Preserve all ML/AI logic
- Add async I/O
-
dd_api β
services/api_gateway/src/api/patient/- NestJS β FastAPI conversion
- Prisma β SQLAlchemy conversion
- Add async database operations
-
api-mobile-maccabi β
services/api_gateway/src/api/mobile/- NestJS β FastAPI conversion
- TypeORM β SQLAlchemy conversion
- Integrate Maccabi-specific endpoints
-
api-backoffice-maccabi β
services/api_gateway/src/api/backoffice/- NestJS β FastAPI conversion
- TypeORM β SQLAlchemy conversion
- Preserve physician workflow
Future Enhancements
- Real-time Updates: WebSocket support for case status
- Batch Processing: Async task queue (Celery) for bulk operations
- ML Pipeline: Automated model retraining and deployment
- Analytics: Data warehouse integration
- Mobile SDK: Client SDKs for easier integration
- GraphQL: Alternative API interface