Files
cbsnexora/src/app/loan-origination/application-detail/field-visit-details-dialog/field-visit-details-dialog.component.ts
T
niteshandClaude Sonnet 5 997e8920e4
Publish Image in Docker Hub / build (push) Canceled after 0s
build-run / Run Lint, Build and Deploy (push) Canceled after 0s
Playwright E2E Tests / Run Playwright Tests (push) Canceled after 0s
Tests / testRigor (push) Canceled after 0s
feat(loan-origination): product type, income/co-borrower affordability, bank statement & CIC analysis, richer Field Investigation, and meeting-scheduled Personal Discussion
- 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>
2026-08-13 15:14:39 +05:30

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';
}
}