🧠 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_FULL and 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'.
  • 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.

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.status moves 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.
  • 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).

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.
  • 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):
  • 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.
  • 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.