• Mahmoud Aglan's avatar
    feat(accounting): allocation wizard with a live running remainder · 00dfe062
    Mahmoud Aglan authored
    Splitting a payment across GL accounts previously meant the advanced rule
    editor — a table of lines with no feedback until save. The finance team's
    actual question is "20% here, 30% there, where does the rest go?", which
    needs the remainder visible while you allocate.
    
    - New wizard screen: base amount (pre-filled from the stream's actual
      collection average), member-category scope, progressive allocation with
      the unallocated balance as a running figure plus a proportional bar,
      a mandatory remainder destination, and a live journal-entry preview
      that balances before you can save.
    - The wizard's arithmetic mirrors RevenueAllocator exactly — tax off the
      top, fixed lines from the pool, percentages of net-after-fixed — so the
      preview is what actually posts. Verified against the live allocator:
      150,000 → 20%/30%/rest = 30,000 / 45,000 / 75,000, and with 14%
      inclusive VAT = 26,315.79 / 39,473.69 / 65,789.47 on net 131,578.95.
    - Wire member_category through resolveRule() with specificity scoring
      (category > branch > payment method), so a working-member split wins
      over the general rule with no extra configuration.
    - update() resolves and supersedes only the same-scope rule, and no
      longer reads $memberCategory before assigning it.
    - Wizard is now the default action from the mapping list and the
      connection centre; the advanced editor moves behind a  link.
    - Arabic tutorial in docs/معالج-توزيع-المبالغ.md.
    Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    00dfe062
connections.php 12.3 KB