feat: non-individual entity UI improvements — hide individual-only sections, fix legal form display, send extended fields to API

- Hide Family Members tab/section for non-individual entities in client view, create flow, and preview
- Hide Financial & Classification section for non-individual entities in personal data and preview
- Fix legal form column in clients list — fetch legalForm from client API for correct display
- Add person/business icon before client name in list rows
- Remove unsupportedNpd filter — send authorizedSignatory, additionalInfo, dateOfRegistration to API
- Add registration number format hint (mat-hint) based on constitution type
- Add spacing between verification row and constitution type dropdowns
- Reduce table cell padding and prevent action buttons from being clipped
- Add missing MPL-2.0 license headers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aditya
2026-04-04 15:10:51 +05:30
co-authored by Claude Opus 4.6
parent ab01111424
commit b890d24bb7
522 changed files with 51991 additions and 21885 deletions
+7 -23
View File
@@ -31,30 +31,14 @@
<!-- Default mode for Shell -->
<!-- Security Bar -->
<div class="security-bar">
<div class="security-bar-left">
<!-- Row 1: Brand + IDRBT -->
<div class="security-bar-row1">
<div class="sec-brand">
<span class="sec-brand-name">CBS<em>Nexora</em></span>
<span class="sec-brand-tagline">Core Banking Solution — Next-Gen Operations & Reporting Architecture</span>
<span class="sec-brand-delimiter">|</span>
<span class="sec-brand-idrbt">In compliance with guidelines issued by Institute for Development and Research in Banking Technology (Established by Reserve Bank of India)</span>
</div>
<div class="sec-item">
<span class="sec-dot"></span>
<span class="sec-label">SSL/TLS</span>
<span class="sec-val">256-bit Encrypted</span>
</div>
<div class="sec-item">
<span class="sec-dot"></span>
<span class="sec-label">ISO 27001</span>
<span class="sec-val">Certified</span>
</div>
<div class="sec-item">
<span class="sec-dot amber"></span>
<span class="sec-label">Session expires in</span>
<span class="session-timer">{{ sessionTimerDisplay }}</span>
</div>
</div>
<div class="security-bar-right">
<span class="sec-version">v{{ versions.mifos }}</span>
<span class="env-tag">PROD</span>
</div>
</div>
@@ -155,12 +139,12 @@
<div class="sc-chip">
<span class="sc-icon">&#9878;&#65039;</span>
<span class="sc-label">Grievance Officer</span>
<span class="sc-val">Aditya Vyas &middot; grievance&#64;lincpay.in</span>
<span class="sc-val">Aditya Vyas &middot; grievance&#64;cbsnexora.in</span>
</div>
<div class="sc-chip">
<span class="sc-icon">&#9993;&#65039;</span>
<span class="sc-label">Email</span>
<span class="sc-val">support&#64;lincpay.in</span>
<span class="sc-val">support&#64;cbsnexora.in</span>
</div>
<a class="sc-chip sc-chat" href="#">
<span class="sc-icon">&#128172;</span>
@@ -172,7 +156,7 @@
<div class="footer-divider"></div>
<div class="footer-bottom">
<span class="fb-copy">&copy; {{ currentYear }} LincPay Solutions Pvt. Ltd. All rights reserved.</span>
<span class="fb-copy">&copy; {{ currentYear }} CBS Nexora. All rights reserved.</span>
<div class="fb-links">
<a href="#">Terms</a>
<a href="#">Privacy</a>
+52 -25
View File
@@ -15,8 +15,10 @@ $accent-2: #10b981;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 0.5rem;
gap: 0;
width: 100%;
max-height: 200px;
overflow: hidden;
font-size: 0.75rem;
color: var(--md-sys-color-on-surface-variant, #44474e);
@@ -57,13 +59,23 @@ $accent-2: #10b981;
// ===== Security Bar =====
.security-bar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 5px 40px;
flex-direction: column;
padding: 3px 40px;
background: #f8f9fa;
border-top: 1px solid rgba(0, 0, 0, 0.06);
border-bottom: 1px solid rgba(0, 0, 0, 0.06);
margin-top: 24px;
margin-top: 0;
}
.security-bar-row1 {
display: flex;
align-items: center;
}
.security-bar-row2 {
display: flex;
justify-content: space-between;
align-items: center;
}
.security-bar-left,
@@ -102,6 +114,21 @@ $accent-2: #10b981;
white-space: nowrap;
}
.sec-brand-delimiter {
font-size: 12px;
color: rgba(0, 0, 0, 0.2);
margin: 0 6px;
font-weight: 300;
}
.sec-brand-idrbt {
font-size: 9px;
color: #0ea5e9;
white-space: nowrap;
font-weight: 600;
letter-spacing: 0.02em;
}
.sec-item {
display: inline-flex;
align-items: center;
@@ -166,7 +193,7 @@ $accent-2: #10b981;
display: flex;
align-items: center;
gap: 12px;
padding: 6px 40px;
padding: 3px 40px;
background: linear-gradient(90deg, #0d3d78 0%, #1a5276 50%, #0d3d78 100%);
}
@@ -247,8 +274,8 @@ $accent-2: #10b981;
.footer-top {
display: flex;
justify-content: space-between;
gap: 40px;
padding: 32px 40px 24px;
gap: 20px;
padding: 8px 40px 6px;
position: relative;
z-index: 1;
}
@@ -262,7 +289,7 @@ $accent-2: #10b981;
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 10px;
margin-bottom: 4px;
}
.f-logomark {
@@ -302,9 +329,9 @@ $accent-2: #10b981;
}
.footer-website {
font-size: 12px;
font-size: 11px;
color: #5ec9f8;
margin: 6px 0 0;
margin: 2px 0 0;
font-weight: 500;
letter-spacing: 0.3px;
}
@@ -319,25 +346,25 @@ $accent-2: #10b981;
.footer-col {
display: flex;
flex-direction: column;
gap: 6px;
gap: 2px;
min-width: 130px;
}
.footer-col-title {
font-size: 11px;
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.8px;
color: rgba(255, 255, 255, 0.45);
margin: 0 0 4px;
margin: 0 0 2px;
}
.footer-link {
font-size: 13px;
font-size: 12px;
color: rgba(255, 255, 255, 0.75);
text-decoration: none;
transition: color 0.15s;
line-height: 1.6;
line-height: 1.5;
&:hover {
color: #5ec9f8;
@@ -346,7 +373,7 @@ $accent-2: #10b981;
// ── Regulatory & Legal Section ──
.regulatory-section {
padding: 14px 40px;
padding: 4px 40px;
position: relative;
z-index: 1;
}
@@ -357,13 +384,13 @@ $accent-2: #10b981;
text-transform: uppercase;
letter-spacing: 0.8px;
color: rgba(255, 255, 255, 0.45);
margin: 0 0 8px;
margin: 0 0 2px;
}
.regulatory-grid {
display: flex;
flex-wrap: wrap;
gap: 6px;
gap: 4px;
}
.reg-card {
@@ -440,7 +467,7 @@ $accent-2: #10b981;
// ── Quick Navigation Section ──
.quicknav-section {
padding: 14px 40px;
padding: 4px 40px;
position: relative;
z-index: 1;
}
@@ -451,13 +478,13 @@ $accent-2: #10b981;
text-transform: uppercase;
letter-spacing: 0.8px;
color: rgba(255, 255, 255, 0.45);
margin: 0 0 8px;
margin: 0 0 4px;
}
.quicknav-grid {
display: flex;
flex-wrap: wrap;
gap: 6px;
gap: 4px;
}
.qn-card {
@@ -508,7 +535,7 @@ $accent-2: #10b981;
// ── Support & Contact Section ──
.support-section {
padding: 10px 40px;
padding: 4px 40px;
position: relative;
z-index: 1;
}
@@ -519,7 +546,7 @@ $accent-2: #10b981;
text-transform: uppercase;
letter-spacing: 0.8px;
color: rgba(255, 255, 255, 0.45);
margin: 0 0 8px;
margin: 0 0 4px;
}
.support-row {
@@ -595,7 +622,7 @@ $accent-2: #10b981;
display: flex;
align-items: center;
gap: 16px;
padding: 10px 40px;
padding: 5px 40px;
position: relative;
z-index: 1;
flex-wrap: wrap;
+10 -2
View File
@@ -169,7 +169,11 @@ import {
faSlidersH,
faPrint,
faCertificate,
faPaperclip
faPaperclip,
faCalendarTimes,
faStar,
faCrop,
faStamp
} from '@fortawesome/free-solid-svg-icons';
/**
@@ -345,7 +349,11 @@ export class IconsModule {
faSlidersH,
faPrint,
faCertificate,
faPaperclip
faPaperclip,
faCalendarTimes,
faStar,
faCrop,
faStamp
);
}
}
+180 -12
View File
@@ -273,8 +273,8 @@ $mono: 'Roboto Mono', 'DM Mono', monospace;
::ng-deep {
.mat-mdc-header-row {
background: #f8fafc;
min-height: 40px;
height: 40px;
min-height: 34px;
height: 34px;
}
.mat-mdc-header-cell {
@@ -284,31 +284,37 @@ $mono: 'Roboto Mono', 'DM Mono', monospace;
letter-spacing: 0.06em;
color: $text-muted;
border-bottom: 1px solid $border;
padding: 0 16px;
padding: 0 12px;
}
// Rows
.mat-mdc-row {
min-height: 44px;
height: 44px;
min-height: 36px;
height: 36px;
border-bottom: 1px solid #f1f5f9;
transition: background 0.1s;
&:last-child { border-bottom: none; }
&:nth-child(even) {
background: #fafbfc;
}
}
.table-row {
cursor: pointer;
&:hover {
background: #f0f7ff;
background: #eef4ff !important;
}
}
.mat-mdc-cell {
font-size: 13px;
font-weight: 400;
color: $text;
padding: 0 16px;
padding: 0 12px;
font-family: 'Inter', 'Roboto', -apple-system, sans-serif;
}
}
}
@@ -316,7 +322,9 @@ $mono: 'Roboto Mono', 'DM Mono', monospace;
.cell-link {
color: $brand;
font-weight: 500;
font-size: 13px;
cursor: pointer;
font-family: 'Inter', 'Roboto', -apple-system, sans-serif;
&:hover { text-decoration: underline; }
}
@@ -324,20 +332,180 @@ $mono: 'Roboto Mono', 'DM Mono', monospace;
.cell-mono {
font-family: $mono;
font-size: 12px;
font-weight: 400;
letter-spacing: 0.02em;
color: #475569;
}
// ===== Status Badge =====
.status-badge {
display: inline-flex;
align-items: center;
font-size: 10px;
justify-content: center;
gap: 5px;
font-size: 11px;
font-weight: 600;
font-family: $mono;
padding: 3px 10px;
border-radius: 4px;
letter-spacing: 0.03em;
padding: 3px 12px;
border-radius: 12px;
letter-spacing: 0.02em;
text-transform: capitalize;
white-space: nowrap;
font-family: 'Inter', 'Roboto', -apple-system, sans-serif;
&::before {
content: '';
width: 6px;
height: 6px;
border-radius: 50%;
flex-shrink: 0;
}
}
// Status colors via statusLookup pipe classes
::ng-deep {
.status-active {
background: #ecfdf5 !important;
color: #059669 !important;
&::before { background: #059669; }
}
.status-active-overdue,
.status-closed {
background: #fef2f2 !important;
color: #dc2626 !important;
&::before { background: #dc2626; }
}
.status-submitted-and-pending-approval,
.status-approved {
background: #fffbeb !important;
color: #d97706 !important;
&::before { background: #d97706; }
}
.status-overpaid {
background: #eff6ff !important;
color: #2563eb !important;
&::before { background: #2563eb; }
}
}
// ===== Legal Form Badge =====
.row-legal-icon {
font-size: 18px;
width: 18px;
height: 18px;
vertical-align: middle;
margin-right: 6px;
&.person { color: #2563eb; }
&.entity { color: #7c3aed; }
}
.legal-form-badge {
display: inline-flex;
align-items: center;
font-size: 11px;
font-weight: 600;
padding: 2px 10px;
border-radius: 10px;
letter-spacing: 0.02em;
white-space: nowrap;
&.person {
background: #eff6ff;
color: #2563eb;
}
&.entity {
background: #faf5ff;
color: #7c3aed;
}
}
// ===== Profile Completion Steps =====
.profile-steps {
display: flex;
align-items: center;
gap: 4px;
}
.step-dot {
display: inline-flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
border-radius: 50%;
font-size: 9px;
font-weight: 700;
letter-spacing: 0;
cursor: default;
background: #f1f5f9;
color: #94a3b8;
border: 1.5px solid #e2e8f0;
transition: all 0.15s;
&.done {
background: #ecfdf5;
color: #059669;
border-color: #a7f3d0;
}
}
// ===== Action Icons =====
.action-icons {
display: flex;
align-items: center;
gap: 8px;
white-space: nowrap;
}
.action-chip {
display: inline-flex !important;
align-items: center;
gap: 4px;
min-width: unset !important;
padding: 0 10px !important;
height: 28px !important;
font-size: 12px !important;
font-weight: 500 !important;
letter-spacing: 0.02em;
border-radius: 6px !important;
line-height: 28px !important;
.mat-icon {
font-size: 15px;
width: 15px;
height: 15px;
margin-right: 2px;
}
&--view {
color: #1e40af;
background: #eff6ff;
border: 1px solid #93c5fd;
&:hover {
background: #dbeafe;
border-color: #60a5fa;
}
}
&--edit {
color: #92400e;
background: #fffbeb;
border: 1px solid #fcd34d;
&:hover {
background: #fef3c7;
border-color: #fbbf24;
}
}
}
// ===== Empty State =====