import { Injectable } from '@nestjs/common'; import { IncomeRange, IncomeSource, JobCategory, JobSector, PoiType } from '../enums'; import { KycMetadataResponseDto, MetadataOptionDto } from '../dtos/response'; @Injectable() export class MetadataService { getKycOnboardMetadata(): KycMetadataResponseDto { return { poiTypes: this.enumToOptions(PoiType, { [PoiType.IQA]: 'Iqama (Resident ID)', [PoiType.NAT]: 'National ID', }), jobSectors: this.enumToOptions(JobSector, { [JobSector.GOVERNMENT_SECTOR]: 'Government Sector', [JobSector.HOME_MAKER]: 'Home Maker', [JobSector.MILITARY]: 'Military', [JobSector.PRIVATE_SECTOR]: 'Private Sector', [JobSector.RETIRED]: 'Retired', [JobSector.SELF_EMPLOYED]: 'Self Employed', [JobSector.STUDENT]: 'Student', [JobSector.HOUSEHOLD_LABOR]: 'Household Labor', [JobSector.UNEMPLOYED]: 'Unemployed', }), incomeSources: this.enumToOptions(IncomeSource, { [IncomeSource.SALARY]: 'Salary', [IncomeSource.ANCESTRAL]: 'Ancestral/Inheritance', [IncomeSource.REAL_ESTATE]: 'Real Estate', [IncomeSource.INVESTMENT_RETURNS]: 'Investment Returns', [IncomeSource.RENTAL_INCOME]: 'Rental Income', [IncomeSource.OTHER]: 'Other', }), jobCategories: this.enumToOptions(JobCategory, { [JobCategory.ASSISTANT_MINISTER]: 'Assistant Minister', [JobCategory.DEPUTY_MINISTER]: 'Deputy Minister', [JobCategory.UNDER_SECRETARY]: 'Under Secretary', [JobCategory.GENERAL_MANAGER]: 'General Manager', [JobCategory.CHAIRMAN]: 'Chairman', [JobCategory.MANAGER]: 'Manager', [JobCategory.PROFESSOR]: 'Professor', [JobCategory.HEAD_OF_COURT]: 'Head of Court', [JobCategory.JUDGE]: 'Judge', [JobCategory.LAWYER]: 'Lawyer', [JobCategory.SCIENTIST]: 'Scientist', [JobCategory.NOTARY]: 'Notary', [JobCategory.BUSINESSMAN]: 'Businessman', [JobCategory.MERCHANT]: 'Merchant', [JobCategory.PHARMACIST]: 'Pharmacist', [JobCategory.DOCTOR]: 'Doctor', [JobCategory.MEDICAL_TECHNICIAN]: 'Medical Technician', [JobCategory.NURSE]: 'Nurse', [JobCategory.ENGINEER]: 'Engineer', [JobCategory.CHEMIST]: 'Chemist', [JobCategory.CONTRACTOR]: 'Contractor', [JobCategory.AUDITOR_ACCOUNTANT]: 'Auditor/Accountant', [JobCategory.RESEARCHER]: 'Researcher', [JobCategory.ACCOUNTANT]: 'Accountant', [JobCategory.JOURNALIST]: 'Journalist', [JobCategory.DESIGNER]: 'Designer', [JobCategory.COMPUTER_SPECIALIST]: 'Computer Specialist', [JobCategory.TRANSLATOR]: 'Translator', [JobCategory.TEACHER]: 'Teacher', [JobCategory.PILOT]: 'Pilot', [JobCategory.HOST]: 'Host', [JobCategory.OFFICER]: 'Officer', [JobCategory.SOLDIER]: 'Soldier', [JobCategory.RETIRED]: 'Retired', [JobCategory.SALESMAN]: 'Salesman', [JobCategory.AUTHOR]: 'Author', [JobCategory.CRAFTSMAN]: 'Craftsman', [JobCategory.SECURITY]: 'Security', [JobCategory.LABORER]: 'Laborer', [JobCategory.DRIVER]: 'Driver', [JobCategory.FARMER]: 'Farmer', [JobCategory.HOUSEWIFE]: 'Housewife', [JobCategory.DIPLOMAT]: 'Diplomat', [JobCategory.STUDENT]: 'Student', [JobCategory.FREELANCER]: 'Freelancer', [JobCategory.SHEPHERD]: 'Shepherd', [JobCategory.HOUSEMAID_OR_BABYSITTER]: 'Housemaid/Babysitter', [JobCategory.CAPTAIN]: 'Captain', [JobCategory.AMBASSADOR]: 'Ambassador', [JobCategory.MARKETING]: 'Marketing', [JobCategory.CONSULTING]: 'Consulting', [JobCategory.SUPERVISOR]: 'Supervisor', [JobCategory.BANKER]: 'Banker', [JobCategory.BODYGUARD_OR_PERSONAL_ASSISTANT]: 'Bodyguard/Personal Assistant', }), incomeRanges: this.enumToOptions(IncomeRange, { [IncomeRange.BELOW_2000]: 'SAR 2,000 and below', [IncomeRange.RANGE_2000_5000]: 'SAR 2,000 to 5,000', [IncomeRange.RANGE_5000_10000]: 'SAR 5,000 to 10,000', [IncomeRange.RANGE_10000_20000]: 'SAR 10,000 to 20,000', [IncomeRange.ABOVE_20000]: 'SAR 20,000 and above', }), }; } private enumToOptions(enumObj: any, labels: Record): MetadataOptionDto[] { return Object.keys(enumObj).map((key) => ({ value: enumObj[key], label: labels[enumObj[key]] || enumObj[key], })); } }