Skip to content

WEB-642: Add Originators tab on loan details view#3064

Merged
IOhacker merged 2 commits intoopenMF:devfrom
alberto-art3ch:WEB-642/add-originators-tab-on-loan-details-view
Feb 2, 2026
Merged

WEB-642: Add Originators tab on loan details view#3064
IOhacker merged 2 commits intoopenMF:devfrom
alberto-art3ch:WEB-642/add-originators-tab-on-loan-details-view

Conversation

@alberto-art3ch
Copy link
Collaborator

@alberto-art3ch alberto-art3ch commented Jan 31, 2026

Description

Add new tab where attached loan originators are listed

WEB-642

Related issues and discussion

Screenshots, if any

Screenshot 2026-01-31 at 12 38 05 p m

Checklist

Please make sure these boxes are checked before submitting your pull request - thanks!

  • If you have multiple commits please combine them into one commit by squashing them.

  • Read and understood the contribution guidelines at web-app/.github/CONTRIBUTING.md.

Summary by CodeRabbit

  • New Features

    • Added a "Loan Originators" tab in Loans with a table showing ID, external ID, name, status, originator type, and channel type; accessible from the loan view navigation.
  • Documentation

    • Added translations for the loan originators UI in 12 locales (cs, de, en, es-CL, es-MX, fr, it, ko, lt, lv, ne, pt, sw).

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 31, 2026

Note

.coderabbit.yaml has unrecognized properties

CodeRabbit is using all valid settings from your configuration. Unrecognized properties (listed below) have been ignored and may indicate typos or deprecated fields that can be removed.

⚠️ Parsing warnings (1)
Validation error: Unrecognized key(s) in object: 'pre_merge_checks'
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Walkthrough

Adds a Loan Originators feature: a resolver, route, standalone tab component with Material table, service method to fetch originators, model interface, and translation strings across multiple locales.

Changes

Cohort / File(s) Summary
Component
src/app/loans/loans-view/loan-originators-tab/loan-originators-tab.component.ts, src/app/loans/loans-view/loan-originators-tab/loan-originators-tab.component.html, src/app/loans/loans-view/loan-originators-tab/loan-originators-tab.component.scss
New standalone Angular component and template for the Originators tab; displays a Material table (columns: id, externalId, name, status, originatorTypeId, channelTypeId). Reads loanId from route and subscribes to parent route data.
Resolver
src/app/loans/common-resolvers/loan-originators.resolver.ts
New providedIn:'root' resolver that extracts loanId from route (or parent) and calls LoansService.getLoanOriginators(loanId), returns Observable or error when loanId missing.
Routing & UI Integration
src/app/loans/loans-routing.module.ts, src/app/loans/loans-view/loans-view.component.html
Imports and registers the originators child route under :loanId using the resolver; adds a new Originators tab link in the loans view navigation. General tab resolve object simplified to empty.
Service & Model
src/app/loans/loans.service.ts, src/app/loans/models/loan-account.model.ts
Adds getLoanOriginators(loanId) to LoansService (HTTP GET /loans/{loanId}/originators). Adds LoanOriginator interface with fields id, externalId, name, status, originatorTypeId, channelTypeId.
Translations
src/assets/translations/*.json
cs-CS.json, de-DE.json, en-US.json, es-CL.json, es-MX.json, fr-FR.json, it-IT.json, ko-KO.json, lt-LT.json, lv-LV.json, ne-NE.json, pt-PT.json, sw-SW.json, ...
Adds translation keys ("Loan Originators", "Channel Type", "Originator Type", "Originators") across multiple locale files.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Router as Angular Router
    participant Resolver as LoanOriginatorsResolver
    participant Service as LoansService
    participant API as HTTP API
    participant Component as LoanOriginatorsTabComponent

    User->>Router: Navigate to /loans/{loanId}/originators
    Router->>Resolver: resolve(ActivatedRouteSnapshot)
    Resolver->>Service: getLoanOriginators(loanId)
    Service->>API: GET /loans/{loanId}/originators
    API-->>Service: originators payload
    Service-->>Resolver: Observable(originators)
    Resolver-->>Router: resolved loanOriginatorsData
    Router->>Component: activate LoanOriginatorsTabComponent (route data available)
    Component->>Component: read parent route data and populate loanOriginatorsData
    Component->>User: render Material table with originators
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • gkbishnoi07
  • adamsaghy
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'WEB-642: Add Originators tab on loan details view' directly and clearly describes the main change: adding a new Originators tab to the loan details view interface.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Fix all issues with AI agents
In `@src/app/loans/common-resolvers/loan-originators.resolver.ts`:
- Around line 24-26: In resolve(route: ActivatedRouteSnapshot) ensure you
null-guard route.parent and the loanId before calling
loansService.getLoanOriginators: first check if route.paramMap.get('loanId')
returns a value, then if not check route.parent exists and
route.parent.paramMap.get('loanId'); if loanId is still null/undefined, avoid
calling loansService.getLoanOriginators (e.g., return of(null) or throw/redirect
as appropriate for this resolver) so you never call getLoanOriginators with a
null id and you never dereference route.parent when it is null.

In
`@src/app/loans/loans-view/loan-originators-tab/loan-originators-tab.component.ts`:
- Around line 58-62: Constructor currently reads loanId from
route.parent.parent.snapshot.params and subscribes to route.parent.data with any
typing; change to use route.parent?.parent?.snapshot.paramMap.get('loanId') and
safely parse it to a number (e.g., parseInt with NaN handling) when assigning
loanId, and replace the subscription to route.parent.data.subscribe by reading
typed snapshot data from route.parent?.snapshot.data (define a
LoanOriginatorsResolverData interface or type for loanOriginatorsData) to avoid
the unnecessary subscription and remove the any type; update references to
loanOriginatorsData and ensure null/undefined checks around route.parent/parent
before accessing.

In `@src/assets/translations/ko-KO.json`:
- Around line 2140-2141: The translation for the "Originators" key currently
reads "창시자" and should be aligned with the terminology used for "Loan
Originators"; update the value for the "Originators" JSON key to use the same
Korean term (e.g., "대출 담당자") as used for "Loan Originators" so both labels are
consistent with "Originator Type" ("발신자 유형") and the rest of the UI.

In `@src/assets/translations/lt-LT.json`:
- Line 1088: The Lithuanian translation uses inconsistent terms: the key "Loan
Originators" is "Paskolų teikėjai" while the key "Originators" is "Kūrėjai"
(which can mean "creators"); confirm the preferred locale term with the locale
owner and make them consistent across the file by updating the "Originators"
entry (and any other occurrences of "Originators"/similar keys) to the agreed
term (e.g., change "Kūrėjai" to "Paskolų teikėjai" if that is confirmed) so all
originator labels use the same Lithuanian phrasing.

In `@src/assets/translations/lv-LV.json`:
- Around line 2139-2140: Update the Latvian translations for the keys
"Originator Type" and "Originators" to match the terminology used for "Loan
Originators" and fix grammatical case: replace "Originators" value "Izcelsmes"
with "Izsniedzēji" and replace "Originator Type" value "Izcelsmes veids" with
"Izsniedzēja veids" so they align with "Aizdevumu izsniedzēji" and use correct
nominative forms.

In `@src/assets/translations/pt-PT.json`:
- Around line 2139-2140: Update the pt-PT translations for the loan-originator
related keys to use the specific financial term used elsewhere: replace the
value for "Originator Type" with "Tipo de originador" and the value for
"Originators" with "Originadores" in src/assets/translations/pt-PT.json so they
match the terminology used by LoanOriginatorsTabComponent and sister-language
translations.
- Line 1090: Replace the inconsistent Portuguese translations for the Originator
family: change the value "Agentes de Crédito" (for the "Loan Originators" key)
to "Originadores de Empréstimo", change "Criadores" to "Originadores", and
change "Tipo de origem" to "Tipo de Originador" so all three related JSON
entries use consistent, domain-accurate terminology.
🧹 Nitpick comments (5)
src/assets/translations/de-DE.json (1)

1090-1090: Align “Originators” terminology with the loan context.

"Originators": "Urheber" and "Originator Type": "Ursprungstyp" read like author/origin rather than the loan “originator” role. Consider aligning them with "Loan Originators": "Kreditvermittler" (e.g., “Originatoren” / “Originator-Typ” or “Kreditvermittler” / “Kreditvermittler-Typ”) for consistency and clarity.

💡 Possible translation alignment
-      "Originator Type": "Ursprungstyp",
-      "Originators": "Urheber",
+      "Originator Type": "Originator-Typ",
+      "Originators": "Originatoren",

Also applies to: 2139-2140

src/assets/translations/fr-FR.json (1)

1090-1090: Unify “Originator” terminology across related keys.

“Les courtiers en prêts”, “Créateurs”, and “Type d'initiateur” don’t align and can confuse users. Recommend using one consistent domain term across all three labels.

🔧 Suggested wording (consistent terminology)
-      "Loan Originators": "Les courtiers en prêts",
+      "Loan Originators": "Originateurs de prêts",
...
-      "Originator Type": "Type d'initiateur",
-      "Originators": "Créateurs",
+      "Originator Type": "Type d'originateur",
+      "Originators": "Originateurs",

Also applies to: 2139-2140

src/app/loans/loans.service.ts (1)

775-780: Prefer a typed response and parameter over any.

Please align getLoanOriginators with the backend response shape to keep type safety consistent. Consider typing loanId as string | number and returning a typed Observable.
As per coding guidelines, for Angular code: verify component separation, trackBy on *ngFor, strict type safety, and clean observable patterns.

♻️ Proposed typing update (adjust response shape if needed)
-import { DisbursementData } from './models/loan-account.model';
+import { DisbursementData, LoanOriginator } from './models/loan-account.model';

+interface LoanOriginatorsResponse {
+  originators: LoanOriginator[];
+}

-  getLoanOriginators(loanId: any) {
-    return this.http.get(`/loans/${loanId}/originators`);
-  }
+  getLoanOriginators(loanId: string | number): Observable<LoanOriginatorsResponse> {
+    return this.http.get<LoanOriginatorsResponse>(`/loans/${loanId}/originators`);
+  }
src/app/loans/common-resolvers/loan-originators.resolver.ts (1)

17-26: Prefer a typed resolver output instead of Observable<any>.

Consider implementing Resolve<LoanOriginatorsResponse> and returning Observable<LoanOriginatorsResponse> (using the model introduced for originators) to keep strict typing across route data.

As per coding guidelines: verify component separation, trackBy on *ngFor, strict type safety, and clean observable patterns.

src/app/loans/loans-routing.module.ts (1)

110-114: Drop the empty resolve block.
It doesn’t add value and can be removed to keep routing config clean.

♻️ Suggested cleanup
           path: 'general',
           component: GeneralTabComponent,
           data: { title: 'General', breadcrumb: 'General', routeParamBreadcrumb: false },
-          resolve: {}

Comment on lines 58 to 63
constructor() {
this.loanId = this.route.parent.parent.snapshot.params['loanId'];
this.route.parent.data.subscribe((data: { loanOriginatorsData: any }) => {
this.loanOriginatorsData = data.loanOriginatorsData.originators;
});
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

fd "loan-originators-tab.component.ts" -t f

Repository: openMF/web-app

Length of output: 137


🏁 Script executed:

cat -n src/app/loans/loans-view/loan-originators-tab/loan-originators-tab.component.ts

Repository: openMF/web-app

Length of output: 2127


🏁 Script executed:

cat -n src/app/loans/models/loan-account.model.ts | head -100

Repository: openMF/web-app

Length of output: 3334


🏁 Script executed:

rg "interface LoanOriginator" src/app/loans/models/loan-account.model.ts -A 10

Repository: openMF/web-app

Length of output: 216


🏁 Script executed:

fd "routing\|resolver" src/app/loans -t f | head -20

Repository: openMF/web-app

Length of output: 40


🏁 Script executed:

rg "loanOriginatorsData\|LoanOriginators" src/app/loans --type ts -B 2 -A 2

Repository: openMF/web-app

Length of output: 40


🏁 Script executed:

fd "routing\|module" src/app/loans -t ts | head -20

Repository: openMF/web-app

Length of output: 227


🏁 Script executed:

fd "routing\|module" src/app/loans -type f | grep -E "\.(ts|js)$"

Repository: openMF/web-app

Length of output: 228


🏁 Script executed:

rg "loan-originators-tab" src/app/loans --type-list | head

Repository: openMF/web-app

Length of output: 447


🏁 Script executed:

rg "loanOriginatorsData" src/app/loans -B 3 -A 3

Repository: openMF/web-app

Length of output: 3134


🏁 Script executed:

rg "LoanOriginatorsResolver" src/app/loans -B 5 -A 15

Repository: openMF/web-app

Length of output: 4901


🏁 Script executed:

cat -n src/app/loans/common-resolvers/loan-originators.resolver.ts

Repository: openMF/web-app

Length of output: 1123


🏁 Script executed:

rg "getLoanOriginators" src/app/loans -B 2 -A 10

Repository: openMF/web-app

Length of output: 902


🏁 Script executed:

cat -n src/app/loans/loans-view/loan-originators-tab/loan-originators-tab.component.html | head -30

Repository: openMF/web-app

Length of output: 1351


🏁 Script executed:

rg "originators" src/app/loans --type-add "json:*.json" -l | head -10

Repository: openMF/web-app

Length of output: 339


Harden route param parsing and resolver data typing.
loanId is assigned from a string param without conversion, and resolver data is typed as any with an unnecessary subscription. Prefer paramMap.get() with numeric parsing and snapshot data access with proper types to maintain strict type safety and avoid memory leaks.

✅ Suggested fix
-  loanId: number;
+  loanId: number | null = null;

   constructor() {
-    this.loanId = this.route.parent.parent.snapshot.params['loanId'];
-    this.route.parent.data.subscribe((data: { loanOriginatorsData: any }) => {
-      this.loanOriginatorsData = data.loanOriginatorsData.originators;
-    });
+    const loanIdParam = this.route.parent?.parent?.snapshot.paramMap.get('loanId');
+    this.loanId = loanIdParam ? Number(loanIdParam) : null;
+
+    const data = this.route.parent?.snapshot.data['loanOriginatorsData'] as
+      | { originators: LoanOriginator[] }
+      | undefined;
+    this.loanOriginatorsData = data?.originators ?? [];
   }
🤖 Prompt for AI Agents
In
`@src/app/loans/loans-view/loan-originators-tab/loan-originators-tab.component.ts`
around lines 58 - 62, Constructor currently reads loanId from
route.parent.parent.snapshot.params and subscribes to route.parent.data with any
typing; change to use route.parent?.parent?.snapshot.paramMap.get('loanId') and
safely parse it to a number (e.g., parseInt with NaN handling) when assigning
loanId, and replace the subscription to route.parent.data.subscribe by reading
typed snapshot data from route.parent?.snapshot.data (define a
LoanOriginatorsResolverData interface or type for loanOriginatorsData) to avoid
the unnecessary subscription and remove the any type; update references to
loanOriginatorsData and ensure null/undefined checks around route.parent/parent
before accessing.

Comment on lines +2140 to +2141
"Originator Type": "발신자 유형",
"Originators": "창시자",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Align “Originators” term with “Loan Originators” for consistency.
Right now “Originators” is translated as “창시자”, which doesn’t match “대출 담당자” used for “Loan Originators.” Consider using a consistent term across both labels to avoid UI confusion.

💡 Suggested tweak
-      "Originators": "창시자",
+      "Originators": "대출 담당자",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"Originator Type": "발신자 유형",
"Originators": "창시자",
"Originator Type": "발신자 유형",
"Originators": "대출 담당자",
🤖 Prompt for AI Agents
In `@src/assets/translations/ko-KO.json` around lines 2140 - 2141, The translation
for the "Originators" key currently reads "창시자" and should be aligned with the
terminology used for "Loan Originators"; update the value for the "Originators"
JSON key to use the same Korean term (e.g., "대출 담당자") as used for "Loan
Originators" so both labels are consistent with "Originator Type" ("발신자 유형") and
the rest of the UI.

"Loan Delinquency Installment Tags": "Paskolos nusikalstamumo įmokos žymos",
"Loan Details": "Paskolos informacija",
"Loan Disbursal": "Paskolos išmokimas",
"Loan Originators": "Paskolų teikėjai",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Verify Lithuanian terminology consistency for originator labels.

“Loan Originators” is translated as “Paskolų teikėjai” while “Originators” uses “Kūrėjai”, which can read as “creators” and may feel inconsistent in the UI. Please confirm the intended term with the locale owner and align if needed.

Also applies to: 1450-1450, 2137-2138

🤖 Prompt for AI Agents
In `@src/assets/translations/lt-LT.json` at line 1088, The Lithuanian translation
uses inconsistent terms: the key "Loan Originators" is "Paskolų teikėjai" while
the key "Originators" is "Kūrėjai" (which can mean "creators"); confirm the
preferred locale term with the locale owner and make them consistent across the
file by updating the "Originators" entry (and any other occurrences of
"Originators"/similar keys) to the agreed term (e.g., change "Kūrėjai" to
"Paskolų teikėjai" if that is confirmed) so all originator labels use the same
Lithuanian phrasing.

Comment on lines +2139 to +2140
"Originator Type": "Izcelsmes veids",
"Originators": "Izcelsmes",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Translation inconsistency with "Loan Originators".

The translations for "Originator Type" and "Originators" use "Izcelsmes" (origin), but "Loan Originators" on line 1090 uses "izsniedzēji" (issuers/originators). Additionally, "Izcelsmes" appears to be genitive singular rather than nominative plural.

For consistency, consider:

  • "Originators" → "Izsniedzēji" (to match "Aizdevumu izsniedzēji")
  • "Originator Type" → "Izsniedzēja veids" (originator's type)
Suggested fix for consistency
-      "Originator Type": "Izcelsmes veids",
-      "Originators": "Izcelsmes",
+      "Originator Type": "Izsniedzēja veids",
+      "Originators": "Izsniedzēji",
🤖 Prompt for AI Agents
In `@src/assets/translations/lv-LV.json` around lines 2139 - 2140, Update the
Latvian translations for the keys "Originator Type" and "Originators" to match
the terminology used for "Loan Originators" and fix grammatical case: replace
"Originators" value "Izcelsmes" with "Izsniedzēji" and replace "Originator Type"
value "Izcelsmes veids" with "Izsniedzēja veids" so they align with "Aizdevumu
izsniedzēji" and use correct nominative forms.

"Loan Delinquency Installment Tags": "Tags de parcelamento de inadimplência de empréstimo",
"Loan Details": "Detalhes do empréstimo",
"Loan Disbursal": "Desembolso do empréstimo",
"Loan Originators": "Agentes de Crédito",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# Check the context around line 1090 in the PT-PT translation file
sed -n '1085,1095p' src/assets/translations/pt-PT.json

Repository: openMF/web-app

Length of output: 743


🏁 Script executed:

# Check the related lines mentioned (1452, 2139-2140)
echo "=== Line 1452 context ===" && sed -n '1448,1455p' src/assets/translations/pt-PT.json
echo "=== Lines 2139-2140 context ===" && sed -n '2135,2145p' src/assets/translations/pt-PT.json

Repository: openMF/web-app

Length of output: 847


🏁 Script executed:

# Check if there are other uses of "Originators" or similar terms in the file
rg -n "Originator|Agente de Crédito" src/assets/translations/pt-PT.json | head -20

Repository: openMF/web-app

Length of output: 197


🏁 Script executed:

# Also check the English file to understand the context better
rg -n "Loan Originator|Channel Type" src/assets/translations/en.json | head -20

Repository: openMF/web-app

Length of output: 129


🏁 Script executed:

# Find the English translation file
fd -t f "en\.json" src/assets/translations/

Repository: openMF/web-app

Length of output: 40


🏁 Script executed:

# Check if there's an English translation at a different location
find src/assets/translations -name "*en*" -type f

Repository: openMF/web-app

Length of output: 92


🏁 Script executed:

# Get broader context around the originators-related entries
grep -n "Originator\|Loan Originators" src/assets/translations/pt-PT.json

Repository: openMF/web-app

Length of output: 197


🏁 Script executed:

# Check if the codebase has any financial/lending context documentation
find . -name "*.md" -o -name "*.txt" | xargs grep -l "Originator\|originat" 2>/dev/null | head -5

Repository: openMF/web-app

Length of output: 40


🏁 Script executed:

# Check the English source translations for these terms
sed -n '1088,1092p' src/assets/translations/en-US.json
echo "---"
sed -n '2137,2142p' src/assets/translations/en-US.json

Repository: openMF/web-app

Length of output: 970


🏁 Script executed:

# Search for all "Originator" related terms in English file
grep -n "Originator" src/assets/translations/en-US.json

Repository: openMF/web-app

Length of output: 198


Fix terminology consistency for "Originator(s)" family across all three related translations.

Three related translations need correction for domain accuracy and consistency:

  • Line 1090: "Agentes de Crédito" (loan officers) should use "Originadores de Empréstimo" to reflect the origination role rather than officer roles.
  • Line 2140: "Criadores" (creators) is semantically incorrect in financial context; should be "Originadores" to align with the loan origination domain.
  • Line 2139: "Tipo de origem" should be "Tipo de Originador" to maintain consistency with corrected terminology.
🔤 Suggested adjustments
-      "Loan Originators": "Agentes de Crédito",
+      "Loan Originators": "Originadores de Empréstimo",
-      "Originator Type": "Tipo de origem",
+      "Originator Type": "Tipo de Originador",
-      "Originators": "Criadores",
+      "Originators": "Originadores",
🤖 Prompt for AI Agents
In `@src/assets/translations/pt-PT.json` at line 1090, Replace the inconsistent
Portuguese translations for the Originator family: change the value "Agentes de
Crédito" (for the "Loan Originators" key) to "Originadores de Empréstimo",
change "Criadores" to "Originadores", and change "Tipo de origem" to "Tipo de
Originador" so all three related JSON entries use consistent, domain-accurate
terminology.

@alberto-art3ch alberto-art3ch force-pushed the WEB-642/add-originators-tab-on-loan-details-view branch from 7aae14e to f1e3813 Compare February 1, 2026 02:44
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/assets/translations/es-MX.json`:
- Line 1089: The translation for the key "Loan Originators" uses "Originadores
de préstamos" which is inconsistent with the project's use of "Crédito"; update
the value for the "Loan Originators" key to use the established term (e.g.,
"Originadores de crédito" or "Originadores de Crédito") so it aligns with other
es‑MX entries using "Crédito".
🧹 Nitpick comments (2)
src/app/loans/common-resolvers/loan-originators.resolver.ts (1)

9-29: Prefer a typed resolver contract instead of any.
Using Observable<any> weakens type safety and makes consumption harder. Consider returning Observable<LoanOriginator[]> and aligning the service signature.

♻️ Proposed typing update
-import { Observable, throwError } from 'rxjs';
+import { Observable, throwError } from 'rxjs';
+import { LoanOriginator } from 'app/loans/models/loan-account.model';

@@
-  resolve(route: ActivatedRouteSnapshot): Observable<any> {
+  resolve(route: ActivatedRouteSnapshot): Observable<LoanOriginator[]> {

If you align the service too:

// src/app/loans/loans.service.ts
getLoanOriginators(loanId: string): Observable<LoanOriginator[]> {
  return this.http.get<LoanOriginator[]>(`/loans/${loanId}/originators`);
}

As per coding guidelines: src/app/**: For Angular code: verify component separation, trackBy on *ngFor, strict type safety, and clean observable patterns.

src/assets/translations/es-CL.json (1)

1089-1091: Consider aligning “Loan” terminology with existing “Crédito” translations.

Most “Loan” strings in this locale use “Crédito” (e.g., “Loan Products” → “Productos de Crédito”). To keep UI terminology consistent, consider “Originadores de crédito” here.

💡 Suggested tweak
-      "Loan Originators": "Originadores de préstamos",
+      "Loan Originators": "Originadores de crédito",

"Loan Delinquency Installment Tags": "Etiquetas de morosidad de cuotas",
"Loan Details": "Detalles del Crédito",
"Loan Disbursal": "Desembolso de préstamos",
"Loan Originators": "Originadores de préstamos",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Align “Loan” terminology with existing “Crédito” translations.

“Originadores de préstamos” diverges from the rest of the es‑MX file where “Loan” is translated as “Crédito.” Consider standardizing to avoid UI inconsistency.

🔧 Suggested tweak
-      "Loan Originators": "Originadores de préstamos",
+      "Loan Originators": "Originadores de Crédito",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"Loan Originators": "Originadores de préstamos",
"Loan Originators": "Originadores de Crédito",
🤖 Prompt for AI Agents
In `@src/assets/translations/es-MX.json` at line 1089, The translation for the key
"Loan Originators" uses "Originadores de préstamos" which is inconsistent with
the project's use of "Crédito"; update the value for the "Loan Originators" key
to use the established term (e.g., "Originadores de crédito" or "Originadores de
Crédito") so it aligns with other es‑MX entries using "Crédito".

Copy link
Contributor

@IOhacker IOhacker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@IOhacker IOhacker merged commit 1577e9d into openMF:dev Feb 2, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants