# Phase 3B manual test script: bank book and reconciliation

For a treasurer and a second person (accountant). About 30 minutes. The rules (fees, branch and currency
checks, alerts once, reference matching, sign-off by someone else, the lock, interest maths, maturity) are
also proved by `tests/Feature/BankBookTest.php`; this script checks what people see.

**Staff app:** http://localhost/church_acct_app/public/app
**Logins** (demo church, no two-factor; password `DEMO_PASSWORD` at the top of `database/seeders/DatabaseSeeder.php`):
**treasurer@demo.church.test** and **accountant@demo.church.test**.

**Already on the local database from the developer's check (18 Oct):** a "Building Fund Savings" account
with a ₦100,000 minimum, transfer TRF-HQ-2026-000001, fixed deposit FD-HQ-2026-000001 (maturing 30 Oct,
two interest drafts waiting), and a Main Current Account reconciliation to 17 Oct signed off by the
accountant. Use them, or reseed for a clean start.

## A. Accounts, minimums and transfers (treasurer)

1. [ ] **Banking**: each account shows its kind, book balance, minimum, and badges (below minimum,
   unmatched lines, "Signed off to …").
2. [ ] **Edit** the savings account and set its minimum to ₦300,000. It turns red with "Below minimum", and
   the dashboard shows it. (The treasurer and Headquarters Finance get one email; see **Messages**.)
3. [ ] **Transfer between accounts**: Main → Savings, ₦100,000, fee ₦52.50, reference NIP/123. The transfer
   appears in the register with its journal; Main falls by ₦100,052.50 and the fee is under Bank Charges.
   The savings account is back above its minimum and the dashboard notice is gone.
4. [ ] Try a transfer from an account to itself: the "To" list does not offer it.

## B. Statement import (treasurer, Main Current Account)

5. [ ] Download any statement as **Excel** (or save a CSV as .xlsx) with headings like Date, Narration,
   Debit, Credit. Import it: lines appear and auto-match.
6. [ ] Import a file with unusual headings (e.g. Posted / Details / Value), or tick **Let me choose the
   columns**. A preview appears: choose the heading row and the columns, then **Import with these columns**.
   Import a later statement with the same headings: no questions this time.
7. [ ] A book entry with reference "CHQ 004512" and a statement line referencing 004512 three weeks later
   match automatically; without a matching reference they would not (more than 5 days apart).

## C. Reconcile, sign off, lock (treasurer, then accountant)

8. [ ] As the treasurer, reconcile a statement date after the last signed-off one and **Complete
   reconciliation**: it shows "awaiting another person"; the treasurer has no **Sign off** button.
9. [ ] As the accountant, press **Sign off**. The account shows "Signed off to …"; matched lines up to that
   date show 🔒 instead of ✕.
10. [ ] **Print**: the reconciliation statement opens as a PDF with both balances, every outstanding item
    and who prepared and signed it off.
11. [ ] Import a statement containing lines dated before the sign-off: the message says they were left out.

## D. Fixed deposits (treasurer, accountant)

12. [ ] **Place a deposit** from Main: ₦500,000 at 12%, placed on the 15th two months ago, maturing next
    month. Main falls by ₦500,000; the register shows it running.
13. [ ] Run `php artisan bank:daily`. Under **Journals** two interest drafts appear (Dr 12050 Accrued
    Interest Receivable, Cr 43010 Bank Interest), made in the treasurer's name.
14. [ ] As the treasurer press **Record maturity…**: refused while drafts wait. As the accountant post the
    drafts (the treasurer cannot post their own).
15. [ ] Record maturity with what the bank paid, ticking **Roll it over** with a new rate and date: the
    old deposit shows "rolled over", a new one appears for the amount paid, Accrued Interest Receivable is
    back to ₦0.00 and Bank Interest shows all the interest.
16. [ ] A deposit maturing within 14 days shows "matures soon" and is on the dashboard.

## E. Bank book and year end

17. [ ] **Reports › Bank Book**, Main Current Account: every movement with **Entered by**, running balance
    and **Cleared** (the statement date) for matched lines; the closing balance equals the account's book
    balance.
18. [ ] **Setup › Year-end close** (for a year with bank accounts): the bank line now reads "reconciled and
    signed off to year end".
