Emit a per-transfer signal so incoming transactions can be reacted to (in-game chat notifications, websocket feeds, etc.).
Grounded: Treasury fires no per-transfer event — only TaxCycleEvent (see tasks/TaxCycleTask). TreasuryApi.transfer(...) completes silently, so nothing can react to a firm/player receiving money.
Add a Bukkit event (e.g. TransferEvent carrying from/to account ids + amount + reason) fired after a successful ledger transfer, and/or a websocket feed for external consumers. Unblocks PAR-56 (notify online firm employees in chat on incoming transfer) and the event-driven path for PAR-57.
Code context — There's no websocket / transaction streaming in business or treasury today; transfers go synchronously through
TreasuryApi.transfer, and the only async hook isTaxCycleEvent.This belongs at the Treasury /
treasury-rest-apilayer, not business (the ledger is Treasury's system of record). Realistic shape: an SSE/WebSocket intreasury-rest-apitailing the transaction table, or a new Treasury per-transfer event with an outbound publisher; business-rian would only be a consumer. Confirm scope/owner — pairs with PAR-56 (both want a transfer event that doesn't exist yet).