"Keep business logic in the application layer" is the prevailing orthodoxy. Then you have a financial reconciliation workflow that processes 50,000 transactions, involves 12 interdependent tables, must be atomically consistent, and must run in under 2 seconds.
In that context, a well-written stored procedure outperforms any ORM-generated query sequence by an undebatable margin.
PrimeERP for Dugo Capital has 120+ stored procedures handling loan origination, payroll, and reconciliation. Running reliably in production for years.
Use stored procedures for: bulk financial operations, complex atomic workflows, performance-critical data processing. Keep them out of: simple CRUD, business logic that changes frequently.
— Dick Bassey | DevDick | 2022