🗚ïļ 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)

  1. āļĨāļđāļāļŦāļ™āļĩāđ‰āļ­āļąāļ›āđ‚āļŦāļĨāļ”āļĢāļđāļ›āļ āļēāļžāļŠāļĨāļīāļ›: āļĨāļđāļāļŦāļ™āļĩāđ‰āļāļ”āđāļŠāļ°āļ āļēāļžāļŠāļĨāļīāļ›āđ‚āļ­āļ™āđ€āļ‡āļīāļ™āļŠāđˆāļ‡āļ„āļģāļ‚āļ­ Multipart POST āđ€āļ‚āđ‰āļēāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™
  2. āļĢāļ°āļšāļšāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™āļ„āļąāļ”āļāļĢāļ­āļ‡: FastAPI Router āđ€āļŠāđ‡āļāļŠāļ™āļīāļ”āđ„āļŸāļĨāđŒāđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļīāļ—āļ˜āļīāđŒāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ
  3. AI OCR āļŠāđāļāļ™āļ„āļīāļ§āļ­āļēāļĢāđŒāļŠāļĨāļīāļ›: āļĒāļđāļŠāđ€āļ„āļŠāļŠāļąāđˆāļ‡āļ•āļąāļ§āđāļāļ°āļĢāļŦāļąāļŠāļ āļēāļžāļ­āđˆāļēāļ™āļŦāļēāļ„āļīāļ§āļ­āļēāļĢāđŒāļ˜āļ™āļēāļ„āļēāļĢāđ€āļžāļ·āđˆāļ­āļ–āļ­āļ”āļĢāļŦāļąāļŠāļ˜āļļāļĢāļāļĢāļĢāļĄāļāļēāļĢāđ‚āļ­āļ™ (Transaction ID)
  4. āļ›āđ‰āļ­āļ‡āļāļąāļ™āđ‚āļāļ‡āļŠāļĨāļīāļ›āļ‹āđ‰āļģ: āļ„āđ‰āļ™āļŦāļēāļ›āļĢāļ°āļ§āļąāļ•āļīāđƒāļ™ PostgreSQL āļŦāļēāļāļžāļšāđ€āļĨāļ‚āļ˜āļļāļĢāļāļĢāļĢāļĄāļ•āļĢāļ‡āļāļąāļ™āļ­āļĒāļđāđˆāđāļĨāđ‰āļ§āđƒāļŦāđ‰āļŠāđˆāļ‡āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ›āļāļīāđ€āļŠāļ˜āļ—āļąāļ™āļ—āļĩ
  5. āļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ Statement āļ˜āļ™āļēāļ„āļēāļĢ: āļŠāđˆāļ‡āđ€āļĨāļ‚āļ˜āļļāļĢāļāļĢāļĢāļĄāđ„āļ›āļĒāļ·āļ™āļĒāļąāļ™āļĒāļ­āļ”āđ€āļ‡āļīāļ™āļˆāļĢāļīāļ‡āđāļĨāļ°āļ§āļąāļ™āđ€āļ§āļĨāļēāđ‚āļ­āļ™āļˆāļĢāļīāļ‡āļœāđˆāļēāļ™āđ€āļāļ•āđ€āļ§āļĒāđŒāļ āļēāļĒāļ™āļ­āļ
  6. āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļ„āļģāļ™āļ§āļ“: āđ€āļ—āļĩāļĒāļšāļĒāļ­āļ”āđ€āļ‡āļīāļ™āđ‚āļ­āļ™āļˆāļĢāļīāļ‡āļ§āđˆāļēāļ•āļĢāļ‡āļāļąāļšāļŠāļąāļ”āļŠāđˆāļ§āļ™āļĒāļ­āļ”āļ„āđ‰āļēāļ‡āļŦāļ™āļĩāđ‰āļŠāļīāļ™āļ‚āļ­āļ‡āļ„āļ™āļ™āļąāđ‰āļ™āļŦāļĢāļ·āļ­āđ„āļĄāđˆ āļŦāļēāļāļœāđˆāļēāļ™āđ€āļāļ“āļ‘āđŒāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāđ€āļ•āļ•āļąāļŠāđƒāļ™ PostgreSQL āđ€āļ›āđ‡āļ™āļŠāļģāļĢāļ°āđ€āļ‡āļīāļ™āđ€āļĢāļĩāļĒāļšāļĢāđ‰āļ­āļĒ (‘paid’)
  7. āļšāļ§āļāļ„āđˆāļēāļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāđ‚āļĄāļˆāļī: āļ—āļĢāļīāļāđ€āļāļ­āļĢāđŒāđ€āļĢāļĩāļĒāļāļ„āļĨāļēāļŠāļŠāļąāļ•āļ§āđŒāđ€āļĨāļĩāđ‰āļĒāļ‡āļšāļ§āļāđāļ•āđ‰āļĄāļ­āļąāļ›āđ€āļĨāđ€āļ§āļĨāđ‚āļĄāļˆāļīāļ›āļĢāļ°āļˆāļģāļāļĨāļļāđˆāļĄ (+15 XP)
  8. āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ„āļ§āļēāļĄāļ„āļ·āļšāļŦāļ™āđ‰āļē: āļĒāļīāļ‡ 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:
    1. Roommate uploads transfer slip image via Multipart POST request.
    2. FastAPI Router validates payload headers and request schemas.
    3. VerifySlipUseCase extracts transaction reference ID from Mini-QR using OCR.
    4. Query PostgreSQL: Check if transaction reference ID is unique. Reject duplicate attempts.
    5. Request bank server API: Validate transaction reference ID, amount, and recipient details.
    6. Compare bank response amount with user’s share amount. If correct, update expense_shares.status to 'paid'.
    7. Award XP to group pet Mochi (+15 XP).
    8. 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 port 8000.
  • PostgreSQL and Redis containers expose no public ports.