ðšïļ SYSTEM_MAP.md - System Map & Integrations (āļāļąāļāļāļ§āļēāļĄāļŠāļąāļĄāļāļąāļāļāđāđāļĨāļ°āļāļēāļĢāđāļāļ·āđāļāļĄāļāđāļāļĢāļ°āļāļ)
This document maps the architectural topology of the SplitDee system, demonstrating the relationships between clients, application servers, databases, and third-party integrations.
āđāļāļāļŠāļēāļĢāļāļāļąāļāļāļĩāđāđāļŠāļāļāļāļąāļāļāļ§āļēāļĄāļŠāļąāļĄāļāļąāļāļāđāļāļāļāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļĢāļ°āļāļ SplitDee āļāļāļīāļāļēāļĒāđāļāļĢāļāļŠāļĢāđāļēāļāđāļĨāļ°āļāļ§āļēāļĄāđāļāļ·āđāļāļĄāđāļĒāļāļĢāļ°āļŦāļ§āđāļēāļāđāļĄāļāļēāļĒāđāļāļāļŦāļĨāļąāļāļāđāļēāļ āļāļēāļāļāđāļāļĄāļđāļĨ āđāļĨāļ°āļĢāļ°āļāļāļāļąāļāļāļĄāļīāļāļĢāļ āļēāļĒāļāļāļ
ðđð āļ āļēāļĐāļēāđāļāļĒ (āļŠāļģāļŦāļĢāļąāļāļāļđāđāđāļāđāļāļēāļ)
1. āļāļąāļāļāļ§āļēāļĄāļŠāļąāļĄāļāļąāļāļāđāļĢāļ°āļāļąāļāļŠāļđāļāļāļāļāļĢāļ°āļāļ (High-Level Topology Map)
āļĢāļ°āļāļāļāļĢāļ°āļāļāļāļāđāļ§āļĒāđāļāļāļāļĨāļīāđāļāļāļąāļāļĄāļ·āļāļāļ·āļ (Flutter Client) āļŠāļ·āđāļāļŠāļēāļĢāļāđāļēāļāđāļāļĢāđāļāļāļāļĨ HTTPS/WSS āļāļąāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļŦāļĨāļąāļāļāđāļēāļ (FastAPI Backend) āđāļāļĒāđāļāļāļŦāļĨāļąāļāļāđāļēāļāļāļ°āļāļāļĒāļāļđāđāļĨāļĢāļ°āļāļāļāļīāļ§āļāļēāļ āļāļĨāļąāļāļāđāļāļĄāļđāļĨ āđāļĨāļ°āļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāļŠāļĄāļāļāļāļĨ AI āļ āļēāļĒāļāļāļ:
- āļāļąāđāļāđāļāļĨāđāļāļāļāđ (Flutter Client): āļāļĢāļīāļŦāļēāļĢāļāļļāđāļĄāļāļāđāļĨāļ°āļ§āļīāļāđāļāđāļāļŦāļāđāļēāļāļ (Widgets) āļāļ§āļāļāļļāļĄāļāđāļāļĄāļđāļĨāļāđāļēāļāļĢāļ°āļāļāļāļąāļāļāļēāļĢāļŠāļāļēāļāļ° Riverpod āđāļĨāļ°āļŠāđāļāļāđāļāļĄāļđāļĨāđāļāđāļē Data Layer
- āļāļąāđāļāđāļāļāļŦāļĨāļąāļāļāđāļēāļ (FastAPI Server): āļāļĢāļ§āļāļāļąāļāļāļģāļāļāļāđāļēāļāđāļĢāđāļēāđāļāļāļĢāđ API āļĢāļąāļāļŠāđāļāļāđāļāđāļŦāđ Use Cases āļāļĢāļ°āļĄāļ§āļĨāļāļĢāļĢāļāļ°āļāļļāļĢāļāļīāļ āđāļĨāļ°āļāļąāļāđāļāļĩāļĒāļāđāļāđāļāļĨāļāļāļēāļāļāđāļāļĄāļđāļĨāļāđāļēāļ Repository
- āļāļąāđāļāļāļĨāļąāļāļāđāļāļĄāļđāļĨ (Storage Layer): āļāļēāļāļāđāļāļĄāļđāļĨāļŦāļĨāļąāļ (PostgreSQL) āļāļģāļŦāļāđāļēāļāļĩāđāđāļāđāļāļāļąāļāļāļķāļāļāļĢāļ°āļ§āļąāļāļī āđāļĨāļ°āļĢāļ°āļāļāļŦāļāđāļ§āļĒāļāļģāļāļ§āļēāļĄāđāļĢāđāļ§āļŠāļđāļ (Redis) āļāļģāļŦāļāđāļēāļāļĩāđāļāļģāļāļĢāļ°āļ§āļąāļāļīāļĨāđāļāļāļāļīāļāļāđāļ§āļāļāļļāļĄāļĨāļīāļĄāļīāļ
- āļāļąāļāļāļĄāļīāļāļĢāļ āļēāļĒāļāļāļ (Third-Party Services): API āļāļāļēāļāļēāļĢāļāļĢāļ§āļāļŠāļĨāļīāļāđāļāļāđāļāļīāļ (SlipOK) āđāļĨāļ°āđāļāļāđāļ§āļĒāđāļŠāđāļāđāļāđāļāđāļāļ·āļāļāļāđāļ§āļāļāļāļāļāļđāđāļāļīāļĨ (FCM)
2. āđāļāļāļ āļēāļāļĨāļģāļāļąāļāļāļēāļĢāđāļāļĢāđāļĒāļāļāđāļĨāļ°āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāļģāļĢāļ° (Dynamic Interactions Flow)
- āļĨāļđāļāļŦāļāļĩāđāļāļąāļāđāļŦāļĨāļāļĢāļđāļāļ āļēāļāļŠāļĨāļīāļ: āļĨāļđāļāļŦāļāļĩāđāļāļāđāļāļ°āļ āļēāļāļŠāļĨāļīāļāđāļāļāđāļāļīāļāļŠāđāļāļāļģāļāļ Multipart POST āđāļāđāļēāļŦāļĨāļąāļāļāđāļēāļ
- āļĢāļ°āļāļāļŦāļĨāļąāļāļāđāļēāļāļāļąāļāļāļĢāļāļ: FastAPI Router āđāļāđāļāļāļāļīāļāđāļāļĨāđāđāļĨāļ°āļāļĢāļ§āļāļŠāļīāļāļāļīāđāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ
- AI OCR āļŠāđāļāļāļāļīāļ§āļāļēāļĢāđāļŠāļĨāļīāļ: āļĒāļđāļŠāđāļāļŠāļŠāļąāđāļāļāļąāļ§āđāļāļ°āļĢāļŦāļąāļŠāļ āļēāļāļāđāļēāļāļŦāļēāļāļīāļ§āļāļēāļĢāđāļāļāļēāļāļēāļĢāđāļāļ·āđāļāļāļāļāļĢāļŦāļąāļŠāļāļļāļĢāļāļĢāļĢāļĄāļāļēāļĢāđāļāļ (Transaction ID)
- āļāđāļāļāļāļąāļāđāļāļāļŠāļĨāļīāļāļāđāļģ: āļāđāļāļŦāļēāļāļĢāļ°āļ§āļąāļāļīāđāļ PostgreSQL āļŦāļēāļāļāļāđāļĨāļāļāļļāļĢāļāļĢāļĢāļĄāļāļĢāļāļāļąāļāļāļĒāļđāđāđāļĨāđāļ§āđāļŦāđāļŠāđāļāđāļāđāļāđāļāļ·āļāļāļāļāļīāđāļŠāļāļāļąāļāļāļĩ
- āļāļķāļāļāđāļāļĄāļđāļĨ Statement āļāļāļēāļāļēāļĢ: āļŠāđāļāđāļĨāļāļāļļāļĢāļāļĢāļĢāļĄāđāļāļĒāļ·āļāļĒāļąāļāļĒāļāļāđāļāļīāļāļāļĢāļīāļāđāļĨāļ°āļ§āļąāļāđāļ§āļĨāļēāđāļāļāļāļĢāļīāļāļāđāļēāļāđāļāļāđāļ§āļĒāđāļ āļēāļĒāļāļāļ
- āđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļģāļāļ§āļ: āđāļāļĩāļĒāļāļĒāļāļāđāļāļīāļāđāļāļāļāļĢāļīāļāļ§āđāļēāļāļĢāļāļāļąāļāļŠāļąāļāļŠāđāļ§āļāļĒāļāļāļāđāļēāļāļŦāļāļĩāđāļŠāļīāļāļāļāļāļāļāļāļąāđāļāļŦāļĢāļ·āļāđāļĄāđ āļŦāļēāļāļāđāļēāļāđāļāļāļāđāđāļāļĨāļĩāđāļĒāļāļŠāđāļāļāļąāļŠāđāļ PostgreSQL āđāļāđāļāļāļģāļĢāļ°āđāļāļīāļāđāļĢāļĩāļĒāļāļĢāđāļāļĒ (âpaidâ)
- āļāļ§āļāļāđāļēāļāļĢāļ°āļŠāļāļāļēāļĢāļāđāđāļĄāļāļī: āļāļĢāļīāļāđāļāļāļĢāđāđāļĢāļĩāļĒāļāļāļĨāļēāļŠāļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļāļāļ§āļāđāļāđāļĄāļāļąāļāđāļĨāđāļ§āļĨāđāļĄāļāļīāļāļĢāļ°āļāļģāļāļĨāļļāđāļĄ (+15 XP)
- āđāļāđāļāđāļāļ·āļāļāļāļ§āļēāļĄāļāļ·āļāļŦāļāđāļē: āļĒāļīāļ Push Notification āļāđāļēāļ FCM āđāļāđāļāļāđāļēāļ§āļāļĩāđāļāđāļŠāļĄāļēāļāļīāļāđāļāļāļĨāļļāđāļĄāļāļļāļāļāļāđāļŦāđāļāļĢāļēāļ āđāļĨāļ°āļŦāļāđāļēāļāļāļāļāđāļāļāļāļ°āđāļāđāļāļĢāļđāļāļāļīāđāļāļāļđāļāļŠāļĩāđāļāļĩāļĒāļ§āđāļāļĢāļĒāļāļĢāļ°āļāļēāļĐāļāļĨāļāļ
3. āđāļāļĢāļāļŠāļĢāđāļēāļāļāļēāļĢāļāļąāļāļŠāđāļāļĢāļ°āļāļāļāļāļāđāļāļāđāļāļāļĢāđ (Deployment Topology)
- āļāļāļāđāļāļāđāļāļāļĢāđāļāļĢāļīāļāļēāļĢāļāļąāđāļāļŦāļĄāļāļāļģāļāļēāļāđāļĒāļāļāļąāļāļ āļēāļĒāđāļāđāļāļĢāļ·āļāļāđāļēāļĒ Docker āļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļāļīāļāļāļąāđāļāļāļēāļĢāđāļāđāļēāļāļķāļāļāļēāļāļ āļēāļĒāļāļāļ
- Nginx Proxy: āđāļāđāļāļāđāļēāļāļŦāļāđāļēāļāļāļĒāļĢāļąāļāļŠāļąāļāļāļēāļāđāļāđāļāļāļāļĢāđāļ 80/443 āđāļĨāļ°āļŠāļĨāļąāļāļāļąāļāļāļģāļāļāļĒāļīāļāđāļāđāļēāđāļāļ FastAPI āļāļāļĢāđāļ 8000
- PostgreSQL & Redis: āļāļđāļāļāļĨāđāļāļāļŦāđāļēāļĄāđāļāđāļēāđāļāđāļāļēāļāļāļēāļāļ āļēāļĒāļāļāļāđāļāļĒāđāļāđāļāļāļēāļ āļāđāļāđāļāļ·āđāļāļĄāđāļāđāđāļāļāļēāļ°āđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļŦāļĨāļąāļāļāđāļēāļāđāļāđāļāļĢāļ·āļāļāđāļēāļĒ Docker āđāļāđāļēāļāļąāđāļ
ðŽð§ English (For AI Agents)
1. High-Level Topology Map
The system consists of a mobile client communicating over HTTPS/WSS with a FastAPI backend server. The backend orchestrates data storage, cache queues, and external AI services.
- Client Components: Renders UI screens, manages dynamic state via Riverpod, and directs HTTP/WebSocket requests.
- Backend Components: API Routers handle incoming requests, Use Cases coordinate business logic, and Repositories handle database connectivity.
- Storage Layer: PostgreSQL database for persistent transactional data. Redis for high-speed session management and request caching.
- Third-Party Services: Bank Slip verification Web APIs and Firebase Cloud Messaging (FCM).
2. Dynamic Interactions Map
- Expense Sharing & Verification Flow:
- Roommate uploads transfer slip image via Multipart POST request.
- FastAPI Router validates payload headers and request schemas.
VerifySlipUseCaseextracts transaction reference ID from Mini-QR using OCR.- Query PostgreSQL: Check if transaction reference ID is unique. Reject duplicate attempts.
- Request bank server API: Validate transaction reference ID, amount, and recipient details.
- Compare bank response amount with userâs share amount. If correct, update
expense_shares.statusto'paid'. - Award XP to group pet Mochi (+15 XP).
- Push FCM Notification to all group members. Client UI renders success status.
3. Deployment Topology Map
- Refer to the Deployment Guide for detailed Docker configurations.
- All containers bind to an isolated Docker bridge network.
- Nginx handles public Ingress (ports
80/443), forwarding traffic internally to FastAPI port8000. - PostgreSQL and Redis containers expose no public ports.