• Mahmoud Aglan's avatar
    feat(settlements): make the worklist teach the case it is showing · d760eb10
    Mahmoud Aglan authored
    The screen listed what was wrong with an account and stopped there. The person
    reading it is a receptionist mid-shift, not an accountant with time to work out
    what "مستلزم محاسَب بأكثر من سعره" means or which of nine tools fixes it — and a
    case nobody understands is a case nobody touches, which is money.
    
    So the catalogue now carries the explanation with the label: what the case
    means, why it happens, the numbered handling, and which tool does it. Selecting
    a case in the rail shows all of that beside the accounts it filters to. Every
    row opens its own evidence in place — the months nobody billed, the free-text
    lines that are really product sales, where the player stands on his kit — so the
    operator reads the account before deciding, without opening the wizard to find
    out whether it is worth opening.
    
    New case, highest severity: **لا يوجد له اشتراك مسجَّل**. An active paying player
    with invoice history and no enrolment row at all. Renewal billing reads
    `enrollments` and nothing else, so these players are not billed late — they are
    not billed at all, and no other screen in the system lists them. That is what
    made OC-Sport's 95 lost accounts invisible for a month after a programme delete
    took their enrolments. The row reads the programme off their last invoice line,
    because the enrolment that knew it is gone and that name is what an operator
    needs to put them back.
    
    Two things the rebuild fixes on the way past:
    
    - The scan no longer passes `only` to the scanner. Filtering there dropped the
      other cases from the result, so the rail beside a selected case read zero
      everywhere — which an operator reads as "those are fixed", not "those are
      hidden".
    - `expanded` is `#[Locked]`. It names a row whose detail is that participant's
      own money; settable from the browser it is an id to aim somewhere else.
    
    Verified against the restored tenant: 496 tests, 387 pass / 109 skip on Postgres
    and 313 / 183 on SQLite, and every one of the first 40 flagged accounts renders
    its detail block. Rendered and inspected at 390px, 820px and 1360px.
    Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    d760eb10
Name
Last commit
Last update
..
Feature Loading commit data...
Fixtures Loading commit data...
Unit Loading commit data...
TestCase.php Loading commit data...