WEB-657: Working Capital loan Breach pause action#3651
Conversation
|
Note
|
| Layer / File(s) | Summary |
|---|---|
LoansService breach-action API methods src/app/loans/loans.service.ts |
Adds getBreachActions(loanId) (GET) and createBreachAction(loanId, payload) (POST) targeting /working-capital-loans/:loanId/breach-actions. |
LoanBreachActionsResolver src/app/loans/common-resolvers/working-capital/loan-breach-actions.resolver.ts |
New injectable resolver extending LoanBaseResolver: reads loanId from route or parent and conditionally fetches breach actions for numeric working-capital loan IDs. |
LoanBreachActionsTabComponent core logic src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.ts |
Standalone component with signal/computed data model transforming raw breach actions into display rows with status, durations, KPI values, and SVG timeline bars; handles status filtering, dialog-driven pause creation, payload dispatch, and data refresh. |
LoanBreachActionsTabComponent template and styles src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.html, loan-breach-actions-tab.component.scss |
HTML template renders KPI strip, SVG pause timeline with month grid and status-colored bars, permission-gated "Pause Breach" button, filter chips, breach-actions table with pills/duration bars, and two empty states. SCSS covers light/dark theme tokens, chip animations, timeline bar variants, staggered row fade-in, duration-bar fills, and an 880px responsive breakpoint. |
Routing, module registration, and navigation link src/app/loans/loans-routing.module.ts, src/app/loans/loans.module.ts, src/app/loans/loans-view/loans-view.component.html |
Registers breach-actions child route under :loanId with resolver and component; imports LoanBreachActionsTabComponent into LoansModule; adds a conditional mat-tab-link visible only for active working-capital loans with a breach value. |
Dialog component reuse wiring src/app/loans/custom-dialog/loan-delinquency-action-dialog/loan-delinquency-action-dialog.component.html, .component.ts, src/app/loans/loans-view/loan-delinquency-tags-tab/loan-delinquency-tags-tab.component.ts |
Minor updates enabling the LoanDelinquencyActionDialogComponent to be dynamically titled and reused for breach-action pauses: dialog title now derives from data.title, tags-tab passes a title field when opening the dialog, and unused ReactiveFormsModule import is removed. |
Supporting Infrastructure Updates
| Layer / File(s) | Summary |
|---|---|
Month enum and monthLabels getter src/app/core/utils/dates.ts |
Adds a new exported Month enum with abbreviated month labels (Jan–Dec) and a Dates.monthLabels getter returning the enum values as an array for use in timeline and calendar UIs. |
Design token refactoring and SCSS token file src/assets/styles/_redesign-tokens.scss, src/app/loans/loans-view/charges-tab/charges-tab.component.scss |
Introduces a new shared SCSS token file defining ch-tokens and ch-dark-tokens mixins that centralize light/dark theme CSS variables for charge/transaction components; refactors charges-tab.component.scss to use these mixins instead of hardcoded variable definitions. |
Translation Key Synchronization (12 locales)
| Layer / File(s) | Summary |
|---|---|
English (en-US) baseline src/assets/translations/en-US.json |
Adds/reorders entries in buttons, heading (including "Loan Breach Actions", "No Breach Actions", "Pause Timeline"), and inputs (including products.loan.amortizationType nested structure and Zip); removes leading BOM marker. |
Czech, German, Spanish (CL/MX), French, Italian, Korean, Lithuanian, Latvian, Portuguese src/assets/translations/cs-CS.json, de-DE.json, es-CL.json, es-MX.json, fr-FR.json, it-IT.json, ko-KO.json, lt-LT.json, lv-LV.json, pt-PT.json |
Mirror the same key additions and reorderings with locale-specific strings; remove BOM markers where applicable; add breach/pause-timeline heading keys and all new inputs field-label variants including products.loan.amortizationType to each locale. |
Estimated code review effort
🎯 4 (Complex) | ⏱️ ~60 minutes
Suggested reviewers
- adamsaghy
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
| Check name | Status | Explanation |
|---|---|---|
| Description Check | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled. |
| Title check | ✅ Passed | The title clearly and specifically describes the main change: implementing the Breach pause action feature for Working Capital loans, which aligns with the PR's core objective and the substantial implementation across resolver, component, service, and template files. |
| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. |
| Linked Issues check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
| Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
✏️ Tip: You can configure your own custom pre-merge checks in the settings.
✨ Finishing Touches
🧪 Generate unit tests (beta)
- Create PR with unit tests
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.
Comment @coderabbitai help to get the list of available commands and usage tips.
There was a problem hiding this comment.
Actionable comments posted: 6
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
src/assets/translations/cs-CS.json (1)
1-5086:⚠️ Potential issue | 🟠 MajorAlign
cs-CS.jsonwithen-US.json
- The locale tree is out of parity with the canonical file: 128 keys are missing and 304 extra keys are present. Normalize the key structure so this translation stays in sync with
en-US.json.- No duplicate keys are present in either file, so the remaining fix is the key-shape mismatch.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/cs-CS.json` around lines 1 - 5086, The Czech translation file (cs-CS.json) has diverged from the canonical English version (en-US.json) with 128 missing keys and 304 extraneous keys. To fix this, compare the complete key hierarchy in cs-CS.json against en-US.json and: (1) remove all keys that exist in cs-CS.json but not in en-US.json (the 304 extra keys), and (2) add all keys that exist in en-US.json but not in cs-CS.json (the 128 missing keys), preserving their nested structure and using appropriate Czech translations or copying placeholder values. This will synchronize the two files' key shapes while maintaining the existing Czech translations for matching keys.src/assets/translations/de-DE.json (1)
1574-3118:⚠️ Potential issue | 🟠 MajorFix de-DE translation file key and placeholder parity issues.
Verification found significant discrepancies:
- 127 missing keys in de-DE (e.g., validation errors, business event labels, UI inputs)
- 290 extra/orphaned keys in de-DE (e.g., audit trail, permissions, messages)
- 2 placeholder mismatches:
errors.Password is required: en-US has no placeholders; de-DE has{{min}}labels.commons.Password validation: en-US has{{minchar}}; de-DE has{{michar}}(typo)Align de-DE keys with en-US, fix the
michartypo tominchar, and runnpx prettier --write .to format before merging.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/de-DE.json` around lines 1574 - 3118, The de-DE.json translation file has key and placeholder parity issues with the en-US reference file. First, identify and add the 127 missing keys from en-US to de-DE (such as validation errors, business event labels, and UI inputs). Second, remove the 290 extra or orphaned keys that exist in de-DE but not in en-US. Third, fix the two placeholder mismatches: in the errors.Password is required key, remove the {{min}} placeholder from the German translation, and in the labels.commons.Password validation key, correct the typo by changing {{michar}} to {{minchar}}. Finally, run npx prettier --write . to ensure proper formatting of the JSON file before submitting the changes.src/assets/translations/ko-KO.json (1)
2349-2355:⚠️ Potential issue | 🟠 Major | ⚡ Quick win
inputs["Loading vendors"]has the wrong value type (object instead of string).At Line 2349, this key is mapped to a nested object, while translation consumers expect a leaf string for label keys. This can render incorrectly (e.g., object output/fallback) where the loading text is shown.
Proposed fix
- "Loading vendors": { - "": { - "": { - "": "공급업체 불러오는 중..." - } - } - }, + "Loading vendors": "공급업체 불러오는 중...",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/ko-KO.json` around lines 2349 - 2355, The "Loading vendors" translation key in the ko-KO.json file is structured as a nested object with empty string keys instead of being a simple string value. Replace the nested object structure (with the empty string keys and intermediate objects) so that the "Loading vendors" key directly maps to the string value "공급업체 불러오는 중..." as a leaf value, which is what translation consumers expect for label keys.src/assets/translations/lv-LV.json (1)
1-4796:⚠️ Potential issue | 🔴 CriticalLocale key parity check confirms 124 missing keys and 13 extra keys in lv-LV.json — must be resolved before release.
Verification against en-US.json baseline shows the Latvian translation file is significantly out of sync:
Missing in lv-LV (124 keys):
- 124 keys exist in en-US but are absent in lv-LV
- Notable gaps: validation error messages (e.g.,
errors.validation.msg.savingsproduct.insufficient.balance), UI labels (e.g.,labels.heading.Quick Access), and 99+ business event descriptions (e.g.,LoanCreatedBusinessEvent,LoanDisbursalBusinessEvent, etc.)- Untranslated strings will fall back to English or display as key names, degrading UX for Latvian users
Extra in lv-LV (13 keys):
- 13 keys exist in lv-LV but are absent in en-US (orphaned/obsolete keys)
- Examples:
Deactivate Role,Delete Role,labels.heading.SMSBefore merge:
- Add all 124 missing keys to lv-LV.json with Latvian translations
- Remove 13 orphaned keys that no longer exist in the English baseline
- Run
npx prettier --write src/assets/translations/lv-LV.jsonto enforce formatting per coding guidelines🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/lv-LV.json` around lines 1 - 4796, The Latvian translation file (lv-LV.json) is out of sync with the English baseline (en-US.json). You must synchronize the locale keys before merge by: (1) identifying all 124 missing keys that exist in en-US.json but are absent from lv-LV.json — particularly validation error messages, UI labels, and business event descriptions — and adding them with appropriate Latvian translations to lv-LV.json, (2) removing the 13 orphaned/obsolete keys that exist in lv-LV.json but no longer appear in en-US.json (such as `Deactivate Role`, `Delete Role`, and `labels.heading.SMS`), and (3) running `npx prettier --write src/assets/translations/lv-LV.json` to enforce consistent formatting and comply with coding guidelines. Fallback to English will occur for any untranslated strings, degrading the user experience for Latvian speakers, so all missing keys must be filled before release.
🟡 Minor comments (23)
src/assets/translations/en-US.json-2174-2174 (1)
2174-2174:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix the incomplete gap label.
Line 2174 renders
Gap between Installments:(Minverbatim, leaving a truncated label and unmatched parenthesis in the UI. Use a complete label, or add a separate key for any min/max helper text.📝 Proposed fix
- "Gap between Installments": "Gap between Installments:(Min", + "Gap between Installments": "Gap between Installments",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/en-US.json` at line 2174, The translation value for the "Gap between Installments" key in the en-US.json file is truncated, ending with an unmatched opening parenthesis after "Min". Complete the label text to properly display the intended UI text, such as including the closing parenthesis and any range text like a maximum value, or alternatively split the content into separate translation keys where the main label is in one key and the min/max helper text is in a different key for better maintainability.src/assets/translations/cs-CS.json-2166-2166 (1)
2166-2166:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winTruncated localized value will render broken helper text.
Line 2166 (
"Gap between Installments": "Mezera mezi splátkami: (min") appears cut off and will show incomplete UI text.Proposed fix
- "Gap between Installments": "Mezera mezi splátkami: (min", + "Gap between Installments": "Mezera mezi splátkami",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/cs-CS.json` at line 2166, The Czech translation for "Gap between Installments" key in src/assets/translations/cs-CS.json at line 2166 is incomplete, ending with "(min" which will cause broken UI text to render. Complete the truncated translation string by adding the missing closing text. Reference the corresponding English translation or other language translations in the file to understand what the complete format should be, then ensure the Czech value is properly closed with the appropriate closing parenthesis and text.src/assets/translations/de-DE.json-1467-1467 (1)
1467-1467:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove or rename probable debug-style translation key.
Line 1467 (
"savings-transaction-datatable-tab works") looks like a temporary/debug phrase rather than a stable i18n key. This increases long-term i18n drift and noisy locale files.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/de-DE.json` at line 1467, The translation key "savings-transaction-datatable-tab works" in src/assets/translations/de-DE.json (line 1467) appears to be a temporary debug phrase rather than a proper i18n key, which creates unnecessary noise and potential i18n drift in the locale file. Either remove this key-value pair entirely from the de-DE.json file if it is not actually being used, or rename both the key and its associated usage in the codebase to follow a proper naming convention that aligns with other translation keys (e.g., something like "savings-transaction-datatable-tab-label" or similar, depending on the actual semantic purpose).src/assets/translations/de-DE.json-3117-3117 (1)
3117-3117:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix incorrect German translation for postal code.
Line 3117 maps
"Zip"to"Reißverschluss"(zipper), which is semantically incorrect for address fields and will confuse users.Suggested fix
- "Zip": "Reißverschluss" + "Zip": "Postleitzahl"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/de-DE.json` at line 3117, In src/assets/translations/de-DE.json at line 3117, the key "Zip" is incorrectly mapped to "Reißverschluss" (zipper). Replace this value with the correct German translation for postal code, which should be "Postleitzahl" or the common abbreviation "PLZ" used in German-speaking countries for address-related postal codes.src/assets/translations/de-DE.json-2168-2168 (1)
2168-2168:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winComplete the truncated label text.
Line 2168 appears cut off (
"Abstand zwischen den Raten: (Min"), which will render incomplete UI copy.Suggested fix
- "Gap between Installments": "Abstand zwischen den Raten: (Min", + "Gap between Installments": "Abstand zwischen den Raten",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/de-DE.json` at line 2168, The German translation string for the "Gap between Installments" key in the de-DE.json translation file is truncated and ends with "(Min" without closing the parenthesis or completing the range specification. Complete this truncated label text by adding the missing portion (likely the maximum indicator and closing parenthesis) to ensure the UI displays the full, grammatically correct label for the gap between installments field.src/assets/translations/es-CL.json-1749-1749 (1)
1749-1749:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix incorrect Spanish meanings on newly added labels.
These entries will mislead users in UI flows:
- Line 1749:
"cannot": "no puedo"should be impersonal/third-person (e.g., "no puede").- Line 2020:
"Due On": "Debido a"reads like “because of”; for due-date context use "Vence el".- Line 2189:
"GSIM Id": "Id GSM"changes acronym meaning; keep GSIM.- Line 3116:
"Zip": "Comprimir"is incorrect in address context; use "Código Postal".Also applies to: 2020-2020, 2189-2189, 3116-3116
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/es-CL.json` at line 1749, In the src/assets/translations/es-CL.json file, correct four Spanish translation entries that will mislead users: at line 1749 change the "cannot" entry from "no puedo" to "no puede" to use correct third-person form; at line 2020 change the "Due On" entry from "Debido a" to "Vence el" for proper due-date context; at line 2189 change the "GSIM Id" entry from "Id GSM" to "GSIM Id" to preserve the correct acronym meaning; and at line 3116 change the "Zip" entry from "Comprimir" to "Código Postal" for correct address-field terminology.src/assets/translations/es-MX.json-2943-2944 (1)
2943-2944:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove duplicate
Submitted On Datekey inlabels.inputs.
"Submitted On Date"already exists earlier (Line 1695). Re-declaring it here causes silent override behavior in JSON parsers and makes future edits error-prone.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/es-MX.json` around lines 2943 - 2944, Remove the duplicate "Submitted On Date" key entry from the JSON translation file. The key "Submitted On Date" with its corresponding translation "Registrado el día" already exists earlier in the labels.inputs section and should not be redeclared, as duplicate keys in JSON cause silent override behavior and introduce maintenance issues. Delete the duplicate key-value pair while keeping the original definition.src/assets/translations/es-MX.json-1438-1438 (1)
1438-1438:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix untranslated/mistranslated user-facing labels in es-MX.
These entries will render incorrect Spanish in UI:
- Line 1438:
"Quick Access": "Quick Access"(left in English)- Line 1755:
"cannot": "no puedo"(first person; should be impersonal/third person)- Line 2655:
"Payments Left": "Payments Left"(left in English)- Line 3120:
"Zip": "Comprimir"(semantic mismatch; “ZIP code” label expected)Suggested patch
- "Quick Access": "Quick Access", + "Quick Access": "Acceso rápido", - "cannot": "no puedo", + "cannot": "no puede", - "Payments Left": "Payments Left", + "Payments Left": "Pagos restantes", - "Zip": "Comprimir" + "Zip": "Código postal"Also applies to: 1755-1755, 2655-2655, 3120-3120
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/es-MX.json` at line 1438, The es-MX.json translation file contains four keys with incorrect or missing Spanish translations that will display improperly in the UI. For the "Quick Access" key, replace the English value with its proper Spanish translation. For the "cannot" key, change the value from the first-person "no puedo" to the correct impersonal/third-person Spanish form. For the "Payments Left" key, replace the English value with its proper Spanish translation. For the "Zip" key, replace the incorrect value "Comprimir" (which means file compression) with the proper Spanish term for ZIP code.src/assets/translations/fr-FR.json-673-673 (1)
673-673:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUse one French domain term for “Breach” in the new loan UI.
The new breach-action labels mix
ManquementandBrèches, so the same Working Capital feature appears under different concepts in French. Pick one domain term for these new keys and apply it consistently.Proposed wording using “manquement” consistently
- "Pause Breach": "Suspendre le Manquement", + "Pause Breach": "Suspendre le manquement", ... - "Loan Breach Actions": "Actions de Manquement du Prêt", + "Loan Breach Actions": "Actions de manquement du prêt", ... - "No Breach Actions": "Aucune Action sur Brèches", + "No Breach Actions": "Aucune action de manquement", ... - "Breach Actions": "Actions de Manquement", + "Breach Actions": "Actions de manquement", ... - "No breach actions have been recorded for this loan": "Aucune action sur brèches n'a été enregistrée pour ce prêt", + "No breach actions have been recorded for this loan": "Aucune action de manquement n'a été enregistrée pour ce prêt",Also applies to: 1353-1353, 1405-1405, 1735-1735, 2514-2514
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/fr-FR.json` at line 673, The French translations for breach-related labels in the Working Capital feature are inconsistent, mixing "Manquement" and "Brèches" for the same concept. Review all breach-action label keys in the file at lines 673, 1353, 1405, 1735, and 2514 to identify which ones use which term, then standardize all of them to use a single domain term consistently throughout. Choose either "Manquement" or "Brèches" as the standard and apply it to all the affected breach-related translation keys so the feature appears under one unified concept in French.src/assets/translations/fr-FR.json-1830-1830 (1)
1830-1830:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix mistranslated technical field labels.
These labels render as the wrong concepts:
COB Datebecomes PPE,OTPbecomes “Office of the Prosecutor”, andZipbecomes a clothing zipper.labels.inputs.Zipis used by the guarantor ZIP field insrc/app/loans/custom-dialog/edit-guarantor-dialog/edit-guarantor-dialog.component.html:43-46.Proposed label fixes
- "COB Date": "Date de l'ÉPI", + "COB Date": "Date COB", ... - "OTP": "Bureau du Procureur", + "OTP": "OTP", ... - "Zip": "Fermeture éclair" + "Zip": "Code postal"Also applies to: 2583-2583, 3118-3118
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/fr-FR.json` at line 1830, The fr-FR.json file contains three mistranslated technical field labels that use incorrect French equivalents. At line 1830, fix "COB Date" which is currently mistranslated as "Date de l'ÉPI" (PPE) when it should refer to Close of Business. At line 2583, fix the "OTP" label which is mistranslated as "Office of the Prosecutor" when it should refer to One-Time Password. At line 3118, fix the "Zip" label which is mistranslated with a clothing-related meaning when it should refer to postal code (ZIP code). Replace each of these translations with the correct French equivalents that properly represent the technical meanings of COB (Close of Business), OTP (One-Time Password), and Zip (postal code), as these labels are used throughout the application including in components like the guarantor ZIP field.src/assets/translations/fr-FR.json-2837-2839 (1)
2837-2839:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winTranslate the S3 snake_case aliases instead of showing raw keys.
These alias keys are likely used as labels just like the title-cased S3 keys above them; leaving the values as
s3_access_key,s3_bucket_name, ands3_secret_keyexposes implementation names in the UI.Proposed alias translations
- "s3_access_key": "s3_access_key", - "s3_bucket_name": "s3_bucket_name", - "s3_secret_key": "s3_secret_key", + "s3_access_key": "Clé d'accès S3", + "s3_bucket_name": "Nom du compartiment S3", + "s3_secret_key": "Clé secrète S3",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/fr-FR.json` around lines 2837 - 2839, In the French translation file fr-FR.json at lines 2837-2839, the snake_case alias keys s3_access_key, s3_bucket_name, and s3_secret_key currently have values that match their raw implementation names. Replace these values with proper French translations that match the translation style used for the title-cased S3 keys appearing earlier in the file, so the UI displays user-friendly French labels instead of exposing raw technical key names.src/assets/translations/fr-FR.json-1593-1599 (1)
1593-1599:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUse accounting terms for account-class labels.
LIABILITY,EQUITY, andEXPENSEare financial account classes; translating them asRESPONSABILITÉ,ÉQUITÉ, andFRAISchanges the accounting meaning.Proposed accounting terminology fix
"accounting": { "ASSET": "ACTIF", - "LIABILITY": "RESPONSABILITÉ", - "EQUITY": "ÉQUITÉ", + "LIABILITY": "PASSIF", + "EQUITY": "CAPITAUX PROPRES", "INCOME": "REVENU", - "EXPENSE": "FRAIS" + "EXPENSE": "CHARGES" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/fr-FR.json` around lines 1593 - 1599, The accounting field labels in the accounting object contain incorrect translations that change the accounting meaning of these financial terms. Replace the translations for LIABILITY, EQUITY, and EXPENSE with proper French accounting terminology instead of their current general translations. Use standard accounting terms in French that preserve the specific financial meaning of these account classes.src/assets/translations/it-IT.json-3115-3115 (1)
3115-3115:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winCorrect mistranslation of “Zip” for address forms.
"Zip": "Cerniera lampo"translates to zipper, not postal code. This is misleading in address entry flows.💡 Suggested fix
- "Zip": "Cerniera lampo" + "Zip": "CAP"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/it-IT.json` at line 3115, The "Zip" key in the Italian translation file is incorrectly translated to "Cerniera lampo" which means zipper, not postal code. This causes confusion in address entry forms where "Zip" should represent a postal code. Replace the value of the "Zip" key with the correct Italian term for postal code, which should be "CAP" (the standard Italian acronym for Codice di Avviamento Postale) or "Codice Postale" to properly reflect its use in address forms.src/assets/translations/it-IT.json-2166-2166 (1)
2166-2166:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix truncated Italian label for installment gap.
"Gap between Installments": "Intervallo tra le rate: (Min"is incomplete/truncated and will render broken UI text.💡 Suggested fix
- "Gap between Installments": "Intervallo tra le rate: (Min", + "Gap between Installments": "Intervallo tra le rate",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/it-IT.json` at line 2166, The Italian translation value for the "Gap between Installments" key in the it-IT.json file is truncated and ends with an unclosed parenthesis at "(Min". Complete this translation by adding the missing text that should follow to properly convey the full meaning of the installment gap description in Italian, ensuring the parenthetical statement is closed and the complete intended message is present.src/assets/translations/ko-KO.json-3115-3115 (1)
3115-3115:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win
"Zip"is mistranslated as “지퍼” (zipper), not postal code.At Line 3115, this label is used in address forms, so the current translation is misleading for users entering postal information.
Proposed fix
- "Zip": "지퍼" + "Zip": "우편번호"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/ko-KO.json` at line 3115, The "Zip" key in the ko-KO.json file at line 3115 is incorrectly translated as "지퍼" which means zipper (the fastener), but the context is for address forms where it refers to postal code. Replace the current translation with the proper Korean term for postal code to ensure users understand they should enter their postal/zip code information.src/assets/translations/lt-LT.json-2165-2165 (1)
2165-2165:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove the dangling “(min” from the installment-gap label.
Line 2165 will render as
Tarpas tarp įmokų: (min, which looks truncated in the UI.Proposed fix
- "Gap between Installments": "Tarpas tarp įmokų: (min", + "Gap between Installments": "Tarpas tarp įmokų",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/lt-LT.json` at line 2165, The Lithuanian translation for "Gap between Installments" in the lt-LT.json file contains a trailing "(min" that appears incomplete in the UI. Remove the dangling "(min" text from the end of the translation value so that the label "Tarpas tarp įmokų:" displays cleanly without the truncated parenthetical fragment.src/assets/translations/lv-LV.json-1465-1465 (1)
1465-1465:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove/rename debug-like translation key before merge.
Line [1465] (
"savings-transaction-datatable-tab works") looks like a temporary/debug key and not a stable product label. This can leak non-user-facing wording into UI if referenced.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/lv-LV.json` at line 1465, The translation key "savings-transaction-datatable-tab works" in the lv-LV.json file appears to be a temporary debug entry rather than a production translation. Either remove this debug key entirely from the file if it is not used elsewhere, or rename it to a proper user-facing label that accurately describes the translated content if it is actively referenced in the codebase.src/assets/translations/lv-LV.json-2166-2166 (1)
2166-2166:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix truncated translation value for installment gap label.
Line [2166] ends mid-phrase (
"(min"), so the UI label will render incomplete. Please replace it with the full intended Latvian text.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/lv-LV.json` at line 2166, The translation value for the "Gap between Installments" key is incomplete and ends mid-phrase with "(min". Replace this truncated value with the full intended Latvian translation text that properly completes the label in the UI.src/assets/translations/lv-LV.json-1283-1283 (1)
1283-1283:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUse context-appropriate translation for “General”.
Lines [1283] and [2170] map
"General"to"Ģenerālis"(military rank). For section/title context, this should be the equivalent of “General/Overview” (e.g., “Vispārīgi”).Also applies to: 2170-2170
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/lv-LV.json` at line 1283, The translation for "General" in the Latvian translation file (lv-LV.json) is currently set to "Ģenerālis" (military rank), but in the context of section/title headings, it should represent "General/Overview" instead. Change the value "Ģenerālis" to "Vispārīgi" at line 1283 and at line 2170 to use the context-appropriate translation for section titles rather than military rank terminology.src/assets/translations/pt-PT.json-3114-3114 (1)
3114-3114:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUse the postal-code translation for
Zip.
Fecho eclairmeans “zipper”; address forms should displayCódigo postal.🌐 Proposed translation fix
- "Zip": "Fecho eclair" + "Zip": "Código postal"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/pt-PT.json` at line 3114, The translation for the "Zip" key in the pt-PT.json file is incorrectly set to "Fecho eclair" which means "zipper" in Portuguese. For address forms, this should use the postal code translation instead. Change the value of the "Zip" key from "Fecho eclair" to "Código postal" to provide the correct postal code terminology for Portuguese users.src/assets/translations/pt-PT.json-1589-1595 (1)
1589-1595:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix the accounting meaning of
LIABILITY.
RESPONSABILIDADEis not the accounting category here; usePASSIVOso GL account-type labels are not misleading.🌐 Proposed translation fix
"accounting": { "ASSET": "ATIVO", - "LIABILITY": "RESPONSABILIDADE", + "LIABILITY": "PASSIVO", "EQUITY": "EQUIDADE", "INCOME": "RENDA", "EXPENSE": "DESPESA" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/pt-PT.json` around lines 1589 - 1595, In the accounting translations object within the pt-PT.json file, the translation for the LIABILITY key is currently set to "RESPONSABILIDADE", which is misleading in an accounting context. Change the LIABILITY translation value from "RESPONSABILIDADE" to "PASSIVO" to correctly represent the accounting category term in Portuguese.src/assets/translations/pt-PT.json-2165-2165 (1)
2165-2165:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove the truncated suffix from this label.
Intervalo entre as parcelas:(mín.will render with a dangling partial “min.” hint. Keep this label complete and move any min/max detail to the actual validation/help text if needed.🌐 Proposed translation fix
- "Gap between Installments": "Intervalo entre as parcelas:(mín.", + "Gap between Installments": "Intervalo entre as parcelas",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/pt-PT.json` at line 2165, The translation for "Gap between Installments" in the pt-PT.json file contains a truncated suffix ":(mín." at the end which will render as incomplete text. Remove the dangling "(mín." portion and keep the label complete as "Intervalo entre as parcelas". If minimum or maximum detail is needed for this field, ensure that information is provided separately through validation or help text rather than appended to the label itself.src/assets/translations/pt-PT.json-2833-2835 (1)
2833-2835:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winTranslate the S3 field labels instead of exposing internal keys.
These values currently mirror the snake_case keys, so users can see
s3_access_key/s3_bucket_name/s3_secret_keyas labels.🌐 Proposed translation fix
- "s3_access_key": "s3_access_key", - "s3_bucket_name": "s3_bucket_name", - "s3_secret_key": "s3_secret_key", + "s3_access_key": "Chave de acesso S3", + "s3_bucket_name": "Nome do bucket S3", + "s3_secret_key": "Chave secreta S3",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/pt-PT.json` around lines 2833 - 2835, Replace the hardcoded internal key names with proper Portuguese translations for the three S3 configuration field labels: s3_access_key, s3_bucket_name, and s3_secret_key in the pt-PT.json file. Instead of showing the internal key names as values, provide user-friendly Portuguese translations that describe what each field represents (e.g., access key, bucket name, secret key) so users see meaningful labels in the Portuguese interface rather than technical identifiers.
🧹 Nitpick comments (1)
src/assets/translations/cs-CS.json (1)
1465-1465: ⚡ Quick winLooks like debug/internal keys were committed into user translation space.
Line 1465 (
"savings-transaction-datatable-tab works"), Line 2955 ("task-management component"), and Line 2990 ("TODO") read like debug/internal labels, not production i18n keys. These should be removed unless they are intentionally rendered to end users.Also applies to: 2955-2955, 2990-2990
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/cs-CS.json` at line 1465, Remove the debug/internal translation keys from the Czech translation file at all affected locations. Delete the entry "savings-transaction-datatable-tab works" at line 1465, the entry "task-management component" at line 2955, and the entry "TODO" at line 2990 from src/assets/translations/cs-CS.json. These debug labels are not legitimate user-facing i18n strings and should not exist in the production translation space.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.html`:
- Around line 121-145: Replace the custom filter chip controls (buttons with
class "filter-chip" inside the filter-group) with Angular Material
mat-chip-listbox and mat-chip components, replacing the click handler and active
state styling with Material chip bindings. Convert all native button elements,
including the "Pause Breach" button with classes "btn btn-primary", to use the
mat-button directive instead. Additionally, the raw table mentioned in lines
150-212 should be converted to use the mat-table component with appropriate
mat-header-cell, mat-cell, and mat-row directives to maintain compliance with
project Material design standards.
In
`@src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.scss`:
- Around line 9-35: The component stylesheet contains custom color variables and
off-grid explicit spacings that should be replaced with shared theme variables
and 8px-aligned spacing values. Remove the custom color variable declarations
(such as --ba-blue-700, --ba-blue-600, --ba-paid, --ba-alert, etc.) from the
:host selector and replace them with variables from src/main.scss and
src/theme/mifosx-theme.scss. Update all explicit spacing values in the padding
property and throughout the stylesheet (at lines 93-99, 182-183, 340-341,
703-717) to use multiples of 8px (such as 8px, 16px, 24px, 32px) instead of
off-grid values like 12px, 22px, or 13px, ensuring consistency with the
project's 8px grid system and design-system contract.
In
`@src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.ts`:
- Around line 164-165: Replace all hardcoded English strings and date formatting
with i18n-compliant alternatives across the affected locations. In the tooltip
construction at lines 164-165, replace the hardcoded 'Ongoing' string with a
translated i18n key using `@ngx-translate/core`. Update the shortDate() method and
any other date formatting logic (at lines 190-206 and 301-303) to use proper
i18n locale settings instead of hardcoded 'en-US' in toLocaleDateString calls
and hardcoded month names like 'Jan'..'Dec'. Ensure all user-facing strings in
the tooltip and date displays use translate pipe or i18n service calls to
respect the application's current locale setting.
- Around line 87-93: The code unconditionally calls getTime() on the end
variable (derived from endDate) in the BreachActionStatus determination logic,
but endDate is nullable and will be null for ongoing pauses. Add a guard
condition to check if end is null before calling getTime() on it. When end is
null (indicating an ongoing pause with no end date), determine the appropriate
status based on the start date comparison with businessDate only, or assign a
status that reflects the ongoing nature of the pause. Ensure all branches in the
if-else chain account for the possibility of end being null.
In `@src/assets/translations/es-CL.json`:
- Around line 2709-2720: The es-CL.json translation file is out of sync with
en-US.json: it has 124 missing keys that will cause runtime fallbacks to
English, 15 orphaned extra keys, and a placeholder mismatch where
errors.Password is required has a {{min}} token in es-CL but not in en-US. To
fix this, either restore all missing keys with proper Spanish translations,
remove the 15 extra keys, and correct the placeholder mismatch in
errors.Password is required, or reset es-CL to a clean baseline that mirrors the
complete structure of en-US.json with Spanish translations. After making these
changes, run npx prettier --write to enforce the project's formatting standards
on the translation file.
In `@src/assets/translations/lt-LT.json`:
- Line 1: The lt-LT.json file is missing 65+ translation keys that are present
in en-US.json, including error.resource.notImplemented.* entries, catalog keys
for Share Building Contribution and Share Solidarity Fund, commons keys like
pass is required, multiple heading and input labels, and numerous
Loan*BusinessEvent keys. To fix this, review the en-US.json file and add all
missing keys to lt-LT.json with appropriate Lithuanian translations, ensuring
the structure and key names match exactly with en-US.json to prevent
untranslated strings or objects from appearing in the UI.
---
Outside diff comments:
In `@src/assets/translations/cs-CS.json`:
- Around line 1-5086: The Czech translation file (cs-CS.json) has diverged from
the canonical English version (en-US.json) with 128 missing keys and 304
extraneous keys. To fix this, compare the complete key hierarchy in cs-CS.json
against en-US.json and: (1) remove all keys that exist in cs-CS.json but not in
en-US.json (the 304 extra keys), and (2) add all keys that exist in en-US.json
but not in cs-CS.json (the 128 missing keys), preserving their nested structure
and using appropriate Czech translations or copying placeholder values. This
will synchronize the two files' key shapes while maintaining the existing Czech
translations for matching keys.
In `@src/assets/translations/de-DE.json`:
- Around line 1574-3118: The de-DE.json translation file has key and placeholder
parity issues with the en-US reference file. First, identify and add the 127
missing keys from en-US to de-DE (such as validation errors, business event
labels, and UI inputs). Second, remove the 290 extra or orphaned keys that exist
in de-DE but not in en-US. Third, fix the two placeholder mismatches: in the
errors.Password is required key, remove the {{min}} placeholder from the German
translation, and in the labels.commons.Password validation key, correct the typo
by changing {{michar}} to {{minchar}}. Finally, run npx prettier --write . to
ensure proper formatting of the JSON file before submitting the changes.
In `@src/assets/translations/ko-KO.json`:
- Around line 2349-2355: The "Loading vendors" translation key in the ko-KO.json
file is structured as a nested object with empty string keys instead of being a
simple string value. Replace the nested object structure (with the empty string
keys and intermediate objects) so that the "Loading vendors" key directly maps
to the string value "공급업체 불러오는 중..." as a leaf value, which is what translation
consumers expect for label keys.
In `@src/assets/translations/lv-LV.json`:
- Around line 1-4796: The Latvian translation file (lv-LV.json) is out of sync
with the English baseline (en-US.json). You must synchronize the locale keys
before merge by: (1) identifying all 124 missing keys that exist in en-US.json
but are absent from lv-LV.json — particularly validation error messages, UI
labels, and business event descriptions — and adding them with appropriate
Latvian translations to lv-LV.json, (2) removing the 13 orphaned/obsolete keys
that exist in lv-LV.json but no longer appear in en-US.json (such as `Deactivate
Role`, `Delete Role`, and `labels.heading.SMS`), and (3) running `npx prettier
--write src/assets/translations/lv-LV.json` to enforce consistent formatting and
comply with coding guidelines. Fallback to English will occur for any
untranslated strings, degrading the user experience for Latvian speakers, so all
missing keys must be filled before release.
---
Minor comments:
In `@src/assets/translations/cs-CS.json`:
- Line 2166: The Czech translation for "Gap between Installments" key in
src/assets/translations/cs-CS.json at line 2166 is incomplete, ending with
"(min" which will cause broken UI text to render. Complete the truncated
translation string by adding the missing closing text. Reference the
corresponding English translation or other language translations in the file to
understand what the complete format should be, then ensure the Czech value is
properly closed with the appropriate closing parenthesis and text.
In `@src/assets/translations/de-DE.json`:
- Line 1467: The translation key "savings-transaction-datatable-tab works" in
src/assets/translations/de-DE.json (line 1467) appears to be a temporary debug
phrase rather than a proper i18n key, which creates unnecessary noise and
potential i18n drift in the locale file. Either remove this key-value pair
entirely from the de-DE.json file if it is not actually being used, or rename
both the key and its associated usage in the codebase to follow a proper naming
convention that aligns with other translation keys (e.g., something like
"savings-transaction-datatable-tab-label" or similar, depending on the actual
semantic purpose).
- Line 3117: In src/assets/translations/de-DE.json at line 3117, the key "Zip"
is incorrectly mapped to "Reißverschluss" (zipper). Replace this value with the
correct German translation for postal code, which should be "Postleitzahl" or
the common abbreviation "PLZ" used in German-speaking countries for
address-related postal codes.
- Line 2168: The German translation string for the "Gap between Installments"
key in the de-DE.json translation file is truncated and ends with "(Min" without
closing the parenthesis or completing the range specification. Complete this
truncated label text by adding the missing portion (likely the maximum indicator
and closing parenthesis) to ensure the UI displays the full, grammatically
correct label for the gap between installments field.
In `@src/assets/translations/en-US.json`:
- Line 2174: The translation value for the "Gap between Installments" key in the
en-US.json file is truncated, ending with an unmatched opening parenthesis after
"Min". Complete the label text to properly display the intended UI text, such as
including the closing parenthesis and any range text like a maximum value, or
alternatively split the content into separate translation keys where the main
label is in one key and the min/max helper text is in a different key for better
maintainability.
In `@src/assets/translations/es-CL.json`:
- Line 1749: In the src/assets/translations/es-CL.json file, correct four
Spanish translation entries that will mislead users: at line 1749 change the
"cannot" entry from "no puedo" to "no puede" to use correct third-person form;
at line 2020 change the "Due On" entry from "Debido a" to "Vence el" for proper
due-date context; at line 2189 change the "GSIM Id" entry from "Id GSM" to "GSIM
Id" to preserve the correct acronym meaning; and at line 3116 change the "Zip"
entry from "Comprimir" to "Código Postal" for correct address-field terminology.
In `@src/assets/translations/es-MX.json`:
- Around line 2943-2944: Remove the duplicate "Submitted On Date" key entry from
the JSON translation file. The key "Submitted On Date" with its corresponding
translation "Registrado el día" already exists earlier in the labels.inputs
section and should not be redeclared, as duplicate keys in JSON cause silent
override behavior and introduce maintenance issues. Delete the duplicate
key-value pair while keeping the original definition.
- Line 1438: The es-MX.json translation file contains four keys with incorrect
or missing Spanish translations that will display improperly in the UI. For the
"Quick Access" key, replace the English value with its proper Spanish
translation. For the "cannot" key, change the value from the first-person "no
puedo" to the correct impersonal/third-person Spanish form. For the "Payments
Left" key, replace the English value with its proper Spanish translation. For
the "Zip" key, replace the incorrect value "Comprimir" (which means file
compression) with the proper Spanish term for ZIP code.
In `@src/assets/translations/fr-FR.json`:
- Line 673: The French translations for breach-related labels in the Working
Capital feature are inconsistent, mixing "Manquement" and "Brèches" for the same
concept. Review all breach-action label keys in the file at lines 673, 1353,
1405, 1735, and 2514 to identify which ones use which term, then standardize all
of them to use a single domain term consistently throughout. Choose either
"Manquement" or "Brèches" as the standard and apply it to all the affected
breach-related translation keys so the feature appears under one unified concept
in French.
- Line 1830: The fr-FR.json file contains three mistranslated technical field
labels that use incorrect French equivalents. At line 1830, fix "COB Date" which
is currently mistranslated as "Date de l'ÉPI" (PPE) when it should refer to
Close of Business. At line 2583, fix the "OTP" label which is mistranslated as
"Office of the Prosecutor" when it should refer to One-Time Password. At line
3118, fix the "Zip" label which is mistranslated with a clothing-related meaning
when it should refer to postal code (ZIP code). Replace each of these
translations with the correct French equivalents that properly represent the
technical meanings of COB (Close of Business), OTP (One-Time Password), and Zip
(postal code), as these labels are used throughout the application including in
components like the guarantor ZIP field.
- Around line 2837-2839: In the French translation file fr-FR.json at lines
2837-2839, the snake_case alias keys s3_access_key, s3_bucket_name, and
s3_secret_key currently have values that match their raw implementation names.
Replace these values with proper French translations that match the translation
style used for the title-cased S3 keys appearing earlier in the file, so the UI
displays user-friendly French labels instead of exposing raw technical key
names.
- Around line 1593-1599: The accounting field labels in the accounting object
contain incorrect translations that change the accounting meaning of these
financial terms. Replace the translations for LIABILITY, EQUITY, and EXPENSE
with proper French accounting terminology instead of their current general
translations. Use standard accounting terms in French that preserve the specific
financial meaning of these account classes.
In `@src/assets/translations/it-IT.json`:
- Line 3115: The "Zip" key in the Italian translation file is incorrectly
translated to "Cerniera lampo" which means zipper, not postal code. This causes
confusion in address entry forms where "Zip" should represent a postal code.
Replace the value of the "Zip" key with the correct Italian term for postal
code, which should be "CAP" (the standard Italian acronym for Codice di
Avviamento Postale) or "Codice Postale" to properly reflect its use in address
forms.
- Line 2166: The Italian translation value for the "Gap between Installments"
key in the it-IT.json file is truncated and ends with an unclosed parenthesis at
"(Min". Complete this translation by adding the missing text that should follow
to properly convey the full meaning of the installment gap description in
Italian, ensuring the parenthetical statement is closed and the complete
intended message is present.
In `@src/assets/translations/ko-KO.json`:
- Line 3115: The "Zip" key in the ko-KO.json file at line 3115 is incorrectly
translated as "지퍼" which means zipper (the fastener), but the context is for
address forms where it refers to postal code. Replace the current translation
with the proper Korean term for postal code to ensure users understand they
should enter their postal/zip code information.
In `@src/assets/translations/lt-LT.json`:
- Line 2165: The Lithuanian translation for "Gap between Installments" in the
lt-LT.json file contains a trailing "(min" that appears incomplete in the UI.
Remove the dangling "(min" text from the end of the translation value so that
the label "Tarpas tarp įmokų:" displays cleanly without the truncated
parenthetical fragment.
In `@src/assets/translations/lv-LV.json`:
- Line 1465: The translation key "savings-transaction-datatable-tab works" in
the lv-LV.json file appears to be a temporary debug entry rather than a
production translation. Either remove this debug key entirely from the file if
it is not used elsewhere, or rename it to a proper user-facing label that
accurately describes the translated content if it is actively referenced in the
codebase.
- Line 2166: The translation value for the "Gap between Installments" key is
incomplete and ends mid-phrase with "(min". Replace this truncated value with
the full intended Latvian translation text that properly completes the label in
the UI.
- Line 1283: The translation for "General" in the Latvian translation file
(lv-LV.json) is currently set to "Ģenerālis" (military rank), but in the context
of section/title headings, it should represent "General/Overview" instead.
Change the value "Ģenerālis" to "Vispārīgi" at line 1283 and at line 2170 to use
the context-appropriate translation for section titles rather than military rank
terminology.
In `@src/assets/translations/pt-PT.json`:
- Line 3114: The translation for the "Zip" key in the pt-PT.json file is
incorrectly set to "Fecho eclair" which means "zipper" in Portuguese. For
address forms, this should use the postal code translation instead. Change the
value of the "Zip" key from "Fecho eclair" to "Código postal" to provide the
correct postal code terminology for Portuguese users.
- Around line 1589-1595: In the accounting translations object within the
pt-PT.json file, the translation for the LIABILITY key is currently set to
"RESPONSABILIDADE", which is misleading in an accounting context. Change the
LIABILITY translation value from "RESPONSABILIDADE" to "PASSIVO" to correctly
represent the accounting category term in Portuguese.
- Line 2165: The translation for "Gap between Installments" in the pt-PT.json
file contains a truncated suffix ":(mín." at the end which will render as
incomplete text. Remove the dangling "(mín." portion and keep the label complete
as "Intervalo entre as parcelas". If minimum or maximum detail is needed for
this field, ensure that information is provided separately through validation or
help text rather than appended to the label itself.
- Around line 2833-2835: Replace the hardcoded internal key names with proper
Portuguese translations for the three S3 configuration field labels:
s3_access_key, s3_bucket_name, and s3_secret_key in the pt-PT.json file. Instead
of showing the internal key names as values, provide user-friendly Portuguese
translations that describe what each field represents (e.g., access key, bucket
name, secret key) so users see meaningful labels in the Portuguese interface
rather than technical identifiers.
---
Nitpick comments:
In `@src/assets/translations/cs-CS.json`:
- Line 1465: Remove the debug/internal translation keys from the Czech
translation file at all affected locations. Delete the entry
"savings-transaction-datatable-tab works" at line 1465, the entry
"task-management component" at line 2955, and the entry "TODO" at line 2990 from
src/assets/translations/cs-CS.json. These debug labels are not legitimate
user-facing i18n strings and should not exist in the production translation
space.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: be8c0e41-2e42-4652-9bd4-7417a7c4b433
📒 Files selected for processing (21)
src/app/loans/common-resolvers/working-capital/loan-breach-actions.resolver.tssrc/app/loans/loans-routing.module.tssrc/app/loans/loans-view/loans-view.component.htmlsrc/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.htmlsrc/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.scsssrc/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.tssrc/app/loans/loans.module.tssrc/app/loans/loans.service.tssrc/assets/translations/cs-CS.jsonsrc/assets/translations/de-DE.jsonsrc/assets/translations/en-US.jsonsrc/assets/translations/es-CL.jsonsrc/assets/translations/es-MX.jsonsrc/assets/translations/fr-FR.jsonsrc/assets/translations/it-IT.jsonsrc/assets/translations/ko-KO.jsonsrc/assets/translations/lt-LT.jsonsrc/assets/translations/lv-LV.jsonsrc/assets/translations/ne-NE.jsonsrc/assets/translations/pt-PT.jsonsrc/assets/translations/sw-SW.json
91191fa to
d7e90d8
Compare
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/assets/translations/fr-FR.json (1)
1574-3120:⚠️ Potential issue | 🟠 MajorAdd missing translation keys to fr-FR.json and remove extra keys to restore parity with en-US.
Verification found 12 keys present in en-US but missing from fr-FR:
labels.heading.Active Client Memberslabels.heading.Quick Accesslabels.inputs.Amortized Incomelabels.inputs.Annual EIRlabels.inputs.Daily EIRlabels.inputs.Discount Factorlabels.inputs.Discount Feelabels.inputs.ENTITYlabels.inputs.Incorporation Datelabels.inputs.PERSONlabels.inputs.Period Payment Amountlabels.inputs.Starting DateAdditionally, 9 keys exist in fr-FR but not in en-US (
labels.heading.SMS,labels.inputs.CLIENT STATUS, and 7 others), which should also be addressed.Add the missing keys with appropriate French translations to maintain runtime consistency. Afterward, run
npx prettier --write src/assets/translations/fr-FR.jsonto enforce Prettier formatting.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/assets/translations/fr-FR.json` around lines 1574 - 3120, The fr-FR.json translation file is out of sync with en-US.json. Add the 12 missing translation keys (Active Client Members, Quick Access, Amortized Income, Annual EIR, Daily EIR, Discount Factor, Discount Fee, ENTITY, Incorporation Date, PERSON, Period Payment Amount, Starting Date) with appropriate French translations to the inputs and headings sections. Additionally, remove or reconcile the 9 extra keys that exist in fr-FR but not in en-US (such as SMS and CLIENT STATUS) to restore parity. After making these changes, run the Prettier formatter using npx prettier --write src/assets/translations/fr-FR.json to ensure consistent code formatting.
🧹 Nitpick comments (1)
src/app/loans/loans-routing.module.ts (1)
477-506: Remove redundant resolver entries from theprovidersarray for consistency.All working-capital resolvers (
LoanBreachActionsResolver,LoanDelinquencyRangeScheduleResolver,LoanAmortizationScheduleResolver, andLoanPeriodPaymentRatesResolver) use@Injectable({ providedIn: 'root' }). This means they are already registered at the root level and do not need to be listed in the module'sprovidersarray (lines 502–503). While having them in both places is not harmful, it creates inconsistency and redundancy.Remove
LoanAmortizationScheduleResolverandLoanPeriodPaymentRatesResolverfrom theprovidersarray to align with the pattern used by the other working-capital resolvers.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/app/loans/loans-routing.module.ts` around lines 477 - 506, The LoanAmortizationScheduleResolver and LoanPeriodPaymentRatesResolver are already registered at the root level using `@Injectable`({ providedIn: 'root' }) and therefore should not be duplicated in the providers array. Remove these two resolver entries from the providers array in the loans-routing.module.ts file to eliminate redundancy and maintain consistency with other working-capital resolvers that follow this same pattern.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/app/core/utils/dates.ts`:
- Around line 13-26: The Month enum in src/app/core/utils/dates.ts contains
hardcoded English month names that bypass localization and violate the i18n
guidelines. Replace the hardcoded string values with a locale-aware approach by
either using Angular's DatePipe to format months based on the current locale, or
by using translation keys from `@ngx-translate/core` to fetch localized month
names. This ensures that any monthLabels derived from the enum will display
correctly for non-English locales instead of always showing English text.
In `@src/assets/translations/en-US.json`:
- Line 1473: Remove the debug/test placeholder strings from the en-US.json
translation file. Delete the entry at line 1473 containing
"savings-transaction-datatable-tab works" and the entry at line 2959 containing
"task-management component", as these are development placeholders rather than
actual production UI copy that should appear in user-facing translations.
- Line 2175: The translation value for the installment-gap label at line 2175 in
src/assets/translations/en-US.json is truncated and reads "Gap between
Installments:(Min" which will result in incomplete UI text. Locate this
key-value pair in the JSON file and replace the truncated value with the
complete, properly formatted translation text that provides the full intended
message for the gap between installments field.
In `@src/assets/translations/fr-FR.json`:
- Line 1830: Three technical domain terms in the French translation file are
currently mistranslated and will confuse users: at line 1830, COB is incorrectly
translated as "Date de l'ÉPI"; at line 2584, OTP has an incorrect translation;
and at line 3118, Zip has an incorrect translation. Replace each of these
mistranslations with the correct French equivalents for Close of Business (COB),
One-Time Password (OTP), and Zip code (Zip) respectively, ensuring the
translations are accurate technical terms that users in operations,
authentication, and address-entry flows will understand correctly.
- Line 2169: The translation string for "Gap between Installments" in the French
translations file is truncated and ends with the incomplete fragment `:(Min`,
which will cause broken UI rendering. Complete the truncated translation string
by appending the missing text to finish the phrase that begins with the opening
parenthesis and `Min` fragment, ensuring the translation is grammatically
complete and matches the intended meaning of the English key.
In `@src/assets/translations/lv-LV.json`:
- Line 2166: The Latvian translation for "Gap between Installments" in the
lv-LV.json file is incomplete, ending with the truncated text "Starpība starp
maksājumiem: (min". Replace this incomplete value with the full, properly
translated Latvian phrase that completely conveys the meaning of the English
label "Gap between Installments", ensuring it renders correctly in the UI
without any broken or cut-off text.
---
Outside diff comments:
In `@src/assets/translations/fr-FR.json`:
- Around line 1574-3120: The fr-FR.json translation file is out of sync with
en-US.json. Add the 12 missing translation keys (Active Client Members, Quick
Access, Amortized Income, Annual EIR, Daily EIR, Discount Factor, Discount Fee,
ENTITY, Incorporation Date, PERSON, Period Payment Amount, Starting Date) with
appropriate French translations to the inputs and headings sections.
Additionally, remove or reconcile the 9 extra keys that exist in fr-FR but not
in en-US (such as SMS and CLIENT STATUS) to restore parity. After making these
changes, run the Prettier formatter using npx prettier --write
src/assets/translations/fr-FR.json to ensure consistent code formatting.
---
Nitpick comments:
In `@src/app/loans/loans-routing.module.ts`:
- Around line 477-506: The LoanAmortizationScheduleResolver and
LoanPeriodPaymentRatesResolver are already registered at the root level using
`@Injectable`({ providedIn: 'root' }) and therefore should not be duplicated in
the providers array. Remove these two resolver entries from the providers array
in the loans-routing.module.ts file to eliminate redundancy and maintain
consistency with other working-capital resolvers that follow this same pattern.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 072e3e15-665d-49b2-a2db-f5eb6e5c7492
📒 Files selected for processing (24)
src/app/core/utils/dates.tssrc/app/loans/common-resolvers/working-capital/loan-breach-actions.resolver.tssrc/app/loans/loans-routing.module.tssrc/app/loans/loans-view/charges-tab/charges-tab.component.scsssrc/app/loans/loans-view/loans-view.component.htmlsrc/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.htmlsrc/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.scsssrc/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.tssrc/app/loans/loans.module.tssrc/app/loans/loans.service.tssrc/assets/styles/_redesign-tokens.scsssrc/assets/translations/cs-CS.jsonsrc/assets/translations/de-DE.jsonsrc/assets/translations/en-US.jsonsrc/assets/translations/es-CL.jsonsrc/assets/translations/es-MX.jsonsrc/assets/translations/fr-FR.jsonsrc/assets/translations/it-IT.jsonsrc/assets/translations/ko-KO.jsonsrc/assets/translations/lt-LT.jsonsrc/assets/translations/lv-LV.jsonsrc/assets/translations/ne-NE.jsonsrc/assets/translations/pt-PT.jsonsrc/assets/translations/sw-SW.json
✅ Files skipped from review due to trivial changes (1)
- src/assets/styles/_redesign-tokens.scss
🚧 Files skipped from review as they are similar to previous changes (14)
- src/app/loans/common-resolvers/working-capital/loan-breach-actions.resolver.ts
- src/app/loans/loans-view/loans-view.component.html
- src/app/loans/loans.service.ts
- src/app/loans/loans.module.ts
- src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.html
- src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.scss
- src/assets/translations/cs-CS.json
- src/assets/translations/lt-LT.json
- src/app/loans/loans-view/working-capital/loan-breach-actions-tab/loan-breach-actions-tab.component.ts
- src/assets/translations/ko-KO.json
- src/assets/translations/es-CL.json
- src/assets/translations/de-DE.json
- src/assets/translations/it-IT.json
- src/assets/translations/es-MX.json
d7e90d8 to
719116d
Compare
719116d to
b777ee3
Compare
Description
Now that we can have Breach for Working Capital loans, we can use the Breach actions in this case pause action
Related issues and discussion
WEB-657
Screenshots
Screen.Recording.2026-06-14.at.9.42.20.PM.mov
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
Release Notes