ð§ BUSINESS_RULES.md - Business Rules Specification (āļāđāļāļāļģāļŦāļāļāļāļāļāļļāļĢāļāļīāļ)
This document details the business logic, formulas, limits, and edge-case behaviors governing SplitDee.
āđāļāļāļŠāļēāļĢāļāļāļąāļāļāļĩāđāđāļŠāļāļāļāļĢāļĢāļāļ°āļāļļāļĢāļāļīāļ āļŠāļđāļāļĢāļāļģāļāļ§āļ āļāļĩāļāļāļģāļāļąāļ āđāļĨāļ°āļāļĢāļāļĩāļāļīāđāļĻāļĐāļāđāļēāļāđ āļāļĩāđāļāļ§āļāļāļļāļĄāđāļāļĨāļāļāļāļĢāđāļĄ SplitDee
ðđð āļ āļēāļĐāļēāđāļāļĒ (āļŠāļģāļŦāļĢāļąāļāļāļđāđāđāļāđāļāļēāļ)
1. āļāđāļāļāļģāļāļąāļāļāļĨāļļāđāļĄāđāļĨāļ°āļāļēāļĢāđāļāđāļāļŠāļĄāļēāļāļīāļ (Group Constraints & Memberships)
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-GRP-001 (āļāļģāļāļ§āļāļŠāļĄāļēāļāļīāļāļŠāļđāļāļŠāļļāļāļāđāļāļāļĨāļļāđāļĄ):
- āļāļ: āļŠāļĄāļēāļāļīāļāļāļĨāļļāđāļĄāđāļāđāļĨāļ°āļāļĨāļļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļāļāļĢāļąāļāļŠāļđāļāļŠāļļāļāđāļĄāđāđāļāļīāļ 50 āļāļ
- āđāļŦāļāļļāļāļĨ: āđāļāļ·āđāļāđāļŦāđāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāđāļāļŦāđāļāļāđāļāļāđāļĨāļ°āļāļēāļĢāļŠāļ·āļāļāđāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļēāļĢāļŦāļēāļĢāđāļāļīāļāļāļģāđāļāđāļĢāļ§āļāđāļĢāđāļ§ āđāļĄāđāļŦāļāđāļ§āļāļāđāļē
- āļāļąāļ§āļāļĒāđāļēāļ: āļāļĨāļļāđāļĄāđāļāļ·āđāļāļāļĢāđāļ§āļĄāļāđāļēāļāļĄāļĩ 4 āļŠāļĄāļēāļāļīāļ āļŦāļĢāļ·āļāļāļĨāļļāđāļĄāđāļāļ·āđāļāļāđāļāļīāļāļāļēāļāļāđāļāļāđāļāļĩāđāļĒāļ§āļĄāļĩ 25 āļŠāļĄāļēāļāļīāļ
- āļāđāļāļĒāļāđāļ§āđāļ: āļāļĨāļļāđāļĄāļĢāļ°āļāļąāļāļāļāļāđāļāļĢāļŦāļĢāļ·āļāļāļĨāļļāđāļĄāļāļīāļāļāļĢāļĢāļĄāļāļīāđāļĻāļĐāđāļāļāļāļēāļāļ (āļāļķāđāļāļĒāļąāļāđāļĄāđāļĢāļāļāļĢāļąāļāđāļ MVP)
- āļāļĢāļāļĩāļāļīāđāļĻāļĐ: āļŦāļēāļāļāļāļāđāļāļāļĢāļŦāļąāļŠāđāļāđāļēāļĢāđāļ§āļĄāļāļĨāļļāđāļĄāļāļĩāđāļāļģāļāļ§āļāļŠāļĄāļēāļāļīāļāđāļāļ° 50 āļāļāđāļĨāđāļ§ āļĢāļ°āļāļāļāļ°āļĢāļēāļĒāļāļēāļāļāđāļāļāļīāļāļāļĨāļēāļāļāļĨāļļāđāļĄāđāļāđāļĄāđāļĨāļ°āļĢāļ°āļāļąāļāļŠāļīāļāļāļīāđāļāļēāļĢāđāļāđāļēāđāļāđāļāļēāļ
2. āļ§āļāļāļĢāđāļāđāđāļāļāļīāļĨ āļāļēāļĢāļĨāļ āđāļĨāļ°āļāļēāļĢāļĨāđāļāļāļāļĢāļ°āļ§āļąāļāļī (Bill Editing, Deletion & Locking Lifecycle)
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-BIL-001 (āļāļāđāļāļāļāđāļāļēāļĢāđāļāđāđāļāļāļīāļĨāļāđāļēāđāļāđāļāđāļēāļĒ):
- āļāļ: āļāļīāļĨāļāļ°āđāļāđāļĢāļąāļāļāļēāļĢāđāļāđāđāļāļāļēāļāļāļđāđāļŠāļĢāđāļēāļāļāļīāļĨ (āđāļāđāļēāļŦāļāļĩāđ) āđāļāđāđāļāļāļēāļ°āļāļĢāļāļĩāļāļĩāđāļĒāļāļāļŠāđāļ§āļāđāļāđāļāļāļāļāļŠāļĄāļēāļāļīāļāļāļļāļāļāļāļāļĒāļđāđāđāļāļŠāļāļēāļāļ°āļĒāļąāļāđāļĄāđāļāđāļēāļĒ (âunpaidâ) āđāļāđāļēāļāļąāđāļ āļŦāļēāļāļĄāļĩāļāļāđāļĢāļāđāļĢāļīāđāļĄāļāļģāļĢāļ°āļŦāļĢāļ·āļāļāļĒāļđāđāļĢāļ°āļŦāļ§āđāļēāļāļāļĢāļ§āļāļŠāļĨāļīāļ āļāļīāļĨāļāļ°āđāļāļĨāļĩāđāļĒāļāđāļāđāļāļŠāļāļēāļāļ°āļĨāđāļāļāļŦāđāļēāļĄāđāļāđāđāļāļāļąāļāļāļĩ
- āđāļŦāļāļļāļāļĨ: āļāđāļāļāļāļąāļāļāļēāļĢāđāļāđāđāļāļāļąāļ§āđāļĨāļāļāļīāļĨāļāđāļēāļĄāļĒāļāļāļāļāļ°āđāļāļ·āđāļāļāļāļģāļĨāļąāļāđāļāļāđāļāļīāļ āļāļķāđāļāļāļģāļĨāļēāļĒāļāļĢāļ°āļ§āļąāļāļīāļāļąāļāļāļĩ
- āļāļąāļ§āļāļĒāđāļēāļ: āļāļĩāļāļĩāđāđāļāļīāļāļāļīāļĨāđāļāļĢāđāđāļāļīāļ 1000 āļāļēāļ āļĄāļīāđāļāļāđāļāļąāļāđāļŦāļĨāļāļŠāļĨāļīāļāļāļāļŠāđāļāļ āļāļīāļĨāļāļ°āļĨāđāļāļāđāļāđāđāļāļāļąāļāļāļĩ āļāļĩāļāļĩāđāđāļĄāđāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļīāļĨāđāļāļīāđāļĄāđāļāđāļ 1200 āļāļēāļāđāļāđ
- āļāļĢāļāļĩāļāļīāđāļĻāļĐ: āļŦāļēāļāļāđāļāļāļāļēāļĢāđāļāđāđāļāļāđāļ§āļ āđāļāđāļēāļŦāļāļĩāđāļāđāļāļāđāļāđāļāđāļŦāđāđāļāļ·āđāļāļāļāļđāđāđāļāļāđāļāļīāļāļāļāļĒāļāđāļĨāļīāļāļŠāļĨāļīāļāļāļąāđāļ§āļāļĢāļēāļ§āđāļāļ·āđāļāļāļ·āļāļāđāļēāđāļāđāļāļĒāļąāļāđāļĄāđāļāđāļēāļĒāđāļŠāļĩāļĒāļāđāļāļ
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-BIL-002 (āļāļāđāļāļāļāđāļāļēāļĢāļĨāļāļāļīāļĨāļāđāļēāđāļāđāļāđāļēāļĒ):
- āļāļ: āđāļāđāļēāļŦāļāļĩāđāļĨāļāļāļīāļĨāļāļĩāđāļŠāļĢāđāļēāļāļāļķāđāļāđāļāđāđāļāļāļēāļ°āļāļāļāļāļĩāđāļĒāļāļāļāļāļāļāļļāļāļāļāđāļāđāļāļĒāļąāļāđāļĄāđāļāļģāļĢāļ° āļŦāļēāļāļĄāļĩāļāļđāđāđāļāļāļāđāļēāļĒāļāļĢāļ°āļ§āļąāļāļīāđāļāđāļēāļĄāļēāđāļĨāđāļ§āļāļ°āļĢāļ°āļāļąāļāļāļēāļĢāļĨāļāļāļēāļ§āļĢ
- āđāļŦāļāļļāļāļĨ: āļāđāļāļāļāļąāļāļāļąāļāļŦāļēāļāļēāļĢāļĨāļāļāļĢāļ°āļ§āļąāļāļīāļāļēāļĢāđāļāļīāļāļāļĩāđāļŠāđāļāļāļĨāđāļŠāļĩāļĒāļāđāļāļāļēāļĢāđāļĢāļĩāļĒāļāļĢāđāļāļāļĒāļāļāđāļāļīāļāļāļāļāļŠāļĄāļēāļāļīāļ
- āļāļĢāļāļĩāļāļīāđāļĻāļĐ: āđāļāļāļāļēāļĢāļĨāļāđāļāļāđāļāļĨāļĩāļĒāļĢāđāļāļīāđāļ āļĢāļ°āļāļāļŠāļāļąāļāļŠāļāļļāļāļāļļāđāļĄāļāļ âāļĒāļāđāļĨāļīāļāļāļīāļĨâ āļāļķāđāļāļāđāļāļāļāļīāļĨāļāļēāļāđāļāļāļāļāļĢāđāļāļŦāļĨāļąāļāđāļāđāđāļāđāļāļāļąāļāļāļķāļāļāļĢāļ°āļ§āļąāļāļīāđāļāļāļēāļāļāđāļāļĄāļđāļĨāļŦāļĨāļąāļāļāđāļēāļ
3. āļāļēāļĢāļāļģāļĢāļ°āđāļāļīāļ āļŠāļĨāļīāļ āđāļĨāļ°āļāļēāļĢāļāļāļļāļĄāļąāļāļī (Payments, Slips & Approvals)
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-PAY-001 (āļāđāļ§āļāđāļ§āļĨāļēāļāļąāļāđāļŦāļĨāļāļĢāļđāļāđāļĨāļ°āļāļĢāļ§āļāļŠāļāļāļŠāļĨāļīāļ):
- āļāļ: āļĨāļđāļāļŦāļāļĩāđāļŠāļēāļĄāļēāļĢāļāļŠāđāļāļŠāļĨāļīāļāđāļāļ·āđāļāļāļāļāļĢāļ§āļāļŠāļāļāļŠāļąāļāļŠāđāļ§āļāļŦāļāļĩāđāđāļāđāļāļĨāļāļāđāļ§āļĨāļē āđāļĄāļ·āđāļāļāļąāļāđāļŦāļĨāļāđāļĨāđāļ§āļŠāļāļēāļāļ°āļāļāļāļŠāļĄāļēāļāļīāļāļāļ°āđāļāļĨāļĩāđāļĒāļāđāļāđāļāļāļģāļĨāļąāļāļāļĢāļ§āļāļŠāļāļ (âprocessingâ) āļāļąāļāļāļĩ āđāļĨāļ°āļŦāđāļēāļĄāļŠāđāļāļĢāļđāļāļŦāļĨāļąāļāļāļēāļāļāđāļāļāļāļąāļāļāļąāļ
- āđāļŦāļāļļāļāļĨ: āļāđāļāļāļāļąāļāļāļēāļĢāļāļģāļŠāļĨāļīāļāđāļāđāļāļīāļĄāļĄāļēāļĒāļ·āđāļāļĒāļ·āļāļĒāļąāļāļŠāļīāļāļāļīāđāļŠāļāļāļāļĢāļąāđāļ āļŦāļĢāļ·āļāđāļĒāđāļāļāļąāļāļĒāļ·āđāļ
- āļāļĢāļāļĩāļāļīāđāļĻāļĐ: āļŦāļēāļāļĢāļ°āļāļāđāļŠāļāļāļŠāļĨāļīāļāļĨāđāļēāļāđāļēāļāļāļŦāļĄāļāđāļ§āļĨāļēāļāļīāļ§āļāļēāļ (5 āļāļēāļāļĩ) āļĒāļāļāļāļ°āđāļāđāļāļāļĨāļąāļāđāļāđāļāļĒāļąāļāđāļĄāđāļāļģāļĢāļ°āđāļāļ·āđāļāđāļŦāđāļāđāļāļāđāļŦāļĄāđ
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-PAY-002 (āļŠāļīāļāļāļīāđāđāļāļāļēāļĢāļāļāļĒāļāđāļĨāļīāļāļŠāļĨāļīāļāļāļāļāđāļāđāļēāļŦāļāļĩāđ):
- āļāļ: āļŦāļēāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļģ OCR āļĨāđāļĄāđāļŦāļĨāļ§ āļĢāļ°āļāļāļāļ°āđāļāđāļāļāļēāļĢāđāļāļ āļēāļĢāļāļīāļāđāļŦāđāđāļāđāļēāļŦāļāļĩāđāđāļāđāļāļāļāđāļāđāļāļĒāļāļāļāđāļ§āļĒāļāļēāđāļāļĨāđāļēāđāļāđāļāļ āđāļĨāļ°āđāļĨāļ·āļāļāļĒāļāļĄāļĢāļąāļāļŦāļĢāļ·āļāļāļāļāļāļīāđāļŠāļāļŠāļĨāļīāļāļāļąāđāļāđāļāđāđāļāļ
- āđāļŦāļāļļāļāļĨ: āđāļāđāļĄāļāļļāļĐāļĒāđāđāļāđāļāđāļāļāļāđāļŠāļđāļāļŠāļļāļāļāļĢāļ§āļāļŠāļāļāļāļąāļ§āļŠāļāļīāļāđāļāļāļĢāđāđāļĄāļ·āđāļāļ āļēāļāđāļāļĨāļ āļāđāļāļāļāļąāļāļāļīāļĨāļāđāļēāļāļāļē
- āļāđāļāļĒāļāđāļ§āđāļ: āđāļāđāļēāļŦāļāļĩāđāļŦāđāļēāļĄāļāļāļīāđāļŠāļāļŠāļĨāļīāļāļāļĩāđāđāļāđāļāļēāļĢāļāļāļĒāļ·āļāļĒāļąāļāļāđāļēāļ API āļāļāļēāļāļēāļĢāļŠāļģāđāļĢāđāļāļāļđāļāļāđāļāļāđāļĨāđāļ§
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-PAY-003 (āļāļēāļĢāļāđāļāļāļŦāļĢāļ·āļāļāļĒāļāļĒāļāļģāļĢāļ°āļĒāļāļ):
- āļāļ: āļĢāļļāđāļ MVP āđāļĄāđāļĢāļāļāļĢāļąāļāļāļēāļĢāđāļāđāļāļāļģāļĢāļ°āđāļāđāļāļāļ§āļāļŦāļĢāļ·āļāļāļĒāļāļĒāļāđāļēāļĒ āļŠāļĄāļēāļāļīāļāļāđāļāļāļŠāđāļāļāļāđāļēāļĒāđāļāļāļĒāļāļāļāļĢāļāđāļāđāļĄāļāļģāļāļ§āļāļāļāļāļŠāļąāļāļŠāđāļ§āļāļŦāļāļĩāđāļŠāļīāļāđāļāđāļēāļāļąāđāļ
- āđāļŦāļāļļāļāļĨ: āļāļ§āļēāļĄāđāļĢāļĩāļĒāļāļāđāļēāļĒāđāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļīāļ§āļāļēāļĢāđāļāļĢāđāļāļĄāđāļāļĒāđāđāļĨāļ°āļĢāļ°āļāļāļŦāļĨāļąāļāļāđāļēāļ
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-PAY-004 (āļāļēāļĢāļāļāļĒāļāđāļĨāļīāļāļāļļāļĢāļāļĢāļĢāļĄ):
- āļāļ: āļāļđāđāđāļāļāđāļĄāđāļŠāļēāļĄāļēāļĢāļāļāļāļĒāļāđāļĨāļīāļāļŠāļĨāļīāļāđāļāđāļŦāļēāļāļāđāļēāļāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ Verified āđāļĨāđāļ§
4. āļāļēāļĢāļāļģāļāļ§āļāđāļāđāļāļĒāļāļāđāļĨāļ°āļĒāļāļāđāļāļīāļāđāļāļĨāļĩāļĒāļĢāđāļŦāļāļĩāđ (Debt & Balance Calculations)
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-DBT-001 (āļĒāļāļāļĢāļ§āļĄāļāļāđāļŦāļĨāļ·āļāļŠāļļāļāļāļī):
- āļāļ: āļŠāļąāļāļŠāđāļ§āļāļĒāļāļāļŦāļāļĩāđāļŠāļļāļāļāļīāļāļāļāđāļāļ·āđāļāļāļĢāđāļ§āļĄāļāļĨāļļāđāļĄāļāļģāļāļ§āļāļāļēāļĄāļŠāļđāļāļĢāļāļĨāļĢāļ§āļĄāļāļīāļĨāļŠāļģāļĢāļāļāļŦāļąāļāļĨāļāļāđāļ§āļĒāļŦāļāļĩāđāļāđāļēāļāļāđāļēāļĒ āđāļĨāļ°āļāļĨāļĢāļ§āļĄāļāļāļāđāļāđāļāđāļāļīāļāļāļļāļāļāļāđāļāļāļĨāļļāđāļĄāļāđāļāļāđāļāđāļ 0 āđāļŠāļĄāļ
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-DBT-002 (āļāļēāļĢāļĨāļāļāļąāđāļāļāļāļāđāļāļāđāļāļīāļ):
- āļāļ: āļĢāļ°āļāļāļāļ°āļŦāļēāļĢāđāļāļĨāļĩāđāļĒāđāļŦāđāļāļēāļĢāđāļāļāļāļ·āļāļāļąāļāļāļĢāļ°āļŦāļĒāļąāļāļāļąāđāļāļāļāļāļāļēāļĢāļāļģāļāļļāļĢāļāļĢāļĢāļĄāļĨāļ (āđāļāđāļ āđāļāđāļāļāļīāļāļāļāļāļāđ āļāļāļāļāđāļāļīāļāļāļĩāļĄ āļĒāļļāļāđāļāđāļ āđāļāđāļāđāļāļāļŦāļēāļāļĩāļĄāļāļĢāļ)
5. āļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļāđāļŠāļĄāļ·āļāļ Mochi āđāļĨāļ°āļĢāļ°āļāļāđāļāļĄāļāļģāļĨāļāļ (Gamification Pet Rules)
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-GAM-001 (āđāļāļāļāđāļĢāļąāļāļāđāļēāļāļĢāļ°āļŠāļāļāļēāļĢāļāđ XP):
- āļāļ: āļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļāļāļĢāļ°āļāļģāļāļĨāļļāđāļĄāđāļāđāļĢāļąāļ XP āļāļēāļāļāļĪāļāļīāļāļĢāļĢāļĄāļāļģāļĢāļ°āđāļĢāđāļ§: āļāđāļēāļĒāđāļ 12 āļāļĄ. (+25 XP), āļāđāļēāļĒāđāļ 24 āļāļĄ. (+15 XP), āļāđāļēāļĒāđāļĨāļĒ 24 āļāļĄ. (+5 XP)
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-GAM-002 (āđāļāļāļāđāļŦāļąāļāļāļĨāļąāļāļāļĩāļ§āļīāļ HP āļĢāļēāļĒāļ§āļąāļ):
- āļāļ: āļāļĢāļ§āļāļāļ§āļēāļĄāļāđāļēāļāļāļģāļĢāļ°āđāļ§āļĨāļēāđāļāļĩāđāļĒāļāļāļ·āļ āļŦāļēāļāđāļĨāļĒāļāļīāļ§āļāļīāļĨ āļŦāļąāļāļāļĨāļąāļāļāļĩāļ§āļīāļāļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļ -10 HP āļāđāļāļĒāļāļāļāđāļēāļ āļŦāļēāļāļāļĨāļąāļāļāļĩāļ§āļīāļāļāļķāļ 0 āļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļāļāļ°āļāđāļ§āļĒāđāļĨāļ°āļāļāļŠāļ°āļŠāļĄ XP āļāļāļāļ§āđāļēāļāļ°āļāļđāđāļāļĨāļąāļāļāļĩāļ§āļīāļāđāļāļīāļ 50
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-GAM-003 (āļāļēāļĢāļāļ·āđāļāļāļđ HP):
- āļāļ: āđāļĄāļāļīāļāļ·āđāļāļāļĨāļąāļāļāļąāļāļāļĩ +15 HP āđāļĄāļ·āđāļāđāļāļ·āđāļāļāļāļģāļĢāļ°āļŦāļāļĩāđāļŠāļģāđāļĢāđāļ āļŦāļĢāļ·āļāđāļāđāļāļāļĒāļāđāļāļĨāļļāđāļĄāđāļĨāļāļāļĩāļāļāļēāļŦāļēāļĢ (+10 HP āļāđāļāļāļĢāļąāđāļ)
6. āļāļēāļĢāļāļ§āļāļŦāļāļĩāđāļāļąāļāļāļĢāļīāļĒāļ° (AI Reminder Engine)
- āļĢāļŦāļąāļŠāđāļāļāļāđ BR-AI-001 (āļĢāļ°āļāļąāļāļāđāļģāđāļŠāļĩāļĒāļāļāļēāļĢāļāļ§āļ):
- āļāļ: āļŠāđāļāđāļāļ·āļāļāļāļēāļĄāļāļ§āļēāļĄāļŠāļāļīāļ: āļŠāļļāļ āļēāļ, āđāļāđāļāļāļąāļāđāļāļ (āļ āļēāļĐāļēāļāļđāļ), āđāļĨāļ°āļŠāļĢāđāļēāļāļ āļēāļāļĄāļĩāļĄāļāļĨāļāđ āļāļ§āļāļāļąāļāđāļāļĄāļąāļāļī āļŦāđāļēāļĄāļāđāļāļāļāļģāļŦāļĒāļēāļāļāļēāļĒāđāļĨāļ°āļāđāļēāļ§āļĢāđāļēāļ§
ðŽð§ English (For AI Agents)
1. Group Constraints & Memberships
- BR-GRP-001: Group Membership Limit
- Rule: A group can contain a maximum of 50 members.
- Reason: Keeps group communication and expense calculation performance clean and fast.
- Example: Roommate group has 4 members. Trip group has 25 members.
- Exceptions: Enterprise/event groups (future extension, not allowed in MVP).
- Edge Cases: If a user attempts to join a group with 50 active members via invite code, show error
GROUP_FULLand deny entry.
2. Bill Editing, Deletion & Locking Lifecycle
- BR-BIL-001: Bill Editing Rules
- Rule: A bill can only be edited by its creator (creditor) if all associated expense shares are
'unpaid'. Once any member transitions their share status to'processing'or'paid', the bill becomes locked and cannot be edited. - Reason: Modifying a bill after shares are already settled creates financial inconsistencies and destroys audit trails.
- Example: Didi creates a bill for 1000 THB. Mint uploads a slip to pay. The bill is locked; Didi cannot change the bill to 1200 THB.
- Exceptions: None.
- Edge Cases: If the creator wants to edit, they must first request the payer to cancel their payment/processing share back to
'unpaid'.
- Rule: A bill can only be edited by its creator (creditor) if all associated expense shares are
- BR-BIL-002: Bill Deletion Rules
- Rule: A bill can be deleted by its creator only if all shares are
'unpaid'. Once a payment is registered, the bill cannot be deleted. - Reason: Prevents accidental or fraudulent deletion of payment history.
- Exceptions: None.
- Edge Cases: Instead of deletion, creators can mark active bills as âCancelledâ which hides them from active lists but retains the audit log in the database.
- Rule: A bill can be deleted by its creator only if all shares are
3. Payments, Slips, & Approvals
- BR-PAY-001: Slip Upload & Processing Windows
- Rule: Debtors can upload slips for their share at any time. When a slip is uploaded, the corresponding
expense_shares.statusmoves to'processing', blocking other payment uploads for the same share. - Reason: Prevents multiple users from uploading the same slip or duplicate attempts on the same share.
- Example: Mint uploads a slip. Her share status is
'processing'. She cannot upload another slip until the system verifies or rejects the current one. - Edge Cases: If AI verification times out, status reverts to
'unpaid'after 5 minutes, freeing the slot for retry or manual confirmation.
- Rule: Debtors can upload slips for their share at any time. When a slip is uploaded, the corresponding
- BR-PAY-002: Creditor Rejection Rights
- Rule: If automated AI slip verification fails, the bill creator (creditor) receives a manual approval task in their feed. The creator can approve or reject the slip.
- Reason: Establishes the human user as the ultimate source of truth, preventing system blockages due to low-quality slip photos.
- Exceptions: Creditors cannot manually reject a transaction that has been marked as
'verified'by the official bank database query.
- BR-PAY-003: Partial Payments
- Rule: MVP does not support partial payments of individual shares. A user must settle their exact calculated share amount in full.
- Reason: Keeps EMV Co PromptPay QR generation simple and matches the payment status flags exactly.
- Exceptions: Custom splits can adjust initial share divisions before publishing.
- BR-PAY-004: Payment Cancellation
- Rule: Payers cannot cancel a payment once the status has transitioned to
'verified'. They can only request cancellation during the'processing'state (before AI/manual check completes).
- Rule: Payers cannot cancel a payment once the status has transitioned to
4. Debt & Balance Calculations
- BR-DBT-001: Net Balance Aggregates (Zero-sum Debt)
- Rule: The system calculates individual user net balances using a standard clearing algorithm:
The sum of all net balances across a group must always equal exactly 0. - Reason: Prevents phantom money generation and ensures accounting balance.
- Rule: The system calculates individual user net balances using a standard clearing algorithm:
- BR-DBT-002: Debt Simplification (Clearing)
- Rule: Debt calculations are simplified across a group using a transaction minimization algorithm (e.g. standard net balance clearing).
- Example: If A owes B 100 THB, and B owes C 100 THB, the system simplifies the ledger so A pays C 100 THB directly.
5. Gamification (Mochi Pet Rules)
- BR-GAM-001: XP Gains
- Rule: The group pet (âMochiâ) gains XP when members settle debts:
- Early Settlement (Within 12 hours):
- Standard Settlement (Within 24 hours):
- Late Settlement (After 24 hours but before deadline):
- Rule: The group pet (âMochiâ) gains XP when members settle debts:
- BR-GAM-002: HP Losses (Cron Schedule)
- Rule: A cron job executes daily at 00:00. For each bill in the group that has passed its due date, Mochi loses health:
If Mochiâs HP reaches 0, Mochi becomes âSickâ and XP gain is frozen until HP is restored to at least 50.
- Rule: A cron job executes daily at 00:00. For each bill in the group that has passed its due date, Mochi loses health:
- BR-GAM-003: HP Recovery
- Rule: Mochi recovers 15 HP immediately when any overdue share is settled. Group members can also spend group XP to âfeedâ Mochi, restoring 10 HP per feed action.
6. AI Reminder Engine
- BR-AI-001: Tone-of-Voice Selection
- Rule: Reminders are dispatched based on the creditorâs selected tone:
- Polite: Standard professional notification.
- Casual: Friendly chat message layout.
- Humorous/Meme: AI generates a meme matching the groupâs spending context and displays it in chat.
- Safety Policy: Memes must not contain offensive language or hostile references.
- Rule: Reminders are dispatched based on the creditorâs selected tone: