How agasthya736/lucidia works
Purpose and entry points
Lucidia/VeriRad is an early-stage CT-scan documentation and second-read support system. It accepts scans, coordinates multiple AI readers into a report draft, and preserves clinician review as the final decision boundary. Main runtime entry points are the Spring Boot service at backend/src/main/java/com/lucidia/backend/LucidiaApplication.java and Flutter client at mobile/lib/main.dart.
Client application
The cross-platform Flutter client provides authentication, scan capture/submission, pipeline status, and report viewing. Its application-level API boundary is mobile/lib/shared/api_client.dart; scan workflows are centered in mobile/lib/scan/scan_capture_screen.dart and mobile/lib/scan/scan_service.dart. Authentication UI and token-facing behavior reside under mobile/lib/auth/auth_service.dart.
Backend API and security boundary
Spring Boot exposes scan and diagnostic/test endpoints through backend/src/main/java/com/lucidia/backend/api/ScanController.java and backend/src/main/java/com/lucidia/backend/api/VisionTestController.java. Authentication is a separate API/domain boundary at backend/src/main/java/com/lucidia/backend/auth/AuthController.java, with JWT handling in backend/src/main/java/com/lucidia/backend/auth/JwtService.java and authorization policy in backend/src/main/java/com/lucidia/backend/config/SecurityConfig.java. DTOs isolate HTTP payloads from internal models in backend/src/main/java/com/lucidia/backend/dto/ScanDtos.java.
Scan lifecycle and persistence
backend/src/main/java/com/lucidia/backend/scan/ScanService.java owns scan-oriented application behavior, backed by JPA persistence via backend/src/main/java/com/lucidia/backend/scan/Scan.java and backend/src/main/java/com/lucidia/backend/scan/ScanRepository.java. Uploaded image binaries are held behind backend/src/main/java/com/lucidia/backend/scan/ImageStorageService.java, currently reflected by local vault-like content in backend/data/images. Generated report delivery is separated into backend/src/main/java/com/lucidia/backend/scan/ReportPdfService.java.
Multi-agent pipeline orchestration
backend/src/main/java/com/lucidia/backend/orchestrator/PipelineOrchestrator.java is the primary control-flow coordinator. It returns a normalized outcome through backend/src/main/java/com/lucidia/backend/orchestrator/PipelineResult.java and surfaces unrecoverable execution through backend/src/main/java/com/lucidia/backend/orchestrator/PipelineFailedException.java. Retry semantics are centralized in backend/src/main/java/com/lucidia/backend/agents/RetryHelper.java, establishing a resilience boundary around model/service calls.
AI stages and provider boundary
Independent image interpretation is abstracted by backend/src/main/java/com/lucidia/backend/agents/vision/VisionAgent.java, with provider implementations for Gemini and Ollama in backend/src/main/java/com/lucidia/backend/agents/vision/GeminiVisionAgent.java and backend/src/main/java/com/lucidia/backend/agents/vision/OllamaVisionAgent.java. Findings are normalized through backend/src/main/java/com/lucidia/backend/agents/vision/VisionFindings.java. Consensus is handled by backend/src/main/java/com/lucidia/backend/agents/arbiter/ArbiterAgent.java; report drafting by backend/src/main/java/com/lucidia/backend/agents/writing/WritingAgent.java; and claim checking by backend/src/main/java/com/lucidia/backend/agents/verifier/VerifierAgent.java. Implementations are scaffold-level, so these interfaces are the key extension points.
Explainability and external infrastructure
A dedicated Python service supplies MedSAM-based image analysis/explainability: medsam-service/app.py, containerized by medsam-service/Dockerfile. Java reaches it through backend/src/main/java/com/lucidia/backend/agents/vision/MedSamClient.java and carries output in backend/src/main/java/com/lucidia/backend/agents/vision/MedSamFindings.java. The system also depends on PostgreSQL, with schema evolution in backend/src/main/resources/db/migration, and external LLM/model-provider APIs configured in backend/src/main/resources/application.yml. Root docker-compose.yml is the infrastructure composition point.
Audit and review accountability
The backend records traceable audit events through backend/src/main/java/com/lucidia/backend/audit/AuditLogService.java, persisted as backend/src/main/java/com/lucidia/backend/audit/AuditLogEntry.java. This supports the core operational boundary: AI outputs are drafts/supporting evidence, while clinician review and sign-off remain outside automated diagnostic authority.
Main entry points: ScanService.java Scan lifecycle · PipelineOrchestrator.java Pipeline orchestrator · api_client.dart API client · SecurityConfig.java JWT security policy
Components 23
Flutter Client
- Flutter application · Authentication, scan submission, status, and report viewing.
mobile/lib/main.dart - API client
mobile/lib/shared/api_client.dart - Scan capture
mobile/lib/scan/scan_capture_screen.dart - Auth service
mobile/lib/auth/auth_service.dart
Spring Backend
- JWT security policy
backend/src/main/java/com/lucidia/backend/config/SecurityConfig.java - Authentication API
backend/src/main/java/com/lucidia/backend/auth/AuthController.java - JWT service
backend/src/main/java/com/lucidia/backend/auth/JwtService.java - Scan API
backend/src/main/java/com/lucidia/backend/api/ScanController.java - Scan lifecycle
backend/src/main/java/com/lucidia/backend/scan/ScanService.java - Scan persistence
backend/src/main/java/com/lucidia/backend/scan/ScanRepository.java - Image storage · Local vault-like image content.
backend/src/main/java/com/lucidia/backend/scan/ImageStorageService.java - Report PDF delivery
backend/src/main/java/com/lucidia/backend/scan/ReportPdfService.java - Audit logging · Records traceable AI and workflow events.
backend/src/main/java/com/lucidia/backend/audit/AuditLogService.java
AI Pipeline
- Pipeline orchestrator · Coordinates AI readers and normalizes pipeline outcomes.
backend/src/main/java/com/lucidia/backend/orchestrator/PipelineOrchestrator.java - Vision readers · Gemini and Ollama implementations produce normalized findings.
backend/src/main/java/com/lucidia/backend/agents/vision/VisionAgent.java - MedSAM client
backend/src/main/java/com/lucidia/backend/agents/vision/MedSamClient.java - Consensus arbiter
backend/src/main/java/com/lucidia/backend/agents/arbiter/ArbiterAgent.java - Report writer
backend/src/main/java/com/lucidia/backend/agents/writing/WritingAgent.java - Claim verifier
backend/src/main/java/com/lucidia/backend/agents/verifier/VerifierAgent.java
External Infrastructure
- LLM provider APIs
backend/src/main/resources/application.yml - MedSAM service · Containerized image analysis and explainability service.
medsam-service/app.py - PostgreSQL · Stores scans and audit records.
backend/src/main/resources/db/migration
Other components
- Clinician review · Final sign-off remains outside automated diagnostic authority.
Connections 24
- Flutter application → API client: uses
- Scan capture → API client: submits scans
- Auth service → API client: authenticates
- API client → JWT security policy: authenticated requests
- JWT security policy → Authentication API: protects
- Authentication API → JWT service: issues tokens
- JWT security policy → Scan API: authorizes
- Scan API → Scan lifecycle: scan requests
- Scan lifecycle → Scan persistence: persists metadata
- Scan lifecycle → Image storage: stores images
- Scan lifecycle → Pipeline orchestrator: starts analysis
- Pipeline orchestrator → Vision readers: independent reads
- Vision readers → LLM provider APIs: model calls
- Pipeline orchestrator → MedSAM client: requests explainability
- MedSAM client → MedSAM service: analysis request
- Pipeline orchestrator → Consensus arbiter: reconciles findings
- Consensus arbiter → Report writer: consensus
- Report writer → Claim verifier: draft claims
- Claim verifier → Scan lifecycle: verified draft
- Scan lifecycle → Report PDF delivery: generates report
- Scan lifecycle → Audit logging: records events
- Scan persistence → PostgreSQL: JPA data
- Audit logging → PostgreSQL: audit records
- Report PDF delivery → Clinician review: draft for review