@if (application; as a) {
Branch
{{ a.branchName }}
Channel
{{ a.channel === 'BC' ? a.bcAgentName : a.channel === 'SELF_APPLY' ? 'Self-Apply (Digital)' : 'Branch' }}
Customer Type
{{ a.customerType === 'EXISTING' ? 'Existing Customer' : 'New Customer' }}
Tenure / Rate
{{ a.tenureMonths }} months @ {{ a.interestRate }}%
Monthly Income / Eligible Amount
₹{{ a.monthlyIncome | number: '1.0-0' }} / ₹{{ a.eligibleLoanAmount | number: '1.0-0' }}
Sanctioning Authority
{{ sanctioningAuthorityOf(a) }}
Share Member
@if (a.clientId) {
@if (loadingShareAccounts) {
Checking membership…
} @else if (realShareAccounts.length > 0) {
@for (sa of realShareAccounts; track sa.id) {
{{ sa.accountNo }} — {{ sa.productName }}
}
} @else {
Not a Member
Allot Shares
}
} @else if (a.isShareMember) {
Yes — {{ a.shareCertNo }} (since {{ a.shareMemberSince }})
} @else {
Not a Member
Allot Shares
}
@if (a.coBorrowerRequired) {
Co-Borrower
{{ a.coBorrowerName }}
}
@if (a.guarantorRequired) {
Guarantor
{{ a.guarantorName }}
}
Sanctioning Workflow Progress
@for (s of stageOrder; track s) {
@if (canJumpToStage(a, s)) {
{{ stepMarker(a, s) }}
{{ stageLabels[s] }}
} @else {
{{ stepMarker(a, s) }}
{{ stageLabels[s] }}
}
}
@if (a.overallStatus === 'REJECTED') {
Application Rejected — at {{ stageLabels[a.currentStage] }}
See the approval summary below for the recorded reason.
} @else if (a.overallStatus === 'ON_HOLD') {
Personal Discussion — {{ discrepancyLabels[a.discrepancyType] }}
} @else if (a.overallStatus === 'DISBURSED') {
Disbursed
Disbursement Date
{{ a.disbursementDate }}
Mode
{{ a.disbursementMode }}
ACH Confirmation
{{ a.achConfirmationRef }}
EMI Activation Confirmation
{{ a.emiActivationConfirmed ? 'Confirmed on ' + a.emiActivationDate : 'Pending' }}
EMI Repayment Schedule
@if (isRevolving(a)) {
{{ a.productName }} is a revolving/renewable limit — repaid on demand and renewed annually, not on a fixed
EMI schedule.
} @else {
Loan Amount
₹{{ a.requestedAmount | number: '1.0-0' }}
{{ a.tenureMonths }} months @ {{ a.interestRate }}%
Monthly EMI
₹{{ emiAmountFor(a) | number: '1.0-0' }}
Reducing balance
Total Interest Payable
₹{{ totalInterestFor(a) | number: '1.0-0' }}
over the full tenure
Total Amount Payable
₹{{ totalPayableFor(a) | number: '1.0-0' }}
principal + interest
}
} @else {
@if (a.currentStage === 'APPLICATION') {
Application Received
Received via
{{ a.channel === 'BC' ? a.bcAgentName : a.channel === 'SELF_APPLY' ? 'Self-Apply (Digital)' : 'Branch' }}
on {{ a.applicationDate }}.
Proceed to KYC & Document Collection
}
@if (a.currentStage === 'KYC_DOCUMENTS') {
KYC & Document Collection — OVD (RBI KYC Master Direction)
@if (a.clientId) {
@if (loadingKyc) {
Loading KYC record…
} @else {
Aadhaar
{{ a.aadhaarVerified ? 'Verified' : 'Not Verified' }}
@if (realKyc?.aadhaarNumberMasked) {
{{ realKyc.aadhaarNumberMasked }}
}
View Document
PAN
{{ a.panVerified ? 'Verified' : 'Not Verified' }}
@if (realKyc?.panNumber) {
{{ maskPan(realKyc.panNumber) }}
}
View Document
Income Proof
@if (findDocument('income'); as incomeDoc) {
Submitted
{{ incomeDoc.name || incomeDoc.fileName }}
View
} @else {
Employment Type
Salaried
Business / Self-Employed
@if (a.incomeProofSubmitted) {
Submitted
} @else {
Missing
}
}
Bank Statement
@if (findDocument('bank statement'); as bankDoc) {
Submitted
{{ bankDoc.name || bankDoc.fileName }}
View
} @else {
@if (a.bankStatementSubmitted) {
Submitted
} @else {
Missing
}
}
Electricity Bill (Address Proof)
@if (findDocument('electricity') || findDocument('address proof'); as billDoc) {
Submitted
{{ billDoc.name || billDoc.fileName }}
View
} @else {
Bill Date
@if (electricityBillTooOld) {
Must not be older than 3 months.
}
@if (a.electricityBillSubmitted) {
Submitted
} @else {
Missing
}
}
@if (a.secured) {
Property Details Submitted
Property Tax Receipt Submitted
}
Aadhaar Fingerprint Captured
(e-KYC)
}
} @else {
Captured for this application — final Aadhaar/PAN verification happens when the customer's CBS client
profile is created.
Aadhaar
{{ newKycCapture.aadhaar.front ? 'Front ✓' : 'Upload Front' }}
{{ newKycCapture.aadhaar.back ? 'Back ✓' : 'Upload Back' }}
@if (newKycCapture.aadhaar.front || newKycCapture.aadhaar.back) {
@if (newKycCapture.aadhaar.front) {
@if (newKycCapture.aadhaar.frontPreviewUrl) {
} @else {
Front file
}
}
@if (newKycCapture.aadhaar.back) {
@if (newKycCapture.aadhaar.backPreviewUrl) {
} @else {
Back file
}
}
}
@if (newKycCapture.aadhaar.verified) {
Aadhaar Verified
} @else {
}
PAN
{{ newKycCapture.pan.front ? 'Front ✓' : 'Upload Front' }}
{{ newKycCapture.pan.back ? 'Back ✓' : 'Upload Back' }}
@if (newKycCapture.pan.front || newKycCapture.pan.back) {
@if (newKycCapture.pan.front) {
@if (newKycCapture.pan.frontPreviewUrl) {
} @else {
Front file
}
}
@if (newKycCapture.pan.back) {
@if (newKycCapture.pan.backPreviewUrl) {
} @else {
Back file
}
}
}
@if (newKycCapture.pan.verified) {
PAN Verified
} @else {
Verify PAN
}
Income Proof
Employment Type
Salaried
Business / Self-Employed
@if (a.incomeProofSubmitted) {
Submitted
} @else {
Missing
}
Bank Statement
@if (a.bankStatementSubmitted) {
Submitted
} @else {
Missing
}
Electricity Bill (Address Proof)
Bill Date
@if (electricityBillTooOld) {
Must not be older than 3 months.
}
@if (a.electricityBillSubmitted) {
Submitted
} @else {
Missing
}
@if (a.secured) {
Property Details Submitted
Property Tax Receipt Submitted
}
Aadhaar Fingerprint Captured
(e-KYC)
}
@if (a.monthlyIncome === 0) {
Monthly Income (₹)
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.
}
Assess Income & Calculate Eligible Amount
} @else {
Monthly Income
₹{{ 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
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.coBorrowerRequired) {
Co-Borrower Required — {{ a.coBorrowerName }}
}
Proceed to CIC / Credit Bureau Check
}
@if (a.currentStage === 'CIC_CHECK') {
CIC / Credit Bureau Check — {{ a.cicBureau }}
@if (a.cibilScore === 0) {
Customer Consent — Credit Bureau Check
RBI's Fair Practices Code requires the customer's signed consent before a credit bureau pull. Generate
the declaration letter below, get it signed by the customer, then upload the signed copy.
@if (a.channel === 'BRANCH') {
Print Declaration Letter
} @else {
Download Declaration Letter
Share (Email / WhatsApp / Drive…)
Email
WhatsApp
}
{{ cicConsentCapture.file ? 'Signed Declaration ✓' : 'Upload Signed Declaration' }}
@if (cicConsentCapture.file) {
@if (cicConsentCapture.previewUrl) {
} @else {
View file
}
}
@if (a.cicConsentSigned) {
Signed Declaration Uploaded
} @else {
Awaiting Signed Declaration
}
CIC Check Charge — ₹{{ cicCheckCharge }}
@if (a.clientId && realDebitableAccounts.length > 0) {
Select which account to debit the ₹{{ cicCheckCharge }} charge from:
@for (acc of realDebitableAccounts; track acc.id) {
{{ acc.kind }}
{{ acc.accountNo }} — {{ acc.productName }}
Balance: ₹{{ acc.accountBalance | number: '1.0-0' }}
}
} @else {
@if (a.clientId && loadingShareAccounts) {
Loading accounts…
} @else {
@if (a.clientId) {
No open savings/current account on file for this customer — collect the charge via payment link
instead.
}
@if (!a.cicPaymentLinkUrl || a.cicPaymentLinkUrl === '—') {
Generate Payment Link
} @else {
{{ a.cicPaymentLinkUrl }}
Copy Link
Email
WhatsApp
@if (!a.cicChargeCollected) {
Payment Reference No. (from customer)
Confirm Payment Received
}
}
}
}
@if (a.cicChargeCollected) {
Charge Collected —
{{ a.cicChargeMode === 'ACCOUNT_DEBIT' ? a.cicChargeAccountLabel : 'Ref ' + a.cicPaymentReference }}
} @else {
Charge Not Collected
}
Bureau
@for (bureau of cicBureaus; track bureau) {
{{ bureau }}
}
Check Credit Score
@if (!a.cicConsentSigned || !a.cicChargeCollected) {
Print/share the declaration and get it signed, and collect the ₹{{ cicCheckCharge }} check charge,
before checking the credit score.
}
} @else {
Bureau
{{ a.cicBureau }}
Credit Score
{{ a.cibilScore }} ({{ cibilBandOf(a.cibilScore) }})
Report
{{ a.cicReportUploaded ? a.cicReportFileName : 'Not uploaded yet' }}
Field Inquiry
{{
a.fiRequestPushed
? 'Pushed to ' + a.fiAgencyAssigned + ' (' + a.fiRequestDate + ')'
: 'Not pushed yet'
}}
}
@if (a.cibilScore > 0) {
@if (!a.cicReportUploaded) {
Upload {{ a.cicBureau }} Report
} @else if (!a.fiRequestPushed) {
Push Field Inquiry to Agency
} @else {
Proceed to Field Investigation
}
}
}
@if (a.currentStage === 'FIELD_INVESTIGATION') {
Field Investigation (FI) — Agent Report
Address Verification
Pending
Verified
Failed
Office / Employment Verification
Pending
Verified
Failed
@if (a.secured) {
Property Verification / Valuation
Pending
Verified
Failed
Property Valuation (₹)
}
Agent Report
{{ a.agentReportUploaded ? a.agentReportFileName : 'Not uploaded yet' }}
@if (!a.agentReportUploaded) {
Upload Agent Report
}
Record FI & Proceed to Personal Discussion
}
@if (a.currentStage === 'PERSONAL_DISCUSSION') {
Personal Discussion with Manager
}
@if (a.currentStage === 'CREDIT_COMMITTEE') {
Loan Committee Approval — {{ sanctioningAuthorityOf(a) }}
}
@if (a.currentStage === 'RISK_APPROVAL') {
Risk Approval — Verification Checklist
}
@if (a.currentStage === 'LEGAL_APPROVAL') {
Legal Approval — Fees & A/c Opened By
}
@if (a.currentStage === 'CUSTOMER_SIGNING') {
Customer Signing Slot — {{ a.agreementSigningSlot }}
Loan Agreement and Sanction Letter ready for the customer's acknowledgement and signature.
Mark Signed by Customer
}
@if (a.currentStage === 'CHEQUE_ACH') {
Cheque Received / ACH Sign
}
@if (a.currentStage === 'POST_CHECK') {
Post-Disbursement Check — Final Compliance Gate
}
@if (a.currentStage === 'DISBURSED') {
Ready for Disbursement
Disbursement Mode
Account Credit
NEFT
RTGS
Disbursing also confirms EMI Activation for this account in the same step.
Disburse Now & Confirm EMI Activation
}
}
Approval Summary
Loan Committee
{{ a.creditCommitteeApproval.decision }}
{{ a.creditCommitteeApproval.approverName }} · {{ a.creditCommitteeApproval.date }}
{{ a.creditCommitteeApproval.remarks }}
Risk Approval
{{ a.riskApproval.decision }}
{{ a.riskApproval.approverName }} · {{ a.riskApproval.date }}
{{ a.riskApproval.remarks }}
Legal Approval
{{ a.legalApproval.decision }}
{{ a.legalApproval.approverName }} · {{ a.legalApproval.date }}
{{ a.legalApproval.remarks }}
Post-Disbursement Check
{{ a.postCheckApproval.decision }}
{{ a.postCheckApproval.approverName }} · {{ a.postCheckApproval.date }}
{{ a.postCheckApproval.remarks }}
Application Journey — Date-wise Audit Trail
@for (h of a.stageHistory; track h.date + h.stage + h.outcome) {
{{ stepMarker(a, h.stage) }}
{{ stageLabels[h.stage] }} — {{ h.outcome }}
{{ h.date }}
{{ h.actionBy }}
} @empty {
No activity recorded yet.
}
} @else {
Application Not Found
‹ Back to Pipeline
}