- Reports > Interest Posting Reports: per branch and product, generate/regenerate at any time, approve; branch column, HO-on-behalf marker, posted txn per account - Reports > Interest Posting Summary (branch-wise) for the head office, with Excel export - Day Close warns and disables Close Day while the branch's interest report is unapproved - Savings product accounting: Interest On Savings (expense), Savings Interest Payable and Paid (liability rows, required) - RBI Form 1 statutory and Form 9 return screens, reserve config updates - Interest posting report GETs exempted from the response cache Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
98 lines
4.6 KiB
TypeScript
98 lines
4.6 KiB
TypeScript
/**
|
|
* Copyright since 2025 Mifos Initiative
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
import { NgModule } from '@angular/core';
|
|
import { Routes, RouterModule } from '@angular/router';
|
|
|
|
import { Route } from '../core/route/route.service';
|
|
import { RbiCircularsComponent } from './rbi-circulars.component';
|
|
import { AmlRulesComponent } from './aml-rules/aml-rules.component';
|
|
|
|
const routes: Routes = [
|
|
Route.withShell([
|
|
{
|
|
path: 'rbi-circulars',
|
|
component: RbiCircularsComponent,
|
|
data: { title: 'RBI Circulars', breadcrumb: 'RBI Circulars' }
|
|
},
|
|
{
|
|
path: 'rbi/aml',
|
|
component: AmlRulesComponent,
|
|
data: { title: 'AML Rules Master', breadcrumb: 'AML Rules Master' }
|
|
},
|
|
{
|
|
// OSS 1 computed live from the ledger. Lazy — the ExcelJS workbook builder should not weigh
|
|
// down the eager bundle.
|
|
path: 'rbi/oss1',
|
|
loadComponent: () => import('./oss-live/oss1-live.component').then((m) => m.Oss1LiveComponent),
|
|
data: { title: 'OSS 1 — Return on Assets and Liabilities', breadcrumb: 'OSS 1 (RAL)' }
|
|
},
|
|
{
|
|
path: 'rbi/oss2',
|
|
loadComponent: () => import('./oss-live/oss2-live.component').then((m) => m.Oss2LiveComponent),
|
|
data: { title: 'OSS 2 — Return on Earnings', breadcrumb: 'OSS 2 (RoE)' }
|
|
},
|
|
{
|
|
// The filed workbooks as they stood before the returns were computed from the ledger. Kept
|
|
// reachable so a figure on a live return can be checked against what was actually filed for
|
|
// an earlier quarter; they read from static data and do not move.
|
|
path: 'rbi/oss1-filed',
|
|
loadComponent: () => import('./oss1-ral/oss1-ral.component').then((m) => m.Oss1RalComponent),
|
|
data: { title: 'OSS 1 — As filed (static)', breadcrumb: 'OSS 1 (as filed)' }
|
|
},
|
|
{
|
|
path: 'rbi/oss2-filed',
|
|
loadComponent: () => import('./oss2-roe/oss2-roe.component').then((m) => m.Oss2RoeComponent),
|
|
data: { title: 'OSS 2 — As filed (static)', breadcrumb: 'OSS 2 (as filed)' }
|
|
},
|
|
{
|
|
path: 'rbi/share-capital',
|
|
// Lazy for the same reason as the OSS returns — the ExcelJS workbook builder should not
|
|
// weigh down the eager bundle for a page most users never open.
|
|
loadComponent: () =>
|
|
import('./share-capital-return/share-capital-return.component').then((m) => m.ShareCapitalReturnComponent),
|
|
data: { title: 'Members & Share Capital Return', breadcrumb: 'Members & Share Capital' }
|
|
},
|
|
{
|
|
path: 'rbi/oss3',
|
|
loadComponent: () => import('./oss3-raq/oss3-raq.component').then((m) => m.Oss3RaqComponent),
|
|
data: { title: 'OSS 3 — Return on Asset Quality', breadcrumb: 'OSS 3 (RAQ-UCB)' }
|
|
},
|
|
{
|
|
// CRR return, filed twice a month. Lazy like the other returns — it pulls in ExcelJS.
|
|
path: 'rbi/form1',
|
|
loadComponent: () => import('./reserve-return/form1-crr.component').then((m) => m.Form1CrrComponent),
|
|
data: { title: 'Form 1 — Cash Reserve Ratio', breadcrumb: 'Form 1 (CRR)' }
|
|
},
|
|
// Form 9 (SLR) has no route of its own. Section 24 is settled on the statutory Form 1 at Part C,
|
|
// charged on the same liabilities Part B charges the cash reserve on. A second screen computing
|
|
// the same ratio from a month-end base disagreed with it, and both were headed Form 9 — whichever
|
|
// a filer read, they had no way to know the other said something else.
|
|
{
|
|
// Form IX — the Return on Assets and Liabilities, code R408, filed monthly.
|
|
//
|
|
// A DIFFERENT return from Form 9 (SLR) above despite the name. That one reports one ratio;
|
|
// this one reports the whole balance sheet, in rupees thousands, and its two sides must
|
|
// agree. Its own route rather than a tab on rbi/form9 for exactly that reason — they answer
|
|
// different questions and share no figures.
|
|
path: 'rbi/form9-return',
|
|
loadComponent: () => import('./form9-return/form9-return.component').then((m) => m.Form9ReturnComponent),
|
|
data: { title: 'Form IX — Return on Assets and Liabilities', breadcrumb: 'Form IX (R408)' }
|
|
}
|
|
// The statutory Form 1 has no route of its own: it is a tab on rbi/form1. Both are Form 1 for
|
|
// one bank and one period, and two routes made a filer guess which held which — one could be
|
|
// read while the other was believed to be on screen.
|
|
])
|
|
];
|
|
|
|
@NgModule({
|
|
imports: [RouterModule.forChild(routes)],
|
|
exports: [RouterModule]
|
|
})
|
|
export class RbiCircularsRoutingModule {}
|