-
Aadhaar
-
+
-
+ @if (realKyc?.aadhaarNumberMasked) {
+
{{ realKyc.aadhaarNumberMasked }}
+ }
+ @if (hasAadhaarPhotos()) {
+
+ } @else {
+
+ }
-
PAN
-
+
-
+ @if (realKyc?.panNumber) {
+
{{ maskPan(realKyc.panNumber) }}
+ }
+ @if (hasPanPhotos()) {
+ @if (hasPanFront() && hasPanBack()) {
+
+
+
+
+
+
+
+ } @else {
+
+
+
+
+ }
+ } @else {
+
+ }
-
Income Proof
-
+
@if (findDocument('income'); as incomeDoc) {
- Submitted
{{ incomeDoc.name || incomeDoc.fileName }}
-
}
-
- @if (!isRevolving(a)) {
+
+ @if (!isDepositLoan(a)) {
- @if (amountOutOfRange(a)) {
-
- {{ a.productName }} allows ₹{{ productLimitsFor(a)?.minAmt | number: '1.0-0' }} – ₹{{
- productLimitsFor(a)?.maxAmt | number: '1.0-0'
- }}
- — this amount won't be saved until it's in range.
-
- }
-
- @if (tenureOutOfRange(a)) {
-
- {{ a.productName }} allows {{ productLimitsFor(a)?.minTenure }}–{{ productLimitsFor(a)?.maxTenure }}
- months — this tenure won't be saved until it's in range.
-
- }
- }
-
- Eligible Loan Amount preview: ₹{{ eligiblePreview(a) | number: '1.0-0' }}
-
- @if (isRevolving(a)) {
-
- {{ a.productName }} is a revolving/renewable limit — repaid on demand, no fixed EMI.
-
- } @else {
-
- Estimated EMI: ₹{{ emiPreview(a) | number: '1.0-0' }} / month ({{
- emiToIncomePctPreview(a) | number: '1.0-1'
- }}% of monthly income)
-
- @if (emiToIncomePctPreview(a) > 40) {
- @if (a.coBorrowerRequired && coBorrowerDetailsComplete(a) && combinedEligibilityOk(a)) {
-
- EMI exceeds 40% of the applicant's own income, but the Co-Borrower added below already covers it —
- see the Co-Borrower section.
-
- } @else {
+ @if (!isRevolving(a)) {
+
+ @if (amountOutOfRange(a)) {
- EMI exceeds 40% of monthly income — add a Co-Borrower, reduce the loan amount, or increase the
- tenure before proceeding.
+ {{ a.productName }} allows ₹{{ productLimitsFor(a)?.minAmt | number: '1.0-0' }} – ₹{{
+ productLimitsFor(a)?.maxAmt | number: '1.0-0'
+ }}
+ — this amount won't be saved until it's in range.
+
+ }
+
+ @if (tenureOutOfRange(a)) {
+
+ {{ a.productName }} allows {{ productLimitsFor(a)?.minTenure }}–{{ productLimitsFor(a)?.maxTenure }}
+ months — this tenure won't be saved until it's in range.
}
}
- }
-
-
- {{ a.monthlyIncome > 0 ? 'Update Income & Terms' : 'Assess Income & Calculate Eligible Amount' }}
-
-
- @if (a.monthlyIncome > 0) {
-
-
-
- Monthly Income (Last Assessed)
- - ₹{{ a.monthlyIncome | number: '1.0-0' }}
-
-
-
- Eligible Loan Amount
- - ₹{{ a.eligibleLoanAmount | number: '1.0-0' }}
-
-
-
- Estimated EMI
- -
- @if (isRevolving(a)) {
- No fixed EMI (revolving limit)
- } @else {
- ₹{{ emiAmountFor(a) | number: '1.0-0' }} / month
- }
-
-
-
- }
- @if (!isRevolving(a)) {
-
-
EMI Calculation Basis
-
+
+ Eligible Loan Amount preview: ₹{{ eligiblePreview(a) | number: '1.0-0' }}
+
+ @if (isRevolving(a)) {
+
+ {{ a.productName }} is a revolving/renewable limit — repaid on demand, no fixed EMI.
+
+ } @else {
+
+ Estimated EMI: ₹{{ emiPreview(a) | number: '1.0-0' }} / month ({{
+ emiToIncomePctPreview(a) | number: '1.0-1'
+ }}% of monthly income)
+
+ @if (emiToIncomePctPreview(a) > 40) {
+ @if (a.coBorrowerRequired && coBorrowerDetailsComplete(a) && combinedEligibilityOk(a)) {
+
+ EMI exceeds 40% of the applicant's own income, but the Co-Borrower added below already covers it —
+ see the Co-Borrower section.
+
+ } @else {
+
+ EMI exceeds 40% of monthly income — add a Co-Borrower, reduce the loan amount, or increase the
+ tenure before proceeding.
+
+ }
+ }
+ }
+
+
+ {{ a.monthlyIncome > 0 ? 'Update Income & Terms' : 'Assess Income & Calculate Eligible Amount' }}
+
+
+ @if (a.monthlyIncome > 0) {
+
-
- Principal (Loan Amount)
- - ₹{{ a.requestedAmount | number: '1.0-0' }}
+ - Monthly Income (Last Assessed)
+ - ₹{{ a.monthlyIncome | number: '1.0-0' }}
-
- Interest Rate
- - {{ a.interestRate }}% p.a. ({{ a.interestRate / 12 | number: '1.2-2' }}% / month)
+ - Eligible Loan Amount
+ - ₹{{ a.eligibleLoanAmount | number: '1.0-0' }}
-
- Tenure
- - {{ a.tenureMonths }} months
-
-
-
- Total Interest Payable
- - ₹{{ totalInterestFor(a) | number: '1.0-0' }}
-
-
-
- Total Amount Payable
- - ₹{{ totalPayableFor(a) | number: '1.0-0' }}
+ - Estimated EMI
+ -
+ @if (isRevolving(a)) {
+ No fixed EMI (revolving limit)
+ } @else {
+ ₹{{ emiAmountFor(a) | number: '1.0-0' }} / month
+ }
+
-
- Reducing-balance EMI formula: EMI = [P × r × (1+r)n] / [(1+r)n − 1] — where P =
- Principal, r = Monthly Interest Rate, n = Tenure in months. On P = ₹{{
- a.requestedAmount | number: '1.0-0'
- }}, r = {{ a.interestRate / 12 / 100 | number: '1.4-4' }}, n = {{ a.tenureMonths }} → EMI = ₹{{
- emiAmountFor(a) | number: '1.0-0'
- }}
- / month.
-
-
- }
- @if (a.coBorrowerRequired || isDepositLoan(a)) {
-
-
- Co-Borrower
- @if (isDepositLoan(a)) {
- (optional)
- } @else {
- (raises household eligibility)
- }
+ }
+ @if (!isRevolving(a)) {
+
+
EMI Calculation Basis
+
+
+
- Principal (Loan Amount)
+ - ₹{{ a.requestedAmount | number: '1.0-0' }}
+
+
+
- Interest Rate
+ - {{ a.interestRate }}% p.a. ({{ a.interestRate / 12 | number: '1.2-2' }}% / month)
+
+
+
- Tenure
+ - {{ a.tenureMonths }} months
+
+
+
- Total Interest Payable
+ - ₹{{ totalInterestFor(a) | number: '1.0-0' }}
+
+
+
- Total Amount Payable
+ - ₹{{ totalPayableFor(a) | number: '1.0-0' }}
+
+
+
+ Reducing-balance EMI formula: EMI = [P × r × (1+r)n] / [(1+r)n − 1] — where P
+ = Principal, r = Monthly Interest Rate, n = Tenure in months. On P = ₹{{
+ a.requestedAmount | number: '1.0-0'
+ }}, r = {{ a.interestRate / 12 / 100 | number: '1.4-4' }}, n = {{ a.tenureMonths }} → EMI = ₹{{
+ emiAmountFor(a) | number: '1.0-0'
+ }}
+ / month.
+
-
- @if (a.coBorrowerWanted) {
-
-
-
-
Upload the co-borrower's last 3 months' salary slips:
-
- @for (doc of coBorrowerCapture.salarySlips; track $index) {
-
- @if (doc.file || hasStoredDoc('COBORROWER:salarySlip:' + $index)) {
-
- @if (doc.previewUrl) {
-
- } @else {
- View file
- }
-
- }
+ }
+ @if (a.coBorrowerRequired || isDepositLoan(a)) {
+
+
+ Co-Borrower
+ @if (isDepositLoan(a)) {
+ (optional)
+ } @else {
+ (raises household eligibility)
}
- @if (coBorrowerDetailsComplete(a)) {
-
-
Combined Household Eligibility Calculation
-
-
-
- Applicant's Monthly Income
- - ₹{{ a.monthlyIncome | number: '1.0-0' }}
-
-
-
- Applicant's EMI Capacity (40%)
- - ₹{{ applicantEmiCapacity(a) | number: '1.0-0' }}
-
-
-
- Co-Borrower's Monthly Income
- - ₹{{ a.coBorrowerMonthlyIncome | number: '1.0-0' }}
-
-
-
- Co-Borrower's EMI Capacity (40%)
- - ₹{{ coBorrowerEmiCapacity(a) | number: '1.0-0' }}
-
-
-
- Combined Household EMI Capacity
- - ₹{{ combinedEmiCapacity(a) | number: '1.0-0' }}
-
-
-
- Estimated EMI (this loan)
- - ₹{{ emiAmountFor(a) | number: '1.0-0' }}
-
-
-
- Combined Capacity = (40% × ₹{{ a.monthlyIncome | number: '1.0-0' }} applicant) + (40% × ₹{{
- a.coBorrowerMonthlyIncome | number: '1.0-0'
- }}
- co-borrower) = ₹{{ applicantEmiCapacity(a) | number: '1.0-0' }} + ₹{{
- coBorrowerEmiCapacity(a) | number: '1.0-0'
- }}
- = ₹{{ combinedEmiCapacity(a) | number: '1.0-0' }}. Estimated EMI ₹{{
- emiAmountFor(a) | number: '1.0-0'
- }}
- is {{ combinedEligibilityOk(a) ? 'within' : 'above' }} this combined capacity.
-
- @if (combinedEligibilityOk(a)) {
-
Eligible with Co-Borrower
- } @else {
-
Still not eligible — increase co-borrower income, reduce the amount, or extend tenure
+
+ @if (a.coBorrowerWanted) {
+
+
+
+
Upload the co-borrower's last 3 months' salary slips:
+
+ @for (doc of coBorrowerCapture.salarySlips; track $index) {
+
+ @if (doc.file || hasStoredDoc('COBORROWER:salarySlip:' + $index)) {
+
+ @if (doc.previewUrl) {
+
+ } @else {
+ View file
+ }
+
+ }
}
- }
- }
- @if (!affordabilityOk(a)) {
-
- @if (!coBorrowerDetailsComplete(a)) {
- @if (!a.coBorrowerWanted) {
- Check "Add a Co-Borrower" and complete their details to proceed.
- } @else {
- Add the co-borrower's name, relationship, monthly income and all 3 salary slips to proceed.
- }
- } @else {
- Combined household income still doesn't cover the EMI at 40% — adjust the amount, tenure, or
- co-borrower before proceeding.
+ @if (coBorrowerDetailsComplete(a)) {
+
+
Combined Household Eligibility Calculation
+
+
+
- Applicant's Monthly Income
+ - ₹{{ a.monthlyIncome | number: '1.0-0' }}
+
+
+
- Applicant's EMI Capacity (40%)
+ - ₹{{ applicantEmiCapacity(a) | number: '1.0-0' }}
+
+
+
- Co-Borrower's Monthly Income
+ - ₹{{ a.coBorrowerMonthlyIncome | number: '1.0-0' }}
+
+
+
- Co-Borrower's EMI Capacity (40%)
+ - ₹{{ coBorrowerEmiCapacity(a) | number: '1.0-0' }}
+
+
+
- Combined Household EMI Capacity
+ - ₹{{ combinedEmiCapacity(a) | number: '1.0-0' }}
+
+
+
- Estimated EMI (this loan)
+ - ₹{{ emiAmountFor(a) | number: '1.0-0' }}
+
+
+
+ Combined Capacity = (40% × ₹{{ a.monthlyIncome | number: '1.0-0' }} applicant) + (40% × ₹{{
+ a.coBorrowerMonthlyIncome | number: '1.0-0'
+ }}
+ co-borrower) = ₹{{ applicantEmiCapacity(a) | number: '1.0-0' }} + ₹{{
+ coBorrowerEmiCapacity(a) | number: '1.0-0'
+ }}
+ = ₹{{ combinedEmiCapacity(a) | number: '1.0-0' }}. Estimated EMI ₹{{
+ emiAmountFor(a) | number: '1.0-0'
+ }}
+ is {{ combinedEligibilityOk(a) ? 'within' : 'above' }} this combined capacity.
+
+ @if (combinedEligibilityOk(a)) {
+
Eligible with Co-Borrower
+ } @else {
+
Still not eligible — increase co-borrower income, reduce the amount, or extend tenure
+ }
+
}
-
- }
-
+ }
+ @if (!affordabilityOk(a)) {
+
+ @if (!coBorrowerDetailsComplete(a)) {
+ @if (!a.coBorrowerWanted) {
+ Check "Add a Co-Borrower" and complete their details to proceed.
+ } @else {
+ Add the co-borrower's name, relationship, monthly income and all 3 salary slips to proceed.
+ }
+ } @else {
+ Combined household income still doesn't cover the EMI at 40% — adjust the amount, tenure, or
+ co-borrower before proceeding.
+ }
+
+ }
+
+ }
}
+ @if (a.guarantorsRequiredCount !== undefined && guarantorsNeeded(a) > 0) {
+
+ }
+
+
Purpose & Priority Sector
+
+
}
-
+
+
+
What has been collected
+
+ @for (row of planCollectedRows(a); track row.label) {
+
+ {{ row.label }}{{ row.value }}
+
+ }
+
+
+
+
Product terms — {{ a.productName }}
+
+ @for (row of planProductRows(a); track row.label) {
+
+ {{ row.label }}{{ row.value }}
+
+ }
+
+
⬇️ Download Loan Plan (PDF)
@@ -2127,7 +3503,7 @@
🖨️ Print Loan Plan
- Proceed to Loan Committee
+ Proceed to Sanction
}
@@ -2241,84 +3617,171 @@
@if (a.currentStage === 'CREDIT_COMMITTEE') {
-
Loan Committee Approval — {{ sanctioningAuthorityOf(a) }}
+
+ {{ isDepositLoan(a) ? 'Sanction' : 'Loan Committee Approval' }} — {{ sanctioningAuthorityOf(a) }}
+
-
-
Full Application Report — For the Committee
-
- Everything captured on this application — KYC, CIC score, Field Investigation, property valuation, agent
- report, meeting and stage history — as one PDF for every committee member to review before deciding.
-
-
-
- 🖨️ Print Full Report
-
-
- ⬇️ Download Full Report
-
+ @if (isDepositLoan(a)) {
+
+
Loan Application
+
+ The bank's loan application form, filled from this application: applicant particulars, occupation and
+ income, accounts and existing loans, the deposit offered as security and the declaration. After it
+ come the sanction checks and every document on file: the eKYC documents (Aadhaar, PAN), the lien
+ documents, the deposit documents and the legal documents.
+
+
+
+ 🖨️ {{ loanApplicationBusy ? 'Preparing…' : 'Print Loan Application' }}
+
+
+ ⬇️ {{ loanApplicationBusy ? 'Preparing…' : 'Download Loan Application' }}
+
+
-
+ } @else {
+
+
Full Application Report — For the Committee
+
+ Everything captured on this application — KYC, CIC score, Field Investigation, property valuation,
+ agent report, meeting and stage history — as one PDF for every committee member to review before
+ deciding.
+
+
+
+ 🖨️ Print Full Report
+
+
+ ⬇️ Download Full Report
+
+
+
+ }
-
Reports Required — present below reports, then complete.
-
}
@@ -2378,70 +3862,21 @@
-
+ @if (a.guarantorsRequiredCount === undefined) {
+
+ } @else {
+
+ }
- @if (a.guarantorRequired) {
-
-
Guarantor — Must Be an Existing Share Member
- @if (!a.guarantorClientId) {
-
- @if (searchingGuarantor) {
-
Searching…
- } @else if (guarantorSearchText.length >= 2 && guarantorSearchResults.length === 0) {
-
No clients found.
- }
- @if (guarantorSearchResults.length > 0) {
-
- @for (client of guarantorSearchResults; track client.id) {
-
- {{ client.displayName }}
- {{ client.accountNo ?? client.officeName ?? '' }}
-
- }
-
- }
-
- The guarantor must already be a bank client with an active share account — search and select them
- above, a name alone isn't enough.
-
- } @else {
-
- @if (loadingGuarantorShareCheck) {
-
Checking share membership…
- } @else if (a.guarantorHasShareAccount) {
-
Share Member — Verified
-
- @for (sa of guarantorShareAccounts; track sa.id) {
-
- {{ sa.accountNo }} — {{ sa.productName }}
-
- }
-
- } @else {
-
No Share Account Found
-
- This client has no active share account — a guarantor must already be a bank member. Pick a
- different guarantor.
-
- }
- }
-
+ @if (guarantorsNeeded(a) > 0) {
+
}
}
+
+
+ @if (isDepositLoan(a)) {
+
+
+
+ @for (row of collectedDocs(a); track row.label) {
+
+
+
+ {{ row.label }}
+
+ @if (row.ok) {
+
✓ Collected
+ } @else {
+
Missing
+ }
+
+
{{ row.where }}
+
+ @for (stored of storedDocsFor(row.storeKey); track stored.id) {
+
+
+ View file
+
+ } @empty {
+ @if (row.ok) {
+
(marked received; no file attached)
+ }
+ }
+ @if (!approvalRequest(a, 'legalApproval')) {
+
+ }
+
+
+ }
+
+
+ }
+
+ @if (!isDepositLoan(a)) {
+
+ }
+ @if (a.secured) {
+
+ }
+
+ @if (!isDepositLoan(a)) {
+
+ }
+
+
+ @if (a.legalDocuments.length > 0) {
+
+ @if (approvalRequest(a, 'legalApproval')) {
+
+ 🔒 Sent for approval — the documents can be viewed but not added, replaced or removed. To change
+ anything, withdraw the request first.
+
+ }
+
+
+ @for (doc of a.legalDocuments; track doc.key) {
+
+
+
+ {{ legalDocIcon(doc.key) }}
+ {{ doc.label }}
+
+ @if (doc.submitted) {
+
+ ✓ Submitted
+ @if (legalDocCapture[doc.key]?.length) {
+ · {{ legalDocCapture[doc.key].length }} file{{
+ legalDocCapture[doc.key].length > 1 ? 's' : ''
+ }}
+ this session
+ }
+
+ } @else {
+
Missing
+ }
+ @if (doc.custom && !approvalRequest(a, 'legalApproval')) {
+
+ ✕
+
+ }
+
+
+ @for (capture of legalDocCapture[doc.key]; track $index) {
+
+
+
+ View file
+
+ @if (!approvalRequest(a, 'legalApproval')) {
+
+ ✕
+
+ }
+
+ }
+
+ @for (stored of storedDocsFor('LEGAL_DOC:' + doc.key); track stored.id) {
+
+
+
+ View file
+
+ @if (!approvalRequest(a, 'legalApproval')) {
+
+ ✕
+
+ }
+
+ }
+ @if (!approvalRequest(a, 'legalApproval')) {
+
+ }
+
+
+ }
+
+ @if (!approvalRequest(a, 'legalApproval')) {
+
+
+
+ + Add Custom Document
+
+
+ }
+
+ }
+
+
@if (a.currentStage === 'LEGAL_APPROVAL') {
Legal Approval — Fees & Legal Documents
- @if (isDepositLoan(a)) {
-
-
-
- @for (row of collectedDocs(a); track row.label) {
-
-
- {{ row.label }}
-
-
{{ row.where }}
-
- @for (stored of storedDocsFor(row.storeKey); track stored.id) {
-
- View file
-
- } @empty {
- @if (row.ok) {
- (marked received; no file attached)
- }
- }
- @if (!approvalRequest(a, 'legalApproval')) {
-
- }
-
- @if (row.ok) {
-
✓ Collected
- } @else {
-
Missing
- }
-
- }
-
-
- }
-
- @if (!isDepositLoan(a)) {
-
- }
- @if (a.secured) {
-
- }
-