{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./@master/annotation/MetaClass.ts","webpack:///./@core/components/header/TheHeader.vue?0891","webpack:///./@master/model/kyc-form/Dependant.ts","webpack:///./@master/model/kyc-form/need-analysis/NeedsBase.ts","webpack:///./@core/components/TheFooter.vue?329b","webpack:///./@core/model/recruit/forms/BusinessInterestShareholding.ts","webpack:///./@master/model/kyc-form/need-analysis/health/PersonalAccidentNeeds.ts","webpack:///./@core/pages/userProfile/route/structure.ts","webpack:///./@core/pages/userProfile/route/index.ts","webpack:///./@master/annotation/Ignore.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/protection/DependantsProtectionStructure.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/EducationStructure.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/others/OthersStructure.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/ThePrioritiesNeeds.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/protection/CriticalIllnessProtectionStructure.ts","webpack:///./@core/pages/client-management/model/metadata/GiOthers.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/SavingsStructure.ts","webpack:///./@master/model/kyc-form/RecommendationBasis.ts","webpack:///./@core/model/recruit/FormBase.ts","webpack:///./@core/components/header/assets/client-list.svg","webpack:///./@core/model/common/PrincipalMeta.ts","webpack:///./@master/model/Base.ts","webpack:///./@master/annotation/Json.ts","webpack:///./@master/model/options/WrapOptions.ts","webpack:///./@master/model/options/DefaultOptions.ts","webpack:///./@company-common/model/kyc-form/existing-plans/CustomExistingPortfolioV2.ts","webpack:///./@core/model/recruit/forms/Personal.ts","webpack:///./@core/components/AppLoader.vue?a889","webpack:///./@core/components/AppLoader.vue","webpack:///./@core/components/AppLoader.vue?ffc4","webpack:///./@core/components/AppLoader.vue?34e6","webpack:///./@master/model/kyc-form/ILPPortfolioV2.ts","webpack:///./@master/logic/PretransactionsLogic.ts","webpack:///./@core/pages/bsc/api/services/BscService.ts","webpack:///./@master/model/options/NBRStatusOptions.ts","webpack:///./@core/model/recruit/forms/PrevEmploymentInquiry.ts","webpack:///./@core/pages/client-management/model/ClientPersonal.ts","webpack:///./@master/model/kyc-form/product/BasicProductV2.ts","webpack:///./@core/model/common/UserMetaList.ts","webpack:///./@master/annotation/MaxChar.ts","webpack:///./@master/model/kyc-form/product/InvestmentProduct.ts","webpack:///./@company-common/model/kyc-form/CustomDependant.ts","webpack:///./@master/model/kyc-form/FormKeyConverter.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingInvestDeclaration.ts","webpack:///./@master/model/options/TransactionTypeOptions.ts","webpack:///./@master/model/options/MaritalStatusOptions.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingPortfolioDeclaration.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingInvestmentV2.ts","webpack:///./@core/pages/client-management/model/ClientProfile.ts","webpack:///./@core/components/header/assets/admin.svg","webpack:///./@master/annotation/Pointer.ts","webpack:///./@core/components/header/assets/faq.svg","webpack:///./@core/model/recruit/forms/QualificationEmployment.ts","webpack:///./@master/model/options/PolicyRoles.ts","webpack:///./@core/pages/scheduler/api/models/AdhocReportRequest.ts","webpack:///./@core/pages/scheduler/api/models/ScheduleTimeDto.ts","webpack:///./@core/pages/scheduler/api/services/AdhocReportService.ts","webpack:///./@core/pages/scheduler/api/services/ScheduleService.ts","webpack:///./@master/model/kyc-form/product/ProductBase.ts","webpack:///./@master/model/options/VenueOptions.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./@master/model/ClientBase.ts","webpack:///./@master/model/kyc-form/external/BeneficialOwnerParticulars.ts","webpack:///./@core/pages/clientManagement-v2/router/index.ts","webpack:///./@master/model/options/RaceOptions.ts","webpack:///./@master/services/ModelProxyService.ts","webpack:///./@master/model/kyc-form/ClientAssumptions.ts","webpack:///./@master/model/kyc-form/ClientDeclaration.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingPortfolio.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingInvestment.ts","webpack:///./@master/model/kyc-form/ILPPortfolio.ts","webpack:///./@master/model/kyc-form/need-analysis/savings/EducationNeedsDetail.ts","webpack:///./@master/model/kyc-form/KYCForm.ts","webpack:///./@core/pages/adminProductList/model/ProductFilterRequest.ts","webpack:///./@core/model/recruit/forms/EmployerConsent.ts","webpack:///./@master/model/kyc-form/AdviserDetails.ts","webpack:///./@core/model/recruit/forms/Shared.ts","webpack:///./@master/services/DateService.ts","webpack:///./@master/model/kyc-form/external/PoliticalExposedPerson.ts","webpack:///./@core/model/recruit/forms/FitAndProper.ts","webpack:///./@core/components/header/assets/admin-settings.svg","webpack:///./src/App.vue?c650","webpack:///./@master/model/kyc-form/CKA.ts","webpack:///./@master/model/kyc-form/TrustedIndividual.ts","webpack:///./@master/model/common/Meta.ts","webpack:///./@core/components/header/assets/videocam.svg","webpack:///./@core/components/AppDialog.vue?5c58","webpack:///./@core/components/AppDialog.vue","webpack:///./@core/components/AppDialog.vue?3282","webpack:///./@core/components/AppDialog.vue?5fdf","webpack:///./@master/model/options/IdentityTypeOptions.ts","webpack:///./@core/components/header/assets/new_business.svg","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/EmploymentMeta.ts","webpack:///./@core/components/AppDialog.vue?4c8e","webpack:///./@master/annotation/RawKey.ts","webpack:///./@core/pages/adminProductList/api/services/ProductService.ts","webpack:///./@master/model/options/GenderOptions.ts","webpack:///./@master/model/kyc-form/RecommendationV2.ts","webpack:///./@master/annotation/SummaryField.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingPortfolioSummary.ts","webpack:///./@master/model/kyc-form/AdviserDeclaration.ts","webpack:///./@core/model/recruit/forms/GeneralDeclaration.ts","webpack:///./@core/logic/Validation.ts","webpack:///./@core/pages/account/model/AccountMeta.ts","webpack:///./@master/model/common/MetaList.ts","webpack:///./@core/components/AppSwitch.vue?7884","webpack:///./@core/components/AppSwitch.vue","webpack:///./@core/components/AppSwitch.vue?653b","webpack:///./@core/components/AppSwitch.vue?c6c8","webpack:///./@master/model/kyc-form/finances/Budget.ts","webpack:///./@master/model/kyc-form/AIOI.ts","webpack:///./@master/model/kyc-form/need-analysis/health/HospitalizationNeeds.ts","webpack:///./@master/model/kyc-form/need-analysis/others/OtherNeeds.ts","webpack:///./@master/model/kyc-form/need-analysis/health/LossOfIncomeNeeds.ts","webpack:///./@master/model/kyc-form/need-analysis/health/OutpatientExpenses.ts","webpack:///./@master/model/kyc-form/need-analysis/protection/CriticalIllnessProtectionClient.ts","webpack:///./@master/model/kyc-form/need-analysis/protection/DeathProtectionClient.ts","webpack:///./@master/model/kyc-form/need-analysis/protection/DisabilityProtectionClient.ts","webpack:///./@master/model/kyc-form/need-analysis/protection/DisabilityIncomeProtectionClient.ts","webpack:///./@master/model/kyc-form/need-analysis/savings/EducationNeeds.ts","webpack:///./@master/model/kyc-form/need-analysis/savings/InvestmentNeeds.ts","webpack:///./@master/model/kyc-form/need-analysis/savings/RetirementNeeds.ts","webpack:///./@master/model/kyc-form/need-analysis/savings/SavingsNeeds.ts","webpack:///./@master/model/kyc-form/need-analysis/savings/SpecificGoalsNeeds.ts","webpack:///./@master/model/kyc-form/InvestmentOption.ts","webpack:///./@master/model/kyc-form/Switching.ts","webpack:///./@master/model/kyc-form/ECDD.ts","webpack:///./@master/model/kyc-form/MyInfo.ts","webpack:///./@master/model/kyc-form/AMLDoc.ts","webpack:///./@master/model/kyc-form/BeneficialOwner.ts","webpack:///./@master/model/kyc-form/PropertyFinancing.ts","webpack:///./@master/model/kyc-form/need-analysis/protection/LongTermProtectionClient.ts","webpack:///./@master/model/kyc-form/AI.ts","webpack:///./@master/model/kyc-form/external/PoliticalExposedPersonDeclaration.ts","webpack:///./@master/model/kyc-form/need-analysis/protection/DependantsProtection.ts","webpack:///./@master/model/kyc-form/ThirdPartyPayor.ts","webpack:///./@master/model/kyc-form/SwitchingPolicy.ts","webpack:///./@master/model/kyc-form/SwitchingWithPolicies.ts","webpack:///./@master/model/kyc-form/SignatureInfo.ts","webpack:///./@master/model/kyc-form/KYCClient.ts","webpack:///./@master/model/kyc-form/finances/CashFlow.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/protection/DisabilityProtectionStructure.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/RetirementStructure.ts","webpack:///./@core/pages/client-management/model/metadata/GiTravel.ts","webpack:///./@master/model/ArrayBase.ts","webpack:///./@core/components/header/assets/kyc-view.svg","webpack:///./@master/model/options/CitizenshipOptions.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/accidentHealth/HospitalisationStructure.ts","webpack:///./@core/pages/client-management/model/ClientInfoBase.ts","webpack:///./@core/model/recruit/forms/BDMAssessment.ts","webpack:///./@core/model/recruit/forms/LetterOfUndertaking.ts","webpack:///./@core/pages/client-management/api/services/ClientDependantsService.ts","webpack:///./@core/components/AppSwitch.vue?d52a","webpack:///./@core/components/header/AppDynamicIconHeader.vue?5feb","webpack:///./@master/model/options/FrequencyOptions.ts","webpack:///./@core/components/header/assets/menu.svg","webpack:///./@master/model/kyc-form/need-analysis/math.ts","webpack:///./@core/components/AppClientForm.vue?cbab","webpack:///./@core/components/AppClientForm.vue","webpack:///./@core/components/AppClientForm.vue?3e7c","webpack:///./@core/components/AppClientForm.vue?e9f8","webpack:///./@core/pages/client-management/model/ProductMetaData.ts","webpack:///./@master/model/options/ExamTypeOptions.ts","webpack:///./@master/model/common/ProductMeta.ts","webpack:///./@master/model/kyc-form/finances/NetWorth.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingInvestSummary.ts","webpack:///./@core/pages/client-management/model/metadata/GiMotor.ts","webpack:///./@core/components/header/assets/notice.svg","webpack:///./@core/pages/new-business-register/model/PolicyClientMeta.ts","webpack:///./@master/model/kyc-form/need-analysis/protection/DependantsProtectionClient.ts","webpack:///./@core/model/recruit/forms/CPFAuthorization.ts","webpack:///./@master/model/kyc-form/product/BasicProduct.ts","webpack:///./@core/pages/adminProductList/model/ProductModel.ts","webpack:///./@master/model/options/RelationshipOptions.ts","webpack:///./@core/components/header/assets/logout.svg","webpack:///./@core/openapi/ApiError.ts","webpack:///./@core/openapi/OpenAPI.ts","webpack:///./@core/openapi/request.ts","webpack:///./src/router/new-business-register/NewBusinessRegisterRoutes.ts","webpack:///./@core/pages/client-management/api/services/ClientService.ts","webpack:///./@core/model/recruit/FormsList.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/protection/DeathProtectionStructure.ts","webpack:///./@core/annotation/ExpandableArray.ts","webpack:///./@core/pages/client-management/model/metadata/GiHomeContents.ts","webpack:///./@core/pages/client-management/model/metadata/CIS.ts","webpack:///./@core/pages/client-management/model/metadata/EmployeeBenefit.ts","webpack:///./@core/pages/client-management/model/metadata/FBS.ts","webpack:///./@core/pages/client-management/model/ClientProductILPRP.ts","webpack:///./@core/pages/client-management/model/ClientProductILPSP.ts","webpack:///./@core/pages/client-management/model/ClientProductRider.ts","webpack:///./@core/pages/client-management/model/metadata/LifeInsurance.ts","webpack:///./@core/pages/client-management/model/metadata/Others.ts","webpack:///./@core/pages/client-management/model/ClientProductMeta.ts","webpack:///./@master/annotation/Default.ts","webpack:///./@master/model/kyc-form/existing-plans/ExistingPortfolioV2.ts","webpack:///./@core/pages/companyDetails/model/CompanyDetailsMeta.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/protection/DisabilityIncomeProtectionStructure.ts","webpack:///./@core/model/recruit/forms/TransferRulesAcknowledgement.ts","webpack:///./@master/model/kyc-form/SimplePersonalDetails.ts","webpack:///./@master/model/kyc-form/PersonalDetails.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/InvestmentStructure.ts","webpack:///./@core/components/header/assets/Icon_Resources.svg","webpack:///./@master/model/options/EmploymentTypeOptions.ts","webpack:///./@master/model/kyc-form/RPA.ts","webpack:///./@core/model/recruit/forms/RecruitManagerAssessment.ts","webpack:///./@master/enum/MaxCharsEnum.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/protection/LongTermCareProtectionStructure.ts","webpack:///./@company-common/model/kyc-form/CustomRPA.ts","webpack:///./@core/components/AppLoader.vue?e231","webpack:///./@core/pages/new-business-register/api/models/ClientPolicyReportRequestDTO.ts","webpack:///./@core/pages/new-business-register/api/models/DownloadCsvDto.ts","webpack:///./@core/pages/new-business-register/api/models/ReportGeneratorDto.ts","webpack:///./@core/pages/new-business-register/api/models/ReportLogDTO.ts","webpack:///./@core/pages/new-business-register/api/models/ScheduleTimeDto.ts","webpack:///./@core/pages/new-business-register/api/services/ClientPolicyService.ts","webpack:///./@core/model/recruit/forms/SecuritiesDealing.ts","webpack:///./@core/pages/activity/model/ActivityCard.ts","webpack:///./@core/components/header/assets/Icon_Report.svg","webpack:///./@master/services/RiskRatingService.ts","webpack:///./@core/services/API.ts","webpack:///./@company-common/config/ProjectSettings.ts","webpack:///./src/config/IfamVersion.ts","webpack:///./src/config/ProjectVersion.ts","webpack:///./@company-common/config/ProjectInfo.ts","webpack:///./@core/model/SharedVariable.ts","webpack:///./@company-common/options/ContractTypeOptions.ts","webpack:///./@company-common/services/AdviserService.ts","webpack:///./@core/services/DefaultUserProfileService.ts","webpack:///./@master/services/UIOptionsService.ts","webpack:///./src/DIContainer.ts","webpack:///./src/App.vue?2ce7","webpack:///./@core/components/header/TheHeader.vue?ab6b","webpack:///./@core/components/header/AppDynamicHeader.vue?fdb8","webpack:///./@core/components/header/AppDynamicHeader.vue","webpack:///./@core/components/header/AppDynamicHeader.vue?cb0d","webpack:///./@core/components/header/AppDynamicHeader.vue?a6cd","webpack:///./@core/components/header/AppDynamicIconHeader.vue?d9ca","webpack:///./@core/components/header/AppDynamicIconHeader.vue","webpack:///./@core/components/header/AppDynamicIconHeader.vue?499d","webpack:///./@core/components/header/AppDynamicIconHeader.vue?6fde","webpack:///./@core/components/header/TheHeader.vue","webpack:///./@core/components/header/TheHeader.vue?36cc","webpack:///./@core/components/header/TheHeader.vue?2f6d","webpack:///./@core/components/TheFooter.vue?f04d","webpack:///./@core/components/TheFooter.vue","webpack:///./@core/components/TheFooter.vue?1fd0","webpack:///./@core/components/TheFooter.vue?7ef1","webpack:///./@core/services/UIService.ts","webpack:///./@core/model/UIOptions.ts","webpack:///./src/App.vue","webpack:///./src/App.vue?0ab4","webpack:///./src/App.vue?bff9","webpack:///./@master/model/common/ProductMetaList.ts","webpack:///./@master/model/common/Assumption.ts","webpack:///./@core/model/kyc-form/need-analysis/math.ts","webpack:///./@master/model/kyc-form/FormOptions.ts","webpack:///./@core/pages/adminProductList/model/ProductList.ts","webpack:///./@company-common/model/kyc-form/AdviserDeclaration.ts","webpack:///./@company-common/model/kyc-form/AML.ts","webpack:///./@company-common/model/kyc-form/CustomBOPParticulars.ts","webpack:///./@company-common/model/kyc-form/BeneficialOwner.ts","webpack:///./@company-common/model/kyc-form/finances/Budget.ts","webpack:///./@company-common/model/kyc-form/finances/JParaCashFlow.ts","webpack:///./@company-common/model/kyc-form/finances/NetWorth.ts","webpack:///./@company-common/model/kyc-form/PersonalDetails.ts","webpack:///./@company-common/model/kyc-form/RecommendationBasis.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/health/CustomPersonalAccidentNeeds.ts","webpack:///./@company-common/model/kyc-form/KYCClient.ts","webpack:///./@company-common/model/kyc-form/CustomTrustedIndividual.ts","webpack:///./@master/model/kyc-form/existing-plans/v2/ExistingPortfolioSummary.ts","webpack:///./@master/model/kyc-form/existing-plans/v2/ExistingPortfolioDTO.ts","webpack:///./@company-common/model/kyc-form/existing-plans/v2/CustomExistingPortfolioSummary.ts","webpack:///./@company-common/model/kyc-form/existing-plans/v2/CustomExistingPortfolioDTO.ts","webpack:///./@master/model/kyc-form/existing-plans/v2/ExistingInvestSummary.ts","webpack:///./@master/model/kyc-form/existing-plans/v2/ExistingInvestmentDTO.ts","webpack:///./@company-common/model/kyc-form/CustomRecommendation.ts","webpack:///./@master/model/kyc-form/ILPPortfolioArray.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/protection/CustomDependantsProtectionClient.ts","webpack:///./@company-common/model/kyc-form/KYCForm.ts","webpack:///./src/views/kyc-form/KYCFormStore.ts","webpack:///./@master/model/kyc-pdf/ESubProduct.ts","webpack:///./@master/model/kyc-pdf/ExternalSub.ts","webpack:///./@master/model/kyc-pdf/InternalSub.ts","webpack:///./src/views/kyc-pdf/model/ESub.ts","webpack:///./@master/model/kyc-pdf/NtucNric.ts","webpack:///./src/views/kyc-pdf/FormKeyConverter.ts","webpack:///./@master/model/kyc-pdf/ESignDoc.ts","webpack:///./@master/model/kyc-pdf/ESignSigner.ts","webpack:///./@master/model/kyc-pdf/data/SignPadSigners.ts","webpack:///./@master/model/kyc-pdf/OfficerRemarks.ts","webpack:///./@master/model/kyc-pdf/OfficerApproval.ts","webpack:///./@master/model/ptc/PTCBase.ts","webpack:///./@master/model/kyc-pdf/ManagerEndorsement.ts","webpack:///./@company-common/model/kyc-pdf/CustomManagerEndorsement.ts","webpack:///./@master/model/kyc-pdf/CCBS.ts","webpack:///./@company-common/model/kyc-pdf/CCBSCustom.ts","webpack:///./@company-common/model/kyc-pdf/KYCPdf.ts","webpack:///./@master/model/ptc/PTC.ts","webpack:///./@master/logic/PTCLogicProductRecommendation.ts","webpack:///./src/views/kyc-pdf/KYCPdfStore.ts","webpack:///./src/views/kyc-pdf/model/ptc/PreTransactionalCheck.ts","webpack:///./src/store/KYCSectionStore.ts","webpack:///./src/store/KYCPdfSectionStore.ts","webpack:///./src/views/kyc-pdf/KYCPdfSubmission.ts","webpack:///./src/store/modules/KYCSubmissionStore.ts","webpack:///./@core/pages/bsc/store/BscStore.ts","webpack:///./@master/model/common/ProductFullMetaList.ts","webpack:///./@core/pages/client-management/master-view/ClientInfoStore.ts","webpack:///./@core/pages/compliance/api/services/ComplianceService.ts","webpack:///./@core/pages/compliance/store/ComplianceStore.ts","webpack:///./@core/pages/new-business-register/model/ProductRider.ts","webpack:///./@core/pages/new-business-register/model/ProductILPPremium.ts","webpack:///./@core/pages/new-business-register/model/ProductILPSingle.ts","webpack:///./@core/pages/new-business-register/model/CISPortfolio.ts","webpack:///./@master/model/options/TypeOfServiceOptions.ts","webpack:///./@master/model/options/PaymentMethodOptions.ts","webpack:///./@master/model/options/CurrencyOptions.ts","webpack:///./@core/pages/new-business-register/store/ClientPolicyStore.ts","webpack:///./@core/pages/scheduler/store/ScheduleStore.ts","webpack:///./@core/model/common/PrincipalMetaList.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/ContractDetailsMeta.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/NextOfKinDetailsMeta.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/PersonalDetailsMeta.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/PersonalItemsIssuedMeta.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/RecruitmentChecklistMeta.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/SpouseDetailsMeta.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/UserAdviserDetailsMeta.ts","webpack:///./@core/pages/account/model/PicodedAccountDTO.ts","webpack:///./@core/pages/userProfile/store/UserStore.ts","webpack:///./@core/store/ClientStore.ts","webpack:///./@core/pages/hierarchy-setup/store/HierarchySetupStore.ts","webpack:///./@core/store/ProductStore.ts","webpack:///./@core/pages/individual-myinfo/api/services/UserMyinfoService.ts","webpack:///./@core/pages/individual-myinfo/model/IndividualMyinfo.ts","webpack:///./@core/pages/individual-myinfo/MyinfoStore.ts","webpack:///./src/store/index.ts","webpack:///./@core/logic/RouterRedirect.ts","webpack:///./@core/components/ClientFormWrapper.ts","webpack:///./src/router/userProfile/structure.ts","webpack:///./src/router/userProfile/index.ts","webpack:///./@core/pages/cpd/CpdRoutes.ts","webpack:///./@core/pages/CommissionModule/route/index.ts","webpack:///./src/router/schedule/ScheduleRoute.ts","webpack:///./src/modules/hierarchySetup/router/index.ts","webpack:///./src/router/index.ts","webpack:///./@core/CorePlugins.ts","webpack:///./src/util/UUID.ts","webpack:///./src/main.ts","webpack:///./src/assets/logo.png","webpack:///./@core/components/header/AppDynamicHeader.vue?2361","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/EducationMeta.ts","webpack:///./@master/model/options/LineOfBusinessOptions.ts","webpack:///./@core/pages/account/api/services/AccountService.ts","webpack:///./@core/pages/account/api/services/UserMemberService.ts","webpack:///./@core/model/recruit/forms/NameCardOrder.ts","webpack:///./@core/annotation/Selection.ts","webpack:///./@core/model/recruit/forms/DeclarationClauses.ts","webpack:///./@core/pages/hierarchy-setup/api/services/HierarchySetupService.ts","webpack:///./@master/model/options/NBRProductStatusOptions.ts","webpack:///./@core/assets/mocha-logo.svg","webpack:///./@master/model/options/PaymentModeOptions.ts","webpack:///./@master/model/common/ProductFullMeta.ts","webpack:///./@core/pages/companyDetails/model/CompanyDetailsMetaList.ts","webpack:///./@company-common/model/kyc-form/needs-analysis/structure/accidentHealth/PersonalAccidentStructure.ts","webpack:///./@master/model/TypeBase.ts","webpack:///./@core/model/common/UserMeta.ts","webpack:///./@master/model/kyc-form/product/RiderProduct.ts","webpack:///./@core/pages/userProfile/sections/user-adviser-details-components/model/QualificationMeta.ts","webpack:///./@core/model/recruit/forms/RecruitSubsidyReimbursement.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","metaClassMetadataKey","MetaClassOptions","isArray","MetaClass","options","Reflect","metadata","needToConvertToMetaClass","propertyKey","getMetadata","convertJsonToMetaClass","metaClassMetadata","Array","map","newMetaClass","assignData","keys","values","Dependant","dateService","nric","dob","gender","yearsSupport","relationship","reviewDate","relationshipOptions","genderOptions","this","calculateAge","Date","XSMALL","priorityLevel","h","na","NeedsBase","plan","level","isProtection","needs","inDefaultRate","defaultRate","excludedKeys","filter","includes","BisoTypeOptions","label","BisoStatusOptions","DeclarantTypeOptions","BiRoleTypeOptions","BisoFields","submissionType","declarantType","status","biEntityName","biEntityCountry","biEntityNature","biEffectiveDate","biRole","biRoleSpecified","ownEntityName","ownEntityCountry","ownEntityNature","ownEffectiveDate","ownPercentage","entityPurpose","entityService","entityRole","entityInvolvement","conflicted","agree","BusinessInterestShareholding","signatures","applicant","applicantDate","errs","msg","PersonalAccidentNeeds","id","amount","required1","required2","required3","required4","required5","available1","available2","available3","available4","available5","additionalNotes","sumAvailable","sumRequired","bscReviewerRestriction","systemRole","getChildSections","router","useNewCommissionModule","IProjectSettings","childrenRoute","routes","find","route","children","indexOfCommissionStatements","findIndex","path","shouldDisabled","component","indexOfCommissionStructure","child","functionName","jsonMetadataKey","Ignore","isIgnore","DependantsProtectionStructure","dependantOptions","structure","classes","onChange","oldVal","newVal","depModal","disabledInput","clearModelWhenEmpty","alertMessage","actionConfirm","clear","actionCancel","title","colspan","disabled","dep","shouldDisabledInput","dependantsProtectionClient","preferredHospitalType","rows","EducationStructure","edu","isValid","OthersStructure","ejsClass","validationMsg","prioritiesStructure","sharedNoteKey","items","DeathProtectionStructure","defaultValue","getDPDefaultValue","DisabilityProtectionStructure","getTPDDefaultValue","CriticalIllnessProtectionStructure","getCIDefaultValue","DisabilityIncomeProtectionStructure","getDIDefaultValue","LongTermCareProtectionStructure","dataDetail","optionsDropDown","getPADefaultValue","PersonalAccidentStructure","HospitalisationStructure","RetirementStructure","getRetirementDefaultValue","SavingsStructure","InvestmentStructure","flatMap","getPriorities","targetId","need","kycForm","includeClient2","hasClient2","client1Plan","client1","client2Plan","client2","Set","targetKey","selectedClient","client","priorityInType","priority","item","needsModal","planKey","portfolioPrefix","existingPortfolio","summary","existingPortfolioSummary","selectedPlan","getSelectedPlan","getProfolioPrefix","clientPrefix","getClientPrefix","considerExistingPortfolio","declaration","review","netWorth","totalLiabilities","totalInvestedAssets","totalCashAssets","totalAnnualIncome","cashFlow","annualIncome","cpfOrdinary","cpfSpecial","cpfMedisave","incomePv","clientAssumptions","adjustmentsAssumptionsRetirement","totalIncome","retirementAge","personalDetails","intendedRetirementAge","year","age","yearsToSupport","duration","Math","max","retirementYear","targetStructure","default","defaultTo","CoverageTypeOptions","GiOthers","insuranceClass","coverageType","listOfInsured","grossPremium","gst","commissionRate","commissionPayment","commissionPayable","grossCommissionEarned","RecommendationBasis","liquidityConsideration","liquidityEmergencyFundsDuration","riskConcentration","riskToleranceInTune","timeHorizonProtection","timeHorizonSavings","productDeviationsExistence","liquidityDeviationReason","productDeviationsExistenceReason","productRecommendationElaboration","productRiskAndLimitationsElaboration","recommendationDecision","riskConcentrationDeviationReason","riskToleranceDeviationReason","timeHorizonDeviationReason","FormBase","oid","version","accountOid","activityId","signed","pdfName","formData","forEach","extractArray","extractObject","parent","source","required","fill","resizeArray","entries","fk","fv","assign","saved","some","isArrayDirty","isObjectDirty","log","obj1","obj2","arr1","arr2","dirty","saveable","PrincipalMeta","companyDetailsName","companyDetailsCode","adviserCode","Base","pointers","attr","grabProfile","pointerKey","rawData","editedRawData","beforeExtractData","reduce","snakeCaseKey","JSON","parse","afterExtractData","getPrototypeOf","getterKeys","getOwnPropertyDescriptors","descriptor","concat","propertyKeys","stringify","convertToRawData","Json","needToConvertJson","WrapList","WrapOptions","wrap","YesNoOptions","option","toLowerCase","YesNoBlankOptions","CustomExistingPortfolioV2","summaryFields","grabSummaryField","attrName","SpouseDetails","citizenship","nationalitySpecified","passportNo","occupation","employer","ContactDetails","unit","block","street","building","postalCode","homeNo","mobileNo","email","BankDetails","branch","accountNo","PersonalFields","preferredName","race","raceSpecified","maritalStatus","spouse","contact","bank","Personal","render","_vm","_h","$createElement","_c","_self","attrs","staticClass","staticRenderFns","ILPPortfolioV2","buySwitch","choice","for","frequency","funds","platform","accountNumber","issuerOid","paymentMode","rcmdReferenceId","excludeKeys","defaultMap","element","fund","invAmt","inv_amt","payment_mode","rawFunds","noRankedHighNeedsCheck","foundHigh","noFullDisclosure","discloseArray","every","disclose","budgetLimitBreachedCheck","annualBudget","singleBudget","budgetMoreThanHalfString","totalAnnualisedPremium","totalSinglePremium","budgetLimitBreached","clientRiskProfileConservativeCheck","clientRiskProfile","highRiskCheck","clientIndex","country","recommendations","highRiskCountryList","country2","isFromHighRiskCountry","isOverLimit","product","premiumAmount","sumAssured","array","clientChoice","riders","rider","flat","_clientIndex","Number","isRcmdRiskRatingGreaterThanClientRPA","riskRatingService","rcmdRiskRating","exceedAllowed","rawToValueMap","enumClientRiskProfile","productRiskRating","isSelectedProduct","isInvestmentProduct","isILPType","productType","isInvestmentLinkCategory","productCategory","recommendedRiskProfile","BscService","requestBody","method","body","NBRStatusOptions","PrevEmploymentInquiry","SpokenLangOptions","WrittenLangOptions","EduLevelOptions","IncomeTierOptions","ClientPersonal","nationality","nationalityOthers","nationalityOthers2","residentialAddress1","countryOfResidence1","postalCode1","residentialAddress2","countryOfResidence2","postalCode2","residentialAddress3","countryOfResidence3","postalCode3","mobileNo1","officeNo1","homeNo1","email1","mobileNo2","officeNo2","homeNo2","email2","mobileNo3","officeNo3","homeNo3","email3","employmentStatus","eduLvl","exactDuties","companyName","annualIncomeRange","spokenLang","spokenLangOthers","writtenLang","writtenLangOthers","smokerStatus","medicalConditionOption","medicalCondition","involvedInActivities","activitiesSpecified","BasicProductV2","investmentFunds","rejectValues","Proxy","set","obj","prop","investFunds","mainProductClientChoice","mainAccountIndex","mainAccountNameOid","newInvest","extractData","rawRiders","riderProduct","rawInvestmentFunds","investFund","investment_funds","total","isAcceptedProduct","annualisedPremium","invest","singlePremium","UserMetaList","header","defaultHeader","roles","list","usermeta","systemrole","user","fullname","names","maxChar","MaxChar","charLimit","getMaxChar","InvestmentProduct","mainAccount","jointClientIndex","policyTerm","premiumTerm","YearsSupportMap","Son","Daughter","Father","Mother","male","female","CustomDependant","defaultYearsSupport","toString","involvedRelationship","endYear","yearToSupport","FormKeyConverter","rawKey","reconstructKey","regex","RegExp","test","substr","startsWith","indexOf","replace","formattedKYCForm","convertToFormattedKey","formattedKey","rename","found","match","snakeCaseKycForm","rawKycForm","_oid","convertToRawKey","ExistingInvestDeclaration","reviewReasons","TransactionTypeList","TransactionTypeOptions","transactionType","MaritalStatusOptions","ExistingPortfolioDeclaration","AssetTypeOptions","ExistingInvestmentV2","formOptions","fundName","assetType","ownedBy","investmentAmt","currentRealisableValue","investmentAmtRsp","fundManager","remarks","owner","AccountTypeOptions","StatusOptions","TitleOptions","ClientProfile","accountType","clientOid","clientSince","mobileNumber","personalInfoJson","casualName","printingName","isAccreditedInvestor","isOverseasInvestor","passedCka","ftfDateOfVerification","ftfJobRole","ftfPerformedBy","ftfRemarks","hrcRoles","ato","so","raw","pointerMetadataKey","Pointer","pathToObj","isPointer","getTarget","chain","chainArr","split","setupPointer","pointerArr","root","ancestor","debug","point","watchParent","watchTarget","pathArr","watch","NsStatus","NationalServiceDetails","notApplicable","enlistmentDate","ordDate","AcademicQualification","from","to","institute","anyFilled","val","OtherProfessionalQualification","attain","Employment","position","nature","reason","QualiEmployFields","nationalService","academic","professional","other","employment","maxSize","clone","QualificationEmployment","academicError","acad","hasAcademicError","msgs","PolicyRoles","AdhocReportRequest","typeOfReport","ScheduleTimeDto","ProductBase","issuer","dateOfApplication","lifeAssured","lifeAssuredTwo","investmentAmount","policyNumber","productName","productNeedsCovered","productReasons","productLimitations","productFamilyCode","productFamilyName","referenceId","isCustom","chars","floor","random","premium_amount","parseFloat","client_index","sum_assured","issuer_oid","category","needsCovered","reasons","limitations","companyNameMin","annualPremium","premiumAmt","toLocaleLowerCase","toFixed","riskRatingMap","VenueOptions","webpackContext","req","webpackContextResolve","ClientBase","BeneficialOwnerParticulars","fullName","identityType","dateOfBirth","contactNumber","residentialAddress","correspondenceAddress","politicallyExposedPerson","relationshipToCustomer","reasonsForAppointment","isNaN","ClientManagementRoutes","RaceOptions","inModelSrc","inDebug","modelSrc","proxies","prox","react","reactParent","reactTarget","mutualKeys","syncOnInit","keyToReadFrom","readKey","watchKeys","each","reactKey","mkey","constructProxy","propString","readValue","adjustmentsAssumptionsEducation","adjustmentsAssumptionsInflation","adjustmentsAssumptionsInvestment","adjustmentsAssumptionsRemarks","adjustmentsAssumptionsSalary","TypeBase","identifyingPrioritiesAdditionalNotes","clientDeclFcProvideCopy","clientDeclStatements","clientDeclAdvisoryProcess","clientDeclIntroduced","clientDeclIntroducedId","clientDeclIntroducedName","clientDeclPoliticallyExposed","clientDecisionAgree","clientDeclAcknowledgement","contactingYou","crcPartI","crcPartIi","crcPartIii","crcPartIv","crcPartV","crcPartVi","crcPartVii","crcPartViii","disclosure","disclosureAps","explainedFeesCharges","pdpaConsent","marketingConsent","suggestedNextFinancialUpdate","cashRebate","client0ContactMode","client1ContactMode","discloseDependant","relationshipAdviser","client0DeclarationPoliticallyExposed","client1DeclarationPoliticallyExposed","client0AccreditedInvestor","client1AccreditedInvestor","pepList","rawPep","pep","PoliticalExposedPerson","autosetSuggestedReviewDate","rawPepList","pep_list","add","valueOf","LARGE","Default","policyInsured","policyType","policyName","premium","policyTerms","date","lifeProtection","disabilityProtection","disabilityIncome","accidentProtection","criticalIllnessProtection","roomAndBoard","hospitalIncome","roomBoardHospitalIncome","others","maturityValue","maturityAge","startIndex","ArrayBase","SummaryField","fund1","fund2","fund3","fund4","fund5","fund6","fund7","fund8","inv1","inv2","inv3","inv4","inv5","inv6","inv7","inv8","inflation","providedFor","costOfEducation","countryOfStudy","courseDuration","yearsToSave","maturityValueOfExistingPolicies","existingResources","curIndex","totalFV","totalEducationCost","ExistingPortfolioSummary","portfolios","ExistingInvestSummary","projectSettings","clientDeclaration","educationNeedsDetails","ilpPortfolios","trustedIndividual","TrustedIndividual","adviser","details","AdviserDetails","AdviserDeclaration","existingInvestment","inProduction","KYCClient","dependants","DependantsProtectionClient","RecommendationV2","included","accompanied","beneficialOwner","declarationBeneficialOwner","c1BOIncomplete","beneficialOwnerParticulars","isNotComplete","declaredBO1","c2BOIncomplete","declaredBO2","targetPEP","policyholderName","c1PEPIncomplete","declaredC1PEP","c2PEPIncomplete","declaredC2PEP","rcmd","recommendation","assumptions","retirementNeeds","setupDefaultRates","salaryIncrementRate","inflationAdjustedReturn","savingsNeeds","setupDefaultRate","investmentReturn","investmentNeeds","specificGoalsNeeds","criticalIllnessNeeds","deathProtectionNeeds","disabilityIncomeNeeds","disabilityProtectionNeeds","index","educationInflationRate","retirementIncome","mps","otherNeedsProxies","allProxies","setProxy","clientN","needsN","cn","nn","watchModel","converter","mapRawToFormatted","newObject","getPointers","setData","checkOverwrite","snakeKey","stringObj","mapFormattedToRaw","collected","toadd","warn","dependant","sameClient1","sameClient2","existingList","ProductFilterRequest","EmployerConsentFields","weeklyHours","contractStart","contractEnd","EmployerConsent","importantNoticeList","importantNoticeOthers","adviserFaCode","adviserMasRepNo","adviserName","adviserOid","valueData","trim","SharedField","rnfNumber","corporateEmail","hpNumber","rm","fsm","companyLongName","Shared","prjInfo","emailFormat","padStart","string","pad","String","join","padZoneStr","instance","negMinutes","utcOffset","minutes","abs","hourOffset","minuteOffset","Utils","z","C","REGEX_FORMAT","INVALID_DATE_STRING","FORMAT_DEFAULT","format","formatStr","str","zoneStr","locale","$locale","$H","$m","$M","weekdays","months","meridiem","getShort","arr","full","get$H","num","meridiemFunc","hour","minute","isLowercase","matches","YY","$y","YYYY","M","MM","MMM","monthsShort","MMMM","D","$D","DD","$W","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","a","A","mm","$s","ss","SSS","$ms","Z","$1","DateService","timezone","extend","dateObj","numberDate","utc","transitionDate","isBefore","tz","referDate","asFloat","diff","formattedDate","timeUnit","toDate","subtract","specificDate","second","millisec","dayJsDate","dateHour","dateMinute","dateSecond","dateMillisec","dateToCheck","dateToCompareWith","compareDayOnly","dateToCompareInFormat","humanize","nameOfEmployer","sameAsHolder","sourceOfFunds","fundOthers","sourceOfWealth","wealthOthers","familyMemberRelationship","closeAssociateRelationship","clientRelationship","personName","personRank","personCountryOfAppointment","RepGradeOptions","SvGradeOptions","BscGrade","period","grade","SvBscGrade","BscGrading","unsatisfactory","rep","sv","FitProperFields","taxOffence","taxOffenceSpecified","bscGrading","additional","FitAndProper","CKA","ckaCompleted","educationList","educationSpecify","higherEducation","investmentExperience","investmentList","investmentSpecify","ckaMet","otherInvestmentExp","otherProfessional","profSpecify","professionalList","professionalQualification","otherProfessionalQualification","workExperience","workList","workSpecify","eLearning","eLearningSpecify","SMALL","confirmLanguage","confirmLanguageOthers","contactForSurvey","toContact","preferredDate","preferredTime","Meta","headers","beforeAssign","editedHeaders","editedData","parsed","afterAssign","convertNested","convertSpecifiedKeyToRawData","keyToConvert","convertAllKeyToRawData","ref","class","sizeClass","style","width","customWidth","_t","on","$event","$emit","hideFooter","_e","_v","hideCancel","size","IdentityTypeOptions","EmploymentMeta","address","dateFrom","dateTo","designation","jobDescription","rawKeyMetadataKey","RawKey","formatString","getRawKey","substring","productOid","GenderOptions","Recommendation","client2Name","dependantIncluded","prod","validBasicProduct","basicProduct","investment","getInvestmentSubFunds","flatten","flatProductWithInvestMainAccount","flatAllProducts","allProducts","getProductsForClient","basic","rawArray","product_reasons","product_limitations","client_choice_list","accepted","getReasons","getLimitations","isNtuc","totalAnnualizedPremiumForClient","totalSinglePremiumForClient","rmd","covered","categorized","investMainFund","targetPrioirty","getClientIndex","isProductsWithPriorityExistsInRcmd","newProduct","toDeleteIndex","summaryFieldKey","isSummaryField","abbre","c1","c2","getSummaryFields","role","field","pfs","pf","belongsTo","computeSum","calculateApMv","summaryKey","round","subtotal","cover","amt","accum","c1PortfolioSummary","c2PortfolioSummary","othersPortfolioSummary","clientInformation","clientMeetingDate","clientMeetingTime","clientMeetingVenue","clientMeetingVenueSpecify","statements","relationshipAdviserSpecify","jfwConsultantName","jfwConsultantComment","acknowledgement","acknowledgementNotes","haveJointFieldWork","haveJointSales","financialConsultantName","financialConsultantMasNo","financialConsultantCompanyCode","financialConsultantComment","jointSalesFinancialConsultantName","jointSalesFinancialConsultantMasNo","jointSalesFinancialConsultantCompanyCode","jointSalesFinancialConsultantComment","provideIncentives","DeclarationOptions","ChannelOptions","BisoDeclaration","bi","biEntityCount","own","ownEntityCount","connectedBi","connectedOwn","connectedOwnEntityCount","uploadForms","ReferenceDeclaration","byRep","repName","channel","channelSpecified","FinancialActivityDeclaration","conducted","prevRepCode","noRepCode","medisaveOs","basedOverseas","deedPoll","ConnectedPerson","NonFinancialActivityDeclaration","currentEmployed","connectedEmployed","connected","moneyLender","junketPromoter","realEstate","unregulatedProduct","connectedPersons","DeclarationFields","reference","biso","fad","nfad","GeneralDeclaration","Validation","validationRules","getMessages","logic","sections","mandatory","ADD","ADDMANDATORY","REQUIRE","isEmpty","REQUIRE_TRUE","REQUIRE_NUMBER","WHEN","condition","REQUIRE_ARRAY","getValidationSectionForClient","validation","section","validationSection","omitKey","AccountMeta","username","companyCode","masRepno","mobile","adviserBranch","idNumber","MetaList","_l","selected","optionSelected","_s","Budget","budgetCashPerAnnum","budgetCashPerMonth","budgetCash","budgetCpfOrdinary","budgetCpfSpecial","budgetSrsAccount","budgetUtilizeCpfMedisave","budgetSourceOfFunds","budgetSourceOfWealth","smallBudgetSize","budgetSubstantialReasons","budgetOthers1","budgetOthers2","budgetOthers3","isAi","isIndividualTypeA","isCorporateTypeA","isIndividualTypeB","isCorporateTypeB","isIndividualTypeC","isTrustee","isOi","coverage","roomCharges","surgicalExpenses","desiredAmount","hospitalType","wardType","otherIndex","planningFor","providedForWho","amountNeeded","existingBenefits","text","income","yearsRequired","infAdjReturn","rate","fundsRequired","totalRequired","planning","interestRate","amountFv","fundValue","accumulatedInterestRate","totalFundsFv","years","inDefaultInfAdjReturn","defaultInfAdjReturn","incomeFv","firstYearIncome","totalAmount","rateOfReturn","compiledInterestRate","surplusShortfall","lifestyleGoals","investmentOption","surrenderedInvestment","topUp","advisedBefore","planType","policyNum","inceptionDate","surrenderDate","benefitsProvided","detail","highRiskCountry","stayInSg","residingAddress","sourceOfFunds2","sourceOfFunds2Info","additionalNote","results","infoLinked","lockedFields","selectedProperty","timeSecondsFetched","timeSecondsLinked","transactionToken","parsedLockedFields","ele","convertToFriendlyKey","prefix","prefixToReplace","customType","indi","ic","boId","partner","register","finance","deed","boardResolution","boExemption","corporate","memorandum","acra","signatory","docTypes","nested","typ","doc","bop","bopRaw","nameOfOwners","nameOfOtherOwners","gazetted","typeOfProperty","noOfRoom","landArea","builtInArea","ownershipType","remainingOfOwnershipYears","completed","estimateAgeYears","topDate","renovated","yearOfRenovation","amountOfRenovation","purchasePrice","dateOfPurchase","propertyFor","existingBank","monthlyInstalmentTotal","monthlyInstalmentCash","monthlyInstalmentCPF","originalLoanPeriod","housingLoanOutstanding","remainingHousingLoanTermYears","termLoanOutstanding","remainingLoanTermYears","overdraft","additionalLoan","additionalLoanAmt","propf","annualAmountNeeded","criteria1","criteria2","criteria3","criteria4","residentialProp","cash","cpfOA","cpfSA","totalAssets","loansOverdraft","tax","mortgage","hp","residentialPropDoc","investmentPropDoc","cashDoc","cpfDoc","securitiesDoc","otherAssetsDoc","loansOverdraftDoc","taxDoc","mortgageHpDoc","otherLiabilitiesDoc","cpf","mortgageHp","desc","pepDeclared","pepParticulars","budgetNameOfPayor","budgetContactPayor","budgetIdentityType","budgetNricppPayor","budget3rdPartyPayor","budgetPayorRelationship","budgetOccupationPayor","payingPremium","productAccount","template","policies","policiesLimit","rawPolicies","switchingPolicies","rawpolicy","sp","newPolicy","fresh","idx","policy","updated","signatureDate","aioi","budget","CashFlow","NetWorth","cka","rpa","RPA","personalAccidentNeeds","hospitalizationNeeds","lossOfIncome","outpatientExpenses","other1Needs","other2Needs","longTermProtectionClient","dependantsProtection","educationNeeds","recommendationBasis","switching","switchingArray","ecdd","pepDecl","myInfo","propertyFinancing","amldoc","ai","thirdPartyPayor","signatureInfo","info","cashFlowPlanning","cashFlowPlanningReasons","business","investmentIncome","dividends","rentalIncome","others10Text","others10","others11Text","others11","loanRepayment","householdExpenses","parentalSupport","education","personalExpenses","insurancePremiums","regularSavings","others12Text","others12","others13Text","others13","others14Text","others14","cashFlowChanges","cashFlowChangesReasons","cashFlowAdditionalNotes","totalExpenses","totalAnnualExpenses","MEDIUM","XXSMALL","XXXLARGE","TravelTypeOptions","ZoneOptions","GiTravel","travelType","departureDate","returnDate","zone","lengthOfTrip","adult1","adult2","child1","child2","child3","child4","noOfChildren","CitizenshipOptions","ClientInfoBase","b4data","extdata","finaldata","MediShieldLifeTest","passed","insurer","failedReason","BDMAssessmentFields","referrer","referrerName","referrerRepCode","taScheme","taSchemeType","briefedNoSales","briefedTerminateExistingAgency","bandingAgree","bandingFinalProposal","employmentEngaged","employmentDetails","prohibitedActivity","rockwillsIntroducer","mediShieldLifeTest","declaredBi","criminalRecord","warningLetter","declaredOther","exceedSoc","socDeviation","BDMAssessment","LetterOfUndertaking","ClientDependantsService","childClientOid","FrequencyList","FrequencyOptions","GetPremiumType","FrequencyToValueMapping","FrequencyToValueMappingCalculation","GetPaymentModeNiceName","valueIsUndefined","pv","isEndMode","_amount","_period","_rate","dueFactor","savingLumpSum","savingMonthly","monthlyRate","overallRate","snRate","digitNumber","decimal","sum","allFieldIsEmpty","clientOptionSelected","kycFormStore","uiService","sharedVariable","isClient2Included","alert","show","State","components","AppSwitch","ProductMetaData","currency","prematureTermination","gstNumber","gstAmt","ExamTypeOptions","ReimbursableExamTypeOptions","ProductHeaders","insuranceProductTypes","insuranceProductCategories","investmentProductTypes","investmentProductCategories","ilpProductTypes","riderProductTypes","generalProductTypes","isInclude","checkList","checkValue","check","ProductMeta","productCode","launchDateMillis","withdrawnDateMillis","premiumType","categoryType","fullProductType","freeze","netWorthPlanning","noPlanningReason","residentialAssets","others1Text","others1","others2Text","others2","stocksShares","unitTrust","others3Text","others3","others4Text","others4","bankDeposits","others5Text","others5","others6Text","others6","homeMortgage","carLoans","personalLoans","creditCard","others7Text","others7","others8Text","others8","others9Text","others9","totalUsedAssets","existingInvestSummary","CoveringTypeOptions","GiMotor","hpCompany","coverNoteNo","coverNoteIssueDate","coveringType","vehicleMake","vehicleModel","vehicleNo","engineCapacity","sittingCapacity","registrationYear","drivingExperience","ncd","PolicyClientMeta","registrationDate","residentialAddressOne","companyAddressOne","postalCodeOne","countryOfResidenceOne","residentialAddressTwo","companyAddressTwo","postalCodeTwo","countryOfResidenceTwo","mailingAddress","mailingPostalCode","mailingCountry","companyAddressOnePostalCode","companyAddressOneCountry","companyAddressTwoPostalCode","companyAddressTwoCountry","mobileNoOne","officeNoOne","homeNoOne","emailOne","mobileNoTwo","officeNoTwo","homeNoTwo","emailTwo","highestEducationLevel","spokenLanguage","spokenLanguageOthers","writtenLanguage","writtenLanguageOthers","hasBo","hasPep","pdpaMarketing","pepNameList","boName","nameOfPayor","occupationPayor","contactPayor","payorRelationship","nricppPayor","payorReasons","highRisk","complianceReview","complianceReviewDate","complianceRemarks","ceoReview","ceoReviewDate","ceoRemarks","highRiskReason","highRiskReasonOther","amlScreeningDoneBy","resolutionStatus","riskStatus","notes","riskProfile","replacement","clientCallbackSelectedFc","premiumExceed","depName","preferredWardType","riderDeductible","existingCoverage","totalFundsRequired","iiLessExisting","iSurplus","annualExpenses","infAdjusted","lumpSum","medicalTreatment","estimatedAmount","otherFunds","iiSurplus","finalExpenses","loans","totalCashNeeds","ivLessExisting","ivSurplus","disabilityLumpSum","disabilityEstimatedAmount","deathCashNeeds","CPFAuthorization","BasicProduct","EPSILON","NewProductModel","isBscClassify","riskRating","paymentType","supplementaryBenefits","commReceivableFromDateMillis","commReceivableToDateMillis","ProductModel","RelationshipOptions","response","url","statusText","OpenAPI","BASE","VERSION","WITH_CREDENTIALS","TOKEN","USERNAME","PASSWORD","HEADERS","isDefined","isString","isStringWithValue","isBlob","Blob","getQueryString","params","qs","encodeURIComponent","getUrl","query","getFormData","FormData","append","resolver","getHeaders","token","password","defaultHeaders","Headers","Accept","credentials","btoa","getRequestBody","sendRequest","fetch","getResponseHeader","responseHeader","content","getResponseBody","contentType","isJSON","json","catchErrors","errors","400","401","403","404","500","502","503","ok","vue","$router","redirect","$route","fullPath","responseBody","newBusinessRegisterRouter","meta","FormsList","displayName","model","expandableMetadataKey","ExpandableArray","getMaxSize","getClone","DwellingOptions","GiHomeContents","dwellingType","othersDwellingType","houseNo","unitNo","streetName","buildInArea","underinsuredRemarks","onshoreOffshore","upfrontFees","transactionFees","sourceOfFund","upfrontComm","paymentMethod","sumInsured","commission","infosheetFileUploaded","infosheetFileName","nextReviewDate","feesReceivable","typeOfService","freq","approvedDate","endDate","unitBalance","riskClass","stock","bonds","getTime","unixTime","benefitAmt","ncp","effectiveDate","expiryDate","dateFields","dtf","sckey","basicModalPremium","asp","expiryAge","issueAge","height","weight","smoker","occupationalRating","medicalConditionReasons","beneficiary","underwritingDecision","underinsuredUnderwritingDecisionRemarks","ilpsp","ilprp","ilp","ccupational_rating","ProductTypeOptions","introducerOid","introducerPct","introducerIfam","servicingOid","servicingPct","servicingIfam","vestingOid","vestingPct","vestingIfam","ownersOid","ownersName","ownersNric","insuredTitle","insuredName","insuredNric","insuredTitleTwo","insuredNameTwo","insuredNricTwo","productTypeDetailed","taggedKyc","businessId","principal","applicationDate","opsApprovalDate","startDate","bscClawbackStatus","bscClawbackAmount","clientRebateStatus","clientRebateAmount","clientAiStatus","productMetadata","clientMetadata","creationType","faceToFace","policyProfileRemarks","level1ComOid","level2ComOid","level3ComOid","level4ComOid","level1ComPct","level2ComPct","level3ComPct","level4ComPct","extractAndAssignData","metaDataRawValue","extractMetaData","productSpecificModel","topt","opt","defaultMetadataKey","getDefault","ExistingPortfolioV2","excludeKeysToShowOnSummary","CompanyDetailsMeta","companyShortName","companyDetailsEffectiveDate","companyDetailsStatus","companyDetailsRemarks","emit","TransferRulesAcknowledgement","educationLevel","referAge","isAboveAge","validOptions","flags","isAbove62","isSecondaryAndBelow","isNoGoodEnglish","citizenshipSpecified","citizenshipSpecified2","countryOfBirth","contactEmail","contactHome","contactMobile","previousOccupation","natureOfBusiness","residentialCountry","spokenLanguageSpecified","writtenLanguageSpecified","EmploymentTypeOptions","rpaCompleted","question1","question2","question3","question4","question5","question6","agreement","ownChoice","reviewConfirmation","riskProfileCalculated","riskProfilePreferred","riskScore","ReportingTier","RecruitManagerAssessmentFields","reporting","manager","banding","bandingExpiry","fsmBanding","rcmdNote","RecruitManagerAssessment","recruiter","recruiterDate","InputMaxChar","CustomRPA","ClientPolicyReportRequestDTO","DownloadCsvDto","ReportGeneratorDto","ReportLogDTO","dateFilteringSelection","policyOid","individualOid","isApprove","SecuritiesDealing","ActivityCols","PENDING","INPROGRESS","READY_FOR_SUBMISSION","PROCESSING","COMPLETED","ActivityCard","pky","exams","forms","uploads","ctm","utm","cardType","exam","pending","latestExam","certs","cert","files","form","RiskRatingMap","1","2","3","4","5","rawToValue","conservative","moderately_conservative","balanced","moderately_aggressive","aggressive","BASE_URL","useNewApi","SharedVariable","apiTimeout","timeStampFromServer","GET","system","information","update","POST","account","login","loginGet","loginInfoGet","loginMetaGet","logout","getSupervisorList","getReassignSupervisorList","queryArgs","groupStatus","singpassSettings","otpRequest","otpLogin","otpRefresh","new","memberList","saveMemberList","remove","verify","getOTP","getToken","reset","kycPdf","metaGet","saveSignature","submitSignatures","stampedKycPdf","stampedPdfApiCall","stampedBeneficialOwnerPdf","stampedBeneficialOwnerPdfSignatures","stampPEPPdf","stampPEPPdfSignatures","stampECDDPdf","stampECDDPdfSignatures","stampAiPdf","stampAiPdfSignatures","stampedAMLPdf","stampedInsurerPdf","updateConsolidateGroupsStatus","emailNotice","addUserRemarks","adviserCancel","supervisorEmailWarning","finalise","generateKycPdfNest","kycPdfGeneratorApiVersion","stampedKycPdfNest","splitKycPdfNest","getSignaturePosition","generateEcddNest","setCustomProperties","pdf","stitch","delete","eventLog","esign","checkEnabled","reqEQuota","clearESign","saveSigners","setupSigners","reqDocFile","reqDocStat","reqESign","reqSignURL","completeESign","getPlans","activatePlan","esubPrefix","esub","retrieve","notify","dsf","checkMode","verifyFields","getClientNricList","ws3CreateMfp","ws5UpdateKyc","ws5ApproveKyc","getDsfWebUrl","ws4GetPdfsByCaseId","ws6RetrievePolicy","onemap","getAddress","exportClients","importClients","uploadDoc","upload","kycFormOid","kycPdfOid","DELETE","merge","getAppendix","adviserAgentCodes","adviserDetails","getAccountMeta","getDetails","saveDetails","getEducationList","getQualificationList","getEmploymentList","saveEducation","deleteEducation","saveQualification","deleteQualification","saveEmployment","deleteEmployment","bscRecords","bsc","listReviewMeta","saveReviewMeta","getReviewMeta","updateInfractionTotal","saveClientMeta","getClientMeta","listClientsReviewed","saveReview","updateReview","removeReviewUsers","listPrev","supervisorReview","PUT","generatePdf","supervisorOid","adviserReview","cpd","listPost","getHours","save","saveMany","course","attendees","commissionStructure","getCommissionStructure","deleteCommissionStructure","saveCommissionLevel","commissionRecordsRel","saveNewRecord","updateRecord","report","setScheduleTime","getScheduleTime","generateAdHocStatement","downloadCsv","generateReport","reportList","getUsersAndPrincipals","relProductList","restoreDefault","deleteProducts","saveNewProducts","updateProduct","multiSaveProducts","clientPolicy","newBusiness","saveExcelInfo","amlImportCsv","amlExportCsv","reconExportCsv","extractProducts","policyDocumentsList","uploadNewPolicyDocument","deletePolicyDocument","getTaggedKycDocuments","uploadCancellationLetter","deleteCancellationLetter","saveIntermediary","saveManyIntermediaries","intermediaries","payee","clientDetails","newClient","profile","linkKycForm","clientDependants","clientScreenings","clientInterest","clientCommunication","companyDetails","myinfo","requestDirectMyinfo","sendAuthorizationEmail","sendAuthorizationEmailToAdviser","fetchUnconfirmPersonInfo","postClientDecision","newPersonInfoAvailable","linkPersonInfo","unlinkPersonInfo","fetchComfirmedPersonInfo","syncMyInfo","syncAdviserMyInfo","newRecruit","signature","upsert","search","sign","activity","fileEntry","filelist","submit","decide","recruit","submitApplication","reworkApplication","approve","findAll","recruitOid","approval","examCertOid","resources","getAllFolders","getAllFilesFolders","createFolder","createFile","deleteFiles","ifamFileSystem","uploadFile","moduleType","changelog","getFA","kvm","survey","fetchSurveyWithToken","fetchSurveyWithKycPdfOid","submitSurvey","sendSurveyEmail","refreshAndResendSurveyEmail","useDynamicPdf","enable","useEjsTemplate","apiVersion","hideLoading","randomID","loading","addLoadingTask","transformParams","withCredentials","paramsSerializer","arrayFormat","res","catch","finally","removeLoadingTask","useSearchParams","skipTransform","requestData","URLSearchParams","stringifyData","transformRequestData","post","transformOptions","stringifiedData","skipStringify","File","imgType","put","hierarchicalStructure","maxLevel","useNewProfilePage","useReportModule","useSalesTeamAdmin","cloneKycForm","deleteKycForm","useFileSystem","useScheduler","theme","displayBrandInLogin","useHierarchySetup","useAssumptionsList","useSeparateAML","generateNbrUponSupApproval","useNewCommissionFormat","credit","changeLog","changes","brandName","companyCapName","printerCompany","dataProtectionOfficerEmail","regNumber","urlName","agentRepresentative","personalFinancialReview","electronicFormName","pdpaWithdrawalForm","ContractTypeList","rank","ContractTypeOptions","contractType","addSingleton","ThePrioritiesNeeds","currentUser","isLogin","customHeaders","hasLoadingTasks","staticStyle","isModernTheme","headerStructure","goToHome","isShowMenu","directives","rawName","menuIcon","startVirtualMeeting","videocamIcon","disable","icon","dropdown","isCopied","slot","copyUrl","domProps","jitsiUrl","isJitsiUrlShow","randomStr","len","ans","getElementById","select","setSelectionRange","execCommand","virtualMeeting","location","AppDialog","mini","customStyle","focus","hovering","isOutOfView","mochaIcon","dropDownWidth","eleId","pose","getBoundingClientRect","documentElement","clientWidth","left","useSideLogo","$store","getters","isBscReviewer","isProductAdmin","bscHeaderStructure","fullHeaderStructure","kycViewLabel","isSuperUser","getHref","userOid","accountID","useResourcesModule","disableCMSModule","useKycSurvey","routeName","legacyUrl","matched","$api","dispatch","AppDynamicHeader","AppDynamicIconHeader","goToChangelog","ifamVersion","projectVersion","latestVersion","latestDate","loadJSON","time","loadingTasks","functionToExecute","customClass","confirmButtonText","showCancelButton","confirm","demoMode","fromCharCode","ceil","randomChar","randomPrefix","now","occupationList","OccupationList","relationshipList","venueOptions","uIOptions","sysInfo","projectInfo","TheHeader","TheFooter","AppLoader","T","insurance","productList","uniqIssuer","riderList","isRider","getDisplayList","getRiderList","insuranceProductList","isInsuranceProduct","isWithinLaunchAndWithdrawnDates","getInsuranceProductList","getDisplayListByIssuerOid","insuranceIssuer","getIssuer","allIssuer","getInsuranceIssuer","allProds","investmentProductList","getInvestmentProductList","getDisplayListByInvestmentAccountCategory","investmentIssuer","getInvestmentIssuer","currentTime","ilpProductList","isILPProduct","sort","product1","product2","product1Name","toUpperCase","product2Name","inflationRate","dependantsNames","clientOptions","products","originalList","familyCode","productNeeds","isNeedFound","isFamilyCodeFound","isSameIssuer","b","localeCompare","issuerOids","isInsurance","isIssuerFound","isInvestment","monthlyAllowance","adverseDBChecks","redFlag","sanctioned","financialFlowHighRisk","pepAssociated","dateOfAssessment","isSingaporean","isHighRiskPR","isHighRiskForeign","transactThreshold","c1hasMedical","c2hasMedical","tv","c1TransactValue","c2TransactValue","isHighRisk","medRisk","isMediumRisk","lowRisk","transactValueBelowThreshold","applyMedicalProduct","bo","mortgageLoan","carLoan","lifestyleExpenses","parseInt","motor","otherPersonalAssets","investBusiness","cpfRa","srs","investProperty","lifeInsuranceCash","educationLoans","familyMedical","familyMedicalSpecified","populatedRetirementAge","supportYear","expectedSupportYear","productRecommendationReason","productRiskAndLimitationsReason","aml","client1IsSelectedClient","isSelectedClient","client2Included","client2IsSelectedClient","portfolio","existing_insurance_portfolios","existing_investment_portfolios","ma_transact_value","ja_transact_value","ma_total_annual_premium","totalAnnualPremiumForClient1","ja_total_annual_premium","totalAnnualPremiumForClient2","ma_total_single_premium","totalSinglePremiumForClient1","ja_total_single_premium","totalSinglePremiumForClient2","ilpPortfolio","ilp_portfolios","newIlpPortfolios","IDateService","IRiskRatingService","assumption","loadingState","computedValidationResult","kycFormErrors","myInfoStatus","haveNewInfoClient1","haveNewInfoClient2","productMetaList","cdMetaList","CompanyDetailsMetaList","showCompletionModalState","assumptions_annualinflation","assumptions_annualinvestmentreturn","assumptions_increaseineducationcosts","assumptions_annualsalaryincrement","assumptions_retirementincome","state","companyMetaList","context","commit","formOid","adviser_oid","adviserData","important_notice_list","adviser_products","adviserProducts","important_notice_others","other_adviser_products","adviser_mas_rep_no","mas_repno","assumptionNames","client0Available","client_0","new_person_info_available","client1Available","client_1","getFullList","retrieveAllProducts","rawError","mutate","namespaced","planName","latest","caseId","caseNo","eSubApprovedTimestamp","eSubFinalisedTimestamp","eSubmissionMasterOid","expired","pdfs","policyStatusJson","isEnabled","newdata","updateProperties","teleporters","pdfLinks","hasProposal","Proposal","pdfOid","hasQuotation","Quotation","hasQuestionnaire","Questionnaire","policyDetails","policyStatusString","productId","policyNo","internal","external","dateOrApplication","esubData","clien","cindex","exsub","exsubObj","insub","insubObj","externalList","cl","ex","eSub","clientData","isNotFinalised","isCancelled","clientName","ntucClientNricOid","nricList","nlist","forDisplay","cname","fileName","fileType","formattedKYCPdf","ptcReconstructKey","ptcKey","snakeCaseKycPdf","rawKycPdf","retrieved","esign_doc","updatedDoc","contactCountryCode","emailAddress","expiresAt","lastRequest","order","signatureId","signingUrl","esign_signers","updatedSigner","signer","newValue","client0Signature","client0SignatureDate","client1Signature","client1SignatureDate","trustedIndividualSignature","trustedIndividualSignatureDate","adviserSignature","adviserSignatureDate","adviser2Signature","adviser2SignatureDate","pep1Signature","pep1SignatureDate","pep2Signature","pep2SignatureDate","pep3Signature","pep3SignatureDate","beneficialOwner1Signature","beneficialOwner1SignatureDate","beneficialOwner2Signature","beneficialOwner2SignatureDate","allsigners","getAllSigners","applicableSigners","adv","hasAccompaniment","ti","pepn","hasValidC1PEP","hasValidC2PEP","bon","hasValidBO1","hasValidBO2","targetBO","signatureOriKey","signaturedateOriKey","signaturedate","client0","adviser2","pep1","pep2","pep3","beneficialOwner1","beneficialOwner2","rawKYCPdf","fetched","fkConverter","newSignature","supervisor","submission","adminFullName","adminDecidedUserName","adminDecidedOid","supervisorDecidedUserName","supervisorDecidedOid","supervisorFullname","dateOpsDecide","dateOpsDecideDate","managerEndorsedSignature","managerEndorsedSignatureDate","dateSupervisorDecide","dateSupervisorDecideDate","proxySupervisorDecided","getKey","curUser","nowInISO","signatureData","accountNames","preTransactionalList","isClient2Include","validate","ptcData","ptc_fields","sectionsData","q1","q2","q3","q4","q5","q6","q7","q8","elaborateReasons","present","farepCoached","complete","isQuestion","valid","ccbs","repClient","isSelectedRepClient","attemptDate1st","attemptTime1st","attemptDate2nd","attemptTime2nd","attemptDate3rd","attemptTime3rd","outcomeRole","outcome","qnAnsRole","qnAns1","qnAns2","qnAns3","qnAns4","qnAns5","qnAns6","qnAns7","isNotSelectedClientOrRep","listOfExcludedAttributesForValidation","isAttempt","seq","afterPackData","getReadableDates","getSaveableDates","readFormat","getDate","ptcFields","completion","pdfStatus","consolidatedStatus","adviserFinalised","supervisorProxyOid","kycId","signers","managerEndorsement","signpad","dateAdviserFinalised","isCurrentAdviser","isCurrentSupervisor","isOpsStaff","notSignednotConfirmed","getById","verified","requiredVerify","getRecommendationFlatMap","flatArray","noRecommendationForHighPriorityNeedsCheck","fna","priorityList","highPriorityNeeds","currentClientProducts","protectionNeeds","distinctProductNeeds","isProductNeedsMatch","nonProtectionHighPriorityList","productPriority","distinctProductPriority","isNonProductNeedsMatch","recommendationForUnprioritisedNeeds","selectedPriorities","onlyContainPrioritiseNeeds","prioritiesNeeds","riskProfileResult","eduNeedsDetails","isDefaultRate","fnaNeeds","boValidation","pepValidation","ptcCheck","allowedTabs","showSignModule","kycPdfErrors","eSubData","ntucNrics","ids","identifier","eclient","ntuc","ntucNric","ntucCl","client_list","clist","clientList","tab","eSubmissionData","delta","nric_list","totalUploadedPdf","allowed","subs","hideIndicator","sec","preTransactionalChecks","selectedSupervisorOid","selectedProxySupervisorOid","proxySupervisorOid","_kycPdf","rootState","KYCFormStore","getPTCChecklist","isVerified","superiors","bscInscopeResult","productOids","checkProductsInscope","bscResult","ProductFullMeta","clientProfile","highRiskClient","clientProduct","ClientProductMeta","readOnly","clientDto","retrieveClientWithOid","dto","clientUpdateRequestDTO","updateClientData","extractMetaObject","client_oid","complianceResult","policyComplianceCheck","benefit_amount","effective_date","expiry_date","regular_name","regular_amt","regular_freq","regular_approved_date","regular_end_date","regular_unit_balance","regular_risk_class","regular_regular_cash","regular_regular_stock","regular_regular_bonds","approved_date","unit_balance","risk_class","transaction_no","end_date","subaccount_no","transaction_type","TypeOfServiceOptions","PaymentMethodList","PaymentMethodOptions","CurrencyOptions","faceToFaceSpecified","groupId","unitName","branchName","clusterName","mainInvestmentNbr","mainNbrOid","policyIndividuals","subPolicies","policyRoles","policyInView","mainPolicies","syncClientResponse","commissionUserDetails","lineOfBusinessOptions","LineOfBusinessOptions","nbrStatusOptions","nbrProductStatusOptions","NBRProductStatusOptions","nbrProductCisStatusOptions","typeOfServiceOptions","paymentMethodOptions","currencyOptions","frequencyOptions","paymentModeOptions","PaymentModeOptions","identityTypeOptions","citizenshipOptions","maritalStatusOptions","eduLevelOptions","spokenLangOptions","writtenLangOptions","incomeTierOptions","transactionTypeOptions","wrapOptions","convertedKeys","listPoliciesV2","selectedProduct","updatePolicy","getPolicy","getPolicyV2","mainPolicyOid","getSubPolicy","subPolicy","createdPolicyOid","saveNewBusinessV2","createdPolicy","deleteSubPolicy","deletedPolicy","individual","addNewPolicyIndividuals","savePolicyIndividual","updatedIndividual","deletePolicyIndividual","deletedIndividual","retrievePolicyIndividuals","isMainOwner","lvl1ComUser","lvl2ComUser","lvl3ComUser","syncDto","syncClientInformation","syncResponse","parsedClientMetadata","insured_dob","insured_citizenship","relationship_to_owner","cis_lump_sum","cis_repeat_investment","portfolio_transactions","ilp_premium_list","ilp_single_list","basic_modal_premium","ncBasicModalPremium","nc_basic_modal_premium","modalPremium","modal_premium","discount","premiumPayable","premium_payable","netPremium","net_premium","ape","allProduct","scheduleInView","scheduleList","schedule","updateScheduleTaskTime","savedSchedule","listSchedules","schedules","farLicense","ifpasNo","placeOfBirth","immigrationNumber","employmentPassNumber","residentialNumber","bankName","bankAccountNo","financingType","paymentStructure","overridingBankCode","overridingBankBranchCode","overridingBankAccountNo","accessCardNumber","lockerNumber","pigeonBoxNumber","securityLevel","pedestalNumber","atLeast21Remarks","atLeast4GceRemarks","aLvlCheckedRemarks","examRequirementsRemarks","examRequirements2Remarks","examRequirements3Remarks","examRequirements4Remarks","examRequirements5Remarks","solvencySearchRemarks","contractStatusRemarks","marketConductRemarks","employerRemarks","masProhibitionCheckRemarks","idDocType","adviserService","atLeast21Checked","atLeast4GceChecked","aLvlChecked","examRequirementsChecked","examRequirements2Checked","examRequirements3Checked","examRequirements4Checked","examRequirements5Checked","solvencySearchChecked","contractStatusChecked","marketConductChecked","employerChecked","masProhibitionCheckChecked","contractStatus","dateContracted","dateTerminated","dateIssued","dateOfLastPromotion","dateMasApplication","dateMasYearlyRenewal","dateMasTriYearlyRenewal","dateEpIssued","dateEpExpiry","contractDetails","recruitmentChecklist","spouseDetails","nextOfKinDetails","personalItemsIssued","employmentList","qualificationList","adviserContractTypeList","selectedContractType","EducationMeta","QualificationMeta","reasonForMonitoring","monitoringEffectiveDate","monitoringEndDate","statusType","representativeCodes","structureId","typeOfMonitoring","oldPassword","newPassword","confirmPassword","IAdviserService","principalRequestHeaders","UserMeta","userSystem","originalUserName","productPrincipals","userAdviserDetails","userList","groups","changeUserName","education_list","qualification_list","employment_list","adviser_code","userMetaList","corporateList","individualList","retrieveClientList","hierarchySetupRows","hierarchyInView","importHierarchySetup","getHierarchyList","record","startDateMillis","endDateMillis","row","needsList","ownerOid","myinfoDetails","retrieveIndividualMyinfo","myinfoDto","use","Store","mutations","setCurrentUser","actions","KYCPdfStore","KYCSectionStore","KYCPdfSectionStore","KYCSubmissionStore","UserStore","ClientPolicyStore","ClientInfoStore","ClientStore","BscStore","ComplianceStore","ScheduleStore","HierarchySetupStore","ProductStore","MyinfoStore","permissionChecking","restrictedPages","routerRedirect","store","publicPage","next","hash","redirect_uri","infoPromise","metaPromise","clientFormWrapper","AppClientForm","props","scopedSlots","clientFormLoader","componentPromise","RouteStructure","pathToRegexpOptions","strict","userProfileRoutes","CpdRoutes","commissionModuleRouter","scheduleRoutes","hierarchyRoutes","kycClientFormLoader","base","beforeEach","ProjectInfo","currencyPrefix","CorePlugins","plugin","globalOptions","suffix","precision","attributes","runningId","$uuid","$baseURL","config","productionTip","$mount","interceptors","shareVariable","nameOfInstitution","awarded","lineOfBusinesses","lifeinsurance","collectiveinvestmentscheme","feebasedservice","productTypes","directorOid","DesignationOptions","ProfesQualiOptions","NameCardOrderField","printedName","chineseName","NameCardOrder","selectionMetadataKey","Selection","lookUpWhenStamp","getOptions","DeclarationClauses","NBRProductCISStatusOptions","PaymentModeList","basicCommSp","basicCommRsp","basicCommTu","basicCommYear1","basicCommYear2","basicCommYear3","basicCommYear4","basicCommYear5","basicCommYear6","basicCommYear7","basicCommYear8","basicCommYear9","basicCommYear10","overridingCommSp","overridingCommRsp","overridingCommTu","overridingCommYear1","overridingCommYear2","overridingCommYear3","overridingCommYear4","overridingCommYear5","overridingCommYear6","overridingCommYear7","overridingCommYear8","overridingCommYear9","overridingCommYear10","snake","uds","final","ud","replaceAll","uniqueProductsCompanyOid","company","otherAdviserProducts","withExp","facebook","instagram","linkedin","RiderProduct","basicClientIndex","basicProductClientChoice","nameOfQualification","attainmentBasis","institution","dateYearConferred","SubsidyTypeOptions","RecruitSubsidyReimbursementFields","submissionDate","payableTo","subsidy","totalCosts","reimbursed","rndApprovalDate","RecruitSubsidyReimbursement"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,GAAG9B,IAAUA,GAAW,IAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,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BAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,i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","file":"js/app.0dd54bea.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0097a388\":\"68f98a9e\",\"chunk-3c8afb29\":\"0ebc79be\",\"chunk-07b77fe8\":\"d5ccbac9\",\"chunk-2d22585e\":\"6069fb39\",\"chunk-a9cafe72\":\"da54e627\",\"chunk-e4093eee\":\"d7fc03c5\",\"chunk-e83f4918\":\"2dc7da7d\",\"chunk-02122a32\":\"d4860ac1\",\"chunk-030a0a42\":\"b7242073\",\"chunk-0361b11c\":\"a4ef8f77\",\"chunk-0424455a\":\"208c710a\",\"chunk-0455faa8\":\"8d7dbaec\",\"chunk-0a1a66d1\":\"479c65f3\",\"chunk-0a8beea5\":\"74b53c14\",\"chunk-0ab0c831\":\"40c0eaeb\",\"chunk-0dc5834e\":\"a149b22b\",\"chunk-0f5be4c8\":\"d6be6ec5\",\"chunk-1008acba\":\"89cc4dc3\",\"chunk-10ad1f94\":\"06b8dbed\",\"chunk-157e343e\":\"1cc65127\",\"chunk-197dce10\":\"5389a534\",\"chunk-1ab316fe\":\"5ab21ced\",\"chunk-1b2d158d\":\"a1beb609\",\"chunk-1dca4329\":\"4f00525b\",\"chunk-213cfb3d\":\"845794f0\",\"chunk-218077f2\":\"b06952f7\",\"chunk-222eee5c\":\"93ecbbba\",\"chunk-224158a6\":\"03e89374\",\"chunk-235b55a8\":\"314fa567\",\"chunk-24a1c838\":\"a0bab3b8\",\"chunk-25a9b131\":\"000138d2\",\"chunk-26894169\":\"11f1b208\",\"chunk-28e2d911\":\"e481a779\",\"chunk-2d50f78e\":\"56f7efce\",\"chunk-31500ee7\":\"78f0c109\",\"chunk-32cabcd8\":\"60f0d212\",\"chunk-36b6c67c\":\"f028ed88\",\"chunk-36bf6fba\":\"45c8d2be\",\"chunk-37b0f3fc\":\"52da6e72\",\"chunk-389b8415\":\"913ef5a7\",\"chunk-38b02792\":\"b28ebbbe\",\"chunk-38d709ce\":\"d6d6c9bc\",\"chunk-39ce40e8\":\"51c159a3\",\"chunk-39e3da6c\":\"03efc877\",\"chunk-3cacbb33\":\"4eb316db\",\"chunk-3eb4b8ca\":\"0c154ce5\",\"chunk-45b7f5a0\":\"da865339\",\"chunk-494d3a1e\":\"f85e178c\",\"chunk-4edabddc\":\"b10061cd\",\"chunk-50341536\":\"c3334bf4\",\"chunk-528d292a\":\"38a0ef09\",\"chunk-537d08d1\":\"be31d1a3\",\"chunk-5563abf3\":\"55f7e489\",\"chunk-55e2cbf0\":\"d6e89772\",\"chunk-59727bae\":\"28dbf335\",\"chunk-5c858ad3\":\"ba250cec\",\"chunk-5f8dde16\":\"3a419911\",\"chunk-5fa0ce14\":\"88dc8821\",\"chunk-6393c487\":\"2ea3eaac\",\"chunk-63df135a\":\"267f4cd7\",\"chunk-674387c2\":\"98d2aaa0\",\"chunk-692698aa\":\"6dc4caad\",\"chunk-69679642\":\"4bba46ba\",\"chunk-69906d21\":\"fda565b7\",\"chunk-6a2a650b\":\"a87dde66\",\"chunk-6cf75f79\":\"168d7621\",\"chunk-6d7d3db6\":\"55493785\",\"chunk-6f5e0dea\":\"cd999555\",\"chunk-71b677ce\":\"880891c5\",\"chunk-7494c630\":\"560bdb31\",\"chunk-778ecfad\":\"a0e31fa3\",\"chunk-7796181d\":\"a3313efd\",\"chunk-79858360\":\"e2f4760c\",\"chunk-79cd5f6a\":\"f771cdb8\",\"chunk-7c2b7c7c\":\"19fcfeea\",\"chunk-7dc48394\":\"fa27d6dd\",\"chunk-7de051ac\":\"e8221625\",\"chunk-7f7e2f75\":\"49d4fbb4\",\"chunk-7fc1e7ae\":\"37ef54d9\",\"chunk-824f93aa\":\"a1ae5e0f\",\"chunk-8d663fa0\":\"121e7904\",\"chunk-992abc90\":\"4edb62f3\",\"chunk-9d914c4c\":\"5175cdec\",\"chunk-9db60a20\":\"379f75dd\",\"chunk-a1965082\":\"96e32a24\",\"chunk-a46e85a4\":\"457e77be\",\"chunk-c5d1b562\":\"0514fdaa\",\"chunk-c7d1557e\":\"8681867d\",\"chunk-cc8cdaf6\":\"7a65e301\",\"chunk-cf2b6880\":\"8f12753b\",\"chunk-d1f4523e\":\"b6e550d0\",\"chunk-d78128fe\":\"e109eb49\",\"chunk-d7ee5cd4\":\"026b7614\",\"chunk-df91aaa2\":\"6f3dfe9d\",\"chunk-e7e57d76\":\"3d08b160\",\"chunk-e8ce0510\":\"969a5719\",\"chunk-5f75410e\":\"4bf574fd\",\"chunk-098d3f2d\":\"fd4a40d6\",\"chunk-ef379cae\":\"6a40892f\",\"chunk-11f161ea\":\"7811cc24\",\"chunk-29b3e6e4\":\"a52da6cd\",\"chunk-47d833bc\":\"14f2cbbb\",\"chunk-572a5856\":\"ca207c0d\",\"chunk-02a342b6\":\"3c89db4d\",\"chunk-05bc9e10\":\"d4c826dd\",\"chunk-1af04962\":\"2d20eb0f\",\"chunk-22014418\":\"da663ccc\",\"chunk-2a36fc34\":\"fb2a8f03\",\"chunk-2d21a36c\":\"b7e23089\",\"chunk-2dc467a4\":\"7d9da4ed\",\"chunk-2e3965ab\":\"4fd28de6\",\"chunk-324f3011\":\"e2479d8c\",\"chunk-3665c68b\":\"75493dfe\",\"chunk-39d2a125\":\"d57a6d5f\",\"chunk-3f6425ea\":\"d252400a\",\"chunk-40e36145\":\"00e707e3\",\"chunk-43bcb5eb\":\"ac795154\",\"chunk-4c7c3e60\":\"6dcce4b7\",\"chunk-4d6ce2de\":\"037d4c18\",\"chunk-4e768ea2\":\"6032a942\",\"chunk-55613a9a\":\"b914c862\",\"chunk-59da0d87\":\"9e6c0cf9\",\"chunk-64f0c4a8\":\"8341ac47\",\"chunk-6c136c29\":\"f93ca641\",\"chunk-6d3bb1dd\":\"2abe6692\",\"chunk-6e791a15\":\"005a315b\",\"chunk-71afa0eb\":\"379c09aa\",\"chunk-74e79b22\":\"39447399\",\"chunk-9083a328\":\"29632be2\",\"chunk-91b7a526\":\"f5ba2163\",\"chunk-a151d716\":\"186a5e6e\",\"chunk-a4740116\":\"13323062\",\"chunk-1a5f1fbd\":\"7be9193a\",\"chunk-a987939c\":\"3764e2b7\",\"chunk-608367ab\":\"06ff9414\",\"chunk-f25cd728\":\"0881d2c7\",\"chunk-b0714942\":\"ccadbc92\",\"chunk-d1f8f086\":\"0ceb0594\",\"chunk-31e24ede\":\"d42a03b9\",\"chunk-e9031c86\":\"fb799396\",\"chunk-e7b1f298\":\"2a68c9aa\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-0097a388\":1,\"chunk-3c8afb29\":1,\"chunk-07b77fe8\":1,\"chunk-a9cafe72\":1,\"chunk-e4093eee\":1,\"chunk-e83f4918\":1,\"chunk-02122a32\":1,\"chunk-030a0a42\":1,\"chunk-0361b11c\":1,\"chunk-0424455a\":1,\"chunk-0455faa8\":1,\"chunk-0a1a66d1\":1,\"chunk-0a8beea5\":1,\"chunk-0ab0c831\":1,\"chunk-0dc5834e\":1,\"chunk-0f5be4c8\":1,\"chunk-1008acba\":1,\"chunk-10ad1f94\":1,\"chunk-157e343e\":1,\"chunk-197dce10\":1,\"chunk-1ab316fe\":1,\"chunk-1b2d158d\":1,\"chunk-1dca4329\":1,\"chunk-213cfb3d\":1,\"chunk-218077f2\":1,\"chunk-222eee5c\":1,\"chunk-224158a6\":1,\"chunk-235b55a8\":1,\"chunk-24a1c838\":1,\"chunk-25a9b131\":1,\"chunk-26894169\":1,\"chunk-28e2d911\":1,\"chunk-2d50f78e\":1,\"chunk-31500ee7\":1,\"chunk-32cabcd8\":1,\"chunk-36b6c67c\":1,\"chunk-36bf6fba\":1,\"chunk-37b0f3fc\":1,\"chunk-389b8415\":1,\"chunk-38b02792\":1,\"chunk-38d709ce\":1,\"chunk-39ce40e8\":1,\"chunk-39e3da6c\":1,\"chunk-3cacbb33\":1,\"chunk-3eb4b8ca\":1,\"chunk-45b7f5a0\":1,\"chunk-494d3a1e\":1,\"chunk-4edabddc\":1,\"chunk-50341536\":1,\"chunk-528d292a\":1,\"chunk-537d08d1\":1,\"chunk-5563abf3\":1,\"chunk-55e2cbf0\":1,\"chunk-59727bae\":1,\"chunk-5c858ad3\":1,\"chunk-5f8dde16\":1,\"chunk-5fa0ce14\":1,\"chunk-6393c487\":1,\"chunk-63df135a\":1,\"chunk-674387c2\":1,\"chunk-692698aa\":1,\"chunk-69679642\":1,\"chunk-69906d21\":1,\"chunk-6a2a650b\":1,\"chunk-6cf75f79\":1,\"chunk-6d7d3db6\":1,\"chunk-6f5e0dea\":1,\"chunk-71b677ce\":1,\"chunk-7494c630\":1,\"chunk-778ecfad\":1,\"chunk-7796181d\":1,\"chunk-79858360\":1,\"chunk-79cd5f6a\":1,\"chunk-7c2b7c7c\":1,\"chunk-7dc48394\":1,\"chunk-7de051ac\":1,\"chunk-7f7e2f75\":1,\"chunk-7fc1e7ae\":1,\"chunk-824f93aa\":1,\"chunk-8d663fa0\":1,\"chunk-992abc90\":1,\"chunk-9d914c4c\":1,\"chunk-9db60a20\":1,\"chunk-a1965082\":1,\"chunk-a46e85a4\":1,\"chunk-c5d1b562\":1,\"chunk-c7d1557e\":1,\"chunk-cc8cdaf6\":1,\"chunk-cf2b6880\":1,\"chunk-d1f4523e\":1,\"chunk-d78128fe\":1,\"chunk-d7ee5cd4\":1,\"chunk-df91aaa2\":1,\"chunk-e7e57d76\":1,\"chunk-e8ce0510\":1,\"chunk-5f75410e\":1,\"chunk-ef379cae\":1,\"chunk-11f161ea\":1,\"chunk-29b3e6e4\":1,\"chunk-47d833bc\":1,\"chunk-572a5856\":1,\"chunk-02a342b6\":1,\"chunk-05bc9e10\":1,\"chunk-1af04962\":1,\"chunk-22014418\":1,\"chunk-2a36fc34\":1,\"chunk-2dc467a4\":1,\"chunk-2e3965ab\":1,\"chunk-324f3011\":1,\"chunk-3665c68b\":1,\"chunk-39d2a125\":1,\"chunk-3f6425ea\":1,\"chunk-40e36145\":1,\"chunk-4c7c3e60\":1,\"chunk-4d6ce2de\":1,\"chunk-4e768ea2\":1,\"chunk-55613a9a\":1,\"chunk-59da0d87\":1,\"chunk-64f0c4a8\":1,\"chunk-6c136c29\":1,\"chunk-6d3bb1dd\":1,\"chunk-6e791a15\":1,\"chunk-71afa0eb\":1,\"chunk-74e79b22\":1,\"chunk-9083a328\":1,\"chunk-91b7a526\":1,\"chunk-a151d716\":1,\"chunk-a4740116\":1,\"chunk-1a5f1fbd\":1,\"chunk-a987939c\":1,\"chunk-608367ab\":1,\"chunk-f25cd728\":1,\"chunk-b0714942\":1,\"chunk-d1f8f086\":1,\"chunk-31e24ede\":1,\"chunk-e9031c86\":1,\"chunk-e7b1f298\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-0097a388\":\"a3f7be12\",\"chunk-3c8afb29\":\"7450830b\",\"chunk-07b77fe8\":\"1bbd7208\",\"chunk-2d22585e\":\"31d6cfe0\",\"chunk-a9cafe72\":\"09a7c01d\",\"chunk-e4093eee\":\"6b3d7f5b\",\"chunk-e83f4918\":\"b89cca55\",\"chunk-02122a32\":\"6783e2b2\",\"chunk-030a0a42\":\"4b1e8d5d\",\"chunk-0361b11c\":\"f3ad382d\",\"chunk-0424455a\":\"b57d4012\",\"chunk-0455faa8\":\"e918a155\",\"chunk-0a1a66d1\":\"66108333\",\"chunk-0a8beea5\":\"c6a0ab66\",\"chunk-0ab0c831\":\"648bad91\",\"chunk-0dc5834e\":\"967d18b7\",\"chunk-0f5be4c8\":\"04586c18\",\"chunk-1008acba\":\"bbc07d64\",\"chunk-10ad1f94\":\"d3ce9af9\",\"chunk-157e343e\":\"236494c6\",\"chunk-197dce10\":\"3e56558a\",\"chunk-1ab316fe\":\"cf79b81b\",\"chunk-1b2d158d\":\"d5159b30\",\"chunk-1dca4329\":\"9a4b908f\",\"chunk-213cfb3d\":\"d27de7a7\",\"chunk-218077f2\":\"cd816d55\",\"chunk-222eee5c\":\"c1126b26\",\"chunk-224158a6\":\"b0a115fc\",\"chunk-235b55a8\":\"b8d127a4\",\"chunk-24a1c838\":\"75260bb0\",\"chunk-25a9b131\":\"d3ce9af9\",\"chunk-26894169\":\"81ab5fed\",\"chunk-28e2d911\":\"04586c18\",\"chunk-2d50f78e\":\"348f654e\",\"chunk-31500ee7\":\"41054fc8\",\"chunk-32cabcd8\":\"b12aa8ed\",\"chunk-36b6c67c\":\"026a0522\",\"chunk-36bf6fba\":\"bbd10a84\",\"chunk-37b0f3fc\":\"225bcaf1\",\"chunk-389b8415\":\"f23100e3\",\"chunk-38b02792\":\"d3ce9af9\",\"chunk-38d709ce\":\"4b2a7ab8\",\"chunk-39ce40e8\":\"52c26e9b\",\"chunk-39e3da6c\":\"97a8168f\",\"chunk-3cacbb33\":\"d3ce9af9\",\"chunk-3eb4b8ca\":\"2f2f7d95\",\"chunk-45b7f5a0\":\"08fb344b\",\"chunk-494d3a1e\":\"974a7716\",\"chunk-4edabddc\":\"8947f64c\",\"chunk-50341536\":\"49e3cbb3\",\"chunk-528d292a\":\"01780415\",\"chunk-537d08d1\":\"86908867\",\"chunk-5563abf3\":\"3222afbc\",\"chunk-55e2cbf0\":\"974a7716\",\"chunk-59727bae\":\"c3c181b7\",\"chunk-5c858ad3\":\"0afa36e3\",\"chunk-5f8dde16\":\"a6b76408\",\"chunk-5fa0ce14\":\"e87ecd51\",\"chunk-6393c487\":\"8bab825b\",\"chunk-63df135a\":\"ea3f9ebe\",\"chunk-674387c2\":\"0d80d3b5\",\"chunk-692698aa\":\"2e29083b\",\"chunk-69679642\":\"eef1f247\",\"chunk-69906d21\":\"6ba707a8\",\"chunk-6a2a650b\":\"e992364b\",\"chunk-6cf75f79\":\"f3194534\",\"chunk-6d7d3db6\":\"7bb6695c\",\"chunk-6f5e0dea\":\"f3bfd8e1\",\"chunk-71b677ce\":\"030114f8\",\"chunk-7494c630\":\"4488cc85\",\"chunk-778ecfad\":\"d3ce9af9\",\"chunk-7796181d\":\"04586c18\",\"chunk-79858360\":\"bdce8f79\",\"chunk-79cd5f6a\":\"2c6e579e\",\"chunk-7c2b7c7c\":\"9a158326\",\"chunk-7dc48394\":\"5cfed98c\",\"chunk-7de051ac\":\"e529c7e6\",\"chunk-7f7e2f75\":\"974a7716\",\"chunk-7fc1e7ae\":\"d3ce9af9\",\"chunk-824f93aa\":\"438a214f\",\"chunk-8d663fa0\":\"adee5655\",\"chunk-992abc90\":\"f219fa10\",\"chunk-9d914c4c\":\"d3ce9af9\",\"chunk-9db60a20\":\"5c734355\",\"chunk-a1965082\":\"d3ce9af9\",\"chunk-a46e85a4\":\"77be6719\",\"chunk-c5d1b562\":\"e1b18309\",\"chunk-c7d1557e\":\"82e8b068\",\"chunk-cc8cdaf6\":\"45c65949\",\"chunk-cf2b6880\":\"61d5ddb0\",\"chunk-d1f4523e\":\"e4cc05c0\",\"chunk-d78128fe\":\"b2f2494c\",\"chunk-d7ee5cd4\":\"53bd520e\",\"chunk-df91aaa2\":\"9883fdfc\",\"chunk-e7e57d76\":\"bf22065c\",\"chunk-e8ce0510\":\"72670149\",\"chunk-5f75410e\":\"69ea4bdf\",\"chunk-098d3f2d\":\"31d6cfe0\",\"chunk-ef379cae\":\"831ca1b0\",\"chunk-11f161ea\":\"3273c09d\",\"chunk-29b3e6e4\":\"1cad377b\",\"chunk-47d833bc\":\"0cdcc26f\",\"chunk-572a5856\":\"6d8bcdf8\",\"chunk-02a342b6\":\"915cf0bd\",\"chunk-05bc9e10\":\"58e83e0a\",\"chunk-1af04962\":\"855cb669\",\"chunk-22014418\":\"9e4cc424\",\"chunk-2a36fc34\":\"7b2ec486\",\"chunk-2d21a36c\":\"31d6cfe0\",\"chunk-2dc467a4\":\"4749dcf8\",\"chunk-2e3965ab\":\"ec5f88b2\",\"chunk-324f3011\":\"c57e96f8\",\"chunk-3665c68b\":\"feff91c9\",\"chunk-39d2a125\":\"d7f6cda9\",\"chunk-3f6425ea\":\"120a5914\",\"chunk-40e36145\":\"b2bb0877\",\"chunk-43bcb5eb\":\"31d6cfe0\",\"chunk-4c7c3e60\":\"087f0920\",\"chunk-4d6ce2de\":\"b916d36f\",\"chunk-4e768ea2\":\"19b33950\",\"chunk-55613a9a\":\"05e24360\",\"chunk-59da0d87\":\"087f0920\",\"chunk-64f0c4a8\":\"a2e76739\",\"chunk-6c136c29\":\"4cc84226\",\"chunk-6d3bb1dd\":\"04ca157c\",\"chunk-6e791a15\":\"84f581e2\",\"chunk-71afa0eb\":\"7ed2b2b1\",\"chunk-74e79b22\":\"0313f14f\",\"chunk-9083a328\":\"a148c5fb\",\"chunk-91b7a526\":\"087f0920\",\"chunk-a151d716\":\"c71aa76b\",\"chunk-a4740116\":\"04ba9727\",\"chunk-1a5f1fbd\":\"cd826b34\",\"chunk-a987939c\":\"6ea40d69\",\"chunk-608367ab\":\"c72fc375\",\"chunk-f25cd728\":\"716801a3\",\"chunk-b0714942\":\"6211c6a7\",\"chunk-d1f8f086\":\"b371da58\",\"chunk-31e24ede\":\"13b603b9\",\"chunk-e9031c86\":\"087f0920\",\"chunk-e7b1f298\":\"36665765\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/live/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { Meta } from '../model/common/Meta'\nimport { isUndefined } from 'lodash'\nimport 'reflect-metadata'\n\nconst metaClassMetadataKey = Symbol('MetaClass')\n\nclass MetaClassOptions {\n isArray = false\n}\n\ninterface MetaClassMetadata {\n MetaClass: new () => T;\n options: MetaClassOptions;\n}\n\nexport function MetaClass (MetaClass: new () => T, options?: MetaClassOptions) {\n return Reflect.metadata(metaClassMetadataKey, { MetaClass, options })\n}\n\nexport function needToConvertToMetaClass (target: any, propertyKey: string): boolean {\n return !isUndefined(Reflect.getMetadata(metaClassMetadataKey, target, propertyKey))\n}\n\nexport function convertJsonToMetaClass (target: any, propertyKey: string, value: object | object[]): T | T[] {\n const metaClassMetadata: MetaClassMetadata = Reflect.getMetadata(metaClassMetadataKey, target, propertyKey)\n const MetaClass = metaClassMetadata.MetaClass\n const { isArray } = metaClassMetadata.options || new MetaClassOptions()\n\n if (isArray) {\n if (!value || !(value instanceof Array)) {\n return []\n }\n\n return (value as object[]).map(e => {\n const newMetaClass = new MetaClass()\n newMetaClass.assignData(Object.keys(e), Object.values(e))\n return newMetaClass\n })\n } else {\n const newMetaClass = new MetaClass()\n\n if (!value) {\n return newMetaClass\n }\n\n newMetaClass.assignData(Object.keys(value), Object.values(value))\n return newMetaClass\n }\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheHeader.vue?vue&type=style&index=0&id=450b50d8&lang=scss&scoped=true&\"","import { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport { IDateService } from '@master/services/IDateService'\nimport { RelationshipOptions } from '@master/model/options/RelationshipOptions'\nimport { isNull, isUndefined } from 'lodash/fp'\nimport { ArrayBase } from '../ArrayBase'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { GenderOptions } from '../options/GenderOptions'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\nexport default class Dependant extends ArrayBase {\n type = 'dependant'\n\n @MaxChar(InputMaxChar.XSMALL)\n name = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n nric = ''\n\n dob?: number = undefined\n gender: string | keyof typeof GenderOptions = ''\n yearsSupport = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n relationship: string | keyof typeof RelationshipOptions = ''\n\n @Ignore()\n dateService: IDateService\n\n constructor (dateService: IDateService) {\n super()\n this.dateService = dateService\n }\n\n @Ignore()\n @Pointer('ROOT.clientDeclaration', 'reviewDate')\n reviewDate?: number = 0\n\n @Ignore()\n relationshipOptions = RelationshipOptions\n\n @Ignore()\n genderOptions = GenderOptions\n\n get age () {\n if (!this.dob) return null\n return this.dateService.calculateAge(this.reviewDate ? new Date(this.reviewDate) : new Date(), new Date(this.dob))\n }\n\n isValid () {\n return !isUndefined(this.name) && !isNull(this.name) && this.name !== ''\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { TypeBase } from '../../TypeBase'\n\nexport const priorityLevel = {\n '': '',\n h: 'High',\n m: 'Medium',\n l: 'Low',\n na: 'Not Applicable'\n} as const\n\nexport default class NeedsBase extends TypeBase {\n plan = false\n level: keyof typeof priorityLevel = ''\n\n // To indicate if this needs is protection\n // is used for PTC No recommendation for high priority needs\n @Ignore()\n isProtection = false\n\n @Ignore()\n name = ''\n\n @Ignore()\n needs: string = undefined\n\n @Ignore()\n defaultRate?: number\n\n /**\n * this is to allow implementation side to set default rate to the model\n * @param inDefaultRate\n */\n setupDefaultRate (inDefaultRate: number) {\n this.defaultRate = inDefaultRate\n }\n\n resetAllFields () {\n const excludedKeys = ['type', 'needs', 'name', 'defaultRate', 'inflation', 'interestRate', 'infAdjReturn', 'projectSettings']\n Object.keys(this).filter(key => !excludedKeys.includes(key)).map(key => {\n this[key] = undefined\n })\n }\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheFooter.vue?vue&type=style&index=0&id=92fe777e&lang=scss&scoped=true&\"","import { isEmpty } from 'lodash/fp'\nimport { FormBase, signature } from '../FormBase'\n\nexport const BisoTypeOptions = [\n { label: 'New', value: 'new' },\n { label: 'Amendment', value: 'amend' }\n]\nexport const BisoStatusOptions = [\n { label: 'If you are holding any directorship/ sole proprietorship/ partnership/ other business interests in any entity in Singapore or elsewhere.', value: 'holding' },\n { label: 'If you are ceasing your existing business interest', value: 'ceasing' }\n]\nexport const DeclarantTypeOptions = [\n { label: 'New', value: 'new' },\n { label: 'Existing', value: 'existing' }\n]\nexport const BiRoleTypeOptions = [\n { label: 'Executive Director', value: 'ed' },\n { label: 'Non-Executive Director', value: 'ned' },\n { label: 'Sole Proprietor', value: 'soleprop' },\n { label: 'Partner', value: 'partner' },\n { label: 'Others', value: 'others' }\n // { label: 'Special Advisor', value: 'others6' },\n // { label: 'Board Advisor', value: 'others2' },\n // { label: 'Chairman', value: 'others3' }\n]\nexport class BisoFields {\n submissionType: typeof BisoTypeOptions[number]['value'] = 'new'\n declarantType: typeof DeclarantTypeOptions[number]['value'] = 'new'\n // shared.repCode\n // shared.name\n // shared.nric.value\n status: typeof BisoStatusOptions[number]['value'] = 'holding'\n\n biEntityName = ''\n biEntityCountry = '' // options\n biEntityNature = '' // options\n biEffectiveDate: number = undefined\n biRole: typeof BiRoleTypeOptions[number]['value'] = 'ed' // options\n biRoleSpecified = ''\n\n ownEntityName = ''\n ownEntityCountry = '' // options\n ownEntityNature = '' // options\n ownEffectiveDate: number = undefined\n ownPercentage: number = undefined\n\n declarantSignature: signature\n\n entityPurpose = ''\n entityService = ''\n entityRole = ''\n entityInvolvement = ''\n\n conflicted = false\n agree = false\n}\nexport class BusinessInterestShareholding extends FormBase {\n type = 'business-interest-shareholding'\n data: BisoFields = new BisoFields()\n signatures = {\n applicant: '',\n applicantDate: undefined\n }\n\n get error () {\n const errs = []\n if (this.data.biRole === 'others' && isEmpty(this.data.biRoleSpecified)) {\n errs.push({\n key: 'biRoleSpecified',\n msg: 'Please specify role in your entity'\n })\n }\n if (!this.data.agree) {\n errs.push({\n key: 'agree',\n msg: 'Please read and confirm agreement on terms'\n })\n }\n return errs\n }\n}\n","import { sum } from '../math'\nimport NeedsBase from '../NeedsBase'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class PersonalAccidentNeeds extends NeedsBase {\n name = 'Personal Accident'\n needs = 'Personal Accident'\n amount?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 'h1') {\n super(`${type}_${id}`)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get surplusShortfall () {\n return sum(-this.amount, this.sumAvailable, -this.sumRequired)\n }\n}\n","interface IRouteBasic {\n name: string;\n path: string;\n component: () => void;\n}\n\nexport interface IChildrenRouteStructure extends IRouteBasic{\n shouldDisabled?: boolean | ((T) => boolean);\n}\n\nexport interface IRouteStructure extends IRouteBasic {\n redirect?: {name: string; path?: string};\n children?: IChildrenRouteStructure [];\n}\nexport function bscReviewerRestriction (systemRole: string) {\n return systemRole === 'bsc-reviewer'\n}\n\nexport const RouteStructure: IRouteStructure = {\n name: 'User Profile Main',\n path: '/user/:userOid/',\n component: () => import('../UserProfile.vue'),\n redirect: { name: 'User Profile' },\n children: [\n {\n name: 'User Profile',\n path: 'profile-summary',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('../sections/UserProfileSummary.vue')\n },\n {\n path: 'adviser-details',\n name: 'User Adviser Details',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('../sections/UserAdviserDetails.vue')\n },\n {\n path: 'commission-structure',\n name: 'User Commission Structure',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('../sections/UserCommissionStructure.vue')\n },\n {\n path: 'bsc-records',\n name: 'User BSC Records',\n component: () => import('../sections/UserBscRecords.vue')\n },\n {\n path: 'cpd-records',\n name: 'User CPD Records',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('../sections/UserCpdRecords.vue')\n }\n ]\n}\n","import { cid, container } from 'inversify-props'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { chain } from 'lodash'\nimport { RouteConfig } from 'vue-router'\nimport { bscReviewerRestriction, RouteStructure } from './structure'\nexport function userProfileRoutes (): RouteConfig {\n const route: RouteConfig = RouteStructure as RouteConfig\n return route\n}\n\nexport function getChildSections (systemRole: string, router) {\n const useNewCommissionModule = container.get(cid.IProjectSettings).useNewCommissionModule\n const childrenRoute = chain(router.options.routes.find(route => route.name === 'User Profile Main')?.children).value()\n\n if (useNewCommissionModule) {\n const indexOfCommissionStatements = childrenRoute.findIndex(e => e.name === 'User Commission Statements')\n childrenRoute[indexOfCommissionStatements] = {\n path: 'commission-statements',\n name: 'User Commission Statements',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/UserCommissionStatements.vue')\n }\n\n const indexOfCommissionStructure = childrenRoute.findIndex(e => e.name === 'User Commission Structure')\n childrenRoute[indexOfCommissionStructure] = {\n path: 'commission-structure',\n name: 'User Commission Structure',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@core/pages/CommissionModule/UserCommissionStructure.vue')\n }\n }\n\n childrenRoute.map(child => {\n // if there is disabledUI function then implement it here, because we cannot pass system role when we init the route\n if (child.shouldDisabled && typeof child.shouldDisabled === 'function') {\n const functionName = child.shouldDisabled as Function\n child.shouldDisabled = functionName(systemRole)\n }\n return child\n })\n\n return childrenRoute\n}\n","import 'reflect-metadata'\n\n/**\n * Ignore annotation can support getter now, but it needs extra implementation in Base.ts\n * and new version will found the key via Object.keys()\n */\nconst jsonMetadataKey = Symbol('Ignore')\n\nexport function Ignore () {\n return Reflect.metadata(jsonMetadataKey, true)\n}\n\nexport function isIgnore (target: any, propertyKey: string) {\n return Reflect.getMetadata(jsonMetadataKey, target, propertyKey)\n}\n","import { TableFormStructure } from '@master/model/structure/FormStructure'\nimport DependantsProtectionClient from '@master/model/kyc-form/need-analysis/protection/DependantsProtectionClient'\nimport { YesNoOptions } from '@master/model/options/DefaultOptions'\nexport function DependantsProtectionStructure (dependantOptions) {\n const structure: TableFormStructure = [\n {\n label: 'Name of Dependant',\n key: 'depName',\n type: 'dropdown',\n classes: ['wrap-select'],\n options: dependantOptions,\n onChange: (oldVal, newVal, depModal) => {\n depModal.disabledInput = false\n },\n clearModelWhenEmpty: {\n alertMessage: 'This will clear the dependant data entry. Proceed?',\n actionConfirm: (oldVal, newVal, depModal) => {\n depModal.disabledInput = true\n depModal.clear()\n },\n actionCancel: (oldVal, newVal, depModal) => {\n depModal.disabledInput = false\n }\n }\n },\n {\n title: 'i. In the Event of Hospitalisation',\n colspan: 6\n },\n {\n label: 'Preferred Hospital Type',\n key: 'preferredHospitalType',\n type: 'dropdown',\n options: [\n { label: '', value: '' },\n { label: 'Public', value: 'public' },\n { label: 'Private', value: 'private' }\n ],\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: 'Preferred Ward Type',\n key: 'preferredWardType',\n type: 'dropdown',\n options: [\n { label: '', value: '' },\n { label: 'A', value: 'A' },\n { label: 'B1', value: 'B1' },\n { label: 'B2', value: 'B2' },\n { label: 'C', value: 'C' }\n ],\n disabled: (dependantsProtectionClient) => dependantsProtectionClient.preferredHospitalType === 'private' || dependantsProtectionClient.shouldDisabledInput\n },\n {\n label: 'Rider for Deductible & Co-Insurance',\n key: 'riderDeductible',\n type: 'dropdown',\n options: [{ label: '', value: '' }, ...YesNoOptions],\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: 'Existing hospital coverage (Type, ward and coverage)',\n key: 'existingCoverage',\n type: 'textarea',\n rows: 5,\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n title: 'ii. In the Event of Critical Illness',\n colspan: 6\n },\n {\n label: 'Total Funds Required ($)',\n key: 'totalFundsRequired',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: '- Less existing resources (if any) ($)',\n key: 'iiLessExisting',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: '
Surplus / (Shortfall) ($)
',\n key: 'criticalIllnessSurplus',\n type: 'currency',\n classes: ['disabled-td'],\n disabled: true\n },\n {\n title: 'iii. In the Event of Disability',\n colspan: 6\n },\n {\n label: 'Annual expenses required ($)',\n key: 'annualExpenses',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: 'Number of years required',\n key: 'yearsRequired',\n type: 'number',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: 'Inflation adjusted rate return (%)',\n key: 'infAdjusted',\n type: 'number',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: 'Lump sum required to maintain lifestyle (PV) ($)',\n key: 'disabilityLumpSum',\n type: 'currency',\n classes: ['disabled-td'],\n disabled: true\n },\n {\n label: '+ Cost of medical treatment ($)',\n key: 'medicalTreatment',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: 'Estimated amount required for disability ($)',\n key: 'disabilityEstimatedAmount',\n type: 'currency',\n classes: ['disabled-td'],\n disabled: true\n },\n {\n label: '- Other funds available ($)',\n key: 'otherFunds',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: '
Surplus / (Shortfall) ($)
',\n key: 'disabilitySurplus',\n type: 'currency',\n classes: ['disabled-td'],\n disabled: true\n },\n {\n title: 'iv. In the Event of Death',\n colspan: 6\n },\n {\n label: 'Final Expenses ($)',\n key: 'finalExpenses',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: '+ Loans (eg education loan etc) ($)',\n key: 'loans',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: '+ Others ($)',\n key: 'others',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: 'Total cash needs ($)',\n key: 'deathCashNeeds',\n type: 'currency',\n classes: ['disabled-td'],\n disabled: true\n },\n {\n label: '- Less existing resources (if any) ($)',\n key: 'ivLessExisting',\n type: 'currency',\n disabled: (dep) => { return dep.shouldDisabledInput }\n },\n {\n label: '
Surplus / (Shortfall) ($)
',\n key: 'deathSurplus',\n type: 'currency',\n classes: ['disabled-td'],\n disabled: true\n }\n ]\n return structure\n}\n","import EducationNeedsDetail from '@master/model/kyc-form/need-analysis/savings/EducationNeedsDetail'\nimport { TableFormStructure } from '@master/model/structure/FormStructure'\n\nexport function EducationStructure (dependantOptions) {\n const structure: TableFormStructure = [\n { label: 'Who is this provided for', key: 'providedFor', type: 'dropdown', classes: ['wrap-select'], options: dependantOptions },\n { label: 'Current age of child', key: 'age', type: 'number', disabled: (edu) => { return !edu.isValid() } },\n { label: 'Cost of education today / Amount needed ($) (Tuition + Allowances)', key: 'costOfEducation', type: 'currency', disabled: (edu) => { return !edu.isValid() } },\n { label: 'Country of study', key: 'countryOfStudy', type: 'text', disabled: (edu) => { return !edu.isValid() } },\n { label: 'Course Duration (years)', key: 'courseDuration', type: 'number', disabled: (edu) => { return !edu.isValid() } },\n { label: 'Number of years to save', key: 'yearsToSave', type: 'number', disabled: (edu) => { return !edu.isValid() } },\n { label: 'Average education inflation rate (%)', key: 'inflation', type: 'number', disabled: (edu) => { return !edu.isValid() } },\n { label: 'Total cost of education at entry age ($)', key: 'totalEducationCost', type: 'currency', disabled: true },\n { label: '- Maturity value of existing insurance policies for this planning ($)', key: 'maturityValueOfExistingPolicies', type: 'currency', disabled: (edu) => { return !edu.isValid() } },\n { label: '- Existing resources ($)', key: 'existingResources', type: 'currency', disabled: (edu) => { return !edu.isValid() } },\n { label: '
Surplus / (Shortfall)
', key: 'surplusShortfall', type: 'currency', disabled: true }\n ]\n\n return structure\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport OtherNeeds from '@master/model/kyc-form/need-analysis/others/OtherNeeds'\n\nexport function OthersStructure (dependantOptions) {\n const structure: FNAStructure = {\n title: 'Other Needs',\n data: [\n {\n label: 'What are you planning for',\n key: 'planningFor',\n type: 'text',\n ejsClass: 'ejs-plan-div',\n validationMsg: 'Other Needs requires to indicate planning for.'\n }, {\n label: 'Who is this provided for',\n key: 'providedForWho',\n type: 'dropdown',\n options: dependantOptions,\n ejsClass: 'ejs-plan-div',\n validationMsg: 'Other Needs requires to indicate planning for.'\n }, {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Amount/Benefits needed',\n key: 'amountNeeded',\n type: 'currency',\n validationMsg: 'Other Needs requires to indicate amount needed.'\n }, {\n label: '- Existing relevant benefits ($)',\n key: 'existingBenefits',\n type: 'currency',\n validationMsg: 'Other Needs requires to specify existing benefits.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","// Structure\nimport { DeathProtectionStructure } from '@company-common/model/kyc-form/needs-analysis/structure/protection/DeathProtectionStructure'\nimport { DisabilityProtectionStructure } from '@company-common/model/kyc-form/needs-analysis/structure/protection/DisabilityProtectionStructure'\nimport { CriticalIllnessProtectionStructure } from '@company-common/model/kyc-form/needs-analysis/structure/protection/CriticalIllnessProtectionStructure'\nimport { DisabilityIncomeProtectionStructure } from '@company-common/model/kyc-form/needs-analysis/structure/protection/DisabilityIncomeProtectionStructure'\nimport { LongTermCareProtectionStructure } from '@company-common/model/kyc-form/needs-analysis/structure/protection/LongTermCareProtectionStructure'\nimport { DependantsProtectionStructure } from '@company-common/model/kyc-form/needs-analysis/structure/protection/DependantsProtectionStructure'\n\nimport { PersonalAccidentStructure } from '@company-common/model/kyc-form/needs-analysis/structure/accidentHealth/PersonalAccidentStructure'\nimport { HospitalisationStructure } from '@company-common/model/kyc-form/needs-analysis/structure/accidentHealth/HospitalisationStructure'\n\nimport { RetirementStructure } from '@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/RetirementStructure'\nimport { SavingsStructure } from '@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/SavingsStructure'\nimport { InvestmentStructure } from '@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/InvestmentStructure'\nimport { EducationStructure } from '@company-common/model/kyc-form/needs-analysis/structure/savingInvestment/EducationStructure'\nimport { OthersStructure } from '@company-common/model/kyc-form/needs-analysis/structure/others/OthersStructure'\n\nimport NeedsBase, { priorityLevel } from '@master/model/kyc-form/need-analysis/NeedsBase'\nimport KYCForm from '@company-common/model/kyc-form/KYCForm'\nimport { isEmpty } from 'lodash/fp'\n\nimport CustomExistingPortfolioV2 from '@company-common/model/kyc-form/existing-plans/CustomExistingPortfolioV2'\nimport { PriorityStructure } from '@master/model/kyc-form/need-analysis/PrioritiesNeeds2'\nimport KYCClient from '@company-common/model/kyc-form/KYCClient'\nimport { YearsSupportMap } from '@company-common/model/kyc-form/CustomDependant'\n\nexport class ThePrioritiesNeeds {\n protected prioritiesStructure: PriorityStructure[] = [\n {\n type: 'Protection',\n sharedNoteKey: 'deathProtectionNeeds',\n items: [\n {\n id: 'P1',\n key: 'deathProtectionNeeds',\n name: 'Death Protection',\n plan: 'lifeProtection',\n needs: 'Death',\n structure: DeathProtectionStructure,\n defaultValue: this.getDPDefaultValue\n },\n {\n id: 'P2',\n key: 'disabilityProtectionNeeds',\n name: 'Total Permanent Disability Protection',\n plan: 'disabilityProtection',\n needs: 'Disability (TPD)',\n structure: DisabilityProtectionStructure,\n defaultValue: this.getTPDDefaultValue\n },\n {\n id: 'P3',\n key: 'criticalIllnessNeeds',\n name: 'Critical Illness Protection',\n plan: 'criticalIllnessProtection',\n needs: 'Critical Illness',\n structure: CriticalIllnessProtectionStructure,\n defaultValue: this.getCIDefaultValue\n },\n {\n id: 'P4',\n key: 'disabilityIncomeNeeds',\n name: 'Disability Income Protection',\n plan: 'disabilityIncome',\n needs: 'Loss of income due to illness or disability',\n structure: DisabilityIncomeProtectionStructure,\n defaultValue: this.getDIDefaultValue\n },\n {\n id: 'P5',\n key: 'longTermProtectionClient',\n name: 'Long Term Care Protection',\n needs: 'Old Age Disabilities',\n structure: LongTermCareProtectionStructure\n },\n {\n id: 'P6',\n key: 'dependantsProtection',\n name: 'Dependant\\'s Protection',\n needs: 'Dependant Protection',\n structure: DependantsProtectionStructure,\n dataDetail: 'dependantsProtectionClient',\n optionsDropDown: true\n }\n ]\n },\n {\n type: 'Accident & Health',\n sharedNoteKey: 'hospitalizationNeeds',\n items: [\n {\n id: 'H1',\n key: 'personalAccidentNeeds',\n name: 'Personal Accident',\n needs: 'Personal Accident',\n plan: 'accidentProtection',\n defaultValue: this.getPADefaultValue,\n structure: PersonalAccidentStructure\n },\n {\n id: 'H2',\n key: 'hospitalizationNeeds',\n name: 'Hospitalisation Expenses',\n needs: 'Hospitalisation Expenses',\n structure: HospitalisationStructure\n }\n ]\n },\n {\n type: 'Saving & Investment',\n items: [\n {\n id: 'S1',\n key: 'retirementNeeds',\n name: 'Retirement',\n needs: 'Retirement',\n plan: 'maturityValue',\n structure: RetirementStructure,\n defaultValue: this.getRetirementDefaultValue\n },\n {\n id: 'S2',\n key: 'savingsNeeds',\n name: 'Savings',\n needs: 'Savings and Investment',\n structure: SavingsStructure\n },\n {\n id: 'S3',\n key: 'investmentNeeds',\n name: 'Investment',\n needs: 'Savings and Investment',\n structure: InvestmentStructure\n },\n {\n id: 'S4',\n key: 'educationNeeds',\n name: 'Education Planning',\n needs: 'Children\\'s Education',\n structure: EducationStructure,\n dataDetail: 'educationNeedsDetails',\n optionsDropDown: true\n }\n ]\n },\n {\n type: 'Others',\n sharedNoteKey: 'other1Needs',\n items: [\n {\n id: 'M1',\n key: 'other1Needs',\n name: 'Others 1',\n structure: OthersStructure,\n optionsDropDown: true\n },\n {\n id: 'M2',\n key: 'other2Needs',\n name: 'Others 2',\n structure: OthersStructure,\n optionsDropDown: true\n }\n ]\n }\n ]\n\n getPrioritiesStructure () {\n return this.prioritiesStructure\n }\n\n getProrityLevel () {\n return priorityLevel\n }\n\n getPriorities () {\n return this.prioritiesStructure.flatMap(({ items }) => items)\n }\n\n getAllNeedAnalysisId () {\n return this.getPriorities().map(({ id }) => id)\n }\n\n getNeedAnalysisWithId (targetId) {\n return this.getPriorities().find(need => need.id === targetId)\n }\n\n getFilteredPriorities (kycForm: KYCForm) {\n const includeClient2 = kycForm.hasClient2\n return this.getPriorities()\n // filter all need that client selected to plan\n .filter(({ key }) => {\n const client1Plan = (kycForm.client1[key] as NeedsBase).plan\n const client2Plan = includeClient2 ? (kycForm.client2[key] as NeedsBase).plan : false\n return client1Plan || client2Plan\n })\n }\n\n getNeeds () {\n const needs = this.prioritiesStructure\n // return all items in list\n .flatMap(({ items }) => items)\n .map(needs => needs.needs)\n .filter(needs => !isEmpty(needs))\n return [...(new Set(needs))]\n }\n\n getPriorityId (targetKey) {\n const needs = this.prioritiesStructure\n .flatMap(({ items }) => items).find(need => need.key === targetKey)\n return needs?.id\n }\n\n // this function return the priority list that has been checked on identifying priority view\n getSelectedPriorityList (type: string, kycForm: KYCForm, selectedClient) {\n const client = selectedClient === 'Client 1' ? 'client1' : 'client2'\n\n const priorityInType = this.prioritiesStructure\n .find(priority => priority.type === type).items\n .filter(item => {\n const needsModal = kycForm[client][item.key] as NeedsBase\n return needsModal.plan\n })\n return priorityInType\n }\n\n getSelectedPlan (key) {\n return this.prioritiesStructure\n .flatMap(({ items }) => items)\n .find(plan => plan.key === key)\n }\n\n getProfolioPrefix (selectedClient: string) {\n if (!selectedClient) return\n return selectedClient === 'Client 1' ? 'c1' : 'c2'\n }\n\n getClientPrefix (selectedClient: string) {\n if (!selectedClient) return\n return selectedClient === 'Client 1' ? 'client1' : 'client2'\n }\n\n getAvailable1DefaultValue (kycForm, planKey, portfolioPrefix) {\n return kycForm.existingPortfolio.summary?.existingPortfolioSummary[portfolioPrefix][planKey]\n }\n\n getPlanStructureWithDefaultValue (key, selectedClient, kycForm) {\n const selectedPlan = this.getSelectedPlan(key)\n const portfolioPrefix = this.getProfolioPrefix(selectedClient)\n const clientPrefix = this.getClientPrefix(selectedClient)\n\n const defaultValue = selectedPlan.defaultValue ? selectedPlan.defaultValue(kycForm, selectedPlan.plan, portfolioPrefix, clientPrefix) : undefined\n return selectedPlan.structure(defaultValue)\n }\n\n getPlanStructureWithOptions (key, options) {\n const selectedPlan = this.getSelectedPlan(key)\n return selectedPlan.structure(options)\n }\n\n getDPDefaultValue (kycForm, planKey, portfolioPrefix, clientPrefix) {\n // total liabilities (required1) = networth's total liabilities\n // Existing life insurance (available1) = Your Current Plans -> Summary of Existing Policy Portfolio (DE)\n // -Other funds available (available2) = Net Worth -> Invested Asset + Cash/Cash Equivalents\n const considerExistingPortfolio = kycForm.existingPortfolio.declaration.review === 'yes'\n\n const required1 = kycForm[clientPrefix].netWorth?.totalLiabilities\n const available1 = considerExistingPortfolio ? kycForm.existingPortfolio.summary?.existingPortfolioSummary[portfolioPrefix][planKey] : 0\n const available2 = (kycForm[clientPrefix].netWorth?.totalInvestedAssets || 0) + (kycForm[clientPrefix].netWorth?.totalCashAssets || 0)\n\n const totalAnnualIncome = kycForm[clientPrefix].cashFlow?.totalAnnualIncome\n\n return { available1: available1 || 0, required1: required1 || 0, available2: available2 || 0, annualIncome: totalAnnualIncome }\n }\n\n getTPDDefaultValue (kycForm, planKey, portfolioPrefix, clientPrefix) {\n // Existing disability benefits (available1) = Your Current Plans -> Summary of Existing Policy Portfolio (TPD)\n // -Other funds available (available2) = Net Worth -> (Total Invested Assets excluding CPF OA and CPF SA) + Total Cash/Cash Equivalents\n const considerExistingPortfolio = kycForm.existingPortfolio.declaration.review === 'yes'\n\n const available1 = considerExistingPortfolio ? kycForm.existingPortfolio.summary?.existingPortfolioSummary[portfolioPrefix][planKey] : 0\n const available2 = (kycForm[clientPrefix].netWorth?.totalInvestedAssets || 0) + (kycForm[clientPrefix].netWorth?.totalCashAssets || 0) - (kycForm[clientPrefix].netWorth?.cpfOrdinary || 0) - (kycForm[clientPrefix].netWorth?.cpfSpecial || 0)\n\n const totalAnnualIncome = kycForm[clientPrefix].cashFlow?.totalAnnualIncome\n\n return { available1: available1 || 0, available2: available2 || 0, annualIncome: totalAnnualIncome }\n }\n\n getCIDefaultValue (kycForm, planKey, portfolioPrefix, clientPrefix) {\n // -Existing CI Insurance (available 1) = Your Current Plans -> Summary of Existing Policy Portfolio(CI)\n // Other funds available (available2) = Net Worth -> CPF MA + Total Cash/Cash Equivalents\n const considerExistingPortfolio = kycForm.existingPortfolio.declaration.review === 'yes'\n\n const available1 = considerExistingPortfolio ? kycForm.existingPortfolio.summary?.existingPortfolioSummary[portfolioPrefix][planKey] : 0\n const available2 = (kycForm[clientPrefix].netWorth?.cpfMedisave || 0) + (kycForm[clientPrefix].netWorth?.totalCashAssets || 0)\n\n const totalAnnualIncome = kycForm[clientPrefix].cashFlow?.totalAnnualIncome\n\n return { available1: available1 || 0, available2: available2 || 0, annualIncome: totalAnnualIncome }\n }\n\n getDIDefaultValue (kycForm, planKey, portfolioPrefix, clientPrefix) {\n // -Existing CI Insurance (available 1) = Your Current Plans -> Summary of Existing Policy Portfolio(DI)\n // Other funds available (available2) = Net Worth -> Total Cash/Cash Equivalents\n const considerExistingPortfolio = kycForm.existingPortfolio.declaration.review === 'yes'\n\n const available1 = considerExistingPortfolio ? kycForm.existingPortfolio.summary?.existingPortfolioSummary[portfolioPrefix][planKey] : 0\n const available2 = kycForm[clientPrefix].netWorth?.totalCashAssets\n\n const totalAnnualIncome = kycForm[clientPrefix].cashFlow?.totalAnnualIncome\n\n return { available1: available1 || 0, available2: available2 || 0, annualIncome: totalAnnualIncome }\n }\n\n getPADefaultValue (kycForm, planKey, portfolioPrefix) {\n // --Current resources/provisions (available 1) = Your Current Plans -> Summary of Existing Policy Portfolio(PA)\n const considerExistingPortfolio = kycForm.existingPortfolio.declaration.review === 'yes'\n\n const available1 = considerExistingPortfolio ? kycForm.existingPortfolio.summary?.existingPortfolioSummary[portfolioPrefix][planKey] : 0\n return { available1: available1 || 0 }\n }\n\n getRetirementDefaultValue (kycForm, planKey, portfolioPrefix, clientPrefix) {\n // Maturity value of insurance plan(s) at retirement (available2) = Your Current Plans -> Summary of Existing Policy Portfolio(MV)\n // Years to retirement (years) = Client Age - Personal Details Intended Retirement Age\n const considerExistingPortfolio = kycForm.existingPortfolio.declaration.review === 'yes'\n\n const available1 = considerExistingPortfolio ? kycForm.existingPortfolio.summary?.existingPortfolioSummary[portfolioPrefix][planKey] : 0\n const incomePv = kycForm.clientAssumptions.adjustmentsAssumptionsRetirement / 100 * kycForm[clientPrefix].cashFlow.totalIncome\n const retirementAge = kycForm[clientPrefix].personalDetails.intendedRetirementAge\n const year = retirementAge - kycForm[clientPrefix].personalDetails.age\n const yearsToSupport = YearsSupportMap[kycForm[clientPrefix].personalDetails?.gender]?.year\n const duration = Math.max(0, (yearsToSupport - retirementAge))\n\n return { incomePv: incomePv, available2: available1, retirementYear: year, duration }\n }\n\n isArrayStructure (key: string) {\n const targetStructure = this.getSelectedPlan(key).structure()\n return targetStructure instanceof Array\n }\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport { CriticalIllnessProtectionClient } from '@master/model/kyc-form/need-analysis/protection/CriticalIllnessProtectionClient'\n\nexport function CriticalIllnessProtectionStructure (defaultValue: { available1: number; annualIncome: number }) {\n const structure: FNAStructure = {\n title: 'P3. Critical Illness Protection',\n data: [\n {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Desired annual income required to sustain lifestyle during illness ($)',\n key: 'income',\n type: 'currency',\n default: defaultValue?.annualIncome,\n validationMsg: 'Critical Illness Protection requires to indicate desired annual income.'\n }, {\n label: 'Number of years required',\n key: 'yearsRequired',\n validationMsg: 'Critical Illness Protection requires to indicate years required.'\n }, {\n label: 'Inflation adjusted rate return (%)',\n key: 'infAdjReturn',\n defaultTo: 'defaultRate',\n validationMsg: 'Critical Illness Protection requires to indicate inflation adjusted rate return.'\n }, {\n label: 'Lump sum required to maintain lifestyle (PV) ($)',\n key: 'fundsRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '+ Cost of medical treatment ($)',\n key: 'required1',\n type: 'currency',\n validationMsg: 'Critical Illness Protection requires to indicate cost of medical treatment.'\n }, {\n label: '+ Other funding needs ($)',\n key: 'required2',\n type: 'currency',\n validationMsg: 'Critical Illness Protection requires to indicate other funding needs.'\n }, {\n label: 'Estimated amount required for illness ($)',\n key: 'totalRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '- Existing CI insurance ($)',\n key: 'available1',\n type: 'currency',\n default: defaultValue?.available1,\n validationMsg: 'Critical Illness Protection requires to indicate existing CI insurance.'\n }, {\n label: '- Other funds available ($)',\n key: 'available2',\n type: 'currency',\n validationMsg: 'Critical Illness Protection requires to indicate other funds available.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import { ProductMetaData } from '../ProductMetaData'\n\nexport const CoverageTypeOptions = [\n { value: '', label: '' },\n { value: 'basic', label: 'Basic' },\n { value: 'plus', label: 'Plus' },\n { value: 'member', label: 'Member' },\n { value: 'memberfamily', label: 'Member & Family' },\n { value: 'silver', label: 'Silver' },\n { value: 'gold', label: 'Gold' },\n { value: 'platinum', label: 'Platinum' },\n { value: 'diamond', label: 'Diamond' },\n { value: 'self', label: 'Self' },\n { value: 'couple', label: 'Couple' },\n { value: 'n.a.', label: 'N.A.' }\n]\nexport class GiOthers extends ProductMetaData {\n insuranceClass = undefined\n coverageType = undefined\n listOfInsured = undefined\n\n grossPremium = undefined\n gst = undefined\n commissionRate = undefined\n commissionPayment = undefined\n commissionPayable = undefined\n grossCommissionEarned = undefined\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport SavingsNeeds from '@master/model/kyc-form/need-analysis/savings/SavingsNeeds'\n\nexport function SavingsStructure (defaultValue: { interestRate: number}) {\n const structure: FNAStructure = {\n title: 'S2. Savings',\n data: [\n {\n label: 'What are you planning for',\n key: 'planning',\n ejsClass: 'ejs-plan-div',\n type: 'text',\n validationMsg: 'Savings requires to indicate what are you planning for.'\n }, {\n label: 'Accumulation period (Years)',\n key: 'period',\n validationMsg: 'Savings requires to indicate accumulation period (Years).'\n }, {\n label: 'Amount needed (FV) ($)',\n key: 'amountFv',\n type: 'currency',\n validationMsg: 'Savings requires to indicate amount needed (FV).'\n }, {\n label: 'Value of fund to be used ($)',\n key: 'fundValue',\n type: 'currency',\n validationMsg: 'Savings requires to indicate value of fund to be used.'\n }, {\n label: 'Interest rate (%)',\n key: 'interestRate',\n defaultTo: 'defaultRate',\n validationMsg: 'Savings requires to indicate interest rate.'\n }, {\n label: '- Total funds available (FV) ($)',\n key: 'totalFundsFv',\n type: 'currency',\n disabled: true\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }, {\n label: 'Assuming investment rate of return to reach your savings goal you will need to save (%)',\n key: 'rateOfReturn',\n validationMsg: 'Savings requires to indicate value of fund to be used.'\n }, {\n label: 'Monthly REGULAR Contribution required ($)',\n key: 'contribution',\n type: 'currency',\n disabled: true\n }, {\n label: 'SINGLE Lump Sum required ($)',\n key: 'lumpSum',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { ClientBase } from '../ClientBase'\n\nexport default class RecommendationBasis extends ClientBase {\n liquidityConsideration = ''\n liquidityEmergencyFundsDuration = ''\n riskConcentration = ''\n riskToleranceInTune = ''\n timeHorizonProtection = ''\n timeHorizonSavings = ''\n productDeviationsExistence = ''\n\n @MaxChar(640)\n liquidityDeviationReason = ''\n\n @MaxChar(100)\n productDeviationsExistenceReason = ''\n\n productRecommendationElaboration = ''\n productRiskAndLimitationsElaboration = ''\n recommendationDecision = '' // became clientChoiceProductDetails depend on Client's Declaration's clientDecisionAgree == false (double check)\n\n @MaxChar(640)\n riskConcentrationDeviationReason = ''\n\n @MaxChar(640)\n riskToleranceDeviationReason = ''\n\n @MaxChar(640)\n timeHorizonDeviationReason = ''\n}\n","import { getClone } from '@core/annotation/ExpandableArray'\nexport class FormBase {\n oid = ''\n version = '1'\n type = ''\n accountOid = ''\n activityId = ''\n signed = false\n data = {}\n signatures = {\n applicant: '',\n applicantDate: undefined\n }\n\n pdfName = '' // this is for composite form reference, e.g. application form (which consist of subforms)\n\n extractAndAssign (formData: { data: {} }) {\n // console.time(`extractAndAssign ${this.type}`)\n Object.keys(this).forEach((key) => {\n if (this[key] instanceof Array && formData[key] instanceof Array) {\n this.extractArray(this, key, this[key], formData[key])\n } else if (this[key] instanceof Object && formData[key] instanceof Object) {\n this.extractObject(this[key], formData[key])\n } else if (key in formData && key in this) {\n this[key] = formData[key]\n }\n })\n // console.timeEnd(`extractAndAssign ${this.type}`)\n }\n\n resizeArray (parent: any, key: any, target: any[], source: any[]) {\n const required = source.length - target.length\n if (required > 0 && getClone(parent, key)) {\n Array(required).fill(null).forEach(() => {\n target.splice(target.length, 1, getClone(parent, key)())\n })\n } else if (required < 0) {\n target.splice(source.length - 1)\n }\n }\n\n extractArray (parent: any, key: any, target: any[], source: any[]) {\n let i = 0\n this.resizeArray(parent, key, target, source)\n while (source.length > i) {\n if (target[i] instanceof Array && source[i] instanceof Array) {\n this.extractArray(target, i, target[i], source[i])\n } else if (target[i] instanceof Object && source[i] instanceof Object) {\n this.extractObject(target[i], source[i])\n } else {\n // console.log('replacing', i, target[i], source[i])\n target.splice(i, 1, source[i])\n }\n i++\n }\n }\n\n extractObject (target: object, source: object) {\n Object.entries(target).forEach(([fk, fv]) => {\n // if both match\n if (fv instanceof Array && source[fk] instanceof Array) {\n this.extractArray(target, fk, fv, source[fk])\n } else if (fv instanceof Object && source[fk] instanceof Object) {\n this.extractObject(fv, source[fk])\n } else {\n // console.log(target, fk, source[fk])\n if (fk in source) Object.assign(target, { [fk]: source[fk] })\n }\n })\n }\n\n isDirty (saved: FormBase) {\n return Object.entries(this).some(([fk, fv]) => {\n if (fv instanceof Array && saved[fk] instanceof Array) {\n return this.isArrayDirty(fv, saved[fk])\n } else if (fv instanceof Object && saved[fk] instanceof Object) {\n return this.isObjectDirty(fv, saved[fk])\n } else {\n if (fv !== saved[fk]) console.log('isDirty', fk, fv, saved[fk])\n return fv !== saved[fk]\n }\n })\n }\n\n isObjectDirty (obj1: object, obj2: object) {\n return Object.entries(obj1).some(([fk, fv]) => {\n if (fv instanceof Array && obj2[fk] instanceof Array) {\n return this.isArrayDirty(fv, obj2[fk])\n } else if (fv instanceof Object && obj2[fk] instanceof Object) {\n return this.isObjectDirty(fv, obj2[fk])\n } else {\n if (fv !== obj2[fk]) console.log('isObjectDirty', fk, fv, obj1, obj2)\n return fv !== obj2[fk]\n }\n })\n }\n\n isArrayDirty (arr1: any[], arr2: any[]) {\n // console.log(arr1, arr2)\n if (arr1.length !== arr2.length) return true\n let i = 0\n let dirty = false\n while (arr1.length > i && arr2.length > i && dirty === false) {\n if (arr1[i] instanceof Array && arr2[i] instanceof Array) {\n dirty = this.isArrayDirty(arr1[i], arr2[i])\n } else if (arr1[i] instanceof Object && arr2[i] instanceof Object) {\n dirty = this.isObjectDirty(arr1[i], arr2[i])\n } else {\n if (arr1[i] !== arr2[i]) console.log('isArrayDirty', arr1[i], arr2[i])\n dirty = arr1[i] !== arr2[i]\n }\n i++\n }\n return dirty\n }\n\n /**\n * this returns list of error pertaining the current form\n * Note : the form class should implement the error checking\n */\n get error (): FormError[] {\n return []\n }\n\n /**\n * override this method if any transformation of data is required before saving\n * @returns object (key-value)\n */\n transform () {\n const saveable = { ...this }\n delete saveable.pdfName\n return saveable\n }\n}\n\nexport type FormError = {\n key: string;\n msg?: string;\n msgs?: { key: string; msg: string }[];\n}\n\nexport type signature = {\n base64: string;\n date: number;\n}\n","module.exports = __webpack_public_path__ + \"img/client-list.8e52ca76.svg\";","import { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\n\nexport class PrincipalMeta extends Meta {\n @RawKey('_oid')\n oid = ''\n\n companyDetailsName = ''\n companyDetailsCode = ''\n adviserCode = ''\n}\n","import { needToConvertJson } from '@master/annotation/Json'\nimport { getRawKey } from '@master/annotation/RawKey'\nimport { getDefault } from '@master/annotation/Default'\nimport { get, isEmpty, isUndefined, snakeCase } from 'lodash/fp'\nimport { isIgnore } from '@master/annotation/Ignore'\nimport { IPointer, isPointer } from '@master/annotation/Pointer'\nimport { convertJsonToMetaClass, needToConvertToMetaClass } from '@master/annotation/MetaClass'\n\nexport class Base {\n snakeCaseKey (key: string) {\n return snakeCase(key)\n }\n\n getPointers (): IPointer[] {\n const pointers: IPointer[] = []\n Object.keys(this).forEach((attr) => {\n const grabProfile = isPointer(this, attr)\n if (grabProfile) {\n pointers.push({\n pointerKey: attr,\n ...grabProfile\n })\n }\n })\n return pointers\n }\n\n // life cycle hook\n beforeExtractData (rawData: any): any {\n return rawData\n }\n\n // call after success extract data\n // can used to set default if value is undefined\n afterExtractData (data: {}) {\n // base class do nothing, just return\n return data\n }\n\n // to get data from raw kycForm to fill in current class\n extractData(rawData: any, index?: number)\n extractData (rawData: any) {\n const editedRawData = this.beforeExtractData(rawData)\n const data = Object.keys(this)\n // skip when base object\n .filter(key => !(get(key, this) instanceof Base))\n .filter(key => !isIgnore(this, key) && !isPointer(this, key))\n .reduce((result, key) => {\n const snakeCaseKey = getRawKey(this, key) || this.snakeCaseKey(key)\n let value = get(snakeCaseKey, editedRawData)\n if (needToConvertToMetaClass(this, key) && !isEmpty(value)) {\n value = convertJsonToMetaClass(this, key, JSON.parse(value))\n }\n if (needToConvertJson(this, key) && !isEmpty(value)) {\n value = JSON.parse(value)\n }\n if (isUndefined(value)) {\n value = getDefault(this, key)\n }\n result = { ...result, [key]: value }\n return result\n }, {})\n return this.afterExtractData(data)\n }\n\n // to get back the raw data for saving to backend\n convertToRawData(index?: number)\n convertToRawData () {\n let parent = Object.getPrototypeOf(this)\n let getterKeys = []\n\n // loop all parent to get all the getter keys\n while (parent instanceof Base) {\n const keys = Object.entries(Object.getOwnPropertyDescriptors(parent))\n .filter(([, descriptor]) => typeof descriptor.get === 'function')\n .map(([key]) => key)\n\n getterKeys = getterKeys.concat(keys)\n parent = Object.getPrototypeOf(parent)\n }\n\n // remove duplicate key\n getterKeys = [...new Set(getterKeys)]\n\n const propertyKeys = Object.keys(this)\n // skip when base object\n .filter(key => !(get(key, this) instanceof Base))\n\n return [...getterKeys, ...propertyKeys]\n .filter(key => !isIgnore(this, key) && !isPointer(this, key))\n .reduce((result, key) => {\n const snakeCaseKey = getRawKey(this, key) || this.snakeCaseKey(key)\n let value = get(key, this)\n // convert back to stringify json\n if (needToConvertToMetaClass(this, key) && value !== undefined) {\n value = JSON.stringify(value.convertToRawData(null))\n }\n if (needToConvertJson(this, key)) {\n value = JSON.stringify(value)\n }\n result = { ...result, [snakeCaseKey]: value }\n return result\n }, {})\n }\n}\n","import 'reflect-metadata'\n\nconst jsonMetadataKey = Symbol('Json')\n\nexport function Json () {\n return Reflect.metadata(jsonMetadataKey, true)\n}\n\nexport function needToConvertJson (target: any, propertyKey: string) {\n return Reflect.getMetadata(jsonMetadataKey, target, propertyKey)\n}\n","import { options } from '@master/model/options/Options'\n\nexport const WrapList = ['Wrap', 'Non-wrap'] as const\nexport const WrapOptions: options[] = WrapList.map(wrap => {\n return {\n label: wrap,\n value: wrap\n }\n})\n","import { options } from '@master/model/options/Options'\n\nconst options = ['Yes', 'No', 'NA']\nexport const DefaultOptions: options[] = options.map(option => {\n return {\n label: option,\n value: option.toLowerCase()\n }\n})\n\nexport const YesNoOptions: options[] = options.filter(option => option !== 'NA').map(option => {\n return {\n label: option,\n value: option.toLowerCase()\n }\n})\n\nexport const YesNoBlankOptions: options[] = [{ label: '', value: undefined }].concat(YesNoOptions)\n\nexport const YesNaOptions: options[] = options.filter(option => option !== 'No').map(option => {\n return {\n label: option,\n value: option.toLowerCase()\n }\n})\n","import ExistingPortfolioV2 from '@master/model/kyc-form/existing-plans/ExistingPortfolioV2'\nimport { isSummaryField } from '@master/annotation/SummaryField'\n\nexport default class CustomExistingPortfolioV2 extends ExistingPortfolioV2 {\n getSummaryFields (): { attrName: string; abbre: string }[] {\n const excludedKeys = ['roomAndBoard', 'hospitalIncome', 'maturityValue']\n const summaryFields: { attrName: string; abbre: string }[] = []\n Object.keys(this).forEach(attr => {\n if (excludedKeys.includes(attr)) return // exclude keys\n const grabSummaryField = isSummaryField(this, attr)\n if (grabSummaryField) {\n summaryFields.push({\n attrName: attr,\n ...grabSummaryField\n })\n }\n })\n return summaryFields\n }\n}\n","import { Selection } from '@core/annotation/Selection'\nimport { CitizenshipOptions } from '@master/model/options/CitizenshipOptions'\nimport { GenderOptions } from '@master/model/options/GenderOptions'\nimport { MaritalStatusOptions } from '@master/model/options/MaritalStatusOptions'\nimport { RaceOptions } from '@master/model/options/RaceOptions'\nimport { FormBase } from '../FormBase'\n\nexport class SpouseDetails {\n name = ''\n nric = ''\n dob: number = undefined\n citizenship = '' // options\n nationalitySpecified = ''\n passportNo = ''\n occupation = ''\n employer = ''\n}\nexport class ContactDetails {\n unit = ''\n block = ''\n street = ''\n building = ''\n postalCode = ''\n homeNo = ''\n mobileNo = ''\n email = ''\n}\nexport class BankDetails {\n name = ''\n branch = ''\n accountNo = ''\n}\nexport class PersonalFields {\n preferredName = ''\n\n @Selection(GenderOptions)\n gender = '' // options\n\n dob: number = undefined\n\n @Selection(CitizenshipOptions)\n citizenship = ''\n\n nationalitySpecified = ''\n passportNo = ''\n\n @Selection(RaceOptions)\n race = ''\n\n raceSpecified = ''\n\n @Selection(MaritalStatusOptions)\n maritalStatus = ''\n\n spouse: SpouseDetails = new SpouseDetails()\n\n contact: ContactDetails = new ContactDetails()\n\n bank: BankDetails = new BankDetails()\n}\nexport class Personal extends FormBase {\n // shared.name\n // shared.nric\n // shared.branch\n // shared.rm\n // shared.fsm\n type = 'personal'\n data: PersonalFields = new PersonalFields()\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{staticClass:\"loader\"},[_c('div',{staticClass:\"wrapper\"},[_c('div',{staticClass:\"ring\"},[_c('div'),_c('div'),_c('div'),_c('div')])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator'\n\n@Component\nexport default class AppLoader extends Vue {\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLoader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLoader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppLoader.vue?vue&type=template&id=1e01b00e&scoped=true&\"\nimport script from \"./AppLoader.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppLoader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppLoader.vue?vue&type=style&index=0&id=1e01b00e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e01b00e\",\n null\n \n)\n\nexport default component.exports","import { Base } from '../Base'\n\nexport interface Fund {\n name: string;\n invAmt: number;\n frequency: string;\n paymentMode: string;\n for: string;\n choice: string;\n}\nexport default class ILPPortfolioV2 extends Base {\n buySwitch = ''\n choice = ''\n for = ''\n frequency = ''\n // Future way of using funds, previous fund and inv are for backward compatibility.\n funds: Fund[] = []\n\n name = ''\n platform = ''\n accountNumber = ''\n\n oid = ''\n issuerOid = ''\n paymentMode = ''\n rcmdReferenceId = '' // this used for mapping on the NBR, it will show relevant ilp subList on nbr detail page\n\n clearData () {\n const excludeKeys = ['type', 'startIndex', 'curIndex']\n Object.keys(this).forEach(key => {\n if (!excludeKeys.includes(key)) {\n // need assign value as empty string to overwrite the data that is stored in database,\n if (this[key] instanceof Array) {\n this[key] = []\n } else {\n this[key] = ''\n }\n }\n })\n }\n\n afterExtractDataBase (data: { funds: any[] }) {\n return super.afterExtractData(data)\n }\n\n afterExtractData (data: { funds: any[] }) {\n const defaultMap = super.afterExtractData(data)\n\n data.funds = data.funds.map(element => {\n /* eslint-disable @typescript-eslint/camelcase */\n const fund = {\n name: element.name,\n invAmt: element.inv_amt,\n frequency: element.frequency,\n paymentMode: element.payment_mode,\n for: element.for,\n choice: element.choice\n }\n return fund\n })\n\n Object.assign(data, defaultMap)\n return data\n }\n\n convertToRawData () {\n const data: any = super.convertToRawData()\n\n // Convert funds\n /* eslint-disable @typescript-eslint/camelcase */\n const rawFunds = this.funds.map(fund => {\n return {\n name: fund.name,\n inv_amt: fund.invAmt,\n frequency: fund.frequency,\n payment_mode: fund.paymentMode,\n for: fund.for,\n choice: fund.choice\n }\n })\n data.funds = rawFunds\n return data\n }\n}\n","import PersonalDetails from '@master/model/kyc-form/PersonalDetails'\nimport { isUndefined, isNull, isEmpty } from 'lodash/fp'\nimport NeedsBase, { priorityLevel as PriorityLevel } from '@master/model/kyc-form/need-analysis/NeedsBase'\nimport CKA from '@master/model/kyc-form/CKA'\nimport Switching from '@master/model/kyc-form/Switching'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport BasicProduct from '@master/model/kyc-form/product/BasicProduct'\nimport Budget from '@master/model/kyc-form/finances/Budget'\nimport Recommendation from '@master/model/kyc-form/RecommendationV2'\n\nfunction noRankedHighNeedsCheck (client) {\n const keys = Object.keys(client)\n .filter(key => {\n return client[key] instanceof NeedsBase\n })\n let foundHigh = false\n for (let i = 0; i < keys.length; ++i) {\n if (PriorityLevel[client[keys[i]].level] === PriorityLevel.h) {\n foundHigh = true\n break\n }\n }\n\n return !foundHigh\n}\n\nfunction noFullDisclosure (...discloseArray: boolean[]) {\n return discloseArray.every(disclose => !disclose)\n}\n\nfunction budgetLimitBreachedCheck (annualBudget: number, singleBudget: number, budgetMoreThanHalfString: string, totalAnnualisedPremium: number, totalSinglePremium: number) {\n let budgetLimitBreached = budgetMoreThanHalfString === 'yes'\n\n annualBudget = annualBudget || 0\n singleBudget = singleBudget || 0\n\n if (totalAnnualisedPremium > 0 && totalAnnualisedPremium > annualBudget) {\n budgetLimitBreached = true\n }\n\n if (totalSinglePremium > 0 && totalSinglePremium > singleBudget) {\n budgetLimitBreached = true\n }\n\n return budgetLimitBreached\n}\n\nfunction budgetLimitBreachCheckV2 (budget: Budget, budgetMoreThanHalfString: string, recommendation: Recommendation, clientIndex: 0|1) {\n throw new Error('Not implemented, look at PFP company-common logic code for reference')\n}\n\nfunction clientFailedCKACheck (cka: CKA) {\n return cka.ckaMet === 'yes'\n}\n\nfunction clientRiskProfileConservativeCheck (clientRiskProfile: string) {\n return clientRiskProfile === 'conservative'\n}\n\nfunction clientDidNotProvideEmailAddressCheck (personalDetail: PersonalDetails) {\n let isInvalidEmail = false\n // regex check for valid email format\n if (!(/^\\S+@\\S+\\.\\S+$/).test(personalDetail.contactEmail)) {\n isInvalidEmail = true\n }\n\n return isUndefined(personalDetail.contactEmail) || isNull(personalDetail.contactEmail) || personalDetail.contactEmail === '' || isInvalidEmail\n}\n\nfunction recommendationForProductReplacementSwitchingCheck (switching: Switching) {\n return switching.topUp === 'yes' || switching.advisedBefore === 'yes'\n}\n\nfunction clientDisagreesWithAdviserRecommendationCheck (clientIndex: 0 | 1, recommendations: BasicProduct[]) {\n return recommendations\n .filter(product => Number(product.clientIndex) === clientIndex)\n .some(product => product.clientChoice === 'ownchoice')\n}\n\nfunction clientHasIncompleteFieldsCheck (validationResult) {\n return 'Client\\'s Declaration' in validationResult\n}\n\nfunction incompleteBopPepSectionCheck (validationResult) {\n // No BO & PEP at this moment\n // change the key accordingly when added\n return 'BO' in validationResult || 'PEP' in validationResult\n}\n\nfunction highRiskCheck (clientIndex: 0 | 1, citizenship: string, country: string, recommendations: BasicProduct[], highRiskCountryList: string[], country2?: string) {\n const isFromHighRiskCountry = citizenship !== 'singaporean' && (highRiskCountryList.includes(country) || highRiskCountryList.includes(country2))\n\n const isOverLimit = recommendations.map(product => {\n // checking on insurance-rider wont affect BasicProductV1 because V1 rider is nested\n const amount = (product.type === 'insurance') ? product.premiumAmount : product.sumAssured\n const array = [{\n clientIndex: product.clientIndex,\n amount,\n frequency: product.frequency,\n clientChoice: product.clientChoice\n }]\n\n if (product.riders.length > 0) { // BasicProductV1 handler\n array.concat(product.riders.map(rider => {\n return {\n clientIndex: product.clientIndex,\n amount: rider.premiumAmount,\n frequency: rider.frequency,\n clientChoice: rider.clientChoice\n }\n }))\n }\n\n return array\n })\n // flatten rider\n .flat()\n // remove product that not for this client\n .filter(({ clientIndex: _clientIndex }) => _clientIndex === clientIndex)\n // remove not single payment and not not selected product\n .filter(({ frequency, clientChoice }) => frequency === 'Single' && (clientChoice === 'accept' || clientChoice === 'ownchoice'))\n // amount must more than 500k\n .some(({ amount }) => Number(amount) >= 500000)\n\n return isFromHighRiskCountry || isOverLimit\n}\n\nfunction isRcmdRiskRatingGreaterThanClientRPA (riskRatingService: IRiskRatingService, rcmdRiskRating: number, clientRiskProfile: string, exceedAllowed = 0) {\n // if client risk profile result is null, always return true\n if (isEmpty(clientRiskProfile)) return true\n\n const rawToValueMap = riskRatingService.rawToValueMap()\n let enumClientRiskProfile = 0\n if (rawToValueMap[clientRiskProfile]) {\n enumClientRiskProfile = rawToValueMap[clientRiskProfile]\n }\n if (rcmdRiskRating > enumClientRiskProfile + exceedAllowed) {\n return true\n }\n\n return false\n}\n\nfunction productRiskRating (clientIndex: 0 | 1, clientRiskProfile: string, recommendations: BasicProduct[], riskRatingService: IRiskRatingService) {\n // returns true when a product whose recommended risk rating is greater than client RPA\n return recommendations.some(product => {\n if (product.clientIndex === clientIndex) {\n const clientChoice = product.clientChoice\n const isSelectedProduct = clientChoice === 'accept' || clientChoice === 'ownchoice'\n\n if (!isSelectedProduct) {\n return false\n }\n\n // investmentSubFunds only appear on BasicProductV2\n const isInvestmentProduct = product.type === 'investment' || product.type === 'investment-subFunds'// insurance or investment\n const isILPType = product.productType?.toLowerCase().includes('ilp') // 'product type' value from the product library\n const isInvestmentLinkCategory = product.productCategory?.toLowerCase().includes('investment-linked') // 'category' value from the product library\n\n if (isInvestmentProduct || isILPType || isInvestmentLinkCategory) {\n const rcmdRiskRating = product.recommendedRiskProfile\n if (rcmdRiskRating) {\n return isRcmdRiskRatingGreaterThanClientRPA(riskRatingService, rcmdRiskRating, clientRiskProfile)\n }\n }\n }\n return false\n })\n}\n\nexport {\n noRankedHighNeedsCheck,\n noFullDisclosure,\n budgetLimitBreachedCheck,\n clientFailedCKACheck,\n clientRiskProfileConservativeCheck,\n clientDidNotProvideEmailAddressCheck,\n recommendationForProductReplacementSwitchingCheck,\n clientDisagreesWithAdviserRecommendationCheck,\n clientHasIncompleteFieldsCheck,\n incompleteBopPepSectionCheck,\n highRiskCheck,\n isRcmdRiskRatingGreaterThanClientRPA,\n productRiskRating\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { BscInscopeProductDTO } from '../models/BscInscopeProductDTO';\nimport type { BscInscopeRequestBody } from '../models/BscInscopeRequestBody';\nimport type { BscPolicyInfractionDTO } from '../models/BscPolicyInfractionDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class BscService {\n\n /**\n * @param requestBody\n * @returns BscInscopeProductDTO\n * @throws ApiError\n */\n public static async checkProductsInscope(\n requestBody: BscInscopeRequestBody,\n ): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/bsc/check-products`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async savePolicyInfraction(\n requestBody: BscPolicyInfractionDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/bsc/save-meta`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","import { options } from './Options'\n\nexport const NBRStatusOptions: options[] = [\n { label: '', value: 'new' },\n { label: 'Approved by Ops', value: 'approved_by_ops' },\n { label: 'Pending Approval', value: 'pending' },\n { label: 'Rejected by Ops', value: 'rejected' }\n]\n","import { FormBase, signature } from '../FormBase'\n\nexport class PrevEmploymentInquiry extends FormBase {\n // shared.name\n // shared.nric\n type = 'prev-employment-inquiry'\n\n data = {\n agree: false\n }\n}\n","import { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\n\nexport const SpokenLangOptions = [\n { label: '', value: '' },\n { label: 'English', value: 'english' },\n { label: 'Mandarin', value: 'mandarin' },\n { label: 'Malay', value: 'malay' },\n { label: 'Tamil', value: 'tamil' },\n { label: 'Others', value: 'others' }\n]\nexport const WrittenLangOptions = [\n { label: '', value: '' },\n { label: 'English', value: 'english' },\n { label: 'Chinese', value: 'chinese' },\n { label: 'Malay', value: 'malay' },\n { label: 'Tamil', value: 'tamil' },\n { label: 'Others', value: 'others' }\n]\nexport const EduLevelOptions = [\n { label: '', value: '' },\n { label: 'Primary & below', value: 'primaryandbelow' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'GCE \\'O/N\\' Level', value: 'gceonlevel' },\n { label: 'Pre-U/JC', value: 'preujc' },\n { label: 'Diploma', value: 'diploma' },\n { label: 'Degree', value: 'degree' },\n { label: 'Post Graduate', value: 'postgrad' }\n]\nexport const IncomeTierOptions = [\n { label: '', value: '' },\n { label: '< 30,000', value: 'tier1' },\n { label: '30,000 - 50,000', value: 'tier2' },\n { label: '50,001 - 100,000', value: 'tier3' },\n { label: '100,001 - 150,000', value: 'tier4' },\n { label: '150,001 - 300,000', value: 'tier5' },\n { label: '> 300,000', value: 'tier6' }\n]\nexport const EmploymentStatOptions = [\n { label: '', value: '' },\n { label: 'Full Time', value: 'fulltime' },\n { label: 'Self Employed', value: 'selfemployed' },\n { label: 'Part Time', value: 'parttime' },\n { label: 'Not Employed', value: 'unemployed' }\n]\nexport const ActivitiesOptions = [\n { label: '', value: '' },\n { label: 'Money changer', value: 'Money changer' },\n { label: 'Remittance agent', value: 'Remittance agent' },\n { label: 'Casino', value: 'Casino' },\n { label: 'Pawnbroker', value: 'Pawnbroker' },\n { label: 'Moneylender', value: 'Moneylender' },\n { label: 'Senior management or equivalent of non-profit organization', value: 'Senior management or equivalent of non-profit organization' },\n { label: 'Precious stones & metal dealer', value: 'Precious stones & metal dealer' },\n { label: 'Virtual currency (eg.bitcoins, precious metal backed digital currency etc)', value: 'Virtual currency ' },\n { label: 'Antique trader', value: 'Antique trader' },\n { label: 'Owner of cash-intensive (eg. hawker, convenience store, second-hand dealer, coffeeshop operator etc)', value: 'Owner of cash-intensive' },\n { label: 'Activities related to production / distribution of arms related products, trading of oil and natural gas (eg. crude oil, processed oil)', value: 'Activities related to production / distribution of arms related products, trading of oil and natural gas' },\n { label: 'Agriculture (eg. wheat, barley, livestock, fruit, cotton)', value: 'Agriculture ' },\n { label: 'Mineral resource trader (eg. phosphate mines, salt mines, cement plants, sulphuric manufacturer) ', value: 'Mineral resource trader' }\n]\nexport class ClientPersonal extends Meta {\n nationality = undefined\n nationalityOthers = undefined\n nationalityOthers2 = undefined\n gender = undefined\n maritalStatus = undefined\n dob = undefined\n\n @RawKey('residential_address1')\n residentialAddress1 = undefined\n\n @RawKey('country_of_residence1')\n countryOfResidence1 = undefined\n\n @RawKey('postal_code1')\n postalCode1 = undefined\n\n @RawKey('residential_address2')\n residentialAddress2 = undefined\n\n @RawKey('country_of_residence2')\n countryOfResidence2 = undefined\n\n @RawKey('postal_code2')\n postalCode2 = undefined\n\n @RawKey('residential_address3')\n residentialAddress3 = undefined\n\n @RawKey('country_of_residence3')\n countryOfResidence3 = undefined\n\n @RawKey('postal_code3')\n postalCode3 = undefined\n\n @RawKey('mobile_no1')\n mobileNo1 = undefined\n\n @RawKey('office_no1')\n officeNo1 = undefined\n\n @RawKey('home_no1')\n homeNo1 = undefined\n\n @RawKey('email1')\n email1 = undefined\n\n @RawKey('mobile_no2')\n mobileNo2 = undefined\n\n @RawKey('office_no2')\n officeNo2 = undefined\n\n @RawKey('home_no2')\n homeNo2 = undefined\n\n @RawKey('email2')\n email2 = undefined\n\n @RawKey('mobile_no3')\n mobileNo3 = undefined\n\n @RawKey('office_no3')\n officeNo3 = undefined\n\n @RawKey('home_no3')\n homeNo3 = undefined\n\n @RawKey('email3')\n email3 = undefined\n\n employmentStatus = undefined\n eduLvl = undefined\n exactDuties = undefined\n occupation = undefined\n companyName = undefined\n annualIncomeRange = undefined\n spokenLang = []\n spokenLangOthers = undefined\n writtenLang = []\n writtenLangOthers = undefined\n smokerStatus: 'yes' | 'no' | '' = undefined\n medicalConditionOption: 'yes' | 'no' | '' = undefined\n medicalCondition = undefined\n involvedInActivities: 'yes' | 'no' | '' = undefined\n activitiesSpecified = undefined\n}\n","import BasicProduct from './BasicProduct'\nimport InvestmentProduct from './InvestmentProduct'\nimport { Default } from '@master/annotation/Default'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport { ClientChoiceOptions } from '@master/model/options/ClientChoiceOptions'\n\nexport class BasicProductV2 extends BasicProduct {\n @Default([])\n investmentFunds: InvestmentProduct[] = []\n\n afterExtractData (data: { riders: any[]; investmentFunds: InvestmentProduct[]}) {\n const defaultMap = super.afterExtractData(data)\n\n const investmentFunds: InvestmentProduct[] = data.investmentFunds.map(funds => {\n const newInvest = new InvestmentProduct(this.riskRatingService, defaultMap)\n Object.assign(newInvest, newInvest.extractData(funds))\n return newInvest\n })\n data.investmentFunds = investmentFunds\n Object.assign(data, defaultMap)\n return data\n }\n\n convertToRawData () {\n const data: any = super.convertToRawData()\n\n // Convert riders\n const rawRiders = this.riders.map(riderProduct => riderProduct.convertToRawData())\n data.riders = rawRiders\n\n // convert investment sub-funds\n const rawInvestmentFunds = this.investmentFunds.map(investFund => investFund.convertToRawData())\n // eslint-disable-next-line @typescript-eslint/camelcase\n data.investment_funds = rawInvestmentFunds\n return data\n }\n\n get totalAnnualisedPremium () {\n let total = 0\n if (this.type === 'insurance' && this.isAcceptedProduct) {\n total += this.annualisedPremium\n total += this.riders.reduce((total, rider) => total + rider.annualisedPremium, 0)\n } else if (this.type === 'investment') {\n total += this.investmentFunds.reduce((total, invest) => {\n if (invest.isAcceptedProduct) {\n total += invest.annualisedPremium\n }\n return total\n }, 0)\n }\n\n return total\n }\n\n get totalSinglePremium () {\n let total = 0\n if (this.type === 'insurance' && this.isAcceptedProduct) {\n total += this.singlePremium\n total += this.riders.reduce((total, rider) => total + rider.singlePremium, 0)\n } else if (this.type === 'investment') {\n total += this.investmentFunds.reduce((total, invest) => {\n if (invest.isAcceptedProduct) {\n total += invest.singlePremium\n }\n return total\n }, 0)\n }\n\n return total\n }\n\n constructor (riskRatingService: IRiskRatingService) {\n super(riskRatingService)\n\n this.riskRatingService = riskRatingService\n\n const rejectValues = ['reject', 'kiv']\n // add proxy to get onChange on clientChoice and set all the riders to the save value if client reject or kiv\n // this is used in Our Recommendation client's decision tab\n // to make sure user can't reject or kiv on basic product and make riders accept or own choice at the same time\n // assign basic product client choice to rider's mainProductClientChoice\n // assign investment main account client choice to its own investment subfunds's mainProductClientChoice\n return new Proxy(this, {\n set: function (obj, prop, value) {\n if (prop === 'clientChoice') {\n if (rejectValues.includes(value)) {\n obj.riders.forEach(rider => { rider.clientChoice = value as keyof typeof ClientChoiceOptions })\n obj.investmentFunds.forEach(investFunds => { investFunds.clientChoice = value as keyof typeof ClientChoiceOptions })\n }\n obj.riders.forEach(rider => { rider.mainProductClientChoice = value as keyof typeof ClientChoiceOptions })\n obj.investmentFunds.forEach(investFunds => { investFunds.mainProductClientChoice = value as keyof typeof ClientChoiceOptions })\n }\n\n if (prop === 'clientIndex') {\n if (obj.type === 'investment') {\n // to made investment subfunds has main account info\n obj.investmentFunds.forEach(funds => { funds.mainAccountIndex = value })\n } else if (obj.type === 'insurance') {\n obj.riders.forEach(rider => { rider.clientIndex = value })\n }\n }\n\n if (prop === 'accountNumber' && obj.type === 'investment') {\n obj.investmentFunds.forEach(funds => { funds.accountNumber = value })\n }\n\n if (prop === 'oid' && obj.type === 'investment') {\n obj.investmentFunds.forEach(funds => { funds.mainAccountNameOid = value })\n }\n\n obj[prop] = value\n return true\n }\n })\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { MetaList } from '@master/model/common/MetaList'\nimport { UserMeta } from './UserMeta'\n\nexport class UserMetaList extends MetaList {\n list: UserMeta[]\n\n constructor (data: (string | number)[][], header: string[] = null) {\n const defaultHeader = [\n '_oid',\n 'names',\n 'fullname',\n 'systemrole',\n 'email',\n 'mobile',\n 'company_code',\n 'mas_repno',\n 'adviser_branch',\n 'status',\n 'adviser_products',\n 'other_adviser_products',\n 'id_doc_type',\n 'id_number',\n 'with_exp',\n 'groups',\n 'old_password',\n 'new_password',\n 'confirm_password'\n ]\n super(!header ? defaultHeader : header, data, UserMeta)\n }\n\n getListFilterByRole (roles: string[]) {\n return this.list.filter(usermeta => roles.includes(usermeta.systemrole))\n }\n\n @Ignore()\n get options () {\n return this.list.map((user) => {\n return {\n label: user.fullname || user.names[0],\n value: user.oid\n }\n })\n }\n}\n","import 'reflect-metadata'\n\nconst maxChar = Symbol('MaxChar')\n\nexport function MaxChar (charLimit: number) {\n return Reflect.metadata(maxChar, charLimit)\n}\n\nexport function getMaxChar (target: any, propertyKey: string) {\n return Reflect.getMetadata(maxChar, target, propertyKey)\n}\n","import { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport ProductBase from './ProductBase'\nimport { PaymentModeList } from '@master/model/options/PaymentModeOptions'\nimport { WrapList } from '@master/model/options/WrapOptions'\nimport { ClientChoiceOptions } from '@master/model/options/ClientChoiceOptions'\n\nexport default class InvestmentProduct extends ProductBase {\n clientIndex?: 0 | 1 = undefined\n jointClientIndex?: 0 | 1 = undefined\n wrap: '' | typeof WrapList[number] = ''\n paymentMode: '' | typeof PaymentModeList[number] = ''\n mainAccountIndex?: 0 | 1 = undefined\n mainAccountNameOid = ''\n mainProductClientChoice: '' | keyof typeof ClientChoiceOptions = '' // this is used to save its main account's client choice, used in client choice table\n policyTerm: number = undefined\n premiumTerm: number = undefined\n\n constructor (riskRatingService: IRiskRatingService, mainAccount) {\n super(riskRatingService)\n this.riskRatingService = riskRatingService\n\n this.type = 'investment-subFunds'\n\n // to init main account value to sub-funds\n this.mainAccountIndex = mainAccount.clientIndex // Main Account Holder\n this.accountNumber = mainAccount.accountNumber // Account Number\n this.mainAccountNameOid = mainAccount.oid // Account Name'\n this.mainProductClientChoice = mainAccount.clientChoice\n this.clientChoice = mainAccount.clientChoice // default to main account's client choice\n }\n\n extractData(rawData: any, index?: number);\n extractData (rawData: any): {} {\n const data = super.extractData(rawData)\n data.type = 'investment-subFunds'\n\n // to init main account value to sub-funds\n data.mainAccountIndex = this.mainAccountIndex // Main Account Holder\n data.accountNumber = this.accountNumber // Account Number\n data.mainAccountNameOid = this.mainAccountNameOid // Account Name'\n data.mainProductClientChoice = this.mainProductClientChoice\n return data\n }\n}\n","import Dependant from '@master/model/kyc-form/Dependant'\n\nexport const YearsSupportMap = {\n Son: {\n label: 'Son',\n year: 25\n },\n Daughter: {\n label: 'Daughter',\n year: 23\n },\n Father: {\n label: 'Male',\n year: 81\n },\n Mother: {\n label: 'Female',\n year: 86\n },\n male: {\n label: 'Male',\n year: 81\n },\n female: {\n label: 'Female',\n year: 86\n }\n}\n\nexport class CustomDependant extends Dependant {\n get customYearsSupport () {\n if (!this.yearsSupport && this.defaultYearsSupport) {\n this.yearsSupport = this.defaultYearsSupport.toString()\n }\n return this.yearsSupport\n }\n\n set customYearsSupport (value: string | number) {\n this.yearsSupport = value.toString()\n }\n\n get defaultYearsSupport () {\n if (!this.relationship || (this.age !== 0 && !this.age)) { return }\n const involvedRelationship = Object.keys(YearsSupportMap)\n if (involvedRelationship.includes(this.relationship as string)) {\n const endYear = YearsSupportMap[this.relationship].year\n let yearToSupport = endYear - this.age\n if (yearToSupport < 0) {\n yearToSupport = 0\n }\n if (!this.yearsSupport) {\n this.yearsSupport = yearToSupport.toString()\n }\n return yearToSupport\n }\n return ''\n }\n\n get requiredDeviationExplanation () {\n return this.yearsSupport && (this.yearsSupport !== this.defaultYearsSupport)\n }\n}\n","export default class FormKeyConverter {\n convertToFormattedKey (rawKey: string) {\n let reconstructKey = rawKey\n\n // there are existing fields with client_\n const regex = new RegExp(/^client_[a-zA-Z]/)\n if (regex.test(reconstructKey)) {\n reconstructKey = 'client_0' + reconstructKey.substr(6)\n } else if (rawKey.startsWith('client_2')) {\n reconstructKey = 'client_1' + reconstructKey.substr(8)\n }\n\n switch (rawKey) {\n case 'ppda_consent' :\n reconstructKey = 'pdpa_consent'\n break\n case 'ca_decl_fc_provide_copy':\n reconstructKey = 'client_decl_fc_provide_copy'\n break\n case 'ca_decl_statements':\n reconstructKey = 'client_decl_statements'\n break\n case 'declaration_advisory_process':\n reconstructKey = 'client_decl_advisory_process'\n break\n case 'declaration_beneficial_owner': // affects StampedBeneficialOwnerPdfApi, kycPdfLeftPanelController and kycPdfSignaturePanelController\n reconstructKey = 'client_decl_beneficial_owner'\n break\n case 'declaration_introduced':\n reconstructKey = 'client_decl_introduced'\n break\n case 'declaration_introduced_id':\n reconstructKey = 'client_decl_introduced_id'\n break\n case 'declaration_introduced_name':\n reconstructKey = 'client_decl_introduced_name'\n break\n case 'declaration_introduced_company':\n reconstructKey = 'client_decl_introduced_company'\n break\n case 'declaration_politically_exposed':\n reconstructKey = 'client_decl_politically_exposed'\n break\n case 'declaration_acknowledgement_by_client':\n reconstructKey = 'client_decl_acknowledgement'\n break\n case 'declaration_remuneration_cis':\n reconstructKey = 'client_decl_remuneration_cis'\n break\n case 'declaration_remuneration_life':\n reconstructKey = 'client_decl_remuneration_life'\n break\n case 'declaration_recommendation_by_fc':\n reconstructKey = 'fc_decl_recommendation'\n break\n case 'declaration_acknowledgement_by_fc':\n reconstructKey = 'fc_decl_acknowledgement'\n break\n case 'declaration_acknowledgement_fc_notes':\n reconstructKey = 'fc_decl_acknowledgement_notes'\n break\n case 'client_decision_agree':\n reconstructKey = 'client_decision_agree'\n break\n }\n\n // replace all key starts with ma/ja\n if (reconstructKey.startsWith('ma_')) {\n reconstructKey = 'client_0_' + reconstructKey.substr(3)\n } else if (rawKey.startsWith('ja_')) {\n reconstructKey = 'client_1_' + reconstructKey.substr(3)\n }\n\n // rename rpa attributes\n if (reconstructKey.startsWith('rpa_ma_')) {\n reconstructKey = 'client_0_rpa_' + reconstructKey.substr(7)\n } else if (reconstructKey.startsWith('rpa_ja_')) {\n reconstructKey = 'client_1_rpa_' + reconstructKey.substr(7)\n }\n\n if (reconstructKey.indexOf('risk_score') > -1) {\n reconstructKey = reconstructKey.replace('risk_score', 'rpa_risk_profile_calculated')\n } else if (reconstructKey.indexOf('rp_result') > -1) {\n reconstructKey = reconstructKey.replace('rp_result', 'rpa_risk_score')\n } else if (reconstructKey.indexOf('own_choice') > -1) {\n reconstructKey = reconstructKey.replace('own_choice', 'rpa_own_choice')\n } else if (reconstructKey.indexOf('risk_profile') > -1) {\n reconstructKey = reconstructKey.replace('risk_profile', 'rpa_risk_profile')\n } else if (reconstructKey.indexOf('risk_profile_preferred') > -1) {\n reconstructKey = reconstructKey.replace('risk_profile_preferred', 'rpa_risk_profile_preferred')\n }\n\n // change the key accordingly for cka and rpa\n if (reconstructKey === 'complete_cka_rpa') {\n reconstructKey = 'client_0_rpa_completed'\n }\n if (reconstructKey === 'complete_cka') {\n reconstructKey = 'client_0_cka_completed'\n }\n\n // if it happens to be any of the below, replace it accordingly\n if (reconstructKey.indexOf('identifying_priorities_additional_notes') > -1) {\n reconstructKey = 'identifying_priorities_additional_notes'\n } else if (reconstructKey.indexOf('identifying_priorities') > -1) {\n reconstructKey = reconstructKey.replace('identifying_priorities_', '')\n } else if (reconstructKey.indexOf('protection_additional_notes') > -1) {\n reconstructKey = reconstructKey.replace('protection_additional_notes', 'p1_additional_notes')\n } else if (reconstructKey.indexOf('others_additional_notes') > -1) {\n reconstructKey = reconstructKey.replace('others_additional_notes', 'm1_additional_notes')\n } else if (reconstructKey.indexOf('pls_specify') > -1) {\n reconstructKey = reconstructKey.replace('pls_specify', 'previous_occupation')\n } else if (reconstructKey.indexOf('ppda_marketing') > -1) {\n reconstructKey = reconstructKey.replace('ppda_marketing', 'pdpa_marketing')\n } else if (reconstructKey.indexOf('your_finances_additional_notes') > -1) {\n reconstructKey = reconstructKey.replace('your_finances_additional_notes', 'client_0_cash_flow_additional_notes')\n }\n\n if (reconstructKey === '') {\n reconstructKey = rawKey\n }\n\n return reconstructKey\n }\n\n mapRawToFormatted (kycForm: any) {\n const formattedKYCForm: any = {} // eslint-disable-line @typescript-eslint/consistent-type-assertions\n let reconstructKey = ''\n for (const key of Object.keys(kycForm)) {\n reconstructKey = this.convertToFormattedKey(key)\n\n // After all has been renamed, put the into the formatted form\n formattedKYCForm[reconstructKey] = kycForm[key]\n }\n\n return formattedKYCForm\n }\n\n convertToRawKey (formattedKey: string) {\n let reconstructKey = formattedKey\n\n switch (formattedKey) {\n case 'pdpa_consent' :\n reconstructKey = 'pdpa_consent'\n break\n case 'client_decl_fc_provide_copy':\n reconstructKey = 'ca_decl_fc_provide_copy'\n break\n case 'client_decl_statements':\n reconstructKey = 'ca_decl_statements'\n break\n case 'client_decl_advisory_process':\n reconstructKey = 'declaration_advisory_process'\n break\n case 'client_decl_beneficial_owner':\n reconstructKey = 'declaration_beneficial_owner'\n break\n case 'client_decl_introduced':\n reconstructKey = 'declaration_introduced'\n break\n case 'client_decl_introduced_id':\n reconstructKey = 'declaration_introduced_id'\n break\n case 'client_decl_introduced_name':\n reconstructKey = 'declaration_introduced_name'\n break\n case 'client_decl_politically_exposed':\n reconstructKey = 'declaration_politically_exposed'\n break\n case 'client_decl_acknowledgement':\n reconstructKey = 'declaration_acknowledgement_by_client'\n break\n case 'client_decl_introduced_company':\n reconstructKey = 'declaration_introduced_company'\n break\n case 'client_decl_remuneration_cis':\n reconstructKey = 'declaration_remuneration_cis'\n break\n case 'client_decl_remuneration_life':\n reconstructKey = 'declaration_remuneration_life'\n break\n case 'fc_decl_recommendation':\n reconstructKey = 'declaration_recommendation_by_fc'\n break\n case 'fc_decl_acknowledgement':\n reconstructKey = 'declaration_acknowledgement_by_fc'\n break\n case 'fc_decl_acknowledgement_notes':\n reconstructKey = 'declaration_acknowledgement_fc_notes'\n break\n case 'client_decision_agree':\n reconstructKey = 'client_decision_agree'\n break\n case 'identifying_priorities_additional_notes':\n reconstructKey = 'ma_identifying_priorities_additional_notes'\n break\n }\n\n // replace all key starts with ma/ja\n if (reconstructKey.startsWith('client_0_')) {\n reconstructKey = 'ma_' + reconstructKey.substr(9)\n } else if (formattedKey.startsWith('client_1_')) {\n reconstructKey = 'ja_' + reconstructKey.substr(9)\n }\n\n if (reconstructKey.indexOf('rpa_risk_profile_calculated') > -1) {\n reconstructKey = reconstructKey.replace('rpa_risk_profile_calculated', 'risk_score')\n } else if (reconstructKey.indexOf('rpa_risk_score') > -1) {\n reconstructKey = reconstructKey.replace('rpa_risk_score', 'rp_result')\n } else if (reconstructKey.indexOf('rpa_own_choice') > -1) {\n reconstructKey = reconstructKey.replace('rpa_own_choice', 'own_choice')\n } else if (reconstructKey.indexOf('rpa_risk_profile') > -1) {\n reconstructKey = reconstructKey.replace('rpa_risk_profile', 'risk_profile')\n } else if (reconstructKey.indexOf('rpa_risk_profile_preferred') > -1) {\n reconstructKey = reconstructKey.replace('rpa_risk_profile_preferred', 'risk_profile_preferred')\n }\n\n // change the key accordingly for cka and rpa\n if (reconstructKey === 'ma_rpa_completed') {\n reconstructKey = 'complete_cka_rpa'\n }\n if (reconstructKey === 'ma_cka_completed') {\n reconstructKey = 'complete_cka'\n }\n\n // rename rpa attributes\n if (reconstructKey.startsWith('ma_rpa_')) {\n reconstructKey = 'rpa_ma_' + reconstructKey.substr(7)\n } else if (reconstructKey.startsWith('ja_rpa_')) {\n reconstructKey = 'rpa_ja_' + reconstructKey.substr(7)\n }\n\n // if it happens to be any of the below, replace it accordingly\n if (reconstructKey.indexOf('p1_additional_notes') > -1) {\n reconstructKey = reconstructKey.replace('p1_additional_notes', 'protection_additional_notes')\n } else if (reconstructKey.indexOf('m1_additional_notes') > -1) {\n reconstructKey = reconstructKey.replace('m1_additional_notes', 'others_additional_notes')\n } else if (reconstructKey.indexOf('previous_occupation') > -1) {\n reconstructKey = reconstructKey.replace('previous_occupation', 'pls_specify')\n } else if (reconstructKey.indexOf('pdpa_marketing') > -1) {\n reconstructKey = reconstructKey.replace('pdpa_marketing', 'pdpa_marketing')\n } else if (reconstructKey.indexOf('ma_cash_flow_additional_notes') > -1) {\n reconstructKey = reconstructKey.replace('ma_cash_flow_additional_notes', 'your_finances_additional_notes')\n }\n\n // Rename back to original naming with client_ and client_2_\n if (reconstructKey.startsWith('ma_')) {\n const rename = 'client_'\n if (reconstructKey.indexOf('product_risk_and_limitations_reason') > -1) {\n reconstructKey = rename + 'product_risk_and_limitations_reason'\n } else if (reconstructKey.indexOf('liquidity_consideration') > -1) {\n reconstructKey = rename + 'liquidity_consideration'\n } else if (reconstructKey.indexOf('product_risk_and_limitations_elaboration') > -1) {\n reconstructKey = rename + 'product_risk_and_limitations_elaboration'\n } else if (reconstructKey.indexOf('time_horizon_deviation_reason') > -1) {\n reconstructKey = rename + 'time_horizon_deviation_reason'\n } else if (reconstructKey.indexOf('risk_concentration_deviation_reason') > -1) {\n reconstructKey = rename + 'risk_concentration_deviation_reason'\n } else if (reconstructKey.indexOf('risk_concentration') > -1) {\n reconstructKey = rename + 'risk_concentration'\n } else if (reconstructKey.indexOf('product_recommendation_elaboration') > -1) {\n reconstructKey = rename + 'product_recommendation_elaboration'\n } else if (reconstructKey.indexOf('product_deviations_existence_reason') > -1) {\n reconstructKey = rename + 'product_deviations_existence_reason'\n } else if (reconstructKey.indexOf('risk_tolerance_deviation_reason') > -1) {\n reconstructKey = rename + 'risk_tolerance_deviation_reason'\n } else if (reconstructKey.indexOf('liquidity_emergency_funds_duration') > -1) {\n reconstructKey = rename + 'liquidity_emergency_funds_duration'\n } else if (reconstructKey.indexOf('product_recommendation_reason') > -1) {\n reconstructKey = rename + 'product_recommendation_reason'\n } else if (reconstructKey.indexOf('liquidity_deviation_reason') > -1) {\n reconstructKey = rename + 'liquidity_deviation_reason'\n } else if (reconstructKey.indexOf('product_deviations_existence') > -1) {\n reconstructKey = rename + 'product_deviations_existence'\n } else if (reconstructKey.indexOf('time_horizon_savings') > -1) {\n reconstructKey = rename + 'time_horizon_savings'\n } else if (reconstructKey.indexOf('recommendation_decision') > -1) {\n reconstructKey = rename + 'recommendation_decision'\n } else if (reconstructKey.indexOf('time_horizon_protection') > -1) {\n reconstructKey = rename + 'time_horizon_protection'\n } else if (reconstructKey.indexOf('risk_tolerance_in_tune') > -1) {\n reconstructKey = rename + 'risk_tolerance_in_tune'\n }\n } else if (reconstructKey.startsWith('ja_')) {\n const rename = 'client_2_'\n if (reconstructKey.indexOf('product_risk_and_limitations_reason') > -1) {\n reconstructKey = rename + 'product_risk_and_limitations_reason'\n } else if (reconstructKey.indexOf('liquidity_consideration') > -1) {\n reconstructKey = rename + 'liquidity_consideration'\n } else if (reconstructKey.indexOf('product_risk_and_limitations_elaboration') > -1) {\n reconstructKey = rename + 'product_risk_and_limitations_elaboration'\n } else if (reconstructKey.indexOf('time_horizon_deviation_reason') > -1) {\n reconstructKey = rename + 'time_horizon_deviation_reason'\n } else if (reconstructKey.indexOf('risk_concentration_deviation_reason') > -1) {\n reconstructKey = rename + 'risk_concentration_deviation_reason'\n } else if (reconstructKey.indexOf('risk_concentration') > -1) {\n reconstructKey = rename + 'risk_concentration'\n } else if (reconstructKey.indexOf('product_recommendation_elaboration') > -1) {\n reconstructKey = rename + 'product_recommendation_elaboration'\n } else if (reconstructKey.indexOf('product_deviations_existence_reason') > -1) {\n reconstructKey = rename + 'product_deviations_existence_reason'\n } else if (reconstructKey.indexOf('risk_tolerance_deviation_reason') > -1) {\n reconstructKey = rename + 'risk_tolerance_deviation_reason'\n } else if (reconstructKey.indexOf('liquidity_emergency_funds_duration') > -1) {\n reconstructKey = rename + 'liquidity_emergency_funds_duration'\n } else if (reconstructKey.indexOf('product_recommendation_reason') > -1) {\n reconstructKey = rename + 'product_recommendation_reason'\n } else if (reconstructKey.indexOf('liquidity_deviation_reason') > -1) {\n reconstructKey = rename + 'liquidity_deviation_reason'\n } else if (reconstructKey.indexOf('product_deviations_existence') > -1) {\n reconstructKey = rename + 'product_deviations_existence'\n } else if (reconstructKey.indexOf('time_horizon_savings') > -1) {\n reconstructKey = rename + 'time_horizon_savings'\n } else if (reconstructKey.indexOf('recommendation_decision') > -1) {\n reconstructKey = rename + 'recommendation_decision'\n } else if (reconstructKey.indexOf('time_horizon_protection') > -1) {\n reconstructKey = rename + 'time_horizon_protection'\n } else if (reconstructKey.indexOf('risk_tolerance_in_tune') > -1) {\n reconstructKey = rename + 'risk_tolerance_in_tune'\n }\n }\n\n const regex = /(ma_|ja_)(.[0-9]_)(level|plan|text)$/\n const found = reconstructKey.match(regex) || []\n if (found.length > 0) {\n reconstructKey = found[1] + 'identifying_priorities_' + found[2] + found[3]\n }\n\n if (reconstructKey === '') {\n reconstructKey = formattedKey\n }\n\n return reconstructKey\n }\n\n mapFormattedToRaw (snakeCaseKycForm: {}) {\n const rawKycForm = {\n _oid: ''\n }\n let reconstructKey = ''\n for (const key of Object.keys(snakeCaseKycForm)) {\n reconstructKey = this.convertToRawKey(key)\n\n rawKycForm[reconstructKey as keyof {}] = snakeCaseKycForm[key as keyof {}]\n }\n\n return rawKycForm\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { TypeBase } from '@master/model/TypeBase'\n\nexport default class ExistingInvestDeclaration extends TypeBase {\n constructor (type: 'existing_invest' = 'existing_invest') {\n super(type)\n }\n\n review = ''\n\n @MaxChar(140)\n reviewReasons = ''\n}\n","import { options } from '@master/model/options/Options'\n\nexport const TransactionTypeList = ['Buy', 'RSP', 'Fund Switch', 'Withdrawal', 'Top-up'] as const\nexport const TransactionTypeOptions: options[] = TransactionTypeList.map(transactionType => {\n return {\n label: transactionType,\n value: transactionType\n }\n})\n","export const MaritalStatusOptions = [\n { label: '', value: '' },\n { label: 'Single', value: 'single' },\n { label: 'Married', value: 'married' },\n { label: 'Divorced', value: 'divorced' },\n { label: 'Widowed', value: 'widowed' }\n]\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { TypeBase } from '@master/model/TypeBase'\n\nexport default class ExistingPortfolioDeclaration extends TypeBase {\n constructor (type: 'existing_portfolio' = 'existing_portfolio') {\n super(type)\n }\n\n review = ''\n\n @MaxChar(140)\n reviewReasons = ''\n}\n","import { Base } from '../../Base'\nimport { isEmpty } from 'lodash/fp'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { FormOptions, IAssuredOptions } from '../FormOptions'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { IExistingInvestment } from './IExistingInvestment'\nimport { isSummaryField, SummaryField } from '@master/annotation/SummaryField'\n\nexport const AssetTypeOptions = [\n 'UT/ETF - Equity',\n 'UT/ETF - Bond/Income',\n 'UT/ETF - Balanced',\n 'Equity',\n 'Bonds',\n 'Structured products',\n 'Others e.g PE, gold etc.'\n]\nexport default class ExistingInvestmentV2 extends Base implements IExistingInvestment {\n platform = ''\n\n @MaxChar(74)\n fundName = ''\n\n assetType = ''\n ownedBy: keyof IAssuredOptions = ''\n\n @SummaryField('Investment Amount')\n investmentAmt?: number = undefined\n\n @SummaryField('Current Realisable Value')\n currentRealisableValue?: number = undefined\n\n @SummaryField('Investment Amount RSP')\n investmentAmtRsp?: number = undefined\n\n @MaxChar(36)\n fundManager = ''\n\n @MaxChar(30)\n remarks = ''\n\n @Ignore()\n formOptions?: FormOptions\n\n constructor (formOptions: FormOptions = null) {\n super()\n this.formOptions = formOptions\n }\n\n /**\n * Somehow implementing Object.keys(this) may trigger\n * an infinite loop (it is a warning on Vue in the browser)\n * but I have yet to face infinite loop of it yet.\n *\n * Putting here just in case we face it.\n */\n getSummaryFields (): { attrName: string; abbre: string }[] {\n const summaryFields: { attrName: string; abbre: string }[] = []\n Object.keys(this).forEach(attr => {\n const grabSummaryField = isSummaryField(this, attr)\n if (grabSummaryField) {\n summaryFields.push({\n attrName: attr,\n ...grabSummaryField\n })\n }\n })\n return summaryFields\n }\n\n isValid () {\n return !isEmpty(this.ownedBy) && this.ownedBy.length > 0\n }\n\n belongsTo (owner: 'C1' | 'C2') {\n return this.isValid() && this.ownedBy === owner\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { MetaClass } from '@master/annotation/MetaClass'\nimport { ClientInfoBase } from './ClientInfoBase'\nimport { ClientPersonal } from './ClientPersonal'\n\nexport const AccountTypeOptions = [\n { value: '', label: '' },\n { value: 'individual', label: 'Individual' },\n { value: 'corporate', label: 'Corporate' }\n]\nexport const StatusOptions = [\n { value: '', label: '' },\n { value: 'active', label: 'Active' },\n { value: 'inactive', label: 'Inactive' },\n { value: 'terminated', label: 'Terminated' }\n]\nexport const TitleOptions = [\n { label: '', value: '' },\n { label: 'Dr', value: 'dr' },\n { label: 'Mr', value: 'mr' },\n { label: 'Miss', value: 'miss' },\n { label: 'Mrs', value: 'mrs' },\n { label: 'Mdm', value: 'mdm' }\n]\nexport class ClientProfile extends ClientInfoBase {\n accountType = undefined\n clientOid = undefined\n clientSince = undefined\n mobileNumber = undefined\n title = undefined\n name = undefined\n nric = undefined\n status = undefined\n\n @MetaClass(ClientPersonal)\n personalInfoJson = new ClientPersonal()\n\n casualName = undefined\n printingName = undefined\n remarks = undefined\n\n isAccreditedInvestor = undefined\n isOverseasInvestor = undefined\n passedCka = undefined\n\n ftfDateOfVerification = undefined\n ftfJobRole = undefined\n ftfPerformedBy = undefined\n ftfRemarks = undefined\n hrcRoles = []\n\n @Ignore()\n get accountTypeDisplay () {\n return AccountTypeOptions.find(ato => ato.value === this.accountType)?.label\n }\n\n @Ignore()\n get statusDisplay () {\n return StatusOptions.find(so => so.value === this.status)?.label\n }\n\n convertToRawData () {\n if (!this.personalInfoJson) {\n this.personalInfoJson = new ClientPersonal()\n }\n const raw = super.convertToRawData()\n raw[this.snakeCaseKey('personalInfoJson')] = JSON.stringify(this.personalInfoJson.convertToRawData())\n raw[this.snakeCaseKey('hrcRoles')] = JSON.stringify(this.hrcRoles)\n delete raw[this.snakeCaseKey('clientOid')] // clientOid is not a column\n return raw\n }\n}\n","module.exports = __webpack_public_path__ + \"img/admin.96a7c392.svg\";","import { get, isUndefined } from 'lodash/fp'\nimport 'reflect-metadata'\n\nconst pointerMetadataKey = Symbol('Pointer')\n/**\n * This is to setup the getter when your model requires attribute from other models\n * Example :\n *\n * `Absolute path :`\n * @Pointer(`ROOT.${target}`, `${target.attribute}`) : pointing to root's model's attribute regardless of where you current model is\n * @Pointer(`ROOT`, `${target}`) : pointing to root's model regardless of where you current model is\n *\n * `Relative path :`\n * @Pointer(`${target}`, `${target.attribute}`) : pointing to a model (target) that is on the same level as your current model\n * @Pointer(`${target}.${target.submodel}`, `${submodel.attribute}`) : pointing to a model (target)'s submodel that is on below level of your current model\n * @param pathToObj : `` or `ROOT` is used to define the path to target is absolute\n * @param propertyKey\n */\nexport function Pointer (pathToObj: string, propertyKey: string) {\n return Reflect.metadata(pointerMetadataKey, {\n path: pathToObj,\n key: propertyKey\n })\n}\n\nexport function isPointer (target: any, propertyKey: string): {path: string; key: string} {\n return Reflect.getMetadata(pointerMetadataKey, target, propertyKey)\n}\n\nfunction getTarget (obj, chain) {\n if (isUndefined(chain)) {\n console.error(`Failed to get ${chain} in ${obj}!`)\n return\n }\n const chainArr = chain.split('.')\n let parent, target\n if (chainArr.length === 1) {\n parent = obj\n target = chain\n } else {\n parent = get(chainArr.slice(0, chainArr.length - 1), obj)\n target = chainArr.slice(-1)\n }\n return { parent, target }\n}\n\nexport interface IPointer {\n path: string;\n key: string;\n pointerKey: string;\n}\n\nexport function setupPointer (pointerArr: IPointer[], root: object, ancestor: object, parent: object, debug = false) {\n if (pointerArr.length) {\n pointerArr.forEach((point) => {\n let watchParent, watchTarget\n if (debug) console.log('setting up Pointer', ancestor, point)\n if (point.path === 'ROOT') {\n Object.defineProperty(parent, point.pointerKey, {\n get: () => {\n return root[point.key]\n }\n })\n return\n }\n const pathArr = point.path.split('.')\n if (pathArr[0] === 'ROOT') {\n const path = point.path.replace('ROOT.', '')\n const watch = getTarget(root, path)\n watchParent = watch.parent\n watchTarget = watch.target\n if (debug) console.log('locating target in root model : ', watchParent, watchTarget)\n if (isUndefined(watchParent) || isUndefined(watchTarget) || isUndefined(watchParent[watchTarget])) {\n console.error(`Unable to locate ${point.path} in`, root)\n return\n }\n } else {\n const watch = getTarget(ancestor, point.path)\n watchParent = watch.parent\n watchTarget = watch.target\n if (isUndefined(watchParent) || isUndefined(watchTarget) || isUndefined(watchParent[watchTarget])) {\n console.error(`Unable to locate ${point.path} in`, ancestor)\n return\n }\n }\n if (debug) console.log('getTarget', watchParent, watchTarget)\n Object.defineProperty(parent, point.pointerKey, {\n get: () => {\n return watchParent[watchTarget][point.key]\n }\n })\n })\n }\n}\n","module.exports = __webpack_public_path__ + \"img/faq.fe727a64.svg\";","import { ExpandableArray } from '@core/annotation/ExpandableArray'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { Selection } from '@core/annotation/Selection'\nimport { EmploymentTypeOptions } from '@master/model/options/EmploymentTypeOptions'\nimport { ExamTypeOptions } from '@master/model/options/ExamTypeOptions'\nimport { isUndefined } from 'lodash'\nimport { FormBase } from '../FormBase'\n\nexport const NsStatus = [\n { label: '', value: '' },\n { label: 'Completed', value: 'completed' },\n { label: 'Deferred', value: 'deferred' },\n { label: 'Exempted', value: 'exempted' }\n]\nexport class NationalServiceDetails {\n notApplicable = false\n\n @Selection(NsStatus, true)\n status: typeof NsStatus[number]['value'] = ''\n\n enlistmentDate: number = undefined\n ordDate: number = undefined\n}\nexport class AcademicQualification {\n from = ''\n to = ''\n\n @MaxChar(20)\n title = ''\n\n institute = ''\n\n get error () {\n const err = []\n const anyFilled = Object.values(this).some(val => val !== '' && !isUndefined(val))\n if (!anyFilled) return []\n if (this.from === '' || isUndefined(this.from)) err.push({ key: 'from', msg: 'Please complete \"From\" detail.' })\n if (this.to === '' || isUndefined(this.to)) err.push({ key: 'to', msg: 'Please complete \"To\" detail.' })\n if (this.title === '' || isUndefined(this.title)) err.push({ key: 'title', msg: 'Please complete the title of your academic qualification.' })\n if (this.institute === '' || isUndefined(this.institute)) err.push({ key: 'institute', msg: 'Please complete the name of your academic institution.' })\n return err\n }\n}\nexport class OtherProfessionalQualification {\n attain: number = undefined\n title = ''\n body = ''\n}\nexport class Employment {\n from: number = undefined\n to: number = undefined\n employer = ''\n position = ''\n\n @Selection(EmploymentTypeOptions, true)\n nature = ''\n\n reason = ''\n}\nexport class QualiEmployFields {\n nationalService = new NationalServiceDetails()\n academic = Array(4).fill(null).map(() => new AcademicQualification())\n\n @Selection(ExamTypeOptions)\n professional = []\n\n other = Array(4).fill(null).map(() => new OtherProfessionalQualification())\n // to be stamped in reverse chronological order ( latest first )\n @ExpandableArray({ maxSize: 8, clone: () => new Employment() })\n employment: Employment[] = Array(4).fill(null).map(() => new Employment())\n}\nexport class QualificationEmployment extends FormBase {\n type = 'qualification-employment'\n\n data: QualiEmployFields = new QualiEmployFields()\n\n get error () {\n const err = []\n const academicError = this.data.academic.map((acad) => acad.error)\n const hasAcademicError = academicError.length && academicError.some(err => err.length > 0)\n if (hasAcademicError) err.push({ key: 'academic', msgs: academicError })\n return err\n }\n}\n","export const PolicyRoles = [\n { label: '', value: '' },\n { label: 'Owner', value: 'owner' },\n { label: 'Life Assured', value: 'lifeAssuredOne' },\n { label: 'Joint Life Assured', value: 'lifeAssuredTwo' },\n { label: 'Third Party Payor', value: 'thirdPartyPayor' },\n { label: 'PEP', value: 'pep' },\n { label: 'Beneficial Owner', value: 'bo' },\n { label: 'Joint Policy Owner', value: 'jointPolicyOwner' },\n { label: 'Joint Owner', value: 'jointOwner' },\n { label: 'Assignee', value: 'assignee' },\n { label: 'Assignor', value: 'assignor' },\n { label: 'Officer / Authorised Representative', value: 'officerAuthorisedRepresentative' },\n { label: 'Shareholder', value: 'shareholder' },\n { label: 'Authorised Signatory', value: 'authorisedSignatory' }\n]\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type AdhocReportRequest = {\n typeOfReport: AdhocReportRequest.typeOfReport;\n fromTimestamp?: number;\n toTimestamp?: number;\n}\n\nexport namespace AdhocReportRequest {\n\n export enum typeOfReport {\n COMMISSION_REPORT = 'COMMISSION_REPORT',\n ADVISER_NAME_SCREENING = 'ADVISER_NAME_SCREENING',\n CLIENT_NAME_SCREENING = 'CLIENT_NAME_SCREENING',\n CORPORATE_NAME_SCREENING = 'CORPORATE_NAME_SCREENING',\n PRESALES_CALLBACK = 'PRESALES_CALLBACK',\n MARKETING_CONSENT = 'MARKETING_CONSENT',\n }\n\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type ScheduleTimeDto = {\n enable: boolean;\n hideTask?: boolean;\n minute: number;\n hour: number;\n frequency: ScheduleTimeDto.frequency;\n name: ScheduleTimeDto.name;\n email?: string;\n ccEmail?: string;\n}\n\nexport namespace ScheduleTimeDto {\n\n export enum frequency {\n WEEKLY = 'WEEKLY',\n BIWEEKLY = 'BIWEEKLY',\n MONTHLY = 'MONTHLY',\n DAILY = 'DAILY',\n WEEKDAYS = 'WEEKDAYS',\n '_0' = 0,\n '_1' = 1,\n '_2' = 2,\n '_3' = 3,\n '_4' = 4,\n }\n\n export enum name {\n COMMISSION_REPORT = 'COMMISSION_REPORT',\n ADVISER_NAME_SCREENING = 'ADVISER_NAME_SCREENING',\n CLIENT_NAME_SCREENING = 'CLIENT_NAME_SCREENING',\n CORPORATE_NAME_SCREENING = 'CORPORATE_NAME_SCREENING',\n PRESALES_CALLBACK = 'PRESALES_CALLBACK',\n MARKETING_CONSENT = 'MARKETING_CONSENT',\n }\n\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { AdhocReportRequest } from '../models/AdhocReportRequest';\nimport type { PresalesCallbackReportRequest } from '../models/PresalesCallbackReportRequest';\nimport { request as __request } from '@openapi/request';\n\nexport class AdhocReportService {\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async runPresalesCallbackReport(\n requestBody: PresalesCallbackReportRequest,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/adhoc/presales`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async runAdHocReport(\n requestBody: AdhocReportRequest,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/adhoc/report-service`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ScheduleTimeDto } from '../models/ScheduleTimeDto';\nimport type { ScheduleTimeResponseDto } from '../models/ScheduleTimeResponseDto';\nimport { request as __request } from '@openapi/request';\n\nexport class ScheduleService {\n\n /**\n * @param requestBody\n * @returns ScheduleTimeResponseDto Creates a new schedule timing, overriding the previous settings\n * @throws ApiError\n */\n public static async updateScheduleTaskTime(\n requestBody: ScheduleTimeDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/schedule`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @returns ScheduleTimeResponseDto List all schedules in the system.\n * @throws ApiError\n */\n public static async listSchedules(): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/schedule/list`,\n });\n return result.body;\n }\n\n}","import { Ignore } from '@master/annotation/Ignore'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { RawKey } from '@master/annotation/RawKey'\nimport { ClientChoiceOptions } from '@master/model/options/ClientChoiceOptions'\nimport { FrequencyToValueMappingCalculation, FrequencyType } from '@master/model/options/FrequencyOptions'\nimport { TransactionTypeList } from '@master/model/options/TransactionTypeOptions'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport { Base } from '../../Base'\nimport { ProductMeta } from './../../common/ProductMeta'\n\nexport type PriorityId = ''\n | 'P1' | 'P2' | 'P3' | 'P4' | 'P5' | 'P6'\n | 'H1' | 'H2' | 'H3' | 'H4' | 'H5' | 'H6'\n | 'S1' | 'S2' | 'S3' | 'S4' | 'S5' | 'S6'\n | 'M1' | 'M2' | 'M3' | 'M4' | 'M5' | 'M6'\nexport default class ProductBase extends Base {\n @RawKey('typeOfProduct')\n type: '' | 'insurance' | 'investment' | 'investment-subFunds' | 'insurance-rider' = ''\n\n @RawKey('priority_type')\n priority: PriorityId = ''\n\n @RawKey('needs_covered')\n\n need = ''\n\n @RawKey('issurer')\n issuer = ''\n\n issuerOid = ''\n frequency: '' | FrequencyType = ''\n clientChoice: '' | keyof typeof ClientChoiceOptions = ''\n dateOfApplication?: number = undefined\n\n // insurance\n lifeAssured = ''\n lifeAssuredTwo = ''\n sumAssured: number = undefined\n premiumAmount: number = undefined\n\n // investment\n investmentAmount: number = undefined\n\n @MaxChar(32)\n accountNumber = undefined\n\n // Use for NBR only\n policyNumber = ''\n\n transactionType: '' | typeof TransactionTypeList[number] = ''\n\n // get from product\n @RawKey('_oid')\n oid = '' // product id\n\n @RawKey('plan_name')\n productName = ''\n\n productType = ''\n productCategory = ''\n recommendedRiskProfile: number = undefined\n productNeedsCovered: string[] = []\n productReasons = ''\n productLimitations = ''\n productFamilyCode = ''\n productFamilyName = ''\n\n referenceId = '' // base64 randomly generated alphanumeric\n\n isCustom = false\n @Ignore()\n riskRatingService: IRiskRatingService\n\n @Ignore()\n ownerName?: string\n\n @Ignore()\n priorityName?: string\n\n constructor (riskRatingService: IRiskRatingService) {\n super()\n this.riskRatingService = riskRatingService\n }\n\n randomString (length) {\n const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n let result = ''\n for (let i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]\n return result\n }\n\n beforeExtractData (product: any) {\n /* eslint-disable @typescript-eslint/camelcase */\n product.premium_amount = typeof product.premium_amount === 'string' ? parseFloat(product.premium_amount) : product.premium_amount\n product.client_index = typeof product.client_index === 'string' ? parseFloat(product.client_index) : product.client_index\n product.sum_assured = typeof product.sum_assured === 'string' ? parseFloat(product.sum_assured) : product.sum_assured\n /* eslint-enable */\n return product\n }\n\n setProduct (product: ProductMeta) {\n this.oid = product?.oid\n this.issuer = product?.issuer\n this.issuerOid = product?.issuer_oid\n this.productName = product?.name\n this.productType = product?.type\n this.productCategory = product?.category\n this.productFamilyCode = product?.productFamilyCode\n this.productFamilyName = product?.productFamilyName\n this.recommendedRiskProfile = product?.recommendedRiskProfile\n this.productNeedsCovered = product?.needsCovered\n this.productReasons = product?.reasons\n this.productLimitations = product?.limitations\n }\n\n resetProduct () {\n this.oid = null\n this.productName = null\n this.productType = null\n this.productCategory = null\n this.productFamilyCode = null\n this.productFamilyName = null\n this.recommendedRiskProfile = null\n this.productReasons = null\n this.productLimitations = null\n }\n\n isNtuc () {\n const companyNameMin = this.issuer.replace(/ /g, '').toLowerCase()\n if (companyNameMin === 'ntuc' || companyNameMin === 'income' || companyNameMin === 'ntucincome') {\n return true\n }\n return false\n }\n\n get isInvestmentProduct () {\n return this.type === 'investment' || this.type === 'investment-subFunds' // add investment-subFunds to handle BasicProductV2\n }\n\n get annualisedPremium () {\n let annualPremium = 0\n let premiumAmt = 0\n if (this.frequency.toLocaleLowerCase() === 'single') {\n return 0\n }\n\n if (this.isInvestmentProduct) {\n // sum_assured might not be the correct name, this value corresponds to the Investment Amount\n // also not sure if it is accurate to consider investment amount a premium\n // may need to move this elsewhere or rename the functions\n premiumAmt = this.sumAssured\n } else {\n premiumAmt = this.premiumAmount\n }\n\n if (this.frequency) {\n annualPremium = premiumAmt * FrequencyToValueMappingCalculation(this.frequency)\n }\n return parseFloat(annualPremium.toFixed(2))\n }\n\n get singlePremium () {\n if (this.frequency.toLocaleLowerCase() !== 'single') {\n return 0\n }\n\n if (this.frequency && this.frequency.toLowerCase() === 'single') {\n if (this.isInvestmentProduct) {\n // sum_assured might not be the correct name, this value corresponds to the Investment Amount\n // also not sure if it is accurate to consider investment amount a premium\n // may need to move this elsewhere or rename the functions\n return this.sumAssured\n } else {\n return this.premiumAmount\n }\n }\n return 0\n }\n\n @Ignore()\n get recommendedRiskProfileString () {\n return this.riskRatingService.riskRatingMap()[this.recommendedRiskProfile] || ''\n }\n\n getReasons () {\n return `${this.issuer} - ${this.productName}\n${this.productReasons}`\n }\n\n getLimitations () {\n return `${this.issuer} - ${this.productName}\n${this.productLimitations}`\n }\n\n @Ignore()\n get isAcceptedProduct () {\n return this.clientChoice === 'accept' || this.clientChoice === 'ownchoice'\n }\n\n @Ignore()\n get isRider () {\n return this.type === 'insurance-rider'\n }\n\n @Ignore()\n get isFund () {\n return this.type === 'investment-subFunds'\n }\n\n get isIlpPlan () {\n if (!this.productType) return false\n return this.productType.toLowerCase().includes('ilp') || this.productCategory.toLowerCase().includes('investment-linked plan')\n }\n}\n","export const VenueOptions = [\n { value: undefined, label: '' },\n { value: 1000, label: 'Yes' },\n { value: 1001, label: 'No' },\n { value: 2000, label: 'Branch/Office Premise' },\n { value: 3000, label: 'Rep\\'s Home' },\n { value: 3001, label: 'Client\\'s Home' },\n { value: 4000, label: 'Retailer (e.g. Restaurant, cafe etc.)' },\n { value: 4001, label: 'Event site of Road Show/ Retailer Tie-up/ Seminar' },\n { value: 5000, label: 'Non F2F - Video Conference' },\n { value: 5001, label: 'Non F2F - Telephone' },\n { value: 9999, label: 'Others' }\n]\n","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","import { TypeBase } from './TypeBase'\n\nexport class ClientBase extends TypeBase {\n // previously was ma and ja\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super(type)\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { isNull } from 'lodash'\nimport { isEmpty } from 'lodash/fp'\nimport { Base } from '../../Base'\n\n/**\n * This is an interface for when app wanna customize BeneficialOwnerParticulars\n */\nexport interface IBOP {\n fullName: string;\n nric: string;\n identityType: string;\n nationality: string;\n nationalitySpecified: string;\n dateOfBirth?: number;\n contactNumber: string;\n residentialAddress: string;\n correspondenceAddress: string;\n politicallyExposedPerson: string;\n relationshipToCustomer: string;\n reasonsForAppointment: string;\n product: string;\n extractData (rawData: any);\n convertToRawData ();\n isNotComplete ();\n isNRICOrFIN ();\n}\n\nexport default class BeneficialOwnerParticulars extends Base implements IBOP {\n @MaxChar(82)\n fullName = ''\n\n @MaxChar(25)\n nric = ''\n\n identityType = ''\n\n @MaxChar(25)\n nationality = ''\n\n nationalitySpecified = ''\n dateOfBirth?: number = undefined\n\n @MaxChar(25)\n contactNumber = ''\n\n @MaxChar(176)\n residentialAddress = ''\n\n @MaxChar(176)\n correspondenceAddress = ''\n\n politicallyExposedPerson = ''\n\n @MaxChar(82)\n relationshipToCustomer = ''\n\n @MaxChar(632)\n reasonsForAppointment = ''\n\n @MaxChar(256)\n product = ''\n\n isNotComplete () {\n return isEmpty(this.contactNumber) ||\n isEmpty(this.correspondenceAddress) ||\n isNaN(this.dateOfBirth) ||\n isNull(this.dateOfBirth) ||\n isEmpty(this.fullName) ||\n isEmpty(this.nationality) ||\n isEmpty(this.nric) ||\n isEmpty(this.politicallyExposedPerson) ||\n isEmpty(this.reasonsForAppointment) ||\n isEmpty(this.relationshipToCustomer) ||\n isEmpty(this.residentialAddress)\n }\n\n isNRICOrFIN () {\n return this.identityType === 'nric' || this.identityType === 'fin'\n }\n}\n","export const ClientManagementRoutes = [\n {\n path: 'profile',\n name: 'Account Details',\n component: () => import('@core/pages/clientManagement-v2/views/ClientProfile.vue')\n },\n {\n path: 'personal',\n name: 'Client Details',\n component: () => import('@core/pages/clientManagement-v2/views/ClientPersonal.vue')\n },\n {\n path: 'dependants',\n name: 'Relationships',\n component: () => import('@core/pages/clientManagement-v2/views/ClientDependants.vue')\n },\n {\n path: 'products',\n name: 'Products',\n component: () => import('@core/pages/client-management/views/policy-management/PolicyList.vue')\n },\n {\n path: 'risks',\n name: 'AML / CKA / AI / OI Monitoring',\n component: () => import('@core/pages/clientManagement-v2/views/ClientRisks.vue')\n },\n {\n path: 'kycpdf',\n name: 'Submitted KYC PDF',\n component: () => import('@core/pages/clientManagement-v2/views/ClientKycPdf.vue')\n },\n {\n path: 'client-history',\n name: 'Account History',\n component: () => import('@core/pages/client-management/views/ClientAccountHistory.vue')\n }\n]\n","export const RaceOptions = [\n { label: '', value: '' },\n { label: 'Chinese', value: 'chinese' },\n { label: 'Malay', value: 'malay' },\n { label: 'Indian', value: 'indian' },\n { label: 'Others', value: 'others' }\n]\n","import { get, isUndefined } from 'lodash/fp'\n\nexport interface ModelProxyConfig {\n watch: string;\n watchKeys?: string[];\n readKey?: string;\n react: string;\n reactKey?: string;\n mutualKeys?: string[];\n syncOnInit?: boolean;\n}\n/**\n * This is a service for creating js' proxy between model's attribute\n */\nexport default class ModelProxyService {\n modelSrc: any\n debug: boolean\n\n /**\n * @param inModelSrc: the source of models\n * @param inDebug: to see console logs\n */\n constructor (inModelSrc, inDebug = false) {\n this.modelSrc = inModelSrc\n if (this.debug) console.log(this.modelSrc)\n this.debug = inDebug\n }\n\n /**\n * if watchKeys and reactKey are defined, reactKey will get initial value of watchKeys\n * if mutualKeys are defined, no intial value will be set\n * if watchKeys length is more than 1, set the proxy to watch multiple keys and readKey must be defined\n * @param proxies {\n * watch:\n * watchKeys: an array of strings to check which has been triggered\n * readKey: to be used when watchKeys are defined. This specific the key to read from object\n * react: the object that is suppose to have its value changed\n * reactKey: the attribute name to put the value in\n * mutualKeys: an array of strings to define the attributes for both the watch and react target to read\n * syncOnInit: a boolean value that defines if the value should be loaded on init\n * }\n */\n setProxy (proxies: ModelProxyConfig[]) {\n proxies.forEach((prox) => {\n const { parent: watchParent, target: watchTarget } = this.getTarget(this.modelSrc, prox.watch)\n const { parent: reactParent, target: reactTarget } = this.getTarget(this.modelSrc, prox.react)\n // if (this.debug) {\n // console.log({\n // watchkey: prox.watch,\n // reactkey: prox.react,\n // watchParent,\n // watchTarget,\n // reactParent,\n // reactTarget\n // })\n // }\n // if either one doesnt exist, exit\n if (isUndefined(watchTarget) || isUndefined(reactTarget)) {\n console.error(`Proxy targets in ${prox} not found in ${this}!`)\n return\n }\n const react = reactParent[reactTarget]\n // set initial value (only when not mutualkeys)\n if (prox.mutualKeys === undefined && prox.syncOnInit) {\n // Defines where to read the value from\n const keyToReadFrom = prox.readKey || prox.watchKeys[0]\n if (react instanceof Array) {\n react.forEach((each) => {\n if (prox.reactKey in each) each[prox.reactKey] = watchParent[watchTarget][keyToReadFrom]\n })\n } else {\n if (this.debug) console.log(reactParent, reactTarget, react)\n if (prox.reactKey in react) react[prox.reactKey] = watchParent[watchTarget][keyToReadFrom]\n }\n }\n // create proxy to keep synced\n if (prox.mutualKeys?.length > 0) {\n prox.mutualKeys.forEach((mkey) => {\n this.constructProxy(watchParent, watchTarget, react, [mkey], mkey)\n })\n } else {\n this.constructProxy(watchParent, watchTarget, react, prox.watchKeys, prox.reactKey, prox.readKey)\n }\n })\n }\n\n /**\n * diving into $obj until target is reached\n * @param obj\n * @param chain\n */\n private getTarget (obj, chain) {\n if (isUndefined(chain)) {\n console.error(`Failed to get ${chain} in ${obj}!`)\n return\n }\n const chainArr = chain.split('.')\n let parent, target\n if (chainArr.length === 1) {\n parent = obj\n target = chain\n } else {\n parent = get(chainArr.slice(0, chainArr.length - 1), obj)\n target = chainArr.slice(-1)\n }\n return { parent, target }\n }\n\n /**\n * creating proxy where when $watch is changed and $react will get the value too\n * @param watchParent: target's parent to listen for changes\n * @param watchTarget: target to listen for changes\n * @param react: target to change if triggered\n * @param watchKeys: array of string attribute that trigger proxy\n * @param reactKey: attribute to update when proxy is triggered\n * @param readKey: attribute to read from in the object\n */\n private constructProxy (watchParent, watchTarget, react, watchKeys: string[], reactKey, readKey?: string) {\n watchParent[watchTarget] = new Proxy(watchParent[watchTarget], {\n set: (obj, prop, value) => {\n obj[prop] = value\n\n const propString = prop.toString()\n if (watchKeys.includes(propString)) {\n if (watchKeys.length > 1) {\n if (!readKey) console.error('readKey is not configured when multiple watchKeys is set.')\n const readValue = obj[readKey]\n if (reactKey in react) {\n react[reactKey] = readValue\n } else console.error(`${reactKey} doesnt exist in ${react}!`)\n } else if (react instanceof Array) {\n react.forEach((each) => {\n if (reactKey in each) {\n each[reactKey] = value\n } else console.error(`${reactKey} doesnt exist in ${each}!`)\n })\n } else {\n if (reactKey in react) {\n react[reactKey] = value\n } else console.error(`${reactKey} doesnt exist in ${react}!`)\n }\n }\n return true\n }\n })\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { TypeBase } from '../TypeBase'\n\nexport default class ClientAssumptions extends TypeBase {\n adjustmentsAssumptionsEducation?: number = undefined\n adjustmentsAssumptionsInflation?: number = undefined\n adjustmentsAssumptionsInvestment?: number = undefined\n\n @MaxChar(768)\n adjustmentsAssumptionsRemarks = ''\n\n adjustmentsAssumptionsRetirement?: number = undefined\n adjustmentsAssumptionsSalary?: number = undefined\n\n constructor () {\n super('client_0')\n }\n}\n","import { Base } from '../Base'\nimport PoliticalExposedPerson from '@master/model/kyc-form/external/PoliticalExposedPerson'\nimport { Default } from '@master/annotation/Default'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport dayjs from 'dayjs'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\nexport default class ClientDeclaration extends Base {\n identifyingPrioritiesAdditionalNotes = '' // was ma_identifying_priorities_additional_notes // no completion check needed\n clientDeclFcProvideCopy?: boolean = false // was caDeclFcProvideCopy\n clientDeclStatements?: boolean = false // was caDeclStatements\n clientDeclAdvisoryProcess = '' // was declarationAdvisoryProcess\n clientDeclIntroduced = '' // was declarationIntroduced\n\n @MaxChar(70)\n clientDeclIntroducedId = '' // was declarationIntroducedId\n\n @MaxChar(70)\n clientDeclIntroducedName = '' // was declarationIntroducedName\n\n clientDeclPoliticallyExposed = '' // was declarationPoliticallyExposed\n clientDecisionAgree?: boolean = false // used in recommendation page's client decision // no completion check needed\n clientDeclAcknowledgement = '' // was declarationAcknowledgementByClient\n contactingYou?: boolean = false\n crcPartI?: boolean = false\n crcPartIi?: boolean = false\n crcPartIii?: boolean = false\n crcPartIv?: boolean = false\n crcPartV?: boolean = false\n crcPartVi?: boolean = false\n crcPartVii?: boolean = false\n crcPartViii?: boolean = false\n disclosure?: boolean = false\n disclosureAps?: boolean = false\n explainedFeesCharges = ''\n pdpaConsent = '' // was ppdaConsent\n marketingConsent = ''\n reviewDate?: number = undefined // not sure if need completion check\n suggestedNextFinancialUpdate?: number = undefined\n cashRebate = ''\n client0ContactMode: string[] = []\n client1ContactMode: string[] = []\n\n @MaxChar(InputMaxChar.LARGE)\n discloseDependant?: boolean = false\n\n relationshipAdviser = ''\n\n @Default('annually')\n frequency = '' // to determine the calculation of the financial needs analysis calculation, either \"monthly\" or \"annually\"\n\n client0DeclarationPoliticallyExposed = '' // Client 1 declaration political exposed\n client1DeclarationPoliticallyExposed = '' // Client 2 declaration political exposed\n\n client0AccreditedInvestor = '' // Client 1 accredited investor\n client1AccreditedInvestor = '' // Client 2 accredited investor\n\n @Default([])\n pepList?: PoliticalExposedPerson[] =[]\n\n afterExtractData (data: { pepList: any[] }) {\n // Formatting pep list\n const pepList = data.pepList || []\n data.pepList = pepList.map((rawPep) => {\n const pep = new PoliticalExposedPerson()\n Object.assign(pep, pep.extractData(rawPep))\n return pep\n })\n\n this.autosetSuggestedReviewDate()\n return data\n }\n\n // to get back the raw data for saving to backend\n convertToRawData () {\n this.autosetSuggestedReviewDate()\n const result: any = super.convertToRawData()\n const rawPepList: {}[] = []\n this.pepList.forEach((pep) => {\n rawPepList.push(pep.convertToRawData())\n })\n result.pep_list = rawPepList // eslint-disable-line @typescript-eslint/camelcase\n return result\n }\n\n autosetSuggestedReviewDate () {\n if (!this.suggestedNextFinancialUpdate && this.reviewDate) {\n const d = dayjs(this.reviewDate).add(1, 'year')\n this.suggestedNextFinancialUpdate = d.valueOf()\n }\n }\n}\n","import { ArrayBase } from '../../ArrayBase'\nimport { isEmpty } from 'lodash/fp'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { IClientOptions, IAssuredOptions, FormOptions } from '../FormOptions'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { IExistingPortfolio } from './IExistingPortfolio'\nimport { isSummaryField, SummaryField } from '@master/annotation/SummaryField'\n\nexport default class ExistingPortfolio extends ArrayBase implements IExistingPortfolio {\n type = 'existing portfolio'\n\n @MaxChar(20)\n companyName = ''\n\n owner: keyof IClientOptions = ''\n policyInsured: keyof IAssuredOptions = ''\n policyType = '' // JPara specific\n\n @MaxChar(52)\n policyName = ''\n\n @SummaryField('AP')\n premium = undefined\n\n @MaxChar(20)\n policyTerms = ''\n\n date?: number = null\n\n @SummaryField('DP')\n lifeProtection?: number = null\n\n @SummaryField('TPD')\n disabilityProtection?: number = null\n\n disabilityIncome?: number = null\n\n @SummaryField('PA')\n accidentProtection?: number = null\n\n @SummaryField('CIP')\n criticalIllnessProtection?: number = null\n\n @SummaryField('R&B')\n roomAndBoard?: number = null\n\n @SummaryField('H&S')\n hospitalIncome?: number = null\n\n roomBoardHospitalIncome = ''\n others?: number = null // JPara specific\n\n @SummaryField('Maturity Value (MV)')\n maturityValue?: number = null\n\n maturityAge?: number = null\n\n @MaxChar(36)\n remarks = ''\n\n @Ignore()\n formOptions?: FormOptions\n\n constructor (formOptions: FormOptions = null) {\n super()\n this.formOptions = formOptions\n this.startIndex = 1\n }\n\n getSummaryFields (): { attrName: string; abbre: string }[] {\n const summaryFields: { attrName: string; abbre: string }[] = []\n Object.keys(this).forEach(attr => {\n const grabSummaryField = isSummaryField(this, attr)\n if (grabSummaryField) {\n summaryFields.push({\n attrName: attr,\n ...grabSummaryField\n })\n }\n })\n return summaryFields\n }\n\n isValid () {\n return !isEmpty(this.owner) && this.owner.length > 0\n }\n\n belongsTo (owner: 'C1' | 'C2') {\n return this.isValid() && this.policyInsured === owner\n }\n\n reset () {\n Object.keys(this).filter(key => {\n return key !== 'type' && key !== 'startIndex' && key !== 'formOptions' && key !== 'curIndex'\n }).forEach(key => {\n this[key] = null\n })\n }\n}\n","import { ArrayBase } from '../../ArrayBase'\nimport { isEmpty } from 'lodash/fp'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { FormOptions, IAssuredOptions } from '../FormOptions'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { IExistingInvestment } from './IExistingInvestment'\nimport { isSummaryField, SummaryField } from '@master/annotation/SummaryField'\n\nexport const AssetTypeOptions = [\n 'UT/ETF - Equity',\n 'UT/ETF - Bond/Income',\n 'UT/ETF - Balanced',\n 'Equity',\n 'Bonds',\n 'Structured products',\n 'Others e.g PE, gold etc.'\n]\n\nexport default class ExistingInvestment extends ArrayBase implements IExistingInvestment {\n type = 'existing investment'\n startIndex = 1\n platform = ''\n\n @MaxChar(74)\n fundName = ''\n\n assetType = ''\n ownedBy: keyof IAssuredOptions = ''\n\n @SummaryField('Investment Amount')\n investmentAmt?: number = undefined\n\n @SummaryField('Current Realisable Value')\n currentRealisableValue?: number = undefined\n\n @SummaryField('Investment Amount RSP')\n investmentAmtRsp?: number = undefined\n\n @MaxChar(36)\n fundManager = ''\n\n @MaxChar(30)\n remarks = ''\n\n @Ignore()\n formOptions?: FormOptions\n\n constructor (formOptions: FormOptions = null) {\n super()\n this.formOptions = formOptions\n this.startIndex = 1\n }\n\n getSummaryFields (): { attrName: string; abbre: string }[] {\n const summaryFields: { attrName: string; abbre: string }[] = []\n Object.keys(this).forEach(attr => {\n const grabSummaryField = isSummaryField(this, attr)\n if (grabSummaryField) {\n summaryFields.push({\n attrName: attr,\n ...grabSummaryField\n })\n }\n })\n return summaryFields\n }\n\n isValid () {\n return !isEmpty(this.ownedBy) && this.ownedBy.length > 0\n }\n\n belongsTo (owner: 'C1' | 'C2') {\n return this.isValid() && this.ownedBy === owner\n }\n}\n","import { ArrayBase } from '../ArrayBase'\n\nexport default class ILPPortfolio extends ArrayBase {\n type = 'ilp portfolio'\n startIndex = 1\n buySwitch = ''\n choice = ''\n for = ''\n frequency = ''\n fund1 = undefined\n fund2 = undefined\n fund3 = undefined\n fund4 = undefined\n fund5 = undefined\n fund6 = undefined\n fund7 = undefined\n fund8 = undefined\n inv1 = undefined\n inv2 = undefined\n inv3 = undefined\n inv4 = undefined\n inv5 = undefined\n inv6 = undefined\n inv7 = undefined\n inv8 = undefined\n name = ''\n platform = ''\n accountNumber = ''\n\n clearData () {\n const excludeKeys = ['type', 'startIndex', 'curIndex']\n Object.keys(this).forEach(key => {\n if (!excludeKeys.includes(key)) {\n // need assign value as empty string to overwrite the data that is stored in database,\n this[key] = ''\n }\n })\n }\n}\n","import { sum, fv, round, valueIsUndefined } from '../math'\nimport { snakeCase, isNull, isUndefined } from 'lodash/fp'\nimport { ArrayBase } from '../../../ArrayBase'\nimport { Ignore, isIgnore } from '@master/annotation/Ignore'\n\nexport default class EducationNeedsDetail extends ArrayBase {\n type = 's4_c'\n inflation: number = null\n providedFor = ''\n age: number = null\n costOfEducation: number = null\n countryOfStudy = ''\n courseDuration: number = null\n yearsToSave: number = null\n maturityValueOfExistingPolicies: number = null\n existingResources: number = null\n startIndex = 1 // s4_c1, s4_c2,...\n\n @Ignore()\n defaultRate?: number\n\n @Ignore()\n disabledInput = false\n\n constructor (id = 's4') {\n super()\n this.type = `${id}_c`\n }\n\n /**\n * this is to override default behavior where s4 is transformed to s_4\n */\n snakeCaseKey (key: string) {\n return this.type + snakeCase(`${this.curIndex + this.startIndex} ${key}`)\n }\n\n /**\n * this will auto set the corresponding rate to default if undefined\n * this is to allow implementation side to set default rate to the model\n * @param inDefaultRate\n */\n setupDefaultRate (inDefaultRate: number) {\n this.defaultRate = inDefaultRate\n if (isUndefined(this.inflation)) this.inflation = this.defaultRate\n }\n\n get totalEducationCost () {\n if (valueIsUndefined(this.costOfEducation)) return null\n const totalFV = fv(this.costOfEducation, this.yearsToSave, (this.inflation || 0) / 100)\n const total = this.courseDuration * totalFV\n return round(total, 0)\n }\n\n get surplusShortfall () {\n if (valueIsUndefined(this.maturityValueOfExistingPolicies) && valueIsUndefined(this.existingResources) && valueIsUndefined(this.totalEducationCost)) return null\n const total = sum(this.maturityValueOfExistingPolicies, this.existingResources, -this.totalEducationCost)\n return total\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.inflation\n }\n\n isValid () {\n return !isUndefined(this.providedFor) && !isNull(this.providedFor) && this.providedFor !== ''\n }\n\n get shouldDisabledInput () {\n return this.disabledInput || !this.isValid()\n }\n\n clear () {\n Object.keys(this).forEach(key => {\n if (key === 'type' || isIgnore(this, key) || key === 'startIndex') {\n return\n }\n this[key] = null\n })\n }\n}\n","\nimport { get, isEmpty, keys, snakeCase } from 'lodash/fp'\nimport { Base } from '@master/model/Base'\nimport { ArrayBase } from '@master/model/ArrayBase'\nimport { Assumption } from '@master/model/common/Assumption'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { IDateService } from '@master/services/IDateService'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport ModelProxyService, { ModelProxyConfig } from '@master/services/ModelProxyService'\nimport KYCClient from '@master/model/kyc-form/KYCClient'\nimport AdviserDetails from '@master/model/kyc-form/AdviserDetails'\nimport AdviserDeclaration from '@master/model/kyc-form/AdviserDeclaration'\nimport ClientAssumptions from '@master/model/kyc-form/ClientAssumptions'\nimport ClientDeclaration from '@master/model/kyc-form/ClientDeclaration'\nimport Dependant from '@master/model/kyc-form/Dependant'\nimport ExistingPortfolioDeclaration from '@master/model/kyc-form/existing-plans/ExistingPortfolioDeclaration'\nimport ExistingPortfolioSummary from '@master/model/kyc-form/existing-plans/ExistingPortfolioSummary'\nimport ExistingInvestDeclaration from '@master/model/kyc-form/existing-plans/ExistingInvestDeclaration'\nimport ExistingInvestSummary from '@master/model/kyc-form/existing-plans/ExistingInvestSummary'\nimport ExistingPortfolio from '@master/model/kyc-form/existing-plans/ExistingPortfolio'\nimport ExistingInvestment from '@master/model/kyc-form/existing-plans/ExistingInvestment'\nimport ILPPortfolio from '@master/model/kyc-form/ILPPortfolio'\nimport RecommendationV2 from '@master/model/kyc-form/RecommendationV2'\nimport TrustedIndividual from '@master/model/kyc-form/TrustedIndividual'\nimport EducationNeedsDetail from '@master/model/kyc-form/need-analysis/savings/EducationNeedsDetail'\nimport FormKeyConverter from '@master/model/kyc-form/FormKeyConverter'\nimport { Ignore, isIgnore } from '@master/annotation/Ignore'\nimport { isPointer, setupPointer } from '@master/annotation/Pointer'\nimport DependantsProtectionClient from '@master/model/kyc-form/need-analysis/protection/DependantsProtectionClient'\nimport { IExistingInvestmentWrapper } from '@master/model/kyc-form/existing-plans/IExistingInvestmentWrapper'\nimport { IExistingPortfolioWrapper } from './existing-plans/IExistingPortfolioWrapper'\n\nexport class ExistingPortfolioDTO implements IExistingPortfolioWrapper {\n declaration = new ExistingPortfolioDeclaration()\n summary = new ExistingPortfolioSummary(new ExistingPortfolio())\n portfolios = Array(12).fill(null).map(() => new ExistingPortfolio())\n}\nexport class ExistingInvestmentPortfolioDTO implements IExistingInvestmentWrapper {\n declaration = new ExistingInvestDeclaration()\n summary = new ExistingInvestSummary(new ExistingInvestment())\n portfolios = Array(10).fill(null).map(() => new ExistingInvestment())\n}\n\nexport default class KYCForm {\n client1: KYCClient\n client2: KYCClient\n\n clientDeclaration = new ClientDeclaration()\n clientAssumptions = new ClientAssumptions()\n educationNeedsDetails = Array(5).fill(null).map(() => new EducationNeedsDetail())\n dependantsProtectionClient: DependantsProtectionClient[]\n recommendations: RecommendationV2\n dependants: Dependant[]\n ilpPortfolios = Array(3).fill(null).map(() => new ILPPortfolio())\n trustedIndividual = new TrustedIndividual()\n adviser = {\n details: new AdviserDetails(),\n declaration: new AdviserDeclaration()\n }\n\n existingPortfolio: IExistingPortfolioWrapper = new ExistingPortfolioDTO()\n\n existingInvestment: IExistingInvestmentWrapper = new ExistingInvestmentPortfolioDTO()\n\n @Ignore()\n snakeCaseKycForm = {}\n\n @Ignore()\n inProduction = true\n\n constructor (dateService: IDateService, projectSettings: IProjectSettings, riskRatingService: IRiskRatingService) {\n // super()\n this.client1 = new KYCClient('client_0', dateService, projectSettings)\n this.client2 = new KYCClient('client_1', dateService, projectSettings)\n this.dependants = Array(4).fill(null).map(() => new Dependant(dateService))\n this.dependantsProtectionClient = Array(5).fill(null).map(() => new DependantsProtectionClient(projectSettings))\n this.recommendations = new RecommendationV2(riskRatingService)\n }\n\n get hasClient2 () {\n return this.client2.personalDetails?.included === true\n }\n\n get hasAccompaniment () {\n return this.trustedIndividual?.accompanied === 'yes'\n }\n\n get hasAnsweredAccompanimentQn () {\n return this.trustedIndividual?.accompanied === 'yes' || this.trustedIndividual?.accompanied === 'no'\n }\n\n get declaredBO1 () {\n return this.client1.beneficialOwner.declarationBeneficialOwner === 'no'\n }\n\n get hasValidBO1 () {\n const c1BOIncomplete = this.client1?.beneficialOwner?.beneficialOwnerParticulars?.isNotComplete()\n return this.declaredBO1 && !c1BOIncomplete\n }\n\n get declaredBO2 () {\n return this.hasClient2 && this.client2.beneficialOwner.declarationBeneficialOwner === 'no'\n }\n\n get hasValidBO2 () {\n const c2BOIncomplete = this.client2?.beneficialOwner?.beneficialOwnerParticulars?.isNotComplete()\n return this.declaredBO2 && !c2BOIncomplete\n }\n\n get declaredC1PEP () {\n return this.clientDeclaration.client0DeclarationPoliticallyExposed === 'yes'\n }\n\n get hasValidC1PEP () {\n const targetPEP = this.clientDeclaration.pepList.find(pep => pep.policyholderName === 'C1')\n const c1PEPIncomplete = targetPEP ? targetPEP.isNotComplete() : true\n return this.declaredC1PEP && !c1PEPIncomplete\n }\n\n get declaredC2PEP () {\n return this.hasClient2 && this.clientDeclaration.client1DeclarationPoliticallyExposed === 'yes'\n }\n\n get hasValidC2PEP () {\n const targetPEP = this.clientDeclaration.pepList.find(pep => pep.policyholderName === 'C2')\n const c2PEPIncomplete = targetPEP ? targetPEP.isNotComplete() : true\n return this.declaredC2PEP && !c2PEPIncomplete\n }\n\n get allRecommendations () {\n return this.recommendations.rcmd.filter(recommendation => {\n if (!this.hasClient2 && recommendation.clientIndex === 1) {\n return false\n }\n\n return true\n })\n }\n\n /**\n * this is the mapping of individual needs category and its corresponding default rate (assumptions)\n * @param assumptions\n */\n setupDefaultRate (assumptions: Assumption) {\n // saving\n this.client1.retirementNeeds.setupDefaultRates(assumptions.salaryIncrementRate, assumptions.inflationAdjustedReturn)\n this.client2.retirementNeeds.setupDefaultRates(assumptions.salaryIncrementRate, assumptions.inflationAdjustedReturn)\n this.client1.savingsNeeds.setupDefaultRate(assumptions.investmentReturn)\n this.client2.savingsNeeds.setupDefaultRate(assumptions.investmentReturn)\n this.client1.investmentNeeds.setupDefaultRate(assumptions.investmentReturn)\n this.client2.investmentNeeds.setupDefaultRate(assumptions.investmentReturn)\n this.client1.specificGoalsNeeds.setupDefaultRate(assumptions.investmentReturn)\n this.client2.specificGoalsNeeds.setupDefaultRate(assumptions.investmentReturn)\n\n // health & protection\n this.client1.criticalIllnessNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n this.client2.criticalIllnessNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n this.client1.deathProtectionNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n this.client2.deathProtectionNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n this.client1.disabilityIncomeNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n this.client2.disabilityIncomeNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n this.client1.disabilityProtectionNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n this.client2.disabilityProtectionNeeds.setupDefaultRate(assumptions.inflationAdjustedReturn)\n // education details\n for (let index = 0; index < this.educationNeedsDetails.length; index++) {\n this.educationNeedsDetails[index].setupDefaultRate(assumptions.educationInflationRate)\n }\n // dependants protection\n for (let index = 0; index < this.dependantsProtectionClient.length; index++) {\n this.dependantsProtectionClient[index].setupDefaultRate(assumptions.inflationAdjustedReturn)\n }\n // @TODO: This needs to be improved on, clientAssumptions are stored in the KYCForm\n // the values are taken from the default assumption endpoint. If this were to improve,\n // consider if we still need `assumption` object in the KYCFormStore or we just use\n // clientAssumptions directly.\n // When storing, 2.3% = 2.3 and not 0.023\n this.clientAssumptions.adjustmentsAssumptionsEducation = assumptions.educationInflationRate || 0\n this.clientAssumptions.adjustmentsAssumptionsInflation = assumptions.inflation || 0\n this.clientAssumptions.adjustmentsAssumptionsInvestment = assumptions.investmentReturn || 0\n this.clientAssumptions.adjustmentsAssumptionsRetirement = assumptions.retirementIncome || 0\n this.clientAssumptions.adjustmentsAssumptionsSalary = assumptions.salaryIncrementRate || 0\n // setup proxy for which value is required to be synced between models\n const mps = new ModelProxyService(this)\n const otherNeedsProxies = this.otherNeedsProxies()\n const allProxies = otherNeedsProxies.concat([\n {\n watch: 'clientDeclaration',\n watchKeys: ['reviewDate'],\n react: 'dependants',\n reactKey: 'reviewDate'\n },\n {\n watch: 'client1.cka',\n react: 'client2.cka',\n mutualKeys: ['ckaCompleted', 'otherInvestmentExp', 'otherProfessional']\n },\n {\n watch: 'client2.cka',\n react: 'client1.cka',\n mutualKeys: ['ckaCompleted', 'otherInvestmentExp', 'otherProfessional']\n },\n {\n watch: 'client1.budget',\n react: 'client2.budget',\n mutualKeys: ['budgetOthers1', 'budgetOthers2', 'budgetOthers3']\n },\n {\n watch: 'client2.budget',\n react: 'client1.budget',\n mutualKeys: ['budgetOthers1', 'budgetOthers2', 'budgetOthers3']\n }\n ])\n mps.setProxy(allProxies)\n }\n\n otherNeedsProxies (): ModelProxyConfig[] {\n const clientN = [1, 2]\n const needsN = [1, 2]\n const proxies: ModelProxyConfig[] = []\n clientN.forEach(cn => {\n needsN.forEach(nn => {\n const watchModel = `client${cn}.other${nn}Needs`\n proxies.push({\n watch: watchModel,\n watchKeys: ['planningFor'],\n readKey: 'planningFor',\n react: watchModel,\n reactKey: 'text'\n })\n proxies.push({\n watch: watchModel,\n watchKeys: ['text'],\n readKey: 'text',\n react: watchModel,\n reactKey: 'planningFor'\n })\n })\n })\n return proxies\n }\n\n setData (kycForm: any, obj: object = this, path = '', raw = true) {\n let formattedKYCForm = kycForm\n if (raw) {\n const converter = new FormKeyConverter()\n formattedKYCForm = converter.mapRawToFormatted(kycForm)\n }\n keys(obj).filter(key => !isIgnore(this, key)).forEach(key => {\n if (isPointer(this, key)) {\n console.error(`Pointer of ${key} at current level of ${this} is not recommended.\n Please use getter as entire model can be accessed in current level.`)\n return\n }\n const newObject = get(key, obj)\n if (newObject instanceof Base) {\n // setup pointer\n setupPointer(newObject.getPointers(), this, obj, newObject)\n Object.assign(newObject, newObject.extractData(formattedKYCForm))\n } else if (newObject instanceof Array) {\n newObject.forEach((object: ArrayBase, index) => {\n // setup pointer\n setupPointer(object.getPointers(), this, obj, object)\n Object.assign(object, object.extractData(formattedKYCForm, index))\n })\n } else if (newObject instanceof Object) {\n this.setData(formattedKYCForm, newObject, `${path}.${key}`, false)\n } else {\n obj[key] = formattedKYCForm[key]\n }\n })\n }\n\n convertToRawData (obj: object = this, path = '') {\n if (obj === this) this.snakeCaseKycForm = {} // reset if calling from highest level\n keys(obj).filter(key => !isIgnore(this, key)).forEach((key) => {\n const newObject = get(key, obj)\n if (newObject instanceof Base) {\n const rawData = newObject.convertToRawData()\n if (!this.inProduction) this.checkOverwrite(this.snakeCaseKycForm, rawData)\n Object.assign(this.snakeCaseKycForm, rawData)\n } else if (newObject instanceof Array) {\n newObject.forEach((object: ArrayBase, index) => {\n const rawData = object.convertToRawData(index)\n if (!this.inProduction) this.checkOverwrite(this.snakeCaseKycForm, rawData)\n Object.assign(this.snakeCaseKycForm, rawData)\n })\n } else if (typeof newObject === 'string') {\n const snakeKey = snakeCase(key)\n const stringObj = {}\n stringObj[snakeKey] = newObject\n if (!this.inProduction) this.checkOverwrite(this.snakeCaseKycForm, stringObj)\n Object.assign(this.snakeCaseKycForm, stringObj)\n } else if (newObject instanceof Object) {\n this.convertToRawData(newObject, `${path}.${key}`)\n } else {\n const snakeKey = snakeCase(key)\n const stringObj = {}\n stringObj[snakeKey] = newObject\n if (!this.inProduction) this.checkOverwrite(this.snakeCaseKycForm, stringObj)\n Object.assign(this.snakeCaseKycForm, stringObj)\n }\n })\n const converter = new FormKeyConverter()\n const rawKycForm = converter.mapFormattedToRaw(this.snakeCaseKycForm)\n return rawKycForm\n }\n\n /**\n * This is to flag overlapping keys (if any) for debug\n * @param collected\n * @param toadd\n */\n checkOverwrite (collected: object, toadd: object) {\n Object.keys(toadd).forEach((key) => {\n if (Object.keys(collected).includes(key)) {\n console.warn(`[Overlapping Model Attribute Key] KycForm's convertToRawData attempted to overwrite value for : ${key}`)\n }\n })\n }\n\n getLifeAssured () {\n const list = [{ label: '', value: '' }]\n list.push({\n label: `${this.client1.personalDetails.name} (C1)`,\n value: this.client1.personalDetails.name\n })\n if (this.hasClient2) {\n list.push({\n label: `${this.client2.personalDetails.name} (C2)`,\n value: this.client2.personalDetails.name\n })\n }\n this.dependants.filter(dependant => !isEmpty(dependant.name)).forEach(dependant => {\n const sameClient1 = dependant.name === this.client1.personalDetails.name && dependant.nric === this.client1.personalDetails.nric\n const sameClient2 = dependant.name === this.client2.personalDetails.name && dependant.nric === this.client2.personalDetails.nric\n const label = `${dependant.name} (D${dependant.curIndex + 1})`\n\n if (sameClient1 || (sameClient2 && this.hasClient2)) {\n const clientIndex = sameClient1 ? 'C1' : 'C2'\n const existingList = list.find(option => option.value === dependant.name)\n if (existingList) existingList.label = `${dependant.name} (${clientIndex}, D${dependant.curIndex + 1})`\n return\n }\n list.push({\n label,\n value: dependant.name\n })\n })\n return list\n }\n}\n","import { ProductFilterDTO } from '../api'\n\nexport class ProductFilterRequest implements ProductFilterDTO {\n status: number[];\n}\n","import { FormBase } from '../FormBase'\nimport { EmploymentTypeOptions } from '@master/model/options/EmploymentTypeOptions'\nimport { EmployeeStatusOptions } from '@master/model/options/EmployeeStatusOptions'\n\nexport class EmployerConsentFields {\n category: typeof EmploymentTypeOptions[number]['value'] = ''\n weeklyHours: number = undefined\n contractStart: number = undefined\n contractEnd: number = undefined\n position = ''\n status: typeof EmployeeStatusOptions[number]['value'] = ''\n // authorizedSignature: signature\n // authorizedName: string\n // authorizedDesignation: string\n // authorizedContactNo: string\n}\nexport class EmployerConsent extends FormBase {\n // shared.name\n // shared.nric\n type = 'employer-consent'\n\n data: EmployerConsentFields = new EmployerConsentFields()\n}\n","import { Base } from '../Base'\nimport { MaxChar } from '@master/annotation/MaxChar'\n\nexport default class AdviserDetails extends Base {\n importantNoticeList: string[] = []\n\n @MaxChar(45)\n importantNoticeOthers = ''\n\n adviserFaCode = ''\n\n @MaxChar(32)\n adviserMasRepNo = ''\n\n @MaxChar(32)\n adviserName = ''\n\n adviserOid = ''\n\n afterExtractData (data: { importantNoticeList: string[] }) {\n data.importantNoticeList = data.importantNoticeList || []\n if (typeof data.importantNoticeList === 'string') {\n data.importantNoticeList = JSON.parse(data.importantNoticeList).map(valueData => valueData.trim())\n }\n return data\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { IProjectInfo } from '@master/config/IProjectInfo'\nimport { container, inject } from 'inversify-props'\nimport { FormBase } from '../FormBase'\n\nexport class SharedField {\n @MaxChar(100)\n name = ''\n\n nric = ''\n nricType: 'Pink'\n\n rnfNumber = ''\n corporateEmail = ''\n hpNumber = ''\n branch = ''\n rm = ''\n fsm = ''\n\n companyLongName = ''\n}\n\nexport class Shared extends FormBase {\n constructor () {\n super()\n const prjInfo = container.get('ProjectInfo')\n this.data.companyLongName = prjInfo.companyLongName\n }\n\n type = 'shared'\n data: SharedField = new SharedField()\n\n get error () {\n const errs = []\n if (!this.data.name || this.data.name.length === 0) {\n errs.push({\n key: 'name',\n msg: 'Required'\n })\n }\n const emailFormat = new RegExp(\"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$\")\n if (!this.data.corporateEmail || this.data.corporateEmail.length === 0) {\n errs.push({\n key: 'corporateEmail',\n msg: 'Required'\n })\n }\n if (!emailFormat.test(this.data.corporateEmail)) {\n errs.push({\n key: 'corporateEmail',\n msg: 'Required Format: abc@abc.com'\n })\n }\n return errs\n }\n}\n","import dayjs, { ManipulateType } from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport utc from 'dayjs/plugin/utc'\nimport timezonePlugin from 'dayjs/plugin/timezone'\nimport duration from 'dayjs/plugin/duration'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport { IDateService, TimeUnit } from './IDateService'\n\nconst padStart = function padStart (string, length, pad) {\n const s = String(string)\n if (!s || s.length >= length) return string\n return '' + Array(length + 1 - s.length).join(pad) + string\n}\n\nconst padZoneStr = function padZoneStr (instance) {\n const negMinutes = -instance.utcOffset()\n const minutes = Math.abs(negMinutes)\n const hourOffset = Math.floor(minutes / 60)\n const minuteOffset = minutes % 60\n return '' + (negMinutes <= 0 ? '+' : '-') + padStart(hourOffset, 2, '0') + ':' + padStart(minuteOffset, 2, '0')\n}\n\nconst Utils = {\n s: padStart,\n z: padZoneStr\n}\n\nconst C = {\n REGEX_FORMAT: /\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,\n INVALID_DATE_STRING: 'Invalid Date',\n FORMAT_DEFAULT: 'YYYY-MM-DDTHH:mm:ssZ'\n}\n\nexport function format (formatStr) {\n if (!this.isValid()) return C.INVALID_DATE_STRING\n\n const str = formatStr || C.FORMAT_DEFAULT\n const zoneStr = Utils.z(this)\n const locale = this.$locale()\n const { $H, $m, $M } = this\n const {\n weekdays, months, meridiem\n } = locale\n const getShort = (arr, index, full?, length?) => (\n (arr && (arr[index] || arr(this, str))) || full[index].substr(0, length)\n )\n const get$H = num => (\n Utils.s($H % 12 || 12, num, '0')\n )\n\n const meridiemFunc = meridiem || ((hour, minute, isLowercase) => {\n const m = (hour < 12 ? 'AM' : 'PM')\n return isLowercase ? m.toLowerCase() : m\n })\n\n const matches = {\n YY: String(this.$y).slice(-2),\n YYYY: String(this.$y).padStart(4, '0'), // override this\n M: $M + 1,\n MM: Utils.s($M + 1, 2, '0'),\n MMM: getShort(locale.monthsShort, $M, months, 3),\n MMMM: getShort(months, $M),\n D: this.$D,\n DD: Utils.s(this.$D, 2, '0'),\n d: String(this.$W),\n dd: getShort(locale.weekdaysMin, this.$W, weekdays, 2),\n ddd: getShort(locale.weekdaysShort, this.$W, weekdays, 3),\n dddd: weekdays[this.$W],\n H: String($H),\n HH: Utils.s($H, 2, '0'),\n h: get$H(1),\n hh: get$H(2),\n a: meridiemFunc($H, $m, true),\n A: meridiemFunc($H, $m, false),\n m: String($m),\n mm: Utils.s($m, 2, '0'),\n s: String(this.$s),\n ss: Utils.s(this.$s, 2, '0'),\n SSS: Utils.s(this.$ms, 3, '0'),\n Z: zoneStr // 'ZZ' logic below\n }\n\n return str.replace(C.REGEX_FORMAT, (match, $1) => $1 || matches[match] || zoneStr.replace(':', '')) // 'ZZ'\n}\n\nexport class DateService implements IDateService {\n private timezone = 'Asia/Singapore'\n\n constructor () {\n this.timezone = 'Asia/Singapore'\n dayjs.extend(customParseFormat)\n dayjs.extend(utc)\n dayjs.extend(timezonePlugin)\n dayjs.prototype.format = format\n }\n\n // format (date: string | number | Date, format: string) {\n // if (typeof date === 'string') {\n // // there is case that when the timestamp return is a string type, need to parse to number first\n // // there is also possibility that date passed as a format of '01-01-2024',\n // // in this case we cannot parse it to number, we should skip this\n // const numberDate = Number(date)\n // if (numberDate) { // mean it is timestamp in string\n // return dayjs(Number(date)).tz(this.timezone).format(format)\n // }\n // }\n\n // return dayjs(date).tz(this.timezone).format(format)\n // }\n\n format (date: string | number | Date, format: string) {\n let dateObj: dayjs.Dayjs\n\n if (typeof date === 'string') {\n // there is case that when the timestamp return is a string type, need to parse to number first\n // there is also possibility that date passed as a format of '01-01-2024',\n // in this case we cannot parse it to number, we should skip this\n const numberDate = Number(date)\n if (numberDate) { // mean it is timestamp in string\n dateObj = dayjs.utc(numberDate)\n } else {\n dateObj = dayjs.utc(date)\n }\n } else {\n dateObj = dayjs.utc(date)\n }\n\n // Check if date is before 1982\n const transitionDate = dayjs.utc('1982-01-01')\n if (dateObj.isBefore(transitionDate)) {\n // Add 30 minutes to compensate for the difference\n return dateObj.add(30, 'minute').tz(this.timezone).format(format)\n }\n\n return dateObj.tz(this.timezone).format(format)\n }\n\n calculateAge (referDate: Date, dob: Date, asFloat = false) {\n return dayjs(referDate).tz(this.timezone).diff(dayjs(dob), 'year', asFloat)\n }\n\n toUnixMilliseconds (date: string, format: string) {\n return dayjs(date, format).tz(this.timezone).valueOf()\n }\n\n isValid (date: string, format: string) {\n return dayjs(date, format).tz(this.timezone).format(format) === date\n }\n\n isValidDate (date: string | number, format: string) {\n const formattedDate = this.format(date, format)\n return dayjs(formattedDate, format, true).isValid()\n }\n\n add (date: string | number | Date, timeUnit: TimeUnit, amount: number) {\n return dayjs(date).tz(this.timezone).add(amount, timeUnit as ManipulateType).toDate()\n }\n\n subtract (date: string | number | Date, timeUnit: TimeUnit, amount: number) {\n return dayjs(date).tz(this.timezone).subtract(amount, timeUnit as ManipulateType).toDate()\n }\n\n getDateOfMonthOfSpecificDate (date: number, specificDate?: string | number | Date) {\n return specificDate ? dayjs(specificDate).tz(this.timezone).date(date).toDate() : dayjs().tz(this.timezone).date(date).toDate()\n }\n\n setHour (date: string | number | Date, hour?: number, minute?: number, second?: number, millisec?: number): number {\n const dayJsDate = dayjs(date).tz(this.timezone)\n const dateHour = hour || dayJsDate.get('hour')\n const dateMinute = minute || dayJsDate.get('minute')\n const dateSecond = second || dayJsDate.get('second')\n const dateMillisec = millisec || dayJsDate.get('millisecond')\n return dayJsDate\n .set('hour', dateHour)\n .set('minute', dateMinute)\n .set('second', dateSecond)\n .set('millisecond', dateMillisec)\n .valueOf()\n }\n\n get (date: string | number | Date, timeUnit: Exclude): number {\n return dayjs(date).tz(this.timezone).get(timeUnit)\n }\n\n isInThePastOfDate (dateToCheck: string | number | Date, dateToCompareWith: string | number | Date, compareDayOnly = true): boolean {\n const dateToCompareInFormat = compareDayOnly ? dayjs(dateToCompareWith).tz(this.timezone).format('YYYY-MM-DD') : dayjs(dateToCompareWith).tz(this.timezone)\n return dayjs(dateToCheck).tz(this.timezone).isBefore(dateToCompareInFormat)\n }\n\n difference (dateToCheck: string | number | Date, dateToCompareWith: string | number | Date): string {\n dayjs.extend(duration)\n dayjs.extend(relativeTime)\n return dayjs.duration(dayjs(dateToCheck).diff(dayjs(dateToCompareWith))).humanize()\n }\n}\n","import { Base } from '../../Base'\nimport { isEmpty } from 'lodash/fp'\nimport { Default } from '@master/annotation/Default'\nimport { IClientOptions } from '../FormOptions'\nimport { MaxChar } from '@master/annotation/MaxChar'\n\nexport default class PoliticalExposedPerson extends Base {\n @MaxChar(70)\n policyholderName: keyof IClientOptions = ''\n\n @MaxChar(152)\n fullName = ''\n\n @MaxChar(70)\n nric = ''\n\n @MaxChar(70)\n occupation = ''\n\n @MaxChar(70)\n nameOfEmployer = ''\n\n sameAsHolder = false\n\n @Default([])\n sourceOfFunds?: string[] = []\n\n @MaxChar(48)\n fundOthers = ''\n\n @Default([])\n sourceOfWealth?: string[] = []\n\n @MaxChar(48)\n wealthOthers = ''\n\n category = ''\n\n @MaxChar(70)\n familyMemberRelationship = ''\n\n @MaxChar(70)\n closeAssociateRelationship = ''\n\n @MaxChar(70)\n clientRelationship = ''\n\n @MaxChar(70)\n personName = ''\n\n @MaxChar(70)\n personRank = ''\n\n @MaxChar(70)\n personCountryOfAppointment = ''\n\n /**\n * To be completed - moved here for maintainability (follow BOP's pattern)\n * @param pep\n */\n isNotComplete () {\n return isEmpty(this.fullName) ||\n isEmpty(this.nric) ||\n isEmpty(this.occupation) // ||\n // this.isEmpty(pep.familyMemberRelationship)\n }\n}\n","import { Selection } from '@core/annotation/Selection'\nimport { FormBase } from '../FormBase'\nimport { DeclarationOptions } from './GeneralDeclaration'\n\nexport const RepGradeOptions = [\n { label: '', value: '' },\n { label: 'A', value: 'A' },\n { label: 'B', value: 'B' },\n { label: 'C', value: 'C' },\n { label: 'D', value: 'D' },\n { label: 'E', value: 'E' },\n { label: 'Ungraded', value: 'U' }\n]\nexport const SvGradeOptions = [\n { label: '', value: '' },\n { label: 'Good', value: 'good' },\n { label: 'Satisfactory', value: 'satisfactory' },\n { label: 'Fair', value: 'fair' },\n { label: 'Unsatisfactory', value: 'unsatisfactory' }\n]\nexport class BscGrade {\n period = ''\n\n @Selection(RepGradeOptions, true)\n grade = ''\n}\nexport class SvBscGrade extends BscGrade {\n @Selection(SvGradeOptions, true)\n grade = ''\n}\nexport class BscGrading {\n unsatisfactory: typeof DeclarationOptions[number]['value'] = undefined\n rep: BscGrade[] = Array(8).fill(null).map(() => new BscGrade())\n sv: BscGrade[] = Array(8).fill(null).map(() => new SvBscGrade())\n}\nexport class FitProperFields {\n 1: typeof DeclarationOptions[number]['value'] = undefined\n 2: typeof DeclarationOptions[number]['value'] = undefined\n 3: typeof DeclarationOptions[number]['value'] = undefined\n 4: typeof DeclarationOptions[number]['value'] = undefined\n 5: typeof DeclarationOptions[number]['value'] = undefined\n 6: typeof DeclarationOptions[number]['value'] = undefined\n 7: typeof DeclarationOptions[number]['value'] = undefined\n 8: typeof DeclarationOptions[number]['value'] = undefined\n 9: typeof DeclarationOptions[number]['value'] = undefined\n 10: typeof DeclarationOptions[number]['value'] = undefined\n 11: typeof DeclarationOptions[number]['value'] = undefined\n 12: typeof DeclarationOptions[number]['value'] = undefined\n 13: typeof DeclarationOptions[number]['value'] = undefined\n 14: typeof DeclarationOptions[number]['value'] = undefined\n 15: typeof DeclarationOptions[number]['value'] = undefined\n 16: typeof DeclarationOptions[number]['value'] = undefined\n 17: typeof DeclarationOptions[number]['value'] = undefined\n 18: typeof DeclarationOptions[number]['value'] = undefined\n 19: typeof DeclarationOptions[number]['value'] = undefined\n 20: typeof DeclarationOptions[number]['value'] = undefined\n 21: typeof DeclarationOptions[number]['value'] = undefined\n 22: typeof DeclarationOptions[number]['value'] = undefined\n 23: typeof DeclarationOptions[number]['value'] = undefined\n 24: typeof DeclarationOptions[number]['value'] = undefined\n 25: typeof DeclarationOptions[number]['value'] = undefined\n 26: typeof DeclarationOptions[number]['value'] = undefined\n 27: typeof DeclarationOptions[number]['value'] = undefined\n 28: typeof DeclarationOptions[number]['value'] = undefined\n 29: typeof DeclarationOptions[number]['value'] = undefined\n 30: typeof DeclarationOptions[number]['value'] = undefined\n 31: typeof DeclarationOptions[number]['value'] = undefined\n 32: typeof DeclarationOptions[number]['value'] = undefined\n taxOffence: typeof DeclarationOptions[number]['value'] = undefined\n taxOffenceSpecified = ''\n bscGrading: BscGrading = new BscGrading()\n additional = ''\n}\nexport class FitAndProper extends FormBase {\n type = 'fit-proper'\n\n data: FitProperFields = new FitProperFields()\n}\n","module.exports = __webpack_public_path__ + \"img/admin-settings.40d22ca0.svg\";","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","import { TypeBase } from '../TypeBase'\nimport { Default } from '@master/annotation/Default'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\n/**\n * AKA Customer Knowledge Assessment\n * By default, completed, *_specify is used by both\n * client 1 and 2\n */\nexport default class CKA extends TypeBase {\n @Default(false)\n ckaCompleted = false // was complete_cka\n\n @Default([])\n educationList: string[] = []\n\n @MaxChar(InputMaxChar.SMALL)\n educationSpecify = ''\n\n higherEducation = ''\n investmentExperience = ''\n\n @Default([])\n investmentList: string[] = []\n\n @MaxChar(InputMaxChar.SMALL)\n investmentSpecify = ''\n\n ckaMet = '' // was ckaMet\n otherInvestmentExp = ''\n otherProfessional = ''\n\n @MaxChar(InputMaxChar.SMALL)\n profSpecify = ''\n\n @Default([])\n professionalList: string[] = []\n\n professionalQualification = ''\n otherProfessionalQualification = ''\n workExperience = ''\n\n @Default([])\n workList: string[] = []\n\n @MaxChar(InputMaxChar.SMALL)\n workSpecify = ''\n\n eLearning = ''\n eLearningSpecify = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super(`${type}`)\n }\n\n reset () {\n this.ckaCompleted = false\n this.educationList = []\n this.educationSpecify = ''\n this.higherEducation = ''\n this.investmentExperience = ''\n this.investmentList = []\n this.investmentSpecify = ''\n this.ckaMet = ''\n this.otherInvestmentExp = ''\n this.otherProfessional = ''\n this.profSpecify = ''\n this.professionalList = []\n this.professionalQualification = ''\n this.otherProfessionalQualification = ''\n this.workExperience = ''\n this.workList = []\n this.workSpecify = ''\n this.eLearning = ''\n this.eLearningSpecify = ''\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { TypeBase } from '../TypeBase'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\nexport default class TrustedIndividual extends TypeBase {\n accompanied = ''\n confirmLanguage = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n confirmLanguageOthers = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n contact = ''\n\n contactForSurvey = ''\n correspondenceAddress = ''\n dob?: number = undefined\n\n @MaxChar(InputMaxChar.XSMALL)\n name = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n nric = ''\n\n toContact?: 'yes' | 'no' = 'yes'\n preferredDate?: number = undefined\n preferredTime = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n relationship = ''\n\n residentialAddress = ''\n\n constructor (type: 'trusted_individual' = 'trusted_individual') {\n super(type)\n }\n}\n","import { getRawKey } from '@master/annotation/RawKey'\nimport { needToConvertJson } from '@master/annotation/Json'\nimport { snakeCase, zipObject, get } from 'lodash/fp'\nimport { isIgnore } from '@master/annotation/Ignore'\nimport { convertJsonToMetaClass, needToConvertToMetaClass } from '@master/annotation/MetaClass'\nimport { isEmpty } from 'lodash'\n\nexport class Meta {\n snakeCaseKey (key: string) {\n return snakeCase(key)\n }\n\n // assignData lifeCycle\n /**\n * beforeAssign is used for manipulate headers or data before assign, override this function in extended class when needed\n * @param headers headers from meta list\n * @param data single row data from meta list\n */\n beforeAssign (headers: string[], data: (string | number)[]): { headers: string[]; data: (string | number)[] } {\n return { headers, data }\n }\n\n /**\n * afterAssign is used to manipulate current object after completed assign\n */\n afterAssign () {\n // Example:\n // Object.freeze(this)\n }\n\n /**\n * AssignData is used for get the data and fill into this object\n * @param headers headers from meta lis\n * @param data single row data from meta list\n */\n assignData (headers: string[], data: (string | number)[]) {\n const { headers: editedHeaders, data: editedData } = this.beforeAssign(headers, data)\n\n const result = zipObject(editedHeaders, editedData)\n\n Object.keys(this)\n .forEach(key => {\n const rawKey = getRawKey(this, key) || this.snakeCaseKey(key)\n if (!(rawKey in result) && !(key in result)) return\n let value = result[rawKey] || result[key] as any\n\n if (needToConvertToMetaClass(this, key) && !isEmpty(value)) {\n value = convertJsonToMetaClass(this, key, JSON.parse(value))\n }\n if (needToConvertJson(this, key) && !isEmpty(value)) {\n const parsed = JSON.parse(value)\n value = Array.isArray(parsed)\n ? parsed.map(item => item.trim())\n : parsed\n }\n this[key] = value\n })\n\n this.afterAssign()\n }\n\n private convertAllKeyToRawData (convertNested: boolean) {\n let parent = Object.getPrototypeOf(this)\n let getterKeys = []\n\n // loop all parent to get all the getter keys\n while (parent instanceof Meta) {\n const keys = Object.entries(Object.getOwnPropertyDescriptors(parent))\n .filter(([, descriptor]) => typeof descriptor.get === 'function')\n .map(([key]) => key)\n\n getterKeys = getterKeys.concat(keys)\n parent = Object.getPrototypeOf(parent)\n }\n\n // remove duplicate key\n getterKeys = [...new Set(getterKeys)]\n\n const propertyKeys = convertNested ? Object.keys(this) : Object.keys(this).filter(key => !(get(key, this) instanceof Meta))\n\n return this.convertSpecifiedKeyToRawData([...getterKeys, ...propertyKeys], convertNested)\n }\n\n private convertSpecifiedKeyToRawData (keyToConvert: string[], convertNested: boolean) {\n return keyToConvert\n .filter(key => !isIgnore(this, key))\n .reduce((result, key) => {\n const snakeCaseKey = getRawKey(this, key) || this.snakeCaseKey(key)\n let value = get(key, this)\n // convert back to stringify json\n if (needToConvertToMetaClass(this, key) && value !== undefined) {\n value = JSON.stringify(value.convertToRawData(null, convertNested))\n }\n if (needToConvertJson(this, key)) {\n value = JSON.stringify(value)\n }\n result = { ...result, [snakeCaseKey]: value }\n return result\n }, {})\n }\n\n convertToRawData (keyToConvert?: string[], convertNested = false) {\n return keyToConvert ? this.convertSpecifiedKeyToRawData(keyToConvert, convertNested) : this.convertAllKeyToRawData(convertNested)\n }\n}\n","module.exports = __webpack_public_path__ + \"img/videocam.2db82332.svg\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{ref:\"dialogContent\",staticClass:\"modal-mask\"},[_c('div',{staticClass:\"modal-wrapper\"},[_c('div',{staticClass:\"modal-container\",class:_vm.sizeClass,style:({width: _vm.customWidth }),attrs:{\"role\":\"dialog\"}},[_c('div',{staticClass:\"modal-header\"},[_vm._t(\"header\"),_c('button',{staticClass:\"btn-close\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('i',{staticClass:\"fas fa-times\"})])],2),_c('div',{staticClass:\"modal-body\"},[_vm._t(\"body\")],2),(!_vm.hideFooter)?_c('div',{staticClass:\"modal-footer\"},[(_vm.showCancel)?_c('button',{on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\" Cancel \")]):_vm._e(),_vm._t(\"footer\")],2):_vm._e()])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\n\n@Component\nexport default class AppDialog extends Vue {\n @Prop() readonly size!: 'xsmall' | 'small' | 'medium' | 'large' | 'flexible' // default size is medium\n @Prop() readonly hideCancel!: boolean // hide or show Cancel button, default is false\n @Prop() readonly hideFooter!: boolean // hide or show footer slot, default is false\n @Prop() readonly customWidth?: string // to define width of the dialog body\n\n get showCancel () {\n return this.hideCancel ? !this.hideCancel : true\n }\n\n get showFooter () {\n return this.hideFooter ? !this.hideFooter : true\n }\n\n get sizeClass () {\n return this.size ? this.size : 'medium'\n }\n\n created () {\n this.$emit('open')\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppDialog.vue?vue&type=template&id=76ac30f4&scoped=true&\"\nimport script from \"./AppDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppDialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppDialog.vue?vue&type=style&index=0&id=76ac30f4&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"76ac30f4\",\n null\n \n)\n\nexport default component.exports","import { options } from './Options'\n\nexport const IdentityTypeOptions: options[] = [\n { label: '', value: '' },\n { label: 'NRIC', value: 'nric' },\n { label: 'FIN', value: 'fin' },\n { label: 'Passport', value: 'passport' },\n { label: 'UEN', value: 'uen' }\n]\n","module.exports = __webpack_public_path__ + \"img/new_business.30d795d8.svg\";","import { Ignore } from '@master/annotation/Ignore'\nimport { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\n\nexport default class EmploymentMeta extends Meta {\n @RawKey('employment_oid')\n @Ignore()\n oid = ''\n\n nameOfEmployer = ''\n address = ''\n dateFrom: number = undefined\n dateTo: number = undefined\n designation = ''\n jobDescription = ''\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDialog.vue?vue&type=style&index=0&id=76ac30f4&lang=scss&scoped=true&\"","import { isUndefined } from 'lodash/fp'\nimport 'reflect-metadata'\n\nconst rawKeyMetadataKey = Symbol('RawKey')\n\nexport function RawKey (formatString: string) {\n return Reflect.metadata(rawKeyMetadataKey, formatString)\n}\n\nexport function getRawKey (target: any, propertyKey: string) {\n let key = Reflect.getMetadata(rawKeyMetadataKey, target, propertyKey)\n\n if (isUndefined(key)) {\n return\n }\n\n if (/@/.test(key)) {\n key.match(/(?:@)([a-zA-Z0-9]+)/g)\n .forEach(match => {\n const value = target[match.substring(1, match.length)]\n key = key.replace(match, value)\n })\n }\n return key\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { CommissionScheduleCsvDTO } from '../models/CommissionScheduleCsvDTO';\nimport type { CommissionScheduleDTO } from '../models/CommissionScheduleDTO';\nimport type { NewCommissionScheduleDTO } from '../models/NewCommissionScheduleDTO';\nimport type { NewProductDTO } from '../models/NewProductDTO';\nimport type { ProductDTO } from '../models/ProductDTO';\nimport type { ProductFilterDTO } from '../models/ProductFilterDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class ProductService {\n\n /**\n * @param requestBody\n * @returns ProductDTO Return list of products\n * @throws ApiError\n */\n public static async retrieveAllProducts(\n requestBody: ProductFilterDTO,\n ): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/all`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param productOid\n * @returns ProductDTO\n * @throws ApiError\n */\n public static async getProductDetails(\n productOid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/product/${productOid}/details`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async productCsvExport(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/csv-export`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async productCsvImport(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/csv-import`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async productCsvValidate(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/csv-validate`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ProductDTO\n * @throws ApiError\n */\n public static async createNewProduct(\n requestBody: NewProductDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ProductDTO\n * @throws ApiError\n */\n public static async updateProduct(\n requestBody: ProductDTO,\n ): Promise {\n const result = await __request({\n method: 'PUT',\n path: `/live/api/product`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ProductDTO\n * @throws ApiError\n */\n public static async deleteProducts(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'DELETE',\n path: `/live/api/product`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param productOid\n * @returns CommissionScheduleDTO\n * @throws ApiError\n */\n public static async getProductCommissionSchedules(\n productOid: string,\n ): Promise> {\n const result = await __request({\n method: 'GET',\n path: `/live/api/product/${productOid}/commission-schedule`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns CommissionScheduleDTO\n * @throws ApiError\n */\n public static async createCommissionSchedule(\n requestBody: NewCommissionScheduleDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/commission-schedule`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns CommissionScheduleDTO\n * @throws ApiError\n */\n public static async editCommissionSchedule(\n requestBody: CommissionScheduleDTO,\n ): Promise {\n const result = await __request({\n method: 'PUT',\n path: `/live/api/product/commission-schedule`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns CommissionScheduleDTO\n * @throws ApiError\n */\n public static async deleteCommissionSchedule(\n requestBody: CommissionScheduleDTO,\n ): Promise {\n const result = await __request({\n method: 'DELETE',\n path: `/live/api/product/commission-schedule`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async validateCommissionSchedulesCsv(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/commission-schedule/csv-validation`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async importCommissionSchedulesCsv(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/commission-schedule/import`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns string Product Commission Schedule CSV\n * @throws ApiError\n */\n public static async exportCommissionScheduleCsv(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/product/commission-schedule/export`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","export const GenderOptions = [\n { label: '', value: '' },\n { label: 'Male', value: 'male' },\n { label: 'Female', value: 'female' }\n]\n","// the main difference between Recommendation and Recommendation V2 is V2 involved investment subfunds handling\n// it also saved flatAllProducts as client_choice_table so that it can directly use for client choice table stamping\n\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport { Base } from '../Base'\nimport { BasicProductV2 as BasicProduct } from '@master/model/kyc-form/product/BasicProductV2'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport InvestmentProduct from './product/InvestmentProduct'\nimport { isEmpty } from 'lodash/fp'\nexport type SelectedClient = 'Client 1' | 'Client 2'\n\nexport default class Recommendation extends Base {\n rcmd: BasicProduct[] = []\n @Ignore()\n riskRatingService: IRiskRatingService\n\n @Ignore()\n @Pointer('ROOT', 'hasClient2')\n hasClient2?: boolean = false\n\n @Ignore()\n @Pointer('ROOT.client2.personalDetails', 'name')\n client2Name = ''\n\n @Ignore()\n @Pointer('ROOT', 'dependants')\n dependants = []\n\n constructor (riskRatingService: IRiskRatingService) {\n super()\n this.riskRatingService = riskRatingService\n }\n\n get validBasicProduct () {\n // to check on is client 2 included\n const dependantIncluded = this.dependants.find(dependant => dependant.name === this.client2Name)\n return this.rcmd.filter(prod => {\n if ((!this.hasClient2 && (prod.clientIndex === 1 || prod.jointClientIndex === 1)) ||\n (!this.hasClient2 && !isEmpty(this.client2Name) && (prod.lifeAssured === this.client2Name || prod.lifeAssuredTwo === this.client2Name) && !dependantIncluded)) {\n return false\n }\n return true\n })\n }\n\n // flat the rcmd array which has basic insurance product (with nested rider product)\n // and investment subfunds, excluding the investment main account\n get allProducts (): any[] {\n return this.validBasicProduct.flatMap(basicProduct => {\n const investment = this.getInvestmentSubFunds(basicProduct.investmentFunds)\n return [\n basicProduct,\n ...investment\n ]\n }).filter(flatten => flatten.type !== 'investment') // investment here is the main invest account, only the invest sub-funds will take in account\n }\n\n // to flat all products out [insurance product, rider product, investment subFunds], excluding investment main account\n // use for PTC check, main investment account not counted in PTC\n get flatAllProducts () {\n return this.flatProductWithInvestMainAccount\n .filter(flatten => flatten.type !== 'investment')\n }\n\n // use in client choice table where it need to display investment main account\n get flatProductWithInvestMainAccount () {\n return this.validBasicProduct.flatMap(basicProduct => {\n const investment = this.getInvestmentSubFunds(basicProduct.investmentFunds)\n const riders = basicProduct.riders\n return [\n basicProduct,\n ...riders,\n ...investment\n ]\n })\n }\n\n getProductsForClient (clientIndex): any[] {\n return this.flatAllProducts.filter(product => product.clientIndex === clientIndex)\n }\n\n get hasCustomProduct () {\n return this.allProducts.some(prod => {\n return prod.isCustom\n })\n }\n\n hasCustomProductForClient (clientIndex) {\n return this.getProductsForClient(clientIndex).some(prod => {\n return prod.isCustom\n })\n }\n\n afterExtractData (data: { rcmd: any[] }) {\n const rcmd = data.rcmd || []\n data.rcmd = rcmd.map((element) => {\n const basic = new BasicProduct(this.riskRatingService)\n Object.assign(basic, basic.extractData(element))\n return basic\n })\n\n return data\n }\n\n // to get back the raw data for saving to backend\n convertToRawData () {\n const rawArray = this.rcmd.map(basicProduct => basicProduct.convertToRawData())\n return {\n rcmd: rawArray,\n // eslint-disable-next-line @typescript-eslint/camelcase\n product_reasons: this.productReasons,\n // eslint-disable-next-line @typescript-eslint/camelcase\n product_limitations: this.productLimitations,\n // eslint-disable-next-line @typescript-eslint/camelcase\n client_choice_list: this.flatProductWithInvestMainAccount.map(funds => funds.convertToRawData())\n }\n }\n\n totalAnnualizedPremiumOnPaymentOptionForClient (clientIndex: 0|1) {\n return this.flatAllProducts.reduce((total, prod: BasicProduct) => {\n const accepted = ['accept', 'ownchoice'].includes(prod.clientChoice)\n if (prod.jointClientIndex && accepted) {\n if (!total[prod.paymentMode]) {\n total[prod.paymentMode] = ((prod.totalAnnualisedPremium ?? 0) / 2)\n return total\n }\n\n total[prod.paymentMode] += ((prod.totalAnnualisedPremium ?? 0) / 2)\n return total\n }\n if (clientIndex === prod.clientIndex && accepted) {\n if (!total[prod.paymentMode]) {\n total[prod.paymentMode] = (prod.totalAnnualisedPremium ?? 0)\n return total\n }\n\n total[prod.paymentMode] += (prod.totalAnnualisedPremium ?? 0)\n return total\n }\n\n return total\n }, {})\n }\n\n totalSinglePremiumOnPaymentOptionForClient (clientIndex: 0|1) {\n return this.flatAllProducts.reduce((total, prod: BasicProduct) => {\n const accepted = ['accept', 'ownchoice'].includes(prod.clientChoice)\n if (prod.jointClientIndex && accepted) {\n if (!total[prod.paymentMode]) {\n total[prod.paymentMode] = ((prod.totalSinglePremium ?? 0) / 2)\n return total\n }\n\n total[prod.paymentMode] += ((prod.totalSinglePremium ?? 0) / 2)\n return total\n }\n if (clientIndex === prod.clientIndex && accepted) {\n if (!total[prod.paymentMode]) {\n total[prod.paymentMode] = (prod.totalSinglePremium ?? 0)\n return total\n }\n\n total[prod.paymentMode] += (prod.totalSinglePremium ?? 0)\n return total\n }\n\n return total\n }, {})\n }\n\n totalAnnualizedPremiumForClient (clientIndex: 0|1) {\n return this.flatAllProducts.reduce((total, prod: BasicProduct) => {\n const accepted = ['accept', 'ownchoice'].includes(prod.clientChoice)\n if (prod.jointClientIndex && accepted) {\n return total + (prod.annualisedPremium / 2)\n }\n if (clientIndex === prod.clientIndex && accepted) {\n return total + prod.annualisedPremium\n }\n return total\n }, 0)\n }\n\n totalSinglePremiumForClient (clientIndex: 0|1) {\n return this.flatAllProducts.reduce((total, prod: BasicProduct) => {\n const accepted = ['accept', 'ownchoice'].includes(prod.clientChoice)\n if (prod.jointClientIndex && accepted) {\n return total + (prod.singlePremium / 2)\n }\n if (clientIndex === prod.clientIndex && accepted) {\n return total + prod.singlePremium\n }\n return total\n }, 0)\n }\n\n get productReasons (): string {\n return this.flatAllProducts.filter(prod => !prod.isCustom).map(prod => {\n if (prod instanceof BasicProduct) {\n if (!this.hasClient2 && prod.clientIndex === 1) {\n return ''\n }\n }\n return prod.getReasons()\n }).join('\\n\\n')\n }\n\n get productLimitations (): string {\n return this.flatAllProducts.filter(prod => !prod.isCustom).map(prod => {\n if (prod instanceof BasicProduct) {\n if (!this.hasClient2 && prod.clientIndex === 1) {\n return ''\n }\n }\n return prod.getLimitations()\n }).join('\\n\\n')\n }\n\n get hasNtuc (): boolean {\n return this.rcmd.some(prod => {\n return prod.isNtuc()\n })\n }\n\n get c1TransactValue () {\n return this.totalAnnualizedPremiumForClient(0) + this.totalSinglePremiumForClient(0)\n }\n\n get c2TransactValue () {\n return this.totalAnnualizedPremiumForClient(1) + this.totalSinglePremiumForClient(1)\n }\n\n get c1hasMedical () {\n return this.flatAllProducts.filter((rmd) => {\n return rmd.clientIndex === 0\n }).some((rmd) => {\n const accepted = rmd.isAcceptedProduct\n const covered = rmd.productNeedsCovered ? rmd.productNeedsCovered.includes('Hospitalisation Expenses') : null\n const categorized = ['Health Insurance', 'Hospital Cash Insurance'].includes(rmd.productCategory)\n return accepted && (covered || categorized)\n }) ? 'yes' : 'no'\n }\n\n get c2hasMedical () {\n return this.flatAllProducts.filter((rmd) => {\n return rmd.clientIndex === 1\n }).some((rmd) => {\n const accepted = rmd.isAcceptedProduct\n const covered = rmd.productNeedsCovered ? rmd.productNeedsCovered.includes('Hospitalisation Expenses') : null\n const categorized = ['Health Insurance', 'Hospital Cash Insurance'].includes(rmd.productCategory)\n return accepted && (covered || categorized)\n }) ? 'yes' : 'no'\n }\n\n get uncategorisedProductLists () {\n return this.rcmd.filter(each => !each.type) || []\n }\n\n getInvestmentSubFunds (investMainFund: InvestmentProduct[]) {\n return investMainFund.filter(funds => {\n if (!this.hasClient2 && funds.clientIndex === 1) {\n return false\n }\n return true\n })\n }\n\n isProductsWithPriorityExistsInRcmd (targetPrioirty, client: SelectedClient) {\n return this.rcmd.some(each => each.priority === targetPrioirty && each.clientIndex === this.getClientIndex(client))\n }\n\n getClientIndex (client: SelectedClient) {\n return client === 'Client 1' ? 0 : 1\n }\n\n // 1. check if rcmd has this new priority and clientIndex, if yes, do thing\n // 2. if dun have then add a new product and set the priotity and client index\n addUnCategoriesProduct (priority, client: SelectedClient) {\n if (!this.isProductsWithPriorityExistsInRcmd(priority, client)) {\n const newProduct = new BasicProduct(this.riskRatingService)\n newProduct.type = ''\n newProduct.priority = priority\n newProduct.clientIndex = this.getClientIndex(client)\n this.rcmd.push(newProduct)\n }\n }\n\n removeUnCategoriesProduct (priority, client: SelectedClient) {\n const toDeleteIndex = this.rcmd.findIndex(each => each.priority === priority && each.clientIndex === this.getClientIndex(client) && !each.type)\n if (toDeleteIndex > -1) {\n this.rcmd.splice(toDeleteIndex, 1)\n }\n }\n}\n","import 'reflect-metadata'\n\nconst summaryFieldKey = Symbol('SummaryField')\n\nexport function isSummaryField (target: any, propertyKey: string): { abbre: string } {\n return Reflect.getMetadata(summaryFieldKey, target, propertyKey)\n}\n\n/**\n * To be used as an annotation in property for ExistingInvestment and ExistingPortfolio\n * so as to use an identifer to know which of the fields are supposed to be considered\n * for calculation in the summary.\n *\n */\nexport function SummaryField (abbre = '') {\n return Reflect.metadata(summaryFieldKey, {\n abbre\n })\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport { snakeCase } from 'lodash/fp'\nimport { Base } from '../../Base'\nimport { IExistingPortfolio } from './IExistingPortfolio'\n\n// this is a highly specific nested object, with intention to reduce number of first level fields in metaobject\n// data preprocessor @ backend will handle the flattening of the nesting\ninterface Summary {\n [key: string]: number;\n}\ninterface PortfolioSummary {\n c1: Summary;\n c2: Summary;\n others: Summary;\n}\nexport default class ExistingPortfolioSummary extends Base {\n existingPortfolioSummary: PortfolioSummary = { c1: {}, c2: {}, others: {} }\n\n @Ignore()\n defaultValue = 0\n\n @Ignore()\n @Pointer('ROOT', 'hasClient2')\n hasClient2?: boolean = false\n\n @Ignore()\n @Pointer('ROOT.existingPortfolio', 'portfolios')\n portfolios: IExistingPortfolio[] = null\n\n @Ignore()\n summaryFields: { attrName: string; abbre: string }[]\n\n constructor (existingPortfolio: IExistingPortfolio) {\n super()\n this.summaryFields = existingPortfolio.getSummaryFields()\n Object.keys(this.existingPortfolioSummary).forEach((role) => {\n this.summaryFields.forEach((field) => {\n this.existingPortfolioSummary[role][field.attrName] = this.defaultValue\n })\n })\n }\n\n c1PortfolioSummary () {\n if (this.portfolios != null) {\n const pfs = this.portfolios.filter(pf => {\n // If portfolio owner is client 2 and client 2 is not included\n // the portfolio should not be included\n if (pf.owner === 'C2' && !this.hasClient2) {\n return false\n }\n\n // For all other portfolios whose life assured belongs to client 1, include\n // it in portfolio\n return pf.belongsTo('C1')\n })\n // Remove all previously stored values. If there is a need to store previous data,\n // then this logic will need to be reimplemented. The reason why I implement this\n // is because if the company does not need the field to be summary, there is\n // no point of keeping it anymore. Applies for c2 and others portfolio summary.\n this.existingPortfolioSummary.c1 = {}\n this.summaryFields.forEach((field) => {\n this.computeSum(pfs, field, 'c1')\n })\n this.calculateApMv('c1')\n }\n\n return this.existingPortfolioSummary.c1\n }\n\n c2PortfolioSummary () {\n if (this.portfolios != null) {\n const pfs = this.portfolios.filter(pf => {\n // Explicitly do the check that if and only if client 2 is included, then\n // we include in this portfolio, this ensure that the calculation saved\n // to the metaObject is accurate\n return this.hasClient2 && pf.belongsTo('C2')\n })\n this.existingPortfolioSummary.c2 = {}\n this.summaryFields.forEach((field) => {\n this.computeSum(pfs, field, 'c2')\n })\n this.calculateApMv('c2')\n }\n\n return this.existingPortfolioSummary.c2\n }\n\n othersPortfolioSummary () {\n if (this.portfolios != null) {\n const pfs = this.portfolios.filter(pf => {\n // If client 2 is not included, owner is client 1, life assured is client 2, put it\n // in others\n if (!this.hasClient2 && pf.owner === 'C1' && pf.belongsTo('C2')) {\n return true\n } else if (this.hasClient2 && pf.owner === 'C1' && pf.belongsTo('C2')) {\n // If client 2 is included and owner is client 1, life assured is client 2, do not\n // put in others\n return false\n } else if (!this.hasClient2 && pf.owner === 'C2' && !pf.belongsTo('C1') && !pf.belongsTo('C2')) {\n // if client 2 is not included, and owner is client 2, life assured is other thant client 1 & client 2,\n // do not put in others\n return false\n } else if (!pf.isValid()) {\n return false\n } else if (!pf.belongsTo('C1') && !pf.belongsTo('C2') && pf.isValid()) {\n // If portfolio's life assured is not client 1, include in others\n return true\n }\n\n return false\n })\n this.existingPortfolioSummary.others = {}\n this.summaryFields.forEach((field) => {\n this.computeSum(pfs, field, 'others')\n })\n this.calculateApMv('others')\n }\n\n return this.existingPortfolioSummary.others\n }\n\n calculateApMv (summaryKey: 'c1' | 'c2' | 'others') {\n this.existingPortfolioSummary[summaryKey].premium = 0\n this.portfolios.forEach(pf => {\n const owner = pf.owner?.toLowerCase()\n if (owner === summaryKey) {\n this.existingPortfolioSummary[summaryKey].premium += pf.premium ? Math.round(pf.premium * 100) / 100 : 0\n }\n })\n }\n\n /**\n * Computes individual summary key's value\n * @param pfs\n * @param key\n * @param summaryKey\n * @returns\n */\n computeSum (pfs, key: { attrName: string; abbre: string }, summaryKey) {\n if (pfs.length === 0) {\n this.existingPortfolioSummary[summaryKey][key.attrName] = 0\n return 0\n }\n const subtotal = pfs.map((cover) => {\n return Number(cover[key.attrName]) || 0\n }).reduce((amt, accum) =>\n amt + accum\n , 0)\n\n this.existingPortfolioSummary[summaryKey][key.attrName] = (Math.round(subtotal * 100) / 100).toFixed(2)\n return subtotal\n }\n\n /**\n * This is not a good way of recalculating and populating the result\n * but for now, it works as when the save is on other sections, we\n * ensure that the summary is being calculated properly as well.\n * For example, when the client 2 is checked as not included in the\n * Client Summary section, at least we know that this will be recalculated\n * @param index\n */\n convertToRawData(index?: number);\n convertToRawData () {\n this.c1PortfolioSummary()\n this.c2PortfolioSummary()\n this.othersPortfolioSummary()\n return super.convertToRawData()\n }\n\n extractData (rawKycForm: any) {\n const data = {}\n Object.keys(this).forEach((key) => {\n const summary = rawKycForm[snakeCase(key)]\n if (summary) {\n Object.keys(summary).forEach((role) => {\n Object.keys(summary[role]).forEach((field) => {\n if (!this.existingPortfolioSummary[role]) {\n this.existingPortfolioSummary[role] = {}\n }\n this.existingPortfolioSummary[role][field] = summary[role][field] ? summary[role][field] : this.defaultValue\n })\n })\n }\n })\n return data\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { VenueOptions } from '../options/VenueOptions'\nimport { TypeBase } from '../TypeBase'\n\nexport default class AdviserDeclaration extends TypeBase {\n clientInformation?: boolean = false\n clientMeetingDate?: number = undefined\n clientMeetingTime = ''\n clientMeetingVenue: typeof VenueOptions[number]['value'] = undefined\n clientMeetingVenueSpecify = ''\n statements?: boolean = false\n\n relationshipAdviser = ''\n relationshipAdviserSpecify = ''\n\n @MaxChar(78)\n jfwConsultantName = ''\n\n @MaxChar(550)\n jfwConsultantComment = ''\n\n recommendation = '' // previously was declaration_recommendation_by_fc\n acknowledgement = '' // previously was declaration_acknowledgement_by_fc\n acknowledgementNotes = '' // previously was declaration_acknowledgement_fc_notes\n haveJointFieldWork?: boolean = undefined\n haveJointSales?: boolean = undefined\n\n @MaxChar(78)\n financialConsultantName = ''\n\n @MaxChar(78)\n financialConsultantMasNo = ''\n\n @MaxChar(78)\n financialConsultantCompanyCode = ''\n\n @MaxChar(550)\n financialConsultantComment = ''\n\n @MaxChar(78)\n jointSalesFinancialConsultantName = ''\n\n @MaxChar(78)\n jointSalesFinancialConsultantMasNo = ''\n\n @MaxChar(78)\n jointSalesFinancialConsultantCompanyCode = ''\n\n @MaxChar(550)\n jointSalesFinancialConsultantComment = ''\n\n provideIncentives = '' // use in financial consultant declaration part c\n\n constructor (type: 'fc_decl' = 'fc_decl') {\n super(type)\n }\n}\n","import { ExpandableArray } from '@core/annotation/ExpandableArray'\nimport ActivityCard from '@core/pages/activity/model/ActivityCard'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { FormBase } from '../FormBase'\n\nexport const DeclarationOptions = [\n { label: 'Yes', value: 'yes' },\n { label: 'No', value: 'no' }\n]\nexport const ChannelOptions = [\n { label: '', value: '' },\n { label: 'Career Fair', value: 'fair' },\n { label: 'Job Portal', value: 'portal' },\n { label: 'Company\\'s Website', value: 'website' },\n { label: 'Magazine', value: 'magazine' },\n { label: 'Newspaper', value: 'newspaper' },\n { label: 'Others', value: 'other' }\n]\nexport class BisoDeclaration {\n bi: typeof DeclarationOptions[number]['value'] = undefined\n biEntityCount: number = undefined\n own: typeof DeclarationOptions[number]['value'] = undefined\n ownEntityCount: number = undefined\n connectedBi: typeof DeclarationOptions[number]['value'] = undefined\n connectedOwn: typeof DeclarationOptions[number]['value'] = undefined\n connectedOwnEntityCount: number = undefined\n\n @Ignore()\n @ExpandableArray({ maxSize: 6, clone: () => new ActivityCard() })\n uploadForms: ActivityCard[] = Array(1).fill(null).map(() => new ActivityCard())\n}\nexport class ReferenceDeclaration {\n byRep: typeof DeclarationOptions[number]['value'] = undefined\n repName = ''\n channel = ''\n channelSpecified = ''\n}\nexport class FinancialActivityDeclaration {\n conducted: typeof DeclarationOptions[number]['value'] = undefined\n prevRepCode = ''\n noRepCode: typeof DeclarationOptions[number]['value'] = undefined\n medisaveOs: typeof DeclarationOptions[number]['value'] = undefined\n basedOverseas: typeof DeclarationOptions[number]['value'] = undefined\n deedPoll: typeof DeclarationOptions[number]['value'] = undefined\n}\n\nexport class ConnectedPerson {\n name: string;\n nric: string;\n relationship: string;\n business: string;\n role: string;\n}\n\nexport class NonFinancialActivityDeclaration {\n currentEmployed: typeof DeclarationOptions[number]['value'] = undefined\n connectedEmployed: typeof DeclarationOptions[number]['value'] = undefined\n connected: typeof DeclarationOptions[number]['value'] = undefined\n moneyLender: typeof DeclarationOptions[number]['value'] = undefined\n junketPromoter: typeof DeclarationOptions[number]['value'] = undefined\n realEstate: typeof DeclarationOptions[number]['value'] = undefined\n unregulatedProduct: typeof DeclarationOptions[number]['value'] = undefined\n\n @ExpandableArray({ maxSize: 6, clone: () => new ConnectedPerson() })\n connectedPersons: ConnectedPerson[] = Array(1).fill(null).map(() => new ConnectedPerson())\n}\n\nexport class DeclarationFields {\n reference: ReferenceDeclaration = new ReferenceDeclaration()\n biso: BisoDeclaration = new BisoDeclaration()\n fad: FinancialActivityDeclaration = new FinancialActivityDeclaration()\n nfad: NonFinancialActivityDeclaration = new NonFinancialActivityDeclaration()\n}\n\nexport class GeneralDeclaration extends FormBase {\n type = 'general-declaration'\n data: DeclarationFields = new DeclarationFields()\n}\n","import { ISectionValidation, IValidation } from '@master/interface/IValidation'\nimport { isEmpty, isNull, omit } from 'lodash/fp'\n\nexport default class Validation {\n protected belongsTo = 'unsorted'\n\n protected isEmpty (value: any) {\n return typeof value === 'undefined' || value === null || value === ''\n }\n\n protected validator () {\n const validationRules: { logic: () => string | null; category: string; sections: string[]; mandatory?: boolean; key: string[]; index: number }[] = []\n const getMessages = () => {\n return validationRules.map(({ logic, category, sections, mandatory = false, key, index }) => {\n const message = logic()\n return {\n message,\n category,\n sections,\n key,\n index,\n mandatory,\n belongsTo: this.belongsTo\n }\n })\n .filter(({ message }) => message != null)\n }\n const ADD = (logic: () => string | null, sections: string[], key: string[] = [], index: number = null, category = 'normal') => {\n validationRules.push({\n logic,\n category,\n key,\n index,\n sections\n })\n }\n /**\n * add a mandatory validation , which is to be completed before submission\n * @param logic\n * @param sections\n * @param category\n */\n const ADDMANDATORY = (logic: () => string | null, sections: string[], key: string[] = [], index: number = null, category = 'normal') => {\n validationRules.push({\n logic,\n category,\n sections,\n key,\n index,\n mandatory: true\n })\n }\n const REQUIRE = (value: any, message: string) => {\n return () => this.isEmpty(value) ? message : null\n }\n const REQUIRE_TRUE = (value: any, message: string) => {\n return () => typeof value === 'undefined' || !value ? message : null\n }\n const REQUIRE_NUMBER = (value: any, message: string) => {\n return () => isNull(value) || value === '' || isNaN(Number(value)) ? message : null\n }\n const WHEN = (condition: boolean, logic: () => string | null) => {\n return () => condition ? logic() : null\n }\n const REQUIRE_ARRAY = (value: any, message: string) => {\n return () => this.isEmpty(value) || !Array.isArray(value) || value.length === 0 ? message : null\n }\n\n return {\n getMessages,\n ADD,\n ADDMANDATORY,\n REQUIRE,\n REQUIRE_TRUE,\n REQUIRE_NUMBER,\n REQUIRE_ARRAY,\n WHEN\n }\n }\n}\n\nexport function getValidationSectionForClient (validation: IValidation, section: string, clientIndex: 0 | 1): ISectionValidation {\n const validationSection = validation[section]\n if (isEmpty(validationSection)) {\n return {}\n }\n\n // remove unrelated client validation and return\n // if is client 1 remove client 2 validation and vice versa\n const omitKey = clientIndex === 0 ? 'Client 2' : 'Client 1'\n return omit(omitKey, validationSection)\n}\n","import { Meta } from '@master/model/common/Meta'\nimport { RawKey } from '@master/annotation/RawKey'\n\nexport default class AccountMeta extends Meta {\n @RawKey('_oid')\n oid = ''\n\n systemrole = ''\n username = ''\n names: string[] = []\n fullname? = ''\n email? = ''\n nric = ''\n companyCode? = ''\n masRepno? = ''\n mobile? = ''\n adviserBranch? = ''\n idNumber? = ''\n}\n","import { Meta } from './Meta'\n\nexport class MetaList {\n protected list: T[]\n constructor (headers: string[], data: (string | number)[][], MetaClass: new () => T) {\n this.list = data.map(array => {\n const product = new MetaClass()\n product.assignData(headers, array)\n return product\n })\n }\n\n getFullList () {\n return this.list\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"switch\"}},[_vm._l((_vm.options),function(option,index){return [(index != 0)?_c('span',{key:index}):_vm._e(),_c('a',{key:option,staticClass:\"option\",class:{ selected: _vm.selected == option },on:{\"click\":function($event){return _vm.optionSelected(option)}}},[_vm._v(\" \"+_vm._s(option)+\" \")])]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Prop, Emit } from 'vue-property-decorator'\n\n@Component\nexport default class AppSwitch extends Vue {\n @Prop() readonly options!: string[]\n @Prop() readonly selected!: string\n\n @Emit()\n optionSelected (option: string) {\n return option\n }\n}\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppSwitch.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppSwitch.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppSwitch.vue?vue&type=template&id=0dd420aa&scoped=true&\"\nimport script from \"./AppSwitch.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppSwitch.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppSwitch.vue?vue&type=style&index=0&id=0dd420aa&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0dd420aa\",\n null\n \n)\n\nexport default component.exports","import { ClientBase } from '../../ClientBase'\nimport { isUndefined, set, get } from 'lodash/fp'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { Default } from '@master/annotation/Default'\n\n/**\n *\n */\nexport default class Budget extends ClientBase {\n @Default(null)\n budgetCashPerAnnum?: number | string = undefined\n\n @Default(null)\n budgetCashPerMonth?: number | string = undefined\n\n @Default(null)\n budgetCash?: number | string = undefined\n\n @Default(null)\n budgetCpfOrdinary?: number | string = undefined\n\n @Default(null)\n budgetCpfSpecial?: number | string = undefined\n\n @Default(null)\n budgetSrsAccount?: number | string = undefined\n\n @Default(null)\n budgetUtilizeCpfMedisave?: number | string = undefined\n\n budgetSourceOfFunds: string[] = []\n budgetSourceOfWealth: string[] = []\n smallBudgetSize = ''\n\n @MaxChar(324)\n budgetSubstantialReasons = '' // was ma_budget_substantial_reasons\n\n @MaxChar(48)\n budgetOthers1 = '' // was ma_budget_others_1\n\n @MaxChar(48)\n budgetOthers2 = '' // was ma_budget_others_2\n\n @MaxChar(48)\n budgetOthers3 = '' // was ma_budget_others_3\n\n afterExtractData (data: {}) {\n let defaultMap = {}\n if (isUndefined(get('budgetSourceOfFunds', data))) {\n defaultMap = set('budgetSourceOfFunds', [], defaultMap)\n }\n if (isUndefined(get('budgetSourceOfWealth', data))) {\n defaultMap = set('budgetSourceOfWealth', [], defaultMap)\n }\n Object.assign(data, defaultMap)\n return data\n }\n\n annualBudget () {\n return (Number(this.budgetCashPerAnnum) || 0) + (Number(this.budgetCashPerMonth) * 12 || 0)\n }\n\n singleBudget () {\n return (Number(this.budgetCash) || 0) +\n (Number(this.budgetCpfOrdinary) || 0) +\n (Number(this.budgetCpfSpecial) || 0) +\n (Number(this.budgetSrsAccount) || 0)\n }\n}\n","import { TypeBase } from '@master/model/TypeBase'\n\nexport default class AIOI extends TypeBase {\n constructor (clientIndex: string) {\n super(`${clientIndex}_aioi`)\n }\n\n isAi = undefined\n isIndividualTypeA = undefined\n isCorporateTypeA = undefined\n isIndividualTypeB = undefined\n isCorporateTypeB = undefined\n isIndividualTypeC = undefined\n isTrustee = undefined\n isOi = undefined\n\n reset () {\n this.isIndividualTypeA = undefined\n this.isCorporateTypeA = undefined\n this.isIndividualTypeB = undefined\n this.isCorporateTypeB = undefined\n this.isIndividualTypeC = undefined\n this.isTrustee = undefined\n }\n}\n","import NeedsBase from '../NeedsBase'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class HospitalizationNeeds extends NeedsBase {\n name = 'Hospitalisation Expenses'\n needs = 'Hospitalisation Expenses'\n coverage?: number = undefined\n roomCharges?: number = undefined\n surgicalExpenses?: number = undefined\n desiredAmount?: number = undefined\n hospitalType = ''\n wardType = ''\n other = ''\n rider = ''\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 'h2') {\n super(`${type}_${id}`)\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { sum } from '../math'\nimport NeedsBase from '../NeedsBase'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used,\n * text can also be shared\n */\nexport default class OtherNeeds extends NeedsBase {\n planningFor = ''\n providedForWho = ''\n amountNeeded?: number = undefined\n existingBenefits?: number = undefined\n\n text = '' // previously was identifying_priorities_m*_text\n\n @MaxChar(100)\n additionalNotes = '' // using m1 additional notes, previously was others_additional_notes\n\n constructor (type: 'client_0'| 'client_1' = 'client_0', otherIndex: 'm1' | 'm2' = 'm1', name: string) {\n super(`${type}_${otherIndex}`)\n this.name = name\n }\n\n get surplusShortfall () {\n const total = sum(this.existingBenefits, -this.amountNeeded)\n return total\n }\n}\n","import { sum } from '../math'\nimport NeedsBase from '../NeedsBase'\n\nexport default class LossOfIncomeNeeds extends NeedsBase {\n name = '' // TODO: add in name\n needs = 'Loss of income due to illness or disability'\n amount?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 'h3') {\n super(`${type}_${id}`)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get surplusShortfall () {\n return sum(-this.amount, this.sumAvailable, -this.sumRequired)\n }\n}\n","import { sum } from '../math'\nimport NeedsBase from '../NeedsBase'\n\nexport default class OutpatientExpenses extends NeedsBase {\n name = '' // TODO: add in name\n needs = 'Hospitalisation Expenses'\n amount?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 'h4') {\n super(`${type}_${id}`)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get surplusShortfall () {\n return sum(-this.amount, this.sumAvailable, -this.sumRequired)\n }\n}\n","import { pv, sum, valueIsUndefined } from '../math'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport NeedsBase from '../NeedsBase'\nimport { isUndefined } from 'lodash/fp'\nimport { Ignore } from '@master/annotation/Ignore'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport class CriticalIllnessProtectionClient extends NeedsBase {\n @Ignore()\n projectSettings: IProjectSettings\n\n name = 'Critical Illness Protection'\n needs = 'Critical Illness'\n isProtection = true\n income?: number = undefined\n yearsRequired?: number = undefined\n infAdjReturn?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n additionalNotes = ''\n\n /**\n * this will auto set the corresponding rate to default if undefined\n * @param rate\n */\n setupDefaultRate (rate: number) {\n super.setupDefaultRate(rate)\n if (isUndefined(this.infAdjReturn)) this.infAdjReturn = this.defaultRate\n }\n\n get annualIncome () {\n if (valueIsUndefined(this.income)) return null\n return (this.projectSettings.needs.period * this.income) || 0\n }\n\n get fundsRequired () {\n if (valueIsUndefined(this.income) && valueIsUndefined(this.yearsRequired)) return null\n const total = pv(this.annualIncome, this.yearsRequired, this.infAdjReturn)\n return Math.round(total)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get totalRequired () {\n return sum(this.fundsRequired, this.sumRequired)\n }\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get surplusShortfall () {\n if (valueIsUndefined(this.sumAvailable) && valueIsUndefined(this.totalRequired)) return null\n return sum(this.sumAvailable, -this.totalRequired)\n }\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', projectSettings: IProjectSettings, id = 'p3') {\n super(`${type}_${id}`)\n this.projectSettings = projectSettings\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.infAdjReturn\n }\n\n resetAllFields (): void {\n super.resetAllFields()\n this.isProtection = true\n }\n}\n","import { pv, sum, valueIsUndefined } from './../math'\nimport NeedsBase from '../NeedsBase'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { isUndefined } from 'lodash/fp'\nimport { Ignore } from '@master/annotation/Ignore'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class DeathProtectionClient extends NeedsBase {\n @Ignore()\n projectSettings: IProjectSettings\n\n name = 'Death Protection'\n needs = 'Death'\n isProtection = true\n income?: number = undefined\n yearsRequired?: number = undefined\n infAdjReturn?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n additionalNotes = ''\n\n /**\n * this will auto set the corresponding rate to default if undefined\n * @param rate\n */\n setupDefaultRate (rate: number) {\n super.setupDefaultRate(rate)\n if (isUndefined(this.infAdjReturn)) this.infAdjReturn = this.defaultRate\n }\n\n get annualIncome () {\n if (valueIsUndefined(this.income)) return null\n return (this.projectSettings.needs.period * this.income) || 0\n }\n\n get fundsRequired () {\n if (valueIsUndefined(this.income) && valueIsUndefined(this.yearsRequired)) return null\n const total = pv(this.annualIncome, this.yearsRequired, this.infAdjReturn)\n return Math.round(total)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get totalRequired () {\n return sum(this.fundsRequired, this.sumRequired)\n }\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get surplusShortfall () {\n if (valueIsUndefined(this.sumAvailable) && valueIsUndefined(this.totalRequired)) return null\n return sum(this.sumAvailable, -this.totalRequired)\n }\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', projectSettings: IProjectSettings, id = 'p1') {\n super(`${type}_${id}`)\n this.projectSettings = projectSettings\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.infAdjReturn\n }\n\n resetAllFields (): void {\n super.resetAllFields()\n this.isProtection = true\n }\n}\n","import { pv, sum, valueIsUndefined } from './../math'\nimport NeedsBase from '../NeedsBase'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { isUndefined } from 'lodash/fp'\nimport { Ignore } from '@master/annotation/Ignore'\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class DisabilityProtectionClient extends NeedsBase {\n @Ignore()\n projectSettings: IProjectSettings\n\n name = 'Total Permanent Disability Protection'\n needs = 'Disability (TPD)'\n isProtection = true\n income?: number = undefined\n yearsRequired?: number = undefined\n infAdjReturn?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n additionalNotes = ''\n\n setupDefaultRate (rate: number) {\n super.setupDefaultRate(rate)\n if (isUndefined(this.infAdjReturn)) this.infAdjReturn = this.defaultRate\n }\n\n get annualIncome () {\n if (valueIsUndefined(this.income)) return null\n return (this.projectSettings.needs.period * this.income) || 0\n }\n\n get fundsRequired () {\n if (valueIsUndefined(this.income) && valueIsUndefined(this.yearsRequired)) return null\n const total = pv(this.annualIncome, this.yearsRequired, this.infAdjReturn)\n return Math.round(total)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get totalRequired () {\n return sum(this.fundsRequired, this.sumRequired)\n }\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get surplusShortfall () {\n if (valueIsUndefined(this.sumAvailable) && valueIsUndefined(this.totalRequired)) return null\n return sum(this.sumAvailable, -this.totalRequired)\n }\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', projectSettings: IProjectSettings, id = 'p2') {\n super(`${type}_${id}`)\n this.projectSettings = projectSettings\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.infAdjReturn\n }\n\n resetAllFields (): void {\n super.resetAllFields()\n this.isProtection = true\n }\n}\n","import { pv, sum, valueIsUndefined } from './../math'\nimport NeedsBase from '../NeedsBase'\nimport { isUndefined } from 'lodash/fp'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class DisabilityIncomeProtectionClient extends NeedsBase {\n name = 'Disability Income Protection'\n needs = 'Loss of Income due to illness or disability'\n isProtection = true\n income?: number = undefined\n yearsRequired?: number = undefined\n infAdjReturn?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n additionalNotes = ''\n\n setupDefaultRate (rate: number) {\n super.setupDefaultRate(rate)\n if (isUndefined(this.infAdjReturn)) this.infAdjReturn = this.defaultRate\n }\n\n get fundsRequired () {\n if (valueIsUndefined(this.income) && valueIsUndefined(this.yearsRequired)) return null\n const total = pv(this.income, this.yearsRequired, this.infAdjReturn)\n return Math.round(total)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get totalRequired () {\n return sum(this.fundsRequired, this.sumRequired)\n }\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get surplusShortfall () {\n return sum(this.sumAvailable, -this.totalRequired)\n }\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 'p4') {\n super(`${type}_${id}`)\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.infAdjReturn\n }\n\n resetAllFields (): void {\n super.resetAllFields()\n this.isProtection = true\n }\n}\n","import NeedsBase from '../NeedsBase'\n\nexport default class EducationNeeds extends NeedsBase {\n name = 'Education Planning'\n needs = 'Children\\'s Education'\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 's4') {\n super(`${type}_${id}`)\n }\n}\n","import { sum, round, valueIsUndefined } from '@master/model/kyc-form/need-analysis/math'\nimport NeedsBase from '../NeedsBase'\nimport { isUndefined } from 'lodash/fp'\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class InvestmentNeeds extends NeedsBase {\n name = 'Investment'\n needs = 'Savings and Investment'\n planning = ''\n interestRate?: number = undefined\n period?: number = undefined\n amountFv?: number = undefined\n fundValue?: number = undefined\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 's3') {\n super(`${type}_${id}`)\n }\n\n setupDefaultRate (rate: number) {\n super.setupDefaultRate(rate)\n if (isUndefined(this.interestRate)) this.interestRate = this.defaultRate\n }\n\n get totalFundsFv () {\n if (valueIsUndefined(this.fundValue) && valueIsUndefined(this.period)) return null\n const rate = this.interestRate || 0\n\n const accumulatedInterestRate = (1 + rate / 100) ** this.period\n const total = this.fundValue * accumulatedInterestRate\n\n return round(total, 0)\n }\n\n get surplusShortfall () {\n if (valueIsUndefined(this.totalFundsFv) && valueIsUndefined(this.amountFv)) return null\n return sum(this.totalFundsFv, -this.amountFv)\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.interestRate\n }\n}\n","import { round, fv, pv, sum, valueIsUndefined } from '../math'\nimport NeedsBase from '../NeedsBase'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { isUndefined } from 'lodash/fp'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class RetirementNeeds extends NeedsBase {\n name = 'Retirement'\n needs = 'Retirement'\n years?: number = undefined\n incomePv?: number = undefined\n inflation?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n duration?: number = undefined\n infAdjReturn?: number = undefined\n\n additionalNotes = ''\n\n @Ignore()\n defaultInfAdjReturn?: number\n\n /**\n * this will auto set the corresponding rate to default if undefined\n * @param inDefaultRate\n * @param inDefaultInfAdjReturn\n */\n setupDefaultRates (inDefaultRate: number, inDefaultInfAdjReturn: number) {\n this.setupDefaultRate(inDefaultRate)\n this.defaultInfAdjReturn = inDefaultInfAdjReturn\n if (isUndefined(this.inflation)) this.inflation = this.defaultRate\n if (isUndefined(this.infAdjReturn)) this.infAdjReturn = this.defaultInfAdjReturn\n }\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 's1') {\n super(`${type}_${id}`)\n }\n\n get firstYearIncome () {\n if (valueIsUndefined(this.incomeFv) && valueIsUndefined(this.available1)) return null\n const total = sum(this.incomeFv, -this.available1)\n return round(total, 0)\n }\n\n get incomeFv () {\n if (valueIsUndefined(this.incomePv)) return null\n const total = fv(this.incomePv, this.years, (this.inflation || 0) / 100)\n\n if (valueIsUndefined(total)) return null\n\n return round(total, 0)\n }\n\n get totalAmount () {\n if (valueIsUndefined(this.firstYearIncome) && valueIsUndefined(this.duration) && valueIsUndefined(this.infAdjReturn)) return null\n const total = pv(this.firstYearIncome, this.duration, this.infAdjReturn)\n return round(total, 0)\n }\n\n get surplusShortfall () {\n if (valueIsUndefined(this.available2) && valueIsUndefined(this.available3) && valueIsUndefined(this.totalAmount)) return null\n const total = sum(this.available2, this.available3, -this.totalAmount)\n return total\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.inflation && this.defaultInfAdjReturn === this.infAdjReturn\n }\n}\n","import { sum, round, savingMonthly, savingLumpSum, valueIsUndefined } from '@master/model/kyc-form/need-analysis/math'\nimport NeedsBase from '../NeedsBase'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { isUndefined } from 'lodash/fp'\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class SavingsNeeds extends NeedsBase {\n name = 'Savings'\n needs = 'Savings and Investment'\n planning = ''\n period?: number = undefined\n interestRate?: number = undefined\n amountFv?: number = undefined\n fundValue?: number = undefined\n rateOfReturn?: number = undefined\n additionalNotes = ''\n\n @Ignore()\n defaultRate?: number\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 's2') {\n super(`${type}_${id}`)\n }\n\n setupDefaultRate (rate: number) {\n super.setupDefaultRate(rate)\n if (isUndefined(this.interestRate)) this.interestRate = this.defaultRate\n }\n\n get totalFundsFv () {\n if (valueIsUndefined(this.fundValue) && valueIsUndefined(this.period)) return null\n const rate = this.interestRate || 0\n const compiledInterestRate = (1 + rate / 100) ** this.period\n const total = this.fundValue * compiledInterestRate\n\n return round(total, 0)\n }\n\n get surplusShortfall () {\n if (valueIsUndefined(this.totalFundsFv) && valueIsUndefined(this.amountFv)) return null\n const total = sum(this.totalFundsFv, -this.amountFv)\n return total\n }\n\n get rate () {\n return (this.rateOfReturn / 100) || 0\n }\n\n get contribution () {\n if (valueIsUndefined(this.surplusShortfall) && valueIsUndefined(this.period)) return null\n const total = savingMonthly(Math.abs(this.surplusShortfall), this.period, this.rate)\n return round(total, 0)\n }\n\n get lumpSum () {\n if (valueIsUndefined(this.surplusShortfall) && valueIsUndefined(this.period)) return null\n const total = savingLumpSum(Math.abs(this.surplusShortfall), this.period, this.rate)\n return round(total, 0)\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.interestRate\n }\n}\n","import { sum, round, savingMonthly, savingLumpSum } from '@master/model/kyc-form/need-analysis/math'\nimport NeedsBase from '../NeedsBase'\nimport { isUndefined } from 'lodash/fp'\n\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class SpecificGoalsNeeds extends NeedsBase {\n name = '' // TODO: add in name\n needs = undefined\n planning = ''\n lifestyleGoals = ''\n period?: number = undefined\n interestRate?: number = undefined\n amountFv?: number = undefined\n fundValue?: number = undefined\n rateOfReturn?: number = undefined\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 's5') {\n super(`${type}_${id}`)\n }\n\n setupDefaultRate (rate: number) {\n super.setupDefaultRate(rate)\n if (isUndefined(this.interestRate)) this.interestRate = this.defaultRate\n }\n\n get totalFundsFv () {\n const compiledInterestRate = (1 + this.interestRate / 100) ** this.period\n const total = this.fundValue * compiledInterestRate\n return round(total, 0)\n }\n\n get surplusShortfall () {\n const total = sum(this.totalFundsFv, -this.amountFv)\n return total\n }\n\n get rate () {\n return this.rateOfReturn / 100\n }\n\n get contribution () {\n const total = savingMonthly(Math.abs(this.surplusShortfall), this.period, this.rate)\n return round(total, 0)\n }\n\n get lumpSum () {\n const total = savingLumpSum(Math.abs(this.surplusShortfall), this.period, this.rate)\n return round(total, 0)\n }\n\n get isDefaultRate () {\n return this.defaultRate === this.interestRate\n }\n}\n","import { ClientBase } from '@master/model/ClientBase'\n\nexport default class InvestmentOption extends ClientBase {\n investmentOption = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super(type)\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { TypeBase } from '../TypeBase'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\nexport default class Switching extends TypeBase {\n surrenderedInvestment = ''\n topUp = ''\n advisedBefore = ''\n\n @MaxChar(InputMaxChar.SMALL)\n name = ''\n\n @MaxChar(InputMaxChar.SMALL)\n planType = ''\n\n @MaxChar(InputMaxChar.SMALL)\n policyNum = ''\n\n inceptionDate = ''\n surrenderDate = ''\n\n @MaxChar(InputMaxChar.SMALL)\n benefitsProvided = ''\n\n @MaxChar(InputMaxChar.LARGE)\n reasons = ''\n\n @MaxChar(InputMaxChar.SMALL)\n detail = ''\n\n newProduct = ''\n\n premiumAmt = ''\n\n coverage = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') { // previously was ma\n super(`${type}_replacement`)\n }\n\n reset () {\n this.detail = ''\n this.name = ''\n this.planType = ''\n this.policyNum = ''\n this.inceptionDate = null\n this.surrenderDate = null\n this.benefitsProvided = ''\n this.advisedBefore = ''\n this.newProduct = ''\n this.premiumAmt = ''\n this.coverage = ''\n }\n}\n","import { TypeBase } from '../TypeBase'\n\n// ECDD is an object, therefore the conversion is different than other object\n/**\n * raw kyc structure\n * ma_ecdd: {\n * additional_note: \"dddddd\"\n * high_risk_country: \"yes\"\n * residing_address: \"\"\n * source_of_funds: \"no\"\n * source_of_funds_2: null\n * source_of_funds_2_info: \"\"\n * stay_in_sg: \"yes\"\n * }\n *\n * Note: key is ma_ecdd or ja_ecdd\n*/\nexport default class ECDD extends TypeBase {\n name = ''\n identityType = ''\n nric = ''\n highRiskCountry = ''\n stayInSg = ''\n residingAddress = ''\n // Giving it a string[] as Gen needs it to be a string[]\n sourceOfFunds: string | string[] = ''\n sourceOfFunds2 = ''\n sourceOfFunds2Info = ''\n additionalNote = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super(`${type}_ecdd`)\n }\n\n extractData (rawData: any) {\n return super.extractData(rawData[this.type])\n }\n\n convertToRawData () {\n const results = super.convertToRawData()\n return {\n [this.type]: results\n }\n }\n\n isNRICOrFIN () {\n return this.identityType === 'nric' || this.identityType === 'fin'\n }\n}\n","import { snakeCase, isEmpty, camelCase } from 'lodash/fp'\nimport { ClientBase } from '../ClientBase'\n\nexport default class MyInfo extends ClientBase {\n infoLinked = ''\n lockedFields: string[] = []\n selectedProperty = -1\n timeSecondsFetched?: number = undefined\n timeSecondsLinked?: number = undefined\n transactionToken?: string = ''\n\n public snakeCaseKey (key: string) {\n return `myinfo_${snakeCase(key)}_${this.type}`\n }\n\n afterExtractData (data: { lockedFields: string }) {\n if (data.lockedFields && !isEmpty(data.lockedFields)) {\n const parsedLockedFields = JSON.parse(data.lockedFields)\n // convert rawkey to camelkey (key that same as kycform modal key),\n // so that it can direct use in kycform UI for myinfo checking\n data.lockedFields = parsedLockedFields.map((ele) => this.convertToFriendlyKey(ele))\n }\n return data\n }\n\n // do not convert to raw data, myInfo data should not override from frontend\n convertToRawData () {\n return {}\n }\n\n convertToFriendlyKey (rawKey: string) {\n const prefix = ['ma_', 'ja_']\n const prefixToReplace = prefix.find((ele) => {\n return rawKey.indexOf(ele) === 0\n }).length\n return camelCase(rawKey.substring(prefixToReplace))\n }\n\n keyIsLockedField (targetKey: string) {\n if (!this.lockedFields) {\n return\n }\n return this.lockedFields.includes(targetKey)\n }\n}\n","import { Base } from '@master/model/Base'\nimport { Ignore } from '@master/annotation/Ignore'\n\nexport default class AMLDoc extends Base {\n @Ignore()\n customType = ''\n\n selected: 'indi' | 'partner' | 'corporate' = 'indi'\n\n indi = {\n ic: '',\n name: '',\n dob: '',\n address: '',\n nationality: '',\n employment: '',\n contact: '',\n boId: ''\n }\n\n partner = {\n ic: '',\n name: '',\n dob: '',\n address: '',\n nationality: '',\n register: '',\n contact: '',\n finance: '',\n deed: '',\n boardResolution: '',\n boId: '',\n boExemption: ''\n }\n\n corporate = {\n ic: '',\n name: '',\n dob: '',\n address: '',\n nationality: '',\n register: '',\n contact: '',\n finance: '',\n memorandum: '',\n boardResolution: '',\n boId: '',\n boExemption: '',\n acra: '',\n signatory: ''\n }\n\n @Ignore()\n docTypes = ['indi', 'partner', 'corporate']\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super()\n this.customType = type + '_aml_doc'\n }\n\n // custom method to extract since aml doc is a single object packed with the properties\n extractData (rawKycForm) {\n const nested = super.extractData(rawKycForm[this.customType])\n this.docTypes.forEach((typ) => {\n Object.keys(this[typ]).forEach((doc) => {\n this[typ][doc] = nested[typ] ? nested[typ][doc] || false : false\n })\n })\n return {}\n }\n\n convertToRawData () {\n const results = super.convertToRawData()\n return {\n [this.customType]: results\n }\n }\n\n @Ignore()\n get fieldsNaming () {\n return {\n indi: {\n // _name: '1. Individuals / Sole Proprietors',\n ic: 'IC/Passport:-',\n name: 'Full Name',\n dob: 'Date of Birth',\n address: 'Residential Address',\n nationality: 'Nationality',\n employment: 'Proof of Employment / Business',\n contact: 'Contact Details',\n boId: 'Ultimate Beneficial Owner identification (as per documents in Section B)'\n },\n partner: {\n // _name: '2. Partnerships',\n ic: 'IC/Passport of Partners:-',\n name: 'Full Name',\n dob: 'Date of Birth',\n address: 'Residential Address',\n nationality: 'Nationality',\n register: 'Certificate of Registration',\n contact: 'Contact Details',\n finance: 'Latest financial statements (audited)',\n deed: 'Partnership Deed',\n boardResolution: 'Certified Copy of Board Resolution',\n boId: 'Ultimate Beneficial Owner identification (as per documents in Section B)',\n boExemption: 'Please check Section A2 for exemptions'\n },\n corporate: {\n // _name: '3a. Corporations (Keyman)',\n ic: 'IC/Passport of Directors:-',\n name: 'Full Name',\n dob: 'Date of Birth',\n address: 'Residential Address',\n nationality: 'Nationality',\n register: 'Certificate of Registration',\n contact: 'Contact Details',\n finance: 'Latest financial statements (audited)',\n memorandum: 'Memorandum & Articles',\n boardResolution: 'Certified Copy of Board Resolution',\n boId: 'Ultimate Beneficial Owner identification (as per documents in Section B)',\n boExemption: 'Please check Section A2 for exemptions',\n // _name2: '3b. Corporations (EB Cases)',\n acra: 'ACRA Report',\n signatory: 'ID of Authorised Signatory (if individual’s name is not in ACRA)'\n }\n }\n }\n}\n","import { ClientBase } from '../ClientBase'\nimport BeneficialOwnerParticulars, { IBOP } from './external/BeneficialOwnerParticulars'\n\nexport default class BeneficialOwner extends ClientBase {\n declarationBeneficialOwner = ''\n beneficialOwnerParticulars?: IBOP = undefined\n\n /**\n * @param type\n * @param bop - if not defined, it will take core's BOP\n */\n constructor (type: 'client_0' | 'client_1', bop: IBOP = new BeneficialOwnerParticulars()) {\n super(type)\n this.beneficialOwnerParticulars = bop\n }\n\n beforeExtractData (data: any) {\n // get from raw data\n const bopRaw = data[this.type + '_beneficial_owner_particulars']\n Object.assign(this.beneficialOwnerParticulars, this.beneficialOwnerParticulars.extractData(bopRaw || {}))\n return data\n }\n\n convertToRawData () {\n const result: any = super.convertToRawData()\n // As beneficial owner particular is a Base, we need to add them in manually\n if (this.beneficialOwnerParticulars) {\n result[this.type + '_beneficial_owner_particulars'] = this.beneficialOwnerParticulars.convertToRawData()\n }\n return result\n }\n}\n","import { TypeBase } from '@master/model/TypeBase'\nimport { get, isUndefined } from 'lodash/fp'\n\nexport default class PropertyFinancing extends TypeBase {\n constructor (clientIndex: string) {\n super(`${clientIndex}_prop_financing`)\n }\n\n // takeFromMyInfo: 'yes' | 'no' = 'yes'\n // addressAsSection1 = ''\n address = ''\n nameOfOwners?: string[] = []\n nameOfOtherOwners?: string = ''\n gazetted = ''\n typeOfProperty = ''\n noOfRoom?: number = 0\n landArea?: number = 0\n builtInArea?: number = 0\n ownershipType = ''\n remainingOfOwnershipYears?: number = 0\n completed = ''\n estimateAgeYears?: number = 0\n topDate?: number = 0\n renovated = ''\n yearOfRenovation?: number = 0\n amountOfRenovation?: number = 0\n purchasePrice?: number = 0\n dateOfPurchase?: number = 0\n transactionType?: string[] = []\n propertyFor?: string[] = []\n existingBank = ''\n monthlyInstalmentTotal?: number = 0 // this is strictly only for myinfo to populate\n monthlyInstalmentCash?: number = 0\n monthlyInstalmentCPF?: number = 0\n originalLoanPeriod?: number = 0\n housingLoanOutstanding?: number = 0\n remainingHousingLoanTermYears?: number = 0\n termLoanOutstanding?: number = 0\n remainingLoanTermYears?: number = 0\n overdraft?: number = 0\n additionalLoan = ''\n additionalLoanAmt?: number = 0\n\n extractData (propf: any) {\n let data = super.extractData(propf)\n if (isUndefined(get('nameOfOwners', data))) {\n data = Object.assign(data, { nameOfOwners: [] })\n }\n if (isUndefined(get('transactionType', data))) {\n data = Object.assign(data, { transactionType: [] })\n }\n if (isUndefined(get('propertyFor', data))) {\n data = Object.assign(data, { propertyFor: [] })\n }\n return data\n }\n}\n","import { sum } from './../math'\nimport NeedsBase from '../NeedsBase'\n/**\n * Depending on the structure of the PDF, additionalNotes may not be in used\n */\nexport default class LongTermProtectionClient extends NeedsBase {\n name = 'Long Term Care Protection'\n needs = 'Old Age Disabilities'\n isProtection = true\n amountNeeded?: number = undefined\n period?: number = undefined\n\n // required\n required1?: number = undefined\n required2?: number = undefined\n required3?: number = undefined\n required4?: number = undefined\n required5?: number = undefined\n\n // available\n available1?: number = undefined\n available2?: number = undefined\n available3?: number = undefined\n available4?: number = undefined\n available5?: number = undefined\n\n additionalNotes = ''\n\n get sumAvailable () {\n return sum(this.available1, this.available2, this.available3, this.available4, this.available5)\n }\n\n get sumRequired () {\n return sum(this.required1, this.required2, this.required3, this.required4, this.required5)\n }\n\n get annualAmountNeeded () {\n return this.amountNeeded * 12\n }\n\n get surplusShortfall () {\n return sum(this.sumAvailable, -(this.annualAmountNeeded * this.period))\n }\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 'p5') {\n super(`${type}_${id}`)\n }\n\n resetAllFields (): void {\n super.resetAllFields()\n this.isProtection = true\n }\n}\n","import { Default } from '@master/annotation/Default'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport { TypeBase } from '@master/model/TypeBase'\nimport { sum } from 'lodash'\n\nexport interface IWynnesAI {\n desc: string;\n key: keyof T;\n}\n\nexport default class WynnesAI extends TypeBase {\n criteria1 = ''\n criteria2 = ''\n criteria3 = ''\n criteria4 = ''\n\n @Ignore()\n @Pointer('netWorth', 'residentialAssets')\n residentialProp = ''\n\n @Ignore()\n @Pointer('netWorth', 'totalCashAssets')\n cash = ''\n\n @Ignore()\n @Pointer('netWorth', 'cpfOrdinary')\n cpfOA = ''\n\n @Ignore()\n @Pointer('netWorth', 'cpfSpecial')\n cpfSA = ''\n\n get cpf () {\n return sum([Number(this.cpfOA) || 0, Number(this.cpfSA) || 0])\n }\n\n @Ignore()\n @Pointer('netWorth', 'totalAssets')\n totalAssets = 0\n\n get otherAssets () {\n return this.totalAssets - sum([Number(this.residentialProp) || 0, Number(this.cash) || 0, Number(this.cpf) || 0])\n }\n\n @Ignore()\n @Pointer('netWorth', 'personalLoans')\n loansOverdraft = ''\n\n @Ignore()\n @Pointer('netWorth', 'tax')\n tax = ''\n\n @Ignore()\n @Pointer('netWorth', 'homeMortgage')\n mortgage = ''\n\n @Ignore()\n @Pointer('netWorth', 'carLoans')\n hp = ''\n\n get mortgageHp () {\n return sum([Number(this.mortgage) || 0, Number(this.hp) || 0])\n }\n\n @Ignore()\n @Pointer('netWorth', 'totalLiabilities')\n totalLiabilities = 0\n\n get otherLiabilities () {\n return Number(this.totalLiabilities) - sum([Number(this.loansOverdraft) || 0, Number(this.tax) || 0, Number(this.mortgageHp) || 0])\n }\n\n // Supporting Documents\n @Default(false)\n residentialPropDoc = false\n\n @Default(false)\n investmentPropDoc = false\n\n @Default(false)\n cashDoc = false\n\n @Default(false)\n cpfDoc = false\n\n @Default(false)\n securitiesDoc = false\n\n @Default(false)\n otherAssetsDoc = false\n\n @Default(false)\n loansOverdraftDoc = false\n\n @Default(false)\n taxDoc = false\n\n @Default(false)\n mortgageHpDoc = false\n\n @Default(false)\n otherLiabilitiesDoc = false\n\n constructor (client: 'client_0' | 'client_1' = 'client_0') {\n super(client + '_ai')\n }\n\n @Ignore()\n assetFormFields (): IWynnesAI[] {\n return [\n {\n key: 'residentialProp',\n desc: 'Residential Property'\n },\n {\n key: 'cash',\n desc: 'Cash / Cash Deposit'\n },\n {\n key: 'cpf',\n desc: 'CPF Ordinary & Special Account Balances'\n },\n {\n key: 'otherAssets',\n desc: 'Others'\n }\n ]\n }\n\n @Ignore()\n liabilitiesFormFields (): IWynnesAI[] {\n return [\n {\n key: 'loansOverdraft',\n desc: 'Personal Loans, Overdrafts'\n },\n {\n key: 'tax',\n desc: 'Tax Payable'\n },\n {\n key: 'mortgageHp',\n desc: 'Mortgages, Hire Purchase'\n },\n {\n key: 'otherLiabilities',\n desc: 'Others'\n }\n ]\n }\n\n @Ignore()\n get largeAssetsInvestor () {\n return [this.criteria2, this.criteria3, this.criteria4].includes('yes')\n }\n\n @Ignore()\n get isAccredited () {\n return [this.criteria1, this.criteria2, this.criteria3, this.criteria4].includes('yes')\n }\n\n @Ignore()\n get netTotal () {\n return sum([Number(this.totalAssets) || 0, -Number(this.totalLiabilities)])\n }\n}\n","import { ClientBase } from '@master/model/ClientBase'\nimport PoliticalExposedPerson from './PoliticalExposedPerson'\n\nexport default class PoliticalExposedPersonDeclaration extends ClientBase {\n pepDeclared = ''\n pepParticulars?: PoliticalExposedPerson = undefined\n\n constructor (type: 'client_0' | 'client_1', pep: PoliticalExposedPerson = new PoliticalExposedPerson()) {\n super(type)\n this.pepParticulars = pep\n }\n\n beforeExtractData (data: any) {\n // get from raw data\n const bopRaw = data[this.type + '_pep_particulars']\n Object.assign(this.pepParticulars, this.pepParticulars.extractData(bopRaw || {}))\n return data\n }\n\n convertToRawData () {\n const result: any = super.convertToRawData()\n // As beneficial owner particular is a Base, we need to add them in manually\n if (this.pepParticulars) {\n result[this.type + '_pep_particulars'] = this.pepParticulars.convertToRawData()\n }\n return result\n }\n}\n","import NeedsBase from '../NeedsBase'\n\nexport default class DependantsProtection extends NeedsBase {\n name = 'Dependant\\'s Protection'\n needs = 'Dependant Protection'\n additionalNotes = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', id = 'p6') {\n super(`${type}_${id}`)\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { ClientBase } from '../ClientBase'\nimport { Ignore } from '@master/annotation/Ignore'\n\nexport default class ThirdPartyPayor extends ClientBase {\n @MaxChar(73)\n budgetNameOfPayor = ''\n\n @MaxChar(73)\n budgetContactPayor = ''\n\n budgetIdentityType = ''\n\n @MaxChar(73)\n budgetNricppPayor = ''\n\n @MaxChar(73)\n budget3rdPartyPayor = ''\n\n @MaxChar(73)\n budgetPayorRelationship = ''\n\n @MaxChar(73)\n budgetOccupationPayor = ''\n\n payingPremium = ''\n\n productAccount = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') { // previously was ma\n super(type)\n }\n\n /**\n * This function is currently in used by ifam-nest nbr v2 policy individual extraction function\n */\n @Ignore()\n get nric () {\n return this.budgetNricppPayor\n }\n\n /**\n * This function is currently in used by ifam-nest nbr v2 policy individual extraction function\n */\n @Ignore()\n get fullName () {\n return this.budgetNameOfPayor\n }\n\n isNRICOrFIN () {\n return this.budgetIdentityType === 'nric' || this.budgetIdentityType === 'fin'\n }\n}\n","import { MaxChar } from '@master/annotation/MaxChar'\nimport { Base } from '../Base'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\nexport default class SwitchingPolicy extends Base {\n @MaxChar(InputMaxChar.XSMALL)\n name = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n planType = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n policyNum = ''\n\n inceptionDate = undefined\n surrenderDate = undefined\n\n @MaxChar(InputMaxChar.XSMALL)\n benefitsProvided = ''\n\n @MaxChar(InputMaxChar.LARGE)\n reasons = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n detail = ''\n\n newProduct = ''\n premiumAmt = ''\n coverage = ''\n\n clone (template: SwitchingPolicy) {\n Object.keys(template).forEach((attr) => {\n this[attr] = template[attr]\n })\n }\n\n reset () {\n this.detail = ''\n this.name = ''\n this.planType = ''\n this.policyNum = ''\n this.inceptionDate = null\n this.surrenderDate = null\n this.benefitsProvided = ''\n this.newProduct = ''\n this.premiumAmt = ''\n this.coverage = ''\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { TypeBase } from '../TypeBase'\nimport SwitchingPolicy from './SwitchingPolicy'\n\nexport default class SwitchingWithPolicies extends TypeBase {\n surrenderedInvestment = ''\n topUp = ''\n advisedBefore = ''\n policies: SwitchingPolicy[] = []\n\n @Ignore()\n policiesLimit = 3\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') { // previously was ma\n super(`${type}_switching`)\n }\n\n extractData (rawData: any) {\n const data = super.extractData(rawData)\n const rawPolicies = rawData[this.type + '_policies']\n if (!rawPolicies || rawPolicies.length === 0) {\n data.policies = [\n new SwitchingPolicy(),\n new SwitchingPolicy()\n ]\n return data\n }\n const switchingPolicies = rawPolicies.map((rawpolicy) => {\n const sp = new SwitchingPolicy()\n Object.assign(sp, rawpolicy)\n return sp\n })\n Object.assign(data, { policies: switchingPolicies || [] })\n return data\n }\n\n addPolicy (newPolicy: SwitchingPolicy) {\n const fresh = new SwitchingPolicy()\n fresh.clone(newPolicy)\n this.policies.push(fresh)\n }\n\n removePolicy (idx: number) {\n this.policies = this.policies.filter((policy, index) => { return index !== idx })\n }\n\n updatePolicy (idx: number, updated: SwitchingPolicy) {\n const fresh = new SwitchingPolicy()\n fresh.clone(updated)\n this.policies.splice(idx, 1, fresh)\n }\n\n reset () {\n this.advisedBefore = ''\n }\n}\n","import { ClientBase } from '../ClientBase'\n\nexport default class SignatureInfo extends ClientBase {\n signatureDate = ''\n\n constructor (type: 'client_0'| 'client_1' = 'client_0') {\n super(type)\n }\n}\n","import { IProjectSettings } from '@master/config/IProjectSettings'\nimport { IDateService } from '@master/services/IDateService'\nimport AIOI from '@master/model/kyc-form/AIOI'\nimport CashFlow from '@master/model/kyc-form/finances/CashFlow'\nimport Budget from '@master/model/kyc-form/finances/Budget'\nimport CKA from '@master/model/kyc-form/CKA'\nimport RPA from '@master/model/kyc-form/RPA'\nimport HospitalizationNeeds from '@master/model/kyc-form/need-analysis/health/HospitalizationNeeds'\nimport PersonalAccidentNeeds from '@master/model/kyc-form/need-analysis/health/PersonalAccidentNeeds'\nimport OtherNeeds from '@master/model/kyc-form/need-analysis/others/OtherNeeds'\nimport LossOfIncomeNeeds from '@master/model/kyc-form/need-analysis/health/LossOfIncomeNeeds'\nimport OutpatientExpenses from '@master/model/kyc-form/need-analysis/health/OutpatientExpenses'\nimport { CriticalIllnessProtectionClient } from '@master/model/kyc-form/need-analysis/protection/CriticalIllnessProtectionClient'\nimport DeathProtectionClient from '@master/model/kyc-form/need-analysis/protection/DeathProtectionClient'\nimport DisabilityProtectionClient from '@master/model/kyc-form/need-analysis/protection/DisabilityProtectionClient'\nimport DisabilityIncomeProtectionClient from '@master/model/kyc-form/need-analysis/protection/DisabilityIncomeProtectionClient'\nimport EducationNeeds from '@master/model/kyc-form/need-analysis/savings/EducationNeeds'\nimport InvestmentNeeds from '@master/model/kyc-form/need-analysis/savings/InvestmentNeeds'\nimport RetirementNeeds from '@master/model/kyc-form/need-analysis/savings/RetirementNeeds'\nimport SavingsNeeds from '@master/model/kyc-form/need-analysis/savings/SavingsNeeds'\nimport SpecificGoalsNeeds from '@master/model/kyc-form/need-analysis/savings/SpecificGoalsNeeds'\nimport InvestmentOption from '@master/model/kyc-form/InvestmentOption'\nimport RecommendationBasis from '@master/model/kyc-form/RecommendationBasis'\nimport Switching from '@master/model/kyc-form/Switching'\nimport ECDD from '@master/model/kyc-form/ECDD'\nimport MyInfo from '@master/model/kyc-form/MyInfo'\nimport CoreBOP from '@master/model/kyc-form/external/BeneficialOwnerParticulars'\nimport AMLDoc from '@master/model/kyc-form/AMLDoc'\nimport BeneficialOwner from '@master/model/kyc-form/BeneficialOwner'\nimport NeedsBase from '@master/model/kyc-form/need-analysis/NeedsBase'\nimport PropertyFinancing from '@master/model/kyc-form/PropertyFinancing'\nimport FullPersonalDetails from '@master/model/kyc-form/PersonalDetails'\nimport LongTermProtectionClient from '@master/model/kyc-form/need-analysis/protection/LongTermProtectionClient'\nimport NetWorth from '@master/model/kyc-form/finances/NetWorth'\nimport AI from '@master/model/kyc-form/AI'\nimport PoliticalExposedPersonDeclaration from '@master/model/kyc-form/external/PoliticalExposedPersonDeclaration'\nimport DependantsProtection from '@master/model/kyc-form/need-analysis/protection/DependantsProtection'\nimport ThirdPartyPayor from './ThirdPartyPayor'\nimport SwitchingWithPolicies from './SwitchingWithPolicies'\nimport SignatureInfo from './SignatureInfo'\n\nexport default class KYCClient {\n personalDetails: FullPersonalDetails\n aioi: AIOI\n budget: Budget\n cashFlow: CashFlow\n netWorth: NetWorth\n cka: CKA\n rpa: RPA\n personalAccidentNeeds: PersonalAccidentNeeds\n hospitalizationNeeds: HospitalizationNeeds\n other1Needs: OtherNeeds\n other2Needs: OtherNeeds\n lossOfIncome: LossOfIncomeNeeds\n outpatientExpenses: OutpatientExpenses\n\n criticalIllnessNeeds: CriticalIllnessProtectionClient\n deathProtectionNeeds: DeathProtectionClient\n disabilityIncomeNeeds: DisabilityIncomeProtectionClient\n disabilityProtectionNeeds: DisabilityProtectionClient\n longTermProtectionClient: LongTermProtectionClient\n dependantsProtection: DependantsProtection\n investmentNeeds: InvestmentNeeds\n retirementNeeds: RetirementNeeds\n savingsNeeds: SavingsNeeds\n specificGoalsNeeds: SpecificGoalsNeeds\n educationNeeds: EducationNeeds\n investmentOption: InvestmentOption\n recommendationBasis: RecommendationBasis\n switching: Switching\n switchingArray: SwitchingWithPolicies\n ecdd: ECDD\n beneficialOwner: BeneficialOwner\n myInfo: MyInfo\n amldoc: AMLDoc\n ai: AI\n pepDecl: PoliticalExposedPersonDeclaration\n thirdPartyPayor: ThirdPartyPayor\n\n propertyFinancing: PropertyFinancing\n\n // This is just for KYC PDF, it is not in use for KYC Form\n signatureInfo: SignatureInfo\n\n constructor (client: 'client_0' | 'client_1' = 'client_0', dateService: IDateService, projectSettings: IProjectSettings) {\n this.personalDetails = new FullPersonalDetails(client, dateService)\n this.aioi = new AIOI(client)\n this.budget = new Budget(client)\n this.cashFlow = new CashFlow(client)\n this.netWorth = new NetWorth(client)\n this.cka = new CKA(client)\n this.rpa = new RPA(client)\n this.personalAccidentNeeds = new PersonalAccidentNeeds(client)\n this.hospitalizationNeeds = new HospitalizationNeeds(client)\n this.lossOfIncome = new LossOfIncomeNeeds(client)\n this.outpatientExpenses = new OutpatientExpenses(client)\n this.other1Needs = new OtherNeeds(client, 'm1', 'Others 1')\n this.other2Needs = new OtherNeeds(client, 'm2', 'Others 2')\n this.criticalIllnessNeeds = new CriticalIllnessProtectionClient(client, projectSettings)\n this.deathProtectionNeeds = new DeathProtectionClient(client, projectSettings)\n this.disabilityIncomeNeeds = new DisabilityIncomeProtectionClient(client)\n this.disabilityProtectionNeeds = new DisabilityProtectionClient(client, projectSettings)\n this.longTermProtectionClient = new LongTermProtectionClient(client)\n this.dependantsProtection = new DependantsProtection(client)\n this.investmentNeeds = new InvestmentNeeds(client)\n this.retirementNeeds = new RetirementNeeds(client)\n this.savingsNeeds = new SavingsNeeds(client)\n this.specificGoalsNeeds = new SpecificGoalsNeeds(client)\n this.educationNeeds = new EducationNeeds(client)\n this.investmentOption = new InvestmentOption(client)\n this.recommendationBasis = new RecommendationBasis(client)\n this.switching = new Switching(client)\n this.switchingArray = new SwitchingWithPolicies(client)\n this.ecdd = new ECDD(client)\n this.beneficialOwner = new BeneficialOwner(client, new CoreBOP())\n this.pepDecl = new PoliticalExposedPersonDeclaration(client)\n this.myInfo = new MyInfo(client)\n if (client === 'client_0') {\n this.propertyFinancing = new PropertyFinancing(client)\n }\n this.amldoc = new AMLDoc(client)\n this.ai = new AI(client)\n this.thirdPartyPayor = new ThirdPartyPayor(client)\n this.signatureInfo = new SignatureInfo(client)\n }\n\n get hasNeedToPlanFor () {\n return Object.keys(this).some((info) => {\n if (!(this[info] instanceof NeedsBase)) return false\n return this[info].plan === true\n })\n }\n}\n","import { ClientBase } from '../../ClientBase'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Default } from '@master/annotation/Default'\nimport { sum, valueIsUndefined } from '@master/model/kyc-form/need-analysis/math'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\n/**\n * When declaring CashFlow, do note that if frequency\n * is not provided, it will default all values based on\n * annually\n */\nexport default class CashFlow extends ClientBase {\n cashFlowPlanning = ''\n\n @MaxChar(InputMaxChar.MEDIUM)\n cashFlowPlanningReasons = ''\n\n @Default(0)\n employment = ''\n\n @Default(0)\n business = ''\n\n @Default(0)\n investmentIncome = ''\n\n @Default(0)\n dividends = ''\n\n @Default(0)\n rentalIncome = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others10Text = ''\n\n @Default(0)\n others10 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others11Text = ''\n\n @Default(0)\n others11 = ''\n\n @Default(0)\n loanRepayment = ''\n\n @Default(0)\n householdExpenses = ''\n\n @Default(0)\n parentalSupport = ''\n\n @Default(0)\n education = ''\n\n @Default(0)\n personalExpenses = ''\n\n @Default(0)\n insurancePremiums = ''\n\n @Default(0)\n regularSavings = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others12Text = ''\n\n @Default(0)\n others12 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others13Text = ''\n\n @Default(0)\n others13 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others14Text = ''\n\n @Default(0)\n others14 = ''\n\n cashFlowChanges = ''\n\n @MaxChar(InputMaxChar.MEDIUM)\n cashFlowChangesReasons = ''\n\n @MaxChar(InputMaxChar.XXXLARGE)\n cashFlowAdditionalNotes = '' // previously was your_finances_additional_notes\n\n // Not to be stored variables\n @Ignore()\n frequency = '' // to determine the calculation of the financial needs analysis calculation, either 'monthly' or 'annually'\n\n get totalIncome () { // was totalAnnualIncome\n return sum(this.employment, this.business, this.investmentIncome, this.dividends, this.rentalIncome, this.others10, this.others11)\n }\n\n /**\n * Although in the case of annually both\n * totalIncome and totalAnnualIncome will return the same\n * value, this is for scenarios when the frequency is monthly\n */\n get totalAnnualIncome () {\n if (this.frequency === 'annually') {\n return this.totalIncome\n }\n\n return this.totalIncome * 12\n }\n\n get totalExpenses () { // was totalAnnualExpenses\n return sum(this.loanRepayment,\n this.householdExpenses,\n this.parentalSupport,\n this.education,\n this.personalExpenses,\n this.insurancePremiums,\n this.regularSavings,\n this.others12,\n this.others13,\n this.others14\n )\n }\n\n /**\n * Although in the case of annually both\n * totalExpenses and totalAnnualExpenses will return the same\n * value, this is for scenarios when the frequency is monthly\n */\n get totalAnnualExpenses () {\n if (this.frequency === 'annually') {\n return this.totalExpenses\n }\n return this.totalExpenses * 12\n }\n\n /**\n * When frequency is annually, calling surplusShortfall\n * and surplusAnnualShortfall is the same. In the case\n * of monthly, surplusShortfall will return the monthly\n * shortfall\n */\n get surplusShortfall () {\n if (valueIsUndefined(this.totalIncome) && valueIsUndefined(this.totalExpenses)) return null\n return sum(this.totalIncome, -this.totalExpenses)\n }\n\n get surplusAnnualShortfall () {\n if (valueIsUndefined(this.totalAnnualIncome) && valueIsUndefined(this.totalAnnualExpenses)) return null\n return sum(this.totalAnnualIncome, -this.totalAnnualExpenses)\n }\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', frequency: 'annually' | 'monthly' = 'annually') {\n super(type)\n this.frequency = frequency\n }\n\n /**\n * Depending on the customer's needs we will change the default the frequency\n * accordingly to what is required\n * @param data\n */\n convertToRawData () {\n return {\n ...super.convertToRawData()\n }\n }\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport DisabilityProtectionClient from '@master/model/kyc-form/need-analysis/protection/DisabilityProtectionClient'\n\nexport function DisabilityProtectionStructure (defaultValue: { available1: number; available2: number; annualIncome: number }) {\n const structure: FNAStructure = {\n title: 'P2. Total Permanent Disability Protection',\n data: [\n {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Desired annual income to sustain lifestyle ($)',\n key: 'income',\n type: 'currency',\n default: defaultValue?.annualIncome,\n validationMsg: 'Total Permanent Disability Protection requires to indicate desired annual income.'\n }, {\n label: 'Number of years required',\n key: 'yearsRequired',\n validationMsg: 'Total Permanent Disability Protection requires to indicate years required.'\n }, {\n label: 'Inflation adjusted rate return (%)',\n key: 'infAdjReturn',\n defaultTo: 'defaultRate',\n validationMsg: 'Total Permanent Disability Protection requires to indicate inflation adjusted rate return.'\n }, {\n label: 'Lump sum required to maintain lifestyle (PV) ($)',\n key: 'fundsRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '+ Lump sum required upon occurrence ($)',\n key: 'required1',\n type: 'currency',\n validationMsg: 'Total Permanent Disability Protection requires to indicate lump sum required for treatment of illness.'\n }, {\n label: 'Total disability needs($)',\n key: 'totalRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '- Existing disability benefit($)',\n key: 'available1',\n type: 'currency',\n default: defaultValue?.available1,\n validationMsg: 'Total Permanent Disability Protection requires to indicate existing disability benefit.'\n }, {\n label: 'Other funds available (e.g rental income etc.) ($)',\n key: 'available2',\n type: 'currency',\n default: defaultValue?.available2,\n validationMsg: 'Total Permanent Disability Protection requires to indicate other resources.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport RetirementNeeds from '@master/model/kyc-form/need-analysis/savings/RetirementNeeds'\n\nexport function RetirementStructure (defaultValue: { incomePv: number; retirementYear: number; duration: number}) {\n const structure: FNAStructure = {\n title: 'S1. Retirement',\n data: [\n {\n label: 'Years to retirement',\n key: 'years',\n default: defaultValue?.retirementYear,\n validationMsg: 'Retirement requires to indicate years to retirement.'\n }, {\n label: 'Annual income required (PV) ($)',\n key: 'incomePv',\n type: 'currency',\n default: defaultValue?.incomePv,\n validationMsg: 'Retirement requires to indicate annual income required (PV).'\n }, {\n label: 'Average inflation rate (%)',\n key: 'inflation',\n defaultTo: 'defaultRate',\n validationMsg: 'Retirement requires to indicate average inflation rate.'\n }, {\n label: 'Annual income required (FV) ($)',\n key: 'incomeFv',\n type: 'currency',\n disabled: true\n },\n {\n label: '- Existing regular income (annualised) ($)',\n key: 'available1',\n type: 'currency',\n validationMsg: 'Retirement requires to indicate existing regular income (annualised).'\n },\n {\n title: 'Total retirement income required for retirement (at retirement age)'\n }, {\n label: 'First year income required at retirement age (PMT) ($)',\n key: 'firstYearIncome',\n type: 'currency',\n disabled: true\n }, {\n label: 'Duration of retirement',\n key: 'duration',\n default: defaultValue?.duration,\n validationMsg: 'Retirement requires to indicate duration of retirement.'\n }, {\n label: 'Inflation adjusted rate return (%)',\n key: 'infAdjReturn',\n defaultTo: 'defaultInfAdjReturn',\n validationMsg: 'Retirement requires to indicate inflation adjusted rate return.'\n }, {\n label: 'Total amount required at start of retirement ($)',\n key: 'totalAmount',\n type: 'currency',\n disabled: true\n }, {\n label: '- Maturity value of insurance plan(s) at retirement ($)',\n key: 'available2',\n type: 'currency',\n validationMsg: 'Retirement requires to indicate maturity value of insurance plan(s) at retirement.'\n }, {\n label: '- Total asset to be used or liquidated for this need ($)',\n key: 'available3',\n type: 'currency',\n validationMsg: 'Retirement requires to indicate total asset to be used or liquidated for this need.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import { ProductMetaData } from '../ProductMetaData'\n\nexport const CoverageTypeOptions = [\n { value: '', label: '' },\n { value: 'na', label: 'NA' },\n { value: 'premier', label: 'Premier' },\n { value: 'superior', label: 'Superior' },\n { value: 'classic', label: 'Classic' },\n { value: 'deluxe', label: 'Deluxe' },\n { value: 'essential', label: 'Essential' },\n { value: 'comprehensive', label: 'Comprehensive' },\n { value: 'elite', label: 'Elite' },\n { value: 'economy', label: 'Economy' },\n { value: 'standard', label: 'Standard' }\n]\n\nexport const TravelTypeOptions = [\n { value: '', label: '' },\n { value: 'singletrip', label: 'Single Trip' },\n { value: 'annualplan', label: 'Annual Plan' },\n { value: 'group', label: 'Group' },\n { value: 'family', label: 'Family' },\n { value: 'individual', label: 'Individual' }\n]\n\nexport const ZoneOptions = [\n { value: '', label: '' },\n { value: 'asean', label: 'Asean' },\n { value: 'asia', label: 'Asia' },\n { value: 'worldwide', label: 'Worldwide' },\n { value: 'global', label: 'Global' },\n { value: 'malaysiaonly', label: 'Malaysia Only' }\n]\n\nexport const NoOfChildrenOptions = [\n { value: '', label: '' },\n { value: '1', label: '1' },\n { value: '2', label: '2' },\n { value: '3', label: '3' },\n { value: '4', label: '4' }\n]\nexport class GiTravel extends ProductMetaData {\n insuranceClass = undefined\n coverageType = undefined\n travelType = undefined\n departureDate = undefined\n returnDate = undefined\n zone = undefined\n lengthOfTrip = undefined\n\n grossPremium = undefined\n gst = undefined\n commissionRate = undefined\n commissionPayment = undefined\n commissionPayable = undefined\n grossCommissionEarned = undefined\n adult1 = undefined\n adult2 = undefined\n child1 = undefined\n child2 = undefined\n child3 = undefined\n child4 = undefined\n noOfChildren = undefined\n\n afterExtractData (data) {\n data = super.afterExtractData(data)\n data.gst = Number(data.gst)\n data.grossPremium = Number(data.grossPremium)\n data.commissionRate = Number(data.commissionRate)\n data.commissionPayment = Number(data.commissionPayment)\n data.commissionPayable = Number(data.commissionPayable)\n data.grossCommissionEarned = Number(data.grossCommissionEarned)\n return data\n }\n}\n","import { snakeCase } from 'lodash/fp'\nimport { TypeBase } from './TypeBase'\nimport { Ignore } from '@master/annotation/Ignore'\n\nexport class ArrayBase extends TypeBase {\n @Ignore()\n startIndex = 0\n\n @Ignore()\n curIndex = 0\n\n constructor () {\n super('')\n }\n\n snakeCaseKey (key: string) {\n return snakeCase(`${this.type} ${this.curIndex + this.startIndex} ${key}`)\n }\n\n // to get data from raw kycForm to fill in current class\n extractData (rawData: any, index: number) {\n this.curIndex = index\n return super.extractData(rawData)\n }\n}\n","module.exports = __webpack_public_path__ + \"img/kyc-view.3f4e0aea.svg\";","export const CitizenshipOptions = [\n { label: '', value: '' },\n { label: 'Singaporean', value: 'singaporean' },\n { label: 'Singapore PR', value: 'pr' },\n { label: 'Singapore Pass Holder', value: 'passholders' },\n { label: 'Other Citizenship', value: 'others' }\n]\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport HospitalizationNeeds from '@master/model/kyc-form/need-analysis/health/HospitalizationNeeds'\n\nexport function HospitalisationStructure (defaultValue: {amount: number}) {\n const structure: FNAStructure = {\n title: 'H2. Hospitalisation Expenses',\n data: [\n {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Existing hospital coverage (Type, ward and coverage)',\n key: 'coverage',\n validationMsg: 'Hospitalisation Expenses requires to indicate existing hospital coverage.',\n type: 'text'\n }, {\n label: 'Daily room and board (R&B) charges ($)',\n key: 'roomCharges',\n type: 'currency',\n validationMsg: 'Hospitalisation Expenses requires to indicate daily room and board (R&B) charges.'\n }, {\n label: 'Estimated surgical expenses ($)',\n key: 'surgicalExpenses',\n type: 'currency',\n validationMsg: 'Hospitalisation Expenses requires to indicate estimated surgical expenses.'\n }, {\n label: 'Desired amount for hospital income ($)',\n key: 'desiredAmount',\n type: 'currency',\n default: defaultValue?.amount,\n validationMsg: 'Hospitalisation Expenses requires to indicate desired amount for hospital income.'\n }, {\n label: 'Preferred hospital type',\n key: 'hospitalType',\n type: 'radio',\n options: [\n { label: 'Public', value: 'public' },\n { label: 'Private', value: 'private' }\n ],\n validationMsg: 'Hospitalisation Expenses requires to indicate preferred hospital type.'\n }, {\n label: 'Preferred ward type',\n key: 'wardType',\n type: 'radio',\n options: [\n { label: 'A', value: 'A' },\n { label: 'B1', value: 'B1' },\n { label: 'B2', value: 'B2' },\n { label: 'C', value: 'C' }\n ],\n disabled: (hospitalizationNeeds) => hospitalizationNeeds.hospitalType === 'private',\n validationMsg: 'Hospitalisation Expenses requires to indicate preferred ward type.'\n }, {\n label: 'Other benefit',\n key: 'other',\n type: 'radio',\n options: [\n { label: 'As charged', value: 'charged' },\n { label: 'Non as charged', value: 'notcharged' }\n ],\n validationMsg: 'Hospitalisation Expenses requires to indicate other benefit.'\n }, {\n label: 'Rider for Deductible & Co-Insurance',\n key: 'rider',\n type: 'radio',\n options: [\n { label: 'Yes', value: 'yes' },\n { label: 'No', value: 'no' }\n ],\n validationMsg: 'Hospitalisation Expenses requires to indicate rider for Deductible & Co-Insurance.'\n }\n ]\n }\n return structure\n}\n","import { Base } from '@master/model/Base'\n\nexport class ClientInfoBase extends Base {\n /**\n * this will assign the data to the object directly\n * @param data\n */\n extractAndAssignData (data: {}) {\n const b4data = super.beforeExtractData(data)\n const extdata = super.extractData(b4data)\n const finaldata = this.afterExtractData(extdata)\n Object.assign(this, finaldata)\n }\n}\n","import { FormBase, signature } from '../FormBase'\nimport { DeclarationOptions } from './GeneralDeclaration'\n\nexport class MediShieldLifeTest {\n passed: typeof DeclarationOptions[number]['value'] = undefined\n date: number = undefined\n insurer = ''\n failedReason = ''\n}\nexport class BDMAssessmentFields {\n referrer: typeof DeclarationOptions[number]['value'] = undefined\n referrerName = ''\n referrerRepCode = ''\n taScheme: typeof DeclarationOptions[number]['value'] = undefined\n taSchemeType = ''\n\n briefedNoSales: typeof DeclarationOptions[number]['value'] = undefined\n briefedTerminateExistingAgency: typeof DeclarationOptions[number]['value'] = undefined\n\n bandingAgree: typeof DeclarationOptions[number]['value'] = undefined\n bandingFinalProposal = ''\n\n employmentEngaged: typeof DeclarationOptions[number]['value'] = undefined\n employmentDetails = ''\n\n prohibitedActivity: typeof DeclarationOptions[number]['value'] = undefined\n rockwillsIntroducer: typeof DeclarationOptions[number]['value'] = undefined\n mediShieldLifeTest: MediShieldLifeTest = new MediShieldLifeTest()\n declaredBi: typeof DeclarationOptions[number]['value'] = undefined\n medisaveOs: typeof DeclarationOptions[number]['value'] = undefined\n criminalRecord: typeof DeclarationOptions[number]['value'] = undefined\n warningLetter: typeof DeclarationOptions[number]['value'] = undefined\n declaredOther: typeof DeclarationOptions[number]['value'] = undefined // but no\n\n exceedSoc: typeof DeclarationOptions[number]['value'] = undefined\n socDeviation = '' // included period of deviation\n}\nexport class BDMAssessment extends FormBase {\n // shared.name\n // shared.rm\n\n type = 'bdm-assessment'\n data: BDMAssessmentFields = new BDMAssessmentFields()\n}\n","import { FormBase, signature } from '../FormBase'\n\nexport class LetterOfUndertaking extends FormBase {\n // shared.name\n // shared.nric.value\n // shared.branch\n type = 'letter-of-undertaking'\n\n data = {\n agree: false\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ClientDependantDTO } from '../models/ClientDependantDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class ClientDependantsService {\n\n /**\n * @param clientOid\n * @returns any\n * @throws ApiError\n */\n public static async getDependantRelationshpList(\n clientOid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/client_dependants/${clientOid}`,\n });\n return result.body;\n }\n\n /**\n * @param childClientOid\n * @returns any\n * @throws ApiError\n */\n public static async getParentRelationshipList(\n childClientOid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/client_dependants/parent/${childClientOid}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ClientDependantDTO\n * @throws ApiError\n */\n public static async saveNewDependantRelationship(\n requestBody: ClientDependantDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/client_dependants/save_new_dependant`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async updateDependantRelationship(\n requestBody: ClientDependantDTO,\n ): Promise {\n const result = await __request({\n method: 'PUT',\n path: `/live/api/client_dependants`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param childClientOid\n * @returns any\n * @throws ApiError\n */\n public static async removeDependant(\n childClientOid: string,\n ): Promise {\n const result = await __request({\n method: 'DELETE',\n path: `/live/api/client_dependants/${childClientOid}`,\n });\n return result.body;\n }\n\n}","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppSwitch.vue?vue&type=style&index=0&id=0dd420aa&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDynamicIconHeader.vue?vue&type=style&index=0&id=e620e49e&lang=scss&scoped=true&\"","import { options } from '@master/model/options/Options'\n\nexport const FrequencyList = ['Monthly', 'Quarterly', 'Semi-Annually', 'Annually', 'Single'] as const\nexport type FrequencyType = typeof FrequencyList[number]\nexport const FrequencyOptions: options[] = FrequencyList.map(frequency => {\n return {\n label: frequency,\n value: frequency\n }\n})\nexport const FrequencyMap = {\n 1: 'Annually',\n 2: 'Semi-Annually',\n 4: 'Quarterly',\n 12: 'Monthly'\n}\n\nexport const GetPremiumType = function (paymentMode) {\n switch (paymentMode) {\n case 12:\n case 4:\n case 2:\n case -1:\n return 'Regular'\n case 1:\n return 'Single'\n default:\n return ''\n }\n}\n\nexport const FrequencyToValueMapping = function (frequency: FrequencyType) {\n switch (frequency) {\n case 'Monthly':\n return 12\n case 'Quarterly':\n return 4\n case 'Semi-Annually':\n return 2\n case 'Single':\n return 1\n case 'Annually':\n return -1 // this is returned as -1 to differentiate between single and annually, since previously both used 1\n default:\n return 0\n }\n}\n\nexport const FrequencyToValueMappingCalculation = function (frequency: FrequencyType) {\n return frequency === 'Annually' ? Math.abs(FrequencyToValueMapping(frequency)) : FrequencyToValueMapping(frequency)\n}\n\nexport const GetPaymentModeNiceName = function (paymentMode) {\n switch (paymentMode) {\n case 12:\n return 'Monthly'\n case 4:\n return 'Quarterly'\n case 2:\n return 'Semi-Annually'\n case 1:\n return 'Single'\n case -1: // this is returned as -1 to differentiate between single and annually, since previously both used 1\n return 'Annually'\n default:\n return ''\n }\n}\n\nexport const PremiumPurpose = [\n 'RP', 'SP', 'RSP', 'Top-up', 'TR'\n]\n","module.exports = __webpack_public_path__ + \"img/menu.ea25da79.svg\";","import { isUndefined } from 'lodash/fp'\n\nfunction valueIsUndefined (value: number | string) {\n return value !== 0 && !value\n}\nfunction infAdjReturn (inflationRate: number, investmentReturn: number) {\n return ((1 + investmentReturn) / (1 + inflationRate)) - 1\n}\n\nfunction pv (amount: number | undefined, period: number | undefined, rate: number | undefined, isEndMode = false) {\n const _amount = amount || 0\n const _period = period || 0\n const _rate = (rate || 0) / 100\n if (_rate === 0) {\n return _amount * _period\n } else {\n const dueFactor = (1 - (1 / (1 + _rate) ** _period)) * (isEndMode ? 1 : (1 + _rate))\n return _amount / _rate * dueFactor\n }\n}\n\nfunction fv (amount: number, period: number, rate: number) {\n if (isUndefined(period)) {\n period = 0\n }\n const result = amount * ((1 + rate) ** period)\n return isNaN(result) ? 0 : result\n}\n\nfunction savingLumpSum (amount: number, period: number, rate: number) {\n return amount / (1 + rate) ** period\n}\n\nfunction savingMonthly (amount: number, period: number, rate: number) {\n if (rate === 0) {\n return amount / period / 12\n }\n\n const monthlyRate = rate / 12\n const overallRate = (1 + monthlyRate) ** (12 * period + 1)\n const snRate = monthlyRate / (overallRate - (1 + monthlyRate))\n return amount * snRate\n}\n\nfunction round (value: number, digitNumber: number) {\n const decimal = 10 ** digitNumber\n const result = Math.round(value * decimal) / decimal\n return isNaN(result) ? 0 : result\n}\n\nfunction sum (...array: Array ): number {\n const allFieldIsEmpty = array.every(value => valueIsUndefined(value))\n if (allFieldIsEmpty) return null\n\n let total = null\n array.forEach(value => {\n if (typeof value === 'string') {\n total += parseFloat(value) || 0\n } else if (typeof value === 'number' && value) {\n total += value\n } else {\n total += 0\n }\n })\n\n return total\n}\n\nexport { infAdjReturn, pv, fv, savingLumpSum, savingMonthly, round, sum, valueIsUndefined }\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"title\"},[_vm._v(\" \"+_vm._s(_vm.title)+\" \"),_c('AppSwitch',{attrs:{\"options\":['Client 1', 'Client 2'],\"selected\":_vm.selectedClient},on:{\"option-selected\":_vm.clientOptionSelected}})],1),_vm._t(\"default\",null,{\"client\":_vm.client,\"clientIndex\":_vm.clientIndex,\"kycForm\":_vm.kycForm})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport AppSwitch from '@core/components/AppSwitch.vue'\nimport { namespace } from 'vuex-class'\nimport { SimpleForm } from '@master/model/kyc-form/FormOptions'\nimport { inject } from 'inversify-props'\nimport { UIService } from '@core/services/UIService'\nimport { SharedVariable } from '@core/model/SharedVariable'\n\nconst kycFormStore = namespace('KYCFormStore')\n\n@Component({\n components: {\n AppSwitch\n }\n})\nexport default class AppClientForm extends Vue {\n @Prop() title!: string\n\n @kycFormStore.State\n kycForm!: SimpleForm\n\n uiService: UIService\n\n @inject()\n private sharedVariable: SharedVariable\n\n selectedClient = 'Client 1'\n\n mounted () {\n // take injected UIService and set it to local\n this.uiService = this.sharedVariable.uiService\n }\n\n async clientOptionSelected (option: string) {\n if (option === 'Client 2' && !this.isClient2Included()) {\n await this.uiService.alert.show({\n type: 'warning',\n message: 'Client 2 is not included in this KYC Form. To include, go to \"Client Summary\" page and enable the checkbox.'\n })\n return\n }\n this.selectedClient = option\n }\n\n isClient2Included () {\n return this.kycForm.hasClient2\n }\n\n get client () {\n return this.selectedClient === 'Client 1' ? this.kycForm.client1 : this.kycForm.client2\n }\n\n get clientIndex () {\n return this.selectedClient === 'Client 1' ? 0 : 1\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppClientForm.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppClientForm.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppClientForm.vue?vue&type=template&id=7eba2a72&\"\nimport script from \"./AppClientForm.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppClientForm.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { round, sum } from '@master/model/kyc-form/need-analysis/math'\nimport { ClientInfoBase } from './ClientInfoBase'\n\nexport const InsuranceClassOptions = [\n { value: '', label: '' },\n { value: 'allriskinsurance', label: 'All Risk Insurance' },\n { value: 'boilerinsurance', label: 'Boiler Insurance' },\n { value: 'burglary', label: 'Burglary' },\n { value: 'consequentiallossinsurance', label: 'Consequential Loss Insurance' },\n { value: 'contractorallrisksandthirdpartyliability', label: 'Contractor All Risks and Third Party Liability' },\n { value: 'criticalillness', label: 'Critical Illness' },\n { value: 'disabilityincome', label: 'Disability Income' },\n { value: 'electronicequipmentinsurance', label: 'Electronic Equipment Insurance' },\n { value: 'fidelityguaranteeinsurance', label: 'Fidelity Guarantee Insurance' },\n { value: 'fireextraneousperilsinsurance', label: 'Fire Extraneous Perils Insurance' },\n { value: 'goodsintransitinsurance', label: 'Goods In Transit Insurance' },\n { value: 'hospitalincome', label: 'Hospital Income' },\n { value: 'industrialallrisksinsurance', label: 'Industrial All Risks Insurance' },\n { value: 'inlandfloater', label: 'Inland Floater' },\n { value: 'marinecargoopencover', label: 'Marine Cargo Open Cover' },\n { value: 'marinehullinsurance', label: 'Marine Hull Insurance' },\n { value: 'medical', label: 'Medical' },\n { value: 'medicalinsurance', label: 'Medical Insurance' },\n { value: 'moneyinsurance', label: 'Money Insurance' },\n { value: 'motorinsurance', label: 'Motor Insurance' },\n { value: 'motorinsurance-commercialvehicle', label: 'Motor Insurance - Commercial Vehicle' },\n { value: 'motorinsurance-privatecar', label: 'Motor Insurance - Private Car' },\n { value: 'package', label: 'Package' },\n { value: 'performancebond', label: 'Performance Bond' },\n { value: 'personalaccident', label: 'Personal Accident' },\n { value: 'productliability', label: 'Product Liability' },\n { value: 'plateglassinsurance', label: 'Plate Glass Insurance' },\n { value: 'publicproductliabilityinsurance', label: 'Public Product Liability Insurance' },\n { value: 'publicliabilityinsurance', label: 'Public Liability Insurance' },\n { value: 'termlife-rop', label: 'Term Life - ROP' },\n { value: 'travelinsurance', label: 'Travel Insurance' },\n { value: 'warehousemanslegalliability', label: 'Warehouseman\\'s Legal Liability' },\n { value: 'workmanscompensationinsurance', label: 'Workman\\'s Compensation Insurance' }\n]\n\nexport const ShoreOptions = [\n { label: 'Onshore', value: 'onshore' },\n { label: 'Offshore', value: 'offshore' }\n]\nexport class ProductMetaData extends ClientInfoBase {\n sumAssured = undefined\n currency = undefined\n frequency = undefined\n prematureTermination = undefined\n\n grossPremium = undefined\n gst = undefined\n\n get netPremium () {\n const gstNumber = Number(this.gst)\n const gstAmt = round(this.grossPremium * (gstNumber / (100 + gstNumber)), 2)\n return round(sum(this.grossPremium, -gstAmt), 2)\n }\n}\n","export const ExamTypeOptions = [\n { label: '', value: '' },\n { label: 'M5', value: 'M5' },\n { label: 'M8', value: 'M8' },\n { label: 'M9A', value: 'M9A' },\n { label: 'BCP', value: 'BCP' },\n { label: 'M6', value: 'M6' },\n { label: 'M8A', value: 'M8A' },\n { label: 'HI', value: 'HI' },\n { label: 'PGI', value: 'PGI' },\n { label: 'M6A', value: 'M6A' },\n { label: 'M9', value: 'M9' },\n { label: 'Certificate in GI', value: 'certGI' },\n { label: 'CommGI', value: 'commGI' }\n]\n// should add status: ['PASSED', 'EXEMPTED'] ?\n\n// https://github.com/microsoft/TypeScript/issues/20965#issuecomment-510040954\n// Via this link, we are able to allow ExamTypeForAttributes to see actual values instead\n// of just 'string'\nexport const ExamTypeForAttributes = ExamTypeOptions.map(option => {\n if (option.value) return option.value\n})\n\nexport const ReimbursableExamTypeOptions = [\n { label: '', value: '' },\n { label: 'M5', value: 'M5' },\n { label: 'M8', value: 'M8' },\n { label: 'M8A', value: 'M8A' },\n { label: 'M9', value: 'M9' },\n { label: 'M9A', value: 'M9A' },\n { label: 'HI', value: 'HI' }\n]\n","import { RawKey } from '@master/annotation/RawKey'\nimport { Json } from '@master/annotation/Json'\nimport { Meta } from './Meta'\n\nexport const ProductHeaders = [\n '_oid',\n 'issuer',\n 'issuer_oid',\n 'name',\n 'type',\n 'category',\n 'recommended_risk_profile',\n 'product_code',\n 'needs_covered',\n 'status',\n 'reasons',\n 'limitations',\n 'launch_date_millis',\n 'withdrawn_date_millis'\n]\n\nexport const insuranceProductTypes = [\n /**\n * match all types that have 'insurance' word but not include rider\n * e.g.\n * 'insurance - rider' = false\n * 'insurance rider' = false\n * 'insurance riders' = false\n * 'insurance rider xxx' = false\n * 'insurance - ilp' = true\n * 'insurance ilp' = true\n * 'insurance xxx' = true\n * 'insurance ***' = true\n */\n /insurance(?!.+?rider)/\n]\nexport const insuranceProductCategories = [\n 'critical illness',\n 'decreasing term insurance',\n 'disability income insurance',\n 'health insurance',\n 'hospital cash insurance',\n 'investment linked plan',\n 'long term care',\n 'personal accident',\n 'term insurance',\n 'universal life',\n /endowment/,\n /whole life/\n]\n\nexport const investmentProductTypes = ['collective investment scheme', 'corporate bond', 'etf fund', 'reit', 'ut fund']\nexport const investmentProductCategories = [\n 'alternatives',\n 'annuity',\n 'bond',\n 'cash',\n 'commodity',\n 'equity',\n 'exchanged traded fund',\n 'not applicable',\n 'others',\n 'property',\n 'structured note',\n 'unit trust'\n]\n\nexport const ilpProductTypes = [/fund/, /corporate/, /reit/]\n\nexport const riderProductTypes = [/insurance.+?rider/]\n\nexport const generalProductTypes = [/general/, /General/, /Group/]\n\n// @TODO: This has to be placed in a util function, havent decide where, but at least this is in @master\n// Product filter is case insensitive\n// filter list make it to support both string & Regex to support more broader cases\n// Known issue in LINC is product category as 'hospital cash insurance' will show under investment\n// due to LINC include any category contain 'cash'\nexport const isInclude = (checkList: (string | RegExp)[], checkValue: string) => {\n checkValue = checkValue.toLowerCase()\n return checkList.some(check => {\n if (check instanceof RegExp) {\n return check.test(checkValue)\n } else {\n return check === checkValue\n }\n })\n}\n\ntype CheckList = (string | RegExp)[]\n\nexport class ProductMeta extends Meta {\n @RawKey('_oid')\n oid = ''\n\n issuer = ''\n issuer_oid = ''\n productCode = ''\n name = ''\n type = ''\n category = ''\n recommendedRiskProfile: number = undefined\n @Json()\n needsCovered: string[] = []\n\n productFamilyCode = ''\n productFamilyName = ''\n status: number = undefined\n reasons = ''\n limitations = ''\n launchDateMillis: number = undefined\n withdrawnDateMillis: number = undefined\n // Only put here just for Gen to work properly\n premiumType = ''\n\n isRider (productType: CheckList = riderProductTypes, categoryType: CheckList = ['rider']) {\n return this.isInclude(productType, this.type) || this.isInclude(categoryType, this.category)\n }\n\n isInsuranceProduct (productType: CheckList = insuranceProductTypes, categoryType: CheckList = insuranceProductCategories, fullProductType: CheckList = [...insuranceProductTypes, ...investmentProductTypes]) {\n return this.isInclude(fullProductType, this.type) ? this.isInclude(productType, this.type) : this.isInclude(categoryType, this.category)\n }\n\n isInvestmentProduct (productType: CheckList = investmentProductTypes, categoryType: CheckList = investmentProductCategories, fullProductType: CheckList = [...insuranceProductTypes, ...investmentProductTypes]) {\n return this.isInclude(fullProductType, this.type) ? this.isInclude(productType, this.type) : this.isInclude(categoryType, this.category)\n }\n\n isILPProduct (productType: CheckList = ilpProductTypes, categoryType: CheckList = []) {\n return this.isInclude(productType, this.type) || this.isInclude(categoryType, this.category)\n }\n\n afterAssign () {\n // freeze this object to prevent changes\n Object.freeze(this)\n }\n\n // Product filter is case insensitive\n // filter list make it to support both string & Regex to support more broader cases\n // Known issue in LINC is product category as 'hospital cash insurance' will show under investment\n // due to LINC include any category contain 'cash'\n isInclude (checkList: (string | RegExp)[], checkValue: string) {\n checkValue = checkValue.toLowerCase()\n return checkList.some(check => {\n if (check instanceof RegExp) {\n return check.test(checkValue)\n } else {\n return check === checkValue\n }\n })\n }\n}\n","import { ClientBase } from '../../ClientBase'\nimport { sum, valueIsUndefined } from '@master/model/kyc-form/need-analysis/math'\nimport { Default } from '@master/annotation/Default'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\n/**\n * By default netWorthPlanning and noPlanningReason\n * is used by both client 1 and 2. All other_*_text\n * are shared as well.\n */\nexport default class NetWorth extends ClientBase {\n netWorthPlanning = ''\n\n @MaxChar(InputMaxChar.MEDIUM)\n noPlanningReason = ''\n\n @Default(0)\n residentialAssets = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others1Text = ''\n\n @Default(0)\n others1 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others2Text = ''\n\n @Default(0)\n others2 = ''\n\n @Default(0)\n stocksShares = ''\n\n @Default(0)\n unitTrust = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others3Text = ''\n\n @Default(0)\n others3 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others4Text = ''\n\n @Default(0)\n others4 = ''\n\n @Default(0)\n cpfOrdinary = ''\n\n @Default(0)\n cpfSpecial = ''\n\n @Default(0)\n cpfMedisave = ''\n\n @Default(0)\n bankDeposits = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others5Text = ''\n\n @Default(0)\n others5 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others6Text = ''\n\n @Default(0)\n others6 = ''\n\n @Default(0)\n homeMortgage = ''\n\n @Default(0)\n carLoans = ''\n\n @Default(0)\n personalLoans = ''\n\n @Default(0)\n creditCard = ''\n\n @Default(0)\n tax = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others7Text = ''\n\n @Default(0)\n others7 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others8Text = ''\n\n @Default(0)\n others8 = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n others9Text = ''\n\n @Default(0)\n others9 = ''\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super(type)\n }\n\n get totalUsedAssets () {\n return sum(this.residentialAssets, this.others1, this.others2)\n }\n\n get totalInvestedAssets () {\n return sum(this.stocksShares, this.unitTrust, this.others3, this.others4, this.cpfOrdinary, this.cpfSpecial, this.cpfMedisave)\n }\n\n get totalCashAssets () {\n return sum(this.bankDeposits, this.others5, this.others6)\n }\n\n get totalAssets () {\n return sum(this.totalUsedAssets, this.totalInvestedAssets, this.totalCashAssets)\n }\n\n get totalLiabilities () {\n return sum(this.homeMortgage, this.carLoans, this.personalLoans, this.creditCard, this.tax, this.others7, this.others8, this.others9)\n }\n\n get netWorth () {\n if (valueIsUndefined(this.totalAssets) && valueIsUndefined(this.totalLiabilities)) return null\n return sum(this.totalAssets, -this.totalLiabilities)\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport { snakeCase } from 'lodash'\nimport { Base } from '../../Base'\nimport { IExistingInvestment } from './IExistingInvestment'\n\n// this is a highly specific nested object, with intention to reduce number of first level fields in metaobject\n// data preprocessor @ backend will handle the flattening of the nesting\nexport default class ExistingInvestSummary extends Base {\n existingInvestSummary = { c1: {}, c2: {}, others: {} }\n\n @Ignore()\n defaultValue = 0\n\n @Ignore()\n @Pointer('ROOT', 'hasClient2')\n hasClient2?: boolean = false\n\n @Ignore()\n @Pointer('ROOT.existingInvestment', 'portfolios')\n portfolios: IExistingInvestment[] = null\n\n @Ignore()\n summaryFields: { attrName: string; abbre: string }[]\n\n /**\n * @TODO: This might not be the best method, but it can eliminate the need for summaryFields\n * function in ExistingInvestment.ts (Check for ExistingInvestment.ts before 19 October 2022\n * for example of what summaryFields() is.)\n * @param existingInvestment The model that is going to be used just for getting summary fields\n */\n constructor (existingInvestment: IExistingInvestment) {\n super()\n this.summaryFields = existingInvestment.getSummaryFields()\n Object.keys(this.existingInvestSummary).forEach((role) => {\n this.summaryFields.forEach((field) => {\n this.existingInvestSummary[role][field.attrName] = this.defaultValue\n })\n })\n }\n\n c1PortfolioSummary () {\n if (this.portfolios != null) {\n const pfs = this.portfolios.filter(pf => { return pf.belongsTo('C1') })\n // Remove all previously stored values. If there is a need to store previous data,\n // then this logic will need to be reimplemented. The reason why I implement this\n // is because if the company does not need the field to be summary, there is\n // no point of keeping it anymore. Applies for c2 and others portfolio summary.\n this.existingInvestSummary.c1 = {}\n this.summaryFields.forEach((field) => {\n this.computeSum(pfs, field, 'c1')\n })\n }\n return this.existingInvestSummary.c1\n }\n\n c2PortfolioSummary () {\n if (this.portfolios != null) {\n const pfs = this.portfolios.filter(pf => { return pf.belongsTo('C2') })\n this.existingInvestSummary.c2 = {}\n\n this.summaryFields.forEach((field) => {\n this.computeSum(pfs, field, 'c2')\n })\n }\n return this.existingInvestSummary.c2\n }\n\n othersPortfolioSummary () {\n if (this.portfolios != null) {\n const pfs = this.portfolios.filter(pf => { return pf.isValid() && !pf.belongsTo('C1') && !pf.belongsTo('C2') })\n this.existingInvestSummary.others = {}\n\n this.summaryFields.forEach((field) => {\n this.computeSum(pfs, field, 'others')\n })\n }\n return this.existingInvestSummary.others\n }\n\n computeSum (pfs, key: { attrName: string; abbre: string }, summaryKey) {\n if (pfs.length === 0) {\n this.existingInvestSummary[summaryKey][key.attrName] = 0\n return 0\n }\n const subtotal = pfs.map((cover) => {\n return Number(cover[key.attrName]) || 0\n }).reduce((amt, accum) =>\n amt + accum\n , 0)\n this.existingInvestSummary[summaryKey][key.attrName] = (Math.round(subtotal * 100) / 100).toFixed(2)\n return subtotal\n }\n\n /**\n * This is not a good way of recalculating and populating the result\n * but for now, it works as when the save is on other sections, we\n * ensure that the summary is being calculated properly as well.\n * For example, when the client 2 is checked as not included in the\n * Client Summary section, at least we know that this will be recalculated\n * @param index\n */\n convertToRawData(index?: number);\n convertToRawData () {\n this.c1PortfolioSummary()\n this.c2PortfolioSummary()\n this.othersPortfolioSummary()\n return super.convertToRawData()\n }\n\n extractData (rawKycForm: any) {\n const data = {}\n Object.keys(this).forEach((key) => {\n const summary = rawKycForm[snakeCase(key)]\n if (summary) {\n Object.keys(summary).forEach((role) => {\n Object.keys(summary[role]).forEach((field) => {\n if (!this.existingInvestSummary[role]) {\n this.existingInvestSummary[role] = {}\n }\n this.existingInvestSummary[role][field] = summary[role][field] ? summary[role][field] : this.defaultValue\n })\n })\n }\n })\n return data\n }\n}\n","import { range } from 'lodash'\nimport { ProductMetaData } from '../ProductMetaData'\n\nexport const CoveringTypeOptions = [\n {\n label: 'Comprehensive - Classic',\n value: 'comprehensive-classic'\n },\n {\n label: 'Comprehensive - Premier',\n value: 'comprehensive-premier'\n },\n {\n label: 'Third Party Fire & Theft',\n value: 'thirdpartyfiretheft'\n },\n {\n label: 'Third Party Fire Only',\n value: 'thirdpartyfireonly'\n }\n]\n\nexport const NcdOptions = () => {\n return range(0, 60, 5).map((pc) => {\n return {\n label: pc + '%',\n value: `${pc}`\n }\n })\n}\nexport class GiMotor extends ProductMetaData {\n insuranceClass = undefined\n hpCompany = undefined\n coverNoteNo = undefined\n coverNoteIssueDate = undefined\n coveringType = undefined\n grossPremium = undefined\n gst = undefined\n vehicleMake = undefined\n vehicleModel = undefined\n vehicleNo = undefined\n engineCapacity = undefined\n sittingCapacity = undefined\n registrationYear = undefined\n drivingExperience = undefined\n ncd = undefined\n commissionRate = undefined\n commissionPayment = undefined\n commissionPayable = undefined\n grossCommissionEarned = undefined\n\n afterExtractData (data) {\n // data.investmentAmount = Number(data.investmentAmount)\n // data.upfrontFees = Number(data.upfrontFees)\n // data.transactionFees = Number(data.transactionFees)\n // data.upfrontComm = Number(data.upfrontComm)\n return data\n }\n\n convertToRawData () {\n const raw = super.convertToRawData()\n return raw\n }\n}\n","module.exports = __webpack_public_path__ + \"img/notice.09f95e9b.svg\";","import { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\n\nexport class PolicyClientMeta extends Meta {\n @RawKey('_oid')\n oid = ''\n\n @RawKey('accountType')\n accountType = ''\n\n title = ''\n citizenship = ''\n nationalityOthers = undefined\n nationalityOthers2 = undefined\n gender = undefined\n dob = undefined\n occupation = undefined\n identityType = undefined\n maritalStatus = undefined\n registrationDate = undefined\n residentialAddressOne = undefined\n companyAddressOne = undefined\n postalCodeOne = undefined\n countryOfResidenceOne = undefined\n residentialAddressTwo = undefined\n companyAddressTwo = undefined\n postalCodeTwo = undefined\n countryOfResidenceTwo = undefined\n mailingAddress = undefined\n mailingPostalCode = undefined\n mailingCountry = undefined\n companyAddressOnePostalCode = undefined\n companyAddressOneCountry = undefined\n companyAddressTwoPostalCode = undefined\n companyAddressTwoCountry = undefined\n mobileNoOne = undefined\n officeNoOne = undefined\n homeNoOne = undefined\n emailOne = undefined\n mobileNoTwo = undefined\n officeNoTwo = undefined\n homeNoTwo = undefined\n emailTwo = undefined\n exactDuties = undefined\n companyName = undefined\n annualIncomeRange = undefined\n highestEducationLevel = undefined\n spokenLanguage: string[] = []\n spokenLanguageOthers = undefined\n writtenLanguage: string[] = []\n writtenLanguageOthers = undefined\n isAccreditedInvestor: boolean = undefined\n isOverseasInvestor: boolean = undefined\n passedCka: boolean = undefined\n selectedClient: boolean = undefined\n hasBo: boolean = undefined\n hasPep: boolean = undefined\n pdpaMarketing: Array = []\n pepNameList: Array = []\n boName = ''\n payingPremium = ''\n nameOfPayor = ''\n occupationPayor = ''\n contactPayor = ''\n payorRelationship = ''\n nricppPayor = ''\n payorReasons = ''\n highRisk = ''\n complianceReview = ''\n complianceReviewDate: number = undefined\n complianceRemarks = ''\n ceoReview = ''\n ceoReviewDate: number = undefined\n ceoRemarks = ''\n highRiskReason = ''\n highRiskReasonOther = ''\n amlScreeningDoneBy = ''\n resolutionStatus = ''\n riskStatus = ''\n reason = ''\n notes = ''\n riskProfile = ''\n replacement = ''\n clientCallbackSelectedFc = ''\n premiumExceed = ''\n employmentStatus = ''\n}\n","import { Ignore, isIgnore } from '@master/annotation/Ignore'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { isUndefined, snakeCase } from 'lodash/fp'\nimport { ArrayBase } from '../../../ArrayBase'\nimport { pv, sum, valueIsUndefined } from './../math'\n\nexport default class DependantsProtectionClient extends ArrayBase {\n @Ignore()\n projectSettings: IProjectSettings\n\n type = 'p6_c'\n\n depName = ''\n preferredHospitalType = ''\n preferredWardType = ''\n riderDeductible = ''\n existingCoverage = ''\n\n totalFundsRequired?: number = undefined\n iiLessExisting?: number = undefined\n iSurplus?: number = undefined\n\n annualExpenses?: number = undefined\n yearsRequired?: number = undefined\n infAdjusted?: number = undefined\n lumpSum?: number = undefined\n medicalTreatment?: number = undefined\n estimatedAmount?: number = undefined\n otherFunds?: number = undefined\n iiSurplus?: number = undefined\n\n finalExpenses?: number = undefined\n loans?: number = undefined\n others?: number = undefined\n totalCashNeeds?: number = undefined\n ivLessExisting?: number = undefined\n ivSurplus?: number = undefined\n\n @Ignore()\n defaultRate?: number\n\n @Ignore()\n disabledInput = false\n\n constructor (projectSettings: IProjectSettings, id = 'p6') {\n super()\n this.type = `${id}_c`\n this.projectSettings = projectSettings\n }\n\n /**\n * this is to override default behavior where p6 is transformed to p_6\n */\n snakeCaseKey (key: string) {\n return this.type + snakeCase(`${this.curIndex + this.startIndex} ${key}`)\n }\n\n setupDefaultRate (inDefaultRate: number) {\n this.defaultRate = inDefaultRate\n if (isUndefined(this.infAdjusted)) this.infAdjusted = this.defaultRate\n }\n\n // ii. In the Event of Critical Illness\n get criticalIllnessSurplus () {\n if (valueIsUndefined(this.iiLessExisting) && valueIsUndefined(this.totalFundsRequired)) return null\n return sum(this.iiLessExisting, -this.totalFundsRequired)\n }\n\n // iii. In the Event of Disability\n get annualIncome () {\n if (valueIsUndefined(this.annualExpenses)) return null\n return (this.projectSettings.needs.period * this.annualExpenses) || 0\n }\n\n get disabilityLumpSum () {\n if (valueIsUndefined(this.annualIncome) && valueIsUndefined(this.yearsRequired) && valueIsUndefined(this.infAdjusted)) return null\n const total = pv(this.annualIncome, this.yearsRequired, this.infAdjusted)\n return Math.round(total)\n }\n\n get disabilityEstimatedAmount () {\n return sum(this.disabilityLumpSum, this.medicalTreatment)\n }\n\n get disabilitySurplus () {\n if (valueIsUndefined(this.disabilityEstimatedAmount) && valueIsUndefined(this.otherFunds)) return null\n return sum(-this.disabilityEstimatedAmount, this.otherFunds)\n }\n\n // iv. In the Event of Death\n get deathCashNeeds () {\n return sum(this.finalExpenses, this.loans, this.others)\n }\n\n get deathSurplus () {\n if (valueIsUndefined(this.ivLessExisting) && valueIsUndefined(this.deathCashNeeds)) return null\n return sum(this.ivLessExisting, -this.deathCashNeeds)\n }\n\n get shouldDisabledInput () {\n return this.disabledInput || !this.depName\n }\n\n clear () {\n Object.keys(this).forEach(key => {\n if (key === 'type' || isIgnore(this, key)) {\n return\n }\n this[key] = null\n })\n }\n}\n","import { FormBase, signature } from '../FormBase'\n\nexport class CPFAuthorization extends FormBase {\n // shared.name\n // shared.nric\n // shared.repCode\n type = 'cpf-authorization'\n data = {\n agree: false\n }\n}\n","import { Default } from '@master/annotation/Default'\nimport RiderProduct from '@master/model/kyc-form/product/RiderProduct'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport ProductBase from './ProductBase'\nimport { PaymentModeList } from '@master/model/options/PaymentModeOptions'\nimport { ClientChoiceOptions } from '@master/model/options/ClientChoiceOptions'\n\nexport default class BasicProduct extends ProductBase {\n clientIndex?: 0 | 1 = 0\n jointClientIndex?: 0 | 1 = undefined\n\n // insurance\n lifeAssured = ''\n lifeAssuredTwo = ''\n\n paymentMode: '' | typeof PaymentModeList[number] = ''\n policyTerm: number = undefined\n premiumTerm: number = undefined\n\n @Default([])\n riders: RiderProduct[] = []\n\n afterExtractData (data: { riders: any[] }) {\n const defaultMap = super.afterExtractData(data)\n\n data.riders = data.riders.map((element) => {\n // eslint-disable-next-line dot-notation\n const rider = new RiderProduct(this.riskRatingService, defaultMap['clientIndex'])\n Object.assign(rider, rider.extractData(element))\n return rider\n })\n\n Object.assign(data, defaultMap)\n return data\n }\n\n convertToRawData () {\n const data: any = super.convertToRawData()\n\n // Convert riders\n const rawRiders = this.riders.map(riderProduct => riderProduct.convertToRawData())\n data.riders = rawRiders\n\n return data\n }\n\n get totalAnnualisedPremium () {\n let total = 0\n if (this.isAcceptedProduct) {\n total += this.annualisedPremium\n total += this.riders.reduce((total, rider) => total + rider.annualisedPremium, 0)\n }\n\n // Ensure that the number is always to 2 decimal places and not\n // random floating point value if the total is decimal place value\n if (total % 1 !== 0) {\n total = Math.round((total + Number.EPSILON) * 100) / 100\n }\n\n return total\n }\n\n get totalSinglePremium () {\n let total = 0\n if (this.isAcceptedProduct) {\n total += this.singlePremium\n total += this.riders.reduce((total, rider) => total + rider.singlePremium, 0)\n }\n\n // Ensure that the number is always to 2 decimal places and not\n // random floating point value if the total is decimal place value\n if (total % 1 !== 0) {\n total = Math.round((total + Number.EPSILON) * 100) / 100\n }\n\n return total\n }\n\n constructor (riskRatingService: IRiskRatingService) {\n super(riskRatingService)\n\n this.riskRatingService = riskRatingService\n\n const rejectValues = ['reject', 'kiv']\n // add proxy to get onChange on clientChoice and set all the riders to the save value if client reject or kiv\n // this is used in Our Recommendation client's decision tab\n // to make sure user can't reject or kiv on basic product and make riders accept or own choice at the same time\n return new Proxy(this, {\n set: function (obj, prop, value) {\n if (prop === 'clientChoice' && rejectValues.includes(value)) {\n obj.riders.forEach(rider => { rider.clientChoice = value as keyof typeof ClientChoiceOptions })\n }\n obj[prop] = value\n return true\n }\n })\n }\n}\n","import { riderProductTypes, insuranceProductTypes, insuranceProductCategories, investmentProductTypes, investmentProductCategories, ilpProductTypes } from '@master/model/common/ProductMeta'\nimport { NewProductDTO } from '../api'\n\nexport class NewProductModel implements NewProductDTO {\n issuer = ''\n issuer_oid = ''\n isBscClassify = undefined\n productFamilyName = ''\n productFamilyCode = ''\n productCode = ''\n name = ''\n type = ''\n category = ''\n needsCovered = [] as any\n recommendedRiskProfile = undefined\n riskRating = ''\n others = ''\n paymentType = [] as any\n premiumType = [] as any\n status = undefined\n launchDateMillis = undefined\n withdrawnDateMillis = undefined\n reasons = ''\n limitations = ''\n supplementaryBenefits = ''\n commReceivableFromDateMillis = undefined\n commReceivableToDateMillis = undefined\n}\n\nexport class ProductModel implements NewProductDTO {\n pky: number;\n oid: string;\n issuer?: string;\n issuer_oid?: string;\n isBscClassify?: number;\n productFamilyName?: string;\n productFamilyCode?: string;\n productCode?: string;\n name?: string;\n type?: string;\n category?: string;\n needsCovered = [] as any\n recommendedRiskProfile?: number;\n riskRating?: string;\n others?: string;\n paymentType = [] as any\n premiumType = [] as any\n status?: number;\n launchDateMillis?: number;\n withdrawnDateMillis?: number;\n reasons?: string;\n limitations?: string;\n supplementaryBenefits?: string;\n commReceivableFromDateMillis?: number;\n commReceivableToDateMillis?: number;\n\n isRider () {\n return this.isInclude(riderProductTypes, this.type) || this.isInclude(['rider'], this.category)\n }\n\n isInsurance () {\n return this.isInclude(insuranceProductTypes, this.type) || this.isInclude(insuranceProductCategories, this.category)\n }\n\n isInvestment () {\n return this.isInclude(investmentProductTypes, this.type) || this.isInclude(investmentProductCategories, this.category)\n }\n\n isILP () {\n return this.isInclude(ilpProductTypes, this.type) || this.isInclude([], this.category)\n }\n\n // Product filter is case insensitive\n // filter list make it to support both string & Regex to support more broader cases\n // Known issue in LINC is product category as 'hospital cash insurance' will show under investment\n // due to LINC include any category contain 'cash'\n isInclude (checkList: (string | RegExp)[], checkValue: string) {\n checkValue = checkValue.toLowerCase()\n return checkList.some(check => {\n if (check instanceof RegExp) {\n return check.test(checkValue)\n } else {\n return check === checkValue\n }\n })\n }\n}\n","export const RelationshipOptions = [\n { value: '', label: '' },\n { value: 'Aunt', label: 'Aunt' },\n { value: 'Authorised Signatory', label: 'Authorised Signatory' },\n { value: 'Brother', label: 'Brother' },\n { value: 'Cousin', label: 'Cousin' },\n { value: 'Daughter', label: 'Daughter' },\n { value: 'Director', label: 'Director' },\n { value: 'Father', label: 'Father' },\n { value: 'Grandchild', label: 'Grandchild' },\n { value: 'Grandparent', label: 'Grandparent' },\n { value: 'Legal Guardian', label: 'Legal Guardian' },\n { value: 'Husband', label: 'Husband' },\n { value: 'Mother', label: 'Mother' },\n { value: 'Nephew', label: 'Nephew' },\n { value: 'Niece', label: 'Niece' },\n { value: 'Others', label: 'Others' },\n { value: 'Shareholder', label: 'Shareholder' },\n { value: 'Spouse', label: 'Spouse' },\n { value: 'Son', label: 'Son' },\n { value: 'Sister', label: 'Sister' },\n { value: 'Uncle', label: 'Uncle' },\n { value: 'Ward', label: 'Ward' },\n { value: 'Wife', label: 'Wife' }\n]\n","module.exports = __webpack_public_path__ + \"img/logout.1b2495fc.svg\";","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiResult } from './ApiResult';\n\nexport class ApiError extends Error {\n public readonly url: string;\n public readonly status: number;\n public readonly statusText: string;\n public readonly body: any;\n\n constructor(response: ApiResult, message: string) {\n super(message);\n\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n }\n}","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\n\ntype Resolver = (options: ApiRequestOptions) => Promise;\ntype Headers = Record;\n\ntype Config = {\n BASE: string;\n VERSION: string;\n WITH_CREDENTIALS: boolean;\n TOKEN?: string | Resolver;\n USERNAME?: string | Resolver;\n PASSWORD?: string | Resolver;\n HEADERS?: Headers | Resolver;\n}\n\nexport const OpenAPI: Config = {\n BASE: '',\n VERSION: '1.0',\n WITH_CREDENTIALS: false,\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n};","import { SharedVariable } from '@core/model/SharedVariable'\nimport { container } from 'inversify-props'\nimport { ApiError } from './ApiError'\nimport type { ApiRequestOptions } from './ApiRequestOptions'\nimport type { ApiResult } from './ApiResult'\nimport { OpenAPI } from './OpenAPI'\n\nconst sharedVariable = container.get('SharedVariable')\n\nfunction isDefined (value: T | null | undefined): value is Exclude {\n return value !== undefined && value !== null\n}\n\nfunction isString (value: any): value is string {\n return typeof value === 'string'\n}\n\nfunction isStringWithValue (value: any): value is string {\n return isString(value) && value !== ''\n}\n\nfunction isBlob (value: any): value is Blob {\n return value instanceof Blob\n}\n\nfunction getQueryString (params: Record): string {\n const qs: string[] = []\n Object.keys(params).forEach(key => {\n const value = params[key]\n if (isDefined(value)) {\n if (Array.isArray(value)) {\n value.forEach(value => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n })\n } else {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n }\n }\n })\n if (qs.length > 0) {\n return `?${qs.join('&')}`\n }\n return ''\n}\n\nfunction getUrl (options: ApiRequestOptions): string {\n const path = options.path.replace(/[:]/g, '_')\n const url = `${OpenAPI.BASE}${path}`\n\n if (options.query) {\n return `${url}${getQueryString(options.query)}`\n }\n return url\n}\n\nfunction getFormData (params: Record): FormData {\n const formData = new FormData()\n Object.keys(params).forEach(key => {\n const value = params[key]\n if (isDefined(value)) {\n formData.append(key, value)\n }\n })\n return formData\n}\n\ntype Resolver = (options: ApiRequestOptions) => Promise;\n\nasync function resolve (options: ApiRequestOptions, resolver?: T | Resolver): Promise {\n if (typeof resolver === 'function') {\n return (resolver as Resolver)(options)\n }\n return resolver\n}\n\nasync function getHeaders (options: ApiRequestOptions): Promise {\n const token = await resolve(options, OpenAPI.TOKEN)\n const username = await resolve(options, OpenAPI.USERNAME)\n const password = await resolve(options, OpenAPI.PASSWORD)\n const defaultHeaders = await resolve(options, OpenAPI.HEADERS)\n\n const headers = new Headers({\n Accept: 'application/json',\n ...defaultHeaders,\n ...options.headers\n })\n\n if (isStringWithValue(token)) {\n headers.append('Authorization', `Bearer ${token}`)\n }\n\n if (isStringWithValue(username) && isStringWithValue(password)) {\n const credentials = btoa(`${username}:${password}`)\n headers.append('Authorization', `Basic ${credentials}`)\n }\n\n if (options.body) {\n if (isBlob(options.body)) {\n headers.append('Content-Type', options.body.type || 'application/octet-stream')\n } else if (isString(options.body)) {\n headers.append('Content-Type', 'text/plain')\n } else {\n headers.append('Content-Type', 'application/json')\n }\n }\n return headers\n}\n\nfunction getRequestBody (options: ApiRequestOptions): BodyInit | undefined {\n if (options.formData) {\n return getFormData(options.formData)\n }\n if (options.body) {\n if (isString(options.body) || isBlob(options.body)) {\n return options.body\n } else {\n return JSON.stringify(options.body)\n }\n }\n return undefined\n}\n\nasync function sendRequest (options: ApiRequestOptions, url: string): Promise {\n const request: RequestInit = {\n method: options.method,\n headers: await getHeaders(options),\n body: getRequestBody(options)\n }\n if (OpenAPI.WITH_CREDENTIALS) {\n request.credentials = 'include'\n }\n return await fetch(url, request)\n}\n\nfunction getResponseHeader (response: Response, responseHeader?: string): string | null {\n if (responseHeader) {\n const content = response.headers.get(responseHeader)\n if (isString(content)) {\n return content\n }\n }\n return null\n}\n\nasync function getResponseBody (response: Response): Promise {\n try {\n const contentType = response.headers.get('Content-Type')\n if (contentType) {\n const isJSON = contentType.toLowerCase().startsWith('application/json')\n if (isJSON) {\n return await response.json()\n } else {\n return await response.text()\n }\n }\n } catch (error) {\n console.error(error)\n }\n return null\n}\n\nfunction catchErrors (options: ApiRequestOptions, result: ApiResult): void {\n // if user was session expired or not yet login, redirect to login page\n if (result.status === 401) {\n sharedVariable.vue.$router.push({ name: 'Login', query: { redirect: sharedVariable.vue.$route.fullPath } })\n return\n }\n\n const errors: Record = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors\n }\n\n const error = errors[result.status]\n if (error) {\n throw new ApiError(result, result.body?.message || 'Unknown Error')\n }\n\n if (!result.ok) {\n throw new ApiError(result, 'Generic Error')\n }\n}\n\n/**\n * Request using fetch client\n * @param options The request options from the the service\n * @returns ApiResult\n * @throws ApiError\n */\nexport async function request (options: ApiRequestOptions): Promise {\n const url = getUrl(options)\n const response = await sendRequest(options, url)\n const responseBody = await getResponseBody(response)\n const responseHeader = getResponseHeader(response, options.responseHeader)\n\n const result: ApiResult = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader || responseBody\n }\n\n catchErrors(options, result)\n return result\n}\n","import { RouteConfig } from 'vue-router'\n\nexport const newBusinessRegisterRouter = ((): RouteConfig[] => {\n return [\n {\n path: '/policy-list',\n name: 'Client Policies List',\n component: () => import('@core/pages/new-business-register/components/policy/page/ClientPolicyList.vue')\n },\n {\n path: '/policy/:policyOid',\n name: 'Policy',\n component: () => import('@/views/new-business-register/NewBusinessRegister.vue'),\n redirect: { name: 'Product Overview' },\n children: [\n {\n path: 'overview',\n name: 'Product Overview',\n component: () => import('@core/pages/new-business-register/components/policy/page/NBROverviewPage.vue')\n },\n {\n path: 'detail',\n name: 'Product Details',\n component: () => import('@core/components/PassThrough.vue'),\n redirect: { name: 'NBR Details' },\n children: [\n {\n path: 'nbr',\n name: 'NBR Details',\n component: () => import('@core/pages/new-business-register/components/policy/page/NBRDetailPage.vue')\n },\n {\n path: 'product',\n name: 'Product Information',\n component: () => import('@core/pages/new-business-register/components/policy/page/ProductPage.vue')\n },\n {\n path: 'individuals',\n name: 'Product Entities / Individuals',\n component: () => import('@core/pages/new-business-register/components/policy/page/PolicyIndividualPage.vue')\n },\n {\n path: 'underwriting',\n name: 'Underwriting Details',\n meta: { policies: ['lifeinsurance'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/UnderwritingPage.vue')\n },\n {\n path: 'riders',\n name: 'Rider Details',\n meta: { policies: ['lifeinsurance', 'employeebenefits', 'group-gi', 'group-eb', 'gi-health-group'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/RiderPage.vue')\n },\n {\n path: 'insured-interest',\n name: 'Insured Interest Details',\n meta: { policies: ['gi-motors', 'gi-travel', 'gi-homecontents'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/InsuredInterestDetailPage.vue')\n },\n {\n path: 'premiums',\n name: 'Premium Details',\n meta: { policies: ['gi-others', 'gi-clines', 'gi-plines', 'gi-health-individual', 'gi-motors', 'gi-travel', 'gi-homecontents', 'employeebenefits', 'group-gi', 'group-eb', 'gi-health-group'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/PremiumDetailPage.vue')\n },\n {\n path: 'commission-paid',\n name: 'Commission Paid Details',\n meta: { policies: ['gi-others', 'gi-clines', 'gi-plines', 'gi-health-individual', 'gi-motors', 'gi-travel', 'gi-homecontents'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/CommissionPaidPage.vue')\n },\n {\n path: 'ilp',\n name: 'ILP Details',\n meta: { policies: ['lifeinsurance'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/ILPPage.vue')\n },\n {\n path: 'portfolio',\n name: 'Portfolio',\n meta: { policies: ['collectiveinvestmentscheme'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/TransactionPage.vue')\n },\n {\n path: 'info-sheet',\n name: 'Info Sheet',\n meta: { policies: ['employeebenefits', 'group-gi', 'group-eb', 'gi-health-group'] },\n component: () => import('@core/pages/new-business-register/components/policy/page/InfoSheetPage.vue')\n }\n ]\n },\n {\n path: 'submited-documents',\n name: 'Submitted Documents',\n component: () => import('@core/pages/new-business-register/components/policy/page/SubmittedDocumentPage.vue')\n },\n {\n path: 'intermediaries',\n name: 'Intermediaries',\n component: () => import('@core/pages/new-business-register/components/policy/page/IntermediariesPage.vue')\n }\n ]\n }\n ]\n})()\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ClientDto } from '../models/ClientDto';\nimport type { ClientResponseDto } from '../models/ClientResponseDto';\nimport type { ClientUpdateRequestDTO } from '../models/ClientUpdateRequestDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class ClientService {\n\n /**\n * @returns ClientResponseDto Retrieve a list of clients\n * @throws ApiError\n */\n public static async retrieveClientList(): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/client/list`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async createNewClient(\n requestBody: ClientDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/client/create_new_client`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param clientOid\n * @returns ClientResponseDto\n * @throws ApiError\n */\n public static async retrieveClientWithOid(\n clientOid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/v2/client/info/${clientOid}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ClientResponseDto\n * @throws ApiError\n */\n public static async updateClientData(\n requestBody: ClientUpdateRequestDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/client/update`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","import { FormBase } from './FormBase'\nimport { BDMAssessment } from './forms/BDMAssessment'\nimport { BusinessInterestShareholding } from './forms/BusinessInterestShareholding'\nimport { CPFAuthorization } from './forms/CPFAuthorization'\nimport { DeclarationClauses } from './forms/DeclarationClauses'\nimport { EmployerConsent } from './forms/EmployerConsent'\nimport { FitAndProper } from './forms/FitAndProper'\nimport { GeneralDeclaration } from './forms/GeneralDeclaration'\nimport { LetterOfUndertaking } from './forms/LetterOfUndertaking'\nimport { NameCardOrder } from './forms/NameCardOrder'\nimport { Personal } from './forms/Personal'\nimport { PrevEmploymentInquiry } from './forms/PrevEmploymentInquiry'\nimport { QualificationEmployment } from './forms/QualificationEmployment'\nimport { RecruitManagerAssessment } from './forms/RecruitManagerAssessment'\nimport { RecruitSubsidyReimbursement } from './forms/RecruitSubsidyReimbursement'\nimport { SecuritiesDealing } from './forms/SecuritiesDealing'\nimport { Shared } from './forms/Shared'\nimport { TransferRulesAcknowledgement } from './forms/TransferRulesAcknowledgement'\n\nexport type DataForm = {\n path: string;\n displayName: string;\n model?: typeof FormBase;\n name: string;\n component: () => void;\n}\nexport const FormsList: DataForm[] = [\n {\n path: 'info',\n displayName: 'Representative Information',\n model: Shared,\n name: 'recruit-forms-shared',\n component: () => import('@core/pages/recruit/forms/SharedForm.vue')\n },\n {\n path: 'personal',\n displayName: 'Personal Information',\n model: Personal,\n name: 'recruit-forms-personal',\n component: () => import('@core/pages/recruit/forms/PersonalInfo.vue')\n },\n {\n path: 'general-declaration',\n displayName: 'General Declaration',\n model: GeneralDeclaration,\n name: 'recruit-forms-general-declaration',\n component: () => import('@core/pages/recruit/forms/GeneralDeclaration.vue')\n },\n {\n path: 'fit-proper',\n displayName: 'Fit and Proper Criteria',\n model: FitAndProper,\n name: 'recruit-forms-fit-proper',\n component: () => import('@core/pages/recruit/forms/FitAndProper.vue')\n },\n {\n path: 'quali-employ',\n displayName: 'Qualification & Employment',\n model: QualificationEmployment,\n name: 'recruit-forms-qualification-employment',\n component: () => import('@core/pages/recruit/forms/QualificationEmployment.vue')\n },\n {\n path: 'sec-deal',\n displayName: 'Letter of Undertaking for Securities Dealing',\n model: SecuritiesDealing,\n name: 'recruit-forms-sec-deal',\n component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n },\n {\n path: 'bi-so',\n displayName: 'Declaration of Business Interest & Shareholdings / Ownership',\n model: BusinessInterestShareholding,\n name: 'recruit-forms-bi-so',\n component: () => import('@core/pages/recruit/forms/DeclarationBusinessInterest.vue')\n },\n {\n path: 'name-card-order',\n displayName: 'Name Card Order',\n model: NameCardOrder,\n name: 'recruit-forms-name-card-order',\n component: () => import('@core/pages/recruit/forms/NameCardOrderForm.vue')\n },\n {\n path: 'transfer-rules',\n displayName: 'Transfer Rules Acknowledgement',\n model: TransferRulesAcknowledgement,\n name: 'recruit-forms-name-transfer-rules',\n component: () => import('@core/pages/recruit/forms/TransferRulesAcknowledgement.vue')\n },\n {\n path: 'cpf',\n displayName: 'CPF Authorization',\n model: CPFAuthorization,\n name: 'recruit-forms-cpf',\n component: () => import('@core/pages/recruit/forms/CpfAuthorization.vue')\n },\n {\n path: 'undertaking',\n displayName: 'Letter of Undertaking Without CMFAS M8 & MA8',\n model: LetterOfUndertaking,\n name: 'recruit-forms-undertaking',\n component: () => import('@core/pages/recruit/forms/LetterOfUndertaking.vue')\n },\n {\n path: 'prev-employment',\n displayName: 'Current and/or Previous Employment/Appointment Inquiry',\n model: PrevEmploymentInquiry,\n name: 'recruit-forms-prev-employment',\n component: () => import('@core/pages/recruit/forms/PrevEmploymentInquiry.vue')\n },\n {\n path: 'declaration-clauses',\n displayName: 'Declaration Clauses Acknowledgement',\n model: DeclarationClauses,\n name: 'recruit-forms-declaration-clauses',\n component: () => import('@core/pages/recruit/forms/DeclarationClauses.vue')\n },\n {\n path: 'rma',\n displayName: 'Recruiting Manager Assessment',\n model: RecruitManagerAssessment,\n name: 'recruit-forms-rma',\n component: () => import('@core/pages/recruit/forms/RecruitManagerAssessment.vue')\n },\n {\n path: 'bdma',\n displayName: 'BDM Assessment',\n model: BDMAssessment,\n name: 'recruit-forms-bdma',\n component: () => import('@core/pages/recruit/forms/BdmAssessment.vue')\n },\n {\n path: 'employer-consent',\n displayName: 'Employer Consent',\n model: EmployerConsent,\n name: 'recruit-forms-ec',\n component: () => import('@core/pages/recruit/forms/EmployerConsent.vue')\n },\n {\n path: 'rsr',\n displayName: 'Recruitment Subsidy Reimbursement Form',\n model: RecruitSubsidyReimbursement,\n name: 'recruit-forms-rsr',\n component: () => import('@core/pages/recruit/forms/RecruitSubsidyReimbursement.vue')\n }\n // {\n // path: 'sec-deal-1',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal-1',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal-2',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal-2',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal-3',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal-4',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal-5',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal-6',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // }\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },{\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // },\n // {\n // path: 'sec-deal',\n // displayName: 'Letter of Undertaking for Securities Dealing',\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // }\n // model: SecuritiesDealing,\n // name: 'recruit-forms-sec-deal',\n // component: () => import('@core/pages/recruit/forms/SecuritiesDealingForm.vue')\n // }\n]\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport DeathProtectionClient from '@master/model/kyc-form/need-analysis/protection/DeathProtectionClient'\n\nexport function DeathProtectionStructure (defaultValue: { available1: number; available2: number; required1: number; annualIncome: number }) {\n const structure: FNAStructure = {\n title: 'P1. Death Protection',\n data: [\n {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Desired annual income required to cover family expenses ($)',\n key: 'income',\n type: 'currency',\n default: defaultValue?.annualIncome,\n validationMsg: 'Death Protection requires to indicate annual income.'\n }, {\n label: 'Number of years required',\n key: 'yearsRequired',\n validationMsg: 'Death Protection requires to indicate years required.'\n }, {\n label: 'Inflation adjusted rate return (%)',\n key: 'infAdjReturn',\n defaultTo: 'defaultRate',\n validationMsg: 'Death Protection requires to indicate inflation adjusted rate return.'\n }, {\n label: 'Funds required to cover income(PV) ($)',\n key: 'fundsRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '+ Total liabilities ($)',\n key: 'required1',\n type: 'currency',\n default: defaultValue?.required1,\n validationMsg: 'Death Protection requires to indicate total liabilities.'\n }, {\n label: '+ Final expenses (includes funeral expenses, last hospitalization bill) ($)',\n key: 'required2',\n type: 'currency',\n validationMsg: 'Death Protection requires to indicate final expenses.'\n }, {\n label: '+ Other funding needs: ($)',\n key: 'required3',\n type: 'currency',\n validationMsg: 'Death Protection requires to indicate others funding needs.'\n }, {\n label: 'Total required ($)',\n key: 'totalRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '- Existing life insurance ($)',\n key: 'available1',\n type: 'currency',\n default: defaultValue?.available1,\n validationMsg: 'Death Protection requires to indicate existing life insurance.'\n }, {\n label: '- Other funds available ($)',\n key: 'available2',\n type: 'currency',\n default: defaultValue?.available2,\n validationMsg: 'Death Protection requires to indicate other funds available.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import 'reflect-metadata'\n\nconst expandableMetadataKey = Symbol('ExpandableArray')\n\nexport type ExpandableArrayConfig = {\n maxSize: number;\n clone: () => {};\n}\n/**\n * Add Expandable Properties for target array\n * @param maxSize the size of the array allowed (number of items)\n * @param clone function to construct item to be added when expansion is required\n */\nexport function ExpandableArray ({ maxSize, clone }: ExpandableArrayConfig) {\n return Reflect.metadata(expandableMetadataKey, { maxSize, clone })\n}\n\n/**\n * Get MaxArraySize value, if no MaxArraySize value set on the property key return undefined\n * @param target Target object\n * @param propertyKey property key of target object\n */\nexport function getMaxSize (target: any, propertyKey: string) {\n return Reflect.getMetadata(expandableMetadataKey, target, propertyKey)?.maxSize\n}\n\n/**\n * Get cloning function for the class\n * @param target Target object\n * @param propertyKey property key of target object\n */\nexport function getClone (target: any, propertyKey: string) {\n return Reflect.getMetadata(expandableMetadataKey, target, propertyKey)?.clone\n}\n","import { ProductMetaData } from '../ProductMetaData'\n\nexport const DwellingOptions = [\n { value: '', label: '' },\n { value: 'HDB', label: 'HDB' },\n { value: 'Condominium', label: 'Condominium' },\n { value: 'Pte Apartment', label: 'Pte Apartment' },\n { value: 'Terrace', label: 'Terrace' },\n { value: 'Detached', label: 'Detached' },\n { value: 'Semi-Detached', label: 'Semi-Detached' },\n { value: 'Others', label: 'Others' }\n]\nexport class GiHomeContents extends ProductMetaData {\n insuranceClass = undefined\n dwellingType = undefined\n othersDwellingType = undefined\n houseNo = undefined\n unitNo = undefined\n streetName = undefined\n building = undefined\n postalCode = undefined\n buildInArea = undefined\n underinsuredRemarks = undefined\n\n grossPremium = undefined\n gst = undefined\n commissionRate = undefined\n commissionPayment = undefined\n commissionPayable = undefined\n grossCommissionEarned = undefined\n}\n","import { ProductMetaData } from '../ProductMetaData'\n\nexport const SourceOfFundsOptions = [\n { value: 'cash', label: 'Cash' },\n { value: 'cpf-oa', label: 'CPF-OA' },\n { value: 'cpf-sa', label: 'CPF-SA' },\n { value: 'cpf-ma', label: 'CPF-MA' },\n { value: 'srs', label: 'SRS' }\n]\nexport class CIS extends ProductMetaData {\n investmentAmount = undefined\n onshoreOffshore = undefined\n upfrontFees = undefined\n transactionFees = undefined\n sourceOfFund = undefined\n upfrontComm = undefined\n\n afterExtractData (data) {\n data.investmentAmount = Number(data.investmentAmount)\n data.upfrontFees = Number(data.upfrontFees)\n data.transactionFees = Number(data.transactionFees)\n data.upfrontComm = Number(data.upfrontComm)\n return data\n }\n}\n","import { ProductMetaData } from '../ProductMetaData'\n\nexport const CoverageTypeOptions = [\n { value: '', label: '' },\n { value: 'basic', label: 'Basic' },\n { value: 'plus', label: 'Plus' },\n { value: 'member', label: 'Member' },\n { value: 'memberfamily', label: 'Member & Family' },\n { value: 'silver', label: 'Silver' },\n { value: 'gold', label: 'Gold' },\n { value: 'platinum', label: 'Platinum' },\n { value: 'diamond', label: 'Diamond' },\n { value: 'self', label: 'Self' },\n { value: 'couple', label: 'Couple' },\n { value: 'n.a.', label: 'N.A.' }\n]\nexport class EmployeeBenefit extends ProductMetaData {\n insuranceClass = undefined\n paymentMethod = undefined\n sumInsured = undefined\n\n grossPremium = undefined\n gst = undefined\n commission = undefined\n infosheetFileUploaded = undefined\n infosheetFileName = undefined\n}\n","import { ProductMetaData } from '../ProductMetaData'\n\nexport const ServiceTypeOptions = [\n { value: '', label: '' },\n { value: 'wills', label: 'Wills' },\n { value: 'financialplanning', label: 'Financial Planning' },\n { value: 'mortgageloan', label: 'Mortgage Loan' },\n { value: 'businessfinancing', label: 'Business Financing' },\n { value: 'businessconsulting', label: 'Business Consulting' },\n { value: 'trustplanning', label: 'Trust Planning' },\n { value: 'estateplanning', label: 'Estate Planning' },\n { value: 'others', label: 'Others' }\n]\nexport class FBS extends ProductMetaData {\n nextReviewDate = undefined\n feesReceivable = undefined\n typeOfService = undefined\n remarks = undefined\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { TypeBase } from '@master/model/TypeBase'\nimport { IDateService } from '@master/services/IDateService'\nimport { inject } from 'inversify-props'\n\nexport class ClientProductILPRP extends TypeBase {\n @Ignore()\n @inject()\n protected dateService: IDateService\n\n constructor (idx: number) {\n super(`ilp_${idx}_regular`)\n }\n\n name = ''\n amt = undefined\n freq = undefined\n approvedDate = undefined\n endDate = undefined\n unitBalance = undefined\n riskClass = undefined\n cash = undefined\n stock = undefined\n bonds = undefined\n\n afterExtractData (data) {\n data.unitBalance = Number(data.unitBalance)\n data.premium = Number(data.premium)\n data.cash = Number(data.cash)\n data.stock = Number(data.stock)\n data.bonds = Number(data.bonds)\n // existing data store date string\n data.approvedDate = new Date(data.approvedDate)?.getTime()\n data.endDate = new Date(data.endDate)?.getTime()\n return data\n }\n\n formattedDate (unixTime: number | string) {\n return this.dateService.format(Number(unixTime), 'YYYY-MM-DD')\n }\n\n convertToRawData () {\n const raw = super.convertToRawData()\n // special handling to store the date as string ( existing data )\n raw[this.snakeCaseKey('approvedDate')] = this.formattedDate(raw[this.snakeCaseKey('approvedDate')])\n raw[this.snakeCaseKey('endDate')] = this.formattedDate(raw[this.snakeCaseKey('endDate')])\n return raw\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { TypeBase } from '@master/model/TypeBase'\nimport { IDateService } from '@master/services/IDateService'\nimport { inject } from 'inversify-props'\n\nexport class ClientProductILPSP extends TypeBase {\n @Ignore()\n @inject()\n protected dateService: IDateService\n\n constructor (idx: number) {\n super(`ilp_${idx}_single`)\n }\n\n name = ''\n amt = undefined\n approvedDate = undefined\n unitBalance = undefined\n riskClass = undefined\n cash = undefined\n stock = undefined\n bonds = undefined\n\n afterExtractData (data) {\n data.unitBalance = Number(data.unitBalance)\n data.premium = Number(data.premium)\n data.cash = Number(data.cash)\n data.stock = Number(data.stock)\n data.bonds = Number(data.bonds)\n // existing data store date string\n data.approvedDate = new Date(data.approvedDate)?.getTime()\n return data\n }\n\n formattedDate (unixTime: number | string) {\n return this.dateService.format(Number(unixTime), 'YYYY-MM-DD')\n }\n\n convertToRawData () {\n const raw = super.convertToRawData()\n // special handling to store the date as string ( existing data )\n raw[this.snakeCaseKey('approvedDate')] = this.formattedDate(raw[this.snakeCaseKey('approvedDate')])\n return raw\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { TypeBase } from '@master/model/TypeBase'\nimport { IDateService } from '@master/services/IDateService'\nimport { inject } from 'inversify-props'\n\nexport class ClientProductRider extends TypeBase {\n @inject()\n protected dateService: IDateService\n\n constructor (idx: number) {\n super(`rider_${idx}`)\n }\n\n name = undefined\n benefitAmt = undefined\n premium = undefined\n ncp = undefined\n effectiveDate = undefined\n expiryDate = undefined\n duration = undefined\n\n @Ignore()\n dateFields = ['effectiveDate', 'expiryDate']\n\n afterExtractData (data) {\n data.benefitAmt = Number(data.benefitAmt)\n data.premium = Number(data.premium)\n data.ncp = Number(data.ncp)\n // existing data store date string\n this.dateFields.forEach((dtf) => {\n if (data[dtf]) {\n data[dtf] = new Date(data[dtf])?.getTime()\n }\n })\n return data\n }\n\n formattedDate (unixTime: number | string) {\n return this.dateService.format(Number(unixTime), 'YYYY-MM-DD')\n }\n\n convertToRawData () {\n const raw = super.convertToRawData()\n // special handling to store the date as string ( existing data )\n const dateFields = ['effectiveDate', 'expiryDate']\n dateFields.forEach((dtf) => {\n const sckey = this.snakeCaseKey(dtf)\n if (raw[sckey]) {\n raw[sckey] = this.formattedDate(raw[sckey])\n }\n })\n return raw\n }\n}\n","import { ClientProductILPRP } from '../ClientProductILPRP'\nimport { ClientProductILPSP } from '../ClientProductILPSP'\nimport { ClientProductRider } from '../ClientProductRider'\nimport { ProductMetaData } from '../ProductMetaData'\n\nexport const OccupationalRatingOptions = [\n { label: 'NA', value: 'na' },\n { label: '1', value: '1' },\n { label: '2', value: '2' },\n { label: '3', value: '3' },\n { label: '4', value: '4' }\n]\nexport const UnderwritingDecisionOptions = [\n { label: '', value: '' },\n { label: 'Approved as Standard', value: 'approvedasstandard' },\n { label: 'Others', value: 'others' }\n]\nexport class LifeInsurance extends ProductMetaData {\n // life insurance\n sumAssured = undefined\n currency = undefined\n basicModalPremium = undefined\n frequency = undefined\n asp = undefined\n expiryAge = undefined\n issueAge = undefined\n height = undefined\n weight = undefined\n smoker = undefined\n occupationalRating = undefined\n medicalCondition = undefined\n medicalConditionReasons = undefined\n beneficiary = undefined\n underwritingDecision = undefined\n underinsuredUnderwritingDecisionRemarks = undefined\n prematureTermination = undefined\n riders: ClientProductRider[] = []\n ilpsp: ClientProductILPSP[] = []\n ilprp: ClientProductILPRP[] = []\n\n extractAndAssignData (data) {\n super.extractAndAssignData(data)\n this.riders = []\n let i = 1\n while (`rider_${i}_name` in data) {\n const rider = new ClientProductRider(i)\n Object.assign(rider, rider.extractData(data))\n this.riders.push(rider)\n i++\n }\n this.ilpsp = []\n i = 1\n while (`ilp_${i}_single_name` in data) {\n const ilp = new ClientProductILPSP(i)\n Object.assign(ilp, ilp.extractData(data))\n this.ilpsp.push(ilp)\n i++\n }\n this.ilprp = []\n i = 1\n while (`ilp_${i}_regular_name` in data) {\n const ilp = new ClientProductILPRP(i)\n Object.assign(ilp, ilp.extractData(data))\n this.ilprp.push(ilp)\n i++\n }\n // old data compatible\n if (!this.occupationalRating) this.occupationalRating = data.ccupational_rating\n }\n\n convertToRawData () {\n const raw = super.convertToRawData()\n raw.riders.forEach((rider) => {\n Object.assign(raw, rider.convertToRawData())\n })\n raw.ilpsp.forEach((ilp) => {\n console.log(ilp)\n Object.assign(raw, ilp.convertToRawData())\n })\n raw.ilprp.forEach((ilp) => {\n console.log(ilp)\n Object.assign(raw, ilp.convertToRawData())\n })\n delete raw.riders\n delete raw.ilpsp\n delete raw.ilprp\n return raw\n }\n\n get modalPremium () {\n return this.basicModalPremium + this.riders.map(rider => rider.premium).reduce((rider, sum) => {\n sum += rider\n return sum\n }, 0)\n }\n}\n","import { ProductMetaData } from '../ProductMetaData'\n\nexport class Others extends ProductMetaData {\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { Json, needToConvertJson } from '@master/annotation/Json'\nimport { getRawKey, RawKey } from '@master/annotation/RawKey'\nimport { Base } from '@master/model/Base'\nimport { Meta } from '@master/model/common/Meta'\nimport { CIS } from './metadata/CIS'\nimport { EmployeeBenefit } from './metadata/EmployeeBenefit'\nimport { FBS } from './metadata/FBS'\nimport { GiHomeContents } from './metadata/GiHomeContents'\nimport { GiMotor } from './metadata/GiMotor'\nimport { GiOthers } from './metadata/GiOthers'\nimport { GiTravel } from './metadata/GiTravel'\nimport { LifeInsurance } from './metadata/LifeInsurance'\nimport { Others } from './metadata/Others'\n\nexport const StatusOptions = [\n { label: 'Application', value: 'application' },\n { label: 'In-force', value: 'in-force' },\n { label: 'Withdrawn / Surrender', value: 'withdrawnsurrender' },\n { label: 'Lapsed', value: 'lapsed' },\n { label: 'Free look', value: 'freelook' },\n { label: 'Not taken', value: 'nottaken' },\n { label: 'Approved by Ops', value: 'approved_by_ops' },\n { label: 'Pending Approval', value: 'pending' },\n { label: 'Rejected by Ops', value: 'rejected' }\n]\n\nexport const header = [\n '_oid',\n 'client_oid',\n 'servicing_oid',\n 'owners_name',\n 'owners_nric',\n 'name',\n 'policy_number',\n 'type',\n 'insured_name',\n 'status',\n 'business_id'\n]\nexport const ProductTypeOptions = [\n {\n label: 'Life Insurance',\n value: 'lifeinsurance',\n model: new LifeInsurance()\n },\n {\n label: 'Collective Investment Scheme',\n value: 'collectiveinvestmentscheme',\n model: new CIS()\n },\n {\n label: 'GI - Motors',\n value: 'gi-motors',\n model: new GiMotor()\n },\n {\n label: 'GI - Travel',\n value: 'gi-travel',\n model: new GiTravel()\n },\n {\n label: 'GI - Home Contents',\n value: 'gi-homecontents',\n model: new GiHomeContents()\n },\n {\n label: 'GI - Others',\n value: 'gi-others',\n model: new GiOthers()\n },\n {\n label: 'Employee Benefits',\n value: 'employeebenefits',\n model: new EmployeeBenefit()\n },\n {\n label: 'Fee Based Service',\n value: 'feebasedservice',\n model: new FBS()\n },\n {\n label: 'Others',\n value: 'others',\n model: new Others()\n }\n]\nexport type ProductsMetadata = LifeInsurance & CIS & GiMotor & GiTravel & GiHomeContents & GiOthers & EmployeeBenefit & FBS;\nexport class ClientProductMeta extends Meta {\n @RawKey('_oid')\n oid = undefined\n\n clientOid = undefined\n adviserOid = undefined\n introducerOid = undefined\n introducerPct = undefined\n introducerIfam = undefined\n servicingOid = undefined\n servicingPct = undefined\n servicingIfam = undefined\n vestingOid = undefined\n vestingPct = undefined\n vestingIfam = undefined\n ownersOid = undefined\n ownersName = undefined\n ownersNric = undefined\n insuredTitle = undefined\n insuredName = undefined\n insuredNric = undefined\n insuredTitleTwo = undefined\n insuredNameTwo = undefined\n insuredNricTwo = undefined\n productOid = undefined\n name = undefined\n productTypeDetailed = undefined\n productCategory = undefined\n taggedKyc = undefined\n type = undefined\n policyNumber = undefined\n businessId = undefined\n principal = undefined\n status = undefined\n applicationDate = undefined\n opsApprovalDate = undefined\n approvedDate = undefined\n startDate = undefined\n endDate = undefined\n bscClawbackStatus = undefined\n bscClawbackAmount = undefined\n clientRebateStatus = undefined\n clientRebateAmount = undefined\n clientAiStatus = undefined\n\n @Json()\n productMetadata = undefined\n\n @Json()\n clientMetadata = undefined\n\n creationType = undefined\n faceToFace = undefined\n policyProfileRemarks = undefined\n level1ComOid = undefined\n level2ComOid = undefined\n level3ComOid = undefined\n level4ComOid = undefined\n level1ComPct = undefined\n level2ComPct = undefined\n level3ComPct = undefined\n level4ComPct = undefined\n\n extractMetaObject (data: { meta: {}; _oid: string }) {\n Object.keys(this)\n .forEach(key => {\n if (key === 'productMetadata') return\n const rawKey = getRawKey(this, key) || this.snakeCaseKey(key)\n let value = data.meta[rawKey]\n\n if (needToConvertJson(this, key) && value !== undefined) {\n value = JSON.parse(value as string)\n }\n if (this[key] instanceof Base) {\n this[key].extractAndAssignData(value)\n } else {\n this[key] = value\n }\n })\n const metaDataRawValue = data.meta[getRawKey(this, 'productMetadata') || this.snakeCaseKey('productMetadata')]\n this.extractMetaData(metaDataRawValue)\n this.oid = data._oid\n this.afterAssign()\n }\n\n extractMetaData (value) {\n if (needToConvertJson(this, 'productMetadata') && value !== undefined) {\n value = JSON.parse(value as string)\n }\n const productSpecificModel = ProductTypeOptions.find(typ => typ.value === this.type)?.model\n if (productSpecificModel) {\n productSpecificModel.extractAndAssignData(value)\n this.productMetadata = productSpecificModel as ProductsMetadata\n } else {\n throw Error(`Unknown product type : ${this.type}`)\n }\n }\n\n convertToRawData (keys?: string[]) {\n const raw = super.convertToRawData(keys)\n return raw\n }\n\n @Ignore()\n get typeDisplay () {\n return ProductTypeOptions.find(topt => topt.value === this.type)?.label\n }\n\n @Ignore()\n get statusDisplay () {\n return StatusOptions.find(opt => opt.value === this.status)?.label\n }\n}\n","import 'reflect-metadata'\n\nconst defaultMetadataKey = Symbol('Default')\n\n/**\n * Add default value for target property\n * @param defaultValue any value with the same type of target property\n */\nexport function Default (defaultValue: any) {\n return Reflect.metadata(defaultMetadataKey, defaultValue)\n}\n\n/**\n * Get default value, if no default value set on the property key return undefined\n * @param target Target object\n * @param propertyKey property key of target object\n */\nexport function getDefault (target: any, propertyKey: string) {\n return Reflect.getMetadata(defaultMetadataKey, target, propertyKey)\n}\n","import { Base } from '../../Base'\nimport { isEmpty } from 'lodash/fp'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { IClientOptions, IAssuredOptions, FormOptions } from '../FormOptions'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { isSummaryField, SummaryField } from '@master/annotation/SummaryField'\nimport { IExistingPortfolio } from './IExistingPortfolio'\n\nexport default class ExistingPortfolioV2 extends Base implements IExistingPortfolio {\n @MaxChar(20)\n companyName = ''\n\n owner: keyof IClientOptions = ''\n policyInsured: keyof IAssuredOptions = ''\n policyType = '' // JPara specific\n\n @MaxChar(52)\n policyName = ''\n\n @SummaryField('AP')\n premium?: number = null\n\n @MaxChar(20)\n policyTerms = ''\n\n date?: number = null\n\n @SummaryField('DP')\n lifeProtection?: number = null\n\n @SummaryField('TPD')\n disabilityProtection?: number = null\n\n disabilityIncome?: number = null\n\n @SummaryField('PA')\n accidentProtection?: number = null\n\n @SummaryField('CIP')\n criticalIllnessProtection?: number = null\n\n @SummaryField('R&B')\n roomAndBoard?: number = null\n\n @SummaryField('H&S')\n hospitalIncome?: number = null\n\n roomBoardHospitalIncome = ''\n others?: number = null // JPara specific\n\n @SummaryField('Maturity Value (MV)')\n maturityValue?: number = null\n\n maturityAge?: number = null\n\n @MaxChar(36)\n remarks = ''\n\n @Ignore()\n formOptions?: FormOptions\n\n constructor (formOptions: FormOptions = null) {\n super()\n this.formOptions = formOptions\n }\n\n // this is used to excluded the summary fields that do not want to show on plan summary page\n get excludeKeysToShowOnSummary (): string[] {\n return []\n }\n\n getSummaryFields (): { attrName: string; abbre: string }[] {\n const summaryFields: { attrName: string; abbre: string }[] = []\n Object.keys(this).forEach(attr => {\n if (this.excludeKeysToShowOnSummary.includes(attr as any)) return // exclude keys\n const grabSummaryField = isSummaryField(this, attr)\n if (grabSummaryField) {\n summaryFields.push({\n attrName: attr,\n ...grabSummaryField\n })\n }\n })\n return summaryFields\n }\n\n isValid () {\n return !isEmpty(this.owner) && this.owner.length > 0\n }\n\n belongsTo (owner: 'C1' | 'C2') {\n return this.isValid() && this.policyInsured === owner\n }\n\n reset () {\n Object.keys(this).filter(key => {\n return key !== 'type' && key !== 'startIndex' && key !== 'formOptions' && key !== 'curIndex'\n }).map(key => {\n this[key] = null\n })\n }\n}\n","import { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\nimport { Ignore } from '@master/annotation/Ignore'\n\nexport const header = [\n '_oid',\n 'company_details_name',\n 'company_short_name',\n 'company_details_code',\n 'company_details_effective_date',\n 'company_details_status',\n 'company_details_remarks'\n]\n\nexport class CompanyDetailsMeta extends Meta {\n @RawKey('_oid')\n oid = ''\n\n companyDetailsName = ''\n companyShortName = ''\n companyDetailsCode = ''\n companyDetailsEffectiveDate: number | string = ''\n companyDetailsStatus = ''\n companyDetailsRemarks = ''\n\n @Ignore()\n emit = true\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport DisabilityIncomeProtectionClient from '@master/model/kyc-form/need-analysis/protection/DisabilityIncomeProtectionClient'\n\nexport function DisabilityIncomeProtectionStructure (defaultValue: { available1: number; annualIncome: number }) {\n const structure: FNAStructure = {\n title: 'P4. Disability Income Protection',\n data: [\n {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Desired annual income required to sustain lifestyle during disability ($)',\n key: 'income',\n type: 'currency',\n default: defaultValue?.annualIncome,\n validationMsg: 'Disability Income Protection requires to indicate desired annual income.'\n }, {\n label: 'Number of years required',\n key: 'yearsRequired',\n validationMsg: 'Disability Income Protection requires to indicate years required.'\n }, {\n label: 'Inflation adjusted rate return (%)',\n key: 'infAdjReturn',\n defaultTo: 'defaultRate',\n validationMsg: 'Disability Income Protection requires to indicate inflation adjusted rate return.'\n }, {\n label: 'Lump sum required to maintain lifestyle (PV) ($)',\n key: 'fundsRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '+ Cost of medical treatment ($)',\n key: 'required1',\n type: 'currency',\n validationMsg: 'Disability Income Protection requires to indicate the medical cost.'\n }, {\n label: '+ Other funding needs ($)',\n key: 'required2',\n type: 'currency',\n validationMsg: 'Disability Income Protection requires to indicate other funding needs.'\n }, {\n label: 'Estmated amount required for disability ($)',\n key: 'totalRequired',\n type: 'currency',\n disabled: true\n }, {\n label: '- Existing disability insurance ($)',\n key: 'available1',\n type: 'currency',\n default: defaultValue?.available1,\n validationMsg: 'Disability Income Protection requires to indicate existing disability insurance.'\n }, {\n label: 'Other funds available ($)',\n key: 'available2',\n type: 'currency',\n validationMsg: 'Disability Income Protection requires to indicate other funds available.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import { FormBase } from '../FormBase'\n\nexport class TransferRulesAcknowledgement extends FormBase {\n type = 'transfer-rules-acknowledgement'\n // shared.name\n // shared.branch\n\n data = {\n agree: false\n }\n\n get error () {\n return !this.data.agree ? [{ key: 'agree', msg: 'Please read and indicate terms agreement' }] : []\n }\n}\n","import { ClientBase } from '../ClientBase'\nimport { IDateService } from '@master/services/IDateService'\nimport { Default } from '@master/annotation/Default'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\nexport default class SimplePersonalDetails extends ClientBase {\n dob = 0\n gender = ''\n included = false\n maritalStatus = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n name = ''\n\n identityType = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n nric = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n occupation = ''\n\n smoker = ''\n educationLevel = ''\n\n @Default([])\n spokenLanguage: string[] = []\n\n title = ''\n\n @Default([])\n writtenLanguage: string[] = []\n\n @Ignore()\n @Pointer('ROOT.clientDeclaration', 'reviewDate')\n reviewDate?: number = 0\n\n @Ignore()\n dateService: IDateService\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', dateService: IDateService) {\n super(type)\n this.dateService = dateService\n }\n\n @Ignore()\n get age () {\n // cast dob to number to handle MyInfo save dob as string into DB\n return this.dateService.calculateAge(this.reviewDate ? new Date(Number(this.reviewDate)) : new Date(), new Date(Number(this.dob)))\n }\n\n // for calculate other age if needed\n isAboveAge (referAge: number) {\n return this.age >= referAge\n }\n\n isAbove62 () {\n return this.isAboveAge(62)\n }\n\n isSecondaryAndBelow () {\n const validOptions = [undefined, '', 'primaryandbelow', 'secondary']\n return validOptions.includes(this.educationLevel)\n }\n\n isNoGoodEnglish () {\n return !this.spokenLanguage.includes('english') ||\n !this.writtenLanguage.includes('english')\n }\n\n isSelectedClient () {\n let flags = 0\n if (this.isAbove62()) {\n flags++\n }\n if (this.isSecondaryAndBelow()) {\n flags++\n }\n if (this.isNoGoodEnglish()) {\n flags++\n }\n return flags >= 2\n }\n}\n","import SimplePersonalDetails from '@master/model/kyc-form/SimplePersonalDetails'\nimport { IDateService } from '@master/services/IDateService'\nimport { Default } from '@master/annotation/Default'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { InputMaxChar } from '@master/enum/MaxCharsEnum'\n\nexport default class FullPersonalDetails extends SimplePersonalDetails {\n @MaxChar(InputMaxChar.SMALL)\n activitiesSpecified = ''\n\n annualIncome = ''\n citizenship = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n citizenshipSpecified = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n citizenshipSpecified2 = ''\n\n countryOfBirth = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n companyName = ''\n\n @MaxChar(InputMaxChar.SMALL)\n contactEmail = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n contactHome = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n contactMobile = ''\n\n employmentStatus = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n exactDuties = ''\n\n intendedRetirementAge?: number = undefined\n involvedInActivities = ''\n\n @Default([])\n pdpaMarketing: string[] = [] // was ppdaMarketing\n\n @MaxChar(InputMaxChar.XSMALL)\n previousOccupation = '' // was plsSpecify\n\n @MaxChar(InputMaxChar.XSMALL)\n natureOfBusiness = ''\n\n @MaxChar(InputMaxChar.MEDIUM)\n residentialAddress = ''\n\n @MaxChar(InputMaxChar.XXSMALL)\n postalCode = ''\n\n residentialCountry = ''\n\n smoker = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n spokenLanguageSpecified = ''\n\n title = ''\n\n @MaxChar(InputMaxChar.XSMALL)\n writtenLanguageSpecified = ''\n\n @Ignore()\n @Pointer('ROOT.clientDeclaration', 'reviewDate')\n reviewDate?: number = 0\n\n constructor (type: 'client_0' | 'client_1' = 'client_0', dateService: IDateService) {\n super(type, dateService)\n }\n\n afterExtractData (data: any) {\n // client 1 should always be included\n if (this.type === 'client_0') data.included = true\n return data\n }\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport InvestmentNeeds from '@master/model/kyc-form/need-analysis/savings/InvestmentNeeds'\n\nexport function InvestmentStructure () {\n const structure: FNAStructure = {\n title: 'S3. Investment',\n data: [\n {\n label: 'What are you planning for',\n key: 'planning',\n type: 'text',\n ejsClass: 'ejs-plan-div',\n validationMsg: 'Investment requires to indicate what are you planning for.'\n }, {\n label: 'Accumulation period (Years)',\n key: 'period',\n validationMsg: 'Investment requires to indicate accumulation period (Years).'\n }, {\n label: 'Amount needed (FV) ($)',\n key: 'amountFv',\n type: 'currency',\n validationMsg: 'Investment requires to indicate amount needed (FV).'\n }, {\n label: 'Value of fund to be used ($)',\n key: 'fundValue',\n type: 'currency',\n validationMsg: 'Investment requires to indicate value of fund to be used.'\n }, {\n label: 'Interest rate (%)',\n key: 'interestRate',\n defaultTo: 'defaultRate',\n validationMsg: 'Investment requires to indicate interest rate.'\n }, {\n label: '- Total funds available (FV) ($)',\n key: 'totalFundsFv',\n type: 'currency',\n disabled: true\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","module.exports = __webpack_public_path__ + \"img/Icon_Resources.a301f3fb.svg\";","export const EmploymentTypeOptions = [\n { label: '', value: '' },\n { label: 'Full Time', value: 'full-time' },\n { label: 'Part Time', value: 'part-time' },\n { label: 'Contract', value: 'contract' },\n { label: 'Internship', value: 'intern' },\n { label: 'Temporary', value: 'temp' }\n]\n","import { TypeBase } from '../TypeBase'\n\nexport default class RPA extends TypeBase {\n rpaCompleted = false\n question1?: number = undefined\n question2?: number = undefined\n question3?: number = undefined\n question4?: number = undefined\n question5?: number = undefined\n question6?: number = undefined\n agreement = ''\n ownChoice = false\n reviewConfirmation = ''\n riskProfile = '' // chosen risk profile, previously was risk_profile\n riskProfileCalculated = '' // calculated risk profile based on riskScore, previously was risk_score\n riskProfilePreferred = '' // preferred risk profile, previously was risk_profile_preferred\n riskScore = 0 // was rp_result\n // completed = false // was complete_cka_rpa, not required\n\n // RISK PROFILES\n // as_per_questionnaire\n // conservative\n // moderately_conservative\n // balanced\n // moderately_aggressive\n // aggressive\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super(`${type}_rpa`)\n }\n\n get riskProfileResult () {\n let result = ''\n if (this.riskProfile === 'as_per_questionnaire') {\n if (this.agreement === 'no') {\n result = this.riskProfilePreferred\n } else {\n result = this.riskProfileCalculated\n }\n } else {\n result = this.riskProfile\n }\n return result\n }\n}\n","import { FormBase } from '../FormBase'\n\nexport const ReportingTier = [\n { label: '', value: '' },\n { label: 'T1', value: 't1' },\n { label: 'T2', value: 't2' },\n { label: 'T3', value: 't3' }\n]\nexport class RecruitManagerAssessmentFields {\n channel = ''\n reporting: typeof ReportingTier[number]['value'] = ''\n manager = ''\n // managerSignature: signature\n banding: number = undefined// percentage\n bandingExpiry: number = undefined// date\n fsmBanding: number = undefined// percentage\n designation = ''\n rcmdNote = ''\n}\nexport class RecruitManagerAssessment extends FormBase {\n // shared.name\n // shared.nric.value\n // shared.branch\n type = 'recruiting-manager-assessment'\n data: RecruitManagerAssessmentFields = new RecruitManagerAssessmentFields()\n signatures = {\n applicant: '',\n applicantDate: undefined,\n recruiter: '',\n recruiterDate: undefined\n }\n}\n","export enum InputMaxChar {\n XXSMALL = 20,\n XSMALL = 40,\n SMALL = 100,\n MEDIUM = 160,\n LARGE = 300,\n XLARGE = 400,\n XXXLARGE = 900\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport LongTermProtectionClient from '@master/model/kyc-form/need-analysis/protection/LongTermProtectionClient'\n\nexport function LongTermCareProtectionStructure () {\n const structure: FNAStructure = {\n title: 'P5. Long Term Care Protection',\n data: [\n {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Monthly amount needed ($)',\n key: 'amountNeeded',\n type: 'currency',\n validationMsg: 'Long Term Care Protection requires to indicate monthly amount.'\n }, {\n label: 'Preferred benefit payout period (years)',\n key: 'period',\n validationMsg: 'Long Term Care Protection requires to indicate preferred payout period is required.'\n }, {\n label: '- Existing insurance ($)',\n key: 'available1',\n type: 'currency',\n validationMsg: 'Long Term Care Protection requires to indicate existing insurance amount.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import RPA from '@master/model/kyc-form/RPA'\nimport { Default } from '@master/annotation/Default'\n\nexport default class CustomRPA extends RPA {\n @Default('as_per_questionnaire')\n riskProfile = ''\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLoader.vue?vue&type=style&index=0&id=1e01b00e&lang=scss&scoped=true&\"","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type ClientPolicyReportRequestDTO = {\n type: ClientPolicyReportRequestDTO.type;\n startDate?: number;\n endDate?: number;\n issuers?: Array;\n advisersList?: Array;\n nbrApplicationStatus?: string;\n dateFilteringSelection: ClientPolicyReportRequestDTO.dateFilteringSelection;\n fileFormatType?: any;\n}\n\nexport namespace ClientPolicyReportRequestDTO {\n\n export enum type {\n PRODUCTION_MTD_PERSONAL = 'production_mtd_personal',\n PRODUCTION_MTD_SUPERVISOR = 'production_mtd_supervisor',\n PRODUCTION_YTD_PERSONAL = 'production_ytd_personal',\n PRODUCTION_YTD_SUPERVISOR = 'production_ytd_supervisor',\n PRODUCTION_REPORT_CUSTOM_PERSONAL = 'production_report_custom_personal',\n PRODUCTION_REPORT_CUSTOM_SUPERVISOR = 'production_report_custom_supervisor',\n }\n\n export enum dateFilteringSelection {\n OPS_APPROVAL_DATE = 'opsApprovalDate',\n KYC_SUBMISSION_TIMESTAMP = 'kycSubmissionTimestamp',\n }\n\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type DownloadCsvDto = {\n company: string;\n user: string;\n dateType: string;\n from: number;\n to: number;\n status?: DownloadCsvDto.status;\n}\n\nexport namespace DownloadCsvDto {\n\n export enum status {\n PAID = 'paid',\n UNPAID = 'unpaid',\n }\n\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type ReportGeneratorDto = {\n report: number;\n option: any;\n from: number;\n to: number;\n status: ReportGeneratorDto.status;\n}\n\nexport namespace ReportGeneratorDto {\n\n export enum status {\n PAID = 'paid',\n UNPAID = 'unpaid',\n }\n\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type ReportLogDTO = {\n pky: number;\n ctm: number;\n utm: number;\n statementRunNumber: string;\n batch: string;\n runTimestamp: number;\n fromTimestamp: number;\n toTimestamp: number;\n status: ReportLogDTO.status;\n numberProcessed: number;\n}\n\nexport namespace ReportLogDTO {\n\n export enum status {\n INCOMPLETE = 'INCOMPLETE',\n COMPLETE = 'COMPLETE',\n ERROR = 'ERROR',\n '_0' = 0,\n '_1' = 1,\n '_2' = 2,\n }\n\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type ScheduleTimeDto = {\n enable: boolean;\n hideTask?: boolean;\n minute: number;\n hour: number;\n frequency: ScheduleTimeDto.frequency;\n name: ScheduleTimeDto.name;\n email?: string;\n ccEmail?: string;\n}\n\nexport namespace ScheduleTimeDto {\n\n export enum frequency {\n WEEKLY = 'WEEKLY',\n BIWEEKLY = 'BIWEEKLY',\n MONTHLY = 'MONTHLY',\n DAILY = 'DAILY',\n WEEKDAYS = 'WEEKDAYS',\n '_0' = 0,\n '_1' = 1,\n '_2' = 2,\n '_3' = 3,\n '_4' = 4,\n }\n\n export enum name {\n COMMISSION_REPORT = 'COMMISSION_REPORT',\n ADVISER_NAME_SCREENING = 'ADVISER_NAME_SCREENING',\n CLIENT_NAME_SCREENING = 'CLIENT_NAME_SCREENING',\n CORPORATE_NAME_SCREENING = 'CORPORATE_NAME_SCREENING',\n PRESALES_CALLBACK = 'PRESALES_CALLBACK',\n MARKETING_CONSENT = 'MARKETING_CONSENT',\n }\n\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { AddPolicyIndividualDTO } from '../models/AddPolicyIndividualDTO';\nimport type { AssignIntermediaryDTO } from '../models/AssignIntermediaryDTO';\nimport type { ClientPolicyDto } from '../models/ClientPolicyDto';\nimport type { ClientPolicyReportRequestDTO } from '../models/ClientPolicyReportRequestDTO';\nimport type { ClientPolicySearchDTO } from '../models/ClientPolicySearchDTO';\nimport type { ExistingPolicyDto } from '../models/ExistingPolicyDto';\nimport type { FilterPoliciesDTO } from '../models/FilterPoliciesDTO';\nimport type { IntermediaryPoliciesDTO } from '../models/IntermediaryPoliciesDTO';\nimport type { ManualNbrDTO } from '../models/ManualNbrDTO';\nimport type { ManualNbrDTOV2 } from '../models/ManualNbrDTOV2';\nimport type { NbrImportDto } from '../models/NbrImportDto';\nimport type { NBRImportDTOV2 } from '../models/NBRImportDTOV2';\nimport type { NbrProductAutoExtractRequest } from '../models/NbrProductAutoExtractRequest';\nimport type { NbrProductAutoExtractResponse } from '../models/NbrProductAutoExtractResponse';\nimport type { PolicyIndividualDTO } from '../models/PolicyIndividualDTO';\nimport type { PolicySearchResultDto } from '../models/PolicySearchResultDto';\nimport type { ReconReportDTO } from '../models/ReconReportDTO';\nimport type { SyncPolicyIndividualRequestDTO } from '../models/SyncPolicyIndividualRequestDTO';\nimport type { SyncPolicyIndividualResponseDTO } from '../models/SyncPolicyIndividualResponseDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class ClientPolicyService {\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async autoExtractProducts(\n requestBody: NbrProductAutoExtractRequest,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/extract_products`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns PolicySearchResultDto\n * @throws ApiError\n */\n public static async listPoliciesV2(\n requestBody: FilterPoliciesDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/list`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns PolicySearchResultDto\n * @throws ApiError\n */\n public static async existingListPoliciesV2(\n requestBody: FilterPoliciesDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/existing/list`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param oid\n * @returns ClientPolicyDto Return commission\n * @throws ApiError\n */\n public static async getPolicyV2(\n oid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/v2/clientPolicy/getPolicy/${oid}`,\n });\n return result.body;\n }\n\n /**\n * @param policyOid\n * @returns ClientPolicyDto Return list of sub policies\n * @throws ApiError\n */\n public static async getSubPolicy(\n policyOid: string,\n ): Promise> {\n const result = await __request({\n method: 'GET',\n path: `/live/api/v2/clientPolicy/getSubPolicy/${policyOid}`,\n });\n return result.body;\n }\n\n /**\n * @param policyOid\n * @returns ClientPolicyDto Return commission\n * @throws ApiError\n */\n public static async deleteSubPolicy(\n policyOid: string,\n ): Promise {\n const result = await __request({\n method: 'DELETE',\n path: `/live/api/v2/clientPolicy/subPolicy/${policyOid}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ClientPolicyDto\n * @throws ApiError\n */\n public static async saveNewBusinessV2(\n requestBody: ManualNbrDTOV2,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/save_new_business`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param oid\n * @returns PolicyIndividualDTO Return list of policy individuals\n * @throws ApiError\n */\n public static async retrievePolicyIndividuals(\n oid: string,\n ): Promise> {\n const result = await __request({\n method: 'GET',\n path: `/live/api/v2/clientPolicy/policyIndividuals/${oid}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async addNewPolicyIndividuals(\n requestBody: AddPolicyIndividualDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/policyIndividual`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async savePolicyIndividual(\n requestBody: PolicyIndividualDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/policyIndividual/save`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param individualOid\n * @returns any\n * @throws ApiError\n */\n public static async deletePolicyIndividual(\n individualOid: string,\n ): Promise {\n const result = await __request({\n method: 'DELETE',\n path: `/live/api/v2/clientPolicy/policyIndividual/${individualOid}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async generateReconReportV2(\n requestBody: ClientPolicySearchDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/generate-recon-report`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async validateNbrImportV2(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/import/validate`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns NBRImportDTOV2\n * @throws ApiError\n */\n public static async importNbrCsvV2(\n requestBody: Array,\n ): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/import/csv`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns SyncPolicyIndividualResponseDTO\n * @throws ApiError\n */\n public static async syncClientInformation(\n requestBody: SyncPolicyIndividualRequestDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/clientPolicy/syncClient`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param oid\n * @returns ClientPolicyDto Return commission\n * @throws ApiError\n */\n public static async getPolicy(\n oid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/clientPolicy/getPolicy/${oid}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async generateReconReport(\n requestBody: ReconReportDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/generate-recon-report`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async generateAmlReport(\n requestBody: ReconReportDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/generate-aml-report`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @returns any\n * @throws ApiError\n */\n public static async amlSaveCheckResults(): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/aml/save_check_results`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async updatePolicy(\n requestBody: ClientPolicyDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/update_policy`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param type\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async saveIntermediaries(\n type: string,\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/save_intermediaries/${type}`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ClientPolicyDto\n * @throws ApiError\n */\n public static async saveNewBusiness(\n requestBody: ManualNbrDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/save_new_business`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @returns any\n * @throws ApiError\n */\n public static async extractProducts(): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v1/clientPolicy/extract_products`,\n });\n return result.body;\n }\n\n /**\n * @param list\n * @param type\n * @returns any\n * @throws ApiError\n */\n public static async getIntermediaryCsv(\n list: Array,\n type: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/clientPolicy/intermediary-csv`,\n query: {\n 'list': list,\n 'type': type,\n },\n });\n return result.body;\n }\n\n /**\n * @param type\n * @returns IntermediaryPoliciesDTO\n * @throws ApiError\n */\n public static async getIntermediaryPolicies(\n type: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/clientPolicy/intermediary-policies`,\n query: {\n 'type': type,\n },\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async validateExistingPolicies(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/validate-existing-policies`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns ClientPolicyDto\n * @throws ApiError\n */\n public static async importExistingPolicies(\n requestBody: Array,\n ): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/import-existing-policies`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param oid\n * @param isApprove\n * @returns any\n * @throws ApiError\n */\n public static async updateNbrApplicationStatus(\n oid: string,\n isApprove: boolean,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/update-nbr-status/${oid}/${isApprove}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async validateNbrImport(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/validate-nbr-import`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns NbrImportDto\n * @throws ApiError\n */\n public static async importNbrCsv(\n requestBody: Array,\n ): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/import-nbr-csv`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async deletePolicies(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/clientPolicy/delete-policies`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async generateAdhocReports(\n requestBody: ClientPolicyReportRequestDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v3/client-policy-report/generate`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns NbrProductAutoExtractResponse\n * @throws ApiError\n */\n public static async autoExtractProductsV3(\n requestBody: NbrProductAutoExtractRequest,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v3/clientPolicy/extract_products`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","import { FormBase, signature } from '../FormBase'\n\nexport class SecuritiesDealing extends FormBase {\n // shared.name\n // shared.nric\n type = 'securities-dealing'\n\n data = {\n agree: false\n }\n\n get error () {\n const errs = []\n if (!this.data.agree) {\n errs.push({\n key: 'agree',\n msg: 'Please read and confirm agreement on terms'\n })\n }\n return errs\n }\n}\n","export const ActivityStatuses = ['PENDING', 'INPROGRESS', 'PROCESSING', 'COMPLETED', 'READY_FOR_SUBMISSION'] as const\n\nexport class ActivityCols {\n PENDING: ActivityCard[] = []\n INPROGRESS: ActivityCard[] = []\n READY_FOR_SUBMISSION: ActivityCard[] = []\n PROCESSING: ActivityCard[] = []\n COMPLETED: ActivityCard[] = []\n}\n\nexport default class ActivityCard {\n pky: number = undefined\n oid: string = undefined\n name = ''\n status: typeof ActivityStatuses[number] = 'PENDING'\n exams?: any[] = []\n forms?: any[] = []\n uploads?: any[] = []\n ctm: number = undefined\n utm: number = undefined\n\n get cardType () {\n if (this.exams.length > 0) return 'EXAM'\n if (this.forms.length > 0) return 'FORM'\n if (this.uploads.length > 0) return 'UPLOAD'\n }\n\n get displayName () {\n if (this.cardType === 'EXAM') return `${this.name} Certificate`\n if (this.cardType === 'UPLOAD') return `${this.name} Upload`\n if (this.cardType === 'FORM') return 'Recruitment Forms'\n }\n\n get latestExam () {\n if (this.exams.length === 0) return undefined\n const passed = this.exams.find(exam => exam.status === 'PASSED')\n if (passed) return passed\n const pending = this.exams.find(exam => exam.status === 'PENDING')\n if (pending) return pending\n return this.exams[0]\n }\n\n get canSubmit () {\n if (this.cardType === 'EXAM') {\n return this.latestExam && this.latestExam.status === 'PASSED' && this.latestExam.certs.every(cert => {\n return cert.files.length > 0 && cert.status === 'VERIFIED'\n })\n }\n if (this.cardType === 'UPLOAD') return false\n if (this.cardType === 'FORM') return this.forms.every(form => form.signed)\n }\n}\n","module.exports = __webpack_public_path__ + \"img/Icon_Report.7da30699.svg\";","import { IRiskRatingService } from './IRiskRatingService'\n\nconst RiskRatingMap = {\n 1: 'Conservative',\n 2: 'Moderately Conservative',\n 3: 'Balanced',\n 4: 'Moderately Aggressive',\n 5: 'Aggressive'\n} as const\n\nconst rawToValue = {\n conservative: 1,\n moderately_conservative: 2, // eslint-disable-line @typescript-eslint/camelcase\n balanced: 3,\n moderately_aggressive: 4, // eslint-disable-line @typescript-eslint/camelcase\n aggressive: 5\n} as const\n\nexport class RiskRatingService implements IRiskRatingService {\n riskRatingMap () {\n return RiskRatingMap\n }\n\n rawToValueMap () {\n return rawToValue\n }\n}\n","import { SharedVariable } from './../model/SharedVariable'\nimport { SingPassSettings } from './../model/singpass/SingPassSettings'\nimport axios from 'axios'\nimport { cid, container } from 'inversify-props'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport qs from 'qs'\n\nexport default class API {\n private BASE_URL = '/live/api'\n private useNewApi = container.get(cid.IProjectSettings).useNewApi\n private sharedVariable = container.get(cid.SharedVariable)\n\n private projectSettings = container.get(cid.IProjectSettings)\n\n private apiTimeout = 100\n\n timeStampFromServer = (data: {}) => this.GET('/timeStamp', data)\n\n system = {\n information: () => this.GET('/system/information', null)\n }\n\n assumptions = {\n get: (params: {}) => this.GET('/kvmApi/getValues', params),\n update: (params: {}) => this.POST('/kvmApi/setValues', params)\n }\n\n account = {\n login: (data: {}, options?: {}) => this.POST('/account/login', data, false, options),\n loginGet: () => this.GET('/account/login', null),\n loginInfoGet: (data: {}) => this.GET('/account/info/id', data),\n loginMetaGet: (data: {}) => this.GET('/account/meta', data),\n meta: (data: {}) => this.POST('/account/meta', data),\n logout: () => this.GET('/account/logout', null),\n password: (data: {}) => this.POST('/account/password', data),\n getSupervisorList: (params: {}) => this.GET('/account/supervisorlist', params),\n getReassignSupervisorList: () => this.POST('/account/meta/list', {\n query: 'systemrole= ? OR systemrole= ? OR systemrole= ?',\n queryArgs: JSON.stringify(['supervisor', 'director', 'ops-staff']),\n groupStatus: 'user',\n headers: JSON.stringify(['_oid', 'names', 'fullname', 'mas_repno'])\n }),\n list: (data: {}) => this.GET('/account/meta/list', data),\n singpassSettings: (): Promise => this.GET('/account/singpass/settings', null),\n otpRequest: (data: {}) => this.POST('/account/otp/request', data),\n otpLogin: (data: {}) => this.POST('/account/otp/login', data),\n otpRefresh: (data: {}) => this.GET('/account/otp/refresh', data),\n new: (data: {}) => this.POST('/account/new', data),\n memberList: (oid: string, data: {}) => this.GET(`/account/members/list/${oid}`, data),\n saveMemberList: (oid: string, data: {}) => this.POST(`/account/members/list/${oid}`, data),\n remove: (data: {}) => this.POST('/account/remove', data),\n // reset password\n verify: (data: {}) => this.POST('/account/verify-token', data, true),\n getOTP: (data: {}) => this.POST('/account/generate-otp', data, true),\n getToken: (data: {}) => this.POST('/account/request-reset-password', data, true),\n reset: (data: {}) => this.POST('/account/reset-password', data, true)\n }\n\n kycPdf = {\n list: (data: {}) => this.POST('/kycPdf/list', data),\n meta: (data: {}) => this.POST('/kycPdf/meta', data),\n metaGet: (data: {}) => this.GET('/kycPdf/meta', data),\n create: (data: {}) => this.POST('/kycPdf/createKycPdfEntry', data),\n saveSignature: (data: {}) => this.POST('/kycPdf/saveSignature', data),\n submitSignatures: (data: {}) => this.POST('/kycPdf/submitSignatures', data),\n stampedKycPdf: async (data: {}) => await this.stampedPdfApiCall(data),\n stampedBeneficialOwnerPdf: (data: {}) => this.POST('/stampedpdf/stamp_beneficial_owner_pdf', data),\n stampedBeneficialOwnerPdfSignatures: (data: {}) => this.POST('/stampedpdf/stamp_beneficial_owner_pdf_signature', data),\n stampPEPPdf: (data: {}) => this.POST('/stampedpdf/stamp_pep_pdfs', data),\n stampPEPPdfSignatures: (data: {}) => this.POST('/stampedpdf/stamp_pep_pdfs_signatures', data),\n stampECDDPdf: (data: {}) => this.POST('/stampedpdf/stamp_ecdd_pdf', data),\n stampECDDPdfSignatures: (data: {}) => this.POST('/stampedpdf/stamp_ecdd_pdf_signature', data),\n stampAiPdf: (data: {}) => this.POST('/stampedpdf/stamp_ai_pdf', data),\n stampAiPdfSignatures: (data: {}) => this.POST('/stampedpdf/stamp_ai_pdf_signature', data),\n stampedAMLPdf: (data: {}) => this.POST('/stampedamlpdf/stamp_aml_pdf', data),\n stampedInsurerPdf: (data: {}) => this.POST('/stampedinsurerpdf/stamp_insurer_pdf', data),\n updateConsolidateGroupsStatus: (data: {}) => this.POST('/kycPdf/updateConsolidatedGroupsStatus', data),\n emailNotice: (data: {}) => this.GET('/kycPdf/emailNotice', data),\n addUserRemarks: (data: {}) => this.POST('/kycPdf/addUserRemarks', data),\n adviserCancel: (data: {}) => this.POST('/kycPdf/adviserCancel', data),\n supervisorEmailWarning: (data: {}) => this.GET('/kycPdf/supervisorEmailWarning', data),\n finalise: (data: {}) => this.POST('/kycPdf/finalise', data),\n generateKycPdfNest: (data: {}) => this.GET(`${this.kycPdfGeneratorApiVersion}/kycPdf/generate`, data),\n stampedKycPdfNest: (data: {}) => this.GET(`${this.kycPdfGeneratorApiVersion}/kycPdf/stamped`, data),\n splitKycPdfNest: (data: {}) => this.GET(`${this.kycPdfGeneratorApiVersion}/kycPdf/split`, data),\n getSignaturePosition: (data: {}) => this.GET(`${this.kycPdfGeneratorApiVersion}/kycPdf/signaturePosition`, data),\n generateEcddNest: (data: {}) => this.GET(`${this.kycPdfGeneratorApiVersion}/kycPdf/ecdd/generate`, data),\n setCustomProperties: (formData: {}) => this.POST('/kycPdf/setProperties', formData)\n }\n\n pdf={\n stitch: (data: {}) => this.POST('/pdf/stitch', data),\n delete: (data: {}) => this.POST('/pdf/delete', data)\n }\n\n eventLog = {\n list: (data: {}) => this.POST('/log/list', data, true)\n }\n\n esign = {\n checkEnabled: (data: {}) => this.GET('/esign/checkEnabled', data),\n reqEQuota: (data: {}) => this.GET('/esign/reqEQuota', data),\n clearESign: (data: {}) => this.GET('/esign/clearESign', data),\n saveSigners: (data: {}) => this.POST('/esign/saveSigners', data),\n setupSigners: (data: {}) => this.GET('/esign/setupSigners', data),\n reqDocFile: (data: {}) => this.GET('/esign/reqDocFile', data),\n reqDocStat: (data: {}) => this.GET('/esign/reqDocStat', data),\n reqESign: (data: {}) => this.POST('/esign/reqESign', data),\n reqSignURL: (data: {}) => this.GET('/esign/reqSignURL', data),\n completeESign: (data: {}) => this.GET('/esign/completeESign', data),\n getPlans: () => this.GET('/esign/plan/list', null),\n activatePlan: (data: {}) => this.POST('/esign/plan/activate', data),\n getSignaturePosition: (data: {}) => this.GET('/esign/getSignaturePosition', data)\n }\n\n esubPrefix = 'esub'\n esub = {\n retrieve: (data: {}) => this.GET('/' + this.esubPrefix + '/retrieve', data),\n create: (data: {}) => this.POST('/' + this.esubPrefix + '/create', data),\n notify: (data: {}) => this.POST('/' + this.esubPrefix + '/notify', data),\n reject: (data: {}) => this.POST('/' + this.esubPrefix + '/reject', data),\n update: (data: {}) => this.POST('/' + this.esubPrefix + '/update', data)\n }\n\n dsf = {\n checkMode: (data: {}) => this.GET('/dsf/mode/check', data),\n verifyFields: (data: {}) => this.POST('/dsf/fields/verify', data),\n getClientNricList: (data: {}) => this.GET('/dsf/client/nric/list', data),\n ws3CreateMfp: (data: {}) => this.POST('/dsf/mfp/create', data),\n ws5UpdateKyc: (data: {}) => this.POST('/dsf/kyc/update', data),\n ws5ApproveKyc: (data: {}) => this.POST('/dsf/kyc/approve', data),\n getDsfWebUrl: (data: {}) => this.GET('/dsf/web/url', data),\n ws4GetPdfsByCaseId: (data: {}) => this.GET('/dsf/pdfs', data),\n ws6RetrievePolicy: (data: {}) => this.GET('/dsf/policy', data)\n }\n\n onemap = {\n getAddress: (data: { postcode: string }) => this.GET('/onemap/get_address', data)\n }\n\n kycForm = {\n metaGet: (data: { _oid: string }) => this.GET('/kycForm/meta', data),\n meta: (data: {}) => this.POST('/kycForm/meta', data, true),\n list: (data: {}) => this.POST('/kycForm/list', data),\n delete: (data: { _oid: string }) => this.POST('/kycForm/delete', data),\n exportClients: (data) => this.POST('/kycForm/export-clients', data, false, {}, false, true),\n importClients: (data) => this.POST('/kycForm/import-clients', data, false, {}, false, true)\n }\n\n uploadDoc = {\n list: (data: {}) => this.GET('/kyc-doc-upload', data),\n upload: (data: {}) => this.POST('/kyc-doc-upload', data),\n delete: (kycFormOid: string, kycPdfOid: string) => this.DELETE(`/kyc-doc-upload/${kycFormOid}/${kycPdfOid}`),\n merge: (data: {}) => this.POST('/kyc-doc-upload/mergeAppendix', data),\n getAppendix: (data: {}) => this.GET('/kyc-doc-upload/appendix', data)\n }\n\n adviserAgentCodes = {\n meta: (data: {}) => this.POST('/adviserAgentCodes/meta', data),\n list: (data: {}) => this.POST('/adviserAgentCodes/list', data),\n update: (data: {}) => this.POST('/adviserAgentCodes/massUpdate', data)\n }\n\n adviserDetails = {\n getAccountMeta: (id: {}) => this.GET('/account/meta', id),\n getDetails: (params: {}) => this.GET('/adviser_details/get_details', params),\n saveDetails: (params: {}) => this.POST('/adviser_details/save_details', params),\n getEducationList: (params: {}) => this.GET('/adviser_education/get_list', params),\n getQualificationList: (params: {}) => this.GET('/adviser_qualifications/get_list', params),\n getEmploymentList: (params: {}) => this.GET('/adviser_employment/get_list', params),\n saveEducation: (data: {}) => this.POST('/adviser_education/save_details', data),\n deleteEducation: (data: {}) => this.POST('/adviser_education/delete_details', data),\n saveQualification: (data: {}) => this.POST('/adviser_qualifications/save_details', data),\n deleteQualification: (data: {}) => this.POST('/adviser_qualifications/delete_details', data),\n saveEmployment: (data: {}) => this.POST('/adviser_employment/save_details', data),\n deleteEmployment: (data: {}) => this.POST('/adviser_employment/delete_details', data)\n }\n\n bscRecords = !this.useNewApi?.bsc ? {\n /** BSC Metatable API */\n // For API /list all will be using POST to avoid wrong character error since POST and GET return the same value\n listReviewMeta: (params: {}) => this.POST('/bscUserQuarter/list', params),\n saveReviewMeta: (params: {}) => this.POST('/bscUserQuarter/meta', params),\n getReviewMeta: (params: {}) => this.GET('/bscUserQuarter/meta', params),\n saveClientMeta: (params: {}) => this.POST('/bscUserPolicyInfractions/meta', params),\n getClientMeta: (params: {}) => this.GET('/bscUserPolicyInfractions/meta', params),\n listClientsReviewed: (params: {}) => this.POST('/bscUserPolicyInfractions/list', params),\n\n /** BSC Rest API */\n saveReview: (params: {}) => this.POST('/bscUserQuarter/saveNewBSCQuarter', params),\n updateReview: (params: {}) => this.POST('/bscUserQuarter/updateBSCQuarter', params),\n removeReviewUsers: (params: {}) => this.POST('/bscUserQuarter/removeUserFromBSCQuarter', params),\n listPrev: (params: {}) => this.GET('/bsc_previous_records/get_records', params),\n new: (params: {}) => this.POST('/bsc_previous_records/new_record', params),\n update: (params: {}) => this.POST('/bsc_previous_records/update_record', params)\n } : {\n /** BSC Metatable API */\n // For this API all will be using POST to avoid wrong character error\n listReviewMeta: (params: {}) => this.GET('/bsc/review/list', params),\n saveReviewMeta: (params: {}) => this.POST('/bsc/review/meta', params),\n getReviewMeta: (params: {}) => this.GET('/bsc/review/meta', params),\n updateInfractionTotal: (params: {}) => this.POST('/bsc/review/updateInfractionTotals', params),\n saveClientMeta: (params: {}) => this.POST('/bsc/policyInfractions/meta', params),\n getClientMeta: (params: {}) => this.GET('/bsc/policyInfractions/meta', params),\n listClientsReviewed: (params: {}) => this.POST('/bsc/policyInfractions/list', params),\n\n /** BSC Rest API */\n saveReview: (params: {}) => this.POST('/bsc/review/save', params),\n updateReview: (params: {}) => this.POST('/bsc/review/update', params),\n removeReviewUsers: (params: {}) => this.POST('/bsc/review/remove', params),\n listPrev: (params: {}) => this.GET('/bsc/previous/get', params),\n new: (params: {}) => this.POST('/bsc/previous/new', params),\n update: (params: {}) => this.POST('/bsc/previous/update', params)\n }\n\n bsc = {\n supervisorReview: {\n add: (params: {}) => this.POST('/bsc-supervisor-review', params, false, {}, false, true),\n fetch: (params: {}) => this.GET('/bsc-supervisor-review', params),\n delete: (params: {}) => this.DELETE('/bsc-supervisor-review', { data: params }),\n update: (params: {}) => this.PUT('/bsc-supervisor-review', params, {}, true),\n generatePdf: (params: {}) => this.GET('/bsc-supervisor-review/generate-pdf', params),\n getDetails: (supervisorOid: string) => this.POST(`/bsc-supervisor-review/${supervisorOid}`, {})\n },\n adviserReview: {\n generatePdf: (params: {}) => this.GET('/bsc-adviser-review/generate-pdf', params)\n }\n\n }\n\n cpd = {\n list: (params: {}) => this.GET('/userCpd/list', params),\n listPost: (params: {}) => this.POST('/userCpd/list', params),\n getDetails: (params: {}) => this.GET('/adviser_cpd_hours/get_details', params),\n getHours: (params: {}) => this.GET('/kvmApi/getValues', params),\n save: (params: {}) => this.POST('/adviser_cpd_hours/save_details', params),\n saveMany: (params: {}) => this.POST('/adviser_cpd_hours/save_many_details', params),\n course: {\n new: (params: { course_info: any; attendees: { user_oid: string; username: string; user_fullname: string }[] }) => this.POST('/cpd/course/new', params),\n update: (params: { course_id: string; data: any }) => this.POST('/cpd/course/details/update', params),\n delete: (params: { course_id: string }) => this.POST('/cpd/course/delete', params)\n },\n attendees: {\n new: (params: { course_id: string; new_attendees: any[] }) => this.POST('/cpd/attendees/add', params),\n update: (params: { data: any }) => this.POST('/cpd/course/attendees/update', params),\n delete: (params: { course_id: string; removed_users: string[] }) => this.POST('/cpd/attendees/remove', params)\n }\n }\n\n commissionStructure = {\n getCommissionStructure: (params: {}) => this.GET('/commission_structure/get_commission_structure', params),\n deleteCommissionStructure: (params: {}) => this.POST('/commission_structure/delete_commission_structure', params),\n saveCommissionLevel: (params: {}) => this.POST('/commission_structure/save_commission_level', params)\n }\n\n commissionRecordsRel = {\n list: (params: {}) => this.POST('/commissionRecordsRel/list', params),\n saveNewRecord: (params: {}) => this.POST('/commission_records/new_commission_data', params),\n updateRecord: (params: {}) => this.POST('/commission_records/update_commission_data', params),\n report: (params: {}) => this.GET('/commission_records/report', params),\n setScheduleTime: (params: {}) => this.POST('/commission_records/setScheduleJobTime', params),\n getScheduleTime: () => this.GET('/commission_records/getScheduleJobTime', {}),\n generateAdHocStatement: (params: {}) => this.POST('/commission_records/generateAdHocStatement', params),\n downloadCsv: (params: {}) => this.POST('/commission_records/downloadCsv', params),\n generateReport: (params: {}) => this.POST('/commission_records/reportGenerator', params),\n reportList: (params: {}) => this.GET('/commission_records/reportList', params),\n getUsersAndPrincipals: () => this.GET('/commission_records/listOfPrincipalsAndUsers', {})\n }\n\n relProductList = {\n list: (data: {}) => this.POST('/relProductList/list', data),\n restoreDefault: (data: {}) => this.POST('/relProductList/restoreDefaultProducts', data),\n deleteProducts: (data: {}) => this.POST('/relProductList/deleteProducts', data),\n saveNewProducts: (data: {}) => this.POST('/relProductList/saveNewProducts', data),\n metaGet: (data: {}) => this.GET('/relProductList/meta', data),\n updateProduct: (data: {}) => this.POST('/relProductList/meta', data),\n multiSaveProducts: (data: {}) => this.POST('/relProductList/multiSaveProducts', data)\n }\n\n clientPolicy = {\n list: (params: {}) => this.POST('/clientPolicy/list', params),\n meta: (params: {}) => this.GET('/clientPolicy/meta', params),\n update: (params: {}) => this.POST('/clientPolicy/update_policy', params),\n new: (params: {}) => this.POST('/clientPolicy/save_new_policy', params),\n newBusiness: (params: {}, version = 1) => this.POST(`/${!version ? '' : 'v' + version + '/'}clientPolicy/save_new_business`, params, false, {}, false, true),\n saveExcelInfo: (params: {}) => this.POST('/clientPolicy/save_excel_infosheet', params),\n amlImportCsv: (params: {}) => this.POST('/clientPolicy/aml/save_check_results', params, false, {}, false, true),\n amlExportCsv: (params: {}) => this.GET('/clientPolicy/generate_aml_report', params),\n reconExportCsv: (params: {}) => this.GET('/clientPolicy/generate_recon_report', params),\n extractProducts: (params: { kycPdfOid: string }, version = 1) => this.POST(`/${!version ? '' : 'v' + version + '/'}clientPolicy/extract_products`, params, false, {}, false, true),\n policyDocumentsList: (params: {}) => this.POST('/policy_documents/list', params),\n uploadNewPolicyDocument: (params: {}) => this.POST('/clientPolicy/upload_policy_document', params, false, {}, false, true),\n deletePolicyDocument: (params: {}) => this.POST('/clientPolicy/delete_policy_document', params),\n getTaggedKycDocuments: (params: {}) => this.GET('/clientPolicy/get_tagged_kyc_documents', params),\n uploadCancellationLetter: (params: {}) => this.POST('/clientPolicy/save_cancellation_letter', params),\n deleteCancellationLetter: (params: {}) => this.POST('/clientPolicy/delete_cancellation_letter', params),\n\n // IFAM Nest API\n saveIntermediary: (params: {}) => this.POST('/clientPolicy/save_intermediary', params),\n saveManyIntermediaries: (params: {}) => this.POST('/clientPolicy/save_many_intermediaries', params)\n }\n\n intermediaries = {\n get: (params: {}) => this.GET('/clientPolicy/get_intermediaries', params),\n update: (params: {}) => this.POST('/clientPolicy/save_intermediaries', params),\n list: (data: {}) => this.POST('/payee/list', data),\n meta: (data: {}) => this.POST('/payee/meta', data)\n }\n\n payee = {\n list: (params: {}) => this.POST('/payee/list', params),\n update: (params: {}) => this.POST('/payee/meta', params)\n }\n\n clientDetails = {\n newClient: (data: {}) => this.POST('/client_details/new_client', data),\n list: (data: {}) => this.POST('/client_details/list', data),\n profile: (data: {}) => this.GET('/client_details/client_info', data),\n update: (data: {}) => this.POST('/client_details/update_client', data),\n linkKycForm: (data: {}) => this.POST('/client_details/link_kyc_form', data)\n }\n\n clientDependants = {\n get: (data: {}) => this.GET('/client_dependants/get_dependants', data),\n update: (data: {}) => this.POST('/client_dependants/update_dependant', data),\n new: (data: {}) => this.POST('/client_dependants/new_dependant', data),\n delete: (data: {}) => this.POST('/client_dependants/delete_dependant', data)\n }\n\n clientScreenings = {\n get: (data: {}) => this.GET('/clientScreenings/get_screenings', data),\n new: (data: {}) => this.POST('/clientScreenings/save_new_screening', data)\n }\n\n clientInterest = {\n get: (data: {}) => this.GET('/client_interest/get_interests', data),\n update: (data: {}) => this.POST('/client_interest/save_interests', data)\n }\n\n clientCommunication = {\n get: (data: {}) => this.GET('/client_communication/get_communication_choices', data),\n update: (data: {}) => this.POST('/client_communication/save_communication_choices', data)\n }\n\n companyDetails = {\n list: (data: {}) => this.GET('/companyDetails/list', data),\n save: (data: {}) => this.POST('/companyDetails/meta', data)\n }\n\n myInfo = !this.useNewApi?.myinfo ? {\n requestDirectMyinfo: (data: {}) => this.POST('/myinfo/request/direct', data),\n sendAuthorizationEmail: (data: {}) => this.POST('/myinfo/send_authorization_email', data),\n sendAuthorizationEmailToAdviser: (data: {}) => this.POST('/myinfo/email/auth/recruit/send', data),\n fetchUnconfirmPersonInfo: (params: {}) => this.GET('/myinfo/unconfirmed_person_info', params),\n postClientDecision: (params: {}) => this.POST('/myinfo/person_info_client_decision', params),\n newPersonInfoAvailable: (params: {}) => this.GET('/myinfo/new_person_info_available', params, true),\n linkPersonInfo: (params: {}) => this.POST('/myinfo/link_person_info', params),\n unlinkPersonInfo: (params: {}) => this.POST('/myinfo/unlink_person_info', params),\n fetchComfirmedPersonInfo: (params: {}) => this.GET('/myinfo/person_info', params),\n syncMyInfo: (params: {}) => this.POST('/myinfo/sync_person_info', params),\n syncAdviserMyInfo: (params: {}) => this.POST('/myinfo/recruit/action', params),\n newRecruit: (params: {}) => this.POST('/myinfo/email/auth/recruit/new', params)\n } : {\n requestDirectMyinfo: (data: {}) => this.POST('/myinfo/request/direct', data),\n sendAuthorizationEmail: (data: {}) => this.POST('/myinfo/email/auth/send', data),\n sendAuthorizationEmailToAdviser: (data: {}) => this.POST('/myinfo/email/auth/recruit/send', data),\n fetchUnconfirmPersonInfo: (params: {}) => this.GET('/myinfo/person/unconfirmed', params),\n postClientDecision: (params: {}) => this.POST('/myinfo/client/decide', params),\n newPersonInfoAvailable: (params: {}) => this.GET('/myinfo/person/available', params, true),\n linkPersonInfo: (params: {}) => this.POST('/myinfo/client/action', params),\n unlinkPersonInfo: (params: {}) => this.POST('/myinfo/client/action', params),\n fetchComfirmedPersonInfo: (params: {}) => this.GET('/myinfo/person/confirmed', params),\n syncMyInfo: (params: {}) => this.POST('/myinfo/client/action', params),\n syncAdviserMyInfo: (params: {}) => this.POST('/myinfo/recruit/action', params),\n newRecruit: (params: {}) => this.POST('/myinfo/email/auth/recruit/new', params)\n }\n\n signature = {\n upsert: (params: {}) => this.POST('/signatures/upsert', params, true),\n retrieve: (params: {}) => this.GET('/signatures/retrieve', params)\n }\n\n // recruitment modules\n forms = {\n create: (params: {}) => this.POST('/forms', params, false, {}, false, true),\n search: (params: {}) => this.POST('/forms/search', params, false, {}, false, true),\n update: (params: {}) => this.PUT('/forms', params, {}, true),\n sign: (params: { recruitOid: string; signature: string }) => this.POST('/forms/sign', params, false, {}, false, true)\n }\n\n activity = {\n create: (params: {}) => this.POST('/activity', params, false, {}, false, true),\n update: (params: {}) => this.PUT('/activity', params, {}, true),\n search: (params: {accountOid: string}) => this.GET(`/activity/${params.accountOid}`, {}),\n upload: (params: { oid: string; files: File[]}) => {\n const formData = new FormData()\n formData.append('fileUploadOid', params.oid)\n params.files.forEach((fileEntry: any) => {\n formData.append('files[]', fileEntry.raw)\n })\n return this.POST('/activity/upload', formData)\n },\n remove: (params: { oid: string; filename: string }) => this.DELETE('/activity', { data: params }),\n filelist: (params: { oid: string }) => this.GET(`/activity/filelist?fileUploadOid=${params.oid}`, {}),\n finalise: (params: { oids: string[] }) => this.POST('/activity/finalise', params, false, {}, false, true),\n submit: (params: { oids: string[] }) => this.PUT('/activity/submit', params, {}, true),\n decide: (params: { ids: string[]; status: 'COMPLETED' | 'PENDING' }) => this.PUT('/activity/decide', params, {}, true)\n }\n\n recruit = {\n detail: {\n create: (params: {}) => this.POST('/recruit/details', params, false, {}, false, true),\n search: (params: {}) => this.POST('/recruit/details/search', params, false, {}, false, true),\n update: (params: {}) => this.PUT('/recruit/details', params, {}, true),\n submitApplication: (params: {}) => this.POST('/recruit/details/submit', params, false, {}, false, true),\n reworkApplication: (params: {}) => this.POST('/recruit/details/rework', params, false, {}, false, true),\n approve: (params: {}) => this.POST('/recruit/details/approve', params, false, {}, false, true),\n findAll: (params: {}) => this.POST('/recruit/details/findAll', params, false, {}, false, true),\n retrieve: (params: { recruitOid: string }) => this.GET(`/recruit/details/${params.recruitOid}`, {})\n },\n exam: {\n create: (params: {}) => this.POST('/exam/record', params, false, {}, false, true),\n search: (params: {}) => this.POST('/exam/record/search', params, false, {}, false, true),\n update: (params: {}) => this.POST('/exam/record/update', params, false, {}, false, true),\n delete: (params: { oid: string }) => this.DELETE(`/exam/record/${params.oid}`, params),\n approval: (params: {examRecordOid: string; decision: 'approve' | 'rework'}) => this.POST('/exam/record/approval', params, false, {}, false, true),\n cert: {\n upload: (params: { oid: string; files: File[]}) => {\n const formData = new FormData()\n params.files.forEach((fileEntry: any) => {\n formData.append('files[]', fileEntry.raw)\n })\n return this.POST(`/exam/cert/upload/${params.oid}`, formData)\n },\n remove: (params: { examCertOid: string; filename: string }) => this.DELETE('/exam/cert', { data: params }),\n list: (examCertOid: string) => this.GET(`/exam/cert/filelist?examCertOid=${examCertOid}`, {}),\n verify: (params: { oids: string[] }) => this.POST('/exam/cert/verify', params, false, {}, false, true)\n }\n },\n upload: {\n create: (params: {}) => this.POST('/recruit-upload/create', params, false, {}, false, true),\n remove: (params: { oid: string; filename: string }) => this.DELETE('/recruit-upload', { data: params }),\n upload: (params: { oid: string; files: File[] }) => {\n const formData = new FormData()\n formData.append('fileUploadOid', params.oid)\n params.files.forEach((fileEntry: any) => {\n formData.append('files[]', fileEntry.raw)\n })\n return this.POST(`/recruit-upload/upload/${params.oid}`, formData)\n },\n delete: (params: {}) => this.DELETE('/recruit-upload/entry', { data: params })\n }\n }\n\n resources = {\n getAllFolders: () => this.GET('/resources/folders', {}),\n getAllFilesFolders: (params: { filePath: string }) => this.POST('/resources/files', params, false, {}, false, true),\n createFolder: (params: { folderName: string }) => this.POST('/resources/createFolder', params, false, {}, false, true),\n createFile: (data: {}) => this.POST('/resources/createFile', data),\n deleteFiles: (params: { fileName: string }) => this.DELETE('/resources', { data: params })\n }\n\n ifamFileSystem = {\n uploadFile: (formData: FormData, moduleType: string, oid: string) => this.POST(`/ifam-file-system/${moduleType}/${oid}`, formData),\n fetch: (data: {}) => this.GET('/ifam-file-system', data),\n delete: (params: {uniqueOid: string; moduleType: string}) => this.DELETE('/ifam-file-system', { data: params })\n }\n\n changelog = {\n getFA: () => this.GET('/changelog/faportal', null)\n }\n\n kvm = {\n get: (params: {}) => this.GET('/kvmApi/getValue', params),\n update: (params: {}) => this.POST('/kvmApi/setValue', params)\n }\n\n survey = {\n fetchSurveyWithToken: (params: { token: string }) => this.GET(`/survey?token=${params.token}`, {}),\n fetchSurveyWithKycPdfOid: (params: { kycPdfOid: string }) => this.GET(`/survey/${params.kycPdfOid}`, {}),\n submitSurvey: (data: { token: string; survey }) => this.POST('/survey/submit', data, false, {}, false, true),\n sendSurveyEmail: (params: { kycPdfOid: string }) => this.POST(`/survey/${params.kycPdfOid}/generate`, {}),\n refreshAndResendSurveyEmail: (params: { token: string }) => this.POST(`/survey/resend?token=${params.token}`, {})\n }\n\n get useEjsTemplate () {\n return this.projectSettings?.useDynamicPdf?.enable ?? false\n }\n\n get kycPdfGeneratorApiVersion () {\n if (!this.useEjsTemplate) {\n return ''\n }\n const apiVersion = this.projectSettings.useDynamicPdf.apiVersion\n return apiVersion === 'v1' || !apiVersion ? '' : `/${this.projectSettings.useDynamicPdf.apiVersion}`\n }\n\n private async stampedPdfApiCall (data) {\n // eslint-disable-next-line @typescript-eslint/camelcase\n if (!this.useEjsTemplate) {\n return this.POST('/stampedkycpdf/stamp_kyc_pdf', data)\n }\n const version = this.kycPdfGeneratorApiVersion\n // get the existing pdf, stamp the signature\n return this.GET(`${version}/kycPdf/stamped`, data)\n }\n\n private GET (url: string, params: {}, hideLoading = false) {\n const { uiService } = this.sharedVariable\n\n let id\n // uiService will be not available during routerRedirect\n // during this time, the UI is not ready too, therefore no need to show loading\n if (uiService && !hideLoading) {\n id = uiService.randomID()\n uiService.loading.addLoadingTask(id)\n }\n\n // todo: handle user being online or offline\n return axios\n .get(this.BASE_URL + url, {\n params: this.transformParams(params),\n withCredentials: true,\n paramsSerializer: params => {\n return qs.stringify(this.transformParams(params), { arrayFormat: 'repeat' })\n }\n })\n .then((res) => {\n if (typeof res.data.error !== 'undefined' && res.data.error !== null) {\n const error = res.data.error\n // error.response = res\n console.error(error)\n return Promise.reject(error) /* {code, message, stack} */\n }\n // if (typeof res.data.result === 'undefined'){\n // return Promise.reject('missing `result` from response')\n // }\n return Promise.resolve(res.data)\n })\n .catch((error) => {\n /**\n * error should look like:\n * {\n * // from uilicious-api\n * code,\n * message,\n * stack,\n * // from Axios\n * response:\n * {\n * data,\n * status,\n * headers\n * },\n * }\n */\n return Promise.reject(error)\n }).finally(() => {\n if (uiService) {\n setTimeout(() => uiService.loading.removeLoadingTask(id), this.apiTimeout)\n }\n })\n }\n\n private POST (url: string, data: {}, useSearchParams = false, options?: {}, hideLoading = false, skipTransform = false) {\n const { uiService } = this.sharedVariable\n\n let id\n // uiService will be not available during routerRedirect\n // during this time, the UI is not ready too, therefore no need to show loading\n if (uiService && !hideLoading) {\n id = uiService.randomID()\n uiService.loading.addLoadingTask(id)\n }\n\n // todo: handle user being online or offline\n const requestData = useSearchParams ? new URLSearchParams(this.stringifyData(data)) : (skipTransform ? data : this.transformRequestData(this.stringifyData(data)))\n\n return axios\n .post(this.BASE_URL + url, requestData, this.transformOptions(options))\n .then((res) => {\n if (typeof res.data.error !== 'undefined' && res.data.error !== null) {\n const error = res.data.error\n // error.response = res\n console.error(error)\n return Promise.reject(error) /* {code, message, stack} */\n }\n // if (typeof res.data.result === 'undefined'){\n // return Promise.reject('missing `result` from response')\n // }\n return Promise.resolve(res.data)\n })\n .catch((error) => {\n /**\n * error should look like:\n * {\n * // from uilicious-api\n * code,\n * message,\n * stack,\n * // from Axios\n * response:\n * {\n * data,\n * status,\n * headers\n * },\n * }\n */\n console.error(error)\n return Promise.reject(error)\n }).finally(() => {\n if (uiService) {\n setTimeout(() => uiService.loading.removeLoadingTask(id), this.apiTimeout)\n }\n })\n }\n\n private transformOptions (options: any) {\n if (typeof options === 'undefined' || null) {\n options = {}\n }\n // always set as true to reuse the cookies\n options.withCredentials = true\n return options\n }\n\n private transformParams (data: {}) {\n if (typeof data === 'undefined' || null) {\n data = {}\n }\n return data\n }\n\n private stringifyData (data: {}) {\n if (typeof data === 'undefined' || null) {\n return {}\n }\n if (data instanceof FormData) return data\n const stringifiedData = {}\n Object.keys(data).forEach((key) => {\n let value = data[key]\n const skipStringify = value?.raw instanceof File || value?.raw instanceof Blob\n if (value instanceof Object && !skipStringify) {\n value = JSON.stringify(value)\n }\n stringifiedData[key] = value\n })\n return stringifiedData\n }\n\n private transformRequestData (data: {}) {\n if (typeof data === 'undefined' || null) {\n return new FormData()\n }\n if (data instanceof FormData) return data\n // if its not FormData, construct\n const formData = new FormData()\n if (typeof data === 'object') {\n Object.keys(data).forEach((key) => {\n const value = data[key]\n if (value?.raw instanceof File) {\n formData.append('files[]', value.raw)\n } else if (value?.raw instanceof Blob && value?.raw.type.includes('image/')) {\n const imgType = value?.raw.type\n imgType.replace('image/', '')\n formData.append('files[]', value.raw, `${imgType}.${imgType}`)\n } else if (Array.isArray(value) || value instanceof Object) {\n formData.append(key, JSON.stringify(value))\n } else {\n formData.append(key, value)\n }\n })\n }\n return formData\n }\n\n private DELETE (url: string, options?: {}) {\n return axios.delete(this.BASE_URL + url, this.transformOptions(options))\n .then((res) => {\n if (typeof res.data.error !== 'undefined' && res.data.error !== null) {\n const error = res.data.error\n // error.response = res\n return Promise.reject(error) /* {code, message, stack} */\n }\n return Promise.resolve(res.data)\n })\n .catch((error) => {\n return Promise.reject(error)\n })\n }\n\n private PUT (url: string, data: {}, options?: {}, skipTransform = false) {\n const requestData = skipTransform ? data : this.transformRequestData(this.stringifyData(data))\n\n return axios\n .put(this.BASE_URL + url, requestData, this.transformOptions(options))\n .then((res) => {\n if (typeof res.data.error !== 'undefined' && res.data.error !== null) {\n const error = res.data.error\n console.error(error)\n return Promise.reject(error) /* {code, message, stack} */\n }\n return Promise.resolve(res.data)\n })\n .catch((error) => {\n console.error(error)\n return Promise.reject(error)\n })\n }\n}\n","import { IProjectSettings, Theme } from '@master/config/IProjectSettings'\n\nexport default class ProjectSettings implements IProjectSettings {\n needs = {\n period: 1\n }\n\n useNewApi = {\n bsc: true,\n myinfo: true,\n version: 3\n }\n\n hierarchicalStructure = {\n maxLevel: 3\n }\n\n useNewProfilePage = true\n useReportModule = true\n useNewCommissionModule = true\n useSalesTeamAdmin = true\n cloneKycForm = true\n deleteKycForm = true\n useFileSystem = true\n useScheduler = true\n theme: Theme = 'Modern'\n displayBrandInLogin = false\n useHierarchySetup = true\n useAssumptionsList = true\n useSeparateAML = true\n useDynamicPdf = {\n enable: true,\n pdf: {\n kycPdf: true,\n ecdd: false,\n manager: true\n },\n apiVersion: 'v2'\n }\n\n generateNbrUponSupApproval = true\n useNewCommissionFormat = true\n}\n","import IVersionInfo from '@master/config/IVersionInfo'\nexport default class IfamVersion implements IVersionInfo {\n credit = 'Powered by Wen Consulting - '\n name = 'Mocha '\n version = 'Version 1.0.0'\n changeLog = [\n {\n version: 'Version 1.0.0',\n date: '31/12/2019',\n changes: [\n 'Initial core version 1.0.0 tracking'\n ]\n }\n ]\n}\n","import IVersionInfo from '@core/config/IVersionInfo'\nexport default class ProjectVersion implements IVersionInfo {\n name = 'AWFA'\n version = 'Version 2.1.0 : Last updated on 18/08/2020'\n changeLog = [\n {\n version: 'Version 2.0.9',\n date: '31/12/2019',\n changes: [\n 'Completion check fixes',\n 'RPA section not visible fixes'\n ]\n },\n {\n version: 'Version 2.0.8',\n date: '23/12/2019',\n changes: [\n 'CKA main field text change and updated PDF template',\n 'Completion check fix for RPA'\n ]\n },\n {\n version: 'Version 2.0.7',\n date: '23/12/2019',\n changes: [\n 'Completion check fix for Risk Profile Assessment section',\n 'Clear RPA subsection if custom checkbox is checked',\n 'Display confirmation dialogue box when unchecking the custom checkbox'\n ]\n },\n {\n version: 'Version 2.0.6',\n date: '22/12/2019',\n changes: [\n 'Age calculation logic changes - uses date of review instead of current date and time',\n 'Removed RPA main checkbox field - section is always compulsory',\n 'Fixed indicate priority type pdf field for Others section in Needs Analysis'\n ]\n },\n {\n version: 'Version 2.0.5',\n date: '19/12/2019',\n changes: [\n 'CKA and RPA section fixes',\n 'Needs Analysis Calculation \\'Indicate Priority Type\\' field fixes'\n ]\n },\n {\n version: 'Version 2.0.4',\n date: '18/12/2019',\n changes: [\n 'Risk profile assessment, main field checkbox is now independent from CKA main field checkbox',\n 'Risk profile assessment, clear section fields if main checkbox is checked',\n 'Risk profile assessment, chosen rp is independent of - (last option) ; rp result of (last option) does not affect anything',\n 'Risk profile assessment, completion check - chosen risk profile cannot be empty',\n 'CKA, completion check - if any of the yes/no fields is selected \\'yes\\', at least one of the sub-checkboxes has to be checked',\n 'Needs analysis calculation, when main field (indicate priority type) is selected, at least one of the fields in the respective columns have to be selected',\n 'Product recommendation, move the 3 textareas into one section, leave product deviation as it is, header text change, PDF pg under each textarea'\n ]\n },\n {\n version: 'Version 2.0.3',\n date: '21/11/2019',\n changes: [\n 'Post feedback document changes'\n ]\n },\n {\n version: 'Version 2.0.2',\n date: '14/11/2019',\n changes: [\n 'Your Finances section calculation fixes'\n ]\n },\n {\n version: 'Version 2.0.1',\n date: '04/08/2017',\n changes: [\n 'Merged phase-3 changes'\n ]\n },\n {\n version: 'Version 0.0.1',\n date: '20/01/2015',\n changes: [\n 'Initial custom version 0.0.1 tracking'\n ]\n }\n ]\n}\n","import { IProjectInfo } from '@master/config/IProjectInfo'\n\nexport class ProjectInfo implements IProjectInfo {\n brandName = 'AWFA'\n companyShortName = 'AWFA'\n companyLongName = 'Alpha Wealth Financial Advisers'\n companyCapName = 'AWFA'\n printerCompany = ''\n dataProtectionOfficerEmail = 'pdpa@abcfinancial.com'\n email = 'enquiry@awfa.com.sg'\n contactNumber = '+65 6589 8198'\n address = '180 Kitchener Rd, #09-01, Singapore 208539'\n regNumber = '200606266H'\n url = 'https://alpha.awfa.com.sg'\n urlName = 'alpha.awfa.com.sg'\n agentRepresentative = 'Financial Adviser'\n personalFinancialReview = 'Personal Financial Review'\n electronicFormName = 'ePFR'\n\n pdpaWithdrawalForm = 'AWFA PDPA Withdrawal Consent Form'\n\n currency = '' // no need show currencySymbol\n\n get rpaFormName () {\n return 'PFR'\n }\n}\n","import { UIService } from './../services/UIService'\nimport { CombinedVueInstance } from 'vue/types/vue'\nimport { SysInfo } from './SysInfo'\nimport { UIOptions } from './UIOptions'\n\nexport class SharedVariable {\n vue: CombinedVueInstance>\n sysInfo: SysInfo\n uiService: UIService\n options: UIOptions\n}\n","import { options } from '@master/model/options/Options'\n\nexport const ContractTypeList = [\n { name: 'Financial Consultant', rank: 'Tier 1' },\n { name: 'Senior Financial Consultant', rank: 'Tier 1' },\n { name: 'Executive Financial Consultant', rank: 'Tier 1' },\n { name: 'Executive Wealth Manger', rank: 'Tier 1' },\n { name: 'Associate Financial Services Manager', rank: 'Tier 2' },\n { name: 'Financial Services Manager', rank: 'Tier 2' },\n { name: 'Senior Financial Services Manager', rank: 'Tier 2' },\n { name: 'SeniorExecutive Financial Services Manager', rank: 'Tier 2' },\n { name: 'Executive Director', rank: 'Tier 3' }\n] as const\nexport const ContractTypeOptions: options[] = ContractTypeList.map(contractType => {\n return {\n label: contractType.name,\n value: contractType.name\n }\n})\n","import { ContractTypeList, ContractTypeOptions } from '@company-common/options/ContractTypeOptions'\nimport { IAdviserService } from '@master/services/IAdviserService'\nimport { options } from '@master/model/options/Options'\n\nexport class CustomAdviserService implements IAdviserService {\n adviserContractTypeOptions (): options[] {\n return ContractTypeOptions\n }\n\n adviserContractTypeList () {\n return ContractTypeList\n }\n}\n","import { RouteConfig } from 'vue-router'\nimport { IUserProfileService } from './IUserProfileService'\nimport { getChildSections } from '@core/pages/userProfile/route'\n\nexport class DefaultUserProfileService implements IUserProfileService {\n retrieveChildSections (systemRole: string, router): RouteConfig {\n return getChildSections(systemRole, router) as any\n }\n}\n","import { options } from '@master/model/options/Options'\nimport { IUIOptionsService } from './IUIOptionsService'\n\nexport class UIOptionsService implements IUIOptionsService {\n myinfoAttributeOptions (): options[] {\n return [\n { label: 'Personal & Financial Information', value: 1 },\n { label: 'Personal Information Only', value: 2 }\n ]\n }\n}\n","import 'reflect-metadata' // Import only once\nimport { container } from 'inversify-props'\nimport { IDateService } from '@master/services/IDateService'\nimport { DateService } from '@master/services/DateService'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport { RiskRatingService } from '@master/services/RiskRatingService'\nimport API from '@core/services/API'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport ProjectSettings from '@company-common/config/ProjectSettings'\nimport IVersionInfo from '@master/config/IVersionInfo'\nimport IfamVersion from './config/IfamVersion'\nimport ProjectVersion from './config/ProjectVersion'\nimport { ProjectInfo } from '@company-common/config/ProjectInfo'\nimport { IProjectInfo } from '@master/config/IProjectInfo'\nimport { SharedVariable } from '@core/model/SharedVariable'\nimport { IAdviserService } from '@master/services/IAdviserService'\nimport { CustomAdviserService } from '@company-common/services/AdviserService'\nimport { IUserProfileService } from '@core/services/IUserProfileService'\nimport { DefaultUserProfileService } from '@core/services/DefaultUserProfileService'\nimport { IUIOptionsService } from '@master/services/IUIOptionsService'\nimport { UIOptionsService } from '@master/services/UIOptionsService'\nimport { IPrioritiesStructure } from '@master/model/kyc-form/need-analysis/IPrioritiesStructure'\nimport { ThePrioritiesNeeds } from '@company-common/model/kyc-form/needs-analysis/ThePrioritiesNeeds'\nimport KYCClient from '@company-common/model/kyc-form/KYCClient'\n\ncontainer.addSingleton(DateService, 'DateService')\ncontainer.addSingleton(RiskRatingService, 'RiskRatingService')\ncontainer.addSingleton(API, '$api')\ncontainer.addSingleton(ProjectSettings, 'ProjectSettings')\ncontainer.addSingleton(IfamVersion, 'IfamVersion')\ncontainer.addSingleton(ProjectVersion, 'ProjectVersion')\ncontainer.addSingleton(ProjectInfo, 'ProjectInfo')\ncontainer.addSingleton(SharedVariable, 'SharedVariable')\ncontainer.addSingleton(CustomAdviserService, 'AdviserService')\ncontainer.addSingleton(DefaultUserProfileService, 'UserProfileService')\ncontainer.addSingleton(UIOptionsService, 'UIOptionsService')\ncontainer.addSingleton>(ThePrioritiesNeeds, 'ThePrioritiesNeeds')\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\",\"theme\":_vm.theme}},[(_vm.currentUser && _vm.currentUser.isLogin)?_c('TheHeader',{attrs:{\"customHeaders\":_vm.customHeaders}}):_vm._e(),_c('router-view'),_c('portal-target',{attrs:{\"name\":\"main-page\"}}),_c('TheFooter'),(this.uiService.loading.hasLoadingTasks())?_c('AppLoader'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"z-index\":\"999\"}},[(!_vm.isModernTheme)?_c('AppDynamicHeader',{attrs:{\"header\":_vm.headerStructure},on:{\"logout\":_vm.logout}}):_c('AppDynamicIconHeader',{attrs:{\"mini\":true,\"header\":_vm.headerStructure},on:{\"logout\":_vm.logout}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',[_c('div',{staticClass:\"logo-wrapper\"},[_c('div',{staticClass:\"logo\",on:{\"click\":_vm.goToHome}})]),_c('div',{staticClass:\"menu-wrapper\"},[_c('a',{on:{\"click\":function($event){_vm.isShowMenu = true}}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":_vm.menuIcon,\"alt\":\"svg image\"}})])]),_c('nav',[_c('ul',{attrs:{\"id\":\"nav-list\"}},[(_vm.enableVirtualMeeting)?_c('li',[_c('a',{on:{\"click\":_vm.startVirtualMeeting}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":_vm.videocamIcon,\"alt\":\"svg image\"}}),_c('p',[_vm._v(\"Start Virtual Meeting\")])])]):_vm._e(),_vm._l((_vm.header),function(ref,index){\nvar disable = ref.disable;\nvar event = ref.event;\nvar href = ref.href;\nvar target = ref.target;\nvar icon = ref.icon;\nvar label = ref.label;\nvar dropdown = ref.dropdown;\nreturn [(!disable)?_c('li',{key:index},[(event)?[_c('a',{attrs:{\"target\":target},on:{\"click\":function($event){return _vm.$emit(event)}}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":icon,\"alt\":\"svg image\"}}),_c('p',[_vm._v(_vm._s(label))])])]:[_c('a',{attrs:{\"href\":href,\"target\":target}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":icon,\"alt\":\"svg image\"}}),_c('p',[_vm._v(_vm._s(label))])])],(dropdown && dropdown.length > 0)?_c('div',{staticClass:\"dropdown\"},[_vm._l((dropdown),function(item,i){return [(!item.disable)?_c('a',{key:i,staticClass:\"dropdown-item\",attrs:{\"href\":item.href}},[_vm._v(_vm._s(item.label))]):_vm._e()]})],2):_vm._e()],2):_vm._e()]})],2)]),(_vm.enableVirtualMeeting)?_c('AppDialog',{staticClass:\"virtual-meeting-url\",attrs:{\"hideFooter\":true},on:{\"closed\":function($event){_vm.isCopied = false}}},[_c('template',{slot:\"header\"},[_vm._v(\"Virtual Meeting URL\")]),_c('div',{attrs:{\"slot\":\"body\"},slot:\"body\"},[_c('p',[_vm._v(\"Click on the URL to copy: \"),_c('strong',[_vm._v(_vm._s(_vm.isCopied ? 'Copied!' : ''))])]),_c('div',{staticClass:\"jitsi-url\",on:{\"click\":_vm.copyUrl}},[_c('input',{attrs:{\"id\":\"url\",\"readonly\":\"\"},domProps:{\"value\":_vm.jitsiUrl}})])])],2):_vm._e(),(_vm.isShowMenu)?_c('AppDialog',{staticClass:\"menu-dialog\",attrs:{\"size\":'large',\"hideFooter\":true},on:{\"closed\":function($event){_vm.isShowMenu = false}}},[_c('template',{slot:\"header\"},[_c('img',{staticClass:\"logo\",attrs:{\"src\":require(\"@/assets/logo.png\"),\"width\":\"200px\"},on:{\"click\":_vm.goToHome}})]),_c('div',{attrs:{\"slot\":\"body\"},slot:\"body\"},[_c('el-menu',{staticClass:\"custom-menu\",attrs:{\"router\":true,\"unique-opened\":true}},[_vm._l((_vm.header),function(ref,index){\nvar disable = ref.disable;\nvar event = ref.event;\nvar href = ref.href;\nvar target = ref.target;\nvar icon = ref.icon;\nvar label = ref.label;\nvar dropdown = ref.dropdown;\nreturn [(!disable)?[(dropdown && dropdown.length > 0)?_c('el-submenu',{key:index,attrs:{\"index\":label}},[_c('template',{slot:\"title\"},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":icon,\"alt\":\"svg image\"}}),_c('span',[_vm._v(_vm._s(label))])]),_vm._l((dropdown),function(item,i){return [_c('el-menu-item',{key:i,attrs:{\"index\":item.label}},[(!item.disable)?_c('a',{key:i,staticClass:\"dropdown-item\",attrs:{\"href\":item.href}},[_vm._v(_vm._s(item.label))]):_vm._e()])]})],2):(event)?_c('el-menu-item',{key:index,attrs:{\"index\":label}},[_c('a',{attrs:{\"target\":target},on:{\"click\":function($event){return _vm.$emit(event)}}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":icon,\"alt\":\"svg image\"}}),_c('span',[_vm._v(_vm._s(label))])])]):_c('el-menu-item',{key:index,attrs:{\"index\":label}},[_c('a',{attrs:{\"href\":href,\"target\":target}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":icon,\"alt\":\"svg image\"}}),_c('span',[_vm._v(_vm._s(label))])])])]:_vm._e()]})],2)],1)],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport { HeaderItem } from '@core/model/structure/HeaderStructure'\nimport { cid, container } from 'inversify-props'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport VideocamIcon from '@core/components/header/assets/videocam.svg'\nimport MenuIcon from '@core/components/header/assets/menu.svg'\nimport AppDialog from '@core/components/AppDialog.vue'\n\n@Component({\n components: {\n AppDialog\n }\n})\nexport default class AppDynamicHeader extends Vue {\n @Prop({ required: true }) private readonly header!: HeaderItem[]\n\n private jitsiUrl = ''\n private isJitsiUrlShow = false\n private isCopied = false\n private isShowMenu = false\n\n startVirtualMeeting () {\n this.jitsiUrl = 'https://meet.jit.si/' + this.randomStr(32)\n this.isJitsiUrlShow = true\n }\n\n randomStr (len: number) {\n const arr = '1234567890abcdefghijklmnopqrstuvwxyz'\n let ans = ''\n for (let i = len; i > 0; i--) {\n ans += arr[Math.floor(Math.random() * arr.length)]\n }\n return ans\n }\n\n copyUrl () {\n const url: HTMLInputElement = document.getElementById('url') as HTMLInputElement\n url.select()\n url.setSelectionRange(0, 99999)\n document.execCommand('copy')\n this.isCopied = true\n }\n\n get enableVirtualMeeting () {\n const { virtualMeeting } = container.get(cid.IProjectSettings)\n return virtualMeeting ? virtualMeeting.enable : false\n }\n\n get videocamIcon () {\n return VideocamIcon\n }\n\n get menuIcon () {\n return MenuIcon\n }\n\n // Methods\n goToHome () {\n window.location.href = '/live/home'\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDynamicHeader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDynamicHeader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppDynamicHeader.vue?vue&type=template&id=fa7208d8&scoped=true&\"\nimport script from \"./AppDynamicHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppDynamicHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppDynamicHeader.vue?vue&type=style&index=0&id=fa7208d8&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fa7208d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{class:{ mini: _vm.mini }},[_c('div',{staticClass:\"logo-wrapper\"},[_c('div',{staticClass:\"logo\",on:{\"click\":_vm.goToHome}})]),_c('nav',[_c('ul',{attrs:{\"id\":\"nav-list\"}},[(_vm.enableVirtualMeeting)?_c('li',[_c('a',{on:{\"click\":_vm.startVirtualMeeting}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":_vm.videocamIcon,\"alt\":\"svg image\"}}),_c('p',[_vm._v(\"Start Virtual Meeting\")])])]):_vm._e(),_vm._l((_vm.header),function(ref,index){\nvar disable = ref.disable;\nvar event = ref.event;\nvar href = ref.href;\nvar target = ref.target;\nvar icon = ref.icon;\nvar label = ref.label;\nvar dropdown = ref.dropdown;\nvar customStyle = ref.customStyle;\nreturn [(!disable)?_c('li',{key:index,class:{ 'has-drop': dropdown && dropdown.length > 0, focus: _vm.hovering === index, 'dd-flip': _vm.isOutOfView((\"nav-item-\" + index)) },style:(customStyle),attrs:{\"id\":(\"nav-item-\" + index),\"title\":label},on:{\"mouseout\":function($event){_vm.hovering=-1},\"mouseover\":function($event){_vm.hovering=index}}},[(event)?[_c('a',{attrs:{\"target\":target},on:{\"click\":function($event){return _vm.$emit(event)}}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":icon,\"alt\":\"svg image\"}}),_c('span',[_vm._v(_vm._s(label))])])]:[_c('a',{attrs:{\"href\":href,\"target\":target,\"title\":href}},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],attrs:{\"src\":icon,\"alt\":\"svg image\"}}),_c('span',[_vm._v(_vm._s(label))])])],(dropdown && dropdown.length > 0)?_c('div',{staticClass:\"dropdown\",attrs:{\"id\":(\"nav-item-dropdown-\" + index)},on:{\"mouseover\":function($event){_vm.hovering=index}}},[_vm._l((dropdown),function(item,i){return [(!item.disable)?_c('a',{key:i,staticClass:\"dropdown-item\",attrs:{\"href\":item.href}},[_vm._v(_vm._s(item.label))]):_vm._e()]})],2):_vm._e()],2):_vm._e()]})],2),(_vm.showSideLogo)?_c('div',{staticClass:\"side-logo-wrapper\"},[_c('img',{directives:[{name:\"svg-inline\",rawName:\"v-svg-inline\"}],staticClass:\"mocha-logo side-logo\",attrs:{\"id\":\"mochaLogo\",\"src\":_vm.mochaIcon,\"alt\":\"svg image\"},on:{\"click\":_vm.goToHome}})]):_vm._e()]),(_vm.enableVirtualMeeting)?_c('AppDialog',{staticClass:\"virtual-meeting-url\",attrs:{\"hideFooter\":true},on:{\"closed\":function($event){_vm.isCopied = false}}},[_c('template',{slot:\"header\"},[_vm._v(\"Virtual Meeting URL\")]),_c('div',{attrs:{\"slot\":\"body\"},slot:\"body\"},[_c('p',[_vm._v(\"Click on the URL to copy: \"),_c('strong',[_vm._v(_vm._s(_vm.isCopied ? 'Copied!' : ''))])]),_c('div',{staticClass:\"jitsi-url\",on:{\"click\":_vm.copyUrl}},[_c('input',{attrs:{\"id\":\"url\",\"readonly\":\"\"},domProps:{\"value\":_vm.jitsiUrl}})])])],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport { HeaderItem } from '@core/model/structure/HeaderStructure'\nimport { cid, container } from 'inversify-props'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport VideocamIcon from '@core/components/header/assets/videocam.svg'\nimport MochaLogo from '@core/assets/mocha-logo.svg'\nimport AppDialog from '@core/components/AppDialog.vue'\n\n@Component({\n components: {\n AppDialog\n }\n})\nexport default class AppDynamicHeader extends Vue {\n @Prop({ required: true }) private readonly header!: HeaderItem[]\n\n @Prop()\n private mini\n\n private jitsiUrl = ''\n private isJitsiUrlShow = false\n private isCopied = false\n private hovering = -1\n private dropDownWidth = 200\n\n startVirtualMeeting () {\n this.jitsiUrl = 'https://meet.jit.si/' + this.randomStr(32)\n this.isJitsiUrlShow = true\n }\n\n randomStr (len: number) {\n const arr = '1234567890abcdefghijklmnopqrstuvwxyz'\n let ans = ''\n for (let i = len; i > 0; i--) {\n ans += arr[Math.floor(Math.random() * arr.length)]\n }\n return ans\n }\n\n copyUrl () {\n const url: HTMLInputElement = document.getElementById('url') as HTMLInputElement\n url.select()\n url.setSelectionRange(0, 99999)\n document.execCommand('copy')\n this.isCopied = true\n }\n\n // for flipping the dropdown list so that it stays within viewport\n isOutOfView (eleId) {\n const ele = document.getElementById(eleId)\n if (!ele) return false\n const pose = ele.getBoundingClientRect()\n if (document.documentElement.clientWidth - this.dropDownWidth < pose.left) {\n return true\n } else return false\n }\n\n get showSideLogo () {\n const { useSideLogo } = container.get(cid.IProjectSettings)\n return useSideLogo\n }\n\n get enableVirtualMeeting () {\n const { virtualMeeting } = container.get(cid.IProjectSettings)\n return virtualMeeting ? virtualMeeting.enable : false\n }\n\n get videocamIcon () {\n return VideocamIcon\n }\n\n get mochaIcon () {\n return MochaLogo\n }\n\n // Methods\n goToHome () {\n window.location.href = '/live/home'\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDynamicIconHeader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDynamicIconHeader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppDynamicIconHeader.vue?vue&type=template&id=e620e49e&scoped=true&\"\nimport script from \"./AppDynamicIconHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppDynamicIconHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppDynamicIconHeader.vue?vue&type=style&index=0&id=e620e49e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e620e49e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport AppDynamicHeader from '@core/components/header/AppDynamicHeader.vue'\nimport AppDynamicIconHeader from '@core/components/header/AppDynamicIconHeader.vue'\nimport { HeaderItem } from '@core/model/structure/HeaderStructure'\nimport KYCViewIcon from '@core/components/header/assets/kyc-view.svg'\nimport ResourcesIcon from '@core/components/header/assets/Icon_Resources.svg'\nimport ReportIcon from '@core/components/header/assets/Icon_Report.svg'\nimport AdminIcon from '@core/components/header/assets/admin.svg'\nimport ClientListIcon from '@core/components/header/assets/client-list.svg'\nimport AdminSettingsIcon from '@core/components/header/assets/admin-settings.svg'\nimport NewBusiness from '@core/components/header/assets/new_business.svg'\nimport NoticeIcon from '@core/components/header/assets/notice.svg'\nimport FAQIcon from '@core/components/header/assets/faq.svg'\nimport LogoutIcon from '@core/components/header/assets/logout.svg'\nimport { Dictionary } from 'lodash'\nimport API from '@core/services/API'\nimport { inject } from 'inversify-props'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\n\n@Component({\n components: {\n AppDynamicHeader,\n AppDynamicIconHeader\n }\n})\nexport default class TheHeader extends Vue {\n @inject()\n private $api: API\n\n @inject()\n private projectSettings: IProjectSettings\n\n @Prop({ default: () => [] }) private customHeaders: HeaderItem[]\n @Prop({ default: 'KYC' }) private kycViewLabel: string\n\n get isModernTheme () {\n return this.projectSettings.theme === 'Modern'\n }\n\n get currentUser () {\n return this.$store.getters.currentUser\n }\n\n get isBscReviewer () {\n return this.$store.getters.isBscReviewer\n }\n\n get isProductAdmin () {\n return this.$store.getters.isProductAdmin\n }\n\n get headerStructure (): HeaderItem[] {\n return this.currentUser.systemrole === 'bsc-reviewer' ? this.bscHeaderStructure() : this.fullHeaderStructure()\n }\n\n bscHeaderStructure (): HeaderItem[] {\n return [\n {\n event: 'logout',\n icon: LogoutIcon,\n label: 'Exit'\n }\n ]\n }\n\n fullHeaderStructure (): HeaderItem[] {\n return [\n {\n href: '/live/home',\n icon: KYCViewIcon,\n label: this.kycViewLabel,\n disable: this.isBscReviewer || this.isProductAdmin,\n dropdown: [\n {\n href: '/live/home-adviser',\n label: 'Adviser View'\n },\n {\n disable: this.currentUser.systemrole === 'adviser',\n href: '/live/home-supervisor',\n label: 'Supervisor View'\n },\n {\n disable: !this.currentUser.isSuperUser,\n href: '/live/home-submission',\n label: 'Admin View'\n }\n ]\n },\n {\n href: this.getHref('User Profile', { userOid: this.currentUser.accountID }, `/live/user-profile?_oid=${this.currentUser.accountID}`),\n icon: AdminIcon,\n label: 'Profile'\n },\n {\n disable: this.currentUser.isSuperUser,\n icon: NewBusiness,\n href: '/live/client-management',\n label: 'CMS'\n },\n {\n disable: !this.currentUser.isSuperUser,\n icon: ClientListIcon,\n href: '/live/client-list',\n label: 'Clients'\n },\n {\n disable: !this.currentUser.isSuperUser,\n icon: AdminSettingsIcon,\n href: '/live/admin',\n label: 'Admin',\n dropdown: [\n {\n href: '/live/user-list',\n label: 'User Administration'\n },\n {\n href: '/live/group-list',\n label: 'Group Administration'\n },\n {\n href: '/live/sales-team-administration',\n label: 'Sales Team Administration',\n disable: !this.projectSettings.useSalesTeamAdmin\n },\n {\n href: '/live/admin-assumptions',\n label: 'Assumptions List',\n disable: !this.projectSettings.useAssumptionsList\n },\n {\n href: '/live/admin-products',\n label: 'Product List'\n },\n {\n href: '/live/admin-pdfUpload',\n label: 'PDF Upload',\n disable: this.projectSettings.useResourcesModule\n },\n {\n href: '/live/payee-list',\n label: 'Intermediaries List'\n },\n {\n href: '/live/company-codes-list',\n label: 'Product Principal List'\n },\n {\n href: '/live/agent-codes-mass-update',\n label: 'Agent Codes Mass Update'\n },\n {\n href: '/live/client-management',\n label: 'CMS',\n disable: this.projectSettings.disableCMSModule\n },\n {\n href: '/live/cpd/summary',\n label: 'CPD'\n },\n {\n href: '/live/commission-module',\n label: 'Commission Module'\n },\n {\n href: '/live/bsc-home',\n label: 'BSC Module'\n },\n {\n href: '/live/disign-panel',\n label: 'Disign Panel'\n },\n {\n href: '/live/hierarchy-setup',\n label: 'Compensation Setup',\n disable: !this.projectSettings.useHierarchySetup\n },\n {\n href: '/live/admin-survey',\n label: 'Survey',\n disable: !this.projectSettings.useKycSurvey\n },\n {\n href: '/live/scheduler',\n label: 'Scheduler',\n disable: !this.projectSettings.useScheduler\n }\n ]\n },\n ...this.customHeaders,\n {\n icon: ResourcesIcon,\n href: '/live/resources',\n label: 'Resources',\n disable: !this.projectSettings.useResourcesModule\n },\n {\n href: '/live/pdfView/SFA_APL.pdf',\n icon: NoticeIcon,\n target: '_blank',\n label: 'Notices',\n disable: this.projectSettings.useResourcesModule\n },\n {\n icon: ReportIcon,\n href: '/live/report-management',\n label: 'Report',\n disable: !this.projectSettings.useReportModule\n },\n {\n href: '/live/pdfView/FAQ.pdf',\n icon: FAQIcon,\n target: '_blank',\n label: 'FAQ'\n },\n {\n event: 'logout',\n icon: LogoutIcon,\n label: 'Exit'\n }\n ]\n }\n\n getHref (routeName: string, params: Dictionary, legacyUrl: string) {\n const { route, href } = this.$router.resolve({\n name: routeName,\n params\n })\n\n return route.matched.length > 0 ? href : legacyUrl\n }\n\n async logout () {\n await this.$api.account.logout()\n await this.$store.dispatch('logout')\n this.$router.push({ name: 'Login' })\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheHeader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheHeader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TheHeader.vue?vue&type=template&id=450b50d8&scoped=true&\"\nimport script from \"./TheHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./TheHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./TheHeader.vue?vue&type=style&index=0&id=450b50d8&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"450b50d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_c('div',{staticClass:\"footer-credit\",on:{\"click\":_vm.goToChangelog}},[_vm._v(\" \"+_vm._s(_vm.ifamVersion.credit)+\" \"+_vm._s(_vm.ifamVersion.name)+\" (\"+_vm._s(_vm.ifamVersion.version)+\") - \"+_vm._s(_vm.projectVersion.name)+\" (Frontend Version \"+_vm._s(_vm.latestVersion)+\": Last updated on: \"+_vm._s(_vm.latestDate)+\") \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\nimport { inject } from 'inversify-props'\nimport { Component, Vue } from 'vue-property-decorator'\nimport IVersionInfo from '@master/config/IVersionInfo'\nimport moment from 'moment'\n\n@Component\nexport default class TheFooter extends Vue {\n @inject()\n private ifamVersion: IVersionInfo\n\n @inject()\n private projectVersion: IVersionInfo\n\n private changelog = []\n\n loadJSON () {\n try {\n this.changelog = require('@/config/changelog.json').changeLog\n } catch (error) {\n console.error(error)\n }\n }\n\n beforeMount () {\n this.loadJSON()\n }\n\n get latestVersion () {\n return this.changelog?.length ? this.changelog[0].version : '-'\n }\n\n get latestDate () {\n return this.changelog?.length ? moment(this.changelog[0].time).format('DD/MM/YYYY') : '-'\n }\n\n goToChangelog () {\n this.$router.push({ name: 'change-log' })\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheFooter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheFooter.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TheFooter.vue?vue&type=template&id=92fe777e&scoped=true&\"\nimport script from \"./TheFooter.vue?vue&type=script&lang=ts&\"\nexport * from \"./TheFooter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./TheFooter.vue?vue&type=style&index=0&id=92fe777e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"92fe777e\",\n null\n \n)\n\nexport default component.exports","import { Notification, MessageBox } from 'element-ui'\nimport { startCase } from 'lodash/fp'\n\nclass Loading {\n // force to use array instate of set due to reactive set was only support in vue 3\n private loadingTasks: string[] = []\n private readonly randomID: () => string\n\n constructor (randomID: () => string) {\n this.randomID = randomID\n }\n\n addLoadingTask (id: string) {\n this.loadingTasks.push(id)\n }\n\n removeLoadingTask (id: string) {\n this.loadingTasks = this.loadingTasks.filter(value => value !== id)\n }\n\n async loadingWrapper (functionToExecute: Promise) {\n const id = this.randomID()\n this.addLoadingTask(id)\n\n return new Promise((resolve, reject) => {\n functionToExecute.then(result => resolve(result))\n .catch(error => reject(error))\n .finally(() => {\n this.removeLoadingTask(id)\n })\n })\n }\n\n hasLoadingTasks () {\n return this.loadingTasks.length > 0\n }\n}\n\n/**\n * Override from ElNotificationOptions interface since the title is optional\n */\ninterface Options {\n type: 'success' | 'warning' | 'info' | 'error';\n title?: string;\n message: string;\n duration?: number;\n customClass?: string;\n}\n\n/**\n * Element UI Notification Component\n * https://element.eleme.io/#/en-US/component/notification\n */\nclass Alert {\n /**\n * should be using async await to show the alert, e.g\n * await this.uiService.alert.show({ type: 'success', message: 'this is success' })\n * @param options\n * @returns Notification\n */\n show (options: Options) {\n return Notification({\n type: options.type,\n title: options.title ?? startCase(options.type),\n message: options.message,\n duration: options.duration ?? 4500, // default duration is 4500ms,\n customClass: options.customClass ?? 'notification-overlay'\n })\n }\n}\n\n/**\n * Override from ElNotificationOptions interface since the title is optional\n */\n interface ConfirmOptions {\n type: 'success' | 'warning' | 'error';\n title?: string;\n message: string;\n confirmButtonText?: string;\n showCancelButton?: boolean;\n customClass?: string;\n}\n\n/**\n * Element UI Message Box Component\n * Need to have 'then' and 'catch', so the 'close' or 'cancel' button did not go throught the Vue errorHandler\n * https://element.eleme.io/#/en-US/component/message-box\n */\nclass Confirm {\n show (options: ConfirmOptions) {\n return new Promise((resolve) => {\n MessageBox({\n type: options.type,\n title: options.title ?? startCase(options.type),\n message: options.message,\n confirmButtonText: options.confirmButtonText ?? 'OK',\n showCancelButton: options.showCancelButton ?? true, // default always show cancel button\n customClass: options.customClass ?? 'confirm'\n }).then(() => {\n resolve(true)\n }).catch(() => {\n resolve(false)\n })\n })\n }\n}\n\nexport class UIService {\n loading = new Loading(this.randomID)\n alert = new Alert()\n confirm = new Confirm()\n demoMode = '$DEMO_MODE'\n\n private randomChar () {\n return String.fromCharCode(Math.ceil(Math.random() * 26) + 64)\n }\n\n private randomPrefix (length: number) {\n return new Array(length).fill(undefined).map(this.randomChar).join('')\n }\n\n randomID () {\n return this.randomPrefix(3) + Date.now()\n }\n}\n","import OccupationList from '@master/model/options/OccupationList.json'\nimport { RelationshipOptions } from '@master/model/options/RelationshipOptions'\nimport { VenueOptions } from '@master/model/options/VenueOptions'\n\n// this type is used to match formstructure's options type else it will complain not match type\nexport type options = {\n label: string;\n value: string | boolean | number;\n}\nexport class UIOptions {\n occupationList: string[] = OccupationList\n relationshipList: options[] = RelationshipOptions\n venueOptions: options [] = VenueOptions\n}\n","\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Watch } from 'vue-property-decorator'\nimport TheHeader from '@core/components/header/TheHeader.vue'\nimport TheFooter from '@core/components/TheFooter.vue'\nimport NewBusiness from '@core/components/header/assets/new_business.svg'\nimport { IProjectInfo } from '@master/config/IProjectInfo'\nimport AppLoader from '@core/components/AppLoader.vue'\nimport { inject } from 'inversify-props'\nimport { UIService } from '@core/services/UIService'\nimport { SharedVariable } from '@core/model/SharedVariable'\nimport API from '@core/services/API'\nimport { IProjectSettings, Theme } from '@master/config/IProjectSettings'\nimport { UIOptions } from '@core/model/UIOptions'\n\n@Component({\n components: {\n TheHeader,\n TheFooter,\n AppLoader\n }\n})\nexport default class App extends Vue {\n uiService = new UIService()\n uIOptions = new UIOptions()\n\n @inject()\n private sharedVariable: SharedVariable\n\n @inject()\n private $api: API\n\n @inject()\n private projectInfo: IProjectInfo\n\n @inject()\n private projectSettings: IProjectSettings\n\n private theme: Theme = 'Classic'\n\n async created () {\n // inject uiService here and set to sharedVariable to gain reactivity,\n // else the loading spinner wont show when added loading tasks\n this.sharedVariable.uiService = this.uiService\n const sysInfo = await this.$api.system.information()\n this.sharedVariable.sysInfo = sysInfo\n this.sharedVariable.options = this.uIOptions\n this.theme = this.projectSettings?.theme || this.theme // if theme is not set, default to 'classic'\n }\n\n get currentUser () {\n return this.$store.getters.currentUser\n }\n\n get customHeaders () {\n return [\n {\n disable: !this.currentUser.isSuperUser,\n icon: NewBusiness,\n href: '/live/policy-list',\n label: 'NBR'\n }\n ]\n }\n\n @Watch('$route')\n updateTitle (to) {\n document.title = to.meta.title || this.projectInfo.brandName\n }\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=8e84623e&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { sortBy } from 'lodash/fp'\nimport { MetaList } from './MetaList'\nimport { ProductMeta, ProductHeaders } from './ProductMeta'\n\nexport class ProductMetaList extends MetaList {\n private riderList: T[]\n private insuranceProductList: T[]\n private insuranceIssuer: string[]\n private investmentProductList: T[]\n private investmentIssuer: string[]\n private ilpProductList: T[]\n\n // used to override the filter, keep it undefined will fallback to default list in T\n filter = {\n insurance: {\n type: undefined,\n category: undefined\n },\n investment: {\n type: undefined,\n category: undefined\n },\n rider: {\n type: undefined,\n category: undefined\n },\n ilp: {\n type: undefined,\n category: undefined\n }\n }\n\n constructor (data: (string | number)[][], T = null) {\n super(ProductHeaders, data, T || ProductMeta)\n // sort product based on name\n this.list = sortBy((product) => product.name, this.list)\n }\n\n protected getIssuer (productList: T[]) {\n const issuer = productList.map(product => product.issuer).filter(issuer => issuer)\n const uniqIssuer = [...new Set(issuer)]\n // sort issuer\n return sortBy((issuer) => issuer.toLowerCase(), uniqIssuer)\n }\n\n private getDisplayList (productList: T[], needsCovered?: string, issuer?: string) {\n if (needsCovered && issuer) {\n return productList.filter(product => product.needsCovered?.includes(needsCovered) && (product.issuer === issuer || product.issuer_oid === issuer))\n } else if (needsCovered) {\n return productList.filter(product => product.needsCovered?.includes(needsCovered))\n } else if (issuer) {\n return productList.filter(product => product.issuer === issuer || product.issuer_oid === issuer)\n }\n return productList\n }\n\n private getDisplayListByIssuerOid (productList: T[], needsCovered?: string, issuerOid?: string) {\n if (needsCovered && issuerOid) {\n return productList.filter(product => product.needsCovered?.includes(needsCovered) && product.issuer_oid === issuerOid)\n } else if (needsCovered) {\n return productList.filter(product => product.needsCovered?.includes(needsCovered))\n } else if (issuerOid) {\n return productList.filter(product => product.issuer_oid === issuerOid)\n }\n return productList\n }\n\n private getDisplayListByInvestmentAccountCategory (productList: T[], issuerOid?: string) {\n if (issuerOid) {\n return productList.filter(product => product.category?.includes('Investment Account') && product.issuer_oid === issuerOid)\n }\n return productList.filter(product => product.category?.includes('Investment Account'))\n }\n\n // rider\n getRiderList () {\n if (!this.riderList) {\n this.riderList = this.list\n .filter(product => product.isRider(this.filter.rider.type, this.filter.rider.category))\n Object.freeze(this.riderList)\n }\n return this.riderList\n }\n\n getRiderDisplayList (needsCovered?: string, issuer?: string) {\n return this.getDisplayList(this.getRiderList(), needsCovered, issuer)\n }\n\n // insurance\n getInsuranceProductList () {\n if (!this.insuranceProductList) {\n this.insuranceProductList = this.list\n .filter(product => product.isInsuranceProduct(this.filter.insurance.type, this.filter.insurance.category) &&\n this.isWithinLaunchAndWithdrawnDates(product.launchDateMillis, product.withdrawnDateMillis))\n Object.freeze(this.insuranceProductList)\n }\n return this.insuranceProductList\n }\n\n getInsuranceProductDisplayList (needsCovered?: string, issuer?: string) {\n return this.getDisplayList(this.getInsuranceProductList(), needsCovered, issuer)\n }\n\n getInsuranceProductDisplayListByIssuerOid (needsCovered?: string, issuerOid?: string) {\n return this.getDisplayListByIssuerOid(this.getInsuranceProductList(), needsCovered, issuerOid)\n }\n\n getInsuranceIssuer () {\n if (!this.insuranceIssuer) {\n this.insuranceIssuer = this.getIssuer(this.getInsuranceProductList())\n }\n return this.insuranceIssuer\n }\n\n getInsuranceIssuerWithProducts (needsCovered: string) {\n const allIssuer = this.getInsuranceIssuer()\n const allProds = this.getInsuranceProductList()\n return needsCovered === '' ? allIssuer : allIssuer.filter(issuer => {\n return allProds.some(product => product.issuer === issuer && product.needsCovered?.includes(needsCovered))\n })\n }\n\n // investment\n getInvestmentProductList () {\n if (!this.investmentProductList) {\n this.investmentProductList = this.list\n .filter(product => product.isInvestmentProduct(this.filter.investment.type, this.filter.investment.category) &&\n this.isWithinLaunchAndWithdrawnDates(product.launchDateMillis, product.withdrawnDateMillis))\n Object.freeze(this.investmentProductList)\n }\n return this.investmentProductList\n }\n\n getInvestmentProductDisplayList (needsCovered?: string, issuer?: string) {\n return this.getDisplayList(this.getInvestmentProductList(), needsCovered, issuer)\n }\n\n getInvestmentProductDisplayListByIssuerOid (needsCovered?: string, issuerOid?: string) {\n return this.getDisplayListByIssuerOid(this.getInvestmentProductList(), needsCovered, issuerOid)\n }\n\n getAccountNameProducts (issuerOid?: string) {\n return this.getDisplayListByInvestmentAccountCategory(this.getInvestmentProductList(), issuerOid)\n }\n\n getInvestmentIssuer () {\n if (!this.investmentIssuer) {\n this.investmentIssuer = this.getIssuer(this.getInvestmentProductList())\n }\n return this.investmentIssuer\n }\n\n getInvestmentIssuerWithProducts (needsCovered: string) {\n const allIssuer = this.getInvestmentIssuer()\n const allProds = this.getInvestmentProductList()\n return needsCovered === '' ? allIssuer : allIssuer.filter(issuer => {\n return allProds.some(product => product.issuer === issuer && product.needsCovered?.includes(needsCovered))\n })\n }\n\n isWithinLaunchAndWithdrawnDates (launchDateMillis: number, withdrawnDateMillis: number) {\n // displays product with empty values for both launch and withdrawn dates as by default most are empty\n if (launchDateMillis == null && withdrawnDateMillis == null) {\n return true\n } else {\n const currentTime = Date.now()\n return (launchDateMillis ? currentTime >= launchDateMillis : true) && (withdrawnDateMillis ? currentTime <= withdrawnDateMillis : true)\n }\n }\n\n // ILP\n getILPProductList () {\n if (!this.ilpProductList) {\n this.ilpProductList = this.list\n .filter(product => product.isILPProduct(this.filter.ilp.type, this.filter.ilp.category))\n .sort((product1, product2) => {\n const product1Name = product1.name.toUpperCase()\n const product2Name = product2.name.toUpperCase()\n if (product1Name > product2Name) {\n return 1\n } else if (product1Name < product2Name) {\n return -1\n } else {\n return 0\n }\n })\n Object.freeze(this.ilpProductList)\n }\n return this.ilpProductList\n }\n}\n","export class Assumption {\n inflation?: number = undefined\n investmentReturn?: number = undefined\n educationInflationRate?: number = undefined\n salaryIncrementRate?: number = undefined\n retirementIncome?: number = undefined\n inflationAdjustedReturn?: number = undefined\n}\n","/**\n * @deprecated The method should import from `@master`\n */\nfunction infAdjReturn (inflationRate: number, investmentReturn: number) {\n return ((1 + investmentReturn) / (1 + inflationRate)) - 1\n}\n\n/**\n * @deprecated The method should import from `@master`\n */\nfunction pv (amount: number | undefined, period: number | undefined, rate: number | undefined, isEndMode = false) {\n const _amount = amount || 0\n const _period = period || 0\n const _rate = (rate || 0) / 100\n if (_rate === 0) {\n return _amount * _period\n } else {\n const dueFactor = (1 - (1 / (1 + _rate) ** _period)) * (isEndMode ? 1 : (1 + _rate))\n return _amount / _rate * dueFactor\n }\n}\n\n/**\n * @deprecated The method should import from `@master`\n */\nfunction fv (amount: number, period: number, rate: number) {\n const result = amount * ((1 + rate) ** period)\n return isNaN(result) ? 0 : result\n}\n\n/**\n * @deprecated The method should import from `@master`\n */\nfunction savingLumpSum (amount: number, period: number, rate: number) {\n return amount / (1 + rate) ** period\n}\n\n/**\n * @deprecated The method should import from `@master`\n */\nfunction savingMonthly (amount: number, period: number, rate: number) {\n if (rate === 0) {\n return amount / period / 12\n }\n\n const monthlyRate = rate / 12\n const overallRate = (1 + monthlyRate) ** (12 * period + 1)\n const snRate = monthlyRate / (overallRate - (1 + monthlyRate))\n return amount * snRate\n}\n\n/**\n * @deprecated The method should import from `@master`\n */\nfunction round (value: number, digitNumber: number) {\n const decimal = 10 ** digitNumber\n const result = Math.round(value * decimal) / decimal\n return isNaN(result) ? 0 : result\n}\n\n/**\n * @deprecated The method should import from `@master`\n */\nfunction sum (...array: Array ): number {\n let total = 0\n array.forEach(value => {\n if (typeof value === 'string') {\n total += parseFloat(value) || 0\n } else if (typeof value === 'number' && value) {\n total += value\n }\n })\n return total\n}\n\n/**\n * @deprecated Should import from `@master`\n */\nexport { infAdjReturn, pv, fv, savingLumpSum, savingMonthly, round, sum }\n","import { isEmpty } from 'lodash/fp'\n\nexport interface SimpleForm {\n client1: {\n personalDetails: {\n name: string;\n };\n };\n client2: {\n personalDetails: {\n name: string;\n included: boolean;\n };\n };\n dependants: { name: string }[];\n hasClient2: boolean;\n}\nexport interface IClientOptions {\n '': string;\n C1: string;\n C2: string;\n}\nexport interface IDependantOptions {\n '': string;\n D1: string;\n D2: string;\n D3: string;\n D4: string;\n}\nexport interface IAssuredOptions extends IClientOptions, IDependantOptions {\n}\nexport class FormOptions {\n kycForm: SimpleForm\n\n constructor (kycForm: SimpleForm) {\n this.kycForm = kycForm\n }\n\n get clientOptions () {\n if (!this.kycForm || !this.kycForm.client1) return\n const client1 = this.kycForm.client1.personalDetails\n const client2 = this.kycForm.client2.personalDetails\n const options = [\n { value: '', label: '' },\n { value: 'C1', label: client1.name }\n ]\n if (this.kycForm.hasClient2) {\n options.push({ value: 'C2', label: client2.name })\n }\n return options\n }\n\n get dependantOptions () {\n const dependantsNames = this.kycForm.dependants.filter(\n (d) => !isEmpty(d.name)\n ).map(\n (d, index) => {\n return {\n value: 'D' + (index + 1),\n label: d.name\n }\n }\n )\n return [...dependantsNames]\n }\n\n get assuredOptions () {\n return [...this.clientOptions, ...this.dependantOptions]\n }\n}\n","import { isEmpty } from 'lodash/fp'\nimport { ProductModel } from './ProductModel'\nimport LobToCategoryMap from '@core/pages/new-business-register/lob-to-category.json'\n\nexport class ProductList {\n originalList: ProductModel[]\n constructor (products: ProductModel[]) {\n this.originalList = products\n }\n\n retrieveRidersUsingFamilyCode (familyCode: string, issuerOid: string, needsCovered: string[]) {\n needsCovered = needsCovered.filter(needs => !isEmpty(needs))\n\n return this.originalList\n .filter(product => product.isRider())\n .map(product => {\n const productNeeds: string[] = JSON.parse(product.needsCovered)\n\n const isNeedFound = productNeeds.find(need => needsCovered.includes(need))\n const isFamilyCodeFound = !isEmpty(product.productFamilyCode) && product.productFamilyCode === familyCode\n const isSameIssuer = product.issuer_oid === issuerOid\n\n if (isFamilyCodeFound && isSameIssuer) {\n if (needsCovered.length && isNeedFound) {\n return product\n } else if (!needsCovered.length) {\n return product\n }\n }\n if (isEmpty(familyCode) && isSameIssuer && isEmpty(product.productFamilyCode)) {\n if (needsCovered.length && isNeedFound) {\n return product\n } else if (!needsCovered.length) {\n return product\n }\n }\n return null\n }).filter(product => !!product)\n .sort((a, b) => a.name.localeCompare(b.name)) // sort alphabetically by name\n }\n\n retrieveInsuranceProductList (needsCovered: string[], issuerOids: string[]) {\n needsCovered = needsCovered.filter(needs => !isEmpty(needs))\n issuerOids = issuerOids.filter(oid => !isEmpty(oid))\n return this.originalList\n .filter(product => product.isInsurance() && !product.isRider())\n .map(product => {\n if (issuerOids.length === 0 && needsCovered.length === 0) return product\n const productNeeds: string[] = JSON.parse(product.needsCovered)\n\n const isNeedFound = productNeeds.find(need => needsCovered.includes(need))\n const isIssuerFound = issuerOids.includes(product.issuer_oid)\n if (needsCovered.length > 0 && issuerOids.length > 0) {\n if (isNeedFound && isIssuerFound) return product\n } else if (isNeedFound) {\n return product\n } else if (isIssuerFound) {\n return product\n }\n\n return null\n }).filter(product => !!product)\n .sort((a, b) => a.name.localeCompare(b.name)) // sort alphabetically by name\n }\n\n retrieveMainInvestmentProductList (issuerOids: string[]) {\n issuerOids = issuerOids.filter(oid => !isEmpty(oid))\n return this.originalList\n .filter(product => product.category?.includes('Investment Account') || product.category?.includes('Collective Investment Scheme'))\n .map(product => {\n if (issuerOids.length === 0) return product\n const isIssuerFound = issuerOids.includes(product.issuer_oid)\n if (isIssuerFound) {\n return product\n }\n return null\n }).filter(product => !!product)\n }\n\n retrieveAllInvestmentProductList (issuerOids: string[]) {\n issuerOids = issuerOids.filter(oid => !isEmpty(oid))\n return this.originalList\n .filter(product => product.isInvestment())\n .map(product => {\n if (issuerOids.length === 0) return product\n const isIssuerFound = issuerOids.includes(product.issuer_oid)\n if (isIssuerFound) {\n return product\n }\n return null\n }).filter(product => !!product)\n }\n\n // if lob is cis, show product category of Investment Account\n // else return all products as usual\n retrieveProductFilteredList (policyType: string) {\n return this.originalList\n .filter(product => {\n if (policyType === 'collectiveinvestmentscheme') {\n return product.category === 'Investment Account'\n } else {\n return LobToCategoryMap[policyType].includes(product.category)\n }\n })\n }\n\n retrieveInvestmentProductListViaFamilyCode (familyCode: string, needsCovered: string[]) {\n needsCovered = needsCovered.filter(needs => !isEmpty(needs))\n return this.originalList\n .filter(product => product.isInvestment() && !product.category?.includes('Investment Account') && !product.category?.includes('Collective Investment Scheme'))\n .map(product => {\n const productNeeds: string[] = JSON.parse(product.needsCovered)\n\n const isNeedFound = productNeeds.find(need => needsCovered.includes(need))\n const isFamilyCodeFound = !isEmpty(product.productFamilyCode) && product.productFamilyCode === familyCode\n if (!isEmpty(familyCode) && needsCovered.length > 0) {\n if (isNeedFound && isFamilyCodeFound) return product\n } else if (isFamilyCodeFound) {\n return product\n }\n\n return null\n }).filter(product => !!product)\n }\n\n /**\n * This function is created for Wynnes v1 investment modal only.\n */\n retrieveInvestmentFundsWithOnlyNeeds (needsCovered: string[]) {\n return this.originalList\n .filter(product => product.isInvestment() && !product.category?.includes('Investment Account') && !product.category?.includes('Collective Investment Scheme'))\n .map(product => {\n const productNeeds: string[] = JSON.parse(product.needsCovered)\n const isNeedFound = productNeeds.find(need => needsCovered.includes(need))\n if (isNeedFound && needsCovered.length > 0) {\n return product\n }\n\n if (!needsCovered.length) {\n return product\n }\n\n return null\n }).filter(product => !!product)\n }\n\n retrieveInvestmentFundsVia (familyCode: string, issuerOids: string, needsCovered: string[]) {\n if (!issuerOids) return []\n\n return this.originalList\n .filter(product => product.isInvestment() && !product.category?.includes('Investment Account') && !product.category?.includes('Collective Investment Scheme'))\n .filter(product => product.issuer_oid === issuerOids)\n .map(product => {\n const productNeeds: string[] = JSON.parse(product.needsCovered)\n const isNeedFound = productNeeds.find(need => needsCovered.includes(need))\n const isFamilyCodeFound = !isEmpty(product.productFamilyCode) && product.productFamilyCode === familyCode\n const isSameIssuer = product.issuer_oid === issuerOids\n\n if (isFamilyCodeFound && isSameIssuer) {\n if (needsCovered.length && isNeedFound) {\n return product\n } else if (!needsCovered.length) {\n return product\n }\n }\n if (isEmpty(familyCode) && isSameIssuer && isEmpty(product.productFamilyCode)) {\n if (needsCovered.length && isNeedFound) {\n return product\n } else if (!needsCovered.length) {\n return product\n }\n }\n return null\n }).filter(product => !!product)\n .sort((a, b) => a.name.localeCompare(b.name)) // sort alphabetically by name\n }\n\n retrieveEbProductList (familyCode: string, productOid: string, issuerOid: string) {\n return this.originalList\n .filter(product => product.productFamilyCode === familyCode && product.oid !== productOid && product.issuer_oid === issuerOid)\n .sort((a, b) => a.name.localeCompare(b.name)) // sort alphabetically by name\n }\n}\n","import CoreAdviserDeclaration from '@master/model/kyc-form/AdviserDeclaration'\n\nexport default class AdviserDeclaration extends CoreAdviserDeclaration {\n clientInformation?: boolean = false\n clientMeetingDate?: number = undefined\n clientMeetingTime = ''\n clientMeetingVenue: number = undefined\n clientMeetingVenueSpecify = ''\n\n statements?: boolean = false\n jfwConsultantName = ''\n jfwConsultantComment = ''\n recommendation = '' // previously was declaration_recommendation_by_fc\n acknowledgement = '' // previously was declaration_acknowledgement_by_fc\n acknowledgementNotes = '' // previously was declaration_acknowledgement_fc_notes\n cashRebate = '' // Specific to JPara Changes\n monthlyAllowance = '' // Specific to JPara Changes\n haveJointFieldWork?: boolean = undefined // Specific to JPara Changes\n financialConsultantName = '' // Specific to JPara Changes\n financialConsultantMasNo = '' // Specific to JPara Changes\n financialConsultantComment = '' // Specific to JPara Changes\n\n constructor (type: 'fc_decl' = 'fc_decl') {\n super(type)\n }\n}\n","import { FormattedKYCForm } from './formattedKYCForm'\nimport { Base } from '@master/model/Base'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport Recommendation from './CustomRecommendation'\n\n// JPara specific\nexport default class AML extends Base {\n @Ignore()\n customType = ''\n\n adverseDBChecks = ''\n redFlag = ''\n sanctioned = ''\n financialFlowHighRisk = ''\n pepAssociated = ''\n // transactValueBelowThreshold = '' // set by custom pointer\n // applyMedicalProduct = '' // set by custom pointer\n\n dateOfAssessment: string | number = ''\n\n @Ignore()\n @Pointer('ROOT', 'recommendations')\n rcmd: Recommendation = null\n\n @Ignore()\n @Pointer('personalDetails', 'isSingaporean')\n isSingaporean = 'no'\n\n @Ignore()\n @Pointer('personalDetails', 'isHighRiskPR')\n isHighRiskPR = 'no'\n\n @Ignore()\n @Pointer('personalDetails', 'isHighRiskForeign')\n isHighRiskForeign = 'no'\n\n @Ignore()\n transactThreshold = 20000\n\n constructor (type: 'client_0' | 'client_1' = 'client_0') {\n super()\n this.customType = type + '_aml'\n }\n\n // custom method to extract since aml is a single object packed with the properties\n extractData (rawKycForm: FormattedKYCForm) {\n return super.extractData(rawKycForm[this.customType])\n }\n\n afterExtractData (data: any) {\n // Object.defineProperty(this, 'applyMedicalProduct', {\n // get: () => {\n // // console.log('[debug] ', this.rcmd)\n // // console.log('[debug] call c{n}hasMedical')\n // return this.customType === 'client_0_aml' ? this.rcmd.c1hasMedical : this.rcmd.c2hasMedical\n // }\n // })\n // Object.defineProperty(this, 'transactValueBelowThreshold', {\n // get: () => {\n // const tv = this.customType === 'client_0_aml'\n // ? this.rcmd.c1TransactValue\n // : this.rcmd.c2TransactValue\n // return tv <= this.transactThreshold ? 'yes' : 'no'\n // }\n // })\n // console.log(this.rcmd.c1hasMedical, this.rcmd.c2hasMedical)\n return data\n }\n\n get applyMedicalProduct () {\n return this.customType === 'client_0_aml' ? this.rcmd.c1hasMedical : this.rcmd.c2hasMedical\n }\n\n get transactValueBelowThreshold () {\n const tv = this.customType === 'client_0_aml'\n ? this.rcmd.c1TransactValue\n : this.rcmd.c2TransactValue\n return tv <= this.transactThreshold ? 'yes' : 'no'\n }\n\n convertToRawData () {\n this.dateOfAssessment = Date.now()\n const results = super.convertToRawData()\n // console.log('aml - convert', results)\n return {\n [this.customType]: results\n }\n }\n\n get isHighRisk () {\n return Object.keys(this).some(key => {\n return ['adverseDBChecks', 'redFlag', 'sanctioned', 'financialFlowHighRisk', 'pepAssociated'].includes(key) && this[key] === 'yes'\n })\n }\n\n get isMediumRisk () {\n const keys = [\n 'isSingaporean',\n 'isHighRiskPR',\n 'isHighRiskForeign',\n 'applyMedicalProduct',\n 'transactValueBelowThreshold',\n 'pepAssociated',\n 'financialFlowHighRisk',\n 'sanctioned',\n 'adverseDBChecks',\n 'redFlag'\n ]\n return keys.every(key => this[key] === 'no')\n }\n\n get riskRating () {\n const highRisk = this.isHighRisk\n if (highRisk) return 'HIGH'\n const medRisk = this.isHighRiskPR === 'yes' || this.isHighRiskForeign === 'yes' || this.isMediumRisk\n if (medRisk) return 'MEDIUM'\n const lowRisk = this.transactValueBelowThreshold === 'yes' || this.applyMedicalProduct === 'yes' || this.isSingaporean === 'yes'\n if (lowRisk) return 'LOW'\n return ''\n }\n}\n","import CoreBOP, { IBOP } from '@master/model/kyc-form/external/BeneficialOwnerParticulars'\nimport { isEmpty, isNull } from 'lodash/fp'\n\nexport default class CustomBOPParticulars extends CoreBOP implements IBOP {\n isNotComplete () {\n return isEmpty(this.contactNumber) ||\n isEmpty(this.correspondenceAddress) ||\n isNaN(this.dateOfBirth) ||\n isNull(this.dateOfBirth) ||\n isEmpty(this.fullName) ||\n isEmpty(this.nationality) ||\n isEmpty(this.nric) ||\n // isEmpty(this.politicallyExposedPerson) ||\n isEmpty(this.reasonsForAppointment) ||\n isEmpty(this.relationshipToCustomer) ||\n isEmpty(this.residentialAddress)\n }\n}\n","import { ClientBase } from '@master/model/ClientBase'\n// import BeneficialOwnerParticulars from '@master/model/kyc-form/external/BeneficialOwnerParticulars'\nimport CustomBOPParticulars from './CustomBOPParticulars'\nexport default class BeneficialOwner extends ClientBase {\n declarationBeneficialOwner = ''\n beneficialOwnerParticulars?: CustomBOPParticulars = undefined\n\n afterExtractData (data: { beneficialOwnerParticulars: {} }) {\n const bo = new CustomBOPParticulars()\n Object.assign(bo, bo.extractData(data.beneficialOwnerParticulars || {}))\n data.beneficialOwnerParticulars = bo\n return data\n }\n\n convertToRawData (index?: number) {\n const result: any = super.convertToRawData()\n // As beneficial owner particular is a Base, we need to add them in manually\n if (this.beneficialOwnerParticulars) {\n result[this.type + '_beneficial_owner_particulars'] = this.beneficialOwnerParticulars.convertToRawData() // eslint-disable-line @typescript-eslint/camelcase\n }\n return result\n }\n}\n","import CoreBudget from '@master/model/kyc-form/finances/Budget'\nimport { isUndefined, set, get } from 'lodash/fp'\n\n/**\n *\n */\nexport default class Budget extends CoreBudget {\n budgetCashPerAnnum?: number = undefined\n budgetCashPerMonth?: number = undefined\n budgetCash?: number = undefined\n budgetCpfOrdinary?: number = undefined\n budgetCpfSpecial?: number = undefined\n budgetSrsAccount?: number = undefined\n budgetUtilizeCpfMedisave?: number = undefined\n budgetSourceOfFunds: string[] = []\n budgetSourceOfWealth: string[] = []\n smallBudgetSize = ''\n budgetSubstantialReasons = '' // was ma_budget_substantial_reasons\n budgetOthers1 = '' // was ma_budget_others_1\n budgetOthers2 = '' // was ma_budget_others_2\n budgetOthers3 = '' // was ma_budget_others_3\n\n afterExtractData (data: {}) {\n let defaultMap = {}\n if (isUndefined(get('budgetSourceOfFunds', data))) {\n defaultMap = set('budgetSourceOfFunds', [], defaultMap)\n }\n if (isUndefined(get('budgetSourceOfWealth', data))) {\n defaultMap = set('budgetSourceOfWealth', [], defaultMap)\n }\n Object.assign(data, defaultMap)\n return data\n }\n}\n","import CoreCashFlow from '@master/model/kyc-form/finances/CashFlow'\nimport { Default } from '@master/annotation/Default'\n\nexport default class CashFlow extends CoreCashFlow {\n @Default(0)\n mortgageLoan = ''\n\n @Default(0)\n carLoan = ''\n\n @Default(0)\n lifestyleExpenses = ''\n\n get totalExpenses () { // was totalAnnualExpenses\n let res = 0\n res += parseInt(this.mortgageLoan) || 0\n res += parseInt(this.carLoan) || 0\n res += parseInt(this.insurancePremiums) || 0\n res += parseInt(this.regularSavings) || 0\n res += parseInt(this.parentalSupport) || 0\n res += parseInt(this.personalExpenses) || 0\n res += parseInt(this.lifestyleExpenses) || 0\n res += parseInt(this.others12) || 0\n return res\n }\n}\n","import CoreNetWorth from '@master/model/kyc-form/finances/NetWorth'\nimport { Default } from '@master/annotation/Default'\n\nexport default class NetWorth extends CoreNetWorth {\n @Default(0)\n cash = ''\n\n @Default(0)\n motor = ''\n\n @Default(0)\n otherPersonalAssets = ''\n\n @Default(0)\n investBusiness = ''\n\n @Default(0)\n cpfRa = ''\n\n @Default(0)\n srs = ''\n\n @Default(0)\n investProperty = ''\n\n @Default(0)\n lifeInsuranceCash = ''\n\n @Default(0)\n educationLoans = ''\n\n get totalUsedAssets () {\n let res = 0\n res += parseInt(this.cash) || 0\n res += parseInt(this.residentialAssets) || 0\n res += parseInt(this.motor) || 0\n res += parseInt(this.otherPersonalAssets) || 0\n return res\n }\n\n get totalInvestedAssets () {\n let res = 0\n res += parseInt(this.investBusiness) || 0\n res += parseInt(this.stocksShares) || 0\n res += parseInt(this.investProperty) || 0\n res += parseInt(this.unitTrust) || 0\n res += parseInt(this.cpfOrdinary) || 0\n res += parseInt(this.cpfSpecial) || 0\n res += parseInt(this.cpfRa) || 0\n res += parseInt(this.cpfMedisave) || 0\n res += parseInt(this.srs) || 0\n res += parseInt(this.lifeInsuranceCash) || 0\n res += parseInt(this.others1) || 0\n return res\n }\n\n totalUsableAssets () {\n return this.totalInvestedAssets + this.totalCashAssets\n }\n\n totalAssetsForTPD () {\n let res = 0\n res += this.totalInvestedAssets || 0\n res -= parseInt(this.cpfOrdinary) || 0\n res -= parseInt(this.cpfSpecial) || 0\n res += this.totalCashAssets\n return res\n }\n}\n","// import { ClientBase } from '@master/model/ClientBase'\nimport CorePersonalDetails from '@master/model/kyc-form/PersonalDetails'\nimport highRiskCountryList from '@company-common/config/high-risk-country.json'\nimport { YearsSupportMap } from './CustomDependant'\nimport { isUndefined } from 'lodash'\nimport { isNaN } from 'lodash/fp'\nexport default class PersonalDetails extends CorePersonalDetails {\n familyMedical = ''\n familyMedicalSpecified = ''\n\n get customRetirementAge () {\n if (isUndefined(this.intendedRetirementAge)) {\n this.intendedRetirementAge = this.populatedRetirementAge\n }\n return this.intendedRetirementAge\n }\n\n set customRetirementAge (value) {\n this.intendedRetirementAge = value\n }\n\n get populatedRetirementAge () {\n if (isUndefined(this.age) || isNaN(this.age) || !this.gender) return\n const supportYear = this.expectedSupportYear\n let retirementAge = supportYear - this.age\n if (retirementAge < 0) {\n retirementAge = 0\n }\n if (isUndefined(this.intendedRetirementAge)) {\n this.intendedRetirementAge = retirementAge\n }\n return retirementAge\n }\n\n get expectedSupportYear () {\n if (isUndefined(this.age) || isNaN(this.age) || !this.gender) return\n return YearsSupportMap[this.gender]?.year\n }\n\n get retirementDuration () {\n const supportYear = this.expectedSupportYear\n if (!supportYear) return\n const duration = supportYear - this.age\n if (duration < 0) return 0\n return duration\n }\n\n // For JPara's AML\n get isSingaporean () {\n return this.citizenship === 'singaporean' ? 'yes' : 'no'\n }\n\n // For JPara's AML\n get isHighRiskPR () {\n return this.citizenship === 'pr' && highRiskCountryList.includes(this.citizenshipSpecified) ? 'yes' : 'no'\n }\n\n // For JPara's AML\n get isHighRiskForeign () {\n return this.citizenship !== 'pr' && this.isSingaporean === 'no' && highRiskCountryList.includes(this.citizenshipSpecified) ? 'yes' : 'no'\n }\n}\n","import CoreRecommendationBasis from '@master/model/kyc-form/RecommendationBasis'\n\nexport default class RecommendationBasis extends CoreRecommendationBasis {\n liquidityConsideration = ''\n liquidityEmergencyFundsDuration = ''\n // riskConcentration = ''\n riskToleranceInTune = ''\n timeHorizonProtection = ''\n timeHorizonSavings = ''\n productDeviationsExistence = ''\n liquidityDeviationReason = ''\n productDeviationsExistenceReason = ''\n productRecommendationElaboration = ''\n productRecommendationReason = '' // auto populated\n productRiskAndLimitationsElaboration = ''\n productRiskAndLimitationsReason = '' // auto populated\n recommendationDecision = '' // became clientChoiceProductDetails depend on Client's Declaration's clientDecisionAgree == false (double check)\n // riskConcentrationDeviationReason = ''\n riskToleranceDeviationReason = ''\n timeHorizonDeviationReason = ''\n}\n","import PersonalAccidentNeeds from '@master/model/kyc-form/need-analysis/health/PersonalAccidentNeeds'\nimport { sum } from '@master/model/kyc-form/need-analysis/math'\n\nexport default class CustomPersonalAccidentNeeds extends PersonalAccidentNeeds {\n get surplusShortfall () {\n return sum(-this.amount, this.sumAvailable, -this.sumRequired)\n }\n}\n","import { IProjectSettings } from '@master/config/IProjectSettings'\nimport CoreKYCClient from '@master/model/kyc-form/KYCClient'\nimport { IDateService } from '@master/services/IDateService'\nimport AML from './AML'\nimport BeneficialOwner from './BeneficialOwner'\nimport Budget from './finances/Budget'\nimport CashFlow from './finances/JParaCashFlow'\nimport NetWorth from './finances/NetWorth'\nimport PersonalDetails from './PersonalDetails'\nimport RecommendationBasis from './RecommendationBasis'\nimport PersonalAccidentNeeds from './needs-analysis/health/CustomPersonalAccidentNeeds'\nimport RPA from './CustomRPA'\n\nexport default class KYCClient extends CoreKYCClient {\n declare personalDetails: PersonalDetails\n declare budget: Budget\n declare cashFlow: CashFlow\n declare netWorth: NetWorth\n declare recommendationBasis: RecommendationBasis\n aml: AML\n declare beneficialOwner: BeneficialOwner\n declare personalAccidentNeeds: PersonalAccidentNeeds\n declare rpa: RPA\n\n constructor (client: 'client_0' | 'client_1' = 'client_0', dateService: IDateService, projectSettings: IProjectSettings) {\n super(client, dateService, projectSettings)\n this.aml = new AML(client)\n this.personalDetails = new PersonalDetails(client, dateService)\n this.budget = new Budget(client)\n this.cashFlow = new CashFlow(client)\n this.netWorth = new NetWorth(client)\n this.recommendationBasis = new RecommendationBasis(client)\n this.beneficialOwner = new BeneficialOwner(client)\n this.personalAccidentNeeds = new PersonalAccidentNeeds(client)\n this.rpa = new RPA(client)\n }\n}\n","import TrustedIndividual from '@master/model/kyc-form/TrustedIndividual'\nimport KYCClient from './KYCClient'\nexport default class CustomTrustedIndividual extends TrustedIndividual {\n updateAccompanied (client1: KYCClient, client2: KYCClient) {\n const client1IsSelectedClient = client1.personalDetails.isSelectedClient()\n const client2Included = client2.personalDetails.included\n const client2IsSelectedClient = client2Included && client2.personalDetails.isSelectedClient()\n\n if (!client1IsSelectedClient && !client2IsSelectedClient) {\n this.accompanied = 'no'\n } else {\n this.accompanied = 'yes'\n }\n }\n}\n","import ExistingPortfolioSummary from '@master/model/kyc-form/existing-plans/ExistingPortfolioSummary'\nimport ExistingPortfolioV2 from '@master/model/kyc-form/existing-plans/ExistingPortfolioV2'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\n\n/**\n * The ROOT here is referring to ExistingPortfolioDTO, the reason why this is setup is because\n * 1) KYCForm.ts `setData` function will only setup ExistingPortfolioDTO (as it extends Base)\n * 2) ExistingPortfolioDTO will be responsible to setup both the declaration and summary\n *\n * This means that whatever this class needs for Pointer, the parent (ExistingPortfolioDTO) needs\n * to help setup in the parent class.\n *\n * This is a convoluted way of doing, but it solves the problem right now.\n *\n * Ideal way: The KycForm setData function is able to help setup child properties recursively even though\n * the parent extends from Base.\n */\nexport default class ExistingPortfolioSummaryV2 extends ExistingPortfolioSummary {\n @Ignore()\n @Pointer('ROOT', 'hasClient2')\n hasClient2?: boolean = false\n\n @Ignore()\n @Pointer('ROOT', 'portfolios')\n portfolios: ExistingPortfolioV2[] = null\n}\n","/* eslint-disable @typescript-eslint/camelcase */\nimport { TypeBase } from '@master/model/TypeBase'\nimport ExistingPortfolioDeclaration from '@master/model/kyc-form/existing-plans/ExistingPortfolioDeclaration'\nimport ExistingPortfolioSummaryV2 from './ExistingPortfolioSummary'\nimport ExistingPortfolioV2 from '@master/model/kyc-form/existing-plans/ExistingPortfolioV2'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer, setupPointer } from '@master/annotation/Pointer'\nimport { IExistingPortfolioWrapper } from '@master/model/kyc-form/existing-plans/IExistingPortfolioWrapper'\nimport { IExistingPortfolio } from '../IExistingPortfolio'\nexport default class ExistingPortfolioDTO extends TypeBase implements IExistingPortfolioWrapper {\n declaration: ExistingPortfolioDeclaration\n summary: ExistingPortfolioSummaryV2\n portfolios: IExistingPortfolio[] = []\n\n @Ignore()\n @Pointer('ROOT', 'hasClient2')\n hasClient2?: boolean = false\n\n constructor (type: 'existing_insurance' = 'existing_insurance') {\n super(type)\n this.declaration = new ExistingPortfolioDeclaration()\n this.summary = new ExistingPortfolioSummaryV2(new ExistingPortfolioV2())\n }\n\n beforeExtractData (rawData: any) {\n Object.assign(this.declaration, this.declaration.extractData(rawData))\n\n // setupPointer is necessary to have the child's properties been reference to what we want\n // however, as we do not have access to KYCForm to be the ROOT, we will be using\n // ExistingPortfolioDTO as the root for the attributes.\n setupPointer(this.summary.getPointers(), this, this, this.summary)\n Object.assign(this.summary, this.summary.extractData(rawData))\n return rawData\n }\n\n afterExtractData (data: { portfolios: any[] }) {\n const portfolios = data.portfolios || []\n data.portfolios = portfolios.map(element => {\n const portfolio = new ExistingPortfolioV2()\n Object.assign(portfolio, portfolio.extractData(element))\n return portfolio\n })\n return data\n }\n\n convertToRawData () {\n const rawArray = this.portfolios.map(portfolio => portfolio.convertToRawData())\n const declaration = this.declaration.convertToRawData()\n const summary = this.summary.convertToRawData()\n const data = super.convertToRawData()\n data.existing_insurance_portfolios = rawArray\n return {\n existing_insurance_portfolios: rawArray,\n ...declaration,\n ...summary\n }\n }\n}\n","import ExistingPortfolioSummaryV2 from '@master/model/kyc-form/existing-plans/v2/ExistingPortfolioSummary'\nimport CustomExistingPortfolioV2 from '@company-common/model/kyc-form/existing-plans/CustomExistingPortfolioV2'\nimport { Pointer } from '@master/annotation/Pointer'\n\nexport default class CustomExistingPortfolioSummary extends ExistingPortfolioSummaryV2 {\n @Pointer('ROOT', 'portfolios')\n portfolios: CustomExistingPortfolioV2[] = null\n}\n","import ExistingPortfolioDTO from '@master/model/kyc-form/existing-plans/v2/ExistingPortfolioDTO'\nimport ExistingPortfolioDeclaration from '@master/model/kyc-form/existing-plans/ExistingPortfolioDeclaration'\nimport CustomExistingPortfolioSummary from './CustomExistingPortfolioSummary'\nimport CustomExistingPortfolioV2 from '@company-common/model/kyc-form/existing-plans/CustomExistingPortfolioV2'\n\nexport default class CustomExistingPortfolioDTO extends ExistingPortfolioDTO {\n declare summary: CustomExistingPortfolioSummary\n portfolios: CustomExistingPortfolioV2[] = []\n\n constructor (type: 'existing_insurance' = 'existing_insurance') {\n super(type)\n this.declaration = new ExistingPortfolioDeclaration()\n this.summary = new CustomExistingPortfolioSummary(new CustomExistingPortfolioV2())\n }\n\n afterExtractData (data: { portfolios: any[] }) {\n const portfolios = data.portfolios || []\n data.portfolios = portfolios.map(element => {\n const portfolio = new CustomExistingPortfolioV2()\n Object.assign(portfolio, portfolio.extractData(element))\n return portfolio\n })\n return data\n }\n}\n","import ExistingInvestSummary from '@master/model/kyc-form/existing-plans/ExistingInvestSummary'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport { IExistingInvestment } from '@master/model/kyc-form/existing-plans/IExistingInvestment'\n\n/**\n * The ROOT here is referring to ExistingInvestmentDTO, the reason why this is setup is because\n * 1) KYCForm.ts `setData` function will only setup ExistingInvestmentDTO (as it extends Base)\n * 2) ExistingInvestmentDTO will be responsible to setup both the declaration and summary\n *\n * This means that whatever this class needs for Pointer, the parent (ExistingInvestmentDTO) needs\n * to help setup in the parent class.\n *\n * This is a convoluted way of doing, but it solves the problem right now.\n *\n * Ideal way: The KycForm setData function is able to help setup child properties recursively even though\n * the parent extends from Base.\n */\nexport default class ExistingInvestSummaryV2 extends ExistingInvestSummary {\n @Ignore()\n @Pointer('ROOT', 'hasClient2')\n hasClient2?: boolean = false\n\n @Ignore()\n @Pointer('ROOT', 'portfolios')\n portfolios: IExistingInvestment[] = null\n}\n","/* eslint-disable @typescript-eslint/camelcase */\nimport { TypeBase } from '@master/model/TypeBase'\nimport ExistingInvestDeclaration from '@master/model/kyc-form/existing-plans/ExistingInvestDeclaration'\nimport ExistingInvestSummaryV2 from './ExistingInvestSummary'\nimport ExistingInvestmentV2 from '@master/model/kyc-form/existing-plans/ExistingInvestmentV2'\nimport { Ignore } from '@master/annotation/Ignore'\nimport { Pointer, setupPointer } from '@master/annotation/Pointer'\nimport { IExistingInvestmentWrapper } from '@master/model/kyc-form/existing-plans/IExistingInvestmentWrapper'\n\nexport default class ExistingInvestmentDTO extends TypeBase implements IExistingInvestmentWrapper {\n declaration: ExistingInvestDeclaration\n summary: ExistingInvestSummaryV2\n portfolios: ExistingInvestmentV2[] = []\n\n @Ignore()\n @Pointer('ROOT', 'hasClient2')\n hasClient2?: boolean = false\n\n constructor (type: 'existing_investment' = 'existing_investment') {\n super(type)\n this.declaration = new ExistingInvestDeclaration()\n this.summary = new ExistingInvestSummaryV2(new ExistingInvestmentV2())\n }\n\n beforeExtractData (rawData: any) {\n Object.assign(this.declaration, this.declaration.extractData(rawData))\n\n // setupPointer is necessary to have the child's properties been reference to what we want\n // however, as we do not have access to KYCForm to be the ROOT, we will be using\n // ExistingPortfolioDTO as the root for the attributes.\n setupPointer(this.summary.getPointers(), this, this, this.summary)\n Object.assign(this.summary, this.summary.extractData(rawData))\n return rawData\n }\n\n afterExtractData (data: { portfolios: any[] }) {\n const portfolios = data.portfolios || []\n data.portfolios = portfolios.map(element => {\n const portfolio = new ExistingInvestmentV2()\n Object.assign(portfolio, portfolio.extractData(element))\n return portfolio\n })\n return data\n }\n\n convertToRawData () {\n const rawArray = this.portfolios.map(portfolio => portfolio.convertToRawData())\n const declaration = this.declaration.convertToRawData()\n const summary = this.summary.convertToRawData()\n const data = super.convertToRawData()\n data.existing_investment_portfolios = rawArray\n return {\n existing_investment_portfolios: rawArray,\n ...declaration,\n ...summary\n }\n }\n}\n","import CoreRecommendation from '@master/model/kyc-form/RecommendationV2'\nimport { BasicProductV2 as BasicProduct } from '@master/model/kyc-form/product/BasicProductV2'\n\nexport type SelectedClient = 'Client 1' | 'Client 2'\n\nexport default class CustomRecommendation extends CoreRecommendation {\n // to get back the raw data for saving to backend\n convertToRawData () {\n const data = super.convertToRawData()\n return {\n ...data,\n ma_transact_value: this.c1TransactValue, // eslint-disable-line @typescript-eslint/camelcase\n ja_transact_value: this.c2TransactValue, // eslint-disable-line @typescript-eslint/camelcase\n ma_total_annual_premium: this.totalAnnualPremiumForClient1, // eslint-disable-line @typescript-eslint/camelcase\n ja_total_annual_premium: this.totalAnnualPremiumForClient2, // eslint-disable-line @typescript-eslint/camelcase\n ma_total_single_premium: this.totalSinglePremiumForClient1, // eslint-disable-line @typescript-eslint/camelcase\n ja_total_single_premium: this.totalSinglePremiumForClient2 // eslint-disable-line @typescript-eslint/camelcase\n }\n }\n\n get c1hasMedical () {\n return this.rcmd.filter((rmd) => {\n return rmd.clientIndex === 0\n }).some((rmd) => {\n const accepted = rmd.clientChoice === 'accept' || rmd.clientChoice === 'ownchoice'\n const covered = rmd.productNeedsCovered ? rmd.productNeedsCovered.includes('Hospitalisation Expenses') : null\n const categorized = ['Health Insurance', 'Hospital Cash Insurance'].includes(rmd.productCategory)\n return accepted && (covered || categorized)\n }) ? 'yes' : 'no'\n }\n\n get c2hasMedical () {\n return this.rcmd.filter((rmd) => {\n return rmd.clientIndex === 1\n }).some((rmd) => {\n const accepted = rmd.clientChoice === 'accept' || rmd.clientChoice === 'ownchoice'\n const covered = rmd.productNeedsCovered ? rmd.productNeedsCovered.includes('Hospitalisation Expenses') : null\n const categorized = ['Health Insurance', 'Hospital Cash Insurance'].includes(rmd.productCategory)\n return accepted && (covered || categorized)\n }) ? 'yes' : 'no'\n }\n\n // for JPara's AML & recommendation premium summary table\n get c1TransactValue () {\n return this.totalAnnualPremiumForClient1 + this.totalSinglePremiumForClient1\n }\n\n // for JPara's AML & recommendation premium summary table\n get c2TransactValue () {\n return this.totalAnnualPremiumForClient2 + this.totalSinglePremiumForClient2\n }\n\n get totalAnnualPremiumForClient1 () {\n return this.totalAnnualizedPremiumForClient(0)\n }\n\n get totalAnnualPremiumForClient2 () {\n return this.totalAnnualizedPremiumForClient(1)\n }\n\n get totalSinglePremiumForClient1 () {\n return this.totalSinglePremiumForClient(0)\n }\n\n get totalSinglePremiumForClient2 () {\n return this.totalSinglePremiumForClient(1)\n }\n\n get uncategorisedProductLists () {\n return this.rcmd.filter(each => !each.type) || []\n }\n\n getClientIndex (client: SelectedClient) {\n return client === 'Client 1' ? 0 : 1\n }\n\n isProductsWithPriorityExistsInRcmd (targetPrioirty, client: SelectedClient) {\n return this.rcmd.some(each => each.priority === targetPrioirty && each.clientIndex === this.getClientIndex(client))\n }\n\n // 1. check if rcmd has this new priority and clientIndex, if yes, do thing\n // 2. if dun have then add a new product and set the priotity and client index\n addUnCategoriesProduct (priority, client: SelectedClient) {\n if (!this.isProductsWithPriorityExistsInRcmd(priority, client)) {\n const newProduct = new BasicProduct(this.riskRatingService)\n newProduct.type = ''\n newProduct.priority = priority\n newProduct.clientIndex = this.getClientIndex(client)\n this.rcmd.push(newProduct)\n }\n }\n\n removeUnCategoriesProduct (priority, client: SelectedClient) {\n const toDeleteIndex = this.rcmd.findIndex(each => each.priority === priority && each.clientIndex === this.getClientIndex(client) && !each.type)\n if (toDeleteIndex > -1) {\n this.rcmd.splice(toDeleteIndex, 1)\n }\n }\n\n get productReasons (): string {\n return this.flatAllProducts.filter(prod => !prod.isCustom && ['accept', 'ownchoice'].includes(prod.clientChoice)).map(prod => {\n if (prod instanceof BasicProduct) {\n if (!this.hasClient2 && prod.clientIndex === 1) {\n return ''\n }\n }\n return prod.getReasons()\n }).join('\\n\\n')\n }\n\n get productLimitations (): string {\n return this.flatAllProducts.filter(prod => !prod.isCustom && ['accept', 'ownchoice'].includes(prod.clientChoice)).map(prod => {\n if (prod instanceof BasicProduct) {\n if (!this.hasClient2 && prod.clientIndex === 1) {\n return ''\n }\n }\n return prod.getLimitations()\n }).join('\\n\\n')\n }\n\n get hasNtuc (): boolean {\n return this.rcmd.some(prod => {\n return prod.isNtuc()\n })\n }\n}\n","import { Base } from '../Base'\nimport ILPPortfolioV2 from './ILPPortfolioV2'\n\nexport default class ILPPortfolioArray extends Base {\n ilpPortfolios: ILPPortfolioV2[] = []\n\n afterExtractData (data: { ilpPortfolios: any[] }) {\n const ilpPortfolios = data.ilpPortfolios || []\n data.ilpPortfolios = ilpPortfolios.map(element => {\n const ilpPortfolio = new ILPPortfolioV2()\n Object.assign(ilpPortfolio, ilpPortfolio.extractData(element))\n return ilpPortfolio\n })\n return data\n }\n\n convertToRawData () {\n const rawArray = this.ilpPortfolios.map(ilpPortfolio => ilpPortfolio.convertToRawData())\n\n return {\n /* eslint-disable @typescript-eslint/camelcase */\n ilp_portfolios: rawArray\n }\n }\n}\n","import DependantsProtectionClient from '@master/model/kyc-form/need-analysis/protection/DependantsProtectionClient'\n\nexport default class CustomDependantsProtectionClient extends DependantsProtectionClient {\n setupDefaultRate (inDefaultRate: number) {\n this.defaultRate = inDefaultRate\n }\n}\n","\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport AdviserDetails from '@master/model/kyc-form/AdviserDetails'\nimport CoreKYCForm from '@master/model/kyc-form/KYCForm'\nimport { IDateService } from '@master/services/IDateService'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport AdviserDeclaration from './AdviserDeclaration'\nimport KYCClient from './KYCClient'\nimport { CustomDependant } from './CustomDependant'\nimport CustomTrustedIndividual from './CustomTrustedIndividual'\nimport { IExistingInvestmentWrapper } from '@master/model/kyc-form/existing-plans/IExistingInvestmentWrapper'\nimport { IExistingPortfolioWrapper } from '@master/model/kyc-form/existing-plans/IExistingPortfolioWrapper'\nimport CustomExistingPortfolioDTO from './existing-plans/v2/CustomExistingPortfolioDTO'\nimport ExistingInvestmentDTO from '@master/model/kyc-form/existing-plans/v2/ExistingInvestmentDTO'\nimport CustomRecommendation from './CustomRecommendation'\nimport ILPPortfolioArray from '@master/model/kyc-form/ILPPortfolioArray'\nimport CustomDependantsProtectionClient from './needs-analysis/protection/CustomDependantsProtectionClient'\n\nexport default class KYCForm extends CoreKYCForm {\n declare client1: KYCClient\n declare client2: KYCClient\n declare trustedIndividual: CustomTrustedIndividual\n declare dependants: CustomDependant[]\n declare recommendations: CustomRecommendation\n newIlpPortfolios: ILPPortfolioArray\n declare dependantsProtectionClient: CustomDependantsProtectionClient[]\n\n existingPortfolio: IExistingPortfolioWrapper = new CustomExistingPortfolioDTO()\n existingInvestment: IExistingInvestmentWrapper = new ExistingInvestmentDTO()\n\n adviser = {\n details: new AdviserDetails(),\n declaration: new AdviserDeclaration()\n }\n\n constructor (dateService: IDateService, projectSettings: IProjectSettings, riskRatingService: IRiskRatingService) {\n super(dateService, projectSettings, riskRatingService)\n\n this.client1 = new KYCClient('client_0', dateService, projectSettings)\n this.client2 = new KYCClient('client_1', dateService, projectSettings)\n this.dependants = Array(5).fill(null).map(() => new CustomDependant(dateService))\n this.trustedIndividual = new CustomTrustedIndividual()\n this.newIlpPortfolios = new ILPPortfolioArray()\n this.recommendations = new CustomRecommendation(riskRatingService)\n this.dependantsProtectionClient = Array(5).fill(null).map(() => new CustomDependantsProtectionClient(projectSettings))\n }\n}\n","import { IValidation } from '@master/interface/IValidation'\nimport { ProductMetaList } from '@master/model/common/ProductMetaList'\nimport { Module, VuexModule, Mutation, Action, MutationAction } from 'vuex-module-decorators'\nimport axios from 'axios'\nimport { Assumption } from '@master/model/common/Assumption'\nimport { infAdjReturn, round } from '@core/model/kyc-form/need-analysis/math'\nimport { cid, container } from 'inversify-props'\nimport API from '@core/services/API'\nimport { FormOptions } from '@master/model/kyc-form/FormOptions'\nimport '@/DIContainer'\nimport { ProductHeaders } from '@master/model/common/ProductMeta'\nimport { IDateService } from '@master/services/IDateService'\nimport { CompanyDetailsMetaList } from '@core/pages/companyDetails/model/CompanyDetailsMetaList'\nimport { header as cdHeader } from '@core/pages/companyDetails/model/CompanyDetailsMeta'\nimport { ProductList } from '@core/pages/adminProductList/model/ProductList'\nimport { ProductService } from '@core/pages/adminProductList/api'\nimport { ProductModel } from '@core/pages/adminProductList/model/ProductModel'\nimport KYCForm from '@company-common/model/kyc-form/KYCForm'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport { ProductFilterRequest } from '@core/pages/adminProductList/model/ProductFilterRequest'\n\nconst $api = container.get('$api')\nconst dateService = container.get(cid.IDateService)\nconst projectSettings = container.get(cid.IProjectSettings)\nconst riskRatingService = container.get(cid.IRiskRatingService)\n\n@Module({\n namespaced: true\n})\nexport default class KYCFormStore extends VuexModule {\n kycForm: KYCForm = new KYCForm(dateService, projectSettings, riskRatingService)\n formOptions: FormOptions\n assumption: Assumption = new Assumption()\n loadingState: 'loading' | 'loaded' | 'saving' = 'loading'\n computedValidationResult: IValidation = {}\n kycFormErrors = undefined\n myInfoStatus = {\n haveNewInfoClient1: false,\n haveNewInfoClient2: false\n }\n\n productMetaList: ProductMetaList = new ProductMetaList([])\n productList: ProductList = new ProductList([])\n cdMetaList: CompanyDetailsMetaList = new CompanyDetailsMetaList([])\n\n // State changes\n showCompletionModalState = false\n\n @Mutation\n setKYCForm (kycForm) {\n this.kycForm.setData(kycForm)\n this.formOptions = new FormOptions(this.kycForm)\n this.kycForm.setupDefaultRate(this.assumption)\n }\n\n @Mutation\n setKYCFormErrors (errors: {}) {\n this.kycFormErrors = errors\n }\n\n @Mutation\n setAssumption (assumption: {\n assumptions_annualinflation;\n assumptions_annualinvestmentreturn;\n assumptions_increaseineducationcosts;\n assumptions_annualsalaryincrement;\n assumptions_retirementincome;\n }) {\n const {\n assumptions_annualinflation, // eslint-disable-line @typescript-eslint/camelcase\n assumptions_annualinvestmentreturn, // eslint-disable-line @typescript-eslint/camelcase\n assumptions_increaseineducationcosts, // eslint-disable-line @typescript-eslint/camelcase\n assumptions_annualsalaryincrement, // eslint-disable-line @typescript-eslint/camelcase\n assumptions_retirementincome // eslint-disable-line @typescript-eslint/camelcase\n } = assumption\n const inflation = parseFloat(assumptions_annualinflation)\n const investmentReturn = parseFloat(assumptions_annualinvestmentreturn)\n this.assumption = {\n inflation,\n investmentReturn,\n educationInflationRate: parseFloat(assumptions_increaseineducationcosts),\n salaryIncrementRate: parseFloat(assumptions_annualsalaryincrement),\n retirementIncome: parseFloat(assumptions_retirementincome),\n inflationAdjustedReturn: round(infAdjReturn(inflation / 100, investmentReturn / 100) * 100, 2)\n }\n }\n\n @Mutation\n setLoadingState (state: 'loading' | 'loaded' | 'saving') {\n this.loadingState = state\n }\n\n @Mutation\n setShowCompletionModalState (state: boolean) {\n this.showCompletionModalState = state\n }\n\n @Mutation\n setValidationResult (result: IValidation) {\n this.computedValidationResult = result\n }\n\n @Mutation\n setProductMetaList (data: (string | number)[][]) {\n const productMetaList = new ProductMetaList(data)\n // Override filter when needed\n // e.g. productMetaList.filter.ilp.type = ['abc']\n this.productMetaList = productMetaList\n }\n\n @Mutation\n setProductList (data: ProductModel[]) {\n const productList = new ProductList(data)\n // Override filter when needed\n // e.g. productMetaList.filter.ilp.type = ['abc']\n this.productList = productList\n }\n\n @Mutation\n setCompanyDetailList (data: (string | number)[][]) {\n // console.log(data, 'setookodsmp')\n const companyMetaList = new CompanyDetailsMetaList(data)\n this.cdMetaList = companyMetaList\n }\n\n @Action\n updateShowCompletionModalState (state: boolean) {\n this.context.commit('setShowCompletionModalState', state)\n }\n\n @Action\n updatedValidationResult (result: {}) {\n this.context.commit('setValidationResult', result)\n }\n\n // add rawError to get the raw error during this action to get better knowing where the issue come from\n @Action({ rawError: true })\n async loadKYCForm (formOid: string) {\n this.context.commit('setLoadingState', 'loading')\n const { meta: kycForm, error } = await $api.kycForm.metaGet({ _oid: formOid })\n\n // To ensure Important Notice product list always has latest data\n const adviserData = await $api.adviserDetails.getAccountMeta({ _oid: kycForm.adviser_oid })\n .then((response) => {\n return response.meta\n })\n .catch((error) => {\n console.error('KYCForm Store: Fail to get adviser detail', error)\n alert('KYCForm Store: Fail to get adviser detail' + error)\n })\n\n kycForm.important_notice_list = adviserData?.adviser_products || adviserData?.adviserProducts // eslint-disable-line @typescript-eslint/camelcase\n kycForm.important_notice_others = adviserData?.other_adviser_products // eslint-disable-line @typescript-eslint/camelcase\n kycForm.adviser_mas_rep_no = adviserData?.mas_repno || adviserData?.masRepno // eslint-disable-line @typescript-eslint/camelcase\n\n if (error) {\n this.context.commit('setKYCFormErrors', error)\n this.context.commit('setLoadingState', 'loaded')\n return kycForm\n }\n //\n // pre processor that will change all the ma to the standardize format\n //\n\n // console.log('Formatted', kycForm)\n this.context.commit('setKYCForm', kycForm)\n this.context.commit('setLoadingState', 'loaded')\n }\n\n @Action\n async loadAssumption () {\n const assumptionNames = [\n 'assumptions_annualinflation',\n 'assumptions_annualinvestmentreturn',\n 'assumptions_increaseineducationcosts',\n 'assumptions_annualsalaryincrement',\n 'assumptions_retirementincome'\n ]\n const { data: { values: assumption } } = await axios.get(`/live/api/kvmApi/getValues?keys=${encodeURIComponent(JSON.stringify(assumptionNames))}`)\n this.context.commit('setAssumption', assumption)\n }\n\n @MutationAction({ mutate: ['myInfoStatus'] })\n async checkMyInfoUpdate (kycFormOid) {\n /* eslint-disable @typescript-eslint/camelcase */\n const { data } = await $api.myInfo.newPersonInfoAvailable({ kycFormOid })\n\n const client0Available = data?.client_0?.new_person_info_available || false\n const client1Available = data?.client_1?.new_person_info_available || false\n\n const myInfoStatus = {\n haveNewInfoClient1: client0Available,\n haveNewInfoClient2: client1Available\n }\n /* eslint-enable @typescript-eslint/camelcase */\n return { myInfoStatus }\n }\n\n @Action\n async fetchRecommendedProducts () {\n if (this.productMetaList.getFullList().length > 0) return\n this.context.commit('setLoadingState', 'saving')\n const { data } = await $api.relProductList.list({\n headers: JSON.stringify(ProductHeaders),\n // only return active products\n query: 'status = ?',\n queryArgs: JSON.stringify([1])\n })\n this.context.commit('setLoadingState', 'loaded')\n this.context.commit('setProductMetaList', data)\n }\n\n @Action({ rawError: true })\n async fetchRecommendedAllProducts () {\n if (this.productList.originalList.length > 0) return\n const products = (await ProductService.retrieveAllProducts({\n status: [1]\n })).map(product => {\n return Object.assign(new ProductModel(), product)\n })\n // console.log(products)\n this.context.commit('setProductList', products)\n }\n\n @Action\n async fetchProductPrincalList () {\n if (this.cdMetaList.getFullList().length > 0) return\n const { data } = await $api.companyDetails.list({\n headers: JSON.stringify(cdHeader)\n })\n this.context.commit('setProductPrincipalList', data)\n }\n\n @Action({ rawError: true })\n async fetchCompanyDetails () {\n if (this.cdMetaList.getFullList().length > 0) return\n\n const headers = cdHeader\n const { data } = await $api.companyDetails.list({\n headers: JSON.stringify(headers)\n })\n\n this.context.commit('setCompanyDetailList', data)\n }\n\n @Action({ rawError: true })\n async fetchAllActiveInactiveProducts () { // this is used for NBR site\n if (this.productList.originalList.length > 0) return\n const request = new ProductFilterRequest()\n request.status = [1, 0]\n const products = (await ProductService.retrieveAllProducts(request)).map(product => {\n return Object.assign(new ProductModel(), product)\n })\n\n this.context.commit('setProductList', products)\n }\n}\n","export default class ESubProduct {\n lifeAssured = ''\n planName = ''\n type = ''\n productType = ''\n riders: [] = []\n\n constructor (rawData) {\n this.extractData(rawData)\n }\n\n get isInsurance () {\n return this.type === 'insurance'\n }\n\n extractData (rawData: any) {\n if (rawData) {\n Object.keys(this).forEach((key) => {\n this[key] = rawData[key]\n })\n }\n }\n\n updateProperties (latest: object) {\n Object.keys(latest).forEach((key) => {\n this[key] = latest[key]\n })\n }\n}\n","import ESubProduct from './ESubProduct'\n\nexport default class ExternalSub {\n _oid = ''\n caseId = ''\n caseNo = ''\n companyName = ''\n eSubApprovedTimestamp = -1\n eSubFinalisedTimestamp = -1\n eSubmissionMasterOid = ''\n expired = false\n pdfs = []\n policyStatusJson = ''\n products: ESubProduct[] = []\n status = 'Cancel'\n isEnabled = false\n\n constructor (rawData) {\n this.extractData(rawData)\n }\n\n extractData (rawData: any) {\n if (rawData) {\n Object.keys(this).forEach((key) => {\n if (key === 'products') {\n rawData[key].forEach((raw, idx) => {\n this.products[idx] = new ESubProduct(raw)\n })\n return\n }\n if (key in this) this[key] = rawData[key]\n })\n }\n }\n\n updateProperties (latest: any) {\n Object.keys(latest).forEach((key) => {\n if (key === 'products') {\n latest.products.forEach((newdata, idx) => {\n this.products[idx].updateProperties(newdata)\n })\n return\n }\n if (key in this) this[key] = latest[key]\n })\n }\n\n pdfTeleporter () {\n const teleporters = this.pdfs.map((pdf) => {\n const pdfLinks = {}\n if (pdf.hasProposal) Object.assign(pdfLinks, { Proposal: `/live/dsfPdfView?pdfOid=${pdf.pdfOid}&pdfType=proposal` })\n if (pdf.hasQuotation) Object.assign(pdfLinks, { Quotation: `/live/dsfPdfView?pdfOid=${pdf.pdfOid}&pdfType=quotation` })\n if (pdf.hasQuestionnaire) Object.assign(pdfLinks, { Questionnaire: `/live/dsfPdfView?pdfOid=${pdf.pdfOid}&pdfType=questionnaire` })\n return pdfLinks\n })\n // the following is for testing purpose ( dummy data)\n // teleporters.push({\n // Proposal: '/dsfPdfView?pdfOid=test&pdfType=proposal',\n // Quotation: '/dsfPdfView?pdfOid=test&pdfType=proposal',\n // Questionnaire: '/dsfPdfView?pdfOid=test&pdfType=proposal'\n // })\n return teleporters\n }\n\n get policyStatusParsed () {\n let policyDetails\n // if a string is passed in, convert to a json array\n if (typeof this.policyStatusJson === 'string' && this.policyStatusJson !== '') {\n policyDetails = JSON.parse(this.policyStatusJson)\n } else {\n policyDetails = this.policyStatusJson\n }\n if (policyDetails === null || typeof policyDetails === 'undefined') {\n return 'No policy statuses found from dsf for this case id.'\n }\n let policyStatusString = ''\n for (let i = 0; i < policyDetails.length; ++i) {\n let productId = policyDetails[i].productId\n if (productId === null || typeof productId === 'undefined') {\n productId = ''\n }\n let policyNo = policyDetails[i].policyNo\n if (policyNo === null || typeof policyNo === 'undefined') {\n policyNo = ''\n }\n let status = policyDetails[i].status\n if (status === null || typeof status === 'undefined') {\n status = ''\n }\n policyStatusString = policyStatusString.concat(`Product ID: ${productId}
`)\n policyStatusString = policyStatusString.concat(`Policy No.: ${policyNo}
`)\n policyStatusString = policyStatusString.concat(`Status: ${status}

`)\n }\n return policyStatusString\n }\n\n isNotFinalised () {\n return ['not submitted', 'in progress', 'completed'].includes(this.status?.toLowerCase())\n }\n\n isSubmittedOrApproved () {\n return ['submitted', 'approved'].includes(this.status?.toLowerCase())\n }\n\n isSubmitted () {\n return this.status?.toLowerCase() === 'submitted'\n }\n\n isCancelled () {\n return this.status?.toLowerCase() === 'cancel'\n }\n\n canFinaliseESub () {\n return this.status?.toLowerCase() === 'completed'\n }\n\n isNtuc () {\n const companyNameMin = this.companyName.replace(/ /g, '').toLowerCase()\n if (companyNameMin === 'ntuc' || companyNameMin === 'income' || companyNameMin === 'ntucincome') {\n return true\n }\n return false\n }\n}\n","export default class InternalSub {\n _oid = ''\n companyName = ''\n products = []\n\n constructor (rawData) {\n this.extractData(rawData)\n }\n\n extractData (rawData: any) {\n if (rawData) {\n Object.keys(this).forEach((key) => {\n this[key] = rawData[key]\n })\n }\n }\n\n updateProperties (latest: object) {\n Object.keys(latest).forEach((key) => {\n this[key] = latest[key]\n })\n }\n}\n","\nimport ExternalSub from '@master/model/kyc-pdf/ExternalSub'\nimport InternalSub from '@master/model/kyc-pdf/InternalSub'\n\nexport default class ESub {\n client: [\n {\n internal: Array;\n external: Array;\n },\n {\n internal: Array;\n external: Array;\n }\n ] = [\n {\n internal: [],\n external: []\n },\n {\n internal: [],\n external: []\n }\n ]\n\n dateOrApplication = ''\n\n extractData (esubData: any) {\n esubData.client.forEach((clien: { external: any[]; internal: any[] }, cindex: string | number) => {\n clien.external.forEach((exsub: any) => {\n const exsubObj = new ExternalSub(exsub)\n this.client[cindex].external.push(exsubObj)\n })\n clien.internal.forEach((insub) => {\n const insubObj = new InternalSub(insub)\n this.client[cindex].internal.push(insubObj)\n })\n })\n Object.keys(this).forEach((key) => {\n if (key !== 'client') {\n this[key] = esubData[key]\n }\n })\n }\n\n enabled () {\n // to check if esub is enabled\n // because the esub enabled flag is stored in external esub product, need check each of them\n // step:\n // 1. to extract all external first\n // 2. and flat it\n // 3. check if any one of esub product have esub isEnabled flag\n const externalList = this.client.map((cl) => cl.external).filter(ex => ex.length > 0).flat()\n return externalList.some(eSub => eSub.isEnabled)\n }\n\n allFinalised () {\n if (this.client === null || typeof this.client === 'undefined') {\n return true // if no proposal data was found, just return true\n }\n const clientData = this.client\n if (clientData === null || typeof clientData === 'undefined' || clientData.length <= 0) {\n return true\n }\n // is not all finalised if one is not finalised\n return !this.client.map((cl) => {\n return cl.external.map((ex) => {\n return ex.isNotFinalised() && ex.isEnabled // only check when it is enabled\n }).includes(true)\n }).includes(true)\n }\n\n allNtucFinalised () {\n if (this.client === null || typeof this.client === 'undefined') {\n return true // if no proposal data was found, just return true\n }\n const clientData = this.client\n if (clientData === null || typeof clientData === 'undefined' || clientData.length <= 0) {\n return true\n }\n // is not all finalised if either one is ntuc and not finalised\n return !this.client.map((cl) => {\n return cl.external.map((ex) => {\n return ex.isNtuc() && ex.isNotFinalised() && ex.isEnabled // only check when it is enabled\n }).includes(true)\n }).includes(true)\n }\n\n hasNtuc () {\n if (this.client === null || typeof this.client === 'undefined') {\n return true // if no proposal data was found, just return true\n }\n const clientData = this.client\n if (clientData === null || typeof clientData === 'undefined' || clientData.length <= 0) {\n return true\n }\n return this.client.map((cl) => {\n return cl.external.map((ex) => {\n return ex.isNtuc() && ex.isEnabled // only check when it is enabled; if it disabled, consider no NTUC\n }).includes(true)\n }).includes(true)\n }\n\n allCancelled () {\n if (this.client === null || typeof this.client === 'undefined') {\n return true // if no proposal data was found, just return true\n }\n const clientData = this.client\n if (clientData === null || typeof clientData === 'undefined' || clientData.length <= 0) {\n return true\n }\n return !this.client.map((cl) => {\n return !cl.external.map((ex) => {\n return ex.isCancelled() || !ex.isEnabled // if esub is disabled, consider it is cancel\n }).includes(false)\n }).includes(false)\n }\n}\n","import { snakeCase } from 'lodash/fp'\n\nexport default class NtucNric {\n clientName = ''\n ntucClientNricOid = ''\n nricList = []\n\n constructor (rawData) {\n this.extractData(rawData)\n }\n\n extractData (rawData: any) {\n console.log('init ntucnric', rawData)\n if (rawData) {\n Object.keys(this).forEach((key) => {\n if (rawData[snakeCase(key)]) {\n this[key] = rawData[snakeCase(key)]\n return\n }\n if (rawData[key]) this[key] = rawData[key]\n })\n }\n }\n\n updateProperties (latest: object) {\n Object.keys(latest).forEach((key) => {\n if (this[key]) this[key] = latest[key]\n })\n }\n\n pdfTeleporter () {\n return this.nricList.map((nlist) => {\n const forDisplay = { cname: '', url: '' }\n forDisplay.cname = this.clientName\n forDisplay.url = `/live/dsfNricView?ntucClientNricOid=${this.ntucClientNricOid}&fileName=${nlist.fileName}&fileType=${nlist.fileType}`\n return forDisplay\n })\n }\n}\n","import { RawKYCPdf } from '@/views/kyc-pdf/model/rawKYCPdf'\nimport { FormattedKYCPdf } from '@/views/kyc-pdf/model/formattedKYCPdf'\n\nexport default class FormKeyConverter {\n mapRawToFormatted (kycPdf: RawKYCPdf) {\n const formattedKYCPdf: FormattedKYCPdf = {} as FormattedKYCPdf // eslint-disable-line @typescript-eslint/consistent-type-assertions\n let reconstructKey = ''\n for (const key of Object.keys(kycPdf)) {\n reconstructKey = key\n\n // there are existing fields with client_\n const regex = new RegExp(/^client_[a-zA-Z]/)\n if (regex.test(reconstructKey)) {\n reconstructKey = 'client_0' + reconstructKey.substr(6)\n } else if (key.startsWith('client_2')) {\n reconstructKey = 'client_1' + reconstructKey.substr(8)\n }\n\n switch (key) {\n case 'ppda_consent' :\n reconstructKey = 'pdpa_consent'\n break\n }\n\n // replace all key starts with ma/ja\n if (reconstructKey.startsWith('ma_')) {\n reconstructKey = 'client_0_' + reconstructKey.substr(3)\n } else if (key.startsWith('ja_')) {\n reconstructKey = 'client_1_' + reconstructKey.substr(3)\n }\n if (reconstructKey.startsWith('accompaniment_')) {\n reconstructKey = 'trusted_individual_' + reconstructKey.substr(14)\n }\n // for pep\n reconstructKey = reconstructKey.replace('pep1', 'pep_1')\n reconstructKey = reconstructKey.replace('pep2', 'pep_2')\n reconstructKey = reconstructKey.replace('pep3', 'pep_3')\n // end for pep\n if (reconstructKey === '') {\n reconstructKey = key\n }\n // go one level deeper if its ptc fields\n if (reconstructKey === 'ptc_fields') {\n formattedKYCPdf[reconstructKey] = {}\n let ptcReconstructKey = ''\n for (const ptcKey of Object.keys(kycPdf[key as keyof RawKYCPdf])) {\n ptcReconstructKey = ptcKey\n if (ptcKey.startsWith('ma_')) {\n ptcReconstructKey = 'client_0_' + ptcKey.substr(3)\n } else if (ptcKey.startsWith('ja_')) {\n ptcReconstructKey = 'client_1_' + ptcKey.substr(3)\n }\n formattedKYCPdf[reconstructKey][ptcReconstructKey] = kycPdf[key as keyof RawKYCPdf][ptcKey]\n }\n continue\n }\n // After all has been renamed, put the into the formatted form\n formattedKYCPdf[reconstructKey] = kycPdf[key as keyof RawKYCPdf]\n }\n\n return formattedKYCPdf\n }\n\n mapFormattedToRaw (snakeCaseKycPdf: {}) {\n const rawKycPdf = {\n _oid: ''\n }\n let reconstructKey = ''\n for (const key of Object.keys(snakeCaseKycPdf)) {\n reconstructKey = this.getRawKey(key)\n\n rawKycPdf[reconstructKey as keyof {}] = snakeCaseKycPdf[key as keyof {}]\n }\n\n return rawKycPdf\n }\n\n getRawKey (key: string) {\n let reconstructKey = key\n switch (key) {\n case 'pdpa_consent' :\n reconstructKey = 'pdpa_consent'\n break\n }\n\n // replace all key starts with ma/ja\n if (reconstructKey.startsWith('client_0_')) {\n reconstructKey = 'ma_' + reconstructKey.substr(9)\n } else if (key.startsWith('client_1_')) {\n reconstructKey = 'ja_' + reconstructKey.substr(9)\n }\n if (reconstructKey.startsWith('trusted_individual_')) {\n reconstructKey = 'accompaniment_' + reconstructKey.substr(19)\n }\n // for pep\n reconstructKey = reconstructKey.replace('pep_1', 'pep1')\n reconstructKey = reconstructKey.replace('pep_2', 'pep2')\n reconstructKey = reconstructKey.replace('pep_3', 'pep3')\n // end for pep\n\n if (reconstructKey === '') {\n reconstructKey = key\n }\n return reconstructKey\n }\n}\n","import { Base } from '@master/model/Base'\n\nexport default class ESignDoc extends Base {\n id = ''\n status = ''\n retrieved?: boolean = false\n\n extractData (rawKycPdf: any) {\n const rawData = rawKycPdf.esign_doc\n const data = {}\n if (rawData) {\n Object.keys(this).forEach((key) => {\n data[key] = rawData[key]\n })\n } else { // if no raw data found, assume all empty\n Object.keys(this).forEach((key) => {\n if (key === 'retrieved') {\n data[key] = false\n } else data[key] = ''\n })\n }\n return data\n }\n\n extractLatest (updatedDoc: any) {\n const rawData = updatedDoc\n if (rawData) {\n Object.keys(this).forEach((key) => {\n this[key] = rawData[this.snakeCaseKey(key)]\n })\n }\n }\n\n convertToRawData () {\n const result = {}\n Object.keys(this).forEach((key) => {\n result[key] = this[key]\n })\n return result\n }\n}\n","import { Base } from '@master/model/Base'\nimport { isUndefined } from 'lodash/fp'\n\nexport default class ESignSigner extends Base {\n contactCountryCode = '+65'\n contactNumber = ''\n emailAddress = ''\n expiresAt?: number = undefined\n lastRequest?: number = undefined\n mobileNumber?: number = undefined\n name = ''\n nric = ''\n order?: number = undefined\n role = ''\n signatureId = ''\n signingUrl = ''\n status = ''\n token = ''\n\n extractData (rawKycPdf: any, index?: number) {\n if (!rawKycPdf.esign_signers) return {}\n const rawData = rawKycPdf.esign_signers[index]\n const data = {}\n if (rawData) {\n Object.keys(this).forEach((key) => { data[key] = rawKycPdf.esign_signers[index][this.snakeCaseKey(key)] })\n }\n return data\n }\n\n extractLatest (updatedSigner: [any]) {\n if (!isUndefined(updatedSigner)) {\n const rawData = updatedSigner.find(signer => signer.role === this.role)\n if (rawData) {\n Object.keys(this).forEach((key) => {\n let newValue = this[key]\n // to check if the latest data contains the target data, if not, retain current value\n const latest = rawData[this.snakeCaseKey(key)]\n if (latest !== undefined) newValue = latest\n this[key] = newValue\n })\n }\n }\n }\n\n mapFormattedToRaw () {\n const data = {}\n if (data) {\n Object.keys(this).forEach((key) => { data[this.snakeCaseKey(key)] = this[key] })\n }\n return data\n }\n}\n","import { Base } from '@master/model/Base'\nimport FormKeyConverter from '@master/model/kyc-form/FormKeyConverter'\nimport KYCPdf from '../KYCPdf'\n\n// Adding new signers / Removing signer can be done in here\nexport default class SignPadSigners extends Base {\n client0Signature = ''\n client0SignatureDate?: number = undefined\n client1Signature = ''\n client1SignatureDate?: number = undefined\n trustedIndividualSignature = ''\n trustedIndividualSignatureDate?: number = undefined\n adviserSignature = ''\n adviserSignatureDate?: number = undefined\n adviser2Signature = ''\n adviser2SignatureDate?: number = undefined\n pep1Signature = ''\n pep1SignatureDate?: number = undefined\n pep2Signature = ''\n pep2SignatureDate?: number = undefined\n pep3Signature = ''\n pep3SignatureDate?: number = undefined\n beneficialOwner1Signature = ''\n beneficialOwner1SignatureDate?: number = undefined\n beneficialOwner2Signature = ''\n beneficialOwner2SignatureDate?: number = undefined\n\n getAllSigners () {\n return ['client0', 'client1', 'trustedIndividual', 'pep1', 'pep2', 'pep3', 'beneficialOwner1', 'beneficialOwner2', 'adviser', 'adviser2']\n }\n\n getApplicableSigners (kycPdf: KYCPdf) {\n const allsigners = this.getAllSigners()\n let applicableSigners = []\n try {\n applicableSigners = allsigners.map((signer) => {\n let profile = {}\n switch (true) {\n case (typeof signer !== 'string' || typeof signer.includes !== 'function') :\n profile = false\n break\n case signer === 'adviser' : {\n const adv = kycPdf.adviser.details\n if (adv) profile = { name: adv.adviserName, nric: adv.adviserMasRepNo }\n break\n }\n case signer === 'adviser2' : {\n const adv = kycPdf.adviser.declaration\n if (!adv.haveJointFieldWork && !adv.haveJointSales) {\n profile = false\n } else {\n profile = { name: adv.financialConsultantName, nric: adv.financialConsultantMasNo }\n }\n break\n }\n case signer === 'client0' : {\n const c1 = kycPdf.client1.personalDetails\n if (c1) profile = { name: c1.name, nric: c1.nric }\n break\n }\n case signer === 'client1' :\n if (!kycPdf.hasClient2) {\n profile = false\n } else {\n const c2 = kycPdf.client2.personalDetails\n if (c2) profile = { name: c2.name, nric: c2.nric }\n }\n break\n case signer === 'trustedIndividual' :\n if (!kycPdf.hasAccompaniment) {\n profile = false\n } else {\n const ti = kycPdf.trustedIndividual\n if (ti) profile = { name: ti.name, nric: ti.nric }\n }\n break\n case signer.includes('pep') : { // pep1 , pep2, pep3\n const pepn = parseInt(signer.replace('pep', '')) - 1\n const targetPEP = kycPdf.clientDeclaration.pepList[pepn] // pep1 , pep2, pep3\n\n if (!kycPdf.hasValidC1PEP && !kycPdf.hasValidC2PEP) {\n // REJECT : both dont declare PEP flag and PEP profile\n profile = false\n } else if (!targetPEP || !targetPEP.fullName.length) {\n // REJECT : pep not found or no full name\n profile = false\n } else if (!['C1', 'C2'].includes(targetPEP.policyholderName)) {\n // REJECT : pep found but not assigned to either C1 or C2\n profile = false\n } else if (targetPEP.policyholderName === 'C1' && !kycPdf.hasValidC1PEP) {\n // REJECT : pep for client 1, but is incomplete\n profile = false\n } else if (targetPEP.policyholderName === 'C2' && !kycPdf.hasValidC2PEP) {\n // REJECT : pep for client 2, but is incomplete\n profile = false\n } else {\n if (targetPEP) profile = { name: targetPEP.fullName, nric: targetPEP.nric }\n }\n break\n }\n case signer.includes('beneficialOwner') : {\n const bon = parseInt(signer.replace('beneficialOwner', ''))\n if ((bon === 1 && !kycPdf.hasValidBO1) || (bon === 2 && !kycPdf.hasValidBO2)) {\n // if (!kycPdf.hasValidBO1 || !kycPdf.hasValidBO2) {\n profile = false\n } else {\n const targetBO = kycPdf['client' + bon].beneficialOwner.beneficialOwnerParticulars\n if (targetBO) profile = { name: targetBO.fullName, nric: targetBO.nric }\n }\n break\n }\n default :\n profile = false\n }\n if (profile !== false) {\n Object.assign(profile, {\n role: signer,\n signatureOriKey: signer + 'Signature',\n signature: this[signer + 'Signature'],\n signaturedateOriKey: signer + 'SignatureDate',\n signaturedate: this[signer + 'SignatureDate']\n })\n }\n return profile\n }).filter(signer => signer !== false)\n } catch (ex) {\n return []\n }\n return applicableSigners\n }\n\n getDisplayNames () {\n return {\n client0: 'Client 1',\n client1: 'Client 2',\n trustedIndividual: 'Accompaniment',\n adviser: 'Adviser',\n adviser2: 'Adviser 2',\n pep1: 'PEP 1',\n pep2: 'PEP 2',\n pep3: 'PEP 3',\n beneficialOwner1: 'Beneficial Owner Client 1',\n beneficialOwner2: 'Beneficial Owner Client 2'\n }\n }\n\n extractData (rawKYCPdf: any) {\n const data = {}\n Object.keys(this).forEach((key) => {\n const snakeKey = this.snakeCaseKey(key)\n const fetched = rawKYCPdf[snakeKey]\n if (fetched !== undefined) data[key] = fetched\n })\n return data\n }\n\n getRawKey (formattedKey: string) {\n const fkConverter = new FormKeyConverter()\n return fkConverter.convertToRawKey(this.snakeCaseKey(formattedKey))\n }\n\n saveSignature (newSignature: object) {\n console.log('saving signature', newSignature)\n Object.keys(newSignature).forEach((key) => {\n this[key] = newSignature[key]\n })\n }\n}\n","import { Base } from '@master/model/Base'\n\nexport default class OfficerRemarks extends Base {\n adviser = ''\n supervisor = ''\n submission = ''\n\n extractData (rawData: any) {\n const data = {}\n if (rawData) {\n Object.keys(this).forEach((key) => {\n data[key] = rawData[key + '_remarks']\n })\n }\n return data\n }\n\n packData () {\n const data = {}\n if (data) {\n Object.keys(this).forEach((key) => {\n data[key + '_remarks'] = this[key]\n })\n }\n return data\n }\n}\n","import { snakeCase } from 'lodash/fp'\nimport { Base } from '@master/model/Base'\n\nexport default class OfficerApproval extends Base {\n adminFullName = ''\n adminDecidedUserName = ''\n adminDecidedOid = ''\n supervisorDecidedUserName = ''\n supervisorDecidedOid = ''\n supervisorFullname = ''\n dateOpsDecide: string | number = null\n dateOpsDecideDate: string | number = null\n managerEndorsedSignature = ''\n managerEndorsedSignatureDate: string | number = null\n dateSupervisorDecide: string | number = null\n dateSupervisorDecideDate = ''\n proxySupervisorDecided = false\n\n getKey (key: string) {\n const regex = new RegExp(/(User|Full)Name$/g)\n return regex.test(key) ? snakeCase(key).replace('_n', 'N') : snakeCase(key)\n }\n\n extractData (rawData: any) {\n const data = {}\n if (rawData) {\n Object.keys(this).forEach((key) => {\n const val = this[key]\n data[key] = rawData[this.getKey(key)] || val\n })\n }\n return data\n }\n\n packData () {\n const data = {}\n if (data) {\n Object.keys(this).forEach((key) => {\n data[this.getKey(key)] = this[key]\n })\n }\n return data\n }\n\n supervisorDecide (curUser: any, nowInISO: string, proxySupervisorDecided: boolean, signatureData: string) {\n this.supervisorDecidedOid = curUser._oid\n this.supervisorDecidedUserName = curUser.accountNames[0]\n this.supervisorFullname = curUser.fullname\n this.dateSupervisorDecideDate = nowInISO\n this.dateSupervisorDecide = Date.now()\n this.managerEndorsedSignature = signatureData\n this.managerEndorsedSignatureDate = Date.now()\n this.proxySupervisorDecided = proxySupervisorDecided\n }\n\n opsDecide (curUser: any, nowInISO: string) {\n this.adminDecidedOid = curUser._oid\n this.adminDecidedUserName = curUser.accountNames[0]\n this.adminFullName = curUser.fullname\n this.dateOpsDecide = Date.now()\n this.dateOpsDecideDate = nowInISO\n }\n}\n","import { PTC } from '@master/model/ptc/PTC'\nimport { ISimpleForm } from '@master/interface/ISimpleForm'\n\nexport class PTCBase
, CLIENT> {\n preTransactionalList: { title: string; sections: PTC[] }[]\n kycForm: FORM\n\n constructor (kycForm: FORM) {\n this.kycForm = kycForm\n }\n\n getById (id: string) {\n return this.preTransactionalList\n // map section and flat it to get the list of section\n .map(({ sections }) => sections)\n .flat()\n .find(section => section.id === id)\n }\n\n isClient2Include (): boolean {\n throw new Error('Override isClient2Include')\n }\n\n validate (validation) {\n const client2Included = this.isClient2Include()\n\n this.preTransactionalList.forEach(module => {\n module.sections.forEach(section => {\n section.validate(this.kycForm, validation, client2Included)\n })\n })\n\n return this.preTransactionalList\n }\n\n extractData (rawData) {\n const ptcData = rawData.ptc_fields\n this.preTransactionalList.forEach(module => {\n module.sections.forEach(section => {\n section.extractData(ptcData)\n })\n })\n }\n\n convertToRawData () {\n return this.preTransactionalList.reduce((result, module) => {\n const sectionsData = module.sections.reduce((result, section) => {\n return { ...result, ...section.convertToRawData() }\n }, {})\n return { ...result, ...sectionsData }\n }, {})\n }\n}\n","import { Ignore, isIgnore } from '@master/annotation/Ignore'\nimport { MaxChar } from '@master/annotation/MaxChar'\nimport { isPointer } from '@master/annotation/Pointer'\nimport { Base } from '@master/model/Base'\nimport { snakeCase } from 'lodash'\n\nexport interface ManagerEndorsementQuestion {\n key: keyof T;\n desc: string;\n}\n\nexport const ChecklistRatingTypes = [\n { label: 'Satisfactory', value: 'satisfactory' },\n { label: 'Unsatisfactory', value: 'unsatisfactory' },\n { label: 'NA', value: 'na' }\n] as const\nexport default class ManagerEndorsement extends Base {\n q1 = undefined\n q2 = undefined\n q3 = undefined\n q4 = undefined\n q5 = undefined\n q6 = undefined\n q7 = undefined\n q8 = undefined\n\n @MaxChar(220)\n elaborateReasons = ''\n\n agree = ''\n present = ''\n farepCoached = ''\n\n @MaxChar(800)\n remarks = ''\n\n complete = false\n\n extractData (rawData: any) {\n const data = {}\n const prefix = 'manager_endorsement_'\n Object.keys(this).filter(key => !isIgnore(this, key) && !isPointer(this, key)).forEach((key) => {\n const isQuestion = new RegExp(/^q\\d/g) // if its question, dont snakecasify\n let val = this[key]\n if (isQuestion.test(key)) {\n val = rawData[prefix + key] || val\n } else {\n val = rawData[prefix + snakeCase(key)] || val\n }\n data[key] = val\n })\n return data\n }\n\n packData () {\n const data = {}\n const prefix = 'manager_endorsement_'\n Object.keys(this).forEach((key) => {\n const isQuestion = new RegExp(/^q\\d/g) // if its question, dont snakecasify\n if (isQuestion.test(key)) {\n data[prefix + key] = this[key]\n } else {\n data[prefix + snakeCase(key)] = this[key]\n }\n })\n return data\n }\n\n @Ignore()\n get isNotSelectedClientOrRep () {\n return this.q8 === 'na'\n }\n\n isAllValid () {\n let valid = true\n Object.keys(this).forEach(val => {\n if (val === 'complete') return\n if (this.agree === 'agree' && val === 'elaborateReasons') return\n if (this[val] === '' || !this[val]) valid = false\n })\n return valid\n }\n\n formFields () {\n return [\n {\n key: 'q1',\n desc: 'All information required in the Personal Financial Review (PFR) Form was obtained and documented.'\n },\n {\n key: 'q2',\n desc: 'The client\\'s objective to be addressed, including the shortfall amount ($), is clearly established.'\n },\n {\n key: 'q3',\n desc: 'The client\\'s need analysis is correctly calculated.'\n },\n {\n key: 'q4',\n desc: 'Reasons for recommendation / deviation / switch / replacement / is/are appropriateand was/were clearly explained.'\n },\n {\n key: 'q5',\n desc: 'The premium(s) proposed to meet the client\\'s objective(s) is within the client\\'s budget.'\n },\n {\n key: 'q6',\n desc: 'The product proposed to meet the client\\'s objective(s) aligns with the client\\'s risk profile.'\n },\n {\n key: 'q7',\n desc: 'The product features, benefits, limitations and risks of the plan recommendedwere explained and highlighted correctly.'\n },\n {\n key: 'q8',\n desc: 'The Client Call-Back (for selected client and selected representative) is completed.'\n }\n ]\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { Pointer } from '@master/annotation/Pointer'\nimport ManagerEndorsement from '@master/model/kyc-pdf/ManagerEndorsement'\nimport { isEmpty } from 'lodash/fp'\nimport CCBSCustom from './CCBSCustom'\n\nexport default class CustomManagerEndorsement extends ManagerEndorsement {\n get isAdviserCoachedFieldsFilled () {\n return this.farepCoached && !isEmpty(this.remarks)\n }\n\n @Ignore()\n @Pointer('ROOT', 'ccbs')\n private ccbs: CCBSCustom = null\n\n @Ignore()\n get isSelectedRepClient () {\n return this.ccbs.repClient === 'yes'\n }\n\n isAllValid () {\n let valid = true\n Object.keys(this).forEach(val => {\n if (val === 'complete') return\n if (this.agree === 'agree' && val === 'elaborateReasons') return\n if (val === 'farepCoached' || val === 'remarks') return\n if (!this.isSelectedRepClient && val === 'present') return\n if (this[val] === '' || !this[val]) valid = false\n })\n return valid\n }\n}\n","import { IDateService } from '@master/services/IDateService'\nimport { Base } from '@master/model/Base'\nimport { snakeCase } from 'lodash/fp'\nimport { isPointer, Pointer } from '@master/annotation/Pointer'\nimport { Ignore, isIgnore } from '@master/annotation/Ignore'\n\nexport default class CCBS extends Base {\n selectedClient = ''\n repClient = ''\n attemptDate1st: number | string = ''\n attemptTime1st = ''\n attemptDate2nd: number | string = ''\n attemptTime2nd = ''\n attemptDate3rd: number | string = ''\n attemptTime3rd = ''\n outcomeRole = ''\n outcome = ''\n qnAnsRole = ''\n qnAns1 = ''\n qnAns2 = ''\n qnAns3 = ''\n qnAns4 = ''\n qnAns5 = ''\n qnAns6 = ''\n qnAns7 = ''\n\n @Ignore()\n @Pointer('ROOT.managerEndorsement', 'isNotSelectedClientOrRep')\n isNotSelectedClientOrRep = false\n\n @Ignore()\n dateService: IDateService\n\n @Ignore()\n listOfExcludedAttributesForValidation = []\n\n constructor (dateService: IDateService) {\n super()\n this.dateService = dateService\n }\n\n extractData (rawData: any) {\n const data = {}\n const prefix = 'ccbs_'\n Object.keys(this)\n .filter(key => !isIgnore(this, key) && !isPointer(this, key))\n .forEach((key) => {\n if (key === 'isNotSelectedClientOrRep') return\n const isAttempt = new RegExp(/^attempt(Date|Time)/g) // if its question, dont snakecasify\n let val = this[key]\n if (isAttempt.test(key)) {\n const seq = key.substring(key.length - 3)\n const type = key.substring(0, key.length - 3)\n val = rawData[prefix + seq + '_' + snakeCase(type)] || val\n } else {\n val = rawData[prefix + snakeCase(key)] || val\n }\n data[key] = val\n })\n return this.afterExtractData(data)\n }\n\n packData () {\n const data = {}\n const prefix = 'ccbs_'\n Object.keys(this).forEach((key) => {\n if (key === 'isNotSelectedClientOrRep') return\n const isAttempt = new RegExp(/^attempt(Date|Time)/g) // if its question, dont snakecasify\n if (isAttempt.test(key)) {\n const seq = key.substring(key.length - 3)\n const type = key.substring(0, key.length - 3)\n data[prefix + seq + '_' + snakeCase(type)] = this[key]\n } else {\n data[prefix + snakeCase(key)] = this[key]\n }\n })\n return this.afterPackData(data)\n }\n\n afterExtractData (data: { }) {\n return this.getReadableDates(data)\n }\n\n afterPackData (data: { }) {\n return this.getSaveableDates(data)\n }\n\n getReadableDates (ccbs: any) {\n const readFormat = 'YYYY-MM-DD'\n Object.keys(ccbs).forEach((key) => {\n if (key.includes('attemptDate')) {\n const getDate = this.dateService.format(ccbs[key], readFormat)\n ccbs[key] = getDate.includes('Invalid') ? '' : getDate\n }\n })\n return ccbs\n }\n\n getSaveableDates (ccbs: any) {\n Object.keys(ccbs).forEach((key) => {\n if (key.includes('attempt_date')) {\n ccbs[key] = new Date(ccbs[key]).valueOf()\n }\n })\n return ccbs\n }\n\n isAllValid () {\n let valid = true\n Object.keys(this).forEach((key) => {\n // not selected client/rep, no need call back survey (CBS)\n if (key === 'isNotSelectedClientOrRep' || this.isNotSelectedClientOrRep) return\n if ((this.outcomeRole === 'trusted-individual' || this.selectedClient === 'no') && key === 'qnAns4') return\n if (key === 'qnAnsRole') return\n if (key.includes('2nd') || key.includes('3rd')) return\n // not contactable/dont wanna take survey\n if (key.includes('qnAns') && this.outcome !== 'contactable_surveyed') return\n // no need answer callback question `aware of trusted individual option`\n if (this[key] === '' || !this[key]) valid = false\n })\n return valid\n }\n}\n","\nimport CCBS from '@master/model/kyc-pdf/CCBS'\n\nexport default class CCBSCustom extends CCBS {\n isAllValid () {\n let valid = true\n Object.keys(this).forEach((key) => {\n // not selected client/rep, no need call back survey (CBS)\n if (key === 'isNotSelectedClientOrRep' || this.isNotSelectedClientOrRep) return\n if ((this.outcomeRole === 'trusted-individual' || this.selectedClient !== 'yes') && key === 'qnAns4') return\n if (key === 'qnAnsRole') return\n if (key.includes('2nd') || key.includes('3rd')) return\n // not contactable/dont wanna take survey\n if (key.includes('qnAns') && this.outcome !== 'contactable_surveyed') return\n // client is not selected client and outcomeRole not trusted-individual, then exclude qnAns7\n // if (key === 'qnAns7' && (this.selectedClient === 'no' || this.outcomeRole !== 'client')) return\n // this version doesn't contain qn5-7\n if (key === 'qnAns7' || key === 'qnAns5' || key === 'qnAns6') return\n // no need answer callback question `aware of trusted individual option`\n if (this[key] === '' || !this[key]) {\n console.log(key, 'ahwaer')\n valid = false\n }\n })\n return valid\n }\n}\n","import CoreKYCPdf from '@master/model/kyc-pdf/KYCPdf'\n\nimport { keys, get } from 'lodash/fp'\nimport { Base } from '@master/model/Base'\nimport { ArrayBase } from '@master/model/ArrayBase'\nimport ESignDoc from '@master/model/kyc-pdf/ESignDoc'\nimport ESignSigner from '@master/model/kyc-pdf/ESignSigner'\nimport SignPadSigners from '@master/model/kyc-pdf/data/SignPadSigners'\nimport { snakeCase } from 'lodash'\nimport OfficerRemarks from '@master/model/kyc-pdf/OfficerRemarks'\nimport OfficerApproval from '@master/model/kyc-pdf/OfficerApproval'\nimport { Ignore, isIgnore } from '@master/annotation/Ignore'\nimport { setupPointer } from '@master/annotation/Pointer'\nimport { IDateService } from '@master/services/IDateService'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport { PTCBase } from '@master/model/ptc/PTCBase'\n\nimport KYCForm from '@company-common/model/kyc-form/KYCForm'\nimport KYCClient from '@master/model/kyc-form/KYCClient'\nimport CustomManagerEndorsement from './CustomManagerEndorsement'\nimport CCBSCustom from './CCBSCustom'\n\nexport default class KYCPdf extends KYCForm implements CoreKYCPdf {\n oid = ''\n ptcFields = {} as PTCBase\n completion = {}\n pdfStatus = ''\n consolidatedStatus = ''\n adviserFinalised = false\n adviserOid = ''\n supervisorOid = ''\n supervisorProxyOid = ''\n supervisorDecidedOid = ''\n kycId = ''\n adviserSignatureDate = ''\n\n esign = {\n doc: new ESignDoc(),\n signers: Array(9).fill(null).map(() => new ESignSigner())\n }\n\n managerEndorsement = new CustomManagerEndorsement()\n ccbs: CCBSCustom\n signpad = new SignPadSigners()\n\n @Ignore()\n currentManager: CustomManagerEndorsement // this is used to check is value on manager UI changed\n\n // Timestamps\n dateAdviserFinalised = undefined\n dateSupervisorDecide = undefined\n\n constructor (dateService: IDateService, projectSettings: IProjectSettings, riskRatingService: IRiskRatingService, ptcFields: PTCBase) {\n super(dateService, projectSettings, riskRatingService)\n this.ccbs = new CCBSCustom(dateService)\n this.ptcFields = ptcFields\n }\n\n adviserSignedNoticeTimestamp: number\n clientNoticeTimestamp: number\n opsDecidedTimeStamp: number\n\n @Ignore()\n curUser: { _oid: string ; systemrole: string }\n\n get isCurrentAdviser () {\n return this.adviserOid === (this.curUser?._oid || false)\n }\n\n get isCurrentSupervisor () {\n return this.supervisorOid === (this.curUser?._oid || false) || this.supervisorProxyOid === (this.curUser?._oid || false)\n }\n\n get isOpsStaff () {\n return this.curUser?.systemrole === 'ops-staff'\n }\n\n get isAdviserConfirmed () {\n return this.pdfStatus === 'adviser-confirmed'\n }\n\n get isAdviserSigned () {\n return this.pdfStatus === 'adviser-signed'\n }\n\n get isAdviserCancelled () {\n return this.pdfStatus === 'adviser-cancelled'\n }\n\n get isSupervisorApproved () {\n return this.pdfStatus === 'supervisor-approved'\n }\n\n get supervisorSigned () {\n return this.pdfStatus === 'supervisor-approved' || this.pdfStatus === 'supervisor-rejected'\n }\n\n get submissionAccepted () {\n return this.pdfStatus === 'submission-accepted'\n }\n\n get submissionCompleted () {\n return this.pdfStatus === 'submission-accepted' || this.pdfStatus === 'submission-rejected'\n }\n\n get disableAdviserRemark () {\n return !this.isCurrentAdviser || this.adviserFinalised || (this.pdfStatus !== 'adviser-confirmed' && this.pdfStatus !== 'adviser-signed')\n }\n\n get disableSupervisorRemark () {\n return !this.adviserFinalised || this.pdfStatus !== 'adviser-signed' || !this.isCurrentSupervisor\n }\n\n get disableOpsRemark () {\n return this.pdfStatus !== 'supervisor-approved' || !this.isOpsStaff\n }\n\n get canSeeManagerEndorse () {\n const notSignednotConfirmed = this.pdfStatus !== 'adviser-signed' && this.pdfStatus !== 'adviser-confirmed'\n return (this.isCurrentAdviser && notSignednotConfirmed) ||\n (this.isCurrentSupervisor && this.adviserFinalised && this.pdfStatus !== 'adviser-confirmed') ||\n (this.isOpsStaff && notSignednotConfirmed)\n }\n\n get canManagerEndorse () {\n return this.isCurrentSupervisor && this.pdfStatus === 'adviser-signed' && this.adviserFinalised\n }\n\n get canOpsApprove () {\n return !['submission-accepted', 'submission-rejected'].includes(this.pdfStatus) && this.isOpsStaff\n }\n\n get canReassignSupervisor () {\n return this.isOpsStaff && (this.pdfStatus === 'adviser-confirmed' || this.pdfStatus === 'adviser-signed')\n }\n\n get hasECDD1 () {\n return this.ptcFields.getById('high_risk')?.client1 === true\n }\n\n get hasECDD2 () {\n return this.ptcFields.getById('high_risk')?.client2 === true\n }\n\n remarks = new OfficerRemarks()\n approval = new OfficerApproval()\n\n setData (rawData: any, obj: Record = this, path = '') {\n keys(obj).filter(key => !isIgnore(this, key)).forEach(key => {\n const newObject = get(key, obj)\n if (newObject instanceof Base || newObject instanceof PTCBase) {\n if (newObject instanceof Base) setupPointer(newObject.getPointers(), this, obj, newObject)\n Object.assign(newObject, newObject.extractData(rawData))\n } else if (newObject instanceof Array) {\n newObject.forEach((object: ArrayBase, index) => {\n if (object instanceof Base) setupPointer(object.getPointers(), this, obj, object)\n Object.assign(object, object.extractData(rawData, index))\n })\n } else if (['pdfStatus', 'supervisorDecidedOid', 'dateAdviserFinalised', 'dateSupervisorDecide', 'adviserSignatureDate', 'adviserFinalised', 'adviserOid', 'supervisorOid', 'supervisorProxyOid', 'kycId'].includes(key)) {\n let target = rawData[snakeCase(key)]\n // if mismatch of type, resolve (specifically for adviserFinalised old data)\n if (typeof obj[key] === 'boolean' && typeof target === 'string') {\n target = target === 'true'\n }\n obj[key] = target\n } else if (['consolidatedStatus', 'completion'].includes(key)) {\n obj[key] = rawData[key]\n } else if (newObject instanceof Object) {\n this.setData(rawData, newObject, `${path}.${key}`)\n } else {\n obj[key] = rawData[key]\n }\n })\n }\n}\n","import { ISimpleForm } from '@master/interface/ISimpleForm'\nimport { IValidationValue } from '@master/interface/IValidationValue'\nimport { PTCConstructor } from '@master/interface/IPTCConstructor'\nimport { getRawKey, RawKey } from '@master/annotation/RawKey'\nimport { IValidation } from '@master/interface/IValidation'\n\nexport class PTC, CLIENT> {\n @RawKey('client_0_ptc_@id')\n client1 = false\n\n @RawKey('client_1_ptc_@id')\n client2 = false\n\n @RawKey('ptc_@id_verified')\n verified = false\n\n label: string\n id: string\n private validation: (value: IValidationValue) => boolean;\n\n constructor ({ label, id, validation }: PTCConstructor) {\n this.label = label\n this.id = id\n this.validation = validation\n }\n\n validate (kycForm: FORM, validation: IValidation, includeClient2: boolean) {\n this.client1 = this.validation({ client: kycForm.client1, clientIndex: 0, kycForm, validation })\n this.client2 = includeClient2 ? this.validation({ client: kycForm.client2, clientIndex: 1, kycForm, validation }) : false\n // revalidate need to turn verified to false\n this.verified = false\n }\n\n requiredVerify () {\n return this.client1 || this.client2\n }\n\n isVerified () {\n // no need to verify, return is verified\n if (this.requiredVerify() === false) {\n return true\n }\n return this.verified\n }\n\n extractData (rawData) {\n Object.keys(this)\n .forEach(key => {\n const rawKey = getRawKey(this, key)\n\n // only read for rawKey\n if (rawKey) {\n this[key] = rawData[rawKey]\n }\n })\n }\n\n convertToRawData () {\n return Object.keys(this)\n .reduce((result, key) => {\n const rawKey = getRawKey(this, key)\n\n // only convert value with rawKey\n if (rawKey) {\n result = { ...result, [rawKey]: this[key] }\n }\n return result\n }, {})\n }\n}\n","import { SimpleKYCFNA } from '@master/model/kyc-form/need-analysis/PrioritiesNeeds'\nimport { SimplePrioritiesList } from '@master/model/kyc-form/need-analysis/PrioritiesNeeds2'\nimport BasicProduct from '@master/model/kyc-form/product/BasicProduct'\n\nfunction getRecommendationFlatMap (recommendations: BasicProduct[], clientIndex: 0|1) {\n return recommendations\n .filter(product => Number(product.clientIndex) === clientIndex || Number(product.jointClientIndex) === clientIndex)\n .flatMap(product => {\n const rider = product.riders\n const flatArray = [product]\n if (rider) { // v1 handler\n flatArray.push(...rider as any)\n }\n return flatArray\n })\n}\nexport function noRecommendationForHighPriorityNeedsCheck (clientIndex: 0 | 1, fna: T, recommendations: BasicProduct[], priorityList: SimplePrioritiesList[]) {\n const highPriorityNeeds = Object.keys(fna)\n .map(key => fna[key])\n .filter(({ level, plan }) => level === 'h' && plan === true)\n\n const currentClientProducts = getRecommendationFlatMap(recommendations, clientIndex)\n\n // protection needs is check against product needs covered\n const protectionNeeds = highPriorityNeeds\n .filter(({ isProtection }) => isProtection)\n .map(({ needs }) => needs)\n\n const productNeeds = currentClientProducts\n .map(({ productNeedsCovered }) => productNeedsCovered)\n .flat()\n\n const distinctProductNeeds = [...new Set(productNeeds)]\n\n const isProductNeedsMatch = protectionNeeds.every(needs => distinctProductNeeds.includes(needs))\n\n // non protection needs is check against product priority\n const nonProtectionHighPriorityList = priorityList.map(item => {\n const needs = fna[item.key]\n return {\n ...needs,\n priority: item.id\n }\n })\n .filter(({ isProtection, level, plan }) => !isProtection && level === 'h' && plan === true)\n .map(({ priority }) => priority)\n\n const productPriority = currentClientProducts\n .map(({ priority }) => priority)\n\n const distinctProductPriority = [...new Set(productPriority)]\n\n const isNonProductNeedsMatch = nonProtectionHighPriorityList.every(priority => distinctProductPriority.includes(priority))\n return !isProductNeedsMatch || !isNonProductNeedsMatch\n}\n\nexport function recommendationForUnprioritisedNeeds (clientIndex: 0 | 1, fna: T, recommendations: BasicProduct[],\n priorityList: SimplePrioritiesList[]) {\n const selectedPriorities = priorityList.map(item => {\n const needs = fna[item.key]\n return {\n ...needs,\n priority: item.id\n }\n })\n .filter(({ plan }) => plan)\n .map(({ priority }) => priority)\n\n const onlyContainPrioritiseNeeds = getRecommendationFlatMap(recommendations, clientIndex)\n .every(({ priority }) => selectedPriorities.includes(priority))\n\n return !onlyContainPrioritiseNeeds\n}\n\nexport function recommendationNotWithinInsurerProducts (clientIndex: 0 | 1, fna: T, recommendations: BasicProduct[], priorityList: SimplePrioritiesList[]) {\n const priorityMapping = priorityList.reduce((mapping, { id: priority, key }) => {\n const { needs } = fna[key]\n return {\n ...mapping,\n [priority]: needs\n }\n }, {})\n\n return !getRecommendationFlatMap(recommendations, clientIndex)\n .every(product => {\n const needs = priorityMapping[product.priority]\n return product.productNeedsCovered && product.productNeedsCovered.includes(needs)\n })\n}\n","import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'\nimport axios from 'axios'\nimport ESub from './model/ESub'\nimport { Assumption } from '@master/model/common/Assumption'\nimport NtucNric from '@master/model/kyc-pdf/NtucNric'\nimport FormKeyConverter from '@/views/kyc-pdf/FormKeyConverter'\nimport { FormOptions } from '@master/model/kyc-form/FormOptions'\nimport KYCPdf from '@company-common/model/kyc-pdf/KYCPdf'\nimport { cid, container } from 'inversify-props'\nimport { IDateService } from '@master/services/IDateService'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport PreTransactionalCheck from './model/ptc/PreTransactionalCheck'\n\nconst dateService = container.get(cid.IDateService)\nconst projectSettings = container.get(cid.IProjectSettings)\nconst riskRatingService = container.get(cid.IRiskRatingService)\n\nlet kycPdf: KYCPdf\nconst ptcCheck = new PreTransactionalCheck(kycPdf)\n\n@Module({\n namespaced: true\n})\nexport default class KYCPdfStore extends VuexModule {\n kycPdf = new KYCPdf(dateService, projectSettings, riskRatingService, ptcCheck)\n formOptions: FormOptions = null\n assumption: Assumption = new Assumption()\n loadingState: 'loading' | 'loaded' | 'saving' = 'loading'\n allowedTabs = []\n showSignModule = false\n computedValidationResult = {}\n kycPdfErrors = undefined\n eSubData = new ESub()\n ntucNrics = []\n\n // State changes\n showCompletionModalState = false\n\n get atLeastOneProductRecommended () { // el-mandate\n return this.kycPdf.recommendations.rcmd instanceof Array && this.kycPdf.recommendations.rcmd.length > 0\n }\n\n @Mutation\n setKYCPdf (kycPdf: any) {\n this.kycPdf.setData(kycPdf)\n this.formOptions = new FormOptions(this.kycPdf)\n }\n\n @Mutation\n setESubData (esub: object) {\n this.eSubData.extractData(esub)\n }\n\n @Mutation\n updateESub (latest: any) {\n const client = this.eSubData.client\n if (client && client.length) {\n const ids = latest.identifier\n client.forEach((eclient) => {\n eclient.external.forEach((exsub) => {\n const matched = !Object.keys(ids).map((id) => {\n return exsub[id] === ids[id]\n }).includes(false)\n if (matched) {\n // console.log('ex matched', matched, exsub, latest.data)\n exsub.updateProperties(latest.data)\n }\n })\n eclient.internal.forEach((insub) => {\n const matched = !Object.keys(ids).map((id) => {\n return insub[id] === ids[id]\n }).includes(false)\n if (matched) {\n insub.updateProperties(latest.data)\n }\n })\n })\n }\n }\n\n @Mutation\n setNtucNrics (ntuc: []) {\n this.ntucNrics = Object.assign([], this.ntucNrics, ntuc)\n this.ntucNrics.forEach((ntucNric) => {\n const ntucCl = ntucNric.client_list.map((clist) => {\n return new NtucNric(clist)\n })\n delete ntucNric.client_list\n ntucNric.clientList = ntucCl\n })\n }\n\n @Mutation\n setupAllowableTab (tab: string) {\n this.allowedTabs.push(tab)\n }\n\n @Mutation\n setKYCPdfErrors (errors: {}) {\n this.kycPdfErrors = errors\n }\n\n @Mutation\n setShowSignModule (state?: boolean) {\n this.showSignModule = state\n }\n\n @Mutation\n setLoadingState (state: 'loading' | 'loaded' | 'saving') {\n this.loadingState = state\n }\n\n @Mutation\n setShowCompletionModalState (state: boolean) {\n this.showCompletionModalState = state\n }\n\n @Action\n updateShowCompletionModalState (state: boolean) {\n this.context.commit('setShowCompletionModalState', state)\n }\n\n // add rawError to get the raw error during this action to get better knowing where the issue come from\n @Action({ rawError: true })\n async loadKYCPdf (kycPdfOid: string) {\n this.context.commit('setLoadingState', 'loading')\n const { data: { meta: kycPdf, error } } = await axios.get(`/live/api/kycPdf/meta?_oid=${kycPdfOid}`)\n\n const converter = new FormKeyConverter()\n const formattedKYCPdf = converter.mapRawToFormatted(kycPdf)\n // convert data based on kycform\n // const kycFormConverter = new KycFormKeyConverter()\n // const formattedKYCForm = kycFormConverter.mapRawToFormatted(kycPdf)\n\n if (error) {\n this.context.commit('setKYCPdfErrors', error)\n this.context.commit('setLoadingState', 'loaded')\n return formattedKYCPdf\n }\n //\n // pre processor that will change all the ma to the standardize format\n //\n console.log('Formatted', formattedKYCPdf)\n this.context.commit('setKYCPdf', formattedKYCPdf)\n this.context.commit('setLoadingState', 'loaded')\n }\n\n @Action({ rawError: true })\n loadESub (res: any) {\n if (res != null && typeof res === 'object' && res.eSubmissionData) {\n // console.log('eSubmissionData', res.eSubmissionData)\n this.context.commit('setESubData', JSON.parse(res.eSubmissionData))\n }\n }\n\n @Action\n upESub (delta: any) {\n this.context.commit('updateESub', delta)\n }\n\n @Action({ rawError: true })\n /* eslint-disable @typescript-eslint/camelcase */\n loadNtucNricList (res: any) {\n if (res != null && typeof res === 'object' && res.nric_list) {\n this.context.commit('setNtucNrics', res.nric_list)\n // the following is for testing only\n // const dummy = [\n // {\n // ntucESubmissionMasterOid: 'EpwAiBYJFKCUXBjTruHEV9',\n // client_list: [\n // {\n // client_name: 'Testing client name',\n // ntucClientNricOid: 'some Oid',\n // nric_list: [\n // {\n // fileName: 'Testing 001',\n // fileType: 'PNG'\n // }, {\n // fileName: 'Testing 002',\n // fileType: 'PNG'\n // }\n // ]\n // }\n // ]\n // }\n // ]\n // this.context.commit('setNtucNrics', dummy)\n }\n }\n}\n","import { SimpleKYCFNA } from '@master/model/kyc-form/need-analysis/PrioritiesNeeds'\nimport highRiskCountryList from '@company-common/config/high-risk-country.json'\nimport { isEmpty, pickBy } from 'lodash/fp'\nimport { budgetLimitBreachedCheck, clientRiskProfileConservativeCheck, highRiskCheck, noFullDisclosure, noRankedHighNeedsCheck, productRiskRating } from '@master/logic/PretransactionsLogic'\nimport { PTC } from '@master/model/ptc/PTC'\nimport { PTCBase } from '@master/model/ptc/PTCBase'\nimport NeedsBase from '@master/model/kyc-form/need-analysis/NeedsBase'\nimport { getValidationSectionForClient } from '@core/logic/Validation'\nimport { ThePrioritiesNeeds } from '@company-common/model/kyc-form/needs-analysis/ThePrioritiesNeeds'\nimport { noRecommendationForHighPriorityNeedsCheck, recommendationForUnprioritisedNeeds } from '@master/logic/PTCLogicProductRecommendation'\nimport { cid, container } from 'inversify-props'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport KYCForm from '@company-common/model/kyc-form/KYCForm'\nimport KYCClient from '@company-common/model/kyc-form/KYCClient'\nimport { BasicProductV2 as BasicProduct } from '@master/model/kyc-form/product/BasicProductV2'\n\n/**\n * Temporary solutions after updated the JPara @core, @master, @company-common to the latest branch\n * Will need to change the logic from frontend to @core or @master\n */\n\nexport default class PreTransactionalCheck extends PTCBase {\n constructor (kycForm: KYCForm) {\n super(kycForm)\n\n const prioritiesNeeds = new ThePrioritiesNeeds()\n\n const riskRatingService = container.get(cid.IRiskRatingService)\n\n this.preTransactionalList = [\n {\n title: 'Know Your Client',\n sections: [\n new PTC({\n label: 'Client is a selected client',\n id: 'selected_client',\n validation: ({ client }) => client.personalDetails.isSelectedClient()\n }),\n new PTC({\n label: 'No financial needs ranked as \\'high\\'',\n id: 'no_high_priority',\n validation: ({ client }) => noRankedHighNeedsCheck(client)\n }),\n new PTC({\n label: 'Client chose not to disclose Net Worth, Cash Flow and Current Plans',\n id: 'client_not_disclose',\n validation: ({ client, kycForm }) => {\n const { netWorth, cashFlow } = client\n const declaration = kycForm.existingPortfolio.declaration\n return noFullDisclosure(netWorth.netWorthPlanning === 'yes', cashFlow.cashFlowPlanning === 'yes', declaration.review === 'yes')\n }\n }),\n new PTC({\n label: 'Budget affordability limit breached',\n id: 'budget_limit_breached',\n validation: ({ client, clientIndex, kycForm }) => {\n return budgetLimitBreachedCheck(client.budget.annualBudget(), client.budget.singleBudget(), client.budget.smallBudgetSize,\n kycForm.recommendations.totalAnnualizedPremiumForClient(clientIndex),\n kycForm.recommendations.totalSinglePremiumForClient(clientIndex))\n }\n }),\n new PTC({\n label: 'Client failed CKA',\n id: 'client_failed_cka',\n validation: ({ client }) => {\n return client.cka.ckaMet === 'no'\n }\n }),\n new PTC({\n label: 'Client investment risk profile is \\'Conservative\\'',\n id: 'client_risk_profile_conservative',\n validation: ({ client }) => {\n return clientRiskProfileConservativeCheck(client.rpa.riskProfileResult)\n }\n }),\n new PTC({\n label: 'Client did not provide an email address',\n id: 'client_not_email_address',\n validation: ({ client }) => {\n return isEmpty(client.personalDetails.contactEmail)\n }\n })\n ]\n }, {\n title: 'Needs Analysis',\n sections: [\n new PTC({\n label: 'Default Assumptions changed',\n id: 'default_assumption_changed',\n validation: ({ client, kycForm }) => {\n // education details is not instance of NeedsBase, so need to handle separately\n const eduNeedsDetails = kycForm.educationNeedsDetails.filter((edu) => {\n return edu.isValid() && !edu.isDefaultRate\n })\n if (eduNeedsDetails.length > 0) return true\n // then, check for all instances of NeedsBase\n const fnaNeeds = Object.keys(client).filter((key) => {\n return client[key] instanceof NeedsBase && client[key].isDefaultRate !== undefined\n })\n return fnaNeeds.some((key) => {\n // console.log(key, client.personalDetails.name, client[key].plan, client[key].isDefaultRate)\n return client[key].plan && !client[key].isDefaultRate\n })\n }\n })\n ]\n }, {\n title: 'Product Recommendation',\n sections: [\n new PTC({\n label: 'No recommendation for \\'high priority\\' needs',\n id: 'no_recommendation_for_high',\n validation: ({ clientIndex, client, kycForm }) => {\n const fna = pickBy(object => object instanceof NeedsBase, client) as SimpleKYCFNA\n return noRecommendationForHighPriorityNeedsCheck(clientIndex, fna, kycForm.recommendations.flatAllProducts as BasicProduct[], prioritiesNeeds.getPriorities())\n }\n }),\n new PTC({\n label: 'Product recommendation for needs not prioritised by client',\n id: 'recommendation_for_unprioritised_needs',\n validation: ({ clientIndex, client, kycForm }) => {\n const fna = pickBy(object => object instanceof NeedsBase, client) as SimpleKYCFNA\n return recommendationForUnprioritisedNeeds(clientIndex, fna, kycForm.recommendations.flatAllProducts as BasicProduct[], prioritiesNeeds.getPriorities())\n }\n }),\n new PTC({\n label: 'Client disagrees with Representative\\'s recommendations and decides to buy product(s) not recommended',\n id: 'client_disagrees',\n validation: ({ clientIndex, kycForm }) => {\n return kycForm.recommendations.flatAllProducts\n .filter(product => Number(product.clientIndex) === clientIndex)\n .some(product => product.clientChoice === 'ownchoice')\n }\n }),\n new PTC({\n label: 'Recommendation for product replacement / switching',\n id: 'recommendation_for_replacement_switching',\n validation: ({ client }) => {\n return client.switching.topUp === 'yes' || client.switching.advisedBefore === 'yes'\n }\n }),\n new PTC({\n label: 'Product Risk Rating is greater than the Customer\\'s Investment Profile',\n id: 'product_risk_rating',\n validation: ({ clientIndex, client, kycForm }) => {\n return productRiskRating(clientIndex, client.rpa.riskProfileResult, kycForm.recommendations.flatAllProducts as BasicProduct[], riskRatingService)\n }\n })\n ]\n }, {\n title: 'Client Declaration',\n sections: [\n new PTC({\n label: 'Client has incomplete fields in Client\\'s Declaration',\n id: 'client_incomplete_fields',\n validation: ({ clientIndex, validation }) => {\n const validationSection = getValidationSectionForClient(validation, 'Client\\'s Declaration', clientIndex)\n return !isEmpty(validationSection)\n }\n }),\n new PTC({\n label: 'Beneficial Owner Particulars Form and/or Politically Exposed Person Form section(s) are/is incomplete, if applicable',\n id: 'incomplete_bop_pep',\n validation: ({ clientIndex, validation }) => {\n const boValidation = getValidationSectionForClient(validation, 'Beneficial Owner Particulars Form', clientIndex)\n const pepValidation = getValidationSectionForClient(validation, 'Politically Exposed Person Form', clientIndex)\n return !isEmpty(boValidation) || !isEmpty(pepValidation)\n }\n }),\n new PTC({\n label: 'Client is assessed to be from a higher risk categories/countries or jurisdictions',\n id: 'high_risk',\n validation: ({ clientIndex, client, kycForm }) => {\n const { citizenship, citizenshipSpecified, citizenshipSpecified2 } = client.personalDetails\n return highRiskCheck(clientIndex, citizenship, citizenshipSpecified, kycForm.recommendations.rcmd, highRiskCountryList, citizenshipSpecified2)\n }\n })\n ]\n }\n ]\n }\n\n isClient2Include () {\n return this.kycForm.hasClient2\n }\n}\n","import { Module, VuexModule, Mutation } from 'vuex-module-decorators'\nimport { ProjectInfo } from '@company-common/config/ProjectInfo'\n\n@Module({\n namespaced: true\n})\nexport default class KYCSectionStore extends VuexModule {\n private projectInfo = new ProjectInfo()\n private totalUploadedPdf = []\n\n sections: { name: string; url?: string; completed?: boolean; allowed?: boolean; subs?: any[]; hideIndicator?: boolean }[] = [\n { name: 'Client Summary', url: 'client-summary', completed: false, allowed: true }, // url empty as default\n { name: 'Important Notices', url: 'important-notices', completed: false, allowed: true },\n {\n name: 'About You',\n url: 'about-you',\n completed: false,\n subs: [\n { name: 'Personal Details', url: 'personal-details', completed: false },\n { name: 'Dependants', url: 'dependants', completed: false },\n { name: 'Trusted Individual', url: 'trusted-individual', completed: false }\n ],\n allowed: false\n },\n {\n name: 'Your Current Plans',\n url: 'current-portfolio',\n completed: false,\n subs: [\n { name: 'Insurance Portfolio', url: 'insurance', completed: false },\n { name: 'Investment Portfolio', url: 'investment', completed: false }\n ],\n allowed: false\n },\n {\n name: 'Your Finances',\n url: 'your-finances',\n completed: false,\n subs: [\n { name: 'Net Worth', url: 'net-worth', completed: false },\n { name: 'Cash Flow', url: 'cash-flow', completed: false },\n { name: 'Budget', url: 'budget', completed: false }\n ],\n allowed: false\n },\n {\n name: 'Your Investment Risk Profile',\n url: 'investment-risk-profile',\n completed: false,\n subs: [\n { name: 'Customer Knowledge Assessment', url: 'customer-knowledge-assessment', completed: false },\n { name: 'Risk Profile Assessment', url: 'risk-profile-assessment', completed: false }\n ],\n allowed: false\n },\n {\n name: 'Your Priorities & Needs Analysis',\n url: 'needs-analysis',\n completed: false,\n subs: [\n { name: 'Adjustments & Assumptions', url: 'adjustments-and-assumptions', completed: false },\n { name: 'Identifying Your Priorities', url: 'identifying-your-priorities', completed: false },\n { name: 'Needs Analysis Calculation', url: 'needs-analysis-calculation', completed: false }\n ],\n allowed: false\n },\n {\n name: 'Our Recommendation',\n url: 'our-recommendation',\n completed: false,\n subs: [\n { name: 'Product Recommendations', url: 'product-recommendations', completed: false },\n { name: 'For Investments - ILP/Sub funds', url: 'ilp-sub-funds', completed: false },\n { name: 'Basis of Recommendation', url: 'basis-of-recommendation', completed: false },\n { name: 'Client\\'s Decision', url: 'client-decision', completed: false }\n ],\n allowed: false\n },\n { name: 'Replacement / Switching', url: 'replacement-or-switching', completed: false, allowed: false },\n { name: 'Disclaimers & Client\\'s Checklist', url: 'disclaimers-and-client-checklist', completed: false, allowed: false },\n { name: 'Client\\'s Declaration', url: 'client-declaration', completed: false, allowed: false },\n { name: 'Financial Adviser\\'s Declaration', url: 'financial-consultant-declaration', completed: false, allowed: false },\n { name: 'KYC Confirmation', url: 'kyc-confirmation', completed: false, allowed: false },\n { name: 'space' },\n { name: 'Beneficial Owner Particulars Form', url: 'bop', completed: false, allowed: false },\n { name: 'Politically Exposed Person Form', url: 'pep', completed: false, allowed: false },\n { name: 'Client\\'s AML Check', url: 'aml', completed: false, allowed: false },\n { name: 'Appendix - Upload PDFs', url: 'appendix', completed: true, allowed: true, hideIndicator: true }\n ]\n\n @Mutation\n updateTotalUploadedPdf (list: []) {\n this.totalUploadedPdf = list\n }\n\n @Mutation\n hideSection (url: string) {\n this.sections = this.sections.filter(sec => sec.url !== url)\n }\n}\n","import { Module, VuexModule } from 'vuex-module-decorators'\n\n@Module({\n namespaced: true\n})\nexport default class KYCPdfSectionStore extends VuexModule {\n sections: { name: string; url?: string; completed?: boolean; allowed?: boolean; subs?: any[] }[] = [\n { name: 'CKA', url: 'cka', completed: false, allowed: true },\n { name: 'Insurer PDF', url: 'insurer', completed: false, allowed: true },\n { name: 'Pre-Transaction Alerts', url: 'ptc', completed: false, allowed: true },\n { name: 'E-Submission', url: 'esub', completed: false, allowed: true },\n { name: 'ECDD 2', url: 'ecdd/2', completed: false, allowed: true },\n { name: 'ECDD 1', url: 'ecdd/1', completed: false, allowed: true },\n { name: 'Beneficial Owner Client 2', url: 'bo/2', completed: false, allowed: true },\n { name: 'Beneficial Owner Client 1', url: 'bo/1', completed: false, allowed: true },\n { name: 'PEP', url: 'pep', completed: false, allowed: true },\n { name: 'Client\\'s Pdf', url: 'client', completed: false, allowed: true },\n { name: 'Manager Endorsement', url: 'manager-endorsement', completed: false, allowed: true }\n ]\n}\n","import KYCForm from '@company-common/model/kyc-form/KYCForm'\nimport PreTransactionalCheck from './model/ptc/PreTransactionalCheck'\n\nexport default class KYCPdfSubmission extends KYCForm {\n preTransactionalChecks: PreTransactionalCheck = new PreTransactionalCheck(this)\n completion = {}\n selectedSupervisorOid = ''\n selectedProxySupervisorOid = ''\n kycFormOid = ''\n\n prepareForSubmission () {\n return {\n completion: this.completion,\n kycFormOid: this.kycFormOid,\n supervisorOid: this.selectedSupervisorOid,\n proxySupervisorOid: this.selectedProxySupervisorOid,\n ptc_fields: JSON.stringify(this.preTransactionalChecks.convertToRawData()) // eslint-disable-line @typescript-eslint/camelcase\n }\n }\n}\n","import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'\nimport KYCPdfSubmission from '@/views/kyc-pdf/KYCPdfSubmission'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { IDateService } from '@master/services/IDateService'\nimport { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport { container, cid } from 'inversify-props'\n\nconst dateService = container.get(cid.IDateService)\nconst projectSettings = container.get(cid.IProjectSettings)\nconst riskRatingService = container.get(cid.IRiskRatingService)\n\n@Module({\n namespaced: true\n})\nexport default class KYCSubmissionStore extends VuexModule {\n // Private variables\n private _kycPdf = new KYCPdfSubmission(dateService, projectSettings, riskRatingService)\n\n get kycPdf () {\n return this._kycPdf\n }\n\n get getPTCChecklist () {\n this._kycPdf.preTransactionalChecks.validate(this.context.rootState.KYCFormStore.computedValidationResult)\n return this._kycPdf.preTransactionalChecks.preTransactionalList\n }\n\n get isSuperiorVerified () {\n return this._kycPdf.selectedSupervisorOid !== null && typeof this._kycPdf.selectedSupervisorOid !== 'undefined' && this._kycPdf.selectedSupervisorOid !== ''\n }\n\n get isPTCVerified () {\n return this.getPTCChecklist.every(module => {\n return module.sections.every(section => {\n return section.isVerified()\n })\n })\n }\n\n @Mutation\n private setKycPdf (kycPdf: KYCPdfSubmission) {\n Object.assign(this._kycPdf, kycPdf)\n }\n\n @Action\n updateKycPDF () {\n this.context.commit('setKycPdf', this.context.rootState.KYCFormStore.kycForm)\n }\n\n @Action\n updateSuperiors (superiors: { supervisorOid: string; proxySupervisorOid: string }) {\n this._kycPdf.selectedSupervisorOid = superiors.supervisorOid\n this._kycPdf.selectedProxySupervisorOid = superiors.proxySupervisorOid\n }\n}\n","import { Action, Module, Mutation, VuexModule } from 'vuex-module-decorators'\nimport { BscInscopeProductDTO, BscInscopeRequestBody, BscService } from '../api'\n\n@Module({\n namespaced: true\n})\nexport default class BscStore extends VuexModule {\n loading = false\n bscInscopeResult: BscInscopeProductDTO[] = []\n mainProductBscInscope: BscInscopeProductDTO\n\n @Action\n async validateProductIsBscInscope (productOids: string[]) {\n this.context.commit('setLoading', true)\n try {\n const request: BscInscopeRequestBody = {\n productOids: productOids\n }\n const bscResult = await BscService.checkProductsInscope(request)\n this.context.commit('setBscInscopeResult', bscResult)\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Mutation\n setBscInscopeResult (bscResult: BscInscopeProductDTO[]) {\n this.bscInscopeResult = bscResult\n }\n\n @Mutation\n setLoading (loading: boolean) {\n this.loading = loading\n }\n}\n","import { ProductFullMeta } from './ProductFullMeta'\nimport { ProductMetaList } from './ProductMetaList'\n\nexport class ProductFullMetaList extends ProductMetaList {\n constructor (data: (string | number)[][]) {\n super(data, ProductFullMeta)\n }\n\n get allIssuer () {\n return this.getIssuer(this.list)\n }\n\n get allProduct () {\n return this.list\n }\n}\n","import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'\nimport '@/DIContainer'\nimport { ClientProfile } from '@core/pages/client-management/model/ClientProfile'\nimport { ClientProductMeta } from '@core/pages/client-management/model/ClientProductMeta'\nimport { ProductFullMetaList } from '@master/model/common/ProductFullMetaList'\nimport { container } from 'inversify-props'\nimport API from '@core/services/API'\nimport { ClientResponseDto, ClientService, ClientUpdateRequestDTO } from '../api'\n\nconst $api = container.get('$api')\n\n@Module({\n namespaced: true\n})\nexport default class ClientInfoStore extends VuexModule {\n clientProfile: ClientProfile = new ClientProfile()\n highRiskClient = false\n clientProduct: ClientProductMeta = new ClientProductMeta()\n productList: ProductFullMetaList = new ProductFullMetaList([])\n readOnly = false\n\n // Version 2 of CLient DTO\n clientDto: ClientResponseDto = undefined\n\n @Mutation\n setClientDtoV2 (clientDto: ClientResponseDto) {\n this.clientDto = clientDto\n }\n\n @Action\n async retrieveClientDTOV2 (clientOid: string) {\n try {\n const dto = await ClientService.retrieveClientWithOid(clientOid)\n this.context.commit('setClientDtoV2', dto)\n } catch (error) {\n console.log(error)\n }\n }\n\n @Action\n async updateClientDTOV2 (clientUpdateRequestDTO: ClientUpdateRequestDTO) {\n try {\n const dto = await ClientService.updateClientData(clientUpdateRequestDTO)\n this.context.commit('setClientDtoV2', dto)\n } catch (error) {\n console.log(error)\n }\n }\n\n @Mutation\n setClientProfile (profile: ClientProfile) {\n this.clientProfile.extractAndAssignData(profile)\n if (this.clientProfile?.hrcRoles) {\n this.clientProfile.hrcRoles = JSON.parse(this.clientProfile.hrcRoles.toString())\n\n if (this.clientProfile.hrcRoles.length > 0) {\n this.highRiskClient = true\n }\n }\n }\n\n @Mutation\n setClientProduct (product: { meta: {}; _oid: string }) {\n this.clientProduct.extractMetaObject(product)\n }\n\n @Mutation\n setProductList (data: (string | number)[][]) {\n const productMetaList = new ProductFullMetaList(data)\n this.productList = productMetaList\n }\n\n @Mutation\n setReadOnly (readOnly: boolean) {\n this.readOnly = readOnly\n }\n\n @Mutation\n resetClientProduct () {\n this.clientProduct = new ClientProductMeta()\n }\n\n @Action\n async retrieveClientProfile (clientOid: string) {\n try {\n /* eslint-disable @typescript-eslint/camelcase */\n const res = await $api.clientDetails.profile({\n client_oid: clientOid\n })\n\n if (typeof res === 'string' && JSON.parse(res).error) {\n throw new Error(JSON.parse(res).error)\n }\n\n this.context.commit('setClientProfile', res)\n } catch (error) {\n alert(error.message || error)\n } finally {}\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ComplianceResponseDto } from '../models/ComplianceResponseDto';\nimport type { NameScreeningResponseDto } from '../models/NameScreeningResponseDto';\nimport { request as __request } from '@openapi/request';\n\nexport class ComplianceService {\n\n /**\n * @param policyOid\n * @returns ComplianceResponseDto\n * @throws ApiError\n */\n public static async policyComplianceCheck(\n policyOid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/compliance/policy/${policyOid}`,\n });\n return result.body;\n }\n\n /**\n * @param policyOid\n * @returns NameScreeningResponseDto\n * @throws ApiError\n */\n public static async nameScreeningCheck(\n policyOid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/compliance/policy/${policyOid}/name-screening`,\n });\n return result.body;\n }\n\n}","import { Action, Module, Mutation, VuexModule } from 'vuex-module-decorators'\nimport { ComplianceResponseDto, ComplianceService } from '../api'\n\n@Module({\n namespaced: true\n})\nexport default class ComplianceStore extends VuexModule {\n loading = false\n complianceResult: ComplianceResponseDto = null\n\n @Action({ rawError: true })\n async policyComplianceCheck (policyOid: string) {\n this.context.commit('setLoading', true)\n try {\n const complianceResult = await ComplianceService.policyComplianceCheck(policyOid)\n this.context.commit('setComplianceResult', complianceResult)\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Mutation\n setComplianceResult (result: ComplianceResponseDto) {\n this.complianceResult = result\n }\n\n @Mutation\n setLoading (loading: boolean) {\n this.loading = loading\n }\n}\n","export class ProductRider {\n name = ''\n benefit_amount = ''\n premium: number = undefined\n ncp = ''\n effective_date: number = undefined\n expiry_date: number = undefined\n duration = ''\n}\n","export class ProductILPPremium {\n regular_name = ''\n regular_amt = ''\n regular_freq = ''\n regular_approved_date = undefined\n regular_end_date = undefined\n regular_unit_balance = ''\n regular_risk_class = ''\n regular_regular_cash = ''\n regular_regular_stock = ''\n regular_regular_bonds = ''\n}\n","export class ProductILPSingle {\n name = ''\n amt = ''\n approved_date: number = undefined\n unit_balance = ''\n risk_class = ''\n cash = ''\n stock = ''\n bonds = ''\n}\n","export class CISLumpSum {\n transaction_no = ''\n name = ''\n amt = ''\n approved_date: number = undefined\n unit_balance = ''\n risk_class = ''\n cash = ''\n stock = ''\n bonds = ''\n}\n\nexport class CISRepeatInvestment {\n transaction_no = ''\n name = ''\n amt = ''\n freq = ''\n approved_date: number = undefined\n end_date: number = undefined\n unit_balance = ''\n risk_class = ''\n cash = ''\n stock = ''\n bonds = ''\n}\n\nexport class PorfolioTransactions {\n transaction_no = ''\n subaccount_no = ''\n name = ''\n amt = ''\n freq = ''\n transaction_type = ''\n wrap = ''\n paymentMode = ''\n approved_date: number = undefined\n end_date: number = undefined\n}\n","import { options } from './Options'\n\nexport const TypeOfServiceOptions: options[] = [\n { value: '', label: '' },\n { value: 'wills', label: 'Wills' },\n { value: 'financialplanning', label: 'Financial Planning' },\n { value: 'mortgageloan', label: 'Mortgage Loan' },\n { value: 'businessfinancing', label: 'Business Financing' },\n { value: 'businessconsulting', label: 'Business Consulting' },\n { value: 'trustplanning', label: 'Trust Planning' },\n { value: 'estateplanning', label: 'Estate Planning' },\n { value: 'trailerfee', label: 'Trailer Fee' },\n { value: 'others', label: 'Others' }\n]\n","import { options } from '@master/model/options/Options'\n\nconst PaymentMethodList = ['Cash', 'Cheque', 'Credit Card', 'Giro', 'Others']\nexport const PaymentMethodOptions: options[] = PaymentMethodList.map(paymentMethod => {\n return {\n label: paymentMethod,\n value: paymentMethod\n }\n})\n","export const CurrencyOptions = [\n { label: '', value: '' },\n { label: 'SGD', value: 'sgd' },\n { label: 'CHF', value: 'chf' },\n { label: 'EUR', value: 'eur' },\n { label: 'GBP', value: 'gbp' },\n { label: 'USD', value: 'usd' },\n { label: 'AUD', value: 'aud' },\n { label: 'JPY', value: 'jpy' },\n { label: 'MYR', value: 'myr' },\n { label: 'HKD', value: 'hkd' }\n]\n","/* eslint-disable @typescript-eslint/camelcase */\nimport { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'\nimport '@/DIContainer'\nimport { AddPolicyIndividualDTO, ClientPolicyDto, ClientPolicyService, FilterPoliciesDTO, ManualNbrDTOV2, PolicyIndividualDTO, PolicySearchDto, PolicySearchResultDto, SyncPolicyIndividualRequestDTO, SyncPolicyIndividualResponseDTO } from '../api'\nimport { camelCase, snakeCase } from 'lodash/fp'\nimport { ProductHeaders } from '@master/model/common/ProductMeta'\nimport { container, inject } from 'inversify-props'\nimport API from '@core/services/API'\nimport AccountMeta from '@core/pages/account/model/AccountMeta'\nimport { ProductRider } from '../model/ProductRider'\nimport { ProductILPPremium } from '../model/ProductILPPremium'\nimport { ProductILPSingle } from '../model/ProductILPSingle'\nimport { PolicyClientMeta } from '../model/PolicyClientMeta'\nimport { ProductFullMetaList } from '@master/model/common/ProductFullMetaList'\nimport { CISLumpSum, CISRepeatInvestment, PorfolioTransactions } from '../model/CISPortfolio'\nimport { PolicyRoles } from '@master/model/options/PolicyRoles'\nimport { SharedVariable } from '@core/model/SharedVariable'\nimport { LineOfBusinessOptions } from '@master/model/options/LineOfBusinessOptions'\nimport { NBRStatusOptions } from '@master/model/options/NBRStatusOptions'\nimport { NBRProductStatusOptions, NBRProductCISStatusOptions } from '@master/model/options/NBRProductStatusOptions'\nimport { TypeOfServiceOptions } from '@master/model/options/TypeOfServiceOptions'\nimport { PaymentMethodOptions } from '@master/model/options/PaymentMethodOptions'\nimport { CurrencyOptions } from '@master/model/options/CurrencyOptions'\nimport { FrequencyOptions } from '@master/model/options/FrequencyOptions'\nimport { PaymentModeOptions } from '@master/model/options/PaymentModeOptions'\nimport { RelationshipOptions } from '@master/model/options/RelationshipOptions'\nimport { IdentityTypeOptions } from '@master/model/options/IdentityTypeOptions'\nimport { CitizenshipOptions } from '@master/model/options/CitizenshipOptions'\nimport { MaritalStatusOptions } from '@master/model/options/MaritalStatusOptions'\nimport { EduLevelOptions, SpokenLangOptions, WrittenLangOptions, IncomeTierOptions } from '@core/pages/client-management/model/ClientPersonal'\nimport { TransactionTypeOptions } from '@master/model/options/TransactionTypeOptions'\nimport { WrapOptions } from '@master/model/options/WrapOptions'\nimport { ProductList } from '@core/pages/adminProductList/model/ProductList'\n\nconst $api = container.get('$api')\n\n@Module({\n namespaced: true\n})\nexport default class ClientPolicyStore extends VuexModule {\n @inject()\n private sharedVariable: SharedVariable\n\n loading = false\n policy: ClientPolicyDto = {\n pky: undefined,\n oid: undefined,\n ctm: undefined,\n clientOid: undefined,\n adviserOid: undefined,\n introducerOid: undefined,\n introducerPct: undefined,\n introducerIfam: undefined,\n servicingOid: undefined,\n servicingPct: undefined,\n servicingIfam: undefined,\n vestingOid: undefined,\n vestingPct: undefined,\n vestingIfam: undefined,\n ownersOid: undefined,\n ownersName: undefined,\n ownersNric: undefined,\n insuredTitle: undefined,\n insuredName: undefined,\n insuredNric: undefined,\n insuredTitleTwo: undefined,\n insuredNameTwo: undefined,\n insuredNricTwo: undefined,\n productOid: undefined,\n name: undefined,\n productTypeDetailed: undefined,\n productCategory: undefined,\n taggedKyc: undefined,\n type: undefined,\n policyNumber: undefined,\n businessId: undefined,\n principal: undefined,\n status: undefined,\n applicationDate: undefined,\n opsApprovalDate: undefined,\n approvedDate: undefined,\n startDate: undefined,\n endDate: undefined,\n bscClawbackStatus: undefined,\n bscClawbackAmount: undefined,\n clientRebateStatus: undefined,\n clientRebateAmount: undefined,\n clientAiStatus: undefined,\n productMetadata: undefined,\n clientMetadata: undefined,\n creationType: undefined,\n faceToFace: undefined,\n faceToFaceSpecified: undefined,\n policyProfileRemarks: undefined,\n level1ComOid: undefined,\n level2ComOid: undefined,\n level3ComOid: undefined,\n level4ComOid: undefined,\n level1ComPct: undefined,\n level2ComPct: undefined,\n level3ComPct: undefined,\n level4ComPct: undefined,\n groupId: undefined,\n unitName: undefined,\n branchName: undefined,\n clusterName: undefined,\n mainInvestmentNbr: undefined,\n mainNbrOid: undefined\n }\n\n // NBR Version 2 Requirements (START)\n\n policyIndividuals: PolicyIndividualDTO[] = []\n\n subPolicies: ClientPolicyDto[] = []\n\n policyRoles = PolicyRoles\n\n policyInView: ClientPolicyDto = null\n\n mainPolicies: PolicySearchDto[] = []\n\n syncClientResponse: SyncPolicyIndividualResponseDTO = null\n\n // NBR Version 2 Requirements (END)\n\n clientMetadata = new PolicyClientMeta()\n\n productMetadata: any = null\n\n productMetaList: ProductFullMetaList = new ProductFullMetaList([])\n\n adviserDetails = new AccountMeta()\n\n commissionUserDetails: any = {}\n\n // get all reusable options\n lineOfBusinessOptions = LineOfBusinessOptions\n nbrStatusOptions = NBRStatusOptions.filter(option => option.value !== 'new')\n nbrProductStatusOptions = NBRProductStatusOptions\n nbrProductCisStatusOptions = NBRProductCISStatusOptions\n typeOfServiceOptions = TypeOfServiceOptions\n paymentMethodOptions = PaymentMethodOptions\n currencyOptions = CurrencyOptions\n frequencyOptions = FrequencyOptions\n paymentModeOptions = PaymentModeOptions\n relationshipOptions = RelationshipOptions\n identityTypeOptions = IdentityTypeOptions\n citizenshipOptions = CitizenshipOptions\n maritalStatusOptions = MaritalStatusOptions\n eduLevelOptions = EduLevelOptions\n spokenLangOptions = SpokenLangOptions\n writtenLangOptions = WrittenLangOptions\n incomeTierOptions = IncomeTierOptions\n transactionTypeOptions = TransactionTypeOptions\n wrapOptions = WrapOptions\n\n get venueOptions () {\n return this.sharedVariable?.options?.venueOptions || []\n }\n\n get convertedKeyClientPolicy () {\n const convertedKeys: Record = {}\n for (const key in this.policy) {\n convertedKeys[snakeCase(key)] = this.policy[key]\n }\n return convertedKeys\n }\n\n @Action\n async listPolicies (filter: FilterPoliciesDTO) {\n this.context.commit('setLoading', true)\n\n try {\n const policies = await ClientPolicyService.listPoliciesV2(filter)\n this.context.commit('setMainPolicies', policies)\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Mutation\n setMainPolicies (policies: PolicySearchResultDto) {\n if (policies.data.length > 0) {\n this.mainPolicies = policies.data.map(policy => {\n if (typeof policy.productMetadata === 'string') {\n policy.productMetadata = JSON.parse(policy.productMetadata)\n }\n if (typeof policy.role === 'string') {\n policy.role = JSON.parse(policy.role)\n }\n return policy\n })\n }\n }\n\n @Action\n async updateFromIframe (obj: Record) {\n const convertedKeys: Record = {}\n for (const key in obj) {\n convertedKeys[camelCase(key)] = obj[key]\n }\n this.context.commit('updatePolicy', convertedKeys)\n }\n\n @Action({ rawError: true })\n async savePolicy () {\n this.context.commit('setLoading', true)\n\n try {\n const selectedProduct = this.productMetaList?.getFullList().find(prod => prod.oid === this.policy.productOid)\n\n if (selectedProduct) {\n this.policy.name = selectedProduct.name\n this.policy.productCategory = selectedProduct.category\n this.policy.productTypeDetailed = selectedProduct.type\n }\n this.policy.clientMetadata = JSON.stringify(this.clientMetadata.convertToRawData())\n this.policy.productMetadata = JSON.stringify(this.productMetadata)\n await ClientPolicyService.updatePolicy(this.policy)\n } catch (error) {\n alert(error.message)\n }\n\n this.context.commit('setLoading', false)\n }\n\n @Action\n async fetchPolicy (oid: string) {\n this.context.commit('setLoading', true)\n try {\n const res = await ClientPolicyService.getPolicy(oid) as any\n\n if (typeof res === 'string' && JSON.parse(res).error) {\n throw new Error(JSON.parse(res).error)\n }\n\n this.context.commit('setPolicy', res)\n } catch (error) {\n alert(error.message)\n }\n this.context.commit('setLoading', false)\n }\n\n @Action\n async fetchPolicyV2 (oid: string) {\n this.context.commit('setLoading', true)\n try {\n const res = await ClientPolicyService.getPolicyV2(oid) as any\n\n if (typeof res === 'string' && JSON.parse(res).error) {\n throw new Error(JSON.parse(res).error)\n }\n\n this.context.commit('setPolicy', res)\n } catch (error) {\n alert(error.message)\n }\n this.context.commit('setLoading', false)\n }\n\n // NBR Version 2 Requirements (START)\n\n @Action\n async retrieveSubPolicies (mainPolicyOid: string) {\n this.context.commit('setLoading', true)\n try {\n const res = await ClientPolicyService.getSubPolicy(mainPolicyOid)\n if (typeof res === 'string' && JSON.parse(res).error) {\n throw new Error(JSON.parse(res).error)\n }\n this.context.commit('setSubPolicies', res)\n } catch (error) {\n alert(error.message)\n }\n this.context.commit('setLoading', false)\n }\n\n @Mutation\n setSubPolicies (data: ClientPolicyDto[]) {\n if (data && data.length) {\n this.subPolicies = data.map(policy => {\n return {\n ...policy,\n productMetadata: JSON.parse(policy.productMetadata) || {}\n }\n })\n }\n }\n\n @Action\n async saveSubPolicy (subPolicy: ClientPolicyDto) {\n this.context.commit('setLoading', true)\n try {\n subPolicy.productMetadata = JSON.stringify(subPolicy.productMetadata)\n const productList: ProductList = this.context.rootState.KYCFormStore.productList\n const selectedProduct = productList.originalList.find(prod => prod.oid === subPolicy.productOid)\n\n if (selectedProduct) {\n subPolicy.name = selectedProduct.name\n subPolicy.productCategory = selectedProduct.category\n subPolicy.productTypeDetailed = selectedProduct.type\n }\n const createdPolicyOid = await ClientPolicyService.updatePolicy(subPolicy)\n // Doing so because version 1 API returns it as a string...\n subPolicy.productMetadata = JSON.parse(subPolicy.productMetadata)\n this.context.commit('updatePolicyInView', subPolicy)\n return createdPolicyOid\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Action\n async addNewSubPolicy (subPolicy: ManualNbrDTOV2) {\n this.context.commit('setLoading', true)\n\n try {\n const createdPolicy = await ClientPolicyService.saveNewBusinessV2(subPolicy)\n this.context.commit('updatePolicyInView', createdPolicy)\n this.context.commit('addSubPolicyToArray', createdPolicy)\n return createdPolicy\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Action\n selectedPolicyInView (policy: ClientPolicyDto) {\n this.context.commit('updatePolicyInView', policy)\n }\n\n @Mutation\n updatePolicyInView (policy: ClientPolicyDto) {\n if (typeof policy?.productMetadata === 'string') {\n policy.productMetadata = JSON.parse(policy.productMetadata)\n }\n this.policyInView = policy\n }\n\n @Mutation\n addSubPolicyToArray (policy: ClientPolicyDto) {\n this.subPolicies.push(policy)\n }\n\n @Action\n async removeSubPolicy (oid: string) {\n const subPolicy = this.subPolicies.find(policy => policy.oid === oid)\n\n if (!subPolicy) {\n return\n }\n\n // Delete from database\n this.context.commit('setLoading', true)\n\n try {\n const deletedPolicy = await ClientPolicyService.deleteSubPolicy(subPolicy.oid)\n this.context.commit('removeSubPolicyFromArray', deletedPolicy)\n return deletedPolicy\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Mutation\n removeSubPolicyFromArray (policy: ClientPolicyDto) {\n const index = this.subPolicies.findIndex(subPolicy => subPolicy.oid === policy.oid)\n\n if (index !== -1) {\n this.subPolicies.splice(index, 1)\n this.policyInView = null\n }\n }\n\n @Action\n async addPolicyIndividual (individual: AddPolicyIndividualDTO) {\n this.context.commit('setLoading', true)\n try {\n const res = await ClientPolicyService.addNewPolicyIndividuals(individual) as any\n\n if (typeof res === 'string' && JSON.parse(res).error) {\n throw new Error(JSON.parse(res).error)\n }\n\n this.context.commit('setSubPolicies', res)\n return res\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Action\n async savePolicyIndividual (individual: PolicyIndividualDTO) {\n this.context.commit('setLoading', true)\n try {\n const updatedIndividual = await ClientPolicyService.savePolicyIndividual(individual)\n return updatedIndividual\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Action\n async deletePolicyIndividual (individual: PolicyIndividualDTO) {\n this.context.commit('setLoading', true)\n try {\n const deletedIndividual = await ClientPolicyService.deletePolicyIndividual(individual.oid)\n return deletedIndividual\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Action\n async fetchPolicyIndividuals (oid: string) {\n this.context.commit('setLoading', true)\n try {\n const res = await ClientPolicyService.retrievePolicyIndividuals(oid) as any\n\n if (typeof res === 'string' && JSON.parse(res).error) {\n throw new Error(JSON.parse(res).error)\n }\n\n this.context.commit('setPolicyIndividual', res)\n } catch (error) {\n alert(error.message)\n }\n this.context.commit('setLoading', false)\n }\n\n @Mutation\n setPolicyIndividual (data: PolicyIndividualDTO[]) {\n if (data && data.length) {\n this.policyIndividuals = data.sort((a, b) => Number(b.isMainOwner) - Number(a.isMainOwner))\n }\n }\n\n // NBR Version 2 Requirements (END)\n\n @Mutation\n setProductMetaList (data: (string | number)[][]) {\n if (data && data.length) {\n const productMetaList = new ProductFullMetaList(data)\n this.productMetaList = productMetaList\n }\n }\n\n @Mutation\n setAdviserDetails (data: (string | number)[]) {\n if (data) {\n this.adviserDetails.assignData(Object.keys(data), Object.values(data))\n }\n }\n\n @Action({ rawError: true })\n async fetchRecommendedProducts () {\n const { data } = await $api.relProductList.list({\n headers: JSON.stringify(ProductHeaders),\n // only return active products\n query: 'status = ?',\n queryArgs: JSON.stringify([1])\n })\n this.context.commit('setProductMetaList', data)\n }\n\n @Action({ rawError: true })\n async fetchAdviserDetails () {\n const { meta } = await $api.account.loginMetaGet({ _oid: this.policy.adviserOid })\n this.context.commit('setAdviserDetails', meta)\n }\n\n @Mutation\n setCommissionUserDetails (data: {}) {\n if (data) {\n this.commissionUserDetails = data\n }\n }\n\n @Action({ rawError: true })\n async fetchCommissionUserDetails () {\n const lvl1ComUser = await $api.account.loginMetaGet({ _oid: this.policy.level1ComOid })\n const lvl2ComUser = await $api.account.loginMetaGet({ _oid: this.policy.level2ComOid })\n const lvl3ComUser = await $api.account.loginMetaGet({ _oid: this.policy.level3ComOid })\n const data = {\n lvl1ComUser: lvl1ComUser.meta,\n lvl2ComUser: lvl2ComUser.meta,\n lvl3ComUser: lvl3ComUser.meta\n }\n this.context.commit('setCommissionUserDetails', data)\n }\n\n @Action({ rawError: true })\n async syncClientInformation (syncDto: SyncPolicyIndividualRequestDTO) {\n const response = await ClientPolicyService.syncClientInformation(syncDto)\n this.context.commit('setSyncClientResponse', response)\n }\n\n @Mutation\n setSyncClientResponse (syncResponse: SyncPolicyIndividualResponseDTO) {\n this.syncClientResponse = syncResponse\n }\n\n @Mutation\n setPolicy (policy: ClientPolicyDto) {\n this.policy = policy\n let productMetadata = JSON.parse(policy.productMetadata)\n const parsedClientMetadata = JSON.parse(policy.clientMetadata) || {}\n this.clientMetadata.assignData(Object.keys(parsedClientMetadata), Object.values(parsedClientMetadata))\n\n if (typeof this.clientMetadata.pdpaMarketing === 'boolean') {\n this.clientMetadata.pdpaMarketing = []\n }\n\n if (!productMetadata) {\n productMetadata = {}\n }\n\n productMetadata.insured_dob = productMetadata.insured_dob || ''\n productMetadata.insured_citizenship = productMetadata.insured_citizenship || ''\n productMetadata.nationality = productMetadata.nationality || ''\n productMetadata.gender = productMetadata.gender || ''\n productMetadata.relationship_to_owner = productMetadata.relationship_to_owner || ''\n\n if (this.policy.type === 'collectiveinvestmentscheme') {\n if (!productMetadata.cis_lump_sum) {\n productMetadata.cis_lump_sum = [new CISLumpSum()]\n }\n\n if (!productMetadata.cis_repeat_investment) {\n productMetadata.cis_repeat_investment = [new CISRepeatInvestment()]\n }\n if (!productMetadata.portfolio_transactions) {\n productMetadata.portfolio_transactions = [new PorfolioTransactions()]\n }\n }\n\n if (this.policy.type === 'lifeinsurance') {\n if (!productMetadata.riders) {\n productMetadata.riders = [new ProductRider()]\n }\n\n if (!productMetadata.ilp_premium_list) {\n productMetadata.ilp_premium_list = [new ProductILPPremium()]\n }\n\n if (!productMetadata.ilp_single_list) {\n productMetadata.ilp_single_list = [new ProductILPSingle()]\n }\n }\n\n this.productMetadata = {\n frequency: '',\n basicModalPremium: 0,\n basic_modal_premium: 0,\n ncBasicModalPremium: 0,\n nc_basic_modal_premium: 0,\n modalPremium: 0,\n modal_premium: 0,\n asp: 0,\n discount: 0,\n gst: 0,\n premiumPayable: 0,\n premium_payable: 0,\n netPremium: 0,\n net_premium: 0,\n ape: 0,\n commissionPayable: 0,\n grossCommissionEarned: 0,\n commissionPayment: 0,\n ...productMetadata\n }\n\n // Assign product issuer and name, if product name is null, but have product oid\n if (this.policy.productOid && !this.policy?.name) {\n const product = this.productMetaList.allProduct.find(product => product.oid === this.policy.productOid)\n const name = product?.name\n const issuer = product?.issuer_oid\n this.policy.name = name\n\n if (!this.policy.principal) {\n this.policy.principal = issuer\n }\n }\n\n // Set default policy.status as 'pending', instead of 'new'\n if (this.policy.status === 'new') this.policy.status = 'pending'\n }\n\n @Mutation\n updatePolicy (update: Record) {\n Object.assign(this.policy, update)\n }\n\n @Mutation\n setLoading (loading: boolean) {\n this.loading = loading\n }\n}\n","import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'\nimport { ScheduleService, ScheduleTimeDto, ScheduleTimeResponseDto } from '../api'\nimport { ScheduleTime } from '../model/ScheduleTime'\nimport { ScheduleTimeRequestDto } from '../model/ScheduleTimeRequestDto'\n\n@Module({\n namespaced: true\n})\nexport default class ScheduleStore extends VuexModule {\n scheduleInView: ScheduleTimeResponseDto = null\n scheduleList: ScheduleTime[] = []\n private loading = false\n\n @Action\n selectedScheduleInView (schedule: ScheduleTimeResponseDto) {\n this.context.commit('setScheduleInView', schedule)\n }\n\n @Mutation\n setScheduleInView (schedule: ScheduleTimeResponseDto) {\n this.scheduleInView = schedule\n }\n\n @Action\n async saveSchedule (schedule: ScheduleTimeRequestDto) {\n this.context.commit('setLoading', true)\n\n const hour = parseInt(schedule.time.split(':')[0])\n const minute = parseInt(schedule.time.split(':')[1])\n schedule.hour = hour\n schedule.minute = minute\n try {\n const savedSchedule = await ScheduleService.updateScheduleTaskTime(schedule)\n this.context.commit('selectedScheduleInView', savedSchedule)\n return savedSchedule\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Action\n async retrieveSchedules () {\n this.context.commit('setLoading', true)\n const schedules = await ScheduleService.listSchedules()\n try {\n this.context.commit('setScheduleList', schedules)\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Mutation\n setScheduleList (schedules: ScheduleTime[]) {\n this.scheduleList = schedules.map(schedule => {\n schedule.time = `${`0${schedule.hour}`.slice(-2)}:${`0${schedule.minute}`.slice(-2)}`\n return schedule\n })\n }\n\n @Mutation\n setLoading (loading: boolean) {\n this.loading = loading\n }\n}\n","import { sortBy } from 'lodash/fp'\nimport { MetaList } from '@master/model/common/MetaList'\nimport { PrincipalMeta } from './PrincipalMeta'\n\nexport class PrincipalMetaList extends MetaList {\n declare list: PrincipalMeta[]\n\n constructor (headers: string[], data: (string | number)[][]) {\n super(headers, data, PrincipalMeta)\n // sort product based on name\n this.list = sortBy((principal) => principal.companyDetailsName, this.list)\n }\n}\n","import { Meta } from '@master/model/common/Meta'\n\nexport class ContractDetailsMeta extends Meta {\n farLicense = ''\n ifpasNo = ''\n}\n","import { Meta } from '@master/model/common/Meta'\n\nexport class NextOfKinDetailsMeta extends Meta {\n name = ''\n relationship = ''\n contactNumber = ''\n}\n","import { Meta } from '@master/model/common/Meta'\nimport { MaxChar } from '@master/annotation/MaxChar'\n\nexport default class PersonalDetailsMeta extends Meta {\n placeOfBirth = ''\n gender = ''\n nationality = ''\n nationalitySpecified = ''\n maritalStatus = ''\n race = ''\n immigrationNumber = ''\n employmentPassNumber = ''\n mobile = ''\n residentialNumber = ''\n email = ''\n residentialAddress = ''\n postalCode = ''\n\n bankName = '' // personal commission bank name\n\n @MaxChar(20)\n branchName = '' // personal commission bank branch name/ code\n\n @MaxChar(34)\n bankAccountNo = '' // personal commission bank account number\n\n @MaxChar(20)\n financingType = ''\n\n @MaxChar(50)\n reasons = ''\n\n paymentStructure = ''\n\n overridingBankCode = '' // overriding commission bank name\n\n @MaxChar(20)\n overridingBankBranchCode = '' // commission bank branch name/ code\n\n @MaxChar(34)\n overridingBankAccountNo = '' // commission bank account number\n}\n","import { Meta } from '@master/model/common/Meta'\n\nexport default class PersonalItemsIssuedMeta extends Meta {\n accessCardNumber = ''\n lockerNumber = ''\n pigeonBoxNumber = ''\n securityLevel = ''\n pedestalNumber = ''\n remarks = ''\n}\n","import { Meta } from '@master/model/common/Meta'\n\nexport class RecruitmentChecklistMeta extends Meta {\n atLeast21Remarks = ''\n atLeast4GceRemarks = ''\n aLvlCheckedRemarks = ''\n examRequirementsRemarks = ''\n examRequirements2Remarks = ''\n examRequirements3Remarks = ''\n examRequirements4Remarks = ''\n examRequirements5Remarks = ''\n solvencySearchRemarks = ''\n contractStatusRemarks = ''\n marketConductRemarks = ''\n employerRemarks = ''\n masProhibitionCheckRemarks = ''\n}\n","import { Meta } from '@master/model/common/Meta'\n\nexport default class SpouseDetailsMeta extends Meta {\n name = ''\n occupation = ''\n dateOfBirth: number = undefined\n nationality = ''\n nationalitySpecified = ''\n race = ''\n idDocType = ''\n idNumber = ''\n contactNumber = ''\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { MetaClass } from '@master/annotation/MetaClass'\nimport { Meta } from '@master/model/common/Meta'\nimport { ContractDetailsMeta } from './ContractDetailsMeta'\nimport EducationMeta from './EducationMeta'\nimport EmploymentMeta from './EmploymentMeta'\nimport { NextOfKinDetailsMeta } from './NextOfKinDetailsMeta'\nimport PersonalDetailsMeta from './PersonalDetailsMeta'\nimport PersonalItemsIssuedMeta from './PersonalItemsIssuedMeta'\nimport QualificationMeta from './QualificationMeta'\nimport { RecruitmentChecklistMeta } from './RecruitmentChecklistMeta'\nimport SpouseDetailsMeta from './SpouseDetailsMeta'\nimport { IAdviserService } from '@master/services/IAdviserService'\n\nexport class UserAdviserDetailsMeta extends Meta {\n // @Json()\n // myinfoLockedFieldsClient: Array = []\n\n // linkedToMyinfo: boolean = undefined\n\n // Recruitment checklist\n atLeast21Checked: boolean = undefined\n atLeast4GceChecked: boolean = undefined\n aLvlChecked: boolean = undefined\n examRequirementsChecked: boolean = undefined\n examRequirements2Checked: boolean = undefined\n examRequirements3Checked: boolean = undefined\n examRequirements4Checked: boolean = undefined\n examRequirements5Checked: boolean = undefined\n solvencySearchChecked: boolean = undefined\n contractStatusChecked: boolean = undefined\n marketConductChecked: boolean = undefined\n employerChecked: boolean = undefined\n masProhibitionCheckChecked: boolean = undefined\n\n // Contract details\n contractStatus = ''\n dateContracted: number = undefined\n dateTerminated: number = undefined\n dateIssued: number = undefined\n contractType = ''\n dateOfLastPromotion: number = undefined\n dateMasApplication: number = undefined\n dateMasYearlyRenewal: number = undefined\n dateMasTriYearlyRenewal: number = undefined\n\n // Personal details\n dateOfBirth: number = undefined\n dateEpIssued: number = undefined\n dateEpExpiry: number = undefined\n\n @MetaClass(ContractDetailsMeta)\n contractDetails: ContractDetailsMeta = new ContractDetailsMeta()\n\n @MetaClass(PersonalDetailsMeta)\n personalDetails: PersonalDetailsMeta = new PersonalDetailsMeta()\n\n @MetaClass(RecruitmentChecklistMeta)\n recruitmentChecklist: RecruitmentChecklistMeta = new RecruitmentChecklistMeta()\n\n @MetaClass(SpouseDetailsMeta)\n spouseDetails: SpouseDetailsMeta = new SpouseDetailsMeta()\n\n @MetaClass(NextOfKinDetailsMeta)\n nextOfKinDetails: NextOfKinDetailsMeta = new NextOfKinDetailsMeta()\n\n @MetaClass(PersonalItemsIssuedMeta)\n personalItemsIssued: PersonalItemsIssuedMeta = new PersonalItemsIssuedMeta()\n\n @MetaClass(EducationMeta, { isArray: true })\n @Ignore()\n educationList: EducationMeta[] = []\n\n @MetaClass(EmploymentMeta, { isArray: true })\n @Ignore()\n employmentList: EmploymentMeta[] = []\n\n @MetaClass(QualificationMeta, { isArray: true })\n @Ignore()\n qualificationList: QualificationMeta[] = []\n\n @Ignore()\n adviserService: IAdviserService\n\n constructor (adviserService: IAdviserService) {\n super()\n this.adviserService = adviserService\n }\n\n @Ignore()\n get contractTypeRank () {\n if (typeof this.adviserService.adviserContractTypeList === 'undefined') return null\n const selectedContractType = this.adviserService.adviserContractTypeList().find(type => type.name === this.contractType)\n return selectedContractType?.rank\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport { PicodedAccountDTO } from '@core/pages/account/api'\nimport { needToConvertJson } from '@master/annotation/Json';\nimport { convertJsonToMetaClass, needToConvertToMetaClass } from '@master/annotation/MetaClass';\nimport { getRawKey } from '@master/annotation/RawKey';\nimport { isEmpty, snakeCase, zipObject } from 'lodash/fp';\n\nexport class PicodedAccount implements PicodedAccountDTO {\n preferredName = ''\n reasonForMonitoring= ''\n monitoringEffectiveDate: number = null\n monitoringEndDate: number = null\n statusType= ''\n status= ''\n oid= ''\n systemrole= ''\n username = ''\n fullname= ''\n mobile= ''\n nric= ''\n email= ''\n branch= ''\n masRepno= ''\n companyCode= ''\n representativeCodes: Array = []\n structureId: number = null\n typeOfMonitoring: Array = []\n adviserProducts = ''\n\n // These three attributes are add on to get it to work\n // more efficiently because of the change in UI section\n // in user profile summary\n oldPassword= ''\n newPassword= ''\n confirmPassword= ''\n\n snakeCaseKey (key: string) {\n return snakeCase(key)\n }\n\n /**\n * AssignData is used for get the data and fill into this object\n * @param headers headers from meta lis\n * @param data single row data from meta list\n */\n assignData (user: object) {\n Object.assign(this, user)\n // this.status = user['account_status']\n }\n\n}\n","/* eslint-disable @typescript-eslint/camelcase */\nimport { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'\nimport { UserMeta, header } from '@core/model/common/UserMeta'\nimport { cid, container } from 'inversify-props'\nimport API from '@core/services/API'\nimport '@/DIContainer'\nimport { PrincipalMetaList } from '@core/model/common/PrincipalMetaList'\nimport { PrincipalMeta } from '@core/model/common/PrincipalMeta'\nimport { UserAdviserDetailsMeta } from '../sections/user-adviser-details-components/model/UserAdviserDetailsMeta'\nimport { PicodedAccount } from '@core/pages/account/model/PicodedAccountDTO'\nimport { AccountService } from '@core/pages/account/api'\nimport { IAdviserService } from '@master/services/IAdviserService'\nimport { UserMetaList } from '@core/model/common/UserMetaList'\n\nconst $api = container.get('$api')\nconst adviserService = container.get(cid.IAdviserService)\n\nconst principalRequestHeaders = [\n '_oid',\n 'company_code_oid',\n 'company_details_name',\n 'company_details_code',\n 'adviser_code'\n]\n\n@Module({ namespaced: true })\nexport default class UserStore extends VuexModule {\n loading = false\n user: UserMeta = new UserMeta()\n userSystem: PicodedAccount = new PicodedAccount()\n originalUserName = ''\n productPrincipals: PrincipalMetaList = new PrincipalMetaList(principalRequestHeaders, [])\n userAdviserDetails: UserAdviserDetailsMeta = new UserAdviserDetailsMeta(adviserService)\n userList: UserMeta[] = []\n\n @Action({ rawError: true })\n async fetchUser (oid: string) {\n this.context.commit('setLoading', true)\n const user = await $api.account.loginMetaGet({\n _oid: oid\n })\n const { groups, accountNames } = await $api.account.loginInfoGet({\n accountID: oid\n })\n this.context.commit('setUser', { ...user.meta, groups })\n this.context.commit('setUserSystem', { ...user.meta, username: accountNames[0] })\n this.context.dispatch('fetchPrincipalList')\n this.context.commit('setLoading', false)\n }\n\n @Action({ rawError: true })\n async saveUser () {\n console.log('saveUser')\n this.context.commit('setLoading', true)\n this.user.status = this.userSystem.status\n this.user.systemrole = this.userSystem.systemrole\n await $api.account.meta({\n _oid: this.user.oid,\n meta: JSON.stringify(this.user.convertToRawData())\n })\n this.context.commit('setLoading', false)\n }\n\n @Action({ rawError: true })\n async changeUserName () {\n const result = await AccountService.changeUserName({\n oid: this.user.oid,\n username: this.userSystem.username\n })\n\n if (result) {\n this.context.commit('setUserSystem', this.userSystem)\n }\n }\n\n @Action({ rawError: true })\n async savePassword () {\n this.context.commit('setLoading', true)\n try {\n await $api.account.password({\n accountID: this.user.oid,\n newPassword: this.userSystem.newPassword,\n oldPassword: this.userSystem.oldPassword,\n confirmPassword: this.userSystem.confirmPassword\n })\n } finally {\n this.context.commit('clearPassword')\n this.context.commit('setLoading', false)\n }\n }\n\n @Action({ rawError: true })\n async fetchPrincipalList () {\n this.context.commit('setLoading', true)\n const res = await $api.adviserAgentCodes.list({\n query: 'adviser_oid = ?',\n queryArgs: JSON.stringify([this.user.oid]),\n headers: JSON.stringify(principalRequestHeaders)\n })\n this.context.commit('setProductPrincipals', res.data)\n this.context.commit('setLoading', false)\n }\n\n @Action({ rawError: true })\n async fetchAdviserDetails (adviser_oid: string) {\n this.context.commit('setLoading', true)\n const res = await $api.adviserDetails.getDetails({\n adviser_oid\n })\n\n const data = { ...res.data }\n\n const educationList = await $api.adviserDetails.getEducationList({\n adviser_oid\n })\n data.education_list = JSON.stringify(educationList?.data) || {}\n\n const qualificationList = await $api.adviserDetails.getQualificationList({\n adviser_oid\n })\n data.qualification_list = JSON.stringify(qualificationList?.data) || {}\n\n const employmentList = await $api.adviserDetails.getEmploymentList({\n adviser_oid\n })\n data.employment_list = JSON.stringify(employmentList?.data) || {}\n\n this.context.commit('setAdviserDetails', data)\n this.context.commit('setLoading', false)\n }\n\n @Action({ rawError: true })\n async saveProductPrincipal (principal: PrincipalMeta) {\n this.context.commit('setLoading', true)\n await $api.adviserAgentCodes.meta({\n _oid: principal.oid,\n meta: JSON.stringify({ adviser_code: principal.adviserCode })\n })\n this.context.dispatch('fetchPrincipalList')\n this.context.commit('setLoading', false)\n }\n\n @Action({ rawError: true })\n async fetchUserList () {\n if (this.userList.length > 0) return\n const res = await $api.account.list({\n headers: JSON.stringify(header),\n groupStatus: 'user'\n })\n const userMetaList: UserMetaList = new UserMetaList(res.data, header)\n\n this.context.commit('setUserList', userMetaList.list)\n }\n\n @Mutation\n setProductPrincipals (data: (string | number)[][]) {\n this.productPrincipals = new PrincipalMetaList(principalRequestHeaders, data)\n }\n\n @Mutation\n setAdviserDetails (adviserDetails: object) {\n this.userAdviserDetails.assignData(Object.keys(adviserDetails), Object.values(adviserDetails))\n }\n\n @Mutation\n clearPassword () {\n this.userSystem.newPassword = ''\n this.userSystem.confirmPassword = ''\n }\n\n @Mutation\n setUser (user: object) {\n this.user.assignData(Object.keys(user), Object.values(user))\n }\n\n @Mutation\n setUserSystem (user: object) {\n this.userSystem.assignData(user)\n this.originalUserName = this.userSystem.username\n }\n\n @Mutation\n setLoading (state: boolean) {\n this.loading = state\n }\n\n @Mutation\n setUserList (data: UserMeta[]) {\n this.userList = data\n }\n}\n","import { ClientResponseDto, ClientService } from '@core/pages/client-management/api'\nimport { Action, Module, Mutation, VuexModule } from 'vuex-module-decorators'\n\n@Module({\n namespaced: true\n})\nexport default class ClientStore extends VuexModule {\n loading = false\n clientList: ClientResponseDto[] = []\n corporateList: ClientResponseDto[] = []\n individualList: ClientResponseDto[] = []\n\n @Mutation\n setClientList (data: ClientResponseDto[]) {\n if (data && data.length) {\n this.clientList = data\n this.corporateList = data.filter(client => client.accountType === 'corporate')\n this.individualList = data.filter(client => client.accountType === 'individual')\n }\n }\n\n /**\n * In the future, to have parameters to be pass in\n * for filtering\n * @TODO: To have the backend use Swagger for defining the type\n * for the response\n */\n @Action\n async retrieveClientList () {\n this.context.commit('setLoading', true)\n try {\n const res = await ClientService.retrieveClientList() as any\n\n if (typeof res === 'string' && JSON.parse(res).error) {\n throw new Error(JSON.parse(res).error)\n }\n\n this.context.commit('setClientList', res)\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Mutation\n setLoading (loading: boolean) {\n this.loading = loading\n }\n}\n","import { Action, Module, Mutation, VuexModule } from 'vuex-module-decorators'\nimport { HierarchySetupDTO, HierarchySetupService } from '../api'\nimport { cid, container } from 'inversify-props'\nimport { IDateService } from '@master/services/IDateService'\n\nconst dateService = container.get(cid.IDateService)\n\n@Module({\n namespaced: true\n})\nexport default class HierarchySetupStore extends VuexModule {\n hierarchySetupRows: HierarchySetupDTO[] = null\n\n hierarchyInView: HierarchySetupDTO = null\n\n @Action\n async importHierarchySetup (data: HierarchySetupDTO[]) {\n const res = await HierarchySetupService.importHierarchySetup(data)\n return res\n }\n\n @Action\n async fetchHierarchySetup () {\n const res = await HierarchySetupService.getHierarchyList()\n this.context.commit('setHierarchySetup', res)\n }\n\n @Mutation\n setHierarchySetup (res: HierarchySetupDTO[]) {\n this.hierarchySetupRows = res.map(record => {\n const startDateMillis = dateService.format(record.startDate, 'DD-MM-YYYY')\n const endDateMillis = dateService.format(record.endDate, 'DD-MM-YYYY')\n return {\n ...record,\n startDateMillis,\n endDateMillis,\n emit: true // required to display dialog on row click\n }\n })\n }\n\n @Action\n selectHierarchyToView (row: HierarchySetupDTO) {\n this.context.commit('setHierarchyInView', row)\n }\n\n @Mutation\n setHierarchyInView (row: HierarchySetupDTO) {\n this.hierarchyInView = row\n }\n}\n","import { Action, Module, VuexModule } from 'vuex-module-decorators'\nimport DefaultNeeds from '@master/config/default-needs.json'\nimport API from '@core/services/API'\nimport { inject } from 'inversify-props'\n\n@Module({\n namespaced: true\n})\nexport default class ProductStore extends VuexModule {\n @inject()\n protected $api: API\n\n @Action\n async getProductListNeeds () {\n const { value } = await this.$api.kvm.get({\n key: 'globalproducts_needs_abc'\n })\n const needsList = value ? JSON.parse(value) : DefaultNeeds\n return [...(new Set(needsList))]\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { IndividualMyinfoDTO } from '../models/IndividualMyinfoDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class UserMyinfoService {\n\n /**\n * @param ownerOid\n * @returns IndividualMyinfoDTO Retrieve the owner myinfo details if exists\n * @throws ApiError\n */\n public static async retrieveIndividualMyinfo(\n ownerOid: string,\n ): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/owner/myinfo/${ownerOid}`,\n });\n return result.body;\n }\n\n}","import { IndividualMyinfoDTO } from '../api'\n\nexport class IndividualMyinfo implements IndividualMyinfoDTO {\n ownerOid: any;\n nric: any;\n name: any;\n lockedFields: string[];\n timeFetched: number;\n timeLinked: number;\n transactionToken: string;\n}\n","import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'\nimport '@/DIContainer'\nimport { container } from 'inversify-props'\nimport API from '@core/services/API'\nimport { IndividualMyinfoDTO, UserMyinfoService } from './api'\nimport { IndividualMyinfo } from './model/IndividualMyinfo'\n\nconst $api = container.get('$api')\n\n@Module({\n namespaced: true\n})\nexport default class MyinfoStore extends VuexModule {\n loading = false\n myinfoDetails: IndividualMyinfoDTO = new IndividualMyinfo()\n\n @Mutation\n setMyinfoDto (myinfoDetails: IndividualMyinfoDTO) {\n this.myinfoDetails = myinfoDetails\n }\n\n @Action\n async retrieveMyinfoDetails (clientOid: string) {\n try {\n this.context.commit('setLoading', true)\n const myinfoDto = await UserMyinfoService.retrieveIndividualMyinfo(clientOid)\n this.context.commit('setMyinfoDto', myinfoDto)\n } catch (error) {\n alert(error.message)\n } finally {\n this.context.commit('setLoading', false)\n }\n }\n\n @Mutation\n setLoading (loading: boolean) {\n this.loading = loading\n }\n}\n","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport KYCFormStore from '@/views/kyc-form/KYCFormStore'\nimport KYCPdfStore from '@/views/kyc-pdf/KYCPdfStore'\nimport KYCSectionStore from './KYCSectionStore'\nimport KYCPdfSectionStore from './KYCPdfSectionStore'\nimport KYCSubmissionStore from './modules/KYCSubmissionStore'\nimport BscStore from '@core/pages/bsc/store/BscStore'\nimport ClientInfoStore from '@core/pages/client-management/master-view/ClientInfoStore'\nimport ComplianceStore from '@core/pages/compliance/store/ComplianceStore'\nimport ClientPolicyStore from '@core/pages/new-business-register/store/ClientPolicyStore'\nimport ScheduleStore from '@core/pages/scheduler/store/ScheduleStore'\nimport UserStore from '@core/pages/userProfile/store/UserStore'\nimport ClientStore from '@core/store/ClientStore'\nimport HierarchySetupStore from '@core/pages/hierarchy-setup/store/HierarchySetupStore'\nimport ProductStore from '@core/store/ProductStore'\nimport MyinfoStore from '@core/pages/individual-myinfo/MyinfoStore'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n state: {\n user: {}\n },\n getters: {\n currentUser (state) {\n return state.user\n }\n },\n mutations: {\n setCurrentUser (state, user) {\n if (user == null) {\n state.user = {}\n } else {\n Object.assign(state.user, user)\n }\n }\n },\n actions: {\n login (context, user) {\n context.commit('setCurrentUser', user)\n },\n logout (context) {\n context.commit('setCurrentUser', null)\n }\n },\n modules: {\n KYCFormStore,\n KYCPdfStore,\n KYCSectionStore,\n KYCPdfSectionStore,\n KYCSubmissionStore,\n UserStore,\n ClientPolicyStore,\n ClientInfoStore,\n ClientStore,\n BscStore,\n ComplianceStore,\n ScheduleStore,\n HierarchySetupStore,\n ProductStore,\n MyinfoStore\n }\n})\n","import API from '@core/services/API'\nimport { cid, container } from 'inversify-props'\nimport { Store } from 'vuex'\nimport { SharedVariable } from './../model/SharedVariable'\nimport { UIService } from '@core/services/UIService'\n\nexport const permissionChecking = (user, to) => {\n // For now, just a strict hardcoded check, but when permission is created\n // using casl ability, we will use that to check instead, for now,\n // Check if user has rights to the route\n const restrictedPages = ['Client Policies List', 'Admin', 'Payee List', 'client-list', 'Admin Product List']\n if (user.systemrole !== 'ops-staff' && restrictedPages.includes(to.name)) {\n throw new Error('Unauthorized access to page')\n }\n}\n\nexport function routerRedirect (store: Store, publicPage: string[]) {\n const $api = container.get('$api')\n const sharedVariable = container.get(cid.SharedVariable)\n const uiService = sharedVariable.uiService ? sharedVariable.uiService : new UIService()\n\n return async (to, from, next) => {\n // if is public page, no need to login, continue\n if (publicPage.includes(to.name)) {\n return next()\n }\n\n // If the user is logged in, continue\n if (store.getters.currentUser.isLogin) {\n // Checking for permission\n try {\n await permissionChecking(store.getters.currentUser, to)\n } catch (error) {\n await uiService.alert.show({\n type: 'error',\n message: error\n })\n return next({ path: '/', replace: true })\n }\n\n return next()\n }\n\n // If the user is not logged in, redirect to login page and\n // let the login page handle the redirection accordingly\n const { params, hash, query } = to\n /* eslint-disable @typescript-eslint/camelcase */\n query.redirect_uri = to.path // this should be in sync with LoginMixin's redirectHome\n /* eslint-enable */\n\n $api.account.loginGet()\n .then(response => {\n if (response && response.isLogin) {\n const login = response\n const infoPromise = $api.account.loginInfoGet({\n accountID: login.accountID\n })\n .then(response => { return response })\n .catch(async error => {\n console.error('login.js: Exception', error)\n await uiService.alert.show({\n type: 'error',\n message: error\n })\n })\n\n const metaPromise = $api.account.loginMetaGet({\n _oid: login.accountID\n })\n .then(response => { return response.meta })\n .catch(async error => {\n console.error('login.js: Exception', error)\n await uiService.alert.show({\n type: 'error',\n message: error\n })\n })\n\n Promise.all([infoPromise, metaPromise]).then((values: {}[]) => {\n const [info, meta] = values\n store.dispatch('login', { ...login, ...info, ...meta }).then(async () => {\n try {\n await permissionChecking(store.getters.currentUser, to)\n } catch (error) {\n await uiService.alert.show({\n type: 'error',\n message: error\n })\n return next({ path: '/', replace: true })\n }\n return next()\n })\n })\n } else {\n return next({ path: '/', params, hash, query, replace: true })\n }\n })\n .catch(async error => {\n console.error('login.js: Exception', error)\n await uiService.alert.show({\n type: 'error',\n message: error\n })\n return next({ path: '/', params, hash, query, replace: true })\n })\n }\n}\n","import { Vue } from 'vue-property-decorator'\nimport AppClientForm from '@core/components/AppClientForm.vue'\nimport { Component } from 'vue'\n\nexport function clientFormWrapper (title: string, component: Component, key: string) {\n return Vue.component('clientFormWrapper', {\n render (h) {\n return h(AppClientForm, {\n props: {\n title\n },\n scopedSlots: {\n default: ({ client, clientIndex, kycForm }) => {\n return h(\n component, {\n props: {\n model: client[key],\n clientIndex,\n kycForm\n }\n }\n )\n }\n }\n })\n }\n })\n}\n\nexport async function clientFormLoader (title: string, key: string, componentPromise: Promise) {\n const component = await componentPromise\n return Promise.resolve(\n clientFormWrapper(title, component.default, key)\n )\n}\n","interface IRouteBasic {\n name: string;\n path: string;\n pathToRegexpOptions?: { strict: boolean };\n component: () => void;\n}\n\nexport interface IChildrenRouteStructure extends IRouteBasic{\n shouldDisabled?: boolean | ((T) => boolean);\n}\n\nexport interface IRouteStructure extends IRouteBasic {\n redirect?: {name: string; path?: string};\n children?: IChildrenRouteStructure [];\n}\nexport function bscReviewerRestriction (systemRole: string) {\n return systemRole === 'bsc-reviewer'\n}\n\nexport const RouteStructure: IRouteStructure = {\n name: 'User Profile Main',\n path: '/user/:userOid/',\n component: () => import('@core/pages/userProfile/sections/v2/UserProfileV2.vue'),\n redirect: { name: 'User Profile' },\n children: [\n {\n name: 'User Profile',\n path: 'profile-summary/',\n pathToRegexpOptions: { strict: true },\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@/views/userProfile/sections/UserProfileSummary.vue')\n },\n {\n path: 'adviser-details/',\n name: 'User Adviser Details',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@core/pages/userProfile/sections/v2/UserAdviserDetailsV2.vue')\n },\n {\n path: 'bsc-records/',\n name: 'User BSC Records',\n component: () => import('@core/pages/userProfile/sections/v2/UserBscRecordsV2.vue')\n },\n {\n path: 'cpd-records/',\n name: 'User CPD Records',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@core/pages/userProfile/sections/v2/UserCpdRecordsV2.vue')\n },\n {\n path: 'commission-statements',\n name: 'User Commission Statements',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/UserCommissionStatements.vue')\n }\n ]\n}\n","import { cid, container } from 'inversify-props'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nimport { chain } from 'lodash'\nimport { RouteConfig } from 'vue-router'\nimport { bscReviewerRestriction, RouteStructure } from './structure'\nexport function userProfileRoutes (): RouteConfig {\n const route: RouteConfig = RouteStructure as RouteConfig\n return route\n}\n\nexport function getChildSections (systemRole: string, router) {\n const useNewCommissionModule = container.get(cid.IProjectSettings).useNewCommissionModule\n const childrenRoute = chain(router.options.routes.find(route => route.name === 'User Profile Main')?.children).value()\n\n if (useNewCommissionModule) {\n const indexOfCommissionStatements = childrenRoute.findIndex(e => e.name === 'User Commission Statements')\n childrenRoute[indexOfCommissionStatements] = {\n path: 'commission-statements',\n name: 'User Commission Statements',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/UserCommissionStatements.vue')\n }\n\n const indexOfCommissionStructure = childrenRoute.findIndex(e => e.name === 'User Commission Structure')\n childrenRoute[indexOfCommissionStructure] = {\n path: 'commission-structure',\n name: 'User Commission Structure',\n shouldDisabled: bscReviewerRestriction,\n component: () => import('@core/pages/CommissionModule/UserCommissionStructure.vue')\n }\n }\n\n childrenRoute.map(child => {\n // if there is disabledUI function then implement it here, because we cannot pass system role when we init the route\n if (child.shouldDisabled && typeof child.shouldDisabled === 'function') {\n const functionName = child.shouldDisabled as Function\n child.shouldDisabled = functionName(systemRole)\n }\n return child\n })\n\n return childrenRoute\n}\n","import { RouteConfig } from 'vue-router'\n\nexport const CpdRoutes: RouteConfig[] = [\n {\n path: '/cpd/summary',\n name: 'cpd-summary',\n component: () => import('@core/pages/cpd/summary/CpdSummary.vue')\n },\n {\n path: '/cpd/course/:courseId',\n name: 'cpd-course',\n component: () => import('@core/pages/cpd/course/CpdCourse.vue')\n }\n]\n","import { RouteConfig } from 'vue-router'\nimport { cid, container } from 'inversify-props'\nimport { IProjectSettings } from '@master/config/IProjectSettings'\nexport const commissionModuleRouter = ((): RouteConfig[] => {\n const useNewCommissionModule = container.get(cid.IProjectSettings).useNewCommissionModule\n\n if (useNewCommissionModule) {\n return [\n {\n path: '/commission-module/',\n component: () => import('@core/pages/CommissionModule/NewCommissionModule.vue'),\n redirect: '/commission-module/transactions',\n children: [\n {\n path: 'transactions',\n name: 'Transactions',\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/Transactions.vue')\n },\n {\n path: 'vestings',\n name: 'Vestings',\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/Vestings.vue')\n },\n {\n path: 'introducers',\n name: 'Introducers',\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/Introducers.vue')\n },\n {\n path: 'servicing-agents',\n name: 'Servicing Agents',\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/ServicingAgents.vue')\n },\n {\n path: 'reports',\n name: 'Reports',\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/Reports.vue')\n },\n {\n path: 'commission-statements',\n name: 'Commission Statements',\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/CommissionStatements.vue')\n },\n {\n path: 'other-income-deduction',\n name: 'Other Income and Deduction',\n component: () => import('@core/pages/CommissionModule/new-commission-module-components/OtherIncomeAndDeduction.vue')\n }\n ]\n },\n {\n path: '/commission-structure',\n name: 'Commission Structure',\n component: () => import('@core/pages/sales-team-administration/Landing.vue')\n },\n {\n path: '/commission-details',\n name: 'Commission Details',\n component: () => import('@core/pages/CommissionModule/CommissionDetails.vue')\n }\n ]\n } else {\n return [\n {\n path: '/commission-module/',\n component: () => import('@core/pages/CommissionModule/CommissionModule.vue')\n },\n {\n path: '/commission-structure',\n name: 'Commission Structure',\n component: () => import('@core/pages/sales-team-administration/Landing.vue')\n },\n {\n path: '/commission-details',\n name: 'Commission Details',\n component: () => import('@core/pages/CommissionModule/CommissionDetails.vue')\n }\n ]\n }\n})()\n","import { RouteConfig } from 'vue-router'\n\nexport const scheduleRoutes = ((): RouteConfig[] => {\n return [\n {\n path: '/scheduler',\n name: 'Schedule Tasks',\n component: () => import('@core/pages/scheduler/page/SchedulerPage.vue')\n }\n ]\n})()\n","import { RouteConfig } from 'vue-router'\n\nexport const hierarchyRoutes: Array = [\n {\n path: '/hierarchy-setup',\n name: 'Compensation Setup',\n component: () => import('@/modules/hierarchySetup/views/HierarchySetupPage.vue')\n }\n]\n","import KYCClient from '@company-common/model/kyc-form/KYCClient'\nimport Vue from 'vue'\nimport VueRouter, { RouteConfig } from 'vue-router'\nimport store from '../store/index'\nimport { routerRedirect } from '@core/logic/RouterRedirect'\nimport { clientFormLoader } from '@core/components/ClientFormWrapper'\nimport { userProfileRoutes } from './userProfile/index'\nimport { ClientManagementRoutes } from '@core/pages/clientManagement-v2/router'\nimport { CpdRoutes } from '@core/pages/cpd/CpdRoutes'\nimport { commissionModuleRouter } from '@core/pages/CommissionModule/route'\nimport { newBusinessRegisterRouter } from './new-business-register/NewBusinessRegisterRoutes'\nimport { FormsList } from '@core/model/recruit/FormsList'\nimport { scheduleRoutes } from './schedule/ScheduleRoute'\nimport { hierarchyRoutes } from '@/modules/hierarchySetup/router/index'\n\nVue.use(VueRouter)\n\n// Wrapper for type check\nfunction kycClientFormLoader (title: string, key: keyof KYCClient, componentPromise: Promise) {\n return clientFormLoader(title, key, componentPromise)\n}\n\nconst routes: Array = [\n {\n path: '/',\n redirect: 'login'\n },\n {\n path: '/error',\n name: 'Error',\n component: () => import('@core/pages/error/ErrorPage.vue'),\n meta: {\n title: 'Error Page'\n }\n },\n {\n path: '/login/',\n name: 'Login',\n component: () => import('@core/pages/Login.vue'),\n meta: {\n title: 'Login'\n }\n },\n {\n path: '/reset/:authToken',\n name: 'Reset',\n component: () => import('@core/pages/Reset.vue'),\n meta: {\n title: 'Reset Password'\n }\n },\n {\n path: '/home',\n name: 'Home',\n component: () => import('@core/pages/Home.vue'),\n meta: {\n title: 'Home'\n }\n },\n {\n path: '/kyc-pdf/:kycPdfOid/',\n name: 'KYCPdf',\n component: () => import('../views/kyc-pdf/KycPdf.vue'),\n meta: {\n title: 'KYC Pdf'\n }\n },\n {\n path: '/kyc-form/:formOid/',\n name: 'KYCForm',\n redirect: 'kyc-form/:formOid/client-summary',\n component: () => import('../views/kyc-form/KYCForm.vue'),\n meta: {\n title: 'KYC Form'\n },\n children: [\n {\n path: 'client-summary',\n name: 'Client Summary',\n component: () => import('../views/kyc-form/section/ClientSummaryView.vue')\n },\n {\n path: 'important-notices',\n name: 'Important Notices',\n component: () => import('../views/kyc-form/section/ImportantNoticesView.vue')\n },\n // about you\n { path: 'about-you', redirect: 'about-you/personal-details' },\n {\n path: 'about-you/personal-details',\n name: 'Personal Details',\n component: () => kycClientFormLoader('Personal Details', 'personalDetails', import('../views/kyc-form/section/about-you/ThePersonalDetails.vue'))\n },\n {\n path: 'about-you/dependants',\n name: 'Dependants',\n component: () => import('../views/kyc-form/section/about-you/DependantsView.vue')\n },\n {\n path: 'about-you/trusted-individual',\n name: 'Trusted Individual',\n component: () => import('../views/kyc-form/section/about-you/ClientAccompanimentView.vue')\n },\n // investment risk profile\n { path: 'investment-risk-profile', redirect: 'investment-risk-profile/customer-knowledge-assessment' },\n {\n path: 'investment-risk-profile/customer-knowledge-assessment',\n name: 'Customer Knowledge Assessment',\n component: () => import('../views/kyc-form/section/investment-risk-profile/CustomerKnowledgeAssessmentView.vue')\n },\n {\n path: 'investment-risk-profile/risk-profile-assessment',\n name: 'Risk Profile Assessment',\n component: () => import('../views/kyc-form/section/investment-risk-profile/RiskProfileAssessmentView.vue')\n },\n // your finances\n { path: 'your-finances', redirect: 'your-finances/net-worth' },\n {\n path: 'your-finances/net-worth',\n name: 'Net Worth',\n component: () => import('../views/kyc-form/section/your-finances/NetWorthView.vue')\n },\n {\n path: 'your-finances/cash-flow',\n name: 'Cash Flow',\n component: () => import('../views/kyc-form/section/your-finances/CashFlowView.vue')\n },\n {\n path: 'your-finances/budget',\n name: 'Budget',\n component: () => import('../views/kyc-form/section/your-finances/BudgetView.vue')\n },\n { path: 'current-portfolio', redirect: 'current-portfolio/insurance' },\n {\n path: 'current-portfolio/insurance',\n name: 'Insurance Portfolio',\n component: () => import('../views/kyc-form/section/current-plans/insurance-portfolio/YourCurrentPlansPage.vue')\n },\n {\n path: 'current-portfolio/investment',\n name: 'Investment Portfolio',\n component: () => import('../views/kyc-form/section/current-plans/investment-portfolio/YourCurrentInvestPage.vue')\n },\n // Your Priorities & Needs Analysis\n { path: 'needs-analysis', redirect: 'needs-analysis/adjustments-and-assumptions' },\n {\n path: 'needs-analysis/identifying-your-priorities',\n name: 'Identifying Your Priorities',\n component: () => import('../views/kyc-form/section/needs-analysis/IdentifyingYourPrioritiesView.vue')\n },\n {\n path: 'needs-analysis/needs-analysis-calculation',\n name: 'Needs Analysis Calculation',\n component: () => import('../views/kyc-form/section/needs-analysis/NeedsAnalysisCalculation.vue')\n },\n {\n path: 'needs-analysis/adjustments-and-assumptions',\n name: 'Adjustments & Assumptions',\n component: () => import('../views/kyc-form/section/needs-analysis/AdjustmentsAndAssumptions.vue')\n },\n // Our Recommendations\n { path: 'our-recommendation', redirect: 'our-recommendation/product-recommendations' },\n {\n path: 'our-recommendation/product-recommendations',\n name: 'Product Recommendations',\n component: () => import('../views/kyc-form/section/recommendations/TheProductRecommendations.vue')\n },\n {\n path: 'our-recommendation/ilp-sub-funds',\n name: 'For Investments - ILP/Sub funds',\n component: () => import('../views/kyc-form/section/recommendations/TheILPSubfunds.vue')\n },\n {\n path: 'our-recommendation/basis-of-recommendation',\n name: 'Basis of Recommendation',\n component: () => import('../views/kyc-form/section/recommendations/TheBasisOfRecommendation.vue')\n },\n {\n path: 'our-recommendation/client-decision',\n name: 'Client\\'s Decision',\n component: () => import('../views/kyc-form/section/recommendations/TheClientDecision.vue')\n },\n {\n path: 'replacement-or-switching',\n name: 'Replacement / Switching',\n component: () => import('../views/kyc-form/section/ReplacementOrSwitching.vue')\n },\n {\n path: 'disclaimers-and-client-checklist',\n name: 'Disclaimers & Client\\'s Checklist',\n component: () => import('../views/kyc-form/section/DisclaimersAndClientChecklist.vue')\n },\n {\n path: 'client-declaration',\n name: 'Client\\'s Declaration',\n component: () => import('../views/kyc-form/section/ClientDeclaration.vue')\n },\n {\n path: 'financial-consultant-declaration',\n name: 'Financial Adviser\\'s Declaration',\n component: () => import('../views/kyc-form/section/FinancialConsultantDeclaration.vue')\n },\n {\n path: 'kyc-confirmation',\n name: 'KYC Confirmation',\n component: () => import('../views/kyc-form/section/kyc-confirmation/KYCConfirmation.vue')\n },\n {\n path: 'bop',\n name: 'Beneficial Owner Particulars Form',\n component: () => import('../views/kyc-form/section/BeneficialOwnerForm.vue')\n },\n {\n path: 'pep',\n name: 'Politically Exposed Person Form',\n component: () => import('../views/kyc-form/section/PEP.vue')\n },\n {\n path: 'aml',\n name: 'Client\\'s AML Check',\n component: () => import('../views/kyc-form/section/AML.vue')\n },\n {\n path: 'appendix',\n name: 'Appendix - Upload PDFs',\n component: () => import('../views/kyc-form/section/UploadDocument.vue')\n }\n ]\n },\n {\n path: '/client-list/',\n name: 'client-list',\n component: () => import('@core/pages/ClientList.vue'),\n meta: {\n title: 'Client List'\n }\n },\n {\n path: '/client-management',\n name: 'client-management',\n component: () => import('@core/pages/client-management/views/v2/ClientProductListPage.vue')\n },\n {\n path: '/client-info/:clientOid/',\n name: 'client-info',\n redirect: '/client-info/:clientOid/profile',\n component: () => import('@core/pages/clientManagement-v2/views/ClientInfo.vue'),\n children: ClientManagementRoutes\n },\n {\n path: '/home-adviser/',\n name: 'home-adviser',\n component: () => import('../views/HomeAdviser.vue'),\n meta: {\n title: 'Home Adviser'\n }\n },\n {\n path: '/home-submission/',\n name: 'home-submission',\n component: () => import('@core/pages/HomeSubmission.vue'),\n meta: {\n title: 'Home Submission'\n }\n },\n {\n path: '/home-supervisor/',\n name: 'home-supervisor',\n component: () => import('@core/pages/HomeSupervisor.vue'),\n meta: {\n title: 'Home Supervisor'\n }\n },\n {\n path: '/bsc-home/',\n name: 'bsc-home',\n component: () => import('@core/pages/bsc/BscHome.vue')\n },\n {\n path: '/bsc-list-new/:reviewOid',\n name: 'bsc-list-new',\n component: () => import('@core/pages/bsc/BscListNew.vue')\n },\n {\n path: '/user-bsc-record/:userOid/:bscOid',\n name: 'User Bsc Record',\n component: () => import('@core/pages/bsc/UserBscRecord.vue')\n },\n {\n path: '/bsc-policy-review',\n name: 'bsc-policy-review',\n component: () => import('@core/pages/bsc/BscPolicyReview.vue')\n },\n {\n path: '/company-codes-list',\n name: 'company-codes-list',\n component: () => import('@core/pages/companyDetails/CompanyCodesList.vue')\n },\n {\n path: '/user-list',\n name: 'user-list',\n component: () => import('@core/pages/account/UserListV2.vue')\n },\n {\n path: '/group-list',\n name: 'group-list',\n component: () => import('@core/pages/account/GroupList.vue')\n },\n {\n path: '/group-profile/:groupOid',\n name: 'group-profile',\n component: () => import('@core/pages/account/GroupProfile.vue')\n },\n {\n path: '/retrieve_myinfo',\n name: 'retrieve-my-info',\n component: () => import('../views/myinfo/TheMyInfoView.vue')\n },\n {\n path: '/commission-home',\n name: 'commission-home',\n component: () => import('@core/pages/CommissionModule/CommissionModule.vue')\n },\n {\n path: '/commission-details/:_oid?',\n name: 'commission-details',\n component: () => import('@core/pages/CommissionModule/CommissionDetails.vue')\n },\n {\n path: '/change-log',\n name: 'change-log',\n component: () => import('@core/pages/change-log/Changelog.vue'),\n meta: {\n title: 'Change Log'\n }\n },\n {\n path: '/admin-pdfUpload',\n name: 'admin-pdfUpload',\n component: () => import('@core/pages/admin-pdfUpload/AdminPdfUpload.vue')\n },\n {\n path: '/admin-products',\n name: 'Admin Product List',\n component: () => import('@core/pages/adminProductList/AdminProductList.vue'),\n meta: {\n title: 'Admin Products'\n }\n },\n {\n path: '/agent-codes-mass-update',\n name: 'agent-codes-mass-update',\n component: () => import('@core/pages/account/AgentCodesMassUpdate.vue'),\n meta: {\n title: 'Agent Code Mass Update'\n }\n },\n {\n path: '/admin-assumptions',\n name: 'Global Assumptions',\n component: () => import('@core/pages/assumptions/AssumptionsAdmin.vue'),\n meta: {\n title: 'Global Assumptions'\n }\n },\n {\n path: '/payee-list',\n name: 'Payee List',\n component: () => import('@core/pages/intermediary/Payee.vue'),\n meta: {\n title: 'Intermediary List'\n }\n },\n {\n path: '/admin',\n name: 'Admin',\n component: () => import('@core/pages/Admin.vue'),\n meta: {\n title: 'Admin'\n }\n },\n {\n path: '/resources',\n name: 'Resource Management System',\n component: () => import('@core/pages/resources/Resources.vue'),\n meta: {\n title: 'Resources Management System'\n }\n },\n {\n path: '/report-management',\n name: 'Report Dashboard',\n component: () => import('@core/pages/report-management/ReportManagement.vue'),\n meta: {\n title: 'Report Management Dashboard'\n }\n },\n ...newBusinessRegisterRouter,\n ...scheduleRoutes,\n {\n path: '/home-recruiter/',\n name: 'home-recruiter',\n component: () => import('@core/pages/HomeRecruiter.vue'),\n meta: {\n title: 'Home Supervisor'\n }\n },\n {\n path: '/recruit/:recruitAccountOid',\n name: 'recruit',\n component: () => import('@core/pages/activity/Board.vue'),\n meta: {\n title: 'Recruit Activity'\n }\n },\n {\n path: '/recruit/:recruitAccountOid/forms',\n name: 'recruit-forms',\n redirect: `/recruit/:recruitAccountOid/forms/${FormsList[0]?.path}`,\n component: () => import('@core/pages/recruit/RecruitForms.vue'),\n children: FormsList\n },\n {\n path: '/sales-team-administration/',\n name: 'Sales Team Administration',\n component: () => import('@core/pages/sales-team-administration/Landing.vue')\n },\n ...hierarchyRoutes,\n ...commissionModuleRouter,\n ...CpdRoutes,\n userProfileRoutes(),\n {\n path: '/disign-panel',\n name: 'Disign Panel',\n component: () => import('@core/pages/disign/DisignHome.vue')\n },\n {\n path: '*',\n component: () => import('@core/pages/error/NotFoundPage.vue')\n }\n]\n\nconst router = new VueRouter({\n mode: 'history',\n routes,\n base: '/live'\n})\n\nconst publicPage = ['Login', 'Reset', 'AdminLogin', 'retrieve-my-info', 'Error']\n\n// Before\nrouter.beforeEach(routerRedirect(store, publicPage))\n\nexport default router\n","import { PluginFunction, PluginObject } from 'vue'\nimport { VuejsDatatableFactory } from 'vuejs-datatable'\nimport ElementUI from 'element-ui'\nimport locale from 'element-ui/lib/locale/lang/en'\nimport VueCurrencyInput from 'vue-currency-input'\nimport VueSvgInlinePlugin from 'vue-svg-inline-plugin'\nimport PortalVue from 'portal-vue'\nimport VuePapaParse from 'vue-papa-parse'\nimport { RecycleScroller } from 'vue-virtual-scroller'\nimport { cid, container } from 'inversify-props'\nimport { IProjectInfo } from '@master/config/IProjectInfo'\n\n// to overwrite the default setting of SGD$, if project info didnt have preset currency prefix, fallback to default one\nconst projectInfo = container.get(cid.ProjectInfo)\nconst currencyPrefix = projectInfo.currency ?? 'SGD$'\n\nconst CorePlugins: Array<{ plugin: PluginObject | PluginFunction; options?: {} | any[] }> = [\n {\n plugin: VuejsDatatableFactory\n },\n {\n plugin: ElementUI,\n options: { locale }\n },\n {\n plugin: VueCurrencyInput,\n options: {\n globalOptions: {\n currency: { prefix: currencyPrefix, suffix: null },\n precision: 0\n }\n }\n },\n {\n plugin: VueSvgInlinePlugin,\n options: {\n attributes: {\n data: ['src'],\n remove: ['alt']\n }\n }\n },\n {\n plugin: PortalVue\n },\n {\n plugin: VuePapaParse\n },\n {\n plugin: RecycleScroller\n }\n]\n\nexport default CorePlugins\n","// This is unique id for each of the instantiated reusable component\n// Created to resolve the overlapping AppCheckboxGroup's input-id and label-for for different instance\nexport default class UUID {\n private runningId = 0\n\n get newId () {\n // console.log('getting newId -' + this.runningId)\n this.runningId++\n return this.runningId - 1\n }\n}\n","import './DIContainer'\nimport Vue from 'vue'\nimport './design/element-variables.scss'\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\nimport '@fortawesome/fontawesome-free/css/all.css'\nimport '@fortawesome/fontawesome-free/js/all.js'\nimport CorePlugins from '@core/CorePlugins'\nimport { container } from 'inversify-props'\nimport { SharedVariable } from '@core/model/SharedVariable'\nimport UUID from './util/UUID'\nimport axios from 'axios'\nconst $uuid = new UUID()\n\nVue.prototype.$uuid = $uuid\nVue.prototype.$baseURL = __BASE_URL__\n\nCorePlugins.forEach(({ plugin, options }) => {\n if (options) {\n Vue.use(plugin, options)\n } else {\n Vue.use(plugin)\n }\n})\n\nVue.config.productionTip = false\n\nconst vue = new Vue({\n router,\n store,\n render: h => h(App)\n}).$mount('#app')\n\naxios.interceptors.response.use((response) => {\n // if missing user login, redirect to login page\n // Note: for user unauthenticated, backend should return status code 401 instate of 200\n // without frontend to check the error message, due to error message sometimes can be misspell\n if (response?.data?.error === 'Missing User Login') {\n if (vue.$route.name !== 'Login') {\n vue.$router.push({ name: 'Login', query: { redirect: vue.$route.fullPath } })\n }\n }\n return Promise.resolve(response)\n})\n\nconst shareVariable = container.get('SharedVariable')\nshareVariable.vue = vue\n","module.exports = __webpack_public_path__ + \"img/logo.2fb40f02.png\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDynamicHeader.vue?vue&type=style&index=0&id=fa7208d8&lang=scss&scoped=true&\"","import { Ignore } from '@master/annotation/Ignore'\nimport { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\n\nexport default class EducationMeta extends Meta {\n @RawKey('education_oid')\n @Ignore()\n oid = ''\n\n nameOfInstitution = ''\n location = ''\n dateFrom: number = undefined\n dateTo: number = undefined\n awarded = ''\n}\n","import { options } from './Options'\n\nconst lineOfBusinesses = {\n '': '',\n lifeinsurance: 'Life Insurance',\n collectiveinvestmentscheme: 'Collective Investment Scheme',\n 'group-eb': 'Group (EB) - Package',\n 'group-eb-tailored': 'Group (EB) - Tailored',\n 'gi-ae': 'GI - A & H (Individual)',\n 'gi-motors': 'GI - Motors (Personal)',\n 'gi-motors-commercial': 'GI - Motors (Commercial)',\n 'gi-travel': 'GI - Travel (Individual)',\n 'gi-travel-corporate': 'GI - Travel (Corporate)',\n 'gi-homecontents': 'GI - Home Insurance',\n 'gi-clines': 'GI - Commercial Lines',\n 'gi-plines': 'GI - Personal Accident (Individual)',\n 'gi-plines-corporate': 'GI - Personal Accident (Corporate)',\n 'gi-health-individual': 'GI - Health (Individual)',\n 'gi-health-group': 'GI - Health (Group)',\n 'gi-others': 'GI - Others',\n feebasedservice: 'Fee Based Service',\n others: 'Others'\n}\nexport type LOBType = keyof typeof lineOfBusinesses | 'employeebenefits' | 'group-gi' | 'group-eb' | 'group-eb-tailored'\nexport const LineOfBusinessOptions: options[] = Object.keys(lineOfBusinesses).map(key => {\n return {\n label: lineOfBusinesses[key],\n value: key\n }\n})\n\nexport const productTypes = [\n 'Life',\n 'CIS',\n 'Referrals',\n 'GI',\n 'EB',\n 'Trailer Fee',\n 'Financial Planning',\n 'Para Planning',\n 'Business Financing',\n 'Loan',\n 'Other Services'\n]\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { AccountDeleteRequest } from '../models/AccountDeleteRequest';\nimport type { AccountDetailsDTO } from '../models/AccountDetailsDTO';\nimport type { AccountDto } from '../models/AccountDto';\nimport type { AccountExportDto } from '../models/AccountExportDto';\nimport type { AccountFinancialSchemeDto } from '../models/AccountFinancialSchemeDto';\nimport type { AccountFinancialSchemeRequest } from '../models/AccountFinancialSchemeRequest';\nimport type { AccountImportDto } from '../models/AccountImportDto';\nimport type { AccountImportResponse } from '../models/AccountImportResponse';\nimport type { PicodedAccountDTO } from '../models/PicodedAccountDTO';\nimport type { UserNameRequestDto } from '../models/UserNameRequestDto';\nimport { request as __request } from '@openapi/request';\n\nexport class AccountService {\n\n /**\n * @returns any\n * @throws ApiError\n */\n public static async getSupervisorList(): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/account/supervisorlist`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async verifyToken(\n requestBody: AccountDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/account/verify-token`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async genToken(\n requestBody: AccountDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/account/request-reset-password`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async generateOtp(\n requestBody: AccountDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/account/generate-otp`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async resetPasswordWithToken(\n requestBody: AccountDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/account/reset-password`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param directorOid\n * @returns PicodedAccountDTO\n * @throws ApiError\n */\n public static async getDirectorSupervisorList(\n directorOid: string,\n ): Promise> {\n const result = await __request({\n method: 'GET',\n path: `/live/api/account/${directorOid}/director-supervisorlist`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async changeUserName(\n requestBody: UserNameRequestDto,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/account/username/alter`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns AccountImportResponse\n * @throws ApiError\n */\n public static async massImportUsersIntoSystem(\n requestBody: Array,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/account/import`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @returns AccountExportDto\n * @throws ApiError\n */\n public static async massExportUsersFromSystem(): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v2/account/export`,\n });\n return result.body;\n }\n\n /**\n * @param userOid\n * @returns AccountFinancialSchemeDto\n * @throws ApiError\n */\n public static async retrieveUserFinancialSchemeList(\n userOid: string,\n ): Promise> {\n const result = await __request({\n method: 'GET',\n path: `/live/api/account/scheme/financial/${userOid}`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns AccountFinancialSchemeDto\n * @throws ApiError\n */\n public static async createOrUpdateFinancialScheme(\n requestBody: AccountFinancialSchemeRequest,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/account/scheme/financial/add`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns AccountFinancialSchemeDto\n * @throws ApiError\n */\n public static async removeFinancialSchemeFromUser(\n requestBody: AccountDeleteRequest,\n ): Promise {\n const result = await __request({\n method: 'DELETE',\n path: `/live/api/account/scheme/financial`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async initializeAccountDetails(\n requestBody: AccountDetailsDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/account/detail/initialize`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { PicodedAccountDTO } from '../models/PicodedAccountDTO';\nimport type { UserMemberListRequestDTO } from '../models/UserMemberListRequestDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class UserMemberService {\n\n /**\n * @param requestBody\n * @returns PicodedAccountDTO\n * @throws ApiError\n */\n public static async listAllUserAccountBasedOnHierarchy(\n requestBody: UserMemberListRequestDTO,\n ): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/v3/user-member/list`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","import { FormBase } from '../FormBase'\n\nexport const DesignationOptions = [\n { label: 'Financial Services Manager', value: 'fsm' },\n { label: 'Executive Financial Consultant', value: 'efc' },\n { label: 'Senior Financial Consultant', value: 'sfc' },\n { label: 'Financial Consultant', value: 'fc' },\n { label: 'Senior Financial Services Director', value: 'sfsd' },\n { label: 'Financial Services Director', value: 'fsd' },\n { label: 'Associate Financial Services Director', value: 'afsd' }\n]\nexport const ProfesQualiOptions = [\n { label: 'MDRT', value: 'MDRT' },\n { label: 'COT', value: 'COT' },\n { label: 'TOT', value: 'TOT' }\n]\nexport class NameCardOrderField {\n printedName = ''\n chineseName = ''\n designation = '' // options\n\n // shared.rnfNumber\n // shared.branch\n // shared.corporateEmail\n\n // qualification\n academic = ''\n professional = [] // options\n\n acknowledgement = []\n // pdConsent: boolean\n // trueInfo: boolean\n // randomChecks: boolean\n}\nexport class NameCardOrder extends FormBase {\n type = 'name-card-order'\n data: NameCardOrderField = new NameCardOrderField()\n\n get error () {\n const errs = []\n return errs\n }\n}\n","import 'reflect-metadata'\n\nconst selectionMetadataKey = Symbol('Selection')\n\nexport type Options = {\n label: string;\n value: string | boolean;\n}\n/**\n * Add selection for radio / checkbox / dropdown field\n * @param options list of possible value of the field\n * @param lookUpWhenStamp convert value into readable ('label' in options), default to no\n */\nexport function Selection (options: Options[], lookUpWhenStamp = false) {\n return Reflect.metadata(selectionMetadataKey, { options, lookUpWhenStamp })\n}\n\n/**\n * Get all options value\n * @param target Target object\n * @param propertyKey property key of target object\n */\nexport function getOptions (target: any, propertyKey: string): Options[] {\n return Reflect.getMetadata(selectionMetadataKey, target, propertyKey)?.options\n}\n\n/**\n * Check if auto lookup (convert to readable label) is required\n * @param target Target object\n * @param propertyKey property key of target object\n */\nexport function getLookUpWhenStamp (target: any, propertyKey: string): boolean {\n return Reflect.getMetadata(selectionMetadataKey, target, propertyKey)?.lookUpWhenStamp\n}\n","import { FormBase } from '../FormBase'\n\nexport class DeclarationClauses extends FormBase {\n // shared.name\n // shared.nric\n // shared.repCode\n type = 'declaration-clauses'\n data = {\n agree: false\n }\n\n signatures = {\n applicant: '',\n applicantDate: undefined\n }\n\n get error () {\n return !this.data.agree ? [{ key: 'agree', msg: 'Please read and indicate terms agreement' }] : []\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { HierarchySetupDTO } from '../models/HierarchySetupDTO';\nimport { request as __request } from '@openapi/request';\n\nexport class HierarchySetupService {\n\n /**\n * @returns HierarchySetupDTO\n * @throws ApiError\n */\n public static async getHierarchyList(): Promise> {\n const result = await __request({\n method: 'GET',\n path: `/live/api/hierarchy_setup`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns any\n * @throws ApiError\n */\n public static async updateHierarchyRecord(\n requestBody: HierarchySetupDTO,\n ): Promise {\n const result = await __request({\n method: 'POST',\n path: `/live/api/hierarchy_setup`,\n body: requestBody,\n });\n return result.body;\n }\n\n /**\n * @returns any\n * @throws ApiError\n */\n public static async downloadHierarchyListCsv(): Promise {\n const result = await __request({\n method: 'GET',\n path: `/live/api/hierarchy_setup/download_hierarchy_csv`,\n });\n return result.body;\n }\n\n /**\n * @param requestBody\n * @returns HierarchySetupDTO\n * @throws ApiError\n */\n public static async importHierarchySetup(\n requestBody: Array,\n ): Promise> {\n const result = await __request({\n method: 'POST',\n path: `/live/api/hierarchy_setup/import_hierarchy_setup`,\n body: requestBody,\n });\n return result.body;\n }\n\n}","import { options } from './Options'\n\nconst NBRProductStatus = ['application', 'in-force', 'withdrawnsurrender', 'lapsed', 'freelook', 'nottaken', '', 'open', 'closed'] as const\n\nexport type IssuerProductStatus = typeof NBRProductStatus[number]\ninterface ProductStatus extends options{\n value: IssuerProductStatus;\n label: string;\n}\nexport const NBRProductStatusOptions: ProductStatus[] = [\n { value: 'application', label: 'Application' },\n { value: 'in-force', label: 'In-force' },\n { value: 'withdrawnsurrender', label: 'Withdrawn / Surrender' },\n { value: 'lapsed', label: 'Lapsed' },\n { value: 'freelook', label: 'Free look' },\n { value: 'nottaken', label: 'Not taken' }\n]\n\nexport const NBRProductCISStatusOptions: options[] = [\n { value: 'open', label: 'Open' },\n { value: 'closed', label: 'Closed' }\n]\n","module.exports = __webpack_public_path__ + \"img/mocha-logo.895c5992.svg\";","import { options } from '@master/model/options/Options'\n\nexport const PaymentModeList = [\n 'Cash & CPF Medisave',\n 'Cash',\n 'CPF Medisave',\n 'CPFOA',\n 'CPFSA',\n 'SRS',\n 'Paynow (UEN/NRIC/Mobile)',\n 'Telegraphic Transfer',\n 'Giro',\n 'Credit Card',\n 'Internet Transfer',\n 'Cheque',\n 'Others'\n] as const\nexport const PaymentModeOptions: options[] = PaymentModeList.map(paymentMode => {\n return {\n label: paymentMode,\n value: paymentMode\n }\n})\n","import { Ignore } from '@master/annotation/Ignore'\nimport { ProductMeta, ProductHeaders } from './ProductMeta'\n\nexport const ProductFullHeaders = [\n ...ProductHeaders,\n 'basic_comm_sp',\n 'basic_comm_rsp',\n 'basic_comm_tu',\n 'basic_comm_year1',\n 'basic_comm_year2',\n 'basic_comm_year3',\n 'basic_comm_year4',\n 'basic_comm_year5',\n 'basic_comm_year6',\n 'basic_comm_year7',\n 'basic_comm_year8',\n 'basic_comm_year9',\n 'basic_comm_year10',\n 'overriding_comm_sp',\n 'overriding_comm_rsp',\n 'overriding_comm_tu',\n 'overriding_comm_year1',\n 'overriding_comm_year2',\n 'overriding_comm_year3',\n 'overriding_comm_year4',\n 'overriding_comm_year5',\n 'overriding_comm_year6',\n 'overriding_comm_year7',\n 'overriding_comm_year8',\n 'overriding_comm_year9',\n 'overriding_comm_year10'\n]\n\nexport class ProductFullMeta extends ProductMeta {\n basicCommSp = undefined\n basicCommRsp = undefined\n basicCommTu = undefined\n basicCommYear1 = undefined\n basicCommYear2 = undefined\n basicCommYear3 = undefined\n basicCommYear4 = undefined\n basicCommYear5 = undefined\n basicCommYear6 = undefined\n basicCommYear7 = undefined\n basicCommYear8 = undefined\n basicCommYear9 = undefined\n basicCommYear10 = undefined\n\n overridingCommSp = undefined\n overridingCommRsp = undefined\n overridingCommTu = undefined\n overridingCommYear1 = undefined\n overridingCommYear2 = undefined\n overridingCommYear3 = undefined\n overridingCommYear4 = undefined\n overridingCommYear5 = undefined\n overridingCommYear6 = undefined\n overridingCommYear7 = undefined\n overridingCommYear8 = undefined\n overridingCommYear9 = undefined\n overridingCommYear10 = undefined\n\n snakeCaseKey (key: string) {\n const snake = super.snakeCaseKey(key)\n const uds = snake.match(/_\\d/g)\n let final = snake\n if (uds) {\n uds.forEach((ud) => {\n const d = ud.replaceAll('_', '')\n final = snake.replaceAll(ud, d)\n })\n }\n return final\n }\n\n @Ignore()\n get maxCommYear () {\n return 10\n }\n}\n","import { ProductModel } from '@core/pages/adminProductList/model/ProductModel'\nimport { MetaList } from '@master/model/common/MetaList'\nimport { header, CompanyDetailsMeta } from './CompanyDetailsMeta'\n\nexport class CompanyDetailsMetaList extends MetaList {\n list: CompanyDetailsMeta[]\n\n constructor (data: (string | number)[][]) {\n super(header, data, CompanyDetailsMeta)\n this.list = this.list.sort((a, b) => a.companyDetailsName.localeCompare(b.companyDetailsName)) // sort alphabetically by name\n }\n\n retrieveIssuerFromProducts (products: ProductModel[]) {\n const uniqueProductsCompanyOid = [...new Set(products.map(product => {\n return [product?.issuer_oid, product.issuer?.toLowerCase()]\n }).flat())]\n\n return this.list.filter(company => uniqueProductsCompanyOid.includes(company.oid) ||\n uniqueProductsCompanyOid.includes(company.companyDetailsName?.toLowerCase()) ||\n uniqueProductsCompanyOid.includes(company.companyShortName?.toLowerCase()))\n .sort((a, b) => a.companyShortName.localeCompare(b.companyShortName)) // sort alphabetically by name\n }\n}\n","import { FNAStructure } from '@master/model/structure/FNAStructure'\nimport PersonalAccidentNeeds from '@company-common/model/kyc-form/needs-analysis/health/CustomPersonalAccidentNeeds'\n\nexport function PersonalAccidentStructure (defaultValue: { amount: number }) {\n const structure: FNAStructure = {\n title: 'H1. Personal Accident',\n data: [\n {\n label: 'When do you need this fund',\n value: 'Upon occurrence'\n }, {\n label: 'Desired amount for personal accident benefit ($)',\n key: 'amount',\n type: 'currency',\n default: defaultValue?.amount,\n validationMsg: 'Personal Accident requires to indicate desired amount.'\n }, {\n label: '+ Immediate expenses and liabilities ($)',\n key: 'required1',\n type: 'currency',\n validationMsg: 'Personal Accident requires to indicate immediate expenses.'\n }, {\n label: '- Current resources/provisions ($)',\n key: 'available1',\n type: 'currency',\n validationMsg: 'Personal Accident requires to indicate current resources.'\n }, {\n label: 'Surplus / (Shortfall)',\n key: 'surplusShortfall',\n type: 'currency',\n disabled: true\n }\n ]\n }\n return structure\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { snakeCase } from 'lodash/fp'\nimport { Base } from './Base'\n\nexport class TypeBase extends Base {\n @Ignore()\n type = ''\n\n constructor (type: string) {\n super()\n this.type = type\n }\n\n snakeCaseKey (key: string) {\n return `${this.type}_${snakeCase(key)}`\n }\n}\n","import { Json } from '@master/annotation/Json'\nimport { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\n\nexport const header = [\n '_oid',\n 'names',\n 'fullname',\n 'adviser_branch',\n 'status',\n 'systemrole',\n 'company_code',\n 'mas_repno',\n 'email',\n 'mobile',\n 'adviser_products',\n 'other_adviser_products',\n 'facebook',\n 'instagram',\n 'linkedin',\n 'masRepno',\n 'companyCode'\n]\n\nexport class UserMeta extends Meta {\n @RawKey('_oid')\n oid = ''\n\n names = ''\n nric = ''\n fullname = ''\n preferredName = ''\n systemrole = ''\n email = ''\n mobile: number = undefined\n companyCode = ''\n masRepno = ''\n adviserBranch = ''\n status = ''\n\n @Json()\n adviserProducts: string[] = []\n\n otherAdviserProducts = ''\n idDocType = ''\n idNumber = ''\n withExp = ''\n groups: any[] = []\n oldPassword = ''\n newPassword = ''\n confirmPassword = ''\n\n facebook = ''\n instagram = ''\n linkedin = ''\n}\n","import { IRiskRatingService } from '@master/services/IRiskRatingService'\nimport ProductBase from './ProductBase'\nimport { FrequencyType } from '@master/model/options/FrequencyOptions'\nimport { ClientChoiceOptions } from '@master/model/options/ClientChoiceOptions'\n\nexport default class RiderProduct extends ProductBase {\n frequency: '' | FrequencyType = ''\n clientIndex?: 0 | 1 = undefined\n mainProductClientChoice: '' | keyof typeof ClientChoiceOptions = '' // this is used to save its basic product's client choice, used in client choice table\n policyTerm: number = undefined\n premiumTerm: number = undefined\n\n constructor (riskRatingService: IRiskRatingService, basicClientIndex?, basicProductClientChoice?: keyof typeof ClientChoiceOptions) {\n super(riskRatingService)\n // new rider client choice default match basic product\n this.clientChoice = basicProductClientChoice\n this.mainProductClientChoice = basicProductClientChoice\n this.clientIndex = basicClientIndex\n this.type = 'insurance-rider'\n }\n\n extractData(rawData: any, index?: number);\n extractData (rawData: any): {} {\n const data = super.extractData(rawData)\n data.clientIndex = this.clientIndex\n data.mainProductClientChoice = this.mainProductClientChoice\n data.type = 'insurance-rider'\n return data\n }\n}\n","import { Ignore } from '@master/annotation/Ignore'\nimport { RawKey } from '@master/annotation/RawKey'\nimport { Meta } from '@master/model/common/Meta'\n\nexport default class QualificationMeta extends Meta {\n @RawKey('qualification_oid')\n @Ignore()\n oid = ''\n\n nameOfQualification = ''\n attainmentBasis = ''\n institution = ''\n dateYearConferred: number = undefined\n}\n","import { FormBase, signature } from '../FormBase'\n\nexport const SubsidyTypeOptions = [\n { label: '', value: '' },\n { label: 'Examinations', value: 'exam' }\n]\nexport class RecruitSubsidyReimbursementFields {\n submissionDate: number = undefined\n payableTo = ''\n subsidy = 'exam' // options\n exams = [] // options\n totalCosts: number = undefined\n reimbursed: number = undefined\n rndApprovalDate: number = undefined\n // adviserSignature: signature\n // rmSignature: signature\n // bdm: {\n // name = ''\n // signature: signature\n // }\n // hdb: {\n // name = ''\n // signature: signature\n // }\n // finance: {\n // name = ''\n // signature: signature\n // }\n}\nexport class RecruitSubsidyReimbursement extends FormBase {\n // shared.name\n // shared.repCode\n // shared.branch\n // shared.rm\n type = 'recruit-subsidy-reimbursement'\n\n data: RecruitSubsidyReimbursementFields = new RecruitSubsidyReimbursementFields()\n}\n"],"sourceRoot":""}