- New Application: add Product Type (Term Loan/Overdraft) driven by product eligibility. - KYC: 3-year ITR capture with exceptions, product-specific document checklists with officer-added custom docs, Housing Loan co-owner Aadhaar/PAN capture+verify in a popup dialog. - Income & Affordability: editable income/amount/tenure with product bounds validation, 40% EMI rule, and a full co-borrower flow (relationship, salary slips, combined-income eligibility). - Bank Statement upload auto-opens a full CSV-driven cash-flow/FOIR/risk analysis dialog. - CIC report upload auto-opens a bureau-style credit report analysis (score gauge, accounts, DPD history, enquiries) generated from the application's own credit score. - Field Investigation reworked into per-address cards (Home/Office/Property/Shop) with officer assignment, 48-hour SLA tracking, GPS + multi-photo capture, verify/reject with remarks, a full-detail popup, real Fineract addresses for existing clients, and a calculated property valuation (market/guideline/realizable value, LTV). - Personal Discussion: meeting scheduler (date/time/mode/officer) gating the discussion report, plus a full Application Summary Report PDF (KYC, CIC, FI, valuation, stage history) for the meeting. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
58 lines
1.9 KiB
TypeScript
58 lines
1.9 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 { Component, inject } from '@angular/core';
|
|
import { CommonModule } from '@angular/common';
|
|
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
import { MatButtonModule } from '@angular/material/button';
|
|
import { VerificationCheck } from '../../loan-origination-data';
|
|
|
|
export interface FieldVisitPhoto {
|
|
file: File;
|
|
previewUrl: string | null;
|
|
}
|
|
|
|
export interface FieldVisitDetailsDialogData {
|
|
label: string;
|
|
check: VerificationCheck;
|
|
photos: FieldVisitPhoto[];
|
|
}
|
|
|
|
/**
|
|
* Everything saved for one Field Investigation address visit -- officer, assignment date, GPS,
|
|
* status/remarks and every site photo -- in one popup, since the inline card only ever shows a
|
|
* short summary once the visit is Verified/Failed. Photos are local-only File objects (same as
|
|
* every other document capture in this mock pipeline), so a photo count with no files behind it
|
|
* just means the page was refreshed since the visit was captured, not that anything was lost from
|
|
* the application record itself.
|
|
*/
|
|
@Component({
|
|
selector: 'mifosx-field-visit-details-dialog',
|
|
standalone: true,
|
|
imports: [
|
|
CommonModule,
|
|
MatDialogModule,
|
|
MatButtonModule
|
|
],
|
|
templateUrl: './field-visit-details-dialog.component.html',
|
|
styleUrls: ['./field-visit-details-dialog.component.scss']
|
|
})
|
|
export class FieldVisitDetailsDialogComponent {
|
|
data = inject<FieldVisitDetailsDialogData>(MAT_DIALOG_DATA);
|
|
|
|
get statusBadgeClass(): string {
|
|
if (this.data.check.status === 'VERIFIED') {
|
|
return 'fvd-badge fvd-badge--verified';
|
|
}
|
|
if (this.data.check.status === 'FAILED') {
|
|
return 'fvd-badge fvd-badge--failed';
|
|
}
|
|
return 'fvd-badge fvd-badge--pending';
|
|
}
|
|
}
|