import { OnInit, OnDestroy, ElementRef } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { MatDialogRef } from '@angular/material/dialog'; import { LoanSummaryService } from '../../../services/loan-summary.service'; import { Proposal, SummaryService, LoanSummaryDetails, GoNoGoDecision, BureauData } from '../../../models/loan-summary.model'; import { QuickSummary, GstQuickSummary, BureauQuickSummary, FinancialQuickSummary } from '../../../models/api-response.model'; import { LoanSummaryComponent } from '../loan-summary/loan-summary.component'; import { AiSettingsModalComponent, AiSettingsData } from '../../shared/ai-settings-modal/ai-settings-modal.component'; import * as i0 from "@angular/core"; type DialogView = 'selection' | 'loading' | 'summary'; type SortOption = 'category' | 'alphabetical' | 'selected'; type SummaryType = 'quick' | 'detailed'; export declare class AiSummaryDialogComponent implements OnInit, OnDestroy { dialogRef: MatDialogRef; data: { proposal: Proposal; }; private loanSummaryService; private http; loanSummaryRef: LoanSummaryComponent; dialogContent: ElementRef; aiSettingsModal: AiSettingsModalComponent; currentView: DialogView; services: SummaryService[]; filteredServices: SummaryService[]; searchQuery: string; sortOption: SortOption; summaryType: SummaryType; showDecisionBadge: boolean; isExporting: boolean; isSettingsModalOpen: boolean; availableModels: string[]; selectedModel: string; promptTemplate: string; isEditingPrompt: boolean; isSavingSettings: boolean; showPromptHistory: boolean; promptHistory: Array<{ template: string; timestamp: string; source: 'typed' | 'uploaded'; }>; readonly defaultPromptTemplate = "\nCredit underwriter summary for \n1. Detailed profile and GST report analysis\n2. ITC Utilization pattern\n3. Customer and supplier risk assessment\n4. Fraud & Compliance risk assessment\n5. Concentration Risk Assessment\n6. Financial Health indicators\n7. Underwriter Recommendation\n8. Final Recommendation\nNote: Don't include the document number in the response\n"; private readonly settingsStorageKey; private readonly historyStorageKey; private backupSelectedModel; private backupPromptTemplate; chunkSize: number; chunkOverlap: number; topK: number; chunkOverlapOptions: number[]; availableEmbeddingModels: string[]; selectedEmbeddingModel: string; availableSearchTypes: Array<{ value: string; label: string; }>; selectedSearchType: string; availableVectorStores: Array<{ value: string; label: string; }>; selectedVectorStore: string; private backupChunkSize; private backupChunkOverlap; private backupTopK; private backupSelectedEmbeddingModel; private backupSelectedSearchType; private backupSelectedVectorStore; private backupSelectedGst; private backupSelectedBureau; private backupSelectedFinancial; private backupGstPromptTemplate; private backupBureauPromptTemplate; private backupFinancialPromptTemplate; promptFileInput: ElementRef; gstPromptFileInput: ElementRef; bureauPromptFileInput: ElementRef; financialPromptFileInput: ElementRef; selectedGst: boolean; selectedBureau: boolean; selectedFinancial: boolean; gstPromptTemplate: string; bureauPromptTemplate: string; financialPromptTemplate: string; gstPromptHistory: Array<{ template: string; timestamp: string; source: 'typed' | 'uploaded'; }>; bureauPromptHistory: Array<{ template: string; timestamp: string; source: 'typed' | 'uploaded'; }>; financialPromptHistory: Array<{ template: string; timestamp: string; source: 'typed' | 'uploaded'; }>; showGstPromptHistory: boolean; showBureauPromptHistory: boolean; showFinancialPromptHistory: boolean; private readonly gstHistoryStorageKey; private readonly bureauHistoryStorageKey; private readonly financialHistoryStorageKey; readonly defaultGstPromptTemplate = "\nCredit underwriter summary for \n1. Detailed profile and GST report analysis\n2. ITC Utilization pattern\n3. Customer and supplier risk assessment\n4. Fraud & Compliance risk assessment\n5. Concentration Risk Assessment\n6. Financial Health indicators\n7. Underwriter Recommendation\n8. Final Recommendation\nNote: Don't include the document number in the response\n"; readonly defaultBureauPromptTemplate = "Generate in detailed CIBIL summary along with the profile"; readonly defaultFinancialPromptTemplate = "Generate a comprehensive Financial Statement analysis covering:\n1. Balance Sheet Analysis - Assets, Liabilities, and Equity breakdown\n2. Income Statement Review - Revenue, Expenses, and Profitability trends\n3. Cash Flow Analysis - Operating, Investing, and Financing activities\n4. Key Financial Ratios - Liquidity, Solvency, Profitability, and Efficiency ratios\n5. Working Capital Assessment\n6. Debt Analysis and Coverage Ratios\n7. Year-over-Year Comparison and Trends\n8. Financial Health Indicators and Risk Flags\n9. Recommendations for Credit Assessment\nNote: Focus on data-driven insights relevant for credit underwriting decisions."; loanSummary: LoanSummaryDetails | null; goNoGoDecision: GoNoGoDecision | null; selectedServices: SummaryService[]; private cachedPdfBlob; private cachedPdfFilename; aiGeneratedResponse: string; aiGeneratedBureauResponse: string; aiGeneratedFinancialResponse: string; aiGeneratedGoNoGoResponse: string; parsedDecision: 'GO' | 'NO-GO' | 'REVIEW' | null; parsedScore: number | null; bureauData: BureauData | null; quickSummary: QuickSummary | null; gstQuickSummary: GstQuickSummary | null; bureauQuickSummary: BureauQuickSummary | null; financialQuickSummary: FinancialQuickSummary | null; showErrorToast: boolean; errorToastMessage: string; private errorToastTimeout; private goNoGoScrollSubject; private destroy$; hasGstDocument: boolean; hasBureauDocument: boolean; hasFinancialDocument: boolean; constructor(dialogRef: MatDialogRef, data: { proposal: Proposal; }, loanSummaryService: LoanSummaryService, http: HttpClient); ngOnInit(): void; /** * Initialize document availability based on proposal.documents array. * Sets selection flags and availability flags for each document type. */ private initializeDocumentAvailability; /** * Check if at least one document is available */ hasAnyDocument(): boolean; /** * Check if at least one document type is selected */ hasAnySelection(): boolean; ngOnDestroy(): void; loadServices(): void; applyFilters(): void; onSearchChange(): void; onSortChange(): void; onSummaryTypeChange(): void; toggleServiceSelection(service: SummaryService): void; getSelectedCount(): number; generateSummary(): void; private loadFallbackResponses; backToSelection(): void; onRegenerateSummary(): void; closeDialog(): void; onExportReport(): void; private ensureDetailedAnalysisReady; private openAndDownloadCachedPdf; /** * Chart.js draws onto elements, but cloneNode(true) only copies the * element/attributes - not the painted bitmap. Snapshot each live canvas via * toDataURL() and replace the corresponding cloned canvas with an so * charts actually show up in the exported PDF instead of empty boxes. */ private replaceCanvasesWithImages; private generatePDF; private replaceMonthlyReturnsTableForPDF; private replaceFilingHistoryTableForPDF; private renderPDF; private createStandalonePdfSection; private buildBureauOverviewHtml; private buildFinancialOverviewHtml; private convertMarkdownToHtml; onSubmitDecision(): void; onGoNoGoScrolled(scrolledPast: boolean): void; getHeroDecisionClass(): string; /** Get the effective decision (parsed from AI or fallback to goNoGoDecision) */ get effectiveDecision(): 'GO' | 'NO-GO' | 'REVIEW'; /** Get the effective score (parsed from AI or fallback to goNoGoDecision) */ get effectiveScore(): number; /** Parse decision and score from AI-generated Go/No-Go markdown */ parseDecisionFromGoNoGoResponse(): void; formatTotalLoanAmount(): string; openSettingsModal(): void; closeSettingsModal(): void; onSettingsModalClose(): void; onSettingsSaved(settings: AiSettingsData): void; toggleEditPrompt(): void; loadDefaultPromptTemplate(): void; saveAiSettings(): void; loadAiSettingsFromCache(): void; resetAiSettings(): void; formatSliderLabel(value: number): string; triggerFileUpload(): void; onPromptFileUpload(event: Event): void; toggleGstSelection(): void; toggleBureauSelection(): void; toggleFinancial(): void; isBothSelected(): boolean; isMultipleSelected(): boolean; isOnlyGstSelected(): boolean; isOnlyBureauSelected(): boolean; isOnlyFinancialSelected(): boolean; loadDefaultGstPromptTemplate(): void; loadDefaultBureauPromptTemplate(): void; loadDefaultFinancialPromptTemplate(): void; triggerGstPromptFileUpload(): void; onGstPromptFileUpload(event: Event): void; triggerBureauPromptFileUpload(): void; onBureauPromptFileUpload(event: Event): void; toggleGstPromptHistory(): void; loadGstPromptHistory(): void; addToGstPromptHistory(template: string, source: 'typed' | 'uploaded'): void; selectGstFromHistory(historyItem: { template: string; timestamp: string; source: 'typed' | 'uploaded'; }): void; deleteGstFromHistory(index: number, event: Event): void; toggleBureauPromptHistory(): void; loadBureauPromptHistory(): void; addToBureauPromptHistory(template: string, source: 'typed' | 'uploaded'): void; selectBureauFromHistory(historyItem: { template: string; timestamp: string; source: 'typed' | 'uploaded'; }): void; deleteBureauFromHistory(index: number, event: Event): void; triggerFinancialPromptFileUpload(): void; onFinancialPromptFileUpload(event: Event): void; toggleFinancialPromptHistory(): void; loadFinancialPromptHistory(): void; addToFinancialPromptHistory(template: string, source: 'typed' | 'uploaded'): void; selectFinancialFromHistory(historyItem: { template: string; timestamp: string; source: 'typed' | 'uploaded'; }): void; deleteFinancialFromHistory(index: number, event: Event): void; togglePromptHistory(): void; loadPromptHistory(): void; addToPromptHistory(template: string, source: 'typed' | 'uploaded'): void; selectFromHistory(historyItem: { template: string; timestamp: string; source: 'typed' | 'uploaded'; }): void; deleteFromHistory(index: number, event: Event): void; formatHistoryDate(timestamp: string): string; getPromptPreview(template: string): string; onDialogScroll(event: Event): void; /** * Extract error message from various API error response formats. * Backend sends: { error: { code: "...", message: "...", details: {...} } } * HttpClient wraps it in HttpErrorResponse: error.error contains the backend response */ private extractErrorMessage; showErrorToastNotification(message: string): void; hideErrorToast(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } export {};