Transactions and accounting are the core. Everything a product needs is configuration around it.
The core must not bend.
It posts every movement with a trading date and a value date, accrues, resets, revalues, closes the day and keeps the books in balance. Those books are a sub-ledger: they feed your general ledger through a journal export, XBRL GL among the formats, and reconcile back to it. The engine is not your general ledger and does not want to be. It has no idea what a mortgage is. A mortgage is an account type: positions, transaction types, schedules and rates, configured.
| Account | Currency and schedule | Role in the structure |
|---|---|---|
| Loan Given | USD 40,000,000, floating, quarterly | the asset |
| Funding Taken | EUR 35,000,000, fixed, semi-annual | funds it |
| Swap Given and Taken | USD–EUR, notional matched | hedges it |
| Fee Income | USD, accruing daily | prices it |
The four accounts form one structure. The structure belongs to a legal entity. The entity keeps its own books, so the deal's income, expense and FX result land in the right set of accounts without a single manual journal. Core platforms typically model the loan and lose the rest.
Every feature is its own project with its own aggregates and its own tests.
Features never reference each other's implementation. They talk through contracts, and the build fails when someone tries otherwise. It deploys as one unit, which is what a bank's operations team can actually run. The modules are the boundaries a later split would follow, if one is ever needed.
What this means for you: the deal you cannot administer today is a structure, an account-type set and a posting group. Configuration, tested on sample data, then live.