• DevPilot's avatar
    feat(accounting): tools for the four things that still needed a human · 5ed78ec8
    DevPilot authored
    Every item I had left as "the accountant must decide" now has a screen to decide
    it on. Nothing accounting-related is left needing code.
    
    **فئات الأصول — /inventory/asset-categories.** The screen I referenced in the
    manual and in a seed comment, and had not written. Depreciation posts through
    these three accounts per category; a category missing either depreciation
    account is silently skipped, so the asset ages in the register and the balance
    sheet never moves. The screen leads with exactly that failure — categories that
    hold assets but cannot post — offers only postable accounts, and refuses a
    half-mapped category, because one depreciation account without the other cannot
    balance an entry.
    
    **إعادة تبويب الحسابات — /accounting/reclassification.** A balance in the wrong
    account cannot be edited: the ledger is the record, and a balance that disagrees
    with the entries behind it is worse than a wrong one. So it moves by a dated,
    balanced, reversible entry. It lists what is genuinely stuck — 8 accounts here,
    including 43.9m on «مشروعات تحت التنفيذ» and 4.8m on a header — derives the
    DIRECTION from the balance rather than asking (getting that backwards doubles a
    balance instead of moving it), and refuses a header or cross-type destination.
    
    To empty a header at all, JournalService needed to allow one posted there. That
    is the only way out in double-entry, so the flag exists, is set by this service
    alone, and the service independently refuses to let a header be the destination.
    
    **رسملة مشروع تحت التنفيذ.** A finished project is not a purchase — the money
    was spent over months and sits in CIP, which deliberately does not depreciate.
    Capitalising moves the accumulated cost to the asset account so depreciation can
    start. Booking it as a purchase would credit cash for money already spent. Now a
    third option on the asset form, next to purchase and opening balance.
    
    **أرشفة سنة مالية — /accounting/fiscal-years.** Overlapping years were flagged
    but unfixable from the UI. Archiving retires one without deleting it, and is
    refused outright when the year carries entries or is the current one.
    
    The manual is rewritten around this: every wizard now has numbered UI steps, and
    a new index lists all 39 accountant-facing tools with what each does. The
    decisions section now names the tool for each item instead of describing the
    problem.
    
    Verified on a production clone with all 409 foreign keys: reclassification moves
    4,799,436 off a header and leaves it at 0.00 with all guards firing,
    capitalisation posts Dr Asset / Cr CIP and posts nothing without a CIP account,
    categories screen offers 593 postable accounts and no headers, 1,499 routes
    resolve, 254 controllers instantiate, 242 services load, trial balance diff 0.00,
    and all 56 diagrams across docs/ parse against the real mermaid parser.
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    5ed78ec8
Name
Last commit
Last update
..
Academies Loading commit data...
AcademyContracts Loading commit data...
AccessMatrix Loading commit data...
Accounting Loading commit data...
Achievements Loading commit data...
ActivitySubscriptions Loading commit data...
Alerts Loading commit data...
Archive Loading commit data...
Audit Loading commit data...
Auth Loading commit data...
Branches Loading commit data...
Carnets Loading commit data...
Cashier Loading commit data...
Children Loading commit data...
Coaches Loading commit data...
Dashboard Loading commit data...
Death Loading commit data...
Disciplines Loading commit data...
Divorce Loading commit data...
Documents Loading commit data...
Facilities Loading commit data...
FacilityDashboards Loading commit data...
FacilityGrids Loading commit data...
Fines Loading commit data...
Foreign Loading commit data...
Forms Loading commit data...
HR Loading commit data...
Honorary Loading commit data...
Installments Loading commit data...
Interviews Loading commit data...
Inventory Loading commit data...
MatchCenter Loading commit data...
MedicalBoard Loading commit data...
Members Loading commit data...
News Loading commit data...
Notifications Loading commit data...
ParentPortal Loading commit data...
Payments Loading commit data...
PlayerAffairs Loading commit data...
PlayerApi Loading commit data...
PlayerAuth Loading commit data...
PlaygroundAdmin Loading commit data...
PoolManagement Loading commit data...
Pricing Loading commit data...
Procurement Loading commit data...
Receipts Loading commit data...
Rentals Loading commit data...
Reports Loading commit data...
Reservations Loading commit data...
Roles Loading commit data...
Rules Loading commit data...
Sales Loading commit data...
Scheduling Loading commit data...
Seasonal Loading commit data...
ServiceCatalog Loading commit data...
Sessions Loading commit data...
Settings Loading commit data...
Sports Loading commit data...
SportsActivity Loading commit data...
SportsDashboard Loading commit data...
Spouses Loading commit data...
Subscriptions Loading commit data...
Support Loading commit data...
Temporary Loading commit data...
Tournaments Loading commit data...
TrainerPortal Loading commit data...
Training Loading commit data...
TrainingGroups Loading commit data...
Transfers Loading commit data...
Treasury Loading commit data...
Tutorials Loading commit data...
Users Loading commit data...
Waiver Loading commit data...
Workflow Loading commit data...