Dealer_Onboarding_Backend/src/common/utils/constitutionalNormalize.ts

59 lines
2.0 KiB
TypeScript

import { CONSTITUTIONAL_CHANGE_TYPES } from '../config/constants.js';
const ALL_CHANGE_TYPES = Object.values(CONSTITUTIONAL_CHANGE_TYPES) as string[];
export function isRegisteredConstitutionalChangeType(value: string): boolean {
return ALL_CHANGE_TYPES.includes(value);
}
/**
* Map UI / legacy profile labels to a value that exists on `constitutional_changes.changeType` ENUM.
*/
export function normalizeToConstitutionalChangeType(raw: string | null | undefined): string | null {
const s = String(raw || '').trim();
if (!s) return null;
if (isRegisteredConstitutionalChangeType(s)) return s;
const compact = s
.toLowerCase()
.replace(/\./g, '')
.replace(/\s+/g, ' ')
.trim();
if (
(compact.includes('private') && (compact.includes('ltd') || compact.includes('limited'))) ||
compact === 'pvt ltd' ||
compact === 'pvtltd'
) {
return CONSTITUTIONAL_CHANGE_TYPES.PRIVATE_LIMITED;
}
if (compact.includes('llp')) {
return CONSTITUTIONAL_CHANGE_TYPES.LLP;
}
if (compact.includes('partnership')) {
return CONSTITUTIONAL_CHANGE_TYPES.PARTNERSHIP;
}
if (compact.includes('proprietorship') || compact === 'sole proprietorship') {
return CONSTITUTIONAL_CHANGE_TYPES.PROPRIETORSHIP;
}
const exact = ALL_CHANGE_TYPES.find((v) => v.toLowerCase() === s.toLowerCase());
return exact || null;
}
/**
* Maps `constitutional_changes.changeType` → `dealers.constitutionType` when the workflow completes.
* Returns `null` when the change type does not represent a single target legal structure (skip master update).
*/
export function mapConstitutionalChangeTypeToDealerProfile(changeType: string): string | null {
const t = String(changeType || '').trim();
if (!t) return null;
const structureTargets = [
CONSTITUTIONAL_CHANGE_TYPES.PROPRIETORSHIP,
CONSTITUTIONAL_CHANGE_TYPES.PARTNERSHIP,
CONSTITUTIONAL_CHANGE_TYPES.LLP,
CONSTITUTIONAL_CHANGE_TYPES.PRIVATE_LIMITED
];
if (structureTargets.includes(t as (typeof structureTargets)[number])) return t;
return null;
}