ðïļ SEQUENCE_DIAGRAMS.md - System Sequence Diagrams (āđāļāļāļ āļēāļāđāļŠāļāļāļĨāļģāļāļąāļāļāļąāđāļāļāļāļāļāļēāļĢāļāļģāļāļēāļāļĢāļ°āļāļ)
This document contains detailed execution sequence diagrams for key user interactions in SplitDee.
āđāļāļāļŠāļēāļĢāļāļāļąāļāļāļĩāđāļŠāļĢāļļāļāļāļąāļāļĨāļģāļāļąāļāļāļąāđāļāļāļāļāļāļēāļĢāļāļģāļāļēāļ āļāļēāļĢāđāļŦāļĨāđāļ§āļĩāļĒāļāļāļāļāļāđāļāļŠāļāļŠāļąāļĒ āđāļĨāļ°āļāļīāļāļāļĢāļĢāļĄāļāļĢāļ°āļŠāļēāļāļāļąāļāļāļāļāđāļĄāļāļđāļĨāļĢāļ°āļāļāļĒāđāļāļĒāļŦāļĨāļąāļ
ðđð āļ āļēāļĐāļēāđāļāļĒ (āļŠāļģāļŦāļĢāļąāļāļāļđāđāđāļāđāļāļēāļ)
1. āļĨāļģāļāļąāļāļāļąāđāļāļāļāļāļāļēāļĢāļĨāļāļŠāļĄāļąāļāļĢāļŠāļĄāļēāļāļīāļāđāļŦāļĄāđāđāļĨāļ°āļāļēāļĢāļŠāļĢāđāļēāļ Token (User Registration & Token Generation)
- āļāļđāđāđāļāđāļāļĢāļāļāļāļāļĢāđāļĄ: āļĨāļđāļāļŦāļāļĩāđāļŦāļĢāļ·āļāđāļāđāļēāļŦāļāļĩāđāļāļāļāđāļāļāļāđāļāļĄāļđāļĨāļāļĩāđāļĄāļĨ āļĢāļŦāļąāļŠāļāđāļēāļ āļāļ·āđāļ āđāļĨāļ°āđāļāļāļĢāđāđāļāļĢāļŠāļĄāļąāļāļĢāļŠāļĄāļēāļāļīāļāļŠāđāļāļāđāļēāļ POST
/auth/signup - āļ§āļīāđāļāļĢāļēāļ°āļŦāđāļŠāđāļāļāļŦāļĨāļąāļāļāđāļēāļ: FastAPI API Router āđāļāđāļāļāļąāļ§āđāļāļĢ JSON Schema āļāđāļāļāļāđāļāđāļŦāđāļāļĢāļ°āļāļ§āļāļāļēāļĢāļŦāļĨāļąāļ
RegisterUserUseCase - āļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāđāļĄāđāļāđāļģ: āļĒāļđāļŠāđāļāļŠāđāļĢāļĩāļĒāļāđāļāđ User Repository āļāđāļāļŦāļēāļāļēāļĢāļēāļāđāļāļāļēāļāļāđāļāļĄāļđāļĨ PostgreSQL āļāļĢāļ§āļāļŠāļāļāļ§āđāļēāļĄāļĩāļāļĩāđāļĄāļĨāļāļĩāđāļāļĒāļđāđāđāļĨāđāļ§āļŦāļĢāļ·āļāđāļĄāđ
- āđāļŪāļāļĢāļŦāļąāļŠāļāđāļēāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ: āļŦāļēāļāđāļāđāļāļāļđāđāđāļāđāđāļŦāļĄāđ āļŠāļąāđāļāļāļĨāļēāļŠ Hasher āđāļŪāļāđāļāđāļēāļĢāļŦāļąāļŠ (Hash Password) āļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ āļāđāļāļāļĒāļ·āđāļāđāļāļĩāļĒāļāļĢāļ°āđāļāļĩāļĒāļāđāļŦāļĄāđāļĨāļ PostgreSQL
- āļŠāļĢāđāļēāļāļŠāļīāļāļāļīāđāļĨāđāļāļāļāļīāļāļŠāļģāđāļĢāđāļ: āļŠāđāļāļāđāļāļĄāļđāļĨāļĒāļ·āļāļĒāļąāļāļāļĨāļąāļāļĄāļēāļāļĩāđ Router āļāļąāļāļŠāļĢāđāļēāļāļāļąāđāļ§āļŠāļīāļāļāļīāđ JWT Access Token (āļāļģāļāļąāļāļŦāļĄāļāļāļēāļĒāļļ 15 āļāļēāļāļĩ) āđāļĨāļ°āļāļąāđāļ§ Refresh Token āļĒāļīāļāļāļāļāļāļĨāļąāļāđāļāļĒāļąāļāđāļāļĨāđāļāļāļāđāđāļĨāļ°āđāļŠāļāļāļŦāļāđāļēāļĢāļēāļĒāļāļēāļāļāļąāļ§āļŠāļģāđāļĢāđāļ
2. āļĨāļģāļāļąāļāļāļąāđāļāļāļāļāļāļēāļĢāļāļąāđāļāļŦāļēāļĢāļāļīāļĨāļāđāļēāđāļāđāļāđāļēāļĒāļāļĢāļ°āļāļģāļāļĨāļļāđāļĄ (Bill Creation & Split Allocation)
- āđāļāđāļēāļŦāļāļĩāđāļŠāļĢāđāļēāļāļāļīāļĨ: āđāļāđāļēāļŦāļāļĩāđāļāļĩāļĒāđāļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāļāļīāļĨāļŦāļēāļĢāđāļāļīāļ āļĒāļāļāļĢāļ§āļĄ āđāļĨāļ°āļāļēāļĢāđāļāđāļāļŠāļąāļāļŠāđāļ§āļāļŠāđāļ§āļāļŦāļāļĩāđ āļĒāļīāļāļāļģāļāļāđāļāļāļĩāđāļŦāļĨāļąāļāļāđāļēāļ
- āļāļģāļāļ§āļāļŠāđāļāļāļŦāļāļĩāđ: āļĒāļđāļŠāđāļāļŠāļāļĢāļ§āļāđāļāđāļāļĒāļāļāļāļīāļĨāļĢāļ§āļĄāļāļĢāļāļāļąāļāļĒāļāļāļŠāđāļ§āļāļŦāļāļĩāđāļĢāļēāļĒāļāļāđāļāļĨāļĩāđāļĒāļāļ§āļāļāļąāļāļāļāļāļĩ â āļĒāļ·āđāļāđāļāļĩāļĒāļāļāļĢāļ°āļ§āļąāļāļīāļāļēāļĢāļēāļāļāļīāļĨāđāļĨāļ°āļĢāļēāļĒāļāļąāļ§āļĨāļāļāļēāļĢāļēāļ PostgreSQL
- āļĒāļīāļāđāļāđāļāļāđāļēāļ§āđāļāļ·āđāļāļāļĢāđāļ§āļĄāļŦāđāļāļ: āđāļĄāļ·āđāļāđāļāļŠāļĒāļ·āļāļĒāļąāļāļŠāļģāđāļĢāđāļ āļŠāļąāđāļ Firebase Notification (FCM) āļāļąāļāļŠāđāļ Push āļāđāļāļāļ§āļēāļĄāļāļĢāļīāļāđāļāļāļĢāđāđāļāđāļāļāđāļēāļ§āļāļļāļāļāļ āđāļĨāļ°āđāļāļŠāļāđāļāļēāļĢāđāļāļāļīāļĨāļŠāļĩāđāļāļĩāļĒāļ§āļĨāļāđāļāļāđāļāļāđāļāļāļāļĨāļļāđāļĄ
3. āļĨāļģāļāļąāļāļāļąāđāļāļāļāļāļāļēāļĢāđāļŠāļāļāļāļĢāļ§āļāļŠāļāļāļŠāļĨāļīāļāļāđāļēāļ AI āđāļĨāļ°āļāļīāļāļŦāļāļĩāđ (AI Slip Verification & Settlement)
- āļĨāļđāļāļŦāļāļĩāđāļŠāđāļāļŠāļĨāļīāļ: āļĨāļđāļāļŦāļāļĩāđāđāļāļ°āđāļāļāļĢāļđāļāļ āļēāļāđāļāļŠāļĨāļīāļāļŠāđāļ API āļāļĢāļ§āļāļŠāļāļ
- AI OCR āļŠāđāļāļ Mini-QR: āļĒāļđāļŠāđāļāļŠāļŠāđāļāļĢāļđāļāđāļŦāđāļāļąāļ§āļāļĢāļ°āļĄāļ§āļĨāļāļĨ OCR āļŠāļāļąāļāđāļŠāļāļāļŦāļēāļĢāļŦāļąāļŠāļāļīāļ§āļāļēāļĢāđ (Transaction ID)
- āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāđāļāļāđāļāļāļāđāļģ: āļāļĢāļ§āļāđāļ PostgreSQL āļ§āđāļēāđāļĨāļāļāđāļēāļāļāļīāļāļāļĩāđāđāļāļĒāđāļāļāļāđāļēāļāđāļāđāļĨāđāļ§āļŦāļĢāļ·āļāđāļĄāđ āļŦāļēāļāđāļāļāļāđāļģ āļāļāļīāđāļŠāļāđāļĨāļ°āđāļāđāļāđāļāļ·āļāļāļĨāļđāļāļŦāļāļĩāđāļāļąāļāļāļĩ
- āđāļāđāļ Statement āļāļāļēāļāļēāļĢāļāļĢāļīāļ: āļĒāļīāļāļĢāļŦāļąāļŠāļāļ Statement āļāļēāļāļāļāļēāļāļēāļĢāļāļĢāļīāļāļāđāļēāļāļāļāļĢāđāļāđāļāļāđāļ§āļĒāđāļ āļēāļĒāļāļāļ āļāļĢāļ§āļāļŠāļāļāļĒāļāļāđāļāļīāļāđāļāļ āđāļĨāļ°āļāļĨāļēāļĒāļāļēāļāļāļđāđāļĢāļąāļāđāļāļīāļ
- āļāļąāļāđāļāļāđāļĨāļ°āļāļīāļāļāļīāļĨ: āļŦāļēāļāļāļĢāļāļāļąāļ āđāļāļĨāļĩāđāļĒāļāļĒāļāļāļŦāļāļĩāđāđāļāđāļāļāđāļēāļĒāļŠāļģāđāļĢāđāļ āļāļąāļāđāļāļāđāļĨāđāļ§āļĨāđāļĨāđāļ§āļĨ XP āļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļāđāļĄāļāļī āđāļĨāļ°āļŠāđāļ Push āļāđāļāļāļ§āļēāļĄāļāļĨāļāļāđāļāđāļāđāļāļāļāļĨāļļāđāļĄ
ðŽð§ English (For AI Agents)
ð 1. User Registration & Token Generation
sequenceDiagram autonumber actor User as User Client participant Router as API Router (FastAPI) participant UC as RegisterUser UseCase participant Repo as User Repository participant Hasher as Security Hasher participant DB as PostgreSQL DB User->>Router: POST /auth/signup {email, password, name, phone} Note over Router: Validates request payload schemas Router->>UC: execute(email, password, name, phone) UC->>Repo: get_by_email(email) Repo->>DB: query User table DB-->>Repo: return user/null alt User Already Exists Repo-->>UC: return UserEntity UC-->>Router: raise EmailAlreadyExistsException Router-->>User: return 400 Bad Request else New User Repo-->>UC: return null UC->>Hasher: hash_password(password) Hasher-->>UC: return password_hash UC->>Repo: create(UserEntity) Repo->>DB: INSERT INTO users DB-->>Repo: return inserted record Repo-->>UC: return UserEntity UC-->>Router: return UserEntity Note over Router: Generate JWT access token Router-->>User: return 201 Created {access_token, user_details} end
ðĩ 2. Bill Creation & Split Allocation
sequenceDiagram autonumber actor Creator as Bill Creator participant Router as API Router (FastAPI) participant UC as CreateBill UseCase participant DB as PostgreSQL DB participant FCM as Firebase Notification Creator->>Router: POST /api/v1/groups/{id}/bills {title, amount, shares} Router->>UC: execute(group_id, creator_id, title, amount, shares) Note over UC: Validate sum(shares) == total_amount UC->>DB: INSERT INTO bills (id, group_id, creator_id, total_amount, title, category) UC->>DB: INSERT INTO expense_shares (multiple rows user_id, share_amount, status='unpaid') DB-->>UC: return success UC->>FCM: send_notification_to_members(group_id, payload) FCM-->>UC: return status UC-->>Router: return bill_details Router-->>Creator: return 201 Created {bill_details}
ðĪ 3. AI Slip Verification & Settlement
sequenceDiagram autonumber actor Debtor as Bill Debtor participant Router as API Router (FastAPI) participant UC as VerifySlip UseCase participant OCR as OCR Service participant Bank as Bank Partner API participant DB as PostgreSQL DB participant Redis as Redis Cache participant Pet as Pet Update UseCase participant FCM as Firebase Notification Debtor->>Router: POST /api/v1/bills/{id}/payments {slip_image} Router->>UC: execute(bill_id, debtor_id, slip_image) UC->>OCR: extract_mini_qr(slip_image) OCR-->>UC: return transaction_ref_id UC->>DB: SELECT payment WHERE slip_trans_id == ref_id alt Slip Already Used (Double-Spend) DB-->>UC: return existing payment UC-->>Router: raise DuplicateSlipException Router-->>Debtor: return 400 Bad Request else Unique Slip DB-->>UC: return null UC->>Bank: GET /verify/{transaction_ref_id} Bank-->>UC: return transfer_details {amount, receiver_name, timestamp} Note over UC: Check amount matches share_amount & receiver matches creator UC->>DB: UPDATE expense_shares SET status='paid', paid_at=now UC->>DB: INSERT INTO payments (bill_id, payer_id, amount, slip_trans_id, status='verified') UC->>Pet: reward_group_pet_xp(group_id, speed_bonus) Pet->>DB: UPDATE group_pets SET xp = xp + bonus UC->>FCM: dispatch_notification(group_id, "Paid!") UC-->>Router: return 200 OK {"status": "verified"} Router-->>Debtor: return 200 OK {"status": "verified"} end