# sampathsriramoju/innovasia architecture

> Architecture diagram of the GitHub repository sampathsriramoju/innovasia, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sampathsriramoju/innovasia
- Repository: https://github.com/sampathsriramoju/innovasia

## Overview

Bol Kisan is a multilingual, voice-first agricultural assistance and extension-operations platform. Farmers use the Android client to ask questions, submit crop photos, and receive online or offline guidance; uncertain or safety-sensitive cases can be escalated for officer review through a ticket workflow. The backend exposes these services alongside verified-knowledge retrieval, deterministic pesticide safeguards, and weather and market information. Officers review cases in a web dashboard and can prepare guided prescriptions. The README documents major capabilities whose implementation details were not sampled; those subsystems are represented at their supported directory paths, without asserting unverified internal calls.

Main entry points: [`apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt) (Farmer Services), [`backend/app/api/v1/router.py`](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/router.py) (API Routes), [`backend/app/api/v1/endpoints/voice.py`](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/endpoints/voice.py) (Voice Queries), [`apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt`](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt) (Offline Inference)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_farmer["Farmer Android"]
  node_android_app["Farmer App<br/>[MainActivity.kt]"]
  node_mobile_workflow["Farmer Services"]
  node_voice_ui["Voice Assistant"]
  node_voice_manager["Voice Runtime"]
  node_offline_inference["Offline Inference"]
  node_offline_model["Offline Model"]
  node_offline_safety["Offline Safety"]
  node_offline_format["Answer Formatter"]
  node_network_state["Connectivity<br/>[NetworkObserver.kt]"]
  node_api_client["API Client<br/>[ApiClient.kt]"]
  node_api_service["API Contract"]
  node_sync_worker["Offline Sync<br/>[SyncWorker.kt]"]
end

subgraph group_backend["AI Backend"]
  node_backend_api["FastAPI Service<br/>[main.py]"]
  node_api_routes["API Routes<br/>[router.py]"]
  node_voice_endpoint["Voice Queries<br/>[voice.py]"]
  node_disease_endpoint["Disease Diagnosis<br/>[disease.py]"]
  node_ticket_endpoint["Ticket Services<br/>[tickets.py]"]
  node_other_endpoints["Farm Data APIs"]
  node_query_understanding["Query Understanding"]
  node_rag["Knowledge Retrieval<br/>[rag_service.py]"]
  node_gemini["Generative AI<br/>[gemini_service.py]"]
  node_vision["Crop Vision"]
  node_safety["Pesticide Safety"]
  node_integrations["External Farm Data"]
end

subgraph group_officer["Officer Operations"]
  node_dashboard_app["Officer Portal<br/>[App.tsx]"]
  node_dashboard_api["Portal API Client<br/>[api.ts]"]
  node_ticket_review["Case Review<br/>[TicketDetail.tsx]"]
end

subgraph group_state["Knowledge and State"]
  node_local_db[("Offline Database<br/>[AppDatabase.kt]")]
  node_local_seed["Knowledge Preload"]
  node_local_entity["Knowledge Records"]
  node_token_storage["Token Storage"]
  node_database_models[("Farm Data Models<br/>[models.py]")]
end

node_farmer_user(("Farmer"))
node_officer_user(("Extension Officer"))

node_farmer_user -->|"uses"| node_android_app
node_android_app -.->|"invokes"| node_mobile_workflow
node_mobile_workflow -->|"requests"| node_api_client
node_api_client -->|"builds"| node_api_service
node_api_service -->|"HTTP requests"| node_backend_api
node_backend_api -->|"mounts"| node_api_routes
node_api_routes -->|"routes"| node_voice_endpoint
node_api_routes -->|"routes"| node_disease_endpoint
node_api_routes -->|"routes"| node_ticket_endpoint
node_api_routes -->|"routes"| node_other_endpoints
node_voice_endpoint -.->|"processes query"| node_query_understanding
node_voice_endpoint -.->|"retrieves evidence"| node_rag
node_voice_endpoint -.->|"generates answer"| node_gemini
node_disease_endpoint -.->|"diagnoses image"| node_vision
node_vision -->|"retrieves evidence"| node_rag
node_vision -->|"checks chemical advice"| node_safety
node_voice_endpoint -.->|"enforces pesticide rules"| node_safety
node_ticket_endpoint -.->|"persists cases"| node_database_models
node_other_endpoints -.->|"fetches farm data"| node_integrations
node_rag -.->|"uses knowledge records"| node_database_models
node_mobile_workflow -->|"observes connectivity"| node_network_state
node_mobile_workflow -->|"opens cache"| node_local_db
node_local_db -->|"stores"| node_local_entity
node_local_seed -->|"prepopulates"| node_local_db
node_mobile_workflow -->|"runs offline inference"| node_offline_inference
node_offline_inference -->|"uses runtime"| node_offline_model
node_offline_inference -->|"checks answer"| node_offline_safety
node_offline_inference -->|"formats answer"| node_offline_format
node_mobile_workflow -->|"uses credentials"| node_token_storage
node_sync_worker -->|"syncs online"| node_api_client
node_sync_worker -->|"reads queued data"| node_local_db
node_voice_ui -.->|"uses voice runtime"| node_voice_manager
node_officer_user -->|"uses"| node_dashboard_app
node_dashboard_app -->|"validates session"| node_dashboard_api
node_dashboard_api -.->|"HTTP requests"| node_backend_api
node_dashboard_app -.->|"opens case review"| node_ticket_review
node_ticket_review -.->|"loads case data"| node_dashboard_api
node_dashboard_app -.->|"receives case data"| node_database_models

click node_android_app "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/MainActivity.kt"
click node_mobile_workflow "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt"
click node_voice_ui "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/presentation/voice/VoiceAssistantScreen.kt"
click node_voice_manager "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/voice/VoiceAssistantManager.kt"
click node_offline_inference "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt"
click node_offline_model "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineModelManager.kt"
click node_offline_safety "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineSafetyGate.kt"
click node_offline_format "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineKnowledgeFormatter.kt"
click node_network_state "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/util/NetworkObserver.kt"
click node_api_client "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/ApiClient.kt"
click node_api_service "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/BolKisanApiService.kt"
click node_local_db "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/AppDatabase.kt"
click node_local_seed "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/KnowledgePrepopulator.kt"
click node_local_entity "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/entities/OfflineKnowledgeEntity.kt"
click node_token_storage "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/SecureTokenStorage.kt"
click node_sync_worker "https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt"
click node_backend_api "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/main.py"
click node_api_routes "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/router.py"
click node_voice_endpoint "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/endpoints/voice.py"
click node_disease_endpoint "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/endpoints/disease.py"
click node_ticket_endpoint "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/endpoints/tickets.py"
click node_other_endpoints "https://github.com/sampathsriramoju/innovasia/tree/main/backend/app/api/v1/endpoints"
click node_query_understanding "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/query_understanding.py"
click node_rag "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/rag_service.py"
click node_gemini "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/gemini_service.py"
click node_vision "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/crop_vision_engine.py"
click node_safety "https://github.com/sampathsriramoju/innovasia/tree/main/backend/app/safety"
click node_database_models "https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/database/models.py"
click node_integrations "https://github.com/sampathsriramoju/innovasia/tree/main/backend/app/integrations"
click node_dashboard_app "https://github.com/sampathsriramoju/innovasia/blob/main/apps/officer-dashboard/src/App.tsx"
click node_dashboard_api "https://github.com/sampathsriramoju/innovasia/blob/main/apps/officer-dashboard/src/services/api.ts"
click node_ticket_review "https://github.com/sampathsriramoju/innovasia/blob/main/apps/officer-dashboard/src/pages/TicketDetail.tsx"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_android_app,node_mobile_workflow,node_voice_ui,node_voice_manager,node_offline_inference,node_offline_model,node_offline_safety,node_offline_format,node_network_state,node_api_client,node_api_service,node_sync_worker toneBlue
class node_backend_api,node_api_routes,node_voice_endpoint,node_disease_endpoint,node_ticket_endpoint,node_other_endpoints,node_query_understanding,node_rag,node_gemini,node_vision,node_safety,node_integrations toneAmber
class node_dashboard_app,node_dashboard_api,node_ticket_review toneMint
class node_local_db,node_local_seed,node_local_entity,node_token_storage,node_database_models toneRose
class node_farmer_user,node_officer_user toneIndigo
```

## Components

### Farmer Android

- [Farmer App](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/MainActivity.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/MainActivity.kt`
- [Farmer Services](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`
- [Voice Assistant](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/presentation/voice/VoiceAssistantScreen.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/presentation/voice/VoiceAssistantScreen.kt`
- [Voice Runtime](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/voice/VoiceAssistantManager.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/voice/VoiceAssistantManager.kt`
- [Offline Inference](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt`
- [Offline Model](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineModelManager.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineModelManager.kt`
- [Offline Safety](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineSafetyGate.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineSafetyGate.kt`
- [Answer Formatter](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineKnowledgeFormatter.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineKnowledgeFormatter.kt`
- [Connectivity](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/util/NetworkObserver.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/util/NetworkObserver.kt`
- [API Client](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/ApiClient.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/ApiClient.kt`
- [API Contract](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/BolKisanApiService.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/BolKisanApiService.kt`
- [Offline Sync](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt`

### AI Backend

- [FastAPI Service](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/main.py): `backend/app/main.py`
- [API Routes](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/router.py): `backend/app/api/v1/router.py`
- [Voice Queries](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/endpoints/voice.py): `backend/app/api/v1/endpoints/voice.py`
- [Disease Diagnosis](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/endpoints/disease.py): `backend/app/api/v1/endpoints/disease.py`
- [Ticket Services](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/api/v1/endpoints/tickets.py): `backend/app/api/v1/endpoints/tickets.py`
- [Farm Data APIs](https://github.com/sampathsriramoju/innovasia/tree/main/backend/app/api/v1/endpoints): `backend/app/api/v1/endpoints`
- [Query Understanding](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/query_understanding.py): `backend/app/ai/query_understanding.py`
- [Knowledge Retrieval](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/rag_service.py): `backend/app/ai/rag_service.py`
- [Generative AI](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/gemini_service.py): `backend/app/ai/gemini_service.py`
- [Crop Vision](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/ai/crop_vision_engine.py): `backend/app/ai/crop_vision_engine.py`
- [Pesticide Safety](https://github.com/sampathsriramoju/innovasia/tree/main/backend/app/safety): `backend/app/safety`
- [External Farm Data](https://github.com/sampathsriramoju/innovasia/tree/main/backend/app/integrations): `backend/app/integrations`

### Officer Operations

- [Officer Portal](https://github.com/sampathsriramoju/innovasia/blob/main/apps/officer-dashboard/src/App.tsx): `apps/officer-dashboard/src/App.tsx`
- [Portal API Client](https://github.com/sampathsriramoju/innovasia/blob/main/apps/officer-dashboard/src/services/api.ts): `apps/officer-dashboard/src/services/api.ts`
- [Case Review](https://github.com/sampathsriramoju/innovasia/blob/main/apps/officer-dashboard/src/pages/TicketDetail.tsx): `apps/officer-dashboard/src/pages/TicketDetail.tsx`

### Knowledge and State

- [Offline Database](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/AppDatabase.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/AppDatabase.kt`
- [Knowledge Preload](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/KnowledgePrepopulator.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/KnowledgePrepopulator.kt`
- [Knowledge Records](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/entities/OfflineKnowledgeEntity.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/entities/OfflineKnowledgeEntity.kt`
- [Token Storage](https://github.com/sampathsriramoju/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/SecureTokenStorage.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/SecureTokenStorage.kt`
- [Farm Data Models](https://github.com/sampathsriramoju/innovasia/blob/main/backend/app/database/models.py): `backend/app/database/models.py`

### Other components

- **Farmer**
- **Extension Officer**

## Connections

- Farmer → Farmer App: uses (evidence: `README.md`)
- Farmer App → Farmer Services: invokes
- Farmer Services → API Client: requests (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`)
- API Client → API Contract: builds (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/ApiClient.kt`)
- API Contract → FastAPI Service: HTTP requests (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/remote/BolKisanApiService.kt`)
- FastAPI Service → API Routes: mounts (evidence: `backend/app/main.py`)
- API Routes → Voice Queries: routes (evidence: `backend/app/api/v1/router.py`)
- API Routes → Disease Diagnosis: routes (evidence: `backend/app/api/v1/router.py`)
- API Routes → Ticket Services: routes (evidence: `backend/app/api/v1/router.py`)
- API Routes → Farm Data APIs: routes (evidence: `backend/app/api/v1/router.py`)
- Voice Queries → Query Understanding: processes query
- Voice Queries → Knowledge Retrieval: retrieves evidence
- Voice Queries → Generative AI: generates answer
- Disease Diagnosis → Crop Vision: diagnoses image
- Crop Vision → Knowledge Retrieval: retrieves evidence (evidence: `backend/app/ai/crop_vision_engine.py`)
- Crop Vision → Pesticide Safety: checks chemical advice (evidence: `backend/app/ai/crop_vision_engine.py`)
- Voice Queries → Pesticide Safety: enforces pesticide rules
- Ticket Services → Farm Data Models: persists cases
- Farm Data APIs → External Farm Data: fetches farm data
- Knowledge Retrieval → Farm Data Models: uses knowledge records
- Farmer Services → Connectivity: observes connectivity (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`)
- Farmer Services → Offline Database: opens cache (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`)
- Offline Database → Knowledge Records: stores (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/AppDatabase.kt`)
- Knowledge Preload → Offline Database: prepopulates (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/KnowledgePrepopulator.kt`)
- Farmer Services → Offline Inference: runs offline inference (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`)
- Offline Inference → Offline Model: uses runtime (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt`)
- Offline Inference → Offline Safety: checks answer (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt`)
- Offline Inference → Answer Formatter: formats answer (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt`)
- Farmer Services → Token Storage: uses credentials (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`)
- Offline Sync → API Client: syncs online (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt`)
- Offline Sync → Offline Database: reads queued data (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt`)
- Voice Assistant → Voice Runtime: uses voice runtime
- Extension Officer → Officer Portal: uses (evidence: `README.md`)
- Officer Portal → Portal API Client: validates session (evidence: `apps/officer-dashboard/src/App.tsx`)
- Portal API Client → FastAPI Service: HTTP requests
- Officer Portal → Case Review: opens case review
- Case Review → Portal API Client: loads case data
- Officer Portal → Farm Data Models: receives case data
